simstadt
A Python library for running and testing SimStadt workflows programmatically.
SimStadt is a city simulation tool for energy and urban analysis developed at HFT Stuttgart. This library wraps its CLI to execute workflows against CityGML files and parse the results into pandas DataFrames.
Requirements
- Python 3.10+
- Java 17+
- SimStadt installed separately (or use
simstadt --install)
Installation
pip install simstadt
Usage
from simstadt import heatdemand_simulation, photovoltaic_simulation, greenwater_simulation, clean_old_workflows
results = heatdemand_simulation("path/to/city.gml")
print(results.dataframe)
print(results.kpis)
pv = photovoltaic_simulation("path/to/city.gml")
print(pv.dataframe)
gw = greenwater_simulation("path/to/city.gml", "Wuerzburg-hour.csv", irrigation_ratio=0.5)
print(gw.dataframe)
# Remove workflow folders older than 1 hour from a project directory
clean_old_workflows(Path("path/to/project.proj"))
For more control, use run_workflow_with_citygml directly:
from simstadt import run_workflow_with_citygml
results = run_workflow_with_citygml(
template="HeatDemandWithShadow", # name in templates/ or full Path
citygml_path="path/to/city.gml",
replaces={"<string>METEONORM_FILE</string>": "<string>Wuerzburg-hour.csv</string>"}, # optional
project_path=Path("path/to/project.proj"), # optional
)
print(results.kpis)
SimStadt is located automatically via the SIMSTADT_FOLDER environment variable, or by searching ~/Desktop for a SimStadt2_0.*/ directory.
Bundled workflow templates are used by default. Custom templates are resolved via SIMSTADT_TEMPLATE_PATH, or a templates/ directory in the current working directory.
If no project path is specified, workflows are run in a temporary repository under /tmp/simstadt_repo/.
CLI
# Print detected SimStadt installation path and version
simstadt
# See help
simstadt --help
usage: simstadt [-h] [--gui] [--csv-export] [--install] [-d DESCRIPTION] [--destination DESTINATION] [-p PROJECT_PATH] [-f] [-s PATH] [-v] [-V] [template] [citygml]
simstadt - Python library for SimStadt workflows.
positional arguments:
template Template name (from SIMSTADT_TEMPLATE_PATH), path to a .flow directory, or a bundled template name.
citygml Path to the CityGML input file.
options:
-h, --help show this help message and exit
--gui Launch the SimStadt GUI.
--csv-export Export CSV from workflowsteps, when available.
--install Download and install the latest SimStadt release to ~/Desktop.
-d DESCRIPTION, --description DESCRIPTION
Human-readable label for the result.
--destination DESTINATION
Workflow folder name (default: timestamped random id).
-p PROJECT_PATH, --project-path PROJECT_PATH
Directory where the workflow folder is created.
-f, --files Show output files after the run.
-s PATH, --save PATH Save result DataFrame to a file (.csv or .json).
-v, --verbose Enable debug logging.
-V, --version Print the simstadtpy and SimStadt versions, then exit.
# Print the simstadtpy and SimStadt versions
simstadt --version
# Download and install the latest SimStadt release to ~/Desktop
simstadt --install
# Launch the SimStadt GUI
simstadt --gui
# Run a workflow from the command line
simstadt HeatDemandWithShadow.flow path/to/city.gml -v
# Save results to CSV or JSON
simstadt PVWithShadow path/to/city.gml --save results.csv
# Save results to CSV or JSON
simstadt HeatDemand path/to/city.gml --save results.csv
# List output files
simstadt HeatDemand.flow path/to/city.gml --files
# Debug information
simstadt PV path/to/city.gml --verbose
# Run RegionChooser (separate entry point)
regionchooser
Docker
A ready-to-use image is published at simstadt/simstadt:cli. It bundles Java, INSEL, and this package (installed from PyPI) with a real SimStadt install.
# Health check: shows the detected SimStadt version
docker run --rm simstadt/simstadt:cli
# Run a workflow against a mounted CityGML file
mkdir -p data
cp path/to/city.gml data/city.gml
docker run --rm -v "$(pwd)/data:/data" simstadt/simstadt:cli simstadt HeatDemand /data/city.gml -p /data/output --files
Results are written to data/output.proj/ on the host:
HeatDemand for city.gml
Number of buildings : 137
Number of heated buildings : 91
Specific Heating demand : 95 kWh / (m² · a)
Heated area : 83034 m²
Footprint area : 19767 m²
Yearly Heating demand : 6598939 kWh / a
Total Yearly Heating + DHW demand : 7916193 kWh / a
Mean Uvalue : 1.3 W / (m² · K)
Year of construction : 1946
Storey number : 5
Output files:
/data/output.proj/20260921_0932_96on_HeatDemand.flow/02_WeatherProcessor.step/hourly_GHI_DHI_Ta_pvgis_SARAH3_2005_2023_N49_8__E9_9.prn
/data/output.proj/20260921_0932_96on_HeatDemand.flow/05_MonthlyEnergyBalance.step/city_DIN18599_HEATING.csv
/data/output.proj/20260921_0932_96on_HeatDemand.flow/05_MonthlyEnergyBalance.step/city_DIN18599_HEATING.log
Bring your own templates by keeping them alongside your data and pointing SIMSTADT_TEMPLATE_PATH
at them — a single mount. A complete, runnable example (with sample CityGML data and a template)
is in examples/:
cd examples
docker compose run --rm simstadt simstadt MyTemplate /data/city.gml --project-path /data/output --save /data/my_simulation.csv --verbose
Development
uv sync
uv run pytest # all tests
uv run pytest -m "not integration" # skip tests requiring SimStadt
Links
- Code is hosted at https://transfer.hft-stuttgart.de/gitlab/simstadt/simstadtpy
- Python package is hosted at https://pypi.org/project/simstadt/
AI agent
SimStadtResults and tests have been written manually during research projects.
Claude Code has been used to refactor and package the scripts into this library.
Release files for simstadt 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| simstadt-0.3.1.tar.gz | 27.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| simstadt-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 107.0 kB
Release files / simstadt-0.3.1.tar.gz
| Download URL | simstadt-0.3.1.tar.gz |
|---|---|
| Size | 27.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f502dfb497121356f84d6d32a0a36fa93e6ef8618511398e39656d71d1cb331e
|
|
BLAKE2b-256 checksum How to use checksums |
7d81b5392ab00fe11d8fac4949269f73375e00c75f958630099f1d02073192b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.2","id":"zara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / simstadt-0.3.1-py3-none-any.whl
| Download URL | simstadt-0.3.1-py3-none-any.whl |
|---|---|
| Size | 79.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8fee8bfa6bc47642117a8b96d99a642727f455e6b28e739c06a78c235e772644
|
|
BLAKE2b-256 checksum How to use checksums |
392c304ca967c8e08797f54ba994fc103cc550c7345d8fbd1545f386385bb123
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Linux Mint","version":"22.2","id":"zara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|