scib-metrics 0.5.6__tar.gz → 0.5.7__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 (79) hide show
  1. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/workflows/build.yaml +2 -2
  2. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/workflows/test_linux.yaml +1 -1
  3. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/workflows/test_linux_cuda.yaml +2 -2
  4. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/workflows/test_linux_pre.yaml +1 -1
  5. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/workflows/test_macos.yaml +1 -1
  6. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/workflows/test_macos_m1.yaml +1 -1
  7. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/workflows/test_windows.yaml +1 -1
  8. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.pre-commit-config.yaml +2 -2
  9. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.readthedocs.yaml +1 -1
  10. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/PKG-INFO +2 -2
  11. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/pyproject.toml +2 -2
  12. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/benchmark/_core.py +9 -1
  13. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/test_benchmarker.py +12 -0
  14. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.codecov.yaml +0 -0
  15. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.cruft.json +0 -0
  16. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.editorconfig +0 -0
  17. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  18. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  19. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  20. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.github/workflows/release.yaml +0 -0
  21. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/.gitignore +0 -0
  22. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/CHANGELOG.md +0 -0
  23. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/LICENSE +0 -0
  24. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/README.md +0 -0
  25. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/Makefile +0 -0
  26. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/_static/.gitkeep +0 -0
  27. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/_static/css/custom.css +0 -0
  28. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/_templates/.gitkeep +0 -0
  29. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/_templates/autosummary/class.rst +0 -0
  30. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/_templates/class_no_inherited.rst +0 -0
  31. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/api.md +0 -0
  32. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/changelog.md +0 -0
  33. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/conf.py +0 -0
  34. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/contributing.md +0 -0
  35. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/extensions/.gitkeep +0 -0
  36. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/extensions/typed_returns.py +0 -0
  37. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/index.md +0 -0
  38. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/notebooks/large_scale.ipynb +0 -0
  39. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/notebooks/lung_example.ipynb +0 -0
  40. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/references.bib +0 -0
  41. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/references.md +0 -0
  42. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/template_usage.md +0 -0
  43. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/docs/tutorials.md +0 -0
  44. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/setup.py +0 -0
  45. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/__init__.py +0 -0
  46. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/_settings.py +0 -0
  47. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/_types.py +0 -0
  48. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/benchmark/__init__.py +0 -0
  49. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/metrics/__init__.py +0 -0
  50. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/metrics/_graph_connectivity.py +0 -0
  51. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/metrics/_isolated_labels.py +0 -0
  52. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/metrics/_kbet.py +0 -0
  53. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/metrics/_lisi.py +0 -0
  54. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/metrics/_nmi_ari.py +0 -0
  55. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/metrics/_pcr_comparison.py +0 -0
  56. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/metrics/_silhouette.py +0 -0
  57. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/nearest_neighbors/__init__.py +0 -0
  58. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/nearest_neighbors/_dataclass.py +0 -0
  59. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/nearest_neighbors/_jax.py +0 -0
  60. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/nearest_neighbors/_pynndescent.py +0 -0
  61. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/__init__.py +0 -0
  62. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/_diffusion_nn.py +0 -0
  63. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/_dist.py +0 -0
  64. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/_kmeans.py +0 -0
  65. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/_lisi.py +0 -0
  66. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/_pca.py +0 -0
  67. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/_pcr.py +0 -0
  68. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/_silhouette.py +0 -0
  69. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/src/scib_metrics/utils/_utils.py +0 -0
  70. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/__init__.py +0 -0
  71. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/test_BRAS_metric.py +0 -0
  72. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/test_metrics.py +0 -0
  73. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/test_neighbors.py +0 -0
  74. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/test_pcr_comparison.py +0 -0
  75. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/utils/__init__.py +0 -0
  76. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/utils/data.py +0 -0
  77. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/utils/sampling.py +0 -0
  78. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/utils/test_pca.py +0 -0
  79. {scib_metrics-0.5.6 → scib_metrics-0.5.7}/tests/utils/test_pcr.py +0 -0
@@ -15,10 +15,10 @@ jobs:
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
17
  - uses: actions/checkout@v4
18
- - name: Set up Python 3.11
18
+ - name: Set up Python 3.12
19
19
  uses: actions/setup-python@v5
20
20
  with:
21
- python-version: "3.11"
21
+ python-version: "3.12"
22
22
  cache: "pip"
23
23
  cache-dependency-path: "**/pyproject.toml"
24
24
  - name: Install build dependencies
@@ -21,7 +21,7 @@ jobs:
21
21
  fail-fast: false
22
22
  matrix:
23
23
  os: [ubuntu-latest]
24
- python: ["3.10", "3.11", "3.12"]
24
+ python: ["3.11", "3.12", "3.13"]
25
25
 
26
26
  name: Integration
27
27
 
@@ -30,8 +30,8 @@ jobs:
30
30
  strategy:
31
31
  fail-fast: false
32
32
  matrix:
33
- python: ["3.11"]
34
- cuda: ["11"]
33
+ python: ["3.12"]
34
+ cuda: ["12"]
35
35
 
36
36
  container:
37
37
  image: scverse/scvi-tools:py${{ matrix.python }}-cu${{ matrix.cuda }}-base
@@ -31,7 +31,7 @@ jobs:
31
31
  fail-fast: false
32
32
  matrix:
33
33
  os: [ubuntu-latest]
34
- python: ["3.10", "3.11", "3.12"]
34
+ python: ["3.11", "3.12", "3.13"]
35
35
 
36
36
  name: Integration (Prereleases)
37
37
 
@@ -20,7 +20,7 @@ jobs:
20
20
  fail-fast: false
21
21
  matrix:
22
22
  os: [macos-latest]
23
- python: ["3.10", "3.11", "3.12"]
23
+ python: ["3.11", "3.12", "3.13"]
24
24
 
25
25
  name: Integration
26
26
 
@@ -20,7 +20,7 @@ jobs:
20
20
  fail-fast: false
21
21
  matrix:
22
22
  os: [macos-14]
23
- python: ["3.10", "3.11", "3.12"]
23
+ python: ["3.11", "3.12", "3.13"]
24
24
 
25
25
  name: Integration
26
26
 
@@ -20,7 +20,7 @@ jobs:
20
20
  fail-fast: false
21
21
  matrix:
22
22
  os: [windows-latest]
23
- python: ["3.10", "3.11", "3.12"]
23
+ python: ["3.11", "3.12", "3.13"]
24
24
 
25
25
  name: Integration
26
26
 
@@ -11,7 +11,7 @@ repos:
11
11
  hooks:
12
12
  - id: prettier
13
13
  - repo: https://github.com/astral-sh/ruff-pre-commit
14
- rev: v0.12.2
14
+ rev: v0.12.12
15
15
  hooks:
16
16
  - id: ruff
17
17
  types_or: [python, pyi, jupyter]
@@ -19,7 +19,7 @@ repos:
19
19
  - id: ruff-format
20
20
  types_or: [python, pyi, jupyter]
21
21
  - repo: https://github.com/pre-commit/pre-commit-hooks
22
- rev: v5.0.0
22
+ rev: v6.0.0
23
23
  hooks:
24
24
  - id: detect-private-key
25
25
  - id: check-ast
@@ -3,7 +3,7 @@ version: 2
3
3
  build:
4
4
  os: ubuntu-20.04
5
5
  tools:
6
- python: "3.10"
6
+ python: "3.11"
7
7
  sphinx:
8
8
  configuration: docs/conf.py
9
9
  # disable this for more lenient docs builds
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scib-metrics
3
- Version: 0.5.6
3
+ Version: 0.5.7
4
4
  Summary: Accelerated and Python-only scIB metrics
5
5
  Project-URL: Documentation, https://scib-metrics.readthedocs.io/
6
6
  Project-URL: Source, https://github.com/yoseflab/scib-metrics
@@ -37,7 +37,7 @@ License: BSD 3-Clause License
37
37
  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38
38
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
39
  License-File: LICENSE
40
- Requires-Python: >=3.10
40
+ Requires-Python: >=3.11
41
41
  Requires-Dist: anndata
42
42
  Requires-Dist: chex
43
43
  Requires-Dist: igraph>0.9.0
@@ -5,10 +5,10 @@ requires = ["hatchling"]
5
5
 
6
6
  [project]
7
7
  name = "scib-metrics"
8
- version = "0.5.6"
8
+ version = "0.5.7"
9
9
  description = "Accelerated and Python-only scIB metrics"
10
10
  readme = "README.md"
11
- requires-python = ">=3.10"
11
+ requires-python = ">=3.11"
12
12
  license = { file = "LICENSE" }
13
13
  authors = [{ name = "Adam Gayoso" }]
14
14
  maintainers = [{ name = "Adam Gayoso", email = "adamgayoso@berkeley.edu" }]
@@ -1,3 +1,4 @@
1
+ import gc
1
2
  import os
2
3
  import warnings
3
4
  from collections.abc import Callable
@@ -120,6 +121,8 @@ class Benchmarker:
120
121
  progress_bar
121
122
  Whether to show a progress bar for :meth:`~scib_metrics.benchmark.Benchmarker.prepare` and
122
123
  :meth:`~scib_metrics.benchmark.Benchmarker.benchmark`.
124
+ solver
125
+ SVD solver to use during PCA. can help stability issues. Choose from: "arpack", "randomized" or "auto"
123
126
 
124
127
  Notes
125
128
  -----
@@ -142,6 +145,7 @@ class Benchmarker:
142
145
  pre_integrated_embedding_obsm_key: str | None = None,
143
146
  n_jobs: int = 1,
144
147
  progress_bar: bool = True,
148
+ solver: str = "arpack",
145
149
  ):
146
150
  self._adata = adata
147
151
  self._embedding_obsm_keys = embedding_obsm_keys
@@ -158,6 +162,7 @@ class Benchmarker:
158
162
  self._n_jobs = n_jobs
159
163
  self._progress_bar = progress_bar
160
164
  self._compute_neighbors = True
165
+ self._solver = solver
161
166
 
162
167
  if self._bio_conservation_metrics is None and self._batch_correction_metrics is None:
163
168
  raise ValueError("Either batch or bio metrics must be defined.")
@@ -179,11 +184,13 @@ class Benchmarker:
179
184
  the data and the number of neighbors to compute and return a :class:`~scib_metrics.utils.nearest_neighbors.NeighborsResults`
180
185
  object.
181
186
  """
187
+ gc.collect()
188
+
182
189
  # Compute PCA
183
190
  if self._pre_integrated_embedding_obsm_key is None:
184
191
  # This is how scib does it
185
192
  # https://github.com/theislab/scib/blob/896f689e5fe8c57502cb012af06bed1a9b2b61d2/scib/metrics/pcr.py#L197
186
- sc.tl.pca(self._adata, use_highly_variable=False)
193
+ sc.tl.pca(self._adata, svd_solver=self._solver, use_highly_variable=False)
187
194
  self._pre_integrated_embedding_obsm_key = "X_pca"
188
195
 
189
196
  for emb_key in self._embedding_obsm_keys:
@@ -240,6 +247,7 @@ class Benchmarker:
240
247
  pbar = tqdm(total=num_metrics, desc="Metrics", position=1, leave=False, colour="blue")
241
248
  for metric_type, metric_collection in self._metric_collection_dict.items():
242
249
  for metric_name, use_metric_or_kwargs in asdict(metric_collection).items():
250
+ gc.collect()
243
251
  if use_metric_or_kwargs:
244
252
  pbar.set_postfix_str(f"{metric_type}: {metric_name}") if pbar is not None else None
245
253
  metric_fn = getattr(scib_metrics, metric_name)
@@ -1,4 +1,5 @@
1
1
  import pandas as pd
2
+ import pytest
2
3
 
3
4
  from scib_metrics.benchmark import BatchCorrection, Benchmarker, BioConservation
4
5
  from scib_metrics.nearest_neighbors import jax_approx_min_k
@@ -52,6 +53,7 @@ def test_benchmarker_custom_metric_booleans():
52
53
  assert "kbet_per_label" not in results.columns
53
54
  assert "graph_connectivity" not in results.columns
54
55
  assert "ilisi_knn" in results.columns
56
+ assert "bras" in results.columns
55
57
 
56
58
 
57
59
  def test_benchmarker_custom_metric_callable():
@@ -80,3 +82,13 @@ def test_benchmarker_custom_near_neighs():
80
82
  results = bm.get_results()
81
83
  assert isinstance(results, pd.DataFrame)
82
84
  bm.plot_results_table()
85
+
86
+
87
+ @pytest.mark.parametrize("solver", ["arpack", "randomized"])
88
+ def test_benchmarker_different_solvers(solver):
89
+ ad, emb_keys, batch_key, labels_key = dummy_benchmarker_adata()
90
+ bm = Benchmarker(ad, batch_key, labels_key, emb_keys, solver=solver)
91
+ bm.benchmark()
92
+ results = bm.get_results()
93
+ assert isinstance(results, pd.DataFrame)
94
+ bm.plot_results_table()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes