{"record":{"id":"da9a58f4cbba5b29","repo":"kovidgoyal/kitty","slug":"r-has-too-many-points-for-a-linear-easing-curve","errorCode":null,"errorMessage":"{r} has too many points for a linear easing curve parameter","messagePattern":"(.+?) has too many points for a linear easing curve parameter","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"kitty/options/utils.py","lineNumber":1704,"sourceCode":"                yaxis.append(y)\n            else:\n                x = unit_float(x)\n                balance(x)\n                xaxis.append(x)\n                yaxis.append(y)\n\n        for r in parts:\n            points = r.strip().split()\n            y = unit_float(points[0])\n            if len(points) == 1:\n                add_point(y)\n            elif len(points) == 2:\n                add_point(y, percent(points[1]))\n            elif len(points) == 3:\n                add_point(y, percent(points[1]))\n                add_point(y, percent(points[2]))\n            else:\n                raise ValueError(f'{r} has too many points for a linear easing curve parameter')\n        balance(1)\n        return cls(type='linear', linear_x=tuple(xaxis), linear_y=tuple(yaxis))\n\n    @classmethod\n    def steps(cls, params: str) -> 'EasingFunction':\n        parts = params.replace(',', ' ').split()\n        jump_type: JumpTypes = 'end'\n        if len(parts) == 2:\n            n = int(parts[0])\n            jt = parts[1]\n            mapping: dict[str, JumpTypes] = {'jump-start': 'start', 'start': 'start', 'end': 'end', 'jump-end': 'end', 'jump-none': 'none', 'jump-both': 'both'}\n            try:\n                jump_type = mapping[jt.lower()]\n            except KeyError:\n                raise KeyError(f'{jt} is not a valid jump type for a linear easing function')\n            if jump_type == 'none':\n                n = max(2, n)\n            else:","sourceCodeStart":1686,"sourceCodeEnd":1722,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/options/utils.py#L1686-L1722","documentation":"Each comma-separated parameter of a linear() easing can hold at most 3 space-separated numbers (x plus up to 2 y candidates); more than 3 points in one parameter is rejected.","triggerScenarios":"Something like 'linear(0 0.1 0.2 0.3, ...)' — a single segment parameter with 4 numbers.","commonSituations":"Misreading the syntax and packing multiple y values into one parameter instead of separating with commas.","solutions":["Split into separate comma-separated parameters with at most 3 numbers each","Follow kitty's linear easing syntax from the docs"],"exampleFix":"# before\ncursor_blink_interval 0.5:linear(0 0.1 0.2 0.3)\n# after\ncursor_blink_interval 0.5:linear(0 0.1, 0.2 0.3)","handlingStrategy":"validation","validationCode":"def valid_linear_params(params: str) -> bool:\n    return all(len(p.split()) <= 3 for p in params.split(','))","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Max 3 numbers per comma-separated parameter"],"tags":["kitty","config","animation","easing"],"backgroundTag":"invalid-function-arguments","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}