Ответ 1
Почему аргумент arg имеет важное значение для его правильности?
Единственный способ предотвратить это - установить, что ваши символы являются некоммутативными (x = Symbol('x', commutative=False)
). Объекты SymPy сравниваются, сравнивая args
, поэтому для работы x*y*z == y*x*z
аргументы должны сортироваться канонически. Были некоторые попытки получить эту работу без явной сортировки (главным образом по соображениям производительности), но обратите внимание, что даже если бы мы это сделали, никаких гарантий относительно порядка arg, особенно если вы выполняете какую-либо операцию над выражением. Очень часто функции перестраивают выражения в SymPy, которые обычно используют какой-то другой несвязанный порядок от оригинала.