pymor.tools package¶
pymor.core.tools collects modules used throughout pyMOR that generally do not depend on any of pyMOR’s abstraction objects.
Submodules¶
context module¶
counter module¶
deprecated module¶
-
class
pymor.tools.deprecated.Deprecated(alt='no alternative given')[source]¶ Bases:
objectThis is a decorator which can be used to mark functions as deprecated. It will result in a warning being emitted when the function is used.
Methods
floatcmp module¶
-
pymor.tools.floatcmp.bounded(lower, upper, x, rtol=None, atol=None)[source]¶ Check if x is strictly in bounds (lower, upper) or float_compares equal to lower or upper
Parameters
- lower
Lower bound
- upper
Upper bound
- x
value to check
- rtol
relative tolerance for float_cmp
- atol
absolute tolerance for float_cmp
-
pymor.tools.floatcmp.compare_with_tolerance(x, y, comparison_op, rtol=1e-14, atol=1e-14)[source]¶ ‘One-sided’ Comparison x and y component-wise with given comparison op.
For scalars we define almost equality as
compare_with_tolerance(x,y) <=> op(x - y, atol + y*rtol)
Parameters
- x, y
NumPy arraysto be compared. Have to be broadcastable to the same shape.- comparison_op
binary operator object, see
Operatormodule.- rtol
The relative tolerance.
- atol
The absolute tolerance.
Defaults
rtol, atol (see
pymor.core.defaults)
-
pymor.tools.floatcmp.float_cmp(x, y, rtol=1e-14, atol=1e-14)[source]¶ Compare x and y component-wise for almost equality.
For scalars we define almost equality as
float_cmp(x,y) <=> |x - y| <= atol + |y|*rtol
Note
Numpy’s
allclosemethod uses the same definition but treats arrays containing infinities as close if the infinities are at the same places and all other entries are close. In our definition, arrays containing infinities can never be close which seems more appropriate in most cases.Parameters
- x, y
NumPy arraysto be compared. Have to be broadcastable to the same shape.- rtol
The relative tolerance.
- atol
The absolute tolerance.
Defaults
rtol, atol (see
pymor.core.defaults)
-
pymor.tools.floatcmp.float_cmp_all(x, y, rtol=None, atol=None)[source]¶ Compare x and y for almost equality.
Returns
Trueif all components ofxare almost equal to the corresponding components ofy.See
float_cmp.
formatrepr module¶
frozendict module¶
-
class
pymor.tools.frozendict.FrozenDict(*args, **kwargs)[source]¶ Bases:
dictAn immutable dictionary.
Methods
dictcopy,fromkeys,get,items,keys,values,__contains__,__getitem__,__sizeof__Attributes
clear,pop,popitem,setdefault,update
-
class
pymor.tools.frozendict.SortedFrozenDict(*args, **kwargs)[source]¶ Bases:
pymor.tools.frozendict.FrozenDictA sorted immutable dictionary.
Methods
dictcopy,fromkeys,get,items,keys,values,__contains__,__getitem__,__sizeof__Attributes
clear,pop,popitem,setdefault,update
io module¶
-
pymor.tools.io.SafeTemporaryFileName(name=None, parent_dir=None)[source]¶ Cross Platform safe equivalent of re-opening a NamedTemporaryFile Creates an automatically cleaned up temporary directory with a single file therein.
name: filename component, defaults to ‘temp_file’ dir: the parent dir of the new tmp dir. defaults to tempfile.gettempdir()
mpi module¶
This module provides helper methods to use pyMOR in parallel with MPI.
Executing this module will run event_loop on all MPI ranks
except for rank 0 where either a given script is executed:
mpirun -n 16 python -m pymor.tools.mpi /path/to/script
or an interactive session is started:
mpirun -n 16 python -m pymor.tools.mpi
When IPython is available, an IPython kernel is started which the user can connect to by calling:
ipython console --existing file_name_printed_by_ipython.json
(Starting the IPython console directly will not work properly with most MPI implementations.) When IPython is not available, the builtin Python REPL is started.
When event_loop is running on the MPI ranks, call
can be used on rank 0 to execute the same Python function (given
as first argument) simultaneously on all MPI ranks (including
rank 0). Calling quit will exit event_loop on
all MPI ranks.
Additionally, this module provides several helper methods which are
intended to be used in conjunction with call: mpi_info
will print a summary of all active MPI ranks, run_code
will execute the given code string on all MPI ranks,
import_module imports the module with the given path.
A simple object management is implemented with the
manage_object, get_object and remove_object
methods. It is the user’s responsibility to ensure that calls to
manage_object are executed in the same order on all MPI ranks
to ensure that the returned ObjectId refers to the same
distributed object on all ranks. The functions function_call,
function_call_manage, method_call,
method_call_manage map instances ObjectId
transparently to distributed objects. function_call_manage and
method_call_manage will call manage_object on the
return value and return the corresponding ObjectId. The functions
method_call and method_call_manage are given an
ObjectId and a string as first and second argument and execute
the method named by the second argument on the object referred to by the
first argument.
-
class
pymor.tools.mpi.ObjectId[source]¶ Bases:
intA handle to an MPI distributed object.
Methods
intbit_length,conjugate,from_bytes,to_bytes,__ceil__,__floor__,__new__,__round__,__sizeof__,__trunc__Attributes
intdenominator,imag,numerator,real
-
pymor.tools.mpi.call(method, *args, **kwargs)[source]¶ Execute method on all MPI ranks.
Assuming
event_loopis running on all MPI ranks (except rank 0), this will executemethodon all ranks (including rank 0) with positional argumentsargsand keyword argumentskwargs.Parameters
- method
The function to execute on all ranks (must be picklable).
- args
The positional arguments for
method.- kwargs
The keyword arguments for
method.
Returns
The return value of
methodon rank 0.
-
pymor.tools.mpi.event_loop()[source]¶ Launches an MPI-based event loop.
Events can be sent by either calling
callon rank 0 to execute an arbitrary method on all ranks or by callingquitto exit the loop.
-
pymor.tools.mpi.event_loop_settings(auto_launch=True)[source]¶ Settings for pyMOR’s MPI event loop.
Parameters
- auto_launch
If
True, automatically executeevent_loopon all MPI ranks (except 0) when pyMOR is imported.
Defaults
auto_launch (see
pymor.core.defaults)
-
pymor.tools.mpi.function_call(f, *args, **kwargs)[source]¶ Execute the function
fwith given arguments.Intended to be used in conjunction with
call. Arguments of typeObjectIdare transparently mapped to the object they refer to.
-
pymor.tools.mpi.function_call_manage(f, *args, **kwargs)[source]¶ Execute the function
fand manage the return value.Intended to be used in conjunction with
call. The return value offis managed by callingmanage_objectand the correspondingObjectIdis returned. Arguments of typeObjectIdare transparently mapped to the object they refer to.
-
pymor.tools.mpi.import_module(path)[source]¶ Import the module named by
path.Intended to be used in conjunction with
call.
-
pymor.tools.mpi.method_call(obj_id, name_, *args, **kwargs)[source]¶ Execute a method with given arguments.
Intended to be used in conjunction with
call. Arguments of typeObjectIdare transparently mapped to the object they refer to.Parameters
- obj_id
The
ObjectIdof the object on which to call the method.name_Name of the method to call.
- args
Positional arguments for the method.
- kwargs
Keyword arguments for the method.
-
pymor.tools.mpi.method_call_manage(obj_id, name_, *args, **kwargs)[source]¶ Execute a method with given arguments and manage the return value.
Intended to be used in conjunction with
call. The return value of the called method is managed by callingmanage_objectand the correspondingObjectIdis returned. Arguments of typeObjectIdare transparently mapped to the object they refer to.Parameters
- obj_id
The
ObjectIdof the object on which to call the method.name_Name of the method to call.
- args
Positional arguments for the method.
- kwargs
Keyword arguments for the method.
-
pymor.tools.mpi.mpi_info()[source]¶ Print some information on the MPI setup.
Intended to be used in conjunction with
call.
-
pymor.tools.mpi.quit()[source]¶ Exit the event loop on all MPI ranks.
This will cause
event_loopto terminate on all MPI ranks.
-
pymor.tools.mpi.remove_object(obj_id)[source]¶ Remove the object referred to by
obj_idfrom the registry.
-
pymor.tools.mpi.run_code(code)[source]¶ Execute the code string
code.Intended to be used in conjunction with
call.
pprint module¶
-
pymor.tools.pprint.format_array(array, compact_print=False)[source]¶ Creates a formatted string representation of a
NumPy array.Parameters
- array
the
NumPy arrayto be formatted- compact_print
If
True, return a shorter version of string representation.
Returns
The string representation.
Defaults
compact_print (see
pymor.core.defaults)
random module¶
-
pymor.tools.random.default_random_state(seed=42)[source]¶ Returns the default
NumPyRandomState.Parameters
- seed
Seed to use for initializing the random state.
Returns
The default
RandomStateobject.Defaults
seed (see
pymor.core.defaults)
-
pymor.tools.random.get_random_state(random_state=None, seed=None)[source]¶ Returns a
NumPyRandomState.Parameters
- random_state
If specified, this state is returned.
- seed
If specified, the seed to initialize a new random state.
Returns
Either the provided, a newly created or the default
RandomStateobject.
table module¶
timing module¶
-
class
pymor.tools.timing.Timer(section, log=<Logger pymor.tools.timing (INFO)>)[source]¶ Bases:
objectYou can use me as a context manager, plain instance or decorator to time execution of a code scope:
with Timer() as timer: do_some_stuff() do more stuff() #outputs time in (s) ### OR ### @timing.Timer('name', logging.debug) def function(*args): do_stuff function(1) #outputs time in (s) to logging.debug ### OR ### timer = timing.Timer() timer.start() do_stuff() timer.stop() print(timer.dt)
Methods
start,stop