Here's the pull request discussion https://github.com/sympy/sympy/pull/1869. Since rewite __eq__ and hash functions is a bad idea, I tried to just swap inputs when they are not in order and change the test cases.
I've read the Basic class and have some questions. I can access the inputs using "self.args" but when I tried to add def eval(cls, i, f, self): it will give me an error "TypeError: eval() takes exactly 4 arguments (3 given)". Then I tried to bypass this by change it into "def eval(cls, args, self): " but now self.args is empty. What is the proper way to access the args in eval() method of this class? I also tried just to return KroneckerDelta(j ,i) when inputs are not in order but I guess this is sort of hacking and not very pretty (although it works). Bi Ge On Monday, March 4, 2013 2:32:22 PM UTC-5, Stefan Krastanov wrote: > > Just look where the inputs go/get saved. That will usually be enough. > > However, there might be some nasty magic involved because of the way > we create mathematical objects in sympy (subclasses of Basic). > > All subclasses of Basic have a "private" attribute _args, that is used > when comparing objects, creating objects or calculating hashes of > objects. All arguments to the constructor get saved there. Also, the > following is always true (unless there is a bug) for instances of > subclasses of Basic: > > type(instance)(*instance.args) == instance > > It helps to easily recreate expressions. > > On 3 March 2013 21:29, Bi Ge <[email protected] <javascript:>> wrote: > > OK after some reading let's see if my understanding is correct. Python > > variables are actually "identifiers" that sort of > > point to objects. In my example, i and j bind with the 2 inputs (symbol > or > > integer) of KroneckerDelta. Even though > > I reassign i and j to different values, the actual inputs stay > unchanged. Is > > this correct? If so, how should I change them? > > > > Bi Ge > > > > > > On Sunday, March 3, 2013 1:23:44 PM UTC-5, Stefan Krastanov wrote: > >> > >> I do not think that the problem here is with your understanding of > >> sympy but rather with the way that pythonic variables work. > >> > >> for instance: > >> > >> L = [1,2] > >> a = L[0] # 'a' points to the object int(1) > >> a = 5 # 'L' does not change but 'a' points to the object int(5) > >> > >> I used the verb "points" but it would be wrong to say that python > >> variables are pointers. Checkout python's docs and search > >> stackoverflow for questions on this subject. > >> > >> > >> PS > >> And be aware that > >> > >> L[i] = var > >> > >> is a syntactic sugar for a method call, something quite different from > >> > >> a = var > >> > >> On 3 March 2013 04:52, Bi Ge <[email protected]> wrote: > >> > Hi Sympy community, > >> > > >> > I've been looking at issue3479 and trying to fix it by using minlex. > >> > Right now I just put the following at the end of def eval(cls, i, > j): > >> > sort_args = minlex( ( i , j ) ) > >> > i = sort_args[0] > >> > j = sort_args[1] > >> > > >> > However, it still gives me the unchanged result such as: > >> >>>>KroneckerDelta(n, m) > >> > KroneckerDelta(n, m) > >> > > >> >>>>KroneckerDelta(m, n) > >> > KroneckerDelta(m, n) > >> > > >> > I guess I still don't fully understand how symbols work in this > >> > function. > >> > Any help will be appreciated. > >> > > >> > Regards, > >> > > >> > Bi Ge > >> > > >> > -- > >> > 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 [email protected]. > >> > To post to this group, send email to [email protected]. > >> > Visit this group at http://groups.google.com/group/sympy?hl=en. > >> > For more options, visit https://groups.google.com/groups/opt_out. > >> > > >> > > > > > -- > > 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 [email protected] <javascript:>. > > To post to this group, send email to [email protected]<javascript:>. > > > Visit this group at http://groups.google.com/group/sympy?hl=en. > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > -- 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
