def test_that_ionic_fractions_are_set_correctly(self, test_name): errmsg = "" elements_actual = self.instances[test_name].base_particles inputs = tests[test_name]["inputs"] if isinstance(inputs, dict): input_keys = list(tests[test_name]["inputs"].keys()) input_keys = sorted( input_keys, key=lambda k: ( atomic_number(k), mass_number(k) if Particle(k).isotope else 0, ), ) for element, input_key in zip(elements_actual, input_keys): expected = tests[test_name]["inputs"][input_key] if isinstance(expected, u.Quantity): expected = np.array(expected.value / np.sum(expected.value)) actual = self.instances[test_name].ionic_fractions[element] if not np.allclose(actual, expected): errmsg += ( f"\n\nThere is a discrepancy in ionic fractions for " f"({test_name}, {element}, {input_key})\n" f" expected = {expected}\n" f" actual = {actual}") if not isinstance(actual, np.ndarray) or isinstance( actual, u.Quantity): raise ParticleError( f"\n\nNot a numpy.ndarray: ({test_name}, {element})") else: elements_expected = { particle_symbol(element) for element in inputs } assert set( self.instances[test_name].base_particles) == elements_expected for element in elements_expected: assert all( np.isnan( self.instances[test_name].ionic_fractions[element])) if errmsg: pytest.fail(errmsg)
def test_that_elements_and_isotopes_are_sorted(self, test_name): elements = self.instances[test_name].base_particles before_sorting = [] for element in elements: atomic_numb = atomic_number(element) try: mass_numb = mass_number(element) except InvalidIsotopeError: mass_numb = 0 before_sorting.append((atomic_numb, mass_numb)) after_sorting = sorted(before_sorting) assert before_sorting == after_sorting, ( f"Elements/isotopes are not sorted for test='{test_name}':\n" f" before_sorting = {before_sorting}\n" f" after_sorting = {after_sorting}\n" f"where above is (atomic_number, mass_number if isotope else 0)")
def sort_key(k): return atomic_number(k), mass_number(k) if Particle( k).isotope else 0