code: def test_quadruple_operand(func, tensor_cls):
      sp_func = getattr(spsecial, func)
      mt_func = getattr(mt_special, func)
  
      raw1 = np.random.rand(4, 3, 2)
      raw2 = np.random.rand(4, 3, 2)
      raw3 = np.random.rand(4, 3, 2)
      raw4 = np.random.rand(4, 3, 2)
      a = tensor(raw1, chunk_size=3)
      b = tensor(raw2, chunk_size=3)
      c = tensor(raw3, chunk_size=3)
      d = tensor(raw4, chunk_size=3)
  
      r = mt_func(a, b, c, d)
      expect = sp_func(raw1, raw2, raw3, raw4)
  
      assert r.shape == raw1.shape
      assert r.dtype == expect.dtype
  
      tiled_a, r = tile(a, r)
  
      assert r.nsplits == tiled_a.nsplits
      for chunk in r.chunks:
          assert isinstance(chunk.op, tensor_cls)
          assert chunk.index == chunk.inputs[0].index
          assert chunk.shape == chunk.inputs[0].shape
  
file_path: mars/mars/tensor/special/tests/test_special.py
imports: import numpy
  import scipy
  import pytest
  import scipy.special
  from ....lib.version import parse
  from ....core import tile, ExecutableTuple
  from ...None import tensor
  from ...None import special
  from ..err_fresnel import TensorErf, TensorErfc, TensorErfcx, TensorErfi, TensorErfinv, TensorErfcinv, TensorWofz, TensorDawsn, TensorFresnel, TensorModFresnelP, TensorModFresnelM, TensorVoigtProfile
  from ..gamma_funcs import TensorGammaln, TensorBetaInc
  from ..ellip_func_integrals import TensorElliprc, TensorElliprd, TensorElliprf, TensorElliprg, TensorElliprj, TensorEllipk, TensorEllipkm1, TensorEllipkinc, TensorEllipe, TensorEllipeinc
  from ..airy import TensorAiry, TensorAirye, TensorItairy
label_desc: Use image node_id 6 for calling a global function with example usage: test_quadruple_operand(func, tensor_cls) without return types