Commit 050c8d08 authored by Michele Maris's avatar Michele Maris
Browse files

u

parent f2d9c619
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ from .montecarlo_fitting import EnsembleFitting_Base
from .bar_plots import multi_vertical_bars
#from .bars_collections import multi_vertical_bars
from .collate_images import collate_images_r1_c2, collate_images_r2_c1, collate_images_r2_c2
from .key_blocks import key_blocks

# planck legacy is under editing
#from .planck_legacy import cosmological_dipole
+57 −0
Original line number Diff line number Diff line
import numpy as np

__description__=""" blocks of keys in a pandas table """

class key_blocks :
    """ blocks of keys in a pandas table """
    @property
    def cblock(self) :
        "list of blocks"
        return self._cblock
    @property
    def cblocklst(self) :
        """content of each block"""
        return self._cblocklst
    @property
    def cblocktokens(self) :
        """tokens of each block"""
        return self._cblocktokens
    @property
    def lkeys(self) :
        """list of keys"""
        return self._cblocktokens
    def __getitem__(self,this) :
        if not this in self._cblock.keys() :
            raise Exception(f'{this} not a valid block name')
        return [this,self._cblock[this],self._cblocktokens[this]]
    def keys(self) :
        return self._cblock.keys()
    def __init__(self,list_keys) :
        """list_keys: list of keys in a pandas dataframe"""
        self._cblock={}
        current='_main_'
        self._cblock[current]=[0,-1]
        self._cblocklst={}
        self._cblocktokens={}
        self._lkeys=[]
        for ik,k in enumerate(list_keys) :
            self._lkeys.append(k)
            if k[0]=='_' and k[-1]=='_' and  current!=k :
                if current != '' :
                    self._cblock[current][1]=ik-1
                    self._cblocklst[current]=self._lkeys[self._cblock[current][0]:self._cblock[current][1]+1]
                current=k
                self._cblock[current]=[ik+1,-1]
        if self._cblock[current][1]<0 :
            self._cblock[current][1]=len(list_keys)-1
            self._cblocklst[current]=self._lkeys[self._cblock[current][0]:self._cblock[current][1]+1]
        for cbk in self._cblock.keys() :
            ll=[k.split('/') for k in self._cblocklst[cbk]]
            self._nn=np.array([len(k) for k in ll]).max()
            #print(cbk,self._nn)
            ll1=[[] for k in range(self._nn)]
            for k in ll :
                for ik1,k1 in enumerate(k) :
                    ll1[ik1].append([k1])
            ll2=[list(np.unique(np.concatenate(k1))) for k1 in ll1 if len(k1)!=0]
            self._cblocktokens[cbk]=ll2