44Safe cross-referencing skips failed xref's
55
66"""
7+ from __future__ import annotations
78from collections import defaultdict
8- from typing import Any
9+ from typing import Any , TYPE_CHECKING
910
1011import numpy as np
1112from numpy import zeros , argsort , arange , array_equal
1213from pyNastran .bdf .bdf_interface .cross_reference import XrefMesh
13-
14+ if TYPE_CHECKING :
15+ from pyNastran .bdf .bdf import Element , Property #, GRID
16+ from pyNastran .bdf .cards .nodes import GRID
1417
1518class SafeXrefMesh (XrefMesh ):
1619 """
@@ -28,21 +31,21 @@ def __init__(self) -> None:
2831 # for elem in model.elements:
2932 # elem.check_unique_nodes()
3033
31- def safe_cross_reference (self , xref = True ,
32- xref_nodes = True ,
33- xref_elements = True ,
34- xref_nodes_with_elements = False ,
35- xref_properties = True ,
36- xref_masses = True ,
37- xref_materials = True ,
38- xref_loads = True ,
39- xref_constraints = True ,
40- xref_aero = True ,
41- xref_sets = True ,
42- xref_optimization = True ,
43- create_superelement_geometry = False ,
34+ def safe_cross_reference (self , xref : bool = True ,
35+ xref_nodes : bool = True ,
36+ xref_elements : bool = True ,
37+ xref_nodes_with_elements : bool = False ,
38+ xref_properties : bool = True ,
39+ xref_masses : bool = True ,
40+ xref_materials : bool = True ,
41+ xref_loads : bool = True ,
42+ xref_constraints : bool = True ,
43+ xref_aero : bool = True ,
44+ xref_sets : bool = True ,
45+ xref_optimization : bool = True ,
46+ create_superelement_geometry : bool = False ,
4447 debug = True ,
45- word = '' ):
48+ word : str = '' ) -> None :
4649 """
4750 Performs cross referencing in a way that skips data gracefully.
4851
@@ -85,7 +88,7 @@ def safe_cross_reference(self, xref=True,
8588 self .pop_xref_errors ()
8689 for superelement_tuple , superelement in sorted (self .superelement_models .items ()):
8790 if isinstance (superelement_tuple , int ):
88- word = f' (Superelement { super_tuple :d} )'
91+ word = f' (Superelement { superelement_tuple :d} )'
8992 else :
9093 wordi , value , label = superelement_tuple
9194 if label :
@@ -382,7 +385,7 @@ def _safe_cross_reference_optimization(self) -> None:
382385 for unused_key , topvar in self .topvar .items ():
383386 topvar .safe_cross_reference (self )
384387
385- def safe_empty_nodes (self , nids , msg = '' ):
388+ def safe_empty_nodes (self , nids : list [ int ] , msg : str = '' ) -> tuple [ list [ GRID ], list [ int ]] :
386389 """safe xref version of self.Nodes(nid, msg='')"""
387390 nodes = []
388391 missing_nodes = []
@@ -398,7 +401,7 @@ def safe_empty_nodes(self, nids, msg=''):
398401 self .log .warning ('Nodes %s are missing%s' % (str (missing_nodes ), msg ))
399402 return nodes , missing_nodes
400403
401- def safe_get_nodes (self , nids : list [int ], msg : str = '' ) -> tuple [list [Any ], str ]:
404+ def safe_get_nodes (self , nids : list [int ], msg : str = '' ) -> tuple [list [GRID ], str ]:
402405 """safe xref version of self.Nodes(nid, msg='')"""
403406 nodes = []
404407 error_nodes = []
@@ -414,7 +417,7 @@ def safe_get_nodes(self, nids: list[int], msg: str='') -> tuple[list[Any], str]:
414417 msgi += 'Could not find nodes %s%s\n ' % (', ' .join (error_nodes ), msg )
415418 return nodes , msgi
416419
417- def safe_get_points (self , point_ids , msg = '' ):
420+ def safe_get_points (self , point_ids : list [ int ] , msg : str = '' ):
418421 """safe xref version of self.Points(point_ids, msg='')"""
419422 points = []
420423 error_points = []
@@ -430,7 +433,7 @@ def safe_get_points(self, point_ids, msg=''):
430433 msgi += 'Could not find POINTs %s%s\n ' % (', ' .join (error_points ), msg )
431434 return points , msgi
432435
433- def safe_get_elements (self , eids , msg = '' ):
436+ def safe_get_elements (self , eids : list [ int ] , msg : str = '' ):
434437 """safe xref version of self.Elements(eid, msg='')"""
435438 elements = []
436439 msgi = ''
@@ -443,7 +446,7 @@ def safe_get_elements(self, eids, msg=''):
443446 elements .append (element )
444447 return elements , msgi
445448
446- def safe_element (self , eid , ref_id , xref_errors , msg = '' ):
449+ def safe_element (self , eid : int , ref_id : int , xref_errors , msg : str = '' ) -> ELement :
447450 """
448451 Gets an element card
449452
@@ -466,8 +469,9 @@ def safe_element(self, eid, ref_id, xref_errors, msg=''):
466469 xref_errors ['eid' ].append ((ref_id , eid ))
467470 return eid_ref
468471
469- def safe_elements (self , eids , ref_id : int ,
470- xref_errors : dict [str , tuple [int , int ]], msg = '' ):
472+ def safe_elements (self , eids : list [int ], ref_id : int ,
473+ xref_errors : dict [str , tuple [int , int ]],
474+ msg : str = '' ) -> list [Element ]:
471475 """
472476 Gets an series of elements
473477
@@ -497,7 +501,7 @@ def safe_elements(self, eids, ref_id: int,
497501 #raise KeyError(msg)
498502 return elements
499503
500- def safe_property (self , pid , ref_id , xref_errors , msg = '' ):
504+ def safe_property (self , pid : int , ref_id : int , xref_errors , msg : str = '' ) -> Property :
501505 """
502506 Parameters
503507 ----------
0 commit comments