class_docstr: Performs constrained coordinate descent on the architecture.
  
  This algorithm searches convolutions then inserts reduction blocks after
  every phoenix_spec.num_blocks_in_cell blocks. If phoenix_spec.replicate_cell
  is True, then only the first phoenix_spec.num_blocks_in_cell will be search
  via mutation and the whole architecture will be replicated with reduction
  blocks between each cell.
code: def __init__(self, phoenix_spec, metadata):
      self._phoenix_spec = phoenix_spec
      self._metadata = metadata
  
file_path: model_search/model_search/search/constrained_descent.py
imports: from absl import logging
  from model_search import block_builder
  from model_search.architecture import architecture_utils
  from model_search.search import common
  from model_search.search import search_algorithm
  import numpy
label_desc: Use image node_id 1 to create a new ConstrainedDescent object from inherited base classes: search_algorithm with example: obj = ConstrainedDescent(phoenix_spec, metadata)