From 133fe1809310fe0201bc92da64d87143ac7ac6c8 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Tue, 8 May 2012 20:42:47 -0400 Subject: [PATCH] Final fixes to Maxima wrapper before abandoning it :/ --- pymbolic/maxima.py | 36 +++++++++++++++++++++++++----------- test/test_maxima.py | 4 ++++ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/pymbolic/maxima.py b/pymbolic/maxima.py index 7063dee..da3a150 100644 --- a/pymbolic/maxima.py +++ b/pymbolic/maxima.py @@ -169,13 +169,6 @@ def set_debug(level): global _DEBUG _DEBUG = level - if _kernel_instance is not None: - if level & 8: - import sys - _kernel_instance.child.logfile = sys.stdout - else: - _kernel_instance.child.logfile = None - def _strify_assignments_and_expr(assignments, expr): strify = MaximaStringifyMapper() @@ -187,9 +180,11 @@ def _strify_assignments_and_expr(assignments, expr): def make_setup(assignment): if isinstance(assignment, str): return assignment - else: + if isinstance(assignment, tuple): name, value = assignment return"%s: %s" % (name, strify(value)) + else: + return strify(assignment) return tuple(make_setup(assignment) for assignment in assignments), expr_str @@ -245,28 +240,45 @@ class MaximaKernel: self._initialize() def shutdown(self): - self.child.sendline("quit();") + self._sendline("quit();") self.child.wait() # }}} # {{{ string interface + def _check_debug(self): + if _DEBUG & 4: + import sys + self.child.logfile = sys.stdout + + def _sendline(self, l): + self._check_debug() + + if len(l) > 2048: + raise RuntimeError("input lines longer than 2048 characters " + "don't work, refusing") + + self.child.sendline(l) + def exec_str(self, s): cmd = s+";" if _DEBUG & 1: print "[MAXIMA INPUT]", cmd - self.child.sendline(s+";") + self._sendline(s+";") self._expect_prompt(IN_PROMPT_RE) def eval_str(self, s): + self._check_debug() + cmd = s+";" if _DEBUG & 1: print "[MAXIMA INPUT]", cmd - self.child.sendline(cmd) + self._sendline(cmd) s_echo = self.child.readline() + assert s_echo.strip() == cmd.strip() self._expect_prompt(OUT_PROMPT_RE) @@ -342,6 +354,8 @@ def eval_expr_with_setup(assignments, expr): def diff(expr, var, count=1, assignments=()): from pymbolic import var as sym + if isinstance(var, str): + var = sym(var) return eval_expr_with_setup(assignments, sym("diff")(expr, var, count)) # }}} diff --git a/test/test_maxima.py b/test/test_maxima.py index ad81938..14ef77f 100644 --- a/test/test_maxima.py +++ b/test/test_maxima.py @@ -68,6 +68,10 @@ def test_diff(): from pymbolic import parse diff(parse("sqrt(x**2+y**2)"), parse("x")) +def test_long_command(knl): + from pymbolic.maxima import set_debug + set_debug(4) + knl.eval_str("+".join(["1"]*16384)) if __name__ == "__main__": import sys -- GitLab