Looks like I did indeed miss the deliberate mistake. Sorry for being an idiot and thank you for taking the time.
For clarity, here is what I intended to post: import sympy as sp x = sp.Symbol('x') y = sp.Symbol('x') # deliberate mistake here x == y # True x is y # True I'm aware of Python names not being accessible through introspection. It still seems as though two calls to "Symbol('x')" should create two distinct instances of a SymPy symbol, which just happen to share the name. However, I see the sense in comparing symbols by name. Has this behaviour changed since a previous version? I am sure that I had an issue where I had an expression e.g. f=x**2 and differentiating w.r.t a newly created symbol by the name "x" gave zero, because it was not the same "x". (This works as expected in recent versions and gives f.diff(x) == 2*x, so I can't reproduce this half-remembered claimed behaviour.) On Wednesday, June 3, 2020 at 11:30:31 PM UTC+1, Oscar wrote: > > >> >> On Wed, Jun 3, 2020 at 12:53 PM James Bateman <james....@gmail.com> > wrote: > >> >>> > >> >>> I've just discovered a bug in my code which boiled down to the > following, where a symbol "y" was given the same SymPy name as an existing > symbol. > >> >>> > >> >>> import sympy as sp > >> >>> x = sp.Symbol('x') > >> >>> y = sp.Symbol('y') > >> >>> > >> >>> x == y # True > >> >>> x is y # True; expected False > >> >>> x + y # 2*x; expected x + x (which would have made the bug in my > code more apparent) > > On Wed, 3 Jun 2020 at 23:18, James Bateman <james....@gmail.com > <javascript:>> wrote: > > > > Thank you, but I don't need help debugging my code; I had a typo which > boiled down to the example I gave. My only question was whether this was > intended behaviour. > > > > Please note the deliberate mistake of "y = Symbol('x')", which you may > have missed when interpreting my question. True is returned for both "x == > y" and "x is y" in SymPy 1.2 (local installation) and SymPy 1.5.1 ( > http://live.sympy.org). > > I think you maybe forgot to make the deliberate mistake when posting > here (see above). > > The name of the Python variable does not need to match the name of the > symbol. Sympy has no way of knowing what name you use for the Python > variable so if you do > > x = Symbol('y') > > then there is no way for sympy to know that you assigned the result to > a variable called x. That's not so much an intended feature but just > how Python works. > > Symbols with the same name (and assumptions) as considered equivalent > in sympy which is useful in many situations. If you want to create a > symbol that will only ever compare equal to itself regardless of the > name of any other symbol then you can use Dummy: > https://docs.sympy.org/latest/modules/core.html#dummy > > Dummy is a bit awkward to use in some situations which is why it isn't > the default behaviour for symbols in sympy. > > -- > Oscar > -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/sympy/c915ba41-ee86-404e-af07-689f5e89d174%40googlegroups.com.