test_latex_lark.py 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. from sympy.testing.pytest import XFAIL
  2. from sympy.parsing.latex.lark import parse_latex_lark
  3. from sympy.external import import_module
  4. from sympy.concrete.products import Product
  5. from sympy.concrete.summations import Sum
  6. from sympy.core.function import Derivative, Function
  7. from sympy.core.numbers import E, oo, Rational
  8. from sympy.core.power import Pow
  9. from sympy.core.parameters import evaluate
  10. from sympy.core.relational import GreaterThan, LessThan, StrictGreaterThan, StrictLessThan, Unequality
  11. from sympy.core.symbol import Symbol
  12. from sympy.functions.combinatorial.factorials import binomial, factorial
  13. from sympy.functions.elementary.complexes import Abs, conjugate
  14. from sympy.functions.elementary.exponential import exp, log
  15. from sympy.functions.elementary.integers import ceiling, floor
  16. from sympy.functions.elementary.miscellaneous import root, sqrt, Min, Max
  17. from sympy.functions.elementary.trigonometric import asin, cos, csc, sec, sin, tan
  18. from sympy.integrals.integrals import Integral
  19. from sympy.series.limits import Limit
  20. from sympy import Matrix, MatAdd, MatMul, Transpose, Trace
  21. from sympy import I
  22. from sympy.core.relational import Eq, Ne, Lt, Le, Gt, Ge
  23. from sympy.physics.quantum import Bra, Ket, InnerProduct
  24. from sympy.abc import x, y, z, a, b, c, d, t, k, n
  25. from .test_latex import theta, f, _Add, _Mul, _Pow, _Sqrt, _Conjugate, _Abs, _factorial, _exp, _binomial
  26. lark = import_module("lark")
  27. # disable tests if lark is not present
  28. disabled = lark is None
  29. # shorthand definitions that are only needed for the Lark LaTeX parser
  30. def _Min(*args):
  31. return Min(*args, evaluate=False)
  32. def _Max(*args):
  33. return Max(*args, evaluate=False)
  34. def _log(a, b=E):
  35. if b == E:
  36. return log(a, evaluate=False)
  37. else:
  38. return log(a, b, evaluate=False)
  39. def _MatAdd(a, b):
  40. return MatAdd(a, b, evaluate=False)
  41. def _MatMul(a, b):
  42. return MatMul(a, b, evaluate=False)
  43. # These LaTeX strings should parse to the corresponding SymPy expression
  44. SYMBOL_EXPRESSION_PAIRS = [
  45. (r"x_0", Symbol('x_{0}')),
  46. (r"x_{1}", Symbol('x_{1}')),
  47. (r"x_a", Symbol('x_{a}')),
  48. (r"x_{b}", Symbol('x_{b}')),
  49. (r"h_\theta", Symbol('h_{theta}')),
  50. (r"h_{\theta}", Symbol('h_{theta}')),
  51. (r"y''_1", Symbol("y''_{1}")),
  52. (r"y_1''", Symbol("y_{1}''")),
  53. (r"\mathit{x}", Symbol('x')),
  54. (r"\mathit{test}", Symbol('test')),
  55. (r"\mathit{TEST}", Symbol('TEST')),
  56. (r"\mathit{HELLO world}", Symbol('HELLO world')),
  57. (r"a'", Symbol("a'")),
  58. (r"a''", Symbol("a''")),
  59. (r"\alpha'", Symbol("alpha'")),
  60. (r"\alpha''", Symbol("alpha''")),
  61. (r"a_b", Symbol("a_{b}")),
  62. (r"a_b'", Symbol("a_{b}'")),
  63. (r"a'_b", Symbol("a'_{b}")),
  64. (r"a'_b'", Symbol("a'_{b}'")),
  65. (r"a_{b'}", Symbol("a_{b'}")),
  66. (r"a_{b'}'", Symbol("a_{b'}'")),
  67. (r"a'_{b'}", Symbol("a'_{b'}")),
  68. (r"a'_{b'}'", Symbol("a'_{b'}'")),
  69. (r"\mathit{foo}'", Symbol("foo'")),
  70. (r"\mathit{foo'}", Symbol("foo'")),
  71. (r"\mathit{foo'}'", Symbol("foo''")),
  72. (r"a_b''", Symbol("a_{b}''")),
  73. (r"a''_b", Symbol("a''_{b}")),
  74. (r"a''_b'''", Symbol("a''_{b}'''")),
  75. (r"a_{b''}", Symbol("a_{b''}")),
  76. (r"a_{b''}''", Symbol("a_{b''}''")),
  77. (r"a''_{b''}", Symbol("a''_{b''}")),
  78. (r"a''_{b''}'''", Symbol("a''_{b''}'''")),
  79. (r"\mathit{foo}''", Symbol("foo''")),
  80. (r"\mathit{foo''}", Symbol("foo''")),
  81. (r"\mathit{foo''}'''", Symbol("foo'''''")),
  82. (r"a_\alpha", Symbol("a_{alpha}")),
  83. (r"a_\alpha'", Symbol("a_{alpha}'")),
  84. (r"a'_\alpha", Symbol("a'_{alpha}")),
  85. (r"a'_\alpha'", Symbol("a'_{alpha}'")),
  86. (r"a_{\alpha'}", Symbol("a_{alpha'}")),
  87. (r"a_{\alpha'}'", Symbol("a_{alpha'}'")),
  88. (r"a'_{\alpha'}", Symbol("a'_{alpha'}")),
  89. (r"a'_{\alpha'}'", Symbol("a'_{alpha'}'")),
  90. (r"a_\alpha''", Symbol("a_{alpha}''")),
  91. (r"a''_\alpha", Symbol("a''_{alpha}")),
  92. (r"a''_\alpha'''", Symbol("a''_{alpha}'''")),
  93. (r"a_{\alpha''}", Symbol("a_{alpha''}")),
  94. (r"a_{\alpha''}''", Symbol("a_{alpha''}''")),
  95. (r"a''_{\alpha''}", Symbol("a''_{alpha''}")),
  96. (r"a''_{\alpha''}'''", Symbol("a''_{alpha''}'''")),
  97. (r"\alpha_b", Symbol("alpha_{b}")),
  98. (r"\alpha_b'", Symbol("alpha_{b}'")),
  99. (r"\alpha'_b", Symbol("alpha'_{b}")),
  100. (r"\alpha'_b'", Symbol("alpha'_{b}'")),
  101. (r"\alpha_{b'}", Symbol("alpha_{b'}")),
  102. (r"\alpha_{b'}'", Symbol("alpha_{b'}'")),
  103. (r"\alpha'_{b'}", Symbol("alpha'_{b'}")),
  104. (r"\alpha'_{b'}'", Symbol("alpha'_{b'}'")),
  105. (r"\alpha_b''", Symbol("alpha_{b}''")),
  106. (r"\alpha''_b", Symbol("alpha''_{b}")),
  107. (r"\alpha''_b'''", Symbol("alpha''_{b}'''")),
  108. (r"\alpha_{b''}", Symbol("alpha_{b''}")),
  109. (r"\alpha_{b''}''", Symbol("alpha_{b''}''")),
  110. (r"\alpha''_{b''}", Symbol("alpha''_{b''}")),
  111. (r"\alpha''_{b''}'''", Symbol("alpha''_{b''}'''")),
  112. (r"\alpha_\beta", Symbol("alpha_{beta}")),
  113. (r"\alpha_{\beta}", Symbol("alpha_{beta}")),
  114. (r"\alpha_{\beta'}", Symbol("alpha_{beta'}")),
  115. (r"\alpha_{\beta''}", Symbol("alpha_{beta''}")),
  116. (r"\alpha'_\beta", Symbol("alpha'_{beta}")),
  117. (r"\alpha'_{\beta}", Symbol("alpha'_{beta}")),
  118. (r"\alpha'_{\beta'}", Symbol("alpha'_{beta'}")),
  119. (r"\alpha'_{\beta''}", Symbol("alpha'_{beta''}")),
  120. (r"\alpha''_\beta", Symbol("alpha''_{beta}")),
  121. (r"\alpha''_{\beta}", Symbol("alpha''_{beta}")),
  122. (r"\alpha''_{\beta'}", Symbol("alpha''_{beta'}")),
  123. (r"\alpha''_{\beta''}", Symbol("alpha''_{beta''}")),
  124. (r"\alpha_\beta'", Symbol("alpha_{beta}'")),
  125. (r"\alpha_{\beta}'", Symbol("alpha_{beta}'")),
  126. (r"\alpha_{\beta'}'", Symbol("alpha_{beta'}'")),
  127. (r"\alpha_{\beta''}'", Symbol("alpha_{beta''}'")),
  128. (r"\alpha'_\beta'", Symbol("alpha'_{beta}'")),
  129. (r"\alpha'_{\beta}'", Symbol("alpha'_{beta}'")),
  130. (r"\alpha'_{\beta'}'", Symbol("alpha'_{beta'}'")),
  131. (r"\alpha'_{\beta''}'", Symbol("alpha'_{beta''}'")),
  132. (r"\alpha''_\beta'", Symbol("alpha''_{beta}'")),
  133. (r"\alpha''_{\beta}'", Symbol("alpha''_{beta}'")),
  134. (r"\alpha''_{\beta'}'", Symbol("alpha''_{beta'}'")),
  135. (r"\alpha''_{\beta''}'", Symbol("alpha''_{beta''}'")),
  136. (r"\alpha_\beta''", Symbol("alpha_{beta}''")),
  137. (r"\alpha_{\beta}''", Symbol("alpha_{beta}''")),
  138. (r"\alpha_{\beta'}''", Symbol("alpha_{beta'}''")),
  139. (r"\alpha_{\beta''}''", Symbol("alpha_{beta''}''")),
  140. (r"\alpha'_\beta''", Symbol("alpha'_{beta}''")),
  141. (r"\alpha'_{\beta}''", Symbol("alpha'_{beta}''")),
  142. (r"\alpha'_{\beta'}''", Symbol("alpha'_{beta'}''")),
  143. (r"\alpha'_{\beta''}''", Symbol("alpha'_{beta''}''")),
  144. (r"\alpha''_\beta''", Symbol("alpha''_{beta}''")),
  145. (r"\alpha''_{\beta}''", Symbol("alpha''_{beta}''")),
  146. (r"\alpha''_{\beta'}''", Symbol("alpha''_{beta'}''")),
  147. (r"\alpha''_{\beta''}''", Symbol("alpha''_{beta''}''"))
  148. ]
  149. UNEVALUATED_SIMPLE_EXPRESSION_PAIRS = [
  150. (r"0", 0),
  151. (r"1", 1),
  152. (r"-3.14", -3.14),
  153. (r"(-7.13)(1.5)", _Mul(-7.13, 1.5)),
  154. (r"1+1", _Add(1, 1)),
  155. (r"0+1", _Add(0, 1)),
  156. (r"1*2", _Mul(1, 2)),
  157. (r"0*1", _Mul(0, 1)),
  158. (r"x", x),
  159. (r"2x", 2 * x),
  160. (r"3x - 1", _Add(_Mul(3, x), -1)),
  161. (r"-c", -c),
  162. (r"\infty", oo),
  163. (r"a \cdot b", a * b),
  164. (r"1 \times 2 ", _Mul(1, 2)),
  165. (r"a / b", a / b),
  166. (r"a \div b", a / b),
  167. (r"a + b", a + b),
  168. (r"a + b - a", _Add(a + b, -a)),
  169. (r"(x + y) z", _Mul(_Add(x, y), z)),
  170. (r"a'b+ab'", _Add(_Mul(Symbol("a'"), b), _Mul(a, Symbol("b'"))))
  171. ]
  172. EVALUATED_SIMPLE_EXPRESSION_PAIRS = [
  173. (r"(-7.13)(1.5)", -10.695),
  174. (r"1+1", 2),
  175. (r"0+1", 1),
  176. (r"1*2", 2),
  177. (r"0*1", 0),
  178. (r"2x", 2 * x),
  179. (r"3x - 1", 3 * x - 1),
  180. (r"-c", -c),
  181. (r"a \cdot b", a * b),
  182. (r"1 \times 2 ", 2),
  183. (r"a / b", a / b),
  184. (r"a \div b", a / b),
  185. (r"a + b", a + b),
  186. (r"a + b - a", b),
  187. (r"(x + y) z", (x + y) * z),
  188. ]
  189. UNEVALUATED_FRACTION_EXPRESSION_PAIRS = [
  190. (r"\frac{a}{b}", a / b),
  191. (r"\dfrac{a}{b}", a / b),
  192. (r"\tfrac{a}{b}", a / b),
  193. (r"\frac12", _Mul(1, _Pow(2, -1))),
  194. (r"\frac12y", _Mul(_Mul(1, _Pow(2, -1)), y)),
  195. (r"\frac1234", _Mul(_Mul(1, _Pow(2, -1)), 34)),
  196. (r"\frac2{3}", _Mul(2, _Pow(3, -1))),
  197. (r"\frac{a + b}{c}", _Mul(a + b, _Pow(c, -1))),
  198. (r"\frac{7}{3}", _Mul(7, _Pow(3, -1)))
  199. ]
  200. EVALUATED_FRACTION_EXPRESSION_PAIRS = [
  201. (r"\frac{a}{b}", a / b),
  202. (r"\dfrac{a}{b}", a / b),
  203. (r"\tfrac{a}{b}", a / b),
  204. (r"\frac12", Rational(1, 2)),
  205. (r"\frac12y", y / 2),
  206. (r"\frac1234", 17),
  207. (r"\frac2{3}", Rational(2, 3)),
  208. (r"\frac{a + b}{c}", (a + b) / c),
  209. (r"\frac{7}{3}", Rational(7, 3))
  210. ]
  211. RELATION_EXPRESSION_PAIRS = [
  212. (r"x = y", Eq(x, y)),
  213. (r"x \neq y", Ne(x, y)),
  214. (r"x < y", Lt(x, y)),
  215. (r"x > y", Gt(x, y)),
  216. (r"x \leq y", Le(x, y)),
  217. (r"x \geq y", Ge(x, y)),
  218. (r"x \le y", Le(x, y)),
  219. (r"x \ge y", Ge(x, y)),
  220. (r"x < y", StrictLessThan(x, y)),
  221. (r"x \leq y", LessThan(x, y)),
  222. (r"x > y", StrictGreaterThan(x, y)),
  223. (r"x \geq y", GreaterThan(x, y)),
  224. (r"x \neq y", Unequality(x, y)), # same as 2nd one in the list
  225. (r"a^2 + b^2 = c^2", Eq(a**2 + b**2, c**2))
  226. ]
  227. UNEVALUATED_POWER_EXPRESSION_PAIRS = [
  228. (r"x^2", x ** 2),
  229. (r"x^\frac{1}{2}", _Pow(x, _Mul(1, _Pow(2, -1)))),
  230. (r"x^{3 + 1}", x ** _Add(3, 1)),
  231. (r"\pi^{|xy|}", Symbol('pi') ** _Abs(x * y)),
  232. (r"5^0 - 4^0", _Add(_Pow(5, 0), _Mul(-1, _Pow(4, 0))))
  233. ]
  234. EVALUATED_POWER_EXPRESSION_PAIRS = [
  235. (r"x^2", x ** 2),
  236. (r"x^\frac{1}{2}", sqrt(x)),
  237. (r"x^{3 + 1}", x ** 4),
  238. (r"\pi^{|xy|}", Symbol('pi') ** _Abs(x * y)),
  239. (r"5^0 - 4^0", 0)
  240. ]
  241. UNEVALUATED_INTEGRAL_EXPRESSION_PAIRS = [
  242. (r"\int x dx", Integral(_Mul(1, x), x)),
  243. (r"\int x \, dx", Integral(_Mul(1, x), x)),
  244. (r"\int x d\theta", Integral(_Mul(1, x), theta)),
  245. (r"\int (x^2 - y)dx", Integral(_Mul(1, x ** 2 - y), x)),
  246. (r"\int x + a dx", Integral(_Mul(1, _Add(x, a)), x)),
  247. (r"\int da", Integral(_Mul(1, 1), a)),
  248. (r"\int_0^7 dx", Integral(_Mul(1, 1), (x, 0, 7))),
  249. (r"\int\limits_{0}^{1} x dx", Integral(_Mul(1, x), (x, 0, 1))),
  250. (r"\int_a^b x dx", Integral(_Mul(1, x), (x, a, b))),
  251. (r"\int^b_a x dx", Integral(_Mul(1, x), (x, a, b))),
  252. (r"\int_{a}^b x dx", Integral(_Mul(1, x), (x, a, b))),
  253. (r"\int^{b}_a x dx", Integral(_Mul(1, x), (x, a, b))),
  254. (r"\int_{a}^{b} x dx", Integral(_Mul(1, x), (x, a, b))),
  255. (r"\int^{b}_{a} x dx", Integral(_Mul(1, x), (x, a, b))),
  256. (r"\int_{f(a)}^{f(b)} f(z) dz", Integral(f(z), (z, f(a), f(b)))),
  257. (r"\int a + b + c dx", Integral(_Mul(1, _Add(_Add(a, b), c)), x)),
  258. (r"\int \frac{dz}{z}", Integral(_Mul(1, _Mul(1, Pow(z, -1))), z)),
  259. (r"\int \frac{3 dz}{z}", Integral(_Mul(1, _Mul(3, _Pow(z, -1))), z)),
  260. (r"\int \frac{1}{x} dx", Integral(_Mul(1, _Mul(1, Pow(x, -1))), x)),
  261. (r"\int \frac{1}{a} + \frac{1}{b} dx",
  262. Integral(_Mul(1, _Add(_Mul(1, _Pow(a, -1)), _Mul(1, Pow(b, -1)))), x)),
  263. (r"\int \frac{1}{x} + 1 dx", Integral(_Mul(1, _Add(_Mul(1, _Pow(x, -1)), 1)), x))
  264. ]
  265. EVALUATED_INTEGRAL_EXPRESSION_PAIRS = [
  266. (r"\int x dx", Integral(x, x)),
  267. (r"\int x \, dx", Integral(x, x)),
  268. (r"\int x d\theta", Integral(x, theta)),
  269. (r"\int (x^2 - y)dx", Integral(x ** 2 - y, x)),
  270. (r"\int x + a dx", Integral(x + a, x)),
  271. (r"\int da", Integral(1, a)),
  272. (r"\int_0^7 dx", Integral(1, (x, 0, 7))),
  273. (r"\int\limits_{0}^{1} x dx", Integral(x, (x, 0, 1))),
  274. (r"\int_a^b x dx", Integral(x, (x, a, b))),
  275. (r"\int^b_a x dx", Integral(x, (x, a, b))),
  276. (r"\int_{a}^b x dx", Integral(x, (x, a, b))),
  277. (r"\int^{b}_a x dx", Integral(x, (x, a, b))),
  278. (r"\int_{a}^{b} x dx", Integral(x, (x, a, b))),
  279. (r"\int^{b}_{a} x dx", Integral(x, (x, a, b))),
  280. (r"\int_{f(a)}^{f(b)} f(z) dz", Integral(f(z), (z, f(a), f(b)))),
  281. (r"\int a + b + c dx", Integral(a + b + c, x)),
  282. (r"\int \frac{dz}{z}", Integral(Pow(z, -1), z)),
  283. (r"\int \frac{3 dz}{z}", Integral(3 * Pow(z, -1), z)),
  284. (r"\int \frac{1}{x} dx", Integral(1 / x, x)),
  285. (r"\int \frac{1}{a} + \frac{1}{b} dx", Integral(1 / a + 1 / b, x)),
  286. (r"\int \frac{1}{a} - \frac{1}{b} dx", Integral(1 / a - 1 / b, x)),
  287. (r"\int \frac{1}{x} + 1 dx", Integral(1 / x + 1, x))
  288. ]
  289. DERIVATIVE_EXPRESSION_PAIRS = [
  290. (r"\frac{d}{dx} x", Derivative(x, x)),
  291. (r"\frac{d}{dt} x", Derivative(x, t)),
  292. (r"\frac{d}{dx} ( \tan x )", Derivative(tan(x), x)),
  293. (r"\frac{d f(x)}{dx}", Derivative(f(x), x)),
  294. (r"\frac{d\theta(x)}{dx}", Derivative(Function('theta')(x), x))
  295. ]
  296. TRIGONOMETRIC_EXPRESSION_PAIRS = [
  297. (r"\sin \theta", sin(theta)),
  298. (r"\sin(\theta)", sin(theta)),
  299. (r"\sin^{-1} a", asin(a)),
  300. (r"\sin a \cos b", _Mul(sin(a), cos(b))),
  301. (r"\sin \cos \theta", sin(cos(theta))),
  302. (r"\sin(\cos \theta)", sin(cos(theta))),
  303. (r"(\csc x)(\sec y)", csc(x) * sec(y)),
  304. (r"\frac{\sin{x}}2", _Mul(sin(x), _Pow(2, -1)))
  305. ]
  306. UNEVALUATED_LIMIT_EXPRESSION_PAIRS = [
  307. (r"\lim_{x \to 3} a", Limit(a, x, 3, dir="+-")),
  308. (r"\lim_{x \rightarrow 3} a", Limit(a, x, 3, dir="+-")),
  309. (r"\lim_{x \Rightarrow 3} a", Limit(a, x, 3, dir="+-")),
  310. (r"\lim_{x \longrightarrow 3} a", Limit(a, x, 3, dir="+-")),
  311. (r"\lim_{x \Longrightarrow 3} a", Limit(a, x, 3, dir="+-")),
  312. (r"\lim_{x \to 3^{+}} a", Limit(a, x, 3, dir="+")),
  313. (r"\lim_{x \to 3^{-}} a", Limit(a, x, 3, dir="-")),
  314. (r"\lim_{x \to 3^+} a", Limit(a, x, 3, dir="+")),
  315. (r"\lim_{x \to 3^-} a", Limit(a, x, 3, dir="-")),
  316. (r"\lim_{x \to \infty} \frac{1}{x}", Limit(_Mul(1, _Pow(x, -1)), x, oo))
  317. ]
  318. EVALUATED_LIMIT_EXPRESSION_PAIRS = [
  319. (r"\lim_{x \to \infty} \frac{1}{x}", Limit(1 / x, x, oo))
  320. ]
  321. UNEVALUATED_SQRT_EXPRESSION_PAIRS = [
  322. (r"\sqrt{x}", sqrt(x)),
  323. (r"\sqrt{x + b}", sqrt(_Add(x, b))),
  324. (r"\sqrt[3]{\sin x}", _Pow(sin(x), _Pow(3, -1))),
  325. # the above test needed to be handled differently than the ones below because root
  326. # acts differently if its second argument is a number
  327. (r"\sqrt[y]{\sin x}", root(sin(x), y)),
  328. (r"\sqrt[\theta]{\sin x}", root(sin(x), theta)),
  329. (r"\sqrt{\frac{12}{6}}", _Sqrt(_Mul(12, _Pow(6, -1))))
  330. ]
  331. EVALUATED_SQRT_EXPRESSION_PAIRS = [
  332. (r"\sqrt{x}", sqrt(x)),
  333. (r"\sqrt{x + b}", sqrt(x + b)),
  334. (r"\sqrt[3]{\sin x}", root(sin(x), 3)),
  335. (r"\sqrt[y]{\sin x}", root(sin(x), y)),
  336. (r"\sqrt[\theta]{\sin x}", root(sin(x), theta)),
  337. (r"\sqrt{\frac{12}{6}}", sqrt(2))
  338. ]
  339. UNEVALUATED_FACTORIAL_EXPRESSION_PAIRS = [
  340. (r"x!", _factorial(x)),
  341. (r"100!", _factorial(100)),
  342. (r"\theta!", _factorial(theta)),
  343. (r"(x + 1)!", _factorial(_Add(x, 1))),
  344. (r"(x!)!", _factorial(_factorial(x))),
  345. (r"x!!!", _factorial(_factorial(_factorial(x)))),
  346. (r"5!7!", _Mul(_factorial(5), _factorial(7)))
  347. ]
  348. EVALUATED_FACTORIAL_EXPRESSION_PAIRS = [
  349. (r"x!", factorial(x)),
  350. (r"100!", factorial(100)),
  351. (r"\theta!", factorial(theta)),
  352. (r"(x + 1)!", factorial(x + 1)),
  353. (r"(x!)!", factorial(factorial(x))),
  354. (r"x!!!", factorial(factorial(factorial(x)))),
  355. (r"5!7!", factorial(5) * factorial(7)),
  356. (r"24! \times 24!", factorial(24) * factorial(24))
  357. ]
  358. UNEVALUATED_SUM_EXPRESSION_PAIRS = [
  359. (r"\sum_{k = 1}^{3} c", Sum(_Mul(1, c), (k, 1, 3))),
  360. (r"\sum_{k = 1}^3 c", Sum(_Mul(1, c), (k, 1, 3))),
  361. (r"\sum^{3}_{k = 1} c", Sum(_Mul(1, c), (k, 1, 3))),
  362. (r"\sum^3_{k = 1} c", Sum(_Mul(1, c), (k, 1, 3))),
  363. (r"\sum_{k = 1}^{10} k^2", Sum(_Mul(1, k ** 2), (k, 1, 10))),
  364. (r"\sum_{n = 0}^{\infty} \frac{1}{n!}",
  365. Sum(_Mul(1, _Mul(1, _Pow(_factorial(n), -1))), (n, 0, oo)))
  366. ]
  367. EVALUATED_SUM_EXPRESSION_PAIRS = [
  368. (r"\sum_{k = 1}^{3} c", Sum(c, (k, 1, 3))),
  369. (r"\sum_{k = 1}^3 c", Sum(c, (k, 1, 3))),
  370. (r"\sum^{3}_{k = 1} c", Sum(c, (k, 1, 3))),
  371. (r"\sum^3_{k = 1} c", Sum(c, (k, 1, 3))),
  372. (r"\sum_{k = 1}^{10} k^2", Sum(k ** 2, (k, 1, 10))),
  373. (r"\sum_{n = 0}^{\infty} \frac{1}{n!}", Sum(1 / factorial(n), (n, 0, oo)))
  374. ]
  375. UNEVALUATED_PRODUCT_EXPRESSION_PAIRS = [
  376. (r"\prod_{a = b}^{c} x", Product(x, (a, b, c))),
  377. (r"\prod_{a = b}^c x", Product(x, (a, b, c))),
  378. (r"\prod^{c}_{a = b} x", Product(x, (a, b, c))),
  379. (r"\prod^c_{a = b} x", Product(x, (a, b, c)))
  380. ]
  381. APPLIED_FUNCTION_EXPRESSION_PAIRS = [
  382. (r"f(x)", f(x)),
  383. (r"f(x, y)", f(x, y)),
  384. (r"f(x, y, z)", f(x, y, z)),
  385. (r"f'_1(x)", Function("f_{1}'")(x)),
  386. (r"f_{1}''(x+y)", Function("f_{1}''")(x + y)),
  387. (r"h_{\theta}(x_0, x_1)",
  388. Function('h_{theta}')(Symbol('x_{0}'), Symbol('x_{1}')))
  389. ]
  390. UNEVALUATED_COMMON_FUNCTION_EXPRESSION_PAIRS = [
  391. (r"|x|", _Abs(x)),
  392. (r"||x||", _Abs(Abs(x))),
  393. (r"|x||y|", _Abs(x) * _Abs(y)),
  394. (r"||x||y||", _Abs(_Abs(x) * _Abs(y))),
  395. (r"\lfloor x \rfloor", floor(x)),
  396. (r"\lceil x \rceil", ceiling(x)),
  397. (r"\exp x", _exp(x)),
  398. (r"\exp(x)", _exp(x)),
  399. (r"\lg x", _log(x, 10)),
  400. (r"\ln x", _log(x)),
  401. (r"\ln xy", _log(x * y)),
  402. (r"\log x", _log(x)),
  403. (r"\log xy", _log(x * y)),
  404. (r"\log_{2} x", _log(x, 2)),
  405. (r"\log_{a} x", _log(x, a)),
  406. (r"\log_{11} x", _log(x, 11)),
  407. (r"\log_{a^2} x", _log(x, _Pow(a, 2))),
  408. (r"\log_2 x", _log(x, 2)),
  409. (r"\log_a x", _log(x, a)),
  410. (r"\overline{z}", _Conjugate(z)),
  411. (r"\overline{\overline{z}}", _Conjugate(_Conjugate(z))),
  412. (r"\overline{x + y}", _Conjugate(_Add(x, y))),
  413. (r"\overline{x} + \overline{y}", _Conjugate(x) + _Conjugate(y)),
  414. (r"\min(a, b)", _Min(a, b)),
  415. (r"\min(a, b, c - d, xy)", _Min(a, b, c - d, x * y)),
  416. (r"\max(a, b)", _Max(a, b)),
  417. (r"\max(a, b, c - d, xy)", _Max(a, b, c - d, x * y)),
  418. # physics things don't have an `evaluate=False` variant
  419. (r"\langle x |", Bra('x')),
  420. (r"| x \rangle", Ket('x')),
  421. (r"\langle x | y \rangle", InnerProduct(Bra('x'), Ket('y'))),
  422. ]
  423. EVALUATED_COMMON_FUNCTION_EXPRESSION_PAIRS = [
  424. (r"|x|", Abs(x)),
  425. (r"||x||", Abs(Abs(x))),
  426. (r"|x||y|", Abs(x) * Abs(y)),
  427. (r"||x||y||", Abs(Abs(x) * Abs(y))),
  428. (r"\lfloor x \rfloor", floor(x)),
  429. (r"\lceil x \rceil", ceiling(x)),
  430. (r"\exp x", exp(x)),
  431. (r"\exp(x)", exp(x)),
  432. (r"\lg x", log(x, 10)),
  433. (r"\ln x", log(x)),
  434. (r"\ln xy", log(x * y)),
  435. (r"\log x", log(x)),
  436. (r"\log xy", log(x * y)),
  437. (r"\log_{2} x", log(x, 2)),
  438. (r"\log_{a} x", log(x, a)),
  439. (r"\log_{11} x", log(x, 11)),
  440. (r"\log_{a^2} x", log(x, _Pow(a, 2))),
  441. (r"\log_2 x", log(x, 2)),
  442. (r"\log_a x", log(x, a)),
  443. (r"\overline{z}", conjugate(z)),
  444. (r"\overline{\overline{z}}", conjugate(conjugate(z))),
  445. (r"\overline{x + y}", conjugate(x + y)),
  446. (r"\overline{x} + \overline{y}", conjugate(x) + conjugate(y)),
  447. (r"\min(a, b)", Min(a, b)),
  448. (r"\min(a, b, c - d, xy)", Min(a, b, c - d, x * y)),
  449. (r"\max(a, b)", Max(a, b)),
  450. (r"\max(a, b, c - d, xy)", Max(a, b, c - d, x * y)),
  451. (r"\langle x |", Bra('x')),
  452. (r"| x \rangle", Ket('x')),
  453. (r"\langle x | y \rangle", InnerProduct(Bra('x'), Ket('y'))),
  454. ]
  455. SPACING_RELATED_EXPRESSION_PAIRS = [
  456. (r"a \, b", _Mul(a, b)),
  457. (r"a \thinspace b", _Mul(a, b)),
  458. (r"a \: b", _Mul(a, b)),
  459. (r"a \medspace b", _Mul(a, b)),
  460. (r"a \; b", _Mul(a, b)),
  461. (r"a \thickspace b", _Mul(a, b)),
  462. (r"a \quad b", _Mul(a, b)),
  463. (r"a \qquad b", _Mul(a, b)),
  464. (r"a \! b", _Mul(a, b)),
  465. (r"a \negthinspace b", _Mul(a, b)),
  466. (r"a \negmedspace b", _Mul(a, b)),
  467. (r"a \negthickspace b", _Mul(a, b))
  468. ]
  469. UNEVALUATED_BINOMIAL_EXPRESSION_PAIRS = [
  470. (r"\binom{n}{k}", _binomial(n, k)),
  471. (r"\tbinom{n}{k}", _binomial(n, k)),
  472. (r"\dbinom{n}{k}", _binomial(n, k)),
  473. (r"\binom{n}{0}", _binomial(n, 0)),
  474. (r"x^\binom{n}{k}", _Pow(x, _binomial(n, k)))
  475. ]
  476. EVALUATED_BINOMIAL_EXPRESSION_PAIRS = [
  477. (r"\binom{n}{k}", binomial(n, k)),
  478. (r"\tbinom{n}{k}", binomial(n, k)),
  479. (r"\dbinom{n}{k}", binomial(n, k)),
  480. (r"\binom{n}{0}", binomial(n, 0)),
  481. (r"x^\binom{n}{k}", x ** binomial(n, k))
  482. ]
  483. MISCELLANEOUS_EXPRESSION_PAIRS = [
  484. (r"\left(x + y\right) z", _Mul(_Add(x, y), z)),
  485. (r"\left( x + y\right ) z", _Mul(_Add(x, y), z)),
  486. (r"\left( x + y\right ) z", _Mul(_Add(x, y), z)),
  487. ]
  488. UNEVALUATED_LITERAL_COMPLEX_NUMBER_EXPRESSION_PAIRS = [
  489. (r"\imaginaryunit^2", _Pow(I, 2)),
  490. (r"|\imaginaryunit|", _Abs(I)),
  491. (r"\overline{\imaginaryunit}", _Conjugate(I)),
  492. (r"\imaginaryunit+\imaginaryunit", _Add(I, I)),
  493. (r"\imaginaryunit-\imaginaryunit", _Add(I, -I)),
  494. (r"\imaginaryunit*\imaginaryunit", _Mul(I, I)),
  495. (r"\imaginaryunit/\imaginaryunit", _Mul(I, _Pow(I, -1))),
  496. (r"(1+\imaginaryunit)/|1+\imaginaryunit|", _Mul(_Add(1, I), _Pow(_Abs(_Add(1, I)), -1)))
  497. ]
  498. UNEVALUATED_MATRIX_EXPRESSION_PAIRS = [
  499. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}",
  500. Matrix([[a, b], [x, y]])),
  501. (r"\begin{pmatrix}a & b \\x & y\\\end{pmatrix}",
  502. Matrix([[a, b], [x, y]])),
  503. (r"\begin{bmatrix}a & b \\x & y\end{bmatrix}",
  504. Matrix([[a, b], [x, y]])),
  505. (r"\left(\begin{matrix}a & b \\x & y\end{matrix}\right)",
  506. Matrix([[a, b], [x, y]])),
  507. (r"\left[\begin{matrix}a & b \\x & y\end{matrix}\right]",
  508. Matrix([[a, b], [x, y]])),
  509. (r"\left[\begin{array}{cc}a & b \\x & y\end{array}\right]",
  510. Matrix([[a, b], [x, y]])),
  511. (r"\left(\begin{array}{cc}a & b \\x & y\end{array}\right)",
  512. Matrix([[a, b], [x, y]])),
  513. (r"\left( { \begin{array}{cc}a & b \\x & y\end{array} } \right)",
  514. Matrix([[a, b], [x, y]])),
  515. (r"+\begin{pmatrix}a & b \\x & y\end{pmatrix}",
  516. Matrix([[a, b], [x, y]])),
  517. ((r"\begin{pmatrix}x & y \\a & b\end{pmatrix}+"
  518. r"\begin{pmatrix}a & b \\x & y\end{pmatrix}"),
  519. _MatAdd(Matrix([[x, y], [a, b]]), Matrix([[a, b], [x, y]]))),
  520. (r"-\begin{pmatrix}a & b \\x & y\end{pmatrix}",
  521. _MatMul(-1, Matrix([[a, b], [x, y]]))),
  522. ((r"\begin{pmatrix}x & y \\a & b\end{pmatrix}-"
  523. r"\begin{pmatrix}a & b \\x & y\end{pmatrix}"),
  524. _MatAdd(Matrix([[x, y], [a, b]]), _MatMul(-1, Matrix([[a, b], [x, y]])))),
  525. ((r"\begin{pmatrix}a & b & c \\x & y & z \\a & b & c \end{pmatrix}*"
  526. r"\begin{pmatrix}x & y & z \\a & b & c \\a & b & c \end{pmatrix}*"
  527. r"\begin{pmatrix}a & b & c \\x & y & z \\x & y & z \end{pmatrix}"),
  528. _MatMul(_MatMul(Matrix([[a, b, c], [x, y, z], [a, b, c]]),
  529. Matrix([[x, y, z], [a, b, c], [a, b, c]])),
  530. Matrix([[a, b, c], [x, y, z], [x, y, z]]))),
  531. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}/2",
  532. _MatMul(Matrix([[a, b], [x, y]]), _Pow(2, -1))),
  533. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}^2",
  534. _Pow(Matrix([[a, b], [x, y]]), 2)),
  535. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}^{-1}",
  536. _Pow(Matrix([[a, b], [x, y]]), -1)),
  537. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}^T",
  538. Transpose(Matrix([[a, b], [x, y]]))),
  539. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}^{T}",
  540. Transpose(Matrix([[a, b], [x, y]]))),
  541. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}^\mathit{T}",
  542. Transpose(Matrix([[a, b], [x, y]]))),
  543. (r"\begin{pmatrix}1 & 2 \\3 & 4\end{pmatrix}^T",
  544. Transpose(Matrix([[1, 2], [3, 4]]))),
  545. ((r"(\begin{pmatrix}1 & 2 \\3 & 4\end{pmatrix}+"
  546. r"\begin{pmatrix}1 & 2 \\3 & 4\end{pmatrix}^T)*"
  547. r"\begin{bmatrix}1\\0\end{bmatrix}"),
  548. _MatMul(_MatAdd(Matrix([[1, 2], [3, 4]]),
  549. Transpose(Matrix([[1, 2], [3, 4]]))),
  550. Matrix([[1], [0]]))),
  551. ((r"(\begin{pmatrix}a & b \\x & y\end{pmatrix}+"
  552. r"\begin{pmatrix}x & y \\a & b\end{pmatrix})^2"),
  553. _Pow(_MatAdd(Matrix([[a, b], [x, y]]),
  554. Matrix([[x, y], [a, b]])), 2)),
  555. ((r"(\begin{pmatrix}a & b \\x & y\end{pmatrix}+"
  556. r"\begin{pmatrix}x & y \\a & b\end{pmatrix})^T"),
  557. Transpose(_MatAdd(Matrix([[a, b], [x, y]]),
  558. Matrix([[x, y], [a, b]])))),
  559. (r"\overline{\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}}",
  560. _Conjugate(_MatAdd(Matrix([[I, 2], [3, 4]]),
  561. Matrix([[I, 2], [3, 4]]))))
  562. ]
  563. EVALUATED_MATRIX_EXPRESSION_PAIRS = [
  564. (r"\det\left(\left[ { \begin{array}{cc}a&b\\x&y\end{array} } \right]\right)",
  565. Matrix([[a, b], [x, y]]).det()),
  566. (r"\det \begin{pmatrix}1&2\\3&4\end{pmatrix}", -2),
  567. (r"\det{\begin{pmatrix}1&2\\3&4\end{pmatrix}}", -2),
  568. (r"\det(\begin{pmatrix}1&2\\3&4\end{pmatrix})", -2),
  569. (r"\det\left(\begin{pmatrix}1&2\\3&4\end{pmatrix}\right)", -2),
  570. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}/\begin{vmatrix}a & b \\x & y\end{vmatrix}",
  571. _MatMul(Matrix([[a, b], [x, y]]), _Pow(Matrix([[a, b], [x, y]]).det(), -1))),
  572. (r"\begin{pmatrix}a & b \\x & y\end{pmatrix}/|\begin{matrix}a & b \\x & y\end{matrix}|",
  573. _MatMul(Matrix([[a, b], [x, y]]), _Pow(Matrix([[a, b], [x, y]]).det(), -1))),
  574. (r"\frac{\begin{pmatrix}a & b \\x & y\end{pmatrix}}{| { \begin{matrix}a & b \\x & y\end{matrix} } |}",
  575. _MatMul(Matrix([[a, b], [x, y]]), _Pow(Matrix([[a, b], [x, y]]).det(), -1))),
  576. (r"\overline{\begin{pmatrix}\imaginaryunit & 1+\imaginaryunit \\-\imaginaryunit & 4\end{pmatrix}}",
  577. Matrix([[-I, 1-I], [I, 4]])),
  578. (r"\begin{pmatrix}\imaginaryunit & 1+\imaginaryunit \\-\imaginaryunit & 4\end{pmatrix}^H",
  579. Matrix([[-I, I], [1-I, 4]])),
  580. (r"\trace(\begin{pmatrix}\imaginaryunit & 1+\imaginaryunit \\-\imaginaryunit & 4\end{pmatrix})",
  581. Trace(Matrix([[I, 1+I], [-I, 4]]))),
  582. (r"\adjugate(\begin{pmatrix}1 & 2 \\3 & 4\end{pmatrix})",
  583. Matrix([[4, -2], [-3, 1]])),
  584. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^\ast",
  585. Matrix([[-2*I, 6], [4, 8]])),
  586. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{\ast}",
  587. Matrix([[-2*I, 6], [4, 8]])),
  588. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{\ast\ast}",
  589. Matrix([[2*I, 4], [6, 8]])),
  590. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{\ast\ast\ast}",
  591. Matrix([[-2*I, 6], [4, 8]])),
  592. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{*}",
  593. Matrix([[-2*I, 6], [4, 8]])),
  594. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{**}",
  595. Matrix([[2*I, 4], [6, 8]])),
  596. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{***}",
  597. Matrix([[-2*I, 6], [4, 8]])),
  598. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^\prime",
  599. Transpose(_MatAdd(Matrix([[I, 2], [3, 4]]),
  600. Matrix([[I, 2], [3, 4]])))),
  601. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{\prime}",
  602. Transpose(_MatAdd(Matrix([[I, 2], [3, 4]]),
  603. Matrix([[I, 2], [3, 4]])))),
  604. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{\prime\prime}",
  605. _MatAdd(Matrix([[I, 2], [3, 4]]),
  606. Matrix([[I, 2], [3, 4]]))),
  607. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{\prime\prime\prime}",
  608. Transpose(_MatAdd(Matrix([[I, 2], [3, 4]]),
  609. Matrix([[I, 2], [3, 4]])))),
  610. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{'}",
  611. Transpose(_MatAdd(Matrix([[I, 2], [3, 4]]),
  612. Matrix([[I, 2], [3, 4]])))),
  613. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{''}",
  614. _MatAdd(Matrix([[I, 2], [3, 4]]),
  615. Matrix([[I, 2], [3, 4]]))),
  616. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^{'''}",
  617. Transpose(_MatAdd(Matrix([[I, 2], [3, 4]]),
  618. Matrix([[I, 2], [3, 4]])))),
  619. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})'",
  620. Transpose(_MatAdd(Matrix([[I, 2], [3, 4]]),
  621. Matrix([[I, 2], [3, 4]])))),
  622. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})''",
  623. _MatAdd(Matrix([[I, 2], [3, 4]]),
  624. Matrix([[I, 2], [3, 4]]))),
  625. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})'''",
  626. Transpose(_MatAdd(Matrix([[I, 2], [3, 4]]),
  627. Matrix([[I, 2], [3, 4]])))),
  628. (r"\det(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})",
  629. (_MatAdd(Matrix([[I, 2], [3, 4]]),
  630. Matrix([[I, 2], [3, 4]]))).det()),
  631. (r"\trace(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})",
  632. Trace(_MatAdd(Matrix([[I, 2], [3, 4]]),
  633. Matrix([[I, 2], [3, 4]])))),
  634. (r"\adjugate(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})",
  635. (Matrix([[8, -4], [-6, 2*I]]))),
  636. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^T",
  637. Transpose(_MatAdd(Matrix([[I, 2], [3, 4]]),
  638. Matrix([[I, 2], [3, 4]])))),
  639. (r"(\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix}+\begin{pmatrix}\imaginaryunit&2\\3&4\end{pmatrix})^H",
  640. (Matrix([[-2*I, 6], [4, 8]])))
  641. ]
  642. def test_symbol_expressions():
  643. expected_failures = {6, 7}
  644. for i, (latex_str, sympy_expr) in enumerate(SYMBOL_EXPRESSION_PAIRS):
  645. if i in expected_failures:
  646. continue
  647. with evaluate(False):
  648. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  649. def test_simple_expressions():
  650. expected_failures = {20}
  651. for i, (latex_str, sympy_expr) in enumerate(UNEVALUATED_SIMPLE_EXPRESSION_PAIRS):
  652. if i in expected_failures:
  653. continue
  654. with evaluate(False):
  655. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  656. for i, (latex_str, sympy_expr) in enumerate(EVALUATED_SIMPLE_EXPRESSION_PAIRS):
  657. if i in expected_failures:
  658. continue
  659. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  660. def test_fraction_expressions():
  661. for latex_str, sympy_expr in UNEVALUATED_FRACTION_EXPRESSION_PAIRS:
  662. with evaluate(False):
  663. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  664. for latex_str, sympy_expr in EVALUATED_FRACTION_EXPRESSION_PAIRS:
  665. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  666. def test_relation_expressions():
  667. for latex_str, sympy_expr in RELATION_EXPRESSION_PAIRS:
  668. with evaluate(False):
  669. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  670. def test_power_expressions():
  671. expected_failures = {3}
  672. for i, (latex_str, sympy_expr) in enumerate(UNEVALUATED_POWER_EXPRESSION_PAIRS):
  673. if i in expected_failures:
  674. continue
  675. with evaluate(False):
  676. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  677. for i, (latex_str, sympy_expr) in enumerate(EVALUATED_POWER_EXPRESSION_PAIRS):
  678. if i in expected_failures:
  679. continue
  680. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  681. def test_integral_expressions():
  682. expected_failures = {14}
  683. for i, (latex_str, sympy_expr) in enumerate(UNEVALUATED_INTEGRAL_EXPRESSION_PAIRS):
  684. if i in expected_failures:
  685. continue
  686. with evaluate(False):
  687. assert parse_latex_lark(latex_str) == sympy_expr, i
  688. for i, (latex_str, sympy_expr) in enumerate(EVALUATED_INTEGRAL_EXPRESSION_PAIRS):
  689. if i in expected_failures:
  690. continue
  691. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  692. def test_derivative_expressions():
  693. expected_failures = {3, 4}
  694. for i, (latex_str, sympy_expr) in enumerate(DERIVATIVE_EXPRESSION_PAIRS):
  695. if i in expected_failures:
  696. continue
  697. with evaluate(False):
  698. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  699. for i, (latex_str, sympy_expr) in enumerate(DERIVATIVE_EXPRESSION_PAIRS):
  700. if i in expected_failures:
  701. continue
  702. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  703. def test_trigonometric_expressions():
  704. expected_failures = {3}
  705. for i, (latex_str, sympy_expr) in enumerate(TRIGONOMETRIC_EXPRESSION_PAIRS):
  706. if i in expected_failures:
  707. continue
  708. with evaluate(False):
  709. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  710. def test_limit_expressions():
  711. for latex_str, sympy_expr in UNEVALUATED_LIMIT_EXPRESSION_PAIRS:
  712. with evaluate(False):
  713. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  714. def test_square_root_expressions():
  715. for latex_str, sympy_expr in UNEVALUATED_SQRT_EXPRESSION_PAIRS:
  716. with evaluate(False):
  717. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  718. for latex_str, sympy_expr in EVALUATED_SQRT_EXPRESSION_PAIRS:
  719. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  720. def test_factorial_expressions():
  721. for latex_str, sympy_expr in UNEVALUATED_FACTORIAL_EXPRESSION_PAIRS:
  722. with evaluate(False):
  723. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  724. for latex_str, sympy_expr in EVALUATED_FACTORIAL_EXPRESSION_PAIRS:
  725. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  726. def test_sum_expressions():
  727. for latex_str, sympy_expr in UNEVALUATED_SUM_EXPRESSION_PAIRS:
  728. with evaluate(False):
  729. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  730. for latex_str, sympy_expr in EVALUATED_SUM_EXPRESSION_PAIRS:
  731. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  732. def test_product_expressions():
  733. for latex_str, sympy_expr in UNEVALUATED_PRODUCT_EXPRESSION_PAIRS:
  734. with evaluate(False):
  735. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  736. @XFAIL
  737. def test_applied_function_expressions():
  738. expected_failures = {0, 3, 4} # 0 is ambiguous, and the others require not-yet-added features
  739. # not sure why 1, and 2 are failing
  740. for i, (latex_str, sympy_expr) in enumerate(APPLIED_FUNCTION_EXPRESSION_PAIRS):
  741. if i in expected_failures:
  742. continue
  743. with evaluate(False):
  744. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  745. def test_common_function_expressions():
  746. for latex_str, sympy_expr in UNEVALUATED_COMMON_FUNCTION_EXPRESSION_PAIRS:
  747. with evaluate(False):
  748. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  749. for latex_str, sympy_expr in EVALUATED_COMMON_FUNCTION_EXPRESSION_PAIRS:
  750. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  751. # unhandled bug causing these to fail
  752. @XFAIL
  753. def test_spacing():
  754. for latex_str, sympy_expr in SPACING_RELATED_EXPRESSION_PAIRS:
  755. with evaluate(False):
  756. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  757. def test_binomial_expressions():
  758. for latex_str, sympy_expr in UNEVALUATED_BINOMIAL_EXPRESSION_PAIRS:
  759. with evaluate(False):
  760. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  761. for latex_str, sympy_expr in EVALUATED_BINOMIAL_EXPRESSION_PAIRS:
  762. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  763. def test_miscellaneous_expressions():
  764. for latex_str, sympy_expr in MISCELLANEOUS_EXPRESSION_PAIRS:
  765. with evaluate(False):
  766. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  767. def test_literal_complex_number_expressions():
  768. for latex_str, sympy_expr in UNEVALUATED_LITERAL_COMPLEX_NUMBER_EXPRESSION_PAIRS:
  769. with evaluate(False):
  770. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  771. def test_matrix_expressions():
  772. for latex_str, sympy_expr in UNEVALUATED_MATRIX_EXPRESSION_PAIRS:
  773. with evaluate(False):
  774. assert parse_latex_lark(latex_str) == sympy_expr, latex_str
  775. for latex_str, sympy_expr in EVALUATED_MATRIX_EXPRESSION_PAIRS:
  776. assert parse_latex_lark(latex_str) == sympy_expr, latex_str