@@ -233,28 +233,45 @@ def write_report(node, report_type=None, is_mapnode=False):
233233 return
234234
235235
236- def _protect_collapses (hastraits ):
236+ def _identify_collapses (hastraits ):
237237 raw = hastraits .trait_get ()
238238 cloned = hastraits .clone_traits ().trait_get ()
239239
240+ collapsed = set ()
240241 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+
245250
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 )
247261
248262
249263def save_resultfile (result , cwd , name ):
250264 """Save a result pklz file to ``cwd``"""
251265 resultsfile = os .path .join (cwd , 'result_%s.pklz' % name )
252266 if result .outputs :
267+ collapsed = set ()
253268 try :
254- outputs = _protect_collapses (result .outputs )
269+ collapsed = _identify_collapses (result .outputs )
270+ outputs = _uncollapse (result .outputs .trait_get (), collapsed )
255271 except AttributeError :
256272 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 ))
258275
259276 savepkl (resultsfile , result )
260277 logger .debug ('saved results in %s' , resultsfile )
@@ -306,7 +323,7 @@ def load_resultfile(path, name):
306323 else :
307324 if result .outputs :
308325 try :
309- outputs = result .outputs . trait_get ( )
326+ outputs = _protect_collapses ( result .outputs )
310327 except AttributeError :
311328 outputs = result .outputs .dictcopy () # outputs == Bunch
312329 try :
0 commit comments