mobev 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. mobev-0.3.0/PKG-INFO +133 -0
  2. mobev-0.3.0/README.md +109 -0
  3. {mobev-0.2.0 → mobev-0.3.0}/mobev/__init__.py +20 -8
  4. {mobev-0.2.0 → mobev-0.3.0}/mobev/_version.py +1 -1
  5. mobev-0.3.0/mobev/charging/__init__.py +6 -0
  6. mobev-0.3.0/mobev/charging/charging_simulator.py +916 -0
  7. mobev-0.3.0/mobev/charging/decision_engine.py +731 -0
  8. mobev-0.3.0/mobev/charging/events.py +300 -0
  9. mobev-0.3.0/mobev/charging/profiles.py +141 -0
  10. mobev-0.3.0/mobev/charging/sessions.py +238 -0
  11. mobev-0.3.0/mobev/cli/__init__.py +1 -0
  12. mobev-0.3.0/mobev/cli/run_mobev.py +209 -0
  13. mobev-0.3.0/mobev/config/__init__.py +39 -0
  14. mobev-0.3.0/mobev/config/config.py +283 -0
  15. mobev-0.3.0/mobev/config/defaults.py +88 -0
  16. mobev-0.3.0/mobev/config/load.py +260 -0
  17. mobev-0.3.0/mobev/config/models.py +203 -0
  18. mobev-0.3.0/mobev/config/random.py +48 -0
  19. mobev-0.3.0/mobev/config/serialization.py +39 -0
  20. mobev-0.3.0/mobev/config/validation.py +277 -0
  21. {mobev-0.2.0/mobev/core → mobev-0.3.0/mobev}/pipeline.py +107 -31
  22. mobev-0.3.0/mobev/plot/__init__.py +5 -0
  23. mobev-0.3.0/mobev/plot/axes.py +29 -0
  24. mobev-0.3.0/mobev/plot/output.py +45 -0
  25. mobev-0.3.0/mobev/plot/plot.py +241 -0
  26. mobev-0.3.0/mobev/plot/profile_data.py +132 -0
  27. mobev-0.3.0/mobev/plot/profile_render.py +147 -0
  28. mobev-0.3.0/mobev/plot/tariff.py +47 -0
  29. mobev-0.3.0/mobev/plot/time.py +67 -0
  30. mobev-0.3.0/mobev/plot/trip_map_data.py +212 -0
  31. mobev-0.3.0/mobev/plot/trip_map_html.py +139 -0
  32. {mobev-0.2.0 → mobev-0.3.0}/mobev/profiles/profile_aggregator.py +54 -119
  33. mobev-0.3.0/mobev/results/__init__.py +20 -0
  34. mobev-0.3.0/mobev/results/aggregated_profiles.py +211 -0
  35. mobev-0.3.0/mobev/results/charging_simulation.py +261 -0
  36. mobev-0.3.0/mobev/results/common.py +225 -0
  37. mobev-0.3.0/mobev/results/indicators.py +262 -0
  38. mobev-0.3.0/mobev/results/metadata.py +330 -0
  39. mobev-0.3.0/mobev/results/output.py +219 -0
  40. mobev-0.3.0/mobev/results/prepared_trips.py +266 -0
  41. mobev-0.3.0/mobev/results/scenario_inputs.py +327 -0
  42. mobev-0.3.0/mobev/results/schemas.py +200 -0
  43. mobev-0.3.0/mobev/results/simulation_results.py +103 -0
  44. {mobev-0.2.0 → mobev-0.3.0}/mobev/scenario/__init__.py +2 -1
  45. mobev-0.3.0/mobev/scenario/fleet.py +122 -0
  46. mobev-0.3.0/mobev/scenario/parking.py +354 -0
  47. mobev-0.3.0/mobev/scenario/scenario_builder.py +521 -0
  48. mobev-0.3.0/mobev/scenario/stations.py +85 -0
  49. mobev-0.3.0/mobev/scenario/tariffs.py +241 -0
  50. mobev-0.3.0/mobev/trips/boundaries.py +343 -0
  51. mobev-0.3.0/mobev/trips/chains.py +279 -0
  52. mobev-0.3.0/mobev/trips/distances.py +160 -0
  53. mobev-0.3.0/mobev/trips/source.py +428 -0
  54. mobev-0.3.0/mobev/trips/trip_preparer.py +441 -0
  55. {mobev-0.2.0 → mobev-0.3.0}/mobev/utils/logger.py +33 -10
  56. mobev-0.3.0/mobev.egg-info/PKG-INFO +133 -0
  57. mobev-0.3.0/mobev.egg-info/SOURCES.txt +88 -0
  58. mobev-0.3.0/mobev.egg-info/entry_points.txt +2 -0
  59. {mobev-0.2.0 → mobev-0.3.0}/pyproject.toml +9 -4
  60. {mobev-0.2.0 → mobev-0.3.0}/tests/test_aggregated_profile_plotting.py +55 -41
  61. mobev-0.3.0/tests/test_charging_decision.py +456 -0
  62. mobev-0.3.0/tests/test_charging_simulator.py +590 -0
  63. mobev-0.3.0/tests/test_cli.py +109 -0
  64. mobev-0.3.0/tests/test_config.py +430 -0
  65. mobev-0.3.0/tests/test_logger.py +20 -0
  66. mobev-0.3.0/tests/test_metadata.py +109 -0
  67. mobev-0.3.0/tests/test_output.py +103 -0
  68. {mobev-0.2.0 → mobev-0.3.0}/tests/test_pipeline.py +23 -51
  69. {mobev-0.2.0 → mobev-0.3.0}/tests/test_pipeline_api.py +48 -27
  70. mobev-0.3.0/tests/test_plot_export.py +83 -0
  71. {mobev-0.2.0 → mobev-0.3.0}/tests/test_profile_aggregator.py +83 -38
  72. mobev-0.3.0/tests/test_random.py +31 -0
  73. mobev-0.3.0/tests/test_results.py +275 -0
  74. mobev-0.3.0/tests/test_results_indicators.py +315 -0
  75. mobev-0.3.0/tests/test_scenario_builder.py +258 -0
  76. mobev-0.3.0/tests/test_tariff_builder.py +320 -0
  77. mobev-0.3.0/tests/test_tariff_plotting.py +68 -0
  78. mobev-0.3.0/tests/test_trip_boundaries.py +402 -0
  79. mobev-0.3.0/tests/test_trip_chains.py +22 -0
  80. mobev-0.3.0/tests/test_trip_distances.py +117 -0
  81. {mobev-0.2.0 → mobev-0.3.0}/tests/test_trip_plotting.py +23 -67
  82. mobev-0.3.0/tests/test_trip_preparer.py +180 -0
  83. mobev-0.3.0/tests/test_trip_source.py +116 -0
  84. mobev-0.2.0/PKG-INFO +0 -191
  85. mobev-0.2.0/README.md +0 -167
  86. mobev-0.2.0/mobev/charging/__init__.py +0 -5
  87. mobev-0.2.0/mobev/charging/charging_simulator.py +0 -605
  88. mobev-0.2.0/mobev/charging/tariffs.py +0 -451
  89. mobev-0.2.0/mobev/core/config.py +0 -900
  90. mobev-0.2.0/mobev/plotting/__init__.py +0 -6
  91. mobev-0.2.0/mobev/plotting/api.py +0 -250
  92. mobev-0.2.0/mobev/plotting/data.py +0 -122
  93. mobev-0.2.0/mobev/plotting/render.py +0 -83
  94. mobev-0.2.0/mobev/plotting/tariff.py +0 -137
  95. mobev-0.2.0/mobev/plotting/trips.py +0 -376
  96. mobev-0.2.0/mobev/results/__init__.py +0 -54
  97. mobev-0.2.0/mobev/results/aggregated_profiles.py +0 -118
  98. mobev-0.2.0/mobev/results/charging_simulation.py +0 -133
  99. mobev-0.2.0/mobev/results/common.py +0 -281
  100. mobev-0.2.0/mobev/results/factories.py +0 -87
  101. mobev-0.2.0/mobev/results/prepared_trips.py +0 -91
  102. mobev-0.2.0/mobev/results/results_indicators.py +0 -132
  103. mobev-0.2.0/mobev/results/scenario_inputs.py +0 -219
  104. mobev-0.2.0/mobev/results/simulation_results.py +0 -48
  105. mobev-0.2.0/mobev/scenario/scenario_builder.py +0 -401
  106. mobev-0.2.0/mobev/trips/trip_preparer.py +0 -656
  107. mobev-0.2.0/mobev/utils/metadata.py +0 -132
  108. mobev-0.2.0/mobev.egg-info/PKG-INFO +0 -191
  109. mobev-0.2.0/mobev.egg-info/SOURCES.txt +0 -52
  110. mobev-0.2.0/tests/test_charging_simulator.py +0 -149
  111. mobev-0.2.0/tests/test_config.py +0 -93
  112. mobev-0.2.0/tests/test_results.py +0 -99
  113. mobev-0.2.0/tests/test_results_indicators.py +0 -116
  114. mobev-0.2.0/tests/test_scenario_builder.py +0 -78
  115. mobev-0.2.0/tests/test_tariff_pipeline.py +0 -36
  116. mobev-0.2.0/tests/test_trip_pipeline.py +0 -64
  117. mobev-0.2.0/tests/test_unit_boundaries.py +0 -73
  118. mobev-0.2.0/tests/test_utils.py +0 -310
  119. {mobev-0.2.0 → mobev-0.3.0}/LICENSE +0 -0
  120. {mobev-0.2.0 → mobev-0.3.0}/mobev/profiles/__init__.py +0 -0
  121. {mobev-0.2.0 → mobev-0.3.0}/mobev/trips/__init__.py +0 -0
  122. {mobev-0.2.0 → mobev-0.3.0}/mobev.egg-info/dependency_links.txt +0 -0
  123. {mobev-0.2.0 → mobev-0.3.0}/mobev.egg-info/requires.txt +0 -0
  124. {mobev-0.2.0 → mobev-0.3.0}/mobev.egg-info/top_level.txt +0 -0
  125. {mobev-0.2.0 → mobev-0.3.0}/setup.cfg +0 -0
mobev-0.3.0/PKG-INFO ADDED
@@ -0,0 +1,133 @@
1
+ Metadata-Version: 2.4
2
+ Name: mobev
3
+ Version: 0.3.0
4
+ Summary: MobEV: mobility-based, geolocalized EV charging-demand model.
5
+ Author-email: Yoann Chiche <yoann.chiche@minesparis.psl.eu>
6
+ License: MIT
7
+ Project-URL: Repository, https://git.persee.minesparis.psl.eu/planeterr/mobev
8
+ Project-URL: Documentation, https://pages.persee.minesparis.psl.eu/planeterr/mobev/
9
+ Classifier: Programming Language :: Python :: 3.13
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.13
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: pandas
15
+ Requires-Dist: numpy
16
+ Requires-Dist: geopandas
17
+ Requires-Dist: shapely>=2
18
+ Requires-Dist: polars
19
+ Requires-Dist: PyYAML
20
+ Requires-Dist: matplotlib
21
+ Requires-Dist: pyarrow
22
+ Requires-Dist: colorlog
23
+ Dynamic: license-file
24
+
25
+ # MobEV
26
+
27
+ <p align="left">
28
+ <a href="https://pages.persee.minesparis.psl.eu/planeterr/mobev/">
29
+ <img src="docs/source/logo.png" alt="MobEV logo" width="220">
30
+ </a>
31
+ </p>
32
+
33
+ [![Python](https://img.shields.io/badge/python-3.13%2B-3776AB)](https://www.python.org/)
34
+ [![PyPI](https://img.shields.io/pypi/v/mobev)](https://pypi.org/project/mobev/)
35
+
36
+ MobEV is a mobility-based, geolocalized EV charging-demand model. It
37
+ generates EV charging-demand profiles for distribution-network studies from
38
+ weekly car-trip data. The model samples an EV fleet and charging access,
39
+ simulates battery state of charge and charging sessions, and aggregates the
40
+ resulting demand at the configured timestep.
41
+ It requires Python 3.13 or newer. Install with `python -m pip install mobev` or
42
+ `uv add mobev`; contributors can run `uv sync` from a checkout.
43
+
44
+ [Full documentation](https://pages.persee.minesparis.psl.eu/planeterr/mobev/)
45
+
46
+ ## Inputs and configuration
47
+
48
+ Pass a directory containing `weekday_trips.gpkg` and `weekend_trips.gpkg`.
49
+ Both need person/activity fields, car mode, seconds-since-midnight departure
50
+ and arrival times, line geometry, and a CRS. See the [trip input schema](https://pages.persee.minesparis.psl.eu/planeterr/mobev/inputs.html#trip-inputs).
51
+ Optional tariff CSVs need a zero-based contiguous integer positional index and
52
+ exactly one numeric `price` or `price_eur_kwh` column in EUR/kWh; source
53
+ timestamps are rejected. See [tariff inputs](https://pages.persee.minesparis.psl.eu/planeterr/mobev/inputs.html#tariff-inputs).
54
+
55
+ Use the complete [YAML template](config/config.yaml) and
56
+ [parameter reference](https://pages.persee.minesparis.psl.eu/planeterr/mobev/configuration.html).
57
+ Relative tariff paths resolve from the YAML file. The main sections are
58
+ `simulation`, `fleet`, `battery`, `charging`, `flexibility`, `tariff`, and
59
+ `locations`. The YAML must include the simulation section and required charging fields;
60
+ horizon dates default to 2024-01-01 through 2024-01-07. The template is ready to copy and edit. A minimal flat-tariff YAML is:
61
+
62
+ ```yaml
63
+ simulation:
64
+ start_date: 2024-01-01
65
+ end_date: 2024-01-07
66
+ charging:
67
+ target_soc: 0.9
68
+ minimum_parking_time_minutes: 15
69
+ charging_setup_duration_minutes: 0
70
+ range_anxiety:
71
+ type: normal
72
+ mean: 0.5
73
+ std: 0.15
74
+ min: 0.1
75
+ max: 0.9
76
+ tariff:
77
+ unit: EUR/kWh
78
+ flat_tariff: 0.30
79
+ ```
80
+
81
+ ## Run from Python
82
+
83
+ ```python
84
+ from mobev import SimulationPipeline
85
+
86
+ pipeline = SimulationPipeline.from_yaml(
87
+ "config/config.yaml", "data/input/trips/YOUR_FEEDER"
88
+ )
89
+ result = pipeline.run()
90
+ print(result.charging_simulation.charging_profiles_df.head())
91
+ aggregate = pipeline.aggregate(by="total")
92
+ print(aggregate.aggregated_profiles_df.head())
93
+ ```
94
+
95
+ `TripPreparer`, `ScenarioBuilder`, and `ChargingSimulator` are the mandatory
96
+ stages. They produce `PreparedTrips`, `ScenarioInputs`, and
97
+ `ChargingSimulation`; `run()` returns `SimulationResults` containing all three.
98
+ `ProfileAggregator` is an optional separate analysis stage producing
99
+ `AggregatedProfiles`. Construct a pipeline with `SimulationPipeline.from_yaml`
100
+ or `SimulationPipeline.from_config`, or call its individual stage methods.
101
+ See the [workflow](https://pages.persee.minesparis.psl.eu/planeterr/mobev/workflow.html)
102
+ and [result attributes](https://pages.persee.minesparis.psl.eu/planeterr/mobev/results.html).
103
+
104
+ ## Run from the command line
105
+
106
+ ```bash
107
+ mobev --input-dir data/input/trips/YOUR_FEEDER --output-dir output --config config/config.yaml
108
+ ```
109
+
110
+ The installed `mobev` command writes stage table Parquet files, indicator
111
+ CSVs, `log_file.log`, and, by default, `metadata.json` and analysis PNGs.
112
+ See [CLI options](https://pages.persee.minesparis.psl.eu/planeterr/mobev/workflow.html#command-line-runner).
113
+
114
+ ## Charging decisions
115
+
116
+ At each parking opportunity, the simulator checks whether projected next-trip
117
+ SOC reaches the minimum reserve. Reserve charging starts immediately toward
118
+ trip demand plus reserve; normal charging uses the configured target SOC and
119
+ range-anxiety gate. A feasible normal charging window is chosen by mean tariff
120
+ price and compared with the curve reference. Session cost uses delivered grid
121
+ energy at each tariff slot. Trips that cannot meet demand above minimum SOC
122
+ appear in `charging_simulation.infeasible_trips_df`. See the
123
+ [charging decision algorithm](https://pages.persee.minesparis.psl.eu/planeterr/mobev/charging-algorithm.html).
124
+
125
+ ## Project links
126
+
127
+ [Changelog](CHANGELOG.md) ·
128
+ [Contribute](https://pages.persee.minesparis.psl.eu/planeterr/mobev/contribute.html) ·
129
+ [API reference](https://pages.persee.minesparis.psl.eu/planeterr/mobev/api/)
130
+
131
+ Build the docs from a checkout with `uv sync --group docs` and
132
+ `make -C docs html`. Open `docs/build/html/index.html`; Sphinx warnings fail
133
+ the build.
mobev-0.3.0/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # MobEV
2
+
3
+ <p align="left">
4
+ <a href="https://pages.persee.minesparis.psl.eu/planeterr/mobev/">
5
+ <img src="docs/source/logo.png" alt="MobEV logo" width="220">
6
+ </a>
7
+ </p>
8
+
9
+ [![Python](https://img.shields.io/badge/python-3.13%2B-3776AB)](https://www.python.org/)
10
+ [![PyPI](https://img.shields.io/pypi/v/mobev)](https://pypi.org/project/mobev/)
11
+
12
+ MobEV is a mobility-based, geolocalized EV charging-demand model. It
13
+ generates EV charging-demand profiles for distribution-network studies from
14
+ weekly car-trip data. The model samples an EV fleet and charging access,
15
+ simulates battery state of charge and charging sessions, and aggregates the
16
+ resulting demand at the configured timestep.
17
+ It requires Python 3.13 or newer. Install with `python -m pip install mobev` or
18
+ `uv add mobev`; contributors can run `uv sync` from a checkout.
19
+
20
+ [Full documentation](https://pages.persee.minesparis.psl.eu/planeterr/mobev/)
21
+
22
+ ## Inputs and configuration
23
+
24
+ Pass a directory containing `weekday_trips.gpkg` and `weekend_trips.gpkg`.
25
+ Both need person/activity fields, car mode, seconds-since-midnight departure
26
+ and arrival times, line geometry, and a CRS. See the [trip input schema](https://pages.persee.minesparis.psl.eu/planeterr/mobev/inputs.html#trip-inputs).
27
+ Optional tariff CSVs need a zero-based contiguous integer positional index and
28
+ exactly one numeric `price` or `price_eur_kwh` column in EUR/kWh; source
29
+ timestamps are rejected. See [tariff inputs](https://pages.persee.minesparis.psl.eu/planeterr/mobev/inputs.html#tariff-inputs).
30
+
31
+ Use the complete [YAML template](config/config.yaml) and
32
+ [parameter reference](https://pages.persee.minesparis.psl.eu/planeterr/mobev/configuration.html).
33
+ Relative tariff paths resolve from the YAML file. The main sections are
34
+ `simulation`, `fleet`, `battery`, `charging`, `flexibility`, `tariff`, and
35
+ `locations`. The YAML must include the simulation section and required charging fields;
36
+ horizon dates default to 2024-01-01 through 2024-01-07. The template is ready to copy and edit. A minimal flat-tariff YAML is:
37
+
38
+ ```yaml
39
+ simulation:
40
+ start_date: 2024-01-01
41
+ end_date: 2024-01-07
42
+ charging:
43
+ target_soc: 0.9
44
+ minimum_parking_time_minutes: 15
45
+ charging_setup_duration_minutes: 0
46
+ range_anxiety:
47
+ type: normal
48
+ mean: 0.5
49
+ std: 0.15
50
+ min: 0.1
51
+ max: 0.9
52
+ tariff:
53
+ unit: EUR/kWh
54
+ flat_tariff: 0.30
55
+ ```
56
+
57
+ ## Run from Python
58
+
59
+ ```python
60
+ from mobev import SimulationPipeline
61
+
62
+ pipeline = SimulationPipeline.from_yaml(
63
+ "config/config.yaml", "data/input/trips/YOUR_FEEDER"
64
+ )
65
+ result = pipeline.run()
66
+ print(result.charging_simulation.charging_profiles_df.head())
67
+ aggregate = pipeline.aggregate(by="total")
68
+ print(aggregate.aggregated_profiles_df.head())
69
+ ```
70
+
71
+ `TripPreparer`, `ScenarioBuilder`, and `ChargingSimulator` are the mandatory
72
+ stages. They produce `PreparedTrips`, `ScenarioInputs`, and
73
+ `ChargingSimulation`; `run()` returns `SimulationResults` containing all three.
74
+ `ProfileAggregator` is an optional separate analysis stage producing
75
+ `AggregatedProfiles`. Construct a pipeline with `SimulationPipeline.from_yaml`
76
+ or `SimulationPipeline.from_config`, or call its individual stage methods.
77
+ See the [workflow](https://pages.persee.minesparis.psl.eu/planeterr/mobev/workflow.html)
78
+ and [result attributes](https://pages.persee.minesparis.psl.eu/planeterr/mobev/results.html).
79
+
80
+ ## Run from the command line
81
+
82
+ ```bash
83
+ mobev --input-dir data/input/trips/YOUR_FEEDER --output-dir output --config config/config.yaml
84
+ ```
85
+
86
+ The installed `mobev` command writes stage table Parquet files, indicator
87
+ CSVs, `log_file.log`, and, by default, `metadata.json` and analysis PNGs.
88
+ See [CLI options](https://pages.persee.minesparis.psl.eu/planeterr/mobev/workflow.html#command-line-runner).
89
+
90
+ ## Charging decisions
91
+
92
+ At each parking opportunity, the simulator checks whether projected next-trip
93
+ SOC reaches the minimum reserve. Reserve charging starts immediately toward
94
+ trip demand plus reserve; normal charging uses the configured target SOC and
95
+ range-anxiety gate. A feasible normal charging window is chosen by mean tariff
96
+ price and compared with the curve reference. Session cost uses delivered grid
97
+ energy at each tariff slot. Trips that cannot meet demand above minimum SOC
98
+ appear in `charging_simulation.infeasible_trips_df`. See the
99
+ [charging decision algorithm](https://pages.persee.minesparis.psl.eu/planeterr/mobev/charging-algorithm.html).
100
+
101
+ ## Project links
102
+
103
+ [Changelog](CHANGELOG.md) ·
104
+ [Contribute](https://pages.persee.minesparis.psl.eu/planeterr/mobev/contribute.html) ·
105
+ [API reference](https://pages.persee.minesparis.psl.eu/planeterr/mobev/api/)
106
+
107
+ Build the docs from a checkout with `uv sync --group docs` and
108
+ `make -C docs html`. Open `docs/build/html/index.html`; Sphinx warnings fail
109
+ the build.
@@ -1,19 +1,23 @@
1
- """MobEV public API."""
2
-
3
1
  from mobev._version import __version__
4
- from mobev.charging import ChargingSimulator
5
- from mobev.core.config import (
2
+ from mobev.charging import ChargingDecisionEngine, ChargingSimulator
3
+ from mobev.config import (
6
4
  BatteryConfig,
7
5
  ChargingConfig,
8
6
  Config,
7
+ EVSegmentConfig,
9
8
  FixedVehicleConfig,
10
9
  FleetConfig,
10
+ FlexibilityConfig,
11
11
  InitialSocConfig,
12
+ LocationChargingConfig,
13
+ PowerDistributionConfig,
14
+ RangeAnxietyConfig,
12
15
  SimulationConfig,
13
- SocLimitsConfig,
16
+ SocDistributionConfig,
14
17
  TariffConfig,
18
+ TariffFileConfig,
15
19
  )
16
- from mobev.core.pipeline import SimulationPipeline
20
+ from mobev.pipeline import SimulationPipeline
17
21
  from mobev.profiles import ProfileAggregator
18
22
  from mobev.results import (
19
23
  AggregatedProfiles,
@@ -23,29 +27,37 @@ from mobev.results import (
23
27
  ScenarioInputs,
24
28
  SimulationResults,
25
29
  )
26
- from mobev.scenario import ScenarioBuilder
30
+ from mobev.scenario import ScenarioBuilder, TariffBuilder
27
31
  from mobev.trips import TripPreparer
28
32
 
29
33
  __all__ = [
30
34
  "AggregatedProfiles",
31
35
  "BatteryConfig",
32
36
  "ChargingConfig",
37
+ "ChargingDecisionEngine",
33
38
  "ChargingSimulation",
34
39
  "ChargingSimulator",
35
40
  "Config",
41
+ "EVSegmentConfig",
36
42
  "FixedVehicleConfig",
37
43
  "FleetConfig",
44
+ "FlexibilityConfig",
38
45
  "InitialSocConfig",
46
+ "LocationChargingConfig",
39
47
  "Metadata",
48
+ "PowerDistributionConfig",
40
49
  "PreparedTrips",
41
50
  "ProfileAggregator",
51
+ "RangeAnxietyConfig",
42
52
  "ScenarioBuilder",
43
53
  "ScenarioInputs",
44
54
  "SimulationConfig",
45
55
  "SimulationPipeline",
46
56
  "SimulationResults",
47
- "SocLimitsConfig",
57
+ "SocDistributionConfig",
58
+ "TariffBuilder",
48
59
  "TariffConfig",
60
+ "TariffFileConfig",
49
61
  "TripPreparer",
50
62
  "__version__",
51
63
  ]
@@ -1,3 +1,3 @@
1
1
  """The single source of truth for the MobEV package version."""
2
2
 
3
- __version__ = "0.2.0"
3
+ __version__ = "0.3.0"
@@ -0,0 +1,6 @@
1
+ """Simulate charging from scenario-input artifacts."""
2
+
3
+ from mobev.charging.charging_simulator import ChargingSimulator
4
+ from mobev.charging.decision_engine import ChargingDecisionEngine
5
+
6
+ __all__ = ["ChargingDecisionEngine", "ChargingSimulator"]