code: def get_graph_data(self, graph, benchmark):
          
          if benchmark.get('params'):
              param_iter = enumerate(zip(itertools.product(*benchmark['params']),
                                             graph.get_steps()))
          else:
              param_iter = [(None, (None, graph.get_steps()))]
  
          for j, (param, steps) in param_iter:
              if param is None:
                  entry_name = benchmark['name']
              else:
                  entry_name = benchmark['name'] + '({0})'.format(', '.join(param))
  
              start_revision = self._get_start_revision(graph, benchmark, entry_name)
              threshold = self._get_threshold(graph, benchmark, entry_name)
  
              if start_revision is None:
                  # Skip detection
                  continue
  
              steps = [step for step in steps if step[1] >= start_revision]
  
              yield j, entry_name, steps, threshold
docs: Iterator over graph data sets
  
          Yields
          ------
          param_idx
              Flat index to parameter permutations for parameterized benchmarks.
              None if benchmark is not parameterized.
          entry_name
              Name for the data set. If benchmark is non-parameterized, this is the
              benchmark name.
          steps
              Steps to consider in regression detection.
          threshold
              User-specified threshold for regression detection.