Skip to content

Commit 082d7dd

Browse files
move stuff from angular ket to angular utils
1 parent 0aba070 commit 082d7dd

5 files changed

Lines changed: 77 additions & 66 deletions

File tree

src/rydstate/angular/angular_ket.py

Lines changed: 2 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from __future__ import annotations
22

3-
import contextlib
43
import logging
54
from abc import ABC
65
from typing import TYPE_CHECKING, Any, ClassVar, Literal, overload
@@ -14,6 +13,7 @@
1413
is_angular_operator_type,
1514
)
1615
from rydstate.angular.utils import (
16+
InvalidQuantumNumbersError,
1717
check_spin_addition_rule,
1818
get_possible_quantum_number_values,
1919
minus_one_pow,
@@ -27,19 +27,10 @@
2727

2828
from rydstate.angular.angular_matrix_element import AngularMomentumQuantumNumbers, AngularOperatorType
2929
from rydstate.angular.angular_state import AngularState
30+
from rydstate.angular.utils import CouplingScheme
3031

3132
logger = logging.getLogger(__name__)
3233

33-
CouplingScheme = Literal["LS", "JJ", "FJ"]
34-
35-
36-
class InvalidQuantumNumbersError(ValueError):
37-
def __init__(self, ket: AngularKetBase, msg: str = "") -> None:
38-
_msg = f"Invalid quantum numbers for {ket!r}"
39-
if len(msg) > 0:
40-
_msg += f"\n {msg}"
41-
super().__init__(_msg)
42-
4334

4435
class AngularKetBase(ABC):
4536
"""Base class for a angular ket (i.e. a simple canonical spin ketstate)."""
@@ -736,55 +727,3 @@ def sanity_check(self, msgs: list[str] | None = None) -> None:
736727
msgs.append(f"{self.f_c=}, {self.j_r=}, {self.f_tot=} don't satisfy spin addition rule.")
737728

738729
super().sanity_check(msgs)
739-
740-
741-
def quantum_numbers_to_angular_ket(
742-
species: str | SpeciesObject,
743-
s_c: float | None = None,
744-
l_c: int = 0,
745-
j_c: float | None = None,
746-
f_c: float | None = None,
747-
s_r: float = 0.5,
748-
l_r: int | None = None,
749-
j_r: float | None = None,
750-
s_tot: float | None = None,
751-
l_tot: int | None = None,
752-
j_tot: float | None = None,
753-
f_tot: float | None = None,
754-
m: float | None = None,
755-
) -> AngularKetBase:
756-
r"""Return an AngularKet object in the corresponding coupling scheme from the given quantum numbers.
757-
758-
Args:
759-
species: Atomic species.
760-
s_c: Spin quantum number of the core electron (0 for Alkali, 0.5 for divalent atoms).
761-
l_c: Orbital angular momentum quantum number of the core electron.
762-
j_c: Total angular momentum quantum number of the core electron.
763-
f_c: Total angular momentum quantum number of the core (core electron + nucleus).
764-
s_r: Spin quantum number of the rydberg electron (always 0.5).
765-
l_r: Orbital angular momentum quantum number of the rydberg electron.
766-
j_r: Total angular momentum quantum number of the rydberg electron.
767-
s_tot: Total spin quantum number of all electrons.
768-
l_tot: Total orbital angular momentum quantum number of all electrons.
769-
j_tot: Total angular momentum quantum number of all electrons.
770-
f_tot: Total angular momentum quantum number of the atom (rydberg electron + core).
771-
m: Total magnetic quantum number.
772-
Optional, only needed for concrete angular matrix elements.
773-
774-
"""
775-
with contextlib.suppress(InvalidQuantumNumbersError, ValueError):
776-
return AngularKetLS(
777-
s_c=s_c, l_c=l_c, s_r=s_r, l_r=l_r, s_tot=s_tot, l_tot=l_tot, j_tot=j_tot, f_tot=f_tot, m=m, species=species
778-
)
779-
780-
with contextlib.suppress(InvalidQuantumNumbersError, ValueError):
781-
return AngularKetJJ(
782-
s_c=s_c, l_c=l_c, j_c=j_c, s_r=s_r, l_r=l_r, j_r=j_r, j_tot=j_tot, f_tot=f_tot, m=m, species=species
783-
)
784-
785-
with contextlib.suppress(InvalidQuantumNumbersError, ValueError):
786-
return AngularKetFJ(
787-
s_c=s_c, l_c=l_c, j_c=j_c, f_c=f_c, s_r=s_r, l_r=l_r, j_r=j_r, f_tot=f_tot, m=m, species=species
788-
)
789-
790-
raise ValueError("Invalid combination of angular quantum numbers provided.")

src/rydstate/angular/angular_state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919

2020
from typing_extensions import Self
2121

22-
from rydstate.angular.angular_ket import CouplingScheme
2322
from rydstate.angular.angular_matrix_element import AngularMomentumQuantumNumbers, AngularOperatorType
23+
from rydstate.angular.utils import CouplingScheme
2424

2525
logger = logging.getLogger(__name__)
2626

src/rydstate/angular/utils.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
11
from __future__ import annotations
22

3+
import contextlib
4+
from typing import TYPE_CHECKING, Literal
5+
36
import numpy as np
47

8+
if TYPE_CHECKING:
9+
from rydstate.angular.angular_ket import AngularKetBase
10+
from rydstate.species.species_object import SpeciesObject
11+
12+
CouplingScheme = Literal["LS", "JJ", "FJ"]
13+
14+
15+
class InvalidQuantumNumbersError(ValueError):
16+
def __init__(self, ket: AngularKetBase, msg: str = "") -> None:
17+
_msg = f"Invalid quantum numbers for {ket!r}"
18+
if len(msg) > 0:
19+
_msg += f"\n {msg}"
20+
super().__init__(_msg)
21+
522

623
def minus_one_pow(n: float) -> int:
724
"""Calculate (-1)^n for an integer n and raise an error if n is not an integer."""
@@ -42,3 +59,57 @@ def get_possible_quantum_number_values(s_1: float, s_2: float, s_tot: float | No
4259
if s_tot is not None:
4360
return [s_tot]
4461
return [float(s) for s in np.arange(abs(s_1 - s_2), s_1 + s_2 + 1, 1)]
62+
63+
64+
def quantum_numbers_to_angular_ket(
65+
species: str | SpeciesObject,
66+
s_c: float | None = None,
67+
l_c: int = 0,
68+
j_c: float | None = None,
69+
f_c: float | None = None,
70+
s_r: float = 0.5,
71+
l_r: int | None = None,
72+
j_r: float | None = None,
73+
s_tot: float | None = None,
74+
l_tot: int | None = None,
75+
j_tot: float | None = None,
76+
f_tot: float | None = None,
77+
m: float | None = None,
78+
) -> AngularKetBase:
79+
r"""Return an AngularKet object in the corresponding coupling scheme from the given quantum numbers.
80+
81+
Args:
82+
species: Atomic species.
83+
s_c: Spin quantum number of the core electron (0 for Alkali, 0.5 for divalent atoms).
84+
l_c: Orbital angular momentum quantum number of the core electron.
85+
j_c: Total angular momentum quantum number of the core electron.
86+
f_c: Total angular momentum quantum number of the core (core electron + nucleus).
87+
s_r: Spin quantum number of the rydberg electron (always 0.5).
88+
l_r: Orbital angular momentum quantum number of the rydberg electron.
89+
j_r: Total angular momentum quantum number of the rydberg electron.
90+
s_tot: Total spin quantum number of all electrons.
91+
l_tot: Total orbital angular momentum quantum number of all electrons.
92+
j_tot: Total angular momentum quantum number of all electrons.
93+
f_tot: Total angular momentum quantum number of the atom (rydberg electron + core).
94+
m: Total magnetic quantum number.
95+
Optional, only needed for concrete angular matrix elements.
96+
97+
"""
98+
from rydstate.angular.angular_ket import AngularKetFJ, AngularKetJJ, AngularKetLS # noqa: PLC0415
99+
100+
with contextlib.suppress(InvalidQuantumNumbersError, ValueError):
101+
return AngularKetLS(
102+
s_c=s_c, l_c=l_c, s_r=s_r, l_r=l_r, s_tot=s_tot, l_tot=l_tot, j_tot=j_tot, f_tot=f_tot, m=m, species=species
103+
)
104+
105+
with contextlib.suppress(InvalidQuantumNumbersError, ValueError):
106+
return AngularKetJJ(
107+
s_c=s_c, l_c=l_c, j_c=j_c, s_r=s_r, l_r=l_r, j_r=j_r, j_tot=j_tot, f_tot=f_tot, m=m, species=species
108+
)
109+
110+
with contextlib.suppress(InvalidQuantumNumbersError, ValueError):
111+
return AngularKetFJ(
112+
s_c=s_c, l_c=l_c, j_c=j_c, f_c=f_c, s_r=s_r, l_r=l_r, j_r=j_r, f_tot=f_tot, m=m, species=species
113+
)
114+
115+
raise ValueError("Invalid combination of angular quantum numbers provided.")

src/rydstate/rydberg/rydberg_sqdt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import numpy as np
99

10-
from rydstate.angular.angular_ket import quantum_numbers_to_angular_ket
10+
from rydstate.angular.utils import quantum_numbers_to_angular_ket
1111
from rydstate.radial import RadialKet
1212
from rydstate.rydberg.rydberg_base import RydbergStateBase
1313
from rydstate.species import SpeciesObject

tests/test_angular_matrix_elements.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
from rydstate.angular.angular_matrix_element import AngularMomentumQuantumNumbers
99

1010
if TYPE_CHECKING:
11-
from rydstate.angular.angular_ket import AngularKetBase, CouplingScheme
11+
from rydstate.angular.angular_ket import AngularKetBase
1212
from rydstate.angular.angular_matrix_element import AngularOperatorType
13+
from rydstate.angular.utils import CouplingScheme
1314

1415
TEST_KET_PAIRS = [
1516
(

0 commit comments

Comments
 (0)