from _testinternalcapi import compiler_codegen, optimize_cfg, assemble_code_object
import ast
import opcode
import textwrap
import types
a = ast.parse("(x+y)/2", mode='eval')
filename = "myfile.py"
eval_mode = 1 # 0=exec, 1=eval, 2=single
insts, metadata = compiler_codegen(a, filename, 0, eval_mode)
consts = [v[1] for v in sorted([(v, k) for k, v in metadata['consts'].items()])]
insts = optimize_cfg(insts, consts)
from test.test_compiler_assemble import IsolatedAssembleTests
IsolatedAssembleTests().complete_metadata(metadata)
co = assemble_code_object(filename, insts, metadata)
for x,y in [(3, 4), (-100, 200), (10, 18)]:
f = types.FunctionType(co, {'x': x, 'y': y})
print(f'avg of {x} and {y} is {f()}')