{"record":{"id":"9b42dd78cba540a9","repo":"huggingface/transformers","slug":"this-method-should-be-implemented-by-the-derived-c","errorCode":null,"errorMessage":"This method should be implemented by the derived class.","messagePattern":"This method should be implemented by the derived class\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"src/transformers/backbone_utils.py","lineNumber":305,"sourceCode":"    def channels(self):\n        return [self.out_feature_channels[name] for name in self.out_features]\n\n    def forward_with_filtered_kwargs(self, *args, **kwargs):\n        if not self.has_attentions:\n            kwargs.pop(\"output_attentions\", None)\n        if self.backbone_type == BackboneType.TIMM:\n            signature = dict(inspect.signature(self.forward).parameters)\n            kwargs = {k: v for k, v in kwargs.items() if k in signature}\n        return self(*args, **kwargs)\n\n    def forward(\n        self,\n        pixel_values,\n        output_hidden_states: bool | None = None,\n        output_attentions: bool | None = None,\n        return_dict: bool | None = None,\n    ):\n        raise NotImplementedError(\"This method should be implemented by the derived class.\")\n\n\ndef consolidate_backbone_kwargs_to_config(\n    backbone_config,\n    default_backbone: str | None = None,\n    default_config_type: str | None = None,\n    default_config_kwargs: dict | None = None,\n    timm_default_kwargs: dict | None = None,\n    **kwargs,\n):\n    # Lazy import to avoid circular import issues. Can be imported properly\n    # after deleting ref to `BackboneMixin` in `utils/backbone_utils.py`\n    from .configuration_utils import PreTrainedConfig\n    from .models.auto import CONFIG_MAPPING\n\n    use_timm_backbone = kwargs.pop(\"use_timm_backbone\", True)\n    backbone_kwargs = kwargs.pop(\"backbone_kwargs\", {})\n    backbone = kwargs.pop(\"backbone\") if kwargs.get(\"backbone\") is not None else default_backbone","sourceCodeStart":287,"sourceCodeEnd":323,"githubUrl":"https://github.com/huggingface/transformers/blob/a597f974857b3d92939971296bc0deb93d33d780/src/transformers/backbone_utils.py#L287-L323","documentation":"BackboneMixin.forward is an abstract stub: every concrete backbone must override it, because the mixin only supplies hooks, output capturing, and backbone-type plumbing — not the actual forward computation. If a derived class fails to override forward (or a caller invokes BackboneMixin.forward directly), this NotImplementedError fires. In older versions the mixin's forward was usable and warned; subclasses relying on that now break.","triggerScenarios":"Defining a class that inherits BackboneMixin (directly, without a concrete backbone base) and calling model(pixel_values); calling BackboneMixin.forward(model, ...) unbound; a custom backbone subclass whose forward was accidentally renamed or decorated away.","commonSituations":"Research code subclassing PreTrainedModel + BackboneMixin manually for a new architecture; upgrading transformers where a previously working mixin-level forward was removed; typos like def foward(self, ...).","solutions":["Implement forward(self, pixel_values, **kwargs) in your backbone subclass returning feature maps or a BackboneOutput","If you wanted a ready-made backbone, instantiate an existing one (e.g. AutoBackbone.from_pretrained(...)) instead of the bare mixin","Check for misspelled method names (foward) or decorators that hide the method"],"exampleFix":"# before\nclass MyBackbone(BackboneMixin, PreTrainedModel):\n    pass  # no forward -> NotImplementedError\n\n# after\nclass MyBackbone(BackboneMixin, PreTrainedModel):\n    def forward(self, pixel_values):\n        feature_maps = self.embedder(pixel_values)\n        for stage in self.stages:\n            feature_maps = stage(feature_maps)\n        return feature_maps","handlingStrategy":"type-guard","validationCode":"assert type(model).forward is not BackboneMixin.forward, \"subclass must override forward()\"","typeGuard":"def implements_forward(cls) -> bool:\n    return 'forward' in cls.__dict__ or any('forward' in c.__dict__ for c in cls.__mro__[1:] if c is not BackboneMixin)","tryCatchPattern":"try:\n    out = model(pixel_values)\nexcept NotImplementedError:\n    raise TypeError(f\"{type(model).__name__} does not implement forward(); use a concrete backbone or AutoBackbone\") from None","preventionTips":["Always define forward() in custom BackboneMixin subclasses","Prefer AutoBackbone.from_pretrained(...) over hand-rolled mixin usage","Run a single dummy forward in your model's __init__ or test suite to catch missing overrides early"],"tags":["backbone","not-implemented","abstract","subclassing"],"backgroundTag":null,"analyzedSha":"a597f974857b3d92939971296bc0deb93d33d780","analyzedAt":"2026-08-14T18:24:08.354Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}