|
50 | 50 | order : (property) get/set integration order |
51 | 51 | output : (property) get/set output flag |
52 | 52 | matrix : (property) get/set matrix flag |
| 53 | +query : query line |
53 | 54 | __call__ : transform state |
54 | 55 | __len__ : get number of elements (first level) |
55 | 56 | __getitem__ : get (first level) element by key |
|
61 | 62 | """ |
62 | 63 | from __future__ import annotations |
63 | 64 |
|
| 65 | +import re |
| 66 | + |
64 | 67 | from math import ceil |
65 | 68 | from collections import Counter |
66 | 69 |
|
@@ -1419,6 +1422,42 @@ def matrix(self, |
1419 | 1422 | element.matrix = matrix |
1420 | 1423 |
|
1421 | 1424 |
|
| 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 | + |
1422 | 1461 | def __call__(self, |
1423 | 1462 | state:State, *, |
1424 | 1463 | data:Optional[dict[str, Tensor | dict[str, Tensor]]]=None, |
|
0 commit comments