jcrist: > Unsure how to test this

Any way to test using moto, and skip if moto not installed?

If this is hard to test, I'd also be fine merging without.
martindurant: Yeah, moto doesn't disallow writing, even when anonymous, so I don't know what parameters I could pass to s3fs that would have any effect, where as local writes take no parameters at all.
diff --git a/dask/array/fft.py b/dask/array/fft.py
index cfccda548..2f64c94ee 100644
--- a/dask/array/fft.py
+++ b/dask/array/fft.py
@@ -228,9 +228,9 @@ def _fftfreq_helper(n, d=1.0, chunks=None, real=False):
     s = n // 2 + 1 if real else n
     t = l - s
 
-    chunks = _normalize_chunks(chunks, (s,))[0] + (t,)
+    chunks = _normalize_chunks(chunks, (s,))
 
-    r = _linspace(0, 1, l, chunks=chunks)
+    r = _linspace(0, 1, l, chunks=(chunks[0] + (t,),))
 
     if real:
         n_2 = n // 2 + 1
@@ -239,6 +239,9 @@ def _fftfreq_helper(n, d=1.0, chunks=None, real=False):
         n_2 = (n + 1) // 2
         r = _concatenate([r[:n_2], r[n_2:-1] - 1])
 
+    if r.chunks != chunks:
+        r = r.rechunk(chunks)
+
     r /= d
 
     return r
diff --git a/dask/bag/core.py b/dask/bag/core.py
index 1cb43c01b..6cc7a8ab6 100644
--- a/dask/bag/core.py
+++ b/dask/bag/core.py
@@ -118,7 +118,8 @@ def optimize(dsk, keys, fuse_keys=None, rename_fused_keys=True, **kwargs):
 
 
 def to_textfiles(b, path, name_function=None, compression='infer',
-                 encoding=system_encoding, compute=True, get=None):
+                 encoding=system_encoding, compute=True, get=None,
+                 storage_options=None):
     """ Write bag to disk, one filename per partition, one line per element
 
     **Paths**: This will create one file for each partition in your bag. You
@@ -174,7 +175,7 @@ def to_textfiles(b, path, name_function=None, compression='infer',
     """
     from dask import delayed
     writes = write_bytes(b.to_delayed(), path, name_function, compression,
-                         encoding=encoding)
+                         encoding=encoding, **(storage_options or {}))
 
     # Use Bag optimizations on these delayed objects
     dsk = ensure_dict(delayed(writes).dask)
@@ -642,9 +643,10 @@ class Bag(Base):
 
     @wraps(to_textfiles)
     def to_textfiles(self, path, name_function=None, compression='infer',
-                     encoding=system_encoding, compute=True, get=None):
+                     encoding=system_encoding, compute=True, get=None,
+                     storage_options=None):
         return to_textfiles(self, path, name_function, compression, encoding,
-                            compute, get=get)
+                            compute, get=get, storage_options=storage_options)
 
     def fold(self, binop, combine=None, initial=no_default, split_every=None):
         """ Parallelizable reduction
diff --git a/dask/dataframe/io/csv.py b/dask/dataframe/io/csv.py
index 9ceaad2e2..c999aa414 100644
--- a/dask/dataframe/io/csv.py
+++ b/dask/dataframe/io/csv.py
@@ -364,7 +364,7 @@ def _to_csv_chunk(df, **kwargs):
 
 
 def to_csv(df, filename, name_function=None, compression=None, compute=True,
-           get=None, **kwargs):
+           get=None, storage_options=None, **kwargs):
     """
     Store Dask DataFrame to CSV files
 
@@ -472,10 +472,12 @@ def to_csv(df, filename, name_function=None, compression=None, compute=True,
     decimal: string, default '.'
         Character recognized as decimal separator. E.g. use ',' for
         European data
+    storage_options: dict
+        Parameters passed on to the backend filesystem class.
     """
     values = [_to_csv_chunk(d, **kwargs) for d in df.to_delayed()]
     values = write_bytes(values, filename, name_function, compression,
-                         encoding=None)
+                         encoding=None, **(storage_options or {}))
 
     if compute:
         delayed(values).compute(get=get)

Can't specify storage_options for bag.to_textfiles, dataframe.to_csv
The read functions allow specifying `storage_options` for things like AWS key/secret. The `to_parquet` function allows this as well.

However in other cases such as `bag.to_textfiles()` and `dataframe.to_csv()`, it is not possible to specify these options. It would be nice for there to be consistency, since there is no other way to specify some of the options at this time.
diff --git a/dask/array/tests/test_fft.py b/dask/array/tests/test_fft.py
index c02b7fefd..ab6de9560 100644
--- a/dask/array/tests/test_fft.py
+++ b/dask/array/tests/test_fft.py
@@ -9,6 +9,10 @@ import dask.array.fft
 from dask.array.fft import fft_wrap
 from dask.array.utils import assert_eq
 
+from dask.array.core import (
+    normalize_chunks as _normalize_chunks,
+)
+
 
 def same_keys(a, b):
     def key(k):
@@ -202,7 +206,13 @@ def test_wrap_fftns(modname, funcname, dtype):
 @pytest.mark.parametrize("c", [lambda m: m, lambda m: (1, m - 1)])
 def test_fftfreq(n, d, c):
     c = c(n)
-    assert_eq(da.fft.fftfreq(n, d, chunks=c), np.fft.fftfreq(n, d))
+
+    r1 = np.fft.fftfreq(n, d)
+    r2 = da.fft.fftfreq(n, d, chunks=c)
+
+    assert _normalize_chunks(c, r2.shape) == r2.chunks
+
+    assert_eq(r1, r2)
 
 
 @pytest.mark.parametrize("n", [1, 2, 3, 6, 7])
@@ -210,9 +220,13 @@ def test_fftfreq(n, d, c):
 @pytest.mark.parametrize("c", [lambda m: m // 2 + 1, lambda m: (1, m // 2)])
 def test_rfftfreq(n, d, c):
     c = c(n)
-    assert_eq(
-        da.fft.rfftfreq(n, d, chunks=c), np.fft.rfftfreq(n, d)
-    )
+
+    r1 = np.fft.rfftfreq(n, d)
+    r2 = da.fft.rfftfreq(n, d, chunks=c)
+
+    assert _normalize_chunks(c, r2.shape) == r2.chunks
+
+    assert_eq(r1, r2)
 
 
 @pytest.mark.parametrize("funcname", ["fftshift", "ifftshift"])

pip install -e .[complete]
parse_log_pytest
pytest
pytest pytest-xdist
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aiobotocore==2.1.2
aiohttp==3.8.6
aioitertools==0.11.0
aiosignal==1.2.0
async-timeout==4.0.2
asynctest==0.13.0
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
botocore==1.23.24
certifi==2021.5.30
charset-normalizer==3.0.1
click==8.0.4
cloudpickle==2.2.1
-e git+https://github.com/dask/dask.git@37c3ae2e091412f5e2fdf3c957c383e89e4c8bb2#egg=dask
distributed==1.19.3
execnet==1.9.0
frozenlist==1.2.0
fsspec==2022.1.0
HeapDict==1.0.1
idna==3.10
idna-ssl==1.1.0
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
jmespath==0.10.0
locket==1.0.0
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
msgpack-python==0.5.6
multidict==5.2.0
numpy==1.19.5
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pandas==1.1.5
partd==1.2.0
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
psutil==7.0.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
pytest-xdist==3.0.2
python-dateutil==2.9.0.post0
pytz==2025.2
s3fs==2022.1.0
six==1.17.0
sortedcontainers==2.4.0
tblib==1.7.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
toolz==0.12.0
tornado==6.1
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
wrapt==1.16.0
yarl==1.7.2
zict==2.1.0
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: dask
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aiobotocore==2.1.2
      - aiohttp==3.8.6
      - aioitertools==0.11.0
      - aiosignal==1.2.0
      - async-timeout==4.0.2
      - asynctest==0.13.0
      - botocore==1.23.24
      - charset-normalizer==3.0.1
      - click==8.0.4
      - cloudpickle==2.2.1
      - distributed==1.19.3
      - execnet==1.9.0
      - frozenlist==1.2.0
      - fsspec==2022.1.0
      - heapdict==1.0.1
      - idna==3.10
      - idna-ssl==1.1.0
      - jmespath==0.10.0
      - locket==1.0.0
      - msgpack-python==0.5.6
      - multidict==5.2.0
      - numpy==1.19.5
      - pandas==1.1.5
      - partd==1.2.0
      - psutil==7.0.0
      - pytest-xdist==3.0.2
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - s3fs==2022.1.0
      - six==1.17.0
      - sortedcontainers==2.4.0
      - tblib==1.7.0
      - toolz==0.12.0
      - tornado==6.1
      - urllib3==1.26.20
      - wrapt==1.16.0
      - yarl==1.7.2
      - zict==2.1.0
prefix: /opt/conda/envs/dask

dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-1.0-1] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-1.0-2] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-1.0-3] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-1.0-6] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-1.0-7] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-0.5-1] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-0.5-2] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-0.5-3] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-0.5-6] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-0.5-7] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-6.283185307179586-1] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-6.283185307179586-2] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-6.283185307179586-3] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-6.283185307179586-6] dask/array/tests/test_fft.py::test_fftfreq[<lambda>0-6.283185307179586-7] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-1.0-1] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-0.5-1] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-6.283185307179586-1]
dask/array/tests/test_fft.py::test_cant_fft_chunked_axis[fft] dask/array/tests/test_fft.py::test_cant_fft_chunked_axis[ifft] dask/array/tests/test_fft.py::test_cant_fft_chunked_axis[rfft] dask/array/tests/test_fft.py::test_cant_fft_chunked_axis[irfft] dask/array/tests/test_fft.py::test_cant_fft_chunked_axis[hfft] dask/array/tests/test_fft.py::test_cant_fft_chunked_axis[ihfft] dask/array/tests/test_fft.py::test_fft[fft] dask/array/tests/test_fft.py::test_fft[ifft] dask/array/tests/test_fft.py::test_fft[rfft] dask/array/tests/test_fft.py::test_fft[irfft] dask/array/tests/test_fft.py::test_fft[hfft] dask/array/tests/test_fft.py::test_fft[ihfft] dask/array/tests/test_fft.py::test_fft2n_shapes[fft2] dask/array/tests/test_fft.py::test_fft2n_shapes[ifft2] dask/array/tests/test_fft.py::test_fft2n_shapes[fftn] dask/array/tests/test_fft.py::test_fft2n_shapes[ifftn] dask/array/tests/test_fft.py::test_fft2n_shapes[rfft2] dask/array/tests/test_fft.py::test_fft2n_shapes[irfft2] dask/array/tests/test_fft.py::test_fft2n_shapes[rfftn] dask/array/tests/test_fft.py::test_fft2n_shapes[irfftn] dask/array/tests/test_fft.py::test_fft_n_kwarg[fft] dask/array/tests/test_fft.py::test_fft_n_kwarg[ifft] dask/array/tests/test_fft.py::test_fft_n_kwarg[rfft] dask/array/tests/test_fft.py::test_fft_n_kwarg[irfft] dask/array/tests/test_fft.py::test_fft_n_kwarg[hfft] dask/array/tests/test_fft.py::test_fft_n_kwarg[ihfft] dask/array/tests/test_fft.py::test_fft_consistent_names[fft] dask/array/tests/test_fft.py::test_fft_consistent_names[ifft] dask/array/tests/test_fft.py::test_fft_consistent_names[rfft] dask/array/tests/test_fft.py::test_fft_consistent_names[irfft] dask/array/tests/test_fft.py::test_fft_consistent_names[hfft] dask/array/tests/test_fft.py::test_fft_consistent_names[ihfft] dask/array/tests/test_fft.py::test_wrap_bad_kind dask/array/tests/test_fft.py::test_nd_ffts_axes[float32-fft2] dask/array/tests/test_fft.py::test_nd_ffts_axes[float32-ifft2] dask/array/tests/test_fft.py::test_nd_ffts_axes[float32-fftn] dask/array/tests/test_fft.py::test_nd_ffts_axes[float32-ifftn] dask/array/tests/test_fft.py::test_nd_ffts_axes[float32-rfft2] dask/array/tests/test_fft.py::test_nd_ffts_axes[float32-irfft2] dask/array/tests/test_fft.py::test_nd_ffts_axes[float32-rfftn] dask/array/tests/test_fft.py::test_nd_ffts_axes[float32-irfftn] dask/array/tests/test_fft.py::test_nd_ffts_axes[float64-fft2] dask/array/tests/test_fft.py::test_nd_ffts_axes[float64-ifft2] dask/array/tests/test_fft.py::test_nd_ffts_axes[float64-fftn] dask/array/tests/test_fft.py::test_nd_ffts_axes[float64-ifftn] dask/array/tests/test_fft.py::test_nd_ffts_axes[float64-rfft2] dask/array/tests/test_fft.py::test_nd_ffts_axes[float64-irfft2] dask/array/tests/test_fft.py::test_nd_ffts_axes[float64-rfftn] dask/array/tests/test_fft.py::test_nd_ffts_axes[float64-irfftn] dask/array/tests/test_fft.py::test_wrap_ffts[float32-fft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float32-ifft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float32-rfft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float32-irfft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float32-hfft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float32-ihfft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float64-fft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float64-ifft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float64-rfft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float64-irfft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float64-hfft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_ffts[float64-ihfft-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float32-fft2-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float32-ifft2-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float32-fftn-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float32-ifftn-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float32-rfft2-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float32-irfft2-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float32-rfftn-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float32-irfftn-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float64-fft2-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float64-ifft2-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float64-fftn-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float64-ifftn-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float64-rfft2-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float64-irfft2-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float64-rfftn-numpy.fft] dask/array/tests/test_fft.py::test_wrap_fftns[float64-irfftn-numpy.fft] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-1.0-2] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-1.0-3] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-1.0-6] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-1.0-7] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-0.5-2] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-0.5-3] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-0.5-6] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-0.5-7] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-6.283185307179586-2] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-6.283185307179586-3] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-6.283185307179586-6] dask/array/tests/test_fft.py::test_fftfreq[<lambda>1-6.283185307179586-7] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-1.0-1] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-1.0-2] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-1.0-3] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-1.0-6] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-1.0-7] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-0.5-1] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-0.5-2] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-0.5-3] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-0.5-6] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-0.5-7] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-6.283185307179586-1] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-6.283185307179586-2] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-6.283185307179586-3] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-6.283185307179586-6] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>0-6.283185307179586-7] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-1.0-1] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-1.0-2] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-1.0-3] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-1.0-6] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-1.0-7] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-0.5-1] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-0.5-2] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-0.5-3] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-0.5-6] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-0.5-7] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-6.283185307179586-1] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-6.283185307179586-2] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-6.283185307179586-3] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-6.283185307179586-6] dask/array/tests/test_fft.py::test_rfftfreq[<lambda>1-6.283185307179586-7] dask/array/tests/test_fft.py::test_fftshift[None-fftshift] dask/array/tests/test_fft.py::test_fftshift[None-ifftshift] dask/array/tests/test_fft.py::test_fftshift[0-fftshift] dask/array/tests/test_fft.py::test_fftshift[0-ifftshift] dask/array/tests/test_fft.py::test_fftshift[1-fftshift] dask/array/tests/test_fft.py::test_fftshift[1-ifftshift] dask/array/tests/test_fft.py::test_fftshift[2-fftshift] dask/array/tests/test_fft.py::test_fftshift[2-ifftshift] dask/array/tests/test_fft.py::test_fftshift[axes4-fftshift] dask/array/tests/test_fft.py::test_fftshift[axes4-ifftshift] dask/array/tests/test_fft.py::test_fftshift[axes5-fftshift] dask/array/tests/test_fft.py::test_fftshift[axes5-ifftshift] dask/array/tests/test_fft.py::test_fftshift[axes6-fftshift] dask/array/tests/test_fft.py::test_fftshift[axes6-ifftshift] dask/array/tests/test_fft.py::test_fftshift[axes7-fftshift] dask/array/tests/test_fft.py::test_fftshift[axes7-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[None-fftshift-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[None-ifftshift-fftshift] dask/array/tests/test_fft.py::test_fftshift_identity[0-fftshift-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[0-ifftshift-fftshift] dask/array/tests/test_fft.py::test_fftshift_identity[1-fftshift-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[1-ifftshift-fftshift] dask/array/tests/test_fft.py::test_fftshift_identity[2-fftshift-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[2-ifftshift-fftshift] dask/array/tests/test_fft.py::test_fftshift_identity[axes4-fftshift-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[axes4-ifftshift-fftshift] dask/array/tests/test_fft.py::test_fftshift_identity[axes5-fftshift-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[axes5-ifftshift-fftshift] dask/array/tests/test_fft.py::test_fftshift_identity[axes6-fftshift-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[axes6-ifftshift-fftshift] dask/array/tests/test_fft.py::test_fftshift_identity[axes7-fftshift-ifftshift] dask/array/tests/test_fft.py::test_fftshift_identity[axes7-ifftshift-fftshift]
dask/array/fft.py dask/bag/core.py dask/dataframe/io/csv.py
dask/array/fft.py dask/bag/core.py dask/dataframe/io/csv.py