Skip to content

Commit f610cf9

Browse files
MAINT: have qn_domains-keys in Node/EdgeSettings be typed (#292)
* now compatible with python3.12
1 parent cebe81b commit f610cf9

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

docs/conf.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import os
44
import sys
5+
import typing
56

67
from sphinx_api_relink.helpers import (
78
get_branch_name,
@@ -11,9 +12,20 @@
1112
set_intersphinx_version_remapping,
1213
)
1314

15+
from qrules.quantum_numbers import EdgeQuantumNumbers, NodeQuantumNumbers
16+
1417
sys.path.insert(0, os.path.abspath("."))
1518
from _extend_docstrings import extend_docstrings # noqa: PLC2701
1619

20+
21+
def pick_newtype_attrs(some_type: type) -> list:
22+
return [
23+
attr
24+
for attr in dir(some_type)
25+
if type(getattr(some_type, attr)) is typing.NewType
26+
]
27+
28+
1729
extend_docstrings()
1830
set_intersphinx_version_remapping({
1931
"ipython": {
@@ -261,6 +273,16 @@
261273
nb_execution_show_tb = True
262274
nb_execution_timeout = -1
263275
nb_output_stderr = "remove"
276+
277+
278+
nitpick_temp_names = [
279+
*pick_newtype_attrs(EdgeQuantumNumbers),
280+
*pick_newtype_attrs(NodeQuantumNumbers),
281+
]
282+
nitpick_temp_patterns = [
283+
(r"py:(class|obj)", r"qrules\.quantum_numbers\." + name)
284+
for name in nitpick_temp_names
285+
]
264286
nitpick_ignore_regex = [
265287
(r"py:(class|obj)", "json.encoder.JSONEncoder"),
266288
(r"py:(class|obj)", r"qrules\.topology\.EdgeType"),
@@ -269,6 +291,7 @@
269291
(r"py:(class|obj)", r"qrules\.topology\.NewNodeType"),
270292
(r"py:(class|obj)", r"qrules\.topology\.NodeType"),
271293
(r"py:(class|obj)", r"qrules\.topology\.VT"),
294+
*nitpick_temp_patterns,
272295
]
273296
nitpicky = True
274297
primary_domain = "py"

src/qrules/quantum_numbers.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,29 @@ class EdgeQuantumNumbers:
127127
EdgeQuantumNumbers.g_parity,
128128
]
129129

130+
# for accessing the keys of the dicts in EdgeSettings
131+
EdgeQuantumNumberTypes = Union[
132+
type[EdgeQuantumNumbers.pid],
133+
type[EdgeQuantumNumbers.mass],
134+
type[EdgeQuantumNumbers.width],
135+
type[EdgeQuantumNumbers.spin_magnitude],
136+
type[EdgeQuantumNumbers.spin_projection],
137+
type[EdgeQuantumNumbers.charge],
138+
type[EdgeQuantumNumbers.isospin_magnitude],
139+
type[EdgeQuantumNumbers.isospin_projection],
140+
type[EdgeQuantumNumbers.strangeness],
141+
type[EdgeQuantumNumbers.charmness],
142+
type[EdgeQuantumNumbers.bottomness],
143+
type[EdgeQuantumNumbers.topness],
144+
type[EdgeQuantumNumbers.baryon_number],
145+
type[EdgeQuantumNumbers.electron_lepton_number],
146+
type[EdgeQuantumNumbers.muon_lepton_number],
147+
type[EdgeQuantumNumbers.tau_lepton_number],
148+
type[EdgeQuantumNumbers.parity],
149+
type[EdgeQuantumNumbers.c_parity],
150+
type[EdgeQuantumNumbers.g_parity],
151+
]
152+
130153

131154
@frozen(init=False)
132155
class NodeQuantumNumbers:
@@ -155,6 +178,15 @@ class NodeQuantumNumbers:
155178
]
156179
"""Type hint for quantum numbers of interaction nodes."""
157180

181+
# for accessing the keys of the dicts in NodeSettings
182+
NodeQuantumNumberTypes = Union[
183+
type[NodeQuantumNumbers.l_magnitude],
184+
type[NodeQuantumNumbers.l_projection],
185+
type[NodeQuantumNumbers.s_magnitude],
186+
type[NodeQuantumNumbers.s_projection],
187+
type[NodeQuantumNumbers.parity_prefactor],
188+
]
189+
158190

159191
def _to_optional_float(optional_float: float | None) -> float | None:
160192
if optional_float is None:

src/qrules/solving.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@
3333
from qrules.quantum_numbers import (
3434
EdgeQuantumNumber,
3535
EdgeQuantumNumbers,
36+
EdgeQuantumNumberTypes,
3637
NodeQuantumNumber,
38+
NodeQuantumNumberTypes,
3739
)
3840
from qrules.topology import MutableTransition, Topology
3941

@@ -50,7 +52,7 @@ class EdgeSettings:
5052

5153
conservation_rules: set[GraphElementRule] = field(factory=set)
5254
rule_priorities: dict[GraphElementRule, int] = field(factory=dict)
53-
qn_domains: dict[Any, list] = field(factory=dict)
55+
qn_domains: dict[EdgeQuantumNumberTypes, list] = field(factory=dict)
5456

5557

5658
@implement_pretty_repr
@@ -70,7 +72,7 @@ class NodeSettings:
7072

7173
conservation_rules: set[Rule] = field(factory=set)
7274
rule_priorities: dict[Rule, int] = field(factory=dict)
73-
qn_domains: dict[Any, list] = field(factory=dict)
75+
qn_domains: dict[NodeQuantumNumberTypes, list] = field(factory=dict)
7476
interaction_strength: float = 1.0
7577

7678

0 commit comments

Comments
 (0)