Run, sweep, and analyze JuPedSim scenarios from the web-app JSON schema.
Project description
jupedsim-scenarios
Python toolkit for running, sweeping, and analyzing JuPedSim scenarios authored in the Web-Based JuPedSim editor.
Status
Alpha (0.3.3). Single-run (run_scenario), Monte Carlo sweeps
(run_sweep — now multiprocess), and a jps-scenarios CLI are shipped.
Restartable / resumable sweeps land in 0.4.0.
Install
pip install jupedsim-scenarios
For development from a clone:
pip install -e ".[dev]"
Single-run usage
from jupedsim_scenarios import Scenario, run_scenario
scenario = Scenario(
raw=data_dict, # the JSON exported by the web app
walkable_area_wkt=data_dict["walkable_area_wkt"],
model_type="CollisionFreeSpeedModel",
seed=42,
sim_params=data_dict["config"]["simulation_settings"]["simulationParams"],
source_path="my_scenario.json",
)
result = run_scenario(scenario, seed=42)
print(result.metrics["evacuation_time"])
df = result.trajectory_dataframe()
result.cleanup()
A higher-level load_scenario(path) is available for zipped exports
(JSON + WKT file in the same archive or directory).
Monte Carlo sweep
from jupedsim_scenarios import load_scenario, run_sweep
base = load_scenario("faster_is_slower.zip")
sweep = run_sweep(
base,
axes={
"v0": [0.8, 1.2, 1.6, 1.8],
"model": ["CollisionFreeSpeedModel", "AnticipationVelocityModel"],
},
apply={
"v0": lambda s, v: s.set_agent_params(0, desired_speed=v),
"model": lambda s, v: s.set_model_type(v),
},
seeds=range(40, 50),
output_dir="runs/",
)
df = sweep.to_dataframe() # one row per (v0, model, seed) trial
print(df.groupby(["v0", "model"])["evacuation_time"].agg(["mean", "std"]))
sweep.cleanup() # delete the per-trial sqlite files
The library walks the cartesian product of the named axes, calls each
axis's apply function on an isolated .copy() of the base scenario,
runs the simulation, and tabulates the results. Anything the
Scenario.set_* mutators can change is fair game for sweeping.
Pass workers=N (or workers=0 for one worker per CPU) to run
trials in parallel:
sweep = run_sweep(base, axes=..., apply=..., seeds=range(40, 50), workers=4)
Mutations are applied in the calling process — only the resulting
mutated Scenario crosses the process boundary, so user apply
lambdas don't need to be picklable.
Factory-style sweeps
If the scenario can't be expressed as one base mutated by axis values
— typically because the geometry itself depends on the trial parameters
— use run_sweep_from_factory instead. Each trial parameter dict is
handed to your factory; the factory builds a fresh Scenario and
optionally returns a payload that rides along on Trial.extras:
from jupedsim_scenarios import run_sweep_from_factory
def build_loop(params):
scenario, geometry = build_loop_scenario(
num_agents=params["num_agents"],
spacing=TRACK_LENGTH / params["num_agents"],
)
return scenario, geometry # extras travel with the trial
sweep = run_sweep_from_factory(
build_loop,
trials=[{"num_agents": n} for n in (50, 100, 200, 400)],
seeds=[42],
workers=4,
)
df = sweep.to_dataframe() # one row per trial; "num_agents" is a column
for t in sweep.trials:
geometry = t.extras # whatever the factory returned alongside
Command line
jps-scenarios run scenario.json --seed 42 --out trajectory.sqlite
Runs a single scenario and prints a one-line JSON summary
(evacuation_time, agent counts, sqlite_file) to stdout. Useful in CI
or scripted pipelines; notebook workflows should stay on the Python API.
Roadmap
| Release | Scope |
|---|---|
| 0.1.0 | Verbatim extraction of Scenario + run_scenario from web app. |
| 0.2.0 | run_sweep(scenario, axes={...}, seeds=...). |
| 0.3.0 | Multiprocess worker pool + jps-scenarios CLI. |
| 0.3.1 | Public aliases for helpers shared with Web-Based-Jupedsim. |
| 0.3.2 | First PyPI release. |
| 0.3.3 | Fix: checkpoints honored without journeys (#8). |
| 0.3.4 | run_sweep_from_factory for factory-style sweeps (this release, #11). |
| 0.4.0 | Restartable / resumable sweeps, persisted results. |
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
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 jupedsim_scenarios-0.3.4.tar.gz.
File metadata
- Download URL: jupedsim_scenarios-0.3.4.tar.gz
- Upload date:
- Size: 51.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28573a6e97eaf5294060ea91c030e37c1ef772987fdf07e12623483fe7d3ab38
|
|
| MD5 |
ea6fa9353b01f8f70afb24244689f906
|
|
| BLAKE2b-256 |
8ebf6ccb8b903db856b81d91f3b610457506241cf68a863907fd80bd62d19ea1
|
Provenance
The following attestation bundles were made for jupedsim_scenarios-0.3.4.tar.gz:
Publisher:
workflow.yml on PedestrianDynamics/jupedsim-scenarios
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jupedsim_scenarios-0.3.4.tar.gz -
Subject digest:
28573a6e97eaf5294060ea91c030e37c1ef772987fdf07e12623483fe7d3ab38 - Sigstore transparency entry: 1595679945
- Sigstore integration time:
-
Permalink:
PedestrianDynamics/jupedsim-scenarios@e32b067bf1423790ee42b9ecd6be7e9766c059f1 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/PedestrianDynamics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e32b067bf1423790ee42b9ecd6be7e9766c059f1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jupedsim_scenarios-0.3.4-py3-none-any.whl.
File metadata
- Download URL: jupedsim_scenarios-0.3.4-py3-none-any.whl
- Upload date:
- Size: 47.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be3429df0e5de4cfb774ef7a93cb28ac017ec47a4772522259fd1e896bb00394
|
|
| MD5 |
d23f50d1c0e7194fa86ad197cb3e9351
|
|
| BLAKE2b-256 |
b8cc41e868336886fe66222c16812f99b11c7f043c93df9d62ae269d07cf2f14
|
Provenance
The following attestation bundles were made for jupedsim_scenarios-0.3.4-py3-none-any.whl:
Publisher:
workflow.yml on PedestrianDynamics/jupedsim-scenarios
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jupedsim_scenarios-0.3.4-py3-none-any.whl -
Subject digest:
be3429df0e5de4cfb774ef7a93cb28ac017ec47a4772522259fd1e896bb00394 - Sigstore transparency entry: 1595680057
- Sigstore integration time:
-
Permalink:
PedestrianDynamics/jupedsim-scenarios@e32b067bf1423790ee42b9ecd6be7e9766c059f1 -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/PedestrianDynamics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@e32b067bf1423790ee42b9ecd6be7e9766c059f1 -
Trigger Event:
push
-
Statement type: