Skip to main content

A DEVS(Discrete Event System Specification) Modeling & Simulation environment with journaling functionality

Project description

pyjevsim

Introduction

pyjevsim is a DEVS(discrete event system specification) environment that provides journaling functionality. It provides the ability to snapshot and restore models or simulation engines. It's compatible with Python versions 3.10+.

For more information, see the documentation. : pyjevsim

Installing

You can install pyjevsim via

git clone https://github.com/eventsim/pyjevsim

Dependencies

The only dependency required by pyjevsim is dill ~= 0.3.6 for model serialization and restoration.
dill is an essential library for serializing models and simulation states and can be installed via.

pip install dill

Optional Dependencies

pytest is an optional dependency required for running test cases and example executions. You can install pyjevsim via

pip install pytest

Additionally, you can install all necessary libraries, including optional dependencies, by running the following command:

pip install -r requirements.txt

Working with pyjevsim

Once you have installed the library, you can begin working with it.

Quick Start

The docs describe how to configure a simulation via pyjevsim's BehaviorModel and SysExecutor. Check out the documentation to configure your simulation.

Example

There is a banksim example that uses pyjevsim's DEVS functionality and journaling features. documentation

Execution Modes

SysExecutor supports three execution modes via ExecutionType:

Mode Description
V_TIME Virtual time — simulation runs as fast as possible
R_TIME Real time — simulation paces itself to wall-clock time
HLA_TIME HLA/RTI-controlled time — time advancement is driven externally
from pyjevsim.system_executor import SysExecutor
from pyjevsim.definition import ExecutionType

se = SysExecutor(1, ex_mode=ExecutionType.V_TIME)

Multi-threading Support

SysExecutor provides thread-safe APIs for multi-threaded simulation environments where external threads inject events while the simulation runs.

Pause / Resume

Pause the simulation to allow external threads to accumulate events, then resume.

se.pause_sim()    # Pauses the simulation loop
# External threads can safely call insert_external_event() while paused
se.resume_sim()   # Resumes the simulation loop

External Event Injection

Insert events from external threads into the simulation. Thread-safe via internal synchronization.

se.insert_external_event("port_name", message, scheduled_time=0)

Output Event Callback

Register a callback to be notified when output events are generated, avoiding polling.

se.set_output_event_callback(lambda: print("output ready"))
events = se.handle_external_output_event()

HLA/RTI Integration (HLA_TIME Mode)

For HLA/RTI-controlled simulations, use HLA_TIME mode with step() and get_next_event_time().

se = SysExecutor(1, ex_mode=ExecutionType.HLA_TIME)
se.register_entity(model)
se.init_sim()

# RTI-driven loop
while not se.is_terminated():
    next_time = se.get_next_event_time()
    # ... request time advance from RTI, wait for grant ...
    granted_time = ...  # time granted by RTI
    output_events = se.step(granted_time)
    # ... publish output_events to RTI ...

step(granted_time)

Executes one simulation step up to the granted time. Returns output events generated during the step.

get_next_event_time()

Returns the earliest scheduled event time (internal or external). Used to determine the Time Advance Request value for the RTI.

Graceful Termination

se.terminate_simulation()  # Sets SIMULATION_TERMINATED state
se.is_terminated()         # Returns True if terminated

Signal handlers (SIGTERM, SIGINT) automatically invoke terminate_simulation() on all registered SysExecutor instances.

License

Author: Changbeom Choi (@cbchoi)
Copyright (c) 2014-2020 Handong Global University
Copyright (c) 2021-2024 Hanbat National University
License: MIT. The full license text is available at:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyjevsim-1.0.0.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyjevsim-1.0.0-py3-none-any.whl (31.7 kB view details)

Uploaded Python 3

File details

Details for the file pyjevsim-1.0.0.tar.gz.

File metadata

  • Download URL: pyjevsim-1.0.0.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for pyjevsim-1.0.0.tar.gz
Algorithm Hash digest
SHA256 d2df74252e5d54b67eaa0102fa66c50002b6bf973867a3a6365ce67c63299a8d
MD5 dc32c2f0f8786a325f8a427e26ad85b5
BLAKE2b-256 fa0c55add17243b29b60e2a705929695baf9e3e94b5c38c6888dd937112be52a

See more details on using hashes here.

File details

Details for the file pyjevsim-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pyjevsim-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 31.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.8.10

File hashes

Hashes for pyjevsim-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f9c94853bd33b221b205e085bbfe51d13a4bee6bfde83dd74656887a93ad559
MD5 43ee84815ee1ebbcdbcd0111e674dbb6
BLAKE2b-256 5d0f44480beb42b43efaec0965af28b59eb40eed52af201e4a0c9d31c2c38895

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page