ChaProEV 1.0.2__tar.gz → 1.0.4__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.
- {chaproev-1.0.2 → chaproev-1.0.4}/.gitignore +0 -3
- {chaproev-1.0.2 → chaproev-1.0.4}/PKG-INFO +15 -15
- {chaproev-1.0.2 → chaproev-1.0.4}/README.md +2 -1
- {chaproev-1.0.2 → chaproev-1.0.4}/pyproject.toml +2 -2
- {chaproev-1.0.2 → chaproev-1.0.4}/requirements.txt +12 -13
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/define.py +114 -1
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/make_variants.py +1 -1
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/mobility.py +90 -7
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/PKG-INFO +15 -15
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/requires.txt +12 -13
- {chaproev-1.0.2 → chaproev-1.0.4}/.flake8 +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/.vscode/ltex.dictionary.en-US.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/.vscode/settings.json +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/ChaProEV.pptx +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/ChaProEV.toml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/Gemfile +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/LICENCE +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/MOPO_logo_chaproev on wht.svg +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/MOPO_logo_chaproev.png +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/MOPO_logo_chaproev.svg +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/MOPO_logo_main.svg +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/MOPO_logo_main_onwhite.svg +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/comparisons/comparison_template.toml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/Makefile +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/README.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/Vehicle_Temperature_correction_factor.svg +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/_config.yml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/doctrees/environment.pickle +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/doctrees/index.doctree +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/.buildinfo +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_sources/index.rst.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/alabaster.css +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/basic.css +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/custom.css +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/doctools.js +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/documentation_options.js +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/file.png +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/language_data.js +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/minus.png +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/plus.png +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/pygments.css +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/searchtools.js +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/_static/sphinx_highlight.js +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/genindex.html +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/index.html +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/objects.inv +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/search.html +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/build/html/searchindex.js +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/charging.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/consumption.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/define.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/index.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/make.bat +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/mobility.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/scenario.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/source/index.rst +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/using.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/docs/weather.md +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/eu-emblem-low-res.jpg +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/mkdocs.yml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/scenarios/Mopo/XX_bus.toml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/scenarios/Mopo/XX_car.toml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/scenarios/Mopo/XX_truck.toml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/scenarios/Mopo/XX_van.toml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/scenarios/local_impact_BEVs/baseline.toml +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/setup.cfg +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/ChaProEV.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/__init__.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/charging.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/consumption.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/py.typed +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/run_time.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/weather.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV/writing.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/PKG-INFO-PC-28624 +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/PKG-INFO-PC-28624-2 +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/SOURCES-PC-28624-2.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/SOURCES-PC-28624.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/SOURCES.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/dependency_links.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/requires-PC-28624-2.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/requires-PC-28624.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/src/ChaProEV.egg-info/top_level.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/tests/test_battery_space.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/tests/test_same_output.py +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/todo.txt +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/variants/Mopo/XX_car.csv +0 -0
- {chaproev-1.0.2 → chaproev-1.0.4}/variants/Mopo.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ChaProEV
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
4
4
|
Summary: ChaProEV: Charging Profiles of Electric Vehicles
|
|
5
5
|
Author-email: Omar Usmani <Omar.Usmani@TNO.nl>
|
|
6
6
|
Project-URL: Homepage, https://github.com/TNO/ChaProEV
|
|
@@ -10,12 +10,12 @@ Classifier: Operating System :: OS Independent
|
|
|
10
10
|
Requires-Python: >=3.11
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
License-File: LICENCE
|
|
13
|
-
Requires-Dist: attrs==
|
|
13
|
+
Requires-Dist: attrs==24.2.0
|
|
14
14
|
Requires-Dist: beautifulsoup4==4.12.3
|
|
15
15
|
Requires-Dist: black==24.10.0
|
|
16
16
|
Requires-Dist: build==1.2.1
|
|
17
|
-
Requires-Dist: cads-api-client==1.
|
|
18
|
-
Requires-Dist: cdsapi==0.7.
|
|
17
|
+
Requires-Dist: cads-api-client==1.4.6
|
|
18
|
+
Requires-Dist: cdsapi==0.7.3
|
|
19
19
|
Requires-Dist: certifi==2024.6.2
|
|
20
20
|
Requires-Dist: charset-normalizer==3.3.2
|
|
21
21
|
Requires-Dist: click==8.1.7
|
|
@@ -25,11 +25,11 @@ Requires-Dist: cycler==0.12.1
|
|
|
25
25
|
Requires-Dist: docutils==0.21.2
|
|
26
26
|
Requires-Dist: docx==0.2.4
|
|
27
27
|
Requires-Dist: et-xmlfile==1.1.0
|
|
28
|
-
Requires-Dist: ETS_CookBook==1.0.
|
|
28
|
+
Requires-Dist: ETS_CookBook==1.0.32
|
|
29
29
|
Requires-Dist: fonttools==4.53.0
|
|
30
30
|
Requires-Dist: geopandas==1.0.1
|
|
31
31
|
Requires-Dist: ghp-import==2.1.0
|
|
32
|
-
Requires-Dist: idna==3.
|
|
32
|
+
Requires-Dist: idna==3.10
|
|
33
33
|
Requires-Dist: importlib_metadata==8.0.0
|
|
34
34
|
Requires-Dist: iniconfig==2.0.0
|
|
35
35
|
Requires-Dist: jaraco.classes==3.4.0
|
|
@@ -48,7 +48,7 @@ Requires-Dist: mergedeep==1.3.4
|
|
|
48
48
|
Requires-Dist: mkdocs==1.6.0
|
|
49
49
|
Requires-Dist: mkdocs-get-deps==0.2.0
|
|
50
50
|
Requires-Dist: more-itertools==10.3.0
|
|
51
|
-
Requires-Dist: multiurl==0.3.
|
|
51
|
+
Requires-Dist: multiurl==0.3.2
|
|
52
52
|
Requires-Dist: mypy==1.10.1
|
|
53
53
|
Requires-Dist: mypy-extensions==1.0.0
|
|
54
54
|
Requires-Dist: nh3==0.2.17
|
|
@@ -65,7 +65,7 @@ Requires-Dist: platformdirs==4.2.2
|
|
|
65
65
|
Requires-Dist: plotly==5.22.0
|
|
66
66
|
Requires-Dist: pluggy==1.5.0
|
|
67
67
|
Requires-Dist: Pygments==2.18.0
|
|
68
|
-
Requires-Dist: pyogrio==0.
|
|
68
|
+
Requires-Dist: pyogrio==0.10.0
|
|
69
69
|
Requires-Dist: pyparsing==3.1.2
|
|
70
70
|
Requires-Dist: pyproj==3.6.1
|
|
71
71
|
Requires-Dist: pyproject_hooks==1.1.0
|
|
@@ -81,19 +81,18 @@ Requires-Dist: requests==2.32.3
|
|
|
81
81
|
Requires-Dist: requests-toolbelt==1.0.0
|
|
82
82
|
Requires-Dist: rfc3986==2.0.0
|
|
83
83
|
Requires-Dist: rich==13.7.1
|
|
84
|
-
Requires-Dist: setuptools==70.2.0
|
|
85
84
|
Requires-Dist: shapely==2.0.4
|
|
86
85
|
Requires-Dist: six==1.16.0
|
|
87
|
-
Requires-Dist: soupsieve==2.
|
|
86
|
+
Requires-Dist: soupsieve==2.6
|
|
88
87
|
Requires-Dist: tenacity==8.4.2
|
|
89
88
|
Requires-Dist: toml==0.10.2
|
|
90
|
-
Requires-Dist:
|
|
91
|
-
Requires-Dist:
|
|
92
|
-
Requires-Dist: types-
|
|
89
|
+
Requires-Dist: tomli==2.0.1
|
|
90
|
+
Requires-Dist: tqdm==4.66.5
|
|
91
|
+
Requires-Dist: types-beautifulsoup4==4.12.0.20241020
|
|
92
|
+
Requires-Dist: types-html5lib==1.1.11.20241018
|
|
93
93
|
Requires-Dist: types-openpyxl==3.1.5.20240630
|
|
94
94
|
Requires-Dist: types-pytz==2024.1.0.20240417
|
|
95
95
|
Requires-Dist: types-requests==2.32.0.20240622
|
|
96
|
-
Requires-Dist: types-toml==0.10.8.20240310
|
|
97
96
|
Requires-Dist: typing_extensions==4.12.2
|
|
98
97
|
Requires-Dist: tzdata==2024.1
|
|
99
98
|
Requires-Dist: urllib3==2.2.2
|
|
@@ -154,7 +153,8 @@ The docmentation can be found [here](https://tno.github.io/ChaProEV/)
|
|
|
154
153
|
|
|
155
154
|
### **Driver**
|
|
156
155
|
The primary driver for the publication and development of ChaProEV in this
|
|
157
|
-
repository is the participation in the
|
|
156
|
+
repository is the participation in the
|
|
157
|
+
[Mopo](https://www.tools-for-energy-system-modelling.org/) project (funded from
|
|
158
158
|
European Climate,
|
|
159
159
|
Infrastructure and Environment Executive Agency under the European Union’s
|
|
160
160
|
HORIZON Research and Innovation Actions under grant agreement N°101095998).
|
|
@@ -51,7 +51,8 @@ The docmentation can be found [here](https://tno.github.io/ChaProEV/)
|
|
|
51
51
|
|
|
52
52
|
### **Driver**
|
|
53
53
|
The primary driver for the publication and development of ChaProEV in this
|
|
54
|
-
repository is the participation in the
|
|
54
|
+
repository is the participation in the
|
|
55
|
+
[Mopo](https://www.tools-for-energy-system-modelling.org/) project (funded from
|
|
55
56
|
European Climate,
|
|
56
57
|
Infrastructure and Environment Executive Agency under the European Union’s
|
|
57
58
|
HORIZON Research and Innovation Actions under grant agreement N°101095998).
|
|
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = 'ChaProEV'
|
|
7
|
-
version = '1.0.
|
|
7
|
+
version = '1.0.4'
|
|
8
8
|
authors = [
|
|
9
9
|
{ name='Omar Usmani', email='Omar.Usmani@TNO.nl' },
|
|
10
10
|
]
|
|
@@ -33,6 +33,6 @@ pythonpath = ['src/ChaProEV']
|
|
|
33
33
|
'Homepage' = 'https://github.com/TNO/ChaProEV'
|
|
34
34
|
|
|
35
35
|
[[tool.mypy.overrides]]
|
|
36
|
-
module = ['geopandas/*', 'plotly/*', 'tomllib/*', 'tomli/*', 'cdsapi/*']
|
|
36
|
+
module = ['geopandas/*', 'plotly/*', 'tomllib/*', 'tomli/*', 'cdsapi/*', 'toml/*']
|
|
37
37
|
ignore_missing_imports = true
|
|
38
38
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
attrs==
|
|
1
|
+
attrs==24.2.0
|
|
2
2
|
beautifulsoup4==4.12.3
|
|
3
3
|
black==24.10.0
|
|
4
4
|
build==1.2.1
|
|
5
|
-
cads-api-client==1.
|
|
6
|
-
cdsapi==0.7.
|
|
5
|
+
cads-api-client==1.4.6
|
|
6
|
+
cdsapi==0.7.3
|
|
7
7
|
certifi==2024.6.2
|
|
8
8
|
charset-normalizer==3.3.2
|
|
9
9
|
click==8.1.7
|
|
@@ -13,11 +13,11 @@ cycler==0.12.1
|
|
|
13
13
|
docutils==0.21.2
|
|
14
14
|
docx==0.2.4
|
|
15
15
|
et-xmlfile==1.1.0
|
|
16
|
-
ETS_CookBook==1.0.
|
|
16
|
+
ETS_CookBook==1.0.32
|
|
17
17
|
fonttools==4.53.0
|
|
18
18
|
geopandas==1.0.1
|
|
19
19
|
ghp-import==2.1.0
|
|
20
|
-
idna==3.
|
|
20
|
+
idna==3.10
|
|
21
21
|
importlib_metadata==8.0.0
|
|
22
22
|
iniconfig==2.0.0
|
|
23
23
|
jaraco.classes==3.4.0
|
|
@@ -36,7 +36,7 @@ mergedeep==1.3.4
|
|
|
36
36
|
mkdocs==1.6.0
|
|
37
37
|
mkdocs-get-deps==0.2.0
|
|
38
38
|
more-itertools==10.3.0
|
|
39
|
-
multiurl==0.3.
|
|
39
|
+
multiurl==0.3.2
|
|
40
40
|
mypy==1.10.1
|
|
41
41
|
mypy-extensions==1.0.0
|
|
42
42
|
nh3==0.2.17
|
|
@@ -53,7 +53,7 @@ platformdirs==4.2.2
|
|
|
53
53
|
plotly==5.22.0
|
|
54
54
|
pluggy==1.5.0
|
|
55
55
|
Pygments==2.18.0
|
|
56
|
-
pyogrio==0.
|
|
56
|
+
pyogrio==0.10.0
|
|
57
57
|
pyparsing==3.1.2
|
|
58
58
|
pyproj==3.6.1
|
|
59
59
|
pyproject_hooks==1.1.0
|
|
@@ -69,19 +69,18 @@ requests==2.32.3
|
|
|
69
69
|
requests-toolbelt==1.0.0
|
|
70
70
|
rfc3986==2.0.0
|
|
71
71
|
rich==13.7.1
|
|
72
|
-
setuptools==70.2.0
|
|
73
72
|
shapely==2.0.4
|
|
74
73
|
six==1.16.0
|
|
75
|
-
soupsieve==2.
|
|
74
|
+
soupsieve==2.6
|
|
76
75
|
tenacity==8.4.2
|
|
77
76
|
toml==0.10.2
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
types-
|
|
77
|
+
tomli==2.0.1
|
|
78
|
+
tqdm==4.66.5
|
|
79
|
+
types-beautifulsoup4==4.12.0.20241020
|
|
80
|
+
types-html5lib==1.1.11.20241018
|
|
81
81
|
types-openpyxl==3.1.5.20240630
|
|
82
82
|
types-pytz==2024.1.0.20240417
|
|
83
83
|
types-requests==2.32.0.20240622
|
|
84
|
-
types-toml==0.10.8.20240310
|
|
85
84
|
typing_extensions==4.12.2
|
|
86
85
|
tzdata==2024.1
|
|
87
86
|
urllib3==2.2.2
|
|
@@ -1301,6 +1301,46 @@ class Trip:
|
|
|
1301
1301
|
'Arrivals amount'
|
|
1302
1302
|
].loc[start_location, end_location]
|
|
1303
1303
|
|
|
1304
|
+
trip.next_leg_charge_to_vehicle: pd.DataFrame = (
|
|
1305
|
+
trip.next_leg_kilometers.copy()
|
|
1306
|
+
)
|
|
1307
|
+
trip.next_leg_charge_from_network: pd.DataFrame = (
|
|
1308
|
+
trip.next_leg_kilometers.copy()
|
|
1309
|
+
)
|
|
1310
|
+
trip.next_leg_charge_to_vehicle_cumulative: pd.DataFrame = (
|
|
1311
|
+
trip.next_leg_kilometers_cumulative.copy()
|
|
1312
|
+
)
|
|
1313
|
+
trip.next_leg_charge_from_network_cumulative: pd.DataFrame = (
|
|
1314
|
+
trip.next_leg_kilometers_cumulative.copy()
|
|
1315
|
+
)
|
|
1316
|
+
|
|
1317
|
+
for location_name in trip.location_names:
|
|
1318
|
+
vehicle_consumption_per_km: float = scenario['vehicle'][
|
|
1319
|
+
'base_consumption_per_km'
|
|
1320
|
+
]['electricity_kWh']
|
|
1321
|
+
charger_efficiency = scenario['locations'][location_name][
|
|
1322
|
+
'charger_efficiency'
|
|
1323
|
+
]
|
|
1324
|
+
draw_from_network_per_km: float = (
|
|
1325
|
+
vehicle_consumption_per_km / charger_efficiency
|
|
1326
|
+
)
|
|
1327
|
+
trip.next_leg_charge_to_vehicle[location_name] = (
|
|
1328
|
+
trip.next_leg_charge_to_vehicle[location_name]
|
|
1329
|
+
* vehicle_consumption_per_km
|
|
1330
|
+
)
|
|
1331
|
+
trip.next_leg_charge_to_vehicle_cumulative[location_name] = (
|
|
1332
|
+
trip.next_leg_charge_to_vehicle_cumulative[location_name]
|
|
1333
|
+
* vehicle_consumption_per_km
|
|
1334
|
+
)
|
|
1335
|
+
trip.next_leg_charge_from_network[location_name] = (
|
|
1336
|
+
trip.next_leg_charge_from_network[location_name]
|
|
1337
|
+
* draw_from_network_per_km
|
|
1338
|
+
)
|
|
1339
|
+
trip.next_leg_charge_from_network_cumulative[location_name] = (
|
|
1340
|
+
trip.next_leg_charge_from_network_cumulative[location_name]
|
|
1341
|
+
* draw_from_network_per_km
|
|
1342
|
+
)
|
|
1343
|
+
|
|
1304
1344
|
trip.run_next_leg_kilometers: pd.DataFrame = run_time.from_day_to_run(
|
|
1305
1345
|
trip.next_leg_kilometers,
|
|
1306
1346
|
run_time_tags,
|
|
@@ -1318,6 +1358,44 @@ class Trip:
|
|
|
1318
1358
|
)
|
|
1319
1359
|
)
|
|
1320
1360
|
|
|
1361
|
+
trip.run_next_leg_charge_to_vehicle: pd.DataFrame = (
|
|
1362
|
+
run_time.from_day_to_run(
|
|
1363
|
+
trip.next_leg_charge_to_vehicle,
|
|
1364
|
+
run_time_tags,
|
|
1365
|
+
trip.day_start_hour,
|
|
1366
|
+
scenario,
|
|
1367
|
+
general_parameters,
|
|
1368
|
+
)
|
|
1369
|
+
)
|
|
1370
|
+
trip.run_next_leg_charge_to_vehicle_cumulative: pd.DataFrame = (
|
|
1371
|
+
run_time.from_day_to_run(
|
|
1372
|
+
trip.next_leg_charge_to_vehicle_cumulative,
|
|
1373
|
+
run_time_tags,
|
|
1374
|
+
trip.day_start_hour,
|
|
1375
|
+
scenario,
|
|
1376
|
+
general_parameters,
|
|
1377
|
+
)
|
|
1378
|
+
)
|
|
1379
|
+
|
|
1380
|
+
trip.run_next_leg_charge_from_network: pd.DataFrame = (
|
|
1381
|
+
run_time.from_day_to_run(
|
|
1382
|
+
trip.next_leg_charge_from_network,
|
|
1383
|
+
run_time_tags,
|
|
1384
|
+
trip.day_start_hour,
|
|
1385
|
+
scenario,
|
|
1386
|
+
general_parameters,
|
|
1387
|
+
)
|
|
1388
|
+
)
|
|
1389
|
+
trip.run_next_leg_charge_from_network_cumulative: pd.DataFrame = (
|
|
1390
|
+
run_time.from_day_to_run(
|
|
1391
|
+
trip.next_leg_charge_from_network_cumulative,
|
|
1392
|
+
run_time_tags,
|
|
1393
|
+
trip.day_start_hour,
|
|
1394
|
+
scenario,
|
|
1395
|
+
general_parameters,
|
|
1396
|
+
)
|
|
1397
|
+
)
|
|
1398
|
+
|
|
1321
1399
|
|
|
1322
1400
|
def declare_class_instances(
|
|
1323
1401
|
Chosen_class: ty.Type, scenario: ty.Dict, general_parameters: ty.Dict
|
|
@@ -1450,6 +1528,41 @@ def declare_all_instances(
|
|
|
1450
1528
|
f'{output_folder}/{scenario_name}_'
|
|
1451
1529
|
f'{trip.name}_run_next_leg_kilometers_cumulative.pkl'
|
|
1452
1530
|
)
|
|
1531
|
+
trip.next_leg_charge_to_vehicle.to_pickle(
|
|
1532
|
+
f'{output_folder}/{scenario_name}_'
|
|
1533
|
+
f'{trip.name}_next_leg_charge_to_vehicle.pkl'
|
|
1534
|
+
)
|
|
1535
|
+
trip.next_leg_charge_from_network.to_pickle(
|
|
1536
|
+
f'{output_folder}/{scenario_name}_'
|
|
1537
|
+
f'{trip.name}_next_leg_charge_from_network.pkl'
|
|
1538
|
+
)
|
|
1539
|
+
trip.run_next_leg_charge_to_vehicle.to_pickle(
|
|
1540
|
+
f'{output_folder}/{scenario_name}_'
|
|
1541
|
+
f'{trip.name}_run_next_leg_charge_to_vehicle.pkl'
|
|
1542
|
+
)
|
|
1543
|
+
trip.run_next_leg_charge_from_network.to_pickle(
|
|
1544
|
+
f'{output_folder}/{scenario_name}_'
|
|
1545
|
+
f'{trip.name}_run_next_leg_charge_from_network.pkl'
|
|
1546
|
+
)
|
|
1547
|
+
trip.next_leg_charge_to_vehicle_cumulative.to_pickle(
|
|
1548
|
+
f'{output_folder}/{scenario_name}_'
|
|
1549
|
+
f'{trip.name}_next_leg_charge_to_vehicle_cumulative.pkl'
|
|
1550
|
+
)
|
|
1551
|
+
trip.next_leg_charge_from_network_cumulative.to_pickle(
|
|
1552
|
+
f'{output_folder}/{scenario_name}_'
|
|
1553
|
+
f'{trip.name}'
|
|
1554
|
+
f'_next_leg_charge_from_network_cumulative.pkl'
|
|
1555
|
+
)
|
|
1556
|
+
trip.run_next_leg_charge_to_vehicle_cumulative.to_pickle(
|
|
1557
|
+
f'{output_folder}/{scenario_name}_'
|
|
1558
|
+
f'{trip.name}'
|
|
1559
|
+
f'_run_next_leg_charge_to_vehicle_cumulative.pkl'
|
|
1560
|
+
)
|
|
1561
|
+
trip.run_next_leg_charge_from_network_cumulative.to_pickle(
|
|
1562
|
+
f'{output_folder}/{scenario_name}_'
|
|
1563
|
+
f'{trip.name}'
|
|
1564
|
+
f'_run_next_leg_charge_from_network_cumulative.pkl'
|
|
1565
|
+
)
|
|
1453
1566
|
trip.location_split.to_pickle(
|
|
1454
1567
|
f'{output_folder}/{scenario_name}_'
|
|
1455
1568
|
f'{trip.name}_location_split.pkl'
|
|
@@ -1609,7 +1722,7 @@ if __name__ == '__main__':
|
|
|
1609
1722
|
general_parameters_file_name
|
|
1610
1723
|
)
|
|
1611
1724
|
case_name = 'Mopo'
|
|
1612
|
-
test_scenario_name: str = '
|
|
1725
|
+
test_scenario_name: str = 'XX_car'
|
|
1613
1726
|
scenario_file_name: str = (
|
|
1614
1727
|
f'scenarios/{case_name}/{test_scenario_name}.toml'
|
|
1615
1728
|
)
|
|
@@ -18,7 +18,7 @@ def make_csv_variants(case_name: str) -> None:
|
|
|
18
18
|
'''
|
|
19
19
|
This uses a csv, with commas as separators.
|
|
20
20
|
If you want to put a list as a value, do it as such:
|
|
21
|
-
"[1, 2.5, 5]"
|
|
21
|
+
"[1, 2.5, 5]"
|
|
22
22
|
(with the quotes: note that this is not necessary in Excel, where you can
|
|
23
23
|
just put the list with brackets without the quotes)
|
|
24
24
|
'''
|
|
@@ -1515,6 +1515,26 @@ def get_kilometers_for_next_leg(
|
|
|
1515
1515
|
columns=location_names,
|
|
1516
1516
|
index=run_trip_probabilities.index,
|
|
1517
1517
|
)
|
|
1518
|
+
run_next_leg_charge_to_vehicle: pd.DataFrame = pd.DataFrame(
|
|
1519
|
+
np.zeros((len(run_trip_probabilities.index), len(location_names))),
|
|
1520
|
+
columns=location_names,
|
|
1521
|
+
index=run_trip_probabilities.index,
|
|
1522
|
+
)
|
|
1523
|
+
run_next_leg_charge_from_network: pd.DataFrame = pd.DataFrame(
|
|
1524
|
+
np.zeros((len(run_trip_probabilities.index), len(location_names))),
|
|
1525
|
+
columns=location_names,
|
|
1526
|
+
index=run_trip_probabilities.index,
|
|
1527
|
+
)
|
|
1528
|
+
run_next_leg_charge_to_vehicle_cumulative: pd.DataFrame = pd.DataFrame(
|
|
1529
|
+
np.zeros((len(run_trip_probabilities.index), len(location_names))),
|
|
1530
|
+
columns=location_names,
|
|
1531
|
+
index=run_trip_probabilities.index,
|
|
1532
|
+
)
|
|
1533
|
+
run_next_leg_charge_from_network_cumulative: pd.DataFrame = pd.DataFrame(
|
|
1534
|
+
np.zeros((len(run_trip_probabilities.index), len(location_names))),
|
|
1535
|
+
columns=location_names,
|
|
1536
|
+
index=run_trip_probabilities.index,
|
|
1537
|
+
)
|
|
1518
1538
|
|
|
1519
1539
|
trip_parameters: ty.Dict = scenario['trips']
|
|
1520
1540
|
trip_names: ty.List[str] = [
|
|
@@ -1533,18 +1553,67 @@ def get_kilometers_for_next_leg(
|
|
|
1533
1553
|
f'run_next_leg_kilometers_cumulative.pkl',
|
|
1534
1554
|
)
|
|
1535
1555
|
|
|
1556
|
+
trip_run_next_leg_charge_to_vehicle: pd.DataFrame = pd.read_pickle(
|
|
1557
|
+
f'{output_folder}/{scenario_name}_'
|
|
1558
|
+
f'{trip_name}_run_next_leg_charge_to_vehicle.pkl'
|
|
1559
|
+
)
|
|
1560
|
+
trip_run_next_leg_charge_from_network: pd.DataFrame = pd.read_pickle(
|
|
1561
|
+
f'{output_folder}/{scenario_name}_'
|
|
1562
|
+
f'{trip_name}_run_next_leg_charge_from_network.pkl'
|
|
1563
|
+
)
|
|
1564
|
+
trip_run_next_leg_charge_to_vehicle_cumulative: pd.DataFrame = (
|
|
1565
|
+
pd.read_pickle(
|
|
1566
|
+
f'{output_folder}/{scenario_name}_'
|
|
1567
|
+
f'{trip_name}_run_next_leg_charge_to_vehicle_cumulative.pkl'
|
|
1568
|
+
)
|
|
1569
|
+
)
|
|
1570
|
+
trip_run_next_leg_charge_from_network_cumulative: pd.DataFrame = (
|
|
1571
|
+
pd.read_pickle(
|
|
1572
|
+
f'{output_folder}/{scenario_name}_'
|
|
1573
|
+
f'{trip_name}_run_next_leg_charge_from_network_cumulative.pkl'
|
|
1574
|
+
)
|
|
1575
|
+
)
|
|
1576
|
+
|
|
1536
1577
|
this_trip_probabilities: pd.Series[float] = pd.Series(
|
|
1537
1578
|
run_trip_probabilities[trip_name]
|
|
1538
1579
|
)
|
|
1580
|
+
for location_name in trip_run_next_leg_kilometers.columns:
|
|
1539
1581
|
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1582
|
+
run_next_leg_kilometers[
|
|
1583
|
+
location_name
|
|
1584
|
+
] += trip_run_next_leg_kilometers[location_name].mul(
|
|
1585
|
+
this_trip_probabilities, axis=0
|
|
1586
|
+
)
|
|
1587
|
+
run_next_leg_kilometers_cumulative[
|
|
1588
|
+
location_name
|
|
1589
|
+
] += trip_run_next_leg_kilometers_cumulative[location_name].mul(
|
|
1590
|
+
this_trip_probabilities, axis=0
|
|
1591
|
+
)
|
|
1592
|
+
run_next_leg_charge_to_vehicle[
|
|
1593
|
+
location_name
|
|
1594
|
+
] += trip_run_next_leg_charge_to_vehicle[location_name].mul(
|
|
1595
|
+
this_trip_probabilities, axis=0
|
|
1596
|
+
)
|
|
1597
|
+
|
|
1598
|
+
run_next_leg_charge_from_network[
|
|
1599
|
+
location_name
|
|
1600
|
+
] += trip_run_next_leg_charge_from_network[location_name].mul(
|
|
1601
|
+
this_trip_probabilities, axis=0
|
|
1602
|
+
)
|
|
1603
|
+
run_next_leg_charge_to_vehicle_cumulative[
|
|
1604
|
+
location_name
|
|
1605
|
+
] += trip_run_next_leg_charge_to_vehicle_cumulative[
|
|
1606
|
+
location_name
|
|
1607
|
+
].mul(
|
|
1608
|
+
this_trip_probabilities, axis=0
|
|
1609
|
+
)
|
|
1610
|
+
run_next_leg_charge_from_network_cumulative[
|
|
1611
|
+
location_name
|
|
1612
|
+
] += trip_run_next_leg_charge_from_network_cumulative[
|
|
1613
|
+
location_name
|
|
1614
|
+
].mul(
|
|
1545
1615
|
this_trip_probabilities, axis=0
|
|
1546
1616
|
)
|
|
1547
|
-
)
|
|
1548
1617
|
|
|
1549
1618
|
run_next_leg_kilometers.to_pickle(
|
|
1550
1619
|
f'{output_folder}/{scenario_name}_next_leg_kilometers.pkl'
|
|
@@ -1552,6 +1621,20 @@ def get_kilometers_for_next_leg(
|
|
|
1552
1621
|
run_next_leg_kilometers_cumulative.to_pickle(
|
|
1553
1622
|
f'{output_folder}/{scenario_name}_next_leg_kilometers_cumulative.pkl'
|
|
1554
1623
|
)
|
|
1624
|
+
run_next_leg_charge_to_vehicle.to_pickle(
|
|
1625
|
+
f'{output_folder}/{scenario_name}_next_leg_charge_to_vehicle.pkl'
|
|
1626
|
+
)
|
|
1627
|
+
run_next_leg_charge_from_network.to_pickle(
|
|
1628
|
+
f'{output_folder}/{scenario_name}_next_leg_charge_from_network.pkl'
|
|
1629
|
+
)
|
|
1630
|
+
run_next_leg_charge_to_vehicle_cumulative.to_pickle(
|
|
1631
|
+
f'{output_folder}/{scenario_name}'
|
|
1632
|
+
f'_next_leg_charge_to_vehicle_cumulative.pkl'
|
|
1633
|
+
)
|
|
1634
|
+
run_next_leg_charge_from_network_cumulative.to_pickle(
|
|
1635
|
+
f'{output_folder}/{scenario_name}'
|
|
1636
|
+
f'_next_leg_charge_from_network_cumulative.pkl'
|
|
1637
|
+
)
|
|
1555
1638
|
|
|
1556
1639
|
|
|
1557
1640
|
def make_mobility_data(
|
|
@@ -1633,7 +1716,7 @@ def make_mobility_data(
|
|
|
1633
1716
|
if __name__ == '__main__':
|
|
1634
1717
|
start_time: datetime.datetime = datetime.datetime.now()
|
|
1635
1718
|
case_name = 'Mopo'
|
|
1636
|
-
test_scenario_name: str = '
|
|
1719
|
+
test_scenario_name: str = 'XX_car'
|
|
1637
1720
|
scenario_file_name: str = (
|
|
1638
1721
|
f'scenarios/{case_name}/{test_scenario_name}.toml'
|
|
1639
1722
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ChaProEV
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.4
|
|
4
4
|
Summary: ChaProEV: Charging Profiles of Electric Vehicles
|
|
5
5
|
Author-email: Omar Usmani <Omar.Usmani@TNO.nl>
|
|
6
6
|
Project-URL: Homepage, https://github.com/TNO/ChaProEV
|
|
@@ -10,12 +10,12 @@ Classifier: Operating System :: OS Independent
|
|
|
10
10
|
Requires-Python: >=3.11
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
12
|
License-File: LICENCE
|
|
13
|
-
Requires-Dist: attrs==
|
|
13
|
+
Requires-Dist: attrs==24.2.0
|
|
14
14
|
Requires-Dist: beautifulsoup4==4.12.3
|
|
15
15
|
Requires-Dist: black==24.10.0
|
|
16
16
|
Requires-Dist: build==1.2.1
|
|
17
|
-
Requires-Dist: cads-api-client==1.
|
|
18
|
-
Requires-Dist: cdsapi==0.7.
|
|
17
|
+
Requires-Dist: cads-api-client==1.4.6
|
|
18
|
+
Requires-Dist: cdsapi==0.7.3
|
|
19
19
|
Requires-Dist: certifi==2024.6.2
|
|
20
20
|
Requires-Dist: charset-normalizer==3.3.2
|
|
21
21
|
Requires-Dist: click==8.1.7
|
|
@@ -25,11 +25,11 @@ Requires-Dist: cycler==0.12.1
|
|
|
25
25
|
Requires-Dist: docutils==0.21.2
|
|
26
26
|
Requires-Dist: docx==0.2.4
|
|
27
27
|
Requires-Dist: et-xmlfile==1.1.0
|
|
28
|
-
Requires-Dist: ETS_CookBook==1.0.
|
|
28
|
+
Requires-Dist: ETS_CookBook==1.0.32
|
|
29
29
|
Requires-Dist: fonttools==4.53.0
|
|
30
30
|
Requires-Dist: geopandas==1.0.1
|
|
31
31
|
Requires-Dist: ghp-import==2.1.0
|
|
32
|
-
Requires-Dist: idna==3.
|
|
32
|
+
Requires-Dist: idna==3.10
|
|
33
33
|
Requires-Dist: importlib_metadata==8.0.0
|
|
34
34
|
Requires-Dist: iniconfig==2.0.0
|
|
35
35
|
Requires-Dist: jaraco.classes==3.4.0
|
|
@@ -48,7 +48,7 @@ Requires-Dist: mergedeep==1.3.4
|
|
|
48
48
|
Requires-Dist: mkdocs==1.6.0
|
|
49
49
|
Requires-Dist: mkdocs-get-deps==0.2.0
|
|
50
50
|
Requires-Dist: more-itertools==10.3.0
|
|
51
|
-
Requires-Dist: multiurl==0.3.
|
|
51
|
+
Requires-Dist: multiurl==0.3.2
|
|
52
52
|
Requires-Dist: mypy==1.10.1
|
|
53
53
|
Requires-Dist: mypy-extensions==1.0.0
|
|
54
54
|
Requires-Dist: nh3==0.2.17
|
|
@@ -65,7 +65,7 @@ Requires-Dist: platformdirs==4.2.2
|
|
|
65
65
|
Requires-Dist: plotly==5.22.0
|
|
66
66
|
Requires-Dist: pluggy==1.5.0
|
|
67
67
|
Requires-Dist: Pygments==2.18.0
|
|
68
|
-
Requires-Dist: pyogrio==0.
|
|
68
|
+
Requires-Dist: pyogrio==0.10.0
|
|
69
69
|
Requires-Dist: pyparsing==3.1.2
|
|
70
70
|
Requires-Dist: pyproj==3.6.1
|
|
71
71
|
Requires-Dist: pyproject_hooks==1.1.0
|
|
@@ -81,19 +81,18 @@ Requires-Dist: requests==2.32.3
|
|
|
81
81
|
Requires-Dist: requests-toolbelt==1.0.0
|
|
82
82
|
Requires-Dist: rfc3986==2.0.0
|
|
83
83
|
Requires-Dist: rich==13.7.1
|
|
84
|
-
Requires-Dist: setuptools==70.2.0
|
|
85
84
|
Requires-Dist: shapely==2.0.4
|
|
86
85
|
Requires-Dist: six==1.16.0
|
|
87
|
-
Requires-Dist: soupsieve==2.
|
|
86
|
+
Requires-Dist: soupsieve==2.6
|
|
88
87
|
Requires-Dist: tenacity==8.4.2
|
|
89
88
|
Requires-Dist: toml==0.10.2
|
|
90
|
-
Requires-Dist:
|
|
91
|
-
Requires-Dist:
|
|
92
|
-
Requires-Dist: types-
|
|
89
|
+
Requires-Dist: tomli==2.0.1
|
|
90
|
+
Requires-Dist: tqdm==4.66.5
|
|
91
|
+
Requires-Dist: types-beautifulsoup4==4.12.0.20241020
|
|
92
|
+
Requires-Dist: types-html5lib==1.1.11.20241018
|
|
93
93
|
Requires-Dist: types-openpyxl==3.1.5.20240630
|
|
94
94
|
Requires-Dist: types-pytz==2024.1.0.20240417
|
|
95
95
|
Requires-Dist: types-requests==2.32.0.20240622
|
|
96
|
-
Requires-Dist: types-toml==0.10.8.20240310
|
|
97
96
|
Requires-Dist: typing_extensions==4.12.2
|
|
98
97
|
Requires-Dist: tzdata==2024.1
|
|
99
98
|
Requires-Dist: urllib3==2.2.2
|
|
@@ -154,7 +153,8 @@ The docmentation can be found [here](https://tno.github.io/ChaProEV/)
|
|
|
154
153
|
|
|
155
154
|
### **Driver**
|
|
156
155
|
The primary driver for the publication and development of ChaProEV in this
|
|
157
|
-
repository is the participation in the
|
|
156
|
+
repository is the participation in the
|
|
157
|
+
[Mopo](https://www.tools-for-energy-system-modelling.org/) project (funded from
|
|
158
158
|
European Climate,
|
|
159
159
|
Infrastructure and Environment Executive Agency under the European Union’s
|
|
160
160
|
HORIZON Research and Innovation Actions under grant agreement N°101095998).
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
attrs==
|
|
1
|
+
attrs==24.2.0
|
|
2
2
|
beautifulsoup4==4.12.3
|
|
3
3
|
black==24.10.0
|
|
4
4
|
build==1.2.1
|
|
5
|
-
cads-api-client==1.
|
|
6
|
-
cdsapi==0.7.
|
|
5
|
+
cads-api-client==1.4.6
|
|
6
|
+
cdsapi==0.7.3
|
|
7
7
|
certifi==2024.6.2
|
|
8
8
|
charset-normalizer==3.3.2
|
|
9
9
|
click==8.1.7
|
|
@@ -13,11 +13,11 @@ cycler==0.12.1
|
|
|
13
13
|
docutils==0.21.2
|
|
14
14
|
docx==0.2.4
|
|
15
15
|
et-xmlfile==1.1.0
|
|
16
|
-
ETS_CookBook==1.0.
|
|
16
|
+
ETS_CookBook==1.0.32
|
|
17
17
|
fonttools==4.53.0
|
|
18
18
|
geopandas==1.0.1
|
|
19
19
|
ghp-import==2.1.0
|
|
20
|
-
idna==3.
|
|
20
|
+
idna==3.10
|
|
21
21
|
importlib_metadata==8.0.0
|
|
22
22
|
iniconfig==2.0.0
|
|
23
23
|
jaraco.classes==3.4.0
|
|
@@ -36,7 +36,7 @@ mergedeep==1.3.4
|
|
|
36
36
|
mkdocs==1.6.0
|
|
37
37
|
mkdocs-get-deps==0.2.0
|
|
38
38
|
more-itertools==10.3.0
|
|
39
|
-
multiurl==0.3.
|
|
39
|
+
multiurl==0.3.2
|
|
40
40
|
mypy==1.10.1
|
|
41
41
|
mypy-extensions==1.0.0
|
|
42
42
|
nh3==0.2.17
|
|
@@ -53,7 +53,7 @@ platformdirs==4.2.2
|
|
|
53
53
|
plotly==5.22.0
|
|
54
54
|
pluggy==1.5.0
|
|
55
55
|
Pygments==2.18.0
|
|
56
|
-
pyogrio==0.
|
|
56
|
+
pyogrio==0.10.0
|
|
57
57
|
pyparsing==3.1.2
|
|
58
58
|
pyproj==3.6.1
|
|
59
59
|
pyproject_hooks==1.1.0
|
|
@@ -69,19 +69,18 @@ requests==2.32.3
|
|
|
69
69
|
requests-toolbelt==1.0.0
|
|
70
70
|
rfc3986==2.0.0
|
|
71
71
|
rich==13.7.1
|
|
72
|
-
setuptools==70.2.0
|
|
73
72
|
shapely==2.0.4
|
|
74
73
|
six==1.16.0
|
|
75
|
-
soupsieve==2.
|
|
74
|
+
soupsieve==2.6
|
|
76
75
|
tenacity==8.4.2
|
|
77
76
|
toml==0.10.2
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
types-
|
|
77
|
+
tomli==2.0.1
|
|
78
|
+
tqdm==4.66.5
|
|
79
|
+
types-beautifulsoup4==4.12.0.20241020
|
|
80
|
+
types-html5lib==1.1.11.20241018
|
|
81
81
|
types-openpyxl==3.1.5.20240630
|
|
82
82
|
types-pytz==2024.1.0.20240417
|
|
83
83
|
types-requests==2.32.0.20240622
|
|
84
|
-
types-toml==0.10.8.20240310
|
|
85
84
|
typing_extensions==4.12.2
|
|
86
85
|
tzdata==2024.1
|
|
87
86
|
urllib3==2.2.2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|