def inner(*args, **kargs): a = d.get(hash((args, kargs))) if a is None: a = d[hash((args, kargs))] = [] yield from a for x in drop(len(a), f(*args, **kargs)): a.append(x) yield x
def test_fib_infinite_stream(self): from operator import add f = Stream() fib = f << [0, 1] << iters.map(add, f, iters.drop(1, f)) self.assertEqual([0,1,1,2,3,5,8,13,21,34], list(iters.take(10, fib))) self.assertEqual(6765, fib[20]) self.assertEqual([832040,1346269,2178309,3524578,5702887], fib[30:35])
def test_fib_infinite_stream(self): from operator import add f = Stream() fib = f << [0, 1] << iters.map(add, f, iters.drop(1, f)) self.assertEqual([0,1,1,2,3,5,8,13,21,34], list(iters.take(10, fib))) self.assertEqual(6765, fib[20]) self.assertEqual([832040,1346269,2178309,3524578,5702887], list(fib[30:35])) # 35 elements should be already evaluated self.assertEqual(fib.cursor(), 35)
def test_drop(self): self.assertEqual([3, 4], list(iters.drop(3, range(5)))) self.assertEqual([], list(iters.drop(10, range(2))))
def test_drop(self): self.assertEqual([3,4], list(iters.drop(3, range(5)))) self.assertEqual([], list(iters.drop(10, range(2))))