В моем проекте мне нужно использовать evaluate=false
в то время, когда я создаю любые Add
или Mul
объекты. В этом случае я сталкиваюсь с проблемой, когда применяю проверки равенства к этим объектам. Проблема заключается в упорядочении аргументов.
Пожалуйста, рассмотрите пример ниже:
k2=Mul(*[x,y,2],evaluate=False)
k1=Mul(*[x,2,y],evaluate=False)
print k1==k2
Результат равен false
, поскольку k2.args
равны (x,y,2)
, а k1.args
равны (x,2,y)
.
Таким образом, в то время как сравнение проверяет равенство кортежей, оно возвращает false
.
Есть ли способ получить желаемый результат?
Кроме того, если я наложу некоторую операцию на кортежи (например, изменим порядок и затем проверим), произойдет сбой в случаях, когда k1
и k2
сформированы из различных объектов Mul
(например, когда k1.args
= 2*x,y
и k2.args
= 2*y,x
)
Я не могу использовать сортировку, так как в этом случае Add([x+y,z],evaluate=False)
и Add([x+z,y],evaluate=False)
будут двумя различными выражениями. Также, если я использую evalaute=True
, в этом случае Add([x+y],x])
и Add([2*x+y])
будут одинаковыми, чего я не хочу.