MobEV
MobEV is a mobility-based, geolocalized EV charging-demand model. It generates EV charging-demand profiles for distribution-network studies from weekly car-trip data. The model samples an EV fleet and charging access, simulates battery state of charge and charging sessions, and aggregates the resulting demand at the configured timestep.
Full reference documentation: https://pages.persee.minesparis.psl.eu/planeterr/mobev/.
Requirements and installation
MobEV requires Python 3.13 or newer.
Install the published package with pip:
python -m pip install mobev
Or add it to an existing uv-managed project:
uv add mobev
For development from a repository checkout, use the included lock file:
uv sync
To build the documentation locally:
uv sync --group docs
make -C docs html
Inputs
Each simulation needs a trip directory containing:
weekday_trips.gpkg
weekend_trips.gpkg
The source data must provide person and activity identifiers, departure and arrival times, activity purposes, car mode, and trip geometries. They are generated using a modified version of the EQASIM tool : https://github.com/RatonMagique/eqasim-france/tree/feat/iris-commune-weekday-pipeline-improvments . See input documentation for the complete input schema.
When tariff-aware charging is enabled, the tariff CSV must contain a
contiguous integer index and one numeric price or price_eur_kwh column.
Configuration
The authoritative configuration template is available in the
configuration documentation.
Repository users can copy config/config.yaml
when maintaining separate experiments, then pass the copy to the pipeline.
The repository template uses project-relative data paths. When using the
installed package, provide an absolute path for tariff.file (or disable the
tariff) and pass the trip-directory path explicitly.
The main sections are:
simulation: timestep, start datetime, random seed, distance factor, CRS, and seasonal consumption.fleet: EV penetration and fixed or segmented vehicle attributes.battery: usable SOC limits, charging efficiency, and initial SOC.charging: minimum parking duration and SOC thresholds.tariff: optional time-of-use charging and tariff CSV settings.locations: charger availability and charger-power distributions by location type.
Edit the YAML values directly, for example:
simulation:
timestep_minutes: 15
random_seed: 42
fleet:
ev_penetration: 0.10
tariff:
enabled: false
file: path/to/tariff.csv
Set tariff.enabled to true only when tariff.file points to a valid CSV.
The random seed makes fleet sampling, charger assignment, and initial SOC
reproducible for the same inputs and dependency versions.
Run the complete pipeline
The main entry point is SimulationPipeline. It loads the configuration and
runs all three stages in order: trip preparation, charging resolution, and
load-profile simulation.
From Python:
from mobev.core.pipeline import SimulationPipeline
pipeline = SimulationPipeline.from_yaml("config/config.yaml")
result = pipeline.run("data/input/trips/YOUR_FEEDER")
print(result.load_timeseries_df)
print(result.tariff_curve_df) # empty when tariffs are disabled
The checked-in runner can also be used after updating config_file and
trip_folder in scripts/run_pipeline.py:
python scripts/run_pipeline.py
EVSimulationResult exposes all intermediate and final tables, including
trips, locations, vehicles, parking events, charging stations, charging
opportunities, SOC traces, charging sessions, load timeseries, and the tariff
curve.
Run a decomposed pipeline
Run the stages separately when you need to inspect or persist intermediate results, customize a stage, or integrate MobEV into a larger workflow:
from mobev.core.charging_resolver import ChargingResolver
from mobev.core.config import Config
from mobev.core.profile_simulator import ProfileSimulator
from mobev.core.trip_preparer import TripPreparer
config = Config.from_yaml("config/config.yaml")
trip_results = TripPreparer(config).run("data/input/trips/YOUR_FEEDER")
charging_results = ChargingResolver(config).run(trip_results)
profile_results = ProfileSimulator(config).run(trip_results, charging_results)
print(profile_results.load_timeseries_df)
The stage contracts are:
TripPreparer -> TripResults
ChargingResolver -> ChargingResults
ProfileSimulator -> ProfileResults
Testing
Run the test suite with:
.venv/bin/pytest -q
Further documentation
The Sphinx documentation covers inputs, configuration, workflow, tariffs, results, visualization, and the public API.
Metadata
Release files for mobev 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| mobev-0.1.0.tar.gz | 57.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mobev-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 118.1 kB
Release files / mobev-0.1.0.tar.gz
| Download URL | mobev-0.1.0.tar.gz |
|---|---|
| Size | 57.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
43469cd4c9338d1aeea68d2e61da2a02ae70c4a6171af5d8717a333f227c109d
|
|
BLAKE2b-256 checksum How to use checksums |
4841558e7e6f2580b53b78fd4aae61b978872649db8a7333454445f2397648bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mobev-0.1.0-py3-none-any.whl
| Download URL | mobev-0.1.0-py3-none-any.whl |
|---|---|
| Size | 61.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1efa37731319ec96edb2d47bbb4345c505b3536a2864ebae20623dfbacda5ed0
|
|
BLAKE2b-256 checksum How to use checksums |
21cac4d5040c1374a53c527976173977ea90534ebc133f2b1994567e81b7515a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for mobev 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.