| 218 | return self.hooks.get(name, None) |
| 219 | |
| 220 | def remove_hook(self, name: str, recurse: bool = True) -> None: |
| 221 | if name in self.hooks.keys(): |
| 222 | num_hooks = len(self._hook_order) |
| 223 | hook = self.hooks[name] |
| 224 | index = self._hook_order.index(name) |
| 225 | fn_ref = self._fn_refs[index] |
| 226 | |
| 227 | old_forward = fn_ref.forward |
| 228 | if fn_ref.original_forward is not None: |
| 229 | old_forward = fn_ref.original_forward |
| 230 | |
| 231 | if index == num_hooks - 1: |
| 232 | self._module_ref.forward = old_forward |
| 233 | else: |
| 234 | self._fn_refs[index + 1].forward = old_forward |
| 235 | |
| 236 | self._module_ref = hook.deinitalize_hook(self._module_ref) |
| 237 | del self.hooks[name] |
| 238 | self._hook_order.pop(index) |
| 239 | self._fn_refs.pop(index) |
| 240 | |
| 241 | if recurse: |
| 242 | for module_name, module in self._module_ref.named_modules(): |
| 243 | if module_name == "": |
| 244 | continue |
| 245 | if hasattr(module, "_diffusers_hook"): |
| 246 | module._diffusers_hook.remove_hook(name, recurse=False) |
| 247 | |
| 248 | def reset_stateful_hooks(self, recurse: bool = True) -> None: |
| 249 | for hook_name in reversed(self._hook_order): |