MIT-LCP / MIT-LCP/wfdb-python

OverflowError with rdann on LUED annotations w/numpy 2.2

オープン
#522 コメント 3 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Jupyter Notebook
スター
853
フォーク
322
PR マージ指標
30日以内にマージされた PR はありません

説明

Another area of incompatibility with numpy 2.2 I fear...

If I try

wfdb.rdann('physionet.org/files/ludb/1.0.0/1', extension='atr_ii')

or (for version 1.0.1)

wfdb.rdann('physionet.org/files/ludb/1.0.1/1', extension='ii')

I get:

---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call last)
Cell In[38], line 2
      1 # os.path.join(folder_path, str(pid))
----> 2 wfdb.rdann('physionet.org/files/ludb/1.0.0/1', extension='atr_ii')

File ~/miniconda3/envs/pytorch-aline/lib/python3.12/site-packages/wfdb/io/annotation.py:1953, in rdann(record_name, extension, sampfrom, sampto, shift_samps, pn_dir, return_label_elements, summarize_labels)
   1950 filebytes = load_byte_pairs(record_name, extension, pn_dir)
   1952 # Get WFDB annotation fields from the file bytes
-> 1953 (sample, label_store, subtype, chan, num, aux_note) = proc_ann_bytes(
   1954     filebytes, sampto
   1955 )
   1957 # Get the indices of annotations that hold definition information about
   1958 # the entire annotation file, and other empty annotations to be removed.
   1959 potential_definition_inds, rm_inds = get_special_inds(
   1960     sample, label_store, aux_note
   1961 )

File ~/miniconda3/envs/pytorch-aline/lib/python3.12/site-packages/wfdb/io/annotation.py:2154, in proc_ann_bytes(filebytes, sampto)
   2146 # Process annotations. Iterate across byte pairs.
   2147 # Sequence for one ann is:
   2148 # - SKIP pair (if any)
   2149 # - samp + sym pair
   2150 # - other pairs (if any)
   2151 # The last byte pair of the file is 0 indicating eof.
   2152 while bpi < filebytes.shape[0] - 1:
   2153     # Get the sample and label_store fields of the current annotation
-> 2154     sample_diff, current_label_store, bpi = proc_core_fields(filebytes, bpi)
   2155     sample_total = sample_total + sample_diff
   2156     sample.append(sample_total)

File ~/miniconda3/envs/pytorch-aline/lib/python3.12/site-packages/wfdb/io/annotation.py:2240, in proc_core_fields(filebytes, bpi)
   2238 # Not a skip - it is the actual sample number + annotation type store value
   2239 label_store = filebytes[bpi, 1] >> 2
-> 2240 sample_diff += int(filebytes[bpi, 0] + 256 * (filebytes[bpi, 1] & 3))
   2241 bpi = bpi + 1
   2243 return sample_diff, label_store, bpi

OverflowError: Python integer 256 out of bounds for uint8

Using the command line rdann works fine, and it works after downgrading numpy 1.26. Seems likely related to #493 ?

Pertinent versions:
wfdb-python == 4.1.2
numpy == 2.2.1 (broken)
numpy == 1.26.4 (works)
python == 3.12

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

uint8 のオーバーフローに traceback が到達する wfdb/io/annotation.py の rdann、proc_ann_bytes、proc_core_fields から始めます。NumPy 2.2.1 と 1.26.4 で LUDB の rdann の例を実行し、新しいバージョンでアノテーションの読み込みが OverflowError なしに完了することを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
numpy, python
領域
data
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。