diff --git a/mathics/builtin/arithmetic.py b/mathics/builtin/arithmetic.py index f52d69fcdb..536ee488bb 100644 --- a/mathics/builtin/arithmetic.py +++ b/mathics/builtin/arithmetic.py @@ -1876,9 +1876,9 @@ class Sum(_IterationFunction, SympyFunction): >> Sum[x ^ 2, {x, 1, y}] - y * (y + 1) * (2 * y + 1) / 6 = 0 - ## >> (-1 + a^n) Sum[a^(k n), {k, 0, m-1}] // Simplify - ## = -1 + (a ^ n) ^ m # this is what I am getting - ## = Piecewise[{{m (-1 + a ^ n), a ^ n == 1}, {-1 + (a ^ n) ^ m, True}}] + + >> (-1 + a^n) Sum[a^(k n), {k, 0, m-1}] // Simplify + = Piecewise[{{m (-1 + a ^ n), a ^ n == 1}, {-1 + (a ^ n) ^ m, True}}] Infinite sums: >> Sum[1 / 2 ^ i, {i, 1, Infinity}] diff --git a/mathics/builtin/linalg.py b/mathics/builtin/linalg.py index 3644c46d1f..1974e4849d 100644 --- a/mathics/builtin/linalg.py +++ b/mathics/builtin/linalg.py @@ -697,7 +697,7 @@ class Eigenvalues(Builtin): Symbolic eigenvalues: >> Eigenvalues[{{Cos[theta],Sin[theta],0},{-Sin[theta],Cos[theta],0},{0,0,1}}] // Sort - = {1, Cos[theta] + Sqrt[(-1 + Cos[theta]) (1 + Cos[theta])], Cos[theta] - Sqrt[(-1 + Cos[theta]) (1 + Cos[theta])]} + = {1, Cos[theta] + Sqrt[-1 + Cos[theta] ^ 2], Cos[theta] - Sqrt[-1 + Cos[theta] ^ 2]} >> Eigenvalues[{{7, 1}, {-4, 3}}] = {5, 5} diff --git a/mathics/core/definitions.py b/mathics/core/definitions.py index 36bcbe9437..a8c90c432b 100644 --- a/mathics/core/definitions.py +++ b/mathics/core/definitions.py @@ -382,8 +382,6 @@ def get_package_names(self) -> typing.List[str]: packages = [c.get_string_value() for c in packages.leaves] return packages - # return sorted({name.split("`")[0] for name in self.get_names()}) - def shorten_name(self, name_with_ctx) -> str: if "`" not in name_with_ctx: return name_with_ctx diff --git a/mathics/session.py b/mathics/session.py index fd338688fe..dc3b6147bb 100644 --- a/mathics/session.py +++ b/mathics/session.py @@ -26,5 +26,3 @@ def format_result(self, str_expression=None, timeout=None, form=None): if form is None: form = self.form return self.last_result.do_format(self.evaluation, form) - - diff --git a/test/test_cellstotex.py b/test/test_cellstotex.py new file mode 100644 index 0000000000..583eebf0ec --- /dev/null +++ b/test/test_cellstotex.py @@ -0,0 +1,108 @@ +import os +from mathics.core.parser import parse, MathicsSingleLineFeeder +from mathics.core.definitions import Definitions +from mathics.core.evaluation import Evaluation +from mathics.core.expression import Symbol +import pytest +import urllib.request + +external_url = ( + "https://raw.githubusercontent.com/jkuczm/MathematicaCellsToTeX/master/NoInstall.m" +) + +pytestmark = pytest.mark.skipif(os.getenv("SKIP_CELLSTOTEX", None) is not None, + reason="SKIP_CELLSTOTEX environment variable set") + +try: + http_code = urllib.request.urlopen(external_url).getcode() +except: + url_reachable = False +else: + url_reachable = http_code in (200,) # add other 2xx or 3xx's? + +definitions = Definitions(add_builtin=True) +evaluation = Evaluation(definitions=definitions, catch_interrupt=False) +set_versionnumber = 'Unprotect[$VersionNumber];$VersionNumber=11;Protect[$VersionNumber];' +import_url = 'Import@"%s"' % external_url + + +def _evaluate(str_expression): + expr = parse(definitions, MathicsSingleLineFeeder(str_expression)) + return expr.evaluate(evaluation) + +_evaluate('LoadModule["pymathics.asy"]') + +def test_load(): + str_expected1 = "{}" + message1 = "" + _evaluate(set_versionnumber) + result1 = _evaluate(import_url) + expected1 = _evaluate(str_expected1) + + + if message1: + assert result1 == expected1, message1 + else: + assert result1 == expected1 + + result2 = _evaluate('Names["CellsToTeX`*"]') + expected2 = _evaluate('{"CellToTeX", "CellsToTeXException", "CellsToTeXPreamble"}') + print(result2) + assert result2 == expected2 + + +@pytest.mark.skipif(not url_reachable, reason="skipping since we can't reach %s" % external_url) +#@pytest.mark.skip( +# reason="FIXME: full CellToTeX import test is not working yet: implement levelspec > 1" +#) +def test_load_and_run(): + print("load and run") + str_expected0 = "None" + _evaluate(set_versionnumber) + result0 = _evaluate(import_url) + expected0 = _evaluate(str_expected0) + + if result0 == Symbol("System`$Failed"): + return 0 + + str_expr1 = 'CellsToTeXPreamble[]' + str_expected1 = '"\\mmaSet{morefv={gobble=2,},}\\n"' + result1 = _evaluate(str_expr1) + expected1 = _evaluate(str_expected1) + assert result1 == expected1 + + str_expr1 = 'boxes=MakeBoxes[Pi];\ + cell = Cell[BoxData[boxes], "Input"];res=Catch[CellToTeX[cell, Style->"Input"]]' + str_expected1 = '"\\begin{mmaCell}{Input}\n \\pi\n\\end{mmaCell}"' + message1 = "" + result1 = _evaluate(str_expr1) + expected1 = _evaluate(str_expected1) + if message1: + assert result1 == expected1, message1 + else: + assert result1 == expected1 + + str_expr2 = 'boxes=MakeBoxes[(-b \\[PlusMinus] Sqrt[b^2-4*a*c])/(2 a)];\ + cell = Cell[BoxData[boxes],"Input"];res=Catch[CellToTeX[cell], Style->"Input"]' + str_expected2 = '"\\begin{mmaCell}{Input}\n \\mmaFrac{-b\\(\\pmb{\\pm}\\)\\mmaSqrt{\\mmaSup{b}{2}-4 a c}}{2 a}\n\\end{mmaCell}"' + print(str_expr2) + message2 = "" + result2 = _evaluate(str_expr2) + expected2 = _evaluate(str_expected2) + if message2: + assert result2 == expected2, message2 + else: + assert result2 == expected2 + + str_expr3 = 'boxes=MakeBoxes[Sqrt[Integrate[f[x],{x,a,b}]]];\ + cell = Cell[BoxData[boxes],"Input"];res=Catch[CellToTeX[cell]]' + print(str_expr3) + + str_expected3 = '"\\begin{mmaCell}[morefunctionlocal={x}]{Input}\n \\mmaSqrt{\\mmaSubSupM{\\int}{a}{b}f[x]dx}\n\\end{mmaCell}"' + message3 = "" + result3 = _evaluate(str_expr3) + expected3 = _evaluate(str_expected3) + if message3: + assert result3 == expected3, message3 + else: + assert result3 == expected3