def test_mappers(): from pymbolic import variables f, x, y, z = variables("f x y z") for expr in [f(x, (y, z), name=z**2)]: from pymbolic.mapper import WalkMapper from pymbolic.mapper.dependency import DependencyMapper str(expr) IdentityMapper()(expr) WalkMapper()(expr) DependencyMapper()(expr)
def test_parser(): from pymbolic import parse parse("(2*a[1]*b[1]+2*a[0]*b[0])*(hankel_1(-1,sqrt(a[1]**2+a[0]**2)*k) " "-hankel_1(1,sqrt(a[1]**2+a[0]**2)*k))*k /(4*sqrt(a[1]**2+a[0]**2)) " "+hankel_1(0,sqrt(a[1]**2+a[0]**2)*k)") print(repr(parse("d4knl0"))) print(repr(parse("0."))) print(repr(parse("0.e1"))) assert parse("0.e1") == 0 assert parse("1e-12") == 1e-12 print(repr(parse("a >= 1"))) print(repr(parse("a <= 1"))) print(repr(parse(":"))) print(repr(parse("1:"))) print(repr(parse(":2"))) print(repr(parse("1:2"))) print(repr(parse("::"))) print(repr(parse("1::"))) print(repr(parse(":1:"))) print(repr(parse("::1"))) print(repr(parse("3::1"))) print(repr(parse(":5:1"))) print(repr(parse("3:5:1"))) print(repr(parse("g[i,k]+2.0*h[i,k]"))) print(repr(parse("g[i,k]+(+2.0)*h[i,k]"))) print(repr(parse("a - b - c"))) print(repr(parse("-a - -b - -c"))) print(repr(parse("- - - a - - - - b - - - - - c"))) print(repr(parse("~(a ^ b)"))) print(repr(parse("(a | b) | ~(~a & ~b)"))) print(repr(parse("3 << 1"))) print(repr(parse("1 >> 3"))) print(parse("3::1")) assert parse("e1") == prim.Variable("e1") assert parse("d1") == prim.Variable("d1") from pymbolic import variables f, x, y, z = variables("f x y z") assert parse("f((x,y),z)") == f((x, y), z) assert parse("f((x,),z)") == f((x, ), z) assert parse("f(x,(y,z),z)") == f(x, (y, z), z) assert parse("f(x,(y,z),z, name=15)") == f(x, (y, z), z, name=15) assert parse("f(x,(y,z),z, name=15, name2=17)") == f(x, (y, z), z, name=15, name2=17)
def test_mappers(): from pymbolic import variables f, x, y, z = variables("f x y z") for expr in [ f(x, (y, z), name=z**2) ]: from pymbolic.mapper import WalkMapper from pymbolic.mapper.dependency import DependencyMapper str(expr) IdentityMapper()(expr) WalkMapper()(expr) DependencyMapper()(expr)
def test_parser(): from pymbolic import parse parse("(2*a[1]*b[1]+2*a[0]*b[0])*(hankel_1(-1,sqrt(a[1]**2+a[0]**2)*k) " "-hankel_1(1,sqrt(a[1]**2+a[0]**2)*k))*k /(4*sqrt(a[1]**2+a[0]**2)) " "+hankel_1(0,sqrt(a[1]**2+a[0]**2)*k)") print(repr(parse("d4knl0"))) print(repr(parse("0."))) print(repr(parse("0.e1"))) assert parse("0.e1") == 0 assert parse("1e-12") == 1e-12 print(repr(parse("a >= 1"))) print(repr(parse("a <= 1"))) print(repr(parse(":"))) print(repr(parse("1:"))) print(repr(parse(":2"))) print(repr(parse("1:2"))) print(repr(parse("::"))) print(repr(parse("1::"))) print(repr(parse(":1:"))) print(repr(parse("::1"))) print(repr(parse("3::1"))) print(repr(parse(":5:1"))) print(repr(parse("3:5:1"))) print(repr(parse("g[i,k]+2.0*h[i,k]"))) print(repr(parse("g[i,k]+(+2.0)*h[i,k]"))) print(repr(parse("a - b - c"))) print(repr(parse("-a - -b - -c"))) print(repr(parse("- - - a - - - - b - - - - - c"))) print(repr(parse("~(a ^ b)"))) print(repr(parse("(a | b) | ~(~a & ~b)"))) print(repr(parse("3 << 1"))) print(repr(parse("1 >> 3"))) print(parse("3::1")) assert parse("e1") == prim.Variable("e1") assert parse("d1") == prim.Variable("d1") from pymbolic import variables f, x, y, z = variables("f x y z") assert parse("f((x,y),z)") == f((x, y), z) assert parse("f((x,),z)") == f((x,), z) assert parse("f(x,(y,z),z)") == f(x, (y, z), z) assert parse("f(x,(y,z),z, name=15)") == f(x, (y, z), z, name=15) assert parse("f(x,(y,z),z, name=15, name2=17)") == f( x, (y, z), z, name=15, name2=17)
def test_parser(): from pymbolic import var from dagrt.expression import parse parse("(2*a[1]*b[1]+2*a[0]*b[0])*(hankel_1(-1,sqrt(a[1]**2+a[0]**2)*k) " "-hankel_1(1,sqrt(a[1]**2+a[0]**2)*k))*k /(4*sqrt(a[1]**2+a[0]**2)) " "+hankel_1(0,sqrt(a[1]**2+a[0]**2)*k)") print(repr(parse("d4knl0"))) print(repr(parse("0."))) print(repr(parse("0.e1"))) assert parse("0.e1") == 0 assert parse("1e-12") == 1e-12 print(repr(parse("a >= 1"))) print(repr(parse("a <= 1"))) print(repr(parse("g[i,k]+2.0*h[i,k]"))) print(repr(parse("g[i,k]+(+2.0)*h[i,k]"))) print(repr(parse("a - b - c"))) print(repr(parse("-a - -b - -c"))) print(repr(parse("- - - a - - - - b - - - - - c"))) print(repr(parse("~(a ^ b)"))) print(repr(parse("(a | b) | ~(~a & ~b)"))) print(repr(parse("3 << 1"))) print(repr(parse("1 >> 3"))) print(parse("3::1")) import pymbolic.primitives as prim assert parse("e1") == prim.Variable("e1") assert parse("d1") == prim.Variable("d1") from pymbolic import variables f, x, y, z = variables("f x y z") assert parse("f((x,y),z)") == f((x, y), z) assert parse("f((x,),z)") == f((x, ), z) assert parse("f(x,(y,z),z)") == f(x, (y, z), z) assert parse("f(x,(y,z),z, name=15)") == f(x, (y, z), z, name=15) assert parse("f(x,(y,z),z, name=15, name2=17)") == f(x, (y, z), z, name=15, name2=17) assert parse("<func>yoink") == var("<func>yoink") assert parse("-< func > yoink") == -var("<func>yoink") print(repr(parse("<func>yoink < <p>x"))) print(repr(parse("<func>yoink < - <p>x")))
def test_parser(): from pymbolic import parse parse("(2*a[1]*b[1]+2*a[0]*b[0])*(hankel_1(-1,sqrt(a[1]**2+a[0]**2)*k) " "-hankel_1(1,sqrt(a[1]**2+a[0]**2)*k))*k /(4*sqrt(a[1]**2+a[0]**2)) " "+hankel_1(0,sqrt(a[1]**2+a[0]**2)*k)") print(repr(parse("d4knl0"))) print(repr(parse("0."))) print(repr(parse("0.e1"))) assert parse("0.e1") == 0 assert parse("1e-12") == 1e-12 print(repr(parse("a >= 1"))) print(repr(parse("a <= 1"))) print(repr(parse(":"))) print(repr(parse("1:"))) print(repr(parse(":2"))) print(repr(parse("1:2"))) print(repr(parse("::"))) print(repr(parse("1::"))) print(repr(parse(":1:"))) print(repr(parse("::1"))) print(repr(parse("3::1"))) print(repr(parse(":5:1"))) print(repr(parse("3:5:1"))) def assert_parse_roundtrip(expr_str): expr = parse(expr_str) from pymbolic.mapper.stringifier import StringifyMapper strified = StringifyMapper()(expr) assert strified == expr_str, (strified, expr_str) def assert_parsed_same_as_python(expr_str): # makes sure that has only one line expr_str, = expr_str.split('\n') from pymbolic.interop.ast import ASTToPymbolic import ast ast2p = ASTToPymbolic() try: expr_parsed_by_python = ast2p(ast.parse(expr_str).body[0].value) except SyntaxError: with pytest.raises(ParseError): parse(expr_str) else: expr_parsed_by_pymbolic = parse(expr_str) assert expr_parsed_by_python == expr_parsed_by_pymbolic assert_parse_roundtrip("()") assert_parse_roundtrip("(3,)") assert_parse_roundtrip("[x + 3, 3, 5]") # FIXME: trailing commas not allowed # assert parse("[x + 3, 3, 5]") == parse("[x + 3, 3, 5]") assert_parse_roundtrip("[]") assert_parse_roundtrip("[x]") assert_parse_roundtrip("g[i, k] + 2.0*h[i, k]") parse("g[i,k]+(+2.0)*h[i, k]") print(repr(parse("a - b - c"))) print(repr(parse("-a - -b - -c"))) print(repr(parse("- - - a - - - - b - - - - - c"))) print(repr(parse("~(a ^ b)"))) print(repr(parse("(a | b) | ~(~a & ~b)"))) print(repr(parse("3 << 1"))) print(repr(parse("1 >> 3"))) print(parse("3::1")) assert parse("e1") == prim.Variable("e1") assert parse("d1") == prim.Variable("d1") from pymbolic import variables f, x, y, z = variables("f x y z") assert parse("f((x,y),z)") == f((x, y), z) assert parse("f((x,),z)") == f((x, ), z) assert parse("f(x,(y,z),z)") == f(x, (y, z), z) assert parse("f(x,(y,z),z, name=15)") == f(x, (y, z), z, name=15) assert parse("f(x,(y,z),z, name=15, name2=17)") == f(x, (y, z), z, name=15, name2=17) assert_parsed_same_as_python('5+i if i>=0 else (0 if i<-1 else 10)') assert_parsed_same_as_python("0 if 1 if 2 else 3 else 4") assert_parsed_same_as_python("0 if (1 if 2 else 3) else 4") with pytest.deprecated_call(): parse('1+if(0, 1, 2)')
def test_parser(): from pymbolic import parse parse("(2*a[1]*b[1]+2*a[0]*b[0])*(hankel_1(-1,sqrt(a[1]**2+a[0]**2)*k) " "-hankel_1(1,sqrt(a[1]**2+a[0]**2)*k))*k /(4*sqrt(a[1]**2+a[0]**2)) " "+hankel_1(0,sqrt(a[1]**2+a[0]**2)*k)") print(repr(parse("d4knl0"))) print(repr(parse("0."))) print(repr(parse("0.e1"))) assert parse("0.e1") == 0 assert parse("1e-12") == 1e-12 print(repr(parse("a >= 1"))) print(repr(parse("a <= 1"))) print(repr(parse(":"))) print(repr(parse("1:"))) print(repr(parse(":2"))) print(repr(parse("1:2"))) print(repr(parse("::"))) print(repr(parse("1::"))) print(repr(parse(":1:"))) print(repr(parse("::1"))) print(repr(parse("3::1"))) print(repr(parse(":5:1"))) print(repr(parse("3:5:1"))) assert_parse_roundtrip("()") assert_parse_roundtrip("(3,)") assert_parse_roundtrip("[x + 3, 3, 5]") # FIXME: trailing commas not allowed # assert parse("[x + 3, 3, 5]") == parse("[x + 3, 3, 5]") assert_parse_roundtrip("[]") assert_parse_roundtrip("[x]") assert_parse_roundtrip("g[i, k] + 2.0*h[i, k]") parse("g[i,k]+(+2.0)*h[i, k]") print(repr(parse("a - b - c"))) print(repr(parse("-a - -b - -c"))) print(repr(parse("- - - a - - - - b - - - - - c"))) print(repr(parse("~(a ^ b)"))) print(repr(parse("(a | b) | ~(~a & ~b)"))) print(repr(parse("3 << 1"))) print(repr(parse("1 >> 3"))) print(parse("3::1")) assert parse("e1") == prim.Variable("e1") assert parse("d1") == prim.Variable("d1") from pymbolic import variables f, x, y, z = variables("f x y z") assert parse("f((x,y),z)") == f((x, y), z) assert parse("f((x,),z)") == f((x, ), z) assert parse("f(x,(y,z),z)") == f(x, (y, z), z) assert parse("f(x,(y,z),z, name=15)") == f(x, (y, z), z, name=15) assert parse("f(x,(y,z),z, name=15, name2=17)") == f(x, (y, z), z, name=15, name2=17) assert_parsed_same_as_python('5+i if i>=0 else (0 if i<-1 else 10)') assert_parsed_same_as_python("0 if 1 if 2 else 3 else 4") assert_parsed_same_as_python("0 if (1 if 2 else 3) else 4") with pytest.deprecated_call(): parse('1+if(0, 1, 2)')