Source code for warg.map_itertools

#!/usr/bin/env python3

__author__ = "Christian Heider Lindbjerg"
__doc__ = r"""

           Created on 09-09-2020
           """

__all__ = [
    "map_value_product",
    "map_product",
    "map_sorted",
    "map_permutations",
    "map_combinations",
    "map_combinations_with_replacement",
]

import itertools
import logging
from typing import Any, Generator, Mapping, Optional, Tuple

_logger = logging.getLogger(__name__)


[docs] def map_value_product(mappings: Optional[Mapping]) -> Optional[Generator[dict, None, None]]: """ :param mappings: :return: """ if mappings is None: return None return (dict(zip(mappings, x)) for x in itertools.product(*mappings.values()))
def map_reversed(mapping: Optional[Mapping]) -> Optional[dict]: """ :param mapping: :return: """ if mapping is None: return None return dict(reversed(list(mapping.items())))
[docs] def map_sorted(mapping: Optional[Mapping], **kwargs) -> Optional[dict]: """ :param mapping: :param kwargs: :return: """ if mapping is None: return None return dict(sorted(mapping.items(), **kwargs))
[docs] def map_product(mapping: Mapping, repeat: int = 2) -> Any: """description""" yield from zip( itertools.product(mapping.keys(), repeat=repeat), itertools.product(mapping.values(), repeat=repeat), )
[docs] def map_permutations(mapping: Mapping, repeat: int = 2) -> Generator[Tuple[Any, ...], None, None]: """ :param mapping: :param repeat: :return: """ yield from zip( itertools.permutations(mapping.keys(), repeat), itertools.permutations(mapping.values(), repeat), )
[docs] def map_combinations(mapping: Mapping, repeat: int = 2) -> Generator[Tuple[Any, ...], None, None]: """ :param mapping: :param repeat: :return: """ yield from zip( itertools.combinations(mapping.keys(), repeat), itertools.combinations(mapping.values(), repeat), )
[docs] def map_combinations_with_replacement( mappings: Mapping, repeat: int = 2 ) -> Generator[Tuple[Any, ...], None, None]: """ :param mappings: :param repeat: :return: """ if mappings is None: return None yield from zip( itertools.combinations_with_replacement(mappings.keys(), repeat), itertools.combinations_with_replacement(mappings.values(), repeat), )
if __name__ == "__main__": def asdijha() -> None: """ :rtype: None """ from warg import NOD a = NOD(a=[1], b=[4], c=[8]) _logger.info(f"ValueMapProduct{str(list(map_value_product(a.as_dict())))}") _logger.info(f"MapProduct{str(list(map_product(a.as_dict())))}") _logger.info(f"map_combinations{str(list(map_combinations(a.as_dict())))}") _logger.info(f"map_permutations{str(list(map_permutations(a.as_dict())))}") _logger.info( f"map_combinations_with_replacement{str(list(map_combinations_with_replacement(a.as_dict())))}" ) def asdijhsadasdad() -> None: """ :rtype: None """ from warg import NOD a = NOD(a=[1, 2, 8], b=[4, 3, 99]) _logger.info(f"ValueMapProduct{str(list(map_value_product(a.as_dict())))}") _logger.info(f"MapProduct{str(list(map_product(a.as_dict())))}") _logger.info(f"map_combinations{str(list(map_combinations(a.as_dict())))}") _logger.info(f"map_permutations{str(list(map_permutations(a.as_dict())))}") _logger.info( f"map_combinations_with_replacement{str(list(map_combinations_with_replacement(a.as_dict())))}" ) asdijha() # asdijhsadasdad()