def convolved_2d(iterable, kernel_size=<NUM_LIT:1>, stride=<NUM_LIT:1>, padding=<NUM_LIT:0>, default_value=None):
kernel_size = dimensionize(kernel_size, nd=<NUM_LIT:2>)<EOL>stride = dimensionize(stride, nd=<NUM_LIT:2>)<EOL>padding = dimensionize(padding, nd=<NUM_LIT:2>)<EOL>for row_packet in convolved(iterable, kernel_size[<NUM_LIT:0>], stride[<NUM_LIT:0>], padding[<NUM_LIT:0>], default_value):<EOL><INDENT>transposed_inner = []<EOL>for col in tuple(row_packet):<EOL><INDENT>transposed_inner.append(list(<EOL>convolved(col, kernel_size[<NUM_LIT:1>], stride[<NUM_LIT:1>], padding[<NUM_LIT:1>], default_value)<EOL>))<EOL><DEDENT>if len(transposed_inner) > <NUM_LIT:0>:<EOL><INDENT>for col_i in range(len(transposed_inner[<NUM_LIT:0>])):<EOL><INDENT>yield tuple(row_j[col_i] for row_j in transposed_inner)<EOL><DEDENT><DEDENT><DEDENT>
2D Iterable to get every convolution window per loop iteration.

    For more information, refer to:
    - https://github.com/guillaume-chevalier/python-conv-lib/blob/master/conv/conv.py
    - https://github.com/guillaume-chevalier/python-conv-lib
    - MIT License, Copyright (c) 2018 Guillaume Chevalier