class_docstr: Config for NAS experiment.
  
  Other than training service fields which also exists in a HPO experiment,
  additional fields provided by NAS include execution engine and model format.
  Execution engine is used to specify how to (e.g., distributedly or sequentially) run a trial,
  and model format specifies the format of the converted model space used throughout the NAS experiment.
  
  It can be constructed via 3 approaches.
  
  1. Create a default config and then modify some fields (recommended).
     The default config should be good enough for most cases. Users only need to update some fields like concurrency.
     See details in :meth:`default`. Example::
  
      config = NasExperimentConfig.default(model_space, evaluator, strategy)
      config.trial_concurrency = 4
  
  2. Create an object by providing several required fields, and then set other fields.
     Though marked as optional in function signature, it's recommended to set all three fields.
  
      config = NasExperimentConfig('ts', 'graph', 'local')
      config.experiment_name = 'hello'
      config.execution_engine.dummy_input = [1, 3, 224, 224]
  
  3. Create an empty object and set all fields manually. Put the fields into kwargs should also work::
  
      config = NasExperimentConfig()
      config.execution_engine = TrainingServiceEngineConfig()
      config.model_format = SimplifiedModelFormatConfig()
      config.training_service = LocalConfig(use_active_gpu=True)
  
      # equivalent to
      config = NasExperimentConfig(
          execution_engine=TrainingServiceEngineConfig(),
          model_format=SimplifiedModelFormatConfig(),
          training_service=LocalConfig(use_active_gpu=True)
      )
code: def __init__(
      self,
      execution_engine: Union[str, ExecutionEngineConfig, None] = None,
      model_format: Union[str, ModelFormatConfig, None] = None,
      training_service_platform: Union[str, List[str], None] = None,
      **kwargs,
  ):
      # `execution_engine` and `model_format` are two shortcuts for easy configuration.
      # We merge them into `kwargs` and let the parent class handle them.
      if isinstance(execution_engine, str):
          kwargs.update(
              execution_engine=ExecutionEngineConfig(
                  name=execution_engine
              )
          )
      elif isinstance(execution_engine, ExecutionEngineConfig):
          kwargs.update(execution_engine=execution_engine)
      elif execution_engine is not None:
          raise TypeError(
              "execution_engine must be a string or an ExecutionEngineConfig object."
          )
  
      if isinstance(model_format, str):
          kwargs.update(
              model_format=ModelFormatConfig(name=model_format)
          )
      elif isinstance(model_format, ModelFormatConfig):
          kwargs.update(model_format=model_format)
      elif model_format is not None:
          raise TypeError(
              "model_format must be a string or a ModelFormatConfig object."
          )
  
      super().__init__(
          training_service_platform=training_service_platform, **kwargs
      )
  
file_path: nni/nni/nas/experiment/config/experiment.py
imports: import logging
  import sys
  from dataclasses import dataclass
  from pathlib import Path
  from typing import Any, Dict, Optional, TYPE_CHECKING, Union, List
  from typing_extensions import Literal
  from nni.experiment.config import utils, ExperimentConfig
  from .engine import ExecutionEngineConfig, SequentialEngineConfig
  from .format import ModelFormatConfig
label_desc: Use image node_id 1 to create a new NasExperimentConfig object from inherited base classes: ExperimentConfig with example: obj = NasExperimentConfig(execution_engine, model_format, training_service_platform)