@@ -233,28 +233,45 @@ def write_report(node, report_type=None, is_mapnode=False):
233
233
return
234
234
235
235
236
- def _protect_collapses (hastraits ):
236
+ def _identify_collapses (hastraits ):
237
237
raw = hastraits .trait_get ()
238
238
cloned = hastraits .clone_traits ().trait_get ()
239
239
240
+ collapsed = set ()
240
241
for key in cloned :
241
- val = raw [key ]
242
- c = cloned [key ]
243
- if c != val and hasattr (val , '__getitem__' ) and c == val [0 ]:
244
- raw [key ] = [val ]
242
+ orig = raw [key ]
243
+ new = cloned [key ]
244
+ if isinstance (orig , list ) and len (orig ) == 1 and (
245
+ not np .array_equal (orig , new ) and np .array_equal (orig [0 ], new )):
246
+ collapsed .add (key )
247
+
248
+ return collapsed
249
+
245
250
246
- return raw
251
+ def _uncollapse (indexable , collapsed ):
252
+ for key in indexable :
253
+ if key in collapsed :
254
+ indexable [key ] = [indexable [key ]]
255
+ return indexable
256
+
257
+
258
+ def _protect_collapses (hastraits ):
259
+ collapsed = _identify_collapses (hastraits )
260
+ return _uncollapse (hastraits .trait_get (), collapsed )
247
261
248
262
249
263
def save_resultfile (result , cwd , name ):
250
264
"""Save a result pklz file to ``cwd``"""
251
265
resultsfile = os .path .join (cwd , 'result_%s.pklz' % name )
252
266
if result .outputs :
267
+ collapsed = set ()
253
268
try :
254
- outputs = _protect_collapses (result .outputs )
269
+ collapsed = _identify_collapses (result .outputs )
270
+ outputs = _uncollapse (result .outputs .trait_get (), collapsed )
255
271
except AttributeError :
256
272
outputs = result .outputs .dictcopy () # outputs was a bunch
257
- result .outputs .set (** modify_paths (outputs , relative = True , basedir = cwd ))
273
+ outputs = modify_paths (outputs , relative = True , basedir = cwd )
274
+ result .outputs .set (** _uncollapse (outputs , collapsed ))
258
275
259
276
savepkl (resultsfile , result )
260
277
logger .debug ('saved results in %s' , resultsfile )
@@ -306,7 +323,7 @@ def load_resultfile(path, name):
306
323
else :
307
324
if result .outputs :
308
325
try :
309
- outputs = result .outputs . trait_get ( )
326
+ outputs = _protect_collapses ( result .outputs )
310
327
except AttributeError :
311
328
outputs = result .outputs .dictcopy () # outputs == Bunch
312
329
try :
0 commit comments