code: def _register_scores_optimization(self, evaluator: Evaluator):
      scores = []
      for _, target_scores in self.scores.items():
          for _, score in target_scores.items():
              scores.append(score)
  
      if not scores:
          return
  
      params = [{"params": scores}]
      optimizer = Adam(params, 1e-2)
  
      def optimizer_task():
          optimizer.step()
          optimizer.zero_grad()
  
      evaluator.patch_optimizer_step(
          before_step_tasks=[optimizer_task], after_step_tasks=[]
      )
  
imports: from __future__ import annotations
  from collections import defaultdict
  import logging
  from typing import Dict, List, overload
  import torch
  from torch.optim import Adam
  from .scheduled_pruner import ScheduledPruner
  from .tools import is_active_target, generate_sparsity
  from ..base.compressor import Compressor
  from ..base.target_space import TargetType
  from ..base.wrapper import ModuleWrapper
  from ..utils import Evaluator, _EVALUATOR_DOCSTRING
label_desc: Use image node_id 7 for calling the MovementPruner obj's underlying member method code with example usage: obj._register_scores_optimization(evaluator) without return types