개정판 191b4efb
issue #563: fourth step on going
Change-Id: I1b572403c5c83ac2c11217fe1ec1f7195df5b3bd
DTI_PID/DTI_PID/LineNoTracer.py | ||
---|---|---|
1001 | 1001 |
break |
1002 | 1002 |
|
1003 | 1003 |
# fixed run merge |
1004 |
''' |
|
1004 | 1005 |
consumed_count_past = 0 |
1006 |
for index1 in range(len(fixed_run_infos)): |
|
1007 |
if fixed_run_infos[index1].consumed: |
|
1008 |
continue |
|
1009 |
for index2 in range(len(fixed_run_infos)): |
|
1010 |
if index1 == index2 or fixed_run_infos[index2].consumed: |
|
1011 |
continue |
|
1012 |
|
|
1013 |
result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(fixed_run_infos[index1], fixed_run_infos[index2]) |
|
1014 |
if result: |
|
1015 |
fixed_run_infos[index1].consumed = True |
|
1016 |
fixed_run_infos[index2].consumed = True |
|
1017 |
consumed_count_past += 2 |
|
1018 |
if header: |
|
1019 |
waiting_merged_run_infos.append([[fixed_run_infos[index2], fixed_run_infos[index1]], merged_run_info]) |
|
1020 |
else: |
|
1021 |
waiting_merged_run_infos.append([[fixed_run_infos[index1], fixed_run_infos[index2]], merged_run_info]) |
|
1022 |
break |
|
1023 |
|
|
1024 |
while True: |
|
1025 |
consumed_count = 0 |
|
1026 |
for index in range(len(fixed_run_infos)): |
|
1027 |
if fixed_run_infos[index].consumed: |
|
1028 |
consumed_count += 1 |
|
1029 |
continue |
|
1030 |
|
|
1031 |
for waiting_merged_run_info in waiting_merged_run_infos: |
|
1032 |
result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(waiting_merged_run_info[1], fixed_run_infos[index]) |
|
1033 |
if result: |
|
1034 |
fixed_run_infos[index].consumed = True |
|
1035 |
consumed_count += 1 |
|
1036 |
if header: |
|
1037 |
waiting_merged_run_info[0].insert(0, fixed_run_infos[index]) |
|
1038 |
waiting_merged_run_info[1] = merged_run_info |
|
1039 |
else: |
|
1040 |
waiting_merged_run_info[0].append(fixed_run_infos[index]) |
|
1041 |
waiting_merged_run_info[1] = merged_run_info |
|
1042 |
break |
|
1005 | 1043 |
|
1044 |
if consumed_count_past == consumed_count: |
|
1045 |
break |
|
1046 |
else: |
|
1047 |
consumed_count_past = consumed_count |
|
1048 |
|
|
1049 |
while True: |
|
1050 |
merged = False |
|
1051 |
for index1 in range(len(waiting_merged_run_infos)): |
|
1052 |
waiting_merged_run_info1 = waiting_merged_run_infos[index1] |
|
1053 |
for index2 in range(len(waiting_merged_run_infos)): |
|
1054 |
if index1 == index2: |
|
1055 |
continue |
|
1056 |
waiting_merged_run_info2 = waiting_merged_run_infos[index2] |
|
1057 |
result, merged_run_info, header, reverse = QEngineeringLineTracerRunItem.merge_and_sort_if_possible(waiting_merged_run_info1[1], waiting_merged_run_info2[1]) |
|
1058 |
if result: |
|
1059 |
if header: |
|
1060 |
if reverse: |
|
1061 |
for waiting_run_info in waiting_merged_run_info2[0]: |
|
1062 |
waiting_run_info.reverse() |
|
1063 |
waiting_merged_run_info2[0].reverse() |
|
1064 |
waiting_merged_run_info2[0].extend(waiting_merged_run_info1[0]) |
|
1065 |
waiting_merged_run_info1[0] = waiting_merged_run_info2[0] |
|
1066 |
waiting_merged_run_info1[1] = merged_run_info |
|
1067 |
else: |
|
1068 |
if reverse: |
|
1069 |
for waiting_run_info in waiting_merged_run_info2[0]: |
|
1070 |
waiting_run_info.reverse() |
|
1071 |
waiting_merged_run_info2[0].reverse() |
|
1072 |
waiting_merged_run_info1[0].extend(waiting_merged_run_info2[0]) |
|
1073 |
waiting_merged_run_info1[1] = merged_run_info |
|
1074 |
merged = True |
|
1075 |
break |
|
1076 |
if merged: |
|
1077 |
waiting_merged_run_infos.pop(index2) |
|
1078 |
break |
|
1079 |
if not merged: |
|
1080 |
break |
|
1081 |
''' |
|
1006 | 1082 |
|
1007 | 1083 |
except Exception as ex: |
1008 | 1084 |
from App import App |
DTI_PID/DTI_PID/Shapes/EngineeringLineTracerRunItem.py | ||
---|---|---|
36 | 36 |
self.run.reverse() |
37 | 37 |
|
38 | 38 |
@staticmethod |
39 |
def merge_and_sort_if_possible(run_info1, run_info2): |
|
39 |
def merge_and_sort_if_possible(run_info1, run_info2, sort=True):
|
|
40 | 40 |
""" return True, and merged run items if run is connected, True if run2 is come first """ |
41 | 41 |
""" run_info1 is fixed, modify run_info2 """ |
42 |
""" if sort is False, do not modify and sort just merge """ |
|
42 | 43 |
|
43 | 44 |
connected = False |
44 | 45 |
merged_items = [] |
... | ... | |
46 | 47 |
reverse = False |
47 | 48 |
merged_Tracer = None |
48 | 49 |
|
49 |
if (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[-1].is_connected(run_info2.run.items[0])) or \ |
|
50 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[0]) or \ |
|
51 |
(len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[-1]) or \ |
|
50 |
if (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[-1].is_connected(run_info2.run.items[0]) and \ |
|
51 |
run_info2.run.items[0].is_connected(run_info1.run.items[-1])) or \ |
|
52 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[0] and \ |
|
53 |
run_info2.run.items[0].is_connected(run_info1.run.items[0])) or \ |
|
54 |
(len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[-1] and \ |
|
55 |
run_info1.run.items[-1].is_connected(run_info2.run.items[0])) or \ |
|
52 | 56 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) == 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[0] and \ |
53 | 57 |
run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0]): |
54 | 58 |
connected = True |
55 | 59 |
header = False |
56 | 60 |
reverse = False |
57 | 61 |
merged_items = run_info1.run.items + run_info2.run.items |
58 |
elif (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[-1].is_connected(run_info2.run.items[-1])) or \ |
|
59 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[-1]) or \ |
|
60 |
(len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[-1]) or \ |
|
62 |
elif sort and ((len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[-1].is_connected(run_info2.run.items[-1]) and \ |
|
63 |
run_info2.run.items[-1].is_connected(run_info1.run.items[-1])) or \ |
|
64 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[-1] and \ |
|
65 |
run_info2.run.items[-1].is_connected(run_info1.run.items[0])) or \ |
|
66 |
(len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[-1] and \ |
|
67 |
run_info1.run.items[-1].is_connected(run_info2.run.items[0])) or \ |
|
61 | 68 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) == 1 and run_info1.run.items[0].connectors[1].connectedItem is run_info2.run.items[0] and \ |
62 |
run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0]): |
|
69 |
run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0])):
|
|
63 | 70 |
connected = True |
64 | 71 |
header = False |
65 | 72 |
reverse = True |
66 | 73 |
run_info2.reverse() |
67 | 74 |
merged_items = run_info1.run.items + run_info2.run.items |
68 |
elif (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].is_connected(run_info2.run.items[-1])) or \ |
|
69 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[-1]) or \ |
|
70 |
(len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0]) or \ |
|
75 |
elif (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].is_connected(run_info2.run.items[-1]) and \ |
|
76 |
run_info2.run.items[-1].is_connected(run_info1.run.items[0])) or \ |
|
77 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[-1] and \ |
|
78 |
run_info2.run.items[-1].is_connected(run_info1.run.items[0])) or \ |
|
79 |
(len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0] and \ |
|
80 |
run_info1.run.items[0].is_connected(run_info2.run.items[0])) or \ |
|
71 | 81 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) == 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[0] and \ |
72 | 82 |
run_info2.run.items[0].connectors[1].connectedItem is run_info1.run.items[0]): |
73 | 83 |
connected = True |
74 | 84 |
header = True |
75 | 85 |
reverse = False |
76 | 86 |
merged_items = run_info2.run.items + run_info1.run.items |
77 |
elif (len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].is_connected(run_info2.run.items[0])) or \ |
|
78 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[0]) or \ |
|
79 |
(len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0]) or \ |
|
87 |
elif sort and ((len(run_info1.run.items) > 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].is_connected(run_info2.run.items[0]) and \ |
|
88 |
run_info2.run.items[0].is_connected(run_info1.run.items[0])) or \ |
|
89 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) > 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[0] and \ |
|
90 |
run_info2.run.items[0].is_connected(run_info1.run.items[0])) or \ |
|
91 |
(len(run_info1.run.items) > 1 and len(run_info2.run.items) == 1 and run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0] and \ |
|
92 |
run_info1.run.items[0].is_connected(run_info2.run.items[0])) or \ |
|
80 | 93 |
(len(run_info1.run.items) == 1 and len(run_info2.run.items) == 1 and run_info1.run.items[0].connectors[0].connectedItem is run_info2.run.items[0] and \ |
81 |
run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0]): |
|
94 |
run_info2.run.items[0].connectors[0].connectedItem is run_info1.run.items[0])):
|
|
82 | 95 |
connected = True |
83 | 96 |
header = True |
84 | 97 |
reverse = True |
... | ... | |
90 | 103 |
merged_run.items = merged_items |
91 | 104 |
merged_Tracer = QEngineeringLineTracerRunItem(merged_run) |
92 | 105 |
|
93 |
return connected, merged_Tracer, header, reverse |
|
94 |
|
|
95 |
@staticmethod |
|
96 |
def merge_if_possible(run_info1, run_info2): |
|
97 |
""" return True, and merged run items if run is connected, True if run2 is come first """ |
|
98 |
""" do not sort, all items already was sorted """ |
|
99 |
|
|
100 |
connected = False |
|
101 |
merged_items = [] |
|
102 |
header = False |
|
103 |
merged_Tracer = None |
|
104 |
|
|
105 |
if run_info1.run.items[-1].is_connected(run_info2.run.items[0]): |
|
106 |
connected = True |
|
107 |
header = False |
|
108 |
merged_items = run_info1.run.items + run_info2.run.items |
|
109 |
elif run_info1.run.items[0].is_connected(run_info2.run.items[-1]): |
|
110 |
connected = True |
|
111 |
header = True |
|
112 |
merged_items = run_info2.run.items + run_info1.run.items |
|
113 |
|
|
114 |
if connected: |
|
115 |
merged_run = QEngineeringRunItem() |
|
116 |
merged_run.items = merged_items |
|
117 |
merged_Tracer = QEngineeringLineTracerRunItem(merged_run) |
|
118 |
|
|
119 |
return connected, merged_Tracer, header |
|
106 |
return connected, merged_Tracer, header, reverse |
내보내기 Unified diff