Blame numpy/conftest.py

Packit 7a8e5e
"""
Packit 7a8e5e
Pytest configuration and fixtures for the Numpy test suite.
Packit 7a8e5e
"""
Packit 7a8e5e
from __future__ import division, absolute_import, print_function
Packit 7a8e5e
Packit 7a8e5e
import warnings
Packit 7a8e5e
import pytest
Packit 7a8e5e
Packit 7a8e5e
from numpy.core.multiarray_tests import get_fpu_mode
Packit 7a8e5e
Packit 7a8e5e
Packit 7a8e5e
_old_fpu_mode = None
Packit 7a8e5e
_collect_results = {}
Packit 7a8e5e
Packit 7a8e5e
Packit 7a8e5e
@pytest.hookimpl()
Packit 7a8e5e
def pytest_itemcollected(item):
Packit 7a8e5e
    """
Packit 7a8e5e
    Check FPU precision mode was not changed during test collection.
Packit 7a8e5e
Packit 7a8e5e
    The clumsy way we do it here is mainly necessary because numpy
Packit 7a8e5e
    still uses yield tests, which can execute code at test collection 
Packit 7a8e5e
    time.
Packit 7a8e5e
    """
Packit 7a8e5e
    global _old_fpu_mode
Packit 7a8e5e
Packit 7a8e5e
    mode = get_fpu_mode()
Packit 7a8e5e
Packit 7a8e5e
    if _old_fpu_mode is None:
Packit 7a8e5e
        _old_fpu_mode = mode
Packit 7a8e5e
    elif mode != _old_fpu_mode:
Packit 7a8e5e
        _collect_results[item] = (_old_fpu_mode, mode)
Packit 7a8e5e
        _old_fpu_mode = mode
Packit 7a8e5e
Packit 7a8e5e
Packit 7a8e5e
@pytest.fixture(scope="function", autouse=True)
Packit 7a8e5e
def check_fpu_mode(request):
Packit 7a8e5e
    """
Packit 7a8e5e
    Check FPU precision mode was not changed during the test.
Packit 7a8e5e
    """
Packit 7a8e5e
    old_mode = get_fpu_mode()
Packit 7a8e5e
    yield
Packit 7a8e5e
    new_mode = get_fpu_mode()
Packit 7a8e5e
Packit 7a8e5e
    if old_mode != new_mode:
Packit 7a8e5e
        raise AssertionError("FPU precision mode changed from {0:#x} to {1:#x}"
Packit 7a8e5e
                             " during the test".format(old_mode, new_mode))
Packit 7a8e5e
Packit 7a8e5e
    collect_result = _collect_results.get(request.node)
Packit 7a8e5e
    if collect_result is not None:
Packit 7a8e5e
        old_mode, new_mode = collect_result
Packit 7a8e5e
        raise AssertionError("FPU precision mode changed from {0:#x} to {1:#x}"
Packit 7a8e5e
                             " when collecting the test".format(old_mode, 
Packit 7a8e5e
                                                                new_mode))