You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.6 KiB
68 lines
1.6 KiB
5 months ago
|
"""Configuration utilities for polynomial manipulation algorithms. """
|
||
|
|
||
|
|
||
|
from contextlib import contextmanager
|
||
|
|
||
|
_default_config = {
|
||
|
'USE_COLLINS_RESULTANT': False,
|
||
|
'USE_SIMPLIFY_GCD': True,
|
||
|
'USE_HEU_GCD': True,
|
||
|
|
||
|
'USE_IRREDUCIBLE_IN_FACTOR': False,
|
||
|
'USE_CYCLOTOMIC_FACTOR': True,
|
||
|
|
||
|
'EEZ_RESTART_IF_NEEDED': True,
|
||
|
'EEZ_NUMBER_OF_CONFIGS': 3,
|
||
|
'EEZ_NUMBER_OF_TRIES': 5,
|
||
|
'EEZ_MODULUS_STEP': 2,
|
||
|
|
||
|
'GF_IRRED_METHOD': 'rabin',
|
||
|
'GF_FACTOR_METHOD': 'zassenhaus',
|
||
|
|
||
|
'GROEBNER': 'buchberger',
|
||
|
}
|
||
|
|
||
|
_current_config = {}
|
||
|
|
||
|
@contextmanager
|
||
|
def using(**kwargs):
|
||
|
for k, v in kwargs.items():
|
||
|
setup(k, v)
|
||
|
|
||
|
yield
|
||
|
|
||
|
for k in kwargs.keys():
|
||
|
setup(k)
|
||
|
|
||
|
def setup(key, value=None):
|
||
|
"""Assign a value to (or reset) a configuration item. """
|
||
|
key = key.upper()
|
||
|
|
||
|
if value is not None:
|
||
|
_current_config[key] = value
|
||
|
else:
|
||
|
_current_config[key] = _default_config[key]
|
||
|
|
||
|
|
||
|
def query(key):
|
||
|
"""Ask for a value of the given configuration item. """
|
||
|
return _current_config.get(key.upper(), None)
|
||
|
|
||
|
|
||
|
def configure():
|
||
|
"""Initialized configuration of polys module. """
|
||
|
from os import getenv
|
||
|
|
||
|
for key, default in _default_config.items():
|
||
|
value = getenv('SYMPY_' + key)
|
||
|
|
||
|
if value is not None:
|
||
|
try:
|
||
|
_current_config[key] = eval(value)
|
||
|
except NameError:
|
||
|
_current_config[key] = value
|
||
|
else:
|
||
|
_current_config[key] = default
|
||
|
|
||
|
configure()
|