docs: def _generate_non_lastnames_variations(non_lastnames):
      """Generate variations for all non-lastnames.
  
      E.g. For 'John Richard', this method generates: [
          'John', 'J', 'Richard', 'R', 'John Richard', 'John R', 'J Richard', 'J R',
      ]
      """
      if not non_lastnames:
          return []
  
      # Generate name transformations in place for all non lastnames. Transformations include:
      # 1. Drop non last name, 2. use initial, 3. use full non lastname
      for idx, non_lastname in enumerate(non_lastnames):
          non_lastnames[idx] = (u'', non_lastname[0], non_lastname)
  
      # Generate the cartesian product of the transformed non lastnames and flatten them.
      return [
          (u' '.join(var_elem for var_elem in variation if var_elem)).strip()
          for variation in product(*non_lastnames)
      ]