|
2 | 2 | # Copyright 2019 TD Ameritrade. Released under the terms of the 3-Clause BSD license. |
3 | 3 | # STUMPY is a trademark of TD Ameritrade IP Company, Inc. All rights reserved. |
4 | 4 |
|
| 5 | +import warnings |
| 6 | + |
5 | 7 | import numpy as np |
6 | 8 |
|
7 | | -STUMPY_THREADS_PER_BLOCK = 512 |
8 | | -STUMPY_MEAN_STD_NUM_CHUNKS = 1 |
9 | | -STUMPY_MEAN_STD_MAX_ITER = 10 |
10 | | -STUMPY_DENOM_THRESHOLD = 1e-14 |
11 | | -STUMPY_STDDEV_THRESHOLD = 1e-7 |
12 | | -STUMPY_P_NORM_THRESHOLD = 1e-14 |
13 | | -STUMPY_TEST_PRECISION = 5 |
14 | | -STUMPY_MAX_P_NORM_DISTANCE = np.finfo(np.float64).max |
15 | | -STUMPY_MAX_DISTANCE = np.sqrt(STUMPY_MAX_P_NORM_DISTANCE) |
16 | | -STUMPY_EXCL_ZONE_DENOM = 4 |
| 9 | +_STUMPY_DEFAULTS = { |
| 10 | + "STUMPY_THREADS_PER_BLOCK": 512, |
| 11 | + "STUMPY_MEAN_STD_NUM_CHUNKS": 1, |
| 12 | + "STUMPY_MEAN_STD_MAX_ITER": 10, |
| 13 | + "STUMPY_DENOM_THRESHOLD": 1e-14, |
| 14 | + "STUMPY_STDDEV_THRESHOLD": 1e-7, |
| 15 | + "STUMPY_P_NORM_THRESHOLD": 1e-14, |
| 16 | + "STUMPY_TEST_PRECISION": 5, |
| 17 | + "STUMPY_MAX_P_NORM_DISTANCE": np.finfo(np.float64).max, |
| 18 | + "STUMPY_MAX_DISTANCE": np.sqrt(np.finfo(np.float64).max), |
| 19 | + "STUMPY_EXCL_ZONE_DENOM": 4, |
| 20 | + "STUMPY_FASTMATH_TRUE": True, |
| 21 | + "STUMPY_FASTMATH_FLAGS": {"nsz", "arcp", "contract", "afn", "reassoc"}, |
| 22 | +} |
| 23 | + |
| 24 | +# In addition to these configuration variables, there exist config variables |
| 25 | +# that have the default value of the fastmath flag of the njit functions. The |
| 26 | +# name of this config variable has the following format: |
| 27 | +# STUMPY_FASTMATH_<module_name>.<function_name> |
| 28 | +# See __init__.py for more details |
| 29 | + |
| 30 | +STUMPY_THREADS_PER_BLOCK = _STUMPY_DEFAULTS["STUMPY_THREADS_PER_BLOCK"] |
| 31 | +STUMPY_MEAN_STD_NUM_CHUNKS = _STUMPY_DEFAULTS["STUMPY_MEAN_STD_NUM_CHUNKS"] |
| 32 | +STUMPY_MEAN_STD_MAX_ITER = _STUMPY_DEFAULTS["STUMPY_MEAN_STD_MAX_ITER"] |
| 33 | +STUMPY_DENOM_THRESHOLD = _STUMPY_DEFAULTS["STUMPY_DENOM_THRESHOLD"] |
| 34 | +STUMPY_STDDEV_THRESHOLD = _STUMPY_DEFAULTS["STUMPY_STDDEV_THRESHOLD"] |
| 35 | +STUMPY_P_NORM_THRESHOLD = _STUMPY_DEFAULTS["STUMPY_P_NORM_THRESHOLD"] |
| 36 | +STUMPY_TEST_PRECISION = _STUMPY_DEFAULTS["STUMPY_TEST_PRECISION"] |
| 37 | +STUMPY_MAX_P_NORM_DISTANCE = _STUMPY_DEFAULTS["STUMPY_MAX_P_NORM_DISTANCE"] |
| 38 | +STUMPY_MAX_DISTANCE = _STUMPY_DEFAULTS["STUMPY_MAX_DISTANCE"] |
| 39 | +STUMPY_EXCL_ZONE_DENOM = _STUMPY_DEFAULTS["STUMPY_EXCL_ZONE_DENOM"] |
| 40 | +STUMPY_FASTMATH_TRUE = _STUMPY_DEFAULTS["STUMPY_FASTMATH_TRUE"] |
| 41 | +STUMPY_FASTMATH_FLAGS = _STUMPY_DEFAULTS["STUMPY_FASTMATH_FLAGS"] |
| 42 | + |
| 43 | + |
| 44 | +def _reset(var=None): |
| 45 | + """ |
| 46 | + Reset the value of a configuration variable(s) to their default value(s) |
| 47 | +
|
| 48 | + Parameters |
| 49 | + ---------- |
| 50 | + var : str, default None |
| 51 | + The name of the configuration variable. If None, then all |
| 52 | + configuration variables are reset to their default values. |
| 53 | +
|
| 54 | + Returns |
| 55 | + ------- |
| 56 | + None |
| 57 | + """ |
| 58 | + config_vars = [ |
| 59 | + k for k, _ in globals().items() if k.isupper() and k.startswith("STUMPY") |
| 60 | + ] |
| 61 | + |
| 62 | + if var is None: |
| 63 | + for config_var in config_vars: |
| 64 | + globals()[config_var] = _STUMPY_DEFAULTS[config_var] |
| 65 | + elif var in config_vars: |
| 66 | + globals()[var] = _STUMPY_DEFAULTS[var] |
| 67 | + else: # pragma: no cover |
| 68 | + msg = ( |
| 69 | + f"Configuration reset was skipped for unrecognized '_STUMPY_DEFAULT[{var}]'" |
| 70 | + ) |
| 71 | + warnings.warn(msg) |
| 72 | + |
| 73 | + return |
0 commit comments