Ok, that make sense, thanks for the quick reply! Adam
On Jun 29, 12:16 pm, Mateusz Paprocki <[email protected]> wrote: > Hi, > > On 29 June 2011 18:53, Adam Moore <[email protected]> wrote: > > > Ok, so I've been trying to understand how SmyPy performs basic > > simplification. I've traced through to when __add__(self, other) is > > called in expr.py and returns Add(self, other). What I don't > > understand is how does an Add object get created when __new__ and > > __init__ are not implemented in the Add class? > > > For example, I see where Basic calls obj = object.__new__(cls), which > > in a case cls would be Add, but how is the Add object created that way > > if there is no implementation of __new__ or __init__ in Add? > > > And also, I haven't found ANY __init__ reimplementations anywhere, but > > only __new__. Why is this? > > Both __init__ and __new__ methods can be used to construct instances of > classes in Python, however __new__ is more flexible because allows us to > precisely control all aspects of instance creation. One of most important > features of Cls.__new__ is that it allows to construct an object that is > unrelated to Cls. This is useful for canonicalization of input arguments in > subclasses of Basic. For example > > In [1]: Add(x, y, z) > Out[1]: x + y + z > > In [2]: type(_) > Out[2]: <class 'sympy.core.add.Add'> > > In [3]: Add(1, 2, 3) > Out[3]: 6 > > In [4]: type(_) > Out[4]: <class 'sympy.core.numbers.Integer'> > > Add's __new__ method is defined in its base class, AssocOp. AssocOp calls > flatten() which is defined in Add (and also in Mul), and which performs > canonicalization of inputs, and then AssocOp.__new__, based on results from > flatten(), decides whether return an instance of Add/Mul or something else > (e.g. a Number as in the example above). > > > > > Thanks, > > > Adam > > > -- > > You received this message because you are subscribed to the Google Groups > > "sympy" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]. > > For more options, visit this group at > >http://groups.google.com/group/sympy?hl=en. > > Mateusz -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
