{"record":{"id":"954597bd9e48f8f9","repo":"3b1b/manim","slug":"not-implemented","errorCode":null,"errorMessage":"Not implemented","messagePattern":"Not implemented","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"manimlib/mobject/coordinate_systems.py","lineNumber":72,"sourceCode":"class CoordinateSystem(ABC):\n    \"\"\"\n    Abstract class for Axes and NumberPlane\n    \"\"\"\n    dimension: int = 2\n\n    def __init__(\n        self,\n        x_range: RangeSpecifier = DEFAULT_X_RANGE,\n        y_range: RangeSpecifier = DEFAULT_Y_RANGE,\n        num_sampled_graph_points_per_tick: int = 5,\n    ):\n        self.x_range = full_range_specifier(x_range)\n        self.y_range = full_range_specifier(y_range)\n        self.num_sampled_graph_points_per_tick = num_sampled_graph_points_per_tick\n\n    @abstractmethod\n    def coords_to_point(self, *coords: float | VectN) -> Vect3 | Vect3Array:\n        raise Exception(\"Not implemented\")\n\n    @abstractmethod\n    def point_to_coords(self, point: Vect3 | Vect3Array) -> tuple[float | VectN, ...]:\n        raise Exception(\"Not implemented\")\n\n    def c2p(self, *coords: float) -> Vect3 | Vect3Array:\n        \"\"\"Abbreviation for coords_to_point\"\"\"\n        return self.coords_to_point(*coords)\n\n    def p2c(self, point: Vect3) -> tuple[float | VectN, ...]:\n        \"\"\"Abbreviation for point_to_coords\"\"\"\n        return self.point_to_coords(point)\n\n    def get_origin(self) -> Vect3:\n        return self.c2p(*[0] * self.dimension)\n\n    @abstractmethod\n    def get_axes(self) -> VGroup:","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/3b1b/manim/blob/dee01804d47b9f94402d71472674710dcac125b8/manimlib/mobject/coordinate_systems.py#L54-L90","documentation":"Generic Exception('Not implemented') raised by the abstract method CoordinateSystem.coords_to_point (manimlib/mobject/coordinate_systems.py:72). The class uses @abstractmethod but bodies raise plain Exception; if a subclass fails to override the method (or calls super().coords_to_point(...)), you get this at runtime instead of the usual TypeError at instantiation.","triggerScenarios":"Defining a class inheriting Axes/ThreeDAxes/Camera-style CoordinateSystem without implementing coords_to_point; calling super().coords_to_point() inside a subclass; instantiating a half-implemented custom coordinate system subclass.","commonSituations":"Writing a custom coordinate system (polar variants, log-scale axes, custom projections) and missing a required method; version upgrades adding abstract methods that old subclasses never implemented.","solutions":["Implement coords_to_point in your subclass, mapping (x, y[, z]) tuples to scene points","If you don't need a custom mapping, inherit from Axes or NumberPlane instead of the base CoordinateSystem","Search for super().coords_to_point calls and replace with concrete parent logic"],"exampleFix":"# before\nclass LogAxes(CoordinateSystem):\n    def point_to_coords(self, p):\n        return (10 ** p[0], p[1])\n    # missing coords_to_point -> raises \"Not implemented\"\n\n# after\nclass LogAxes(CoordinateSystem):\n    def coords_to_point(self, *coords):\n        return self.c2p(  # delegate to implemented mapping\n            *map(lambda c: __import__('math').log10(c) if c > 0 else 0, coords)\n        )\n    def point_to_coords(self, p):\n        return (10 ** p[0], p[1])","handlingStrategy":"type-guard","validationCode":"import inspect\n\ndef implements_coords_to_point(cls) -> bool:\n    m = cls.coords_to_point\n    base = CoordinateSystem.coords_to_point\n    return getattr(m, '__func__', m) is not getattr(base, '__func__', base)","typeGuard":"def is_concrete_coord_system(obj) -> bool:\n    return (\n        isinstance(obj, CoordinateSystem)\n        and CoordinateSystem.coords_to_point is not type(obj).coords_to_point\n        and CoordinateSystem.point_to_coords is not type(obj).point_to_coords\n        and CoordinateSystem.get_axes is not type(obj).get_axes\n        and CoordinateSystem.get_all_ranges is not type(obj).get_all_ranges\n    )","tryCatchPattern":null,"preventionTips":["Inherit Axes/NumberPlane instead of the base CoordinateSystem unless you implement all abstract methods","Add an abstractmethod completeness unit test for custom coordinate systems"],"tags":["manim","coordinate-systems","abstract-method"],"backgroundTag":null,"analyzedSha":"dee01804d47b9f94402d71472674710dcac125b8","analyzedAt":"2026-08-14T19:53:44.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}