Source code for multipie.harmonics.harmonics_pg

"""
HarmonicsPG manages a set of point-group harmonics (real).
"""
from multipie.harmonics.harmonics import Harmonics
from multipie.tag.tag_group import TagGroup
from multipie.tag.tag_multipole import TagMultipole
from multipie.tag.tag_list import TagList
from multipie.data.data_harmonics import (
    _data_harmonics_polar,
    _data_harmonics_axial,
)
from multipie.data.data_harmonics_real import (
    _data_harmonics_polar_real,
    _data_harmonics_axial_real,
)


# ==================================================
[docs] class HarmonicsPG(dict): # dict of (multipole tag, harmonics), {TagMultipole: Harmonics}. """ a set of point-group harmonics (real). Attributes: tag (TagGroup): point-group tag. """ # ================================================== def __init__(self, pg_tag): """ initialize the class. Args: pg_tag (TagGroup or str): tag of point group. """ pg_tag = TagGroup(str(pg_tag)) self.tag = pg_tag """point-group tag.""" polar = _data_harmonics_polar for k, v in _data_harmonics_polar_real.items(): polar[k] = v axial = _data_harmonics_axial for k, v in _data_harmonics_axial_real.items(): axial[k] = v hset = (polar, axial) d = {} for i in [0, 1]: for tag, hstr in hset[i][str(self.tag)].items(): m_tag = TagMultipole(tag) d[m_tag] = Harmonics(tag, *hstr) self.update(sorted(d.items())) # ================================================== def __str__(self): return str(self.tag) # ================================================== def __repr__(self): return repr(self.tag) # ================================================== def latex(self): return self.tag.latex() # ==================================================
[docs] def group(self, rank, axial=False): """ group for given rank and i_type. Args: rank (int): rank. axial (bool, optional): axial ? Returns: [(str,int)]: irreps. with given rank and i_type, (irrep., multiplicity). """ head = "G" if axial else "Q" tags = self.key_list().select(rank=rank, head=head) g = list(sorted({(i.irrep, i.mul) for i in tags})) return g
# ==================================================
[docs] def select(self, **kwargs) -> list[Harmonics]: """ select harmonics with given keywords. Args: kwargs (dict): select conditions for harmonics, acceptable keywords are common to TagMultipole. Returns: [Harmonics]: selected harmonics. """ tags = self.key_list().select(**kwargs) hs = [self.get(i) for i in tags] hs = sorted(hs, key=lambda i: i.tag.rank) return hs
# ================================================== def __getitem__(self, tag) -> Harmonics: return self.get(TagMultipole(str(tag)).to_harmonics()) # ================================================== def key_list(self): return TagList(self.keys())