import math
def area(box):
    if len(box)!=4 or not all(math.isfinite(x) for x in box):
        raise ValueError('four finite xyxy coordinates required')
    x1,y1,x2,y2 = box
    if x2<=x1 or y2<=y1:
        raise ValueError('positive width and height required')
    return (x2-x1)*(y2-y1)
def iou(a,b):
    aa,bb = area(a),area(b)
    width=max(0,min(a[2],b[2])-max(a[0],b[0]))
    height=max(0,min(a[3],b[3])-max(a[1],b[1]))
    intersection=width*height
    return intersection/(aa+bb-intersection)
a,b = [0,0,4,4],[2,2,6,6]
print('iou',iou(a,b))
assert abs(iou(a,b)-1/7)<1e-12
assert iou(a,a)==1
assert iou(a,[5,5,6,6])==0
assert iou(a,[4,0,8,4])==0
