cvmatrix 3.2.1__tar.gz → 3.2.3__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 (48) hide show
  1. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.github/actions/build/action.yml +4 -4
  2. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.github/actions/release/action.yml +2 -2
  3. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.github/actions/test/action.yml +4 -2
  4. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.github/workflows/package_workflow.yml +4 -4
  5. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.github/workflows/pull_request_package_workflow.yml +1 -1
  6. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.github/workflows/pull_request_test_workflow.yml +4 -4
  7. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.github/workflows/test_workflow.yml +4 -4
  8. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/CHANGELOG.md +12 -0
  9. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/PKG-INFO +11 -3
  10. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/README.md +6 -0
  11. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/cvmatrix/__init__.py +1 -1
  12. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/cvmatrix/cvmatrix.py +18 -16
  13. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/pyproject.toml +4 -2
  14. cvmatrix-3.2.3/uv.lock +1429 -0
  15. cvmatrix-3.2.1/uv.lock +0 -800
  16. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.gitignore +0 -0
  17. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/.readthedocs.yaml +0 -0
  18. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/CONTRIBUTING.md +0 -0
  19. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/LICENSE +0 -0
  20. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/README.md +0 -0
  21. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/__init__.py +0 -0
  22. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/benchmark.py +0 -0
  23. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/benchmark_cvmatrix.png +0 -0
  24. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/benchmark_cvmatrix_numpy_vs_jax.png +0 -0
  25. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/benchmark_cvmatrix_vs_naive.png +0 -0
  26. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/benchmark_jax_variants.png +0 -0
  27. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/benchmark_results.csv +0 -0
  28. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/benchmark_results_jax.csv +0 -0
  29. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/benchmarks/plot_benchmark.py +0 -0
  30. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/cvmatrix/partitioner.py +0 -0
  31. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/CONTRIBUTING.md +0 -0
  32. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/Makefile +0 -0
  33. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/README.md +0 -0
  34. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/api.rst +0 -0
  35. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/conf.py +0 -0
  36. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/index.rst +0 -0
  37. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/make.bat +0 -0
  38. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/requirements.txt +0 -0
  39. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/source/cvmatrix.rst +0 -0
  40. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/source/cvmatrix_module.rst +0 -0
  41. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/docs/source/partitioner_module.rst +0 -0
  42. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/examples/__init__.py +0 -0
  43. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/examples/training_matrices.py +0 -0
  44. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/examples/training_matrices_jax.py +0 -0
  45. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/tests/__init__.py +0 -0
  46. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/tests/load_data.py +0 -0
  47. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/tests/naive_cvmatrix.py +0 -0
  48. {cvmatrix-3.2.1 → cvmatrix-3.2.3}/tests/test_cvmatrix.py +0 -0
@@ -4,12 +4,12 @@ description: Build the package
4
4
  runs:
5
5
  using: "composite"
6
6
  steps:
7
- - uses: actions/checkout@v4
7
+ - uses: actions/checkout@v7
8
8
 
9
9
  - name: Install uv
10
- uses: astral-sh/setup-uv@v5
10
+ uses: astral-sh/setup-uv@v7
11
11
  with:
12
- python-version: '3.14'
12
+ python-version: '3.15'
13
13
 
14
14
  - name: Lint with ruff
15
15
  run: |
@@ -28,7 +28,7 @@ runs:
28
28
  shell: bash
29
29
 
30
30
  - name: Store the distribution packages
31
- uses: actions/upload-artifact@v4
31
+ uses: actions/upload-artifact@v7
32
32
  with:
33
33
  name: python-package-distributions
34
34
  path: dist/
@@ -11,12 +11,12 @@ runs:
11
11
  echo "VERSION=$version" >> $GITHUB_ENV
12
12
  shell: bash
13
13
  - name: Download all the dists
14
- uses: actions/download-artifact@v4
14
+ uses: actions/download-artifact@v8
15
15
  with:
16
16
  name: python-package-distributions
17
17
  path: dist/
18
18
  - name: Sign the dists with Sigstore
19
- uses: sigstore/gh-action-sigstore-python@v3.0.0
19
+ uses: sigstore/gh-action-sigstore-python@v3.4.0
20
20
  with:
21
21
  inputs: >-
22
22
  ./dist/*.tar.gz
@@ -14,7 +14,7 @@ runs:
14
14
  using: "composite"
15
15
  steps:
16
16
  - name: Install uv
17
- uses: astral-sh/setup-uv@v5
17
+ uses: astral-sh/setup-uv@v7
18
18
  with:
19
19
  python-version: ${{ inputs.PYTHON_VERSION }}
20
20
 
@@ -33,5 +33,7 @@ runs:
33
33
  # are skipped (pytest.importorskip), verifying the numpy-only path.
34
34
  - name: Run tests
35
35
  run: |
36
- uv run pytest tests --doctest-modules --junitxml=junit/test-results.xml --cov=cvmatrix/ --cov-report=xml --typeguard-packages=cvmatrix/
36
+ # NOTE: --typeguard-packages takes the PACKAGE name "cvmatrix" (not a path); a
37
+ # trailing slash silently instruments nothing, disabling runtime type checks.
38
+ uv run pytest tests --doctest-modules --junitxml=junit/test-results.xml --cov=cvmatrix/ --cov-report=xml --typeguard-packages=cvmatrix
37
39
  shell: bash
@@ -10,7 +10,7 @@ jobs:
10
10
  build_package:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
- - uses: actions/checkout@v4
13
+ - uses: actions/checkout@v7
14
14
  - uses: ./.github/actions/build
15
15
 
16
16
  publish_package:
@@ -18,8 +18,8 @@ jobs:
18
18
  runs-on: ubuntu-latest
19
19
  if: ${{ github.event.workflow_run.conclusion == 'success' }}
20
20
  steps:
21
- - uses: actions/checkout@v4
22
- - uses: actions/download-artifact@v4
21
+ - uses: actions/checkout@v7
22
+ - uses: actions/download-artifact@v8
23
23
  with:
24
24
  name: python-package-distributions
25
25
  path: dist/
@@ -41,5 +41,5 @@ jobs:
41
41
  contents: write
42
42
  id-token: write
43
43
  steps:
44
- - uses: actions/checkout@v4
44
+ - uses: actions/checkout@v7
45
45
  - uses: ./.github/actions/release
@@ -14,5 +14,5 @@ jobs:
14
14
  build_package:
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@v4
17
+ - uses: actions/checkout@v7
18
18
  - uses: ./.github/actions/build
@@ -18,9 +18,9 @@ jobs:
18
18
  fail-fast: false
19
19
  matrix:
20
20
  os: [ubuntu-latest, windows-latest, macos-latest]
21
- python-version: ["3.11", "3.12", "3.13", "3.14"]
21
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
22
22
  steps:
23
- - uses: actions/checkout@v4
23
+ - uses: actions/checkout@v7
24
24
  - uses: ./.github/actions/test
25
25
  with:
26
26
  PYTHON_VERSION: ${{ matrix.python-version }}
@@ -42,9 +42,9 @@ jobs:
42
42
  fail-fast: false
43
43
  matrix:
44
44
  os: [ubuntu-latest, windows-latest, macos-latest]
45
- python-version: ["3.11", "3.12", "3.13", "3.14"]
45
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
46
46
  steps:
47
- - uses: actions/checkout@v4
47
+ - uses: actions/checkout@v7
48
48
  - uses: ./.github/actions/test
49
49
  with:
50
50
  PYTHON_VERSION: ${{ matrix.python-version }}
@@ -18,9 +18,9 @@ jobs:
18
18
  fail-fast: false
19
19
  matrix:
20
20
  os: [ubuntu-latest, windows-latest, macos-latest]
21
- python-version: ["3.11", "3.12", "3.13", "3.14"]
21
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
22
22
  steps:
23
- - uses: actions/checkout@v4
23
+ - uses: actions/checkout@v7
24
24
  - uses: ./.github/actions/test
25
25
  with:
26
26
  PYTHON_VERSION: ${{ matrix.python-version }}
@@ -42,9 +42,9 @@ jobs:
42
42
  fail-fast: false
43
43
  matrix:
44
44
  os: [ubuntu-latest, windows-latest, macos-latest]
45
- python-version: ["3.11", "3.12", "3.13", "3.14"]
45
+ python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
46
46
  steps:
47
- - uses: actions/checkout@v4
47
+ - uses: actions/checkout@v7
48
48
  - uses: ./.github/actions/test
49
49
  with:
50
50
  PYTHON_VERSION: ${{ matrix.python-version }}
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.2.3] - 2026-10-30
9
+ - Increased the maximum supported Python version from 3.14 to 3.15. Python 3.15 is now included in the CI test matrices. No functional changes.
10
+
11
+ ## [3.2.2] - 2026-07-06
12
+
13
+ ### Changed
14
+ - Lowered the minimum supported Python version from 3.11 to 3.10 (`requires-python = ">=3.10, <3.15"`). The code base uses no Python-3.11-only features; this broadens compatibility for downstream packages that still support Python 3.10. Python 3.10 is now included in the CI test matrices. No functional changes.
15
+
16
+ ### Fixed
17
+ - The fold-index parameters (`validation_indices` / `val_indices`) are now annotated with a new `IndexArray` alias that `_enable_jax_typing()` broadens to admit `jax.Array`, matching the `Array`/`Scalar` aliases introduced in 3.2.1. Previously they were annotated as `npt.NDArray[np.int_]` only, so running the test suite with `typeguard` instrumentation enabled failed on the `jax.jit`/`jax.vmap` trace tests (the indices are abstract tracers under tracing). Runtime behavior is unchanged; this only affects runtime type checking.
18
+ - CI now actually enables `typeguard` instrumentation during tests: the test command passed `--typeguard-packages=cvmatrix/` (a path, with a trailing slash) instead of the package name `cvmatrix`, which silently instrumented nothing and masked the annotation issue above.
19
+
8
20
  ## [3.2.1] - 2026-07-01
9
21
 
10
22
  ### Changed
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: cvmatrix
3
- Version: 3.2.1
3
+ Version: 3.2.3
4
4
  Summary: Fast computation of possibly weighted and possibly centered/scaled training set kernel matrices in a cross-validation setting.
5
5
  Project-URL: Homepage, https://cvmatrix.readthedocs.io/en/latest/
6
6
  Project-URL: Repository, https://github.com/Sm00thix/CVMatrix
@@ -8,11 +8,13 @@ Author-email: Sm00thix <oleemail@icloud.com>
8
8
  Maintainer-email: Sm00thix <oleemail@icloud.com>
9
9
  License-Expression: Apache-2.0
10
10
  License-File: LICENSE
11
+ Classifier: Programming Language :: Python :: 3.10
11
12
  Classifier: Programming Language :: Python :: 3.11
12
13
  Classifier: Programming Language :: Python :: 3.12
13
14
  Classifier: Programming Language :: Python :: 3.13
14
15
  Classifier: Programming Language :: Python :: 3.14
15
- Requires-Python: <3.15,>=3.11
16
+ Classifier: Programming Language :: Python :: 3.15
17
+ Requires-Python: <3.16,>=3.10
16
18
  Requires-Dist: numpy<3.0.0,>=2.0.0
17
19
  Provides-Extra: jax
18
20
  Requires-Dist: jax>=0.4.0; extra == 'jax'
@@ -32,6 +34,8 @@ Description-Content-Type: text/markdown
32
34
 
33
35
  [![Documentation Status](https://readthedocs.org/projects/cvmatrix/badge/?version=latest)](https://cvmatrix.readthedocs.io/en/latest/?badge=latest)
34
36
 
37
+ [![CodeFactor](https://www.codefactor.io/repository/github/sm00thix/cvmatrix/badge/main)](https://www.codefactor.io/repository/github/sm00thix/cvmatrix/overview/main)
38
+
35
39
  [![Tests Status](https://github.com/Sm00thix/CVMatrix/actions/workflows/test_workflow.yml/badge.svg)](https://github.com/Sm00thix/CVMatrix/actions/workflows/test_workflow.yml)
36
40
 
37
41
  [![Test Coverage](https://coveralls.io/repos/github/sm00thix/cvmatrix/badge.svg?branch=main)](https://coveralls.io/github/sm00thix/cvmatrix?branch=main)
@@ -44,6 +48,10 @@ For an implementation of the fast cross-validation algorithms combined with Impr
44
48
 
45
49
  The `cvmatrix` software package now also features **weigthed matrix produts** $\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{Y}$ **without increasing time or space complexity compared to the unweighted case**. This is due to a generalization of the algorithms by Engstrøm and Jensen [[1]](#references). A new article formally describing the generalization is to be announced.
46
50
 
51
+ ## Citation
52
+ - If you use the `cvmatrix` software package for your work, please cite [this Journal of Chemometrics article](https://analyticalsciencejournals.onlinelibrary.wiley.com/doi/full/10.1002/cem.70008).
53
+ - If you use the sample weighted option, please also cite [this PhD thesis](https://arxiv.org/abs/2510.13452).
54
+
47
55
  ## Installation
48
56
 
49
57
  - Install the package for Python3 using the following command:
@@ -12,6 +12,8 @@
12
12
 
13
13
  [![Documentation Status](https://readthedocs.org/projects/cvmatrix/badge/?version=latest)](https://cvmatrix.readthedocs.io/en/latest/?badge=latest)
14
14
 
15
+ [![CodeFactor](https://www.codefactor.io/repository/github/sm00thix/cvmatrix/badge/main)](https://www.codefactor.io/repository/github/sm00thix/cvmatrix/overview/main)
16
+
15
17
  [![Tests Status](https://github.com/Sm00thix/CVMatrix/actions/workflows/test_workflow.yml/badge.svg)](https://github.com/Sm00thix/CVMatrix/actions/workflows/test_workflow.yml)
16
18
 
17
19
  [![Test Coverage](https://coveralls.io/repos/github/sm00thix/cvmatrix/badge.svg?branch=main)](https://coveralls.io/github/sm00thix/cvmatrix?branch=main)
@@ -24,6 +26,10 @@ For an implementation of the fast cross-validation algorithms combined with Impr
24
26
 
25
27
  The `cvmatrix` software package now also features **weigthed matrix produts** $\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{Y}$ **without increasing time or space complexity compared to the unweighted case**. This is due to a generalization of the algorithms by Engstrøm and Jensen [[1]](#references). A new article formally describing the generalization is to be announced.
26
28
 
29
+ ## Citation
30
+ - If you use the `cvmatrix` software package for your work, please cite [this Journal of Chemometrics article](https://analyticalsciencejournals.onlinelibrary.wiley.com/doi/full/10.1002/cem.70008).
31
+ - If you use the sample weighted option, please also cite [this PhD thesis](https://arxiv.org/abs/2510.13452).
32
+
27
33
  ## Installation
28
34
 
29
35
  - Install the package for Python3 using the following command:
@@ -1,4 +1,4 @@
1
- __version__ = "3.2.1"
1
+ __version__ = "3.2.3"
2
2
  __all__ = ["CVMatrix", "Partitioner"]
3
3
  from .cvmatrix import CVMatrix
4
4
  from .partitioner import Partitioner
@@ -26,6 +26,9 @@ from numpy import typing as npt
26
26
  # globals at call time, so the broadened unions take effect once JAX is in use.
27
27
  Array = np.ndarray
28
28
  Scalar = Union[np.floating, float, int]
29
+ # Integer index arrays (fold validation indices). Under jax.jit/jax.vmap these are
30
+ # abstract tracers, so the alias is broadened alongside ``Array``/``Scalar``.
31
+ IndexArray = npt.NDArray[np.int_]
29
32
  # ``dtype`` specifier: ``npt.DTypeLike`` cleanly admits both numpy float types and
30
33
  # JAX scalar dtypes (e.g. ``jnp.float64``) without importing JAX.
31
34
  FloatDType = npt.DTypeLike
@@ -49,9 +52,10 @@ def _enable_jax_typing() -> None:
49
52
  """
50
53
  import jax
51
54
 
52
- global Array, Scalar, _TRACER_TYPES
55
+ global Array, Scalar, IndexArray, _TRACER_TYPES
53
56
  Array = Union[np.ndarray, jax.Array]
54
57
  Scalar = Union[np.floating, jax.Array, float, int]
58
+ IndexArray = Union[npt.NDArray[np.int_], jax.Array]
55
59
  _TRACER_TYPES = (jax.core.Tracer,)
56
60
 
57
61
 
@@ -328,10 +332,8 @@ class CVMatrix:
328
332
  self._init_stats()
329
333
 
330
334
  def training_XTX(
331
- self, validation_indices: npt.NDArray[np.int_]
332
- ) -> Tuple[
333
- Array, Tuple[Optional[Array], Optional[Array], None, None]
334
- ]:
335
+ self, validation_indices: IndexArray
336
+ ) -> Tuple[Array, Tuple[Optional[Array], Optional[Array], None, None]]:
335
337
  r"""
336
338
  Computes the training set :math:`\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{X}`
337
339
  corresponding to every sample except those at the `validation_indices`. Also
@@ -340,7 +342,7 @@ class CVMatrix:
340
342
 
341
343
  Parameters
342
344
  ----------
343
- validation_indices : npt.NDArray[np.int_]
345
+ validation_indices : IndexArray
344
346
  An integer array of indices for the validation set for which to
345
347
  return the corresponding training set
346
348
  :math:`\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{X}`. The validation indices
@@ -383,7 +385,7 @@ class CVMatrix:
383
385
  return self._training_matrices(True, False, validation_indices)
384
386
 
385
387
  def training_XTY(
386
- self, validation_indices: npt.NDArray[np.int_]
388
+ self, validation_indices: IndexArray
387
389
  ) -> Tuple[
388
390
  Array,
389
391
  Tuple[
@@ -403,7 +405,7 @@ class CVMatrix:
403
405
 
404
406
  Parameters
405
407
  ----------
406
- validation_indices : npt.NDArray[np.int_]
408
+ validation_indices : IndexArray
407
409
  An integer array of indices for the validation set for which to
408
410
  return the corresponding training set
409
411
  :math:`\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{Y}`. The validation indices
@@ -449,7 +451,7 @@ class CVMatrix:
449
451
  return self._training_matrices(False, True, validation_indices)
450
452
 
451
453
  def training_XTX_XTY(
452
- self, validation_indices: npt.NDArray[np.int_]
454
+ self, validation_indices: IndexArray
453
455
  ) -> Tuple[
454
456
  Tuple[Array, Array],
455
457
  Tuple[
@@ -471,7 +473,7 @@ class CVMatrix:
471
473
 
472
474
  Parameters
473
475
  ----------
474
- validation_indices : npt.NDArray[np.int_]
476
+ validation_indices : IndexArray
475
477
  An integer array of indices for the validation set for which to
476
478
  return the corresponding training set
477
479
  :math:`\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{X}` and
@@ -517,7 +519,7 @@ class CVMatrix:
517
519
  return self._training_matrices(True, True, validation_indices)
518
520
 
519
521
  def training_statistics(
520
- self, validation_indices: npt.NDArray[np.int_]
522
+ self, validation_indices: IndexArray
521
523
  ) -> Tuple[
522
524
  Optional[Array],
523
525
  Optional[Array],
@@ -587,7 +589,7 @@ class CVMatrix:
587
589
  return x
588
590
 
589
591
  def _get_sum_w_train_and_num_nonzero_w_train(
590
- self, val_indices: npt.NDArray[np.int_]
592
+ self, val_indices: IndexArray
591
593
  ) -> Tuple[Scalar, Scalar]:
592
594
  """
593
595
  Returns a tuple containing the sum of weights in the training set and the number
@@ -631,7 +633,7 @@ class CVMatrix:
631
633
 
632
634
  def _compute_training_stats(
633
635
  self,
634
- val_indices: npt.NDArray[np.int_],
636
+ val_indices: IndexArray,
635
637
  X_val: Optional[Array],
636
638
  Y_val: Optional[Array],
637
639
  return_X_mean: bool,
@@ -752,7 +754,7 @@ class CVMatrix:
752
754
  )
753
755
 
754
756
  def _training_matrices(
755
- self, return_XTX: bool, return_XTY: bool, val_indices: npt.NDArray[np.int_]
757
+ self, return_XTX: bool, return_XTY: bool, val_indices: IndexArray
756
758
  ) -> Tuple[
757
759
  Union[Array, Tuple[Array, Array]],
758
760
  Tuple[
@@ -777,7 +779,7 @@ class CVMatrix:
777
779
  Whether to return the training set
778
780
  :math:`\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{Y}`.
779
781
 
780
- validation_indices : npt.NDArray[np.int_]
782
+ validation_indices : IndexArray
781
783
  An integer array of indices for the validation set for which to
782
784
  return the corresponding training set
783
785
  :math:`\mathbf{X}^{\mathbf{T}}\mathbf{W}\mathbf{X}` and
@@ -896,7 +898,7 @@ class CVMatrix:
896
898
  )
897
899
 
898
900
  def _get_val_matrices(
899
- self, val_indices: npt.NDArray[np.int_], return_XTY: bool
901
+ self, val_indices: IndexArray, return_XTY: bool
900
902
  ) -> Tuple[
901
903
  Array,
902
904
  Array,
@@ -1,17 +1,19 @@
1
1
  [project]
2
2
  name = "cvmatrix"
3
- version = "3.2.1"
3
+ version = "3.2.3"
4
4
  description = "Fast computation of possibly weighted and possibly centered/scaled training set kernel matrices in a cross-validation setting."
5
5
  authors = [{ name = "Sm00thix", email = "oleemail@icloud.com" }]
6
6
  maintainers = [{ name = "Sm00thix", email = "oleemail@icloud.com" }]
7
7
  license = "Apache-2.0"
8
8
  readme = "README.md"
9
- requires-python = ">=3.11, <3.15"
9
+ requires-python = ">=3.10, <3.16"
10
10
  classifiers = [
11
+ "Programming Language :: Python :: 3.10",
11
12
  "Programming Language :: Python :: 3.11",
12
13
  "Programming Language :: Python :: 3.12",
13
14
  "Programming Language :: Python :: 3.13",
14
15
  "Programming Language :: Python :: 3.14",
16
+ "Programming Language :: Python :: 3.15",
15
17
  ]
16
18
  dependencies = [
17
19
  "numpy>=2.0.0,<3.0.0",