palaestrai.util package¶
Submodules¶
palaestrai.util.dynaloader module¶
- exception palaestrai.util.dynaloader.ErrorDuringImport(filename, exc_info)[source]¶
 Bases:
ExceptionErrors that occurred while trying to import something
- palaestrai.util.dynaloader.load_with_params(module_path, params)[source]¶
 Load a class from module_path and pass params.
- palaestrai.util.dynaloader.locate(path, forceload=0)[source]¶
 Locate an object by name or dotted path, importing as necessary.
- palaestrai.util.dynaloader.safeimport(path, forceload=0, cache=None)[source]¶
 Import a module; handle errors; return None if the module isn’t found.
If the module is found but an exception occurs, it’s wrapped in an ErrorDuringImport exception and reraised. Unlike __import__, if a package path is specified, the module at the end of the path is returned, not the package at the beginning. If the optional ‘forceload’ argument is 1, we reload the module from disk (unless it’s a dynamic extension).
palaestrai.util.exception module¶
- exception palaestrai.util.exception.AgentConductorFailedError[source]¶
 Bases:
ExceptionRaised when an error during the execution of an agent conductor occurs.
- exception palaestrai.util.exception.BrainMuscleConnectionFailedError[source]¶
 Bases:
ExceptionThis error is raised if the
palaestrai.agent.Brainis unable to connect to the given port, because the port is already used by another process.
- exception palaestrai.util.exception.DeadChildrenRisingAsZombiesError[source]¶
 Bases:
ExceptionRaised when childrens died and starting to become zombies.
- exception palaestrai.util.exception.EnvConductorFailedError[source]¶
 Bases:
ExceptionRaised when an error during the execution of an environment conductor occurs.
- exception palaestrai.util.exception.EnvironmentHasNoUIDError[source]¶
 Bases:
ExceptionAt least one environment in a multi-environment setup has no UID.
- exception palaestrai.util.exception.ExperimentAlreadyRunningError[source]¶
 Bases:
ExceptionRaised during experiment start if experiment is already running.
- exception palaestrai.util.exception.ExperimentSetupFailedError[source]¶
 Bases:
ExceptionRaised when the experiment setup failed.
- exception palaestrai.util.exception.InitializationFailedError[source]¶
 Bases:
ExceptionRaised when initialization of an experiment failed.
- exception palaestrai.util.exception.InvalidRequestError(expected, got)[source]¶
 Bases:
ExceptionRaised when a wrong request was received.
- exception palaestrai.util.exception.InvalidResponseError(expected, got)[source]¶
 Bases:
ExceptionRaised when a wrong response was received.
- exception palaestrai.util.exception.OutOfActionSpaceError[source]¶
 Bases:
ExceptionThis error is raised if an
ActuatorInformationreceives a value that is not contained in the action space of that actuator.
- exception palaestrai.util.exception.OutOfObservationSpaceError[source]¶
 Bases:
ExceptionThis error is raised if a
SensorInformationis created with a value that is not contained in the observation space of that sensor.
- exception palaestrai.util.exception.PrematureTaskDeathError[source]¶
 Bases:
ExceptionRaised when a tasks died before its time.
- exception palaestrai.util.exception.ReplyIsNoneError[source]¶
 Bases:
ExceptionRaised when a reply is None.
- exception palaestrai.util.exception.RequestIsNoneError[source]¶
 Bases:
ExceptionRaised when a request is None.
- exception palaestrai.util.exception.SignalInterruptError[source]¶
 Bases:
ExceptionRaised when a signal was received.
- exception palaestrai.util.exception.SimControllerFailedError[source]¶
 Bases:
ExceptionRaised when a simulation controller could not be started.
- exception palaestrai.util.exception.SimulationSetupError(experiment_run_id, message)[source]¶
 Bases:
RuntimeError
- exception palaestrai.util.exception.TasksNotFinishedError[source]¶
 Bases:
ExceptionRaised when neither the signal_monitor_task nor the transceive_task returned.
- exception palaestrai.util.exception.UnknownModeError[source]¶
 Bases:
ExceptionThis error is raised if a
palaestrai.agent.Muscleis receiving an unknown Mode.
palaestrai.util.logserver module¶
A simple, built-in logging server
- class palaestrai.util.logserver.LogServer(listen_host: str, listen_port: int)[source]¶
 Bases:
objectA simple, internal logging server that reinjects remote log messages
Each submodule of palaestrAI that gets spawned lives in a separate process. As the ::~spawn_wrapper takes care of reinitializing the logger, it replaces all defined log handlers with a
logging.SocketHandler. This log server is ran by the ::Executor and receives all those messages. They are re-injected in the main process’ logging system and treated according to the original logging configuration.
palaestrai.util.seeding module¶
- palaestrai.util.seeding.create_seed(a: int | str | None = None, max_bytes: int = 8) int[source]¶
 Create a strong random seed. Otherwise, Python 2 would seed using the system time, which might be non-robust especially in the presence of concurrency.
- palaestrai.util.seeding.hash_seed(seed: int | None = None, max_bytes: int = 8) int[source]¶
 Any given evaluation is likely to have many PRNG’s active at once. (Most commonly, because the environment is running in multiple processes.) There’s literature indicating that having linear correlations between seeds of multiple PRNG’s can correlate the outputs:
http://blogs.unity3d.com/2015/01/07/a-primer-on-repeatable-random-numbers/ http://stackoverflow.com/questions/1554958/how-different-do-random-seeds-need-to-be http://dl.acm.org/citation.cfm?id=1276928
Thus, for sanity we hash the seeds before using them. (This scheme is likely not crypto-strength, but it should be good enough to get rid of simple correlations.)
- Parameters:
 seed (Optional[int]) – None seeds from an operating system specific randomness source.
max_bytes – Maximum number of bytes to use in the hashed seed.
palaestrai.util.spawn module¶
- async palaestrai.util.spawn.spawn_wrapper(name: str, runtime_config: dict, callee: Callable, args: list | None = None, kwargs: dict | None = None) Any[source]¶
 Wraps a target for fork/spawn and takes care of initialization.
Whenever a new subprocess is created (regardless of whether spawn, fork, or forkserver is used), some caretaking needs to be done:
- The runtime configuration needs to be transferred, and the
 ::RuntimeConfig properly reinitialized
Logging is reinitialized/rewired to send messages to the parent process
A proctitle is set
- Parameters:
 name (*) – Name of the process; will lead to a proctitle in the form of
palaestrai[%s]runtime_config (*) – Runtime configuration dict, normally obtained from ::RuntimeConfig.to_dict
callee (*) – The target method
args (*) – Positional arguments of ::callee.
kwargs (*) – Keyword arguments of ::callee
- Returns:
 Whatever the target function returns.
- Return type:
 Any