LudwigO's picture
add chemprop files
5716801
Raw
History Blame Contribute Delete
863 Bytes
import functools
__all__ = ["bounded"]
def bounded(lo: float | None = None, hi: float | None = None):
if lo is None and hi is None:
raise ValueError("No bounds provided!")
def decorator(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
x = f(*args, **kwargs)
if (lo is not None and hi is not None) and not lo <= x <= hi:
raise ValueError(f"Parsed value outside of range [{lo}, {hi}]! got: {x}")
if hi is not None and x > hi:
raise ValueError(f"Parsed value below {hi}! got: {x}")
if lo is not None and x < lo:
raise ValueError(f"Parsed value above {lo}]! got: {x}")
return x
return wrapper
return decorator
def uppercase(x: str):
return x.upper()
def lowercase(x: str):
return x.lower()