Я хотел бы сопоставить шаблон с выражением таким образом, чтобы возвращались все возможные совпадения. Используя SymPy, я могу сопоставить свой шаблон с моим выражением одним произвольно выбранным способом. Как я могу использовать сопоставление с образцом для получения всего набора (вплоть до произвольных переименований)
В настоящее время я могу сделать это
>>> p, q = Wild('p'), Wild('q')
>>> x, y, z = symbols('x,y,z')
>>> (p+q).matches(x+y+z)
{p: y + z, q: x}
я хочу сделать это
>>> (p+q).allmatches(x+y+z)
{{p: x, q: y + z}, {p: y, q: x + z}, {p: z, q: x + y}}
Обратите внимание, что представлены все возможные разбиения. Я был бы готов реализовать это сам. Каковы стандартные алгоритмы сопоставления с образцом, которые производят все возможные совпадения?