Esempio n. 1
0
def test_inference():
    import typsy_python  # @UnusedImport

    @typsy_type('UniformSequence(A) x UniformSequence(B) -> UniformSequence(A x B)')
    def zip1(a, b):
        return zip(a, b)
    
    class UserList(list):
        def get_typsy_type(self):
            from typsy.parsing.parsin import parse_spec
            return parse_spec('UniformSequence(A)')
        
    s1 = UserList([1, 2, 3, 4])
    s2 = UserList([1.1, 2.1, 3.2, 4.3])
    t1 = get_typsy_type(s1)
    t2 = get_typsy_type(s2)
    ftype = get_typsy_type(zip1)
    res1 = ftype(get_typsy_type(s1), get_typsy_type(s2))
    res2 = ftype(s1, s2)
    assert res1 == res2
    
    print('function type: %s' % ftype)
    print('        input: %s, %s' % (t1, t2))
    print('       result: %s' % (res1))
    
    # Now, notice that we shouldn't get
    # => UniformSequence(A x A)
    # because the scope of the variables should be limited
    
    from typsy_python.uniform_sequence import UniformSequence
    assert isinstance(res1, UniformSequence)
    o = res1.o
    from typsy.library.product import ProductSpace
    assert isinstance(o, ProductSpace)
    sp1 = o.spaces[0] 
    sp2 = o.spaces[1]
    print sp1
    print sp2
    assert not sp1 == sp2, (sp1, sp2)
Esempio n. 2
0
 def map_to_type(x):
     if isinstance(x, TypsyType):
         return x
     else:
         return get_typsy_type(x)