diff --git a/pocketfft_hdronly.h b/pocketfft_hdronly.h index b416ff779b00aabb0be268b6c0c4dd4ee7c8c3b5..8b411256d5fc07eda85597a6d06501f01a5b3801 100644 --- a/pocketfft_hdronly.h +++ b/pocketfft_hdronly.h @@ -216,8 +216,6 @@ template<typename T> struct cmplx { cmplx(T r_, T i_) : r(r_), i(i_) {} void Set(T r_, T i_) { r=r_; i=i_; } void Set(T r_) { r=r_; i=T(0); } - void Split(T &r_, T &i_) const { r_=r; i_=i; } - void SplitConj(T &r_, T &i_) const { r_=r; i_=-i; } cmplx &operator+= (const cmplx &other) { r+=other.r; i+=other.i; return *this; } template<typename T2>cmplx &operator*= (T2 other) @@ -3203,11 +3201,17 @@ template<typename T> POCKETFFT_NOINLINE void general_c2r( if (forward) for (; i<len-1; i+=2, ++ii) for (size_t j=0; j<vlen; ++j) - in[it.iofs(j,ii)].SplitConj(tdatav[i][j], tdatav[i+1][j]); + { + tdatav[i ][j] = in[it.iofs(j,ii)].r; + tdatav[i+1][j] = -in[it.iofs(j,ii)].i; + } else for (; i<len-1; i+=2, ++ii) for (size_t j=0; j<vlen; ++j) - in[it.iofs(j,ii)].Split(tdatav[i][j], tdatav[i+1][j]); + { + tdatav[i ][j] = in[it.iofs(j,ii)].r; + tdatav[i+1][j] = in[it.iofs(j,ii)].i; + } if (i<len) for (size_t j=0; j<vlen; ++j) tdatav[i][j] = in[it.iofs(j,ii)].r; @@ -3225,10 +3229,16 @@ template<typename T> POCKETFFT_NOINLINE void general_c2r( size_t i=1, ii=1; if (forward) for (; i<len-1; i+=2, ++ii) - in[it.iofs(ii)].SplitConj(tdata[i], tdata[i+1]); + { + tdata[i ] = in[it.iofs(ii)].r; + tdata[i+1] = -in[it.iofs(ii)].i; + } else for (; i<len-1; i+=2, ++ii) - in[it.iofs(ii)].Split(tdata[i], tdata[i+1]); + { + tdata[i ] = in[it.iofs(ii)].r; + tdata[i+1] = in[it.iofs(ii)].i; + } if (i<len) tdata[i] = in[it.iofs(ii)].r; } diff --git a/pypocketfft.cc b/pypocketfft.cc index b50065cffd384a33107587ebf55cb3cf8fcd3a28..a4880ba8f3c42aefa7d256322980f3968933cdeb 100644 --- a/pypocketfft.cc +++ b/pypocketfft.cc @@ -130,7 +130,7 @@ template<typename T> py::array c2c_internal(const py::array &in, T fct = norm_fct<T>(inorm, dims, axes); pocketfft::c2c(dims, s_in, s_out, axes, forward, d_in, d_out, fct, nthreads); } - return res; + return move(res); } template<typename T> py::array c2c_sym_internal(const py::array &in, @@ -159,7 +159,7 @@ template<typename T> py::array c2c_sym_internal(const py::array &in, iter.advance(); } } - return res; + return move(res); } py::array c2c(const py::array &a, const py::object &axes_, bool forward,