关于 sympy.printing.mathml 中的括号错误
About parentheses bug in sympy.printing.mathml
我用 sympify 将一个 Python 字符串转换成公式如下:
我用mathml命令把公式转换成了MathML格式。
from sympy import *
from sympy.printing.mathml import mathml
print(mathml(sympify("(2*x + 3*y + 1)*(4*x**2 - 6*x*y - 2*x + 9*y**2 - 3*y + 1)"),printer='presentation'))
结果输出了如下代码
<mrow><mrow><mrow><mn>2</mn><mo>⁢</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>3</mn><mo>⁢</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow><mo>⁢</mo><mrow><mrow><mn>4</mn><mo>⁢</mo><msup><mi>x</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>6</mn><mo>⁢</mo><mi>x</mi><mo>⁢</mo><mi>y</mi></mrow><mo>-</mo><mrow><mn>2</mn><mo>⁢</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>9</mn><mo>⁢</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>3</mn><mo>⁢</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow></mrow>
我把代码嵌入了HTML,试了下
test.html
<html>
<head>
<script async="" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</head>
<body>
<math>
<mrow><mrow><mrow><mn>2</mn><mo>⁢</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>3</mn><mo>⁢</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow><mo>⁢</mo><mrow><mrow><mn>4</mn><mo>⁢</mo><msup><mi>x</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>6</mn><mo>⁢</mo><mi>x</mi><mo>⁢</mo><mi>y</mi></mrow><mo>-</mo><mrow><mn>2</mn><mo>⁢</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>9</mn><mo>⁢</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>3</mn><mo>⁢</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow></mrow>
</math>
</body>
</html>
但是,使用此代码,输出将缺少括号,如下图所示。
[![画像の说明をここニ入力][1]][1]
我阅读了[sympy.printing.mathml][2]的[源代码]。
所以想知道_print_Interval
这个方法是干什么用的
这是否与公式中缺少括号的问题有关?
这个表达式是一个例子。
我想正确转换更复杂的公式。
在 isympy
会话中:
In [56]: sympify("(2*x + 3*y + 1)*(4*x**2 - 6*x*y - 2*x + 9*y**2 - 3*y + 1)")
Out[56]:
⎛ 2 2 ⎞
(2⋅x + 3⋅y + 1)⋅⎝4⋅x - 6⋅x⋅y - 2⋅x + 9⋅y - 3⋅y + 1⎠
我在日语版的Whosebug中得到了答案。
https://ja.whosebug.com/q/55578/22541
修复[this][1]可以解决问题。
[之前]
for term in terms:
x = self._print(term)
mrow.appendChild(x)
[之后]
for term in terms:
mrow.appendChild(self.parenthesize(term, PRECEDENCE['Mul']))
我用 sympify 将一个 Python 字符串转换成公式如下:
我用mathml命令把公式转换成了MathML格式。
from sympy import *
from sympy.printing.mathml import mathml
print(mathml(sympify("(2*x + 3*y + 1)*(4*x**2 - 6*x*y - 2*x + 9*y**2 - 3*y + 1)"),printer='presentation'))
结果输出了如下代码
<mrow><mrow><mrow><mn>2</mn><mo>⁢</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>3</mn><mo>⁢</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow><mo>⁢</mo><mrow><mrow><mn>4</mn><mo>⁢</mo><msup><mi>x</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>6</mn><mo>⁢</mo><mi>x</mi><mo>⁢</mo><mi>y</mi></mrow><mo>-</mo><mrow><mn>2</mn><mo>⁢</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>9</mn><mo>⁢</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>3</mn><mo>⁢</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow></mrow>
我把代码嵌入了HTML,试了下
test.html
<html>
<head>
<script async="" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</head>
<body>
<math>
<mrow><mrow><mrow><mn>2</mn><mo>⁢</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>3</mn><mo>⁢</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow><mo>⁢</mo><mrow><mrow><mn>4</mn><mo>⁢</mo><msup><mi>x</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>6</mn><mo>⁢</mo><mi>x</mi><mo>⁢</mo><mi>y</mi></mrow><mo>-</mo><mrow><mn>2</mn><mo>⁢</mo><mi>x</mi></mrow><mo>+</mo><mrow><mn>9</mn><mo>⁢</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mo>-</mo><mrow><mn>3</mn><mo>⁢</mo><mi>y</mi></mrow><mo>+</mo><mn>1</mn></mrow></mrow>
</math>
</body>
</html>
但是,使用此代码,输出将缺少括号,如下图所示。
[![画像の说明をここニ入力][1]][1]
我阅读了[sympy.printing.mathml][2]的[源代码]。
所以想知道_print_Interval
这个方法是干什么用的
这是否与公式中缺少括号的问题有关?
这个表达式是一个例子。 我想正确转换更复杂的公式。
在 isympy
会话中:
In [56]: sympify("(2*x + 3*y + 1)*(4*x**2 - 6*x*y - 2*x + 9*y**2 - 3*y + 1)")
Out[56]:
⎛ 2 2 ⎞
(2⋅x + 3⋅y + 1)⋅⎝4⋅x - 6⋅x⋅y - 2⋅x + 9⋅y - 3⋅y + 1⎠
我在日语版的Whosebug中得到了答案。 https://ja.whosebug.com/q/55578/22541
修复[this][1]可以解决问题。
[之前]
for term in terms:
x = self._print(term)
mrow.appendChild(x)
[之后]
for term in terms:
mrow.appendChild(self.parenthesize(term, PRECEDENCE['Mul']))