Skip to content

Commit ff95fc0

Browse files
committed
Found a solution that works with record arrays
1 parent a71b113 commit ff95fc0

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

ptypy/core/classes.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def _new_ptypy_object(self, obj):
145145

146146
if self._pool.get(prefix) is None:
147147
self._pool[prefix] = OrderedDict()
148-
self._recs[prefix] = dict()
148+
self._recs[prefix] = np.zeros((8,), dtype=obj.__class__._fields)
149149

150150
d = self._pool[prefix]
151151
# Check if ID is already taken and assign a new one
@@ -174,14 +174,17 @@ def _new_ptypy_object(self, obj):
174174

175175
d[nID] = obj
176176
obj.ID = nID
177-
idx = len(d) - 1
177+
idx = len(d)
178178
obj.numID = idx
179-
# l = len(self._recs[prefix])
180-
# if idx >= l:
181-
# nl = l + 8192 if idx > 10000 else 2*l
182-
# #self._recs[prefix].resize((nl,), refcheck=False)
183-
# #self._recs[prefix] = np.pad(recs, (0,nl-l))
184-
self._recs[prefix][idx] = np.zeros((1,),dtype=obj.__class__._fields)[0]
179+
l = len(self._recs[prefix])
180+
if idx >= l:
181+
nl = l + 8192 if idx > 10000 else 2*l
182+
self._recs[prefix].resize((nl,), refcheck=False)
183+
# after .resize() all previous references to the records
184+
# array are not guaranteed to point to correct memory
185+
# therefore need to update all previous pointers
186+
for v in self._pool[prefix].values():
187+
v._record = self._recs[prefix][v.numID]
185188
obj._record = self._recs[prefix][idx]
186189
self._recs[prefix][idx]['ID'] = nID
187190

@@ -1286,10 +1289,9 @@ def __str__(self):
12861289
else:
12871290
return first + '\n ACTIVE : slice = %s' % str(self.slice)
12881291

1289-
def copy(self,ID=None, update = True, rec_copy = True):
1292+
def copy(self,ID=None, update = True):
12901293
nView = View(self.owner, ID)
1291-
if rec_copy:
1292-
nView._record = self._record.copy()
1294+
nView._record[...][()] = self._record.copy()[...]
12931295
nView._ndim = self._ndim
12941296
nView.storage = self.storage
12951297
nView.storageID = self.storageID

ptypy/core/manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -585,8 +585,8 @@ def new_data(self, max_frames):
585585
dv = View(self.Cdiff, accessrule=AR_diff) # maybe use index here
586586
mv = View(self.Cmask, accessrule=AR_mask)
587587
else:
588-
dv = dv.copy(update=False, rec_copy=True)
589-
mv = mv.copy(update=False, rec_copy=True)
588+
dv = dv.copy(update=False)
589+
mv = mv.copy(update=False)
590590

591591
maybe_data = data.get(index)
592592
active = maybe_data is not None

0 commit comments

Comments
 (0)