def test_pair():
    A2 = Tuple[(Bit, Bit)]
    print(A2)
    assert isinstance(A2, TupleMeta)
    print(str(A2))
    assert (A2 == A2)
    B2 = Tuple[(In(Bit), In(Bit))]
    assert isinstance(B2, TupleMeta)
    assert (B2 == B2)
    C2 = Tuple[(Out(Bit), Out(Bit))]
    assert isinstance(C2, TupleMeta)
    assert (C2 == C2)
    assert issubclass(m.In(m.Tuple[(Bit, Bit)]), m.In(m.Tuple[(Bit, Bit)]))
    assert isinstance(m.In(m.Tuple[(Bit, Bit)])(), m.In(m.Tuple[(Bit, Bit)]))
    assert issubclass(m.In(m.Tuple[(Bit, Bit)]), m.Tuple[(Bit, Bit)])
    assert isinstance(m.In(m.Tuple[(Bit, Bit)])(), m.Tuple[(Bit, Bit)])
    assert (not issubclass(m.In(m.Tuple[(Bit, Bit)]), m.Out(m.Tuple[(Bit, Bit)])))
    assert (not isinstance(m.In(m.Tuple[(Bit, Bit)])(), m.Out(m.Tuple[(Bit, Bit)])))
    assert issubclass(m.Out(m.Tuple[(Bit, Bit)]), m.Out(m.Tuple[(Bit, Bit)]))
    assert isinstance(m.Out(m.Tuple[(Bit, Bit)])(), m.Out(m.Tuple[(Bit, Bit)]))
    assert issubclass(m.Out(m.Tuple[(Bit, Bit)]), m.Tuple[(Bit, Bit)])
    assert isinstance(m.Out(m.Tuple[(Bit, Bit)])(), m.Tuple[(Bit, Bit)])
    assert (not issubclass(m.Out(m.Tuple[(Bit, Bit)]), m.In(m.Tuple[(Bit, Bit)])))
    assert (not isinstance(m.Out(m.Tuple[(Bit, Bit)])(), m.In(m.Tuple[(Bit, Bit)])))
def test_pair():
    A2 = Tuple[(Bit, Bit)]
    print(A2)
    assert isinstance(A2, TupleMeta)
    print(str(A2))
    assert (A2 == A2)
    B2 = Tuple[(In(Bit), In(Bit))]
    assert isinstance(B2, TupleMeta)
    assert (B2 == B2)
    C2 = Tuple[(Out(Bit), Out(Bit))]
    assert isinstance(C2, TupleMeta)
    assert (C2 == C2)
    assert issubclass(m.In(m.Tuple[(Bit, Bit)]), m.In(m.Tuple[(Bit, Bit)]))
    assert isinstance(m.In(m.Tuple[(Bit, Bit)])(), m.In(m.Tuple[(Bit, Bit)]))
    assert issubclass(m.In(m.Tuple[(Bit, Bit)]), m.Tuple[(Bit, Bit)])
    assert isinstance(m.In(m.Tuple[(Bit, Bit)])(), m.Tuple[(Bit, Bit)])
    assert (not issubclass(m.In(m.Tuple[(Bit, Bit)]), m.Out(m.Tuple[(Bit, Bit)])))
    assert (not isinstance(m.In(m.Tuple[(Bit, Bit)])(), m.Out(m.Tuple[(Bit, Bit)])))
    assert issubclass(m.Out(m.Tuple[(Bit, Bit)]), m.Out(m.Tuple[(Bit, Bit)]))
    assert isinstance(m.Out(m.Tuple[(Bit, Bit)])(), m.Out(m.Tuple[(Bit, Bit)]))
    assert issubclass(m.Out(m.Tuple[(Bit, Bit)]), m.Tuple[(Bit, Bit)])
    assert isinstance(m.Out(m.Tuple[(Bit, Bit)])(), m.Tuple[(Bit, Bit)])
    assert (not issubclass(m.Out(m.Tuple[(Bit, Bit)]), m.In(m.Tuple[(Bit, Bit)])))
    assert (not isinstance(m.Out(m.Tuple[(Bit, Bit)])(), m.In(m.Tuple[(Bit, Bit)])))