From 504c1db541d0884aad21537e9fc62fd8bba56c39 Mon Sep 17 00:00:00 2001 From: Roman Zeyde Date: Sun, 21 Sep 2014 17:16:30 +0300 Subject: [PATCH] common: iterate() should not enumerate on default --- amodem/common.py | 4 ++-- amodem/framing.py | 8 ++++---- amodem/recv.py | 6 +++--- amodem/send.py | 3 ++- tests/test_common.py | 5 ++++- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/amodem/common.py b/amodem/common.py index ab9acf9..47b0484 100644 --- a/amodem/common.py +++ b/amodem/common.py @@ -36,7 +36,7 @@ def dumps(sym, n=1): return data * n -def iterate(data, size, func=None, truncate=True): +def iterate(data, size, func=None, truncate=True, enumerate=False): offset = 0 data = iter(data) @@ -49,7 +49,7 @@ def iterate(data, size, func=None, truncate=True): done = True result = func(buf) if func else np.array(buf) - yield offset, result + yield (offset, result) if enumerate else result offset += size diff --git a/amodem/framing.py b/amodem/framing.py index d501351..2a0b7e6 100644 --- a/amodem/framing.py +++ b/amodem/framing.py @@ -45,8 +45,8 @@ class Framer(object): return struct.pack(self.prefix_fmt, len(frame)) + frame def encode(self, data): - for _, block in common.iterate(data=data, size=self.block_size, - func=bytearray, truncate=False): + for block in common.iterate(data=data, size=self.block_size, + func=bytearray, truncate=False): yield self._pack(block=block) yield self._pack(block=self.EOF) @@ -95,8 +95,8 @@ def encode(data, framer=None): @chain_wrapper def _to_bytes(bits, block_size=1): - for _, chunk in common.iterate(data=bits, size=8*block_size, - func=lambda x: x, truncate=True): + for chunk in common.iterate(data=bits, size=8*block_size, + func=lambda x: x, truncate=True): yield bitarray.bitarray(chunk, endian='little').tobytes() diff --git a/amodem/recv.py b/amodem/recv.py index eb47f01..46e74d7 100644 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -44,7 +44,7 @@ def report_carrier(bufs, begin): def detect(samples, freq): counter = 0 bufs = collections.deque([], maxlen=config.baud) # 1 second of symbols - for offset, buf in common.iterate(samples, config.Nsym): + for offset, buf in common.iterate(samples, config.Nsym, enumerate=True): bufs.append(buf) coeff = dsp.coherence(buf, config.Fc) @@ -230,8 +230,8 @@ class Receiver(object): def run(self, output): data = framing.decode(self.bitstream) self.size = 0 - for _, chunk in common.iterate(data=data, size=256, - truncate=False, func=bytearray): + for chunk in common.iterate(data=data, size=256, + truncate=False, func=bytearray): output.write(chunk) self.size += len(chunk) diff --git a/amodem/send.py b/amodem/send.py index 56f52de..0caaa3e 100644 --- a/amodem/send.py +++ b/amodem/send.py @@ -45,7 +45,8 @@ class Writer(object): bits = itertools.chain(bits, padding) symbols_iter = modem.qam.encode(bits) carriers = modem.carriers / config.Nfreq - for i, symbols in common.iterate(symbols_iter, size=config.Nfreq): + for i, symbols in common.iterate(symbols_iter, + size=config.Nfreq, enumerate=True): symbols = np.array(list(symbols)) self.write(np.dot(symbols, carriers)) diff --git a/tests/test_common.py b/tests/test_common.py index 8684692..fe174a2 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -4,7 +4,10 @@ import numpy as np def iterlist(x, *args, **kwargs): x = np.array(x) - return list((i, list(x)) for i, x in common.iterate(x, *args, **kwargs)) + return list( + (i, list(x)) + for i, x in common.iterate(x, enumerate=True, *args, **kwargs) + ) def test_iterate():