On Sat, Mar 24, 2018 at 11:16 AM, Aaron Meurer <asmeu...@gmail.com> wrote:
> Assumedly the point of this is for performance, so that something like > (x + y + z) + w doesn't require rebuilding x + y + z. > > I've thought for some time that Add should save its coeff: term > dictionary, to make further additions faster. I'm not sure if this > requires mutability. > That's exactly what symengine does. It keeps the internal dictionary structure and uses the dictionary. This makes .args a bit slower in symengine, but with caching that should go away. Note that you'd need a dictionary and a vector to keep the non-commutative and unevalauted objects. Isuru > I believe mutability can work for builder classes, but it requires > very careful bookkeeping, to invalidate anything pointing to it once > it mutates. And as you noted, it can't be included in the hash of any > mutable object. So in general, the mutable builder should be > considered a cached preprocessing step. If it exists, and hasn't been > invalidated, it can be used. Otherwise, it should be rebuilt from > scratch. > > Aaron Meurer > > On Sat, Mar 24, 2018 at 11:28 AM, Francesco Bonazzi > <franz.bona...@gmail.com> wrote: > > I was considering the possibility of mutable expressions in SymPy. > > > > Currently expressions such as Add and Mul are immutable once the class > > constructor has been called and modifying their content requires the > object > > to be re-built. > > > > I have tried to write a draft to implement the builder pattern, for > example > > with an AddBuilder object: > > https://github.com/Upabjojr/sympy/blob/f4e26d9a7314ad5093b97c7e84a581 > f523d38efb/sympy/core/dispatchers_add.py#L8 > > > > The builder class is mutable and would be added elements until it is > passed > > to some method that builds the underlying class, Add in this case. > > > > At this point construction of objects could be done through multiple > > dispatching an append method to the builder class. Unfortunately this > makes > > everything much more complicated, as every object that potentially needs > to > > subclass __add__ could potentially need its own builder object. > > > > There have been other attempts at creating mutable corresponding objects, > > e.g.: > > https://github.com/sympy/sympy/blob/master/sympy/unify/core.py#L24 > > > > Unfortunately once the SymPy expression is deconstructed, it remains > > unusable. > > > > Proposal:what about allowing SymPy objects to exist in a mutable state? > For > > example, introduce a mutable=False option to Basic, so that if mutable is > > set to True, there could be a way to edit the args. > > > > There could be potential problems with the hashing. One possible solution > > could be not to allow immutable objects to contain mutable ones. > > > > -- > > You received this message because you are subscribed to the Google Groups > > "sympy" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to sympy+unsubscr...@googlegroups.com. > > To post to this group, send email to sympy@googlegroups.com. > > Visit this group at https://groups.google.com/group/sympy. > > To view this discussion on the web visit > > https://groups.google.com/d/msgid/sympy/ecc4eaa9-28dc- > 44a4-9ed0-402adea432e5%40googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > Visit this group at https://groups.google.com/group/sympy. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/sympy/CAKgW%3D6JiU_Qixnk3Eon8P_rBwxUNf5gs% > 2BiFEcWmM3%3DYC_eTYxg%40mail.gmail.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CA%2B01voMQ_G99SXv2iUpc8ofQjeaC0qiF7jAtiakVToZ-pEHcww%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.