code: def _pooling_output_shape(input_shape, pool_size=(2, 2),
                            strides=None, padding='VALID'):
    
    dims = (1,) + pool_size + (1,)  # NHWC
    spatial_strides = strides or (1,) * len(pool_size)
    strides = (1,) + spatial_strides + (1,)
    pads = padtype_to_pads(input_shape, dims, strides, padding)
    operand_padded = onp.add(input_shape, onp.add(*zip(*pads)))
    t = onp.floor_divide(onp.subtract(operand_padded, dims), strides) + 1
    return tuple(t)
docs: Helper: compute the output shape for the pooling layer.