code: def _match_iter_generic(self, path_elements, start_at):
          
  
          length = len(path_elements)
          # If bound to start, we stop searching at the first element
          if self.bound_start:
              end = 1
          else:
              end = length - self.length + 1
  
          # If bound to end, we start searching as late as possible
          if self.bound_end:
              start = length - self.length
          else:
              start = start_at
  
          if start > end or start < start_at or end > length - self.length + 1:
              # It's impossible to match. Either
              # 1) the search has a fixed start and end, and path_elements
              #    does not have enough elements for a match, or
              # 2) To match the bound_end, we have to start before the start_at,
              #    which means the search is impossible
              # 3) The end is after the last possible end point in path_elements
              return
  
          for index in range(start, end):
              matched = True
              i = index
              for matcher in self.elements:
                  element = path_elements[i]
                  i += 1
                  if not matcher.match(element):
                      matched = False
                      break
              if matched:
                  yield index + self.length
docs: Implementation of match_iter for >1 self.elements