From e07f2a8b2ad979bd21cc076c0b6a206537469d6b Mon Sep 17 00:00:00 2001 From: Alex Fikl Date: Wed, 6 Jun 2018 19:18:43 -0500 Subject: [PATCH] tests: skip tests if maxima not available --- pymbolic/interop/maxima.py | 32 ++++++++++++++++++++++++++++++++ test/test_maxima.py | 10 ++++++++++ 2 files changed, 42 insertions(+) diff --git a/pymbolic/interop/maxima.py b/pymbolic/interop/maxima.py index 4be1dcf..380ffa9 100644 --- a/pymbolic/interop/maxima.py +++ b/pymbolic/interop/maxima.py @@ -45,6 +45,38 @@ import numpy as np from pymbolic.mapper.stringifier import StringifyMapper from pymbolic.parser import Parser as ParserBase, FinalizedTuple +# {{{ check for maxima executable + + +def _find_maxima_executable(): + import os + + def is_executable(filename): + return os.path.isfile(filename) and os.access(filename, os.X_OK) + + global FOUND_MAXIMA + + executable = os.environ.get("SUMPY_MAXIMA_EXECUTABLE", "maxima") + + FOUND_MAXIMA = False + if is_executable(executable): + FOUND_MAXIMA = True + else: + executable = os.path.basename(executable) + try: + import shutil + FOUND_MAXIMA = bool(shutil.which(executable)) + except ImportError: + for path in os.environ["PATH"].split(os.pathsep): + filename = os.path.join(path, executable) + if is_executable(filename): + FOUND_MAXIMA = True + break + + +_find_maxima_executable() + +# }}} IN_PROMPT_RE = re.compile(br"\(%i([0-9]+)\) ") OUT_PROMPT_RE = re.compile(br"\(%o([0-9]+)\) ") diff --git a/test/test_maxima.py b/test/test_maxima.py index a61f0f2..7a6a7e0 100644 --- a/test/test_maxima.py +++ b/test/test_maxima.py @@ -24,8 +24,10 @@ THE SOFTWARE. import pytest from pymbolic.interop.maxima import MaximaKernel +from pymbolic.interop.maxima import FOUND_MAXIMA +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_kernel(): pytest.importorskip("pexpect") @@ -45,6 +47,7 @@ def knl(request): return knl +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_setup(knl): pytest.importorskip("pexpect") @@ -53,6 +56,7 @@ def test_setup(knl): "sum(diff(k, t,deg)*t^deg,deg,0,6)") +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_error(knl): from pymbolic.interop.maxima import MaximaError try: @@ -66,6 +70,7 @@ def test_error(knl): pass +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_strict_round_trip(knl): from pymbolic import parse from pymbolic.primitives import Quotient @@ -90,6 +95,7 @@ def test_strict_round_trip(knl): assert round_trips_correctly +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_lax_round_trip(knl): from pymbolic.interop.maxima import MaximaParser k_setup = [ @@ -104,6 +110,7 @@ def test_lax_round_trip(knl): "ratsimp(result-result2)") == 0 +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_parse_matrix(knl): z = knl.clean_eval_str_with_setup([ "A:matrix([1,2+0.3*dt], [3,4])", @@ -115,6 +122,7 @@ def test_parse_matrix(knl): print(MaximaParser()(z)) +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_diff(): pytest.importorskip("pexpect") @@ -123,12 +131,14 @@ def test_diff(): diff(parse("sqrt(x**2+y**2)"), parse("x")) +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_long_command(knl): from pymbolic.interop.maxima import set_debug set_debug(4) knl.eval_str("+".join(["1"]*16384)) +@pytest.mark.skipif(not FOUND_MAXIMA, reason="cannot find maxima executable") def test_restart(knl): pytest.importorskip("pexpect") -- GitLab