kdrag.reflect.reflect
- kdrag.reflect.reflect(f, globals=None) FuncDeclRef
- Reflect a function definition by injecting the parameters and recursive self call into the local environment. Uses type annotations to do so. - Only handles a purely functional subset of python. Simple assignment is handled as a let who’s scope extends to the end of it’s subbranch. Every branch must end with a return. - You can still call original function under attribute __wrapped__. - >>> def foo(x : int) -> int: ... return x + 3 >>> foo = reflect(foo) >>> foo.__wrapped__(3) 6 >>> foo.defn |= ForAll(x, foo(x) == x + 3) - >>> @reflect ... def bar(x : int, y : str) -> int: ... if x > 4: ... return x + 3 ... elif y == "fred": ... return 14 ... else: ... return bar(x - 1, y) >>> bar.defn |= ForAll([x, y], bar(x, y) == If(4 < x, x + 3, If(y == "fred", 14, bar(x - 1, y)))) >>> @reflect ... def inc_7(n: "int") -> "int": ... return n + 1 >>> inc_7(6) inc_7(6) - Return type:
- FuncDeclRef