str-to-obj 2023.10__py3-none-any.whl → 2025.1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,49 +1,20 @@
1
- # Copyright CNRS/Inria/UNS
2
- # Contributor(s): Eric Debreuve (since 2023)
3
- #
4
- # eric.debreuve@cnrs.fr
5
- #
6
- # This software is governed by the CeCILL license under French law and
7
- # abiding by the rules of distribution of free software. You can use,
8
- # modify and/ or redistribute the software under the terms of the CeCILL
9
- # license as circulated by CEA, CNRS and INRIA at the following URL
10
- # "http://www.cecill.info".
11
- #
12
- # As a counterpart to the access to the source code and rights to copy,
13
- # modify and redistribute granted by the license, users are provided only
14
- # with a limited warranty and the software's author, the holder of the
15
- # economic rights, and the successive licensors have only limited
16
- # liability.
17
- #
18
- # In this respect, the user's attention is drawn to the risks associated
19
- # with loading, using, modifying and/or developing or reproducing the
20
- # software by the user in light of its specific status of free software,
21
- # that may mean that it is complicated to manipulate, and that also
22
- # therefore means that it is reserved for developers and experienced
23
- # professionals having in-depth computer knowledge. Users are therefore
24
- # encouraged to load and test the software's suitability as regards their
25
- # requirements in conditions enabling the security of their systems and/or
26
- # data to be ensured and, more generally, to use and operate it in the
27
- # same conditions as regards security.
28
- #
29
- # The fact that you are presently reading this means that you have had
30
- # knowledge of the CeCILL license and that you accept its terms.
31
-
32
- import dataclasses as dtcl
33
- from typing import Any, ClassVar
1
+ """
2
+ Copyright CNRS/Inria/UniCA
3
+ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
+ SEE COPYRIGHT NOTICE BELOW
5
+ """
34
6
 
35
- from rich.text import Text as text_t
7
+ import dataclasses as d
8
+ import typing as h
36
9
 
37
- from str_to_obj.interface.console import (
38
- NameValueTypeAsRichStr,
39
- TypeAsRichStr,
40
- )
10
+ from rich.text import Text as text_t
11
+ from str_to_obj.interface.console import NameValueTypeAsRichStr, TypeAsRichStr
41
12
  from str_to_obj.type.hint import annotated_hint_t, non_complex_hint_h
42
13
 
43
14
 
44
- @dtcl.dataclass(slots=True, repr=False, eq=False)
15
+ @d.dataclass(slots=True, repr=False, eq=False)
45
16
  class annotation_t:
46
- ACCEPTED_TYPES: ClassVar[tuple[non_complex_hint_h, ...]] = (Any,)
17
+ ACCEPTED_TYPES: h.ClassVar[tuple[non_complex_hint_h, ...]] = (h.Any,)
47
18
 
48
19
  @classmethod
49
20
  def NewAnnotatedType(cls, *args, **kwargs) -> annotated_hint_t:
@@ -57,11 +28,11 @@ class annotation_t:
57
28
  """
58
29
  raise NotImplementedError
59
30
 
60
- def ValueIsCompliant(self, value: Any, /) -> list[str]:
31
+ def ValueIssues(self, value: h.Any, /) -> list[str]:
61
32
  """"""
62
33
  types = self.__class__.ACCEPTED_TYPES
63
34
  stripe = type(value)
64
- if (Any in types) or (stripe in types) or issubclass(stripe, types):
35
+ if (h.Any in types) or (stripe in types) or issubclass(stripe, types):
65
36
  return []
66
37
 
67
38
  expected = " or ".join(map(str, types))
@@ -77,9 +48,56 @@ class annotation_t:
77
48
  """"""
78
49
  output = [TypeAsRichStr(self)]
79
50
 
80
- names = (_fld.name for _fld in dtcl.fields(self))
51
+ names = (_fld.name for _fld in d.fields(self))
81
52
  for name in names:
82
53
  value = getattr(self, name)
83
54
  output.append(f" {NameValueTypeAsRichStr(name, value, separator=' = ')}")
84
55
 
85
56
  return "\n".join(output)
57
+
58
+
59
+ """
60
+ COPYRIGHT NOTICE
61
+
62
+ This software is governed by the CeCILL license under French law and
63
+ abiding by the rules of distribution of free software. You can use,
64
+ modify and/ or redistribute the software under the terms of the CeCILL
65
+ license as circulated by CEA, CNRS and INRIA at the following URL
66
+ "http://www.cecill.info".
67
+
68
+ As a counterpart to the access to the source code and rights to copy,
69
+ modify and redistribute granted by the license, users are provided only
70
+ with a limited warranty and the software's author, the holder of the
71
+ economic rights, and the successive licensors have only limited
72
+ liability.
73
+
74
+ In this respect, the user's attention is drawn to the risks associated
75
+ with loading, using, modifying and/or developing or reproducing the
76
+ software by the user in light of its specific status of free software,
77
+ that may mean that it is complicated to manipulate, and that also
78
+ therefore means that it is reserved for developers and experienced
79
+ professionals having in-depth computer knowledge. Users are therefore
80
+ encouraged to load and test the software's suitability as regards their
81
+ requirements in conditions enabling the security of their systems and/or
82
+ data to be ensured and, more generally, to use and operate it in the
83
+ same conditions as regards security.
84
+
85
+ The fact that you are presently reading this means that you have had
86
+ knowledge of the CeCILL license and that you accept its terms.
87
+
88
+ SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
89
+
90
+ This software is being developed by Eric Debreuve, a CNRS employee and
91
+ member of team Morpheme.
92
+ Team Morpheme is a joint team between Inria, CNRS, and UniCA.
93
+ It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
94
+ I3S, and Laboratory iBV.
95
+
96
+ CNRS: https://www.cnrs.fr/index.php/en
97
+ Inria: https://www.inria.fr/en/
98
+ UniCA: https://univ-cotedazur.eu/
99
+ Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
100
+ I3S: https://www.i3s.unice.fr/en/
101
+ iBV: http://ibv.unice.fr/
102
+ Team Morpheme: https://team.inria.fr/morpheme/
103
+ """
str_to_obj/type/hint.py CHANGED
@@ -1,42 +1,17 @@
1
- # Copyright CNRS/Inria/UNS
2
- # Contributor(s): Eric Debreuve (since 2023)
3
- #
4
- # eric.debreuve@cnrs.fr
5
- #
6
- # This software is governed by the CeCILL license under French law and
7
- # abiding by the rules of distribution of free software. You can use,
8
- # modify and/ or redistribute the software under the terms of the CeCILL
9
- # license as circulated by CEA, CNRS and INRIA at the following URL
10
- # "http://www.cecill.info".
11
- #
12
- # As a counterpart to the access to the source code and rights to copy,
13
- # modify and redistribute granted by the license, users are provided only
14
- # with a limited warranty and the software's author, the holder of the
15
- # economic rights, and the successive licensors have only limited
16
- # liability.
17
- #
18
- # In this respect, the user's attention is drawn to the risks associated
19
- # with loading, using, modifying and/or developing or reproducing the
20
- # software by the user in light of its specific status of free software,
21
- # that may mean that it is complicated to manipulate, and that also
22
- # therefore means that it is reserved for developers and experienced
23
- # professionals having in-depth computer knowledge. Users are therefore
24
- # encouraged to load and test the software's suitability as regards their
25
- # requirements in conditions enabling the security of their systems and/or
26
- # data to be ensured and, more generally, to use and operate it in the
27
- # same conditions as regards security.
28
- #
29
- # The fact that you are presently reading this means that you have had
30
- # knowledge of the CeCILL license and that you accept its terms.
31
-
32
- from types import EllipsisType, GenericAlias, UnionType
33
- from typing import Annotated, Any
1
+ """
2
+ Copyright CNRS/Inria/UniCA
3
+ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
+ SEE COPYRIGHT NOTICE BELOW
5
+ """
6
+
7
+ import types as t
8
+ import typing as h
34
9
 
35
10
  # --- Unannotated hints
36
11
  # Atoms
37
- generic_hint_h = Any
38
- simple_hint_h = type[Any]
39
- complex_hint_h = GenericAlias | UnionType
12
+ generic_hint_h = h.Any
13
+ simple_hint_h = type[h.Any]
14
+ complex_hint_h = t.GenericAlias | t.UnionType
40
15
 
41
16
  # Grouping
42
17
  non_complex_hint_h = generic_hint_h | simple_hint_h
@@ -44,7 +19,7 @@ raw_hint_h = non_complex_hint_h | complex_hint_h
44
19
 
45
20
 
46
21
  # --- Annotated hints
47
- annotated_hint_t = type(Annotated[object, None])
22
+ annotated_hint_t = type(h.Annotated[object, None])
48
23
 
49
24
 
50
25
  # --- [Un]Annotated hints
@@ -54,4 +29,50 @@ any_hint_h = raw_hint_h | annotated_hint_t
54
29
  # --- Complex hints additional components:
55
30
  # - EllipsisType for GenericAlias, as in: tuple[int, ...]
56
31
  # - None for UnionType, as in: int | None
57
- complex_hint_additions_h = EllipsisType | None
32
+ complex_hint_additions_h = t.EllipsisType | None
33
+
34
+ """
35
+ COPYRIGHT NOTICE
36
+
37
+ This software is governed by the CeCILL license under French law and
38
+ abiding by the rules of distribution of free software. You can use,
39
+ modify and/ or redistribute the software under the terms of the CeCILL
40
+ license as circulated by CEA, CNRS and INRIA at the following URL
41
+ "http://www.cecill.info".
42
+
43
+ As a counterpart to the access to the source code and rights to copy,
44
+ modify and redistribute granted by the license, users are provided only
45
+ with a limited warranty and the software's author, the holder of the
46
+ economic rights, and the successive licensors have only limited
47
+ liability.
48
+
49
+ In this respect, the user's attention is drawn to the risks associated
50
+ with loading, using, modifying and/or developing or reproducing the
51
+ software by the user in light of its specific status of free software,
52
+ that may mean that it is complicated to manipulate, and that also
53
+ therefore means that it is reserved for developers and experienced
54
+ professionals having in-depth computer knowledge. Users are therefore
55
+ encouraged to load and test the software's suitability as regards their
56
+ requirements in conditions enabling the security of their systems and/or
57
+ data to be ensured and, more generally, to use and operate it in the
58
+ same conditions as regards security.
59
+
60
+ The fact that you are presently reading this means that you have had
61
+ knowledge of the CeCILL license and that you accept its terms.
62
+
63
+ SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
64
+
65
+ This software is being developed by Eric Debreuve, a CNRS employee and
66
+ member of team Morpheme.
67
+ Team Morpheme is a joint team between Inria, CNRS, and UniCA.
68
+ It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
69
+ I3S, and Laboratory iBV.
70
+
71
+ CNRS: https://www.cnrs.fr/index.php/en
72
+ Inria: https://www.inria.fr/en/
73
+ UniCA: https://univ-cotedazur.eu/
74
+ Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
75
+ I3S: https://www.i3s.unice.fr/en/
76
+ iBV: http://ibv.unice.fr/
77
+ Team Morpheme: https://team.inria.fr/morpheme/
78
+ """
@@ -1,41 +1,16 @@
1
- # Copyright CNRS/Inria/UNS
2
- # Contributor(s): Eric Debreuve (since 2023)
3
- #
4
- # eric.debreuve@cnrs.fr
5
- #
6
- # This software is governed by the CeCILL license under French law and
7
- # abiding by the rules of distribution of free software. You can use,
8
- # modify and/ or redistribute the software under the terms of the CeCILL
9
- # license as circulated by CEA, CNRS and INRIA at the following URL
10
- # "http://www.cecill.info".
11
- #
12
- # As a counterpart to the access to the source code and rights to copy,
13
- # modify and redistribute granted by the license, users are provided only
14
- # with a limited warranty and the software's author, the holder of the
15
- # economic rights, and the successive licensors have only limited
16
- # liability.
17
- #
18
- # In this respect, the user's attention is drawn to the risks associated
19
- # with loading, using, modifying and/or developing or reproducing the
20
- # software by the user in light of its specific status of free software,
21
- # that may mean that it is complicated to manipulate, and that also
22
- # therefore means that it is reserved for developers and experienced
23
- # professionals having in-depth computer knowledge. Users are therefore
24
- # encouraged to load and test the software's suitability as regards their
25
- # requirements in conditions enabling the security of their systems and/or
26
- # data to be ensured and, more generally, to use and operate it in the
27
- # same conditions as regards security.
28
- #
29
- # The fact that you are presently reading this means that you have had
30
- # knowledge of the CeCILL license and that you accept its terms.
31
-
32
- from __future__ import annotations
1
+ """
2
+ Copyright CNRS/Inria/UniCA
3
+ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
+ SEE COPYRIGHT NOTICE BELOW
5
+ """
33
6
 
34
- import dataclasses as dtcl
7
+ import dataclasses as d
35
8
  import re as regx
36
- from types import EllipsisType, NoneType, UnionType
37
- from typing import Any, Union, get_args, get_origin
9
+ import types as t
10
+ import typing as h
38
11
 
12
+ from logger_36.content import MessageWithActualExpected
13
+ from str_to_obj.catalog.choices import choices_t
39
14
  from str_to_obj.task.inspection import HintComponents
40
15
  from str_to_obj.type.annotation import annotation_t
41
16
  from str_to_obj.type.hint import (
@@ -46,24 +21,29 @@ from str_to_obj.type.hint import (
46
21
  )
47
22
 
48
23
 
49
- @dtcl.dataclass(slots=True, repr=False, eq=False)
24
+ @d.dataclass(slots=True, repr=False, eq=False)
50
25
  class _hint_node_t:
51
26
  """
52
27
  Leave elements to the tree.
28
+ literal_s: the accepted (literal) values if the hint is a typing.Literal, None
29
+ otherwise.
53
30
  """
54
31
 
55
- type: non_complex_hint_h | UnionType | EllipsisType | type[NoneType]
56
- annotations: tuple[annotation_t, ...] = dtcl.field(default_factory=tuple)
32
+ type: non_complex_hint_h | t.UnionType | t.EllipsisType | type[t.NoneType]
33
+ annotations: tuple[annotation_t, ...] = d.field(default_factory=tuple)
34
+ literal_s: tuple[h.Any, ...] | None = None
57
35
 
58
36
 
59
- @dtcl.dataclass(slots=True, repr=False, eq=False)
60
- class hint_tree_t(_hint_node_t):
61
- elements: tuple[hint_tree_t, ...] = None
37
+ @d.dataclass(slots=True, repr=False, eq=False)
38
+ class hint_t(_hint_node_t):
39
+ """
40
+ elements: tuple if the hint is a container, None otherwise. In terms of tree
41
+ structure, it plays the role of the (hint) node children.
42
+ """
43
+ elements: tuple[h.Self, ...] | None = None
62
44
 
63
45
  @classmethod
64
- def NewFromTypeHint(
65
- cls, hint: any_hint_h | complex_hint_additions_h, /
66
- ) -> hint_tree_t:
46
+ def NewForHint(cls, hint: any_hint_h | complex_hint_additions_h, /) -> h.Self:
67
47
  """
68
48
  Note that type hints cannot translate into hint trees with an OR-node having a child
69
49
  OR-node. For example: str | (int | float) is interpreted as str | int | float. This
@@ -74,30 +54,50 @@ class hint_tree_t(_hint_node_t):
74
54
  if isinstance(hint, annotation_t):
75
55
  # This is a common mistake in specifications.
76
56
  raise ValueError(
77
- f'{hint}: Invalid hint type "{type(hint).__name__}"; '
78
- f"Expected={any_hint_h}."
57
+ MessageWithActualExpected(
58
+ "Invalid hint type", actual=type(hint).__name__, expected=any_hint_h
59
+ )
79
60
  )
80
61
 
81
- # Dealing with complex_hint_additions_h first
62
+ # Dealing with complex_hint_additions_h first.
82
63
  if hint is Ellipsis:
83
- return cls(type=EllipsisType)
84
- if (hint is None) or (hint is NoneType):
85
- return cls(type=NoneType)
64
+ return cls(type=t.EllipsisType)
65
+ if (hint is None) or (hint is t.NoneType):
66
+ return cls(type=t.NoneType)
86
67
 
87
68
  # nnts: Do not use "annotations" since it shadows __future__.annotations.
88
69
  raw_hint, nnts = HintComponents(hint)
89
70
 
90
- if (origin := get_origin(raw_hint)) is None:
71
+ if (origin := h.get_origin(raw_hint)) is None:
91
72
  return cls(type=raw_hint, annotations=nnts)
92
73
 
93
74
  # Handled types: list, set, tuple, with sets using the dict delimiters { and }.
94
75
  if origin is dict:
95
- raise TypeError(f"{origin.__name__}: Unhandled type.")
76
+ raise TypeError(f"Unhandled type: {origin.__name__}.")
77
+
78
+ if origin is h.Literal:
79
+ literal_s = h.get_args(raw_hint)
80
+ if any(isinstance(_elm, choices_t) for _elm in nnts):
81
+ raise ValueError(
82
+ f"Literal hint with values {literal_s} "
83
+ f"must not be annotated with {choices_t.__name__} as it leads to "
84
+ f"either redundancy or mismatch."
85
+ )
86
+ stripes = tuple(set(type(_elm) for _elm in literal_s))
87
+ if stripes.__len__() > 1:
88
+ origin = t.UnionType
89
+ elements = tuple(cls.NewForHint(_elm) for _elm in stripes)
90
+ else:
91
+ origin = stripes[0]
92
+ elements = None
93
+ return cls(
94
+ type=origin, annotations=nnts, elements=elements, literal_s=literal_s
95
+ )
96
96
 
97
- if origin is Union:
98
- origin = UnionType
97
+ if origin is h.Union:
98
+ origin = t.UnionType
99
99
  # get_args returns NoneType for None. This must be taken into account above.
100
- elements = tuple(cls.NewFromTypeHint(_elm) for _elm in get_args(raw_hint))
100
+ elements = tuple(cls.NewForHint(_elm) for _elm in h.get_args(raw_hint))
101
101
  return cls(type=origin, annotations=nnts, elements=elements)
102
102
 
103
103
  @property
@@ -112,30 +112,43 @@ class hint_tree_t(_hint_node_t):
112
112
  return output
113
113
 
114
114
  @property
115
- def template(self) -> simple_hint_h | dict[int, Any] | None:
115
+ def template(self) -> simple_hint_h | dict[int, h.Any] | None:
116
116
  """"""
117
- if self.type is NoneType:
117
+ if self.type is t.NoneType:
118
118
  return None
119
119
 
120
- if self.type is UnionType:
120
+ if self.type is t.UnionType:
121
121
  return {_key: _elm.template for _key, _elm in enumerate(self.elements)}
122
122
 
123
123
  if self.elements is None:
124
124
  return self.type
125
125
 
126
- return self.type(_elm.template for _elm in self.elements)
126
+ try:
127
+ output = self.type(_elm.template for _elm in self.elements)
128
+ except TypeError:
129
+ output = None
130
+ if output is not None:
131
+ return output
132
+
133
+ # TODO: Does it work all the time?
134
+ if self.elements.__len__() == 1:
135
+ # For example, self.type is typing.Sequence.
136
+ return self.type[self.elements[0].template]
137
+
138
+ # TODO: Can something better be done?
139
+ return self.type
127
140
 
128
141
  @property
129
142
  def template_as_str(self) -> str:
130
143
  """"""
131
144
  output = (
132
145
  str(self.template)
133
- .replace(str(EllipsisType), "...")
146
+ .replace(str(t.EllipsisType), "...")
134
147
  .replace("<class '", "")
135
148
  .replace("'>", "")
136
149
  )
137
- output = regx.sub("{\d: ", "{", output, flags=regx.ASCII)
138
- output = regx.sub(", \d:", " |", output, flags=regx.ASCII)
150
+ output = regx.sub(r"{\d: ", "{", output, flags=regx.ASCII)
151
+ output = regx.sub(r", \d:", " |", output, flags=regx.ASCII)
139
152
 
140
153
  return output
141
154
 
@@ -149,7 +162,7 @@ class hint_tree_t(_hint_node_t):
149
162
  # """"""
150
163
  # output = [TypeAsRichStr(self)]
151
164
  #
152
- # names = (_fld.name for _fld in dtcl.fields(self))
165
+ # names = (_fld.name for _fld in d.fields(self))
153
166
  # for name in names:
154
167
  # value = getattr(self, name)
155
168
  # output.append(f" {NameValueTypeAsRichStr(name, value, separator='@=@')}")
@@ -157,3 +170,49 @@ class hint_tree_t(_hint_node_t):
157
170
  # output = AlignedOnSeparator(output, "@=@", " = ")
158
171
  #
159
172
  # return "\n".join(output)
173
+
174
+ """
175
+ COPYRIGHT NOTICE
176
+
177
+ This software is governed by the CeCILL license under French law and
178
+ abiding by the rules of distribution of free software. You can use,
179
+ modify and/ or redistribute the software under the terms of the CeCILL
180
+ license as circulated by CEA, CNRS and INRIA at the following URL
181
+ "http://www.cecill.info".
182
+
183
+ As a counterpart to the access to the source code and rights to copy,
184
+ modify and redistribute granted by the license, users are provided only
185
+ with a limited warranty and the software's author, the holder of the
186
+ economic rights, and the successive licensors have only limited
187
+ liability.
188
+
189
+ In this respect, the user's attention is drawn to the risks associated
190
+ with loading, using, modifying and/or developing or reproducing the
191
+ software by the user in light of its specific status of free software,
192
+ that may mean that it is complicated to manipulate, and that also
193
+ therefore means that it is reserved for developers and experienced
194
+ professionals having in-depth computer knowledge. Users are therefore
195
+ encouraged to load and test the software's suitability as regards their
196
+ requirements in conditions enabling the security of their systems and/or
197
+ data to be ensured and, more generally, to use and operate it in the
198
+ same conditions as regards security.
199
+
200
+ The fact that you are presently reading this means that you have had
201
+ knowledge of the CeCILL license and that you accept its terms.
202
+
203
+ SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
204
+
205
+ This software is being developed by Eric Debreuve, a CNRS employee and
206
+ member of team Morpheme.
207
+ Team Morpheme is a joint team between Inria, CNRS, and UniCA.
208
+ It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
209
+ I3S, and Laboratory iBV.
210
+
211
+ CNRS: https://www.cnrs.fr/index.php/en
212
+ Inria: https://www.inria.fr/en/
213
+ UniCA: https://univ-cotedazur.eu/
214
+ Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
215
+ I3S: https://www.i3s.unice.fr/en/
216
+ iBV: http://ibv.unice.fr/
217
+ Team Morpheme: https://team.inria.fr/morpheme/
218
+ """
@@ -0,0 +1,121 @@
1
+ """
2
+ Copyright CNRS/Inria/UniCA
3
+ Contributor(s): Eric Debreuve (eric.debreuve@cnrs.fr) since 2023
4
+ SEE COPYRIGHT NOTICE BELOW
5
+ """
6
+
7
+ import dataclasses as d
8
+ import typing as h
9
+
10
+ from rich.text import Text as text_t
11
+ from str_to_obj.main import ObjectFromStr
12
+ from str_to_obj.runtime.value import INVALID_VALUE
13
+ from str_to_obj.task.casting import CastValue
14
+ from str_to_obj.type.annotation import annotation_t
15
+ from str_to_obj.type.hint_tree import hint_t
16
+
17
+
18
+ @d.dataclass(slots=True, repr=False, eq=False)
19
+ class type_t(hint_t):
20
+ def FirstAnnotationWithType(
21
+ self, stripe: type[annotation_t], /
22
+ ) -> annotation_t | None:
23
+ """"""
24
+ for annotation in self.all_annotations:
25
+ if isinstance(annotation, stripe):
26
+ return annotation
27
+
28
+ return None
29
+
30
+ def ValueIssues(self, value: h.Any, /) -> list[str]:
31
+ """"""
32
+ return CastValue(value, self, only_check_validity=True)
33
+
34
+ def InterpretedValueOf(self, value: h.Any, /) -> tuple[h.Any, list[str]]:
35
+ """"""
36
+ if isinstance(value, str):
37
+ typed_value, issues = ObjectFromStr(value, expected_type=self)
38
+ else:
39
+ typed_value, issues = CastValue(value, self)
40
+
41
+ if issues.__len__() > 0:
42
+ return INVALID_VALUE, issues
43
+
44
+ return typed_value, []
45
+
46
+ def __str__(self) -> str:
47
+ """"""
48
+ return text_t.from_markup(self.__rich__()).plain
49
+
50
+ def __rich__(self) -> str:
51
+ """"""
52
+ output = [f"[white]{self.template_as_str}[/]"]
53
+
54
+ for annotation in self.all_annotations:
55
+ output.append(type(annotation).__name__)
56
+
57
+ return "[yellow]" + "::".join(output) + "[/]"
58
+
59
+
60
+ @d.dataclass(slots=True, repr=False, eq=False)
61
+ class any_type_t(type_t):
62
+ def FirstAnnotationWithType(
63
+ self, stripe: type[annotation_t], /
64
+ ) -> annotation_t | None:
65
+ """"""
66
+ return None
67
+
68
+ def ValueIssues(self, _: h.Any, /) -> list[str]:
69
+ """"""
70
+ return []
71
+
72
+ def InterpretedValueOf(self, value: h.Any, /) -> tuple[h.Any, list[str]]:
73
+ """"""
74
+ return value, []
75
+
76
+
77
+ """
78
+ COPYRIGHT NOTICE
79
+
80
+ This software is governed by the CeCILL license under French law and
81
+ abiding by the rules of distribution of free software. You can use,
82
+ modify and/ or redistribute the software under the terms of the CeCILL
83
+ license as circulated by CEA, CNRS and INRIA at the following URL
84
+ "http://www.cecill.info".
85
+
86
+ As a counterpart to the access to the source code and rights to copy,
87
+ modify and redistribute granted by the license, users are provided only
88
+ with a limited warranty and the software's author, the holder of the
89
+ economic rights, and the successive licensors have only limited
90
+ liability.
91
+
92
+ In this respect, the user's attention is drawn to the risks associated
93
+ with loading, using, modifying and/or developing or reproducing the
94
+ software by the user in light of its specific status of free software,
95
+ that may mean that it is complicated to manipulate, and that also
96
+ therefore means that it is reserved for developers and experienced
97
+ professionals having in-depth computer knowledge. Users are therefore
98
+ encouraged to load and test the software's suitability as regards their
99
+ requirements in conditions enabling the security of their systems and/or
100
+ data to be ensured and, more generally, to use and operate it in the
101
+ same conditions as regards security.
102
+
103
+ The fact that you are presently reading this means that you have had
104
+ knowledge of the CeCILL license and that you accept its terms.
105
+
106
+ SEE LICENCE NOTICE: file README-LICENCE-utf8.txt at project source root.
107
+
108
+ This software is being developed by Eric Debreuve, a CNRS employee and
109
+ member of team Morpheme.
110
+ Team Morpheme is a joint team between Inria, CNRS, and UniCA.
111
+ It is hosted by the Centre Inria d'Université Côte d'Azur, Laboratory
112
+ I3S, and Laboratory iBV.
113
+
114
+ CNRS: https://www.cnrs.fr/index.php/en
115
+ Inria: https://www.inria.fr/en/
116
+ UniCA: https://univ-cotedazur.eu/
117
+ Centre Inria d'Université Côte d'Azur: https://www.inria.fr/en/centre/sophia/
118
+ I3S: https://www.i3s.unice.fr/en/
119
+ iBV: http://ibv.unice.fr/
120
+ Team Morpheme: https://team.inria.fr/morpheme/
121
+ """