def METHOD_NAME(self, input, incremental_state: Optional[Dict[str, Dict[str, Optional[Tensor]]]] = None):
    """
    Args:
        incremental_state: Used to buffer signal; if not None, then input is
            expected to contain a single frame. If the input order changes
            between time steps, call reorder_incremental_state.
    Input:
        Time x Batch x Channel during training
        Batch x Time x Channel during inference
    """
    if incremental_state is None:
        output = self.conv_tbc(input)
        if self.kernel_size[0] > 1 and self.padding[0] > 0:
            # remove future timesteps added by padding
            output = output[: -self.padding[0], :, :]
        return output
    # reshape weight
    weight = self._get_linearized_weight()
    kw = self.kernel_size[0]
    bsz = input.size(0)  # input: bsz x len x dim
    if kw > 1:
        input = input.data
        input_buffer = self._get_input_buffer(incremental_state)
        if input_buffer is None:
            input_buffer = input.new(bsz, kw, input.size(2)).zero_()
            self._set_input_buffer(incremental_state, input_buffer)
        else:
            # shift buffer
            input_buffer[:, :-1, :] = input_buffer[:, 1:, :].clone()
        # append next input
        input_buffer[:, -1, :] = input[:, -1, :]
        input = input_buffer
    with torch.no_grad():
        output = F.linear(input.view(bsz, -1), weight, self.bias)
    return output.view(bsz, 1, -1)