def METHOD_NAME(self, input_shape, **kwargs):
    """
    Construct a network and return its input and output layers.
    Arguments
    ---------
    input_shape : tuple of shape = (series_length (m), n_dimensions (d))
        The shape of the data fed into the input layer.
    Returns
    -------
    input_layer : keras.layers.Input
        The input layer of the network.
    output_layer : keras.layers.Layer
        The output layer of the network.
    """
    import tensorflow as tf
    self._n_filters_ = [64, 128, 128] if self.n_filters is None else self.n_filters
    self._kernel_size_ = [8, 5, 3] if self.kernel_size is None else self.kernel_size
    if isinstance(self._n_filters_, list):
        self._n_filters = self._n_filters_
    else:
        self._n_filters = [self._n_filters_] * self.n_residual_blocks
    if isinstance(self._kernel_size_, list):
        self._kernel_size = self._kernel_size_
    else:
        self._kernel_size = [self._kernel_size_] * self.n_conv_per_residual_block
    if isinstance(self.strides, list):
        self._strides = self.strides
    else:
        self._strides = [self.strides] * self.n_conv_per_residual_block
    if isinstance(self.dilation_rate, list):
        self._dilation_rate = self.dilation_rate
    else:
        self._dilation_rate = [self.dilation_rate] * self.n_conv_per_residual_block
    if isinstance(self.padding, list):
        self._padding = self.padding
    else:
        self._padding = [self.padding] * self.n_conv_per_residual_block
    if isinstance(self.activation, list):
        self._activation = self.activation
    else:
        self._activation = [self.activation] * self.n_conv_per_residual_block
    if isinstance(self.use_bias, list):
        self._use_bias = self.use_bias
    else:
        self._use_bias = [self.use_bias] * self.n_conv_per_residual_block
    input_layer = tf.keras.layers.Input(input_shape)
    x = input_layer
    for d in range(self.n_residual_blocks):
        input_block_tensor = x
        for c in range(self.n_conv_per_residual_block):
            conv = tf.keras.layers.Conv1D(
                filters=self._n_filters[d],
                kernel_size=self._kernel_size[c],
                strides=self._strides[d],
                padding=self._padding[c],
                dilation_rate=self._dilation_rate[c],
            )(x)
            conv = tf.keras.layers.BatchNormalization()(conv)
            if c == self.n_conv_per_residual_block - 1:
                conv = self._shortcut_layer(
                    input_tensor=input_block_tensor, output_tensor=conv
                )
            conv = tf.keras.layers.Activation(activation=self._activation[c])(conv)
            x = conv
    gap_layer = tf.keras.layers.GlobalAveragePooling1D()(conv)
    return input_layer, gap_layer