def METHOD_NAME(
    ert: EnKFMain,
    storage: StorageAccessor,
    args: Namespace,
    experiment_id: UUID,
) -> BaseRunModel:
    logger = logging.getLogger(__name__)
    logger.info(
        "Initiating experiment",
        extra={
            "mode": args.mode,
            "ensemble_size": ert.getEnsembleSize(),
        },
    )
    if args.mode == TEST_RUN_MODE:
        return _setup_single_test_run(ert, storage, args, experiment_id)
    elif args.mode == ENSEMBLE_EXPERIMENT_MODE:
        return _setup_ensemble_experiment(ert, storage, args, experiment_id)
    elif args.mode == ENSEMBLE_SMOOTHER_MODE:
        return _setup_ensemble_smoother(ert, storage, args, experiment_id)
    elif args.mode == ES_MDA_MODE:
        return _setup_multiple_data_assimilation(ert, storage, args, experiment_id)
    elif args.mode == ITERATIVE_ENSEMBLE_SMOOTHER_MODE:
        return _setup_iterative_ensemble_smoother(ert, storage, args, experiment_id)
    else:
        raise NotImplementedError(f"Run type not supported {args.mode}")