r5py 1.0.0.dev0__tar.gz → 1.0.0.dev3__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.
Potentially problematic release.
This version of r5py might be problematic. Click here for more details.
- {r5py-1.0.0.dev0/src/r5py.egg-info → r5py-1.0.0.dev3}/PKG-INFO +3 -6
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/pyproject.toml +4 -6
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/__init__.py +1 -1
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/travel_time_matrix.py +5 -6
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/classpath.py +2 -2
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/config.py +3 -3
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/sample_data_set.py +4 -1
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3/src/r5py.egg-info}/PKG-INFO +3 -6
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py.egg-info/requires.txt +0 -2
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_travel_time_matrix.py +48 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/LICENSE +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/README.md +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/setup.cfg +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/__main__.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/__init__.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/access_leg.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/base_travel_time_matrix.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/breakdown_stat.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/detailed_itineraries.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/direct_leg.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/egress_leg.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/regional_task.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/scenario.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/street_layer.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/transfer_leg.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/transit_layer.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/transit_leg.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/transport_mode.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/transport_network.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/trip.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/trip_leg.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/r5/trip_planner.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/__init__.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/camel_to_snake_case.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/contains_gtfs_data.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/data_validation.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/environment.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/exceptions.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/good_enough_equidistant_crs.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/jvm.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/memory_footprint.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/parse_int_date.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/snake_to_camel_case.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/validating_requests_session.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py/util/warnings.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py.egg-info/SOURCES.txt +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py.egg-info/dependency_links.txt +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/src/r5py.egg-info/top_level.txt +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_breakdownstats.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_camel_to_snake_case.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_classpath.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_config.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_contains_gtfs_data.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_data_validation.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_detailed_itineraries.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_deterministic_behaviour.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_good_enough_equidistant_crs.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_java_casting.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_memory_footprint.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_parse_int_date.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_regional_task.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_sample_data_set.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_snake_to_camel_case.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_street_layer.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_transit_layer.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_transport_mode.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_transport_network.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_trip.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_trip_leg.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_trip_planner.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_validating_request_session.py +0 -0
- {r5py-1.0.0.dev0 → r5py-1.0.0.dev3}/tests/test_verbose_warnings.py +0 -0
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: r5py
|
|
3
|
-
Version: 1.0.0.
|
|
3
|
+
Version: 1.0.0.dev3
|
|
4
4
|
Summary: Python wrapper for the R5 routing analysis engine
|
|
5
|
-
Author: Willem Klumpenhouwer, Marcus Sairava, Rafael Pereira, Henrikki Tenkanen
|
|
6
|
-
Author-email: Christoph Fink <christoph.fink@helsinki.fi>
|
|
5
|
+
Author: Christoph Fink, Willem Klumpenhouwer, Marcus Sairava, Rafael Pereira, Henrikki Tenkanen
|
|
7
6
|
License: GPL-3.0-or-later or MIT
|
|
8
7
|
Project-URL: Documentation, https://r5py.readthedocs.org/
|
|
9
8
|
Project-URL: Repository, https://github.com/r5py/r5py.git
|
|
@@ -21,7 +20,6 @@ Requires-Dist: ConfigArgParse
|
|
|
21
20
|
Requires-Dist: filelock
|
|
22
21
|
Requires-Dist: fiona
|
|
23
22
|
Requires-Dist: geopandas
|
|
24
|
-
Requires-Dist: importlib_resources
|
|
25
23
|
Requires-Dist: joblib
|
|
26
24
|
Requires-Dist: jpype1
|
|
27
25
|
Requires-Dist: numpy
|
|
@@ -52,7 +50,6 @@ Requires-Dist: sphinxcontrib-images; extra == "docs"
|
|
|
52
50
|
Provides-Extra: tests
|
|
53
51
|
Requires-Dist: pyarrow; extra == "tests"
|
|
54
52
|
Requires-Dist: pytest; extra == "tests"
|
|
55
|
-
Requires-Dist: pytest-asyncio; extra == "tests"
|
|
56
53
|
Requires-Dist: pytest-cov; extra == "tests"
|
|
57
54
|
Requires-Dist: pytest-lazy-fixtures; extra == "tests"
|
|
58
55
|
Requires-Dist: r5py.sampledata.helsinki>=0.1.1; extra == "tests"
|
|
@@ -8,7 +8,7 @@ description = "Python wrapper for the R5 routing analysis engine"
|
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
|
|
10
10
|
authors = [
|
|
11
|
-
{ name = "Christoph Fink"
|
|
11
|
+
{ name = "Christoph Fink" },
|
|
12
12
|
{ name = "Willem Klumpenhouwer" },
|
|
13
13
|
{ name = "Marcus Sairava" },
|
|
14
14
|
{ name = "Rafael Pereira" },
|
|
@@ -20,7 +20,6 @@ dependencies = [
|
|
|
20
20
|
"filelock",
|
|
21
21
|
"fiona",
|
|
22
22
|
"geopandas",
|
|
23
|
-
"importlib_resources",
|
|
24
23
|
"joblib",
|
|
25
24
|
"jpype1",
|
|
26
25
|
"numpy",
|
|
@@ -49,9 +48,9 @@ docs = ["contextily", "folium", "GitPython", "h3>=4.0.0b2", "jupyterlab_myst",
|
|
|
49
48
|
"r5py.sampledata.helsinki>=0.1.1", "r5py.sampledata.sao_paulo>=0.1.1",
|
|
50
49
|
"shapely", "sphinx", "sphinx-book-theme", "sphinx-design",
|
|
51
50
|
"sphinxcontrib-bibtex", "sphinxcontrib-images"]
|
|
52
|
-
tests = ["pyarrow", "pytest", "pytest-
|
|
53
|
-
"
|
|
54
|
-
"
|
|
51
|
+
tests = ["pyarrow", "pytest", "pytest-cov", "pytest-lazy-fixtures",
|
|
52
|
+
"r5py.sampledata.helsinki>=0.1.1", "r5py.sampledata.sao_paulo>=0.1.1",
|
|
53
|
+
"typing-extensions"]
|
|
55
54
|
|
|
56
55
|
|
|
57
56
|
[project.urls]
|
|
@@ -81,7 +80,6 @@ filterwarnings = [
|
|
|
81
80
|
"ignore:Successfully downloaded r5-"
|
|
82
81
|
]
|
|
83
82
|
testpaths = ["tests"]
|
|
84
|
-
asyncio_mode = "auto"
|
|
85
83
|
|
|
86
84
|
[tool.setuptools.dynamic]
|
|
87
85
|
version = {attr = "r5py.__version__"}
|
|
@@ -134,17 +134,16 @@ class TravelTimeMatrix(BaseTravelTimeMatrix):
|
|
|
134
134
|
travel time.
|
|
135
135
|
"""
|
|
136
136
|
# First, create an empty DataFrame (this forces column types)
|
|
137
|
-
|
|
138
|
-
"from_id": pandas.Series(dtype=str),
|
|
139
|
-
"to_id": pandas.Series(dtype=str),
|
|
140
|
-
}
|
|
141
|
-
travel_time_columns.update(
|
|
137
|
+
od_matrix = pandas.DataFrame(
|
|
142
138
|
{
|
|
139
|
+
"from_id": pandas.Series(dtype=str),
|
|
140
|
+
"to_id": pandas.Series(dtype=str),
|
|
141
|
+
}
|
|
142
|
+
| {
|
|
143
143
|
f"travel_time_p{percentile:d}": pandas.Series(dtype=float)
|
|
144
144
|
for percentile in self.request.percentiles
|
|
145
145
|
}
|
|
146
146
|
)
|
|
147
|
-
od_matrix = pandas.DataFrame(travel_time_columns)
|
|
148
147
|
|
|
149
148
|
# first assign columns with correct length (`to_id`),
|
|
150
149
|
# only then fill `from_id` (it’s a scalar)
|
|
@@ -18,9 +18,9 @@ from .warnings import R5pyWarning
|
|
|
18
18
|
|
|
19
19
|
# update these to use a newer R5 version if no R5 available locally
|
|
20
20
|
R5_JAR_URL = (
|
|
21
|
-
"https://github.com/r5py/r5/releases/download/v7.
|
|
21
|
+
"https://github.com/r5py/r5/releases/download/v7.3-r5py/r5-v7.3-r5py-all.jar"
|
|
22
22
|
)
|
|
23
|
-
R5_JAR_SHA256 = "
|
|
23
|
+
R5_JAR_SHA256 = "cb1ccad370757ba229cf17f1bedc9549ff5d77fdbb44b7a3058104fe1f243f53"
|
|
24
24
|
# ---
|
|
25
25
|
|
|
26
26
|
|
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
"""Handle configuration options and command line options."""
|
|
4
4
|
|
|
5
5
|
import functools
|
|
6
|
+
import importlib.resources
|
|
6
7
|
import os
|
|
7
8
|
import pathlib
|
|
8
9
|
import sys
|
|
9
10
|
import tempfile
|
|
10
11
|
|
|
11
12
|
import configargparse
|
|
12
|
-
import importlib_resources
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
__all__ = ["Config"]
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
PACKAGE = __package__.split(".")[0]
|
|
19
|
-
CONFIG_FILE_TEMPLATE =
|
|
19
|
+
CONFIG_FILE_TEMPLATE = importlib.resources.files(f"{PACKAGE}.util").joinpath(
|
|
20
20
|
f"{PACKAGE}.yml.template"
|
|
21
21
|
)
|
|
22
22
|
|
|
@@ -116,7 +116,7 @@ class Config:
|
|
|
116
116
|
try:
|
|
117
117
|
destination_path.parent.mkdir(parents=True, exist_ok=True)
|
|
118
118
|
|
|
119
|
-
with
|
|
119
|
+
with importlib.resources.as_file(CONFIG_FILE_TEMPLATE) as template:
|
|
120
120
|
destination_path.write_text(template.read_text())
|
|
121
121
|
|
|
122
122
|
except (
|
|
@@ -20,7 +20,10 @@ class SampleDataSet(pathlib.Path):
|
|
|
20
20
|
|
|
21
21
|
# decide which kind of pathlib.Path we are (Windows, Unix, ...)
|
|
22
22
|
# cf. https://stackoverflow.com/a/66613346/463864
|
|
23
|
-
|
|
23
|
+
try:
|
|
24
|
+
_flavour = type(pathlib.Path())._flavour
|
|
25
|
+
except AttributeError: # Python>=3.13
|
|
26
|
+
pass
|
|
24
27
|
|
|
25
28
|
_CACHE_DIR = pathlib.Path(config.CACHE_DIR) / "sampledata"
|
|
26
29
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: r5py
|
|
3
|
-
Version: 1.0.0.
|
|
3
|
+
Version: 1.0.0.dev3
|
|
4
4
|
Summary: Python wrapper for the R5 routing analysis engine
|
|
5
|
-
Author: Willem Klumpenhouwer, Marcus Sairava, Rafael Pereira, Henrikki Tenkanen
|
|
6
|
-
Author-email: Christoph Fink <christoph.fink@helsinki.fi>
|
|
5
|
+
Author: Christoph Fink, Willem Klumpenhouwer, Marcus Sairava, Rafael Pereira, Henrikki Tenkanen
|
|
7
6
|
License: GPL-3.0-or-later or MIT
|
|
8
7
|
Project-URL: Documentation, https://r5py.readthedocs.org/
|
|
9
8
|
Project-URL: Repository, https://github.com/r5py/r5py.git
|
|
@@ -21,7 +20,6 @@ Requires-Dist: ConfigArgParse
|
|
|
21
20
|
Requires-Dist: filelock
|
|
22
21
|
Requires-Dist: fiona
|
|
23
22
|
Requires-Dist: geopandas
|
|
24
|
-
Requires-Dist: importlib_resources
|
|
25
23
|
Requires-Dist: joblib
|
|
26
24
|
Requires-Dist: jpype1
|
|
27
25
|
Requires-Dist: numpy
|
|
@@ -52,7 +50,6 @@ Requires-Dist: sphinxcontrib-images; extra == "docs"
|
|
|
52
50
|
Provides-Extra: tests
|
|
53
51
|
Requires-Dist: pyarrow; extra == "tests"
|
|
54
52
|
Requires-Dist: pytest; extra == "tests"
|
|
55
|
-
Requires-Dist: pytest-asyncio; extra == "tests"
|
|
56
53
|
Requires-Dist: pytest-cov; extra == "tests"
|
|
57
54
|
Requires-Dist: pytest-lazy-fixtures; extra == "tests"
|
|
58
55
|
Requires-Dist: r5py.sampledata.helsinki>=0.1.1; extra == "tests"
|
|
@@ -2,7 +2,6 @@ ConfigArgParse
|
|
|
2
2
|
filelock
|
|
3
3
|
fiona
|
|
4
4
|
geopandas
|
|
5
|
-
importlib_resources
|
|
6
5
|
joblib
|
|
7
6
|
jpype1
|
|
8
7
|
numpy
|
|
@@ -35,7 +34,6 @@ sphinxcontrib-images
|
|
|
35
34
|
[tests]
|
|
36
35
|
pyarrow
|
|
37
36
|
pytest
|
|
38
|
-
pytest-asyncio
|
|
39
37
|
pytest-cov
|
|
40
38
|
pytest-lazy-fixtures
|
|
41
39
|
r5py.sampledata.helsinki>=0.1.1
|
|
@@ -536,3 +536,51 @@ class TestTravelTimeMatrixComputer:
|
|
|
536
536
|
).compute_travel_times()
|
|
537
537
|
|
|
538
538
|
geopandas.testing.assert_geodataframe_equal(ttm_new, ttm_old)
|
|
539
|
+
|
|
540
|
+
@pytest.mark.parametrize(
|
|
541
|
+
[
|
|
542
|
+
"transport_mode",
|
|
543
|
+
"expected_travel_times",
|
|
544
|
+
],
|
|
545
|
+
[
|
|
546
|
+
(
|
|
547
|
+
r5py.TransportMode.BICYCLE,
|
|
548
|
+
pytest_lazy_fixtures.lf("travel_times_bicycle"),
|
|
549
|
+
),
|
|
550
|
+
(
|
|
551
|
+
r5py.TransportMode.CAR,
|
|
552
|
+
pytest_lazy_fixtures.lf("travel_times_car"),
|
|
553
|
+
),
|
|
554
|
+
(
|
|
555
|
+
r5py.TransportMode.TRANSIT,
|
|
556
|
+
pytest_lazy_fixtures.lf("travel_times_transit"),
|
|
557
|
+
),
|
|
558
|
+
(
|
|
559
|
+
r5py.TransportMode.WALK,
|
|
560
|
+
pytest_lazy_fixtures.lf("travel_times_walk"),
|
|
561
|
+
),
|
|
562
|
+
],
|
|
563
|
+
)
|
|
564
|
+
def test_travel_times_by_transport_mode(
|
|
565
|
+
self,
|
|
566
|
+
transport_network,
|
|
567
|
+
population_grid_points,
|
|
568
|
+
departure_datetime,
|
|
569
|
+
transport_mode,
|
|
570
|
+
expected_travel_times,
|
|
571
|
+
):
|
|
572
|
+
# subset to keep test comparison data sets small
|
|
573
|
+
origins = population_grid_points[::5].copy()
|
|
574
|
+
travel_times = r5py.TravelTimeMatrix(
|
|
575
|
+
transport_network,
|
|
576
|
+
origins=origins,
|
|
577
|
+
departure=departure_datetime,
|
|
578
|
+
transport_modes=[transport_mode],
|
|
579
|
+
)
|
|
580
|
+
|
|
581
|
+
travel_times = travel_times.reset_index(drop=True)
|
|
582
|
+
|
|
583
|
+
pandas.testing.assert_frame_equal(
|
|
584
|
+
travel_times,
|
|
585
|
+
expected_travel_times,
|
|
586
|
+
)
|
|
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
|