Unity-Technologies/ml-agents · error · NotImplementedError
The make() method not implemented for entry {self.identifier
Error message
The make() method not implemented for entry {self.identifier} What it means
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.
Source
Thrown at ml-agents-envs/mlagents_envs/registry/base_registry_entry.py:54
"""
The cumulative reward that an Agent must receive for the task to be considered
solved.
"""
return self._expected_reward
@property
def description(self) -> Optional[str]:
"""
A description of the Unity Environment the entry can make.
"""
return self._description
@abstractmethod
def make(self, **kwargs: Any) -> BaseEnv:
"""
This method creates a Unity BaseEnv (usually a UnityEnvironment).
"""
raise NotImplementedError(
f"The make() method not implemented for entry {self.identifier}"
)
View on GitHub (pinned to 3ecb446f75)
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.
Example fix
// before
class MyEntry(BaseRegistryEntry):
pass # no make()
// after
class MyEntry(BaseRegistryEntry):
def make(self, **kwargs):
return UnityEnvironment(file_name=self.path, **kwargs) Defensive patterns
Strategy: try-catch
Validate before calling
if type(entry).make is BaseRegistryEntry.make:
raise TypeError(f"{entry.identifier} does not implement make()")
env = entry.make() Type guard
def has_make(entry) -> bool:
return type(entry).make is not BaseRegistryEntry.make Try / catch
try:
env = entry.make()
except NotImplementedError as e:
raise RuntimeError(f"Registry entry unusable: {e}") from e Prevention
- Always override make() in BaseRegistryEntry subclasses
- Unit-test custom registry entries with entry.make()
- Use built-in entry classes where possible
When it happens
Trigger: 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).
Common situations: 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.
Understand the failure class
Background: "NotImplementedError: Subclasses should override this method" / "must be implemented" — abstract method errors explained — this error's family across 40 libraries.
Related errors
- The entry {identifier} is not present in the registry.
- NotImplementedError
- There was a problem reading a message in a SideChannel. Plea
- StatsSideChannel should never receive messages.
- agent_id {agent_id} is not present in the DecisionSteps
AI-assisted analysis of Unity-Technologies/ml-agents@3ecb446f75 (2026-09-02).
Data as JSON: /api/errors/045d180a45887e4e.
Report an issue: GitHub.