def METHOD_NAME():
    def fn_info(c):
        n, m = tir.Var("n", "int64"), tir.Var("m", "int64")
        x = rx.TensorStructInfo([c, n, m], "float32")
        y = rx.TensorStructInfo([c, n, 1], "float32")
        z = rx.TensorStructInfo([c, n, m], "float32")
        return rx.FuncStructInfo([x, y], z)
    f0 = fn_info(1)
    f1 = fn_info(1)
    f2 = fn_info(2)
    f3 = rx.FuncStructInfo.opaque_func()
    _check_equal(f0, f1)
    assert f0 == f1
    assert f0 != f2
    assert len(f0.params) == 2
    assert isinstance(f0.ret, rx.TensorStructInfo)
    assert f2.derive_func is None
    assert f3.params is None
    assert f3.derive_func is None
    _check_equal(f3.ret, rx.ObjectStructInfo())
    assert isinstance(f0, rx.FuncStructInfo)
    f0 = _check_json_roundtrip(f0)
    f1 = _check_json_roundtrip(f1)
    f2 = _check_json_roundtrip(f2)
    f3 = _check_json_roundtrip(f3)
    # can turn into str
    str(f3)