def test_transform_eq_not(): source = ''' X ~= choice({'foo': .5, 'bar': .1, 'baz': .4}) Y = X != 'foo' ''' compiler = SPPL_Compiler(source) py_source = compiler.render_module() assert '~ (X << {\'foo\'})' in py_source assert '!=' not in py_source
def test_transform_in(): source = ''' X ~= choice({'foo': .5, 'bar': .1, 'baz': .4}) Y = X in {'foo', 'baz'} ''' compiler = SPPL_Compiler(source) py_source = compiler.render_module() assert 'X << {\'foo\', \'baz\'}' in py_source assert 'X in' not in py_source
def test_ifexp(): source = ''' from fractions import Fraction Y ~= choice({str(i): Fraction(1, 4) for i in range(4)}) Z ~= ( atomic(loc=0) if (Y in {'0', '1'}) else atomic(loc=4) if (Y == '2') else atomic(loc=6)) ''' compiler = SPPL_Compiler(source) assert 'IfElse' in compiler.render_module() namespace = compiler.execute_module() assert isclose(namespace.model.prob(namespace.Z << {0}), .5) assert isclose(namespace.model.prob(namespace.Z << {4}), .25) assert isclose(namespace.model.prob(namespace.Z << {6}), .25)