code: def get_overlapping_ranges(self, provided_partition_key_ranges):
          
  
          if isinstance(provided_partition_key_ranges, routing_range._Range):
              return self.get_overlapping_ranges([provided_partition_key_ranges])
  
          minToPartitionRange = {}
  
          sortedLow = [(r.min, not r.isMinInclusive) for r in self._orderedRanges]
          sortedHigh = [(r.max, r.isMaxInclusive) for r in self._orderedRanges]
  
          for providedRange in provided_partition_key_ranges:
              minIndex = bisect.bisect_right(sortedLow, (providedRange.min, not providedRange.isMinInclusive))
              if minIndex > 0: minIndex = minIndex - 1
                  
              maxIndex = bisect.bisect_left(sortedHigh, (providedRange.max, providedRange.isMaxInclusive))
              if maxIndex >= len(sortedHigh):
                  maxIndex = maxIndex - 1
              
              for i in xrange(minIndex, maxIndex + 1):
                  if routing_range._Range.overlaps(self._orderedRanges[i], providedRange):
                      minToPartitionRange[self._orderedPartitionKeyRanges[i][_PartitionKeyRange.MinInclusive]] = self._orderedPartitionKeyRanges[i]
  
  
          overlapping_partition_key_ranges = list(minToPartitionRange.values())
  
          def getKey(r):
              return r[_PartitionKeyRange.MinInclusive]
          overlapping_partition_key_ranges.sort(key = getKey)
          return overlapping_partition_key_ranges
docs: Gets the partition key ranges overlapping the provided ranges
  
          :param list provided_partition_key_ranges:
              List of partition key ranges.
          :return:
              List of partition key ranges, where each is a dict.
          :rtype: list