code: def _check_evaluator(
      new_model: GraphModelSpace,
      group_model: Dict[GraphModelSpace, Device],
  ) -> bool:
      from nni.nas.evaluator.pytorch import Lightning
      from .evaluator import (
          MultiModelLightningModule,
          MultiModelTrainer,
      )
  
      if not (
          isinstance(new_model.evaluator, Lightning)
          and isinstance(
              new_model.evaluator.module, MultiModelLightningModule
          )
          and isinstance(new_model.evaluator.trainer, MultiModelTrainer)
      ):
          return False
      for m in group_model:
          if not m.evaluator == new_model.evaluator:
              return False
      return True
  
imports: from __future__ import annotations
  import logging
  import time
  import threading
  from collections.abc import Iterable
  from typing import List, Dict, Tuple, cast
  from nni.common.device import GPUDevice, Device
  from nni.experiment.config.training_services import RemoteConfig
  from nni.nas.space import GraphModelSpace, Node, ModelStatus
  from nni.nas.execution.engine import Middleware, ExecutionEngine
  from nni.nas.execution.event import ModelEventType, IntermediateMetricEvent, FinalMetricEvent, TrainingEndEvent
  from nni.typehint import TrialMetric
  from .logical_optimizer.logical_plan import LogicalPlan, AbstractLogicalNode
  from .logical_optimizer.opt_dedup_input import DedupInputOptimizer
label_desc: Use image node_id 3 for calling the AssemblePolicy obj's underlying member method code with example usage: obj._check_evaluator(new_model, group_model) and returns: True, False, False