MIT-LCP / MIT-LCP/wfdb-python

OverflowError with rdann on LUED annotations w/numpy 2.2

Open
#522 3 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Jupyter Notebook
Stars
853
Forks
322
PR merge metrics
No merged PRs in 30d

Description

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

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in wfdb/io/annotation.py at rdann, proc_ann_bytes, and proc_core_fields, where the traceback reaches the uint8 overflow. Run the LUDB rdann examples with NumPy 2.2.1 and 1.26.4, then verify that annotation loading completes without OverflowError under the newer version.

Written by the indexing model from the issue text.

Assessment

Tech stack
numpy, python
Domain
data
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.