code: def overlaps(self, other, permissive=False):
          
          if isinstance(other, AtomicInterval):
              for interval in self._intervals:
                  if interval.overlaps(other, permissive=permissive):
                      return True
              return False
          elif isinstance(other, Interval):
              for o_interval in other._intervals:
                  if self.overlaps(o_interval, permissive=permissive):
                      return True
              return False
          else:
              raise TypeError('Unsupported type {} for {}'.format(type(other), other))
docs: Test if intervals have any overlapping value.
  
          If 'permissive' is set to True (default is False), then intervals that are contiguous 
          are considered as overlapping intervals as well (e.g. [1, 2) and [2, 3], 
          but not [1, 2) and (2, 3] because 2 is not part of their union). 
  
          :param other: an interval or atomic interval.
          :param permissive: set to True to consider contiguous intervals as well.
          :return True if intervals overlap, False otherwise.