common: iterate() should not enumerate on default

This commit is contained in:
Roman Zeyde
2014-09-21 17:16:30 +03:00
parent b678c0dc57
commit 504c1db541
5 changed files with 15 additions and 11 deletions

View File

@@ -36,7 +36,7 @@ def dumps(sym, n=1):
return data * n return data * n
def iterate(data, size, func=None, truncate=True): def iterate(data, size, func=None, truncate=True, enumerate=False):
offset = 0 offset = 0
data = iter(data) data = iter(data)
@@ -49,7 +49,7 @@ def iterate(data, size, func=None, truncate=True):
done = True done = True
result = func(buf) if func else np.array(buf) result = func(buf) if func else np.array(buf)
yield offset, result yield (offset, result) if enumerate else result
offset += size offset += size

View File

@@ -45,7 +45,7 @@ class Framer(object):
return struct.pack(self.prefix_fmt, len(frame)) + frame return struct.pack(self.prefix_fmt, len(frame)) + frame
def encode(self, data): def encode(self, data):
for _, block in common.iterate(data=data, size=self.block_size, for block in common.iterate(data=data, size=self.block_size,
func=bytearray, truncate=False): func=bytearray, truncate=False):
yield self._pack(block=block) yield self._pack(block=block)
yield self._pack(block=self.EOF) yield self._pack(block=self.EOF)
@@ -95,7 +95,7 @@ def encode(data, framer=None):
@chain_wrapper @chain_wrapper
def _to_bytes(bits, block_size=1): def _to_bytes(bits, block_size=1):
for _, chunk in common.iterate(data=bits, size=8*block_size, for chunk in common.iterate(data=bits, size=8*block_size,
func=lambda x: x, truncate=True): func=lambda x: x, truncate=True):
yield bitarray.bitarray(chunk, endian='little').tobytes() yield bitarray.bitarray(chunk, endian='little').tobytes()

View File

@@ -44,7 +44,7 @@ def report_carrier(bufs, begin):
def detect(samples, freq): def detect(samples, freq):
counter = 0 counter = 0
bufs = collections.deque([], maxlen=config.baud) # 1 second of symbols 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) bufs.append(buf)
coeff = dsp.coherence(buf, config.Fc) coeff = dsp.coherence(buf, config.Fc)
@@ -230,7 +230,7 @@ class Receiver(object):
def run(self, output): def run(self, output):
data = framing.decode(self.bitstream) data = framing.decode(self.bitstream)
self.size = 0 self.size = 0
for _, chunk in common.iterate(data=data, size=256, for chunk in common.iterate(data=data, size=256,
truncate=False, func=bytearray): truncate=False, func=bytearray):
output.write(chunk) output.write(chunk)
self.size += len(chunk) self.size += len(chunk)

View File

@@ -45,7 +45,8 @@ class Writer(object):
bits = itertools.chain(bits, padding) bits = itertools.chain(bits, padding)
symbols_iter = modem.qam.encode(bits) symbols_iter = modem.qam.encode(bits)
carriers = modem.carriers / config.Nfreq 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)) symbols = np.array(list(symbols))
self.write(np.dot(symbols, carriers)) self.write(np.dot(symbols, carriers))

View File

@@ -4,7 +4,10 @@ import numpy as np
def iterlist(x, *args, **kwargs): def iterlist(x, *args, **kwargs):
x = np.array(x) 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(): def test_iterate():