def test_type_tracking(): pip = scalar_pipeline.with_steps( steps.step_parse, steps.step_infer, steps.step_specialize, steps.step_simplify_types, LocalPassOptimizer(opt_ok1, opt_ok2, opt_err1), steps.step_validate, ) def fn_ok1(x, y): return x + y pip(input=fn_ok1, argspec=(to_abstract_test(i64), to_abstract_test(i64))) def fn_ok2(x): return -x pip(input=fn_ok2, argspec=(to_abstract_test(i64),)) def fn_err1(x, y): return x - y with pytest.raises(ValidationError): pip( input=fn_err1, argspec=(to_abstract_test(i64), to_abstract_test(i64)), )
def test_forward_reference(): def g(): return h() # No resolve parse2 = (scalar_pipeline.with_steps(steps.step_parse).configure( preresolve=False).make_transformer("input", "graph")) parse2(g) def h(): return 2 + 2
def test_type_tracking_2(): pip = scalar_pipeline.with_steps( steps.step_parse, steps.step_infer, steps.step_specialize, steps.step_simplify_types, LocalPassOptimizer(opt_ok1, opt_ok2, opt_err1), steps.step_validate, ) def fn_err3(x, y): return x - y + x with pytest.raises(InferenceError): pip( input=fn_err3, argspec=(to_abstract_test(i64), to_abstract_test(i64)), )
import pytest from myia.abstract import AbstractFunction, TypedPrimitive from myia.operations import partial, primitives as P from myia.pipeline import scalar_parse, scalar_pipeline, steps from myia.testing.common import Point, i64, to_abstract_test from myia.validate import ValidationError, validate, validate_abstract Point_a = Point(i64, i64) pip = scalar_pipeline.with_steps( steps.step_parse, steps.step_infer, steps.step_specialize, steps.step_validate, ) pip_ec = scalar_pipeline.with_steps( steps.step_parse, steps.step_infer, steps.step_specialize, steps.step_simplify_types, steps.step_validate, ) def run(pip, fn, types): res = pip(input=fn, argspec=[to_abstract_test(t) for t in types]) return res["graph"]
from myia.opt import RemoveUnusedParameters from myia.pipeline import scalar_parse, scalar_pipeline, steps ################################### # Test removing unused parameters # ################################### def step_rmunused(resources): while RemoveUnusedParameters(resources.opt_manager).run(): pass rmunused = scalar_pipeline.with_steps( steps.step_parse, steps.step_copy, step_rmunused, ).make_transformer("input", "graph") def test_rmunused_simple(): @rmunused def f1(x, y): def g(z): return x return g(y) @scalar_parse def f2(x, y): def g():