code: def test_fft2n_shapes(funcname):
      da_fft = getattr(dask.array.fft, funcname)
      np_fft = getattr(np.fft, funcname)
      assert_eq(da_fft(darr3), np_fft(nparr))
      assert_eq(da_fft(darr3, (8, 9)), np_fft(nparr, (8, 9)))
      assert_eq(
          da_fft(darr3, (8, 9), axes=(1, 0)),
          np_fft(nparr, (8, 9), axes=(1, 0)),
      )
      assert_eq(
          da_fft(darr3, (12, 11), axes=(1, 0)),
          np_fft(nparr, (12, 11), axes=(1, 0)),
      )
  
imports: from __future__ import annotations
  from itertools import combinations_with_replacement
  import numpy
  import pytest
  import dask.array
  import dask.array.fft
  from dask.array.core import normalize_chunks
  from dask.array.fft import fft_wrap
  from dask.array.utils import assert_eq, same_keys
label_desc: Use image node_id 3 for calling a global function with example usage: test_fft2n_shapes(funcname) without return types