def regions_overlap(region1,region2):
    """Determine if two regions have any overlap

    Returns True if any part of the first region overlaps any part of
    the second region (including one region being completely inside the
    other).

    Arguments:
      region1: tuple of numbers representing the limits of the first
        region, can be in any order e.g. (0,10) or (10,0)
      region2: tuple of numbers representing the limits of the second
        region.

    Returns:
      True if there is overlap, False otherwise.
    """
    # Widest region
    if (abs(region1[0] - region1[1]) > abs(region2[0] - region2[1])):
        wide,narrow = region1,region2
    else:
        wide,narrow = region2,region1
    # Determine upper/lower limits of region #1
    if wide[0] < wide[1]:
        lower,upper = wide[0],wide[1]
    else:
        lower,upper = wide[1],wide[0]
    # Regions overlap if either start or end of region #2 lies
    # within region #1 (or vice versa)
    return ((lower <= narrow[0] and narrow[0] <= upper) or
            (lower <= narrow[1] and narrow[1] <= upper))