core-lens 0.1.dev194__tar.gz → 0.1.dev197__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 (94) hide show
  1. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/PKG-INFO +1 -1
  2. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/_version.py +2 -2
  3. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/base/entity.py +14 -3
  4. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/base/namespaces/stats.py +3 -3
  5. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/utils/polars_utils.py +1 -7
  6. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/utils/spatial.py +16 -3
  7. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/uv.lock +21 -20
  8. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.github/ISSUE_TEMPLATE/blank-proposal.yaml +0 -0
  9. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
  10. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
  11. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.github/pull_request_template.md +0 -0
  12. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.github/workflows/ci.yml +0 -0
  13. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.github/workflows/gh-pages.yml +0 -0
  14. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.github/workflows/pre-release.yml +0 -0
  15. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.github/workflows/release.yml +0 -0
  16. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.gitignore +0 -0
  17. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.gitmessage +0 -0
  18. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.pre-commit-config.yaml +0 -0
  19. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/.python-version +0 -0
  20. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/CONTRIBUTING.md +0 -0
  21. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/LICENSE +0 -0
  22. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/README.md +0 -0
  23. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/SKILLS.md +0 -0
  24. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/README.md +0 -0
  25. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_aoi.py +0 -0
  26. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_entity.py +0 -0
  27. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_export.py +0 -0
  28. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_polars_utils.py +0 -0
  29. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_result.py +0 -0
  30. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_schema.py +0 -0
  31. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_season.py +0 -0
  32. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_spatial.py +0 -0
  33. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/bench_view.py +0 -0
  34. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/benchmarks/run_all.sh +0 -0
  35. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/Makefile +0 -0
  36. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/make.bat +0 -0
  37. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/concepts.md +0 -0
  38. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/conf.py +0 -0
  39. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/export.md +0 -0
  40. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/index.rst +0 -0
  41. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/intro.md +0 -0
  42. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/logging.md +0 -0
  43. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/plots.md +0 -0
  44. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/plugins.md +0 -0
  45. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/queries.md +0 -0
  46. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/quickstart.md +0 -0
  47. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/docs/source/stats.md +0 -0
  48. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/examples/demo_mws.py +0 -0
  49. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/examples/demo_tehsil.py +0 -0
  50. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/hooks/mypy.sh +0 -0
  51. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/hooks/no-parquet-outside-fixtures.sh +0 -0
  52. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/hooks/pytest.sh +0 -0
  53. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/pyproject.toml +0 -0
  54. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/__init__.py +0 -0
  55. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/__main__.py +0 -0
  56. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/aoi.py +0 -0
  57. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/base/__init__.py +0 -0
  58. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/base/namespaces/__init__.py +0 -0
  59. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/base/namespaces/plot.py +0 -0
  60. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/base/result.py +0 -0
  61. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/base/view.py +0 -0
  62. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/entities/__init__.py +0 -0
  63. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/entities/farms.py +0 -0
  64. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/entities/mws.py +0 -0
  65. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/entities/tehsil.py +0 -0
  66. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/entities/waterbody.py +0 -0
  67. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/export/__init__.py +0 -0
  68. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/export/formats.py +0 -0
  69. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/py.typed +0 -0
  70. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/schema/__init__.py +0 -0
  71. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/schema/detection.py +0 -0
  72. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/schema/profile.py +0 -0
  73. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/utils/__init__.py +0 -0
  74. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/utils/paths.py +0 -0
  75. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/src/core_lens/utils/season.py +0 -0
  76. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/fixtures/generate_fixtures.py +0 -0
  77. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/conftest.py +0 -0
  78. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_aoi.py +0 -0
  79. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_entities.py +0 -0
  80. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_entity.py +0 -0
  81. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_export.py +0 -0
  82. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_main.py +0 -0
  83. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_plot.py +0 -0
  84. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_polars_utils.py +0 -0
  85. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_profile.py +0 -0
  86. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_result.py +0 -0
  87. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_schema_detection.py +0 -0
  88. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_schema_profile.py +0 -0
  89. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_season.py +0 -0
  90. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_season_config.py +0 -0
  91. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_spatial.py +0 -0
  92. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_stats.py +0 -0
  93. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/tests/unit/test_view.py +0 -0
  94. {core_lens-0.1.dev194 → core_lens-0.1.dev197}/usage.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: core-lens
3
- Version: 0.1.dev194
3
+ Version: 0.1.dev197
4
4
  Summary: Query, analyse, and visualise CoreStack's microwatershed and Earth science data through a clean, composable Python API.
5
5
  Project-URL: Homepage, https://github.com/ApoorvaKashyap/core-lens
6
6
  Project-URL: Issues, https://github.com/ApoorvaKashyap/core-lens/issues
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.1.dev194'
22
- __version_tuple__ = version_tuple = (0, 1, 'dev194')
21
+ __version__ = version = '0.1.dev197'
22
+ __version_tuple__ = version_tuple = (0, 1, 'dev197')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -475,7 +475,11 @@ class BaseEntity(ABC):
475
475
  )
476
476
 
477
477
  # --- Combine attribute and spatial filters into a single lazy pipeline ---
478
- lf = pl.scan_parquet(parquet_scan_path(static))
478
+ _so = self._storage_options or {}
479
+ lf = pl.scan_parquet(
480
+ parquet_scan_path(static),
481
+ storage_options=_so or None,
482
+ )
479
483
 
480
484
  if attr_kwargs:
481
485
  filter_expr = pl.lit(True)
@@ -510,11 +514,18 @@ class BaseEntity(ABC):
510
514
 
511
515
  lookup_geoms = []
512
516
  for entity_kwarg_name, entity_kwarg_val in entity_kwargs.items():
513
- other_entity = _REGISTRY[entity_kwarg_name](data_root=self._data_root)
517
+ other_entity = _REGISTRY[entity_kwarg_name](
518
+ data_root=self._data_root,
519
+ storage_options=self._storage_options,
520
+ )
514
521
  other_profile = other_entity.schema_profile
515
522
  other_static = other_entity._resolve(other_entity.static_path)
516
523
 
517
- other_lf = pl.scan_parquet(other_static)
524
+ other_so = other_entity._storage_options or {}
525
+ other_lf = pl.scan_parquet(
526
+ other_static,
527
+ storage_options=other_so or None,
528
+ )
518
529
  match_expr = pl.lit(False)
519
530
  other_schema = cached_read_schema(
520
531
  other_static, other_entity._storage_options
@@ -1045,9 +1045,9 @@ class StatsNamespace:
1045
1045
  26 if len(full_vals) >= 52 else max(2, len(full_vals) // 2)
1046
1046
  )
1047
1047
  min_required = 2 * period
1048
- min_reliable = (
1049
- 3 * period
1050
- ) # want ~3 cycles minimum for a trustworthy seasonal fit, not just 2
1048
+ # min_reliable = (
1049
+ # 3 * period
1050
+ # ) # want ~3 cycles minimum for a trustworthy seasonal fit, not just 2
1051
1051
 
1052
1052
  # if len(full_vals) < min_reliable:
1053
1053
  # warnings.warn(
@@ -150,12 +150,7 @@ def scan_with_key_filter(
150
150
  2. **Time filter** — an optional Polars expression appended with ``&``,
151
151
  pushed down when the Parquet file carries min/max column statistics.
152
152
 
153
- ``use_statistics=True`` and ``parallel="columns"`` are set explicitly on
154
- the underlying ``pl.scan_parquet`` call so that:
155
-
156
- * Row-group skipping via Parquet min/max statistics is always active.
157
- * On wide Parquet files, column chunks within each row group are fetched
158
- concurrently instead of serially — reduces round trips on S3.
153
+ ``use_statistics=True`` is set explicitly on the underlying ``pl.scan_parquet`` call so that row-group skipping via Parquet min/max statistics is always active.
159
154
 
160
155
  Args:
161
156
  path (str): Absolute path or cloud URI to a Parquet file.
@@ -176,7 +171,6 @@ def scan_with_key_filter(
176
171
  path,
177
172
  hive_partitioning=True,
178
173
  use_statistics=True,
179
- parallel="columns",
180
174
  storage_options=_so or None,
181
175
  )
182
176
 
@@ -668,11 +668,15 @@ def execute_spatial_join(
668
668
  ):
669
669
  # Pre-filter other_entity using its in-memory bounding box index
670
670
  candidates = bbox_intersects_geometry(other_entity._index, primary_total_box)
671
+ other_so = getattr(other_entity, "_storage_options", None) or {}
671
672
  if candidates.is_empty():
672
673
  other_df = pl.DataFrame(schema={c: pl.Utf8 for c in other_cols})
673
674
  else:
674
675
  other_df = (
675
- pl.scan_parquet(other_static)
676
+ pl.scan_parquet(
677
+ other_static,
678
+ storage_options=other_so or None,
679
+ )
676
680
  .select(other_cols)
677
681
  .join(
678
682
  candidates.select(other_key_cols).lazy(),
@@ -682,7 +686,12 @@ def execute_spatial_join(
682
686
  .collect()
683
687
  )
684
688
  else:
685
- other_df = pl.read_parquet(other_static, columns=other_cols)
689
+ other_so = getattr(other_entity, "_storage_options", None) or {}
690
+ other_df = pl.read_parquet(
691
+ other_static,
692
+ columns=other_cols,
693
+ storage_options=other_so or None,
694
+ )
686
695
 
687
696
  if other_df.is_empty():
688
697
  other_geoms = np.array([])
@@ -847,8 +856,12 @@ def point_in_entities(
847
856
  key_cols: list[str] = entity.key_cols
848
857
  static_path: str = entity._resolve(entity.static_path)
849
858
 
859
+ so = getattr(entity, "_storage_options", None) or {}
850
860
  geom_df = (
851
- pl.scan_parquet(parquet_scan_path(static_path))
861
+ pl.scan_parquet(
862
+ parquet_scan_path(static_path),
863
+ storage_options=so or None,
864
+ )
852
865
  .select(key_cols + [geom_col])
853
866
  .join(candidates.select(key_cols).lazy(), on=key_cols, how="semi")
854
867
  .collect()
@@ -3275,14 +3275,14 @@ wheels = [
3275
3275
 
3276
3276
  [[package]]
3277
3277
  name = "python-discovery"
3278
- version = "1.5.1"
3278
+ version = "1.6.2"
3279
3279
  source = { registry = "https://pypi.org/simple" }
3280
3280
  dependencies = [
3281
3281
  { name = "filelock" },
3282
3282
  ]
3283
- sdist = { url = "https://files.pythonhosted.org/packages/04/b7/1581a8103855c43567776aa34135e5ec3c597346c23bfd10c7eb5e0b10a4/python_discovery-1.5.1.tar.gz", hash = "sha256:e2ea8b884cd1701f386eda8cf327b87743f1dc21b7f784470799537d95635384", size = 77200, upload-time = "2026-07-31T22:06:02.48Z" }
3283
+ sdist = { url = "https://files.pythonhosted.org/packages/b0/73/54993df8fc57e906dc9b7e01d1d9b0b2d3eb0ce3190639e33dccb12853f7/python_discovery-1.6.2.tar.gz", hash = "sha256:cd1738ca1d37c86ef9d0b654dd46fcee1e41c97c6add12575e8501ced39afdb4", size = 86921, upload-time = "2026-10-10T01:24:27.912Z" }
3284
3284
  wheels = [
3285
- { url = "https://files.pythonhosted.org/packages/6a/07/a89b539750a159d5101c4eb9fc84e2961f65cefbd5e0b7440b284471c0b0/python_discovery-1.5.1-py3-none-any.whl", hash = "sha256:ac07f44cade589d954e9d6a1e1468539fdddd2cf676beb51da73e0f156b7c932", size = 35752, upload-time = "2026-07-31T22:06:01.116Z" },
3285
+ { url = "https://files.pythonhosted.org/packages/61/3b/50ed32583bfffa737df67d33b9c15d7b25df232c55ab606d059f610ef6ca/python_discovery-1.6.2-py3-none-any.whl", hash = "sha256:f0c697f95a3aaec4174a6e5e58f5885e25768684bafc76f1afde384709ebdcf2", size = 38912, upload-time = "2026-10-10T01:24:26.721Z" },
3286
3286
  ]
3287
3287
 
3288
3288
  [[package]]
@@ -3987,19 +3987,19 @@ wheels = [
3987
3987
 
3988
3988
  [[package]]
3989
3989
  name = "tornado"
3990
- version = "6.5.8"
3990
+ version = "6.5.10"
3991
3991
  source = { registry = "https://pypi.org/simple" }
3992
- sdist = { url = "https://files.pythonhosted.org/packages/10/d3/343e5bb989d6515b1646cf3d40135d73f3d5e45339bded401b56cdac24dd/tornado-6.5.8.tar.gz", hash = "sha256:9452e1b208a8bd771e2cb1f2ff564985b9b214bdebbe622793e1799e0a6bd23f", size = 520493, upload-time = "2026-08-07T02:12:42.971Z" }
3992
+ sdist = { url = "https://files.pythonhosted.org/packages/06/61/53d562a57b28c08eda40b258c0f975e360541943ad7c7bef897a40caafda/tornado-6.5.10.tar.gz", hash = "sha256:a6b1ccd08c04b4a06fb5aeb381be99de5ad1e5375c1785e31d78c880feb57687", size = 537910, upload-time = "2026-09-15T13:47:48.73Z" }
3993
3993
  wheels = [
3994
- { url = "https://files.pythonhosted.org/packages/f2/d5/007086fd8df5489338e204f65adce33fd4f21a4999dbb2b9cff2f897b5f4/tornado-6.5.8-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:cc6aa787d7cfab7c3d35189dc7a56fbd2399a569624c730c6b55b3d6531d0403", size = 449487, upload-time = "2026-08-07T02:12:28.682Z" },
3995
- { url = "https://files.pythonhosted.org/packages/70/c8/5a24a99495903f594f6a199dd7beead1cbc0a13e2cb9102727bcaaf2a997/tornado-6.5.8-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9715b5eb79735b2bcd454ce216a9275b7c0470e64ea1bf5742f78b2f72b26eeb", size = 447649, upload-time = "2026-08-07T02:12:30.306Z" },
3996
- { url = "https://files.pythonhosted.org/packages/6e/de/f2e733f386b85962d1b1dc82cd63d169b5b4580062b35397eac9244a41fe/tornado-6.5.8-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:547d63f450d570c14fe0e8db2cfb14c9bbd1c2503b4a6612586267955aa47b58", size = 450707, upload-time = "2026-08-07T02:12:31.95Z" },
3997
- { url = "https://files.pythonhosted.org/packages/0b/94/20efeee9a01c141e9ac47c397f81679dfda24b32768fc4fff24e76d36c2c/tornado-6.5.8-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e2360a0ffbe145eca8af0b19cb7203d79b1a98dd4cccdd6b368f6f49c2e3808", size = 451677, upload-time = "2026-08-07T02:12:33.512Z" },
3998
- { url = "https://files.pythonhosted.org/packages/42/ec/a96ccb8ccf0de2b7bc2c5fa1608a4803735018242e90c4882365a9fd418f/tornado-6.5.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:5d242290bdf7ab3151bc1065fdd75c0dcc21cbc7b49f22a4c56329c2d6566d22", size = 451510, upload-time = "2026-08-07T02:12:35.346Z" },
3999
- { url = "https://files.pythonhosted.org/packages/29/b5/93185859245ad3f00e62175f29607346788b696369347f0146e0421286bb/tornado-6.5.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7b94ff0e128fe0542f3bd331fb44d06260fc4ac16881545159f34ef08aad4195", size = 450917, upload-time = "2026-08-07T02:12:36.963Z" },
4000
- { url = "https://files.pythonhosted.org/packages/97/cf/fe33cf062834487d34d1559746a4a12521033c22645b6d74d4bca702e018/tornado-6.5.8-cp39-abi3-win32.whl", hash = "sha256:67832909c4779c64942380cb5f044a5c6163d00831472d80e25e115de9917836", size = 451952, upload-time = "2026-08-07T02:12:38.512Z" },
4001
- { url = "https://files.pythonhosted.org/packages/cb/e1/468ad54333e92ccb62627e62cb88e5fc14a2171daa67ed47b1b8542d5b86/tornado-6.5.8-cp39-abi3-win_amd64.whl", hash = "sha256:11881db6b7c168494be2c2d12e65931451bdf7ee718535418ae1d8855dd5a0ee", size = 452391, upload-time = "2026-08-07T02:12:39.971Z" },
4002
- { url = "https://files.pythonhosted.org/packages/ad/3e/cd5e4f06e34cde33b8ef66cf36aa2b5ad46354cc1af7d2136bbe365fee1d/tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26", size = 451411, upload-time = "2026-08-07T02:12:41.469Z" },
3994
+ { url = "https://files.pythonhosted.org/packages/cd/5b/ff5fc58fa2427c30dea74c90053f4fc5eda1e7f3833ed3ecc7147fe2b311/tornado-6.5.10-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:9261783640e23258694a9ff0795df430a5a7b0a651d3dd53dd0969ad6be16da7", size = 465883, upload-time = "2026-09-15T13:47:35.463Z" },
3995
+ { url = "https://files.pythonhosted.org/packages/ad/f5/cd7be26c34a3315532f3aef5f092465da8f59c334dd439d3c14aaef16461/tornado-6.5.10-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:83e6cf438b106c6b3852d70960967bb1b70c87438050dca0981e4b9aa751a4c1", size = 464046, upload-time = "2026-09-15T13:47:37.178Z" },
3996
+ { url = "https://files.pythonhosted.org/packages/60/33/df6d7d04854a58619f8349a51e3edb138324130a7562b0bb21f115bb940f/tornado-6.5.10-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bdf942448169e5336451d0494d7e3d81cfa726d5aa312affdc4682dd62a62f6d", size = 467096, upload-time = "2026-09-15T13:47:38.559Z" },
3997
+ { url = "https://files.pythonhosted.org/packages/29/17/cc35dff68272d685cffd8600ffafbd8067e7d05e7348d9f80caddffbbd5f/tornado-6.5.10-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69acca6501eed74582b76dbbceee2a91613f54728e3e418346000d7103101676", size = 468067, upload-time = "2026-09-15T13:47:40.085Z" },
3998
+ { url = "https://files.pythonhosted.org/packages/c3/01/6e5349b4e1a53a4b4972a6716785e1fe7407f312063c3972690af8ff301b/tornado-6.5.10-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:66aaa3f57d30c6e6becee83ff28055d5930ac724214bde99393eefda83d5e015", size = 467901, upload-time = "2026-09-15T13:47:41.576Z" },
3999
+ { url = "https://files.pythonhosted.org/packages/28/5e/b4facf94370dba006819c8d304376f8b9fbec6b935b5e51bf45823a9790b/tornado-6.5.10-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4bd192b959f9128fb99b8898148070ba4574c9589b78bce42d1851131fe85828", size = 467308, upload-time = "2026-09-15T13:47:43.145Z" },
4000
+ { url = "https://files.pythonhosted.org/packages/56/ae/047938e828cafc8eca4c908fafb6588fee944e3af39a0af9d7b602499ae5/tornado-6.5.10-cp39-abi3-win32.whl", hash = "sha256:302eb1e0e3e159314eb591920529fdea80acca92df5510a2cec5bbd4f099ec72", size = 468387, upload-time = "2026-09-15T13:47:44.556Z" },
4001
+ { url = "https://files.pythonhosted.org/packages/d8/d4/5901517f05affd752490f6a654ba31b7474664e8dd80bd045a00c220bd88/tornado-6.5.10-cp39-abi3-win_amd64.whl", hash = "sha256:37ae8f150cecfdbf747fc4e12f5e9a97ecd8cf1d4cdb3f119e2de84b11196918", size = 468828, upload-time = "2026-09-15T13:47:45.961Z" },
4002
+ { url = "https://files.pythonhosted.org/packages/f3/1a/fd497f3a7f7b74bb04f4b94536b5c9f80742b5d50501fd27977652ddec16/tornado-6.5.10-cp39-abi3-win_arm64.whl", hash = "sha256:ce045d3c298fddd30e89a2777f97039d1b641eb9518ac7b26a4721903539c694", size = 467847, upload-time = "2026-09-15T13:47:47.283Z" },
4003
4003
  ]
4004
4004
 
4005
4005
  [[package]]
@@ -4106,11 +4106,11 @@ wheels = [
4106
4106
 
4107
4107
  [[package]]
4108
4108
  name = "urllib3"
4109
- version = "2.7.0"
4109
+ version = "2.8.0"
4110
4110
  source = { registry = "https://pypi.org/simple" }
4111
- sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
4111
+ sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" }
4112
4112
  wheels = [
4113
- { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
4113
+ { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" },
4114
4114
  ]
4115
4115
 
4116
4116
  [[package]]
@@ -4128,17 +4128,18 @@ wheels = [
4128
4128
 
4129
4129
  [[package]]
4130
4130
  name = "virtualenv"
4131
- version = "21.7.3"
4131
+ version = "21.14.7"
4132
4132
  source = { registry = "https://pypi.org/simple" }
4133
4133
  dependencies = [
4134
4134
  { name = "distlib" },
4135
4135
  { name = "filelock" },
4136
+ { name = "packaging" },
4136
4137
  { name = "platformdirs" },
4137
4138
  { name = "python-discovery" },
4138
4139
  ]
4139
- sdist = { url = "https://files.pythonhosted.org/packages/9c/10/8b7a5454efc032be50c1c5641467dbb5d31314500205212b2aa66d3c8af4/virtualenv-21.7.3.tar.gz", hash = "sha256:5e9e287f5c808070eea3b40403d3368248e64b24f1b60bd9a36e85ac841d2c3e", size = 5525482, upload-time = "2026-08-08T14:43:20.286Z" }
4140
+ sdist = { url = "https://files.pythonhosted.org/packages/dc/3f/935cf1757643381fb7f7cc98197b4bc119223d9c2cf37dc3b03ad2a4455f/virtualenv-21.14.7.tar.gz", hash = "sha256:5f427d56f39eb7e7447d641dd4b7ab1e9c92793f498f35f26da2e4972c5546ae", size = 5471741, upload-time = "2026-10-12T01:27:31.842Z" }
4140
4141
  wheels = [
4141
- { url = "https://files.pythonhosted.org/packages/77/2a/83d779d2dfb61f101d7b1c10073d18984e37262d8b4f171c99911a952430/virtualenv-21.7.3-py3-none-any.whl", hash = "sha256:26dfda3c34f29bf1a3ca167426a67658d59979b9954e705aef60a5f724ce1773", size = 5504590, upload-time = "2026-08-08T14:43:18.57Z" },
4142
+ { url = "https://files.pythonhosted.org/packages/52/5b/799c3e5b8e04d5fa1c9b61a4c1f5079603e747205c7311b92abd30283df5/virtualenv-21.14.7-py3-none-any.whl", hash = "sha256:3769219a308c5d2f093e7729621ad12a6346b5767a7ec4338414e2a0fb0c526b", size = 5487587, upload-time = "2026-10-12T01:27:29.37Z" },
4142
4143
  ]
4143
4144
 
4144
4145
  [[package]]
File without changes
File without changes
File without changes
File without changes