Skip to content

Commit 41691cf

Browse files
committed
02_11_2025: added lattice query method
1 parent 2614562 commit 41691cf

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

model/library/line.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
order : (property) get/set integration order
5151
output : (property) get/set output flag
5252
matrix : (property) get/set matrix flag
53+
query : query line
5354
__call__ : transform state
5455
__len__ : get number of elements (first level)
5556
__getitem__ : get (first level) element by key
@@ -61,6 +62,8 @@
6162
"""
6263
from __future__ import annotations
6364

65+
import re
66+
6467
from math import ceil
6568
from collections import Counter
6669

@@ -1419,6 +1422,42 @@ def matrix(self,
14191422
element.matrix = matrix
14201423

14211424

1425+
def query(self, *,
1426+
kinds:Optional[list[str]] = None,
1427+
patterns:Optional[list[str]] = None,
1428+
checks:Optional[Callable[[Element], bool]] = None) -> list[Element]:
1429+
"""
1430+
Query line (all levels) for specific elements
1431+
1432+
Parameters
1433+
----------
1434+
kinds: Optional[list[str]]
1435+
list of kinds to select
1436+
patterns: Optional[list[str]]
1437+
list of patterns to select
1438+
checks: checks:Optional[Callable[[Element], bool]]
1439+
list of check functions
1440+
1441+
Returns
1442+
-------
1443+
list[Element]
1444+
1445+
"""
1446+
elements:list[Element] = [*self.scan('name')]
1447+
1448+
if kinds:
1449+
elements = [element for element in elements if element.__class__.__name__ in kinds]
1450+
1451+
if patterns:
1452+
patterns = [re.compile(pattern) for pattern in patterns]
1453+
elements = [element for element in elements if any(pattern.search(element.name) for pattern in patterns)]
1454+
1455+
for check in checks:
1456+
elements = [element for element in elements if check(element)]
1457+
1458+
return elements
1459+
1460+
14221461
def __call__(self,
14231462
state:State, *,
14241463
data:Optional[dict[str, Tensor | dict[str, Tensor]]]=None,

0 commit comments

Comments
 (0)