code: def export_gradient_scalar_add_and_mul() -> None:
      add_node = onnx.helper.make_node(
          "Add", ["a", "b"], ["c"], name="my_add"
      )
      mul_node = onnx.helper.make_node(
          "Mul", ["c", "a"], ["d"], name="my_mul"
      )
      gradient_node = onnx.helper.make_node(
          "Gradient",
          ["a", "b"],
          ["dd_da", "dd_db"],
          name="my_gradient",
          domain=AI_ONNX_PREVIEW_TRAINING_DOMAIN,
          xs=["a", "b"],
          y="d",
      )
  
      a = np.array(1.0).astype(np.float32)
      b = np.array(2.0).astype(np.float32)
      c = a + b
      # d = a * c = a * (a + b)
      d = a * c
      # dd / da = d(a*a+a*b) / da = 2 * a + b
      dd_da = (2 * a + b).astype(np.float32)
      # dd / db = d(a*a+a*b) / db = a
      dd_db = a
  
      graph = onnx.helper.make_graph(
          nodes=[add_node, mul_node, gradient_node],
          name="GradientOfTwoOperators",
          inputs=[
              onnx.helper.make_tensor_value_info(
                  "a", onnx.TensorProto.FLOAT, []
              ),
              onnx.helper.make_tensor_value_info(
                  "b", onnx.TensorProto.FLOAT, []
              ),
          ],
          outputs=[
              onnx.helper.make_tensor_value_info(
                  "d", onnx.TensorProto.FLOAT, []
              ),
              onnx.helper.make_tensor_value_info(
                  "dd_da", onnx.TensorProto.FLOAT, []
              ),
              onnx.helper.make_tensor_value_info(
                  "dd_db", onnx.TensorProto.FLOAT, []
              ),
          ],
      )
  
      opsets = [
          onnx.helper.make_operatorsetid(ONNX_DOMAIN, 12),
          onnx.helper.make_operatorsetid(
              AI_ONNX_PREVIEW_TRAINING_DOMAIN, 1
          ),
      ]
      model = onnx.helper.make_model_gen_version(
          graph, producer_name="backend-test", opset_imports=opsets
      )
      expect(
          model,
          inputs=[a, b],
          outputs=[d, dd_da, dd_db],
          name="test_gradient_of_add_and_mul",
      )
  
file_path: onnx/onnx/backend/test/case/model/gradient.py
imports: import numpy
  import onnx
  from onnx.backend.test.case.base import Base
  from onnx.backend.test.case.model import expect
  from onnx.defs import AI_ONNX_PREVIEW_TRAINING_DOMAIN, ONNX_DOMAIN
label_desc: Use image node_id 2 for calling the Gradient obj's underlying member method code with example usage: obj.export_gradient_scalar_add_and_mul() without return types