Source code for multipie.tag.tag_irrep
"""
TagIrrep manages tag of irreducible representation.
"""
from dataclasses import dataclass
from multipie.tag.tag import Tag
from multipie.tag.tag_list import TagList
from multipie.data.data_tag_irrep import _data_tag_irrep
from multipie.const import __def_dict__
# ==================================================
[docs]
@dataclass(frozen=True, order=True)
class TagIrrep(Tag):
"""
tag of irreducible representation.
"""
tag: str = "" # tag of irrep.
dim: int = 1 # dimension.
parity: str = "" # null/g/u.
cmplx: str = "" # null/a/b.
head: str = ""
sub: str = ""
sup: str = ""
# ==================================================
@classmethod
def _from_str(cls, tag):
head = tag[0]
sub = tag[1:]
sub = sub.replace("'", "")
np = tag.count("'")
sup = "'" * np
if tag.count("a"):
c = "a"
d = 1
elif tag.count("b"):
c = "b"
d = 1
else:
c = ""
d = __def_dict__["irrep_dim"][tag[0]]
p = ""
if tag.count("g"):
p = "g"
elif tag.count("u"):
p = "u"
d = {"tag": tag, "dim": d, "parity": p, "cmplx": c, "head": head, "sub": sub, "sup": sup}
return d
# ==================================================
def __str__(self):
s = self.head + self.sub + self.sup
return s
# ==================================================
[docs]
def latex(self):
sup = self.sup.replace("'", r"\prime")
sub = self.sub
if sub.count("a"):
sup += "(a)"
sub = sub.replace("a", "")
elif sub.count("b"):
sup += "(b)"
sub = sub.replace("b", "")
s = self.head
if sub:
s += "_{" + sub + "}"
if sup:
s += "^{" + sup + "}"
return s
# ==================================================
[docs]
@classmethod
def create(cls):
"""
irrep. tags for point groups.
Returns:
TagList: all irrep. tags.
"""
return TagList.from_str(TagIrrep, _data_tag_irrep)