{"record":{"id":"82e0a3b968f3c846","repo":"microsoft/VibeVoice","slug":"solver-type-is-not-implemented-for-self-class","errorCode":null,"errorMessage":"{solver_type} is not implemented for {self.__class__}","messagePattern":"(.+?) is not implemented for (.+?)","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"vibevoice/schedule/dpm_solver.py","lineNumber":280,"sourceCode":"        self.sigma_t = torch.sqrt(1 - self.alphas_cumprod)\n        self.lambda_t = torch.log(self.alpha_t) - torch.log(self.sigma_t)\n        self.sigmas = ((1 - self.alphas_cumprod) / self.alphas_cumprod) ** 0.5\n\n        # standard deviation of the initial noise distribution\n        self.init_noise_sigma = 1.0\n\n        # settings for DPM-Solver\n        if algorithm_type not in [\"dpmsolver\", \"dpmsolver++\", \"sde-dpmsolver\", \"sde-dpmsolver++\"]:\n            if algorithm_type == \"deis\":\n                self.register_to_config(algorithm_type=\"dpmsolver++\")\n            else:\n                raise NotImplementedError(f\"{algorithm_type} is not implemented for {self.__class__}\")\n\n        if solver_type not in [\"midpoint\", \"heun\"]:\n            if solver_type in [\"logrho\", \"bh1\", \"bh2\"]:\n                self.register_to_config(solver_type=\"midpoint\")\n            else:\n                raise NotImplementedError(f\"{solver_type} is not implemented for {self.__class__}\")\n\n        if algorithm_type not in [\"dpmsolver++\", \"sde-dpmsolver++\"] and final_sigmas_type == \"zero\":\n            raise ValueError(\n                f\"`final_sigmas_type` {final_sigmas_type} is not supported for `algorithm_type` {algorithm_type}. Please choose `sigma_min` instead.\"\n            )\n\n        # settable values\n        self.num_inference_steps = None\n        timesteps = np.linspace(0, num_train_timesteps - 1, num_train_timesteps, dtype=np.float32)[::-1].copy()\n        self.timesteps = torch.from_numpy(timesteps)\n        self.model_outputs = [None] * solver_order\n        self.lower_order_nums = 0\n        self._step_index = None\n        self._begin_index = None\n        self.sigmas = self.sigmas.to(\"cpu\")  # to avoid too much CPU/GPU communication\n\n    @property\n    def step_index(self):","sourceCodeStart":262,"sourceCodeEnd":298,"githubUrl":"https://github.com/microsoft/VibeVoice/blob/94da20d98b2fa7688e9cbfaf7692ddb4954f7600/vibevoice/schedule/dpm_solver.py#L262-L298","documentation":"solver_type selects the intermediate-solver used inside multistep updates; this scheduler only implements `midpoint` and `heun`. Legacy names `logrho`, `bh1`, `bh2` are silently remapped to `midpoint`; everything else raises NotImplementedError in the constructor. This mirrors upstream diffusers behavior.","triggerScenarios":"Constructing with `solver_type=\"taylor\"`, `\"rdm\"`, `\"midpoint \"` (trailing space), or any string outside {midpoint, heun, logrho, bh1, bh2}.","commonSituations":"Configs copied from papers or other solver implementations that advertise more solver types; typos; whitespace introduced by YAML string handling.","solutions":["Set solver_type to \"midpoint\" (default, cheaper) or \"heun\" (2nd-order correction, slightly better quality per step).","If you wrote \"logrho\"/\"bh1\"/\"bh2\", note they work but are remapped to midpoint — just use midpoint explicitly.","Strip/normalize whitespace when loading solver_type from user config."],"exampleFix":"# before\nsched = DPMSolverMultistepScheduler(..., solver_type=\"taylor\")\n\n# after\nsched = DPMSolverMultistepScheduler(..., solver_type=\"heun\")","handlingStrategy":"validation","validationCode":"SOLVERS = {\"midpoint\", \"heun\", \"logrho\", \"bh1\", \"bh2\"}\nassert solver_type in SOLVERS, f\"solver_type must be one of {sorted(SOLVERS)}\"\nsched = DPMSolverMultistepScheduler(..., solver_type=solver_type)","typeGuard":"def is_supported_solver_type(v) -> bool:\n    return isinstance(v, str) and v in {\"midpoint\", \"heun\", \"logrho\", \"bh1\", \"bh2\"}","tryCatchPattern":null,"preventionTips":["Only 'midpoint' and 'heun' are real implementations; logrho/bh1/bh2 alias to midpoint.","Strip whitespace from config strings before passing.","heun costs one extra function evaluation — reserve it for low step counts."],"tags":["python","diffusion","scheduler","config","solver"],"backgroundTag":null,"analyzedSha":"94da20d98b2fa7688e9cbfaf7692ddb4954f7600","analyzedAt":"2026-08-15T04:12:07.418Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}