From 8671e55fb9e6d063846a8602436b8aa671eab2cb Mon Sep 17 00:00:00 2001 From: johannes-moegerle Date: Wed, 21 Jan 2026 17:33:18 +0100 Subject: [PATCH 1/2] improve db generation performance --- src/rydstate/species/species_object.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rydstate/species/species_object.py b/src/rydstate/species/species_object.py index 5ac1e01..b2d685e 100644 --- a/src/rydstate/species/species_object.py +++ b/src/rydstate/species/species_object.py @@ -269,6 +269,11 @@ def get_ionization_energy(self, unit: str | None = "hartree") -> PintFloat | flo return ionization_energy.magnitude return ionization_energy.to(unit, "spectroscopy").magnitude + @cached_property + def ionization_energy_au(self) -> float: + """Ionization energy in atomic units (Hartree).""" + return self.get_ionization_energy("hartree") + @overload def get_corrected_rydberg_constant(self, unit: None = None) -> PintFloat: ... @@ -373,7 +378,7 @@ def calc_nu( if n <= nist_n_max and use_nist_data: # try to use NIST data if (n, l, j_tot, s_tot) in self._nist_energy_levels: energy_au = self._nist_energy_levels[(n, l, j_tot, s_tot)] - energy_au -= self.get_ionization_energy("hartree") + energy_au -= self.ionization_energy_au # use the cached ionization energy for better performance return calc_nu_from_energy(self.reduced_mass_au, energy_au) logger.debug( "NIST energy levels for (n=%d, l=%d, j_tot=%s, s_tot=%s) not found, using quantum defect theory.", From 85a6b8a4f1f7e5fad77fd3e63c5ca8c63ca26e19 Mon Sep 17 00:00:00 2001 From: johannes-moegerle Date: Wed, 21 Jan 2026 18:15:35 +0100 Subject: [PATCH 2/2] improve get_nu --- src/rydstate/rydberg_state.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rydstate/rydberg_state.py b/src/rydstate/rydberg_state.py index c3eab6e..d023b65 100644 --- a/src/rydstate/rydberg_state.py +++ b/src/rydstate/rydberg_state.py @@ -242,7 +242,9 @@ def __repr__(self) -> str: return f"{self.__class__.__name__}({species.name}, {n=}, {l=}, {j=}, {f=}, {m=})" def get_nu(self) -> float: - return self.species.calc_nu(self.n, self.l, self.j, s_tot=1 / 2) + if not hasattr(self, "_nu"): + self._nu = self.species.calc_nu(self.n, self.l, self.j, s_tot=1 / 2) + return self._nu class RydbergStateAlkalineLS(RydbergStateBase):