{"record":{"id":"045d180a45887e4e","repo":"Unity-Technologies/ml-agents","slug":"the-make-method-not-implemented-for-entry-self","errorCode":null,"errorMessage":"The make() method not implemented for entry {self.identifier}","messagePattern":"The make\\(\\) method not implemented for entry (.+?)","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"ml-agents-envs/mlagents_envs/registry/base_registry_entry.py","lineNumber":54,"sourceCode":"        \"\"\"\n        The cumulative reward that an Agent must receive for the task to be considered\n        solved.\n        \"\"\"\n        return self._expected_reward\n\n    @property\n    def description(self) -> Optional[str]:\n        \"\"\"\n        A description of the Unity Environment the entry can make.\n        \"\"\"\n        return self._description\n\n    @abstractmethod\n    def make(self, **kwargs: Any) -> BaseEnv:\n        \"\"\"\n        This method creates a Unity BaseEnv (usually a UnityEnvironment).\n        \"\"\"\n        raise NotImplementedError(\n            f\"The make() method not implemented for entry {self.identifier}\"\n        )\n","sourceCodeStart":36,"sourceCodeEnd":57,"githubUrl":"https://github.com/Unity-Technologies/ml-agents/blob/3ecb446f75d1e7400eb404c562dc005d3164cffc/ml-agents-envs/mlagents_envs/registry/base_registry_entry.py#L36-L57","documentation":"NotImplementedError raised by the abstract BaseRegistryEntry.make() when a subclass does not implement make(). Registry entries must supply a make() that builds a Unity BaseEnv (usually UnityEnvironment); the base class provides only the fallback raise.","triggerScenarios":"Calling make() on a registry entry whose concrete class forgot to override the abstract make() method (e.g. a custom entry added to the registry that only registers metadata).","commonSituations":"Custom third-party registry entries contributed via unity_env_registry.register(); partially implemented entry classes; API changes where make() was renamed and the override no longer matches.","solutions":["Implement make(**kwargs) in the registry entry subclass, returning a UnityEnvironment/BaseEnv.","Use a built-in entry (e.g. a RemoteRegistryEntry from a manifest) instead of the abstract base.","Register a BinaryRegistryEntry or your own subclass with a complete make() implementation."],"exampleFix":"// before\nclass MyEntry(BaseRegistryEntry):\n    pass  # no make()\n// after\nclass MyEntry(BaseRegistryEntry):\n    def make(self, **kwargs):\n        return UnityEnvironment(file_name=self.path, **kwargs)","handlingStrategy":"try-catch","validationCode":"if type(entry).make is BaseRegistryEntry.make:\n    raise TypeError(f\"{entry.identifier} does not implement make()\")\nenv = entry.make()","typeGuard":"def has_make(entry) -> bool:\n    return type(entry).make is not BaseRegistryEntry.make","tryCatchPattern":"try:\n    env = entry.make()\nexcept NotImplementedError as e:\n    raise RuntimeError(f\"Registry entry unusable: {e}\") from e","preventionTips":["Always override make() in BaseRegistryEntry subclasses","Unit-test custom registry entries with entry.make()","Use built-in entry classes where possible"],"tags":["registry","abstract-method","python"],"backgroundTag":"abstract-method-not-implemented","analyzedSha":"3ecb446f75d1e7400eb404c562dc005d3164cffc","analyzedAt":"2026-09-02T16:33:12.832Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T21:17:11.164Z"}