Skip to content

Commit 75fae8b

Browse files
basis mqdt updates/fixes
1 parent e4317cb commit 75fae8b

1 file changed

Lines changed: 38 additions & 12 deletions

File tree

src/rydstate/basis/basis_mqdt.py

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55

66
import numpy as np
77

8-
from rydstate.angular.angular_ket import julia_qn_to_dict
8+
from rydstate.angular.angular_ket import (
9+
AngularKetDummy,
10+
julia_qn_to_dict,
11+
quantum_numbers_to_angular_ket,
12+
)
913
from rydstate.basis.basis_base import BasisBase
1014
from rydstate.rydberg.rydberg_mqdt import RydbergStateMQDT
1115
from rydstate.rydberg.rydberg_sqdt import RydbergStateSQDT
@@ -17,6 +21,7 @@
1721
convert,
1822
)
1923

24+
from rydstate.angular.angular_ket import AngularKetBase
2025
from rydstate.species import SpeciesObject
2126

2227
logger = logging.getLogger(__name__)
@@ -42,7 +47,7 @@
4247

4348

4449
class BasisMQDT(BasisBase[RydbergStateMQDT[Any]]):
45-
def __init__(
50+
def __init__( # noqa: PLR0915, C901, PLR0912
4651
self,
4752
species: str | SpeciesObject,
4853
n_min: int = 0,
@@ -73,7 +78,7 @@ def __init__(
7378
jtot_min = min(l, abs(l - 1))
7479
jtot_max = l + 1
7580
for f_tot in np.arange(abs(jtot_min - i_c), jtot_max + i_c + 1):
76-
models = jl.MQDT.get_fmodels(jl_species, l, f_tot)
81+
models = jl.MQDT.get_fmodels(jl_species, l, float(f_tot))
7782
self.models.extend(models)
7883

7984
n_min_high_l = 25
@@ -87,26 +92,47 @@ def __init__(
8792
continue
8893
_n_min = n_min_high_l
8994

90-
logger.debug(f"{model.name}:")
95+
logger.debug("model name: %s", model.name)
9196
states = jl.MQDT.eigenstates(_n_min, n_max, model, parameters)
9297
jl_states.append(states)
93-
logger.debug(f" found nu_min={min(states.n)}, nu_max={max(states.n)}, total states={len(states.n)}")
98+
99+
if len(states.n) == 0:
100+
logger.debug(" no states found")
101+
else:
102+
logger.debug(" nu_min=%s, nu_max=%s, total states=%d", min(states.n), max(states.n), len(states.n))
94103

95104
jl_basis = jl.basisarray(convert(jl.Vector, jl_states), convert(jl.Vector, self.models))
96105

97106
logger.debug("Generated state table with %d states", len(jl_basis.states))
98107

99108
self.states = []
100109
for jl_state in jl_basis.states:
101-
coeffs = jl_state.coeff
102-
nus = jl_state.nu
110+
nus = jl_state.nu_list
103111
nu_energy = jl_state.energy
104-
qns = jl_state.channels.i
105-
qns = [julia_qn_to_dict(qn) for qn in qns]
112+
angular_kets: list[AngularKetBase] = []
113+
iqn = 0
114+
model = jl_state.model
115+
for i, core in enumerate(model.core):
116+
if not core:
117+
name = model.name + model.terms[i]
118+
angular_kets.append(AngularKetDummy(name, f_tot=model.f_tot))
119+
continue
120+
121+
qn = julia_qn_to_dict(jl_state.channels.i[iqn])
122+
try:
123+
angular_kets.append(quantum_numbers_to_angular_ket(species=self.species, **qn)) # type: ignore[arg-type]
124+
except ValueError:
125+
name = model.name + model.terms[i]
126+
angular_kets.append(AngularKetDummy(name, f_tot=model.f_tot))
127+
128+
iqn += 1
106129

107-
sqdt_states = [RydbergStateSQDT(species, nu=nu, **qn) for nu, qn in zip(nus, qns)]
130+
sqdt_states = [
131+
RydbergStateSQDT.from_angular_ket(species, angular_ket, nu=nu)
132+
for nu, angular_ket in zip(nus, angular_kets)
133+
]
108134
# check angular and radial are created correctly
109-
[(s.angular, s.radial) for s in sqdt_states]
135+
assert len([(s.angular, s.radial) for s in sqdt_states]) > 0
110136

111-
mqdt_state = RydbergStateMQDT(coeffs, sqdt_states, nu_energy=nu_energy, warn_if_not_normalized=False)
137+
mqdt_state = RydbergStateMQDT(jl_state.coefficients, sqdt_states, nu_energy=nu_energy)
112138
self.states.append(mqdt_state)

0 commit comments

Comments
 (0)