1"""
2``syside.query``: read-only queries over a loaded model.
3
4Use this package to ask questions about a model that :func:`syside.load_model`
5has produced: find elements by name or metadata, walk generalization and
6containment hierarchies, and inspect features, connections, and variation
7points. No function here modifies the model.
8
9Three kinds of names are exported:
10
11* Traversal primitives (:func:`generalizations`, :func:`specializations`,
12 and :func:`walk_containment`), which walk the type and ownership
13 hierarchies.
14* Query functions built on those primitives, such as :func:`find_by_name` and
15 :func:`find_elements_of_type`.
16* Index types (:class:`NameIndex`, :class:`TypeIndex`, :class:`MetadataIndex`)
17 with matching ``build_*_index`` builders. Without an index, each query scans
18 the model; when you repeat lookups, build the index once and pass it via the
19 ``index=`` parameter to make each later lookup a dictionary read. An index
20 never changes a query's result, only its cost.
21
22Every function returns a plain, fully materialized value (a ``list``,
23``set``, ``bool``, scalar, or ``None``), never a lazy view of the model.
24"""
25
26from __future__ import annotations
27
28from syside.query._functions import (
29 LibraryElements,
30 MetadataIndex,
31 MultiplicityBounds,
32 NameIndex,
33 TypeIndex,
34 UNBOUNDED,
35 Unbounded,
36 actors,
37 declared_actors,
38 containers,
39 annotated_elements,
40 build_metadata_index,
41 build_name_index,
42 build_type_index,
43 contains,
44 contents,
45 connection_ends,
46 find_bindings_of,
47 cross_subsets,
48 all_contents,
49 description,
50 declared_types_of,
51 all_types_of,
52 documentation,
53 enumeration_values,
54 exposed_elements,
55 feature_chain,
56 featured_in,
57 features_of,
58 find_by_name,
59 find_by_name_and_type,
60 find_by_qualified_name,
61 get_by_path,
62 find_elements_of_type,
63 find_metadata_usages,
64 find_relationships,
65 has_metadata_prefix,
66 find_connectors_of,
67 find_connectors_to,
68 find_connectors_from,
69 inherited_features,
70 is_contained_in,
71 metadata_prefixes,
72 metadata_usages,
73 multiplicity_bounds,
74 generalization_names,
75 redefined_by,
76 redefines,
77 referenced_feature,
78 siblings,
79 specializes,
80 superclassifiers,
81 subject_of,
82 declared_subject_of,
83 subsets,
84 subclassifiers,
85 supertypes,
86 textual_representation,
87 variants,
88)
89from syside.query._primitives import (
90 specializations,
91 generalizations,
92 walk_containment,
93)
94
95__all__ = [
96 # primitives
97 "generalizations",
98 "specializations",
99 "walk_containment",
100 # index types + builders
101 "LibraryElements",
102 "NameIndex",
103 "TypeIndex",
104 "MetadataIndex",
105 "build_name_index",
106 "build_type_index",
107 "build_metadata_index",
108 # dataclasses
109 "MultiplicityBounds",
110 "Unbounded",
111 "UNBOUNDED",
112 # lookup
113 "find_by_name",
114 "find_by_name_and_type",
115 "find_by_qualified_name",
116 "get_by_path",
117 "find_elements_of_type",
118 "find_relationships",
119 "find_metadata_usages",
120 # ownership tree
121 "contents",
122 "all_contents",
123 "containers",
124 "siblings",
125 "is_contained_in",
126 "contains",
127 # feature / type structure
128 "features_of",
129 "inherited_features",
130 "generalization_names",
131 "declared_types_of",
132 "all_types_of",
133 "supertypes",
134 "subclassifiers",
135 "subsets",
136 "redefines",
137 "redefined_by",
138 "superclassifiers",
139 "featured_in",
140 "cross_subsets",
141 "specializes",
142 # connections
143 "connection_ends",
144 "find_connectors_of",
145 "find_connectors_to",
146 "find_connectors_from",
147 "find_bindings_of",
148 # expressions / chains
149 "referenced_feature",
150 "feature_chain",
151 # documentation
152 "documentation",
153 "description",
154 "textual_representation",
155 # metadata
156 "metadata_prefixes",
157 "metadata_usages",
158 "has_metadata_prefix",
159 "annotated_elements",
160 # enumerations / variants / cases
161 "enumeration_values",
162 "variants",
163 "actors",
164 "declared_actors",
165 "subject_of",
166 "declared_subject_of",
167 # multiplicity
168 "multiplicity_bounds",
169 # views
170 "exposed_elements",
171]