oedisi.tools package

Submodules

oedisi.tools.broker_utils module

Utilities for HELICS broker time data management.

class oedisi.tools.broker_utils.TimeData(*, name: str, granted_time: float, send_time: float)

Bases: BaseModel

Time data for a federate.

granted_time: float
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name: str
send_time: float
oedisi.tools.broker_utils.get_time_data(broker)

Query broker for global time data and parse into TimeData objects.

oedisi.tools.broker_utils.parse_time_data(response)

Parse broker response into list of TimeData objects.

oedisi.tools.broker_utils.pprint_time_data(time_data)

Pretty print time data for a federate.

oedisi.tools.cli_tools module

CLI tools for building and running OEDISI simulations.

oedisi.tools.cli_tools.create_docker_compose_file(wiring_diagram: WiringDiagram, target_directory: str, broker_port: int, component_types: dict)

Create docker-compose.yml configuration for multi-container simulation.

Writes to target_directory/docker-compose.yml. This only works for BasicComponent types, i.e. only types with “component_definition.json”.

Parameters:
  • wiring_diagram

  • target_directory (str)

  • broker_port (int)

  • component_types (dict from str to BasicComponent classes)

oedisi.tools.cli_tools.create_kubernetes_deployment(wiring_diagram: WiringDiagram, target_directory: Path | str, broker_port: int, simulation_id: str) None

Create Kubernetes deployment YAML files for wiring diagram components.

Saves deployment to yamls under target_directory/kubernetes.

Parameters:
  • wiring_diagram (WiringDiagram)

  • target_directory (Path or str)

  • broker_port (int) – HTTP port to be exposed in Kubernetes deployment.

  • simulation_id (str) – UUID to create a unique Kubernetes service and pod deployment

oedisi.tools.cli_tools.drop_null_values(model: dict) dict

Recursively remove null values and convert snake_case keys to camelCase.

This is necessary for generating Kubernetes yaml files.

oedisi.tools.cli_tools.edit_docker_file(file_path: str | Path, component: Component)

Generate Dockerfile for component with OEDISI and component dependencies.

The docker container installs oedisi, the requirements.txt, and run server.py Although this is fine in a hurry, it should generally be avoided for all components.

Parameters:
  • file_path (str | Path) – File path of Dockerfile to write for.

  • component (type information)

oedisi.tools.cli_tools.edit_docker_files(wiring_diagram: WiringDiagram, component_types: dict[str, Any])

Generate Dockerfiles for all unique component types in wiring diagram.

This only works for BasicComponent types, i.e. only types with “component_definition.json”.

Parameter

wiring_diagram : WiringDiagram component_types : dict from component types to “BasicComponent” types.

oedisi.tools.cli_tools.remove_from_json(system_json, element)

Remove federate from configuration and resave with revised.json.

oedisi.tools.cli_tools.remove_from_runner_config(runner_config, element)

Remove federate from configuration.

oedisi.tools.cli_tools.validate_optional_inputs(wiring_diagram: WiringDiagram)

Validate required host and container_port for multi-container.

oedisi.tools.pausing_broker module

Pausing broker for interactive HELICS simulations.

class oedisi.tools.pausing_broker.PausingBroker(n)

Bases: object

Interactive HELICS broker with user-controlled time barriers.

run()

Run broker with interactive time barrier control.

oedisi.tools.testing_broker module

Testing utilities for HELICS broker and federate graph management.

class oedisi.tools.testing_broker.TestingBroker(n)

Bases: object

HELICS broker for testing federate graph connections.

run()

Run broker and extract data flow graph.

wait_until_connected()

Wait until all federates have initialized and connected.

oedisi.tools.testing_broker.get_inputs_outputs(graph_dict)

Extract input and output mappings from federate graph dictionary.

Module contents