class_docstr: DARTS trainer.
  
  Parameters
  ----------
  num_epochs : int
      Number of epochs planned for training.
  workers : int
      Workers for data loading.
  gradient_clip : float
      Gradient clipping. Set to 0 to disable. Default: 5.
  model_lr : float
      Learning rate to optimize the model.
  model_wd : float
      Weight decay to optimize the model.
  arch_lr : float
      Learning rate to optimize the architecture.
  arch_wd : float
      Weight decay to optimize the architecture.
  device : str or torch.device
      The device of the whole process
code: def search(self, space: BaseSpace, dataset, estimator):
      model_optim = self.model_optimizer(
          space.parameters(), self.model_lr, weight_decay=self.model_wd
      )
  
      nas_modules = []
      replace_layer_choice(space, DartsLayerChoice, nas_modules)
      replace_input_choice(space, DartsInputChoice, nas_modules)
      space = space.to(self.device)
  
      ctrl_params = {}
      for _, m in nas_modules:
          if m.name in ctrl_params:
              assert (
                  m.alpha.size() == ctrl_params[m.name].size()
              ), "Size of parameters with the same label should be same."
              m.alpha = ctrl_params[m.name]
          else:
              ctrl_params[m.name] = m.alpha
      arch_optim = self.arch_optimizer(
          list(ctrl_params.values()),
          self.arch_lr,
          weight_decay=self.arch_wd,
      )
  
      for epoch in range(self.num_epochs):
          self._train_one_epoch(
              epoch, space, dataset, estimator, model_optim, arch_optim
          )
  
      selection = self.export(nas_modules)
      return space.parse_model(selection, self.device)
  
imports: import logging
  import torch
  import torch.optim
  import torch.nn
  import torch.nn.functional
  from .None import register_nas_algo
  from .base import BaseNAS
  from ..estimator.base import BaseEstimator
  from ..space import BaseSpace
  from ..utils import replace_layer_choice, replace_input_choice
label_desc: Use image node_id 2 for calling the Darts obj's underlying member method code with example usage: obj.search(space, dataset, estimator) and returns: space