Давайте рассмотрим выражение a = x + x + y + z + x + y + 2. Каким образом SymPy автоматически манипулирует выражением, чтобы вывести результат как 3 * x + 3 * y + z + 2 в случай сложения? Какая структура данных или алгоритм здесь работают?
Я немного углубился в код SymPy, и мне показалось, что, возможно, был какой-то словарь для сбора терминов (в функции sympy.core.add.Add.flatten), но поправьте меня, если я неправильно.