code: def build_program(self, random_state):
          
          if self.init_method == 'half and half':
              method = ('full' if random_state.randint(2) else 'grow')
          else:
              method = self.init_method
          max_depth = random_state.randint(*self.init_depth)
  
          # Start a program with a function to avoid degenerative programs
          function = random_state.randint(len(self.function_set))
          function = self.function_set[function]
          program = [function]
          terminal_stack = [function.arity]
  
          while terminal_stack:
              depth = len(terminal_stack)
              choice = self.n_features + len(self.function_set)
              choice = random_state.randint(choice)
              # Determine if we are adding a function or terminal
              if (depth < max_depth) and (method == 'full' or
                                          choice <= len(self.function_set)):
                  function = random_state.randint(len(self.function_set))
                  function = self.function_set[function]
                  program.append(function)
                  terminal_stack.append(function.arity)
              else:
                  # We need a terminal, add a variable or constant
                  if self.const_range is not None:
                      terminal = random_state.randint(self.n_features + 1)
                  else:
                      terminal = random_state.randint(self.n_features)
                  if terminal == self.n_features:
                      terminal = random_state.uniform(*self.const_range)
                      if self.const_range is None:
                          # We should never get here
                          raise ValueError('A constant was produced with '
                                           'const_range=None.')
                  program.append(terminal)
                  terminal_stack[-1] -= 1
                  while terminal_stack[-1] == 0:
                      terminal_stack.pop()
                      if not terminal_stack:
                          return program
                      terminal_stack[-1] -= 1
  
          # We should never get here
          return None
docs: Build a naive random program.
  
          Parameters
          ----------
          random_state : RandomState instance
              The random number generator.
  
          Returns
          -------
          program : list
              The flattened tree representation of the program.