MIT-LCP / MIT-LCP/wfdb-python

OverflowError with rdann on LUED annotations w/numpy 2.2

Offen
#522 3 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Jupyter Notebook
Sterne
853
Forks
322
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in wfdb/io/annotation.py bei rdann, proc_ann_bytes und proc_core_fields, wo der Traceback den uint8-Overflow erreicht. Führe die LUDB-rdann-Beispiele mit NumPy 2.2.1 und 1.26.4 aus und überprüfe anschließend, dass das Laden der Annotationen unter der neueren Version ohne OverflowError abgeschlossen wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
numpy, python
Bereich
data
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.