def unicodeify_spacegroup(spacegroup_symbol): # TODO: move this to pymatgen if not spacegroup_symbol: return "" 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) symbol = symbol.replace("_" + str(number), unicode_number) overline = "\u0305" # u"\u0304" (macron) is also an option symbol = symbol.replace("$\\overline{", overline) symbol = symbol.replace("$", "") symbol = symbol.replace("{", "") symbol = symbol.replace("}", "") return symbol
def get_mineral_description(self) -> str: """Gets the mineral name and space group description. If the structure is a perfect match for a known prototype (e.g. the distance parameter is -1, the mineral name is the prototype name. If a structure is not a perfect match but similar to a known mineral, "-like" will be added to the mineral name. If the structure is a good match to a mineral but contains a different number of element types than the mineral prototype, "-derived" will be added to the mineral name. Returns: The description of the mineral name. """ spg_symbol = self._da.spg_symbol formula = self._da.formula if self.fmt == "latex": spg_symbol = latexify_spacegroup(self._da.spg_symbol) formula = latexify(formula) elif self.fmt == "unicode": spg_symbol = unicodeify_spacegroup(self._da.spg_symbol) formula = unicodeify(formula) elif self.fmt == "html": spg_symbol = htmlify_spacegroup(self._da.spg_symbol) formula = htmlify(formula) mineral_name = get_mineral_name(self._da.mineral) if mineral_name: desc = f"{formula} is {mineral_name} structured and" else: desc = f"{formula}" desc += " crystallizes in the {} {} space group.".format( self._da.crystal_system, spg_symbol ) return desc
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 symbol = symbol.replace("$\\overline{", overline) symbol = symbol.replace("$", "") symbol = symbol.replace("{", "") symbol = symbol.replace("}", "") return symbol
def test_latexify_spacegroup(self): self.assertEqual(latexify_spacegroup("Fd-3m"), "Fd$\\overline{3}$m") self.assertEqual(latexify_spacegroup("P2_1/c"), "P2$_{1}$/c")