code: def test_type_param_sequal():
      t1 = relay.TypeVar("v1", relay.TypeKind.Type)
      t2 = relay.TypeVar("v2", relay.TypeKind.ShapeVar)
      t3 = relay.TypeVar("v3", relay.TypeKind.Type)
  
      # only pointer equality and eq_map allow equal params
      assert t1 == t1
      assert t2 == t2
      assert t1 != t2  # different kind
      assert t1 != t3  # not in eq_map
  
      # function types are the only way to put type params
      # in eq map
      ft1 = relay.FuncType(
          tvm.runtime.convert([]),
          t1,
          tvm.runtime.convert([t1]),
          tvm.runtime.convert([]),
      )
      ft2 = relay.FuncType(
          tvm.runtime.convert([]),
          t3,
          tvm.runtime.convert([t3]),
          tvm.runtime.convert([]),
      )
      # actually an invalid type because t2 is wrong kind
      ft3 = relay.FuncType(
          tvm.runtime.convert([]),
          t2,
          tvm.runtime.convert([t2]),
          tvm.runtime.convert([]),
      )
  
      assert ft1 == ft2
      assert ft1 != ft3
  
imports: import numpy
  import tvm
  import tvm.testing
  from tvm import relay
  from tvm.relay.testing import run_opt_pass
label_desc: Use image node_id 4 for calling a global function with example usage: test_type_param_sequal() without return types