Python 如何将生成器添加到Sympy多边形对象?

Python 如何将生成器添加到Sympy多边形对象?,python,python-3.x,oop,sympy,python-object,Python,Python 3.x,Oop,Sympy,Python Object,我正在为我的Symphy代码编写一些测试,当然我需要比较两个Symphy矩阵。每个矩阵都包含Poly类型的对象作为其条目(实际上,它包含我创建的一个类的对象,该类扩展了Poly类,但这不会有什么区别) 问题是,当我尝试在测试中比较这些对象时,即使表达式相同,生成器也不同,即使它们相同,也会导致测试失败 例如: from sympy.matrices import Matrix expected_matrix = Matrix([[Poly(1.0*y1 + 2.0*x2 + 1.0*x1,

我正在为我的Symphy代码编写一些测试,当然我需要比较两个Symphy矩阵。每个矩阵都包含
Poly
类型的对象作为其条目(实际上,它包含我创建的一个类的对象,该类扩展了
Poly
类,但这不会有什么区别)

问题是,当我尝试在测试中比较这些对象时,即使表达式相同,生成器也不同,即使它们相同,也会导致测试失败

例如:

from sympy.matrices import Matrix 

expected_matrix = Matrix([[Poly(1.0*y1 + 2.0*x2 + 1.0*x1, y1, x2, x1, domain='RR')]])

actual_matrix = Matrix([[Poly(1.0*y1 + 1.0*x2, y2, y1, x2, x1, domain='RR') + Poly(1.0*x2 + 1.0*x1, y2, y1, x2, x1, domain='RR')]])

# however, when these get compared, they don't agree because notice that the `y2` generator does not appear in the `expected_matrix`.
我的问题是如何使发电机相等。如何将生成器添加到实际输出中?或者,让发电机远离预期输出

由于
gens
属性是一个元组,因此这很困难,因为我不能只向
gens
属性添加一个元素:

actual_matrix.gens = expected_matrix.gens
也许我可以单独比较这些表达,但这对我来说似乎有风险(除非有经验的人能说服我不这样做)


如何比较这两件事?

如果将矩阵中的多边形转换为表达式,它将起作用

>>> expected_matrix.applyfunc(lambda x:x.as_expr())==actual_matrix.applyfunc(lambda x:x.as_expr())
True

是的,这看起来像是在比较表达式(这是我在问题末尾提到的)。这似乎有风险,因为一般来说,可能有两个表达式是相同的,但它们可能有不同的域或不同的符号。还有其他方法吗?如果您希望具有相同符号但不同域的多边形进行不同的比较,那么您必须创建自己的比较例程,因为
Poly(x,domain=RR)==Poly(x,domain=ZZ)->True
。如果是这样,您可以将元素列表与每个矩阵的
列表(map(lambda x:(x.as_expr(),x.domain))、矩阵([Poly(x,domain=ZZ)]))
进行比较。