code: def assert_dshape_equal(a, b, path=None, **kwargs):
      assert len(a.argtypes) == len(
          b.argtypes
      ), "functions have different arities: %d != %d\n%r != %r\n%s" % (
          len(a.argtypes),
          len(b.argtypes),
          a,
          b,
          _fmt_path(path),
      )
  
      if path is None:
          path = ()
      for n, (aarg, barg) in enumerate(zip(a.argtypes, b.argtypes)):
          assert_dshape_equal(
              aarg, barg, path=path + (".argtypes[%d]" % n,), **kwargs
          )
      assert_dshape_equal(
          a.restype, b.restype, path=path + (".restype",), **kwargs
      )
  
file_path: datashader/datashader/datashape/util/testing.py
imports: from abc import ABC
  from ..coretypes import DataShape, DateTime, Function, Option, Record, String, Time, TimeDelta, Tuple, Units
  from ..dispatch import dispatch
label_desc: Use image node_id 12 for calling a global function with example usage: assert_dshape_equal(a, b, path) without return types