Beispiel #1
0
 def __new__(cls, arg):
     # if hasattr(arg, 'is_constant') and arg.is_constant():
     if hasattr(arg, 'is_number') and arg.is_number:
         return arg
     elif arg in g_scalars:
         return arg
     elif isinstance(arg, int) or isinstance(arg, float):
         return arg
     if arg.is_Add:
         f = []
         for A in arg.args:
             f.append(t(A))
         return Add(*f)
     elif arg.is_Mul:
         L = len(arg.args)
         return Mul(*[t(arg.args[L-i-1]) for i in range(L)])
     elif arg.func == t:
         return arg.args[0]
     elif arg.func == Id:
         return Id()
     elif arg.func == inv:
         return inv(t(Function.__new__(cls, arg.args[0])))
     elif arg.func == Pow:
         return Pow(t(arg.args[0]), arg.args[1])
     elif arg in g_symms:
         return arg
     elif arg in g_asymms:
         return -arg
     else:
         return Function.__new__(cls, arg)
Beispiel #2
0
    def __new__(cls, *args, **kwargs):
        if cls in _SymbolCache:
            newobj = Function.__new__(cls, *args)
            newobj._cached_init()
        else:
            name = kwargs.get('name')
            if len(args) < 1:
                args = cls._indices(**kwargs)

            # Create the new Function object and invoke __init__
            newcls = cls._symbol_type(name)
            newobj = Function.__new__(newcls, *args)
            newobj.__init__(*args, **kwargs)
            # Store new instance in symbol cache
            newcls._cache_put(newobj)
        return newobj
Beispiel #3
0
 def __new__(cls, arg):
     if arg.is_Mul:
         L = len(arg.args)
         return Mul(*[inv(arg.args[L-i-1]) for i in range(L)])
     elif arg.func == inv:
         return arg.args[0]
     elif arg.func == Pow:
         return Pow(inv(arg.args[0]), arg.args[1])
     elif arg.func == Id:
         return Id()
     else:
         return Function.__new__(cls, arg)
Beispiel #4
0
    def __new__(cls, mat):
        if mat.is_Add:
            return Add(*[Function.__new__(cls, A) for A in mat.args])
        elif len(mat.args) > 0 and mat.func == trace:
            return Function.__new__(cls, mat.args[0])

        elif mat.is_Mul:
            scalars = []
            non_scalars = []
            for a in mat.args:
                if a in g_scalars:
                    scalars.append(a)
                elif a.func == trace:
                    non_scalars.append(a.args[0])
                else:
                    non_scalars.append(a)
            if not non_scalars:
                return Mul(*(scalars + Function.__new__(cls, Id(None))))
            else:
                return Mul(*(scalars + [Function.__new__(
                    cls, Mul(*non_scalars))]))
        return Function.__new__(cls, mat)
Beispiel #5
0
    def __new__(cls, *args, **kwargs):
        if cls in _SymbolCache:
            options = kwargs.get('options', {})
            newobj = Function.__new__(cls, *args, **options)
            newobj._cached_init()
        else:
            name = kwargs.get('name')
            if len(args) < 1:
                args = cls._indices(**kwargs)

            # Create the new Function object and invoke __init__
            newcls = cls._symbol_type(name)
            options = kwargs.get('options', {})
            newobj = Function.__new__(newcls, *args, **options)
            newobj.__init__(*args, **kwargs)

            # All objects cached on the AbstractSymbol /newobj/ keep a reference
            # to /newobj/ through the /function/ field. Thus, all indexified
            # object will point to /newobj/, the "actual Function".
            newobj.function = newobj

            # Store new instance in symbol cache
            newcls._cache_put(newobj)
        return newobj
Beispiel #6
0
 def __new__(cls, name, arguments=None, **kwargs):
     _arguments = []
     for i in as_tuple(arguments):
         if isinstance(i, str):
             # Make sure there's no cast to sympy.Symbol underneath
             # We don't know what `i` is exactly, because the caller won't
             # tell us, but we're just better off with ReservedWord
             _arguments.append(ReservedWord(i))
         else:
             _arguments.append(i)
     arguments = tuple(_arguments)
     if isinstance(name, str):
         name = Keyword(name)
     obj = Function.__new__(cls, name, Tuple(*arguments))
     obj._name = name
     obj._arguments = arguments
     return obj
Beispiel #7
0
 def __new__(cls, name, arguments=None):
     arguments = as_tuple(arguments)
     obj = Function.__new__(cls, name, *arguments)
     obj._name = name
     obj._arguments = arguments
     return obj
Beispiel #8
0
 def __new__(cls, *args, **options):
     obj = Function.__new__(cls, *args, **options)
     return obj
Beispiel #9
0
 def __new__(cls, low, high=None, size=None):
     return Function.__new__(cls)
Beispiel #10
0
 def __new__(cls, mat):
     return Function.__new__(cls, mat)
Beispiel #11
0
 def __new__(cls, arg=None):
     return(Function.__new__(cls))