def process_what_to_run_expand()

in tcav/utils.py [0:0]


def process_what_to_run_expand(pairs_to_test,
                               random_counterpart=None,
                               num_random_exp=100,
                               random_concepts=None):
  """Get concept vs. random or random vs. random pairs to run.

    Given set of target, list of concept pairs, expand them to include
     random pairs. For instance [(t1, [c1, c2])...] becomes
     [(t1, [c1, random1],
      (t1, [c1, random2],...
      (t1, [c2, random1],
      (t1, [c2, random2],...]

  Args:
    pairs_to_test: [(target1, concept1), (target1, concept2), ...,
                    (target2, concept1), (target2, concept2), ...]
    random_counterpart: random concept that will be compared to the concept.
    num_random_exp: number of random experiments to run against each concept.
    random_concepts: A list of names of random concepts for the random
                     experiments to draw from. Optional, if not provided, the
                     names will be random500_{i} for i in num_random_exp.

  Returns:
    all_concepts: unique set of targets/concepts
    new_pairs_to_test: expanded
  """
  def get_random_concept(i):
    return (random_concepts[i] if random_concepts
            else 'random500_{}'.format(i))

  new_pairs_to_test = []
  for (target, concept_set) in pairs_to_test:
    new_pairs_to_test_t = []
    # if only one element was given, this is to test with random.
    if len(concept_set) == 1:
      i = 0
      while len(new_pairs_to_test_t) < min(100, num_random_exp):
        # make sure that we are not comparing the same thing to each other.
        if concept_set[0] != get_random_concept(
            i) and random_counterpart != get_random_concept(i):
          new_pairs_to_test_t.append(
              (target, [concept_set[0], get_random_concept(i)]))
        i += 1
    elif len(concept_set) > 1:
      new_pairs_to_test_t.append((target, concept_set))
    else:
      tf.compat.v1.logging.info('PAIR NOT PROCCESSED')
    new_pairs_to_test.extend(new_pairs_to_test_t)

  all_concepts = list(set(flatten([cs + [tc] for tc, cs in new_pairs_to_test])))

  return all_concepts, new_pairs_to_test