code: def sepfir2d(input, hrow, hcol):
      """Convolve with a 2-D separable FIR filter.
  
      Convolve the rank-2 input array with the separable filter defined by the
      rank-1 arrays hrow, and hcol. Mirror symmetric boundary conditions are
      assumed. This function can be used to find an image given its B-spline
      representation.
  
      The arguments `hrow` and `hcol` must be 1-dimensional and of off length.
  
      Args:
          input (cupy.ndarray): The input signal
          hrow (cupy.ndarray): Row direction filter
          hcol (cupy.ndarray): Column direction filter
  
      Returns:
          cupy.ndarray: The filtered signal
  
      .. seealso:: :func:`scipy.signal.sepfir2d`
      """
      if any(x.ndim != 1 or x.size % 2 == 0 for x in (hrow, hcol)):
          raise ValueError(
              "hrow and hcol must be 1 dimensional and odd length"
          )
      dtype = input.dtype
      if dtype.kind == "c":
          dtype = (
              cupy.complex64
              if dtype == cupy.complex64
              else cupy.complex128
          )
      elif dtype == cupy.float32 or dtype.itemsize <= 2:
          dtype = cupy.float32
      else:
          dtype = cupy.float64
      input = input.astype(dtype, copy=False)
      hrow = hrow.astype(dtype, copy=False)
      hcol = hcol.astype(dtype, copy=False)
      filters = (hcol[::-1].conj(), hrow[::-1].conj())
      return cupyx.scipy.ndimage._filters._run_1d_correlates(
          input, (0, 1), lambda i: filters[i], None, "reflect", 0
      )
  
imports: import cupy
  import cupyx.scipy.ndimage
  from cupyx.scipy.signal._iir_utils import apply_iir_sos
  from cupyx.scipy.signal._splines import _symiirorder1_nd, _symiirorder2_nd
  from cupyx.scipy.interpolate._bspline import BSpline
  import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: sepfir2d(input, hrow, hcol) and returns: cupyx