new_sanwei
chaopower 2024-03-22 15:43:06 +08:00
parent 1a936abc29
commit 70355323d1
1 changed files with 17 additions and 29 deletions

View File

@ -221,21 +221,6 @@ class AutoLayout:
"""
barcode 有重复的极致样本 进行排列组合汇集成新的可能性
"""
# 筛选有重复的行
# same_barcode_data = [data for data in self.ori_lib_data if data['level'] == 1900]
# same_barcode_sorted = sorted(same_barcode_data, key=lambda x: (-x['size']))
#
# same_barcode_dict = dict()
# for index, data in enumerate(same_barcode_sorted):
# same_barcode_dict[data['library']] = data['level'] + index + 1
# correct_data = list()
# for data in self.ori_lib_data:
# if data in same_barcode_sorted:
# data['level'] = same_barcode_dict[data['library']]
# correct_data.append(data)
# self.ori_lib_data = correct_data
same_barcode_df = pd.DataFrame(
[spdata for data in self.ori_lib_data if data['level'] == 1900 for spdata in data['data']])
@ -323,13 +308,17 @@ class AutoLayout:
# print(library_data['data'][0]['barcode'])
self.chip_size_N[chipname] += library_data['size']
def use_rule(self, chipname, classfication):
def use_rule_exclusive_classfication(self, chipname, classfication):
"""
文库不能排在一起
"""
may_classfic = set(self.rule[self.rule['c1'] == classfication]['c2'])
if self.chip_customer[chipname].intersection(may_classfic):
return True
return False
def use_rule_exclusive_customer(self, chipname, customer):
"""文库不能排在一起"""
may_classfic = set(
self.rule_exclusive_customer[self.rule_exclusive_customer['customer1'] == customer]['customer2'])
if self.chip_customer[chipname].intersection(may_classfic):
@ -347,7 +336,7 @@ class AutoLayout:
classification = library_data['classification']
customer = library_data['customer']
is_balance_lib = library_data['is_balance_lib']
library = library_data['library']
# library = library_data['library']
# 芯片大小不能超过设定限制
sizelimit = True
@ -367,7 +356,7 @@ class AutoLayout:
# 互斥的文库
exclusive_classific = True
if self.use_rule(chipname, classification):
if self.use_rule_exclusive_classfication(chipname, classification):
exclusive_classific = False
# print(chipname, library, '互斥的文库')
@ -500,7 +489,6 @@ class AutoLayout:
self.loc_chip_num += 1
def assign_samples(self):
# ori_library_data = list()
if '未测' not in self.ori_data.keys():
raise UserWarning('提供excel没有 未测 sheet ,请核查!')
@ -512,7 +500,7 @@ class AutoLayout:
if unhave_col:
unhave_from = '; '.join(unhave_col)
raise UserWarning(f'未测表里没有{unhave_from} 表头,请核查!')
raise UserWarning(f'未测表里没有 {unhave_from} 表头,请核查!')
# 数据标准格式
numeric_mask = pd.to_numeric(ori_library_df['data_needed'], errors='coerce').notna()
@ -532,20 +520,20 @@ class AutoLayout:
no_ori_data = ori_library_df[~(numeric_mask & time_mask) | status_mask | barcode_mask]
self.no_assign_data.extend(no_ori_data.to_dict('records'))
# 使用布尔索引筛选出不是数字和非日期的行,并且不是暂不排样的行
ori_library_df = ori_library_df[(numeric_mask & time_mask) & ~status_mask & ~barcode_mask]
# 某个客户的检测的数据超过1个T就单独处理
# summary = ori_library_df.groupby('customer').agg({'data_needed': 'sum'})
# print(summary)
self.no_assign_data.extend(no_ori_data.to_dict('records'))
# 使用布尔索引筛选出不是数字和非日期的行,并且不是暂不排样的行, 以及非16位置barcode
ori_library_df = ori_library_df[(numeric_mask & time_mask) & ~status_mask & ~barcode_mask]
# 时间格式化
ori_library_df['time'] = pd.to_datetime(ori_library_df['time'], errors='coerce')
ori_library_df['level'] = ori_library_df.apply(self.level, axis=1)
# 极致客户有重复的把等级调到19防止放到了最后到了未测里
# 极致客户有重复的把等级调到1900,防止放到了最后,到了未测里
must_lib_df = ori_library_df[ori_library_df['level'] == 2000]
must_lib = set(must_lib_df[must_lib_df.duplicated(subset='barcode', keep=False)]['#library'].to_list())
ori_library_df.loc[ori_library_df['#library'].isin(must_lib), 'level'] = 1900
@ -586,7 +574,7 @@ class AutoLayout:
continue
# 拆分处理 分为了2个大文库
if size > (self.data_limit) / 2:
if size > self.data_limit / 2:
library_df['data_needed'] = library_df['data_needed'] / 2
self.return_log.append(f'文库{library} 已做拆分处理, 请注意!!! ')
self.ori_lib_data.append(dict(
@ -685,7 +673,7 @@ class AutoLayout:
self.loc_chip_num = 100
while ori_lib_data:
library_data = ori_lib_data[0]
chipname = f'chipB{self.loc_chip_num}_{max_barcode}' if max_barcode != 'all' else f'chipB{self.loc_chip_num}'
chipname = f'chip{self.loc_chip_num}_{max_barcode}' if max_barcode != 'all' else f'chip{self.loc_chip_num}'
# 空白芯片直接添加
if chipname not in self.index_assignments:
@ -720,7 +708,6 @@ class AutoLayout:
self.assign_again_size()
# self.assign_again_size(max_barcode='i7')
# self.assign_again_size(max_barcode='i5')
# self.assign_again_size()
except Exception as e:
self.return_log.append(f'T7排样出错 请联系!{e}')
self.index_assignments = {}
@ -740,6 +727,7 @@ class AutoLayout:
addname = 'X'
else:
addname = ''
other_name = ''
# if 'chipB' in chip_idx and df['barcode'].duplicated().any():
# other_name = '_i7'