code: def search(
              self,
              trace_func: Callable[
                  [List[LineSequence], float, float, float, bool],
                  None] = None) -> List[LineSequence]:
          
  
          def search_trace(state: _STATE, temp: float,
                           cost: float, probability: float, accepted: bool):
              if trace_func:
                  trace_seqs, _ = state
                  trace_func(trace_seqs, temp, cost, probability, accepted)
  
          seqs, _ = optimization.anneal_minimize(
              self._create_initial_solution(),
              self._quadratic_sum_cost,
              self._force_edges_active_move,
              self._rand.random_sample,
              trace_func=search_trace)
          return seqs
docs: Issues new linear sequence search.
  
          Each call to this method starts new search.
  
          Args:
            trace_func: Optional callable which will be called for each simulated
              annealing step with arguments: solution candidate (list of linear
              sequences on the chip), current temperature (float), candidate cost
              (float), probability of accepting candidate (float), and acceptance
              decision (boolean).
  
          Returns:
            List of linear sequences on the chip found by this method.