From cc4bf0a58bfc50d506318b6017771b0375dd1921 Mon Sep 17 00:00:00 2001 From: Min-Hsueh Chiu Date: Thu, 30 Jul 2026 15:29:40 -0700 Subject: [PATCH 1/2] fix htmlify_spacegroup and use pymatgen's unicodeify_spacegroup --- .../emmet/core/featurization/robocrys/util.py | 49 ++----------------- emmet-core/emmet/core/io/pymatgen.py | 1 + .../tests/featurization/robocrys/test_util.py | 10 +++- 3 files changed, 13 insertions(+), 47 deletions(-) diff --git a/emmet-core/emmet/core/featurization/robocrys/util.py b/emmet-core/emmet/core/featurization/robocrys/util.py index f01c773c68..e93fe990e1 100644 --- a/emmet-core/emmet/core/featurization/robocrys/util.py +++ b/emmet-core/emmet/core/featurization/robocrys/util.py @@ -21,7 +21,7 @@ from collections import defaultdict from typing import TYPE_CHECKING -from emmet.core.io.pymatgen import Element, Species, get_el_sp, latexify_spacegroup +from emmet.core.io.pymatgen import Element, Species, get_el_sp if TYPE_CHECKING: from pathlib import Path @@ -215,51 +215,10 @@ def superscript_number(string): return string -def unicodeify_spacegroup(spacegroup_symbol: str) -> str: - """Formats a spacegroup using unicode symbols. - - E.g. Fd-3m -> Fd̅3m - - Args: - spacegroup_symbol: A spacegroup symbol. - - Returns: - The unicode formatted spacegroup symbol. - """ - subscript_unicode_map = { - 0: "₀", - 1: "₁", - 2: "₂", - 3: "₃", - 4: "₄", - 5: "₅", - 6: "₆", - 7: "₇", - 8: "₈", - 9: "₉", - } - - symbol = latexify_spacegroup(spacegroup_symbol) - - for number, unicode_number in subscript_unicode_map.items(): - symbol = symbol.replace("$_{" + str(number) + "}$", unicode_number) - - overline = "\u0305" # u"\u0304" (macron) is also an option - for char, rep in { - "$\\overline{": overline, - "$": "", - "{": "", - "}": "", - }.items(): - symbol = symbol.replace(char, rep) - - return symbol - - def htmlify_spacegroup(spacegroup_symbol: str) -> str: """Formats a spacegroup using unicode symbols. - E.g. P-42_1m -> P̅421m + E.g. P-42_1m -> P4̅21m Args: spacegroup_symbol: A spacegroup symbol. @@ -268,8 +227,8 @@ def htmlify_spacegroup(spacegroup_symbol: str) -> str: The html formatted spacegroup symbol. """ overline = "\u0305" # u"\u0304" (macron) is also an option - symbol = re.sub(r"_(\d+)", r"\1", spacegroup_symbol) - symbol = re.sub(r"-(\d)", rf"{overline}\1", symbol) + symbol = re.sub(r"_(\d)", r"\1", spacegroup_symbol) + symbol = re.sub(r"-(\d)", rf"\1{overline}", symbol) return symbol diff --git a/emmet-core/emmet/core/io/pymatgen.py b/emmet-core/emmet/core/io/pymatgen.py index c898406672..ff3d62c54a 100644 --- a/emmet-core/emmet/core/io/pymatgen.py +++ b/emmet-core/emmet/core/io/pymatgen.py @@ -18,6 +18,7 @@ "htmlify": "util.string", "latexify": "util.string", "latexify_spacegroup": "util.string", + "unicodeify_spacegroup": "util.string", "unicodeify": "util.string", "Lattice": "core.lattice", "Specie": "core.periodic_table", diff --git a/emmet-core/tests/featurization/robocrys/test_util.py b/emmet-core/tests/featurization/robocrys/test_util.py index 1b2de881a2..20d221301a 100644 --- a/emmet-core/tests/featurization/robocrys/test_util.py +++ b/emmet-core/tests/featurization/robocrys/test_util.py @@ -88,12 +88,18 @@ def test_get_formatted_el(): def test_unicodeify_spacegroup(): spg_symbol = unicodeify_spacegroup("P-42_1m") - assert spg_symbol == "P̅42₁m" + assert spg_symbol == "P4̅2₁m" + + spg_symbol2 = unicodeify_spacegroup("P2_12_12_1") + assert spg_symbol2 == "P2₁2₁2₁" def test_htmlify_spacegroup(): spg_symbol = htmlify_spacegroup("P-42_1m") - assert spg_symbol == "P̅421m" + assert spg_symbol == "P4̅21m" + + spg_symbol2 = htmlify_spacegroup("P2_12_12_1") + assert spg_symbol2 == "P212121" def test_load_condense_structure_json(test_condensed_structures): From 107cca640457cdb62dca940c65af0a0bc38fb2cf Mon Sep 17 00:00:00 2001 From: Min-Hsueh Chiu Date: Thu, 30 Jul 2026 15:39:09 -0700 Subject: [PATCH 2/2] add back unicodeify_spacegroup --- emmet-core/emmet/core/featurization/robocrys/util.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/emmet-core/emmet/core/featurization/robocrys/util.py b/emmet-core/emmet/core/featurization/robocrys/util.py index e93fe990e1..40e78396b1 100644 --- a/emmet-core/emmet/core/featurization/robocrys/util.py +++ b/emmet-core/emmet/core/featurization/robocrys/util.py @@ -21,11 +21,13 @@ from collections import defaultdict from typing import TYPE_CHECKING -from emmet.core.io.pymatgen import Element, Species, get_el_sp +from emmet.core.io.pymatgen import Element, Species, get_el_sp, unicodeify_spacegroup if TYPE_CHECKING: from pathlib import Path +__all__ = ["unicodeify_spacegroup"] + def _get_common_formulas() -> dict[str, str]: """Retrieve common formula information from stored data."""