Source code for simba.config


import enum
from contextlib import contextmanager


[docs]class Param(enum.Enum): """Enum representing a parameter. Param.ON is truthy, everything else is falsey.""" ON = 0 # force on OFF = 1 # force off AUTO = 2 # set using init_params def __bool__(self): return self == Param.ON
params = { # run slow but important checks to verify results 'checks': Param.ON, # use wolframscript for more intensive symbolic manipulations 'wolframscript': Param.OFF }
[docs]def is_wolframscript_installed(): """Check whether wolframscript is installed and in PATH.""" from shutil import which return which("wolframscript") is not None
[docs]def init_params(): """Check what to set params to if they are set to "auto".""" if params['wolframscript'] == Param.AUTO and is_wolframscript_installed(): params['wolframscript'] = Param.ON if params['wolframscript'] == Param.ON and params['checks'] == Param.AUTO: params['checks'] = Param.ON
[docs]@contextmanager def temp_set_param(param, to): """ Use via ``with`` to temporarily set param to given value, changing it back afterwards. E.g. .. code-block:: python with temp_set_param('wolframscript', Param.ON): # do stuff using wolframscript # wolframscript now disabled """ previous = params[param] params[param] = to yield params[param] = previous
[docs]@contextmanager def temp_set_params(params_to_merge): """ Same as `temp_set_param` but params_to_merge is a dictionary of params to `Param` values to update """ from copy import deepcopy previous = deepcopy(params) params.update(params_to_merge) yield params.update(previous)