def get_outputs(
        self,
        params: Params,
        inputs_loader: InputsLoader,
        mutable: Optional[Mutable] = None,
        distribute: bool = True,
        **kwargs,
    ) -> jnp.ndarray:
        """
        Compute the outputs and their calibrated version.

        Parameters
        ----------
        params : Params
            The random parameters of the probabilistic model.
        inputs_loader : InputsLoader
            A loader of input data points.
        mutable : Optional[Mutable]
            The mutable objects used to evaluate the models.
        distribute: bool
            Whether to distribute computation over multiple devices, if available.

        Returns
        -------
        jnp.ndarray
            The calibrated outputs.
        """

        if distribute:
            inputs_loader = DeviceDimensionAugmentedLoader(inputs_loader)

        @jit
        def fun(_inputs):
            return self.model_manager.apply(params, _inputs, mutable, **kwargs)

        outputs = []
        for inputs in inputs_loader:
            outputs.append(
                self._unshard_array(pmap(fun)(inputs)) if distribute else fun(inputs)
            )
        return jnp.concatenate(outputs, 0)

        Compute the outputs and their calibrated version.

        Parameters
        ----------
        params : Params
            The random parameters of the probabilistic model.
        inputs_loader : InputsLoader
            A loader of input data points.
        mutable : Optional[Mutable]
            The mutable objects used to evaluate the models.
        distribute: bool
            Whether to distribute computation over multiple devices, if available.

        Returns
        -------
        jnp.ndarray
            The calibrated outputs.
        
fortuna/likelihood/base.py