Skip to content

Commit f931a7b

Browse files
authored
Merge pull request #417 from eendebakpt/symengine_importtime
Improve symengine import time
2 parents 5716f11 + ae1a0e0 commit f931a7b

22 files changed

+116
-115
lines changed

symengine/test_utilities.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import sys
2+
3+
try:
4+
import py
5+
from py.test import skip, raises
6+
USE_PYTEST = getattr(sys, '_running_pytest', False)
7+
except ImportError:
8+
USE_PYTEST = False
9+
10+
if not USE_PYTEST:
11+
def raises(expectedException, code=None):
12+
"""
13+
Tests that ``code`` raises the exception ``expectedException``.
14+
15+
``code`` may be a callable, such as a lambda expression or function
16+
name.
17+
18+
If ``code`` is not given or None, ``raises`` will return a context
19+
manager for use in ``with`` statements; the code to execute then
20+
comes from the scope of the ``with``.
21+
22+
``raises()`` does nothing if the callable raises the expected
23+
exception, otherwise it raises an AssertionError.
24+
25+
Examples
26+
========
27+
28+
>>> from symengine.pytest import raises
29+
30+
>>> raises(ZeroDivisionError, lambda: 1/0)
31+
>>> raises(ZeroDivisionError, lambda: 1/2)
32+
Traceback (most recent call last):
33+
...
34+
AssertionError: DID NOT RAISE
35+
36+
>>> with raises(ZeroDivisionError):
37+
... n = 1/0
38+
>>> with raises(ZeroDivisionError):
39+
... n = 1/2
40+
Traceback (most recent call last):
41+
...
42+
AssertionError: DID NOT RAISE
43+
44+
Note that you cannot test multiple statements via
45+
``with raises``:
46+
47+
>>> with raises(ZeroDivisionError):
48+
... n = 1/0 # will execute and raise, aborting the ``with``
49+
... n = 9999/0 # never executed
50+
51+
This is just what ``with`` is supposed to do: abort the
52+
contained statement sequence at the first exception and let
53+
the context manager deal with the exception.
54+
55+
To test multiple statements, you'll need a separate ``with``
56+
for each:
57+
58+
>>> with raises(ZeroDivisionError):
59+
... n = 1/0 # will execute and raise
60+
>>> with raises(ZeroDivisionError):
61+
... n = 9999/0 # will also execute and raise
62+
63+
"""
64+
if code is None:
65+
return RaisesContext(expectedException)
66+
elif callable(code):
67+
try:
68+
code()
69+
except expectedException:
70+
return
71+
raise AssertionError("DID NOT RAISE")
72+
elif isinstance(code, str):
73+
raise TypeError(
74+
'\'raises(xxx, "code")\' has been phased out; '
75+
'change \'raises(xxx, "expression")\' '
76+
'to \'raises(xxx, lambda: expression)\', '
77+
'\'raises(xxx, "statement")\' '
78+
'to \'with raises(xxx): statement\'')
79+
else:
80+
raise TypeError(
81+
'raises() expects a callable for the 2nd argument.')
82+
83+
class RaisesContext(object):
84+
def __init__(self, expectedException):
85+
self.expectedException = expectedException
86+
87+
def __enter__(self):
88+
return None
89+
90+
def __exit__(self, exc_type, exc_value, traceback):
91+
if exc_type is None:
92+
raise AssertionError("DID NOT RAISE")
93+
return issubclass(exc_type, self.expectedException)
94+
95+

symengine/tests/test_arit.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from symengine.utilities import raises
1+
from symengine.test_utilities import raises
22

33
from symengine import (Symbol, Integer, Add, Mul, Pow, Rational, sqrt,
44
symbols, S, I, count_ops)

symengine/tests/test_dict_basic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from symengine.utilities import raises
1+
from symengine.test_utilities import raises
22

33
from symengine import symbols, DictBasic, sin, Integer
44

symengine/tests/test_eval.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from symengine.utilities import raises
1+
from symengine.test_utilities import raises
22
from symengine import (Symbol, sin, cos, Integer, Add, I, RealDouble, ComplexDouble, sqrt)
33

44
from unittest.case import SkipTest

symengine/tests/test_expr.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
from symengine import Add, Mul, Symbol, Integer
2-
from symengine.utilities import raises
1+
from symengine import Symbol, Integer
2+
from symengine.test_utilities import raises
33

44

55
def test_as_coefficients_dict():

symengine/tests/test_functions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
loggamma, beta, polygamma, digamma, trigamma, sign, floor, ceiling, conjugate,
66
nan, Float, UnevaluatedExpr
77
)
8-
from symengine.utilities import raises
8+
from symengine.test_utilities import raises
99

1010
import unittest
1111

symengine/tests/test_lambdify.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@
88
import itertools
99
from operator import mul
1010
import math
11-
import sys
1211

1312
import symengine as se
14-
from symengine.utilities import raises
13+
from symengine.test_utilities import raises
1514
from symengine import have_numpy
1615
import unittest
1716
from unittest.case import SkipTest

symengine/tests/test_logic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from symengine.utilities import raises
1+
from symengine.test_utilities import raises
22
from symengine.lib.symengine_wrapper import (true, false, Eq, Ne, Ge, Gt, Le, Lt, Symbol,
33
I, And, Or, Not, Nand, Nor, Xor, Xnor, Piecewise,
44
Contains, Interval, FiniteSet, oo, log)

symengine/tests/test_matrices.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from symengine.lib.symengine_wrapper import (DenseMatrix, Symbol, Integer,
33
Rational, function_symbol, I, NonSquareMatrixError, ShapeError, zeros,
44
ones, eye, ImmutableMatrix)
5-
from symengine.utilities import raises
5+
from symengine.test_utilities import raises
66

77

88
try:

symengine/tests/test_ntheory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from symengine.utilities import raises
1+
from symengine.test_utilities import raises
22

33
from symengine.lib.symengine_wrapper import (isprime, nextprime, gcd,
44
lcm, gcd_ext, mod, quotient, quotient_mod, mod_inverse, crt, fibonacci,

0 commit comments

Comments
 (0)