Когда Sympify выполняется, порядок выражений переключается (Python's Sympy) - PullRequest
0 голосов
/ 03 июня 2019

Я запустил следующую программу

from sympy import *

str = "Abs(a)*(β-α)**3/6"
print(str)
print(sympify(str))

Результат выполнения был следующим:

Abs(a)*(β-α)**3/6
(-α + β)**3*Abs(a)/6

В результате выполнения sympify порядок выражений изменился.

Я хочу сопоставить результаты выполнения следующим образом.

Abs(a)*(β-α)**3/6
Abs(a)*(β-α)**3/6

Что мне делать?


Причина, по которой я хочу это сделать, заключается в том, что яне хочу, чтобы это выглядело странно при преобразовании выражения в формат mathml.

str = "Abs(a)*(β-α)**3/6"
print(mathml(sympify(str),printer='presentation'))

Когда выполняется вышеуказанная программа, выводится следующее.

<mrow><mfrac><mrow><msup><mfenced><mrow><mrow><mo>-</mo><mi>&#945;</mi></mrow><mo>+</mo><mi>&#946;</mi></mrow></mfenced><mn>3</mn></msup><mo>&InvisibleTimes;</mo><mrow><mfenced clos
e="|" open="|"><mi>a</mi></mfenced></mrow></mrow><mn>6</mn></mfrac></mrow>

Похожеизображение ниже.

enter image description here

Я хочу, чтобы формула выглядела как на рисунке ниже.

enter image description here

1 Ответ

1 голос
/ 04 июня 2019

Если вы примените следующий diff к SymPy, я думаю, что ваш случай будет работать:

diff --git a/sympy/printing/str.py b/sympy/printing/str.py
index ee560ca..cb0db5e 100644
--- a/sympy/printing/str.py
+++ b/sympy/printing/str.py
@@ -51,6 +51,8 @@ def _print_Add(self, expr, order=None):

         PREC = precedence(expr)
         l = []
+        if len(terms) == 2 and str(terms[0])[0] == '-' and str(terms[1])[0] != '-':
+            terms.reverse()
         for term in terms:
             t = self._print(term)
             if t.startswith('-'):

(при этом изменении печатается b - a вместо того же, что и -a + b.)

...