| 116 | |
| 117 | |
| 118 | class CChanPlotMeta: |
| 119 | def __init__(self, kl_list: CKLine_List): |
| 120 | self.data = kl_list |
| 121 | |
| 122 | self.klc_list: List[Cklc_meta] = [Cklc_meta(klc) for klc in kl_list.lst] |
| 123 | self.datetick = [klu.time.to_str() for klu in self.klu_iter()] |
| 124 | self.klu_len = sum(len(klc.klu_list) for klc in self.klc_list) |
| 125 | |
| 126 | self.bi_list = [CBi_meta(bi) for bi in kl_list.bi_list] |
| 127 | |
| 128 | self.seg_list: List[CSeg_meta] = [] |
| 129 | self.eigenfx_lst: List[CEigenFX_meta] = [] |
| 130 | for seg in kl_list.seg_list: |
| 131 | self.seg_list.append(CSeg_meta(seg)) |
| 132 | if seg.eigen_fx: |
| 133 | self.eigenfx_lst.append(CEigenFX_meta(seg.eigen_fx)) |
| 134 | |
| 135 | self.seg_eigenfx_lst: List[CEigenFX_meta] = [] |
| 136 | self.segseg_list: List[CSeg_meta] = [] |
| 137 | for segseg in kl_list.segseg_list: |
| 138 | self.segseg_list.append(CSeg_meta(segseg)) |
| 139 | if segseg.eigen_fx: |
| 140 | self.seg_eigenfx_lst.append(CEigenFX_meta(segseg.eigen_fx)) |
| 141 | |
| 142 | self.zs_lst: List[CZS_meta] = [CZS_meta(zs) for zs in kl_list.zs_list] |
| 143 | self.segzs_lst: List[CZS_meta] = [CZS_meta(segzs) for segzs in kl_list.segzs_list] |
| 144 | |
| 145 | self.bs_point_lst: List[CBS_Point_meta] = [CBS_Point_meta(bs_point, is_seg=False) for bs_point in kl_list.bs_point_lst.bsp_iter()] |
| 146 | self.seg_bsp_lst: List[CBS_Point_meta] = [CBS_Point_meta(seg_bsp, is_seg=True) for seg_bsp in kl_list.seg_bs_point_lst.bsp_iter()] |
| 147 | |
| 148 | def klu_iter(self): |
| 149 | for klc in self.klc_list: |
| 150 | yield from klc.klu_list |
| 151 | |
| 152 | def sub_last_kseg_start_idx(self, seg_cnt): |
| 153 | if seg_cnt is None or len(self.data.seg_list) <= seg_cnt: |
| 154 | return 0 |
| 155 | else: |
| 156 | return self.data.seg_list[-seg_cnt].get_begin_klu().sub_kl_list[0].idx |
| 157 | |
| 158 | def sub_last_kbi_start_idx(self, bi_cnt): |
| 159 | if bi_cnt is None or len(self.data.bi_list) <= bi_cnt: |
| 160 | return 0 |
| 161 | else: |
| 162 | return self.data.bi_list[-bi_cnt].begin_klc.lst[0].sub_kl_list[0].idx |
| 163 | |
| 164 | def sub_range_start_idx(self, x_range): |
| 165 | for klc in self.data[::-1]: |
| 166 | for klu in klc[::-1]: |
| 167 | x_range -= 1 |
| 168 | if x_range == 0: |
| 169 | return klu.sub_kl_list[0].idx |
| 170 | return 0 |