code: def test_fft(self, dtype):
      _skip_multi_gpu_bug(self.shape, self.gpus)
  
      a = testing.shaped_random(self.shape, numpy, dtype)
  
      if len(self.shape) == 1:
          batch = 1
          nx = self.shape[0]
      elif len(self.shape) == 2:
          batch = self.shape[0]
          nx = self.shape[1]
  
      # compute via cuFFT
      cufft_type = _convert_fft_type(a.dtype, "C2C")
      plan = cufft.Plan1d(
          nx, cufft_type, batch, devices=config._devices
      )
      out_cp = numpy.empty_like(a)
      plan.fft(a, out_cp, cufft.CUFFT_FORWARD)
  
      out_np = numpy.fft.fft(a)
      # np.fft.fft alway returns np.complex128
      if dtype is numpy.complex64:
          out_np = out_np.astype(dtype)
  
      assert numpy.allclose(out_cp, out_np, rtol=1e-4, atol=1e-7)
  
      # compute it again to ensure Plan1d's internal state is reset
      plan.fft(a, out_cp, cufft.CUFFT_FORWARD)
  
      assert numpy.allclose(out_cp, out_np, rtol=1e-4, atol=1e-7)
  
imports: import pickle
  import unittest
  import numpy
  import pytest
  import cupy
  from cupy import testing
  from cupy.cuda import cufft
  from cupy.fft import config
  from cupy.fft._fft import _convert_fft_type
  from ..fft_tests.test_fft import multi_gpu_config, _skip_multi_gpu_bug
label_desc: Use image node_id 1 for calling the TestMultiGpuPlan1dNumPy obj's underlying member method code with example usage: obj.test_fft(dtype) without return types