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.
@@ -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")
@@ -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))))