def METHOD_NAME(self, mo_coeff=None, ci0=None, callback=None, _kern=None):
    if mo_coeff is None:
        mo_coeff = self.mo_coeff
    else: # overwrite self.mo_coeff because it is needed in many methods of this class
        self.mo_coeff = mo_coeff
    if callback is None: callback = self.callback
    if _kern is None: _kern = mc1step.METHOD_NAME
    self.check_sanity()
    self.dump_flags()
    log = logger.Logger(self.stdout, self.verbose)
    # Initialize/overwrite self.fcisolver.orbsym and self.fcisolver.wfnsym
    mo_coeff = self.mo_coeff = casci_symm.label_symmetry_(self, mo_coeff, ci0)
    self.converged, self.e_tot, self.e_cas, self.ci, \
            self.mo_coeff, self.mo_energy = \
            _kern(self, mo_coeff,
                  tol=self.conv_tol, conv_tol_grad=self.conv_tol_grad,
                  ci0=ci0, callback=callback, verbose=self.verbose)
    log.note('CASSCF energy = %#.15g', self.e_tot)
    self._finalize()
    return self.e_tot, self.e_cas, self.ci, self.mo_coeff, self.mo_energy