Source code for warg.generators.zipping_generator
from copy import deepcopy
from typing import Any, Generator, Iterable, Iterator
__author__ = "Christian Heider Lindbjerg"
__doc__ = r"""
Created on 28/10/2019
"""
__all__ = ["unzip", "unzipper"]
import logging
_logger = logging.getLogger(__name__)
[docs]
def unzip(iterable: Iterable[Any]) -> Iterable[Any]:
"""description"""
return zip(*iterable)
[docs]
def unzipper(_iterable: Iterable[Iterable[Any]]) -> Iterable[Any]:
"""
Unzips an iterable of an iterable
Be careful, functionality maybe have undefined and unexpected behaviour
:param _iterable:
:return:Iterable
"""
def check_next_iter(iterable_: Any) -> Any:
"""description"""
if isinstance(iterable_, Iterable):
try:
a_ = next(iter(iterable_))
if isinstance(a_, Iterable):
return a_
except StopIteration:
pass
if isinstance(_iterable, Iterable):
check_a = check_next_iter(check_next_iter(deepcopy(_iterable)))
if check_next_iter(check_a):
for a in _iterable:
yield unzipper(a)
elif check_a:
for a in _iterable:
yield unzip(a)
else:
yield from _iterable
if __name__ == "__main__":
def recursive_eval(node: Any):
"""description"""
if isinstance(node, (Iterable, Generator, Iterator)):
gather = []
for i in node:
gather.append(recursive_eval(i))
return gather
return node
def aasda() -> None:
"""
:rtype: None
"""
r = range(4)
_logger.info(0)
a = [[[*r] for _ in r] for _ in r]
_logger.info(a)
_logger.info(1)
for _, assd in zip(r, unzipper(a)):
_logger.info()
_logger.info(recursive_eval(assd))
_logger.info()
for _, (a, *_) in zip(r, unzipper(a)):
_logger.info()
_logger.info(recursive_eval(a))
_logger.info()
_logger.info(2)
def skad23() -> None:
"""
:rtype: None
"""
_logger.info(0)
zippy_once = zip(range(6), range(3))
dsadsa = list(deepcopy(zippy_once))
zippy_twice = zip(dsadsa, dsadsa)
zippy_twice_copy = deepcopy(zippy_twice)
asds = list(deepcopy(zippy_twice_copy))
zippy_trice = zip(asds, asds)
zippy_trice_copy = deepcopy(zippy_trice)
_logger.info(1)
for aa in zippy_twice:
_logger.info(recursive_eval(aa))
_logger.info(2)
for a1 in unzip(zippy_twice_copy):
_logger.info(recursive_eval(a1))
_logger.info(3)
for a1 in unzip(zippy_once):
_logger.info(recursive_eval(a1))
_logger.info(4)
for a1 in zippy_trice:
_logger.info(recursive_eval(a1))
_logger.info(5)
for a1 in unzip(zippy_trice_copy):
_logger.info(recursive_eval(a1))
_logger.info(6)
def skad() -> None:
"""
:rtype: None
"""
_logger.info(0)
zippy_once = zip(zip(range(6), range(3)))
zippy_once_copy = deepcopy(zippy_once)
dsadsa = list(deepcopy(zippy_once))
zippy_twice = zip(dsadsa, dsadsa)
zippy_twice_copy = deepcopy(zippy_twice)
asds = list(deepcopy(zippy_twice_copy))
zippy_trice = zip(asds, asds)
zippy_trice_copy = deepcopy(zippy_trice)
asds2323 = list(deepcopy(zippy_trice_copy))
zippy_quad = zip(asds2323, asds2323)
zippy_quad_copy = deepcopy(zippy_quad)
_logger.info(1)
for aa in zippy_twice:
_logger.info(recursive_eval(aa))
_logger.info(2)
for a1 in unzipper(zippy_twice_copy):
_logger.info(recursive_eval(a1))
_logger.info(3)
for a1 in zippy_once_copy:
_logger.info(recursive_eval(a1))
_logger.info(4)
for a1 in unzipper(zippy_once):
_logger.info(recursive_eval(a1))
_logger.info(5)
for a1 in zippy_trice:
_logger.info(recursive_eval(a1))
_logger.info(6)
for a1 in unzipper(zippy_trice_copy):
_logger.info(recursive_eval(a1))
_logger.info(7)
for a1 in zippy_quad:
_logger.info(recursive_eval(a1))
_logger.info(8)
for a1 in unzipper(zippy_quad_copy):
_logger.info(recursive_eval(a1))
_logger.info(9)
aasda()
_logger.info()
_logger.info("asafasdw")
_logger.info()
skad()
# skad23()