Как добавить генератор к объекту Sympy Poly? - PullRequest
0 голосов
/ 19 сентября 2019

Я пишу несколько тестов для моего кода симпози, и, естественно, мне нужно сравнить две матрицы симпй.Каждая матрица содержит объекты типа 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

Возможно, я мог бы сравнить выраженияв одиночку, но это кажется мне рискованным (если только кто-то с большим опытом в этом не сможет убедить меня в обратном).

Как мне сравнить эти две вещи?

1 Ответ

1 голос
/ 20 сентября 2019

Если вы преобразуете Polys в матрицах в выражения, это сработает.

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