def METHOD_NAME(
    self,
    x0: np.ndarray,
    *,
    algorithm: AlgorithmType = Algorithm.SLSQP,
    opt_conditions: Optional[Mapping[str, Union[int, float]]] = None,
    opt_parameters: Optional[Mapping[str, Any]] = None,
    keep_history: bool = False,
    check_constraints: bool = True,
    check_constraints_warn: bool = True,
) -> OptimiserResult:
    """
    Perform the optimisation.
    See :func:`.optimise` for more function parameter details.
    """
    df_objective = self._overridden_or_default(
        self.df_objective, OptimisationProblem, None
    )
    return METHOD_NAME(
        self.objective,
        df_objective=df_objective,
        x0=x0,
        algorithm=algorithm,
        opt_conditions=opt_conditions,
        opt_parameters=opt_parameters,
        bounds=self.bounds(),
        eq_constraints=self.eq_constraints(),
        ineq_constraints=self.ineq_constraints(),
        keep_history=keep_history,
        check_constraints=check_constraints,
        check_constraints_warn=check_constraints_warn,
    )