1
+ from itertools import groupby
1
2
from typing import Iterable
2
3
import numpy as np
3
4
@@ -364,9 +365,11 @@ def _get_results_from_db(self, members, steps):
364
365
raise ValueError ("Not an element" )
365
366
366
367
results_set = self .rdb .get_rows (field_name , columns , {"key" : members_keys , "part" : parts_names , "step" : steps_names })
367
- return self . _to_fea2_results ( results_set = results_set )
368
+ part_results = { k : list ( g ) for k , g in groupby ( results_set , lambda row : row [ 1 ])}
368
369
369
- def _to_fea2_results (self , results_set ):
370
+ return self ._to_fea2_results (part_results )
371
+
372
+ def _to_fea2_results (self , part_results ):
370
373
"""Convert a set of results from database format to the appropriate
371
374
result object.
372
375
@@ -381,21 +384,25 @@ def _to_fea2_results(self, results_set):
381
384
Dictiorany grouping the results per Step.
382
385
"""
383
386
results = {}
384
- for r in results_set :
385
- step = self .problem .find_step_by_name (r [0 ])
386
- results .setdefault (step , [])
387
- part = self .model .find_part_by_name (r [1 ]) or self .model .find_part_by_name (r [1 ], casefold = True )
387
+ for name , results in part_results .items ():
388
+ part = self .model .find_part_by_name (name ) or self .model .find_part_by_name (name , casefold = True )
389
+
388
390
if not part :
389
- raise ValueError (f"Part { r [1 ]} not in model" )
390
- m = getattr (part , self ._results_func )(r [2 ])
391
- if isinstance (m , _Element3D ):
392
- cls = self ._results_class_3d
393
- columns = self ._components_names_3d
394
- else :
395
- cls = self ._results_class_2d
396
- columns = self ._components_names_2d
397
- values = {k .lower (): v for k , v in zip (columns , r [3 :])}
398
- results [step ].append (cls (m , ** values ))
391
+ raise ValueError (f"Part { name } not in model" )
392
+
393
+ key_element = {e .key : e for e in part .elements }
394
+ for r in results :
395
+ step = self .problem .find_step_by_name (r [0 ])
396
+ results .setdefault (step , [])
397
+ m = key_element [r [2 ]]
398
+ if isinstance (m , _Element3D ):
399
+ cls = self ._results_class_3d
400
+ columns = self ._components_names_3d
401
+ else :
402
+ cls = self ._results_class_2d
403
+ columns = self ._components_names_2d
404
+ values = {k .lower (): v for k , v in zip (columns , r [3 :])}
405
+ results [step ].append (cls (m , ** values ))
399
406
return results
400
407
401
408
def get_max_component (self , component , step ):
0 commit comments