41
41
from .dpnp_utils_fft import (
42
42
dpnp_fft ,
43
43
dpnp_fftn ,
44
+ dpnp_fillfreq ,
44
45
)
45
46
46
47
__all__ = [
@@ -257,7 +258,9 @@ def fft2(a, s=None, axes=(-2, -1), norm=None, out=None):
257
258
)
258
259
259
260
260
- def fftfreq (n , d = 1.0 , device = None , usm_type = None , sycl_queue = None ):
261
+ def fftfreq (
262
+ n , / , * , d = 1.0 , dtype = None , device = None , usm_type = None , sycl_queue = None
263
+ ):
261
264
"""
262
265
Return the Discrete Fourier Transform sample frequencies.
263
266
@@ -279,6 +282,12 @@ def fftfreq(n, d=1.0, device=None, usm_type=None, sycl_queue=None):
279
282
d : scalar, optional
280
283
Sample spacing (inverse of the sampling rate).
281
284
Default: ``1.0``.
285
+ dtype : {None, str, dtype object}, optional
286
+ The output array data type. Must be a real-valued floating-point data
287
+ type. If `dtype` is ``None``, the output array data type must be the
288
+ default real-valued floating-point data type.
289
+
290
+ Default: ``None``.
282
291
device : {None, string, SyclDevice, SyclQueue, Device}, optional
283
292
An array API concept of device where the output array is created.
284
293
`device` can be ``None``, a oneAPI filter selector string, an instance
@@ -342,23 +351,19 @@ def fftfreq(n, d=1.0, device=None, usm_type=None, sycl_queue=None):
342
351
if not dpnp .isscalar (d ):
343
352
raise ValueError ("`d` should be an scalar" )
344
353
345
- cfd_kwarg = {
346
- "device" : device ,
347
- "usm_type" : usm_type ,
348
- "sycl_queue" : sycl_queue ,
349
- }
354
+ if dtype and not dpnp . issubdtype ( dtype , dpnp . floating ):
355
+ raise ValueError (
356
+ "dtype must a real-valued floating-point data type, "
357
+ f"but got { dtype } "
358
+ )
350
359
351
360
val = 1.0 / (n * d )
352
- results = dpnp .empty (n , dtype = dpnp .intp , ** cfd_kwarg )
361
+ results = dpnp .empty (
362
+ n , dtype = dtype , device = device , usm_type = usm_type , sycl_queue = sycl_queue
363
+ )
353
364
354
365
m = (n - 1 ) // 2 + 1
355
- p1 = dpnp .arange (0 , m , dtype = dpnp .intp , ** cfd_kwarg )
356
-
357
- results [:m ] = p1
358
- p2 = dpnp .arange (m - n , 0 , dtype = dpnp .intp , ** cfd_kwarg )
359
-
360
- results [m :] = p2
361
- return results * val
366
+ return dpnp_fillfreq (results , m , n , val )
362
367
363
368
364
369
def fftn (a , s = None , axes = None , norm = None , out = None ):
@@ -1507,7 +1512,9 @@ def rfft2(a, s=None, axes=(-2, -1), norm=None, out=None):
1507
1512
)
1508
1513
1509
1514
1510
- def rfftfreq (n , d = 1.0 , device = None , usm_type = None , sycl_queue = None ):
1515
+ def rfftfreq (
1516
+ n , / , * , d = 1.0 , dtype = None , device = None , usm_type = None , sycl_queue = None
1517
+ ):
1511
1518
"""
1512
1519
Return the Discrete Fourier Transform sample frequencies
1513
1520
(for usage with :obj:`dpnp.fft.rfft`, :obj:`dpnp.fft.irfft`).
@@ -1533,6 +1540,12 @@ def rfftfreq(n, d=1.0, device=None, usm_type=None, sycl_queue=None):
1533
1540
d : scalar, optional
1534
1541
Sample spacing (inverse of the sampling rate).
1535
1542
Default: ``1.0``.
1543
+ dtype : {None, str, dtype object}, optional
1544
+ The output array data type. Must be a real-valued floating-point data
1545
+ type. If `dtype` is ``None``, the output array data type must be the
1546
+ default real-valued floating-point data type.
1547
+
1548
+ Default: ``None``.
1536
1549
device : {None, string, SyclDevice, SyclQueue, Device}, optional
1537
1550
An array API concept of device where the output array is created.
1538
1551
`device` can be ``None``, a oneAPI filter selector string, an instance
@@ -1598,12 +1611,19 @@ def rfftfreq(n, d=1.0, device=None, usm_type=None, sycl_queue=None):
1598
1611
raise ValueError ("`n` should be an integer" )
1599
1612
if not dpnp .isscalar (d ):
1600
1613
raise ValueError ("`d` should be an scalar" )
1614
+
1615
+ if dtype and not dpnp .issubdtype (dtype , dpnp .floating ):
1616
+ raise ValueError (
1617
+ "dtype must a real-valued floating-point data type, "
1618
+ f"but got { dtype } "
1619
+ )
1620
+
1601
1621
val = 1.0 / (n * d )
1602
1622
m = n // 2 + 1
1603
1623
results = dpnp .arange (
1604
1624
0 ,
1605
1625
m ,
1606
- dtype = dpnp . intp ,
1626
+ dtype = dtype ,
1607
1627
device = device ,
1608
1628
usm_type = usm_type ,
1609
1629
sycl_queue = sycl_queue ,
0 commit comments