On 20/04/2022 21:18, Aaron Meurer wrote:
Removing the ordering is not a straightforward thing to do. There is
an important detail that depends on the ordering, which is that
something like x*y == y*x works because it assumes that the terms are
in canonical order, so it just compares them directly. And even
outside of __eq__ itself there may be other places that implicitly
make use of this fact. There's also a further complication which is
that for Add and Mul, any purely numeric part (i.e., the Rational or
Float term if it is nonzero) is always the first term in the args, and
many things rely on this fact.

This is a laudable change to make though. If we can somehow remove the
ordering from the core entirely (although I'm not even sure if that's
doable from a backwards compatibility point of view), it would also
improve the performance, since right now every Add and Mul that gets
created has to call sort() its arguments, which not only has to do the
sorting algorithm but it has to compute a canonical sort key for each
term. A good place to start is to look at And and Or, which go sort of
half way and don't sort their args until you actually request .args
(they also have ._argset which is a frozenset of the args).

I quite like the fact that every expression gets ordered as it goes through SymPy (and Mathematica did the same the last time I used it). I mean people look at expressions as well as computers, and I think that in complicated nested expressions it would be potentially confusing if the same expression could appear with different ordering.

Also, every time an algorithm was improved in SymPy, I imagine there would be the possibility that results would differ from the earlier version just because of ordering.

Anyone who wanted a specific ordering could presumably write something that would convert an expression to string and order it as desired.

David


--
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/24203dfd-6da9-4299-e2a1-5814ae2bf25c%40dbailey.co.uk.

Reply via email to