def combine(*messages: t.Tuple[t.Optional['StatMessage']]) -> t.List['StatMessage']:
"""
Combines all message of the same type and with the same parent in the passed list.
Ignores None entries.
:param messages: passed list of messages
:return: new reduced list
"""
msgs = set([msg for msg in messages if msg is not None]) # t.Set['StatMessage']
something_changed = True
while something_changed:
something_changed = False
merged_pair = None # type: t.Tuple['StatMessage', 'StatMessage']
for (msg, msg2) in itertools.product(msgs, msgs):
if msg is not msg2:
if msg.parent.eq_except_property(msg2.parent) and type(msg) == type(msg2):
merged_pair = (msg, msg2)
something_changed = True
break
if something_changed:
msg, msg2 = merged_pair
msgs.remove(msg)
msgs.remove(msg2)
msgs.add(msg + msg2)
return list(msgs)
评论列表
文章目录