Skip to content

sequence_tools

sequence_tools

Convenience tools for operating on sequences.

T module-attribute

T = TypeVar('T')

flatten_list

flatten_list(sequence: list[T]) -> list[T]

Flatten a sequence.

Source code in src/pygerber/sequence_tools.py
def flatten_list(sequence: list[T]) -> list[T]:
    """Flatten a sequence."""
    out = []

    for item in sequence:
        if isinstance(item, list):
            out.extend(flatten_list(item))
        else:
            out.append(item)

    return out

flatten

flatten(sequence: Iterable[T]) -> Iterable[T]

Flatten a sequence.

Source code in src/pygerber/sequence_tools.py
def flatten(sequence: Iterable[T]) -> Iterable[T]:
    """Flatten a sequence."""
    for item in sequence:
        if isinstance(item, (list, tuple)):
            yield from flatten(item)
        else:
            yield item

unwrap

unwrap(item: T) -> T

Unwrap item wrapped in sequences.

Source code in src/pygerber/sequence_tools.py
def unwrap(item: T) -> T:
    """Unwrap item wrapped in sequences."""
    try:
        while isinstance(item, (list, tuple, ParseResults)):  # type: ignore[index]
            item = item[0]  # type: ignore[unreachable, return-value]
    except (TypeError, IndexError):
        pass

    return item  # type: ignore[unreachable, return-value]