私のプロジェクトでは、またはオブジェクトevaluate=false
を作成するときに使用する必要があります。この場合、これらのオブジェクトに等価チェックを適用すると問題に直面します。問題は、引数の順序によるものです。Add
Mul
以下の例を検討してください。
k2=Mul(*[x,y,2],evaluate=False)
k1=Mul(*[x,2,y],evaluate=False)
print k1==k2
結果はfalse
as k2.args
are(x,y,2)
とk1.args
are(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)
2 つの異なる式になります。またevalaute=True
、この場合はAdd([x+y],x])
andAdd([2*x+y])
を使用すると同じになりますが、これは望ましくありません。