From 031db92164d3ca7ac16162114cbd65d62f54d39a Mon Sep 17 00:00:00 2001 From: "Haoyu (Daniel)" Date: Sat, 23 Nov 2024 13:20:07 +0800 Subject: [PATCH 1/3] add warning for isotope conversion --- src/pymatgen/core/periodic_table.py | 1 + tests/core/test_periodic_table.py | 39 ++++++++++++++++++----------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/pymatgen/core/periodic_table.py b/src/pymatgen/core/periodic_table.py index a981c74578f..86fd3a58d2a 100644 --- a/src/pymatgen/core/periodic_table.py +++ b/src/pymatgen/core/periodic_table.py @@ -1646,6 +1646,7 @@ def get_el_sp(obj: int | SpeciesLike) -> Element | Species | DummySpecies: # If obj is already an Element or Species, return as is if isinstance(obj, Element | Species | DummySpecies): if getattr(obj, "_is_named_isotope", False): + warnings.warn(f"Named isotope {obj.name} would be converted to {obj.symbol}", stacklevel=2) return Element(obj.name) if isinstance(obj, Element) else Species(str(obj)) return obj diff --git a/tests/core/test_periodic_table.py b/tests/core/test_periodic_table.py index a4a696a4f56..5b70502d889 100644 --- a/tests/core/test_periodic_table.py +++ b/tests/core/test_periodic_table.py @@ -702,20 +702,31 @@ def test_species_electronic_structure(self): assert n_electron_el - n_electron_sp == ox, f"Failure for {el} {ox}" -def test_get_el_sp(): - assert get_el_sp("Fe2+") == Species("Fe", 2) - assert get_el_sp("3") == Element.Li - assert get_el_sp(5) == Element.B - assert get_el_sp("3.0") == Element.Li - assert get_el_sp("+3.0") == Element.Li - assert get_el_sp(2.0) == Element.He - assert get_el_sp("U") == Element.U - assert get_el_sp("X2+") == DummySpecies("X", 2) - assert get_el_sp("Mn3+") == Species("Mn", 3) - assert get_el_sp("X2+spin=5") == DummySpecies("X", 2, spin=5) - - with pytest.raises(ValueError, match="Can't parse Element or Species from None"): - get_el_sp(None) +class TestGetElSp: + def test_regular(self): + assert get_el_sp("Fe2+") == Species("Fe", 2) + assert get_el_sp("3") is Element.Li + assert get_el_sp(5) is Element.B + assert get_el_sp("3.0") is Element.Li + assert get_el_sp("+3.0") is Element.Li + assert get_el_sp(2.0) is Element.He + assert get_el_sp("U") is Element.U + assert get_el_sp("X2+") == DummySpecies("X", 2) + assert get_el_sp("Mn3+") == Species("Mn", 3) + assert get_el_sp("X2+spin=5") == DummySpecies("X", 2, spin=5) + + def test_invalid_input(self): + with pytest.raises(ValueError, match="Can't parse Element or Species from None"): + get_el_sp(None) + + def test_isotope_conversion_warning(self): + # Test Element + with pytest.warns(match="Named isotope D would be converted to H"): + get_el_sp(Element.D) + + # Test Species + with pytest.warns(match="Named isotope D would be converted to H"): + get_el_sp(Species("D")) def test_element_type(): From 4be09a7596c1fa356fd5ffe3afada1743d672efe Mon Sep 17 00:00:00 2001 From: "Haoyu (Daniel)" Date: Sat, 23 Nov 2024 13:27:18 +0800 Subject: [PATCH 2/3] revert to equality check --- tests/core/test_periodic_table.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/core/test_periodic_table.py b/tests/core/test_periodic_table.py index 5b70502d889..9ac377d4572 100644 --- a/tests/core/test_periodic_table.py +++ b/tests/core/test_periodic_table.py @@ -705,12 +705,12 @@ def test_species_electronic_structure(self): class TestGetElSp: def test_regular(self): assert get_el_sp("Fe2+") == Species("Fe", 2) - assert get_el_sp("3") is Element.Li - assert get_el_sp(5) is Element.B - assert get_el_sp("3.0") is Element.Li - assert get_el_sp("+3.0") is Element.Li - assert get_el_sp(2.0) is Element.He - assert get_el_sp("U") is Element.U + assert get_el_sp("3") == Element.Li + assert get_el_sp(5) == Element.B + assert get_el_sp("3.0") == Element.Li + assert get_el_sp("+3.0") == Element.Li + assert get_el_sp(2.0) == Element.He + assert get_el_sp("U") == Element.U assert get_el_sp("X2+") == DummySpecies("X", 2) assert get_el_sp("Mn3+") == Species("Mn", 3) assert get_el_sp("X2+spin=5") == DummySpecies("X", 2, spin=5) From 399a5f2760ac5dca86d090406dfb6d8f81d6a310 Mon Sep 17 00:00:00 2001 From: "Haoyu (Daniel)" Date: Sat, 23 Nov 2024 15:37:31 +0800 Subject: [PATCH 3/3] revert changes --- src/pymatgen/core/periodic_table.py | 3 --- tests/core/test_periodic_table.py | 39 +++++++++++------------------ 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/src/pymatgen/core/periodic_table.py b/src/pymatgen/core/periodic_table.py index 86fd3a58d2a..6ca36fbd186 100644 --- a/src/pymatgen/core/periodic_table.py +++ b/src/pymatgen/core/periodic_table.py @@ -1645,9 +1645,6 @@ def get_el_sp(obj: int | SpeciesLike) -> Element | Species | DummySpecies: """ # If obj is already an Element or Species, return as is if isinstance(obj, Element | Species | DummySpecies): - if getattr(obj, "_is_named_isotope", False): - warnings.warn(f"Named isotope {obj.name} would be converted to {obj.symbol}", stacklevel=2) - return Element(obj.name) if isinstance(obj, Element) else Species(str(obj)) return obj # If obj is an integer, return the Element with atomic number obj diff --git a/tests/core/test_periodic_table.py b/tests/core/test_periodic_table.py index 9ac377d4572..a4a696a4f56 100644 --- a/tests/core/test_periodic_table.py +++ b/tests/core/test_periodic_table.py @@ -702,31 +702,20 @@ def test_species_electronic_structure(self): assert n_electron_el - n_electron_sp == ox, f"Failure for {el} {ox}" -class TestGetElSp: - def test_regular(self): - assert get_el_sp("Fe2+") == Species("Fe", 2) - assert get_el_sp("3") == Element.Li - assert get_el_sp(5) == Element.B - assert get_el_sp("3.0") == Element.Li - assert get_el_sp("+3.0") == Element.Li - assert get_el_sp(2.0) == Element.He - assert get_el_sp("U") == Element.U - assert get_el_sp("X2+") == DummySpecies("X", 2) - assert get_el_sp("Mn3+") == Species("Mn", 3) - assert get_el_sp("X2+spin=5") == DummySpecies("X", 2, spin=5) - - def test_invalid_input(self): - with pytest.raises(ValueError, match="Can't parse Element or Species from None"): - get_el_sp(None) - - def test_isotope_conversion_warning(self): - # Test Element - with pytest.warns(match="Named isotope D would be converted to H"): - get_el_sp(Element.D) - - # Test Species - with pytest.warns(match="Named isotope D would be converted to H"): - get_el_sp(Species("D")) +def test_get_el_sp(): + assert get_el_sp("Fe2+") == Species("Fe", 2) + assert get_el_sp("3") == Element.Li + assert get_el_sp(5) == Element.B + assert get_el_sp("3.0") == Element.Li + assert get_el_sp("+3.0") == Element.Li + assert get_el_sp(2.0) == Element.He + assert get_el_sp("U") == Element.U + assert get_el_sp("X2+") == DummySpecies("X", 2) + assert get_el_sp("Mn3+") == Species("Mn", 3) + assert get_el_sp("X2+spin=5") == DummySpecies("X", 2, spin=5) + + with pytest.raises(ValueError, match="Can't parse Element or Species from None"): + get_el_sp(None) def test_element_type():