radiobee-aligner / radiobee /amend_avec.py
freemt
Update before sent-align
4c04f50
raw
history blame
1.63 kB
"""Amend avec from align_block."""
# pylint: disable=unused-variable, unused-import
from typing import List, Tuple, Union
from itertools import zip_longest
from logzero import logger # noqa
# from radiobee.gen_aset import gen_aset
# fmt: off
def amend_avec(
avec: List[Tuple[int, int]],
len0: int = 0,
len1: int = 0,
) -> List[Tuple[Union[int, str], Union[int, str]]]:
# fmt: on
"""Amend avec from align_block.
Rewritten based on gen_aset.
Args:
avec: list generated by align_block
len0: max first possibe entries
len1: max second entries
Return
nicely amended to include all entries
Raise
None
"""
# empty avec []
if not avec:
return [*zip_longest(range(len0), range(len1), fillvalue="")]
# empty [[]]
if len(avec) == 1:
if not avec[0]:
return [*zip_longest(range(len0), range(len1), fillvalue="")]
buff = []
pos0, pos1 = -1, -1
for elm in avec:
# elm0, elm1, elm2 = elm
elm0, elm1, *elm2 = elm
elm0 = int(elm0)
elm1 = int(elm1)
interval = max(elm0 - pos0 - 1, elm1 - pos1 - 1)
_ = zip_longest(range(pos0 + 1, elm0), range(pos1 + 1, elm1), [""] * interval, fillvalue="")
buff.extend(_)
buff.append(elm)
pos0, pos1 = elm0, elm1
# last batch if any
# elm0, elm1 = tgt_len, src_len
elm0, elm1 = len0, len1
interval = max(elm0 - pos0 - 1, elm1 - pos1 - 1)
_ = zip_longest(range(pos0 + 1, elm0), range(pos1 + 1, elm1), [""] * interval, fillvalue="")
buff.extend(_)
return buff