class FooIndex: def __index__(self): return 5 class FooFloat: def __float__(self): return 5.5 class FooComplex: def __complex__(self): return complex(5, 6) i1 = 1 i2 = 2 f1 = 1.5 f2 = 2.5 c1 = complex(1, 1) c2 = complex(2, 2) s1 = "1+2j" # Lines that should work c = complex(i1, i2) c = complex(f1, i2) c = complex(i1, f2) c = complex(f1, f2) c = complex(i1, c1) c = complex(f1, c1) c = complex(c1, c2) c = complex(s1) c = complex(FooIndex(), i2) c = complex(FooFloat(), i2) c = complex(FooComplex(), i2) c = complex(i1, FooIndex()) c = complex(i1, FooFloat()) c = complex(FooIndex(), FooIndex()) c = complex(FooFloat(), FooFloat()) # Lines that should be an error c = complex(s1, s1) c = complex(i1, FooComplex()) c = complex(FooComplex(), FooComplex()) c = complex(list()) c = complex(dict()) c = complex(object()) c = complex(list(), list())