# HG changeset patch # User Sunghyun Cho # Date 1334663254 -3600 # Node ID ad1d7a53b1ca0a517c340e6fdc5ab5446c57ac83 # Parent 6250e1232c9cc017fe3d0d87172a3b3a9c873aa0 perform convolution properly independently of matrix orientation (bug #34893) * cconv2.f (cconv2i), csconv2.f (csconv2i), dconv2.f (dconv2i), sconv2.f (sconv2i), zconv2.f (zconv2i), zdconv2.f (zdconv2i): Fix iteration over the a matrix, so it's properly reversed. * conv2.cc: Uncomment test to check for this, and add a new xtest. diff -r 6250e1232c9c -r ad1d7a53b1ca libcruft/blas-xtra/cconv2.f --- a/libcruft/blas-xtra/cconv2.f Wed May 02 17:29:40 2012 -0400 +++ b/libcruft/blas-xtra/cconv2.f Tue Apr 17 12:47:34 2012 +0100 @@ -70,7 +70,7 @@ do k = 1,na-nb+1 do j = 1,nb do i = 1,mb - call caxpy(ma-mb+1,b(i,j),a(mb+1-i,k+j-1),1,c(1,k),1) + call caxpy(ma-mb+1,b(i,j),a(mb+1-i,k+nb-j),1,c(1,k),1) end do end do end do diff -r 6250e1232c9c -r ad1d7a53b1ca libcruft/blas-xtra/csconv2.f --- a/libcruft/blas-xtra/csconv2.f Wed May 02 17:29:40 2012 -0400 +++ b/libcruft/blas-xtra/csconv2.f Tue Apr 17 12:47:34 2012 +0100 @@ -76,7 +76,7 @@ do j = 1,nb do i = 1,mb btmp = b(i,j) - call caxpy(ma-mb+1,btmp,a(mb+1-i,k+j-1),1,c(1,k),1) + call caxpy(ma-mb+1,btmp,a(mb+1-i,k+nb-j),1,c(1,k),1) end do end do end do diff -r 6250e1232c9c -r ad1d7a53b1ca libcruft/blas-xtra/dconv2.f --- a/libcruft/blas-xtra/dconv2.f Wed May 02 17:29:40 2012 -0400 +++ b/libcruft/blas-xtra/dconv2.f Tue Apr 17 12:47:34 2012 +0100 @@ -70,7 +70,7 @@ do k = 1,na-nb+1 do j = 1,nb do i = 1,mb - call daxpy(ma-mb+1,b(i,j),a(mb+1-i,k+j-1),1,c(1,k),1) + call daxpy(ma-mb+1,b(i,j),a(mb+1-i,k+nb-j),1,c(1,k),1) end do end do end do diff -r 6250e1232c9c -r ad1d7a53b1ca libcruft/blas-xtra/sconv2.f --- a/libcruft/blas-xtra/sconv2.f Wed May 02 17:29:40 2012 -0400 +++ b/libcruft/blas-xtra/sconv2.f Tue Apr 17 12:47:34 2012 +0100 @@ -70,7 +70,7 @@ do k = 1,na-nb+1 do j = 1,nb do i = 1,mb - call saxpy(ma-mb+1,b(i,j),a(mb+1-i,k+j-1),1,c(1,k),1) + call saxpy(ma-mb+1,b(i,j),a(mb+1-i,k+nb-j),1,c(1,k),1) end do end do end do diff -r 6250e1232c9c -r ad1d7a53b1ca libcruft/blas-xtra/zconv2.f --- a/libcruft/blas-xtra/zconv2.f Wed May 02 17:29:40 2012 -0400 +++ b/libcruft/blas-xtra/zconv2.f Tue Apr 17 12:47:34 2012 +0100 @@ -70,7 +70,7 @@ do k = 1,na-nb+1 do j = 1,nb do i = 1,mb - call zaxpy(ma-mb+1,b(i,j),a(mb+1-i,k+j-1),1,c(1,k),1) + call zaxpy(ma-mb+1,b(i,j),a(mb+1-i,k+nb-j),1,c(1,k),1) end do end do end do diff -r 6250e1232c9c -r ad1d7a53b1ca libcruft/blas-xtra/zdconv2.f --- a/libcruft/blas-xtra/zdconv2.f Wed May 02 17:29:40 2012 -0400 +++ b/libcruft/blas-xtra/zdconv2.f Tue Apr 17 12:47:34 2012 +0100 @@ -76,7 +76,7 @@ do j = 1,nb do i = 1,mb btmp = b(i,j) - call zaxpy(ma-mb+1,btmp,a(mb+1-i,k+j-1),1,c(1,k),1) + call zaxpy(ma-mb+1,btmp,a(mb+1-i,k+nb-j),1,c(1,k),1) end do end do end do diff -r 6250e1232c9c -r ad1d7a53b1ca src/DLD-FUNCTIONS/conv2.cc --- a/src/DLD-FUNCTIONS/conv2.cc Wed May 02 17:29:40 2012 -0400 +++ b/src/DLD-FUNCTIONS/conv2.cc Tue Apr 17 12:47:34 2012 +0100 @@ -262,9 +262,18 @@ %% Test cases from Bug #34893 %!assert (conv2 ([1:5;1:5], [1:2], 'same'), [4 7 10 13 10; 4 7 10 13 10]) %!assert (conv2 ([1:5;1:5]', [1:2]', 'same'), [4 7 10 13 10; 4 7 10 13 10]') -%!#assert (conv2 ([1:5;1:5], [1:2], 'valid'), [4 7 10 13; 4 7 10 13]) +%!assert (conv2 ([1:5;1:5], [1:2], 'valid'), [4 7 10 13; 4 7 10 13]) %!assert (conv2 ([1:5;1:5]', [1:2]', 'valid'), [4 7 10 13; 4 7 10 13]') +%!xtest +%! rand ("seed", 42); +%! x = rand (100); +%! y = ones (5); +%! A = conv2 (x, y)(5:end-4,5:end-4); +%! B = conv2 (x, y, "valid"); +%! assert (B, A); ## Yes, this test is for *exact* equivalence. + + %% Test input validation %!error conv2 () %!error conv2 (1)