code: def test_backward_no_side_effect(self):
      a = chainer.Variable(np.array(2.3))
      b = chainer.Variable(np.array(4.2))
      x0 = a * b
      x1 = chainer.Variable(np.array(3.7))
      self._test_replace_func(lambda a, b: a * b, [x0, x1])
      # No side-effect to `grad`.
      assert x0.grad is None
      assert x1.grad is None
      assert a.grad is None
      assert b.grad is None
      # Gradient computation must stop at `x0` and `x1`.
      self._test_replace_func(
          lambda a, b: a * b, [x0, x1], set_grad=True
      )
      assert x0.grad is not None
      assert x1.grad is not None
      assert a.grad is None
      assert b.grad is None
  
imports: import os
  import warnings
  import chainer
  import chainer.functions
  import chainer.links
  from chainer import testing
  import numpy
  import onnx
  import pytest
  from onnx_chainer import export
  from onnx_chainer import export_testcase
  from onnx_chainer import onnx_helper
  from onnx_chainer.replace_func import as_funcnode
  from onnx_chainer.replace_func import fake_as_funcnode
  from onnx_chainer.testing import input_generator
  from onnx_chainer_tests.helper import ONNXModelChecker
  from onnx_chainer_tests.helper import ONNXModelTest
label_desc: Use image node_id 5 for calling the TestReplaceFuncBackward obj's underlying member method code with example usage: obj.test_backward_no_side_effect() without return types