def clamp(value: int, min: int, max: int) -> int: # noqa: A002 - the manifest names them min and max"""Clamp ``value`` to the inclusive range ``min..max``. Swapped bounds raise: ``max(lo, min(value, hi))`` would answer ``lo`` for everything and hide the bug that swapped them. """for v in (value, min, max):
if isinstance(v, bool) ornot isinstance(v, int):
raise TypeError("clamp operates on integers only")
if min > max:
raise ValueError("min must not be greater than max (min %d, max %d)" % (min, max))
if value < min:
return min
if value > max:
return max
return value