Source code for multipie.util.util_harmonics

"""
For harmonics.
"""

import numpy as np

from multipie.core.group import Group


# ==================================================
[docs] def harmonics_decomposition(basis_pg, pg, rank, head="Q"): """ Harmonics decomposition in terms of basis PG. Args: basis_pg (str): basis PG. pg (str): PG expressed by basis PG. rank (int): rank. head (str, optional): type, Q/G ? Returns: list: decomposition info., [(harm_tag, [(coeff,basis)]. """ pg = Group(pg) basis_pg = Group(basis_pg) basis_hset = basis_pg.harmonics.select(l=rank, X=head) hset = pg.harmonics.select(l=rank, X=head) decomp = [] for h, v in hset.items(): for comp, U in enumerate(v[1].T): tag = Group.tag_multipole(h, comp, latex=True) c = [] for oh, ov in basis_hset.items(): for ocomp, basis_U in enumerate(ov[1].T): basis_tag = Group.tag_multipole(oh, ocomp, latex=True) ci = np.vdot(basis_U, U) if ci != 0: c.append(((ci, basis_tag))) decomp.append((tag, c)) return decomp