import math
from typing import List, Optional, Sequence
def extent(values: Sequence[Optional[float]]) -> Optional[List[float]]:
"""[min, max] of a series, skipping gaps (None); None when nothing is left. min() over the raw list would fail on None rather than skip it. """
lo = 0.0
hi = 0.0
seen = Falsefor v in values:
if v isNone:
continueif isinstance(v, bool) ornot isinstance(v, (int, float)) ornot math.isfinite(v):
raise TypeError("values must be finite numbers or null, received %r" % (v,))
ifnot seen:
lo = hi = float(v)
seen = Trueelse:
if v < lo:
lo = float(v)
if v > hi:
hi = float(v)
return [lo, hi] if seen elseNone