@classmethod
def conv_block(cls, inputs, layout, filters, bottleneck, bottleneck_factor=
    None, **kwargs):
    """ ResNet convolution block

        Parameters
        ----------
        inputs
            input tensor
        layout : str
            a sequence of layers in the block
        filters : int
            number of output filters
        downsample : bool
            whether to decrease spatial dimensions with strides=2
        bottleneck : bool
            whether to use a simple or a bottleneck block
        bottleneck_factor : int
            filter count scaling factor
        kwargs : dict
            conv_block parameters

        Returns
        -------
        nn.Module
        """
    if layout is None:
        layout = cls.default_layout(bottleneck=bottleneck, filters=filters,
            **kwargs)
    if bottleneck:
        x = cls.bottleneck_block(inputs, layout, filters, bottleneck_factor
            =bottleneck_factor, **kwargs)
    else:
        x = cls.simple_block(inputs, layout, filters, **kwargs)
    return x
