|
55 | 55 | from attrs import define, field, frozen |
56 | 56 | from attrs.converters import optional |
57 | 57 |
|
| 58 | +from qrules._attrs import to_fraction, to_parity |
58 | 59 | from qrules.quantum_numbers import EdgeQuantumNumbers as EdgeQN |
59 | 60 | from qrules.quantum_numbers import NodeQuantumNumbers as NodeQN |
60 | 61 | from qrules.quantum_numbers import arange |
@@ -186,9 +187,9 @@ def parity_conservation( |
186 | 187 |
|
187 | 188 | @frozen |
188 | 189 | class HelicityParityEdgeInput: |
189 | | - parity: EdgeQN.parity = field(converter=EdgeQN.parity) |
190 | | - spin_magnitude: EdgeQN.spin_magnitude = field(converter=EdgeQN.spin_magnitude) |
191 | | - spin_projection: EdgeQN.spin_projection = field(converter=EdgeQN.spin_projection) |
| 190 | + parity: EdgeQN.parity = field(converter=to_parity) |
| 191 | + spin_magnitude: EdgeQN.spin_magnitude = field(converter=to_fraction) |
| 192 | + spin_projection: EdgeQN.spin_projection = field(converter=to_fraction) |
192 | 193 |
|
193 | 194 |
|
194 | 195 | def parity_conservation_helicity( |
@@ -229,16 +230,18 @@ def parity_conservation_helicity( |
229 | 230 |
|
230 | 231 | @frozen |
231 | 232 | class CParityEdgeInput: |
232 | | - spin_magnitude: EdgeQN.spin_magnitude = field(converter=EdgeQN.spin_magnitude) |
233 | | - pid: EdgeQN.pid = field(converter=EdgeQN.pid) |
234 | | - c_parity: Optional[EdgeQN.c_parity] = field(converter=EdgeQN.c_parity, default=None) |
| 233 | + spin_magnitude: EdgeQN.spin_magnitude = field(converter=to_fraction) |
| 234 | + pid: EdgeQN.pid = field(converter=int) |
| 235 | + c_parity: Optional[EdgeQN.c_parity] = field( |
| 236 | + converter=optional(to_parity), default=None |
| 237 | + ) |
235 | 238 |
|
236 | 239 |
|
237 | 240 | @frozen |
238 | 241 | class CParityNodeInput: |
239 | 242 | # These converters currently do not do anything, as "NewType"s do not have constructors |
240 | | - l_magnitude: NodeQN.l_magnitude = field(converter=NodeQN.l_magnitude) |
241 | | - s_magnitude: NodeQN.s_magnitude = field(converter=NodeQN.s_magnitude) |
| 243 | + l_magnitude: NodeQN.l_magnitude = field(converter=to_fraction) |
| 244 | + s_magnitude: NodeQN.s_magnitude = field(converter=to_fraction) |
242 | 245 |
|
243 | 246 |
|
244 | 247 | def c_parity_conservation( |
@@ -284,18 +287,18 @@ def _get_c_parity_multiparticle( |
284 | 287 |
|
285 | 288 | @frozen |
286 | 289 | class GParityEdgeInput: |
287 | | - isospin_magnitude: EdgeQN.isospin_magnitude = field( |
288 | | - converter=EdgeQN.isospin_magnitude |
| 290 | + isospin_magnitude: EdgeQN.isospin_magnitude = field(converter=to_fraction) |
| 291 | + spin_magnitude: EdgeQN.spin_magnitude = field(converter=to_fraction) |
| 292 | + pid: EdgeQN.pid = field(converter=int) |
| 293 | + g_parity: Optional[EdgeQN.g_parity] = field( |
| 294 | + converter=optional(to_parity), default=None |
289 | 295 | ) |
290 | | - spin_magnitude: EdgeQN.spin_magnitude = field(converter=EdgeQN.spin_magnitude) |
291 | | - pid: EdgeQN.pid = field(converter=EdgeQN.pid) |
292 | | - g_parity: Optional[EdgeQN.g_parity] = field(converter=EdgeQN.g_parity, default=None) |
293 | 296 |
|
294 | 297 |
|
295 | 298 | @frozen |
296 | 299 | class GParityNodeInput: |
297 | | - l_magnitude: NodeQN.l_magnitude = field(converter=NodeQN.l_magnitude) |
298 | | - s_magnitude: NodeQN.s_magnitude = field(converter=NodeQN.s_magnitude) |
| 300 | + l_magnitude: NodeQN.l_magnitude = field(converter=to_fraction) |
| 301 | + s_magnitude: NodeQN.s_magnitude = field(converter=to_fraction) |
299 | 302 |
|
300 | 303 |
|
301 | 304 | def g_parity_conservation( # noqa: C901 |
@@ -375,9 +378,9 @@ def check_g_parity_isobar( |
375 | 378 |
|
376 | 379 | @frozen |
377 | 380 | class IdenticalParticleSymmetryOutEdgeInput: |
378 | | - spin_magnitude: EdgeQN.spin_magnitude = field(converter=EdgeQN.spin_magnitude) |
379 | | - spin_projection: EdgeQN.spin_projection = field(converter=EdgeQN.spin_projection) |
380 | | - pid: EdgeQN.pid = field(converter=EdgeQN.pid) |
| 381 | + spin_magnitude: EdgeQN.spin_magnitude = field(converter=to_fraction) |
| 382 | + spin_projection: EdgeQN.spin_projection = field(converter=to_fraction) |
| 383 | + pid: EdgeQN.pid = field(converter=int) |
381 | 384 |
|
382 | 385 |
|
383 | 386 | def identical_particle_symmetrization( |
@@ -455,16 +458,16 @@ def _is_clebsch_gordan_coefficient_zero( |
455 | 458 |
|
456 | 459 | @frozen |
457 | 460 | class SpinNodeInput: |
458 | | - l_magnitude: NodeQN.l_magnitude = field(converter=NodeQN.l_magnitude) |
459 | | - l_projection: NodeQN.l_projection = field(converter=NodeQN.l_projection) |
460 | | - s_magnitude: NodeQN.s_magnitude = field(converter=NodeQN.s_magnitude) |
461 | | - s_projection: NodeQN.s_projection = field(converter=NodeQN.s_projection) |
| 461 | + l_magnitude: NodeQN.l_magnitude = field(converter=to_fraction) |
| 462 | + l_projection: NodeQN.l_projection = field(converter=to_fraction) |
| 463 | + s_magnitude: NodeQN.s_magnitude = field(converter=to_fraction) |
| 464 | + s_projection: NodeQN.s_projection = field(converter=to_fraction) |
462 | 465 |
|
463 | 466 |
|
464 | 467 | @frozen |
465 | 468 | class SpinMagnitudeNodeInput: |
466 | | - l_magnitude: NodeQN.l_magnitude = field(converter=NodeQN.l_magnitude) |
467 | | - s_magnitude: NodeQN.s_magnitude = field(converter=NodeQN.s_magnitude) |
| 469 | + l_magnitude: NodeQN.l_magnitude = field(converter=to_fraction) |
| 470 | + s_magnitude: NodeQN.s_magnitude = field(converter=to_fraction) |
468 | 471 |
|
469 | 472 |
|
470 | 473 | def ls_spin_validity(spin_input: SpinNodeInput) -> bool: |
@@ -585,12 +588,8 @@ def __spin_couplings(spin1: _Spin, spin2: _Spin) -> set[_Spin]: |
585 | 588 |
|
586 | 589 | @define |
587 | 590 | class IsoSpinEdgeInput: |
588 | | - isospin_magnitude: EdgeQN.isospin_magnitude = field( |
589 | | - converter=EdgeQN.isospin_magnitude |
590 | | - ) |
591 | | - isospin_projection: EdgeQN.isospin_projection = field( |
592 | | - converter=EdgeQN.isospin_projection |
593 | | - ) |
| 591 | + isospin_magnitude: EdgeQN.isospin_magnitude = field(converter=to_fraction) |
| 592 | + isospin_projection: EdgeQN.isospin_projection = field(converter=to_fraction) |
594 | 593 |
|
595 | 594 |
|
596 | 595 | def _check_spin_valid(magnitude: Fraction, projection: Fraction) -> bool: |
|
0 commit comments