refactoring

This commit is contained in:
Matthias Bisping 2022-04-07 17:44:54 +02:00
parent 2fcb0bd149
commit 29028cc1a5

View File

@ -1,5 +1,5 @@
from copy import deepcopy from copy import deepcopy
from functools import partial from functools import partial, reduce
from itertools import groupby from itertools import groupby
from itertools import starmap, chain, repeat from itertools import starmap, chain, repeat
from typing import Iterable, List from typing import Iterable, List
@ -128,16 +128,18 @@ class Stitcher:
def merge_group(group): def merge_group(group):
def merge_with(current_pair, pairs): def merge_with(aggregation_pair, pairs):
to_remove = [] def aggregate_on_head(pairs_aggr: Iterable[ImageMetadataPair], pair: ImageMetadataPair):
"""Keeps the image that is being merged with as the head and aggregates non-mergables in the tail"""
aggr, non_aggr = juxt(first, rest)(pairs_aggr)
if y2_getter(aggr) == y1_getter(pair):
aggr = merge_pair_vertically(aggr, pair)
return aggr, *non_aggr
else:
return aggr, pair, *non_aggr
for pair in pairs: return list(reduce(aggregate_on_head, pairs, [aggregation_pair]))
if y2_getter(current_pair) == y1_getter(pair):
current_pair = merge_pair_vertically(current_pair, pair)
to_remove.append(pair)
return [current_pair, *filter(lambda p: p not in to_remove, pairs)]
pairs = list(group) pairs = list(group)