async def euclidean_norm_handler(reader, writer): # Define lambdas strip = lambda x: x.decode().strip() nonempty = lambda x: x != '' square = lambda x: x ** 2 write_cursor = lambda x: writer.write(b'> ') square_root = lambda x: x ** 0.5 # Create awaitable handle_request = ( stream.iterate(reader) | pipe.print('string: {}') | pipe.map(strip) | pipe.takewhile(nonempty) | pipe.map(float) | pipe.map(square) | pipe.print('square: {:.2f}') | pipe.action(write_cursor) | pipe.accumulate(initializer=0) | pipe.map(square_root) | pipe.print('norm -> {:.2f}') ) # Loop over norm computations while not reader.at_eof(): writer.write(INSTRUCTIONS.encode()) try: result = await handle_request except ValueError: writer.write(ERROR.encode()) else: writer.write(RESULT.format(result).encode())
async def euclidean_norm_handler(reader, writer): # Define lambdas strip = lambda x: x.decode().strip() nonempty = lambda x: x != '' square = lambda x: x**2 write_cursor = lambda x: writer.write(b'> ') square_root = lambda x: x**0.5 # Create awaitable handle_request = (stream.iterate(reader) | pipe.print('string: {}') | pipe.map(strip) | pipe.takewhile(nonempty) | pipe.map(float) | pipe.map(square) | pipe.print('square: {:.2f}') | pipe.action(write_cursor) | pipe.accumulate(initializer=0) | pipe.map(square_root) | pipe.print('norm -> {:.2f}')) # Loop over norm computations while not reader.at_eof(): writer.write(INSTRUCTIONS.encode()) try: result = await handle_request except ValueError: writer.write(ERROR.encode()) else: writer.write(RESULT.format(result).encode())
async def main(): xs = ( random() # Stream random numbers | square.pipe() # Square the values | pipe.take(5) # Take the first five | pipe.accumulate()) # Sum the values print(await xs)
async def main(): # This stream computes 11² + 13² in 1.5 second xs = ( stream.count(interval=0.1) # Count from zero every 0.1 s | pipe.skip(10) # Skip the first 10 numbers | pipe.take(5) # Take the following 5 | pipe.filter(lambda x: x % 2) # Keep odd numbers | pipe.map(lambda x: x**2) # Square the results | pipe.accumulate() # Add the numbers together ) print('11² + 13² = ', await xs)
async def main(): # This stream computes 11² + 13² in 1.5 second xs = ( stream.count(interval=0.1) # Count from zero every 0.1 s | pipe.skip(10) # Skip the first 10 numbers | pipe.take(5) # Take the following 5 | pipe.filter(lambda x: x % 2) # Keep odd numbers | pipe.map(lambda x: x ** 2) # Square the results | pipe.accumulate() # Add the numbers together ) print('11² + 13² = ', await xs)
async def test_aggregate(assert_run, event_loop): with event_loop.assert_cleanup(): xs = stream.range(5) | add_resource.pipe(1) | pipe.accumulate() await assert_run(xs, [0, 1, 3, 6, 10]) with event_loop.assert_cleanup(): xs = (stream.range(2, 4) | add_resource.pipe(1) | pipe.accumulate(func=operator.mul, initializer=2)) await assert_run(xs, [2, 4, 12]) with event_loop.assert_cleanup(): xs = stream.range(0) | add_resource.pipe(1) | pipe.accumulate() await assert_run(xs, []) async def sleepmax(x, y): return await asyncio.sleep(1, result=max(x, y)) with event_loop.assert_cleanup(): xs = stream.range(3) | add_resource.pipe(1) | pipe.accumulate(sleepmax) await assert_run(xs, [0, 1, 2]) assert event_loop.steps == [1] * 3
async def test_aggregate(assert_run, event_loop): with event_loop.assert_cleanup(): xs = stream.range(5) | add_resource.pipe(1) | pipe.accumulate() await assert_run(xs, [0, 1, 3, 6, 10]) with event_loop.assert_cleanup(): xs = (stream.range(2, 4) | add_resource.pipe(1) | pipe.accumulate(func=operator.mul, initializer=2)) await assert_run(xs, [2, 4, 12]) with event_loop.assert_cleanup(): xs = stream.range(0) | add_resource.pipe(1) | pipe.accumulate() await assert_run(xs, []) async def sleepmax(x, y): return await asyncio.sleep(1, result=max(x, y)) with event_loop.assert_cleanup(): xs = stream.range(3) | add_resource.pipe(1) | pipe.accumulate(sleepmax) await assert_run(xs, [0, 1, 2]) assert event_loop.steps == [1]*3