code: def overlaps(self, other, permissive=False):
          
          if not isinstance(other, AtomicInterval):
              raise TypeError('Only AtomicInterval instances are supported.')
  
          if self._lower > other.lower:
              first, second = other, self
          else:
              first, second = self, other
  
          if first._upper == second._lower:
              if permissive:
                  return first._right == CLOSED or second._left == CLOSED
              else:
                  return first._right == CLOSED and second._left == CLOSED
  
          return first._upper > second._lower
docs: Test if intervals have any overlapping value.
  
          If 'permissive' is set to True (default is False), then [1, 2) and [2, 3] are considered as having
          an overlap on value 2 (but not [1, 2) and (2, 3]).
  
          :param other: an atomic interval.
          :param permissive: set to True to consider contiguous intervals as well.
          :return True if intervals overlap, False otherwise.