Ejemplo n.º 1
0
Archivo: rl.py Proyecto: vchekan/sympy
 def ident_remove(expr):
     """ Remove identities """
     ids = map(isid, expr.args)
     if sum(ids) == 0:  # No identities. Common case
         return expr
     elif sum(ids) != len(ids):  # there is at least one non-identity
         return new(expr.__class__,
                    *[arg for arg, x in zip(expr.args, ids) if not x])
     else:
         return new(expr.__class__, expr.args[0])
Ejemplo n.º 2
0
 def ident_remove(expr):
     """ Remove identities """
     ids = map(isid, expr.args)
     if sum(ids) == 0:           # No identities. Common case
         return expr
     elif sum(ids) != len(ids):  # there is at least one non-identity
         return new(expr.__class__,
                    *[arg for arg, x in zip(expr.args, ids) if not x])
     else:
         return new(expr.__class__, expr.args[0])
Ejemplo n.º 3
0
 def conglomerate(expr):
     """ Conglomerate together identical args x + x -> 2x """
     groups = sift(expr.args, key)
     counts = dict((k, sum(map(count, args))) for k, args in groups.items())
     newargs = [combine(cnt, mat) for mat, cnt in counts.items()]
     if set(newargs) != set(expr.args):
         return new(type(expr), *newargs)
     else:
         return expr
Ejemplo n.º 4
0
Archivo: rl.py Proyecto: vchekan/sympy
 def conglomerate(expr):
     """ Conglomerate together identical args x + x -> 2x """
     groups = sift(expr.args, key)
     counts = dict((k, sum(map(count, args))) for k, args in groups.items())
     newargs = [combine(cnt, mat) for mat, cnt in counts.items()]
     if set(newargs) != set(expr.args):
         return new(type(expr), *newargs)
     else:
         return expr
Ejemplo n.º 5
0
Archivo: rl.py Proyecto: vchekan/sympy
def flatten(expr, new=new):
    """ Flatten T(a, b, T(c, d), T2(e)) to T(a, b, c, d, T2(e)) """
    cls = expr.__class__
    args = []
    for arg in expr.args:
        if arg.__class__ == cls:
            args.extend(arg.args)
        else:
            args.append(arg)
    return new(expr.__class__, *args)
Ejemplo n.º 6
0
def flatten(expr):
    """ Flatten T(a, b, T(c, d), T2(e)) to T(a, b, c, d, T2(e)) """
    cls = expr.__class__
    args = []
    for arg in expr.args:
        if arg.__class__ == cls:
            args.extend(arg.args)
        else:
            args.append(arg)
    return new(expr.__class__, *args)
Ejemplo n.º 7
0
 def __add__(self, item):
   return new(self, [*self, item])
Ejemplo n.º 8
0
 def all_rl(expr):
     if is_leaf(expr):
         return expr
     else:
         args = map(rule, expr.args)
         return new(type(expr), *args)
Ejemplo n.º 9
0
 def top_down_rl(expr):
     newexpr = rule(expr)
     if newexpr.is_Atom:
         return newexpr
     return new(newexpr.__class__, *map(top_down_rl, newexpr.args))
Ejemplo n.º 10
0
 def bottom_up_rl(expr):
     if expr.is_Atom:
         return rule(expr)
     else:
         return rule(new(expr.__class__, *map(bottom_up_rl, expr.args)))
Ejemplo n.º 11
0
 def bottom_up_rl(expr):
     if is_leaf(expr):
         return rule(expr)
     else:
         return rule(new(type(expr), *map(bottom_up_rl, expr.args)))
Ejemplo n.º 12
0
 def __mul__(self, other):
   return new(self, zip(self, other))
Ejemplo n.º 13
0
 def __rmul__(self, other):
   return new(self, zip(other, self))
Ejemplo n.º 14
0
 def __rand__(self, other):
   return new(self, [*other, *self])
Ejemplo n.º 15
0
 def __and__(self, other):
   return new(self, [*self, *other])
Ejemplo n.º 16
0
 def top_down_rl(expr):
     newexpr = rule(expr)
     if is_leaf(newexpr):
         return newexpr
     return new(type(newexpr), *map(top_down_rl, newexpr.args))
Ejemplo n.º 17
0
 def bottom_up_rl(expr):
     if is_leaf(expr):
         return rule(expr)
     else:
         return rule(new(type(expr), *map(bottom_up_rl, expr.args)))
Ejemplo n.º 18
0
 def top_down_rl(expr):
     newexpr = rule(expr)
     if is_leaf(newexpr):
         return newexpr
     return new(type(newexpr), *map(top_down_rl, newexpr.args))
Ejemplo n.º 19
0
Archivo: rl.py Proyecto: vchekan/sympy
 def sort_rl(expr):
     return new(expr.__class__, *sorted(expr.args, key=key))
Ejemplo n.º 20
0
 def __radd__(self, item):
   return new(self, [item, *self])
Ejemplo n.º 21
0
 def bottom_up_rl(expr):
     if not isinstance(expr, Basic) or expr.is_Atom:
         return rule(expr)
     else:
         return rule(new(expr.__class__, *map(bottom_up_rl, expr.args)))
Ejemplo n.º 22
0
 def top_down_rl(expr):
     newexpr = rule(expr)
     if not isinstance(newexpr, Basic) or newexpr.is_Atom:
         return newexpr
     return new(newexpr.__class__, *map(top_down_rl, newexpr.args))
Ejemplo n.º 23
0
 def sort_rl(expr):
     return new(expr.__class__, *sorted(expr.args, key=key))
Ejemplo n.º 24
0
 def all_rl(expr):
     if is_leaf(expr):
         return expr
     else:
         args = map(rule, expr.args)
         return new(type(expr), *args)