code: def test_product():
      # int32 + int64 => int64
      ax1 = CoordinateSystem("x", coord_dtype=np.int32)
      ax2 = CoordinateSystem("y", coord_dtype=np.int64)
      cs = product(ax1, ax2)
      # assert up-casting of dtype
      assert cs.coord_dtype == np.dtype(np.int64)
      # assert composed dtype
      assert cs.dtype == np.dtype([("x", np.int64), ("y", np.int64)])
      # the axes should be typecast in the CoordinateSystem but
      # uneffected themselves
      assert ax1.dtype == np.dtype([("x", np.int32)])
      assert ax2.dtype == np.dtype([("y", np.int64)])
  
      # float32 + int64 => float64
      ax1 = CoordinateSystem("x", coord_dtype=np.float32)
      cs = product(ax1, ax2)
      assert cs.coord_dtype == np.dtype(np.float64)
      assert cs.dtype == np.dtype(
          [("x", np.float64), ("y", np.float64)]
      )
      # int16 + complex64 => complex64
      ax1 = CoordinateSystem("x", coord_dtype=np.int16)
      ax2 = CoordinateSystem("y", coord_dtype=np.complex64)
      # Order of the params effects order of dtype but not resulting value type
      cs = product(ax2, ax1)
      assert cs.coord_dtype == np.complex64
      assert cs.dtype == np.dtype(
          [("y", np.complex64), ("x", np.complex64)]
      )
      # Passing name as argument
      cs = product(ax2, ax1, name="a name")
      assert cs.name == "a name"
      # Anything else as kwarg -> error
      pytest.raises(TypeError, product, ax2, ax1, newarg="a name")
  
imports: from types import SimpleNamespace
  import numpy
  import pytest
  from ..coordinate_system import CoordinateSystem, CoordinateSystemError, CoordSysMaker, CoordSysMakerError, is_coordsys, is_coordsys_maker, product, safe_dtype
label_desc: Use image node_id 16 for calling a global function with example usage: test_product() without return types