From 01950389278e91d8e06a5ad2102aa1ca1808089f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Musil?= <23387713+vejtek@users.noreply.github.com> Date: Thu, 15 Oct 2026 15:05:01 +0200 Subject: [PATCH] refactor(metrics): build heatmaps with ratiopath MaskBuilder HeatmapAggregator assembled the prediction heatmap with HeatmapAssembler from the GitLab rationai-masks library, the last thing mlkit used from it. It now uses ratiopath's MaskBuilder (scalar tiles, mean aggregation), so rationai-masks is dropped as a dependency. The result is identical whenever the stride divides the tile extent. When it does not (e.g. 256/192), HeatmapAssembler placed tiles at the wrong offsets; MaskBuilder matches a brute-force reference. Co-Authored-By: Claude Opus 5.5 --- pyproject.toml | 6 +- rationai/mlkit/metrics/aggregators.py | 27 ++-- uv.lock | 225 +++++++++++--------------- 3 files changed, 114 insertions(+), 144 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8124b29..dfc0ab6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,15 +16,13 @@ dependencies = [ "hydra-core>=1.3.2", "lightning>=2.6.0", "mlflow>=3.10.1", + "numpy>=2.0", "openslide-python>=1.4.2", "pyarrow>=23.0.1", - "rationai-masks", - "ratiopath>=1.2.0", + "ratiopath>=1.4.2", "torch>=2.9.1", ] [dependency-groups] dev = ["mypy", "ruff"] -[tool.uv.sources] -rationai-masks = { git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/masks.git" } diff --git a/rationai/mlkit/metrics/aggregators.py b/rationai/mlkit/metrics/aggregators.py index 47057ab..9c5f9b3 100644 --- a/rationai/mlkit/metrics/aggregators.py +++ b/rationai/mlkit/metrics/aggregators.py @@ -1,12 +1,12 @@ from abc import ABC, abstractmethod from typing import Any +import numpy as np import torch +from ratiopath.masks.mask_builders import MaskBuilder from torch import Tensor, nn from torchmetrics import Metric -from rationai.masks import HeatmapAssembler - class Aggregator(Metric, ABC): @abstractmethod @@ -97,20 +97,23 @@ def _get_extents(self, xs: Tensor, ys: Tensor) -> tuple[int, int]: return int(extent_x), int(extent_y) def _get_heatmap(self) -> Tensor: + preds = torch.cat(self.preds) xs = torch.cat(self.xs) ys = torch.cat(self.ys) extent_x, extent_y = self._get_extents(xs, ys) - assembler = HeatmapAssembler( - extent_x, - extent_y, - self.extent_tile, - self.extent_tile, - self.stride_tile, - self.stride_tile, - device=str(self.preds[0].device) if self.preds else "cpu", + mask_builder = MaskBuilder( + source_extents=(extent_y, extent_x), + source_tile_extent=self.extent_tile, + output_tile_extent=1, + stride=self.stride_tile, + dtype=np.float32, + ) + mask_builder.update_batch( + preds.detach().float().reshape(-1, 1).cpu().numpy(), + torch.stack([ys, xs], dim=1).cpu().numpy().astype(np.int64), ) - assembler.update(torch.cat(self.preds), xs, ys) - return assembler.compute() + heatmap = np.asarray(mask_builder.finalize()["mask"][0]) + return torch.from_numpy(heatmap).to(preds.device) class MeanPoolMaxAggregator(HeatmapAggregator): diff --git a/uv.lock b/uv.lock index cb69bbf..bdd12f4 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.12, <3.14" resolution-markers = [ "sys_platform != 'win32'", @@ -90,34 +90,34 @@ wheels = [ [[package]] name = "albucore" -version = "0.0.24" +version = "0.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ + { name = "numkong" }, { name = "numpy" }, - { name = "opencv-python-headless" }, - { name = "simsimd" }, { name = "stringzilla" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/13/69/d4cbcf2a5768bf91cd14ffef783520458431e5d2b22fbc08418d3ba09a88/albucore-0.0.24.tar.gz", hash = "sha256:f2cab5431fadf94abf87fd0c89d9f59046e49fe5de34afea8f89bc8390253746", size = 16981, upload-time = "2025-03-09T18:46:51.409Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/ab/d19c2accf635fe8391690367566f006e8891cf518fe8664f422dac1d8baa/albucore-0.2.21.tar.gz", hash = "sha256:6b79251e23c80fd957a37d3abc3a54c18915044514a0c5e5842649fbed3b86d4", size = 190949, upload-time = "2026-10-05T10:31:30.071Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/e2/91f145e1f32428e9e1f21f46a7022ffe63d11f549ee55c3b9265ff5207fc/albucore-0.0.24-py3-none-any.whl", hash = "sha256:adef6e434e50e22c2ee127b7a3e71f2e35fa088bcf54431e18970b62d97d0005", size = 15372, upload-time = "2025-03-09T18:46:50.177Z" }, + { url = "https://files.pythonhosted.org/packages/a7/9a/4a123b31ebea2838841903764cbb2aba44e2d75fd89e2c29955ece08c4e5/albucore-0.2.21-py3-none-any.whl", hash = "sha256:91f0531f8b7a656b96daa760ef107f4c48c176777bbb4611b58c5541b752c156", size = 62604, upload-time = "2026-10-05T10:31:28.683Z" }, ] [[package]] -name = "albumentations" -version = "2.0.8" +name = "albumentationsx" +version = "2.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "albucore" }, + { name = "numkong" }, { name = "numpy" }, - { name = "opencv-python-headless" }, { name = "pydantic" }, { name = "pyyaml" }, { name = "scipy" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f4/f4/85eb56c3217b53bcfc2d12e840a0b18ca60902086321cafa5a730f9c0470/albumentations-2.0.8.tar.gz", hash = "sha256:4da95e658e490de3c34af8fcdffed09e36aa8a4edd06ca9f9e7e3ea0b0b16856", size = 354460, upload-time = "2025-05-27T21:23:17.415Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/9b/56efe2ae2cd7d67e421cdbfe553c277bd6e2f2ace2ec29f4616197de0ea2/albumentationsx-2.5.1.tar.gz", hash = "sha256:ef7a15f7b443a7d55a023a4e24626aacdc0fc4c4488bfd859ac13ab98c2c703e", size = 842979, upload-time = "2026-10-11T18:16:38.151Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/64/013409c451a44b61310fb757af4527f3de57fc98a00f40448de28b864290/albumentations-2.0.8-py3-none-any.whl", hash = "sha256:c4c4259aaf04a7386ad85c7fdcb73c6c7146ca3057446b745cc035805acb1017", size = 369423, upload-time = "2025-05-27T21:23:15.609Z" }, + { url = "https://files.pythonhosted.org/packages/62/63/afa051c95da7195bb6be0d6fdacc0878be9b785590eb48c3d44d64ab8755/albumentationsx-2.5.1-py3-none-any.whl", hash = "sha256:04614c531e7b88e0864ce015148165a4053810e784a66c02e4c6cf938829102f", size = 673126, upload-time = "2026-10-11T18:16:36.616Z" }, ] [[package]] @@ -773,7 +773,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ea/ab/1608e5a7578e62113506740b88066bf09888322a311cff602105e619bd87/greenlet-3.3.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:ac8d61d4343b799d1e526db579833d72f23759c71e07181c2d2944e429eb09cd", size = 280358, upload-time = "2026-02-20T20:17:43.971Z" }, { url = "https://files.pythonhosted.org/packages/a5/23/0eae412a4ade4e6623ff7626e38998cb9b11e9ff1ebacaa021e4e108ec15/greenlet-3.3.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ceec72030dae6ac0c8ed7591b96b70410a8be370b6a477b1dbc072856ad02bd", size = 601217, upload-time = "2026-02-20T20:47:31.462Z" }, { url = "https://files.pythonhosted.org/packages/f8/16/5b1678a9c07098ecb9ab2dd159fafaf12e963293e61ee8d10ecb55273e5e/greenlet-3.3.2-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2a5be83a45ce6188c045bcc44b0ee037d6a518978de9a5d97438548b953a1ac", size = 611792, upload-time = "2026-02-20T20:55:58.423Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c5/cc09412a29e43406eba18d61c70baa936e299bc27e074e2be3806ed29098/greenlet-3.3.2-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae9e21c84035c490506c17002f5c8ab25f980205c3e61ddb3a2a2a2e6c411fcb", size = 626250, upload-time = "2026-02-20T21:02:46.596Z" }, { url = "https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43e99d1749147ac21dde49b99c9abffcbc1e2d55c67501465ef0930d6e78e070", size = 613875, upload-time = "2026-02-20T20:21:01.102Z" }, { url = "https://files.pythonhosted.org/packages/fc/dd/845f249c3fcd69e32df80cdab059b4be8b766ef5830a3d0aa9d6cad55beb/greenlet-3.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c956a19350e2c37f2c48b336a3afb4bff120b36076d9d7fb68cb44e05d95b79", size = 1571467, upload-time = "2026-02-20T20:49:33.495Z" }, { url = "https://files.pythonhosted.org/packages/2a/50/2649fe21fcc2b56659a452868e695634722a6655ba245d9f77f5656010bf/greenlet-3.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6c6f8ba97d17a1e7d664151284cb3315fc5f8353e75221ed4324f84eb162b395", size = 1640001, upload-time = "2026-02-20T20:21:09.154Z" }, @@ -782,7 +781,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ac/48/f8b875fa7dea7dd9b33245e37f065af59df6a25af2f9561efa8d822fde51/greenlet-3.3.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:aa6ac98bdfd716a749b84d4034486863fd81c3abde9aa3cf8eff9127981a4ae4", size = 279120, upload-time = "2026-02-20T20:19:01.9Z" }, { url = "https://files.pythonhosted.org/packages/49/8d/9771d03e7a8b1ee456511961e1b97a6d77ae1dea4a34a5b98eee706689d3/greenlet-3.3.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab0c7e7901a00bc0a7284907273dc165b32e0d109a6713babd04471327ff7986", size = 603238, upload-time = "2026-02-20T20:47:32.873Z" }, { url = "https://files.pythonhosted.org/packages/59/0e/4223c2bbb63cd5c97f28ffb2a8aee71bdfb30b323c35d409450f51b91e3e/greenlet-3.3.2-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d248d8c23c67d2291ffd47af766e2a3aa9fa1c6703155c099feb11f526c63a92", size = 614219, upload-time = "2026-02-20T20:55:59.817Z" }, - { url = "https://files.pythonhosted.org/packages/94/2b/4d012a69759ac9d77210b8bfb128bc621125f5b20fc398bce3940d036b1c/greenlet-3.3.2-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ccd21bb86944ca9be6d967cf7691e658e43417782bce90b5d2faeda0ff78a7dd", size = 628268, upload-time = "2026-02-20T21:02:48.024Z" }, { url = "https://files.pythonhosted.org/packages/7a/34/259b28ea7a2a0c904b11cd36c79b8cef8019b26ee5dbe24e73b469dea347/greenlet-3.3.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b6997d360a4e6a4e936c0f9625b1c20416b8a0ea18a8e19cabbefc712e7397ab", size = 616774, upload-time = "2026-02-20T20:21:02.454Z" }, { url = "https://files.pythonhosted.org/packages/0a/03/996c2d1689d486a6e199cb0f1cf9e4aa940c500e01bdf201299d7d61fa69/greenlet-3.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:64970c33a50551c7c50491671265d8954046cb6e8e2999aacdd60e439b70418a", size = 1571277, upload-time = "2026-02-20T20:49:34.795Z" }, { url = "https://files.pythonhosted.org/packages/d9/c4/2570fc07f34a39f2caf0bf9f24b0a1a0a47bc2e8e465b2c2424821389dfc/greenlet-3.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1a9172f5bf6bd88e6ba5a84e0a68afeac9dc7b6b412b245dd64f52d83c81e55b", size = 1640455, upload-time = "2026-02-20T20:21:10.261Z" }, @@ -795,7 +793,7 @@ name = "gunicorn" version = "25.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "packaging", marker = "sys_platform != 'win32'" }, + { name = "packaging" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/13/ef67f59f6a7896fdc2c1d62b5665c5219d6b0a9a1784938eb9a28e55e128/gunicorn-25.1.0.tar.gz", hash = "sha256:1426611d959fa77e7de89f8c0f32eed6aa03ee735f98c01efba3e281b1c47616", size = 594377, upload-time = "2026-02-13T11:09:58.989Z" } wheels = [ @@ -1491,6 +1489,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/27/72/6663cc0382ddbb866136c255c837bcb96cc7ce5e83562efec55e1b995941/numcodecs-0.16.5-cp313-cp313-win_amd64.whl", hash = "sha256:5088145502ad1ebf677ec47d00eb6f0fd600658217db3e0c070c321c85d6cf3d", size = 799275, upload-time = "2025-11-21T02:49:39.558Z" }, ] +[[package]] +name = "numkong" +version = "7.8.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/a0/8f2f35ab48cd8a8f162911bfe908fed34a8ba0eff81a6f07797c0afe2366/numkong-7.8.5.tar.gz", hash = "sha256:fc7e5353a61e1d87018c9026581000af606532a8dba0e470c13d0ed95ffec3d6", size = 1200909, upload-time = "2026-10-05T21:41:02.132Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f2/9b1067da28bb9a4893db254d1d4c8bafecd1ee35fb28ccb4a9333a98ece7/numkong-7.8.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:572b76fc7ceabc3a8d9562207612ed4103cf3ba5a146685a74a682196cd8064b", size = 857656, upload-time = "2026-10-05T21:39:56.692Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a1/db5bf9e26ccbb01786c210bd189818c465413b4d59b27e72df71884fb23f/numkong-7.8.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:637b008a67a3a6afb794c0f0dabd359ba4b279dabf1586a16934a30dbfee8a56", size = 817984, upload-time = "2026-10-05T21:39:58.154Z" }, + { url = "https://files.pythonhosted.org/packages/58/d3/765b34f623862edb79ece27f456a85f6a4e00a2fcddafc9d708ae89b7fc0/numkong-7.8.5-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl", hash = "sha256:b460d2022935af40ed9e4eee8eb65b6002f928676fe5daae6b2bdaa8594cb0fd", size = 2277367, upload-time = "2026-10-05T21:39:59.512Z" }, + { url = "https://files.pythonhosted.org/packages/d4/f6/fdd37fbf781dd3782b022c726c54ab3740bad6f7958ec974b88f903211a5/numkong-7.8.5-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9926e5fb97b221acf57b87f4c848fcb30cb071dc8f62ead5309928e34171b419", size = 5402772, upload-time = "2026-10-05T21:40:01.146Z" }, + { url = "https://files.pythonhosted.org/packages/38/2e/9560a81cfdbe70a1134dcc57ca43eaba1583198a651be5ac56824ad2a9a0/numkong-7.8.5-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f0b30c83bf0f51d1dda436eccd6666c8495c2d238901a4fab7ee6b8e7a6b2212", size = 10597191, upload-time = "2026-10-05T21:40:02.83Z" }, + { url = "https://files.pythonhosted.org/packages/6f/12/14660d0e03e6f71256ddc303b64460da076dcd040096f3299137f7266e5d/numkong-7.8.5-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:18e8b767e3e5694c44f8c08ad84f95da035f500de2ae87329ce93c7c2ef95742", size = 2657606, upload-time = "2026-10-05T21:40:04.765Z" }, + { url = "https://files.pythonhosted.org/packages/db/d6/669d25e2be2df0faba197ba67559623ac1fddd6a0eb517d0f1cc72ae3127/numkong-7.8.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4277d086dd879613cae513e616c9262f951b9c5254985cb4a97e66e4d2194ec4", size = 5347968, upload-time = "2026-10-05T21:40:06.371Z" }, + { url = "https://files.pythonhosted.org/packages/67/99/e068b7017243df5f6348b3891d595b02dc659b2a767ac11bb8fb3cb4eb22/numkong-7.8.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:df8a00deadbe307cd034c5272beda0cab24968ccf058c787683bc1630484cd49", size = 2336262, upload-time = "2026-10-05T21:40:08.462Z" }, + { url = "https://files.pythonhosted.org/packages/72/83/2ae93e9caa31ce999abebea7c054e74c6fdaf511f2743af582bd1f2e3ade/numkong-7.8.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:252275ece71f64cf24c6eab223fb763ecc09a4bba45479a33ff7603bf6243cf4", size = 10436025, upload-time = "2026-10-05T21:40:10.038Z" }, + { url = "https://files.pythonhosted.org/packages/44/14/f902d7ce2bf5724edef6776a40181ca68a41a7e53156d60bfc93aae2f4cd/numkong-7.8.5-cp312-cp312-win_amd64.whl", hash = "sha256:f4276e9ce650012947ce62c735ba359949160d24ef81d07d9b16c1fca7224152", size = 495368, upload-time = "2026-10-05T21:40:12.515Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b7/dfa6765a9dde34db28ac598a7b7f0e76c57400f4f51aaca20024d07812dc/numkong-7.8.5-cp312-cp312-win_arm64.whl", hash = "sha256:0e28585ece40be6117e4967a13b0f0180185a9daf44ace23e9d051d69cfdb94f", size = 433532, upload-time = "2026-10-05T21:40:14.043Z" }, + { url = "https://files.pythonhosted.org/packages/97/b4/640661f8e67675890bec25cba819c53d9a6ef1745543211a6366b77877b0/numkong-7.8.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c41769f4127ad56227ad925a81d203df6e52024dc122cf6b8d177d68d88cf697", size = 857672, upload-time = "2026-10-05T21:40:15.328Z" }, + { url = "https://files.pythonhosted.org/packages/ec/30/df2687d7016b5dd4f169d3ea6e108b07f830afa305f7f50ce7839173e265/numkong-7.8.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da2bcd0797611612fba98c244a15482d11797b78274a0443aca8783be7356b84", size = 817993, upload-time = "2026-10-05T21:40:17.313Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7e/7f10e550ef11383ce0d55742f22c412619f758b8723e895f68219bc71621/numkong-7.8.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:36103524fa2c468669b23c0466c075a5fdac4e7845ee158492b9f85ba98bc7c6", size = 2907414, upload-time = "2026-10-05T21:40:19.161Z" }, + { url = "https://files.pythonhosted.org/packages/85/84/b94e9924af7d0ccd7e123b20d4ef86855125a8e3b534a441656d200b88a4/numkong-7.8.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9bda1664a70c0a834eb0577bbdb8eadb50abac44554de2cae7dd59a8a5f3cdb4", size = 2517555, upload-time = "2026-10-05T21:40:20.773Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d9/4dc8be53a58a00b6eaee65a5ea2b32e1a666fe73ae3b45aa2828b8e0f5f6/numkong-7.8.5-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:8ef7630886d0ae0893799fbb44a31a5e70be8a7067ec84457af4b615ae6f3857", size = 5403543, upload-time = "2026-10-05T21:40:22.344Z" }, + { url = "https://files.pythonhosted.org/packages/a8/83/283e8c82ef4d151dff34c00c3a43da88a6c3fcf68781db98d1cdafa74aae/numkong-7.8.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:811aea7297b9980a78c2dc4dd1f3f5f98a81038c31169e8c27ddbbb9ea448485", size = 5348116, upload-time = "2026-10-05T21:40:23.984Z" }, + { url = "https://files.pythonhosted.org/packages/b8/86/4725704e675f81b148268a1055973ccfb0ad575a7a63663c01b4af0b6802/numkong-7.8.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:53de8553a24200bb8b44f9e2f6ce8f422316c0fb32b65e6c310c299388ba25cc", size = 2895452, upload-time = "2026-10-05T21:40:25.653Z" }, + { url = "https://files.pythonhosted.org/packages/6e/62/e3a535880f415848f395a4e255e4e195f86ea22efbc4035ea6af1cffa01d/numkong-7.8.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d8352fc035d23e23d7a02bb441bd298848c519f764040bbbd36da3591847734a", size = 2416792, upload-time = "2026-10-05T21:40:27.236Z" }, + { url = "https://files.pythonhosted.org/packages/09/1a/e144026843e16249b808d4544aba958616f7fc2b7c96a03a7f17e945d9f3/numkong-7.8.5-cp313-cp313-win_amd64.whl", hash = "sha256:fea644fd24380f31dffb44630e40a1606ca4140b73944f23c662e0b2dd246a08", size = 495363, upload-time = "2026-10-05T21:40:28.681Z" }, + { url = "https://files.pythonhosted.org/packages/d5/77/b2f3c3a83a7cf1882f76e2fc49c21478c55b12e3f732f4da6455a02f24c6/numkong-7.8.5-cp313-cp313-win_arm64.whl", hash = "sha256:aa3ce4aaa23a4177fbbd583272512fbed701db2105b63f4e3f5ed7c9675e1c56", size = 433534, upload-time = "2026-10-05T21:40:30.052Z" }, +] + [[package]] name = "numpy" version = "2.3.5" @@ -1569,7 +1596,7 @@ name = "nvidia-cudnn-cu12" version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform != 'win32'" }, + { name = "nvidia-cublas-cu12" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, @@ -1580,7 +1607,7 @@ name = "nvidia-cufft-cu12" version = "11.3.3.83" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" }, @@ -1607,9 +1634,9 @@ name = "nvidia-cusolver-cu12" version = "11.7.3.90" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas-cu12", marker = "sys_platform != 'win32'" }, - { name = "nvidia-cusparse-cu12", marker = "sys_platform != 'win32'" }, - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'win32'" }, + { name = "nvidia-cublas-cu12" }, + { name = "nvidia-cusparse-cu12" }, + { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" }, @@ -1620,7 +1647,7 @@ name = "nvidia-cusparse-cu12" version = "12.5.8.93" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink-cu12" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" }, @@ -1679,24 +1706,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl", hash = "sha256:7b4df175cdb08ba400f45cae3bdcae7ba8365db4d165fc65fd04b050ab63b46b", size = 79500, upload-time = "2022-12-08T20:59:19.686Z" }, ] -[[package]] -name = "opencv-python-headless" -version = "4.13.0.92" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/42/2310883be3b8826ac58c3f2787b9358a2d46923d61f88fedf930bc59c60c/opencv_python_headless-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:1a7d040ac656c11b8c38677cc8cccdc149f98535089dbe5b081e80a4e5903209", size = 46247192, upload-time = "2026-02-05T07:01:35.187Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1e/6f9e38005a6f7f22af785df42a43139d0e20f169eb5787ce8be37ee7fcc9/opencv_python_headless-4.13.0.92-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:3e0a6f0a37994ec6ce5f59e936be21d5d6384a4556f2d2da9c2f9c5dc948394c", size = 32568914, upload-time = "2026-02-05T07:01:51.989Z" }, - { url = "https://files.pythonhosted.org/packages/21/76/9417a6aef9def70e467a5bf560579f816148a4c658b7d525581b356eda9e/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c8cfc8e87ed452b5cecb9419473ee5560a989859fe1d10d1ce11ae87b09a2cb", size = 33703709, upload-time = "2026-02-05T10:24:46.469Z" }, - { url = "https://files.pythonhosted.org/packages/92/ce/bd17ff5772938267fd49716e94ca24f616ff4cb1ff4c6be13085108037be/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0525a3d2c0b46c611e2130b5fdebc94cf404845d8fa64d2f3a3b679572a5bd22", size = 56016764, upload-time = "2026-02-05T10:26:48.904Z" }, - { url = "https://files.pythonhosted.org/packages/8f/b4/b7bcbf7c874665825a8c8e1097e93ea25d1f1d210a3e20d4451d01da30aa/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb60e36b237b1ebd40a912da5384b348df8ed534f6f644d8e0b4f103e272ba7d", size = 35010236, upload-time = "2026-02-05T10:28:11.031Z" }, - { url = "https://files.pythonhosted.org/packages/4b/33/b5db29a6c00eb8f50708110d8d453747ca125c8b805bc437b289dbdcc057/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0bd48544f77c68b2941392fcdf9bcd2b9cdf00e98cb8c29b2455d194763cf99e", size = 60391106, upload-time = "2026-02-05T10:30:14.236Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c3/52cfea47cd33e53e8c0fbd6e7c800b457245c1fda7d61660b4ffe9596a7f/opencv_python_headless-4.13.0.92-cp37-abi3-win32.whl", hash = "sha256:a7cf08e5b191f4ebb530791acc0825a7986e0d0dee2a3c491184bd8599848a4b", size = 30812232, upload-time = "2026-02-05T07:02:29.594Z" }, - { url = "https://files.pythonhosted.org/packages/4a/90/b338326131ccb2aaa3c2c85d00f41822c0050139a4bfe723cfd95455bd2d/opencv_python_headless-4.13.0.92-cp37-abi3-win_amd64.whl", hash = "sha256:77a82fe35ddcec0f62c15f2ba8a12ecc2ed4207c17b0902c7a3151ae29f37fb6", size = 40070414, upload-time = "2026-02-05T07:02:26.448Z" }, -] - [[package]] name = "openslide-python" version = "1.4.2" @@ -2270,21 +2279,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/88/9db5f49ebfdd9c12365e4cac76c34ccb1a642b1c8cbab4124b3c681495de/rasterio-1.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:1839960e2f3057a6daa323ccf67b330f8f2f0dbd4a50cc7031e88e649301c5c0", size = 25424949, upload-time = "2024-12-02T14:49:11.742Z" }, ] -[[package]] -name = "rationai-masks" -version = "1.1.1" -source = { git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/masks.git#b85e26bca50eddcf916128e2ee4f31b28ea23d28" } -dependencies = [ - { name = "numpy" }, - { name = "openslide-python" }, - { name = "pandas" }, - { name = "pillow" }, - { name = "pyvips" }, - { name = "ray" }, - { name = "torch" }, - { name = "tqdm" }, -] - [[package]] name = "rationai-mlkit" version = "0.4.1" @@ -2295,9 +2289,9 @@ dependencies = [ { name = "hydra-core" }, { name = "lightning" }, { name = "mlflow" }, + { name = "numpy" }, { name = "openslide-python" }, { name = "pyarrow" }, - { name = "rationai-masks" }, { name = "ratiopath" }, { name = "torch" }, ] @@ -2315,10 +2309,10 @@ requires-dist = [ { name = "hydra-core", specifier = ">=1.3.2" }, { name = "lightning", specifier = ">=2.6.0" }, { name = "mlflow", specifier = ">=3.10.1" }, + { name = "numpy", specifier = ">=2.0" }, { name = "openslide-python", specifier = ">=1.4.2" }, { name = "pyarrow", specifier = ">=23.0.1" }, - { name = "rationai-masks", git = "https://gitlab.ics.muni.cz/rationai/digital-pathology/libraries/masks.git" }, - { name = "ratiopath", specifier = ">=1.2.0" }, + { name = "ratiopath", specifier = ">=1.4.2" }, { name = "torch", specifier = ">=2.9.1" }, ] @@ -2330,10 +2324,10 @@ dev = [ [[package]] name = "ratiopath" -version = "1.2.0" +version = "1.4.2" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "albumentations" }, + { name = "albumentationsx" }, { name = "geopandas" }, { name = "imagecodecs" }, { name = "numpy" }, @@ -2350,9 +2344,9 @@ dependencies = [ { name = "torch" }, { name = "zarr" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7f/6a/39a4ffd53123a82faa876a5f8149d2fb044016af8ffe0f272bb805feebd6/ratiopath-1.2.0.tar.gz", hash = "sha256:fd9d1d2cfac5e2bcd8b69b0bbd268892576ef190db9d6a4172ddfc2e143d8484", size = 31144, upload-time = "2026-03-05T11:44:11.334Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/a9/afbe608b0cc33dc3093bd3afc1e7b995dc1bc2b9a298c171fe43c78c0027/ratiopath-1.4.2.tar.gz", hash = "sha256:880885a2c7a24ded3d0eb9522be60315289a6fe074018555a130dd3479afad25", size = 45043, upload-time = "2026-07-11T18:28:28.82Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/51/411c5823930ed095d440a36464aab31690ac3905fc49591c008011534c69/ratiopath-1.2.0-py3-none-any.whl", hash = "sha256:4a6f7e8ab2354d8103cbf7c3c494b918cc5246ac41a83e4a2e7b90cb3a456df1", size = 37188, upload-time = "2026-03-05T11:44:10.195Z" }, + { url = "https://files.pythonhosted.org/packages/b8/50/9cec2cca4083323fa850bb343590fe0c414fab1ee33480adaeeac514d280/ratiopath-1.4.2-py3-none-any.whl", hash = "sha256:01ef5c1d61803a5197e318a7295e2ece6edd85314ba7273fc50d7c2c38e41279", size = 51181, upload-time = "2026-07-11T18:28:27.85Z" }, ] [[package]] @@ -2687,38 +2681,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, ] -[[package]] -name = "simsimd" -version = "6.5.15" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9a/5d/ae0de3096271cfec187437b4e2c931b4e900c743201b76f84b96aa48b760/simsimd-6.5.15.tar.gz", hash = "sha256:04e5e791b838924a65be9226d03fe30ab4c3680cc250ff1aebaf99a4db4955ae", size = 186832, upload-time = "2026-03-04T10:14:59.768Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/50/d6/2192c453920e92e4d9473f348917f2840565d7eb9b20443f48c289f68942/simsimd-6.5.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b8dd4e7731675690be3bd3f93beeef10dd455b776bc35f4c9ba47f43d58c3fdf", size = 105107, upload-time = "2026-03-04T10:13:23.377Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b9/9cb0e6672228dd58d34605a6968c3b9f1cc319b5ed078947ed7e3975f53d/simsimd-6.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dc9a6dd2f94db9c761ee4b61c688326f98c51d7832aa8398bccebe02a24948f4", size = 94565, upload-time = "2026-03-04T10:13:25.123Z" }, - { url = "https://files.pythonhosted.org/packages/02/3b/6ac7f3f4b1cad9924ab7aa2de652ece8ecb46a51d9f5d3739ce751b16c32/simsimd-6.5.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd4af0528125dc6b07b9c1828eb4df23823eb95fca5cc9bec9e4858848cecfcd", size = 384962, upload-time = "2026-03-04T10:13:26.925Z" }, - { url = "https://files.pythonhosted.org/packages/57/2c/33521754eb09bd0e96aa76110e064744919a438f021d1e6eb67245ddff23/simsimd-6.5.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f38d68b4ad1a186f6a9d4b4e576c322ae2b13d440a374af4cf5af70d70301e44", size = 582984, upload-time = "2026-03-04T10:13:28.881Z" }, - { url = "https://files.pythonhosted.org/packages/0f/d5/1df3ffa42af6417af3e7510b68aaca6afaf8a28ff0f1b625bc6949047a35/simsimd-6.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:838175c43569faf64c465c747813d9c8871f167673324965fca6c43aeb8d4816", size = 421314, upload-time = "2026-03-04T10:13:30.794Z" }, - { url = "https://files.pythonhosted.org/packages/fe/d9/d29033e3f1c6b980f1c65735f33bdd70b1b332235cee6b6b99165cab59ab/simsimd-6.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e2345031856914b3091d77750f2c4935e4aadfdc19aa83c8e35d402ee3b40d05", size = 619025, upload-time = "2026-03-04T10:13:32.365Z" }, - { url = "https://files.pythonhosted.org/packages/32/cd/e457415996aeb1a01c8ca2fd8129032ed8a91715cf250ef73a42cbf18778/simsimd-6.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:7e36af8a3d6cc639b23695fff63d67a7a23a084593055f7445693bbfaaaffeba", size = 87420, upload-time = "2026-03-04T10:13:33.852Z" }, - { url = "https://files.pythonhosted.org/packages/ed/9b/c92a212efd6d0242f6c67b4d874a081edafc354e73c23fc97a48a67d53df/simsimd-6.5.15-cp312-cp312-win_arm64.whl", hash = "sha256:b9799e4f6f83939f88493647299e4471d239d1822323115976d9229d80431f29", size = 62866, upload-time = "2026-03-04T10:13:35.234Z" }, - { url = "https://files.pythonhosted.org/packages/26/8c/4edb40b8bdb218f21534c6b4facae9e1a5f9b230424bd8675baaf31d0030/simsimd-6.5.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8e7c38060a400a5a16a3b0c8333aaf9af8e9fe63b3f7ab90fe70f47b8db8c475", size = 105113, upload-time = "2026-03-04T10:13:36.539Z" }, - { url = "https://files.pythonhosted.org/packages/91/b6/5bfd4bb36551cd0a2a0eb4f63eb08971ba5069a9d1df6da1576e3599f0d2/simsimd-6.5.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c82ec11cfb26a41ae5e5d11237a8e680eac1c80e1111646386c9a31fbe4301ca", size = 94569, upload-time = "2026-03-04T10:13:38.302Z" }, - { url = "https://files.pythonhosted.org/packages/46/23/39dc00b2a22301185acdaec3183ebbfce4a1733b69aef7fb624acb891f84/simsimd-6.5.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c97346ebead9657de244c534d3c25b85211549143652de5f69d8a041fa08ed11", size = 385014, upload-time = "2026-03-04T10:13:39.741Z" }, - { url = "https://files.pythonhosted.org/packages/20/03/01a1d1c5249dd12710f6efcf33493f9fe5b32f5d43b7c7119a3f4e9ae889/simsimd-6.5.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7cdb094911efe77aef386ab5a84e057fff35b6df67635efd40419376e4ea81d9", size = 583081, upload-time = "2026-03-04T10:13:41.298Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c1/15650a75077e6c1ad59e9d8e78b070b6e3f603a821e7200a653716d08dd5/simsimd-6.5.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ba0ebe6f64e6b415e73ae4291e5bf12a28163527b82b4431da22f4190cfe7fa", size = 421342, upload-time = "2026-03-04T10:13:43.331Z" }, - { url = "https://files.pythonhosted.org/packages/95/5b/1183494e66575edba3e422001a3691332ad50b4b72e10a085262a486b14b/simsimd-6.5.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:042c4cf39b942b67b2f5c1f8390c95ce42547110d32d138883f4e11313c8dca9", size = 619110, upload-time = "2026-03-04T10:13:45.267Z" }, - { url = "https://files.pythonhosted.org/packages/be/0d/69598574ae5f36774bec41b416dfe5d332b8b88302f0be75ea71b922c6bc/simsimd-6.5.15-cp313-cp313-win_amd64.whl", hash = "sha256:a70e8a072e0762195a774e55d31702b697ecd8e2ce5bedc3f1f37664a1c0a3d3", size = 87421, upload-time = "2026-03-04T10:13:47.794Z" }, - { url = "https://files.pythonhosted.org/packages/de/50/f961808ff92ef0cd315a1cf9799ee63804d887550d36d1fab668b482b3e8/simsimd-6.5.15-cp313-cp313-win_arm64.whl", hash = "sha256:e96ca1924d6055156e14228b4034b99427be1305f6fd40c612164ab36ab2eb3b", size = 62876, upload-time = "2026-03-04T10:13:49.241Z" }, - { url = "https://files.pythonhosted.org/packages/17/59/1ba830e6e04d58c88e6da9b260e9f6bb52ddc2d0dfdefaa5f2517042c8ce/simsimd-6.5.15-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4d82a2c5153ce92258fa2d2fe16d45fd9af7459a1fd1306a6e96d20125477030", size = 105278, upload-time = "2026-03-04T10:13:50.867Z" }, - { url = "https://files.pythonhosted.org/packages/ff/cf/478843b03653359ec62de7ba82c36bf2ac1fe777d7b055140245661877f6/simsimd-6.5.15-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4c25ba0f5336249cebd1cf688026f5991e75cf3333f06a66425841ce974bbae7", size = 94729, upload-time = "2026-03-04T10:13:52.223Z" }, - { url = "https://files.pythonhosted.org/packages/91/ff/d13e966643da2ce34e0ac0d9860742d4ccafbc8b0f02b272c8261161372b/simsimd-6.5.15-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be90b165ab0d1f27ef0ff2b42447d7ce8990f1c6bf73e0ba94d5aa8aff9d3c7d", size = 386977, upload-time = "2026-03-04T10:13:53.576Z" }, - { url = "https://files.pythonhosted.org/packages/15/4a/af52ad37402e3ceebbf988b024c61a59fbb324c3b0f636b1ea5a3600b21b/simsimd-6.5.15-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc9e8cf2d43b0ff4ea0366076593cf7f06292db0a071aed2371c30f62e7f79f6", size = 584571, upload-time = "2026-03-04T10:13:55.29Z" }, - { url = "https://files.pythonhosted.org/packages/54/d4/c4249f0597d11cb7c993d7147850d15f314a4c19cae7c760121a3933985b/simsimd-6.5.15-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:06af7bb370500e9f4b917995f49ca4bac4be61a7ba7a258d6cb8f0330149651f", size = 422861, upload-time = "2026-03-04T10:13:56.938Z" }, - { url = "https://files.pythonhosted.org/packages/28/a1/18a80bf3422e382a07fe69fa9bee047c1dcc42aca5d0e18021c9711fe7e4/simsimd-6.5.15-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:38cdde866e2d23768f73edacb248e7dc62806ae0a7be82c73f3582e10f269d07", size = 620223, upload-time = "2026-03-04T10:13:58.923Z" }, - { url = "https://files.pythonhosted.org/packages/d6/bc/ac1a7ad28e24774bf483927469fd300ef2772286270f31703737611c5e1f/simsimd-6.5.15-cp313-cp313t-win_amd64.whl", hash = "sha256:1cca4ec8aaf376666032160dc1083e2e05e05c85413b9504b66fe3f04ff20a11", size = 87602, upload-time = "2026-03-04T10:14:00.451Z" }, - { url = "https://files.pythonhosted.org/packages/68/88/d927cba94266bc95333f80ed42c49e461ea159bf7635a0dbc387fcd55395/simsimd-6.5.15-cp313-cp313t-win_arm64.whl", hash = "sha256:080fdb7b26155c6f4acf5bf1d05ca2c3c2020d5c0391ffdd4dc785db0f21879a", size = 63077, upload-time = "2026-03-04T10:14:02.285Z" }, -] - [[package]] name = "six" version = "1.17.0" @@ -2819,42 +2781,49 @@ wheels = [ [[package]] name = "stringzilla" -version = "4.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/61/68/475518f6f4af8273ecd619a5d37d715d36908973f9970faf21571a296821/stringzilla-4.6.0.tar.gz", hash = "sha256:640c0fb5b6a2ad77b7721bff98f00a3c524ca60dc202f552e486831a751d4bbd", size = 646335, upload-time = "2025-12-26T23:44:43.956Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/d3/1ce995ec1efd59904c4787e0fbc3ef18837459b82a32ee4a6c07a10edff6/stringzilla-4.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:78210bd526350f305de03de297a96eb9caa52cd6559257e15d0940818f849838", size = 212271, upload-time = "2025-12-26T23:43:07.943Z" }, - { url = "https://files.pythonhosted.org/packages/07/bb/272843655659a0604e32727fdd3d490a11206d7d0ef50f3f0dc6b582ce74/stringzilla-4.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5566c46fb89c2885a5e9abaaf94f2e3b632c2b7f30824ed2f4d3a31615b39bfa", size = 199353, upload-time = "2025-12-26T23:43:09.088Z" }, - { url = "https://files.pythonhosted.org/packages/33/ca/cb61f293a919fa04bb1b7a2672ea35c69df273fe5aa66410646c50bfc948/stringzilla-4.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83a7545b65c8ebc4182d4a6e494995affd4a43871e7cc89d951aa56854a576fb", size = 689232, upload-time = "2025-12-26T23:43:10.923Z" }, - { url = "https://files.pythonhosted.org/packages/20/e3/ec0e5332975a213ef3456acd18d86de076d86026043b7aa3ccba23cec33d/stringzilla-4.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5cff924b1ff38cacd05bb9426675dbbd4ce9c12354978fb33922e316a5be4f8c", size = 657168, upload-time = "2025-12-26T23:43:12.733Z" }, - { url = "https://files.pythonhosted.org/packages/41/70/34af64c767656c23b8d0efdd5a783124f3b1067ff57992640f38f439e109/stringzilla-4.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cf83c6c1eabed2704cfb884c8f07ddaebd8d7cddcfef6a4bf76c1a6cad381b2f", size = 640477, upload-time = "2025-12-26T23:43:14.012Z" }, - { url = "https://files.pythonhosted.org/packages/f2/c8/fd7101beb8268d231afe3beb20038b17543ab7ea2a59f56eded1782e420f/stringzilla-4.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5d01f2bc4e0ee2d1c444ece06b18016f00e16f7b50491fe81984fa9ac584caa5", size = 2053831, upload-time = "2025-12-26T23:43:15.717Z" }, - { url = "https://files.pythonhosted.org/packages/0f/31/6e3734d402a17077d91c9ff0bebba6168ac98a71baa06c555521e38cc938/stringzilla-4.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78b16030d3c554860ec1738844bc8f06a278c76669957287e42195fe0fd4cfb1", size = 643989, upload-time = "2025-12-26T23:43:17.217Z" }, - { url = "https://files.pythonhosted.org/packages/07/c2/b5951bd07abe255f5e3018b52ccf3a31d166e6c91934fba6d7210b9efa3c/stringzilla-4.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97062003478a73c5263b1c91cc28a2147469fccf3c9d8c042e4394b8af261446", size = 653523, upload-time = "2025-12-26T23:43:18.444Z" }, - { url = "https://files.pythonhosted.org/packages/60/a6/af547d8b2695f93f08b324a9dde6e9bed07a1bbf7f9123427dfc48458a08/stringzilla-4.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:07db5994130efc77b93ff44982f37b8cd1bffaa6d51033b0d7d37ceb211446d2", size = 586796, upload-time = "2025-12-26T23:43:19.736Z" }, - { url = "https://files.pythonhosted.org/packages/f4/c0/d9bc41fab3b1261352a80bc8f9ef189c246817bcc66af17b6a6fca27c7fc/stringzilla-4.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f2c706cb6cd522d406874688aaef964eb60e8b24ab027bd7c21fa129f6308a6", size = 626102, upload-time = "2025-12-26T23:43:20.999Z" }, - { url = "https://files.pythonhosted.org/packages/c8/c2/df732da9f8cafebfb58db0d9167211c09143f3858d259d1d7ecb4d66f87b/stringzilla-4.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5b14cca3091fb50f56710b3cc5f95830f6f64a44d72739b3dabff2052722dd45", size = 618774, upload-time = "2025-12-26T23:43:22.528Z" }, - { url = "https://files.pythonhosted.org/packages/f8/a1/5102428c3285d30d8ae647168450749be3ff0309ac34ae71c8eb72ebb420/stringzilla-4.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:88817ba207dc28412ed3e521d0fc4925e86e240f3dc34c5fff62808b01936f1c", size = 613122, upload-time = "2025-12-26T23:43:23.808Z" }, - { url = "https://files.pythonhosted.org/packages/13/9b/45714783635d0b13caf2775d2a7a71f05874077ae08c4cbd3aba56e015c6/stringzilla-4.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d0fef232f918fa93b1b8b64e9c06831cfbe00aef5289c3d4792f219a0f2947a", size = 1909235, upload-time = "2025-12-26T23:43:25.056Z" }, - { url = "https://files.pythonhosted.org/packages/e1/c0/d84f8bcaff6831905e54eba0a0cd9b316c0393d453a8a50b81d7937a0f5a/stringzilla-4.6.0-cp312-cp312-win32.whl", hash = "sha256:d09f6f0ba17dff5cff7024a29cbb74d8239f3c6692aa706a712cf47f65b39d24", size = 114751, upload-time = "2025-12-26T23:43:26.645Z" }, - { url = "https://files.pythonhosted.org/packages/b4/f6/16981b49f2267e1f39922379125d44134d9326b92f1c044232856a9e1a50/stringzilla-4.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:5bcf791ed67570cc1a268da45710796c891819b3e96c14bc3d1a81f388c6e0ee", size = 162427, upload-time = "2025-12-26T23:43:27.826Z" }, - { url = "https://files.pythonhosted.org/packages/35/70/77f31fc6f0a935b61eca735fc11f188ed9d5cd70bbc178b17d50a86ebfac/stringzilla-4.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:c0d11a145a455d73f9bc718295c41611ff55a777a38119a84f47d4b0eaea6df3", size = 123343, upload-time = "2025-12-26T23:43:29.466Z" }, - { url = "https://files.pythonhosted.org/packages/71/39/ee92df4c6ffc19d763824c061e47b358e1ab8e0724f35d0a41d17dd4e850/stringzilla-4.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0123f724dc63c7e7dbb6eda5f821593effc5fda889ba392e0f7c676924d1131b", size = 212271, upload-time = "2025-12-26T23:43:30.676Z" }, - { url = "https://files.pythonhosted.org/packages/b6/21/641914f44f195fb718e1ebf111f0f70150cf5e4272b3577d6b832fd085f6/stringzilla-4.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:41ec1735fdeaf4e276be0a531d4dd7ad4cb1e7071fd8729c2ca579a5ea49f92a", size = 199360, upload-time = "2025-12-26T23:43:31.993Z" }, - { url = "https://files.pythonhosted.org/packages/8e/20/561b7199cfeacf6ef68d26a8846a0e6f521e96e4be4f9d20098d80b6314d/stringzilla-4.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1105de1b97b7b8f2c8e4dda0cb370cef882fdb5df8f945c141bc022ca3ba65f", size = 689260, upload-time = "2025-12-26T23:43:33.58Z" }, - { url = "https://files.pythonhosted.org/packages/ba/71/70bbbf4e59f4dd2e097f36a4e96482a546a0f081721068e32a7d02f60014/stringzilla-4.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e5f8d1d72e23981964aec25a1eb41a9c42814d1a4e90467c0e27fb1f4c2fe948", size = 657134, upload-time = "2025-12-26T23:43:35.103Z" }, - { url = "https://files.pythonhosted.org/packages/f5/26/1e98779e66990d15ad1bb025f24ddef736712333b173926c06977159613c/stringzilla-4.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ac8fc7c55b612a52855143eff0981c11c80d0a64472bf77b68339bdea01737c0", size = 640353, upload-time = "2025-12-26T23:43:36.509Z" }, - { url = "https://files.pythonhosted.org/packages/30/44/e73fd1c47f23ee7513bf86451464db2eda3d8835e9be408f9dd9ca06a0af/stringzilla-4.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:899974a4e8231abe3486f7e47f0cc3047d75da99e447153738efd5097db731d1", size = 2053771, upload-time = "2025-12-26T23:43:38.038Z" }, - { url = "https://files.pythonhosted.org/packages/ca/5c/d274c820da68254c105c6c18b31001c1624f78c9cc7c36f6550ca17cc6ef/stringzilla-4.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:221f53f809d7beac636d369a255fd5d9729a6a8b5fe4e38afc30b41f59eccc39", size = 643972, upload-time = "2025-12-26T23:43:39.679Z" }, - { url = "https://files.pythonhosted.org/packages/42/65/5f2a826c7091405db189aac751db6cee5e254fb9b35a99f053889b2d3615/stringzilla-4.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7f890db95eb00e10df429e5d85fdacb4904fbe9be20f59d87c2981b06b2caf1", size = 653518, upload-time = "2025-12-26T23:43:41.188Z" }, - { url = "https://files.pythonhosted.org/packages/78/40/30f450e4c8edc981c72e155ec41419712701e81eb38a5dda7cd07d7bd24e/stringzilla-4.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b035ee7301921cd064421cbd08c84e6adb7244472c7679155716d7ac57a95299", size = 586823, upload-time = "2025-12-26T23:43:42.944Z" }, - { url = "https://files.pythonhosted.org/packages/86/ff/ad0c3b795a3454e13d9dd59552029713ccec87bdc5ee62e48f5dd63f2e56/stringzilla-4.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fd7d125408f372aee425b0d0dd998199c0dbca599be9942ce41b745f21c98198", size = 626121, upload-time = "2025-12-26T23:43:44.188Z" }, - { url = "https://files.pythonhosted.org/packages/08/12/9ecda6d1972ddc2a91a857e5305066e2784392d9e27eafbf99b84c79052a/stringzilla-4.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a50fc1237f64fdf79bea5d55c397ac88abc740284ddbfd03bdeab0a0b43711fe", size = 618785, upload-time = "2025-12-26T23:43:45.481Z" }, - { url = "https://files.pythonhosted.org/packages/8a/f0/a744c287f1bad754a4f03d4c1b64be8939ff7ea32f345352f3c09ed15fb0/stringzilla-4.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b21708b71907a3f625e37f9248c37c67542f5665740f2205b9050e1fc67b4d87", size = 613150, upload-time = "2025-12-26T23:43:46.746Z" }, - { url = "https://files.pythonhosted.org/packages/46/04/4246dc812a5da8d97176476f79796cfd02e4e1c1ad8ae27f1ca0e869c4eb/stringzilla-4.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dac46e84bcb28b344206dbc21b892c4ec5fa8506ee7027412819be55e75f91e9", size = 1909233, upload-time = "2025-12-26T23:43:48.295Z" }, - { url = "https://files.pythonhosted.org/packages/fb/99/fab077604f45c8ff1d330c26d1cccf94a58ea0a9155c8ba63c038117543a/stringzilla-4.6.0-cp313-cp313-win32.whl", hash = "sha256:51d3c8504a8038b3d1699f366a56a8d4571741c3993af9562b6f227d56c5ad67", size = 114753, upload-time = "2025-12-26T23:43:49.71Z" }, - { url = "https://files.pythonhosted.org/packages/0e/21/b9bd35292a126a0c2fde103ad5ce5bfe7384cb6eba4ca34fc5cbcaa7ac96/stringzilla-4.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:0e18442332b72d37465f7959bb72f0be480f4d604c86d165863587113401bb45", size = 162434, upload-time = "2025-12-26T23:43:51.486Z" }, - { url = "https://files.pythonhosted.org/packages/6b/89/1f5a6b4f8fc405e1e76125be9629ad7390bfcf1be9683a6e2e5602911b68/stringzilla-4.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:33192fe820704803a52b90c566838373f45b295e4064e0679ba4f76bb76b6ce7", size = 123350, upload-time = "2025-12-26T23:43:53.097Z" }, +version = "5.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/e5/580b6448b0e8af5b3432baa940184e7b17cf828f0fca6f52025bce92d99c/stringzilla-5.2.0.tar.gz", hash = "sha256:27bc5151d231b3d88cb002ffcb65b74cb37fea08a44e94cbecdb317c9048f6ea", size = 1993805, upload-time = "2026-10-02T22:50:54.023Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/02/c5cd2a641e5b7e60162d8b2d321fd93d530a1bbeee033c670be107e55654/stringzilla-5.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ceb1e56ffa16d24cfd2e1fda1740bc8d1394c82708e0aec3a9397844c8271c9", size = 293777, upload-time = "2026-10-02T22:48:27.975Z" }, + { url = "https://files.pythonhosted.org/packages/e4/a9/e01c291969ee1a6f980347a42c11afc410591311520565fd4cd0073e4a15/stringzilla-5.2.0-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:aa5d542ea508712983d9a412fc7f9b8730bffd3fcba76ce965dfe3634be162f2", size = 320649, upload-time = "2026-10-02T22:48:29.559Z" }, + { url = "https://files.pythonhosted.org/packages/c2/fe/0696d4afc1f67c96c2fe839280cf25dfc23e3b3377d25ee465d28b751ccc/stringzilla-5.2.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c8fe84ee7a2e6049ac83dae740255e1b226c54ab2a178a916bd49547bf8181c3", size = 2244491, upload-time = "2026-10-02T22:48:31.223Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/e481bcdbde36723ede553e9ca578e664add30f2e9125774691d11d241e4a/stringzilla-5.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9eb6c7a0e4e58f732cdb9a623382ac34b2557bd3902e6fe009b272f5a4514781", size = 3375539, upload-time = "2026-10-02T22:48:33.631Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7a/1980022685cd3325a4224dcced91055ab81bde06fb93ed3bdf8d9dcb23b1/stringzilla-5.2.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ce8e14d0b80a20a5ecf8c79fcf99c83751c999e6110cafe5f7a4972c2ecd20ad", size = 2423123, upload-time = "2026-10-02T22:48:35.688Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e5/ea2c8a8882d0af5ac9113941cd3a455020d5b1a284011ae85433600482c5/stringzilla-5.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:244834b2a7fec72205aed66a3bf194b8c38abf7cbabe097e6a9eebe3a552136b", size = 2594660, upload-time = "2026-10-02T22:48:37.844Z" }, + { url = "https://files.pythonhosted.org/packages/df/60/9a8642e7ab06b1f39ab2cf48a10d72930bdaebad4db8540dd4b9d398c7cd/stringzilla-5.2.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:acf76a292f46a40e67695fb9e716bbb8570580998c38745401ff33fae892f189", size = 2427198, upload-time = "2026-10-02T22:48:39.674Z" }, + { url = "https://files.pythonhosted.org/packages/06/84/2f13d50a2cbec4a1b1684b30265bdb01cae0aa74b743079fa9edfc34230d/stringzilla-5.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:69a2016ee15c15165dbac6e50ae17551d60c5228f72cd49448131b5e5564597c", size = 4210080, upload-time = "2026-10-02T22:48:41.939Z" }, + { url = "https://files.pythonhosted.org/packages/ef/13/7bf8fb6d09cd5ae9db25fc301b3b9e760503cf251c8c39fffb1528ca4a71/stringzilla-5.2.0-cp312-cp312-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:204e7a1349a0ea0434f5b2c9b084d6b8652744c58b31d4f50dfefb6f965fec51", size = 661745, upload-time = "2026-10-02T22:48:43.695Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6e/acbf7cd96e83b73de594071d99e1c528e3f0084704901c2f0e75453e7a26/stringzilla-5.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f6fc68644c42a32e67c40b15d05734b07c6172e146df27af2a55b2f9f3aa6524", size = 3347890, upload-time = "2026-10-02T22:48:45.471Z" }, + { url = "https://files.pythonhosted.org/packages/43/10/4878fae11e16140cc2796a7231d4fccfdfddaada5ee85fabf3c8d2f46003/stringzilla-5.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:da5e5097140f1c239949e5b20b0d39dbab4ee5ef63db165ea5069ad0ec2e5e7c", size = 2238965, upload-time = "2026-10-02T22:48:47.447Z" }, + { url = "https://files.pythonhosted.org/packages/52/88/2ed45652771e882372d7e7492979e3536a4ee3a639e83a005c349e7d88e3/stringzilla-5.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d031be77727b03b63d364f9bea8fd6f7ff096346365042aa5800d5dd70c3d972", size = 2246821, upload-time = "2026-10-02T22:48:49.236Z" }, + { url = "https://files.pythonhosted.org/packages/35/64/8654bc8c1e40b7ac9e349087d79c584e09594961599ae714fc4254c6ea02/stringzilla-5.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:aefc6bfd1a9c896255b7f469b4fe8a2bbb51c1ff18010466618e0e12dd162231", size = 2583690, upload-time = "2026-10-02T22:48:51.317Z" }, + { url = "https://files.pythonhosted.org/packages/26/e6/f2b0bc7dde0a049f61b93f0b99ef3ca4aefedbab421c5a887d8f6f6637d3/stringzilla-5.2.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:45efa639797188ff917248687358ccc8f8f807df103a7e928aa72da6906cb005", size = 2242059, upload-time = "2026-10-02T22:48:53.216Z" }, + { url = "https://files.pythonhosted.org/packages/c3/22/26c1f6685af3664adbf207f08c293665c09b0a3945dbd469d58ef68c61ac/stringzilla-5.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:c257577e2449e479a3934109a7061c2f8d791ac2e5995bdd896cf1d2752a0c94", size = 2413113, upload-time = "2026-10-02T22:48:55.103Z" }, + { url = "https://files.pythonhosted.org/packages/c2/58/eea235298e2f90f4fae77d993c553daeddf92125d95aaab84a624bd71f0c/stringzilla-5.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9badfd4ee2ee0bf137427634188a55170acab09ffd152a34b590670650c9f7fb", size = 4161936, upload-time = "2026-10-02T22:48:57.175Z" }, + { url = "https://files.pythonhosted.org/packages/5f/8d/840952f947558d37f238158ca63f1a264dc4e398b6c2a3ae86be3cb6a736/stringzilla-5.2.0-cp312-cp312-win32.whl", hash = "sha256:5bad92f6a46f363d02c98f94f8a6ee8a797828b03104dc5c3ff83f1d29cfa60c", size = 183091, upload-time = "2026-10-02T22:48:59.499Z" }, + { url = "https://files.pythonhosted.org/packages/bf/16/d5a72d0b67ea10909f1aa6f93ee2d0c3418ceade6fd0895898b414c390ab/stringzilla-5.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:012efc450ebbf10f65738c26cb76a089034233703b6b22acc61ce9c61d85eb4e", size = 752316, upload-time = "2026-10-02T22:49:01.093Z" }, + { url = "https://files.pythonhosted.org/packages/ec/88/c7eea79376b3ef60bf18dbe0c1dad24dd11126fef723267bddab418e6d8b/stringzilla-5.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:a0e4d478afcb1e9678f167b1ca26ec698181a9fb75c9e2ca4a5b57c68e1f2a4e", size = 587318, upload-time = "2026-10-02T22:49:02.72Z" }, + { url = "https://files.pythonhosted.org/packages/a1/78/5dac3774997bbac63a70883bf24e7fd2313d09a246f8f87fe12230dc0769/stringzilla-5.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d15a651a89ab94c37f00310fe95262bd0cdf0adb1e9c1cfe1227b3d340be2718", size = 293760, upload-time = "2026-10-02T22:49:04.262Z" }, + { url = "https://files.pythonhosted.org/packages/fb/6d/12fe6acf3ffecf8813d91935f79fc81ff3cf23f8a3e8db43b7303d270842/stringzilla-5.2.0-cp313-cp313-macosx_11_0_x86_64.whl", hash = "sha256:e4746325da1aa36f4503c808050d076f079a4d29152b476edfd04bb6e3679f84", size = 320636, upload-time = "2026-10-02T22:49:06.109Z" }, + { url = "https://files.pythonhosted.org/packages/ab/3c/2bc4bde265c2ae80463afad6fafdf02e1ad6d171da4df7d187841f735b37/stringzilla-5.2.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:50772ddd353558598d790090dafe960e89dbd193753f41cc4dc531bdc4e9608f", size = 2244394, upload-time = "2026-10-02T22:49:07.874Z" }, + { url = "https://files.pythonhosted.org/packages/b3/dd/5bbae79128a57df33b8ccc42115136d4285cf9a8a50c109fd992af605281/stringzilla-5.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9a15ab42a39243587476064c3f39d21c90302cd865646222d04cb506c0b37d1", size = 3375492, upload-time = "2026-10-02T22:49:10.098Z" }, + { url = "https://files.pythonhosted.org/packages/02/6b/aa3ae8dc258cc217d40b0b166a432c97291c81acaa1541d76a71862a87e6/stringzilla-5.2.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b84f955ba6399fed39198bbcae80d8443c35c0c0bcb1f8f6904b1f2f1e30f8e9", size = 2406935, upload-time = "2026-10-02T22:49:12.308Z" }, + { url = "https://files.pythonhosted.org/packages/24/e3/b764afb69230a180db1849b5df35b86c0b6e237df7701f62d766b8a43f70/stringzilla-5.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98fc9ee3cc8a2aeba06956456c7a3f3fac89c84ab195d8105cc44014ba862e37", size = 2594752, upload-time = "2026-10-02T22:49:14.422Z" }, + { url = "https://files.pythonhosted.org/packages/48/bc/63a3395853a2df25f55d3511e1f866e82a4c60f60d57a5ecc9b26faee407/stringzilla-5.2.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f4a6a536d38ca775110f91c35aa36966689b568780518a60a639a0a3261c2683", size = 2427337, upload-time = "2026-10-02T22:49:16.57Z" }, + { url = "https://files.pythonhosted.org/packages/86/ed/ef30cf3c47addd6b578564099a2bb58ce602c9498634035280c8d95bef1e/stringzilla-5.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c546e8ad2c648ae37ffc9c7574a0324327f9b0abb6cf14490ec2659c58e9af5c", size = 4210576, upload-time = "2026-10-02T22:49:18.607Z" }, + { url = "https://files.pythonhosted.org/packages/d7/78/cc067f77113589c3a44dc208e392265b15c48bb325acad3a2a17e793f66c/stringzilla-5.2.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0652f20167f6cf0bc695673fe2e44ef6750aab0c74856af97587ad74a76b8e0f", size = 662159, upload-time = "2026-10-02T22:49:20.488Z" }, + { url = "https://files.pythonhosted.org/packages/0b/7f/d94e631af9c83a283cdfd35eacf6f30b1754c8b40992b9b7bc74fe5f0196/stringzilla-5.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ee1cfe6b006fa59f5745570c67fecdf99414b62f661a03f0ac513d6b8ca45a5b", size = 3348482, upload-time = "2026-10-02T22:49:22.61Z" }, + { url = "https://files.pythonhosted.org/packages/8a/32/e8cd3da33157c69c17cee507e3248a4f5100561c2a945970e24672ac0872/stringzilla-5.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4e52ce6745b925dd11d0a55e53cb699db66bb4503bd1c2b59663b385a8413349", size = 2239163, upload-time = "2026-10-02T22:49:24.78Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2b/286be8381bae28f130b9e1f7156772af7785d4909cb25e9459ef7f620883/stringzilla-5.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a71ee86cb4bf96da0ba4775de4678ac3687569be2007a8f511e36ffb9cb6cadd", size = 2246967, upload-time = "2026-10-02T22:49:26.966Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fc/f193880a1f5725ecb2230ec9db0c61b801220ae91c9802834202db5d28df/stringzilla-5.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5e13bbdf275e60058dbe3880079763d2ee066bee380f0058a5603c01741790cd", size = 2584319, upload-time = "2026-10-02T22:49:29.313Z" }, + { url = "https://files.pythonhosted.org/packages/67/76/800d824cb1b05b74d31b5b91c5540ee2c8921942a4a6874ebfb7969a8d3f/stringzilla-5.2.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8c26f5d1fa65d2d156d9bfb88873eda931da9c511b99c5bde977088de0378313", size = 2242131, upload-time = "2026-10-02T22:49:31.875Z" }, + { url = "https://files.pythonhosted.org/packages/9d/2e/1a8cdd13fa9d288d6625c950d37a231a4f6c2df9c42c270bafeadd8a1cf1/stringzilla-5.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:38a34bb20712951f94ba9638ad8a1465020d83b81719a75d2836093fdadb9cd5", size = 2413381, upload-time = "2026-10-02T22:49:34.183Z" }, + { url = "https://files.pythonhosted.org/packages/44/e5/36d02ea5f59912cac3082e3dc282dbf8f77c99de76410a24db6ad830a3f5/stringzilla-5.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:221a35b5653a38ed30a8bda1f912b224e1ff553cd0183dc514f6288314f2a1aa", size = 4162264, upload-time = "2026-10-02T22:49:36.388Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8e/00d75a3d501df4921f22ba56b317166966d166fab6ce573465cbfd9b13ea/stringzilla-5.2.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:3b7effc59a90c7f2fc5cc86a27cf5bc14175e0ed4dfadb0ff90c78db176e05e8", size = 159187, upload-time = "2026-10-02T22:49:38.373Z" }, + { url = "https://files.pythonhosted.org/packages/1b/84/cec45bbe390b18e6b395f1bbf3dcc280d2a6d8d2cc819a57a1bef56494a8/stringzilla-5.2.0-cp313-cp313-win32.whl", hash = "sha256:89160f0da888b54096db10efa2a666a745e40af90e07489b19cf00cdcae778e8", size = 183091, upload-time = "2026-10-02T22:49:40.352Z" }, + { url = "https://files.pythonhosted.org/packages/95/15/b90c26a619057c63dfdb5ddea8e13ac580850bd7eaad84a376eaab30e477/stringzilla-5.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:e04877308aa4479ff405a5c416f671a29b7cbde8fe45e01e9b3bc4acbdaff2da", size = 751996, upload-time = "2026-10-02T22:49:42.148Z" }, + { url = "https://files.pythonhosted.org/packages/ee/e4/571d898597eb6006b5ab749be4c3cb925715c1df0fee7caee536898bdee9/stringzilla-5.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:02c0aad64107e4a4a1d7775a537e25c1a5139c88e3f84515f49ab2cf749fa77b", size = 587344, upload-time = "2026-10-02T22:49:44.289Z" }, ] [[package]]