Module bs_processors.processor_util

Generic utilities for processors

Contains utilities for assembling and modifying processors

Expand source code
"""
Generic utilities for processors

Contains utilities for assembling and modifying processors
"""
from typing import Sequence, Callable, Any, List


def join(processors: Sequence[Callable[[List[Any]], List[Any]]])-> Callable[[List[Any]], List[Any]]:
    """
    Creates a processor from a list of processor.
    The processor created is equivalent to applying each of the passed processor
    in sequence over the result of the previous processor (after the result is
    flattened)

    * **processors**: a list of processors
    * **return** : a join processor

    >>> def double( elms):
    ...     result = []
    ...     for elm in elms:
    ...         result += [elm, elm]
    ...     return result
    ...
    >>> def add_one( elms):
    ...     result = []
    ...     for elm in elms:
    ...         result.append(elm + 1)
    ...     return result
    ...
    >>> pr = join([add_one, double])
    >>> pr( [1,100])
    [2, 2, 101, 101]
    >>> pr = join([double, add_one])
    >>> pr([1, 100])
    [2, 2, 101, 101]
    >>> pr = join([double, add_one, double])
    >>> pr([1, 100])
    [2, 2, 2, 2, 101, 101, 101, 101]
    """
    def inner(elms):
        result = elms
        for processor in processors:
            result = processor(result)
        return result
    return inner


def single_to_multiple(processor: Callable[[Any], List[Any]])->Callable[[List[Any]], List[Any]]:
    """
    Creates a processor that accepts a list of elements.

    Converts a processor that handles one element and returns a list of elements into
    a processor that handles a list of elements and returns a list of elements by calling
    each element in the list in turn and joining the intermediate results into one result

    * **processor**: a processor that operates on one element
    * **return** : a processor that operates on a list of elements

    >>> def square_pair(x):
    ...     return[x , x*x]
    >>> mult = single_to_multiple(square_pair)
    >>> mult([1,2,3,4])
    [1, 1, 2, 4, 3, 9, 4, 16]
    """

    def inner( elms: List[Any])-> List[Any]:
        result = []
        for elm in elms:
            if elm is not None:
                result += processor(elm)
        return result

    return inner

def process_file(processor: Callable[[Any], List[Any]], input_fname: str, output_fname: str):
    pass

Functions

def join(processors: Sequence[Callable[[List[Any]], List[Any]]]) -> Callable[[List[Any]], List[Any]]

Creates a processor from a list of processor. The processor created is equivalent to applying each of the passed processor in sequence over the result of the previous processor (after the result is flattened)

  • processors: a list of processors
  • return : a join processor
>>> def double( elms):
...     result = []
...     for elm in elms:
...         result += [elm, elm]
...     return result
...
>>> def add_one( elms):
...     result = []
...     for elm in elms:
...         result.append(elm + 1)
...     return result
...
>>> pr = join([add_one, double])
>>> pr( [1,100])
[2, 2, 101, 101]
>>> pr = join([double, add_one])
>>> pr([1, 100])
[2, 2, 101, 101]
>>> pr = join([double, add_one, double])
>>> pr([1, 100])
[2, 2, 2, 2, 101, 101, 101, 101]
Expand source code
def join(processors: Sequence[Callable[[List[Any]], List[Any]]])-> Callable[[List[Any]], List[Any]]:
    """
    Creates a processor from a list of processor.
    The processor created is equivalent to applying each of the passed processor
    in sequence over the result of the previous processor (after the result is
    flattened)

    * **processors**: a list of processors
    * **return** : a join processor

    >>> def double( elms):
    ...     result = []
    ...     for elm in elms:
    ...         result += [elm, elm]
    ...     return result
    ...
    >>> def add_one( elms):
    ...     result = []
    ...     for elm in elms:
    ...         result.append(elm + 1)
    ...     return result
    ...
    >>> pr = join([add_one, double])
    >>> pr( [1,100])
    [2, 2, 101, 101]
    >>> pr = join([double, add_one])
    >>> pr([1, 100])
    [2, 2, 101, 101]
    >>> pr = join([double, add_one, double])
    >>> pr([1, 100])
    [2, 2, 2, 2, 101, 101, 101, 101]
    """
    def inner(elms):
        result = elms
        for processor in processors:
            result = processor(result)
        return result
    return inner
def process_file(processor: Callable[[Any], List[Any]], input_fname: str, output_fname: str)
Expand source code
def process_file(processor: Callable[[Any], List[Any]], input_fname: str, output_fname: str):
    pass
def single_to_multiple(processor: Callable[[Any], List[Any]]) -> Callable[[List[Any]], List[Any]]

Creates a processor that accepts a list of elements.

Converts a processor that handles one element and returns a list of elements into a processor that handles a list of elements and returns a list of elements by calling each element in the list in turn and joining the intermediate results into one result

  • processor: a processor that operates on one element
  • return : a processor that operates on a list of elements
>>> def square_pair(x):
...     return[x , x*x]
>>> mult = single_to_multiple(square_pair)
>>> mult([1,2,3,4])
[1, 1, 2, 4, 3, 9, 4, 16]
Expand source code
def single_to_multiple(processor: Callable[[Any], List[Any]])->Callable[[List[Any]], List[Any]]:
    """
    Creates a processor that accepts a list of elements.

    Converts a processor that handles one element and returns a list of elements into
    a processor that handles a list of elements and returns a list of elements by calling
    each element in the list in turn and joining the intermediate results into one result

    * **processor**: a processor that operates on one element
    * **return** : a processor that operates on a list of elements

    >>> def square_pair(x):
    ...     return[x , x*x]
    >>> mult = single_to_multiple(square_pair)
    >>> mult([1,2,3,4])
    [1, 1, 2, 4, 3, 9, 4, 16]
    """

    def inner( elms: List[Any])-> List[Any]:
        result = []
        for elm in elms:
            if elm is not None:
                result += processor(elm)
        return result

    return inner