This is an automated email from the ASF dual-hosted git repository.

guanmingchiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/mahout.git


The following commit(s) were added to refs/heads/main by this push:
     new 40f928be6 feat: add Rust, Python testing coverage toolchain (#1060)
40f928be6 is described below

commit 40f928be6c83c8af22164ed70b9e2b753d0db546
Author: Vic Wen <[email protected]>
AuthorDate: Wed Feb 18 23:44:29 2026 +0800

    feat: add Rust, Python testing coverage toolchain (#1060)
    
    * feat: add rust, python testing coverage feature
    
    * docs: updates CONTRIBUTING.md
---
 .gitignore      |  3 +++
 CONTRIBUTING.md |  4 ++--
 Makefile        |  6 ++---
 pyproject.toml  |  1 +
 uv.lock         | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 83 insertions(+), 5 deletions(-)

diff --git a/.gitignore b/.gitignore
index 070a8c4b2..10af11530 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,3 +55,6 @@ __pycache__/
 
 # pypi
 .pypirc
+
+# coverage
+.coverage
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 30dbca3fa..459018a65 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -124,8 +124,8 @@ You can also run subsets from the repo root:
 
 | Command | Description |
 |---------|-------------|
-| `make test_rust` | QDP Rust unit tests (requires NVIDIA GPU; skipped if none 
detected) |
-| `make test_python` | Python tests via pytest (syncs dev deps; builds QDP 
extension if GPU present, then runs full suite) |
+| `make test_rust` | QDP Rust unit tests via cargo-llvm-cov (requires NVIDIA 
GPU; skipped if none detected). HTML report: 
`qdp/target/llvm-cov/html/index.html`. |
+| `make test_python` | Python tests via pytest and pytest-cov (syncs dev deps; 
builds QDP extension if GPU present, then runs full suite). HTML report: 
`htmlcov/index.html` at repo root. |
 
 See [testing/README.md](testing/README.md) for more options and details.
 
diff --git a/Makefile b/Makefile
index 7ea95bdf0..41319c101 100644
--- a/Makefile
+++ b/Makefile
@@ -24,7 +24,8 @@ setup-test-python:
 
 test_rust:
 ifeq ($(HAS_NVIDIA),yes)
-       cd qdp && cargo test --workspace --exclude qdp-python
+       cd qdp && cargo llvm-cov test --workspace --exclude qdp-python --html 
--output-dir target/llvm-cov/html
+       cd qdp && cargo llvm-cov report --summary-only
 else
        @echo "[SKIP] No NVIDIA GPU detected, skipping test_rust"
 endif
@@ -35,8 +36,7 @@ ifeq ($(HAS_NVIDIA),yes)
 else
        @echo "[SKIP] No NVIDIA GPU detected, skipping maturin develop"
 endif
-       uv run pytest
-
+       uv run pytest --cov=qumat --cov=qumat_qdp --cov-report=term-missing 
--cov-report=html:htmlcov
 tests: test_rust test_python
 
 pre-commit: setup-test-python
diff --git a/pyproject.toml b/pyproject.toml
index 9c342cde6..1a409e35c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -61,6 +61,7 @@ dev = [
     "numpy>=1.24,<2.0",
     "setuptools>=80.9.0",
     "tensorflow>=2.20",
+    "pytest-cov>=7.0.0",
 ]
 
 [tool.uv]
diff --git a/uv.lock b/uv.lock
index 5ccf089ae..5d6b2a6b5 100644
--- a/uv.lock
+++ b/uv.lock
@@ -461,6 +461,64 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl";,
 hash = 
"sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size 
= 225315, upload-time = "2025-07-26T12:02:58.801Z" },
 ]
 
+[[package]]
+name = "coverage"
+version = "7.13.4"
+source = { registry = "https://pypi.org/simple"; }
+sdist = { url = 
"https://files.pythonhosted.org/packages/24/56/95b7e30fa389756cb56630faa728da46a27b8c6eb46f9d557c68fff12b65/coverage-7.13.4.tar.gz";,
 hash = 
"sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91", size 
= 827239, upload-time = "2026-02-09T12:59:03.86Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/44/d4/7827d9ffa34d5d4d752eec907022aa417120936282fc488306f5da08c292/coverage-7.13.4-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415", size 
= 219152, upload-time = "2026-02-09T12:56:11.974Z" },
+    { url = 
"https://files.pythonhosted.org/packages/35/b0/d69df26607c64043292644dbb9dc54b0856fabaa2cbb1eeee3331cc9e280/coverage-7.13.4-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b", size 
= 219667, upload-time = "2026-02-09T12:56:13.33Z" },
+    { url = 
"https://files.pythonhosted.org/packages/82/a4/c1523f7c9e47b2271dbf8c2a097e7a1f89ef0d66f5840bb59b7e8814157b/coverage-7.13.4-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a", size 
= 246425, upload-time = "2026-02-09T12:56:14.552Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f8/02/aa7ec01d1a5023c4b680ab7257f9bfde9defe8fdddfe40be096ac19e8177/coverage-7.13.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f", size 
= 248229, upload-time = "2026-02-09T12:56:16.31Z" },
+    { url = 
"https://files.pythonhosted.org/packages/35/98/85aba0aed5126d896162087ef3f0e789a225697245256fc6181b95f47207/coverage-7.13.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012", size 
= 250106, upload-time = "2026-02-09T12:56:18.024Z" },
+    { url = 
"https://files.pythonhosted.org/packages/96/72/1db59bd67494bc162e3e4cd5fbc7edba2c7026b22f7c8ef1496d58c2b94c/coverage-7.13.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def", size 
= 252021, upload-time = "2026-02-09T12:56:19.272Z" },
+    { url = 
"https://files.pythonhosted.org/packages/9d/97/72899c59c7066961de6e3daa142d459d47d104956db43e057e034f015c8a/coverage-7.13.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256", size 
= 247114, upload-time = "2026-02-09T12:56:21.051Z" },
+    { url = 
"https://files.pythonhosted.org/packages/39/1f/f1885573b5970235e908da4389176936c8933e86cb316b9620aab1585fa2/coverage-7.13.4-cp310-cp310-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda", size 
= 248143, upload-time = "2026-02-09T12:56:22.585Z" },
+    { url = 
"https://files.pythonhosted.org/packages/a8/cf/e80390c5b7480b722fa3e994f8202807799b85bc562aa4f1dde209fbb7be/coverage-7.13.4-cp310-cp310-musllinux_1_2_i686.whl";,
 hash = 
"sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92", size 
= 246152, upload-time = "2026-02-09T12:56:23.748Z" },
+    { url = 
"https://files.pythonhosted.org/packages/44/bf/f89a8350d85572f95412debb0fb9bb4795b1d5b5232bd652923c759e787b/coverage-7.13.4-cp310-cp310-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c", size 
= 249959, upload-time = "2026-02-09T12:56:25.209Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f7/6e/612a02aece8178c818df273e8d1642190c4875402ca2ba74514394b27aba/coverage-7.13.4-cp310-cp310-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58", size 
= 246416, upload-time = "2026-02-09T12:56:26.475Z" },
+    { url = 
"https://files.pythonhosted.org/packages/cb/98/b5afc39af67c2fa6786b03c3a7091fc300947387ce8914b096db8a73d67a/coverage-7.13.4-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9", size 
= 247025, upload-time = "2026-02-09T12:56:27.727Z" },
+    { url = 
"https://files.pythonhosted.org/packages/51/30/2bba8ef0682d5bd210c38fe497e12a06c9f8d663f7025e9f5c2c31ce847d/coverage-7.13.4-cp310-cp310-win32.whl";,
 hash = 
"sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf", size 
= 221758, upload-time = "2026-02-09T12:56:29.051Z" },
+    { url = 
"https://files.pythonhosted.org/packages/78/13/331f94934cf6c092b8ea59ff868eb587bc8fe0893f02c55bc6c0183a192e/coverage-7.13.4-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95", size 
= 222693, upload-time = "2026-02-09T12:56:30.366Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b4/ad/b59e5b451cf7172b8d1043dc0fa718f23aab379bc1521ee13d4bd9bfa960/coverage-7.13.4-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053", size 
= 219278, upload-time = "2026-02-09T12:56:31.673Z" },
+    { url = 
"https://files.pythonhosted.org/packages/f1/17/0cb7ca3de72e5f4ef2ec2fa0089beafbcaaaead1844e8b8a63d35173d77d/coverage-7.13.4-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11", size 
= 219783, upload-time = "2026-02-09T12:56:33.104Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ab/63/325d8e5b11e0eaf6d0f6a44fad444ae58820929a9b0de943fa377fe73e85/coverage-7.13.4-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa", size 
= 250200, upload-time = "2026-02-09T12:56:34.474Z" },
+    { url = 
"https://files.pythonhosted.org/packages/76/53/c16972708cbb79f2942922571a687c52bd109a7bd51175aeb7558dff2236/coverage-7.13.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7", size 
= 252114, upload-time = "2026-02-09T12:56:35.749Z" },
+    { url = 
"https://files.pythonhosted.org/packages/eb/c2/7ab36d8b8cc412bec9ea2d07c83c48930eb4ba649634ba00cb7e4e0f9017/coverage-7.13.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00", size 
= 254220, upload-time = "2026-02-09T12:56:37.796Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d6/4d/cf52c9a3322c89a0e6febdfbc83bb45c0ed3c64ad14081b9503adee702e7/coverage-7.13.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef", size 
= 256164, upload-time = "2026-02-09T12:56:39.016Z" },
+    { url = 
"https://files.pythonhosted.org/packages/78/e9/eb1dd17bd6de8289df3580e967e78294f352a5df8a57ff4671ee5fc3dcd0/coverage-7.13.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903", size 
= 250325, upload-time = "2026-02-09T12:56:40.668Z" },
+    { url = 
"https://files.pythonhosted.org/packages/71/07/8c1542aa873728f72267c07278c5cc0ec91356daf974df21335ccdb46368/coverage-7.13.4-cp311-cp311-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f", size 
= 251913, upload-time = "2026-02-09T12:56:41.97Z" },
+    { url = 
"https://files.pythonhosted.org/packages/74/d7/c62e2c5e4483a748e27868e4c32ad3daa9bdddbba58e1bc7a15e252baa74/coverage-7.13.4-cp311-cp311-musllinux_1_2_i686.whl";,
 hash = 
"sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299", size 
= 249974, upload-time = "2026-02-09T12:56:43.323Z" },
+    { url = 
"https://files.pythonhosted.org/packages/98/9f/4c5c015a6e98ced54efd0f5cf8d31b88e5504ecb6857585fc0161bb1e600/coverage-7.13.4-cp311-cp311-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505", size 
= 253741, upload-time = "2026-02-09T12:56:45.155Z" },
+    { url = 
"https://files.pythonhosted.org/packages/bd/59/0f4eef89b9f0fcd9633b5d350016f54126ab49426a70ff4c4e87446cabdc/coverage-7.13.4-cp311-cp311-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6", size 
= 249695, upload-time = "2026-02-09T12:56:46.636Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b5/2c/b7476f938deb07166f3eb281a385c262675d688ff4659ad56c6c6b8e2e70/coverage-7.13.4-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9", size 
= 250599, upload-time = "2026-02-09T12:56:48.13Z" },
+    { url = 
"https://files.pythonhosted.org/packages/b8/34/c3420709d9846ee3785b9f2831b4d94f276f38884032dca1457fa83f7476/coverage-7.13.4-cp311-cp311-win32.whl";,
 hash = 
"sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9", size 
= 221780, upload-time = "2026-02-09T12:56:50.479Z" },
+    { url = 
"https://files.pythonhosted.org/packages/61/08/3d9c8613079d2b11c185b865de9a4c1a68850cfda2b357fae365cf609f29/coverage-7.13.4-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f", size 
= 222715, upload-time = "2026-02-09T12:56:51.815Z" },
+    { url = 
"https://files.pythonhosted.org/packages/18/1a/54c3c80b2f056164cc0a6cdcb040733760c7c4be9d780fe655f356f433e4/coverage-7.13.4-cp311-cp311-win_arm64.whl";,
 hash = 
"sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f", size 
= 221385, upload-time = "2026-02-09T12:56:53.194Z" },
+    { url = 
"https://files.pythonhosted.org/packages/d1/81/4ce2fdd909c5a0ed1f6dedb88aa57ab79b6d1fbd9b588c1ac7ef45659566/coverage-7.13.4-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459", size 
= 219449, upload-time = "2026-02-09T12:56:54.889Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5d/96/5238b1efc5922ddbdc9b0db9243152c09777804fb7c02ad1741eb18a11c0/coverage-7.13.4-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3", size 
= 219810, upload-time = "2026-02-09T12:56:56.33Z" },
+    { url = 
"https://files.pythonhosted.org/packages/78/72/2f372b726d433c9c35e56377cf1d513b4c16fe51841060d826b95caacec1/coverage-7.13.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634", size 
= 251308, upload-time = "2026-02-09T12:56:57.858Z" },
+    { url = 
"https://files.pythonhosted.org/packages/5d/a0/2ea570925524ef4e00bb6c82649f5682a77fac5ab910a65c9284de422600/coverage-7.13.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3", size 
= 254052, upload-time = "2026-02-09T12:56:59.754Z" },
+    { url = 
"https://files.pythonhosted.org/packages/e8/ac/45dc2e19a1939098d783c846e130b8f862fbb50d09e0af663988f2f21973/coverage-7.13.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa", size 
= 255165, upload-time = "2026-02-09T12:57:01.287Z" },
+    { url = 
"https://files.pythonhosted.org/packages/2d/4d/26d236ff35abc3b5e63540d3386e4c3b192168c1d96da5cb2f43c640970f/coverage-7.13.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3", size 
= 257432, upload-time = "2026-02-09T12:57:02.637Z" },
+    { url = 
"https://files.pythonhosted.org/packages/ec/55/14a966c757d1348b2e19caf699415a2a4c4f7feaa4bbc6326a51f5c7dd1b/coverage-7.13.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a", size 
= 251716, upload-time = "2026-02-09T12:57:04.056Z" },
+    { url = 
"https://files.pythonhosted.org/packages/77/33/50116647905837c66d28b2af1321b845d5f5d19be9655cb84d4a0ea806b4/coverage-7.13.4-cp312-cp312-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7", size 
= 253089, upload-time = "2026-02-09T12:57:05.503Z" },
+    { url = 
"https://files.pythonhosted.org/packages/c2/b4/8efb11a46e3665d92635a56e4f2d4529de6d33f2cb38afd47d779d15fc99/coverage-7.13.4-cp312-cp312-musllinux_1_2_i686.whl";,
 hash = 
"sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc", size 
= 251232, upload-time = "2026-02-09T12:57:06.879Z" },
+    { url = 
"https://files.pythonhosted.org/packages/51/24/8cd73dd399b812cc76bb0ac260e671c4163093441847ffe058ac9fda1e32/coverage-7.13.4-cp312-cp312-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47", size 
= 255299, upload-time = "2026-02-09T12:57:08.245Z" },
+    { url = 
"https://files.pythonhosted.org/packages/03/94/0a4b12f1d0e029ce1ccc1c800944a9984cbe7d678e470bb6d3c6bc38a0da/coverage-7.13.4-cp312-cp312-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985", size 
= 250796, upload-time = "2026-02-09T12:57:10.142Z" },
+    { url = 
"https://files.pythonhosted.org/packages/73/44/6002fbf88f6698ca034360ce474c406be6d5a985b3fdb3401128031eef6b/coverage-7.13.4-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0", size 
= 252673, upload-time = "2026-02-09T12:57:12.197Z" },
+    { url = 
"https://files.pythonhosted.org/packages/de/c6/a0279f7c00e786be75a749a5674e6fa267bcbd8209cd10c9a450c655dfa7/coverage-7.13.4-cp312-cp312-win32.whl";,
 hash = 
"sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246", size 
= 221990, upload-time = "2026-02-09T12:57:14.085Z" },
+    { url = 
"https://files.pythonhosted.org/packages/77/4e/c0a25a425fcf5557d9abd18419c95b63922e897bc86c1f327f155ef234a9/coverage-7.13.4-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126", size 
= 222800, upload-time = "2026-02-09T12:57:15.944Z" },
+    { url = 
"https://files.pythonhosted.org/packages/47/ac/92da44ad9a6f4e3a7debd178949d6f3769bedca33830ce9b1dcdab589a37/coverage-7.13.4-cp312-cp312-win_arm64.whl";,
 hash = 
"sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d", size 
= 221415, upload-time = "2026-02-09T12:57:17.497Z" },
+    { url = 
"https://files.pythonhosted.org/packages/0d/4a/331fe2caf6799d591109bb9c08083080f6de90a823695d412a935622abb2/coverage-7.13.4-py3-none-any.whl";,
 hash = 
"sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0", size 
= 211242, upload-time = "2026-02-09T12:59:02.032Z" },
+]
+
+[package.optional-dependencies]
+toml = [
+    { name = "tomli", marker = "python_full_version <= '3.11'" },
+]
+
 [[package]]
 name = "cycler"
 version = "0.12.1"
@@ -1798,6 +1856,20 @@ wheels = [
     { url = 
"https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl";,
 hash = 
"sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size 
= 374801, upload-time = "2025-12-06T21:30:49.154Z" },
 ]
 
+[[package]]
+name = "pytest-cov"
+version = "7.0.0"
+source = { registry = "https://pypi.org/simple"; }
+dependencies = [
+    { name = "coverage", extra = ["toml"] },
+    { name = "pluggy" },
+    { name = "pytest" },
+]
+sdist = { url = 
"https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz";,
 hash = 
"sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size 
= 54328, upload-time = "2025-09-09T10:57:02.113Z" }
+wheels = [
+    { url = 
"https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl";,
 hash = 
"sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size 
= 22424, upload-time = "2025-09-09T10:57:00.695Z" },
+]
+
 [[package]]
 name = "python-dateutil"
 version = "2.9.0.post0"
@@ -1943,6 +2015,7 @@ dev = [
     { name = "patchelf" },
     { name = "pre-commit" },
     { name = "pytest" },
+    { name = "pytest-cov" },
     { name = "ruff" },
     { name = "setuptools" },
     { name = "tensorflow" },
@@ -1968,6 +2041,7 @@ dev = [
     { name = "patchelf", specifier = ">=0.17.2.4" },
     { name = "pre-commit", specifier = ">=3.0.0" },
     { name = "pytest", specifier = ">=9.0.1" },
+    { name = "pytest-cov", specifier = ">=7.0.0" },
     { name = "ruff", specifier = ">=0.13.1" },
     { name = "setuptools", specifier = ">=80.9.0" },
     { name = "tensorflow", specifier = ">=2.20" },

Reply via email to