`neighbors` fails with pynndescent 0.7: `'csr_array' object has no attribute 'getnnz'`
メンテナーはふだん 1 日以内に返信
関連するプルリクエストがすでにマージされています。
- #4451 @eroell による — マージ済み
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 84/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- python
- 領域
- data, machine-learning
調査の方向性
scanpy/neighbors/_common.py にある _ind_dist_shortcut を読み、PyNNDescentTransformer.fit_transform の sparse な結果をどのように処理するかを追ってください。issue の sc.pp.neighbors の例で transformer="pynndescent" を使って失敗を再現してください。報告された np.diff(d.indptr) の値は、どちらの sparse 型でも行数を数えます。pynndescent 0.7 で例が動作し、関連するテストで既存の動作が引き続きカバーされていれば完了です。
索引モデルが issue の本文から書いたものです。
説明
pynndescent 0.7.0 (released 2026-10-27) returns a scipy.sparse.csr_array from PyNNDescentTransformer.fit_transform (lmcinnes/pynndescent#258). _ind_dist_shortcut in scanpy/neighbors/_common.py calls d.getnnz(axis=1), which sparse arrays don't have, so sc.pp.neighbors fails whenever it uses pynndescent: transformer="pynndescent", or by default from 8192 cells with the euclidean metric.
import anndata as ad, numpy as np, scanpy as sc
adata = ad.AnnData(np.random.default_rng(0).normal(size=(5000, 20)).astype(np.float32))
sc.pp.neighbors(adata, use_rep="X", transformer="pynndescent")
File ".../scanpy/neighbors/_common.py", line 131, in _ind_dist_shortcut
nnzs = d.getnnz(axis=1)
AttributeError: 'csr_array' object has no attribute 'getnnz'. Did you mean: '_getnnz'?
scanpy 1.12.4, pynndescent 0.7.0, scipy 1.18.1, Python 3.12. Pinning pynndescent<0.7 avoids it. The call is unchanged on main; pynndescent 0.6.0 works. np.diff(d.indptr) gives the per-row counts for both csr_matrix and csr_array.
- 主要言語
- Python
- スター
- 2.6k
- フォーク
- 808
- 平均マージ
- 7時間 38分
- マージ済み PR(30日)
- 18
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
scverse/scanpy のほかの issue
-
calculate_qc_metrics gives negative pct_counts_in_top_N_genes for sparse int16 X and fails for sparse unsigned integer X対応中かも @pujitha24 が 1 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
`highly_variable_genes(flavor="cell_ranger", n_top_genes=n)` selects 0 genes when the top genes have infinite normalized dispersion対応中かも @jorgoose が 18 日前に担当しました。 オープンTriage 🩺
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
`downsample_counts(total_counts=...)` silently does nothing for Fortran-ordered dense `X`対応中かも @entity-0-0-2 が 23 日前に担当しました。 オープンTriage 🩺
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
メンテナーはふだん 1 日以内に返信
-
Multi-column `groupby` crashes on non-string observations in dotplot/matrixplot/heatmap対応中かも @barlowa124 が 34 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信
-
`highly_variable_genes` with `batch_key` and `subset=True` keeps the wrong genes when `n_top_genes` is not set対応中かも @haeganm が 45 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 80/100
Imbad0202/academic-research-skills#1039 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
alexgreensh/token-optimizer#297 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
superdesigndev/treg#1343 ·
メンテナーはふだん 1 日以内に返信
-
GitHub handle should allow underscores対応中かも @PrakarshSrivastav が今日担当しました。 オープンbug good-first-issue
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
nf-core/tools#4581 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
good first issue test
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
ANCORATE/EncryptHome#8 ·