def __init__(
        self,
        model: nn.Module,
        model_editor: Optional[ModelEditor] = None,
        seed: int = 0,
    ):
        r"""
        A calibration classifier class.

        Parameters
        ----------
        model : nn.Module
            A model describing the deterministic relation between inputs and outputs. The outputs must correspond to
            the logits of a softmax probability vector. The output dimension must be the same as the number of classes.
            Let :math:`x` be input variables and :math:`w` the random model parameters. Then the model is described by
            a function :math:`f(w, x)`, where each component of :math:`f` corresponds to one of the classes.
        model_editor : ModelEditor
            A model_editor objects. It takes the forward pass and transforms the outputs.
        seed: int
            A random seed.

        Attributes
        ----------
        model : nn.Module
            See `model` in `Parameters`.
        model_manager : ClassificationModelManager
            This object orchestrates the model's forward pass.
        prob_output_layer : ClassificationProbOutputLayer
            This object characterizes the distribution of target variable given the outputs. It is defined
            by :math:`p(y|o)=\text{Categorical}(y|p=softmax(o))`,
            where :math:`o` denotes the outputs and :math:`y` denotes a target variable.
        likelihood : ClassificationLikelihood
            The likelihood function. This is defined by
            :math:`p(y|w, \phi, x) = \text{Categorical}(y|p=\text{softmax}(g(\phi, f(w, x)))`.
        predictive : ClassificationPredictive
            This denotes the predictive distribution, that is :math:`p(y|x, \mathcal{D})`.
        """
        self.model_manager = self._get_model_manager(
            model, model_editor, ClassificationModelManager
        )
        self.prob_output_layer = self._get_prob_output_layer(model)
        self.likelihood = ClassificationLikelihood(
            model_manager=self.model_manager,
            prob_output_layer=self.prob_output_layer,
            output_calib_manager=None,
        )
        self.predictive = ClassificationPredictive(likelihood=self.likelihood)
        super().__init__(seed=seed)

        A calibration classifier class.

        Parameters
        ----------
        model : nn.Module
            A model describing the deterministic relation between inputs and outputs. The outputs must correspond to
            the logits of a softmax probability vector. The output dimension must be the same as the number of classes.
            Let :math:`x` be input variables and :math:`w` the random model parameters. Then the model is described by
            a function :math:`f(w, x)`, where each component of :math:`f` corresponds to one of the classes.
        model_editor : ModelEditor
            A model_editor objects. It takes the forward pass and transforms the outputs.
        seed: int
            A random seed.

        Attributes
        ----------
        model : nn.Module
            See `model` in `Parameters`.
        model_manager : ClassificationModelManager
            This object orchestrates the model's forward pass.
        prob_output_layer : ClassificationProbOutputLayer
            This object characterizes the distribution of target variable given the outputs. It is defined
            by :math:`p(y|o)=\text{Categorical}(y|p=softmax(o))`,
            where :math:`o` denotes the outputs and :math:`y` denotes a target variable.
        likelihood : ClassificationLikelihood
            The likelihood function. This is defined by
            :math:`p(y|w, \phi, x) = \text{Categorical}(y|p=\text{softmax}(g(\phi, f(w, x)))`.
        predictive : ClassificationPredictive
            This denotes the predictive distribution, that is :math:`p(y|x, \mathcal{D})`.
        
fortuna/calib_model/classification.py