Source code for multipie.tag.tag_group

"""
TagGroup manages tag of group.
"""
from dataclasses import dataclass
from multipie.tag.tag import Tag
from multipie.tag.tag_list import TagList
from multipie.data.data_tag_space_group import _data_tag_space_group, _data_tag_space_group_crystal
from multipie.data.data_tag_point_group import (
    _data_tag_point_group,
    _data_tag_point_group_complex,
    _data_tag_point_group_real,
    _data_tag_point_group_crystal,
    _data_tag_point_group_cubic_series,
    _data_tag_point_group_hexagonal_series,
)
from multipie.const import __def_dict__


# ==================================================
[docs] @dataclass(frozen=True, order=True) class TagGroup(Tag): """ tag of group. """ no: int = 1 # group No. SS: str = "C_1" # Schoenflies symbol in LaTeX. IS: str = "C_1" # international symbol(short) in LaTeX. crystal: str = "triclinic" # crystal system. setting: str = "" # setting. pg: str = "" # point-group tag for space group, or "" for point group. subgroup: str = "cubic" # subgroup (cubic/hexagonal). # ================================================== @classmethod def _from_str(cls, tag): if tag.count("^") > 0: no, SS, IS, setting, crystal, pg = _data_tag_space_group[tag] else: no, SS, IS, setting, crystal = _data_tag_point_group[tag] pg = "" subgroup = __def_dict__["subgroup"][crystal] d = {"no": no, "SS": SS, "IS": IS, "setting": setting, "crystal": crystal, "pg": pg, "subgroup": subgroup} return d # ================================================== def __str__(self): return self.SS.replace("_", "").replace("{", "").replace("}", "") # ==================================================
[docs] def latex(self): return self.SS
# ==================================================
[docs] def info(self, latex=False): """ info. of point group. Args: latex (bool, optional): in LaTeX ? Returns: - int: No. of group. - str: Schoenflies symbol. - str: International (short) symbol. - str: setting. or - str: info. string in LaTeX. """ if latex: sp = r"\quad" r = f"No. {self.no}{sp}${self.SS}${sp}${self.IS}$" if self.setting: r += f"{sp}({self.setting} setting)" r += f"{sp}[ {self.crystal} ]" return r else: return self.no, self.SS, self.IS, self.setting
# ==================================================
[docs] def is_point_group(self): """ is point group ? Returns: bool: is point group ? """ return self.pg == ""
# ==================================================
[docs] def is_hexagonal_subgroup(self): """ is hexagonal subgroup ? Returns: bool: is hexagonal subgroup ? """ return self.subgroup == "hexagonal"
# ================================================== @property def lattice(self): """ Bravais lattice, (A/B/C/P/I/F/R) or null for point group. Returns: str: lattice letter. """ if self.is_point_group(): return "" else: return self.IS[0] # ==================================================
[docs] @classmethod def create(cls, crystal="", space_group=False): """ create group tags. Args: crystal (str, optional): crystal system, or "complex/real/cubic_series/hexagonal_series" for point group. space_group (bool, optional): space group or point_group ? Returns: TagList: tags. """ if space_group: if crystal in __def_dict__["crystal"]: return TagList.from_str(TagGroup, _data_tag_space_group_crystal[crystal]) else: return TagList.from_str(TagGroup, _data_tag_space_group.keys()) else: if crystal in __def_dict__["crystal"]: return TagList.from_str(TagGroup, _data_tag_point_group_crystal[crystal]) elif crystal == "complex": return TagList.from_str(TagGroup, _data_tag_point_group_complex) elif crystal == "real": return TagList.from_str(TagGroup, _data_tag_point_group_real) elif crystal == "cubic_series": return TagList.from_str(TagGroup, _data_tag_point_group_cubic_series) elif crystal == "hexagonal_series": return TagList.from_str(TagGroup, _data_tag_point_group_hexagonal_series) else: return TagList.from_str(TagGroup, _data_tag_point_group.keys())