docs: def refocus(field, d, nm, res, method="helmholtz", num_cpus=1, padding=True):
      """Refocus a 1D or 2D field
  
  
      Parameters
      ----------
      field : 1d or 2d array
          1D or 2D background corrected electric field (Ex/BEx)
      d : float
          Distance to be propagated in pixels (negative for backwards)
      nm : float
          Refractive index of medium
      res : float
          Wavelenth in pixels
      method : str
          Defines the method of propagation;
          one of
  
              - "helmholtz" : the optical transfer function `exp(idkₘ(M-1))`
              - "fresnel"   : paraxial approximation `exp(idk²/kₘ)`
  
      num_cpus : int
          Not implemented. Only one CPU is used.
      padding : bool
          perform padding with linear ramp from edge to average
          to reduce ringing artifacts.
  
          .. versionadded:: 0.1.4
  
      Returns
      -------
      Electric field at `d`.
      """
      # FFT of field
      fshape = len(field.shape)
      assert fshape in [1, 2], "Dimension of `field` must be 1 or 2."
  
      func = fft_propagate
      names = func.__code__.co_varnames[:func.__code__.co_argcount]
  
      loc = locals()
      vardict = dict()
  
      for name in names:
          if name in loc:
              vardict[name] = loc[name]
  
      if padding:
          field = pad.pad_add(field)
  
      vardict["fftfield"] = np.fft.fftn(field)
  
      refoc = func(**vardict)
  
      if padding:
          refoc = pad.pad_rem(refoc)
  
      return refoc