@@ -321,7 +321,7 @@ def _fft1d_impl(x, n=None, axis=-1, overwrite_arg=False, direction=+1, double fs
321
321
# so we cast to complex double and operate in place
322
322
try :
323
323
x_arr = < cnp .ndarray > cnp .PyArray_FROM_OTF (
324
- x_arr , cnp .NPY_CDOUBLE , cnp .NPY_BEHAVED )
324
+ x_arr , cnp .NPY_CDOUBLE , cnp .NPY_BEHAVED | cnp . NPY_ENSURECOPY )
325
325
except :
326
326
raise ValueError ("First argument must be a complex or real sequence of single or double precision" )
327
327
x_type = cnp .PyArray_TYPE (x_arr )
@@ -545,7 +545,7 @@ def _rr_fft1d_impl2(x, n=None, axis=-1, overwrite_arg=False, double fsc=1.0):
545
545
else :
546
546
try :
547
547
x_arr = < cnp .ndarray > cnp .PyArray_FROM_OTF (
548
- x_arr , cnp .NPY_DOUBLE , cnp .NPY_BEHAVED )
548
+ x_arr , cnp .NPY_DOUBLE , cnp .NPY_BEHAVED | cnp . NPY_ENSURECOPY )
549
549
except :
550
550
raise TypeError ("1st argument must be a real sequence" )
551
551
x_type = cnp .PyArray_TYPE (x_arr )
@@ -601,7 +601,7 @@ def _rr_ifft1d_impl2(x, n=None, axis=-1, overwrite_arg=False, double fsc=1.0):
601
601
# so we cast to complex double and operate in place
602
602
try :
603
603
x_arr = < cnp .ndarray > cnp .PyArray_FROM_OTF (
604
- x_arr , cnp .NPY_DOUBLE , cnp .NPY_BEHAVED )
604
+ x_arr , cnp .NPY_DOUBLE , cnp .NPY_BEHAVED | cnp . NPY_ENSURECOPY )
605
605
except :
606
606
raise ValueError ("First argument should be a real or a complex sequence of single or double precision" )
607
607
x_type = cnp .PyArray_TYPE (x_arr )
@@ -669,7 +669,7 @@ def _rc_fft1d_impl(x, n=None, axis=-1, overwrite_arg=False, double fsc=1.0):
669
669
else :
670
670
# we must cast the input to doubles and allocate the output,
671
671
try :
672
- requirement = cnp .NPY_BEHAVED
672
+ requirement = cnp .NPY_BEHAVED | cnp . NPY_ENSURECOPY
673
673
if x_type is cnp .NPY_LONGDOUBLE :
674
674
requirement = requirement | cnp .NPY_FORCECAST
675
675
x_arr = < cnp .ndarray > cnp .PyArray_FROM_OTF (
@@ -981,7 +981,14 @@ def _direct_fftnd(x, overwrite_arg=False, direction=+1, double fsc=1.0):
981
981
in_place = 1 # a copy was made, so we can work in place.
982
982
983
983
x_type = cnp .PyArray_TYPE (x_arr )
984
- assert ( x_type == cnp .NPY_CDOUBLE or x_type == cnp .NPY_CFLOAT or x_type == cnp .NPY_DOUBLE or x_type == cnp .NPY_FLOAT );
984
+ if (x_type == cnp .NPY_CDOUBLE or x_type == cnp .NPY_CFLOAT or x_type == cnp .NPY_DOUBLE or x_type == cnp .NPY_FLOAT ):
985
+ pass
986
+ else :
987
+ x_arr = < cnp .ndarray > cnp .PyArray_FROM_OTF (
988
+ x_arr , cnp .NPY_CDOUBLE , cnp .NPY_BEHAVED | cnp .NPY_ENSURECOPY )
989
+ x_type = cnp .PyArray_TYPE (x_arr )
990
+ assert x_type == cnp .NPY_CDOUBLE
991
+ in_place = 1
985
992
986
993
if in_place :
987
994
in_place = 1 if x_type == cnp .NPY_CDOUBLE or x_type == cnp .NPY_CFLOAT else 0
@@ -1076,7 +1083,7 @@ def _fftnd_impl(x, shape=None, axes=None, overwrite_x=False, direction=+1, doubl
1076
1083
if _direct :
1077
1084
return _direct_fftnd (x , overwrite_arg = overwrite_x , direction = direction , fsc = fsc )
1078
1085
else :
1079
- if (shape is None and x .dtype in [np .complex64 , np .complex128 , np .float32 , np .float64 ]):
1086
+ if (shape is None and x .dtype in [np .csingle , np .cdouble , np .single , np .double ]):
1080
1087
x = np .asarray (x )
1081
1088
res = np .empty (x .shape , dtype = _output_dtype (x .dtype ))
1082
1089
return iter_complementary (
0 commit comments