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/testing.py
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Note: this is an automatically generated file. Do not edit.
|
|
2
|
+
r"""Python test code generation codec for pytest-based generation tests."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
from functools import lru_cache
|
|
6
|
+
from hydra.dsl.python import Either, Right, frozenlist
|
|
7
|
+
from typing import TypeVar, cast
|
|
8
|
+
import hydra.constants
|
|
9
|
+
import hydra.core
|
|
10
|
+
import hydra.lib.chars
|
|
11
|
+
import hydra.lib.eithers
|
|
12
|
+
import hydra.lib.equality
|
|
13
|
+
import hydra.lib.lists
|
|
14
|
+
import hydra.lib.logic
|
|
15
|
+
import hydra.lib.maybes
|
|
16
|
+
import hydra.lib.strings
|
|
17
|
+
import hydra.packaging
|
|
18
|
+
import hydra.testing
|
|
19
|
+
T0 = TypeVar("T0")
|
|
20
|
+
T1 = TypeVar("T1")
|
|
21
|
+
def build_python_test_module(test_module: T0, test_group: hydra.testing.TestGroup, test_body: str) -> str:
|
|
22
|
+
r"""Build the complete Python test module content."""
|
|
23
|
+
group_name_ = test_group.name
|
|
24
|
+
@lru_cache(1)
|
|
25
|
+
def header() -> str:
|
|
26
|
+
return hydra.lib.strings.cat((hydra.lib.strings.cat2("# ", hydra.constants.warning_auto_generated_file), "\n", hydra.lib.strings.cat2("# ", group_name_), "\n\n"))
|
|
27
|
+
return hydra.lib.strings.cat((header(), test_body, "\n"))
|
|
28
|
+
def format_python_test_name(name: str) -> str:
|
|
29
|
+
r"""Format a test name for Python (snake_case with test_ prefix)."""
|
|
30
|
+
return hydra.lib.strings.cat2("test_", hydra.lib.strings.from_list(hydra.lib.lists.map((lambda c: hydra.lib.logic.if_else(hydra.lib.chars.is_alpha_num(c), (lambda : hydra.lib.chars.to_lower(c)), (lambda : 95))), hydra.lib.strings.to_list(name))))
|
|
31
|
+
def generate_python_test_case(group_path: frozenlist[str], tcm: hydra.testing.TestCaseWithMetadata) -> Either[T0, frozenlist[str]]:
|
|
32
|
+
r"""Generate a single pytest test case from a test case with metadata."""
|
|
33
|
+
name_ = tcm.name
|
|
34
|
+
tcase = tcm.case
|
|
35
|
+
match tcase:
|
|
36
|
+
case hydra.testing.TestCaseUniversal(value=ucase):
|
|
37
|
+
actual_ = ucase.actual
|
|
38
|
+
expected_ = ucase.expected
|
|
39
|
+
@lru_cache(1)
|
|
40
|
+
def full_name() -> str:
|
|
41
|
+
return hydra.lib.logic.if_else(hydra.lib.lists.null(group_path), (lambda : name_), (lambda : hydra.lib.strings.intercalate("__", hydra.lib.lists.concat2(group_path, (name_,)))))
|
|
42
|
+
@lru_cache(1)
|
|
43
|
+
def formatted_name() -> str:
|
|
44
|
+
return format_python_test_name(full_name())
|
|
45
|
+
return Right((hydra.lib.strings.cat(("def ", formatted_name(), "():")), hydra.lib.strings.cat((" assert (", actual_, ") == (", expected_, ")"))))
|
|
46
|
+
case _:
|
|
47
|
+
raise AssertionError("Unreachable: all variants handled")
|
|
48
|
+
def generate_python_test_group_hierarchy(group_path: frozenlist[str], test_group: hydra.testing.TestGroup) -> Either[T0, str]:
|
|
49
|
+
r"""Generate test hierarchy for Python with nested subgroups."""
|
|
50
|
+
cases_ = test_group.cases
|
|
51
|
+
subgroups = test_group.subgroups
|
|
52
|
+
return hydra.lib.eithers.bind(hydra.lib.eithers.map_list((lambda tc: generate_python_test_case(group_path, tc)), cases_), (lambda test_case_lines: hydra.lib.eithers.bind(hydra.lib.eithers.map_list((lambda subgroup: (group_name := subgroup.name, header := hydra.lib.strings.cat2("# ", group_name), hydra.lib.eithers.map((lambda content: hydra.lib.strings.cat((header, "\n\n", content))), generate_python_test_group_hierarchy(hydra.lib.lists.concat2(group_path, (group_name,)), subgroup)))[2]), subgroups), (lambda subgroup_blocks: (test_cases_str := hydra.lib.strings.intercalate("\n\n", hydra.lib.lists.concat(test_case_lines)), subgroups_str := hydra.lib.strings.intercalate("\n\n", subgroup_blocks), Right(hydra.lib.strings.cat((test_cases_str, hydra.lib.logic.if_else(hydra.lib.logic.or_(hydra.lib.equality.equal(test_cases_str, ""), hydra.lib.equality.equal(subgroups_str, "")), (lambda : ""), (lambda : "\n\n")), subgroups_str))))[2]))))
|
|
53
|
+
def generate_test_file_with_python_codec(test_module: hydra.packaging.Module, test_group: hydra.testing.TestGroup) -> Either[T0, tuple[str, str]]:
|
|
54
|
+
r"""Generate a complete test file for Python."""
|
|
55
|
+
return hydra.lib.eithers.map((lambda test_body: (test_module_content := build_python_test_module(test_module, test_group, test_body), ns_ := test_module.namespace, parts := hydra.lib.strings.split_on(".", ns_.value), dir_parts := hydra.lib.maybes.from_maybe((lambda : ()), hydra.lib.lists.maybe_init(parts)), file_name := hydra.lib.strings.cat(("test_", hydra.lib.maybes.from_maybe((lambda : ""), hydra.lib.lists.maybe_last(parts)), ".py")), file_path := hydra.lib.strings.cat((hydra.lib.strings.intercalate("/", dir_parts), "/", file_name)), (file_path, test_module_content))[6]), generate_python_test_group_hierarchy((), test_group))
|
|
56
|
+
def generate_python_test_file(test_module: hydra.packaging.Module, test_group: hydra.testing.TestGroup, _g: T0) -> Either[T1, tuple[str, str]]:
|
|
57
|
+
r"""Generate a Python test file for a test group."""
|
|
58
|
+
return generate_test_file_with_python_codec(test_module, test_group)
|
hydra/python/utils.py
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# Note: this is an automatically generated file. Do not edit.
|
|
2
|
+
r"""Python utilities for constructing Python syntax trees."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
from functools import lru_cache
|
|
6
|
+
from hydra.dsl.python import Just, Maybe, Nothing, frozenlist
|
|
7
|
+
from typing import TypeVar, cast
|
|
8
|
+
import hydra.analysis
|
|
9
|
+
import hydra.core
|
|
10
|
+
import hydra.lib.equality
|
|
11
|
+
import hydra.lib.lists
|
|
12
|
+
import hydra.lib.logic
|
|
13
|
+
import hydra.lib.maps
|
|
14
|
+
import hydra.lib.maybes
|
|
15
|
+
import hydra.lib.pairs
|
|
16
|
+
import hydra.lib.strings
|
|
17
|
+
import hydra.packaging
|
|
18
|
+
import hydra.python.environment
|
|
19
|
+
import hydra.python.names
|
|
20
|
+
import hydra.python.serde
|
|
21
|
+
import hydra.python.syntax
|
|
22
|
+
import hydra.serialization
|
|
23
|
+
T0 = TypeVar("T0")
|
|
24
|
+
def py_conjunction_to_py_expression(conj: hydra.python.syntax.Conjunction) -> hydra.python.syntax.Expression:
|
|
25
|
+
r"""Convert a Conjunction to an Expression."""
|
|
26
|
+
return cast(hydra.python.syntax.Expression, hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction((conj,))))
|
|
27
|
+
def py_bitwise_or_to_py_conjunction(bor: hydra.python.syntax.BitwiseOr) -> hydra.python.syntax.Conjunction:
|
|
28
|
+
r"""Convert a BitwiseOr to a Conjunction."""
|
|
29
|
+
return hydra.python.syntax.Conjunction((cast(hydra.python.syntax.Inversion, hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(bor, ()))),))
|
|
30
|
+
def py_primary_to_py_bitwise_or(prim: hydra.python.syntax.Primary) -> hydra.python.syntax.BitwiseOr:
|
|
31
|
+
r"""Convert a Primary to a BitwiseOr."""
|
|
32
|
+
return hydra.python.syntax.BitwiseOr(Nothing(), hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, prim), Nothing())))))))))
|
|
33
|
+
def py_primary_to_py_conjunction(prim: hydra.python.syntax.Primary) -> hydra.python.syntax.Conjunction:
|
|
34
|
+
r"""Convert a Primary to a Conjunction."""
|
|
35
|
+
return py_bitwise_or_to_py_conjunction(py_primary_to_py_bitwise_or(prim))
|
|
36
|
+
def py_primary_to_py_expression(prim: hydra.python.syntax.Primary) -> hydra.python.syntax.Expression:
|
|
37
|
+
r"""Convert a Primary to an Expression."""
|
|
38
|
+
return py_conjunction_to_py_expression(py_primary_to_py_conjunction(prim))
|
|
39
|
+
def py_atom_to_py_expression(atom: hydra.python.syntax.Atom) -> hydra.python.syntax.Expression:
|
|
40
|
+
r"""Convert an Atom to an Expression."""
|
|
41
|
+
return py_primary_to_py_expression(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(atom)))
|
|
42
|
+
def string_to_py_expression(style: hydra.python.syntax.QuoteStyle, s: str) -> hydra.python.syntax.Expression:
|
|
43
|
+
r"""Create a string expression with a given quote style."""
|
|
44
|
+
return py_atom_to_py_expression(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomString(hydra.python.syntax.String(s, style))))
|
|
45
|
+
def double_quoted_string(s: str) -> hydra.python.syntax.Expression:
|
|
46
|
+
r"""Create a double-quoted string expression."""
|
|
47
|
+
return string_to_py_expression(hydra.python.syntax.QuoteStyle.DOUBLE, s)
|
|
48
|
+
def primary_with_rhs(prim: hydra.python.syntax.Primary, rhs: hydra.python.syntax.PrimaryRhs) -> hydra.python.syntax.Primary:
|
|
49
|
+
r"""Combine a Primary with a PrimaryRhs."""
|
|
50
|
+
return cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimaryCompound(hydra.python.syntax.PrimaryWithRhs(prim, rhs)))
|
|
51
|
+
def primary_with_slices(prim: hydra.python.syntax.Primary, first: hydra.python.syntax.Slice, rest: frozenlist[hydra.python.syntax.SliceOrStarredExpression]) -> hydra.python.syntax.Primary:
|
|
52
|
+
r"""Create a Primary with slices."""
|
|
53
|
+
return primary_with_rhs(prim, cast(hydra.python.syntax.PrimaryRhs, hydra.python.syntax.PrimaryRhsSlices(hydra.python.syntax.Slices(first, rest))))
|
|
54
|
+
def py_expression_to_py_slice(expr: hydra.python.syntax.Expression) -> hydra.python.syntax.Slice:
|
|
55
|
+
r"""Convert an Expression to a Slice."""
|
|
56
|
+
return cast(hydra.python.syntax.Slice, hydra.python.syntax.SliceNamed(cast(hydra.python.syntax.NamedExpression, hydra.python.syntax.NamedExpressionSimple(expr))))
|
|
57
|
+
def primary_with_expression_slices(prim: hydra.python.syntax.Primary, exprs: frozenlist[hydra.python.syntax.Expression]) -> hydra.python.syntax.Primary:
|
|
58
|
+
r"""Create a Primary with expression slices."""
|
|
59
|
+
return hydra.lib.maybes.from_maybe((lambda : prim), hydra.lib.maybes.map((lambda p: primary_with_slices(prim, py_expression_to_py_slice(hydra.lib.pairs.first(p)), hydra.lib.lists.map((lambda e: cast(hydra.python.syntax.SliceOrStarredExpression, hydra.python.syntax.SliceOrStarredExpressionSlice(py_expression_to_py_slice(e)))), hydra.lib.pairs.second(p)))), hydra.lib.lists.uncons(exprs)))
|
|
60
|
+
def py_name_to_py_primary(name: hydra.python.syntax.Name) -> hydra.python.syntax.Primary:
|
|
61
|
+
r"""Convert a Name to a Primary (simple atom)."""
|
|
62
|
+
return cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(name))))
|
|
63
|
+
def annotated_expression(mcomment: Maybe[str], expr: hydra.python.syntax.Expression) -> hydra.python.syntax.Expression:
|
|
64
|
+
r"""Annotate an expression with an optional comment using Annotated[]."""
|
|
65
|
+
return hydra.lib.maybes.maybe((lambda : expr), (lambda c: py_primary_to_py_expression(primary_with_expression_slices(py_name_to_py_primary(hydra.python.syntax.Name("Annotated")), (expr, double_quoted_string(c))))), mcomment)
|
|
66
|
+
def annotated_statement(mcomment: Maybe[str], stmt: hydra.python.syntax.Statement) -> hydra.python.syntax.Statement:
|
|
67
|
+
r"""Annotate a statement with an optional comment."""
|
|
68
|
+
return hydra.lib.maybes.maybe((lambda : stmt), (lambda c: cast(hydra.python.syntax.Statement, hydra.python.syntax.StatementAnnotated(hydra.python.syntax.AnnotatedStatement(c, stmt)))), mcomment)
|
|
69
|
+
def py_simple_statement_to_py_statement(s: hydra.python.syntax.SimpleStatement) -> hydra.python.syntax.Statement:
|
|
70
|
+
r"""Convert a SimpleStatement to a Statement."""
|
|
71
|
+
return cast(hydra.python.syntax.Statement, hydra.python.syntax.StatementSimple((s,)))
|
|
72
|
+
def py_assignment_to_py_statement(a: hydra.python.syntax.Assignment) -> hydra.python.syntax.Statement:
|
|
73
|
+
r"""Convert an Assignment to a Statement."""
|
|
74
|
+
return py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementAssignment(a)))
|
|
75
|
+
def py_name_to_py_star_target(name: hydra.python.syntax.Name) -> hydra.python.syntax.StarTarget:
|
|
76
|
+
r"""Convert a Name to a StarTarget."""
|
|
77
|
+
return cast(hydra.python.syntax.StarTarget, hydra.python.syntax.StarTargetUnstarred(cast(hydra.python.syntax.TargetWithStarAtom, hydra.python.syntax.TargetWithStarAtomAtom(cast(hydra.python.syntax.StarAtom, hydra.python.syntax.StarAtomName(name))))))
|
|
78
|
+
def assignment(name: hydra.python.syntax.Name, rhs: hydra.python.syntax.AnnotatedRhs) -> hydra.python.syntax.Statement:
|
|
79
|
+
r"""Create an assignment statement from name and annotated rhs."""
|
|
80
|
+
return py_assignment_to_py_statement(cast(hydra.python.syntax.Assignment, hydra.python.syntax.AssignmentUntyped(hydra.python.syntax.UntypedAssignment((py_name_to_py_star_target(name),), rhs, Nothing()))))
|
|
81
|
+
def py_expression_to_py_annotated_rhs(expr: hydra.python.syntax.Expression) -> hydra.python.syntax.AnnotatedRhs:
|
|
82
|
+
r"""Convert an Expression to an AnnotatedRhs."""
|
|
83
|
+
return cast(hydra.python.syntax.AnnotatedRhs, hydra.python.syntax.AnnotatedRhsStar((cast(hydra.python.syntax.StarExpression, hydra.python.syntax.StarExpressionSimple(expr)),)))
|
|
84
|
+
def assignment_statement(name: hydra.python.syntax.Name, expr: hydra.python.syntax.Expression) -> hydra.python.syntax.Statement:
|
|
85
|
+
r"""Create an assignment statement from name and expression."""
|
|
86
|
+
return assignment(name, py_expression_to_py_annotated_rhs(expr))
|
|
87
|
+
def py_expressions_to_py_args(exprs: frozenlist[hydra.python.syntax.Expression]) -> hydra.python.syntax.Args:
|
|
88
|
+
r"""Convert a list of Expressions to Args."""
|
|
89
|
+
return hydra.python.syntax.Args(hydra.lib.lists.map((lambda e: cast(hydra.python.syntax.PosArg, hydra.python.syntax.PosArgExpression(e))), exprs), (), ())
|
|
90
|
+
def function_call(func: hydra.python.syntax.Primary, args: frozenlist[hydra.python.syntax.Expression]) -> hydra.python.syntax.Expression:
|
|
91
|
+
r"""Create a function call expression."""
|
|
92
|
+
return py_primary_to_py_expression(primary_with_rhs(func, cast(hydra.python.syntax.PrimaryRhs, hydra.python.syntax.PrimaryRhsCall(py_expressions_to_py_args(args)))))
|
|
93
|
+
def cast_to(pytype: hydra.python.syntax.Expression, pyexpr: hydra.python.syntax.Expression) -> hydra.python.syntax.Expression:
|
|
94
|
+
r"""Create a cast expression: cast(type, expr)."""
|
|
95
|
+
return function_call(py_name_to_py_primary(hydra.python.syntax.Name("cast")), (pytype, pyexpr))
|
|
96
|
+
def py_expression_to_py_simple_statement(expr: hydra.python.syntax.Expression) -> hydra.python.syntax.SimpleStatement:
|
|
97
|
+
r"""Convert an Expression to a SimpleStatement (as star expressions)."""
|
|
98
|
+
return cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementStarExpressions((cast(hydra.python.syntax.StarExpression, hydra.python.syntax.StarExpressionSimple(expr)),)))
|
|
99
|
+
def py_expression_to_py_statement(expr: hydra.python.syntax.Expression) -> hydra.python.syntax.Statement:
|
|
100
|
+
r"""Convert an Expression to a Statement."""
|
|
101
|
+
return py_simple_statement_to_py_statement(py_expression_to_py_simple_statement(expr))
|
|
102
|
+
def triple_quoted_string(s: str) -> hydra.python.syntax.Expression:
|
|
103
|
+
r"""Create a triple-quoted string expression."""
|
|
104
|
+
return string_to_py_expression(hydra.python.syntax.QuoteStyle.TRIPLE, s)
|
|
105
|
+
def comment_statement(s: str) -> hydra.python.syntax.Statement:
|
|
106
|
+
r"""Create a comment statement (triple-quoted string)."""
|
|
107
|
+
return py_expression_to_py_statement(triple_quoted_string(s))
|
|
108
|
+
def decode_py_power_to_py_primary(p: hydra.python.syntax.Power) -> Maybe[hydra.python.syntax.Primary]:
|
|
109
|
+
r"""Decode a Power to a Primary if possible."""
|
|
110
|
+
lhs = p.lhs
|
|
111
|
+
await_ = lhs.await_
|
|
112
|
+
prim = lhs.primary
|
|
113
|
+
return hydra.lib.logic.if_else(await_, (lambda : Nothing()), (lambda : Just(prim)))
|
|
114
|
+
def decode_py_comparison_to_py_await_primary(c: hydra.python.syntax.Comparison):
|
|
115
|
+
r"""Decode a Comparison to a Primary if possible."""
|
|
116
|
+
rhs = c.rhs
|
|
117
|
+
lhs = c.lhs
|
|
118
|
+
or_lhs = lhs.lhs
|
|
119
|
+
or_rhs = lhs.rhs
|
|
120
|
+
xor_lhs = or_rhs.lhs
|
|
121
|
+
xor_rhs = or_rhs.rhs
|
|
122
|
+
and_lhs = xor_rhs.lhs
|
|
123
|
+
and_rhs = xor_rhs.rhs
|
|
124
|
+
shift_lhs = and_rhs.lhs
|
|
125
|
+
shift_rhs = and_rhs.rhs
|
|
126
|
+
sum_lhs = shift_rhs.lhs
|
|
127
|
+
sum_rhs = shift_rhs.rhs
|
|
128
|
+
term_lhs = sum_rhs.lhs
|
|
129
|
+
term_rhs = sum_rhs.rhs
|
|
130
|
+
def _hoist_rhs_body_1(v1):
|
|
131
|
+
match v1:
|
|
132
|
+
case hydra.python.syntax.FactorSimple(value=power):
|
|
133
|
+
return decode_py_power_to_py_primary(power)
|
|
134
|
+
case _:
|
|
135
|
+
return Nothing()
|
|
136
|
+
return hydra.lib.logic.if_else(hydra.lib.logic.not_(hydra.lib.lists.null(rhs)), (lambda : Nothing()), (lambda : hydra.lib.logic.if_else(hydra.lib.maybes.is_just(or_lhs), (lambda : Nothing()), (lambda : hydra.lib.logic.if_else(hydra.lib.maybes.is_just(xor_lhs), (lambda : Nothing()), (lambda : hydra.lib.logic.if_else(hydra.lib.maybes.is_just(and_lhs), (lambda : Nothing()), (lambda : hydra.lib.logic.if_else(hydra.lib.maybes.is_just(shift_lhs), (lambda : Nothing()), (lambda : hydra.lib.logic.if_else(hydra.lib.maybes.is_just(sum_lhs), (lambda : Nothing()), (lambda : hydra.lib.logic.if_else(hydra.lib.maybes.is_just(term_lhs), (lambda : Nothing()), (lambda : _hoist_rhs_body_1(term_rhs)))))))))))))))
|
|
137
|
+
def decode_py_inversion_to_py_primary(i: hydra.python.syntax.Inversion) -> Maybe[hydra.python.syntax.Primary]:
|
|
138
|
+
r"""Decode an Inversion to a Primary if possible."""
|
|
139
|
+
match i:
|
|
140
|
+
case hydra.python.syntax.InversionSimple(value=comparison):
|
|
141
|
+
return decode_py_comparison_to_py_await_primary(comparison)
|
|
142
|
+
case _:
|
|
143
|
+
return Nothing()
|
|
144
|
+
def decode_py_conjunction_to_py_primary(c: hydra.python.syntax.Conjunction) -> Maybe[hydra.python.syntax.Primary]:
|
|
145
|
+
r"""Decode a Conjunction to a Primary if possible."""
|
|
146
|
+
inversions = c.value
|
|
147
|
+
return hydra.lib.logic.if_else(hydra.lib.equality.equal(hydra.lib.lists.length(inversions), 1), (lambda : hydra.lib.maybes.bind(hydra.lib.lists.maybe_head(inversions), (lambda i: decode_py_inversion_to_py_primary(i)))), (lambda : Nothing()))
|
|
148
|
+
def decode_py_expression_to_py_primary(e: hydra.python.syntax.Expression) -> Maybe[hydra.python.syntax.Primary]:
|
|
149
|
+
r"""Decode an Expression to a Primary if possible."""
|
|
150
|
+
match e:
|
|
151
|
+
case hydra.python.syntax.ExpressionSimple(value=disj):
|
|
152
|
+
conjunctions = disj.value
|
|
153
|
+
return hydra.lib.logic.if_else(hydra.lib.equality.equal(hydra.lib.lists.length(conjunctions), 1), (lambda : hydra.lib.maybes.bind(hydra.lib.lists.maybe_head(conjunctions), (lambda c2: decode_py_conjunction_to_py_primary(c2)))), (lambda : Nothing()))
|
|
154
|
+
case _:
|
|
155
|
+
return Nothing()
|
|
156
|
+
def dotted_assignment_statement(obj: hydra.python.syntax.Name, attr: hydra.python.syntax.Name, expr: hydra.python.syntax.Expression) -> hydra.python.syntax.Statement:
|
|
157
|
+
r"""Create a dotted assignment statement: obj.attr = expr."""
|
|
158
|
+
@lru_cache(1)
|
|
159
|
+
def target() -> hydra.python.syntax.StarTarget:
|
|
160
|
+
return cast(hydra.python.syntax.StarTarget, hydra.python.syntax.StarTargetUnstarred(cast(hydra.python.syntax.TargetWithStarAtom, hydra.python.syntax.TargetWithStarAtomProject(hydra.python.syntax.TPrimaryAndName(cast(hydra.python.syntax.TPrimary, hydra.python.syntax.TPrimaryAtom(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(obj)))), attr)))))
|
|
161
|
+
return py_assignment_to_py_statement(cast(hydra.python.syntax.Assignment, hydra.python.syntax.AssignmentUntyped(hydra.python.syntax.UntypedAssignment((target(),), py_expression_to_py_annotated_rhs(expr), Nothing()))))
|
|
162
|
+
def find_namespaces(focus_ns: hydra.packaging.Namespace, defs: frozenlist[hydra.packaging.Definition]) -> hydra.packaging.Namespaces[hydra.python.syntax.DottedName]:
|
|
163
|
+
r"""Find all namespaces referenced by a list of definitions, plus the core namespace."""
|
|
164
|
+
core_ns = hydra.packaging.Namespace("hydra.core")
|
|
165
|
+
@lru_cache(1)
|
|
166
|
+
def namespaces() -> hydra.packaging.Namespaces[hydra.python.syntax.DottedName]:
|
|
167
|
+
return hydra.analysis.namespaces_for_definitions((lambda x1: hydra.python.names.encode_namespace(x1)), focus_ns, defs)
|
|
168
|
+
return hydra.lib.logic.if_else(hydra.lib.equality.equal(hydra.lib.pairs.first(namespaces().focus).value, core_ns.value), (lambda : namespaces()), (lambda : hydra.packaging.Namespaces(namespaces().focus, hydra.lib.maps.insert(core_ns, hydra.python.names.encode_namespace(core_ns), namespaces().mapping))))
|
|
169
|
+
@lru_cache(1)
|
|
170
|
+
def get_item_params() -> hydra.python.syntax.Parameters:
|
|
171
|
+
return cast(hydra.python.syntax.Parameters, hydra.python.syntax.ParametersParamNoDefault(hydra.python.syntax.ParamNoDefaultParameters((hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("cls"), Nothing()), Nothing()), hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("item"), Nothing()), Nothing())), (), Nothing())))
|
|
172
|
+
def indented_block(mcomment: Maybe[str], stmts: frozenlist[frozenlist[hydra.python.syntax.Statement]]) -> hydra.python.syntax.Block:
|
|
173
|
+
r"""Create an indented block with optional comment."""
|
|
174
|
+
@lru_cache(1)
|
|
175
|
+
def comment_group() -> frozenlist[hydra.python.syntax.Statement]:
|
|
176
|
+
return hydra.lib.maybes.maybe((lambda : ()), (lambda s: (comment_statement(s),)), mcomment)
|
|
177
|
+
@lru_cache(1)
|
|
178
|
+
def groups() -> frozenlist[frozenlist[hydra.python.syntax.Statement]]:
|
|
179
|
+
return hydra.lib.lists.filter((lambda g: hydra.lib.logic.not_(hydra.lib.lists.null(g))), hydra.lib.lists.cons(comment_group(), stmts))
|
|
180
|
+
return hydra.lib.logic.if_else(hydra.lib.lists.null(groups()), (lambda : cast(hydra.python.syntax.Block, hydra.python.syntax.BlockIndented(((cast(hydra.python.syntax.Statement, hydra.python.syntax.StatementSimple((py_expression_to_py_simple_statement(py_atom_to_py_expression(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomEllipsis()))),))),),)))), (lambda : cast(hydra.python.syntax.Block, hydra.python.syntax.BlockIndented(groups()))))
|
|
181
|
+
def primary_and_params(prim: hydra.python.syntax.Primary, params: frozenlist[hydra.python.syntax.Expression]) -> hydra.python.syntax.Expression:
|
|
182
|
+
r"""Create a primary with parameters (subscript)."""
|
|
183
|
+
return py_primary_to_py_expression(primary_with_expression_slices(prim, params))
|
|
184
|
+
def name_and_params(py_name: hydra.python.syntax.Name, params: frozenlist[hydra.python.syntax.Expression]) -> hydra.python.syntax.Expression:
|
|
185
|
+
r"""Create a name with parameters."""
|
|
186
|
+
return primary_and_params(py_name_to_py_primary(py_name), params)
|
|
187
|
+
def newtype_statement(name: hydra.python.syntax.Name, mcomment: Maybe[str], expr: hydra.python.syntax.Expression) -> hydra.python.syntax.Statement:
|
|
188
|
+
r"""Create a NewType statement."""
|
|
189
|
+
return annotated_statement(mcomment, assignment_statement(name, function_call(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("NewType"))))), (double_quoted_string(name.value), expr))))
|
|
190
|
+
def py_bitwise_or_to_py_expression(bor: hydra.python.syntax.BitwiseOr) -> hydra.python.syntax.Expression:
|
|
191
|
+
r"""Convert a BitwiseOr to an Expression."""
|
|
192
|
+
return py_conjunction_to_py_expression(py_bitwise_or_to_py_conjunction(bor))
|
|
193
|
+
def py_primary_to_py_bitwise_xor(prim: hydra.python.syntax.Primary) -> hydra.python.syntax.BitwiseXor:
|
|
194
|
+
r"""Convert a Primary to a BitwiseXor."""
|
|
195
|
+
return hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, prim), Nothing()))))))))
|
|
196
|
+
def or_expression(prims: frozenlist[hydra.python.syntax.Primary]) -> hydra.python.syntax.Expression:
|
|
197
|
+
r"""Build an or-expression from multiple primaries."""
|
|
198
|
+
def build(prev: Maybe[hydra.python.syntax.BitwiseOr], ps: frozenlist[hydra.python.syntax.Primary]) -> hydra.python.syntax.BitwiseOr:
|
|
199
|
+
return hydra.lib.maybes.maybe((lambda : hydra.python.syntax.BitwiseOr(prev, py_primary_to_py_bitwise_xor(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomEllipsis())))))), (lambda p: hydra.lib.logic.if_else(hydra.lib.lists.null(hydra.lib.pairs.second(p)), (lambda : hydra.python.syntax.BitwiseOr(prev, py_primary_to_py_bitwise_xor(hydra.lib.pairs.first(p)))), (lambda : build(Just(hydra.python.syntax.BitwiseOr(prev, py_primary_to_py_bitwise_xor(hydra.lib.pairs.first(p)))), hydra.lib.pairs.second(p))))), hydra.lib.lists.uncons(ps))
|
|
200
|
+
return py_bitwise_or_to_py_expression(build(Nothing(), prims))
|
|
201
|
+
def project_from_expression(exp: hydra.python.syntax.Expression, name: hydra.python.syntax.Name) -> hydra.python.syntax.Expression:
|
|
202
|
+
r"""Project a field from an expression."""
|
|
203
|
+
@lru_cache(1)
|
|
204
|
+
def prim() -> hydra.python.syntax.Primary:
|
|
205
|
+
return cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomGroup(cast(hydra.python.syntax.Group, hydra.python.syntax.GroupExpression(cast(hydra.python.syntax.NamedExpression, hydra.python.syntax.NamedExpressionSimple(exp))))))))
|
|
206
|
+
return py_primary_to_py_expression(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimaryCompound(hydra.python.syntax.PrimaryWithRhs(prim(), cast(hydra.python.syntax.PrimaryRhs, hydra.python.syntax.PrimaryRhsProject(name))))))
|
|
207
|
+
def py_class_definition_to_py_statement(cd: hydra.python.syntax.ClassDefinition) -> hydra.python.syntax.Statement:
|
|
208
|
+
r"""Convert a ClassDefinition to a Statement."""
|
|
209
|
+
return cast(hydra.python.syntax.Statement, hydra.python.syntax.StatementCompound(cast(hydra.python.syntax.CompoundStatement, hydra.python.syntax.CompoundStatementClassDef(cd))))
|
|
210
|
+
def py_closed_pattern_to_py_patterns(p: hydra.python.syntax.ClosedPattern) -> hydra.python.syntax.Patterns:
|
|
211
|
+
r"""Convert a ClosedPattern to Patterns."""
|
|
212
|
+
return cast(hydra.python.syntax.Patterns, hydra.python.syntax.PatternsPattern(cast(hydra.python.syntax.Pattern, hydra.python.syntax.PatternOr(hydra.python.syntax.OrPattern((p,))))))
|
|
213
|
+
def py_expression_to_bitwise_or(e: hydra.python.syntax.Expression) -> hydra.python.syntax.BitwiseOr:
|
|
214
|
+
r"""Convert an Expression to a BitwiseOr, wrapping in parens if needed."""
|
|
215
|
+
return hydra.python.syntax.BitwiseOr(Nothing(), hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomGroup(cast(hydra.python.syntax.Group, hydra.python.syntax.GroupExpression(cast(hydra.python.syntax.NamedExpression, hydra.python.syntax.NamedExpressionSimple(e))))))))), Nothing())))))))))
|
|
216
|
+
def py_expression_to_disjunction(e: hydra.python.syntax.Expression) -> hydra.python.syntax.Disjunction:
|
|
217
|
+
r"""Convert an Expression to a Disjunction, wrapping in parens if needed."""
|
|
218
|
+
match e:
|
|
219
|
+
case hydra.python.syntax.ExpressionSimple(value=disj):
|
|
220
|
+
return disj
|
|
221
|
+
case _:
|
|
222
|
+
return hydra.python.syntax.Disjunction((py_primary_to_py_conjunction(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomGroup(cast(hydra.python.syntax.Group, hydra.python.syntax.GroupExpression(cast(hydra.python.syntax.NamedExpression, hydra.python.syntax.NamedExpressionSimple(e))))))))),))
|
|
223
|
+
def py_expression_to_py_primary(e: hydra.python.syntax.Expression) -> hydra.python.syntax.Primary:
|
|
224
|
+
r"""Extracts the primary from an expression, or wraps it in parentheses if the expression does not contain a primary."""
|
|
225
|
+
return hydra.lib.maybes.maybe((lambda : cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomGroup(cast(hydra.python.syntax.Group, hydra.python.syntax.GroupExpression(cast(hydra.python.syntax.NamedExpression, hydra.python.syntax.NamedExpressionSimple(e))))))))), (lambda prim: prim), decode_py_expression_to_py_primary(e))
|
|
226
|
+
def py_expression_to_py_star_named_expression(expr: hydra.python.syntax.Expression) -> hydra.python.syntax.StarNamedExpression:
|
|
227
|
+
r"""Convert an Expression to a StarNamedExpression."""
|
|
228
|
+
return cast(hydra.python.syntax.StarNamedExpression, hydra.python.syntax.StarNamedExpressionSimple(cast(hydra.python.syntax.NamedExpression, hydra.python.syntax.NamedExpressionSimple(expr))))
|
|
229
|
+
def py_list(exprs: frozenlist[hydra.python.syntax.Expression]) -> hydra.python.syntax.List:
|
|
230
|
+
r"""Create a Python list from expressions."""
|
|
231
|
+
return hydra.python.syntax.List(hydra.lib.lists.map((lambda x1: py_expression_to_py_star_named_expression(x1)), exprs))
|
|
232
|
+
def py_name_to_py_expression(name: hydra.python.syntax.Name) -> hydra.python.syntax.Expression:
|
|
233
|
+
r"""Convert a Name to an Expression."""
|
|
234
|
+
return py_primary_to_py_expression(py_name_to_py_primary(name))
|
|
235
|
+
def py_name_to_py_named_expression(name: hydra.python.syntax.Name) -> hydra.python.syntax.NamedExpression:
|
|
236
|
+
r"""Convert a Name to a NamedExpression."""
|
|
237
|
+
return cast(hydra.python.syntax.NamedExpression, hydra.python.syntax.NamedExpressionSimple(py_name_to_py_expression(name)))
|
|
238
|
+
def py_name_to_py_type_parameter(name: hydra.python.syntax.Name) -> hydra.python.syntax.TypeParameter:
|
|
239
|
+
r"""Convert a Name to a TypeParameter."""
|
|
240
|
+
return cast(hydra.python.syntax.TypeParameter, hydra.python.syntax.TypeParameterSimple(hydra.python.syntax.SimpleTypeParameter(name, Nothing(), Nothing())))
|
|
241
|
+
# The Python None value as a Name.
|
|
242
|
+
py_none = hydra.python.syntax.Name("None")
|
|
243
|
+
def py_primary_to_py_slice(prim: hydra.python.syntax.Primary) -> hydra.python.syntax.Slice:
|
|
244
|
+
r"""Convert a Primary to a Slice."""
|
|
245
|
+
return py_expression_to_py_slice(py_primary_to_py_expression(prim))
|
|
246
|
+
def raise_assertion_error(msg: str) -> hydra.python.syntax.Statement:
|
|
247
|
+
r"""Create a raise AssertionError statement."""
|
|
248
|
+
return py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementRaise(hydra.python.syntax.RaiseStatement(Just(hydra.python.syntax.RaiseExpression(function_call(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("AssertionError"))))), (double_quoted_string(msg),)), Nothing()))))))
|
|
249
|
+
def raise_type_error(msg: str) -> hydra.python.syntax.Statement:
|
|
250
|
+
r"""Create a raise TypeError statement."""
|
|
251
|
+
return py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementRaise(hydra.python.syntax.RaiseStatement(Just(hydra.python.syntax.RaiseExpression(function_call(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("TypeError"))))), (double_quoted_string(msg),)), Nothing()))))))
|
|
252
|
+
def return_single(expr: hydra.python.syntax.Expression) -> hydra.python.syntax.Statement:
|
|
253
|
+
r"""Create a return statement with a single expression."""
|
|
254
|
+
return py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementReturn(hydra.python.syntax.ReturnStatement((cast(hydra.python.syntax.StarExpression, hydra.python.syntax.StarExpressionSimple(expr)),)))))
|
|
255
|
+
@lru_cache(1)
|
|
256
|
+
def self_only_params() -> hydra.python.syntax.Parameters:
|
|
257
|
+
return cast(hydra.python.syntax.Parameters, hydra.python.syntax.ParametersParamNoDefault(hydra.python.syntax.ParamNoDefaultParameters((hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("self"), Nothing()), Nothing()),), (), Nothing())))
|
|
258
|
+
@lru_cache(1)
|
|
259
|
+
def self_other_params() -> hydra.python.syntax.Parameters:
|
|
260
|
+
return cast(hydra.python.syntax.Parameters, hydra.python.syntax.ParametersParamNoDefault(hydra.python.syntax.ParamNoDefaultParameters((hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("self"), Nothing()), Nothing()), hydra.python.syntax.ParamNoDefault(hydra.python.syntax.Param(hydra.python.syntax.Name("other"), Nothing()), Nothing())), (), Nothing())))
|
|
261
|
+
def single_quoted_string(s: str) -> hydra.python.syntax.Expression:
|
|
262
|
+
r"""Create a single-quoted string expression."""
|
|
263
|
+
return string_to_py_expression(hydra.python.syntax.QuoteStyle.SINGLE, s)
|
|
264
|
+
# Current target Python version for code generation.
|
|
265
|
+
target_python_version = hydra.python.environment.PythonVersion.PYTHON310
|
|
266
|
+
def type_alias_statement(name: hydra.python.syntax.Name, tparams: frozenlist[hydra.python.syntax.TypeParameter], mcomment: Maybe[str], tyexpr: hydra.python.syntax.Expression) -> hydra.python.syntax.Statement:
|
|
267
|
+
r"""Generate a type alias statement using PEP 695 syntax (Python 3.12+)."""
|
|
268
|
+
return annotated_statement(mcomment, py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementTypeAlias(hydra.python.syntax.TypeAlias(name, tparams, tyexpr)))))
|
|
269
|
+
def type_alias_statement310(name: hydra.python.syntax.Name, _tparams: T0, mcomment: Maybe[str], tyexpr: hydra.python.syntax.Expression) -> hydra.python.syntax.Statement:
|
|
270
|
+
r"""Generate a type alias statement using Python 3.10-compatible syntax: Name: TypeAlias = "TypeExpression"."""
|
|
271
|
+
@lru_cache(1)
|
|
272
|
+
def quoted_expr() -> hydra.python.syntax.Expression:
|
|
273
|
+
return double_quoted_string(hydra.serialization.print_expr(hydra.python.serde.encode_expression(tyexpr)))
|
|
274
|
+
return annotated_statement(mcomment, py_assignment_to_py_statement(cast(hydra.python.syntax.Assignment, hydra.python.syntax.AssignmentTyped(hydra.python.syntax.TypedAssignment(cast(hydra.python.syntax.SingleTarget, hydra.python.syntax.SingleTargetName(name)), cast(hydra.python.syntax.Expression, hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction((hydra.python.syntax.Conjunction((cast(hydra.python.syntax.Inversion, hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(Nothing(), hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("TypeAlias")))))), Nothing()))))))))), ()))),)),)))), Just(py_expression_to_py_annotated_rhs(quoted_expr())))))))
|
|
275
|
+
def union_type_class_statements310(name: hydra.python.syntax.Name, mcomment: Maybe[str], tyexpr: hydra.python.syntax.Expression, extra_stmts: frozenlist[hydra.python.syntax.Statement]) -> frozenlist[hydra.python.syntax.Statement]:
|
|
276
|
+
r"""Generate a subscriptable union class for Python 3.10."""
|
|
277
|
+
name_str = name.value
|
|
278
|
+
@lru_cache(1)
|
|
279
|
+
def meta_name() -> hydra.python.syntax.Name:
|
|
280
|
+
return hydra.python.syntax.Name(hydra.lib.strings.cat2(hydra.lib.strings.cat2("_", name_str), "Meta"))
|
|
281
|
+
@lru_cache(1)
|
|
282
|
+
def doc_string() -> str:
|
|
283
|
+
return hydra.serialization.print_expr(hydra.python.serde.encode_expression(tyexpr))
|
|
284
|
+
@lru_cache(1)
|
|
285
|
+
def return_object() -> hydra.python.syntax.Statement:
|
|
286
|
+
return py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementReturn(hydra.python.syntax.ReturnStatement((cast(hydra.python.syntax.StarExpression, hydra.python.syntax.StarExpressionSimple(cast(hydra.python.syntax.Expression, hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction((hydra.python.syntax.Conjunction((cast(hydra.python.syntax.Inversion, hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(Nothing(), hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("object")))))), Nothing()))))))))), ()))),)),)))))),)))))
|
|
287
|
+
@lru_cache(1)
|
|
288
|
+
def get_item_method() -> hydra.python.syntax.Statement:
|
|
289
|
+
return cast(hydra.python.syntax.Statement, hydra.python.syntax.StatementCompound(cast(hydra.python.syntax.CompoundStatement, hydra.python.syntax.CompoundStatementFunction(hydra.python.syntax.FunctionDefinition(Nothing(), hydra.python.syntax.FunctionDefRaw(False, hydra.python.syntax.Name("__getitem__"), (), Just(get_item_params()), Nothing(), Nothing(), indented_block(Nothing(), ((return_object(),),))))))))
|
|
290
|
+
@lru_cache(1)
|
|
291
|
+
def meta_class() -> hydra.python.syntax.Statement:
|
|
292
|
+
return py_class_definition_to_py_statement(hydra.python.syntax.ClassDefinition(Nothing(), meta_name(), (), Just(py_expressions_to_py_args((cast(hydra.python.syntax.Expression, hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction((hydra.python.syntax.Conjunction((cast(hydra.python.syntax.Inversion, hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(Nothing(), hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("type")))))), Nothing()))))))))), ()))),)),)))),))), indented_block(Nothing(), ((get_item_method(),),))))
|
|
293
|
+
@lru_cache(1)
|
|
294
|
+
def doc_stmt() -> hydra.python.syntax.Statement:
|
|
295
|
+
return py_expression_to_py_statement(triple_quoted_string(doc_string()))
|
|
296
|
+
@lru_cache(1)
|
|
297
|
+
def body_groups() -> frozenlist[frozenlist[hydra.python.syntax.Statement]]:
|
|
298
|
+
return hydra.lib.logic.if_else(hydra.lib.lists.null(extra_stmts), (lambda : (pass_stmt := py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementPass())), ((doc_stmt(),), (pass_stmt,)))[1]), (lambda : ((doc_stmt(),), extra_stmts)))
|
|
299
|
+
@lru_cache(1)
|
|
300
|
+
def metaclass_arg() -> hydra.python.syntax.Kwarg:
|
|
301
|
+
return hydra.python.syntax.Kwarg(hydra.python.syntax.Name("metaclass"), cast(hydra.python.syntax.Expression, hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction((hydra.python.syntax.Conjunction((cast(hydra.python.syntax.Inversion, hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(Nothing(), hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(meta_name()))))), Nothing()))))))))), ()))),)),)))))
|
|
302
|
+
@lru_cache(1)
|
|
303
|
+
def union_class() -> hydra.python.syntax.Statement:
|
|
304
|
+
return annotated_statement(mcomment, py_class_definition_to_py_statement(hydra.python.syntax.ClassDefinition(Nothing(), name, (), Just(hydra.python.syntax.Args((), (cast(hydra.python.syntax.KwargOrStarred, hydra.python.syntax.KwargOrStarredKwarg(metaclass_arg())),), ())), indented_block(Nothing(), body_groups()))))
|
|
305
|
+
return (meta_class(), union_class())
|
|
306
|
+
def unit_variant_methods(class_name: hydra.python.syntax.Name) -> frozenlist[hydra.python.syntax.Statement]:
|
|
307
|
+
r"""Generate __slots__, __eq__, and __hash__ methods for unit-typed union variants."""
|
|
308
|
+
class_name_str = class_name.value
|
|
309
|
+
@lru_cache(1)
|
|
310
|
+
def slots_stmt() -> hydra.python.syntax.Statement:
|
|
311
|
+
return assignment_statement(hydra.python.syntax.Name("__slots__"), py_primary_to_py_expression(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomTuple(hydra.python.syntax.Tuple(())))))))
|
|
312
|
+
@lru_cache(1)
|
|
313
|
+
def return_isinstance() -> hydra.python.syntax.Statement:
|
|
314
|
+
return py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementReturn(hydra.python.syntax.ReturnStatement((cast(hydra.python.syntax.StarExpression, hydra.python.syntax.StarExpressionSimple(function_call(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("isinstance"))))), (cast(hydra.python.syntax.Expression, hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction((hydra.python.syntax.Conjunction((cast(hydra.python.syntax.Inversion, hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(Nothing(), hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("other")))))), Nothing()))))))))), ()))),)),)))), cast(hydra.python.syntax.Expression, hydra.python.syntax.ExpressionSimple(hydra.python.syntax.Disjunction((hydra.python.syntax.Conjunction((cast(hydra.python.syntax.Inversion, hydra.python.syntax.InversionSimple(hydra.python.syntax.Comparison(hydra.python.syntax.BitwiseOr(Nothing(), hydra.python.syntax.BitwiseXor(Nothing(), hydra.python.syntax.BitwiseAnd(Nothing(), hydra.python.syntax.ShiftExpression(Nothing(), hydra.python.syntax.Sum(Nothing(), hydra.python.syntax.Term(Nothing(), cast(hydra.python.syntax.Factor, hydra.python.syntax.FactorSimple(hydra.python.syntax.Power(hydra.python.syntax.AwaitPrimary(False, cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(class_name))))), Nothing()))))))))), ()))),)),)))))))),)))))
|
|
315
|
+
@lru_cache(1)
|
|
316
|
+
def eq_method() -> hydra.python.syntax.Statement:
|
|
317
|
+
return cast(hydra.python.syntax.Statement, hydra.python.syntax.StatementCompound(cast(hydra.python.syntax.CompoundStatement, hydra.python.syntax.CompoundStatementFunction(hydra.python.syntax.FunctionDefinition(Nothing(), hydra.python.syntax.FunctionDefRaw(False, hydra.python.syntax.Name("__eq__"), (), Just(self_other_params()), Nothing(), Nothing(), indented_block(Nothing(), ((return_isinstance(),),))))))))
|
|
318
|
+
@lru_cache(1)
|
|
319
|
+
def return_hash() -> hydra.python.syntax.Statement:
|
|
320
|
+
return py_simple_statement_to_py_statement(cast(hydra.python.syntax.SimpleStatement, hydra.python.syntax.SimpleStatementReturn(hydra.python.syntax.ReturnStatement((cast(hydra.python.syntax.StarExpression, hydra.python.syntax.StarExpressionSimple(function_call(cast(hydra.python.syntax.Primary, hydra.python.syntax.PrimarySimple(cast(hydra.python.syntax.Atom, hydra.python.syntax.AtomName(hydra.python.syntax.Name("hash"))))), (double_quoted_string(class_name_str),)))),)))))
|
|
321
|
+
@lru_cache(1)
|
|
322
|
+
def hash_method() -> hydra.python.syntax.Statement:
|
|
323
|
+
return cast(hydra.python.syntax.Statement, hydra.python.syntax.StatementCompound(cast(hydra.python.syntax.CompoundStatement, hydra.python.syntax.CompoundStatementFunction(hydra.python.syntax.FunctionDefinition(Nothing(), hydra.python.syntax.FunctionDefRaw(False, hydra.python.syntax.Name("__hash__"), (), Just(self_only_params()), Nothing(), Nothing(), indented_block(Nothing(), ((return_hash(),),))))))))
|
|
324
|
+
return (slots_stmt(), eq_method(), hash_method())
|