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
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Note: this is an automatically generated file. Do not edit.
|
|
2
|
+
r"""Environment types for Python code generation."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from enum import Enum
|
|
6
|
+
from functools import lru_cache
|
|
7
|
+
from hydra.dsl.python import FrozenDict, frozenlist
|
|
8
|
+
from typing import Annotated, TypeAlias, cast
|
|
9
|
+
import hydra.core
|
|
10
|
+
import hydra.graph
|
|
11
|
+
import hydra.packaging
|
|
12
|
+
import hydra.python.syntax
|
|
13
|
+
class PythonVersion(Enum):
|
|
14
|
+
r"""Target Python version for code generation."""
|
|
15
|
+
PYTHON310 = hydra.core.Name("python310")
|
|
16
|
+
PYTHON312 = hydra.core.Name("python312")
|
|
17
|
+
PythonVersion.TYPE_ = hydra.core.Name("hydra.python.environment.PythonVersion")
|
|
18
|
+
@dataclass(frozen=True)
|
|
19
|
+
class PythonEnvironment:
|
|
20
|
+
r"""Environment for Python code generation."""
|
|
21
|
+
namespaces: Annotated[hydra.packaging.Namespaces[hydra.python.syntax.DottedName], "Namespace mapping for imports"]
|
|
22
|
+
bound_type_variables: Annotated[tuple[frozenlist[hydra.core.Name], FrozenDict[hydra.core.Name, hydra.python.syntax.Name]], "Type variables in scope, with their Python names"]
|
|
23
|
+
graph: Annotated[hydra.graph.Graph, "Graph context for type inference"]
|
|
24
|
+
nullary_bindings: Annotated[frozenset[hydra.core.Name], "Set of nullary bindings (need call syntax)"]
|
|
25
|
+
version: Annotated[PythonVersion, "Target Python version"]
|
|
26
|
+
skip_casts: Annotated[bool, "When True, skip generating cast() calls for reduced memory usage"]
|
|
27
|
+
inline_variables: Annotated[frozenset[hydra.core.Name], "Variables that are inline let bindings (walrus operators)"]
|
|
28
|
+
TYPE_ = hydra.core.Name("hydra.python.environment.PythonEnvironment")
|
|
29
|
+
NAMESPACES = hydra.core.Name("namespaces")
|
|
30
|
+
BOUND_TYPE_VARIABLES = hydra.core.Name("boundTypeVariables")
|
|
31
|
+
GRAPH = hydra.core.Name("graph")
|
|
32
|
+
NULLARY_BINDINGS = hydra.core.Name("nullaryBindings")
|
|
33
|
+
VERSION = hydra.core.Name("version")
|
|
34
|
+
SKIP_CASTS = hydra.core.Name("skipCasts")
|
|
35
|
+
INLINE_VARIABLES = hydra.core.Name("inlineVariables")
|
|
36
|
+
@dataclass(frozen=True)
|
|
37
|
+
class PythonModuleMetadata:
|
|
38
|
+
r"""Temporary metadata used to create the header section of a Python file."""
|
|
39
|
+
namespaces: Annotated[hydra.packaging.Namespaces[hydra.python.syntax.DottedName], "Namespace mapping for imports"]
|
|
40
|
+
type_variables: Annotated[frozenset[hydra.core.Name], "Type variables used in the module"]
|
|
41
|
+
uses_annotated: bool
|
|
42
|
+
uses_callable: bool
|
|
43
|
+
uses_cast: bool
|
|
44
|
+
uses_lru_cache: bool
|
|
45
|
+
uses_type_alias: bool
|
|
46
|
+
uses_dataclass: bool
|
|
47
|
+
uses_decimal: bool
|
|
48
|
+
uses_either: bool
|
|
49
|
+
uses_enum: bool
|
|
50
|
+
uses_frozen_dict: bool
|
|
51
|
+
uses_frozen_list: bool
|
|
52
|
+
uses_generic: bool
|
|
53
|
+
uses_just: bool
|
|
54
|
+
uses_left: bool
|
|
55
|
+
uses_maybe: bool
|
|
56
|
+
uses_name: bool
|
|
57
|
+
uses_node: bool
|
|
58
|
+
uses_nothing: bool
|
|
59
|
+
uses_right: bool
|
|
60
|
+
uses_type_var: bool
|
|
61
|
+
TYPE_ = hydra.core.Name("hydra.python.environment.PythonModuleMetadata")
|
|
62
|
+
NAMESPACES = hydra.core.Name("namespaces")
|
|
63
|
+
TYPE_VARIABLES = hydra.core.Name("typeVariables")
|
|
64
|
+
USES_ANNOTATED = hydra.core.Name("usesAnnotated")
|
|
65
|
+
USES_CALLABLE = hydra.core.Name("usesCallable")
|
|
66
|
+
USES_CAST = hydra.core.Name("usesCast")
|
|
67
|
+
USES_LRU_CACHE = hydra.core.Name("usesLruCache")
|
|
68
|
+
USES_TYPE_ALIAS = hydra.core.Name("usesTypeAlias")
|
|
69
|
+
USES_DATACLASS = hydra.core.Name("usesDataclass")
|
|
70
|
+
USES_DECIMAL = hydra.core.Name("usesDecimal")
|
|
71
|
+
USES_EITHER = hydra.core.Name("usesEither")
|
|
72
|
+
USES_ENUM = hydra.core.Name("usesEnum")
|
|
73
|
+
USES_FROZEN_DICT = hydra.core.Name("usesFrozenDict")
|
|
74
|
+
USES_FROZEN_LIST = hydra.core.Name("usesFrozenList")
|
|
75
|
+
USES_GENERIC = hydra.core.Name("usesGeneric")
|
|
76
|
+
USES_JUST = hydra.core.Name("usesJust")
|
|
77
|
+
USES_LEFT = hydra.core.Name("usesLeft")
|
|
78
|
+
USES_MAYBE = hydra.core.Name("usesMaybe")
|
|
79
|
+
USES_NAME = hydra.core.Name("usesName")
|
|
80
|
+
USES_NODE = hydra.core.Name("usesNode")
|
|
81
|
+
USES_NOTHING = hydra.core.Name("usesNothing")
|
|
82
|
+
USES_RIGHT = hydra.core.Name("usesRight")
|
|
83
|
+
USES_TYPE_VAR = hydra.core.Name("usesTypeVar")
|
|
84
|
+
@dataclass(frozen=True)
|
|
85
|
+
class PyGraph:
|
|
86
|
+
r"""Combined graph and metadata state for Python code generation."""
|
|
87
|
+
graph: Annotated[hydra.graph.Graph, "The Hydra graph being processed"]
|
|
88
|
+
metadata: Annotated[PythonModuleMetadata, "Accumulated module metadata"]
|
|
89
|
+
TYPE_ = hydra.core.Name("hydra.python.environment.PyGraph")
|
|
90
|
+
GRAPH = hydra.core.Name("graph")
|
|
91
|
+
METADATA = hydra.core.Name("metadata")
|
hydra/python/language.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Note: this is an automatically generated file. Do not edit.
|
|
2
|
+
r"""Language constraints and reserved words for Python 3."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from functools import lru_cache
|
|
5
|
+
from typing import TypeVar, cast
|
|
6
|
+
import hydra.coders
|
|
7
|
+
import hydra.core
|
|
8
|
+
import hydra.lib.lists
|
|
9
|
+
import hydra.lib.sets
|
|
10
|
+
import hydra.variants
|
|
11
|
+
T0 = TypeVar("T0")
|
|
12
|
+
@lru_cache(1)
|
|
13
|
+
def python_language() -> hydra.coders.Language:
|
|
14
|
+
r"""Language constraints for Python 3."""
|
|
15
|
+
@lru_cache(1)
|
|
16
|
+
def elimination_variants() -> frozenset[hydra.variants.EliminationVariant]:
|
|
17
|
+
return hydra.lib.sets.from_list((hydra.variants.EliminationVariant.RECORD, hydra.variants.EliminationVariant.UNION, hydra.variants.EliminationVariant.WRAP))
|
|
18
|
+
@lru_cache(1)
|
|
19
|
+
def literal_variants() -> frozenset[hydra.variants.LiteralVariant]:
|
|
20
|
+
return hydra.lib.sets.from_list((hydra.variants.LiteralVariant.BINARY, hydra.variants.LiteralVariant.BOOLEAN, hydra.variants.LiteralVariant.DECIMAL, hydra.variants.LiteralVariant.FLOAT, hydra.variants.LiteralVariant.INTEGER, hydra.variants.LiteralVariant.STRING))
|
|
21
|
+
@lru_cache(1)
|
|
22
|
+
def float_types() -> frozenset[hydra.core.FloatType]:
|
|
23
|
+
return hydra.lib.sets.from_list((hydra.core.FloatType.BIGFLOAT, hydra.core.FloatType.FLOAT64))
|
|
24
|
+
@lru_cache(1)
|
|
25
|
+
def function_variants() -> frozenset[hydra.variants.FunctionVariant]:
|
|
26
|
+
return hydra.lib.sets.from_list((hydra.variants.FunctionVariant.ELIMINATION, hydra.variants.FunctionVariant.LAMBDA))
|
|
27
|
+
@lru_cache(1)
|
|
28
|
+
def integer_types() -> frozenset[hydra.core.IntegerType]:
|
|
29
|
+
return hydra.lib.sets.from_list((hydra.core.IntegerType.BIGINT,))
|
|
30
|
+
@lru_cache(1)
|
|
31
|
+
def term_variants() -> frozenset[hydra.variants.TermVariant]:
|
|
32
|
+
return hydra.lib.sets.from_list((hydra.variants.TermVariant.ANNOTATED, hydra.variants.TermVariant.APPLICATION, hydra.variants.TermVariant.EITHER, hydra.variants.TermVariant.CASES, hydra.variants.TermVariant.LAMBDA, hydra.variants.TermVariant.PROJECT, hydra.variants.TermVariant.UNWRAP, hydra.variants.TermVariant.LET, hydra.variants.TermVariant.LIST, hydra.variants.TermVariant.LITERAL, hydra.variants.TermVariant.MAP, hydra.variants.TermVariant.MAYBE, hydra.variants.TermVariant.PAIR, hydra.variants.TermVariant.RECORD, hydra.variants.TermVariant.SET, hydra.variants.TermVariant.TYPE_APPLICATION, hydra.variants.TermVariant.TYPE_LAMBDA, hydra.variants.TermVariant.INJECT, hydra.variants.TermVariant.UNIT, hydra.variants.TermVariant.VARIABLE, hydra.variants.TermVariant.WRAP))
|
|
33
|
+
@lru_cache(1)
|
|
34
|
+
def type_variants() -> frozenset[hydra.variants.TypeVariant]:
|
|
35
|
+
return hydra.lib.sets.from_list((hydra.variants.TypeVariant.ANNOTATED, hydra.variants.TypeVariant.APPLICATION, hydra.variants.TypeVariant.EITHER, hydra.variants.TypeVariant.FUNCTION, hydra.variants.TypeVariant.FORALL, hydra.variants.TypeVariant.LIST, hydra.variants.TypeVariant.LITERAL, hydra.variants.TypeVariant.MAP, hydra.variants.TypeVariant.MAYBE, hydra.variants.TypeVariant.PAIR, hydra.variants.TypeVariant.RECORD, hydra.variants.TypeVariant.SET, hydra.variants.TypeVariant.UNION, hydra.variants.TypeVariant.UNIT, hydra.variants.TypeVariant.VARIABLE, hydra.variants.TypeVariant.VOID, hydra.variants.TypeVariant.WRAP))
|
|
36
|
+
def type_predicate(_: T0) -> bool:
|
|
37
|
+
return True
|
|
38
|
+
return hydra.coders.Language(hydra.coders.LanguageName("hydra.python"), hydra.coders.LanguageConstraints(elimination_variants(), literal_variants(), float_types(), function_variants(), integer_types(), term_variants(), type_variants(), (lambda x1: type_predicate(x1))))
|
|
39
|
+
@lru_cache(1)
|
|
40
|
+
def python_reserved_words() -> frozenset[str]:
|
|
41
|
+
r"""A set of reserved words in Python."""
|
|
42
|
+
# Python keywords, as enumerated at https://docs.python.org/3.13/reference/lexical_analysis.html#keywords.
|
|
43
|
+
python_keywords = ("False", "None", "True", "and", "as", "assert", "async", "await", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "in", "is", "lambda", "nonlocal", "not", "or", "pass", "raise", "return", "try", "while", "with", "yield")
|
|
44
|
+
# Some additional keywords we reserve in order to avoid collision with built-in functions.
|
|
45
|
+
python_built_in_functions = ("range",)
|
|
46
|
+
# Reserved words which are specific to Hydra-Python.
|
|
47
|
+
hydra_python_keywords = ("Node", "FrozenDict")
|
|
48
|
+
return hydra.lib.sets.from_list(hydra.lib.lists.concat((python_keywords, python_built_in_functions, hydra_python_keywords)))
|
hydra/python/names.py
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Note: this is an automatically generated file. Do not edit.
|
|
2
|
+
r"""Python naming utilities: encoding Hydra names as Python names."""
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
from functools import lru_cache
|
|
6
|
+
from hydra.dsl.python import Just, Nothing
|
|
7
|
+
from typing import TypeVar, cast
|
|
8
|
+
import hydra.core
|
|
9
|
+
import hydra.formatting
|
|
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.names
|
|
18
|
+
import hydra.packaging
|
|
19
|
+
import hydra.python.environment
|
|
20
|
+
import hydra.python.language
|
|
21
|
+
import hydra.python.serde
|
|
22
|
+
import hydra.python.syntax
|
|
23
|
+
import hydra.util
|
|
24
|
+
T0 = TypeVar("T0")
|
|
25
|
+
T1 = TypeVar("T1")
|
|
26
|
+
def encode_constant_for_field_name(env: T0, tname: T1, fname: hydra.core.Name) -> hydra.python.syntax.Name:
|
|
27
|
+
r"""Generate a constant name for a field definition."""
|
|
28
|
+
return hydra.python.syntax.Name(hydra.formatting.convert_case(hydra.util.CaseConvention.CAMEL, hydra.util.CaseConvention.UPPER_SNAKE, fname.value))
|
|
29
|
+
def encode_constant_for_type_name(env: T0, tname: T1) -> hydra.python.syntax.Name:
|
|
30
|
+
r"""Generate a constant name for a type definition."""
|
|
31
|
+
return hydra.python.syntax.Name("TYPE_")
|
|
32
|
+
def sanitize_python_name(v1: str) -> str:
|
|
33
|
+
r"""Sanitize a string to be a valid Python name."""
|
|
34
|
+
return hydra.formatting.sanitize_with_underscores(hydra.python.language.python_reserved_words(), v1)
|
|
35
|
+
# Whether to use __future__ annotations for forward references.
|
|
36
|
+
use_future_annotations = True
|
|
37
|
+
def encode_name(is_qualified: bool, conv: hydra.util.CaseConvention, env: hydra.python.environment.PythonEnvironment, name: hydra.core.Name) -> hydra.python.syntax.Name:
|
|
38
|
+
r"""Encode a Hydra name as a Python name."""
|
|
39
|
+
namespaces = env.namespaces
|
|
40
|
+
@lru_cache(1)
|
|
41
|
+
def focus_pair() -> tuple[hydra.packaging.Namespace, hydra.python.syntax.DottedName]:
|
|
42
|
+
return namespaces.focus
|
|
43
|
+
@lru_cache(1)
|
|
44
|
+
def focus_ns() -> hydra.packaging.Namespace:
|
|
45
|
+
return hydra.lib.pairs.first(focus_pair())
|
|
46
|
+
@lru_cache(1)
|
|
47
|
+
def bound_vars() -> FrozenDict[hydra.core.Name, hydra.python.syntax.Name]:
|
|
48
|
+
return hydra.lib.pairs.second(env.bound_type_variables)
|
|
49
|
+
@lru_cache(1)
|
|
50
|
+
def qual_name() -> hydra.packaging.QualifiedName:
|
|
51
|
+
return hydra.names.qualify_name(name)
|
|
52
|
+
mns = qual_name().namespace
|
|
53
|
+
local = qual_name().local
|
|
54
|
+
@lru_cache(1)
|
|
55
|
+
def py_local() -> str:
|
|
56
|
+
return sanitize_python_name(hydra.formatting.convert_case(hydra.util.CaseConvention.CAMEL, conv, local))
|
|
57
|
+
def py_ns(ns_val: hydra.packaging.Namespace) -> str:
|
|
58
|
+
return hydra.lib.strings.intercalate(".", hydra.lib.lists.map((lambda v1: hydra.formatting.convert_case(hydra.util.CaseConvention.CAMEL, hydra.util.CaseConvention.LOWER_SNAKE, v1)), hydra.lib.strings.split_on(".", ns_val.value)))
|
|
59
|
+
return hydra.lib.logic.if_else(is_qualified, (lambda : hydra.lib.maybes.maybe((lambda : hydra.lib.logic.if_else(hydra.lib.equality.equal(mns, Just(focus_ns())), (lambda : hydra.python.syntax.Name(hydra.lib.logic.if_else(use_future_annotations, (lambda : py_local()), (lambda : hydra.python.serde.escape_python_string(True, py_local()))))), (lambda : hydra.lib.maybes.maybe((lambda : hydra.python.syntax.Name(py_local())), (lambda ns_val: hydra.python.syntax.Name(hydra.lib.strings.cat2(py_ns(ns_val), hydra.lib.strings.cat2(".", py_local())))), mns)))), (lambda n: n), hydra.lib.maps.lookup(name, bound_vars()))), (lambda : hydra.python.syntax.Name(py_local())))
|
|
60
|
+
def encode_enum_value(v1: hydra.python.environment.PythonEnvironment, v2: hydra.core.Name) -> hydra.python.syntax.Name:
|
|
61
|
+
r"""Encode a name as a Python enum value (UPPER_SNAKE case)."""
|
|
62
|
+
return encode_name(False, hydra.util.CaseConvention.UPPER_SNAKE, v1, v2)
|
|
63
|
+
def encode_field_name(env: hydra.python.environment.PythonEnvironment, fname: hydra.core.Name) -> hydra.python.syntax.Name:
|
|
64
|
+
r"""Encode a name as a Python field name (lower_snake case)."""
|
|
65
|
+
return encode_name(False, hydra.util.CaseConvention.LOWER_SNAKE, env, fname)
|
|
66
|
+
def encode_name_qualified(env: hydra.python.environment.PythonEnvironment, name: hydra.core.Name) -> hydra.python.syntax.Name:
|
|
67
|
+
r"""Encode a name as a fully qualified Python name."""
|
|
68
|
+
namespaces = env.namespaces
|
|
69
|
+
@lru_cache(1)
|
|
70
|
+
def focus_pair() -> tuple[hydra.packaging.Namespace, hydra.python.syntax.DottedName]:
|
|
71
|
+
return namespaces.focus
|
|
72
|
+
@lru_cache(1)
|
|
73
|
+
def focus_ns() -> hydra.packaging.Namespace:
|
|
74
|
+
return hydra.lib.pairs.first(focus_pair())
|
|
75
|
+
@lru_cache(1)
|
|
76
|
+
def bound_vars() -> FrozenDict[hydra.core.Name, hydra.python.syntax.Name]:
|
|
77
|
+
return hydra.lib.pairs.second(env.bound_type_variables)
|
|
78
|
+
@lru_cache(1)
|
|
79
|
+
def qual_name() -> hydra.packaging.QualifiedName:
|
|
80
|
+
return hydra.names.qualify_name(name)
|
|
81
|
+
mns = qual_name().namespace
|
|
82
|
+
local = qual_name().local
|
|
83
|
+
return hydra.lib.maybes.maybe((lambda : hydra.lib.logic.if_else(hydra.lib.equality.equal(mns, Just(focus_ns())), (lambda : hydra.python.syntax.Name(hydra.lib.logic.if_else(use_future_annotations, (lambda : local), (lambda : hydra.python.serde.escape_python_string(True, local))))), (lambda : hydra.python.syntax.Name(hydra.lib.strings.intercalate(".", hydra.lib.lists.map(sanitize_python_name, hydra.lib.strings.split_on(".", name.value))))))), (lambda n: n), hydra.lib.maps.lookup(name, bound_vars()))
|
|
84
|
+
def encode_namespace(ns_val: hydra.packaging.Namespace) -> hydra.python.syntax.DottedName:
|
|
85
|
+
r"""Encode a namespace as a Python dotted name."""
|
|
86
|
+
return hydra.python.syntax.DottedName(hydra.lib.lists.map((lambda part: hydra.python.syntax.Name(hydra.formatting.convert_case(hydra.util.CaseConvention.CAMEL, hydra.util.CaseConvention.LOWER_SNAKE, part))), hydra.lib.strings.split_on(".", ns_val.value)))
|
|
87
|
+
def encode_type_variable(name: hydra.core.Name) -> hydra.python.syntax.Name:
|
|
88
|
+
r"""Encode a type variable name (capitalized)."""
|
|
89
|
+
return hydra.python.syntax.Name(hydra.formatting.capitalize(name.value))
|
|
90
|
+
def variable_reference(conv: hydra.util.CaseConvention, quoted: bool, env: hydra.python.environment.PythonEnvironment, name: hydra.core.Name) -> hydra.python.syntax.Expression:
|
|
91
|
+
r"""Reference a variable as a Python expression."""
|
|
92
|
+
@lru_cache(1)
|
|
93
|
+
def py_name() -> hydra.python.syntax.Name:
|
|
94
|
+
return encode_name(True, conv, env, name)
|
|
95
|
+
@lru_cache(1)
|
|
96
|
+
def unquoted() -> hydra.python.syntax.Expression:
|
|
97
|
+
return 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(py_name()))))), Nothing()))))))))), ()))),)),))))
|
|
98
|
+
namespaces = env.namespaces
|
|
99
|
+
@lru_cache(1)
|
|
100
|
+
def focus_pair() -> tuple[hydra.packaging.Namespace, hydra.python.syntax.DottedName]:
|
|
101
|
+
return namespaces.focus
|
|
102
|
+
@lru_cache(1)
|
|
103
|
+
def focus_ns() -> hydra.packaging.Namespace:
|
|
104
|
+
return hydra.lib.pairs.first(focus_pair())
|
|
105
|
+
@lru_cache(1)
|
|
106
|
+
def mns() -> Maybe[hydra.packaging.Namespace]:
|
|
107
|
+
return hydra.names.namespace_of(name)
|
|
108
|
+
@lru_cache(1)
|
|
109
|
+
def same_namespace() -> bool:
|
|
110
|
+
return hydra.lib.maybes.maybe((lambda : False), (lambda ns: hydra.lib.equality.equal(ns, focus_ns())), mns())
|
|
111
|
+
return hydra.lib.logic.if_else(hydra.lib.logic.and_(quoted, same_namespace()), (lambda : 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.AtomString(hydra.python.syntax.String(py_name().value, hydra.python.syntax.QuoteStyle.DOUBLE)))))), Nothing()))))))))), ()))),)),))))), (lambda : unquoted()))
|
|
112
|
+
def term_variable_reference(v1: hydra.python.environment.PythonEnvironment, v2: hydra.core.Name) -> hydra.python.syntax.Expression:
|
|
113
|
+
r"""Reference a term variable as a Python expression."""
|
|
114
|
+
return variable_reference(hydra.util.CaseConvention.LOWER_SNAKE, False, v1, v2)
|
|
115
|
+
def type_variable_reference(v1: hydra.python.environment.PythonEnvironment, v2: hydra.core.Name) -> hydra.python.syntax.Expression:
|
|
116
|
+
r"""Reference a type variable as a Python expression."""
|
|
117
|
+
return variable_reference(hydra.util.CaseConvention.PASCAL, False, v1, v2)
|
|
118
|
+
def variant_name(is_qualified: bool, env: hydra.python.environment.PythonEnvironment, tname: hydra.core.Name, fname: hydra.core.Name) -> hydra.python.syntax.Name:
|
|
119
|
+
r"""Generate a variant name from type name and field name."""
|
|
120
|
+
return encode_name(is_qualified, hydra.util.CaseConvention.PASCAL, env, hydra.core.Name(hydra.lib.strings.cat2(tname.value, hydra.formatting.capitalize(fname.value))))
|