code: def test_ndarray_arithmetic_matmul_ops(seed, shape, is_dynamic):
      rng = np.random.RandomState(seed)
      a1 = rng.randn(*shape[0]).astype(np.float32)
      a2 = rng.randn(*shape[1]).astype(np.float32)
      n1 = nn.NdArray.from_numpy_array(a1)
      n2 = nn.NdArray.from_numpy_array(a2)
      v1 = nn.Variable.from_numpy_array(a1)
      v2 = nn.Variable.from_numpy_array(a2)
  
      ref = a1 @ a2
  
      # NdArray @ NdArray
      ans1 = n1 @ n2
      assert_allclose(ref, ans1.data, atol=1e-5)
  
      # NdArray @ Variable
      ans2 = n1 @ v2
      assert_allclose(ref, ans2.data, atol=1e-5)
  
      # Variable @ NdArray
      ans3 = v1 @ n2
      assert_allclose(ref, ans3.data, atol=1e-5)
  
      # Variable @ Variable
      with nn.auto_forward(is_dynamic):
          ans4 = v1 @ v2
          if not is_dynamic:
              ans4.forward()
          assert_allclose(ref, ans4.d, atol=1e-5)
  
imports: import pytest
  import numpy
  import nnabla
  from nnabla.testing import assert_allclose
label_desc: Use image node_id 1 for calling a global function with example usage: test_ndarray_arithmetic_matmul_ops(seed, shape, is_dynamic) without return types