def test_Integral(): from sympy import Integral, exp single = Integral(exp(-x), (x, 0, oo)) double = Integral(x**2 * exp(x * y), (x, -z, z), (y, 0, z)) indefinite = Integral(x**2, x) evaluateat = Integral(x**2, (x, 1)) prntr = SciPyPrinter() assert prntr.doprint( single ) == 'scipy.integrate.quad(lambda x: numpy.exp(-x), 0, numpy.PINF)[0]' assert prntr.doprint( double ) == 'scipy.integrate.nquad(lambda x, y: x**2*numpy.exp(x*y), ((-z, z), (0, z)))[0]' raises(NotImplementedError, lambda: prntr.doprint(indefinite)) raises(NotImplementedError, lambda: prntr.doprint(evaluateat)) prntr = MpmathPrinter() assert prntr.doprint( single) == 'mpmath.quad(lambda x: mpmath.exp(-x), (0, mpmath.inf))' assert prntr.doprint( double ) == 'mpmath.quad(lambda x, y: x**2*mpmath.exp(x*y), (-z, z), (0, z))' raises(NotImplementedError, lambda: prntr.doprint(indefinite)) raises(NotImplementedError, lambda: prntr.doprint(evaluateat))
def test_fresnel_integrals(): from sympy import fresnelc, fresnels expr1 = fresnelc(x) expr2 = fresnels(x) prntr = SciPyPrinter() assert prntr.doprint(expr1) == 'scipy.special.fresnel(x)[1]' assert prntr.doprint(expr2) == 'scipy.special.fresnel(x)[0]' prntr = NumPyPrinter() assert prntr.doprint( expr1 ) == ' # Not supported in Python with NumPy:\n # fresnelc\nfresnelc(x)' assert prntr.doprint( expr2 ) == ' # Not supported in Python with NumPy:\n # fresnels\nfresnels(x)' prntr = PythonCodePrinter() assert prntr.doprint( expr1) == ' # Not supported in Python:\n # fresnelc\nfresnelc(x)' assert prntr.doprint( expr2) == ' # Not supported in Python:\n # fresnels\nfresnels(x)' prntr = MpmathPrinter() assert prntr.doprint(expr1) == 'mpmath.fresnelc(x)' assert prntr.doprint(expr2) == 'mpmath.fresnels(x)'
def test_sqrt(): prntr = PythonCodePrinter() assert prntr._print_Pow(sqrt(x), rational=False) == 'math.sqrt(x)' assert prntr._print_Pow(1 / sqrt(x), rational=False) == '1/math.sqrt(x)' prntr = PythonCodePrinter({'standard': 'python2'}) assert prntr._print_Pow(sqrt(x), rational=True) == 'x**(1./2.)' assert prntr._print_Pow(1 / sqrt(x), rational=True) == 'x**(-1./2.)' prntr = PythonCodePrinter({'standard': 'python3'}) assert prntr._print_Pow(sqrt(x), rational=True) == 'x**(1/2)' assert prntr._print_Pow(1 / sqrt(x), rational=True) == 'x**(-1/2)' prntr = MpmathPrinter() assert prntr._print_Pow(sqrt(x), rational=False) == 'mpmath.sqrt(x)' assert prntr._print_Pow(sqrt(x), rational=True) == \ "x**(mpmath.mpf(1)/mpmath.mpf(2))" prntr = NumPyPrinter() assert prntr._print_Pow(sqrt(x), rational=False) == 'numpy.sqrt(x)' assert prntr._print_Pow(sqrt(x), rational=True) == 'x**(1/2)' prntr = SciPyPrinter() assert prntr._print_Pow(sqrt(x), rational=False) == 'numpy.sqrt(x)' assert prntr._print_Pow(sqrt(x), rational=True) == 'x**(1/2)' prntr = SymPyPrinter() assert prntr._print_Pow(sqrt(x), rational=False) == 'sympy.sqrt(x)' assert prntr._print_Pow(sqrt(x), rational=True) == 'x**(1/2)'
def test_sqrt(): prntr = PythonCodePrinter() assert prntr._print_Pow(sqrt(x), rational=False) == "math.sqrt(x)" assert prntr._print_Pow(1 / sqrt(x), rational=False) == "1/math.sqrt(x)" prntr = PythonCodePrinter({"standard": "python2"}) assert prntr._print_Pow(sqrt(x), rational=True) == "x**(1./2.)" assert prntr._print_Pow(1 / sqrt(x), rational=True) == "x**(-1./2.)" prntr = PythonCodePrinter({"standard": "python3"}) assert prntr._print_Pow(sqrt(x), rational=True) == "x**(1/2)" assert prntr._print_Pow(1 / sqrt(x), rational=True) == "x**(-1/2)" prntr = MpmathPrinter() assert prntr._print_Pow(sqrt(x), rational=False) == "mpmath.sqrt(x)" assert (prntr._print_Pow( sqrt(x), rational=True) == "x**(mpmath.mpf(1)/mpmath.mpf(2))") prntr = NumPyPrinter() assert prntr._print_Pow(sqrt(x), rational=False) == "numpy.sqrt(x)" assert prntr._print_Pow(sqrt(x), rational=True) == "x**(1/2)" prntr = SciPyPrinter() assert prntr._print_Pow(sqrt(x), rational=False) == "numpy.sqrt(x)" assert prntr._print_Pow(sqrt(x), rational=True) == "x**(1/2)" prntr = SymPyPrinter() assert prntr._print_Pow(sqrt(x), rational=False) == "sympy.sqrt(x)" assert prntr._print_Pow(sqrt(x), rational=True) == "x**(1/2)"
def test_MpmathPrinter(): p = MpmathPrinter() assert p.doprint(sign(x)) == 'mpmath.sign(x)' assert p.doprint(Rational(1, 2)) == 'mpmath.mpf(1)/mpmath.mpf(2)' assert p.doprint(loggamma(x)) == 'mpmath.loggamma(x)' assert p.doprint(fresnels(x)) == 'mpmath.fresnels(x)' assert p.doprint(fresnelc(x)) == 'mpmath.fresnelc(x)'
def test_beta(): from sympy import beta expr = beta(x, y) prntr = SciPyPrinter() assert prntr.doprint(expr) == 'scipy.special.beta(x, y)' prntr = NumPyPrinter() assert prntr.doprint(expr) == 'math.gamma(x)*math.gamma(y)/math.gamma(x + y)' prntr = PythonCodePrinter() assert prntr.doprint(expr) == 'math.gamma(x)*math.gamma(y)/math.gamma(x + y)' prntr = MpmathPrinter() assert prntr.doprint(expr) == 'mpmath.beta(x, y)'
def test_frac(): from sympy.functions.elementary.integers import frac expr = frac(x) prntr = NumPyPrinter() assert prntr.doprint(expr) == 'numpy.mod(x, 1)' prntr = SciPyPrinter() assert prntr.doprint(expr) == 'numpy.mod(x, 1)' prntr = PythonCodePrinter() assert prntr.doprint(expr) == 'x % 1' prntr = MpmathPrinter() assert prntr.doprint(expr) == 'mpmath.frac(x)' prntr = SymPyPrinter() assert prntr.doprint(expr) == 'sympy.functions.elementary.integers.frac(x)'
def test_beta(): from sympy.functions.special.beta_functions import beta expr = beta(x, y) prntr = SciPyPrinter() assert prntr.doprint(expr) == 'scipy.special.beta(x, y)' prntr = NumPyPrinter() assert prntr.doprint(expr) == 'math.gamma(x)*math.gamma(y)/math.gamma(x + y)' prntr = PythonCodePrinter() assert prntr.doprint(expr) == 'math.gamma(x)*math.gamma(y)/math.gamma(x + y)' prntr = PythonCodePrinter({'allow_unknown_functions': True}) assert prntr.doprint(expr) == 'math.gamma(x)*math.gamma(y)/math.gamma(x + y)' prntr = MpmathPrinter() assert prntr.doprint(expr) == 'mpmath.beta(x, y)'
def test_fresnel_integrals(): from sympy.functions.special.error_functions import (fresnelc, fresnels) expr1 = fresnelc(x) expr2 = fresnels(x) prntr = SciPyPrinter() assert prntr.doprint(expr1) == 'scipy.special.fresnel(x)[1]' assert prntr.doprint(expr2) == 'scipy.special.fresnel(x)[0]' prntr = NumPyPrinter() assert "Not supported" in prntr.doprint(expr1) assert "Not supported" in prntr.doprint(expr2) prntr = PythonCodePrinter() assert "Not supported" in prntr.doprint(expr1) assert "Not supported" in prntr.doprint(expr2) prntr = MpmathPrinter() assert prntr.doprint(expr1) == 'mpmath.fresnelc(x)' assert prntr.doprint(expr2) == 'mpmath.fresnels(x)'
def test_MpmathPrinter(): p = MpmathPrinter() assert p.doprint(sign(x)) == 'mpmath.sign(x)' assert p.doprint(Rational(1, 2)) == 'mpmath.mpf(1)/mpmath.mpf(2)' assert p.doprint(S.Exp1) == 'mpmath.e' assert p.doprint(S.Pi) == 'mpmath.pi' assert p.doprint(S.GoldenRatio) == 'mpmath.phi' assert p.doprint(S.EulerGamma) == 'mpmath.euler' assert p.doprint(S.NaN) == 'mpmath.nan' assert p.doprint(S.Infinity) == 'mpmath.inf' assert p.doprint(S.NegativeInfinity) == 'mpmath.ninf'
def test_printmethod(): obj = CustomPrintedObject() assert NumPyPrinter().doprint(obj) == 'numpy' assert MpmathPrinter().doprint(obj) == 'mpmath'
def test_MpmathPrinter(): p = MpmathPrinter() assert p.doprint(sign(x)) == 'mpmath.sign(x)' assert p.doprint(Rational(1, 2)) == 'mpmath.mpf(1)/mpmath.mpf(2)'
def test_MpmathPrinter(): p = MpmathPrinter() assert p.doprint(sign(x)) == 'mpmath.sign(x)'
def make_py_func(exprs, args=None, name=None, comment="", use_mpmath=False): if args is None: args = list() if name is None: name = "func_" + "".join( [random.choice(string.ascii_letters) for i in range(8)]) arg_strs = [arg.strip() for arg in args.split(",")] is_scalar = not isinstance(exprs, ImmutableDenseNDimArray) if is_scalar: repls, reduced = cse(exprs) reduced = reduced[0] else: if len(exprs.shape) == 2: exprs = it.chain(*exprs) repls, reduced = cse(list(exprs)) print_func = pycode if use_mpmath: print_func = MpmathPrinter().doprint assignments = [Assignment(lhs, rhs) for lhs, rhs in repls] py_lines = [print_func(as_) for as_ in assignments] return_val = print_func(reduced) tpl = Template( """ def {{ name }}({{ args }}): {% if comment %} \"\"\"{{ comment }}\"\"\" {% endif %} {% if use_mpmath %} {% for arg in arg_strs %} {{ arg }} = mpmath.mpf({{ arg }}) {% endfor %} {% endif %} {% for line in py_lines %} {{ line }} {% endfor %} {% if is_scalar %} return {{ return_val }} {% else %} return np.array({{ return_val }}, dtype=np.float64) {% endif %} """, trim_blocks=True, lstrip_blocks=True, ) rendered = textwrap.dedent( tpl.render( name=name, args=args, py_lines=py_lines, return_val=return_val, comment=comment, is_scalar=is_scalar, use_mpmath=use_mpmath, arg_strs=arg_strs, )).strip() return rendered