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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyjevsim-1.3.1.tar.gz.
File metadata
- Download URL: pyjevsim-1.3.1.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33f9e49e4cf0470f5aabc56ff9521e471f32992a93cb450b2b0ba00b535f30e4
|
|
| MD5 |
d26bf84c64bf84b823346d7fa3925d0b
|
|
| BLAKE2b-256 |
f958c338a91960869a42ae41f93d4dd2f51a2cecb290960b52665c2b7759daf4
|
File details
Details for the file pyjevsim-1.3.1-py3-none-any.whl.
File metadata
- Download URL: pyjevsim-1.3.1-py3-none-any.whl
- Upload date:
- Size: 32.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
002ca10bf94d2064a9c5aefc828ed0207cf704a6ef66fb13659c36593b269cec
|
|
| MD5 |
a6f7c00f90252f668ab2626658760d43
|
|
| BLAKE2b-256 |
3d478a0356ff83ce0352cf91ff20f71b480e716fefc64676b11915275b44e2da
|