code: def same_graph_structure(symnet_observed, symnet_expected, expected):
      nodes_obs = json.loads(
          symnet_observed.tojson(remove_amp_cast=False)
      )["nodes"]
      nodes_exp = json.loads(
          symnet_expected.tojson(remove_amp_cast=False)
      )["nodes"]
      nodes_obs = [(node["op"], node["inputs"]) for node in nodes_obs]
      nodes_exp = [(node["op"], node["inputs"]) for node in nodes_exp]
      assert (len(nodes_obs) == len(nodes_exp)) == expected
      for node_obs, node_exp in zip(nodes_obs, nodes_exp):
          if node_obs != node_exp:
              assert expected == False, "\n".join(
                  [
                      f"{n1} vs {n2}"
                      for n1, n2 in zip(nodes_obs, nodes_exp)
                  ]
              )
              break
  
file_path: mxnet/tests/python/dnnl/subgraphs/test_amp_subgraph.py
imports: import json
  import mxnet
  from mxnet import amp
  from mxnet.gluon import nn
  from mxnet.test_utils import assert_almost_equal
  from subgraph_common import SG_PASS_NAME, QUANTIZE_SG_PASS_NAME
  from test_matmul_subgraph import MultiHeadAttention
  import os
  import sys
  from pathlib import Path
  from amp.common import check_amp_net_stats
label_desc: Use image node_id 1 for calling a global function with example usage: same_graph_structure(symnet_observed, symnet_expected, expected) without return types