hydra-python 0.15.0__py3-none-any.whl

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.
hydra/python/serde.py ADDED
@@ -0,0 +1,817 @@
1
+ # Note: this is an automatically generated file. Do not edit.
2
+ r"""Python serializer: converts Python AST to concrete syntax."""
3
+ from __future__ import annotations
4
+ from collections.abc import Callable
5
+ from decimal import Decimal
6
+ from functools import lru_cache
7
+ from hydra.dsl.python import Just, Maybe, Nothing, frozenlist
8
+ from typing import cast
9
+ import hydra.constants
10
+ import hydra.core
11
+ import hydra.lib.equality
12
+ import hydra.lib.lists
13
+ import hydra.lib.literals
14
+ import hydra.lib.logic
15
+ import hydra.lib.maybes
16
+ import hydra.lib.strings
17
+ import hydra.python.syntax
18
+ import hydra.serialization
19
+ def encode_name(n: hydra.python.syntax.Name) -> hydra.ast.Expr:
20
+ r"""Serialize a Python name/identifier."""
21
+ return hydra.serialization.cst(n.value)
22
+ def encode_lambda_param_no_default(p: hydra.python.syntax.LambdaParamNoDefault) -> hydra.ast.Expr:
23
+ r"""Serialize a lambda parameter without default."""
24
+ return encode_name(p.value)
25
+ def encode_lambda_parameters(lp: hydra.python.syntax.LambdaParameters) -> hydra.ast.Expr:
26
+ r"""Serialize lambda parameters."""
27
+ nodef = lp.param_no_default
28
+ return hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_lambda_param_no_default(x1)), nodef))
29
+ def python_float_literal_text(s: str) -> str:
30
+ return hydra.lib.logic.if_else(hydra.lib.equality.equal(s, "NaN"), (lambda : "float('nan')"), (lambda : hydra.lib.logic.if_else(hydra.lib.equality.equal(s, "Infinity"), (lambda : "float('inf')"), (lambda : hydra.lib.logic.if_else(hydra.lib.equality.equal(s, "-Infinity"), (lambda : "float('-inf')"), (lambda : s))))))
31
+ def encode_number(num: hydra.python.syntax.Number) -> hydra.ast.Expr:
32
+ r"""Serialize a Python number literal."""
33
+ match num:
34
+ case hydra.python.syntax.NumberFloat(value=f):
35
+ return hydra.serialization.cst(python_float_literal_text(hydra.lib.literals.show_bigfloat(f)))
36
+ case hydra.python.syntax.NumberInteger(value=i):
37
+ return hydra.serialization.cst(hydra.lib.literals.show_bigint(i))
38
+ case _:
39
+ raise AssertionError("Unreachable: all variants handled")
40
+ def escape_python_string(double_quoted: bool, s: str) -> str:
41
+ r"""Escape special characters in a Python string and wrap in quotes."""
42
+ def replace(old: str, new: str, str: str) -> str:
43
+ return hydra.lib.strings.intercalate(new, hydra.lib.strings.split_on(old, str))
44
+ @lru_cache(1)
45
+ def s1() -> str:
46
+ return replace("\\", "\\\\", s)
47
+ @lru_cache(1)
48
+ def s2() -> str:
49
+ return replace("\x00", "\\x00", s1())
50
+ @lru_cache(1)
51
+ def s3() -> str:
52
+ return replace("\n", "\\n", s2())
53
+ @lru_cache(1)
54
+ def s4() -> str:
55
+ return replace("\t", "\\t", s3())
56
+ @lru_cache(1)
57
+ def s5() -> str:
58
+ return replace("\r", "\\r", s4())
59
+ @lru_cache(1)
60
+ def escaped() -> str:
61
+ return hydra.lib.logic.if_else(double_quoted, (lambda : replace("\"", "\\\"", s5())), (lambda : replace("'", "\\'", s5())))
62
+ @lru_cache(1)
63
+ def quote() -> str:
64
+ return hydra.lib.logic.if_else(double_quoted, (lambda : "\""), (lambda : "'"))
65
+ return hydra.lib.strings.cat2(quote(), hydra.lib.strings.cat2(escaped(), quote()))
66
+ def encode_string(s: hydra.python.syntax.String) -> hydra.ast.Expr:
67
+ r"""Serialize a Python string literal."""
68
+ content = s.value
69
+ style = s.quote_style
70
+ match style:
71
+ case hydra.python.syntax.QuoteStyle.SINGLE:
72
+ return hydra.serialization.cst(escape_python_string(False, content))
73
+ case hydra.python.syntax.QuoteStyle.DOUBLE:
74
+ return hydra.serialization.cst(escape_python_string(True, content))
75
+ case hydra.python.syntax.QuoteStyle.TRIPLE:
76
+ return hydra.serialization.no_sep((hydra.serialization.cst("r\"\"\""), hydra.serialization.cst(content), hydra.serialization.cst("\"\"\"")))
77
+ case _:
78
+ raise AssertionError("Unreachable: all variants handled")
79
+ def encode_args(args: hydra.python.syntax.Args) -> hydra.ast.Expr:
80
+ r"""Serialize function arguments."""
81
+ pos = args.positional
82
+ ks = args.kwarg_or_starred
83
+ kss = args.kwarg_or_double_starred
84
+ return hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.concat((hydra.lib.lists.map((lambda x1: encode_pos_arg(x1)), pos), hydra.lib.lists.map((lambda x1: encode_kwarg_or_starred(x1)), ks), hydra.lib.lists.map((lambda x1: encode_kwarg_or_double_starred(x1)), kss))))
85
+ def encode_assignment_expression(ae: hydra.python.syntax.AssignmentExpression) -> hydra.ast.Expr:
86
+ r"""Serialize an assignment expression (walrus operator)."""
87
+ name = ae.name
88
+ expr = ae.expression
89
+ return hydra.serialization.space_sep((encode_name(name), hydra.serialization.cst(":="), encode_expression(expr)))
90
+ def encode_atom(atom: hydra.python.syntax.Atom) -> hydra.ast.Expr:
91
+ r"""Serialize a Python atom (literal or basic expression)."""
92
+ match atom:
93
+ case hydra.python.syntax.AtomDict(value=d):
94
+ return encode_dict(d)
95
+ case hydra.python.syntax.AtomDictcomp():
96
+ return hydra.serialization.cst("{...}")
97
+ case hydra.python.syntax.AtomEllipsis():
98
+ return hydra.serialization.cst("...")
99
+ case hydra.python.syntax.AtomFalse():
100
+ return hydra.serialization.cst("False")
101
+ case hydra.python.syntax.AtomGenexp():
102
+ return hydra.serialization.cst("(...)")
103
+ case hydra.python.syntax.AtomGroup(value=g):
104
+ return encode_group(g)
105
+ case hydra.python.syntax.AtomList(value=l):
106
+ return encode_list(l)
107
+ case hydra.python.syntax.AtomListcomp():
108
+ return hydra.serialization.cst("[...]")
109
+ case hydra.python.syntax.AtomName(value=n):
110
+ return encode_name(n)
111
+ case hydra.python.syntax.AtomNone():
112
+ return hydra.serialization.cst("None")
113
+ case hydra.python.syntax.AtomNumber(value=n2):
114
+ return encode_number(n2)
115
+ case hydra.python.syntax.AtomSet(value=s):
116
+ return encode_set(s)
117
+ case hydra.python.syntax.AtomSetcomp():
118
+ return hydra.serialization.cst("{...}")
119
+ case hydra.python.syntax.AtomString(value=s2):
120
+ return encode_string(s2)
121
+ case hydra.python.syntax.AtomTrue():
122
+ return hydra.serialization.cst("True")
123
+ case hydra.python.syntax.AtomTuple(value=t):
124
+ return encode_tuple(t)
125
+ case _:
126
+ raise AssertionError("Unreachable: all variants handled")
127
+ def encode_await_primary(ap: hydra.python.syntax.AwaitPrimary) -> hydra.ast.Expr:
128
+ r"""Serialize an await primary expression."""
129
+ await_ = ap.await_
130
+ primary = ap.primary
131
+ return hydra.lib.logic.if_else(await_, (lambda : hydra.serialization.space_sep((hydra.serialization.cst("await"), encode_primary(primary)))), (lambda : encode_primary(primary)))
132
+ def encode_bitwise_and(band: hydra.python.syntax.BitwiseAnd) -> hydra.ast.Expr:
133
+ r"""Serialize a bitwise AND expression."""
134
+ lhs = band.lhs
135
+ rhs = band.rhs
136
+ return hydra.serialization.space_sep(hydra.lib.maybes.cat((hydra.lib.maybes.map((lambda l: hydra.serialization.space_sep((encode_bitwise_and(l), hydra.serialization.cst("&")))), lhs), Just(encode_shift_expression(rhs)))))
137
+ def encode_bitwise_or(bor: hydra.python.syntax.BitwiseOr) -> hydra.ast.Expr:
138
+ r"""Serialize a bitwise OR expression."""
139
+ lhs = bor.lhs
140
+ rhs = bor.rhs
141
+ return hydra.serialization.space_sep(hydra.lib.maybes.cat((hydra.lib.maybes.map((lambda l: hydra.serialization.space_sep((encode_bitwise_or(l), hydra.serialization.cst("|")))), lhs), Just(encode_bitwise_xor(rhs)))))
142
+ def encode_bitwise_xor(bxor: hydra.python.syntax.BitwiseXor) -> hydra.ast.Expr:
143
+ r"""Serialize a bitwise XOR expression."""
144
+ lhs = bxor.lhs
145
+ rhs = bxor.rhs
146
+ return hydra.serialization.space_sep(hydra.lib.maybes.cat((hydra.lib.maybes.map((lambda l: hydra.serialization.space_sep((encode_bitwise_xor(l), hydra.serialization.cst("^")))), lhs), Just(encode_bitwise_and(rhs)))))
147
+ def encode_comparison(cmp: hydra.python.syntax.Comparison) -> hydra.ast.Expr:
148
+ r"""Serialize a comparison expression."""
149
+ return encode_bitwise_or(cmp.lhs)
150
+ def encode_conditional(c: hydra.python.syntax.Conditional) -> hydra.ast.Expr:
151
+ r"""Serialize a conditional expression (ternary)."""
152
+ body = c.body
153
+ cond = c.if_
154
+ else_expr = c.else_
155
+ return hydra.serialization.space_sep((encode_disjunction(body), hydra.serialization.cst("if"), encode_disjunction(cond), hydra.serialization.cst("else"), encode_expression(else_expr)))
156
+ def encode_conjunction(c: hydra.python.syntax.Conjunction) -> hydra.ast.Expr:
157
+ r"""Serialize a conjunction (and expression)."""
158
+ return hydra.serialization.symbol_sep("and", hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_inversion(x1)), c.value))
159
+ def encode_dict(d: hydra.python.syntax.Dict) -> hydra.ast.Expr:
160
+ r"""Serialize a Python dictionary."""
161
+ return hydra.serialization.curly_braces_list(Nothing(), hydra.serialization.half_block_style, hydra.lib.lists.map((lambda x1: encode_double_starred_kvpair(x1)), d.value))
162
+ def encode_disjunction(d: hydra.python.syntax.Disjunction) -> hydra.ast.Expr:
163
+ r"""Serialize a disjunction (or expression)."""
164
+ return hydra.serialization.symbol_sep("or", hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_conjunction(x1)), d.value))
165
+ def encode_double_starred_kvpair(dskv: hydra.python.syntax.DoubleStarredKvpair) -> hydra.ast.Expr:
166
+ r"""Serialize a double-starred key-value pair."""
167
+ match dskv:
168
+ case hydra.python.syntax.DoubleStarredKvpairPair(value=p):
169
+ return encode_kvpair(p)
170
+ case hydra.python.syntax.DoubleStarredKvpairStarred(value=e):
171
+ return hydra.serialization.no_sep((hydra.serialization.cst("**"), encode_bitwise_or(e)))
172
+ case _:
173
+ raise AssertionError("Unreachable: all variants handled")
174
+ def encode_expression(expr: hydra.python.syntax.Expression) -> hydra.ast.Expr:
175
+ r"""Serialize a Python expression."""
176
+ match expr:
177
+ case hydra.python.syntax.ExpressionSimple(value=d):
178
+ return encode_disjunction(d)
179
+ case hydra.python.syntax.ExpressionConditional(value=c):
180
+ return encode_conditional(c)
181
+ case hydra.python.syntax.ExpressionLambda(value=l):
182
+ return encode_lambda(l)
183
+ case _:
184
+ raise AssertionError("Unreachable: all variants handled")
185
+ def encode_factor(f: hydra.python.syntax.Factor) -> hydra.ast.Expr:
186
+ r"""Serialize a factor expression."""
187
+ match f:
188
+ case hydra.python.syntax.FactorPositive(value=inner):
189
+ return hydra.serialization.no_sep((hydra.serialization.cst("+"), encode_factor(inner)))
190
+ case hydra.python.syntax.FactorNegative(value=inner2):
191
+ return hydra.serialization.no_sep((hydra.serialization.cst("-"), encode_factor(inner2)))
192
+ case hydra.python.syntax.FactorComplement(value=inner3):
193
+ return hydra.serialization.no_sep((hydra.serialization.cst("~"), encode_factor(inner3)))
194
+ case hydra.python.syntax.FactorSimple(value=p):
195
+ return encode_power(p)
196
+ case _:
197
+ raise AssertionError("Unreachable: all variants handled")
198
+ def encode_group(g: hydra.python.syntax.Group) -> hydra.ast.Expr:
199
+ r"""Serialize a parenthesized group."""
200
+ match g:
201
+ case hydra.python.syntax.GroupExpression(value=ne):
202
+ return encode_named_expression(ne)
203
+ case hydra.python.syntax.GroupYield():
204
+ return hydra.serialization.cst("(yield ...)")
205
+ case _:
206
+ raise AssertionError("Unreachable: all variants handled")
207
+ def encode_inversion(i: hydra.python.syntax.Inversion) -> hydra.ast.Expr:
208
+ r"""Serialize an inversion (not expression)."""
209
+ match i:
210
+ case hydra.python.syntax.InversionNot(value=other):
211
+ return hydra.serialization.space_sep((hydra.serialization.cst("not"), encode_inversion(other)))
212
+ case hydra.python.syntax.InversionSimple(value=c):
213
+ return encode_comparison(c)
214
+ case _:
215
+ raise AssertionError("Unreachable: all variants handled")
216
+ def encode_kvpair(kv: hydra.python.syntax.Kvpair) -> hydra.ast.Expr:
217
+ r"""Serialize a key-value pair."""
218
+ k = kv.key
219
+ v = kv.value
220
+ return hydra.serialization.space_sep((hydra.serialization.no_sep((encode_expression(k), hydra.serialization.cst(":"))), encode_expression(v)))
221
+ def encode_kwarg(k: hydra.python.syntax.Kwarg) -> hydra.ast.Expr:
222
+ r"""Serialize a keyword argument."""
223
+ name = k.name
224
+ expr = k.value
225
+ return hydra.serialization.no_sep((encode_name(name), hydra.serialization.cst("="), encode_expression(expr)))
226
+ def encode_kwarg_or_double_starred(kds: hydra.python.syntax.KwargOrDoubleStarred) -> hydra.ast.Expr:
227
+ r"""Serialize a kwarg or double starred."""
228
+ match kds:
229
+ case hydra.python.syntax.KwargOrDoubleStarredKwarg(value=k):
230
+ return encode_kwarg(k)
231
+ case hydra.python.syntax.KwargOrDoubleStarredDoubleStarred(value=e):
232
+ return hydra.serialization.no_sep((hydra.serialization.cst("**"), encode_expression(e)))
233
+ case _:
234
+ raise AssertionError("Unreachable: all variants handled")
235
+ def encode_kwarg_or_starred(ks: hydra.python.syntax.KwargOrStarred) -> hydra.ast.Expr:
236
+ r"""Serialize a kwarg or starred."""
237
+ match ks:
238
+ case hydra.python.syntax.KwargOrStarredKwarg(value=k):
239
+ return encode_kwarg(k)
240
+ case hydra.python.syntax.KwargOrStarredStarred(value=se):
241
+ return encode_starred_expression(se)
242
+ case _:
243
+ raise AssertionError("Unreachable: all variants handled")
244
+ def encode_lambda(l: hydra.python.syntax.Lambda) -> hydra.ast.Expr:
245
+ r"""Serialize a lambda expression."""
246
+ params = l.params
247
+ body = l.body
248
+ return hydra.serialization.parens(hydra.serialization.space_sep((hydra.serialization.cst("lambda"), hydra.serialization.no_sep((encode_lambda_parameters(params), hydra.serialization.cst(":"))), encode_expression(body))))
249
+ def encode_list(l: hydra.python.syntax.List) -> hydra.ast.Expr:
250
+ r"""Serialize a Python list."""
251
+ return hydra.serialization.bracket_list_adaptive(hydra.lib.lists.map((lambda x1: encode_star_named_expression(x1)), l.value))
252
+ def encode_named_expression(ne: hydra.python.syntax.NamedExpression) -> hydra.ast.Expr:
253
+ r"""Serialize a named expression."""
254
+ match ne:
255
+ case hydra.python.syntax.NamedExpressionSimple(value=e):
256
+ return encode_expression(e)
257
+ case hydra.python.syntax.NamedExpressionAssignment(value=ae):
258
+ return encode_assignment_expression(ae)
259
+ case _:
260
+ raise AssertionError("Unreachable: all variants handled")
261
+ def encode_pos_arg(pa: hydra.python.syntax.PosArg) -> hydra.ast.Expr:
262
+ r"""Serialize a positional argument."""
263
+ match pa:
264
+ case hydra.python.syntax.PosArgStarred(value=se):
265
+ return encode_starred_expression(se)
266
+ case hydra.python.syntax.PosArgAssignment(value=ae):
267
+ return encode_assignment_expression(ae)
268
+ case hydra.python.syntax.PosArgExpression(value=e):
269
+ return encode_expression(e)
270
+ case _:
271
+ raise AssertionError("Unreachable: all variants handled")
272
+ def encode_power(p: hydra.python.syntax.Power) -> hydra.ast.Expr:
273
+ r"""Serialize a power expression."""
274
+ lhs = p.lhs
275
+ rhs = p.rhs
276
+ return hydra.serialization.space_sep(hydra.lib.maybes.cat((Just(encode_await_primary(lhs)), hydra.lib.maybes.map((lambda r: hydra.serialization.space_sep((hydra.serialization.cst("**"), encode_factor(r)))), rhs))))
277
+ def encode_primary(p: hydra.python.syntax.Primary) -> hydra.ast.Expr:
278
+ r"""Serialize a primary expression."""
279
+ match p:
280
+ case hydra.python.syntax.PrimarySimple(value=a):
281
+ return encode_atom(a)
282
+ case hydra.python.syntax.PrimaryCompound(value=pwr):
283
+ return encode_primary_with_rhs(pwr)
284
+ case _:
285
+ raise AssertionError("Unreachable: all variants handled")
286
+ def encode_primary_rhs(rhs: hydra.python.syntax.PrimaryRhs) -> hydra.ast.Expr:
287
+ r"""Serialize a primary RHS."""
288
+ match rhs:
289
+ case hydra.python.syntax.PrimaryRhsCall(value=args):
290
+ return hydra.serialization.no_sep((hydra.serialization.cst("("), encode_args(args), hydra.serialization.cst(")")))
291
+ case hydra.python.syntax.PrimaryRhsProject(value=name):
292
+ return hydra.serialization.no_sep((hydra.serialization.cst("."), encode_name(name)))
293
+ case hydra.python.syntax.PrimaryRhsSlices(value=slices):
294
+ return hydra.serialization.no_sep((hydra.serialization.cst("["), encode_slices(slices), hydra.serialization.cst("]")))
295
+ case hydra.python.syntax.PrimaryRhsGenexp():
296
+ return hydra.serialization.cst("[...]")
297
+ case _:
298
+ raise AssertionError("Unreachable: all variants handled")
299
+ def encode_primary_with_rhs(pwr: hydra.python.syntax.PrimaryWithRhs) -> hydra.ast.Expr:
300
+ r"""Serialize a primary with RHS."""
301
+ prim = pwr.primary
302
+ rhs = pwr.rhs
303
+ return hydra.serialization.no_sep((encode_primary(prim), encode_primary_rhs(rhs)))
304
+ def encode_set(s: hydra.python.syntax.Set) -> hydra.ast.Expr:
305
+ r"""Serialize a Python set."""
306
+ return hydra.serialization.braces_list_adaptive(hydra.lib.lists.map((lambda x1: encode_star_named_expression(x1)), s.value))
307
+ def encode_shift_expression(se: hydra.python.syntax.ShiftExpression) -> hydra.ast.Expr:
308
+ r"""Serialize a shift expression."""
309
+ return encode_sum(se.rhs)
310
+ def encode_slice(s: hydra.python.syntax.Slice) -> hydra.ast.Expr:
311
+ r"""Serialize a slice."""
312
+ match s:
313
+ case hydra.python.syntax.SliceNamed(value=ne):
314
+ return encode_named_expression(ne)
315
+ case hydra.python.syntax.SliceSlice_():
316
+ return hydra.serialization.cst(":")
317
+ case _:
318
+ raise AssertionError("Unreachable: all variants handled")
319
+ def encode_slice_or_starred_expression(s: hydra.python.syntax.SliceOrStarredExpression) -> hydra.ast.Expr:
320
+ r"""Serialize a slice or starred expression."""
321
+ match s:
322
+ case hydra.python.syntax.SliceOrStarredExpressionSlice(value=sl):
323
+ return encode_slice(sl)
324
+ case hydra.python.syntax.SliceOrStarredExpressionStarred(value=se):
325
+ return encode_starred_expression(se)
326
+ case _:
327
+ raise AssertionError("Unreachable: all variants handled")
328
+ def encode_slices(s: hydra.python.syntax.Slices) -> hydra.ast.Expr:
329
+ r"""Serialize slices."""
330
+ hd = s.head
331
+ tl = s.tail
332
+ return hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.cons(encode_slice(hd), hydra.lib.lists.map((lambda x1: encode_slice_or_starred_expression(x1)), tl)))
333
+ def encode_star_named_expression(sne: hydra.python.syntax.StarNamedExpression) -> hydra.ast.Expr:
334
+ r"""Serialize a star named expression."""
335
+ match sne:
336
+ case hydra.python.syntax.StarNamedExpressionStar(value=bor):
337
+ return hydra.serialization.no_sep((hydra.serialization.cst("*"), encode_bitwise_or(bor)))
338
+ case hydra.python.syntax.StarNamedExpressionSimple(value=ne):
339
+ return encode_named_expression(ne)
340
+ case _:
341
+ raise AssertionError("Unreachable: all variants handled")
342
+ def encode_starred_expression(se: hydra.python.syntax.StarredExpression) -> hydra.ast.Expr:
343
+ r"""Serialize a starred expression."""
344
+ return hydra.serialization.no_sep((hydra.serialization.cst("*"), encode_expression(se.value)))
345
+ def encode_sum(s: hydra.python.syntax.Sum) -> hydra.ast.Expr:
346
+ r"""Serialize a sum expression."""
347
+ return encode_term(s.rhs)
348
+ def encode_term(t: hydra.python.syntax.Term) -> hydra.ast.Expr:
349
+ r"""Serialize a term expression."""
350
+ return encode_factor(t.rhs)
351
+ def encode_tuple(t: hydra.python.syntax.Tuple) -> hydra.ast.Expr:
352
+ r"""Serialize a Python tuple."""
353
+ es = t.value
354
+ return hydra.lib.maybes.from_maybe((lambda : hydra.serialization.paren_list(False, hydra.lib.lists.map((lambda x1: encode_star_named_expression(x1)), es))), hydra.lib.maybes.map((lambda first_es: hydra.lib.logic.if_else(hydra.lib.equality.equal(hydra.lib.lists.length(es), 1), (lambda : hydra.serialization.parens(hydra.serialization.no_sep((encode_star_named_expression(first_es), hydra.serialization.cst(","))))), (lambda : hydra.serialization.paren_list(False, hydra.lib.lists.map((lambda x1: encode_star_named_expression(x1)), es))))), hydra.lib.lists.maybe_head(es)))
355
+ def encode_star_expression(se: hydra.python.syntax.StarExpression) -> hydra.ast.Expr:
356
+ r"""Serialize a star expression."""
357
+ match se:
358
+ case hydra.python.syntax.StarExpressionStar(value=bor):
359
+ return hydra.serialization.no_sep((hydra.serialization.cst("*"), encode_bitwise_or(bor)))
360
+ case hydra.python.syntax.StarExpressionSimple(value=e):
361
+ return encode_expression(e)
362
+ case _:
363
+ raise AssertionError("Unreachable: all variants handled")
364
+ def encode_annotated_rhs(arhs: hydra.python.syntax.AnnotatedRhs):
365
+ def _hoist_hydra_python_serde_encode_annotated_rhs_1(v1):
366
+ match v1:
367
+ case hydra.python.syntax.AnnotatedRhsStar(value=ses):
368
+ return hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_star_expression(x1)), ses))
369
+ case hydra.python.syntax.AnnotatedRhsYield():
370
+ return hydra.serialization.cst("yield ...")
371
+ case _:
372
+ raise AssertionError("Unreachable: all variants handled")
373
+ return hydra.serialization.space_sep((hydra.serialization.cst("="), _hoist_hydra_python_serde_encode_annotated_rhs_1(arhs)))
374
+ def encode_single_target(st: hydra.python.syntax.SingleTarget) -> hydra.ast.Expr:
375
+ r"""Serialize a single target."""
376
+ match st:
377
+ case hydra.python.syntax.SingleTargetName(value=n):
378
+ return encode_name(n)
379
+ case hydra.python.syntax.SingleTargetParens():
380
+ return hydra.serialization.cst("(...)")
381
+ case hydra.python.syntax.SingleTargetSubscriptAttributeTarget():
382
+ return hydra.serialization.cst("...")
383
+ case _:
384
+ raise AssertionError("Unreachable: all variants handled")
385
+ def encode_typed_assignment(ta: hydra.python.syntax.TypedAssignment) -> hydra.ast.Expr:
386
+ r"""Serialize a typed assignment."""
387
+ lhs = ta.lhs
388
+ typ = ta.type
389
+ rhs = ta.rhs
390
+ return hydra.serialization.space_sep(hydra.lib.maybes.cat((Just(hydra.serialization.no_sep((encode_single_target(lhs), hydra.serialization.cst(":")))), Just(encode_expression(typ)), hydra.lib.maybes.map((lambda x1: encode_annotated_rhs(x1)), rhs))))
391
+ def encode_star_atom(sa: hydra.python.syntax.StarAtom) -> hydra.ast.Expr:
392
+ r"""Serialize a star atom."""
393
+ match sa:
394
+ case hydra.python.syntax.StarAtomName(value=n):
395
+ return encode_name(n)
396
+ case hydra.python.syntax.StarAtomTargetWithStarAtom():
397
+ return hydra.serialization.cst("(...)")
398
+ case hydra.python.syntax.StarAtomStarTargetsTupleSeq():
399
+ return hydra.serialization.cst("(...)")
400
+ case hydra.python.syntax.StarAtomStarTargetsListSeq():
401
+ return hydra.serialization.cst("[...]")
402
+ case _:
403
+ raise AssertionError("Unreachable: all variants handled")
404
+ def encode_t_primary(tp: hydra.python.syntax.TPrimary) -> hydra.ast.Expr:
405
+ r"""Serialize a target-side primary expression."""
406
+ match tp:
407
+ case hydra.python.syntax.TPrimaryAtom(value=a):
408
+ return encode_atom(a)
409
+ case hydra.python.syntax.TPrimaryPrimaryAndName(value=pn):
410
+ return encode_t_primary_and_name(pn)
411
+ case hydra.python.syntax.TPrimaryPrimaryAndSlices():
412
+ return hydra.serialization.cst("...")
413
+ case hydra.python.syntax.TPrimaryPrimaryAndGenexp():
414
+ return hydra.serialization.cst("...")
415
+ case hydra.python.syntax.TPrimaryPrimaryAndArguments():
416
+ return hydra.serialization.cst("...")
417
+ case _:
418
+ raise AssertionError("Unreachable: all variants handled")
419
+ def encode_t_primary_and_name(pn: hydra.python.syntax.TPrimaryAndName) -> hydra.ast.Expr:
420
+ r"""Serialize a TPrimaryAndName as primary.name."""
421
+ prim = pn.primary
422
+ name_ = pn.name
423
+ return hydra.serialization.no_sep((encode_t_primary(prim), hydra.serialization.cst("."), encode_name(name_)))
424
+ def encode_target_with_star_atom(t: hydra.python.syntax.TargetWithStarAtom) -> hydra.ast.Expr:
425
+ r"""Serialize a target with star atom."""
426
+ match t:
427
+ case hydra.python.syntax.TargetWithStarAtomAtom(value=a):
428
+ return encode_star_atom(a)
429
+ case hydra.python.syntax.TargetWithStarAtomProject(value=pn):
430
+ return encode_t_primary_and_name(pn)
431
+ case hydra.python.syntax.TargetWithStarAtomSlices():
432
+ return hydra.serialization.cst("...")
433
+ case _:
434
+ raise AssertionError("Unreachable: all variants handled")
435
+ def encode_star_target(st: hydra.python.syntax.StarTarget) -> hydra.ast.Expr:
436
+ r"""Serialize a star target."""
437
+ match st:
438
+ case hydra.python.syntax.StarTargetUnstarred(value=t):
439
+ return encode_target_with_star_atom(t)
440
+ case hydra.python.syntax.StarTargetStarred(value=inner):
441
+ return hydra.serialization.no_sep((hydra.serialization.cst("*"), encode_star_target(inner)))
442
+ case _:
443
+ raise AssertionError("Unreachable: all variants handled")
444
+ def encode_untyped_assignment(ua: hydra.python.syntax.UntypedAssignment) -> hydra.ast.Expr:
445
+ r"""Serialize an untyped assignment."""
446
+ targets = ua.targets
447
+ rhs = ua.rhs
448
+ return hydra.serialization.space_sep(hydra.lib.lists.concat((hydra.lib.lists.map((lambda x1: encode_star_target(x1)), targets), (encode_annotated_rhs(rhs),))))
449
+ def encode_assignment(a: hydra.python.syntax.Assignment) -> hydra.ast.Expr:
450
+ r"""Serialize an assignment."""
451
+ match a:
452
+ case hydra.python.syntax.AssignmentTyped(value=t):
453
+ return encode_typed_assignment(t)
454
+ case hydra.python.syntax.AssignmentUntyped(value=u):
455
+ return encode_untyped_assignment(u)
456
+ case hydra.python.syntax.AssignmentAug():
457
+ return hydra.serialization.cst("... += ...")
458
+ case _:
459
+ raise AssertionError("Unreachable: all variants handled")
460
+ def encode_dotted_name(dn: hydra.python.syntax.DottedName) -> hydra.ast.Expr:
461
+ r"""Serialize a dotted name (e.g., module.submodule)."""
462
+ return hydra.serialization.cst(hydra.lib.strings.intercalate(".", hydra.lib.lists.map((lambda n: n.value), dn.value)))
463
+ def encode_import_from_as_name(ifan: hydra.python.syntax.ImportFromAsName) -> hydra.ast.Expr:
464
+ r"""Serialize an import from as name."""
465
+ name = ifan.name
466
+ alias = ifan.as_
467
+ return hydra.lib.maybes.maybe((lambda : encode_name(name)), (lambda a: hydra.serialization.space_sep((encode_name(name), hydra.serialization.cst("as"), encode_name(a)))), alias)
468
+ def encode_import_from_targets(t: hydra.python.syntax.ImportFromTargets) -> hydra.ast.Expr:
469
+ r"""Serialize import from targets."""
470
+ match t:
471
+ case hydra.python.syntax.ImportFromTargetsSimple(value=names):
472
+ return hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_import_from_as_name(x1)), names))
473
+ case hydra.python.syntax.ImportFromTargetsParens(value=names2):
474
+ return hydra.serialization.no_sep((hydra.serialization.cst("("), hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_import_from_as_name(x1)), names2)), hydra.serialization.cst(")")))
475
+ case hydra.python.syntax.ImportFromTargetsStar():
476
+ return hydra.serialization.cst("*")
477
+ case _:
478
+ raise AssertionError("Unreachable: all variants handled")
479
+ def encode_relative_import_prefix(p: hydra.python.syntax.RelativeImportPrefix) -> hydra.ast.Expr:
480
+ r"""Serialize a relative import prefix."""
481
+ match p:
482
+ case hydra.python.syntax.RelativeImportPrefix.DOT:
483
+ return hydra.serialization.cst(".")
484
+ case hydra.python.syntax.RelativeImportPrefix.ELLIPSIS:
485
+ return hydra.serialization.cst("...")
486
+ case _:
487
+ raise AssertionError("Unreachable: all variants handled")
488
+ def encode_import_from(if_: hydra.python.syntax.ImportFrom) -> hydra.ast.Expr:
489
+ r"""Serialize an import from statement."""
490
+ prefixes = if_.prefixes
491
+ name = if_.dotted_name
492
+ targets = if_.targets
493
+ @lru_cache(1)
494
+ def lhs() -> hydra.ast.Expr:
495
+ return hydra.serialization.no_sep(hydra.lib.maybes.cat(hydra.lib.lists.concat((hydra.lib.lists.map((lambda p: Just(encode_relative_import_prefix(p))), prefixes), (hydra.lib.maybes.map((lambda x1: encode_dotted_name(x1)), name),)))))
496
+ return hydra.serialization.space_sep((hydra.serialization.cst("from"), lhs(), hydra.serialization.cst("import"), encode_import_from_targets(targets)))
497
+ def encode_dotted_as_name(dan: hydra.python.syntax.DottedAsName) -> hydra.ast.Expr:
498
+ r"""Serialize a dotted as name."""
499
+ name = dan.name
500
+ alias = dan.as_
501
+ return hydra.serialization.space_sep(hydra.lib.maybes.cat((Just(encode_dotted_name(name)), hydra.lib.maybes.map((lambda a: hydra.serialization.space_sep((hydra.serialization.cst("as"), encode_name(a)))), alias))))
502
+ def encode_import_name(in_: hydra.python.syntax.ImportName) -> hydra.ast.Expr:
503
+ r"""Serialize an import name."""
504
+ return hydra.serialization.space_sep((hydra.serialization.cst("import"), hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_dotted_as_name(x1)), in_.value))))
505
+ def encode_import_statement(is_: hydra.python.syntax.ImportStatement) -> hydra.ast.Expr:
506
+ r"""Serialize an import statement."""
507
+ match is_:
508
+ case hydra.python.syntax.ImportStatementName(value=n):
509
+ return encode_import_name(n)
510
+ case hydra.python.syntax.ImportStatementFrom(value=f):
511
+ return encode_import_from(f)
512
+ case _:
513
+ raise AssertionError("Unreachable: all variants handled")
514
+ def encode_raise_expression(re: hydra.python.syntax.RaiseExpression) -> hydra.ast.Expr:
515
+ r"""Serialize a raise expression."""
516
+ expr = re.expression
517
+ from_ = re.from_
518
+ return hydra.serialization.space_sep(hydra.lib.maybes.cat((Just(encode_expression(expr)), hydra.lib.maybes.map((lambda f: hydra.serialization.space_sep((hydra.serialization.cst("from"), encode_expression(f)))), from_))))
519
+ def encode_raise_statement(rs: hydra.python.syntax.RaiseStatement) -> hydra.ast.Expr:
520
+ r"""Serialize a raise statement."""
521
+ return hydra.serialization.space_sep(hydra.lib.maybes.cat((Just(hydra.serialization.cst("raise")), hydra.lib.maybes.map((lambda x1: encode_raise_expression(x1)), rs.value))))
522
+ def encode_return_statement(rs: hydra.python.syntax.ReturnStatement) -> hydra.ast.Expr:
523
+ r"""Serialize a return statement."""
524
+ return hydra.serialization.space_sep((hydra.serialization.cst("return"), hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_star_expression(x1)), rs.value))))
525
+ def encode_simple_type_parameter(stp: hydra.python.syntax.SimpleTypeParameter) -> hydra.ast.Expr:
526
+ r"""Serialize a simple type parameter."""
527
+ return encode_name(stp.name)
528
+ def encode_type_parameter(tp: hydra.python.syntax.TypeParameter) -> hydra.ast.Expr:
529
+ r"""Serialize a type parameter."""
530
+ match tp:
531
+ case hydra.python.syntax.TypeParameterSimple(value=s):
532
+ return encode_simple_type_parameter(s)
533
+ case hydra.python.syntax.TypeParameterStar():
534
+ return hydra.serialization.cst("*...")
535
+ case hydra.python.syntax.TypeParameterDoubleStar():
536
+ return hydra.serialization.cst("**...")
537
+ case _:
538
+ raise AssertionError("Unreachable: all variants handled")
539
+ def encode_type_alias(ta: hydra.python.syntax.TypeAlias) -> hydra.ast.Expr:
540
+ r"""Serialize a type alias."""
541
+ name = ta.name
542
+ tparams = ta.type_params
543
+ expr = ta.expression
544
+ @lru_cache(1)
545
+ def alias() -> hydra.ast.Expr:
546
+ return hydra.serialization.no_sep(hydra.lib.maybes.cat((Just(encode_name(name)), hydra.lib.logic.if_else(hydra.lib.lists.null(tparams), (lambda : Nothing()), (lambda : Just(hydra.serialization.bracket_list(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_type_parameter(x1)), tparams))))))))
547
+ return hydra.serialization.space_sep((hydra.serialization.cst("type"), alias(), hydra.serialization.cst("="), encode_expression(expr)))
548
+ def encode_simple_statement(ss: hydra.python.syntax.SimpleStatement) -> hydra.ast.Expr:
549
+ r"""Serialize a simple (single-line) Python statement."""
550
+ match ss:
551
+ case hydra.python.syntax.SimpleStatementAssignment(value=a):
552
+ return encode_assignment(a)
553
+ case hydra.python.syntax.SimpleStatementStarExpressions(value=es):
554
+ return hydra.serialization.newline_sep(hydra.lib.lists.map((lambda x1: encode_star_expression(x1)), es))
555
+ case hydra.python.syntax.SimpleStatementReturn(value=r):
556
+ return encode_return_statement(r)
557
+ case hydra.python.syntax.SimpleStatementRaise(value=r2):
558
+ return encode_raise_statement(r2)
559
+ case hydra.python.syntax.SimpleStatementPass():
560
+ return hydra.serialization.cst("pass")
561
+ case hydra.python.syntax.SimpleStatementBreak():
562
+ return hydra.serialization.cst("break")
563
+ case hydra.python.syntax.SimpleStatementContinue():
564
+ return hydra.serialization.cst("continue")
565
+ case hydra.python.syntax.SimpleStatementImport(value=i):
566
+ return encode_import_statement(i)
567
+ case hydra.python.syntax.SimpleStatementTypeAlias(value=t):
568
+ return encode_type_alias(t)
569
+ case hydra.python.syntax.SimpleStatementAssert():
570
+ return hydra.serialization.cst("assert ...")
571
+ case hydra.python.syntax.SimpleStatementGlobal():
572
+ return hydra.serialization.cst("global ...")
573
+ case hydra.python.syntax.SimpleStatementNonlocal():
574
+ return hydra.serialization.cst("nonlocal ...")
575
+ case hydra.python.syntax.SimpleStatementDel():
576
+ return hydra.serialization.cst("del ...")
577
+ case _:
578
+ raise TypeError("Unsupported SimpleStatement")
579
+ def encode_decorators(decs: hydra.python.syntax.Decorators) -> hydra.ast.Expr:
580
+ r"""Serialize decorators."""
581
+ return hydra.serialization.newline_sep(hydra.lib.lists.map((lambda ne: hydra.serialization.no_sep((hydra.serialization.cst("@"), encode_named_expression(ne)))), decs.value))
582
+ def encode_annotation(ann: hydra.python.syntax.Annotation) -> hydra.ast.Expr:
583
+ r"""Serialize a type annotation."""
584
+ return hydra.serialization.space_sep((hydra.serialization.cst(":"), encode_expression(ann.value)))
585
+ def encode_param(p: hydra.python.syntax.Param) -> hydra.ast.Expr:
586
+ r"""Serialize a parameter."""
587
+ name = p.name
588
+ ann = p.annotation
589
+ return hydra.serialization.no_sep(hydra.lib.maybes.cat((Just(encode_name(name)), hydra.lib.maybes.map((lambda x1: encode_annotation(x1)), ann))))
590
+ def encode_param_no_default(pnd: hydra.python.syntax.ParamNoDefault) -> hydra.ast.Expr:
591
+ r"""Serialize a parameter without default."""
592
+ return encode_param(pnd.param)
593
+ def encode_param_no_default_parameters(pndp: hydra.python.syntax.ParamNoDefaultParameters) -> hydra.ast.Expr:
594
+ r"""Serialize parameters without defaults."""
595
+ nodef = pndp.param_no_default
596
+ return hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_param_no_default(x1)), nodef))
597
+ def encode_parameters(p: hydra.python.syntax.Parameters) -> hydra.ast.Expr:
598
+ r"""Serialize function parameters."""
599
+ match p:
600
+ case hydra.python.syntax.ParametersParamNoDefault(value=pnd):
601
+ return encode_param_no_default_parameters(pnd)
602
+ case hydra.python.syntax.ParametersSlashNoDefault():
603
+ return hydra.serialization.cst("...")
604
+ case hydra.python.syntax.ParametersSlashWithDefault():
605
+ return hydra.serialization.cst("...")
606
+ case _:
607
+ raise TypeError("Unsupported Parameters")
608
+ def encode_guard(g: hydra.python.syntax.Guard) -> hydra.ast.Expr:
609
+ r"""Serialize a guard clause."""
610
+ return hydra.serialization.space_sep((hydra.serialization.cst("if"), encode_named_expression(g.value)))
611
+ def encode_pattern_capture_target(pct: hydra.python.syntax.PatternCaptureTarget) -> hydra.ast.Expr:
612
+ r"""Serialize a pattern capture target."""
613
+ return encode_name(pct.value)
614
+ def encode_capture_pattern(cp: hydra.python.syntax.CapturePattern) -> hydra.ast.Expr:
615
+ r"""Serialize a capture pattern."""
616
+ return encode_pattern_capture_target(cp.value)
617
+ def encode_name_or_attribute(noa: hydra.python.syntax.NameOrAttribute) -> hydra.ast.Expr:
618
+ r"""Serialize a name or attribute."""
619
+ return hydra.serialization.dot_sep(hydra.lib.lists.map((lambda x1: encode_name(x1)), noa.value))
620
+ def encode_attribute(attr: hydra.python.syntax.Attribute) -> hydra.ast.Expr:
621
+ r"""Serialize an attribute access."""
622
+ return hydra.serialization.dot_sep(hydra.lib.lists.map((lambda x1: encode_name(x1)), attr.value))
623
+ def encode_value_pattern(vp: hydra.python.syntax.ValuePattern) -> hydra.ast.Expr:
624
+ r"""Serialize a value pattern."""
625
+ return encode_attribute(vp.value)
626
+ def encode_class_pattern(cp: hydra.python.syntax.ClassPattern) -> hydra.ast.Expr:
627
+ r"""Serialize a class pattern."""
628
+ noa = cp.name_or_attribute
629
+ pos = cp.positional_patterns
630
+ kw = cp.keyword_patterns
631
+ return hydra.serialization.no_sep(hydra.lib.maybes.cat((Just(encode_name_or_attribute(noa)), Just(hydra.serialization.cst("(")), hydra.lib.maybes.map((lambda x1: encode_positional_patterns(x1)), pos), hydra.lib.maybes.map((lambda x1: encode_keyword_patterns(x1)), kw), Just(hydra.serialization.cst(")")))))
632
+ def encode_closed_pattern(cp: hydra.python.syntax.ClosedPattern) -> hydra.ast.Expr:
633
+ r"""Serialize a closed pattern."""
634
+ match cp:
635
+ case hydra.python.syntax.ClosedPatternLiteral():
636
+ return hydra.serialization.cst("...")
637
+ case hydra.python.syntax.ClosedPatternCapture(value=c):
638
+ return encode_capture_pattern(c)
639
+ case hydra.python.syntax.ClosedPatternWildcard():
640
+ return hydra.serialization.cst("_")
641
+ case hydra.python.syntax.ClosedPatternValue(value=v):
642
+ return encode_value_pattern(v)
643
+ case hydra.python.syntax.ClosedPatternGroup():
644
+ return hydra.serialization.cst("(...)")
645
+ case hydra.python.syntax.ClosedPatternSequence():
646
+ return hydra.serialization.cst("[...]")
647
+ case hydra.python.syntax.ClosedPatternMapping():
648
+ return hydra.serialization.cst("{...}")
649
+ case hydra.python.syntax.ClosedPatternClass(value=c2):
650
+ return encode_class_pattern(c2)
651
+ case _:
652
+ raise AssertionError("Unreachable: all variants handled")
653
+ def encode_keyword_pattern(kp: hydra.python.syntax.KeywordPattern) -> hydra.ast.Expr:
654
+ r"""Serialize a keyword pattern."""
655
+ name = kp.name
656
+ pat = kp.pattern
657
+ return hydra.serialization.no_sep((encode_name(name), hydra.serialization.cst("="), encode_pattern(pat)))
658
+ def encode_keyword_patterns(kp: hydra.python.syntax.KeywordPatterns) -> hydra.ast.Expr:
659
+ r"""Serialize keyword patterns."""
660
+ return hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_keyword_pattern(x1)), kp.value))
661
+ def encode_or_pattern(op: hydra.python.syntax.OrPattern) -> hydra.ast.Expr:
662
+ r"""Serialize an or pattern."""
663
+ return hydra.serialization.symbol_sep("|", hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_closed_pattern(x1)), op.value))
664
+ def encode_pattern(p: hydra.python.syntax.Pattern) -> hydra.ast.Expr:
665
+ r"""Serialize a pattern."""
666
+ match p:
667
+ case hydra.python.syntax.PatternOr(value=op):
668
+ return encode_or_pattern(op)
669
+ case hydra.python.syntax.PatternAs():
670
+ return hydra.serialization.cst("... as ...")
671
+ case _:
672
+ raise AssertionError("Unreachable: all variants handled")
673
+ def encode_positional_patterns(pp: hydra.python.syntax.PositionalPatterns) -> hydra.ast.Expr:
674
+ r"""Serialize positional patterns."""
675
+ return hydra.serialization.comma_sep(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_pattern(x1)), pp.value))
676
+ def encode_patterns(ps: hydra.python.syntax.Patterns) -> hydra.ast.Expr:
677
+ r"""Serialize patterns."""
678
+ match ps:
679
+ case hydra.python.syntax.PatternsPattern(value=p):
680
+ return encode_pattern(p)
681
+ case hydra.python.syntax.PatternsSequence():
682
+ return hydra.serialization.cst("...")
683
+ case _:
684
+ raise AssertionError("Unreachable: all variants handled")
685
+ def encode_subject_expression(se: hydra.python.syntax.SubjectExpression) -> hydra.ast.Expr:
686
+ r"""Serialize a subject expression."""
687
+ match se:
688
+ case hydra.python.syntax.SubjectExpressionSimple(value=ne):
689
+ return encode_named_expression(ne)
690
+ case hydra.python.syntax.SubjectExpressionTuple():
691
+ return hydra.serialization.cst("*...")
692
+ case _:
693
+ raise AssertionError("Unreachable: all variants handled")
694
+ def to_python_comments(doc_: str) -> str:
695
+ r"""Convert a doc string to Python comment format. Empty source lines emit `#` (no trailing space) so blank comment lines don't carry trailing whitespace into the generated file."""
696
+ return hydra.lib.logic.if_else(hydra.lib.equality.equal(doc_, ""), (lambda : ""), (lambda : hydra.lib.strings.intercalate("\n", hydra.lib.lists.map((lambda line: hydra.lib.logic.if_else(hydra.lib.equality.equal(line, ""), (lambda : "#"), (lambda : hydra.lib.strings.cat2("# ", line)))), hydra.lib.strings.lines(doc_)))))
697
+ def encode_annotated_statement(as_: hydra.python.syntax.AnnotatedStatement) -> hydra.ast.Expr:
698
+ r"""Serialize an annotated statement (with optional doc comment)."""
699
+ doc_ = as_.comment
700
+ stmt = as_.statement
701
+ return hydra.serialization.newline_sep((hydra.serialization.cst(to_python_comments(doc_)), encode_statement(stmt)))
702
+ def encode_block(b: hydra.python.syntax.Block) -> hydra.ast.Expr:
703
+ r"""Serialize a block."""
704
+ match b:
705
+ case hydra.python.syntax.BlockIndented(value=groups):
706
+ return hydra.serialization.tab_indent_double_space(hydra.lib.lists.map((lambda stmts: hydra.serialization.newline_sep(hydra.lib.lists.map((lambda x1: encode_statement(x1)), stmts))), groups))
707
+ case hydra.python.syntax.BlockSimple(value=ss):
708
+ return hydra.serialization.semicolon_sep(hydra.lib.lists.map((lambda x1: encode_simple_statement(x1)), ss))
709
+ case _:
710
+ raise AssertionError("Unreachable: all variants handled")
711
+ def encode_case_block(cb: hydra.python.syntax.CaseBlock) -> hydra.ast.Expr:
712
+ r"""Serialize a case block."""
713
+ patterns = cb.patterns
714
+ guard = cb.guard
715
+ body = cb.body
716
+ return hydra.serialization.newline_sep((hydra.serialization.no_sep((hydra.serialization.space_sep(hydra.lib.maybes.cat((Just(hydra.serialization.cst("case")), Just(encode_patterns(patterns)), hydra.lib.maybes.map((lambda x1: encode_guard(x1)), guard)))), hydra.serialization.cst(":"))), encode_block(body)))
717
+ def encode_class_definition(cd: hydra.python.syntax.ClassDefinition) -> hydra.ast.Expr:
718
+ r"""Serialize a class definition."""
719
+ decs = cd.decorators
720
+ name = cd.name
721
+ args = cd.arguments
722
+ body = cd.body
723
+ @lru_cache(1)
724
+ def arg_part() -> Maybe[hydra.ast.Expr]:
725
+ return hydra.lib.maybes.map((lambda a: hydra.serialization.no_sep((hydra.serialization.cst("("), encode_args(a), hydra.serialization.cst(")")))), args)
726
+ return hydra.serialization.newline_sep(hydra.lib.maybes.cat((hydra.lib.maybes.map((lambda x1: encode_decorators(x1)), decs), Just(hydra.serialization.no_sep(hydra.lib.maybes.cat((Just(hydra.serialization.space_sep((hydra.serialization.cst("class"), encode_name(name)))), arg_part(), Just(hydra.serialization.cst(":")))))), Just(encode_block(body)))))
727
+ def encode_compound_statement(cs: hydra.python.syntax.CompoundStatement) -> hydra.ast.Expr:
728
+ r"""Serialize a compound (multi-line) Python statement."""
729
+ match cs:
730
+ case hydra.python.syntax.CompoundStatementFunction(value=f):
731
+ return encode_function_definition(f)
732
+ case hydra.python.syntax.CompoundStatementIf():
733
+ return hydra.serialization.cst("if ...")
734
+ case hydra.python.syntax.CompoundStatementClassDef(value=c):
735
+ return encode_class_definition(c)
736
+ case hydra.python.syntax.CompoundStatementWith():
737
+ return hydra.serialization.cst("with ...")
738
+ case hydra.python.syntax.CompoundStatementFor():
739
+ return hydra.serialization.cst("for ...")
740
+ case hydra.python.syntax.CompoundStatementTry():
741
+ return hydra.serialization.cst("try ...")
742
+ case hydra.python.syntax.CompoundStatementWhile(value=w):
743
+ return encode_while_statement(w)
744
+ case hydra.python.syntax.CompoundStatementMatch(value=m):
745
+ return encode_match_statement(m)
746
+ case _:
747
+ raise AssertionError("Unreachable: all variants handled")
748
+ def encode_function_def_raw(fdr: hydra.python.syntax.FunctionDefRaw) -> hydra.ast.Expr:
749
+ r"""Serialize a raw function definition."""
750
+ async_ = fdr.async_
751
+ name = fdr.name
752
+ tparams = fdr.type_params
753
+ params = fdr.params
754
+ ret_type = fdr.return_type
755
+ block = fdr.block
756
+ @lru_cache(1)
757
+ def async_kw() -> Maybe[hydra.ast.Expr]:
758
+ return hydra.lib.logic.if_else(async_, (lambda : Just(hydra.serialization.cst("async"))), (lambda : Nothing()))
759
+ @lru_cache(1)
760
+ def tparam_part() -> Maybe[hydra.ast.Expr]:
761
+ return hydra.lib.logic.if_else(hydra.lib.lists.null(tparams), (lambda : Nothing()), (lambda : Just(hydra.serialization.bracket_list(hydra.serialization.inline_style, hydra.lib.lists.map((lambda x1: encode_type_parameter(x1)), tparams)))))
762
+ @lru_cache(1)
763
+ def param_part() -> Maybe[hydra.ast.Expr]:
764
+ return hydra.lib.maybes.map((lambda x1: encode_parameters(x1)), params)
765
+ @lru_cache(1)
766
+ def ret_part() -> Maybe[hydra.ast.Expr]:
767
+ return hydra.lib.maybes.map((lambda t: hydra.serialization.space_sep((hydra.serialization.cst("->"), encode_expression(t)))), ret_type)
768
+ return hydra.serialization.newline_sep((hydra.serialization.no_sep((hydra.serialization.space_sep(hydra.lib.maybes.cat((async_kw(), Just(hydra.serialization.cst("def")), Just(hydra.serialization.no_sep(hydra.lib.maybes.cat((Just(encode_name(name)), tparam_part(), Just(hydra.serialization.cst("(")), param_part(), Just(hydra.serialization.cst(")")))))), ret_part()))), hydra.serialization.cst(":"))), encode_block(block)))
769
+ def encode_function_definition(fd: hydra.python.syntax.FunctionDefinition) -> hydra.ast.Expr:
770
+ r"""Serialize a function definition."""
771
+ decs = fd.decorators
772
+ raw = fd.raw
773
+ return hydra.serialization.newline_sep(hydra.lib.maybes.cat((hydra.lib.maybes.map((lambda x1: encode_decorators(x1)), decs), Just(encode_function_def_raw(raw)))))
774
+ def encode_match_statement(ms: hydra.python.syntax.MatchStatement) -> hydra.ast.Expr:
775
+ r"""Serialize a match statement."""
776
+ subj = ms.subject
777
+ cases = ms.cases
778
+ return hydra.serialization.newline_sep((hydra.serialization.space_sep((hydra.serialization.cst("match"), hydra.serialization.no_sep((encode_subject_expression(subj), hydra.serialization.cst(":"))))), hydra.serialization.tab_indent_double_space(hydra.lib.lists.map((lambda x1: encode_case_block(x1)), cases))))
779
+ def encode_statement(stmt: hydra.python.syntax.Statement) -> hydra.ast.Expr:
780
+ r"""Serialize a Python statement."""
781
+ match stmt:
782
+ case hydra.python.syntax.StatementAnnotated(value=a):
783
+ return encode_annotated_statement(a)
784
+ case hydra.python.syntax.StatementSimple(value=ss):
785
+ return hydra.serialization.newline_sep(hydra.lib.lists.map((lambda x1: encode_simple_statement(x1)), ss))
786
+ case hydra.python.syntax.StatementCompound(value=c):
787
+ return encode_compound_statement(c)
788
+ case _:
789
+ raise AssertionError("Unreachable: all variants handled")
790
+ def encode_while_statement(ws: hydra.python.syntax.WhileStatement) -> hydra.ast.Expr:
791
+ r"""Serialize a while statement."""
792
+ cond = ws.condition
793
+ body = ws.body
794
+ else_ = ws.else_
795
+ return hydra.serialization.newline_sep(hydra.lib.maybes.cat((Just(hydra.serialization.newline_sep((hydra.serialization.space_sep((hydra.serialization.cst("while"), hydra.serialization.no_sep((encode_named_expression(cond), hydra.serialization.cst(":"))))), encode_block(body)))), hydra.lib.maybes.map((lambda eb: hydra.serialization.newline_sep((hydra.serialization.cst("else:"), encode_block(eb)))), else_))))
796
+ def encode_lambda_star_etc(lse: hydra.python.syntax.LambdaStarEtc) -> hydra.ast.Expr:
797
+ r"""Serialize lambda star etc."""
798
+ match lse:
799
+ case hydra.python.syntax.LambdaStarEtcParamNoDefault(value=p):
800
+ return encode_lambda_param_no_default(p)
801
+ case hydra.python.syntax.LambdaStarEtcStar():
802
+ return hydra.serialization.cst("*...")
803
+ case hydra.python.syntax.LambdaStarEtcParamMaybeDefault():
804
+ return hydra.serialization.cst("...")
805
+ case hydra.python.syntax.LambdaStarEtcKwds():
806
+ return hydra.serialization.cst("**...")
807
+ case _:
808
+ raise AssertionError("Unreachable: all variants handled")
809
+ def encode_module(mod: hydra.python.syntax.Module) -> hydra.ast.Expr:
810
+ r"""Serialize a Python module to an AST expression."""
811
+ @lru_cache(1)
812
+ def warning() -> hydra.ast.Expr:
813
+ return hydra.serialization.cst(to_python_comments(hydra.constants.warning_auto_generated_file))
814
+ @lru_cache(1)
815
+ def groups() -> frozenlist[hydra.ast.Expr]:
816
+ return hydra.lib.lists.map((lambda group: hydra.serialization.newline_sep(hydra.lib.lists.map((lambda x1: encode_statement(x1)), group))), mod.value)
817
+ return hydra.serialization.double_newline_sep(hydra.lib.lists.cons(warning(), groups()))