"""common test-related code.""" import multiprocessing import os import platform import sys import numpy as np import pytest __all__ = ['uses_matlab', # skip if pymatbridge and Matlab unavailable 'uses_futures', # skip if futures unavailable 'uses_pymatbridge', # skip if no PYWT_XSLOW environment variable 'uses_precomputed', # skip if PYWT_XSLOW environment variable found 'matlab_result_dict_cwt', # dict with precomputed Matlab dwt data 'matlab_result_dict_dwt', # dict with precomputed Matlab cwt data 'futures', # the futures module or None 'max_workers', # the number of workers available to futures 'size_set', # the set of Matlab tests to run ] try: from concurrent import futures max_workers = multiprocessing.cpu_count() futures_available = True except ImportError: futures_available = False futures = None max_workers = 1 # Check if running on Emscripten/WASM, and skip tests that require concurrency. # Relevant issue: https://github.com/pyodide/pyodide/issues/237 IS_WASM = (sys.platform == "emscripten") or (platform.machine() in ["wasm32", "wasm64"]) # check if pymatbridge + MATLAB tests should be run matlab_result_dict_dwt = None matlab_result_dict_cwt = None matlab_missing = True use_precomputed = True size_set = 'reduced' if 'PYWT_XSLOW' in os.environ: try: from pymatbridge import Matlab mlab = Matlab() matlab_missing = False use_precomputed = False size_set = 'full' except ImportError: print("To run Matlab compatibility tests you need to have MathWorks " "MATLAB, MathWorks Wavelet Toolbox and the pymatbridge Python " "package installed.") if use_precomputed: # load dictionaries of precomputed results data_dir = os.path.join(os.path.dirname(__file__), 'tests', 'data') matlab_data_file_cwt = os.path.join( data_dir, 'cwt_matlabR2015b_result.npz') matlab_result_dict_cwt = np.load(matlab_data_file_cwt) matlab_data_file_dwt = os.path.join( data_dir, 'dwt_matlabR2012a_result.npz') matlab_result_dict_dwt = np.load(matlab_data_file_dwt) uses_futures = pytest.mark.skipif( not futures_available or IS_WASM, reason='futures is not available, or running via Pyodide/WASM.') # not futures_available, reason='futures not available') uses_matlab = pytest.mark.skipif( matlab_missing, reason='pymatbridge and/or Matlab not available') uses_pymatbridge = pytest.mark.skipif( use_precomputed, reason='PYWT_XSLOW set: skipping tests against precomputed Matlab results') uses_precomputed = pytest.mark.skipif( not use_precomputed, reason='PYWT_XSLOW not set: test against precomputed matlab tests')