Esempio n. 1
0
def test_numbered_symbols():
    ns = cse_main.numbered_symbols(prefix='y')
    assert list(itertools.islice(ns, 0, 10)) == [Symbol('y%s'%i) for i in range(0, 10)]
    ns = cse_main.numbered_symbols(prefix='y')
    assert list(itertools.islice(ns, 10, 20)) == [Symbol('y%s'%i) for i in range(10, 20)]
    ns = cse_main.numbered_symbols()
    assert list(itertools.islice(ns, 0, 10)) == [Symbol('x%s'%i) for i in range(0, 10)]
Esempio n. 2
0
def test_numbered_symbols():
    ns = cse_main.numbered_symbols(prefix='y')
    assert list(itertools.islice(ns, 0, 10)) == [Symbol('y%s'%i) for i in range(0, 10)]
    ns = cse_main.numbered_symbols(prefix='y')
    assert list(itertools.islice(ns, 10, 20)) == [Symbol('y%s'%i) for i in range(10, 20)]
    ns = cse_main.numbered_symbols()
    assert list(itertools.islice(ns, 0, 10)) == [Symbol('x%s'%i) for i in range(0, 10)]
Esempio n. 3
0
def optimize(exprs, subs, rearrange = False):
    # map expressions with tokens to token
    token_exprs = {}
    for (q,e) in exprs:
	for t in tokens(e):
	    if not t in token_exprs: token_exprs[t] = []
	    token_exprs[t] += [e]

    # expressions with common tokens/terms
    T = numbered_symbols("f")
    subs += [(T.next(), k) for (k,v) in token_exprs.items() if len(v) > 1]
    
    # replace common terms with Tn symbol
    subs_exprs = []
    for (q,e) in exprs:
	for (T,t) in subs: e = e._eval_subs(t, T)
	subs_exprs += [(q,e)]

    if rearrange:
	cmp = lambda x,y: len(x[1].atoms(Symbol)) - len(y[1].atoms(Symbol))
	Q = sorted(subs_exprs, cmp, reverse = True)
	subs_exprs = [Q.pop()]
	while Q:
	    a = subs_exprs[-1][1].atoms(Symbol)
	    (p,s) = Q[-1]
	    for (q,t) in Q[:-1]:
		if len(t.atoms(Symbol) | a) < len(s.atoms(Symbol) | a): (p,s) = (q,t)
	    subs_exprs.append((p,s))
	    Q.remove((p,s))
	subs_exprs.reverse()

    return (subs_exprs, subs)
Esempio n. 4
0
def optimize(exprs, subs, rearrange=False):
    # map expressions with tokens to token
    token_exprs = {}
    for (q, e) in exprs:
        for t in tokens(e):
            if not t in token_exprs: token_exprs[t] = []
            token_exprs[t] += [e]

    # expressions with common tokens/terms
    T = numbered_symbols("f")
    subs += [(T.next(), k) for (k, v) in token_exprs.items() if len(v) > 1]

    # replace common terms with Tn symbol
    subs_exprs = []
    for (q, e) in exprs:
        for (T, t) in subs:
            e = e._eval_subs(t, T)
        subs_exprs += [(q, e)]

    if rearrange:
        cmp = lambda x, y: len(x[1].atoms(Symbol)) - len(y[1].atoms(Symbol))
        Q = sorted(subs_exprs, cmp, reverse=True)
        subs_exprs = [Q.pop()]
        while Q:
            a = subs_exprs[-1][1].atoms(Symbol)
            (p, s) = Q[-1]
            for (q, t) in Q[:-1]:
                if len(t.atoms(Symbol) | a) < len(s.atoms(Symbol) | a):
                    (p, s) = (q, t)
            subs_exprs.append((p, s))
            Q.remove((p, s))
        subs_exprs.reverse()

    return (subs_exprs, subs)
Esempio n. 5
0
import itertools

from sympy import (Add, Mul, Pow, Symbol, exp, sqrt, symbols, sympify, cse,
    Matrix, S, sin, Eq)
from sympy.simplify import cse_main, cse_opts
from sympy.utilities.pytest import XFAIL

w,x,y,z = symbols('w,x,y,z')
x0,x1,x2 = list(itertools.islice(cse_main.numbered_symbols(), 0, 3))
negone = sympify(-1)


def test_numbered_symbols():
    ns = cse_main.numbered_symbols(prefix='y')
    assert list(itertools.islice(ns, 0, 10)) == [Symbol('y%s'%i) for i in range(0, 10)]
    ns = cse_main.numbered_symbols(prefix='y')
    assert list(itertools.islice(ns, 10, 20)) == [Symbol('y%s'%i) for i in range(10, 20)]
    ns = cse_main.numbered_symbols()
    assert list(itertools.islice(ns, 0, 10)) == [Symbol('x%s'%i) for i in range(0, 10)]

# Dummy "optimization" functions for testing.

def opt1(expr):
    return expr+y
def opt2(expr):
    return expr*z

def test_preprocess_for_cse():
    assert cse_main.preprocess_for_cse(x, [(opt1, None)]) == x+y
    assert cse_main.preprocess_for_cse(x, [(None, opt1)]) == x
    assert cse_main.preprocess_for_cse(x, [(None, None)]) == x
Esempio n. 6
0
import itertools

from sympy import (Add, Mul, Pow, Symbol, exp, sqrt, symbols, sympify, cse,
                   Matrix, S, cos, sin, Eq)
from sympy.functions.special.hyper import meijerg
from sympy.simplify import cse_main, cse_opts
from sympy.utilities.pytest import XFAIL

w, x, y, z = symbols('w,x,y,z')
x0, x1, x2 = list(itertools.islice(cse_main.numbered_symbols(), 0, 3))
negone = sympify(-1)


def test_numbered_symbols():
    ns = cse_main.numbered_symbols(prefix='y')
    assert list(itertools.islice(
        ns, 0, 10)) == [Symbol('y%s' % i) for i in range(0, 10)]
    ns = cse_main.numbered_symbols(prefix='y')
    assert list(itertools.islice(
        ns, 10, 20)) == [Symbol('y%s' % i) for i in range(10, 20)]
    ns = cse_main.numbered_symbols()
    assert list(itertools.islice(
        ns, 0, 10)) == [Symbol('x%s' % i) for i in range(0, 10)]


# Dummy "optimization" functions for testing.


def opt1(expr):
    return expr + y