Example #1
0
def test_results_named_unordered():
    # Here output order is based on name_expr
    A, B, C = symbols('A,B,C')
    expr1 = Equality(C, (x + y) * z)
    expr2 = Equality(A, (x - y) * z)
    expr3 = Equality(B, 2 * x)
    name_expr = ("test", [expr1, expr2, expr3])
    result, = codegen(name_expr, "Julia", header=False, empty=False)
    source = result[1]
    expected = ("function test(x, y, z)\n"
                "    C = z.*(x + y)\n"
                "    A = z.*(x - y)\n"
                "    B = 2*x\n"
                "    return C, A, B\n"
                "end\n")
    assert source == expected
Example #2
0
def test_m_simple_code_nameout():
    expr = Equality(z, (x + y))
    name_expr = ("test", expr)
    result, = codegen(name_expr, "Octave", header=False, empty=False)
    source = result[1]
    expected = ("function z = test(x, y)\n" "  z = x + y;\n" "end\n")
    assert source == expected
Example #3
0
def test_jl_simple_code_nameout():
    expr = Equality(z, (x + y))
    name_expr = ("test", expr)
    (result, ) = codegen(name_expr, "Julia", header=False, empty=False)
    source = result[1]
    expected = "function test(x, y)\n" "    z = x + y\n" "    return z\n" "end\n"
    assert source == expected
Example #4
0
def test_jl_InOutArgument():
    expr = Equality(x, x**2)
    name_expr = ("mysqr", expr)
    (result, ) = codegen(name_expr, "Julia", header=False, empty=False)
    source = result[1]
    expected = "function mysqr(x)\n" "    x = x.^2\n" "    return x\n" "end\n"
    assert source == expected
def test_results_named_unordered():
    # Here output order is based on name_expr
    A, B, C = symbols('A,B,C')
    expr1 = Equality(C, (x + y) * z)
    expr2 = Equality(A, (x - y) * z)
    expr3 = Equality(B, 2 * x)
    name_expr = ("test", [expr1, expr2, expr3])
    result, = codegen(name_expr, "Rust", header=False, empty=False)
    source = result[1]
    expected = ("fn test(x: f64, y: f64, z: f64) -> (f64, f64, f64) {\n"
                "    let C = z*(x + y);\n"
                "    let A = z*(x - y);\n"
                "    let B = 2*x;\n"
                "    (C, A, B)\n"
                "}\n")
    assert source == expected
Example #6
0
def test_InOutArgument():
    expr = Equality(x, x**2)
    name_expr = ("mysqr", expr)
    (result, ) = codegen(name_expr, "Rust", header=False, empty=False)
    source = result[1]
    expected = "fn mysqr(x: f64) -> f64 {\n" "    let x = x.powi(2);\n" "    x\n" "}\n"
    assert source == expected
Example #7
0
def test_jl_matrixsymbol_slice2():
    A = MatrixSymbol('A', 3, 4)
    B = MatrixSymbol('B', 2, 2)
    C = MatrixSymbol('C', 2, 2)
    name_expr = ("test", [Equality(B, A[0:2, 0:2]),
                          Equality(C, A[0:2, 1:3])])
    result, = codegen(name_expr, "Julia", header=False, empty=False)
    source = result[1]
    expected = (
        "function test(A)\n"
        "    B = A[1:2,1:2]\n"
        "    C = A[1:2,2:3]\n"
        "    return B, C\n"
        "end\n"
    )
    assert source == expected
Example #8
0
def test_m_InOutArgument():
    expr = Equality(x, x**2)
    name_expr = ("mysqr", expr)
    result, = codegen(name_expr, "Octave", header=False, empty=False)
    source = result[1]
    expected = ("function x = mysqr(x)\n" "  x = x.^2;\n" "end\n")
    assert source == expected
Example #9
0
 def test_as_relational(self):
     left = x + x**2
     right = cos(x)
     eq = Equation(left, right)
     self.assertEqual(eq.as_relational(), Equality(left, right))
     self.assertEqual(eq.as_relational(GreaterThan),
                      GreaterThan(left, right))
def test_m_output_arg_mixed_unordered():
    # named outputs are alphabetical, unnamed output appear in the given order
    from sympy import sin, cos, tan
    a = symbols("a")
    name_expr = ("foo", [cos(2*x), Equality(y, sin(x)), cos(x), Equality(a, sin(2*x))])
    result, = codegen(name_expr, "Octave", header=False, empty=False)
    assert result[0] == "foo.m"
    source = result[1];
    expected = (
        'function [out1, y, out3, a] = foo(x)\n'
        '  out1 = cos(2*x);\n'
        '  y = sin(x);\n'
        '  out3 = cos(x);\n'
        '  a = sin(2*x);\n'
        'end\n'
    )
    assert source == expected
Example #11
0
def test_m_matrix_named_matsym():
    myout1 = MatrixSymbol("myout1", 1, 3)
    e2 = Matrix([[x, 2 * y, pi * z]])
    name_expr = ("test", Equality(myout1, e2, evaluate=False))
    (result, ) = codegen(name_expr, "Octave", header=False, empty=False)
    source = result[1]
    expected = "function myout1 = test(x, y, z)\n" "  myout1 = [x 2*y pi*z];\n" "end\n"
    assert source == expected
Example #12
0
def test_m_matrix_named():
    e2 = Matrix([[x, 2 * y, pi * z]])
    name_expr = ("test", Equality(MatrixSymbol("myout1", 1, 3), e2))
    result = codegen(name_expr, "Octave", header=False, empty=False)
    assert result[0][0] == "test.m"
    source = result[0][1]
    expected = "function myout1 = test(x, y, z)\n" "  myout1 = [x 2*y pi*z];\n" "end\n"
    assert source == expected
Example #13
0
def test_m_matrixsymbol_slice():
    A = MatrixSymbol('A', 2, 3)
    B = MatrixSymbol('B', 1, 3)
    C = MatrixSymbol('C', 1, 3)
    D = MatrixSymbol('D', 2, 1)
    name_expr = ("test", [
        Equality(B, A[0, :]),
        Equality(C, A[1, :]),
        Equality(D, A[:, 2])
    ])
    result, = codegen(name_expr, "Octave", header=False, empty=False)
    source = result[1]
    expected = ("function [B, C, D] = test(A)\n"
                "  B = A(1, :);\n"
                "  C = A(2, :);\n"
                "  D = A(:, 3);\n"
                "end\n")
    assert source == expected
def test_results_named_ordered():
    A, B, C = symbols('A,B,C')
    expr1 = Equality(C, (x + y)*z)
    expr2 = Equality(A, (x - y)*z)
    expr3 = Equality(B, 2*x)
    name_expr = ("test", [expr1, expr2, expr3])
    result = codegen(name_expr, "Octave", header=False, empty=False,
                     argument_sequence=(x, z, y))
    assert result[0][0] == "test.m"
    source = result[0][1]
    expected = (
        "function [C, A, B] = test(x, z, y)\n"
        "  C = z.*(x + y);\n"
        "  A = z.*(x - y);\n"
        "  B = 2*x;\n"
        "end\n"
    )
    assert source == expected
def test_m_results_matrix_named_ordered():
    B, C = symbols('B,C')
    A = MatrixSymbol('A', 1, 3)
    expr1 = Equality(C, (x + y)*z)
    expr2 = Equality(A, Matrix([[1, 2, x]]))
    expr3 = Equality(B, 2*x)
    name_expr = ("test", [expr1, expr2, expr3])
    result, = codegen(name_expr, "Octave", header=False, empty=False,
                     argument_sequence=(x, z, y))
    source = result[1]
    expected = (
        "function [C, A, B] = test(x, z, y)\n"
        "  C = z.*(x + y);\n"
        "  A = [1 2 x];\n"
        "  B = 2*x;\n"
        "end\n"
    )
    assert source == expected
Example #16
0
 def test_convert(self):
     eq = Equation(x * y, y + z)
     self.assertEqual(eq.as_expr(), x * y - (y + z))
     r1 = eq.as_relational()
     self.assertTrue(
         isinstance(r1, Equality) and (r1 == Equality(x * y, y + z)))
     r2 = eq.as_relational(GreaterThan)
     self.assertTrue(
         isinstance(r2, GreaterThan) and (r2 == GreaterThan(x * y, y + z)))
def test_output_arg_mixed_unordered():
    # named outputs are alphabetical, unnamed output appear in the given order
    from sympy import sin, cos
    a = symbols("a")
    name_expr = ("foo", [cos(2*x), Equality(y, sin(x)), cos(x), Equality(a, sin(2*x))])
    result, = codegen(name_expr, "Rust", header=False, empty=False)
    assert result[0] == "foo.rs"
    source = result[1];
    expected = (
        "fn foo(x: f64) -> (f64, f64, f64, f64) {\n"
        "    let out1 = (2*x).cos();\n"
        "    let y = x.sin();\n"
        "    let out3 = x.cos();\n"
        "    let a = (2*x).sin();\n"
        "    (out1, y, out3, a)\n"
        "}\n"
    )
    assert source == expected
Example #18
0
def sympy_eqn(c, interactions=None, include_bias=True):
    """
    Return a symbolic expression for a polynomial produced by brutefit.
    
    Parameter numbers correspond to column indices in the design matrix.
    
    Parameters
    ----------
    c : array-like
        A sequence of N integers specifying the polynomial order
        of each covariate, OR a row of a dataframe produced by
        evaluate_polynomials.
    interactions : None or array-like
        If None, no parameter interactions are included.
        If not None, it should be an array of integers the same length as the number
        of combinations of parameters in c, i.e. if c=[1,1,1]: interactions=[1, 1, 1, 1, 1, 1],
        where each integer correspons to the order of the interaction between covariates
        [01, 02, 03, 12, 13, 23].
    include_bias : bool
        Whether or not to include a bias term (intercept) in the fit.
    """
    if isinstance(c, pd.core.series.Series):
        interactions = c.loc['interactions'].values
        include_bias = c.loc[('model', 'include_bias')]
        c = c.loc['orders'].values
    c = np.asanyarray(c)

    interaction_pairs = np.vstack(np.triu_indices(len(c), 1)).T
    if interactions is not None:
        interactions = np.asanyarray(interactions)
        if interaction_pairs.shape[0] != interactions.size:
            msg = '\nNot enough interactions specified. Should be {} for {} covariates.'.format(interaction_pairs.shape[0], c.size)
            msg += '\nSpecifying the orders of interactions between: [' + ', '.join(['{}{}'.format(*i) for i in interaction_pairs]) + ']'
            raise ValueError(msg)
        if interactions.max() > c.max():
            print('WARNING: interactions powers are higher than non-interaction powers.')
    
    xs = symbols(['x_{}'.format(i) for i in range(len(c))])

    if include_bias:
        eqn = [symbols('p_0')]
    else:
        eqn = []

    p = 1
    for o in range(1, c.max() + 1):
        for x in sel_xs(xs, c>=o):
            eqn.append(symbols('p_{}'.format(p)) * x**o)
            p += 1

    if interactions is not None:
        for o in range(1, interactions.max() + 1):
            for ip in interaction_pairs[interactions >= o, :]:
                eqn.append(symbols('p_{}'.format(p)) * xs[ip[0]]**o * xs[ip[1]]**o)
                p += 1

    return Equality(symbols('y'), Add(*eqn))
def test_results_named_ordered():
    A, B, C = symbols('A,B,C')
    expr1 = Equality(C, (x + y)*z)
    expr2 = Equality(A, (x - y)*z)
    expr3 = Equality(B, 2*x)
    name_expr = ("test", [expr1, expr2, expr3])
    result = codegen(name_expr, "Rust", header=False, empty=False,
                     argument_sequence=(x, z, y))
    assert result[0][0] == "test.rs"
    source = result[0][1]
    expected = (
        "fn test(x: f64, z: f64, y: f64) -> (f64, f64, f64) {\n"
        "    let C = z*(x + y);\n"
        "    let A = z*(x - y);\n"
        "    let B = 2*x;\n"
        "    (C, A, B)\n"
        "}\n"
    )
    assert source == expected
Example #20
0
def test_jl_InOutArgument_order():
    # can specify the order as (x, y)
    expr = Equality(x, x**2 + y)
    name_expr = ("test", expr)
    (result, ) = codegen(name_expr,
                         "Julia",
                         header=False,
                         empty=False,
                         argument_sequence=(x, y))
    source = result[1]
    expected = "function test(x, y)\n" "    x = x.^2 + y\n" "    return x\n" "end\n"
    assert source == expected
    # make sure it gives (x, y) not (y, x)
    expr = Equality(x, x**2 + y)
    name_expr = ("test", expr)
    (result, ) = codegen(name_expr, "Julia", header=False, empty=False)
    source = result[1]
    expected = "function test(x, y)\n" "    x = x.^2 + y\n" "    return x\n" "end\n"
    assert source == expected
Example #21
0
def test_m_InOutArgument_order():
    # can specify the order as (x, y)
    expr = Equality(x, x**2 + y)
    name_expr = ("test", expr)
    result, = codegen(name_expr,
                      "Octave",
                      header=False,
                      empty=False,
                      argument_sequence=(x, y))
    source = result[1]
    expected = ("function x = test(x, y)\n" "  x = x.^2 + y;\n" "end\n")
    assert source == expected
    # make sure it gives (x, y) not (y, x)
    expr = Equality(x, x**2 + y)
    name_expr = ("test", expr)
    result, = codegen(name_expr, "Octave", header=False, empty=False)
    source = result[1]
    expected = ("function x = test(x, y)\n" "  x = x.^2 + y;\n" "end\n")
    assert source == expected
Example #22
0
def test_Equivalent():

    assert Equivalent(A, B) == Equivalent(B, A) == Equivalent(A, B, A)
    assert Equivalent() is true
    assert Equivalent(A, A) == Equivalent(A) is true
    assert Equivalent(True, True) == Equivalent(False, False) is true
    assert Equivalent(True, False) == Equivalent(False, True) is false
    assert Equivalent(A, True) == A
    assert Equivalent(A, False) == Not(A)
    assert Equivalent(A, B, True) == A & B
    assert Equivalent(A, B, False) == ~A & ~B
    assert Equivalent(1, A) == A
    assert Equivalent(0, A) == Not(A)
    assert Equivalent(A, Equivalent(B, C)) != Equivalent(Equivalent(A, B), C)
    assert Equivalent(A < 1, A >= 1) is false
    assert Equivalent(A < 1, A >= 1, 0) is false
    assert Equivalent(A < 1, A >= 1, 1) is false
    assert Equivalent(A < 1, S(1) > A) == Equivalent(1, 1) == Equivalent(0, 0)
    assert Equivalent(Equality(A, B), Equality(B, A)) is true
Example #23
0
def test_simple_code_nameout():
    expr = Equality(z, (x + y))
    name_expr = ("test", expr)
    result, = codegen(name_expr, "Rust", header=False, empty=False)
    source = result[1]
    expected = ("fn test(x: f64, y: f64) -> f64 {\n"
                "    let z = x + y;\n"
                "    z\n"
                "}\n")
    assert source == expected
Example #24
0
def test_jl_matrixsymbol_slice():
    A = MatrixSymbol('A', 2, 3)
    B = MatrixSymbol('B', 1, 3)
    C = MatrixSymbol('C', 1, 3)
    D = MatrixSymbol('D', 2, 1)
    name_expr = ("test", [Equality(B, A[0, :]),
                          Equality(C, A[1, :]),
                          Equality(D, A[:, 2])])
    result, = codegen(name_expr, "Julia", header=False, empty=False)
    source = result[1]
    expected = (
        "function test(A)\n"
        "    B = A[1,:]\n"
        "    C = A[2,:]\n"
        "    D = A[:,3]\n"
        "    return B, C, D\n"
        "end\n"
    )
    assert source == expected
Example #25
0
def test_jl_matrix_named_matsym():
    myout1 = MatrixSymbol('myout1', 1, 3)
    e2 = Matrix([[x, 2 * y, pi * z]])
    name_expr = ("test", Equality(myout1, e2, evaluate=False))
    result, = codegen(name_expr, "Julia", header=False, empty=False)
    source = result[1]
    expected = ("function test(x, y, z)\n"
                "    myout1 = [x 2*y pi*z]\n"
                "    return myout1\n"
                "end\n")
    assert source == expected
Example #26
0
def test_jl_matrix_named():
    e2 = Matrix([[x, 2 * y, pi * z]])
    name_expr = ("test", Equality(MatrixSymbol('myout1', 1, 3), e2))
    result = codegen(name_expr, "Julia", header=False, empty=False)
    assert result[0][0] == "test.jl"
    source = result[0][1]
    expected = ("function test(x, y, z)\n"
                "    myout1 = [x 2*y pi*z]\n"
                "    return myout1\n"
                "end\n")
    assert source == expected
Example #27
0
def test_jl_results_matrix_named_ordered():
    B, C = symbols("B,C")
    A = MatrixSymbol("A", 1, 3)
    expr1 = Equality(C, (x + y) * z)
    expr2 = Equality(A, Matrix([[1, 2, x]]))
    expr3 = Equality(B, 2 * x)
    name_expr = ("test", [expr1, expr2, expr3])
    (result, ) = codegen(name_expr,
                         "Julia",
                         header=False,
                         empty=False,
                         argument_sequence=(x, z, y))
    source = result[1]
    expected = ("function test(x, z, y)\n"
                "    C = z.*(x + y)\n"
                "    A = [1 2 x]\n"
                "    B = 2*x\n"
                "    return C, A, B\n"
                "end\n")
    assert source == expected
Example #28
0
def test_cython_wrapper_inoutarg():
    from sympy import Equality
    x, y, z = symbols('xyz')
    code_gen = CythonCodeWrapper(CCodeGen())
    routine = Routine("test", Equality(z, x + y + z))
    source = get_string(code_gen.dump_pyx, [routine])
    expected = ('cdef extern from "file.h":\n'
                '   void test(double x, double y, double &z)\n'
                'def test_c(double x, double y, double z):\n'
                '   test(x, y, z)\n'
                '   return z\n')
    assert source == expected
Example #29
0
def test_m_matrixsymbol_slice_autoname():
    A = MatrixSymbol('A', 2, 3)
    B = MatrixSymbol('B', 1, 3)
    name_expr = ("test", [Equality(B, A[0, :]), A[1, :], A[:, 0], A[:, 1]])
    result, = codegen(name_expr, "Octave", header=False, empty=False)
    source = result[1]
    expected = ("function [B, out2, out3, out4] = test(A)\n"
                "  B = A(1, :);\n"
                "  out2 = A(2, :);\n"
                "  out3 = A(:, 1);\n"
                "  out4 = A(:, 2);\n"
                "end\n")
    assert source == expected
Example #30
0
    def _set_axis_and_point(self, cond_eq: sympy.Equality, coords: cs.CoordinateSystem):
        coord_vars = coords.axises()
        self.axis, self.axis_point = None, None

        U = sympy.Function("u")
        u_entrances = list(cond_eq.find(U))
        if len(u_entrances) != 1:
            raise ValueError(
                "Cannot contain different args in U for derivative and u function"
            )

        a1 = sympy.Wild("a1", properties=[lambda x: x.is_constant])
        a2 = sympy.Wild("a2", properties=[lambda x: x.is_constant])
        u_pow = sympy.Wild("u_pow", properties=[lambda x: x.is_constant])
        axis = sympy.Wild("axis", properties=[lambda x: x.is_symbol])
        U_pattern = sympy.WildFunction("U_pattern", nargs=len(coords.axises()))

        res = cond_eq.lhs.match(
            a1 * U_pattern ** u_pow + a2 * sympy.Derivative(U_pattern, axis)
        )
        if res is None:
            raise ValueError(f"Cannot parse {cond_eq}")
        self.a1 = res[a1]
        self.a2 = res[a2]
        u_with_args = res[U_pattern]

        if self.a1 != 0 and self.a2 == 0:
            self.kind = ConditionKind.First.name
        elif self.a1 == 0 and self.a2 != 0:
            self.kind = ConditionKind.Second.name
        elif self.a1 != 0 and self.a2 != 0:
            self.kind = ConditionKind.Third.name
        else:
            raise ValueError(
                f"Left side of boundary condition: {cond_eq} does"
                "not contain u function"
            )

        for i, arg in enumerate(u_with_args.args):
            if arg.is_constant():
                self.axis = coord_vars[i]
                self.axis_point = sympy.fcode(arg.evalf())
                self._axis_point = arg
                break

        if self.axis is None:
            raise ValueError(
                "Bondary condition cannot be parsed"
                "Probably you did not specified U arguments or"
                "there is no constant in arguments"
            )