| 3 | from ..manager import TableManager |
| 4 | |
| 5 | class TablePlus(): |
| 6 | def __init__(self, data, title=None): |
| 7 | self.set_title(title) |
| 8 | self.dirty, self.range = None, None |
| 9 | self.default = [3, (0,0,0), (0,0,255), 'Text'] |
| 10 | self.set_data(data) |
| 11 | self.snap = None |
| 12 | |
| 13 | def update(self, value=True): self.dirty=value |
| 14 | |
| 15 | def set_title(self, title): |
| 16 | self.title = TableManager.name(title) |
| 17 | |
| 18 | def get_nbytes(self): |
| 19 | return self.data.memory_usage().sum() |
| 20 | |
| 21 | def get_str(self, row, col): |
| 22 | ser = self.data[self.columns[col]] |
| 23 | |
| 24 | def set_data(self, data): |
| 25 | self.data, self.props = data, None |
| 26 | self.rowmsk, self.colmsk = [],[] |
| 27 | self.count_range() |
| 28 | |
| 29 | def snapshot(self, mskr=None, mskc=None, num=False): |
| 30 | if mskr==None:rmsk = slice(None) |
| 31 | rowmsk = self.rowmsk if len(self.rowmsk)>0 else self.data.index |
| 32 | if mskr==True:rmsk = rowmsk |
| 33 | if mskr==False:rmsk = self.data.index.difference(rowmsk) |
| 34 | |
| 35 | if mskc==None:cmsk = slice(None) |
| 36 | colmsk = self.colmsk if len(self.colmsk)>0 else self.data.columns |
| 37 | if mskc==True:cmsk = colmsk |
| 38 | if mskc==False:cmsk = self.data.columns.difference(colmsk) |
| 39 | |
| 40 | self.snap = self.data.loc[rmsk, cmsk].copy() |
| 41 | if num: self.snap = self.snap.select_dtypes( |
| 42 | include=[np.number]) |
| 43 | |
| 44 | def select(self, rs=[], cs=[], byidx=False): |
| 45 | if byidx: rs, cs = self.data.index[rs], self.data.columns[cs] |
| 46 | self.rowmsk = pd.Index(rs).astype(self.data.index.dtype) |
| 47 | self.colmsk = pd.Index(cs).astype(self.data.columns.dtype) |
| 48 | print('tps select', rs, cs, self.rowmsk, self.colmsk) |
| 49 | |
| 50 | def get_titles(self):return self.data.columns |
| 51 | def get_index(self):return self.data.index |
| 52 | |
| 53 | def get_props(self): |
| 54 | props, data = self.props, self.data |
| 55 | if self.props is None or len(props.columns)!=len(data.columns)\ |
| 56 | or (props.columns != data.columns).sum()>0: |
| 57 | ndata = [[i]*data.shape[1] for i in self.default] |
| 58 | newprop = pd.DataFrame(ndata, ['round', 'tc', 'lc', 'ln'], data.columns) |
| 59 | if not self.props is None: |
| 60 | inter = self.props.columns.intersection(newprop.columns) |
| 61 | newprop[inter] = self.props[inter] |
| 62 | self.props = newprop |
no outgoing calls
no test coverage detected