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/coder.py +1364 -0
- hydra/python/environment.py +91 -0
- hydra/python/language.py +48 -0
- hydra/python/names.py +120 -0
- hydra/python/serde.py +817 -0
- hydra/python/syntax.py +1811 -0
- hydra/python/testing.py +58 -0
- hydra/python/utils.py +324 -0
- hydra_python-0.15.0.dist-info/METADATA +247 -0
- hydra_python-0.15.0.dist-info/RECORD +11 -0
- hydra_python-0.15.0.dist-info/WHEEL +4 -0
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()))
|