|
import sys |
|
|
|
sys._running_pytest = True |
|
from sympy.external.importtools import version_tuple |
|
|
|
import pytest |
|
from sympy.core.cache import clear_cache, USE_CACHE |
|
from sympy.external.gmpy import GROUND_TYPES |
|
from sympy.utilities.misc import ARCH |
|
import re |
|
|
|
try: |
|
import hypothesis |
|
|
|
hypothesis.settings.register_profile("sympy_hypothesis_profile", deadline=None) |
|
hypothesis.settings.load_profile("sympy_hypothesis_profile") |
|
except ImportError: |
|
raise ImportError( |
|
"hypothesis is a required dependency to run the SymPy test suite. " |
|
"Install it with 'pip install hypothesis' or 'conda install -c conda-forge hypothesis'" |
|
) |
|
|
|
|
|
sp = re.compile(r"([0-9]+)/([1-9][0-9]*)") |
|
|
|
|
|
def process_split(config, items): |
|
split = config.getoption("--split") |
|
if not split: |
|
return |
|
m = sp.match(split) |
|
if not m: |
|
raise ValueError( |
|
"split must be a string of the form a/b " "where a and b are ints." |
|
) |
|
i, t = map(int, m.groups()) |
|
start, end = (i - 1) * len(items) // t, i * len(items) // t |
|
|
|
if i < t: |
|
|
|
del items[end:] |
|
del items[:start] |
|
|
|
|
|
def pytest_report_header(config): |
|
s = "architecture: %s\n" % ARCH |
|
s += "cache: %s\n" % USE_CACHE |
|
version = "" |
|
if GROUND_TYPES == "gmpy": |
|
import gmpy2 |
|
|
|
version = gmpy2.version() |
|
elif GROUND_TYPES == "flint": |
|
try: |
|
from flint import __version__ |
|
except ImportError: |
|
version = "unknown" |
|
else: |
|
version = f'(python-flint=={__version__})' |
|
s += "ground types: %s %s\n" % (GROUND_TYPES, version) |
|
return s |
|
|
|
|
|
def pytest_terminal_summary(terminalreporter): |
|
if terminalreporter.stats.get("error", None) or terminalreporter.stats.get( |
|
"failed", None |
|
): |
|
terminalreporter.write_sep(" ", "DO *NOT* COMMIT!", red=True, bold=True) |
|
|
|
|
|
def pytest_addoption(parser): |
|
parser.addoption("--split", action="store", default="", help="split tests") |
|
|
|
|
|
def pytest_collection_modifyitems(config, items): |
|
"""pytest hook.""" |
|
|
|
process_split(config, items) |
|
|
|
|
|
@pytest.fixture(autouse=True, scope="module") |
|
def file_clear_cache(): |
|
clear_cache() |
|
|
|
|
|
@pytest.fixture(autouse=True, scope="module") |
|
def check_disabled(request): |
|
if getattr(request.module, "disabled", False): |
|
pytest.skip("test requirements not met.") |
|
elif getattr(request.module, "ipython", False): |
|
|
|
if ( |
|
version_tuple(pytest.__version__) < version_tuple("2.6.3") |
|
and pytest.config.getvalue("-s") != "no" |
|
): |
|
pytest.skip("run py.test with -s or upgrade to newer version.") |
|
|