0

我正在为我的 sympy 代码编写一些测试,自然我需要比较两个 sympy 矩阵。每个矩阵都包含类型的对象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

也许我可以单独比较表达式,但这对我来说似乎很冒险(除非有更多经验的人可以说服我)。

我如何比较这两件事?

4

1 回答 1

1

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

>>> expected_matrix.applyfunc(lambda x:x.as_expr())==actual_matrix.applyfunc(lambda x:x.as_expr())
True
于 2019-09-20T12:28:30.303 回答