From bc4497ed1bbc7dc71fa1c5ffdb271abab24de455 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sun, 7 Sep 2014 18:24:40 +0300 Subject: [PATCH] common: move izip() from recv module and refactor it a bit --- amodem/common.py | 7 +++++++ amodem/recv.py | 8 +------- tests/test_common.py | 5 +++++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/amodem/common.py b/amodem/common.py index ef0581c..a8382d7 100644 --- a/amodem/common.py +++ b/amodem/common.py @@ -93,6 +93,13 @@ def take(iterable, n): return np.array(list(itertools.islice(iterable, n))) +# "Python 3" zip re-implementation for Python 2 +def izip(iterables): + iterables = [iter(iterable) for iterable in iterables] + while True: + yield tuple([next(iterable) for iterable in iterables]) + + class Dummy(object): def __getattr__(self, name): diff --git a/amodem/recv.py b/amodem/recv.py index d3fb20e..3af14a4 100644 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -195,7 +195,7 @@ class Receiver(object): self.stats['rx_start'] = time.time() log.info('Starting demodulation: %s', modem) - for i, block in enumerate(izip(streams)): # block per frequency + for i, block in enumerate(common.izip(streams)): # block per frequency for bits in block: self.stats['rx_bits'] = self.stats['rx_bits'] + len(bits) yield bits @@ -264,12 +264,6 @@ class Receiver(object): self.plt.title(title) -def izip(streams): - iters = [iter(s) for s in streams] - while True: - yield [next(i) for i in iters] - - def main(args): reader = stream.Reader(args.input, data_type=common.loads) signal = itertools.chain.from_iterable(reader) diff --git a/tests/test_common.py b/tests/test_common.py index a2bc890..b81b3c6 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -60,3 +60,8 @@ def test_saturation(): assert False except common.SaturationError as e: assert e.args == (max(x),) + +def test_izip(): + x = range(10) + y = range(-10, 0) + assert list(common.izip([x, y])) == list(zip(x, y))