NDArray.__setitem__ raises AttributeError for list index keys

Offen Anfängerfreundlich
#764 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 2 Tagen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
82/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python
Bereich
data

Rechercherichtung

Beginne in src/blosc2/ndarray.py beim Fancy-Index-Zweig von NDArray.setitem, besonders bei der Prüfung auf boolesche skalare Schlüssel um die Zeilen 5106–5108. Vergleiche Zuweisungen mit Listen- und Tupelschlüsseln mit den funktionierenden NumPy-Array-Fällen. Die Aufgabe ist erledigt, wenn diese Zuweisungen keinen AttributeError mehr auslösen und das bestehende Verhalten für Array-Schlüssel weiterhin funktioniert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Assigning with a fancy index that is a Python list, or a tuple that contains an index array or list, raises AttributeError (main d3bca9e5 and 4.14.1). Reading with the same keys works, and an index array as the whole key works too.

import blosc2, numpy as np
a = blosc2.zeros((20, 30, 40), dtype=np.float32)
idx = np.array([1, 3, 5])

a[idx] = np.ones((3, 30, 40), np.float32)              # ok
a[[1, 3, 5]] = np.ones((3, 30, 40), np.float32)        # AttributeError: 'list' object has no attribute 'shape'
a[[1, 3, 5], 3:17] = np.ones((3, 14, 40), np.float32)  # AttributeError: 'tuple' object has no attribute 'shape'
a[idx, 3:17] = np.ones((3, 14, 40), np.float32)        # AttributeError: 'tuple' object has no attribute 'shape'
a[2, [1, 3, 5]] = np.ones((3, 40), np.float32)         # AttributeError: 'tuple' object has no attribute 'shape'
a[[1, 3, 5], 3:17]                                     # reading works

Cause. The fancy-index branch of NDArray.__setitem__ checks for a scalar boolean key on the original key, key.shape == () and hasattr(key, "dtype") and ... (ndarray.py#L5106-L5108), which only works when key is a NumPy array. Testing isinstance(key, np.ndarray) (or getattr(key, "shape", None) == ()) first should be enough.

Found while testing write paths for #763; not fixed there to keep that PR to one change.

Vorherrschende Sprache
Python
Sterne
214
Forks
72
Ø Merge
3 T. 9 Std.
Gemergte PRs (30 T.)
24

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus Blosc/python-blosc2

Alle Issues in Blosc/python-blosc2

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

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