    def __print_forecast_info(self):
        """
        Print information about the forecast setup, including inputs, methods, and parameters.
        """
        print("Computing STEPS nowcast")
        print("-----------------------")
        print("")

        print("Inputs")
        print("------")
        print(f"input dimensions: {self.__precip.shape[1]}x{self.__precip.shape[2]}")
        if self.__config.kmperpixel is not None:
            print(f"km/pixel:         {self.__config.kmperpixel}")
        if self.__config.timestep is not None:
            print(f"time step:        {self.__config.timestep} minutes")
        print("")

        print("Methods")
        print("-------")
        print(f"extrapolation:          {self.__config.extrapolation_method}")
        print(f"bandpass filter:        {self.__config.bandpass_filter_method}")
        print(f"decomposition:          {self.__config.decomposition_method}")
        print(f"noise generator:        {self.__config.noise_method}")
        print(
            "noise adjustment:       {}".format(
                ("yes" if self.__config.noise_stddev_adj else "no")
            )
        )
        print(f"velocity perturbator:   {self.__config.velocity_perturbation_method}")
        print(
            "conditional statistics: {}".format(
                ("yes" if self.__config.conditional else "no")
            )
        )
        print(f"precip. mask method:    {self.__config.mask_method}")
        print(f"probability matching:   {self.__config.probmatching_method}")
        print(f"FFT method:             {self.__config.fft_method}")
        print(f"domain:                 {self.__config.domain}")
        print("")

        print("Parameters")
        print("----------")
        if isinstance(self.__time_steps, int):
            print(f"number of time steps:     {self.__time_steps}")
        else:
            print(f"time steps:               {self.__time_steps}")
        print(f"ensemble size:            {self.__config.n_ens_members}")
        print(f"parallel threads:         {self.__config.num_workers}")
        print(f"number of cascade levels: {self.__config.n_cascade_levels}")
        print(f"order of the AR(p) model: {self.__config.ar_order}")

        if self.__config.velocity_perturbation_method == "bps":
            self.__params.velocity_perturbation_parallel = (
                self.__params.velocity_perturbation_kwargs.get(
                    "p_par", noise.motion.get_default_params_bps_par()
                )
            )
            self.__params.velocity_perturbation_perpendicular = (
                self.__params.velocity_perturbation_kwargs.get(
                    "p_perp", noise.motion.get_default_params_bps_perp()
                )
            )
            print(
                f"velocity perturbations, parallel:      {self.__params.velocity_perturbation_parallel[0]},{self.__params.velocity_perturbation_parallel[1]},{self.__params.velocity_perturbation_parallel[2]}"
            )
            print(
                f"velocity perturbations, perpendicular: {self.__params.velocity_perturbation_perpendicular[0]},{self.__params.velocity_perturbation_perpendicular[1]},{self.__params.velocity_perturbation_perpendicular[2]}"
            )

        if self.__config.precip_threshold is not None:
            print(f"precip. intensity threshold: {self.__config.precip_threshold}")
Print information about the forecast setup, including inputs, methods, and parameters.
pysteps/nowcasts/steps.py