55
66import 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+ )
913from rydstate .basis .basis_base import BasisBase
1014from rydstate .rydberg .rydberg_mqdt import RydbergStateMQDT
1115from rydstate .rydberg .rydberg_sqdt import RydbergStateSQDT
1721 convert ,
1822 )
1923
24+ from rydstate .angular .angular_ket import AngularKetBase
2025 from rydstate .species import SpeciesObject
2126
2227logger = logging .getLogger (__name__ )
4247
4348
4449class 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