Exemple #1
0
def test_product():

    k = pystencils.TypedSymbol('k', create_type('int64'))

    sum = sympy.Product(k, (k, 1, 10))
    expanded_sum = sum.doit()

    print(sum)
    print(expanded_sum)

    x = pystencils.fields('x: int64[1d]')

    assignments = pystencils.AssignmentCollection({x.center(): sum})

    ast = pystencils.create_kernel(assignments)
    code = str(pystencils.show_code(ast))
    kernel = ast.compile()

    print(code)
    assert 'int64_t product' in code

    array = np.zeros((10, ), np.int64)

    kernel(x=array)

    assert np.allclose(array, int(expanded_sum) * np.ones_like(array))
Exemple #2
0
def handle_sum_or_prod(func, name):
    val = convert_mp(func.mp())
    iter_var = convert_expr(func.subeq().equality().expr(0))
    start = convert_expr(func.subeq().equality().expr(1))
    end = convert_expr(func.supexpr().expr())

    if name == "summation":
        return sympy.Sum(val, (iter_var, start, end))
    elif name == "product":
        return sympy.Product(val, (iter_var, start, end))
Exemple #3
0
    def __handle_sum_or_prod(func, name):
        val = Math.__convert_mp(func.mp())
        iter_var = Math.__convert_expr(func.subeq().equality().expr(0))
        start = Math.__convert_expr(func.subeq().equality().expr(1))
        if func.supexpr().expr():  # ^{expr}
            end = Math.__convert_expr(func.supexpr().expr())
        else:  # ^atom
            end = Math.__convert_atom(func.supexpr().atom())

        if name == "summation":
            return sympy.Sum(val, (iter_var, start, end))
        elif name == "product":
            return sympy.Product(val, (iter_var, start, end))
Exemple #4
0
def handle_sum_or_prod(func, name):
    val = convert_mp(func.mp())
    iter_var = None
    start = None
    if func.subeq():  # e.g. _{i=0}
        iter_var = convert_expr(func.subeq().equality().expr(0))
        start = convert_expr(func.subeq().equality().expr(1))
    elif func.subexpr().expr():  # _{expr}
        iter_var = convert_expr(func.subexpr().expr())
    else:  # _atom
        iter_var = convert_atom(func.subexpr().atom())
    if func.supexpr():
        if func.supexpr().expr():  # ^{expr}
            end = convert_expr(func.supexpr().expr())
        else:  # ^atom
            end = convert_atom(func.supexpr().atom())
    if name == "summation":
        if start is not None:
            return sympy.Sum(val, (iter_var, start, end))
        else:
            return sympy.Function('sum_{' + str(iter_var) + '}')(val)
    elif name == "product":
        return sympy.Product(val, (iter_var, start, end))
Exemple #5
0
# In[172]:

x = sympy.Sum(1 / (n**2), (n, 1, oo))

# In[173]:

x

# In[174]:

x.doit()

# In[175]:

x = sympy.Product(n, (n, 1, 7))

# In[176]:

x

# In[177]:

x.doit()

# In[178]:

x = sympy.Symbol("x")

# In[179]:
Exemple #6
0
sympy.limit(f, x, y)  # sin(y)/y

# Example:
# limit(x→y){sin(x)/x}
sympy.limit(sympy.sin(x) / x, x, y)  # sin(y)/y
sympy.limit(sympy.sin(x) / x, x, 0)  # 1
sympy.limit(sympy.sin(x) / x, x, sympy.oo)  # 0 (The reality is none)

expr = (x**2 - 3 * x) / (2 * x - 2)
p = sympy.limit(expr / x, x, sympy.oo)
q = sympy.limit(expr - p * x, x, sympy.oo)
p, q  # (1/2, -1)

#%% Sums and Products

import numpy as np
import sympy
import math
from sympy import I, pi, oo

n = sympy.symbols("n", integer=True)

# Sums:
S = sympy.Sum(1 / (n**2), (n, 1, oo))
S  # Sum(n**(-2), (n, 1, oo))
S.doit()  # pi**2/6

# Products:
X = sympy.Product(n, (n, 1, 16))
X  # Product(n, (n, 1, 512))
X.doit()  # 20922789888000
Exemple #7
0
    ("\\sqrt[y]{\\sin x}", sympy.root(sympy.sin(x), y)),
    ("\\sqrt[\\theta]{\\sin x}", sympy.root(sympy.sin(x), theta)),
    ("x < y", sympy.StrictLessThan(x, y)), ("x \\leq y", sympy.LessThan(x, y)),
    ("x > y", sympy.StrictGreaterThan(x, y)),
    ("x \\geq y", sympy.GreaterThan(x, y)), ("\\mathit{x}", sympy.Symbol('x')),
    ("\\mathit{test}", sympy.Symbol('test')),
    ("\\mathit{TEST}", sympy.Symbol('TEST')),
    ("\\mathit{HELLO world}", sympy.Symbol('HELLO world')),
    ("\\sum_{k = 1}^{3} c", sympy.Sum(c, (k, 1, 3))),
    ("\\sum_{k = 1}^3 c", sympy.Sum(c, (k, 1, 3))),
    ("\\sum^{3}_{k = 1} c", sympy.Sum(c, (k, 1, 3))),
    ("\\sum^3_{k = 1} c", sympy.Sum(c, (k, 1, 3))),
    ("\\sum_{k = 1}^{10} k^2", sympy.Sum(k**2, (k, 1, 10))),
    ("\\sum_{n = 0}^{\\infty} \\frac{1}{n!}",
     sympy.Sum(_Pow(_factorial(n), -1), (n, 0, sympy.oo))),
    ("\\prod_{a = b}^{c} x", sympy.Product(x, (a, b, c))),
    ("\\prod_{a = b}^c x", sympy.Product(x, (a, b, c))),
    ("\\prod^{c}_{a = b} x", sympy.Product(x, (a, b, c))),
    ("\\prod^c_{a = b} x", sympy.Product(x, (a, b, c))),
    ("\\ln x", _log(x, sympy.E)), ("\\ln xy", _log(x * y, sympy.E)),
    ("\\log x", _log(x, 10)), ("\\log xy", _log(x * y, 10)),
    ("\\log_2 x", _log(x, 2)), ("\\log_{2} x", _log(x, 2)),
    ("\\log_a x", _log(x, a)), ("\\log_{a} x", _log(x, a)),
    ("\\log_{11} x", _log(x, 11)), ("\\log_{a^2} x", _log(x, _Pow(a, 2))),
    ("[x]", x), ("[a + b]", _Add(a, b)),
    ("\\frac{d}{dx} [ \\tan x ]", sympy.Derivative(sympy.tan(x), x))
]

# These bad latex strings should raise an exception when parsed
BAD_STRINGS = [
    "(", ")", "a / b /", "\\frac{d}{dx}", "(\\frac{d}{dx})"