hydra-python 0.17.5__tar.gz → 0.17.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. {hydra_python-0.17.5 → hydra_python-0.17.7}/.gitignore +3 -0
  2. {hydra_python-0.17.5 → hydra_python-0.17.7}/PKG-INFO +3 -3
  3. {hydra_python-0.17.5 → hydra_python-0.17.7}/README.md +1 -1
  4. hydra_python-0.17.7/build/main/digest.json +276 -0
  5. {hydra_python-0.17.5 → hydra_python-0.17.7}/pyproject.toml +2 -2
  6. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/dsl/python/utils.py +3 -0
  7. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/coder.py +46 -36
  8. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/serde.py +6 -6
  9. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/testing.py +1 -1
  10. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/utils.py +106 -30
  11. hydra_python-0.17.5/build/main/digest.json +0 -123
  12. {hydra_python-0.17.5 → hydra_python-0.17.7}/LICENSE +0 -0
  13. {hydra_python-0.17.5 → hydra_python-0.17.7}/NOTICE +0 -0
  14. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/dsl/python/environment.py +0 -0
  15. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/dsl/python/names.py +0 -0
  16. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/dsl/python/syntax.py +0 -0
  17. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/environment.py +0 -0
  18. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/language.py +0 -0
  19. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/names.py +0 -0
  20. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/pyproject.py +0 -0
  21. {hydra_python-0.17.5 → hydra_python-0.17.7}/src/main/python/hydra/python/syntax.py +0 -0
@@ -150,3 +150,6 @@ claude/.*.sh
150
150
 
151
151
  # Backed-up branch plan documents (not release content)
152
152
  finalized-task-plans/
153
+
154
+ # Coordination-hook state: last surfaced coordination-branch SHA (per worktree)
155
+ .coordination-seen
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: hydra-python
3
- Version: 0.17.5
3
+ Version: 0.17.7
4
4
  Summary: Python support for Hydra
5
5
  Project-URL: Homepage, https://github.com/CategoricalData/hydra
6
6
  Project-URL: Repository, https://github.com/CategoricalData/hydra
@@ -9,7 +9,7 @@ License: Apache-2.0
9
9
  License-File: LICENSE
10
10
  License-File: NOTICE
11
11
  Requires-Python: >=3.12
12
- Requires-Dist: hydra-kernel==0.17.5
12
+ Requires-Dist: hydra-kernel==0.17.7
13
13
  Description-Content-Type: text/markdown
14
14
 
15
15
  # Hydra-Python
@@ -398,7 +398,7 @@ of kwargs + explicit `field()`.
398
398
  ```python
399
399
  @hydra_element(my_module, type_=T.function(T.int32(), T.string()))
400
400
  def show_number(x):
401
- return Strings.show_int32(x)
401
+ return Strings.print_int32(x)
402
402
  ```
403
403
 
404
404
  Idiomatic Python metadata mechanism. Risk: users may expect the
@@ -384,7 +384,7 @@ of kwargs + explicit `field()`.
384
384
  ```python
385
385
  @hydra_element(my_module, type_=T.function(T.int32(), T.string()))
386
386
  def show_number(x):
387
- return Strings.show_int32(x)
387
+ return Strings.print_int32(x)
388
388
  ```
389
389
 
390
390
  Idiomatic Python metadata mechanism. Risk: users may expect the
@@ -0,0 +1,276 @@
1
+ {
2
+ "digestFormatVersion": 2,
3
+ "moduleFormatVersion": 1,
4
+ "generator": "7abcbab265fa1310",
5
+ "generation": {
6
+ "generatorId": "7abcbab265fa1310",
7
+ "mode": "published",
8
+ "host": "python",
9
+ "hydraVersion": "0.17.6",
10
+ "revision": "424d7c2260-dirty",
11
+ "timestamp": "2026-09-14T21:55:11Z"
12
+ },
13
+ "selfHash": "0736daac9936e0be4ec8f8e13bd081a5acb6d26caf193636363c966326e87aba",
14
+ "dependencyHashes": [
15
+ {
16
+ "key": "hydra-kernel",
17
+ "value": "9a236485c2eb5ac6a517d66ab064b143ae6439d323f9968a1670a4d690c594cf"
18
+ }
19
+ ],
20
+ "inputs": [
21
+ {
22
+ "key": "hydra.python.coder",
23
+ "value": {
24
+ "kind": "other",
25
+ "hash": "2dcd40ec0777229e853704eb332bfbbf9790b70534b5e47fb11fb9be4996d22c"
26
+ }
27
+ },
28
+ {
29
+ "key": "hydra.python.environment",
30
+ "value": {
31
+ "kind": "other",
32
+ "hash": "c9fcaea745fbec176e40ba1f5015539afccce08dd9d64357c092b00a74b0ead7"
33
+ }
34
+ },
35
+ {
36
+ "key": "hydra.python.language",
37
+ "value": {
38
+ "kind": "other",
39
+ "hash": "023abc0b7f14a46a8ce25a51434878a81aae06093abb0c4bdc56e284a886de0b"
40
+ }
41
+ },
42
+ {
43
+ "key": "hydra.python.names",
44
+ "value": {
45
+ "kind": "other",
46
+ "hash": "309082902048042e83e9518bdad597cfbdc001400e5f21db59dfa13bb9f35f57"
47
+ }
48
+ },
49
+ {
50
+ "key": "hydra.python.pyproject",
51
+ "value": {
52
+ "kind": "other",
53
+ "hash": "881be5b9c94d452c99cbe3478f0f0bef48ce0662aa9f9b2591ddff8fef21548b"
54
+ }
55
+ },
56
+ {
57
+ "key": "hydra.python.serde",
58
+ "value": {
59
+ "kind": "other",
60
+ "hash": "c2f329584d68b5d1eacac7a8336bce84bef18b2ec728edceea8cd59bc4cbb45c"
61
+ }
62
+ },
63
+ {
64
+ "key": "hydra.python.syntax",
65
+ "value": {
66
+ "kind": "other",
67
+ "hash": "e98016197157f4afaab53d70d18bbbb107951e241e6ef87dbaed78eb7645ffcc"
68
+ }
69
+ },
70
+ {
71
+ "key": "hydra.python.testing",
72
+ "value": {
73
+ "kind": "other",
74
+ "hash": "8ab02cc21789bdae2221b90bc5664e1617b8d8cf93adea1f619fee05526c9267"
75
+ }
76
+ },
77
+ {
78
+ "key": "hydra.python.utils",
79
+ "value": {
80
+ "kind": "other",
81
+ "hash": "12d519e0d4e915452b962c16e7e45ec98f444dcc1cb4ee22a2a6c489db17c377"
82
+ }
83
+ },
84
+ {
85
+ "key": "jsonContent:hydra/dsl/python/environment.json",
86
+ "value": {
87
+ "kind": "other",
88
+ "hash": "c4915d2516067b18ce5b16a8464a47d5a59ba1376932e3987b6df607f7aebfd7"
89
+ }
90
+ },
91
+ {
92
+ "key": "jsonContent:hydra/dsl/python/names.json",
93
+ "value": {
94
+ "kind": "other",
95
+ "hash": "d3adb9f3e1d12ac227bb5d702b09dc4ce5efe88d2defddd94ec4b123dbf90a36"
96
+ }
97
+ },
98
+ {
99
+ "key": "jsonContent:hydra/dsl/python/syntax.json",
100
+ "value": {
101
+ "kind": "other",
102
+ "hash": "54bdb29075c43afb543364420ff57de57a9c20188ad6d3f91581181a466fd2fa"
103
+ }
104
+ },
105
+ {
106
+ "key": "jsonContent:hydra/dsl/python/utils.json",
107
+ "value": {
108
+ "kind": "other",
109
+ "hash": "3314f432e6d4003d2afe84ff2b24ddb84e1589255dd8ef4a7774a5eff07bd84a"
110
+ }
111
+ },
112
+ {
113
+ "key": "jsonContent:hydra/python/coder.json",
114
+ "value": {
115
+ "kind": "other",
116
+ "hash": "a2b430eceb6212d2c2d4185aa3ca961c8992a8eea0f2b45317ae632f00802947"
117
+ }
118
+ },
119
+ {
120
+ "key": "jsonContent:hydra/python/environment.json",
121
+ "value": {
122
+ "kind": "other",
123
+ "hash": "ac3e37f8a17ae29d2ef98d7a3b2ce2eaba7eec1bde18caeb9a28e94162ea4d19"
124
+ }
125
+ },
126
+ {
127
+ "key": "jsonContent:hydra/python/language.json",
128
+ "value": {
129
+ "kind": "other",
130
+ "hash": "657c83931d77ee5efd92b5e7fc25d50aef2ebbf14b834293af0f56a107b914ff"
131
+ }
132
+ },
133
+ {
134
+ "key": "jsonContent:hydra/python/names.json",
135
+ "value": {
136
+ "kind": "other",
137
+ "hash": "15523ffcae2f183b2e1282cafa98a8fb7ffb063bf3be597200afa449392bf6e5"
138
+ }
139
+ },
140
+ {
141
+ "key": "jsonContent:hydra/python/pyproject.json",
142
+ "value": {
143
+ "kind": "other",
144
+ "hash": "d2da2c56f2ef83033e3ec7e9e81db072413d4ea295c7884efcb4b10ab73d564e"
145
+ }
146
+ },
147
+ {
148
+ "key": "jsonContent:hydra/python/serde.json",
149
+ "value": {
150
+ "kind": "other",
151
+ "hash": "4b39e1786bd38ceb73525956e73f5bdc24e7e2085ebcfc53682209de3057012e"
152
+ }
153
+ },
154
+ {
155
+ "key": "jsonContent:hydra/python/syntax.json",
156
+ "value": {
157
+ "kind": "other",
158
+ "hash": "d6b15c193027c2f9cb381a4a8ecdb9541ce7f863b645d996923e7549c34796e0"
159
+ }
160
+ },
161
+ {
162
+ "key": "jsonContent:hydra/python/testing.json",
163
+ "value": {
164
+ "kind": "other",
165
+ "hash": "f8564336b36351b02f733b8b6c132b842b42b8e908e31d18bd45e086d9c6abec"
166
+ }
167
+ },
168
+ {
169
+ "key": "jsonContent:hydra/python/utils.json",
170
+ "value": {
171
+ "kind": "other",
172
+ "hash": "619771b6c8cfa4ac80c27dedba674978470f5846c8575bb3c7b60a1661ce2df4"
173
+ }
174
+ },
175
+ {
176
+ "key": "jsonContent:manifest.json",
177
+ "value": {
178
+ "kind": "other",
179
+ "hash": "3f94b521766d042381d7bee84596308ea4e35c7e8fb45f8fd8338a8dbe27a0ac"
180
+ }
181
+ }
182
+ ],
183
+ "outputs": [
184
+ {
185
+ "key": "hydra/dsl/python/environment.py",
186
+ "value": {
187
+ "kind": "targetFile",
188
+ "hash": "17b22fcaf759f776c959d41a749f506ff3c302815791e189a506c3f1af344f2c"
189
+ }
190
+ },
191
+ {
192
+ "key": "hydra/dsl/python/names.py",
193
+ "value": {
194
+ "kind": "targetFile",
195
+ "hash": "c571b01c5d149d3e6f587ef4524c5b065dae0ffba1b44617197f68fc1a6122fb"
196
+ }
197
+ },
198
+ {
199
+ "key": "hydra/dsl/python/syntax.py",
200
+ "value": {
201
+ "kind": "targetFile",
202
+ "hash": "5fe1c0c739cdac68d1b90d768153e23ebe7c805bafb96ac698a95425e2d7d7b5"
203
+ }
204
+ },
205
+ {
206
+ "key": "hydra/dsl/python/utils.py",
207
+ "value": {
208
+ "kind": "targetFile",
209
+ "hash": "faf969debba4f9484e9e758a0d0eef2ec5255a757b368b8c593adf9b567fa56b"
210
+ }
211
+ },
212
+ {
213
+ "key": "hydra/python/coder.py",
214
+ "value": {
215
+ "kind": "targetFile",
216
+ "hash": "b9e4d3a6b7975300ca9f51880df233283797d5dddee65fe2dbb23ba24fd23830"
217
+ }
218
+ },
219
+ {
220
+ "key": "hydra/python/environment.py",
221
+ "value": {
222
+ "kind": "targetFile",
223
+ "hash": "1036eb9d285ba3e98c85095820f2e77900334340c9f0223fd4dfd6b3e847f4df"
224
+ }
225
+ },
226
+ {
227
+ "key": "hydra/python/language.py",
228
+ "value": {
229
+ "kind": "targetFile",
230
+ "hash": "7ea0c3a6015ec1de92aebeed0963c1af9f3b70c8d57815e477c528c795383604"
231
+ }
232
+ },
233
+ {
234
+ "key": "hydra/python/names.py",
235
+ "value": {
236
+ "kind": "targetFile",
237
+ "hash": "3e8498f205a99ebfaa570a44ccac515b69ced9d7f3669a32f74d4d05d48204b6"
238
+ }
239
+ },
240
+ {
241
+ "key": "hydra/python/pyproject.py",
242
+ "value": {
243
+ "kind": "targetFile",
244
+ "hash": "1f9001d8d2273d4783105e099b874c273ce520b58456f9b447cb8d5e9a6a37d7"
245
+ }
246
+ },
247
+ {
248
+ "key": "hydra/python/serde.py",
249
+ "value": {
250
+ "kind": "targetFile",
251
+ "hash": "1f36ea2dc8c50df72abe464cd395689c71f0af70a9f78e68d26013f9b436c383"
252
+ }
253
+ },
254
+ {
255
+ "key": "hydra/python/syntax.py",
256
+ "value": {
257
+ "kind": "targetFile",
258
+ "hash": "24a72af882b47d80cc930f16f51a3e9c1a71c9d8da47a921829f40e847459fca"
259
+ }
260
+ },
261
+ {
262
+ "key": "hydra/python/testing.py",
263
+ "value": {
264
+ "kind": "targetFile",
265
+ "hash": "5c8f352d976eeeebf14974e9df208b53c8db59810fdbd76e6454868627122635"
266
+ }
267
+ },
268
+ {
269
+ "key": "hydra/python/utils.py",
270
+ "value": {
271
+ "kind": "targetFile",
272
+ "hash": "28508cfe1fa312c169c894bda18a920092fb8ce708d22f5bd76d7576527935e1"
273
+ }
274
+ }
275
+ ]
276
+ }
@@ -13,7 +13,7 @@
13
13
 
14
14
  [project]
15
15
  name = "hydra-python"
16
- version = "0.17.5"
16
+ version = "0.17.7"
17
17
  description = "Python support for Hydra"
18
18
  readme = "README.md"
19
19
  requires-python = ">=3.12"
@@ -22,7 +22,7 @@ authors = [
22
22
  { name = "Joshua Shinavier", email = "josh@fortytwo.net" },
23
23
  ]
24
24
  dependencies = [
25
- "hydra-kernel == 0.17.5",
25
+ "hydra-kernel == 0.17.7",
26
26
  ]
27
27
 
28
28
  [project.urls]
@@ -59,6 +59,9 @@ def comment_statement(arg0: hydra.typed.TypedTerm[str]) -> hydra.typed.TypedTerm
59
59
  return hydra.typed.TypedTerm(cast(hydra.core.Term,
60
60
  hydra.core.TermApplication(hydra.core.Application(cast(hydra.core.Term, hydra.core.TermVariable(hydra.core.Name("hydra.python.utils.commentStatement"))), arg0.value))))
61
61
 
62
+ # DSL reference to hydra.python.utils.decimalVariantMethods.
63
+ decimal_variant_methods = hydra.typed.TypedTerm(cast(hydra.core.Term, hydra.core.TermVariable(hydra.core.Name("hydra.python.utils.decimalVariantMethods"))))
64
+
62
65
  def decode_py_comparison_to_py_await_primary(arg0: hydra.typed.TypedTerm[hydra.python.syntax.Comparison]) -> hydra.typed.TypedTerm[Optional[hydra.python.syntax.Primary]]:
63
66
  r"""DSL reference to hydra.python.utils.decodePyComparisonToPyAwaitPrimary."""
64
67
 
@@ -8,6 +8,7 @@ from decimal import Decimal
8
8
  from functools import lru_cache
9
9
  from hydra.overlay.python.dsl.python import Either, Given, Left, None_, Optional, Right
10
10
  from hydra.overlay.python.util import ConsList, Lazy, PersistentMap, PersistentSet
11
+ from hydra.overlay.python.util._decimal import decimal_node_eq, decimal_node_hash
11
12
  from typing import TypeVar, cast
12
13
  import hydra.analysis
13
14
  import hydra.annotations
@@ -343,7 +344,7 @@ def deduplicate_case_variables(cases_: Sequence[hydra.core.CaseAlternative]) ->
343
344
  (lambda : (hydra.overlay.python.lib.maps.insert(v, 1, count_by_name()), hydra.overlay.python.lib.lists.cons(field, done()))),
344
345
  (lambda count: (
345
346
  count2 := Lazy((lambda : hydra.overlay.python.lib.math.add(count, 1))),
346
- v2 := Lazy((lambda : hydra.core.Name(hydra.overlay.python.lib.strings.concat2(v.value, hydra.overlay.python.lib.literals.show_int32(count2.get()))))),
347
+ v2 := Lazy((lambda : hydra.core.Name(hydra.overlay.python.lib.strings.concat2(v.value, hydra.overlay.python.lib.literals.print_int32(count2.get()))))),
347
348
  new_body := Lazy((lambda : hydra.reduction.alpha_convert(v, v2.get(), body))),
348
349
  new_lam := Lazy((lambda : hydra.core.Lambda(v2.get(), mdom, new_body.get()))),
349
350
  new_term := Lazy((lambda : cast(hydra.core.Term, hydra.core.TermLambda(new_lam.get())))),
@@ -444,7 +445,7 @@ def encode_float_value_py_special_float(value: str) -> hydra.python.syntax.Expre
444
445
  ConsList.of(hydra.python.utils.single_quoted_string(value)))
445
446
 
446
447
  def encode_float_value_encode_float32(v: float) -> Either[T0, hydra.python.syntax.Expression]:
447
- s = Lazy((lambda : hydra.overlay.python.lib.literals.show_float32(v)))
448
+ s = Lazy((lambda : hydra.overlay.python.lib.literals.print_float32(v)))
448
449
  return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.equality.equal(s(), "NaN"),
449
450
  (lambda : Right(encode_float_value_py_special_float("nan"))),
450
451
  (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.equality.equal(s(), "Infinity"),
@@ -455,7 +456,7 @@ def encode_float_value_encode_float32(v: float) -> Either[T0, hydra.python.synta
455
456
  hydra.python.syntax.AtomNumber(cast(hydra.python.syntax.Number, hydra.python.syntax.NumberFloat(hydra.overlay.python.lib.literals.float32_to_float64(v)))))))))))))
456
457
 
457
458
  def encode_float_value_encode_float64(v: float) -> Either[T0, hydra.python.syntax.Expression]:
458
- s = Lazy((lambda : hydra.overlay.python.lib.literals.show_float64(v)))
459
+ s = Lazy((lambda : hydra.overlay.python.lib.literals.print_float64(v)))
459
460
  return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.equality.equal(s(), "NaN"),
460
461
  (lambda : Right(encode_float_value_py_special_float("nan"))),
461
462
  (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.equality.equal(s(), "Infinity"),
@@ -538,7 +539,7 @@ def encode_literal(lit: hydra.core.Literal) -> Either[T0, hydra.python.syntax.Ex
538
539
 
539
540
  case hydra.core.LiteralDecimal(value=d):
540
541
  return Right(hydra.python.utils.function_call(hydra.python.utils.py_name_to_py_primary(hydra.python.syntax.Name("Decimal")),
541
- ConsList.of(hydra.python.utils.single_quoted_string(hydra.overlay.python.lib.literals.show_decimal(d)))))
542
+ ConsList.of(hydra.python.utils.single_quoted_string(hydra.overlay.python.lib.literals.print_decimal(d)))))
542
543
 
543
544
  case hydra.core.LiteralFloat(value=f):
544
545
  return encode_float_value(f)
@@ -891,7 +892,7 @@ def lazy_dot_get(expr: hydra.python.syntax.Expression) -> hydra.python.syntax.Ex
891
892
  def make_simple_lambda(arity: int, lhs: hydra.python.syntax.Expression) -> hydra.python.syntax.Expression:
892
893
  r"""Wrap a bare reference to a polymorphic function in an uncurried lambda."""
893
894
 
894
- args = Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda i: hydra.python.syntax.Name(hydra.overlay.python.lib.strings.concat2("x", hydra.overlay.python.lib.literals.show_int32(i)))),
895
+ args = Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda i: hydra.python.syntax.Name(hydra.overlay.python.lib.strings.concat2("x", hydra.overlay.python.lib.literals.print_int32(i)))),
895
896
  hydra.overlay.python.lib.math.range_(1, hydra.overlay.python.lib.math.add(arity, 1)))))
896
897
  return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.equality.equal(arity, 0),
897
898
  (lambda : lhs),
@@ -945,7 +946,7 @@ args: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, hy
945
946
  as_function_call = Lazy((lambda : hydra.python.utils.function_call(hydra.python.utils.py_name_to_py_primary(hydra.python.names.encode_name(True, hydra.util.CaseConvention.LOWER_SNAKE, env, name)),
946
947
  args)))
947
948
  as_lazy_call = Lazy((lambda : hydra.python.utils.function_call(hydra.python.utils.py_expression_to_py_primary(lazy_dot_get(as_variable())), args)))
948
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(args)),
949
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(args)),
949
950
  (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.sets.member(name, inline_vars),
950
951
  (lambda : Right(as_lazy_call())),
951
952
  (lambda : hydra.overlay.python.lib.optionals.match(hydra.lexical.lookup_primitive(g(), name),
@@ -957,7 +958,7 @@ args: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, hy
957
958
  (lambda : (
958
959
  num_remaining := Lazy((lambda : hydra.overlay.python.lib.math.sub(prim_arity.get(), hydra.overlay.python.lib.lists.length(args)))),
959
960
  (
960
- remaining_params := Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda i: hydra.python.syntax.Name(hydra.overlay.python.lib.strings.concat2("x", hydra.overlay.python.lib.literals.show_int32(i)))),
961
+ remaining_params := Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda i: hydra.python.syntax.Name(hydra.overlay.python.lib.strings.concat2("x", hydra.overlay.python.lib.literals.print_int32(i)))),
961
962
  hydra.overlay.python.lib.math.range_(1, hydra.overlay.python.lib.math.add(num_remaining.get(), 1))))),
962
963
  (
963
964
  remaining_exprs := Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda n: cast(hydra.python.syntax.Expression,
@@ -1001,7 +1002,7 @@ args: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, hy
1001
1002
  hydra.overlay.python.lib.logic.not_(el_trivial1.get())),
1002
1003
  (lambda : Right(as_function_call())),
1003
1004
  (lambda : (
1004
- as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(ts.variables)),
1005
+ as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(ts.variables)),
1005
1006
  (lambda : make_simple_lambda(hydra.arity.type_arity(ts.body), as_variable())),
1006
1007
  (lambda : as_variable())))),
1007
1008
  Right(as_function_ref.get()))[1])))))[1]))),
@@ -1012,7 +1013,7 @@ args: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, hy
1012
1013
  (lambda : (
1013
1014
  ts := Lazy((lambda : hydra.scoping.term_signature_to_type_scheme(prim.definition.signature))),
1014
1015
  (
1015
- as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(ts.get().variables)),
1016
+ as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(ts.get().variables)),
1016
1017
  (lambda : make_simple_lambda(hydra.arity.type_arity(ts.get().body), as_variable())),
1017
1018
  (lambda : as_variable())))),
1018
1019
  Right(as_function_ref.get()))[1])[1])))[1]))))))),
@@ -1022,14 +1023,14 @@ args: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, hy
1022
1023
  (lambda : (
1023
1024
  unwrapped := Lazy((lambda : lazy_dot_get(as_variable()))),
1024
1025
  (
1025
- as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.null(hydra.variables.free_variables_in_type(typ))),
1026
+ as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.is_empty(hydra.variables.free_variables_in_type(typ))),
1026
1027
  (lambda : make_simple_lambda(hydra.arity.type_arity(typ), unwrapped.get())),
1027
1028
  (lambda : unwrapped.get())))),
1028
1029
  Right(as_function_ref.get()))[1])[1]),
1029
1030
  (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.maps.member(name, tc_metadata)),
1030
1031
  (lambda : hydra.overlay.python.lib.optionals.match(hydra.lexical.lookup_binding(g(), name),
1031
1032
  (lambda : (
1032
- as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.null(hydra.variables.free_variables_in_type(typ))),
1033
+ as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.is_empty(hydra.variables.free_variables_in_type(typ))),
1033
1034
  (lambda : make_simple_lambda(hydra.arity.type_arity(typ), as_variable())),
1034
1035
  (lambda : as_variable())))),
1035
1036
  Right(as_function_ref.get()))[1]),
@@ -1040,7 +1041,7 @@ args: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, hy
1040
1041
  hydra.overlay.python.lib.logic.not_(el_trivial.get())),
1041
1042
  (lambda : Right(as_function_call())),
1042
1043
  (lambda : (
1043
- as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.null(hydra.variables.free_variables_in_type(typ))),
1044
+ as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.is_empty(hydra.variables.free_variables_in_type(typ))),
1044
1045
  (lambda : make_simple_lambda(hydra.arity.type_arity(typ), as_variable())),
1045
1046
  (lambda : as_variable())))),
1046
1047
  Right(as_function_ref.get()))[1]))),
@@ -1048,14 +1049,14 @@ args: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, hy
1048
1049
  hydra.overlay.python.lib.logic.not_(el_trivial.get())),
1049
1050
  (lambda : Right(as_function_call())),
1050
1051
  (lambda : (
1051
- as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.null(hydra.variables.free_variables_in_type(typ))),
1052
+ as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.is_empty(hydra.variables.free_variables_in_type(typ))),
1052
1053
  (lambda : make_simple_lambda(hydra.arity.type_arity(typ), as_variable())),
1053
1054
  (lambda : as_variable())))),
1054
1055
  Right(as_function_ref.get()))[1])))))[1]))),
1055
1056
  (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.and_(hydra.overlay.python.lib.equality.equal(hydra.arity.type_arity(typ), 0), hydra.predicates.is_complex_variable(tc, name)),
1056
1057
  (lambda : Right(as_function_call())),
1057
1058
  (lambda : (
1058
- as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.null(hydra.variables.free_variables_in_type(typ))),
1059
+ as_function_ref := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.is_empty(hydra.variables.free_variables_in_type(typ))),
1059
1060
  (lambda : make_simple_lambda(hydra.arity.type_arity(typ), as_variable())),
1060
1061
  (lambda : as_variable())))),
1061
1062
  Right(as_function_ref.get()))[1]))))))))))))
@@ -1205,7 +1206,7 @@ rargs: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, t
1205
1206
  hydra.overlay.python.lib.lists.head(hargs))))
1206
1207
  rest_args = Lazy((lambda : hydra.overlay.python.lib.lists.drop(1, hargs)))
1207
1208
  def with_rest(e: hydra.python.syntax.Expression) -> hydra.python.syntax.Expression:
1208
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(rest_args()),
1209
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(rest_args()),
1209
1210
  (lambda : e),
1210
1211
  (lambda : hydra.python.utils.function_call(hydra.python.utils.py_expression_to_py_primary(e), rest_args())))
1211
1212
  default_case = Lazy((lambda : hydra.overlay.python.lib.eithers.bind(encode_term_inline(cx, env, False, fun),
@@ -1222,7 +1223,7 @@ rargs: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, t
1222
1223
  case hydra.core.TermUnwrap():
1223
1224
  value_expr = Lazy((lambda : hydra.python.utils.project_from_expression(first_arg(), hydra.python.syntax.Name("value"))))
1224
1225
  all_args = Lazy((lambda : hydra.overlay.python.lib.lists.concat2(rest_args(), rargs)))
1225
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(all_args()),
1226
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(all_args()),
1226
1227
  (lambda : Right((value_expr(), ConsList.of()))),
1227
1228
  (lambda : Right((
1228
1229
  hydra.python.utils.function_call(hydra.python.utils.py_expression_to_py_primary(value_expr()), all_args()),
@@ -1246,7 +1247,7 @@ rargs: Sequence[hydra.python.syntax.Expression]) -> Either[hydra.errors.Error, t
1246
1247
  consume_count := Lazy((lambda : hydra.overlay.python.lib.ordering.min(el_arity.get(), hydra.overlay.python.lib.lists.length(all_args())))),
1247
1248
  consumed_args := Lazy((lambda : hydra.overlay.python.lib.lists.take(consume_count.get(), all_args()))),
1248
1249
  remaining_args := Lazy((lambda : hydra.overlay.python.lib.lists.drop(consume_count.get(), all_args()))),
1249
- hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(consumed_args.get()),
1250
+ hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(consumed_args.get()),
1250
1251
  (lambda : hydra.overlay.python.lib.eithers.bind(encode_variable(cx, env, name, ConsList.of()), (lambda expr: Right((expr, rargs))))),
1251
1252
  (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.sets.member(name, inline_vars),
1252
1253
  (lambda : Right((
@@ -1350,7 +1351,7 @@ def encode_term_inline(cx: hydra.typing.InferenceContext, env: hydra.python.envi
1350
1351
  (lambda pbody: (
1351
1352
  pparams := Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda v1: hydra.python.names.encode_name(False, hydra.util.CaseConvention.LOWER_SNAKE, inner_env.get(), v1)),
1352
1353
  params.get()))),
1353
- hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(bindings.get()),
1354
+ hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(bindings.get()),
1354
1355
  (lambda : Right(make_uncurried_lambda(pparams.get(), pbody))),
1355
1356
  (lambda : hydra.overlay.python.lib.eithers.bind(hydra.overlay.python.lib.eithers.map_list((lambda v1: encode_binding_as_assignment(cx, False, inner_env.get(), v1)), bindings.get()),
1356
1357
  (lambda pbinding_exprs: (
@@ -1408,7 +1409,7 @@ def encode_term_inline(cx: hydra.typing.InferenceContext, env: hydra.python.envi
1408
1409
  case hydra.core.TermLet(value=lt):
1409
1410
  bindings = lt.bindings
1410
1411
  body = lt.body
1411
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(bindings),
1412
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(bindings),
1412
1413
  (lambda : encode_term_inline(cx, env, False, body)),
1413
1414
  (lambda : with_let_inline(env,
1414
1415
  lt,
@@ -1799,7 +1800,7 @@ def encode_binding_as(cx: hydra.typing.InferenceContext, env: hydra.python.envir
1799
1800
  Right(cast(hydra.python.syntax.Statement,
1800
1801
  hydra.python.syntax.StatementCompound(cast(hydra.python.syntax.CompoundStatement,
1801
1802
  hydra.python.syntax.CompoundStatementFunction(hydra.python.syntax.FunctionDefinition(None_(), func_def_raw.get())))))))[5])))))[5])))[3])))[1]),
1802
- (lambda csa: hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(lambda_params.get()),
1803
+ (lambda csa: hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(lambda_params.get()),
1803
1804
  (lambda : (
1804
1805
  mcs := Lazy((lambda : extract_case_elimination(term1))),
1805
1806
  hydra.overlay.python.lib.optionals.match(mcs.get(),
@@ -1909,7 +1910,7 @@ comment: Optional[str]) -> Either[hydra.errors.Error, hydra.python.syntax.Statem
1909
1910
  is_complex := Lazy((lambda : hydra.predicates.is_complex_binding(tc.get(), binding.get()))),
1910
1911
  is_trivial := Lazy((lambda : hydra.predicates.is_trivial_term(term))),
1911
1912
  hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.and_(is_complex.get(), hydra.overlay.python.lib.logic.not_(is_trivial.get())),
1912
- (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.and_(hydra.overlay.python.lib.logic.not_(top_level), hydra.overlay.python.lib.lists.null(params.get())),
1913
+ (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.and_(hydra.overlay.python.lib.logic.not_(top_level), hydra.overlay.python.lib.lists.is_empty(params.get())),
1913
1914
  (lambda : hydra.overlay.python.lib.eithers.bind(encode_term_inline(cx, env2.get(), False, term),
1914
1915
  (lambda body_expr: (
1915
1916
  py_name := Lazy((lambda : hydra.python.names.encode_name(False, hydra.util.CaseConvention.LOWER_SNAKE, env2.get(), name))),
@@ -1931,7 +1932,7 @@ def encode_term_multiline(cx: hydra.typing.InferenceContext, env: hydra.python.e
1931
1932
  bindings := Lazy((lambda : fs.bindings)),
1932
1933
  inner_body := Lazy((lambda : fs.body)),
1933
1934
  env2 := Lazy((lambda : fs.environment)),
1934
- hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(bindings.get()),
1935
+ hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(bindings.get()),
1935
1936
  (lambda : hydra.overlay.python.lib.eithers.bind(encode_term_inline(cx, env, False, term), (lambda expr: Right(ConsList.of(hydra.python.utils.return_single(expr)))))),
1936
1937
  (lambda : hydra.overlay.python.lib.eithers.bind(hydra.overlay.python.lib.eithers.map_list((lambda v1: encode_binding_as(cx, env2.get(), v1)), bindings.get()),
1937
1938
  (lambda binding_stmts: hydra.overlay.python.lib.eithers.bind(encode_term_multiline(cx, env2.get(), inner_body.get()),
@@ -1988,7 +1989,7 @@ prefixes: Sequence[hydra.python.syntax.Statement]) -> Either[hydra.errors.Error,
1988
1989
  (lambda py_args: (
1989
1990
  py_params := Lazy((lambda : cast(hydra.python.syntax.Parameters,
1990
1991
  hydra.python.syntax.ParametersParamNoDefault(hydra.python.syntax.ParamNoDefaultParameters(py_args, ConsList.of(), None_()))))),
1991
- is_t_c_o := Lazy((lambda : hydra.overlay.python.lib.logic.and_(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(args)),
1992
+ is_t_c_o := Lazy((lambda : hydra.overlay.python.lib.logic.and_(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(args)),
1992
1993
  hydra.analysis.is_self_tail_recursive(name, body)))),
1993
1994
  hydra.overlay.python.lib.eithers.bind(hydra.overlay.python.lib.logic.if_else(is_t_c_o.get(),
1994
1995
  (lambda : hydra.overlay.python.lib.eithers.bind(encode_term_multiline_t_c_o(cx, env, name, args, body),
@@ -2009,7 +2010,7 @@ prefixes: Sequence[hydra.python.syntax.Statement]) -> Either[hydra.errors.Error,
2009
2010
  py_tparams := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(use_inline_type_params(),
2010
2011
  (lambda : hydra.overlay.python.lib.lists.map((lambda arg_: hydra.python.utils.py_name_to_py_type_parameter(hydra.python.names.encode_type_variable(arg_))), tparams)),
2011
2012
  (lambda : ConsList.of())))),
2012
- is_thunk := Lazy((lambda : hydra.overlay.python.lib.lists.null(args))),
2013
+ is_thunk := Lazy((lambda : hydra.overlay.python.lib.lists.is_empty(args))),
2013
2014
  m_decorators := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(is_thunk.get(), (lambda : Given(hydra.python.syntax.Decorators(ConsList.of(lru_cache_decorator())))), (lambda : None_())))),
2014
2015
  py_name := Lazy((lambda : hydra.python.names.encode_name(False, hydra.util.CaseConvention.LOWER_SNAKE, env, name))),
2015
2016
  Right(cast(hydra.python.syntax.Statement,
@@ -2050,7 +2051,7 @@ def encode_name_constants(env: hydra.python.environment.PythonEnvironment, name:
2050
2051
  def generic_arg(tparam_list: Sequence[hydra.core.Name]) -> Optional[hydra.python.syntax.Expression]:
2051
2052
  r"""Create Generic[...] argument expression for class definition."""
2052
2053
 
2053
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(tparam_list),
2054
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(tparam_list),
2054
2055
  (lambda : None_()),
2055
2056
  (lambda : Given(hydra.python.utils.py_primary_to_py_expression(hydra.python.utils.primary_with_expression_slices(cast(hydra.python.syntax.Primary,
2056
2057
  hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("Generic"))))),
@@ -2261,7 +2262,7 @@ def encode_type_quoted(env: hydra.python.environment.PythonEnvironment, typ: hyd
2261
2262
  r"""Encode a type to a Python expression, quoting if the type has free variables."""
2262
2263
 
2263
2264
  return hydra.overlay.python.lib.eithers.bind(encode_type(env, typ),
2264
- (lambda pytype: Right(hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.sets.null(hydra.variables.free_variables_in_type(typ)),
2265
+ (lambda pytype: Right(hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.sets.is_empty(hydra.variables.free_variables_in_type(typ)),
2265
2266
  (lambda : pytype),
2266
2267
  (lambda : hydra.python.utils.double_quoted_string(hydra.serialization.print_expr(hydra.python.serde.expression_to_expr(pytype))))))))
2267
2268
 
@@ -2289,17 +2290,21 @@ def encode_union_field(cx: T0, env: hydra.python.environment.PythonEnvironment,
2289
2290
  return hydra.overlay.python.lib.eithers.bind(hydra.annotations.get_type_description(cx, python_environment_get_graph(env), ftype),
2290
2291
  (lambda fcomment: (
2291
2292
  is_unit := Lazy((lambda : hydra.overlay.python.lib.equality.equal(hydra.strip.deannotate_type(ftype), cast(hydra.core.Type, hydra.core.TypeUnit())))),
2293
+ is_decimal := Lazy((lambda : hydra.overlay.python.lib.equality.equal(hydra.strip.deannotate_type(ftype),
2294
+ cast(hydra.core.Type, hydra.core.TypeLiteral(cast(hydra.core.LiteralType, hydra.core.LiteralTypeDecimal())))))),
2292
2295
  var_name := Lazy((lambda : deconflict_variant_name(False, env, union_name, fname, env.graph))),
2293
2296
  tparam_names := Lazy((lambda : find_type_params(env, ftype))),
2294
2297
  tparam_py_names := Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda x1: hydra.python.names.encode_type_variable(x1)), tparam_names.get()))),
2295
2298
  field_params := Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda x1: hydra.python.utils.py_name_to_py_type_parameter(x1)), tparam_py_names.get()))),
2296
2299
  body := Lazy((lambda : hydra.overlay.python.lib.logic.if_else(is_unit.get(),
2297
2300
  (lambda : hydra.python.utils.indented_block(fcomment, ConsList.of(hydra.python.utils.unit_variant_methods(var_name.get())))),
2298
- (lambda : hydra.python.utils.indented_block(fcomment, ConsList.of()))))),
2301
+ (lambda : hydra.overlay.python.lib.logic.if_else(is_decimal.get(),
2302
+ (lambda : hydra.python.utils.indented_block(fcomment, ConsList.of(hydra.python.utils.decimal_variant_methods()))),
2303
+ (lambda : hydra.python.utils.indented_block(fcomment, ConsList.of()))))))),
2299
2304
  hydra.overlay.python.lib.eithers.bind(hydra.overlay.python.lib.logic.if_else(is_unit.get(),
2300
2305
  (lambda : Right(None_())),
2301
2306
  (lambda : hydra.overlay.python.lib.eithers.bind(encode_type_quoted(env, ftype), (lambda quoted_type: Right(Given(variant_args(quoted_type, ConsList.of()))))))),
2302
- (lambda margs: Right(hydra.python.utils.py_class_definition_to_py_statement(hydra.python.syntax.ClassDefinition(None_(), var_name.get(), field_params.get(), margs, body.get()))))))[6]))
2307
+ (lambda margs: Right(hydra.python.utils.py_class_definition_to_py_statement(hydra.python.syntax.ClassDefinition(None_(), var_name.get(), field_params.get(), margs, body.get()))))))[7]))
2303
2308
 
2304
2309
  def encode_union_field_alt(env: hydra.python.environment.PythonEnvironment, union_name: hydra.core.Name, field_type: hydra.core.FieldType) -> hydra.python.syntax.Primary:
2305
2310
  r"""Encode a union field as a primary expression for | alternatives."""
@@ -2309,7 +2314,7 @@ def encode_union_field_alt(env: hydra.python.environment.PythonEnvironment, unio
2309
2314
  tparam_names = Lazy((lambda : find_type_params(env, ftype)))
2310
2315
  tparams = Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda x1: hydra.python.names.encode_type_variable(x1)), tparam_names())))
2311
2316
  name_prim = Lazy((lambda : hydra.python.utils.py_name_to_py_primary(hydra.python.names.variant_name(False, env, union_name, fname))))
2312
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(tparams()),
2317
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(tparams()),
2313
2318
  (lambda : name_prim()),
2314
2319
  (lambda : (
2315
2320
  tparam_exprs := Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda x1: hydra.python.utils.py_name_to_py_expression(x1)), tparams()))),
@@ -2448,7 +2453,9 @@ def encode_definition(cx: hydra.typing.InferenceContext, env: hydra.python.envir
2448
2453
  name = td.name
2449
2454
  term = td.body
2450
2455
  typ = Lazy((lambda : hydra.overlay.python.lib.optionals.match(td.signature,
2451
- (lambda : hydra.core.TypeScheme(ConsList.of(), cast(hydra.core.Type, hydra.core.TypeVariable(hydra.core.Name("hydra.core.Unit"))), None_())),
2456
+ (lambda : hydra.core.TypeScheme(ConsList.of(),
2457
+ cast(hydra.core.Type, hydra.core.TypeVariable(hydra.core.Name("hydra.core.Unit"))),
2458
+ hydra.overlay.python.lib.maps.empty())),
2452
2459
  (lambda sig: hydra.scoping.term_signature_to_type_scheme(sig)))))
2453
2460
  return hydra.overlay.python.lib.eithers.bind(hydra.annotations.get_term_description(cx, python_environment_get_graph(env), term),
2454
2461
  (lambda comment: (
@@ -2818,7 +2825,7 @@ def extend_meta_for_type(top_level: bool, is_term_annot: bool, typ: hydra.core.T
2818
2825
  case hydra.core.TypeUnion(value=rt):
2819
2826
  return hydra.overlay.python.lib.logic.if_else(hydra.predicates.is_enum_row_type(rt),
2820
2827
  (lambda : set_meta_uses_enum(meta_with_subtypes(), True)),
2821
- (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(rt)),
2828
+ (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(rt)),
2822
2829
  (lambda : set_meta_uses_node(meta_with_subtypes(), True)),
2823
2830
  (lambda : meta_with_subtypes()))))
2824
2831
 
@@ -2836,7 +2843,7 @@ def extend_meta_for_type(top_level: bool, is_term_annot: bool, typ: hydra.core.T
2836
2843
 
2837
2844
  case hydra.core.TypeRecord(value=rt2):
2838
2845
  has_annotated = Lazy((lambda : hydra.overlay.python.lib.lists.foldl((lambda b, ft: hydra.overlay.python.lib.logic.or_(b, hydra.annotations.has_type_description(ft.type))), False, rt2)))
2839
- meta1 = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(rt2),
2846
+ meta1 = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(rt2),
2840
2847
  (lambda : meta_with_subtypes()),
2841
2848
  (lambda : set_meta_uses_dataclass(meta_with_subtypes(), True)))))
2842
2849
  return hydra.overlay.python.lib.logic.if_else(has_annotated(), (lambda : set_meta_uses_annotated(meta1(), True)), (lambda : meta1()))
@@ -3126,7 +3133,7 @@ def gather_metadata(overlay_subs: Set[str], focus_ns: hydra.packaging.ModuleName
3126
3133
  result = Lazy((lambda : hydra.overlay.python.lib.lists.foldl((lambda x1, x2: add_def(x1, x2)), start(), defs)))
3127
3134
  tvars = result().type_variables
3128
3135
  result2 = Lazy((lambda : set_meta_uses_cast(True, set_meta_uses_lru_cache(True, result()))))
3129
- return set_meta_uses_type_var(result2(), hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.null(tvars)))
3136
+ return set_meta_uses_type_var(result2(), hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.sets.is_empty(tvars)))
3130
3137
 
3131
3138
  # The target Python version for code generation.
3132
3139
  target_python_version = hydra.python.utils.target_python_version
@@ -3153,7 +3160,7 @@ def is_type_module_check(defs: Sequence[hydra.packaging.Definition]) -> bool:
3153
3160
 
3154
3161
  case _:
3155
3162
  return False
3156
- return hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(hydra.overlay.python.lib.lists.filter((lambda d: _hoist_hydra_python_coder_is_type_module_check_1(d)), defs)))
3163
+ return hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(hydra.overlay.python.lib.lists.filter((lambda d: _hoist_hydra_python_coder_is_type_module_check_1(d)), defs)))
3157
3164
 
3158
3165
  def module_domain_imports(namespaces: hydra.util.ModuleNames[hydra.python.syntax.DottedName]) -> Sequence[hydra.python.syntax.ImportStatement]:
3159
3166
  r"""Generate domain import statements from namespace mappings."""
@@ -3203,6 +3210,9 @@ def module_standard_imports(meta: hydra.python.environment.PythonModuleMetadata)
3203
3210
  cond_import_symbol("Lazy", True),
3204
3211
  cond_import_symbol("PersistentMap", meta.uses_frozen_dict),
3205
3212
  cond_import_symbol("PersistentSet", meta.uses_frozen_set))),
3213
+ (
3214
+ "hydra.overlay.python.util._decimal",
3215
+ ConsList.of(cond_import_symbol("decimal_node_eq", meta.uses_decimal), cond_import_symbol("decimal_node_hash", meta.uses_decimal))),
3206
3216
  (
3207
3217
  "typing",
3208
3218
  ConsList.of(cond_import_symbol("Annotated", meta.uses_annotated),
@@ -3213,7 +3223,7 @@ def module_standard_imports(meta: hydra.python.environment.PythonModuleMetadata)
3213
3223
  simplified = Lazy((lambda : hydra.overlay.python.lib.optionals.givens(hydra.overlay.python.lib.lists.map((lambda p: (
3214
3224
  mod_name := Lazy((lambda : hydra.overlay.python.lib.pairs.first(p))),
3215
3225
  symbols := Lazy((lambda : hydra.overlay.python.lib.optionals.givens(hydra.overlay.python.lib.pairs.second(p)))),
3216
- hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(symbols.get()),
3226
+ hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(symbols.get()),
3217
3227
  (lambda : None_()),
3218
3228
  (lambda : Given((mod_name.get(), symbols.get())))))[2]),
3219
3229
  pairs()))))
@@ -3318,7 +3328,7 @@ defs0: Sequence[hydra.packaging.Definition]) -> Either[hydra.errors.Error, hydra
3318
3328
  (lambda : hydra.overlay.python.lib.sets.empty())))),
3319
3329
  tvar_stmts := Lazy((lambda : hydra.overlay.python.lib.lists.map((lambda tv: tvar_statement(hydra.python.names.encode_type_variable(tv))),
3320
3330
  hydra.overlay.python.lib.sets.to_list(tvars.get())))),
3321
- body := Lazy((lambda : hydra.overlay.python.lib.lists.filter((lambda group: hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(group))),
3331
+ body := Lazy((lambda : hydra.overlay.python.lib.lists.filter((lambda group: hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(group))),
3322
3332
  hydra.overlay.python.lib.lists.concat(ConsList.of(ConsList.of(comment_stmts.get(), import_stmts.get(), tvar_stmts.get()), def_stmts))))),
3323
3333
  Right(hydra.python.syntax.Module(body.get())))[8]))))
3324
3334
 
@@ -89,13 +89,13 @@ def number_to_expr(num: hydra.python.syntax.Number) -> hydra.ast.Expr:
89
89
 
90
90
  match num:
91
91
  case hydra.python.syntax.NumberFloat(value=f):
92
- return hydra.serialization.cst(python_float_literal_text(hydra.overlay.python.lib.literals.show_float64(f)))
92
+ return hydra.serialization.cst(python_float_literal_text(hydra.overlay.python.lib.literals.print_float64(f)))
93
93
 
94
94
  case hydra.python.syntax.NumberImaginary(value=f2):
95
- return hydra.serialization.cst(hydra.overlay.python.lib.strings.concat2(python_float_literal_text(hydra.overlay.python.lib.literals.show_float64(f2)), "j"))
95
+ return hydra.serialization.cst(hydra.overlay.python.lib.strings.concat2(python_float_literal_text(hydra.overlay.python.lib.literals.print_float64(f2)), "j"))
96
96
 
97
97
  case hydra.python.syntax.NumberInteger(value=i):
98
- return hydra.serialization.cst(hydra.overlay.python.lib.literals.show_bigint(i))
98
+ return hydra.serialization.cst(hydra.overlay.python.lib.literals.print_bigint(i))
99
99
 
100
100
  case _:
101
101
  raise AssertionError("Unreachable: all variants handled")
@@ -274,7 +274,7 @@ def comparison_to_expr(cmp: hydra.python.syntax.Comparison) -> hydra.ast.Expr:
274
274
 
275
275
  lhs = cmp.lhs
276
276
  rhs = cmp.rhs
277
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(rhs),
277
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(rhs),
278
278
  (lambda : bitwise_or_to_expr(lhs)),
279
279
  (lambda : hydra.serialization.space_sep(hydra.overlay.python.lib.lists.cons(bitwise_or_to_expr(lhs), hydra.overlay.python.lib.lists.map((lambda x1: compare_op_bitwise_or_pair_to_expr(x1)), rhs)))))
280
280
 
@@ -882,7 +882,7 @@ def type_alias_to_expr(ta: hydra.python.syntax.TypeAlias) -> hydra.ast.Expr:
882
882
  tparams = ta.type_params
883
883
  expr = ta.expression
884
884
  alias = Lazy((lambda : hydra.serialization.no_sep(hydra.overlay.python.lib.optionals.givens(ConsList.of(Given(name_to_expr(name)),
885
- hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(tparams),
885
+ hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(tparams),
886
886
  (lambda : None_()),
887
887
  (lambda : Given(hydra.serialization.bracket_list(hydra.serialization.inline_style, hydra.overlay.python.lib.lists.map((lambda x1: type_parameter_to_expr(x1)), tparams))))))))))
888
888
  return hydra.serialization.space_sep(ConsList.of(hydra.serialization.cst("type"), alias(), hydra.serialization.cst("="), expression_to_expr(expr)))
@@ -1249,7 +1249,7 @@ def function_def_raw_to_expr(fdr: hydra.python.syntax.FunctionDefRaw) -> hydra.a
1249
1249
  ret_type = fdr.return_type
1250
1250
  block = fdr.block
1251
1251
  async_kw = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(async_, (lambda : Given(hydra.serialization.cst("async"))), (lambda : None_()))))
1252
- tparam_part = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(tparams),
1252
+ tparam_part = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(tparams),
1253
1253
  (lambda : None_()),
1254
1254
  (lambda : Given(hydra.serialization.bracket_list(hydra.serialization.inline_style, hydra.overlay.python.lib.lists.map((lambda x1: type_parameter_to_expr(x1)), tparams)))))))
1255
1255
  param_part = Lazy((lambda : hydra.overlay.python.lib.optionals.map((lambda x1: parameters_to_expr(x1)), params)))
@@ -49,7 +49,7 @@ def generate_python_test_case(group_path: Sequence[str], tcm: hydra.testing.Test
49
49
  case hydra.testing.TestCaseUniversal(value=ucase):
50
50
  actual_ = Lazy((lambda : ucase.actual(None)))
51
51
  expected_ = Lazy((lambda : ucase.expected(None)))
52
- full_name = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(group_path),
52
+ full_name = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(group_path),
53
53
  (lambda : name_),
54
54
  (lambda : hydra.overlay.python.lib.strings.join("__", hydra.overlay.python.lib.lists.concat2(group_path, ConsList.of(name_)))))))
55
55
  formatted_name = Lazy((lambda : format_python_test_name(full_name())))
@@ -197,6 +197,109 @@ def comment_statement(s: str) -> hydra.python.syntax.Statement:
197
197
 
198
198
  return py_expression_to_py_statement(triple_quoted_string(s))
199
199
 
200
+ def indented_block(mcomment: Optional[str], stmts: Sequence[Sequence[hydra.python.syntax.Statement]]) -> hydra.python.syntax.Block:
201
+ r"""Create an indented block with optional comment."""
202
+
203
+ comment_group = Lazy((lambda : hydra.overlay.python.lib.optionals.match(mcomment, (lambda : ConsList.of()), (lambda s: ConsList.of(comment_statement(s))))))
204
+ groups = Lazy((lambda : hydra.overlay.python.lib.lists.filter((lambda g: hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(g))),
205
+ hydra.overlay.python.lib.lists.cons(comment_group(), stmts))))
206
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(groups()),
207
+ (lambda : cast(hydra.python.syntax.Block,
208
+ hydra.python.syntax.BlockIndented(ConsList.of(ConsList.of(cast(hydra.python.syntax.Statement,
209
+ hydra.python.syntax.StatementSimple(ConsList.of(py_expression_to_py_simple_statement(py_atom_to_py_expression(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomEllipsis()))))))))))),
210
+ (lambda : cast(hydra.python.syntax.Block, hydra.python.syntax.BlockIndented(groups()))))
211
+
212
+ @lru_cache(1)
213
+ def self_only_params() -> hydra.python.syntax.Parameters:
214
+ return cast(hydra.python.syntax.Parameters,
215
+ hydra.python.syntax.ParametersParamNoDefault(hydra.python.syntax.ParamNoDefaultParameters(ConsList.of(hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("self"), None_()), None_())),
216
+ ConsList.of(),
217
+ None_())))
218
+
219
+ @lru_cache(1)
220
+ def self_other_params() -> hydra.python.syntax.Parameters:
221
+ return cast(hydra.python.syntax.Parameters,
222
+ hydra.python.syntax.ParametersParamNoDefault(hydra.python.syntax.ParamNoDefaultParameters(ConsList.of(hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("self"), None_()), None_()),
223
+ hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("other"), None_()), None_())),
224
+ ConsList.of(),
225
+ None_())))
226
+
227
+ @lru_cache(1)
228
+ def decimal_variant_methods() -> Sequence[hydra.python.syntax.Statement]:
229
+ r"""Generate __eq__ and __hash__ methods for the Decimal-typed union variant, delegating to hydra.overlay.python.util._decimal (scale-aware per docs/specification/ordering-and-equality.md; Node's generic derivation delegates to Decimal's own scale-blind equality/hash)."""
230
+
231
+ eq_body = Lazy((lambda : py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement,
232
+ hydra.python.syntax.SimpleStatementReturn(hydra.python.syntax.ReturnStatement(ConsList.of(cast(hydra.python.syntax.StarExpression,
233
+ hydra.python.syntax.StarExpressionSimple(function_call(cast(hydra.python.syntax.Primary,
234
+ hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("decimal_node_eq"))))),
235
+ ConsList.of(cast(hydra.python.syntax.Expression,
236
+ hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction(ConsList.of(hydra.python.syntax.Conjunction(ConsList.of(cast(hydra.python.syntax.Inversion,
237
+ hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(None_(),
238
+ hydra.python.syntax.BitwiseXor(None_(),
239
+ hydra.python.syntax.BitwiseAnd(None_(),
240
+ hydra.python.syntax.ShiftExpression(None_(),
241
+ hydra.python.syntax.Sum(None_(),
242
+ hydra.python.syntax.Term(None_(),
243
+ cast(hydra.python.syntax.Factor,
244
+ hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False,
245
+ cast(hydra.python.syntax.Primary,
246
+ hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("self")))))),
247
+ None_()))))))))),
248
+ ConsList.of()))))))))),
249
+ cast(hydra.python.syntax.Expression,
250
+ hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction(ConsList.of(hydra.python.syntax.Conjunction(ConsList.of(cast(hydra.python.syntax.Inversion,
251
+ hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(None_(),
252
+ hydra.python.syntax.BitwiseXor(None_(),
253
+ hydra.python.syntax.BitwiseAnd(None_(),
254
+ hydra.python.syntax.ShiftExpression(None_(),
255
+ hydra.python.syntax.Sum(None_(),
256
+ hydra.python.syntax.Term(None_(),
257
+ cast(hydra.python.syntax.Factor,
258
+ hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False,
259
+ cast(hydra.python.syntax.Primary,
260
+ hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("other")))))),
261
+ None_()))))))))),
262
+ ConsList.of()))))))))))))))))))))
263
+ eq_method = Lazy((lambda : cast(hydra.python.syntax.Statement,
264
+ hydra.python.syntax.StatementCompound(cast(hydra.python.syntax.CompoundStatement,
265
+ hydra.python.syntax.CompoundStatementFunction(hydra.python.syntax.FunctionDefinition(None_(),
266
+ hydra.python.syntax.FunctionDefRaw(False,
267
+ hydra.python.syntax.Name("__eq__"),
268
+ ConsList.of(),
269
+ Given(self_other_params()),
270
+ None_(),
271
+ None_(),
272
+ indented_block(None_(), ConsList.of(ConsList.of(eq_body())))))))))))
273
+ hash_body = Lazy((lambda : py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement,
274
+ hydra.python.syntax.SimpleStatementReturn(hydra.python.syntax.ReturnStatement(ConsList.of(cast(hydra.python.syntax.StarExpression,
275
+ hydra.python.syntax.StarExpressionSimple(function_call(cast(hydra.python.syntax.Primary,
276
+ hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("decimal_node_hash"))))),
277
+ ConsList.of(cast(hydra.python.syntax.Expression,
278
+ hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction(ConsList.of(hydra.python.syntax.Conjunction(ConsList.of(cast(hydra.python.syntax.Inversion,
279
+ hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(None_(),
280
+ hydra.python.syntax.BitwiseXor(None_(),
281
+ hydra.python.syntax.BitwiseAnd(None_(),
282
+ hydra.python.syntax.ShiftExpression(None_(),
283
+ hydra.python.syntax.Sum(None_(),
284
+ hydra.python.syntax.Term(None_(),
285
+ cast(hydra.python.syntax.Factor,
286
+ hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False,
287
+ cast(hydra.python.syntax.Primary,
288
+ hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("self")))))),
289
+ None_()))))))))),
290
+ ConsList.of()))))))))))))))))))))
291
+ hash_method = Lazy((lambda : cast(hydra.python.syntax.Statement,
292
+ hydra.python.syntax.StatementCompound(cast(hydra.python.syntax.CompoundStatement,
293
+ hydra.python.syntax.CompoundStatementFunction(hydra.python.syntax.FunctionDefinition(None_(),
294
+ hydra.python.syntax.FunctionDefRaw(False,
295
+ hydra.python.syntax.Name("__hash__"),
296
+ ConsList.of(),
297
+ Given(self_only_params()),
298
+ None_(),
299
+ None_(),
300
+ indented_block(None_(), ConsList.of(ConsList.of(hash_body())))))))))))
301
+ return ConsList.of(eq_method(), hash_method())
302
+
200
303
  def decode_py_power_to_py_primary(p: hydra.python.syntax.Power) -> Optional[hydra.python.syntax.Primary]:
201
304
  r"""Decode a Power to a Primary if possible."""
202
305
 
@@ -229,7 +332,7 @@ def decode_py_comparison_to_py_await_primary(c: hydra.python.syntax.Comparison)
229
332
 
230
333
  case _:
231
334
  return None_()
232
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(rhs)),
335
+ return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.is_empty(rhs)),
233
336
  (lambda : None_()),
234
337
  (lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.optionals.is_given(or_lhs),
235
338
  (lambda : None_()),
@@ -303,18 +406,6 @@ def get_item_params() -> hydra.python.syntax.Parameters:
303
406
  ConsList.of(),
304
407
  None_())))
305
408
 
306
- def indented_block(mcomment: Optional[str], stmts: Sequence[Sequence[hydra.python.syntax.Statement]]) -> hydra.python.syntax.Block:
307
- r"""Create an indented block with optional comment."""
308
-
309
- comment_group = Lazy((lambda : hydra.overlay.python.lib.optionals.match(mcomment, (lambda : ConsList.of()), (lambda s: ConsList.of(comment_statement(s))))))
310
- groups = Lazy((lambda : hydra.overlay.python.lib.lists.filter((lambda g: hydra.overlay.python.lib.logic.not_(hydra.overlay.python.lib.lists.null(g))),
311
- hydra.overlay.python.lib.lists.cons(comment_group(), stmts))))
312
- return hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(groups()),
313
- (lambda : cast(hydra.python.syntax.Block,
314
- hydra.python.syntax.BlockIndented(ConsList.of(ConsList.of(cast(hydra.python.syntax.Statement,
315
- hydra.python.syntax.StatementSimple(ConsList.of(py_expression_to_py_simple_statement(py_atom_to_py_expression(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomEllipsis()))))))))))),
316
- (lambda : cast(hydra.python.syntax.Block, hydra.python.syntax.BlockIndented(groups()))))
317
-
318
409
  def primary_and_params(prim: hydra.python.syntax.Primary, params: Sequence[hydra.python.syntax.Expression]) -> hydra.python.syntax.Expression:
319
410
  r"""Create a primary with parameters (subscript)."""
320
411
 
@@ -358,7 +449,7 @@ def or_expression(prims: Sequence[hydra.python.syntax.Primary]) -> hydra.python.
358
449
  (lambda : hydra.python.syntax.BitwiseOr(prev,
359
450
  py_primary_to_py_bitwise_xor(cast(hydra.python.syntax.Primary,
360
451
  hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomEllipsis())))))),
361
- (lambda p: hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(hydra.overlay.python.lib.pairs.second(p)),
452
+ (lambda p: hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(hydra.overlay.python.lib.pairs.second(p)),
362
453
  (lambda : hydra.python.syntax.BitwiseOr(prev, py_primary_to_py_bitwise_xor(hydra.overlay.python.lib.pairs.first(p)))),
363
454
  (lambda : build(Given(hydra.python.syntax.BitwiseOr(prev, py_primary_to_py_bitwise_xor(hydra.overlay.python.lib.pairs.first(p)))),
364
455
  hydra.overlay.python.lib.pairs.second(p))))))
@@ -485,21 +576,6 @@ def return_single(expr: hydra.python.syntax.Expression) -> hydra.python.syntax.S
485
576
  return py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement,
486
577
  hydra.python.syntax.SimpleStatementReturn(hydra.python.syntax.ReturnStatement(ConsList.of(cast(hydra.python.syntax.StarExpression, hydra.python.syntax.StarExpressionSimple(expr)))))))
487
578
 
488
- @lru_cache(1)
489
- def self_only_params() -> hydra.python.syntax.Parameters:
490
- return cast(hydra.python.syntax.Parameters,
491
- hydra.python.syntax.ParametersParamNoDefault(hydra.python.syntax.ParamNoDefaultParameters(ConsList.of(hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("self"), None_()), None_())),
492
- ConsList.of(),
493
- None_())))
494
-
495
- @lru_cache(1)
496
- def self_other_params() -> hydra.python.syntax.Parameters:
497
- return cast(hydra.python.syntax.Parameters,
498
- hydra.python.syntax.ParametersParamNoDefault(hydra.python.syntax.ParamNoDefaultParameters(ConsList.of(hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("self"), None_()), None_()),
499
- hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("other"), None_()), None_())),
500
- ConsList.of(),
501
- None_())))
502
-
503
579
  def single_quoted_string(s: str) -> hydra.python.syntax.Expression:
504
580
  r"""Create a single-quoted string expression."""
505
581
 
@@ -595,7 +671,7 @@ extra_stmts: Sequence[hydra.python.syntax.Statement]) -> Sequence[hydra.python.s
595
671
  ConsList.of())))))))))))),
596
672
  indented_block(None_(), ConsList.of(ConsList.of(get_item_method())))))))
597
673
  doc_stmt = Lazy((lambda : py_expression_to_py_statement(triple_quoted_string(doc_string()))))
598
- body_groups = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.null(extra_stmts),
674
+ body_groups = Lazy((lambda : hydra.overlay.python.lib.logic.if_else(hydra.overlay.python.lib.lists.is_empty(extra_stmts),
599
675
  (lambda : (
600
676
  pass_stmt := Lazy((lambda : py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementPass())))),
601
677
  ConsList.of(ConsList.of(doc_stmt()), ConsList.of(pass_stmt.get())))[1]),
@@ -1,123 +0,0 @@
1
- {
2
- "digestFormatVersion": 2,
3
- "moduleFormatVersion": 1,
4
- "generator": "9de7bd43d8cafa93",
5
- "generation": {
6
- "generatorId": "9de7bd43d8cafa93",
7
- "mode": "published",
8
- "host": "python",
9
- "hydraVersion": "0.17.4",
10
- "revision": "9571823830-dirty",
11
- "timestamp": "2026-08-19T17:44:59Z"},
12
- "selfHash": "f628802be436ebb317632a9429323b63f0ae5045bda0ba24aa263ccf2092e014",
13
- "dependencyHashes": [{"key": "hydra-kernel", "value": "5b5813a6dabbc89ed0e4ddd918744636da84f3542d7961284c423aea53629b02"}],
14
- "inputs": [
15
- {
16
- "key": "hydra.python.coder",
17
- "value": {"kind": "other", "hash": "0b1e385015be90731b3a461486eec1c2ab2448e1643f3a9e4f1f7427ec0e085a"}},
18
- {
19
- "key": "hydra.python.environment",
20
- "value": {"kind": "other", "hash": "663b02271ddd4a6ad9ab8a2bdc152a64802a675a59280909f605d6dedcc4017e"}},
21
- {
22
- "key": "hydra.python.language",
23
- "value": {"kind": "other", "hash": "78fb867a1d0fa6654f46f5d9fd72c2c5607d2934b7c7fbd5f5d830786b4ad91e"}},
24
- {
25
- "key": "hydra.python.names",
26
- "value": {"kind": "other", "hash": "5bc2e53c63d41de79877fbe331aada2c7f43175b09d4245b7ac61cf8261b0ca3"}},
27
- {
28
- "key": "hydra.python.pyproject",
29
- "value": {"kind": "other", "hash": "249512648b2b008db234ee348a72056d4d625cfeb0a80d8caacbda95002569a2"}},
30
- {
31
- "key": "hydra.python.serde",
32
- "value": {"kind": "other", "hash": "83e48906bdec70d3d0d427c0e1b02b5e4d08bb172d3f85be13992ef4c1120859"}},
33
- {
34
- "key": "hydra.python.syntax",
35
- "value": {"kind": "other", "hash": "88a9154b48fd429f06efa0ba8981bdf12af3fed4de5a057b3304fadc623dbc19"}},
36
- {
37
- "key": "hydra.python.testing",
38
- "value": {"kind": "other", "hash": "113853c870177388fbcc53800768d872fae34fdbfd1a0e2f30d2b2aefb966451"}},
39
- {
40
- "key": "hydra.python.utils",
41
- "value": {"kind": "other", "hash": "f480bc8a4c39e62ea073357517964a2175e582fd220de0fbc1bc27b9b108d327"}},
42
- {
43
- "key": "jsonContent:hydra/dsl/python/environment.json",
44
- "value": {"kind": "other", "hash": "684965cea67ad57d492b50f408c6575f679b073c5de5e76826fb0941da86ec21"}},
45
- {
46
- "key": "jsonContent:hydra/dsl/python/names.json",
47
- "value": {"kind": "other", "hash": "2118b0194fde923feeda9877728e6a50813601ad5892dc122f3cf577e35bff6f"}},
48
- {
49
- "key": "jsonContent:hydra/dsl/python/syntax.json",
50
- "value": {"kind": "other", "hash": "a99b94b1f3e542d606da15fd6dafa32d858ce7d71ba02f7b21d8bb4881daa4e3"}},
51
- {
52
- "key": "jsonContent:hydra/dsl/python/utils.json",
53
- "value": {"kind": "other", "hash": "7a3b84d522c420db0db03a77f9e54635b33544f73eb49ed67cdc3a4d5dac04ae"}},
54
- {
55
- "key": "jsonContent:hydra/python/coder.json",
56
- "value": {"kind": "other", "hash": "e2f66b5c16393d8050923aab1f832f430334e4bddfc101f4cebc1f158daee01d"}},
57
- {
58
- "key": "jsonContent:hydra/python/environment.json",
59
- "value": {"kind": "other", "hash": "889380dd3664c763437475b2e5146b38f865f4a20a308332633a33a4d038fce1"}},
60
- {
61
- "key": "jsonContent:hydra/python/language.json",
62
- "value": {"kind": "other", "hash": "221e68d68030945db181fdd079be4ff619cb4cd1ad5d4b72b4e70f2aa1bd5230"}},
63
- {
64
- "key": "jsonContent:hydra/python/names.json",
65
- "value": {"kind": "other", "hash": "afaa99c99874efa5e02a10973651a7a74ab1089feedb9de0f8a74904a8ec4eb7"}},
66
- {
67
- "key": "jsonContent:hydra/python/pyproject.json",
68
- "value": {"kind": "other", "hash": "c94de46f1615e6e82d2f706d01ef04293373f6241a9a42882bb394d51b4f7f53"}},
69
- {
70
- "key": "jsonContent:hydra/python/serde.json",
71
- "value": {"kind": "other", "hash": "e987b94392abfc72cedc08d2e6b8a4528479a9023c9eff636f8980e9af6e6cfb"}},
72
- {
73
- "key": "jsonContent:hydra/python/syntax.json",
74
- "value": {"kind": "other", "hash": "8dc3a26ac927fa338b273c9deee6317906977a2deec4c2df1e44ff0bbe0a64cd"}},
75
- {
76
- "key": "jsonContent:hydra/python/testing.json",
77
- "value": {"kind": "other", "hash": "9c75b534004194396935b1dd3331bae4d8d5cbb31c3959fa3794dda00960c09a"}},
78
- {
79
- "key": "jsonContent:hydra/python/utils.json",
80
- "value": {"kind": "other", "hash": "0ef54f39243803add5f5634d67bf8c949d89159b3fc1c4ff82d9cb0bf829f4b9"}},
81
- {
82
- "key": "jsonContent:manifest.json",
83
- "value": {"kind": "other", "hash": "3f94b521766d042381d7bee84596308ea4e35c7e8fb45f8fd8338a8dbe27a0ac"}}],
84
- "outputs": [
85
- {
86
- "key": "hydra/dsl/python/environment.py",
87
- "value": {"kind": "targetFile", "hash": "17b22fcaf759f776c959d41a749f506ff3c302815791e189a506c3f1af344f2c"}},
88
- {
89
- "key": "hydra/dsl/python/names.py",
90
- "value": {"kind": "targetFile", "hash": "c571b01c5d149d3e6f587ef4524c5b065dae0ffba1b44617197f68fc1a6122fb"}},
91
- {
92
- "key": "hydra/dsl/python/syntax.py",
93
- "value": {"kind": "targetFile", "hash": "5fe1c0c739cdac68d1b90d768153e23ebe7c805bafb96ac698a95425e2d7d7b5"}},
94
- {
95
- "key": "hydra/dsl/python/utils.py",
96
- "value": {"kind": "targetFile", "hash": "3fed9996a3f875a53675b6c8620884949adf7d155b0e68cacfba9007d5d07b29"}},
97
- {
98
- "key": "hydra/python/coder.py",
99
- "value": {"kind": "targetFile", "hash": "eb662817f2e3390220a06eb6eda9cc7adce67d3e22b47f3e2823ab273d688af6"}},
100
- {
101
- "key": "hydra/python/environment.py",
102
- "value": {"kind": "targetFile", "hash": "1036eb9d285ba3e98c85095820f2e77900334340c9f0223fd4dfd6b3e847f4df"}},
103
- {
104
- "key": "hydra/python/language.py",
105
- "value": {"kind": "targetFile", "hash": "7ea0c3a6015ec1de92aebeed0963c1af9f3b70c8d57815e477c528c795383604"}},
106
- {
107
- "key": "hydra/python/names.py",
108
- "value": {"kind": "targetFile", "hash": "3e8498f205a99ebfaa570a44ccac515b69ced9d7f3669a32f74d4d05d48204b6"}},
109
- {
110
- "key": "hydra/python/pyproject.py",
111
- "value": {"kind": "targetFile", "hash": "1f9001d8d2273d4783105e099b874c273ce520b58456f9b447cb8d5e9a6a37d7"}},
112
- {
113
- "key": "hydra/python/serde.py",
114
- "value": {"kind": "targetFile", "hash": "a783457c64ea85769cd2ab757bd429be4d0c7333ab5765b0c04f3b0bf86b1e80"}},
115
- {
116
- "key": "hydra/python/syntax.py",
117
- "value": {"kind": "targetFile", "hash": "24a72af882b47d80cc930f16f51a3e9c1a71c9d8da47a921829f40e847459fca"}},
118
- {
119
- "key": "hydra/python/testing.py",
120
- "value": {"kind": "targetFile", "hash": "069c706253e0c41695c8becd42c27c84b7f6ac54b14be14975757ff09416ba92"}},
121
- {
122
- "key": "hydra/python/utils.py",
123
- "value": {"kind": "targetFile", "hash": "b53dbe52de14f67d6a3c74d8f6bd7051fbaa65dbf686362565bb5cda61f15075"}}]}
File without changes
File without changes