Skip to content

Commit 9cb24a4

Browse files
fix calc_reduced_matrix_element return type
1 parent 24ec924 commit 9cb24a4

1 file changed

Lines changed: 26 additions & 20 deletions

File tree

src/rydstate/rydberg_state/rydberg_ket.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def calc_reduced_matrix_element(
6161
@overload
6262
def calc_reduced_matrix_element(self, other: RydbergKet, operator: MatrixElementOperator, unit: str) -> float: ...
6363

64-
def calc_reduced_matrix_element( # noqa: C901, PLR0912
64+
def calc_reduced_matrix_element(
6565
self, other: RydbergKet, operator: MatrixElementOperator, unit: str | None = None
6666
) -> PintFloat | float:
6767
r"""Calculate the reduced matrix element.
@@ -88,10 +88,30 @@ def calc_reduced_matrix_element( # noqa: C901, PLR0912
8888
The reduced matrix element for the given operator.
8989
9090
"""
91+
matrix_element_au = self._calc_reduced_matrix_element_au(other, operator)
92+
93+
if unit == "a.u.":
94+
return matrix_element_au
95+
96+
k_radial, _k_angular = MatrixElementOperatorRanks[operator]
97+
radial_unit: PintFloat = ureg.Quantity(1, "bohr_radius") ** k_radial
98+
matrix_element_unit: PintFloat
99+
if operator == "magnetic_dipole":
100+
matrix_element_unit = radial_unit * ureg.Quantity(2, "bohr_magneton")
101+
elif operator.startswith("electric_"):
102+
matrix_element_unit = radial_unit * ureg.Quantity(1, "e")
103+
else:
104+
raise NotImplementedError(f"Operator {operator} not implemented.")
105+
106+
if unit is None:
107+
return matrix_element_au * matrix_element_unit.to_base_units() # type: ignore [no-any-return]
108+
return matrix_element_au * matrix_element_unit.to(unit).magnitude
109+
110+
def _calc_reduced_matrix_element_au(self, other: RydbergKet, operator: MatrixElementOperator) -> float:
91111
if operator == "electric_dipole":
92-
matrix_element = self.calc_reduced_matrix_element(other, "electric_dipole_rydberg", unit)
112+
matrix_element = self._calc_reduced_matrix_element_au(other, "electric_dipole_rydberg")
93113
if self.element_properties.number_valence_electrons == 2:
94-
matrix_element += self.calc_reduced_matrix_element(other, "electric_dipole_core", unit)
114+
matrix_element += self._calc_reduced_matrix_element_au(other, "electric_dipole_core")
95115
return matrix_element
96116

97117
try:
@@ -127,33 +147,19 @@ def calc_reduced_matrix_element( # noqa: C901, PLR0912
127147
raise NotImplementedError(f"Operator {operator} not implemented.")
128148

129149
if angular_matrix_element == 0:
130-
return 0
150+
return 0.0
131151

132152
if "core" not in operator:
133153
radial_matrix_element = self.radial.calc_matrix_element(other.radial, k_radial, unit="a.u.")
134154
matrix_element = prefactor * angular_matrix_element * radial_matrix_element
135155
else:
136156
core_radial_matrix_element = self._calc_core_radial_matrix_element_au(other, k_radial)
137157
if core_radial_matrix_element == 0:
138-
return 0
158+
return 0.0
139159
rydberg_radial_overlap = self.radial.calc_overlap(other.radial)
140160
matrix_element = prefactor * angular_matrix_element * core_radial_matrix_element * rydberg_radial_overlap
141161

142-
if unit == "a.u.":
143-
return matrix_element
144-
145-
radial_unit: PintFloat = ureg.Quantity(1, "bohr_radius") ** k_radial
146-
matrix_element_unit: PintFloat
147-
if operator == "magnetic_dipole":
148-
matrix_element_unit = radial_unit * ureg.Quantity(2, "bohr_magneton")
149-
elif operator.startswith("electric_"):
150-
matrix_element_unit = radial_unit * ureg.Quantity(1, "e")
151-
else:
152-
raise NotImplementedError(f"Operator {operator} not implemented.")
153-
154-
if unit is None:
155-
return matrix_element * matrix_element_unit.to_base_units() # type: ignore [no-any-return]
156-
return matrix_element * matrix_element_unit.to(unit).magnitude
162+
return matrix_element
157163

158164
def _calc_core_radial_matrix_element_au(self, other: RydbergKet, k_radial: int) -> float:
159165
r"""Calculate the radial matrix element :math:`\langle self_c | r^{k_{radial}} | other_c \rangle` in a.u.

0 commit comments

Comments
 (0)