Skip to main content

MobEV

Python PyPI version Package manager Tests Documentation

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)

Source distribution for mobev 0.1.0
File Size Uploaded Provenance
mobev-0.1.0.tar.gz 57.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mobev 0.1.0
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page