New Features
- Mobility can now be installed from PyPI as
mobility-tools, while keeping the Python import namemobility. (#371) - Added a GitHub release workflow that builds release artifacts and publishes to PyPI with trusted publishing. (#371, #381, #382)
- Added reproducible GTFS source selection for public transport routing, so projects can share and reuse the same GTFS source catalog. (#369)
- Added support for Swiss data and improved French communal data. (#87, #85)
- Added modelling support for school, leisure, studies, carpool, public transport, congestion, and multimodal workflows. (#115, #262, #200, #136, #113, #205, #203)
- Added group day trip simulation with scenario-aware runs, iteration states, diagnostics, result tables, metrics, sensitivity analysis, and restart support. (#323, #341, #342, #348, #367, #261)
- Added scenario-aware and time-varying parameters, parameter validation, parameter reports, and default scenario fallbacks. (#258, #282, #340, #240, #366)
- Added transport-zone preparation improvements, sparse-zone merging, Python backend support, map helpers, and transport-zone reports. (#271, #332, #344, #331, #347)
- Added route, traffic, public transport, and travel-cost evaluation tools. (#211, #205, #222, #203)
- Added a Dash asset DAG viewer to inspect runtime dependencies. (#360)
Bug Fixes
- Fixed package runtime resources so installed users get the data files needed by Mobility. (#371, #382)
- Fixed public transport leg parameter resolution for scenario-and-iteration-dependent access and egress costs. (#370)
- Fixed GTFS parsing and routing edge cases, including missing
agency_id, malformedcalendar_dates, and GTFS time-offset issues. (#180, #175, #217) - Fixed high memory usage and improved memory handling in long simulations. (#328, #343)
- Fixed bugs in PopulationTrips, destination sampling, trip home returns, metrics, probability calculations, and flow reuse between runs. (#164, #238, #310, #327, #214, #215, #260, #349)
- Fixed transport graph and congestion issues, including cleanup, OSM filtering, one-way tags, restricted roads, ferry links, and lane capacity parsing. (#306, #234, #207, #176, #320)
- Fixed CI download progress crashes caused by overlapping Rich progress displays. (#378)
- Fixed compatibility issues with newer pandas, pyarrow, R, and dependency versions. (#60, #67, #119, #275)
Chores
- Reworked the release process around PyPI, GitHub releases, trusted publishing, release docs, and packaged artifact checks. (#371, #377, #380, #381, #382)
- Simplified the release build so it no longer depends on the custom CI container image. (#381)
- Added and improved CI workflows, coverage reporting, Codecov, Dependabot, macOS install checks, and a prebuilt CI image for normal tests. (#29, #32, #102, #139, #243, #249, #278, #355, #356, #357)
- Improved dependency management for users, tests, Python packages, and R packages. (#275, #168, #371)
- Added a PR template and clearer contribution workflow. (#286)
- Reworked documentation, README files, Read the Docs setup, quickstart material, examples, model pages, API notes, and dependency notes. (#30, #33, #63, #64, #65, #66, #72, #73, #74, #75, #186, #321, #368)
- Switched the maintained quickstart and tests to the Limoges example. (#354)
Migration Notes
Install from PyPI with:
pip install mobility-toolsKeep importing the package as before:
import mobilityPublic transport routing now expects explicit GTFS routing inputs such as gtfs_reference_date and gtfs_sources_folder for reproducible runs. (#369)
Existing projects should be reviewed before rerunning because model internals, transport costs, parameters, dependencies, and public transport inputs changed substantially since v0.0.1.
Changelog
This is a broad catch-up release after several years without a formal release. The highlights above summarize the main user-facing changes; the full generated changelog below includes feature work, fixes, documentation, CI, packaging, and internal refactors.
What's Changed
- Bases demande opportunite by @AntoineGauchot in #17
- [example] improve Millau example by @Mind-the-Cap in #21
- add flake8 and pytest by @Mind-the-Cap in #29
- ajout de codecov by @Mind-the-Cap in #32
- Create README.md by @Mind-the-Cap in #30
- Improve docstrings by @Mind-the-Cap in #34
- Création d'un README pour les données by @Mind-the-Cap in #33
- Add db comparison example by @louisegontier in #40
- Update scripts groupe 1 by @AyoubFOUNDOU in #46
- Comments by @AyoubFOUNDOU in #50
- Update scripts groupe 1 by @cpequign in #49
- Update scripts groupe 1 by @cpequign in #52
- Update scripts groupe 1 by @AnasLahmar in #53
- Update scripts groupe 1 by @AnasLahmar in #54
- readme update by @AnasLahmar in #55
- Add trip type and BLOGDIST by @Mind-the-Cap in #36
- fix bug in emp_2019 parser by @louisegontier in #56
- Add info about INSEE data in the readme by @Mind-the-Cap in #41
- Add numeric_only arg to pandas sum to avoid an error by @FlxPo in #60
- Carbon by @louisegontier in #31
- Small docstrings improvements by @Mind-the-Cap in #62
- Add config for readthedocs by @Mind-the-Cap in #63
- Improve doc config by @Mind-the-Cap in #64
- Amélioration des README by @Mind-the-Cap in #65
- Change doc config by @Mind-the-Cap in #66
- Test doc by @Mind-the-Cap in #70
- Test doc by @Mind-the-Cap in #71
- Use myst_parser for readthedocs by @Mind-the-Cap in #72
- Add a (Markdown) index in doc by @Mind-the-Cap in #73
- Various improvements by Centrale Lyon students by @Mind-the-Cap in #58
- Change Sphinx configuration by @Mind-the-Cap in #74
- Add Readthedocs configuration by @Mind-the-Cap in #75
- Ajout de pyarrow dans les packages nécessaires by @FlxPo in #67
- Departments radiation functions are now main functions by @Mind-the-Cap in #76
- Add badges by @Mind-the-Cap in #77
- Change test strategy by @Mind-the-Cap in #78
- Update test_ademe_base_carbone_api.py by @Mind-the-Cap in #86
- [Data] Update communal data in France by @Mind-the-Cap in #85
- Add Swiss data by @Mind-the-Cap in #87
- Update conf.py by @Mind-the-Cap in #93
- Localisation multimodale des trajets domicile-travail by @FlxPo in #113
- Montée de version de R de 4.1.3 à 4.4.1 by @FlxPo in #119
- Create install-mac.yml by @FlxPo in #139
- Add all changes from carpool branch by @Mind-the-Cap in #136
- Ajout de la possibilité de calibrer le modèle de radiation pour le motif domicile-travail by @FlxPo in #114
- R packages errors by @Mind-the-Cap in #128
- Correction de bugs dans la préparation des données GTFS by @FlxPo in #161
- Correction d'une erreur de colonne manquante dans Population by @FlxPo in #164
- Refactoring et documentation PopulationTrips by @FlxPo in #165
- Suppression de la dépendance au package R readxl by @FlxPo in #168
- Correction de la méthode de construction de la variable socio_pro_category by @FlxPo in #172
- Forcer les noms de colonnes de la table calendar_dates des GTFS quand le parsing échoue by @FlxPo in #175
- Suppression des voies taggées "ferry" dans OSM dans les graphes de transport by @FlxPo in #176
- Améliorer la stratégie de gestion du cache by @FlxPo in #178
- Ajout de la colonne agency_id si manquante by @FlxPo in #180
- Une classe Results pour analyser les résultats de PopulationTrips by @FlxPo in #167
- Calcul de la colonne time dans PublicTransportGeneralizedCost.get by @FlxPo in #184
- Extraire la couche multipolygons des fichiers pbf dans prepare_transport_zones.R by @FlxPo in #182
- Calcul de la colonne time dans DetailedCarpoolGeneralizedCost.get by @FlxPo in #187
- Improve doc and readme by @Mind-the-Cap in #186
- Update geofabrik reference date by @Mind-the-Cap in #190
- Correction de conflit de types de colonnes int32 int64 by @FlxPo in #191
- Filtrage des résultats par statut inner/outer des zones de transport + Découpage des géométries TransportZones / StudyArea by @FlxPo in #195
- Ajout du motif “Études” à la modélisation des déplacements by @lucas-boh in #200
- Ajout d'une classe TravelCostsEvaluation by @FlxPo in #203
- Evaluation des estimations de trafic by @FlxPo in #205
- [US] Ajouter une interface Dash Minimale - Carte et indicateur global by @adam-benyekkou in #188
- Ajout de la possibilité de visualiser les itinéraires routiers du modèle avec une classe RoutingEvaluation by @FlxPo in #211
- Filtrage des voies réservées aux poids lourds / covoiturage / service / accès restreint by @FlxPo in #207
- Correction d'une erreur dans le calcul des probabilités lorsque les coûts sont très élevés by @FlxPo in #214
- Correction d'une erreur dans le calcul des probabilités lorsque les coûts sont très élevés v2 by @FlxPo in #215
- Erreur de décalage temporel entre données de GTFSRouter et de GTFSStops by @FlxPo in #217
- Corrections et améliorations by @FlxPo in #220
- Correction pour les modes non représentés dans les enquêtes (survey_ids=[]) by @FlxPo in #221
- Correction d'un bug possible lors de la création de PublicTransportNetworkEvaluation by @FlxPo in #222
- correct link for installation by @Mind-the-Cap in #224
- update examples by @Mind-the-Cap in #225
- Méthode alternative d'installation de pak by @FlxPo in #228
- Force oneway tags to be either yes or no to avoid a bug in dodgr by @FlxPo in #234
- Suppression du parallélisme dans prepare_transport_zones.R by @FlxPo in #232
- Calcul séquentiel pour les transport zones + Fix clustering quand n buildings < n clusters by @FlxPo in #235
- Rendre les résultats de PopulationTrips constants à seed fixe by @FlxPo in #238
- [US] Visualiser l'offre de transport décrite par les GTFS #197 by @mariegrandclement in #230
- Améliorer la documentation de PopulationTrips et la validation de ses arguments by @FlxPo in #239
- add cost_per_person by @Mind-the-Cap in #236
- Get back coverage reports by @Mind-the-Cap in #243
- Create .coveragerc by @Mind-the-Cap in #246
- Lower coverage targets by @Mind-the-Cap in #247
- Use Pydantic to manage parameter metadata and validation by @FlxPo in #258
- Fix a typo in prepare_transport_zones.R by @FlxPo in #259
- Avoid leakage of flows data between subsequent runs by @FlxPo in #260
- Update README.md by @Mind-the-Cap in #252
- Align stay-home baseline utility with min_activity_time_constant by @FlxPo in #265
- Use saturation-weighted effective sink in destination sampling by @FlxPo in #267
- Leisures by @lucas-boh in #262
- Replace clara clustering by kmeans + knn clustering when building transport zones by @FlxPo in #271
- Add state-transition waterfall diagnostic by @FlxPo in #269
- [US] Établir un rapport de tous les paramètres d'entrée #198 by @mariegrandclement in #240
- Add checkpoints to PopulationTrips so runs restart from the last computed iteration by @FlxPo in #261
- Add walk as default value for first and last legs in PublicTransportMode by @Mind-the-Cap in #245
- Create motives.md by @Mind-the-Cap in #106
- Remove now useless error raising in LeisureMotive by @FlxPo in #272
- Tests with cov by @Mind-the-Cap in #249
- External mobility surveys by @FlxPo in #274
- Improve dependencies management for users and testing by @FlxPo in #275
- Add dependabot config by @FlxPo in #278
- align car and PT beeline OD cutoffs by @FlxPo in #273
- Update pytest-cov requirement from <7,>=5 to >=5,<8 by @dependabot[bot] in #280
- Update myst-parser requirement from <5,>=3 to >=3,<6 by @dependabot[bot] in #279
- Add a PR description template by @FlxPo in #286
- Replace data.cquest.org downloads with carte.gouv.fr downloads by @FlxPo in #291
- Refactor by @FlxPo in #289
- Add time varying parameters by @FlxPo in #282
- Ability to control the allowed state transitions during a simulation by @FlxPo in #284
- Evaluations by iteration by @FlxPo in #296
- Host BPE24 on data.gouv.fr to avoid intermittent download issues by @FlxPo in #292
- Oscillations by @FlxPo in #303
- Change flow disagregation strategy in load_path_graph.R by @FlxPo in #305
- Fix congestion artifacts clean up by @FlxPo in #306
- Optimizations to speed up simulations by @FlxPo in #307
- Fix last "go home" trip bug by @FlxPo in #310
- Correct quickstart by @Mind-the-Cap in #313
- Add SurveyPlanAssets by @FlxPo in #312
- Add a way to skip errors for download_file by @FlxPo in #308
- Filter out OSM buildings that are huts by @FlxPo in #315
- Rust backend to speed up modes sequences search by @FlxPo in #317
- Update activities duration when travel times change because of congestion by @FlxPo in #318
- Lane capacity and traffic lights parsing by @FlxPo in #320
- Update installation.md by @Mind-the-Cap in #321
- Add convergence and model quality metrics by @FlxPo in #322
- Group day trips by @FlxPo in #323
- R runner observability by @FlxPo in #324
- Detour penalty by @FlxPo in #326
- Fix metrics bug by @FlxPo in #327
- Fix high memory usage by @FlxPo in #328
- Prevent truncated destination draws from reaching mode sequence search by @FlxPo in #329
- Configure transport graph congestion loading by @FlxPo in #330
- Add Python transport zone backend by @FlxPo in #332
- Add transport zone report maps by @FlxPo in #331
- Add destination shadow price controls by @FlxPo in #333
- Add plan transition stability controls by @FlxPo in #334
- Refresh active destination candidates by @FlxPo in #335
- Forward group day trip parameters by @FlxPo in #336
- Add group day trip diagnostics and metrics by @FlxPo in #337
- Refine group day trip utility calibration by @FlxPo in #338
- Add scenario-aware parameter values by @FlxPo in #340
- Add scenario-aware group day trip runs by @FlxPo in #341
- Add group day trip result tables API by @FlxPo in #342
- Add transport-zone metric map helpers by @FlxPo in #347
- Add group day trip result metrics by @FlxPo in #348
- Add opt-in idle monitoring for R scripts by @FlxPo in #343
- Merge sparse transport zones during preparation by @FlxPo in #344
- Expose transport-zone study area countries by @FlxPo in #345
- Use run parameters for iteration settings by @FlxPo in #346
- Fix anchor destination sampling by @FlxPo in #349
- Cache group day trip iteration states by @FlxPo in #350
- Reuse unchanged group-day-trip iteration assets by @FlxPo in #351
- Add group-day-trip progress feedback modes by @FlxPo in #352
- Make group-day-trip sequence indexes cache-safe by @FlxPo in #353
- Add CI image build workflow by @FlxPo in #355
- Add gpg to CI image by @FlxPo in #357
- Use prebuilt CI image for tests by @FlxPo in #356
- Switch quickstart and tests to Limoges by @FlxPo in #354
- Share congestion flows through asset dependencies by @FlxPo in #358
- Fix runtime asset DAG traversal by @FlxPo in #359
- Add Dash asset DAG viewer by @FlxPo in #360
- Clean up travel-cost selectors by @FlxPo in #361
- Add asset resolver context by @FlxPo in #363
- Improve GTFS builder UX by @FlxPo in #364
- Add no-transition behavior change scope by @FlxPo in #365
- Use default scenario as parameter fallback by @FlxPo in #366
- Improve user documentation by @FlxPo in #368
- Add group day trips sensitivity analysis by @FlxPo in #367
- Make GTFS source selection reproducible by @FlxPo in #369
- Resolve public transport leg cost parameters by iteration by @FlxPo in #370
- Prepare package releases by @FlxPo in #371
- Update release CI image digest by @FlxPo in #377
- Fix CI download progress display by @FlxPo in #378
- Add wheel to CI build dependencies by @FlxPo in #380
- Simplify release artifact build by @FlxPo in #381
- Check wheel resources without importing package by @FlxPo in #382
New Contributors
- @Mind-the-Cap made their first contribution in #21
- @louisegontier made their first contribution in #40
- @AyoubFOUNDOU made their first contribution in #46
- @cpequign made their first contribution in #49
- @AnasLahmar made their first contribution in #53
- @lucas-boh made their first contribution in #200
- @adam-benyekkou made their first contribution in #188
- @mariegrandclement made their first contribution in #230
- @dependabot[bot] made their first contribution in #280
Full Changelog: v0.0.1...v0.2.0