Commit a686eda
committed
✨
A code's output namespace can grow to dozens or even hundreds of fields once every
quantity it produces is exposed. Flattening all of them onto a single top-level mapping
floods autocomplete, makes the API hard to skim, and forces unrelated quantities
(forces, bands, occupations, magnetization, ...) to share one namespace with no
grouping. Related fields belong together under a named sub-namespace so users can
discover them by category instead of scrolling through one giant list.
`SubMapping` is a sentinel default, paired with the existing `@output_mapping`
decorator, that lets a mapping class declare a nested mapping as a regular
field:
@output_mapping
class _PwMapping:
magnetization: _MagnetizationMapping
The decorator walks `get_type_hints` and injects a `SubMapping(mapping_cls=...)`
default for any bare annotation whose type is itself an `@output_mapping` class.
At runtime, `BaseOutput.outputs` recurses into each `SubMapping` field and builds the
nested mapping from the matching slice of the parsed output dict, so
`out.outputs.magnetization.total` works exactly like a top-level field — same lazy
resolution, same `AttributeError` on missing data, same frozen-dataclass features.
The constructor of `BaseOutput` now creates a (potentially) 2 level dictionary that
still maps the output names to their corresponding `Spec` and stores that in
`_output_spec_mapping`. The guard against non-`Spec` fields is still present for the
top level and sub mapping.
The `get_output` method is also updated. Currently, only top-level outputs are possible,
and these return a dictionary with all the available outputs in the sub mapping.
Conversion is also still possible for nested outputs via dot-separation, e.g.
to convert the "total" sub output in "magnetization" you have to define a converter for
"magnetization.total".BaseOutput: Add SubMapping for nested output namespaces1 parent 2629559 commit a686eda
2 files changed
+179
-15
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
19 | 31 | | |
20 | 32 | | |
21 | 33 | | |
22 | 34 | | |
23 | 35 | | |
24 | | - | |
25 | | - | |
| 36 | + | |
| 37 | + | |
26 | 38 | | |
27 | 39 | | |
28 | | - | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
29 | 43 | | |
30 | 44 | | |
31 | 45 | | |
| 46 | + | |
| 47 | + | |
32 | 48 | | |
33 | 49 | | |
34 | 50 | | |
35 | 51 | | |
36 | | - | |
| 52 | + | |
37 | 53 | | |
38 | 54 | | |
39 | 55 | | |
40 | 56 | | |
41 | 57 | | |
42 | | - | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
43 | 61 | | |
44 | 62 | | |
45 | 63 | | |
46 | 64 | | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
47 | 87 | | |
48 | 88 | | |
49 | 89 | | |
| |||
68 | 108 | | |
69 | 109 | | |
70 | 110 | | |
71 | | - | |
72 | 111 | | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
80 | 130 | | |
81 | 131 | | |
82 | 132 | | |
| |||
109 | 159 | | |
110 | 160 | | |
111 | 161 | | |
112 | | - | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
113 | 172 | | |
114 | 173 | | |
115 | 174 | | |
| |||
126 | 185 | | |
127 | 186 | | |
128 | 187 | | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
129 | 196 | | |
130 | 197 | | |
131 | 198 | | |
| |||
180 | 247 | | |
181 | 248 | | |
182 | 249 | | |
183 | | - | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
0 commit comments