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

  1. Implement make(**kwargs) in the registry entry subclass, returning a UnityEnvironment/BaseEnv.
  2. Use a built-in entry (e.g. a RemoteRegistryEntry from a manifest) instead of the abstract base.
  3. 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

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


AI-assisted analysis of Unity-Technologies/ml-agents@3ecb446f75 (2026-09-02). Data as JSON: /api/errors/045d180a45887e4e. Report an issue: GitHub.