示例#1
0
def test_jscode_constants_other():
    assert jscode(
        2 *
        GoldenRatio) == "var GoldenRatio = 1.61803398874989;\n2*GoldenRatio"
    assert jscode(2 * Catalan) == "var Catalan = 0.915965594177219;\n2*Catalan"
    assert jscode(
        2 * EulerGamma) == "var EulerGamma = 0.577215664901533;\n2*EulerGamma"
示例#2
0
def test_jscode_Pow():
    g = implemented_function('g', Lambda(x, 2*x))
    assert jscode(x**3) == "Math.pow(x, 3)"
    assert jscode(x**(y**3)) == "Math.pow(x, Math.pow(y, 3))"
    assert jscode(1/(g(x)*3.5)**(x - y**x)/(x**2 + y)) == \
        "Math.pow(3.5*2*x, -x + Math.pow(y, x))/(Math.pow(x, 2) + y)"
    assert jscode(x**-1.0) == '1/x'
示例#3
0
def test_jscode_Pow():
    g = implemented_function('g', Lambda(x, 2 * x))
    assert jscode(x**3) == "Math.pow(x, 3)"
    assert jscode(x**(y**3)) == "Math.pow(x, Math.pow(y, 3))"
    assert jscode(1/(g(x)*3.5)**(x - y**x)/(x**2 + y)) == \
        "Math.pow(3.5*2*x, -x + Math.pow(y, x))/(Math.pow(x, 2) + y)"
    assert jscode(x**-1.0) == '1/x'
示例#4
0
def test_jscode_Pow():
    assert jscode(x ** 3) == "Math.pow(x, 3)"
    assert jscode(x ** (y ** 3)) == "Math.pow(x, Math.pow(y, 3))"
    assert (
        jscode(1 / (g(x) * 3.5) ** (x - y ** x) / (x ** 2 + y))
        == "Math.pow(3.5*g(x), -x + Math.pow(y, x))/(Math.pow(x, 2) + y)"
    )
    assert jscode(x ** -1.0) == "1/x"
示例#5
0
def test_jscode_constants_other():
    assert jscode(
        2 * GoldenRatio
    ) == "var GoldenRatio = %s;\n2*GoldenRatio" % GoldenRatio.evalf(17)
    assert jscode(
        2 * Catalan) == "var Catalan = %s;\n2*Catalan" % Catalan.evalf(17)
    assert jscode(
        2 * EulerGamma
    ) == "var EulerGamma = %s;\n2*EulerGamma" % EulerGamma.evalf(17)
示例#6
0
def test_MatrixElement_printing():
    # test cases for issue #11821
    A = MatrixSymbol("A", 1, 3)
    B = MatrixSymbol("B", 1, 3)
    C = MatrixSymbol("C", 1, 3)

    assert (jscode(A[0, 0]) == "A[0]")
    assert (jscode(3 * A[0, 0]) == "3*A[0]")

    F = C[0, 0].subs(C, A - B)
    assert (jscode(F) == "((-1)*B + A)[0]")
示例#7
0
def test_MatrixElement_printing():
    # test cases for issue #11821
    A = MatrixSymbol("A", 1, 3)
    B = MatrixSymbol("B", 1, 3)
    C = MatrixSymbol("C", 1, 3)

    assert(jscode(A[0, 0]) == "A[0]")
    assert(jscode(3 * A[0, 0]) == "3*A[0]")

    F = C[0, 0].subs(C, A - B)
    assert(jscode(F) == "((-1)*B + A)[0]")
示例#8
0
def test_jscode_inline_function():
    x = symbols("x")
    g = implemented_function("g", Lambda(x, 2 * x))
    assert jscode(g(x)) == "2*x"
    g = implemented_function("g", Lambda(x, 2 * x / Catalan))
    assert jscode(g(x)) == "var Catalan = %s;\n2*x/Catalan" % Catalan.n()
    A = IndexedBase("A")
    i = Idx("i", symbols("n", integer=True))
    g = implemented_function("g", Lambda(x, x * (1 + x) * (2 + x)))
    assert jscode(g(A[i]), assign_to=A[i]) == (
        "for (var i=0; i<n; i++){\n" "   A[i] = A[i]*(1 + A[i])*(2 + A[i]);\n" "}"
    )
示例#9
0
def test_jscode_inline_function():
    x = symbols('x')
    g = implemented_function('g', Lambda(x, 2 * x))
    assert jscode(g(x)) == "2*x"
    g = implemented_function('g', Lambda(x, 2 * x / Catalan))
    assert jscode(g(x)) == "var Catalan = %s;\n2*x/Catalan" % Catalan.n()
    A = IndexedBase('A')
    i = Idx('i', symbols('n', integer=True))
    g = implemented_function('g', Lambda(x, x * (1 + x) * (2 + x)))
    assert jscode(g(A[i]),
                  assign_to=A[i]) == ("for (var i=0; i<n; i++){\n"
                                      "   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];\n"
                                      "}")
示例#10
0
def test_jscode_inline_function():
    x = symbols("x")
    g = implemented_function("g", Lambda(x, 2 * x))
    assert jscode(g(x)) == "2*x"
    g = implemented_function("g", Lambda(x, 2 * x / Catalan))
    assert jscode(g(x)) == "var Catalan = %s;\n2*x/Catalan" % Catalan.evalf(17)
    A = IndexedBase("A")
    i = Idx("i", symbols("n", integer=True))
    g = implemented_function("g", Lambda(x, x * (1 + x) * (2 + x)))
    assert jscode(g(A[i]),
                  assign_to=A[i]) == ("for (var i=0; i<n; i++){\n"
                                      "   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];\n"
                                      "}")
示例#11
0
def test_jscode_inline_function():
    x = symbols('x')
    g = implemented_function('g', Lambda(x, 2*x))
    assert jscode(g(x)) == "2*x"
    g = implemented_function('g', Lambda(x, 2*x/Catalan))
    assert jscode(g(x)) == "var Catalan = %s;\n2*x/Catalan" % Catalan.n()
    A = IndexedBase('A')
    i = Idx('i', symbols('n', integer=True))
    g = implemented_function('g', Lambda(x, x*(1 + x)*(2 + x)))
    assert jscode(g(A[i]), assign_to=A[i]) == (
        "for (var i=0; i<n; i++){\n"
        "   A[i] = (A[i] + 1)*(A[i] + 2)*A[i];\n"
        "}"
    )
示例#12
0
def test_jscode_loops_addfactor():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols

    n, m, o, p = symbols("n m o p", integer=True)
    a = IndexedBase("a")
    b = IndexedBase("b")
    c = IndexedBase("c")
    y = IndexedBase("y")
    i = Idx("i", m)
    j = Idx("j", n)
    k = Idx("k", o)
    l = Idx("l", p)

    s = ("for (var i=0; i<m; i++){\n"
         "   y[i] = 0;\n"
         "}\n"
         "for (var i=0; i<m; i++){\n"
         "   for (var j=0; j<n; j++){\n"
         "      for (var k=0; k<o; k++){\n"
         "         for (var l=0; l<p; l++){\n"
         "            y[i] = (a[%s] + b[%s])*c[%s] + y[i];\n" % (
             i * n * o * p + j * o * p + k * p + l,
             i * n * o * p + j * o * p + k * p + l,
             j * o * p + k * p + l,
         ) + "         }\n"
         "      }\n"
         "   }\n"
         "}")
    c = jscode((a[i, j, k, l] + b[i, j, k, l]) * c[j, k, l], assign_to=y[i])
    assert c == s
示例#13
0
def test_jscode_loops_addfactor():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols
    n, m, o, p = symbols('n m o p', integer=True)
    a = IndexedBase('a')
    b = IndexedBase('b')
    c = IndexedBase('c')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)
    k = Idx('k', o)
    l = Idx('l', p)

    s = (
        'for (var i=0; i<m; i++){\n'
        '   y[i] = 0;\n'
        '}\n'
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      for (var k=0; k<o; k++){\n'
        '         for (var l=0; l<p; l++){\n'
        '            y[i] = (a[%s] + b[%s])*c[%s] + y[i];\n' % (i*n*o*p + j*o*p + k*p + l, i*n*o*p + j*o*p + k*p + l, j*o*p + k*p + l) +\
        '         }\n'
        '      }\n'
        '   }\n'
        '}'
    )
    c = jscode((a[i, j, k, l] + b[i, j, k, l])*c[j, k, l], assign_to=y[i])
    assert c == s
示例#14
0
def test_jscode_loops_addfactor():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols

    n, m, o, p = symbols("n m o p", integer=True)
    a = IndexedBase("a")
    b = IndexedBase("b")
    c = IndexedBase("c")
    y = IndexedBase("y")
    i = Idx("i", m)
    j = Idx("j", n)
    k = Idx("k", o)
    l = Idx("l", p)

    s = (
        "for (var i=0; i<m; i++){\n"
        "   y[i] = 0;\n"
        "}\n"
        "for (var i=0; i<m; i++){\n"
        "   for (var j=0; j<n; j++){\n"
        "      for (var k=0; k<o; k++){\n"
        "         for (var l=0; l<p; l++){\n"
        "            y[i] = (a[i*n*o*p + j*o*p + k*p + l] + b[i*n*o*p + j*o*p + k*p + l])*c[j*o*p + k*p + l] + y[i];\n"
        "         }\n"
        "      }\n"
        "   }\n"
        "}"
    )
    c = jscode((a[i, j, k, l] + b[i, j, k, l]) * c[j, k, l], assign_to=y[i])
    assert c == s
示例#15
0
def test_jscode_loops_multiple_terms():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols
    n, m, o, p = symbols('n m o p', integer=True)
    a = IndexedBase('a')
    b = IndexedBase('b')
    c = IndexedBase('c')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)
    k = Idx('k', o)

    s0 = ('for (var i=0; i<m; i++){\n' '   y[i] = 0;\n' '}\n')
    s1 = ('for (var i=0; i<m; i++){\n'
          '   for (var j=0; j<n; j++){\n'
          '      for (var k=0; k<o; k++){\n'
          '         y[i] = b[j]*b[k]*c[i*n*o + j*o + k] + y[i];\n'
          '      }\n'
          '   }\n'
          '}\n')
    s2 = ('for (var i=0; i<m; i++){\n'
          '   for (var k=0; k<o; k++){\n'
          '      y[i] = b[k]*a[i*o + k] + y[i];\n'
          '   }\n'
          '}\n')
    s3 = ('for (var i=0; i<m; i++){\n'
          '   for (var j=0; j<n; j++){\n'
          '      y[i] = b[j]*a[i*n + j] + y[i];\n'
          '   }\n'
          '}\n')
    c = jscode(b[j] * a[i, j] + b[k] * a[i, k] + b[j] * b[k] * c[i, j, k],
               assign_to=y[i])
    assert (c == s0 + s1 + s2 + s3[:-1] or c == s0 + s1 + s3 + s2[:-1]
            or c == s0 + s2 + s1 + s3[:-1] or c == s0 + s2 + s3 + s1[:-1]
            or c == s0 + s3 + s1 + s2[:-1] or c == s0 + s3 + s2 + s1[:-1])
示例#16
0
def test_jscode_loops_multiple_contractions():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols
    n, m, o, p = symbols('n m o p', integer=True)
    a = IndexedBase('a')
    b = IndexedBase('b')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)
    k = Idx('k', o)
    l = Idx('l', p)

    s = (
        'for (var i=0; i<m; i++){\n'
        '   y[i] = 0;\n'
        '}\n'
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      for (var k=0; k<o; k++){\n'
        '         for (var l=0; l<p; l++){\n'
        '            y[i] = y[i] + b[j*o*p + k*p + l]*a[i*n*o*p + j*o*p + k*p + l];\n'
        '         }\n'
        '      }\n'
        '   }\n'
        '}')
    c = jscode(b[j, k, l] * a[i, j, k, l], assign_to=y[i])
    assert c == s
示例#17
0
def test_jscode_loops_multiple_terms():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols

    n, m, o, p = symbols("n m o p", integer=True)
    a = IndexedBase("a")
    b = IndexedBase("b")
    c = IndexedBase("c")
    y = IndexedBase("y")
    i = Idx("i", m)
    j = Idx("j", n)
    k = Idx("k", o)

    s0 = "for (var i=0; i<m; i++){\n" "   y[i] = 0;\n" "}\n"
    s1 = ("for (var i=0; i<m; i++){\n"
          "   for (var j=0; j<n; j++){\n"
          "      for (var k=0; k<o; k++){\n"
          "         y[i] = b[j]*b[k]*c[%s] + y[i];\n" %
          (i * n * o + j * o + k) + "      }\n"
          "   }\n"
          "}\n")
    s2 = ("for (var i=0; i<m; i++){\n"
          "   for (var k=0; k<o; k++){\n"
          "      y[i] = a[%s]*b[k] + y[i];\n" % (i * o + k) + "   }\n"
          "}\n")
    s3 = ("for (var i=0; i<m; i++){\n"
          "   for (var j=0; j<n; j++){\n"
          "      y[i] = a[%s]*b[j] + y[i];\n" % (i * n + j) + "   }\n"
          "}\n")
    c = jscode(b[j] * a[i, j] + b[k] * a[i, k] + b[j] * b[k] * c[i, j, k],
               assign_to=y[i])
    assert (c == s0 + s1 + s2 + s3[:-1] or c == s0 + s1 + s3 + s2[:-1]
            or c == s0 + s2 + s1 + s3[:-1] or c == s0 + s2 + s3 + s1[:-1]
            or c == s0 + s3 + s1 + s2[:-1] or c == s0 + s3 + s2 + s1[:-1])
示例#18
0
def test_jscode_loops_addfactor():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols
    n, m, o, p = symbols('n m o p', integer=True)
    a = IndexedBase('a')
    b = IndexedBase('b')
    c = IndexedBase('c')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)
    k = Idx('k', o)
    l = Idx('l', p)

    s = (
        'for (var i=0; i<m; i++){\n'
        '   y[i] = 0;\n'
        '}\n'
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      for (var k=0; k<o; k++){\n'
        '         for (var l=0; l<p; l++){\n'
        '            y[i] = (a[%s] + b[%s])*c[%s] + y[i];\n' % (i*n*o*p + j*o*p + k*p + l, i*n*o*p + j*o*p + k*p + l, j*o*p + k*p + l) +\
        '         }\n'
        '      }\n'
        '   }\n'
        '}'
    )
    c = jscode((a[i, j, k, l] + b[i, j, k, l]) * c[j, k, l], assign_to=y[i])
    assert c == s
示例#19
0
def jsify_expr(expr):
    clamp = Function("clamp")
    bottom_clamp = Function("bottom")
    x = Wild("x")
    # Prevent NaNs on inverse trig functions
    expr = expr.replace(asin, lambda x: asin(clamp(x, -1, 1)))
    expr = expr.replace(acos, lambda x: acos(clamp(x, -1, 1)))
    # Prevent NaNs on sqrts
    expr = expr.replace(sqrt(x + 1),
                        sqrt(bottom_clamp(x + 1, 0)))
    js_expr = jscode(expr, user_functions = {
            "clamp": "THREE.Math.clamp",
            "bottom": "THREE.Math.clampBottom"
        })
    # Convert all matrix references for compatibility with
    # three.js
    atoms = expr.atoms(Symbol)
    matrices = set([])
    for atom in atoms:
        matrix_name = re.findall("([a-zA-Z]+)_\d,\d", atom.name)
        if len(matrix_name) > 0:
            matrices.add(matrix_name[0])
    for matrix in matrices:
        js_expr = subs_matrix_elements(js_expr, matrix)
    return js_expr
示例#20
0
def test_jscode_loops_multiple_contractions():
    n, m, o, p = symbols('n m o p', integer=True)
    a = IndexedBase('a')
    b = IndexedBase('b')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)
    k = Idx('k', o)
    l = Idx('l', p)

    s = (
        'for (var i=0; i<m; i++){\n'
        '   y[i] = 0;\n'
        '}\n'
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      for (var k=0; k<o; k++){\n'
        '         for (var l=0; l<p; l++){\n'
        '            y[i] = a[%s]*b[%s] + y[i];\n' % (i*n*o*p + j*o*p + k*p + l, j*o*p + k*p + l) +\
        '         }\n'
        '      }\n'
        '   }\n'
        '}'
    )
    c = jscode(b[j, k, l] * a[i, j, k, l], assign_to=y[i])
    assert c == s
示例#21
0
def test_jscode_loops_multiple_contractions():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols
    n, m, o, p = symbols('n m o p', integer=True)
    a = IndexedBase('a')
    b = IndexedBase('b')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)
    k = Idx('k', o)
    l = Idx('l', p)

    s = (
        'for (var i=0; i<m; i++){\n'
        '   y[i] = 0;\n'
        '}\n'
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      for (var k=0; k<o; k++){\n'
        '         for (var l=0; l<p; l++){\n'
        '            y[i] = y[i] + b[j*o*p + k*p + l]*a[i*n*o*p + j*o*p + k*p + l];\n'
        '         }\n'
        '      }\n'
        '   }\n'
        '}'
    )
    c = jscode(b[j, k, l]*a[i, j, k, l], assign_to=y[i])
    assert c == s
示例#22
0
def eval_graph(evaluator, variable):
    from sympy.plotting.plot import LineOver1DRangeSeries
    func = evaluator.eval("input_evaluated")

    free_symbols = sympy.sympify(func).free_symbols
    if len(free_symbols) != 1 or variable not in free_symbols:
        raise ValueError("Cannot graph function of multiple variables")

    try:
        series = LineOver1DRangeSeries(func, (variable, -10, 10), nb_of_points=200)
        # returns a list of [[x,y], [next_x, next_y]] pairs
        series = series.get_segments()
    except TypeError:
        raise ValueError("Cannot graph function")

    xvalues = []
    yvalues = []
    for point in series:
        xvalues.append(point[0][0])
        yvalues.append(point[0][1])
    xvalues.append(series[-1][1][0])
    yvalues.append(series[-1][1][1])
    return {
        'function': sympy.jscode(sympy.sympify(func)),
        'variable': repr(variable),
        'xvalues': json.dumps(xvalues),
        'yvalues': json.dumps(yvalues)
    }
示例#23
0
def task_to_json(dotx, doty):
    # %% rename; it is not really _to_json, just returns dictionary
    k_img, ps = get_points(dotx, doty)
    # dot_x = sympy.simplify(dotx)
    # dot_y = sympy.simplify(doty)
    for p in ps:
        latexify_point(p)
    d = {
        'dot_x_code': sympy.jscode(from_string(dotx)),
        'dot_y_code': sympy.jscode(from_string(doty)),
        'dot_x_tex': sympy.latex(sympy.simplify(dotx)),
        'dot_y_tex': sympy.latex(sympy.simplify(doty)),
        'k_img': k_img,
        'k_real': len(ps),
        'points': ps
    }
    # return json.dumps(d)
    return d
示例#24
0
def test_jscode_boolean():
    assert jscode(x & y) == "x && y"
    assert jscode(x | y) == "x || y"
    assert jscode(~x) == "!x"
    assert jscode(x & y & z) == "x && y && z"
    assert jscode(x | y | z) == "x || y || z"
    assert jscode((x & y) | z) == "z || x && y"
    assert jscode((x | y) & z) == "z && (x || y)"
示例#25
0
def test_jscode_boolean():
    assert jscode(x & y) == "x && y"
    assert jscode(x | y) == "x || y"
    assert jscode(~x) == "!x"
    assert jscode(x & y & z) == "x && y && z"
    assert jscode(x | y | z) == "x || y || z"
    assert jscode((x & y) | z) == "z || x && y"
    assert jscode((x | y) & z) == "z && (x || y)"
示例#26
0
def test_Mod():
    assert jscode(Mod(x, y)) == '((x % y) + y) % y'
    assert jscode(Mod(x, x + y)) == '((x % (x + y)) + (x + y)) % (x + y)'
    p1, p2 = symbols('p1 p2', positive=True)
    assert jscode(Mod(p1, p2)) == 'p1 % p2'
    assert jscode(Mod(p1, p2 + 3)) == 'p1 % (p2 + 3)'
    assert jscode(Mod(-3, -7, evaluate=False)) == '(-3) % (-7)'
    assert jscode(-Mod(p1, p2)) == '-(p1 % p2)'
    assert jscode(x * Mod(p1, p2)) == 'x*(p1 % p2)'
示例#27
0
def eval_graph(evaluator, variable):
    from sympy.plotting.plot import LineOver1DRangeSeries
    func = evaluator.eval("input_evaluated")
    series = LineOver1DRangeSeries(func, (variable, -10, 10), nb_of_points=200)
    series = series.get_points()
    return {
        'function': sympy.jscode(sympy.sympify(func)),
        'variable': repr(variable),
        'xvalues': json.dumps(series[0].tolist()),
        'yvalues': json.dumps(series[1].tolist())
    }
示例#28
0
def test_jscode_Piecewise_deep():
    p = jscode(2 * Piecewise((x, x < 1), (x**2, True)))
    s = """\
2*((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))\
"""
    assert p == s
示例#29
0
def eval_graph(evaluator, variable):
    from sympy.plotting.plot import LineOver1DRangeSeries
    func = evaluator.eval("input_evaluated")
    series = LineOver1DRangeSeries(func, (variable, -10, 10), nb_of_points=200)
    series = series.get_points()
    return {
        'function': sympy.jscode(sympy.sympify(func)),
        'variable': repr(variable),
        'xvalues': json.dumps(series[0].tolist()),
        'yvalues': json.dumps(series[1].tolist())
    }
示例#30
0
def test_jscode_Piecewise():
    p = jscode(Piecewise((x, x < 1), (x ** 2, True)))
    s = """\
if (x < 1) {
   x
}
else {
   Math.pow(x, 2)
}\
"""
    assert p == s
示例#31
0
def test_jscode_Piecewise_deep():
    p = jscode(2*Piecewise((x, x < 1), (x**2, True)))
    s = \
"""\
2*if (x < 1) {
   x
}
else {
   Math.pow(x, 2)
}\
"""
    assert p == s
示例#32
0
def test_jscode_Piecewise():
    p = jscode(Piecewise((x, x < 1), (x**2, True)))
    s = \
"""\
if (x < 1) {
   x
}
else {
   Math.pow(x, 2)
}\
"""
    assert p == s
示例#33
0
def test_jscode_Piecewise():
    expr = Piecewise((x, x < 1), (x**2, True))
    p = jscode(expr)
    s = """\
((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))\
"""
    assert p == s
    assert jscode(expr, assign_to="c") == ("if (x < 1) {\n"
                                           "   c = x;\n"
                                           "}\n"
                                           "else {\n"
                                           "   c = Math.pow(x, 2);\n"
                                           "}")
    # Check that Piecewise without a True (default) condition error
    expr = Piecewise((x, x < 1), (x**2, x > 1), (sin(x), x > 0))
    raises(ValueError, lambda: jscode(expr))
示例#34
0
def test_jscode_Piecewise_deep():
    p = jscode(2*Piecewise((x, x < 1), (x**2, True)))
    s = \
"""\
2*((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))\
"""
    assert p == s
示例#35
0
def test_Relational():
    assert jscode(Eq(x, y)) == "x == y"
    assert jscode(Ne(x, y)) == "x != y"
    assert jscode(Le(x, y)) == "x <= y"
    assert jscode(Lt(x, y)) == "x < y"
    assert jscode(Gt(x, y)) == "x > y"
    assert jscode(Ge(x, y)) == "x >= y"
示例#36
0
def test_dummy_loops():
    i, m = symbols('i m', integer=True, cls=Dummy)
    x = IndexedBase('x')
    y = IndexedBase('y')
    i = Idx(i, m)

    expected = (
        'for (var i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){\n'
        '   y[i_%(icount)i] = x[i_%(icount)i];\n'
        '}'
    ) % {'icount': i.label.dummy_index, 'mcount': m.dummy_index}
    code = jscode(x[i], assign_to=y[i])
    assert code == expected
示例#37
0
def test_dummy_loops():
    i, m = symbols('i m', integer=True, cls=Dummy)
    x = IndexedBase('x')
    y = IndexedBase('y')
    i = Idx(i, m)

    expected = (
        'for (var i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){\n'
        '   y[i_%(icount)i] = x[i_%(icount)i];\n'
        '}'
    ) % {'icount': i.label.dummy_index, 'mcount': m.dummy_index}
    code = jscode(x[i], assign_to=y[i])
    assert code == expected
示例#38
0
def test_Matrix_printing():
    # Test returning a Matrix
    mat = Matrix([x * y, Piecewise((2 + x, y > 0), (y, True)), sin(z)])
    A = MatrixSymbol("A", 3, 1)
    assert jscode(mat, A) == ("A[0] = x*y;\n"
                              "if (y > 0) {\n"
                              "   A[1] = x + 2;\n"
                              "}\n"
                              "else {\n"
                              "   A[1] = y;\n"
                              "}\n"
                              "A[2] = Math.sin(z);")
    # Test using MatrixElements in expressions
    expr = Piecewise((2 * A[2, 0], x > 0),
                     (A[2, 0], True)) + sin(A[1, 0]) + A[0, 0]
    assert jscode(expr) == ("((x > 0) ? (\n"
                            "   2*A[2]\n"
                            ")\n"
                            ": (\n"
                            "   A[2]\n"
                            ")) + Math.sin(A[1]) + A[0]")
    # Test using MatrixElements in a Matrix
    q = MatrixSymbol("q", 5, 1)
    M = MatrixSymbol("M", 3, 3)
    m = Matrix([
        [sin(q[1, 0]), 0, cos(q[2, 0])],
        [q[1, 0] + q[2, 0], q[3, 0], 5],
        [2 * q[4, 0] / q[1, 0], sqrt(q[0, 0]) + 4, 0],
    ])
    assert jscode(m, M) == ("M[0] = Math.sin(q[1]);\n"
                            "M[1] = 0;\n"
                            "M[2] = Math.cos(q[2]);\n"
                            "M[3] = q[1] + q[2];\n"
                            "M[4] = q[3];\n"
                            "M[5] = 5;\n"
                            "M[6] = 2*q[4]/q[1];\n"
                            "M[7] = Math.sqrt(q[0]) + 4;\n"
                            "M[8] = 0;")
示例#39
0
def test_Matrix_printing():
    # Test returning a Matrix
    mat = Matrix([x*y, Piecewise((2 + x, y>0), (y, True)), sin(z)])
    A = MatrixSymbol('A', 3, 1)
    assert jscode(mat, A) == (
        "A[0] = x*y;\n"
        "if (y > 0) {\n"
        "   A[1] = x + 2;\n"
        "}\n"
        "else {\n"
        "   A[1] = y;\n"
        "}\n"
        "A[2] = Math.sin(z);")
    # Test using MatrixElements in expressions
    expr = Piecewise((2*A[2, 0], x > 0), (A[2, 0], True)) + sin(A[1, 0]) + A[0, 0]
    assert jscode(expr) == (
        "((x > 0) ? (\n"
        "   2*A[2]\n"
        ")\n"
        ": (\n"
        "   A[2]\n"
        ")) + Math.sin(A[1]) + A[0]")
    # Test using MatrixElements in a Matrix
    q = MatrixSymbol('q', 5, 1)
    M = MatrixSymbol('M', 3, 3)
    m = Matrix([[sin(q[1,0]), 0, cos(q[2,0])],
        [q[1,0] + q[2,0], q[3, 0], 5],
        [2*q[4, 0]/q[1,0], sqrt(q[0,0]) + 4, 0]])
    assert jscode(m, M) == (
        "M[0] = Math.sin(q[1]);\n"
        "M[1] = 0;\n"
        "M[2] = Math.cos(q[2]);\n"
        "M[3] = q[1] + q[2];\n"
        "M[4] = q[3];\n"
        "M[5] = 5;\n"
        "M[6] = 2*q[4]/q[1];\n"
        "M[7] = Math.sqrt(q[0]) + 4;\n"
        "M[8] = 0;")
示例#40
0
def test_jscode_Piecewise():
    expr = Piecewise((x, x < 1), (x**2, True))
    p = jscode(expr)
    s = \
"""\
((x < 1) ? (
   x
)
: (
   Math.pow(x, 2)
))\
"""
    assert p == s
    assert jscode(expr, assign_to="c") == (
    "if (x < 1) {\n"
    "   c = x;\n"
    "}\n"
    "else {\n"
    "   c = Math.pow(x, 2);\n"
    "}")
    # Check that Piecewise without a True (default) condition error
    expr = Piecewise((x, x < 1), (x**2, x > 1), (sin(x), x > 0))
    raises(ValueError, lambda: jscode(expr))
示例#41
0
def latexify_point(d):
    for k in 'l1', 'l2', 'x', 'y':
        d[k + '_tex'] = sympy.latex(d[k])
    for k in 'ab', 'cd':
        d[k + '_tex'] = sympy.latex(d[k])
        d[k + '_code'] = sympy.jscode(d[k].subs({u: x, v: y}))
        d[k] = ''
    for k in 'l1', 'l2':
        d[k] = ''
    for k in 'x', 'y':
        d[k] = float(d[k])
    for k in 'ev1', 'ev2':
        if k in d:
            d[k + '_tex'] = map(sympy.latex, d[k])
            d[k] = map(float, d[k])
示例#42
0
def test_dummy_loops():
    i, m = symbols("i m", integer=True, cls=Dummy)
    x = IndexedBase("x")
    y = IndexedBase("y")
    i = Idx(i, m)

    expected = (
        "for (var i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){\n"
        "   y[i_%(icount)i] = x[i_%(icount)i];\n"
        "}") % {
            "icount": i.label.dummy_index,
            "mcount": m.dummy_index
        }
    code = jscode(x[i], assign_to=y[i])
    assert code == expected
示例#43
0
def test_jscode_loops_multiple_terms():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols
    n, m, o, p = symbols('n m o p', integer=True)
    a = IndexedBase('a')
    b = IndexedBase('b')
    c = IndexedBase('c')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)
    k = Idx('k', o)

    s0 = (
        'for (var i=0; i<m; i++){\n'
        '   y[i] = 0;\n'
        '}\n'
    )
    s1 = (
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      for (var k=0; k<o; k++){\n'
        '         y[i] = b[j]*b[k]*c[%s] + y[i];\n' % (i*n*o + j*o + k) +\
        '      }\n'
        '   }\n'
        '}\n'
    )
    s2 = (
        'for (var i=0; i<m; i++){\n'
        '   for (var k=0; k<o; k++){\n'
        '      y[i] = a[%s]*b[k] + y[i];\n' % (i*o + k) +\
        '   }\n'
        '}\n'
    )
    s3 = (
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      y[i] = a[%s]*b[j] + y[i];\n' % (i*n + j) +\
        '   }\n'
        '}\n'
    )
    c = jscode(
        b[j]*a[i, j] + b[k]*a[i, k] + b[j]*b[k]*c[i, j, k], assign_to=y[i])
    assert (c == s0 + s1 + s2 + s3[:-1] or
            c == s0 + s1 + s3 + s2[:-1] or
            c == s0 + s2 + s1 + s3[:-1] or
            c == s0 + s2 + s3 + s1[:-1] or
            c == s0 + s3 + s1 + s2[:-1] or
            c == s0 + s3 + s2 + s1[:-1])
示例#44
0
def test_dummy_loops():
    # the following line could also be
    # [Dummy(s, integer=True) for s in 'im']
    # or [Dummy(integer=True) for s in 'im']
    i, m = symbols("i m", integer=True, cls=Dummy)
    x = IndexedBase("x")
    y = IndexedBase("y")
    i = Idx(i, m)

    expected = (
        "for (var i_%(icount)i=0; i_%(icount)i<m_%(mcount)i; i_%(icount)i++){\n"
        "   y[i_%(icount)i] = x[i_%(icount)i];\n"
        "}"
    ) % {"icount": i.label.dummy_index, "mcount": m.dummy_index}
    code = jscode(x[i], assign_to=y[i])
    assert code == expected
示例#45
0
def eval_graph(evaluator, components, parameters=None):
    if parameters is None:
        parameters = {}

    variable = components['variable']

    xmin, xmax = parameters.get('xmin', -10), parameters.get('xmax', 10)
    from sympy.plotting.plot import LineOver1DRangeSeries
    func = evaluator.get("input_evaluated")

    free_symbols = func.free_symbols

    if len(free_symbols) != 1 or variable not in free_symbols:
        raise ValueError("Cannot graph function of multiple variables")

    try:
        series = LineOver1DRangeSeries(
            func, (variable, xmin, xmax),
            nb_of_points=150)
        # returns a list of [[x,y], [next_x, next_y]] pairs
        series = series.get_segments()
    except TypeError:
        raise ValueError("Cannot graph function")

    xvalues = []
    yvalues = []

    def limit_y(y):
        CEILING = 1e8
        if y > CEILING:
            y = CEILING
        if y < -CEILING:
            y = -CEILING
        return y

    for point in series:
        xvalues.append(point[0][0])
        yvalues.append(limit_y(point[0][1]))
    xvalues.append(series[-1][1][0])
    yvalues.append(limit_y(series[-1][1][1]))
    return {
        'function': sympy.jscode(sympy.sympify(func)),
        'variable': repr(variable),
        'xvalues': json.dumps(xvalues),
        'yvalues': json.dumps(yvalues)
    }
示例#46
0
def test_jscode_loops_multiple_terms():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols

    n, m, o, p = symbols("n m o p", integer=True)
    a = IndexedBase("a")
    b = IndexedBase("b")
    c = IndexedBase("c")
    y = IndexedBase("y")
    i = Idx("i", m)
    j = Idx("j", n)
    k = Idx("k", o)

    s0 = "for (var i=0; i<m; i++){\n" "   y[i] = 0;\n" "}\n"
    s1 = (
        "for (var i=0; i<m; i++){\n"
        "   for (var j=0; j<n; j++){\n"
        "      for (var k=0; k<o; k++){\n"
        "         y[i] = b[j]*b[k]*c[i*n*o + j*o + k] + y[i];\n"
        "      }\n"
        "   }\n"
        "}\n"
    )
    s2 = (
        "for (var i=0; i<m; i++){\n"
        "   for (var k=0; k<o; k++){\n"
        "      y[i] = b[k]*a[i*o + k] + y[i];\n"
        "   }\n"
        "}\n"
    )
    s3 = (
        "for (var i=0; i<m; i++){\n"
        "   for (var j=0; j<n; j++){\n"
        "      y[i] = b[j]*a[i*n + j] + y[i];\n"
        "   }\n"
        "}\n"
    )
    c = jscode(b[j] * a[i, j] + b[k] * a[i, k] + b[j] * b[k] * c[i, j, k], assign_to=y[i])
    assert (
        c == s0 + s1 + s2 + s3[:-1]
        or c == s0 + s1 + s3 + s2[:-1]
        or c == s0 + s2 + s1 + s3[:-1]
        or c == s0 + s2 + s3 + s1[:-1]
        or c == s0 + s3 + s1 + s2[:-1]
        or c == s0 + s3 + s2 + s1[:-1]
    )
示例#47
0
def test_jscode_loops_matrix_vector():
    n, m = symbols('n m', integer=True)
    A = IndexedBase('A')
    x = IndexedBase('x')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)

    s = ('for (var i=0; i<m; i++){\n'
         '   y[i] = 0;\n'
         '}\n'
         'for (var i=0; i<m; i++){\n'
         '   for (var j=0; j<n; j++){\n'
         '      y[i] = A[n*i + j]*x[j] + y[i];\n'
         '   }\n'
         '}')
    c = jscode(A[i, j] * x[j], assign_to=y[i])
    assert c == s
示例#48
0
def test_jscode_loops_matrix_vector():
    n, m = symbols("n m", integer=True)
    A = IndexedBase("A")
    x = IndexedBase("x")
    y = IndexedBase("y")
    i = Idx("i", m)
    j = Idx("j", n)

    s = ("for (var i=0; i<m; i++){\n"
         "   y[i] = 0;\n"
         "}\n"
         "for (var i=0; i<m; i++){\n"
         "   for (var j=0; j<n; j++){\n"
         "      y[i] = A[n*i + j]*x[j] + y[i];\n"
         "   }\n"
         "}")
    c = jscode(A[i, j] * x[j], assign_to=y[i])
    assert c == s
示例#49
0
def expressionToCode(expression, language):
    '''Converts a SymPy Expression to a line of code in the target language'''
    if (language == "python"):
        return sympy.pycode(expression)
    elif (language == "javascript" or language == "typescript"):
        return sympy.jscode(expression)
    elif (language == "c"):
        return sympy.ccode(expression)
    elif (language == "cpp"):
        return sympy.cxxcode(expression)
    elif (language == "r"):
        return sympy.rcode(expression)
    elif (language == "fortran"):
        return sympy.fcode(expression)
    elif (language == "mathematica"):
        return sympy.mathematica_code(expression)
    elif (language == "matlab" or language == "octave"):
        return sympy.octave_code(expression)
    elif (language == "rust"):
        return sympy.rust_code(expression)
示例#50
0
def test_jscode_loops_matrix_vector():
    n, m = symbols('n m', integer=True)
    A = IndexedBase('A')
    x = IndexedBase('x')
    y = IndexedBase('y')
    i = Idx('i', m)
    j = Idx('j', n)

    s = (
        'for (var i=0; i<m; i++){\n'
        '   y[i] = 0;\n'
        '}\n'
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      y[i] = A[n*i + j]*x[j] + y[i];\n'
        '   }\n'
        '}'
    )
    c = jscode(A[i, j]*x[j], assign_to=y[i])
    assert c == s
示例#51
0
def test_jscode_loops_matrix_vector():
    n, m = symbols("n m", integer=True)
    A = IndexedBase("A")
    x = IndexedBase("x")
    y = IndexedBase("y")
    i = Idx("i", m)
    j = Idx("j", n)

    s = (
        "for (var i=0; i<m; i++){\n"
        "   y[i] = 0;\n"
        "}\n"
        "for (var i=0; i<m; i++){\n"
        "   for (var j=0; j<n; j++){\n"
        "      y[i] = y[i] + A[i*n + j]*x[j];\n"
        "   }\n"
        "}"
    )
    c = jscode(A[i, j] * x[j], assign_to=y[i])
    assert c == s
示例#52
0
def test_jscode_loops_add():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols
    n, m = symbols('n m', integer=True)
    A = IndexedBase('A')
    x = IndexedBase('x')
    y = IndexedBase('y')
    z = IndexedBase('z')
    i = Idx('i', m)
    j = Idx('j', n)

    s = ('for (var i=0; i<m; i++){\n'
         '   y[i] = x[i] + z[i];\n'
         '}\n'
         'for (var i=0; i<m; i++){\n'
         '   for (var j=0; j<n; j++){\n'
         '      y[i] = A[n*i + j]*x[j] + y[i];\n'
         '   }\n'
         '}')
    c = jscode(A[i, j] * x[j] + x[i] + z[i], assign_to=y[i])
    assert c == s
示例#53
0
def test_jscode_loops_add():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols

    n, m = symbols("n m", integer=True)
    A = IndexedBase("A")
    x = IndexedBase("x")
    y = IndexedBase("y")
    z = IndexedBase("z")
    i = Idx("i", m)
    j = Idx("j", n)

    s = ("for (var i=0; i<m; i++){\n"
         "   y[i] = x[i] + z[i];\n"
         "}\n"
         "for (var i=0; i<m; i++){\n"
         "   for (var j=0; j<n; j++){\n"
         "      y[i] = A[n*i + j]*x[j] + y[i];\n"
         "   }\n"
         "}")
    c = jscode(A[i, j] * x[j] + x[i] + z[i], assign_to=y[i])
    assert c == s
示例#54
0
def test_jscode_loops_add():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols
    n, m = symbols('n m', integer=True)
    A = IndexedBase('A')
    x = IndexedBase('x')
    y = IndexedBase('y')
    z = IndexedBase('z')
    i = Idx('i', m)
    j = Idx('j', n)

    s = (
        'for (var i=0; i<m; i++){\n'
        '   y[i] = x[i] + z[i];\n'
        '}\n'
        'for (var i=0; i<m; i++){\n'
        '   for (var j=0; j<n; j++){\n'
        '      y[i] = A[n*i + j]*x[j] + y[i];\n'
        '   }\n'
        '}'
    )
    c = jscode(A[i, j]*x[j] + x[i] + z[i], assign_to=y[i])
    assert c == s
示例#55
0
def test_jscode_loops_add():
    from sympy.tensor import IndexedBase, Idx
    from sympy import symbols

    n, m = symbols("n m", integer=True)
    A = IndexedBase("A")
    x = IndexedBase("x")
    y = IndexedBase("y")
    z = IndexedBase("z")
    i = Idx("i", m)
    j = Idx("j", n)

    s = (
        "for (var i=0; i<m; i++){\n"
        "   y[i] = x[i] + z[i];\n"
        "}\n"
        "for (var i=0; i<m; i++){\n"
        "   for (var j=0; j<n; j++){\n"
        "      y[i] = y[i] + A[i*n + j]*x[j];\n"
        "   }\n"
        "}"
    )
    c = jscode(A[i, j] * x[j] + x[i] + z[i], assign_to=y[i])
    assert c == s
示例#56
0
def eval_plot(evaluator, components, parameters=None):
    if parameters is None:
        parameters = {}

    xmin, xmax = parameters.get('xmin', -10), parameters.get('xmax', 10)
    pmin, pmax = parameters.get('tmin',
                                0), parameters.get('tmax', 2 * sympy.pi)
    tmin, tmax = parameters.get('tmin', 0), parameters.get('tmax', 10)
    from sympy.plotting.plot import LineOver1DRangeSeries, Parametric2DLineSeries
    functions = evaluator.get("input_evaluated")
    if isinstance(functions, sympy.Basic):
        functions = [(functions, 'xy')]
    elif isinstance(functions, list):
        functions = [(f, 'xy') for f in functions]
    elif isinstance(functions, dict):
        functions = [(f, determine_graph_type(key))
                     for key, f in functions.items()]

    graphs = []
    for func, graph_type in functions:
        if graph_type == 'parametric':
            x_func, y_func = func
            x_vars, y_vars = x_func.free_symbols, y_func.free_symbols
            variables = x_vars.union(y_vars)
            if x_vars != y_vars:
                raise ValueError(
                    "Both functions in a parametric plot must have the same variable"
                )
        else:
            variables = func.free_symbols

        if len(variables) > 1:
            raise ValueError("Cannot plot multivariate function")
        elif len(variables) == 0:
            variable = sympy.Symbol('x')
        else:
            variable = list(variables)[0]

        try:
            if graph_type == 'xy':
                graph_range = (variable, xmin, xmax)
            elif graph_type == 'polar':
                graph_range = (variable, pmin, pmax)
            elif graph_type == 'parametric':
                graph_range = (variable, tmin, tmax)

            if graph_type in ('xy', 'polar'):
                series = LineOver1DRangeSeries(func,
                                               graph_range,
                                               nb_of_points=150)
            elif graph_type == 'parametric':
                series = Parametric2DLineSeries(x_func,
                                                y_func,
                                                graph_range,
                                                nb_of_points=150)
            # returns a list of [[x,y], [next_x, next_y]] pairs
            series = series.get_segments()
        except TypeError:
            raise ValueError("Cannot plot function")

        xvalues = []
        yvalues = []

        def limit_y(y):
            CEILING = 1e8
            if y > CEILING:
                y = CEILING
            if y < -CEILING:
                y = -CEILING
            return y

        x_transform, y_transform = GRAPH_TYPES[graph_type]
        series.append([series[-1][1], None])
        for point in series:
            if point[0][1] is None:
                continue
            x = point[0][0]
            y = limit_y(point[0][1])
            xvalues.append(x_transform(x, y))
            yvalues.append(y_transform(x, y))

        graphs.append({
            'type': graph_type,
            'function': sympy.jscode(sympy.sympify(func)),
            'points': {
                'x': xvalues,
                'y': yvalues
            },
            'data': None
        })
    return {'variable': repr(variable), 'graphs': json.dumps(graphs)}
示例#57
0
def test_jscode_Rational():
    assert jscode(Rational(3, 7)) == "3/7"
    assert jscode(Rational(18, 9)) == "2"
    assert jscode(Rational(3, -7)) == "-3/7"
    assert jscode(Rational(-3, -7)) == "3/7"
示例#58
0
def test_jscode_exceptions():
    assert jscode(ceiling(x)) == "Math.ceil(x)"
    assert jscode(Abs(x)) == "Math.abs(x)"
示例#59
0
def test_jscode_Integer():
    assert jscode(Integer(67)) == "67"
    assert jscode(Integer(-1)) == "-1"
示例#60
0
def test_jscode_functions():
    assert jscode(sin(x) ** cos(x)) == "Math.pow(Math.sin(x), Math.cos(x))"