{"record":{"id":"8344a1b1e0b25797","repo":"lllyasviel/ControlNet","slug":"order-must-be-1-or-2-or-3","errorCode":null,"errorMessage":"'order' must be '1' or '2' or '3'.","messagePattern":"'order' must be '1' or '2' or '3'\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"ldm/models/diffusion/dpm_solver/dpm_solver.py","lineNumber":454,"sourceCode":"            K = steps // 3 + 1\n            if steps % 3 == 0:\n                orders = [3, ] * (K - 2) + [2, 1]\n            elif steps % 3 == 1:\n                orders = [3, ] * (K - 1) + [1]\n            else:\n                orders = [3, ] * (K - 1) + [2]\n        elif order == 2:\n            if steps % 2 == 0:\n                K = steps // 2\n                orders = [2, ] * K\n            else:\n                K = steps // 2 + 1\n                orders = [2, ] * (K - 1) + [1]\n        elif order == 1:\n            K = 1\n            orders = [1, ] * steps\n        else:\n            raise ValueError(\"'order' must be '1' or '2' or '3'.\")\n        if skip_type == 'logSNR':\n            # To reproduce the results in DPM-Solver paper\n            timesteps_outer = self.get_time_steps(skip_type, t_T, t_0, K, device)\n        else:\n            timesteps_outer = self.get_time_steps(skip_type, t_T, t_0, steps, device)[\n                torch.cumsum(torch.tensor([0, ] + orders)).to(device)]\n        return timesteps_outer, orders\n\n    def denoise_to_zero_fn(self, x, s):\n        \"\"\"\n        Denoise at the final step, which is equivalent to solve the ODE from lambda_s to infty by first-order discretization.\n        \"\"\"\n        return self.data_prediction_fn(x, s)\n\n    def dpm_solver_first_update(self, x, s, t, model_s=None, return_intermediate=False):\n        \"\"\"\n        DPM-Solver-1 (equivalent to DDIM) from time `s` to time `t`.\n        Args:","sourceCodeStart":436,"sourceCodeEnd":472,"githubUrl":"https://github.com/lllyasviel/ControlNet/blob/ed85cd1e25a5ed592f7d8178495b4483de0331bf/ldm/models/diffusion/dpm_solver/dpm_solver.py#L436-L472","documentation":"The combined singlestep solver (DPM-Solver-fast) internally assigns per-step orders and only supports overall order 1, 2, or 3. Passing any other order (0, 4, 4.0 float, string) raises this ValueError in get_orders_and_timesteps_for_singlestep_solver.","triggerScenarios":"Calling sample(..., order=4), order=0, or order as a float/string; UI sliders that allow order values outside 1-3.","commonSituations":"Exposing solver order in a demo without clamping; copying DPM-Solver++ settings expecting order-4 support (which this version lacks).","solutions":["Clamp order to 1, 2, or 3 before calling sample","Use order=3 with method='singlestep' for DPM-Solver-3 behavior","Upgrade to DPM-Solver++ if higher-order multistep is required"],"exampleFix":"# before\ndpm.sample(img, steps=20, t_start=..., order=4, ...)\n# after\ndpm.sample(img, steps=20, t_start=..., order=3, ...)","handlingStrategy":"validation","validationCode":"assert order in (1, 2, 3), f'order must be 1-3, got {order}'","typeGuard":"def is_valid_order(o) -> bool:\n    return isinstance(o, int) and o in (1, 2, 3)","tryCatchPattern":null,"preventionTips":["Clamp UI/API order inputs to 1-3","Use int(order) before calling the solver"],"tags":["dpm-solver","sampling","order","value-error"],"backgroundTag":"argument-out-of-range","analyzedSha":"ed85cd1e25a5ed592f7d8178495b4483de0331bf","analyzedAt":"2026-08-27T12:58:54.167Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}