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)
def map_to_type(x): if isinstance(x, TypsyType): return x else: return get_typsy_type(x)