diff options
Diffstat (limited to 'contrib/python/pythran/pythran/pythonic/numpy/fft/c2c.hpp')
| -rw-r--r-- | contrib/python/pythran/pythran/pythonic/numpy/fft/c2c.hpp | 86 |
1 files changed, 33 insertions, 53 deletions
diff --git a/contrib/python/pythran/pythran/pythonic/numpy/fft/c2c.hpp b/contrib/python/pythran/pythran/pythonic/numpy/fft/c2c.hpp index bb84da4eaa3..1f7f0e7dfa2 100644 --- a/contrib/python/pythran/pythran/pythonic/numpy/fft/c2c.hpp +++ b/contrib/python/pythran/pythran/pythonic/numpy/fft/c2c.hpp @@ -24,14 +24,11 @@ namespace numpy { using pocketfft::shape_t; using pocketfft::stride_t; - using ldbl_t = - typename std::conditional<sizeof(long double) == sizeof(double), double, - long double>::type; + using ldbl_t = std::conditional_t<sizeof(long double) == sizeof(double), double, long double>; template <class T, class pS> - types::ndarray< - typename std::enable_if<std::is_integral<T>::value, double>::type, - types::array_tuple<long, std::tuple_size<pS>::value>> + types::ndarray<std::enable_if_t<std::is_integral<T>::value, double>, + types::array_tuple<long, std::tuple_size<pS>::value>> _copy_to_double(types::ndarray<T, pS> const &in_array) { auto out_shape = sutils::getshape(in_array); @@ -42,29 +39,25 @@ namespace numpy } template <class T, class pS> - types::ndarray<typename std::enable_if<std::is_floating_point<T>::value, - std::complex<T>>::type, + types::ndarray<std::enable_if_t<std::is_floating_point<T>::value, std::complex<T>>, types::array_tuple<long, std::tuple_size<pS>::value>> _copy_to_complex(types::ndarray<T, pS> const &in_array) { auto out_shape = sutils::getshape(in_array); size_t l = in_array.flat_size(); - auto out_array = - numpy::empty(out_shape, types::dtype_t<typename std::complex<T>>()); + auto out_array = numpy::empty(out_shape, types::dtype_t<typename std::complex<T>>()); std::copy(in_array.buffer, in_array.buffer + l, out_array.buffer); return out_array; } template <class T, class pS> - types::ndarray<typename std::enable_if<std::is_integral<T>::value, - std::complex<double>>::type, + types::ndarray<std::enable_if_t<std::is_integral<T>::value, std::complex<double>>, types::array_tuple<long, std::tuple_size<pS>::value>> _copy_to_complex(types::ndarray<T, pS> const &in_array) { auto out_shape = sutils::getshape(in_array); size_t l = in_array.flat_size(); - auto out_array = numpy::empty( - out_shape, types::dtype_t<typename std::complex<double>>()); + auto out_array = numpy::empty(out_shape, types::dtype_t<typename std::complex<double>>()); std::copy(in_array.buffer, in_array.buffer + l, out_array.buffer); return out_array; } @@ -102,8 +95,8 @@ namespace numpy } template <typename T> - T norm_fct(Inorm inorm, const shape_t &shape, const shape_t &axes, - size_t fct = 1, int delta = 0) + T norm_fct(Inorm inorm, const shape_t &shape, const shape_t &axes, size_t fct = 1, + int delta = 0) { // Fast path if (inorm == Inorm::forward) @@ -122,8 +115,8 @@ namespace numpy auto shape = sutils::getshape(in_array); stride_t strides = stride_t(N); strides[N - 1] = sizeof(T); - std::transform(strides.rbegin(), strides.rend() - 1, shape.rbegin(), - strides.rbegin() + 1, std::multiplies<long>()); + std::transform(strides.rbegin(), strides.rend() - 1, shape.rbegin(), strides.rbegin() + 1, + std::multiplies<long>()); return strides; } @@ -131,14 +124,11 @@ namespace numpy types::ndarray<T, types::array_tuple<long, std::tuple_size<pS>::value>> _pad_in_array(types::ndarray<T, pS> const &in_array, long axis, long n) { - types::ndarray<T, types::array_tuple<long, std::tuple_size<pS>::value>> - extended_array; + types::ndarray<T, types::array_tuple<long, std::tuple_size<pS>::value>> extended_array; auto tmp_shape = sutils::getshape(in_array); tmp_shape[axis] = n; auto tmp_array = zeros(tmp_shape, types::dtype_t<T>()); - types::list<types::ndarray< - T, types::array_tuple<long, std::tuple_size<pS>::value>>> - bi(0); + types::list<types::ndarray<T, types::array_tuple<long, std::tuple_size<pS>::value>>> bi(0); bi.push_back(in_array); bi.push_back(tmp_array); extended_array = concatenate(bi, axis); @@ -161,11 +151,10 @@ namespace numpy auto out_shape = sutils::getshape(in_array); out_shape[axis] = n; // Create output array. - types::ndarray<T, types::array_tuple<long, std::tuple_size<pS>::value>> - out_array(out_shape, builtins::None); + types::ndarray<T, types::array_tuple<long, std::tuple_size<pS>::value>> out_array( + out_shape, builtins::None); std::complex<T> *d_in; - types::ndarray<std::complex<T>, - types::array_tuple<long, std::tuple_size<pS>::value>> + types::ndarray<std::complex<T>, types::array_tuple<long, std::tuple_size<pS>::value>> extended_array; stride_t in_strides; auto out_strides = create_strides(out_array); @@ -175,8 +164,8 @@ namespace numpy in_strides = create_strides(extended_array); d_in = reinterpret_cast<std::complex<T> *>(extended_array.buffer); } else { - in_strides = create_strides( - in_array); // for cropped arrays we need to use different strides + in_strides = + create_strides(in_array); // for cropped arrays we need to use different strides d_in = reinterpret_cast<std::complex<T> *>(in_array.buffer); } auto d_out = reinterpret_cast<T *>(out_array.buffer); @@ -186,14 +175,12 @@ namespace numpy shape_t shapes = shape_t(size_t(N)); std::copy(out_shape.begin(), out_shape.begin() + N, shapes.begin()); auto fct = norm_fct<T>(inorm, shapes, axes); - pocketfft::c2r(shapes, in_strides, out_strides, axes, forward, d_in, - d_out, fct, size_t(0)); + pocketfft::c2r(shapes, in_strides, out_strides, axes, forward, d_in, d_out, fct, size_t(0)); return out_array; } template <class T, class pS> - types::ndarray<std::complex<T>, - types::array_tuple<long, std::tuple_size<pS>::value>> + types::ndarray<std::complex<T>, types::array_tuple<long, std::tuple_size<pS>::value>> c2c(types::ndarray<std::complex<T>, pS> const &in_array, long n, long axis, types::str const &norm, bool forward) { @@ -208,12 +195,10 @@ namespace numpy auto out_shape = sutils::getshape(in_array); out_shape[axis] = n; // Create output array. - types::ndarray<std::complex<T>, - types::array_tuple<long, std::tuple_size<pS>::value>> + types::ndarray<std::complex<T>, types::array_tuple<long, std::tuple_size<pS>::value>> out_array(out_shape, builtins::None); std::complex<T> *d_in; - types::ndarray<std::complex<T>, - types::array_tuple<long, std::tuple_size<pS>::value>> + types::ndarray<std::complex<T>, types::array_tuple<long, std::tuple_size<pS>::value>> extended_array; stride_t in_strides; if (n > npts) { @@ -223,8 +208,8 @@ namespace numpy in_strides = create_strides(extended_array); // } else { d_in = reinterpret_cast<std::complex<T> *>(in_array.buffer); - in_strides = create_strides( - in_array); // for cropped arrays we need to use different strides + in_strides = + create_strides(in_array); // for cropped arrays we need to use different strides } auto d_out = reinterpret_cast<std::complex<T> *>(out_array.buffer); // axes calculation is for 1D transform @@ -235,17 +220,15 @@ namespace numpy for (size_t i = 0; i < N; ++i) shapes[i] = size_t(out_shape[i]); auto fct = norm_fct<T>(inorm, shapes, axes); - pocketfft::c2c(shapes, in_strides, out_strides, axes, forward, d_in, - d_out, fct, size_t(0)); + pocketfft::c2c(shapes, in_strides, out_strides, axes, forward, d_in, d_out, fct, size_t(0)); return out_array; } template <class T, class pS> - types::ndarray<typename std::enable_if<std::is_floating_point<T>::value, - std::complex<T>>::type, + types::ndarray<std::enable_if_t<std::is_floating_point<T>::value, std::complex<T>>, types::array_tuple<long, std::tuple_size<pS>::value>> - r2c(types::ndarray<T, pS> const &in_array, long n, long axis, - types::str const &norm, bool forward, bool extend = true) + r2c(types::ndarray<T, pS> const &in_array, long n, long axis, types::str const &norm, + bool forward, bool extend = true) { auto constexpr N = std::tuple_size<pS>::value; Inorm inorm = _get_inorm(norm, forward); @@ -262,12 +245,10 @@ namespace numpy out_shape[axis] = n / 2 + 1; } // Create output array. - types::ndarray<std::complex<T>, - types::array_tuple<long, std::tuple_size<pS>::value>> + types::ndarray<std::complex<T>, types::array_tuple<long, std::tuple_size<pS>::value>> out_array(out_shape, builtins::None); T *d_in; - types::ndarray<T, types::array_tuple<long, std::tuple_size<pS>::value>> - extended_array; + types::ndarray<T, types::array_tuple<long, std::tuple_size<pS>::value>> extended_array; shape_t shapes = shape_t(size_t(N)); stride_t in_strides; if (n > npts) { @@ -281,8 +262,8 @@ namespace numpy d_in = reinterpret_cast<T *>(in_array.buffer); in_shape[axis] = n; std::copy(in_shape.begin(), in_shape.begin() + N, shapes.begin()); - in_strides = create_strides( - in_array); // for cropped arrays we need to use different strides + in_strides = + create_strides(in_array); // for cropped arrays we need to use different strides } auto d_out = reinterpret_cast<std::complex<T> *>(out_array.buffer); // axes calculation is for 1D transform @@ -290,8 +271,7 @@ namespace numpy axes[0] = axis; auto out_strides = create_strides(out_array); auto fct = norm_fct<T>(inorm, shapes, axes); - pocketfft::r2c(shapes, in_strides, out_strides, axes, forward, d_in, - d_out, fct, size_t(0)); + pocketfft::r2c(shapes, in_strides, out_strides, axes, forward, d_in, d_out, fct, size_t(0)); if (extend) { using namespace pocketfft::detail; ndarr<std::complex<T>> ares(out_array.buffer, shapes, out_strides); |
