diff --git a/setup.py b/setup.py index e2b4453..8973d22 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( name="pyvalem", - version="2.5.6", + version="2.5.7", description="A package for managing simple chemical species and states", long_description=long_description, long_description_content_type="text/x-rst", diff --git a/src/pyvalem/stateful_species.py b/src/pyvalem/stateful_species.py index f3e1a41..ffb1325 100644 --- a/src/pyvalem/stateful_species.py +++ b/src/pyvalem/stateful_species.py @@ -38,7 +38,7 @@ def __repr__(self): """Return a canonical text representation of the StatefulSpecies.""" if self.states: states_sorted = sorted( - self.states, key=lambda state: (STATES[type(state)], repr(state)) + self.states, key=lambda state: (STATES[type(state)], state.ordering) ) return "{} {}".format( self.formula, ";".join(repr(state) for state in states_sorted) diff --git a/src/pyvalem/states/_base_state.py b/src/pyvalem/states/_base_state.py index 50066ee..ffdb60b 100644 --- a/src/pyvalem/states/_base_state.py +++ b/src/pyvalem/states/_base_state.py @@ -66,3 +66,7 @@ def __ne__(self, other): def __hash__(self): return hash(self.__repr__()) + + @property + def ordering(self): + return repr(self) diff --git a/src/pyvalem/states/key_value_pair.py b/src/pyvalem/states/key_value_pair.py index cfab1f9..071cd0f 100644 --- a/src/pyvalem/states/key_value_pair.py +++ b/src/pyvalem/states/key_value_pair.py @@ -51,3 +51,9 @@ def _parse_state(self, state_str): def __repr__(self): return self.state_str + + @property + def ordering(self): + if self.key == "n": + return 0 + return ord(self.key) diff --git a/tests/test_stateful_species.py b/tests/test_stateful_species.py index 85f9d9f..13fa69d 100644 --- a/tests/test_stateful_species.py +++ b/tests/test_stateful_species.py @@ -94,7 +94,7 @@ def test_stateful_species_repr(self): ss2 = StatefulSpecies("(235U) l=0;***;n=1") ss3 = StatefulSpecies("(235U) l=0;n=1;***") self.assertEqual(repr(ss2), repr(ss3)) - self.assertEqual(repr(ss2), "(235U) 3*;l=0;n=1") + self.assertEqual(repr(ss2), "(235U) 3*;n=1;l=0") for ss_text in ["C+ 4P;2s2.2p1", "C+ 2s2.2p1;4P"]: self.assertEqual(repr(StatefulSpecies(ss_text)), "C+ 2s2.2p;4P") @@ -102,6 +102,10 @@ def test_stateful_species_repr(self): for ss_text in ["C+ 2P;2s2.2p1", "C+ 2s2.2p1;2P"]: self.assertEqual(repr(StatefulSpecies(ss_text)), "C+ 2s2.2p;2P") + def test_stateful_species_key_value_pair_ordering(self): + ss1 = StatefulSpecies("H n=3;l=1") + self.assertEqual(repr(ss1), "H n=3;l=1") + if __name__ == "__main__": unittest.main()