def METHOD_NAME():
    n, m = tir.Var("n", "int64"), tir.Var("m", "int64")
    s0 = rx.TensorStructInfo([1, n + 1, m], "float32")
    s1 = rx.TensorStructInfo(rx.ShapeExpr([1, n + 1, m]), "float32")
    _check_equal(s0, s1)
    assert s0 == s1
    assert s0.ndim == 3
    assert s1.ndim == 3
    assert isinstance(s0, rx.TensorStructInfo)
    _check_json_roundtrip(s0)
    _check_json_roundtrip(s1)
    s2 = rx.TensorStructInfo(ndim=2, dtype="int32")
    assert s2.ndim == 2
    assert s2.dtype == "int32"
    assert s2.shape is None
    _check_json_roundtrip(s2)
    assert s0 != s2
    # take in opaque var
    rshape = rx.Var("shape", rx.ShapeStructInfo(ndim=2))
    s3 = rx.TensorStructInfo(rshape, dtype="int32")
    assert s3.dtype == "int32"
    assert s3.shape == rshape
    assert s3.ndim == 2
    _check_json_roundtrip(s3)
    # can turn into str
    str(s0)
    # cannot pass both ndim and values
    with pytest.raises(ValueError):
        rx.TensorStructInfo([1, 2], ndim=3)
    # cannot pass both ndim and values even if they are consistent
    with pytest.raises(ValueError):
        rx.TensorStructInfo([1, 2], ndim=2)