tzfpy 2.1.0__tar.gz → 2.1.2__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 (53) hide show
  1. {tzfpy-2.1.0 → tzfpy-2.1.2}/.github/workflows/CI.yml +9 -6
  2. {tzfpy-2.1.0 → tzfpy-2.1.2}/.github/workflows/Test.yml +1 -1
  3. {tzfpy-2.1.0 → tzfpy-2.1.2}/CHANGELOG.md +25 -0
  4. {tzfpy-2.1.0 → tzfpy-2.1.2}/Cargo.lock +35 -35
  5. {tzfpy-2.1.0 → tzfpy-2.1.2}/Cargo.toml +5 -5
  6. {tzfpy-2.1.0 → tzfpy-2.1.2}/PKG-INFO +2 -2
  7. {tzfpy-2.1.0 → tzfpy-2.1.2}/README.md +1 -1
  8. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/tzfpy_with_datetime.py +1 -1
  9. {tzfpy-2.1.0 → tzfpy-2.1.2}/pyproject.toml +1 -1
  10. {tzfpy-2.1.0 → tzfpy-2.1.2}/uv.lock +100 -73
  11. {tzfpy-2.1.0 → tzfpy-2.1.2}/.github/FUNDING.yml +0 -0
  12. {tzfpy-2.1.0 → tzfpy-2.1.2}/.github/dependabot.yml +0 -0
  13. {tzfpy-2.1.0 → tzfpy-2.1.2}/.github/workflows/PublishSimpleIndex.yml +0 -0
  14. {tzfpy-2.1.0 → tzfpy-2.1.2}/.github/workflows/SyncPyPIReleases.yml +0 -0
  15. {tzfpy-2.1.0 → tzfpy-2.1.2}/.github/workflows/UpdateReleaseWheelsCsv.yml +0 -0
  16. {tzfpy-2.1.0 → tzfpy-2.1.2}/.gitignore +0 -0
  17. {tzfpy-2.1.0 → tzfpy-2.1.2}/AGENTS.md +0 -0
  18. {tzfpy-2.1.0 → tzfpy-2.1.2}/BACKUP_INDEX.md +0 -0
  19. {tzfpy-2.1.0 → tzfpy-2.1.2}/LICENSE +0 -0
  20. {tzfpy-2.1.0 → tzfpy-2.1.2}/Makefile +0 -0
  21. {tzfpy-2.1.0 → tzfpy-2.1.2}/NOTICE +0 -0
  22. {tzfpy-2.1.0 → tzfpy-2.1.2}/docs/DATA_CLEAN_2026-03-14/.gitignore +0 -0
  23. {tzfpy-2.1.0 → tzfpy-2.1.2}/docs/DATA_CLEAN_2026-03-14/README.md +0 -0
  24. {tzfpy-2.1.0 → tzfpy-2.1.2}/docs/DATA_CLEAN_2026-03-14/analyze_cleanup_candidates.py +0 -0
  25. {tzfpy-2.1.0 → tzfpy-2.1.2}/docs/DATA_CLEAN_2026-03-14/fetch_pypi_all_files.py +0 -0
  26. {tzfpy-2.1.0 → tzfpy-2.1.2}/docs/DATA_CLEAN_2026-03-14/generate_deletable_files.py +0 -0
  27. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/README.md +0 -0
  28. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/pyproject.toml +0 -0
  29. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/tzfpy_with_arrow.py +0 -0
  30. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/tzfpy_with_dataframe_numpy.py +0 -0
  31. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/tzfpy_with_dataframe_pandas.py +0 -0
  32. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/tzfpy_with_dataframe_polars.py +0 -0
  33. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/tzfpy_with_fastapi.py +0 -0
  34. {tzfpy-2.1.0 → tzfpy-2.1.2}/examples/tzfpy_with_whenever.py +0 -0
  35. {tzfpy-2.1.0 → tzfpy-2.1.2}/py.typed +0 -0
  36. {tzfpy-2.1.0 → tzfpy-2.1.2}/rust-toolchain.toml +0 -0
  37. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/benchmark_index_modes.py +0 -0
  38. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/build_notice.py +0 -0
  39. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/build_simple_index.py +0 -0
  40. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/fetch_pypi_release_files.py +0 -0
  41. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/filter_missing_release_files.py +0 -0
  42. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/measure_memory_timezonefinder.py +0 -0
  43. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/measure_memory_tzfpy.py +0 -0
  44. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/resolve_pypi_versions.py +0 -0
  45. {tzfpy-2.1.0 → tzfpy-2.1.2}/scripts/set_local_version.py +0 -0
  46. {tzfpy-2.1.0 → tzfpy-2.1.2}/src/lib.rs +0 -0
  47. {tzfpy-2.1.0 → tzfpy-2.1.2}/tests/test_basic.py +0 -0
  48. {tzfpy-2.1.0 → tzfpy-2.1.2}/tests/test_bench.py +0 -0
  49. {tzfpy-2.1.0 → tzfpy-2.1.2}/tests/test_build_simple_index.py +0 -0
  50. {tzfpy-2.1.0 → tzfpy-2.1.2}/tests/test_compatibility.py +0 -0
  51. {tzfpy-2.1.0 → tzfpy-2.1.2}/tests/test_exp_index_env.py +0 -0
  52. {tzfpy-2.1.0 → tzfpy-2.1.2}/tests/test_smock.py +0 -0
  53. {tzfpy-2.1.0 → tzfpy-2.1.2}/tzfpy.pyi +0 -0
@@ -221,19 +221,16 @@ jobs:
221
221
  python -m pip install --force-reinstall --no-deps "$wheel"
222
222
  python tests/test_smock.py
223
223
  - uses: actions/setup-python@v7
224
- if: ${{ matrix.platform.target != 'aarch64' }}
225
224
  with:
226
225
  python-version: 3.14t
227
226
  architecture: ${{ matrix.platform.python_arch }}
228
227
  - name: Build free-threaded wheels
229
- if: ${{ matrix.platform.target != 'aarch64' }}
230
228
  uses: PyO3/maturin-action@v1
231
229
  with:
232
230
  target: ${{ matrix.platform.target }}
233
231
  args: --release --out dist -i python3.14t
234
232
  sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
235
233
  - name: Validate cp314t wheel install
236
- if: ${{ matrix.platform.target != 'aarch64' }}
237
234
  shell: bash
238
235
  run: |
239
236
  set -euo pipefail
@@ -392,13 +389,15 @@ jobs:
392
389
  # smoke check.
393
390
  platform: >-
394
391
  ${{ fromJSON((startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch')
395
- && '[{"runner":"ubuntu-22.04","target":"x86_64","manylinux":"auto","suffix":"manylinux"},{"runner":"ubuntu-22.04","target":"aarch64","manylinux":"auto","suffix":"manylinux"},{"runner":"ubuntu-22.04","target":"x86_64","manylinux":"musllinux_1_2","suffix":"musllinux"},{"runner":"ubuntu-22.04","target":"aarch64","manylinux":"musllinux_1_2","suffix":"musllinux"},{"runner":"macos-15","target":"x86_64","manylinux":"auto","suffix":"macos"},{"runner":"macos-15","target":"aarch64","manylinux":"auto","suffix":"macos"},{"runner":"windows-latest","target":"x64","manylinux":"auto","suffix":"windows"}]'
392
+ && '[{"runner":"ubuntu-22.04","target":"x86_64","manylinux":"auto","suffix":"manylinux"},{"runner":"ubuntu-22.04","target":"aarch64","manylinux":"auto","suffix":"manylinux"},{"runner":"ubuntu-22.04","target":"x86_64","manylinux":"musllinux_1_2","suffix":"musllinux"},{"runner":"ubuntu-22.04","target":"aarch64","manylinux":"musllinux_1_2","suffix":"musllinux"},{"runner":"macos-15","target":"x86_64","manylinux":"auto","suffix":"macos"},{"runner":"macos-15","target":"aarch64","manylinux":"auto","suffix":"macos"},{"runner":"windows-latest","target":"x64","manylinux":"auto","suffix":"windows"},{"runner":"windows-11-arm","target":"aarch64","manylinux":"auto","suffix":"windows"}]'
396
393
  || '[{"runner":"ubuntu-22.04","target":"x86_64","manylinux":"auto","suffix":"manylinux"}]') }}
397
394
  steps:
398
395
  - uses: actions/checkout@v7
399
396
  - uses: actions/setup-python@v7
400
397
  with:
401
- python-version: "3.10"
398
+ # GitHub Actions has no Python 3.10 for Windows ARM64 runners; the
399
+ # abi3 wheel still targets 3.10 via `-i python3.10` below.
400
+ python-version: ${{ matrix.platform.runner == 'windows-11-arm' && '3.11' || '3.10' }}
402
401
  - name: Tag the crate version as a `+full` local version
403
402
  shell: bash
404
403
  run: |
@@ -502,11 +501,15 @@ jobs:
502
501
  with:
503
502
  name: wheels-musllinux-aarch64
504
503
  path: dist
505
- - name: Download windows wheel (x64)
504
+ - name: Download windows wheels (x64, aarch64)
506
505
  uses: actions/download-artifact@v8
507
506
  with:
508
507
  name: wheels-windows-x64
509
508
  path: dist
509
+ - uses: actions/download-artifact@v8
510
+ with:
511
+ name: wheels-windows-aarch64
512
+ path: dist
510
513
  - name: Download macOS wheels (x86_64, aarch64)
511
514
  uses: actions/download-artifact@v8
512
515
  with:
@@ -51,7 +51,7 @@ jobs:
51
51
  os: [ubuntu-latest, windows-latest, macos-latest]
52
52
  steps:
53
53
  - uses: actions/checkout@v7
54
- - uses: actions-rust-lang/setup-rust-toolchain@v1
54
+ - uses: actions-rust-lang/setup-rust-toolchain@v2
55
55
 
56
56
  - name: Install uv
57
57
  uses: astral-sh/setup-uv@v7
@@ -3,6 +3,31 @@
3
3
  Release notes for `1.3.3` and earlier live in
4
4
  [GitHub Releases](https://github.com/ringsaturn/tzfpy/releases).
5
5
 
6
+ ## 2.1.2
7
+
8
+ Rust core upgraded from tzf-rs 2.1.3 to 2.1.4, and the dataset from `2026e` to
9
+ `2026f` (tzf-dist `0.0.2026-f`). No Python API change.
10
+
11
+ ### Data
12
+
13
+ - `data_version()` now returns `"2026f"`. The upstream
14
+ [timezone-boundary-builder 2026f](https://github.com/evansiroky/timezone-boundary-builder/releases/tag/2026f)
15
+ release refreshes the OSM boundary data and recalculates the since-1970 /
16
+ since-now zone sets against the current tz database.
17
+
18
+ ## 2.1.1
19
+
20
+ Rust core upgraded from tzf-rs 2.1.2 to 2.1.3, and the dataset from `2026d` to
21
+ `2026e` (tzf-dist `0.0.2026-e`). No Python API change.
22
+
23
+ ### Data
24
+
25
+ - `data_version()` now returns `"2026e"`. The upstream
26
+ [timezone-boundary-builder 2026e](https://github.com/evansiroky/timezone-boundary-builder/releases/tag/2026e)
27
+ release refreshes the OSM boundary data, limits `Pacific/Easter` to Chilean
28
+ territorial waters, and recalculates the since-1970 / since-now zone sets
29
+ against the current tz database.
30
+
6
31
  ## 2.1.0
7
32
 
8
33
  Rust core upgraded from tzf-rs 2.0.0 to 2.1.2, and the dataset from `2026c` to
@@ -25,15 +25,15 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
25
25
 
26
26
  [[package]]
27
27
  name = "lazy_static"
28
- version = "1.5.0"
28
+ version = "1.5.1"
29
29
  source = "registry+https://github.com/rust-lang/crates.io-index"
30
- checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
30
+ checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb"
31
31
 
32
32
  [[package]]
33
33
  name = "libc"
34
- version = "0.2.189"
34
+ version = "0.2.191"
35
35
  source = "registry+https://github.com/rust-lang/crates.io-index"
36
- checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
36
+ checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"
37
37
 
38
38
  [[package]]
39
39
  name = "memchr"
@@ -70,9 +70,9 @@ dependencies = [
70
70
 
71
71
  [[package]]
72
72
  name = "pyo3"
73
- version = "0.29.2"
73
+ version = "0.29.3"
74
74
  source = "registry+https://github.com/rust-lang/crates.io-index"
75
- checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
75
+ checksum = "700d18fa267b73b9b521fd7e13580e2f446916f176cacee1ab63fcc8191f1655"
76
76
  dependencies = [
77
77
  "libc",
78
78
  "once_cell",
@@ -84,18 +84,18 @@ dependencies = [
84
84
 
85
85
  [[package]]
86
86
  name = "pyo3-build-config"
87
- version = "0.29.2"
87
+ version = "0.29.3"
88
88
  source = "registry+https://github.com/rust-lang/crates.io-index"
89
- checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
89
+ checksum = "7b3fc0c4d08f6bb10e71fe39dfb9e2f59c6eb6854e22ec8092f50c69a4499adb"
90
90
  dependencies = [
91
91
  "target-lexicon",
92
92
  ]
93
93
 
94
94
  [[package]]
95
95
  name = "pyo3-ffi"
96
- version = "0.29.2"
96
+ version = "0.29.3"
97
97
  source = "registry+https://github.com/rust-lang/crates.io-index"
98
- checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
98
+ checksum = "dfc0b8e19df29aad7086cf977bb0c2a2f143e30567eb113e9cf72b62ca698330"
99
99
  dependencies = [
100
100
  "libc",
101
101
  "pyo3-build-config",
@@ -103,9 +103,9 @@ dependencies = [
103
103
 
104
104
  [[package]]
105
105
  name = "pyo3-macros"
106
- version = "0.29.2"
106
+ version = "0.29.3"
107
107
  source = "registry+https://github.com/rust-lang/crates.io-index"
108
- checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
108
+ checksum = "6100e8a4b5eba53afaa5ed078364851a0b2499c553a44c31026b929049b49dc6"
109
109
  dependencies = [
110
110
  "proc-macro2",
111
111
  "pyo3-macros-backend",
@@ -115,9 +115,9 @@ dependencies = [
115
115
 
116
116
  [[package]]
117
117
  name = "pyo3-macros-backend"
118
- version = "0.29.2"
118
+ version = "0.29.3"
119
119
  source = "registry+https://github.com/rust-lang/crates.io-index"
120
- checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
120
+ checksum = "6143877a16e82b5a727b7127ff4cd86858a24a28d745d72f43e6f227c7b1bdb3"
121
121
  dependencies = [
122
122
  "heck",
123
123
  "proc-macro2",
@@ -170,14 +170,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
170
170
  dependencies = [
171
171
  "proc-macro2",
172
172
  "quote",
173
- "syn 3.0.6",
173
+ "syn 3.0.9",
174
174
  ]
175
175
 
176
176
  [[package]]
177
177
  name = "serde_json"
178
- version = "1.0.151"
178
+ version = "1.0.154"
179
179
  source = "registry+https://github.com/rust-lang/crates.io-index"
180
- checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
180
+ checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6"
181
181
  dependencies = [
182
182
  "itoa",
183
183
  "memchr",
@@ -199,9 +199,9 @@ dependencies = [
199
199
 
200
200
  [[package]]
201
201
  name = "syn"
202
- version = "3.0.6"
202
+ version = "3.0.9"
203
203
  source = "registry+https://github.com/rust-lang/crates.io-index"
204
- checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee"
204
+ checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"
205
205
  dependencies = [
206
206
  "proc-macro2",
207
207
  "quote",
@@ -216,54 +216,54 @@ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
216
216
 
217
217
  [[package]]
218
218
  name = "tzf-dist"
219
- version = "0.0.2026-d"
219
+ version = "0.0.2026-f"
220
220
  source = "registry+https://github.com/rust-lang/crates.io-index"
221
- checksum = "5e2968ddd98d78d8f712b3165ee6dabc3f1e80c3a2fd7340ecd5c694e925782f"
221
+ checksum = "3633c44cb5e44c1224f82d306c9eb179880996a070cdfe1ecb1b4db6f9fa39c2"
222
222
 
223
223
  [[package]]
224
224
  name = "tzf-dist"
225
- version = "0.0.2026-d"
226
- source = "git+https://github.com/ringsaturn/tzf-dist?rev=v0.0.2026-d#d3ddaca64800046ffef80f3e09269bc26be4bc45"
225
+ version = "0.0.2026-f"
226
+ source = "git+https://github.com/ringsaturn/tzf-dist?rev=v0.0.2026-f#eab6431f8a7c74e595a8ac7244b35d6e61eae0f5"
227
227
 
228
228
  [[package]]
229
229
  name = "tzf-rs"
230
- version = "2.1.2"
230
+ version = "2.1.4"
231
231
  source = "registry+https://github.com/rust-lang/crates.io-index"
232
- checksum = "5bd4bd76dc7816db8a12043dbac00254158c17cd2c731aa951fd85f1a9d1f1ae"
232
+ checksum = "78368e2c41c6df5482628611eaa2130aef5b4f051e757d3223d2851d1a2a231a"
233
233
  dependencies = [
234
234
  "geometry-rs",
235
235
  "serde",
236
236
  "serde_json",
237
- "tzf-dist 0.0.2026-d (registry+https://github.com/rust-lang/crates.io-index)",
237
+ "tzf-dist 0.0.2026-f (registry+https://github.com/rust-lang/crates.io-index)",
238
238
  ]
239
239
 
240
240
  [[package]]
241
241
  name = "tzf-rs"
242
- version = "2.1.2"
243
- source = "git+https://github.com/ringsaturn/tzf-rs?tag=v2.1.2#dce143aac4a07bf93d44a30230ca958ff8db5850"
242
+ version = "2.1.4"
243
+ source = "git+https://github.com/ringsaturn/tzf-rs?tag=v2.1.4#01637e997c1ae094f8dcc226bb6f3a5805ef6411"
244
244
  dependencies = [
245
245
  "geometry-rs",
246
246
  "serde",
247
247
  "serde_json",
248
- "tzf-dist 0.0.2026-d (git+https://github.com/ringsaturn/tzf-dist?rev=v0.0.2026-d)",
248
+ "tzf-dist 0.0.2026-f (git+https://github.com/ringsaturn/tzf-dist?rev=v0.0.2026-f)",
249
249
  ]
250
250
 
251
251
  [[package]]
252
252
  name = "tzfpy"
253
- version = "2.1.0"
253
+ version = "2.1.2"
254
254
  dependencies = [
255
255
  "lazy_static",
256
256
  "pyo3",
257
- "tzf-dist 0.0.2026-d (git+https://github.com/ringsaturn/tzf-dist?rev=v0.0.2026-d)",
258
- "tzf-rs 2.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
259
- "tzf-rs 2.1.2 (git+https://github.com/ringsaturn/tzf-rs?tag=v2.1.2)",
257
+ "tzf-dist 0.0.2026-f (git+https://github.com/ringsaturn/tzf-dist?rev=v0.0.2026-f)",
258
+ "tzf-rs 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
259
+ "tzf-rs 2.1.4 (git+https://github.com/ringsaturn/tzf-rs?tag=v2.1.4)",
260
260
  ]
261
261
 
262
262
  [[package]]
263
263
  name = "unicode-ident"
264
- version = "1.0.25"
264
+ version = "1.0.27"
265
265
  source = "registry+https://github.com/rust-lang/crates.io-index"
266
- checksum = "ab72a15cf68d77cb0987d3684aa8a45c5ef827e8cb49ee2f30bfd7ba2feb519f"
266
+ checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
267
267
 
268
268
  [[package]]
269
269
  name = "zmij"
@@ -2,7 +2,7 @@
2
2
  edition = "2024"
3
3
  name = "tzfpy"
4
4
  repository = "https://github.com/ringsaturn/tzfpy"
5
- version = "2.1.0"
5
+ version = "2.1.2"
6
6
  readme = "README.md"
7
7
 
8
8
  # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -29,7 +29,7 @@ pyo3 = {version = "0.29.0", features = ["extension-module", "generate-import-lib
29
29
  #
30
30
  # A path dependency MUST NOT be published: it makes the crates.io/conda-forge
31
31
  # vendoring path unbuildable and bloats the sdist with a copy of tzf-rs+tzf-dist.
32
- tzf-rs = { version = "2.1.2", default-features = false, features = ["bundled", "export-geojson"], optional = true }
32
+ tzf-rs = { version = "2.1.4", default-features = false, features = ["bundled", "export-geojson"], optional = true }
33
33
  # tzf-rs = { path = "../tzf-rs", default-features = false, features = ["bundled", "export-geojson"], optional = true }
34
34
 
35
35
  # Full precision (feature "full"): the ~14 MB full.tzb, no topology
@@ -41,16 +41,16 @@ tzf-rs = { version = "2.1.2", default-features = false, features = ["bundled", "
41
41
  #
42
42
  # Mutually exclusive with "lite": build with
43
43
  # maturin build --no-default-features --features full
44
- tzf-rs-full = { package = "tzf-rs", git = "https://github.com/ringsaturn/tzf-rs", tag = "v2.1.2", default-features = false, features = ["full", "export-geojson"], optional = true }
44
+ tzf-rs-full = { package = "tzf-rs", git = "https://github.com/ringsaturn/tzf-rs", tag = "v2.1.4", default-features = false, features = ["full", "export-geojson"], optional = true }
45
45
  # tzf-rs-full = { package = "tzf-rs", path = "../tzf-rs", default-features = false, features = ["full", "export-geojson"], optional = true }
46
46
 
47
47
  # The full variant runs on `EmbeddedFinder`, which queries full.tzb in place
48
48
  # instead of expanding it into owned polygons (DefaultFinder::new_full() costs
49
49
  # ~200 MB RSS). tzf-rs has no `EmbeddedFinder::new_full()` and does not
50
50
  # re-export tzf-dist, so the bytes come straight from tzf-dist. Must point at
51
- # the exact git rev tzf-rs v2.1.1 pins for its own `tzf-dist-git` dependency,
51
+ # the exact git rev tzf-rs v2.1.4 pins for its own `tzf-dist-git` dependency,
52
52
  # so cargo unifies the two into one package.
53
- tzf-dist-full = { package = "tzf-dist", git = "https://github.com/ringsaturn/tzf-dist", rev = "v0.0.2026-d", features = ["full"], optional = true }
53
+ tzf-dist-full = { package = "tzf-dist", git = "https://github.com/ringsaturn/tzf-dist", rev = "v0.0.2026-f", features = ["full"], optional = true }
54
54
  # tzf-dist-full = { package = "tzf-dist", path = "../tzf-dist", features = ["full"], optional = true }
55
55
 
56
56
  [features]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tzfpy
3
- Version: 2.1.0
3
+ Version: 2.1.2
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -196,7 +196,7 @@ timezone's polygon size.
196
196
  tz = get_tz(139.7744, 35.6812) # Tokyo
197
197
 
198
198
  now = datetime.now(timezone.utc)
199
- now = now.replace(tzinfo=ZoneInfo(tz))
199
+ now = now.astimezone(ZoneInfo(tz))
200
200
  print(now)
201
201
  # 2025-04-29 01:33:56.325194+09:00
202
202
  ```
@@ -161,7 +161,7 @@ timezone's polygon size.
161
161
  tz = get_tz(139.7744, 35.6812) # Tokyo
162
162
 
163
163
  now = datetime.now(timezone.utc)
164
- now = now.replace(tzinfo=ZoneInfo(tz))
164
+ now = now.astimezone(ZoneInfo(tz))
165
165
  print(now)
166
166
  # 2025-04-29 01:33:56.325194+09:00
167
167
  ```
@@ -6,6 +6,6 @@ from tzfpy import get_tz
6
6
  tz = get_tz(139.7744, 35.6812) # Tokyo
7
7
 
8
8
  now = datetime.now(timezone.utc)
9
- now = now.replace(tzinfo=ZoneInfo(tz))
9
+ now = now.astimezone(ZoneInfo(tz))
10
10
  print(now)
11
11
  # 2025-04-29 01:33:56.325194+09:00
@@ -52,7 +52,7 @@ requires = ["maturin<2,>=1"]
52
52
 
53
53
  [dependency-groups]
54
54
  dev = [
55
- "ruff==0.16.5",
55
+ "ruff==0.16.9",
56
56
  "citiespy>=0.6.13",
57
57
  "maturin==1.15.0",
58
58
  "pytest>=9.0.2",
@@ -1,5 +1,5 @@
1
1
  version = 1
2
- revision = 3
2
+ revision = 5
3
3
  requires-python = ">=3.10"
4
4
  resolution-markers = [
5
5
  "python_full_version >= '3.14' and sys_platform == 'win32'",
@@ -40,16 +40,16 @@ wheels = [
40
40
 
41
41
  [[package]]
42
42
  name = "anyio"
43
- version = "4.12.1"
43
+ version = "4.14.2"
44
44
  source = { registry = "https://pypi.org/simple" }
45
45
  dependencies = [
46
46
  { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
47
47
  { name = "idna" },
48
48
  { name = "typing-extensions", marker = "python_full_version < '3.13'" },
49
49
  ]
50
- sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" }
50
+ sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" }
51
51
  wheels = [
52
- { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" },
52
+ { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" },
53
53
  ]
54
54
 
55
55
  [[package]]
@@ -80,7 +80,7 @@ version = "0.2.5"
80
80
  source = { registry = "https://pypi.org/simple" }
81
81
  dependencies = [
82
82
  { name = "leb128" },
83
- { name = "packaging" },
83
+ { name = "packaging", version = "26.3", source = { registry = "https://pypi.org/simple" } },
84
84
  { name = "pyodide-cli" },
85
85
  { name = "wheel" },
86
86
  ]
@@ -95,7 +95,7 @@ version = "1.5.0"
95
95
  source = { registry = "https://pypi.org/simple" }
96
96
  dependencies = [
97
97
  { name = "colorama", marker = "os_name == 'nt'" },
98
- { name = "packaging" },
98
+ { name = "packaging", version = "26.3", source = { registry = "https://pypi.org/simple" } },
99
99
  { name = "pyproject-hooks" },
100
100
  ]
101
101
  sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" }
@@ -118,11 +118,11 @@ wheels = [
118
118
 
119
119
  [[package]]
120
120
  name = "certifi"
121
- version = "2026.7.22"
121
+ version = "2026.10.19"
122
122
  source = { registry = "https://pypi.org/simple" }
123
- sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" }
123
+ sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/1436c50cc46699de0230fbaacc1d1de7bfec413176099949e9d5112e88f2/certifi-2026.10.19.tar.gz", hash = "sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae", size = 137598, upload-time = "2026-10-20T02:24:16.604Z" }
124
124
  wheels = [
125
- { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" },
125
+ { url = "https://files.pythonhosted.org/packages/c4/51/29046e48f693c54e5b7412216d447a1d8362c9653148d98c02cdf65fa733/certifi-2026.10.19-py3-none-any.whl", hash = "sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b", size = 136464, upload-time = "2026-10-20T02:24:15.072Z" },
126
126
  ]
127
127
 
128
128
  [[package]]
@@ -214,30 +214,32 @@ wheels = [
214
214
 
215
215
  [[package]]
216
216
  name = "citiespy"
217
- version = "0.6.13"
218
- source = { registry = "https://pypi.org/simple" }
219
- sdist = { url = "https://files.pythonhosted.org/packages/8e/ba/952b3ad97e95c204c6e43eb99b7485b27559b736f090edb2307abc26cd47/citiespy-0.6.13.tar.gz", hash = "sha256:5d6e765aafcf2464851da5b3d5c743c9ab0b944ec01ef8f0ae298075874b57f4", size = 2920959, upload-time = "2025-10-10T14:21:31.809Z" }
220
- wheels = [
221
- { url = "https://files.pythonhosted.org/packages/2e/9f/4899ff48ce85e0119110ad61fdc214d4c758c65a11e5d93cd4e2ef7b9809/citiespy-0.6.13-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e94312793aa1871fd32e0e395286dd1568961f45a71f33c53d12ee44f44f66cc", size = 3180881, upload-time = "2025-10-10T14:21:16.916Z" },
222
- { url = "https://files.pythonhosted.org/packages/90/14/1fceae2ff2ee18492a053a2ec96836ffb86e37787967dcedc7189ca8d71e/citiespy-0.6.13-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:c6e7783b86308fc709cea4f886b38183cea093a572c0fc79e11c118c7ff9073f", size = 3349678, upload-time = "2025-10-10T14:21:13.372Z" },
223
- { url = "https://files.pythonhosted.org/packages/aa/35/fd69b26c74053b7b943bc39d9126477afa1cc3a7197299a5cafa0d58a350/citiespy-0.6.13-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa8fe88f8cca328e926a47076a9b8a1119cf0b42b5c770a62b70ef7e2bd46ec", size = 3211373, upload-time = "2025-10-10T14:21:02.453Z" },
224
- { url = "https://files.pythonhosted.org/packages/6e/8c/fb832f5b858f5f24aad3c6915c79403d700f9b4f59538622a2bf202df462/citiespy-0.6.13-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c14ce178fb222847a7f4e86658b964c2d8625a972a8b7865ef6f2ffac6e2166", size = 3220924, upload-time = "2025-10-10T14:21:05.927Z" },
225
- { url = "https://files.pythonhosted.org/packages/0b/1a/b229df666372bd7da2607d04f29380c77cd45679b03ce5d217b23396c90f/citiespy-0.6.13-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3282c88ce554574a2a92f1f346fbf9a741c1f90f469a6590201670c243a5e601", size = 3227349, upload-time = "2025-10-10T14:21:09.625Z" },
226
- { url = "https://files.pythonhosted.org/packages/cb/47/c6f4640fd7e76e78b518659ea25799b3b56d9e751911c119b10be1bcf895/citiespy-0.6.13-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:948c41f0e32109bd74aee357e600bbf4c445ec90aecb32251c9cfcba415e261b", size = 3392470, upload-time = "2025-10-10T14:21:20.466Z" },
227
- { url = "https://files.pythonhosted.org/packages/8a/14/19e01fcb1f512a419f5fa7f464238c72795d1de71bdf6791d1cb90ae1553/citiespy-0.6.13-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:65bbcac252d61c1cbc356bbcf2b73a273b318028c2fa4a5b3e33d128e96781ea", size = 3484376, upload-time = "2025-10-10T14:21:24.826Z" },
228
- { url = "https://files.pythonhosted.org/packages/08/d4/ae663c1176160a361a81df04d6a14cd66b18727a4fb3063eebfbe222c065/citiespy-0.6.13-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d72302b45edf34858f7fb81fad6e06cba86972ff725126d4b9cf7e70be863868", size = 3387912, upload-time = "2025-10-10T14:21:28.473Z" },
229
- { url = "https://files.pythonhosted.org/packages/63/35/ec56131e3fe035bd64549f85f2fd8cdf633851dd1c5d0e704bfd5fd47db5/citiespy-0.6.13-cp310-abi3-win_amd64.whl", hash = "sha256:19c78b58e7b247109beca1fb0a30344a9c93f557fa7953e69130fa3aca4e13a9", size = 3090467, upload-time = "2025-10-10T14:21:37.067Z" },
230
- { url = "https://files.pythonhosted.org/packages/30/39/d9f0bf74337074458964addc8744196c282713334a34cce311c446c0b42c/citiespy-0.6.13-cp310-abi3-win_arm64.whl", hash = "sha256:cf1b602d311a44adeb7664fac4b2e63e506d57dad688e353ccac720b9e44f186", size = 3080037, upload-time = "2025-10-10T14:21:33.331Z" },
231
- { url = "https://files.pythonhosted.org/packages/9c/5d/c39b0d7fae22e5beb7ca9c5cfe449b57669610d39d7c44ce24d0f7158275/citiespy-0.6.13-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ff59bda14117154b3bc61c1518ebdc683229f04688a5c3e3335b9cf4d225a38b", size = 3176715, upload-time = "2025-10-10T14:21:18.571Z" },
232
- { url = "https://files.pythonhosted.org/packages/dc/13/64d6d97a8a735d4f55636db6d2481850ea539abd67c401fdb726180e276b/citiespy-0.6.13-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5ae055c432186894ce65d0178d0219966b8124cfb52b0f2c649a693f78dbf682", size = 3345701, upload-time = "2025-10-10T14:21:15.406Z" },
233
- { url = "https://files.pythonhosted.org/packages/da/94/8bb2ce0ae3536a902291354b79b265ec93f9dd7b0df5e18a9d33c1580388/citiespy-0.6.13-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:729059dd052909feac8f3c47059e546f9e90ae1f0d4641874cb95cde4fc7bde1", size = 3209287, upload-time = "2025-10-10T14:21:04.223Z" },
234
- { url = "https://files.pythonhosted.org/packages/ef/b1/c5f7b3718e1248d5511383796c26107cd20466d3cb0d8074e6cb4a55c8ac/citiespy-0.6.13-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35cc20c1edbc0733497dd92efcba14410986a31a788da0474c3a49a7e44e1d3a", size = 3217765, upload-time = "2025-10-10T14:21:07.94Z" },
235
- { url = "https://files.pythonhosted.org/packages/60/8a/0d83f70f0177e1187f22b922daaaa7ea33bad37b5918e2c6bfc38304a4c0/citiespy-0.6.13-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9caff1386af69730baf0cf6485b531437cf3b37fe6aa39a755e526b26ef3ef1", size = 3223574, upload-time = "2025-10-10T14:21:11.412Z" },
236
- { url = "https://files.pythonhosted.org/packages/c6/79/bcfb9b19ff85219350a08e7d2713ab5160f964606cb874435b6ea5031d54/citiespy-0.6.13-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:93e32c0a33d552cb31863ba42530a9f7baa8788f81c87534a361f9145c7e580b", size = 3390314, upload-time = "2025-10-10T14:21:22.755Z" },
237
- { url = "https://files.pythonhosted.org/packages/06/14/076a8b41f16ece24e23002c514326459b9b63a4d82b9ab6abf1a2f99e507/citiespy-0.6.13-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:5f71f46a5e4f470f4798c9bdf488d274edb7416721f1ee41b00c0fda8a9324b7", size = 3481469, upload-time = "2025-10-10T14:21:26.721Z" },
238
- { url = "https://files.pythonhosted.org/packages/16/48/15ae13bf679f7541786a795b52d4ef5aa8ddd1c038df12f702d21bbe02ff/citiespy-0.6.13-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2854d4cf4707c9753400d8452ab0cf5c89c958c86f234ccf4211794e8c4d6d2b", size = 3383817, upload-time = "2025-10-10T14:21:30.078Z" },
239
- { url = "https://files.pythonhosted.org/packages/a2/a7/132b9dcd16f1ed0fe510e08994adcef8a104d0cd47b99b378ff389a4417b/citiespy-0.6.13-cp314-cp314t-win_amd64.whl", hash = "sha256:96280e95caabe40fa096b1ccbb13aeaf56eb81152081abd8e919b0515ca1a141", size = 3087962, upload-time = "2025-10-10T14:21:38.686Z" },
240
- { url = "https://files.pythonhosted.org/packages/12/da/b2e8c0f2288528ce4e99d6d79115b02f14194c865594d96d2730763669df/citiespy-0.6.13-cp314-cp314t-win_arm64.whl", hash = "sha256:9849b863c42337584defca5dc5ccc853243d91921c9157d11fe0c32df46f62bc", size = 3076976, upload-time = "2025-10-10T14:21:35.213Z" },
217
+ version = "0.6.14"
218
+ source = { registry = "https://pypi.org/simple" }
219
+ sdist = { url = "https://files.pythonhosted.org/packages/8a/01/a7c7b0af501f3f101908a05ac883a0a289b4184fa35b683c3ae27b60db11/citiespy-0.6.14.tar.gz", hash = "sha256:7699fcfe8332851700b42607cc5dd77a15f3ae698adf7f5f255cc4bf5809a518", size = 3226050, upload-time = "2026-09-11T14:54:22.193Z" }
220
+ wheels = [
221
+ { url = "https://files.pythonhosted.org/packages/0a/1c/3645de42dfab58abeb625cb99f62615e6fe672e5379889ff0b65125151f3/citiespy-0.6.14-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:431a5a0ab98b7bb0c116c3d3ac5ca5a11f3432d0c11eab93f9a8523599cfbc8c", size = 3474031, upload-time = "2026-09-11T14:53:42.279Z" },
222
+ { url = "https://files.pythonhosted.org/packages/75/6a/45aaf402825cf76d30cd28b500f3bc87dee06a87b2e69d7ca612450ef807/citiespy-0.6.14-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:ae07f1b8a3162dc66407826b734c7eae1797748f26511e3417550c61228c821b", size = 3607000, upload-time = "2026-09-11T14:53:43.918Z" },
223
+ { url = "https://files.pythonhosted.org/packages/3a/66/8bdf991a9ee4e2c30b5b6db6345fdd8ab5bd0a7f3fb76d71ee0dad7d4054/citiespy-0.6.14-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd263c2e15d15d9f1f46e790acbd12df1fb9fa5fac770b56692d679c0774a0ba", size = 3516542, upload-time = "2026-09-11T14:53:45.452Z" },
224
+ { url = "https://files.pythonhosted.org/packages/64/49/4a4d99ec5535a99381769db3f216673370e42ce59b49a5839897d8e1e184/citiespy-0.6.14-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c5818b7fc6d09311bed3fdd0272889dd6052bae7de1799f99c620369c0989d0", size = 3520756, upload-time = "2026-09-11T14:53:47.132Z" },
225
+ { url = "https://files.pythonhosted.org/packages/10/cb/7e97b712ab816631929dd0bed2140db0edc12043ed8aa5430d66c44919e9/citiespy-0.6.14-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1c54e9b663b3cc535f14aedf2f119225b1d6fe5795e18860d5c9d7106774c6", size = 3521515, upload-time = "2026-09-11T14:53:48.623Z" },
226
+ { url = "https://files.pythonhosted.org/packages/77/58/b0a3cc70a1dc236d36bde9e79f619d92fb951eeeb66a748c67566430f595/citiespy-0.6.14-cp310-abi3-manylinux_2_34_riscv64.whl", hash = "sha256:e9f596f79e49663abc441b465c51375fa0445fe3097866b555da1cbfccc2bbfd", size = 3514444, upload-time = "2026-09-11T14:53:50.411Z" },
227
+ { url = "https://files.pythonhosted.org/packages/b9/0e/f86beb06c2cd7b8d533d2ba5ef29296c767a1f41fec47d9edddfce819e01/citiespy-0.6.14-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:bffc27a9e6015b4fa37aaf39f72a05a1b4c714ba4d2e3d644ec106fb67fd39c7", size = 3689088, upload-time = "2026-09-11T14:53:52.046Z" },
228
+ { url = "https://files.pythonhosted.org/packages/1a/bd/ab8d2af1607e804c8f9e6d55d51f46b04aeeb74d6bd58067a21bc772750d/citiespy-0.6.14-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:4a81681a5abd50dea8a0407f47afc47a79d47f316623fbd1923b312a2c6a7e36", size = 3787820, upload-time = "2026-09-11T14:53:53.458Z" },
229
+ { url = "https://files.pythonhosted.org/packages/43/7f/16c7e3a4f4ee01570e09dec3df1b3a635b634ce8c7b0384e4f95c94e5f7c/citiespy-0.6.14-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2a5351d62f56d613362a130bc8ad83654dc55052161cb1212b3a46e0500a5819", size = 3722902, upload-time = "2026-09-11T14:53:54.814Z" },
230
+ { url = "https://files.pythonhosted.org/packages/b4/0e/fea87185c4b9730cb84ec08eef072593c02b36879d1456142e445011283c/citiespy-0.6.14-cp310-abi3-win_amd64.whl", hash = "sha256:88ed040f3a918e634b4f4214f10985344ee3ce8c696935a4a97f1a3eddd0ffa2", size = 3379337, upload-time = "2026-09-11T14:53:56.474Z" },
231
+ { url = "https://files.pythonhosted.org/packages/58/42/1adc1d871c2fa9ca6fe68720e865ee116a9a0575a007f59b53976ba79451/citiespy-0.6.14-cp310-abi3-win_arm64.whl", hash = "sha256:bc3e0484cb35966f39d5c25f0cf2ee2d4358c9edc34f41e7bfb3cc9a430da8d4", size = 3368179, upload-time = "2026-09-11T14:53:57.988Z" },
232
+ { url = "https://files.pythonhosted.org/packages/b9/52/18f2c0fcf4c77566f1e1d59f832b422bc5f6d792a8781aff85953b326185/citiespy-0.6.14-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:f761094abf83248dba3e73ac412f37f15e3e2f194a4a81e2b6d6872acbc8837e", size = 3469043, upload-time = "2026-09-11T14:53:59.443Z" },
233
+ { url = "https://files.pythonhosted.org/packages/67/e9/f51a6e25249057e6339a01974bebb92ca896b277bd9445920d02b89ac6dd/citiespy-0.6.14-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b6838401ba8293a110e8099eed1b8e0b75abeb13785bdf0991116fa1d0069d13", size = 3600699, upload-time = "2026-09-11T14:54:06.131Z" },
234
+ { url = "https://files.pythonhosted.org/packages/73/a7/fedffc04549f2b296d8d3def522137f281d3714c6f9700cca24833d2a345/citiespy-0.6.14-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a719e258c7945c1788f2887b097d2d6aa81f2930cc2c23b1be2a767b9b065b3", size = 3509600, upload-time = "2026-09-11T14:54:07.61Z" },
235
+ { url = "https://files.pythonhosted.org/packages/87/1f/082b414e7ac65853a44da721f7d97afa5a2b4dd5d88d55b16c8bad5c1cc5/citiespy-0.6.14-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ec02fadcd753c64151bdaac0c72e2bfb423b21309ca94deacb904ec27658d10", size = 3515669, upload-time = "2026-09-11T14:54:09.244Z" },
236
+ { url = "https://files.pythonhosted.org/packages/01/c2/8d27a7951d6a359a89383f735771d3306cfecf77a68755e1300d52c90f1d/citiespy-0.6.14-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78086ce87cb0132cf10117670a3cdb5507f1bf70883f85d613f332b3ad3df83f", size = 3514923, upload-time = "2026-09-11T14:54:10.809Z" },
237
+ { url = "https://files.pythonhosted.org/packages/c7/d8/b0a4663282224c57e40ffb4a034a0a8e1c712844915deca60c4cecd5fa1a/citiespy-0.6.14-cp314-cp314t-manylinux_2_34_riscv64.whl", hash = "sha256:e2360b2573489c6e2eb87aab1233c83f3391c7458a3ac7358744087ea6736a05", size = 3506610, upload-time = "2026-09-11T14:54:12.21Z" },
238
+ { url = "https://files.pythonhosted.org/packages/9f/c2/6347a4cde87e8c6102f953ea4ff0bab44af99f266e9fa542743916ee2b6d/citiespy-0.6.14-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3c330763997251a3ce99eaa8a599d3a471e1146be3362bd5f1b39b66c51bad3a", size = 3680741, upload-time = "2026-09-11T14:54:13.638Z" },
239
+ { url = "https://files.pythonhosted.org/packages/75/4c/43e3997d074175f5bdf9241be5ad9b807d5bd854f7ba4a8eb4f5a9a8eded/citiespy-0.6.14-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b00391cd6bfb228c7096f3166af5dd43ea6d594c27d1ec4931cdbb68611f587e", size = 3780996, upload-time = "2026-09-11T14:54:15.249Z" },
240
+ { url = "https://files.pythonhosted.org/packages/f0/a8/74a8d99b0abae38577ba66f335529921c525cae7f88866920cae56f0925d/citiespy-0.6.14-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dffe1b5d2c58974f8fe92f32527758b80fd663738bdc472fbb30ce7200c41728", size = 3714987, upload-time = "2026-09-11T14:54:17.697Z" },
241
+ { url = "https://files.pythonhosted.org/packages/2b/0d/7d988715fa2e20a42796f0353b32ce20af380e893a3c66b9551edced01dc/citiespy-0.6.14-cp314-cp314t-win_amd64.whl", hash = "sha256:e00c04039b8d623e77d98cf37b3ab0a6640a96e5de549e404b173b9ff70906c0", size = 3373595, upload-time = "2026-09-11T14:54:19.189Z" },
242
+ { url = "https://files.pythonhosted.org/packages/4d/3a/7636022633c20150d4c99f26c2a9dda3d9ee2d7fc200228f87d8ba375591/citiespy-0.6.14-cp314-cp314t-win_arm64.whl", hash = "sha256:94c6f3f0e42886c5cc09ed37722961f2e0699c748bdf56444f088b164536bf4e", size = 3363010, upload-time = "2026-09-11T14:54:20.716Z" },
241
243
  ]
242
244
 
243
245
  [[package]]
@@ -665,11 +667,34 @@ wheels = [
665
667
  name = "packaging"
666
668
  version = "26.0"
667
669
  source = { registry = "https://pypi.org/simple" }
670
+ resolution-markers = [
671
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
672
+ "python_full_version == '3.11.*' and sys_platform == 'emscripten'",
673
+ "python_full_version == '3.11.*' and sys_platform != 'emscripten' and sys_platform != 'win32'",
674
+ "python_full_version < '3.11'",
675
+ ]
668
676
  sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" }
669
677
  wheels = [
670
678
  { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" },
671
679
  ]
672
680
 
681
+ [[package]]
682
+ name = "packaging"
683
+ version = "26.3"
684
+ source = { registry = "https://pypi.org/simple" }
685
+ resolution-markers = [
686
+ "python_full_version >= '3.14' and sys_platform == 'win32'",
687
+ "python_full_version >= '3.14' and sys_platform == 'emscripten'",
688
+ "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
689
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
690
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
691
+ "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
692
+ ]
693
+ sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" }
694
+ wheels = [
695
+ { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" },
696
+ ]
697
+
673
698
  [[package]]
674
699
  name = "pandas"
675
700
  version = "2.3.3"
@@ -1047,7 +1072,7 @@ dependencies = [
1047
1072
  { name = "build" },
1048
1073
  { name = "cattrs" },
1049
1074
  { name = "click" },
1050
- { name = "packaging" },
1075
+ { name = "packaging", version = "26.3", source = { registry = "https://pypi.org/simple" } },
1051
1076
  { name = "platformdirs" },
1052
1077
  { name = "pyodide-cli" },
1053
1078
  { name = "pyodide-lock" },
@@ -1105,7 +1130,8 @@ dependencies = [
1105
1130
  { name = "colorama", marker = "sys_platform == 'win32'" },
1106
1131
  { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
1107
1132
  { name = "iniconfig" },
1108
- { name = "packaging" },
1133
+ { name = "packaging", version = "26.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
1134
+ { name = "packaging", version = "26.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
1109
1135
  { name = "pluggy" },
1110
1136
  { name = "pygments" },
1111
1137
  { name = "tomli", marker = "python_full_version < '3.11'" },
@@ -1206,23 +1232,23 @@ wheels = [
1206
1232
 
1207
1233
  [[package]]
1208
1234
  name = "python-discovery"
1209
- version = "1.5.1"
1235
+ version = "1.6.1"
1210
1236
  source = { registry = "https://pypi.org/simple" }
1211
1237
  dependencies = [
1212
1238
  { name = "filelock" },
1213
1239
  ]
1214
- 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" }
1240
+ sdist = { url = "https://files.pythonhosted.org/packages/0c/57/250bd238b966cece44328235eb85290045d059265fdaf7527a3a958123db/python_discovery-1.6.1.tar.gz", hash = "sha256:cf87d3627dfb4412437fdd5b13eae402607722998d21567993aedbc59b23c15e", size = 84338, upload-time = "2026-09-18T01:31:53.971Z" }
1215
1241
  wheels = [
1216
- { 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" },
1242
+ { url = "https://files.pythonhosted.org/packages/16/7d/e9ffbadfbf89c93848412d04594135c4ae8c1d37d9e053b9c3ed718fabc4/python_discovery-1.6.1-py3-none-any.whl", hash = "sha256:d43fcdef879fe795352bd13ccf8d185ba5a9f86f36cfcd00529f596e737442b3", size = 38664, upload-time = "2026-09-18T01:31:52.448Z" },
1217
1243
  ]
1218
1244
 
1219
1245
  [[package]]
1220
1246
  name = "pytz"
1221
- version = "2026.3.post1"
1247
+ version = "2026.4"
1222
1248
  source = { registry = "https://pypi.org/simple" }
1223
- sdist = { url = "https://files.pythonhosted.org/packages/fb/48/fb042503b6ca6cd271261dc559fd6432f7d8c713153e9ec5c591af4dfc1c/pytz-2026.3.post1.tar.gz", hash = "sha256:2211d3fcf9a797d3405cac96ac7f61d80e6a644f72a3309607282fe8a2010c5d", size = 319745, upload-time = "2026-07-25T15:12:07.385Z" }
1249
+ sdist = { url = "https://files.pythonhosted.org/packages/b0/ed/fa23d28713004418bbf2407127f80f385bfb0bf4e677bef02c25c27b00ee/pytz-2026.4.tar.gz", hash = "sha256:464303645bafafd72418898368b2429458f709cf1eb6a15372fbcc396b64da63", size = 318444, upload-time = "2026-09-24T03:58:40.443Z" }
1224
1250
  wheels = [
1225
- { url = "https://files.pythonhosted.org/packages/0f/7b/39c34ca613b0b198cb866466651b26b045e2009864c5183c979a3b83f383/pytz-2026.3.post1-py2.py3-none-any.whl", hash = "sha256:dd95840dd199baea12d9cc096a1d452caa6596a1c1e4b5f3dbd1541855d5e815", size = 508283, upload-time = "2026-07-25T15:12:05.782Z" },
1251
+ { url = "https://files.pythonhosted.org/packages/d5/11/e3df59614bebe0ca50c905442603eda64ae7ac19811d4e4f74aa2d51ca85/pytz-2026.4-py2.py3-none-any.whl", hash = "sha256:9d514388fbc89ca0833203464272ac485b8828568ab73532f5020f17e892a0ff", size = 506747, upload-time = "2026-09-24T03:58:38.629Z" },
1226
1252
  ]
1227
1253
 
1228
1254
  [[package]]
@@ -1264,27 +1290,27 @@ wheels = [
1264
1290
 
1265
1291
  [[package]]
1266
1292
  name = "ruff"
1267
- version = "0.16.5"
1268
- source = { registry = "https://pypi.org/simple" }
1269
- sdist = { url = "https://files.pythonhosted.org/packages/f3/85/c8e12473c93018f92d19dd988a294202e1c27426c47ec4de53ffb847b8d8/ruff-0.16.5.tar.gz", hash = "sha256:1b88500f9ffbcab3dedb0082c9f9492e91ec3d618aac1236a3e0189938f7040b", size = 4912003, upload-time = "2026-08-27T16:34:18.258Z" }
1270
- wheels = [
1271
- { url = "https://files.pythonhosted.org/packages/c6/b6/77c90a970fe2dae17a723acbd011043ea97c98d7deacccefdc4ba74ec512/ruff-0.16.5-py3-none-linux_armv6l.whl", hash = "sha256:12e5f673e774c35fbb62f288809c7653b73445f8ecec6b6063fd6ea3521aa14b", size = 10011941, upload-time = "2026-08-27T16:33:41.287Z" },
1272
- { url = "https://files.pythonhosted.org/packages/4b/46/6cf67cf6411885a1d6f7f6d801682f155536a85176d10b605e2ceffed8bd/ruff-0.16.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:eda58a5802de40e7ed5b32b64e0b32539338cc6fcd2c78f61e3ad6a0d79f51c3", size = 10204049, upload-time = "2026-08-27T16:33:44.056Z" },
1273
- { url = "https://files.pythonhosted.org/packages/46/fd/c8720ca7a090abf0c2fef4abe8a5ef6e5127ed15196d8886ff75a2b370e2/ruff-0.16.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c5ae9a7b9a8875131f40f8fe967cc86abf899779efd663cb7ce3d572d01da7eb", size = 9809037, upload-time = "2026-08-27T16:33:46.257Z" },
1274
- { url = "https://files.pythonhosted.org/packages/43/45/a684caacdedaca180f52bacccc40bf0789d2c5a7c75f25324853e9eaedb5/ruff-0.16.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b719b0a1f4d59710d283ab2965f621684a108a9e41da622e3b23f0326cd0025", size = 9964129, upload-time = "2026-08-27T16:33:48.352Z" },
1275
- { url = "https://files.pythonhosted.org/packages/9e/f2/5d2bcdaca6b5b93d1b4dfc166cd2aebf7680143a1b38a28759df13a94d31/ruff-0.16.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2298f2780ed1be0c5cb1361e32ab7b1467f3cce7dabe101d2210a314f2fe42e9", size = 9821518, upload-time = "2026-08-27T16:33:50.57Z" },
1276
- { url = "https://files.pythonhosted.org/packages/aa/ff/011cce29accf9257d5974145b733fc653a37985ed6825413a3987cefbfe0/ruff-0.16.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:258f29035a2dd021e7861e631b227a5b3f14e50c1184c9a6a122c5f4576154d7", size = 10534835, upload-time = "2026-08-27T16:33:52.522Z" },
1277
- { url = "https://files.pythonhosted.org/packages/d7/5a/f0cf109bada9bba0e96c90c21c9f9251803f57225c32d293327a03c710d6/ruff-0.16.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9a4f0432966834019c74d1b7e5c51224305d7713f3d7faf3e7451f1a3be3cde", size = 11252550, upload-time = "2026-08-27T16:33:54.521Z" },
1278
- { url = "https://files.pythonhosted.org/packages/63/4d/1d481aaea2046c6a7ed7c291f9004c669cce3c087b6b376ed5b08271e3fe/ruff-0.16.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5eb3a8c3d0ade9cea42b591fd530368e8798380e30e0a308b85a5cf718f09ea", size = 10777949, upload-time = "2026-08-27T16:33:56.88Z" },
1279
- { url = "https://files.pythonhosted.org/packages/ee/34/ee245ca55f64443233034b3d02b03236b19242004281247c079390b7facd/ruff-0.16.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef0f69e191a13a3c9816f63163c88790cb12cd157bbbb384e9c44745702ab105", size = 10311656, upload-time = "2026-08-27T16:33:59.12Z" },
1280
- { url = "https://files.pythonhosted.org/packages/a7/4d/c33a333e341c0a2b96c715b52d89a606f5a34cd4ac493cd9b8d0187186b8/ruff-0.16.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0eeab41fbea2c42f98dfb9822cdccda9d24ba38d49f6dc945b5c236d48f0ef29", size = 10532125, upload-time = "2026-08-27T16:34:01.166Z" },
1281
- { url = "https://files.pythonhosted.org/packages/30/e1/a64cef78b40192497bb98a27a8aa8f2c98ee9ee15bc97f7712d94ef32937/ruff-0.16.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f0768e9df4300713fff30733c87575f68b6f1d8de41184e505b7fdd9c0c95eaf", size = 10097648, upload-time = "2026-08-27T16:34:03.16Z" },
1282
- { url = "https://files.pythonhosted.org/packages/cc/4e/4cdc9ed3c3e109d2f71e62572a37457298d7bc7501ec3138babb7ed32bbd/ruff-0.16.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:95cc70cdc7aa80c338de356279d2adbeb2de0f520b9ecd8aba75b94e95e02f91", size = 9829344, upload-time = "2026-08-27T16:34:05.134Z" },
1283
- { url = "https://files.pythonhosted.org/packages/39/4a/31ed35ce31729955fc583ee0d176d6e784c1290cb0b0a75cb2134c1ab72a/ruff-0.16.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d185c8398ded1bfd91c0c2cb258346307571eccc473a8490af8c3977399c384a", size = 10277117, upload-time = "2026-08-27T16:34:07.425Z" },
1284
- { url = "https://files.pythonhosted.org/packages/a8/a0/60356d86687b4b666d593df213f4dc3041750d024cb7bf2cfa81cfd65c2e/ruff-0.16.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:fb8e3a3c4c6a784150a7ced53b015f4b253fc2bf97a610886419ead64b4756ef", size = 10711653, upload-time = "2026-08-27T16:34:09.712Z" },
1285
- { url = "https://files.pythonhosted.org/packages/ed/20/656d67f5b25ca9bda4e02b1de25867b2954e1d19e03648060f167ad0f4cc/ruff-0.16.5-py3-none-win32.whl", hash = "sha256:288b0a5f080492fe5635db849f9e2e84aa3cce7b7f0e955997d416c507c76a26", size = 10034250, upload-time = "2026-08-27T16:34:11.8Z" },
1286
- { url = "https://files.pythonhosted.org/packages/5b/42/ee8e68a207b9127fcde6c3d7e197def432f346cb1af159e1fa14ca0d1cdc/ruff-0.16.5-py3-none-win_amd64.whl", hash = "sha256:ddc6385fb2137f616357ca03d6c74f4be987f80fed4008566b754f6032b8546f", size = 10516714, upload-time = "2026-08-27T16:34:13.963Z" },
1287
- { url = "https://files.pythonhosted.org/packages/73/e3/7df5a396e445b9ba49ce9a9437439a4d80042c61c0ade199abf8d16de1ac/ruff-0.16.5-py3-none-win_arm64.whl", hash = "sha256:a64abe90968719b851bb7cedffaa8753fbdbdadab483089682db623f3edc587e", size = 10391564, upload-time = "2026-08-27T16:34:16.064Z" },
1293
+ version = "0.16.9"
1294
+ source = { registry = "https://pypi.org/simple" }
1295
+ sdist = { url = "https://files.pythonhosted.org/packages/96/bf/c935ca98e73fe8ce65b87ef08a280c0c1e85295d569228c15e87d8fdfaf1/ruff-0.16.9.tar.gz", hash = "sha256:12b625c6cfba78d285d9f48eda5f053374f1e53cb10ef17342a383750db99161", size = 4948764, upload-time = "2026-09-24T20:37:49.416Z" }
1296
+ wheels = [
1297
+ { url = "https://files.pythonhosted.org/packages/0d/26/df51322b52ee1ada7eff2d071ea09d11d5c2d1dcc9f02594f5785c4d1635/ruff-0.16.9-py3-none-linux_armv6l.whl", hash = "sha256:95e6f022090368ab3b824c36276839c53b2adf1a3f4c09fefc33dfc400f6da96", size = 10082922, upload-time = "2026-09-24T20:37:13.045Z" },
1298
+ { url = "https://files.pythonhosted.org/packages/a5/27/7bf51f5a7aa375e9f339280a303aab44ca75dc1525f1cdc5991761685b0f/ruff-0.16.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a5f27be168556594a86d2f415db0cf43f5291917849318f873c7e2791f7a8c67", size = 10236360, upload-time = "2026-09-24T20:37:16.049Z" },
1299
+ { url = "https://files.pythonhosted.org/packages/b6/63/09659283f92f02dff45809da194a70da2f688d87c55d8875c4fae3536072/ruff-0.16.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1632eb1d6197f33bd00b1acbc5b71009e89a8895c158e2d2b03a834fac964ab6", size = 9892940, upload-time = "2026-09-24T20:37:17.957Z" },
1300
+ { url = "https://files.pythonhosted.org/packages/24/58/98de1b72ec172f5f8f1731236fe21585b3998bf7dfe9fcc44ae9ba626012/ruff-0.16.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3f951b14d865d5952c89d40a5ca07e87abe24fa5453299878411e127748fb1c", size = 10032114, upload-time = "2026-09-24T20:37:19.942Z" },
1301
+ { url = "https://files.pythonhosted.org/packages/c8/7d/f1e17c54ab59d4bad1dce8ee3e22a7a1d0ef4745240decacdcf3832b5bb2/ruff-0.16.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:447fc07e1573afff7cb02803462b12b6c8ece7cf10e2cd78565fa6d7a1c0bf8d", size = 9910227, upload-time = "2026-09-24T20:37:21.872Z" },
1302
+ { url = "https://files.pythonhosted.org/packages/34/19/436f647a65075bbd3bab2668b3bdaa5120559b294694018cdcefabbbf30b/ruff-0.16.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a3e039a6a40ed976c491722b60e0ae4a4aa1a86057f540ee7a37a5d19ae9120", size = 10547484, upload-time = "2026-09-24T20:37:24.229Z" },
1303
+ { url = "https://files.pythonhosted.org/packages/03/59/38430a6bc2f6d8095447ac39625cf8b6e9344a47e6c26225c8ba1bff3ffb/ruff-0.16.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4684dded7db60aa57cb118fa158630f5feade4af5782903b6053484bdf9bd129", size = 11412367, upload-time = "2026-09-24T20:37:26.307Z" },
1304
+ { url = "https://files.pythonhosted.org/packages/c8/bd/bbb6d7fc7f208c8b8c50dd5dc8206e4cfdb1e7a8fb852606a3adf370c880/ruff-0.16.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d29c934357e45642fda2f34c0b1f4025b4a6c01e15e4bf0016879d60078a142c", size = 10869787, upload-time = "2026-09-24T20:37:28.35Z" },
1305
+ { url = "https://files.pythonhosted.org/packages/bc/b8/9c543074918061abbefc3bd139bee22de35abedb00dde0f2d27288838962/ruff-0.16.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a21713e629d3e5bdb2f5c2def1cc7f04f47fa8e1a7eb0571b4a28e1da64bc728", size = 10406494, upload-time = "2026-09-24T20:37:30.624Z" },
1306
+ { url = "https://files.pythonhosted.org/packages/35/7a/5a8851bd146e7ccf8fd4b003f6c75c11f8fbdb0e60673b45097986b6bf41/ruff-0.16.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:7baa24ef5fc8e77aa93879e1d3f43754a01ae488e869f1ae30cf431afd4d2452", size = 10590083, upload-time = "2026-09-24T20:37:32.439Z" },
1307
+ { url = "https://files.pythonhosted.org/packages/87/f0/4c3467188f23f806960b46fa76575a7cd0514c9ba90562650b71efc96980/ruff-0.16.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a41aac6230aadfaa133bdfa1614488531ffa3e0837567ae04c0da2058a9c0f9e", size = 10119151, upload-time = "2026-09-24T20:37:34.581Z" },
1308
+ { url = "https://files.pythonhosted.org/packages/15/34/5a4def5adea572ce6aea0bb64f21f928ee317b80e0db747d7979b01d7261/ruff-0.16.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:c2529fb5896d49115b0e9aa8f887490b34bbe76baf879ec2264ac59406869ce7", size = 9911544, upload-time = "2026-09-24T20:37:36.796Z" },
1309
+ { url = "https://files.pythonhosted.org/packages/62/5d/d15ebea7499eef9373318c0ee6ca127832927c6529731f6d48e18dce7ca9/ruff-0.16.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:41e3870277694177429b56406d65dfbdb2c2802c52b715edaf6a0b829c69d4ee", size = 10269884, upload-time = "2026-09-24T20:37:38.857Z" },
1310
+ { url = "https://files.pythonhosted.org/packages/d1/56/c5d3cd119ded7a3c7aba0e961b69cb3df701c91662c98ad694467d060ce1/ruff-0.16.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8adbe4e58af167f767d7b2ba5e83c42e878350796cf78c2f5e14ab9903a92588", size = 10749366, upload-time = "2026-09-24T20:37:41.042Z" },
1311
+ { url = "https://files.pythonhosted.org/packages/ac/fe/734ec7527029ac757ecf821f143c9f3fcf69149c21f53a044a899b430f5a/ruff-0.16.9-py3-none-win32.whl", hash = "sha256:0e1dbc2073624dee6618d41d0098690a7244654af746704b64759e12b6b6b385", size = 10152355, upload-time = "2026-09-24T20:37:43.025Z" },
1312
+ { url = "https://files.pythonhosted.org/packages/14/21/26e4643629b3ebb44f0a06f9c9a53058d63d989415f63a9a3c28e2ee7f22/ruff-0.16.9-py3-none-win_amd64.whl", hash = "sha256:6bd40fec8cd4c8a3d4dd589bd8ad4e6320c13c29234159bfd959a40d529d597b", size = 10592965, upload-time = "2026-09-24T20:37:44.944Z" },
1313
+ { url = "https://files.pythonhosted.org/packages/51/60/5fb1a39dbb5ae314d5f59bc7348a63c1d5c20f3cd83914c4b5cb0be31d2d/ruff-0.16.9-py3-none-win_arm64.whl", hash = "sha256:ed1a252039200f57a59eebc063b54beabea67bfbaaca0eeaa7f54b5fbcda2284", size = 10458649, upload-time = "2026-09-24T20:37:46.882Z" },
1288
1314
  ]
1289
1315
 
1290
1316
  [[package]]
@@ -1386,11 +1412,11 @@ wheels = [
1386
1412
 
1387
1413
  [[package]]
1388
1414
  name = "tzdata"
1389
- version = "2026.3"
1415
+ version = "2026.4"
1390
1416
  source = { registry = "https://pypi.org/simple" }
1391
- sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" }
1417
+ sdist = { url = "https://files.pythonhosted.org/packages/e4/31/3d74fa778a63b98b7374323befcc0be5ab3bd94afd4096a0124e7379152c/tzdata-2026.4.tar.gz", hash = "sha256:f1b8bd365d8d210c55353f4d7f8d6d8561c0ba50d704b700d195a9424bba0d79", size = 199350, upload-time = "2026-09-12T12:56:03.251Z" }
1392
1418
  wheels = [
1393
- { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" },
1419
+ { url = "https://files.pythonhosted.org/packages/f9/bc/8737e8d54cf51106118039b83f485a4783112fab49ea9d044b234978a46e/tzdata-2026.4-py2.py3-none-any.whl", hash = "sha256:c2169a8b0a7a5e9674da5a135ccdfb2b3e671b333ed9fed17b41f73c34476e81", size = 347494, upload-time = "2026-09-12T12:56:01.67Z" },
1394
1420
  ]
1395
1421
 
1396
1422
  [[package]]
@@ -1448,7 +1474,7 @@ dev = [
1448
1474
  { name = "pytest-cov", specifier = ">=7.0.0" },
1449
1475
  { name = "pytest-pretty", specifier = ">=1.3.0" },
1450
1476
  { name = "pytz", specifier = ">=2026.1.post1" },
1451
- { name = "ruff", specifier = "==0.16.5" },
1477
+ { name = "ruff", specifier = "==0.16.9" },
1452
1478
  { name = "tzdata", specifier = ">=2026.2" },
1453
1479
  { name = "tzfpy", editable = "." },
1454
1480
  { name = "whenever", specifier = ">=0.9.5" },
@@ -1497,11 +1523,11 @@ wheels = [
1497
1523
 
1498
1524
  [[package]]
1499
1525
  name = "urllib3"
1500
- version = "2.7.0"
1526
+ version = "2.8.0"
1501
1527
  source = { registry = "https://pypi.org/simple" }
1502
- 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" }
1528
+ 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" }
1503
1529
  wheels = [
1504
- { 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" },
1530
+ { 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" },
1505
1531
  ]
1506
1532
 
1507
1533
  [[package]]
@@ -1520,17 +1546,18 @@ wheels = [
1520
1546
 
1521
1547
  [[package]]
1522
1548
  name = "virtualenv"
1523
- version = "21.7.2"
1549
+ version = "21.14.13"
1524
1550
  source = { registry = "https://pypi.org/simple" }
1525
1551
  dependencies = [
1526
1552
  { name = "distlib" },
1527
1553
  { name = "filelock" },
1554
+ { name = "packaging", version = "26.3", source = { registry = "https://pypi.org/simple" } },
1528
1555
  { name = "platformdirs" },
1529
1556
  { name = "python-discovery" },
1530
1557
  ]
1531
- sdist = { url = "https://files.pythonhosted.org/packages/f5/00/02e4bd40f64546974752c168ddb6b26a4d49a8b252c93e2312bae8d339a1/virtualenv-21.7.2.tar.gz", hash = "sha256:8bf688bd159b32c3bd6966555c5a2605a07724b93671c32cfe3e45ac28058987", size = 5525335, upload-time = "2026-08-07T22:56:14.704Z" }
1558
+ sdist = { url = "https://files.pythonhosted.org/packages/70/aa/bff50daee0488e16d611258a9b6c5a1d0c9e128f8ca424e9f4e1c0444ef2/virtualenv-21.14.13.tar.gz", hash = "sha256:de5307ba4b9a0001d9c8ea02832d38f63ca432880f416c1bface61c4323fd905", size = 5570301, upload-time = "2026-10-22T20:10:16.952Z" }
1532
1559
  wheels = [
1533
- { url = "https://files.pythonhosted.org/packages/2f/4a/fa71f902185d8a1ac6543dee2fff6aea894050b1c48c4cd0cef913c7490d/virtualenv-21.7.2-py3-none-any.whl", hash = "sha256:7c7f4638881064cc57edd2dd55b307cf4da35bb3f6df6f036b5e8b658f6b5bf5", size = 5504622, upload-time = "2026-08-07T22:56:12.832Z" },
1560
+ { url = "https://files.pythonhosted.org/packages/bb/a9/c10d8a44a29fb94a18b43fdf11f38caca53ae7c9406f11a72b1cb8f624f1/virtualenv-21.14.13-py3-none-any.whl", hash = "sha256:5fbb04138a4861580b78ba9110d529a26bc48fcc93c8ec36bc0202eeed96a788", size = 5557094, upload-time = "2026-10-22T20:10:15.096Z" },
1534
1561
  ]
1535
1562
 
1536
1563
  [[package]]
@@ -1538,7 +1565,7 @@ name = "wheel"
1538
1565
  version = "0.47.0"
1539
1566
  source = { registry = "https://pypi.org/simple" }
1540
1567
  dependencies = [
1541
- { name = "packaging" },
1568
+ { name = "packaging", version = "26.3", source = { registry = "https://pypi.org/simple" } },
1542
1569
  ]
1543
1570
  sdist = { url = "https://files.pythonhosted.org/packages/39/62/75f18a0f03b4219c456652c7780e4d749b929eb605c098ce3a5b6b6bc081/wheel-0.47.0.tar.gz", hash = "sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3", size = 63854, upload-time = "2026-04-22T15:51:27.727Z" }
1544
1571
  wheels = [
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