"""The reference computations behind every expected value in this repository; see tools/README.md. Imported as `tools.oracle` by the repository's own tools, which need Python 3.14, `cryptography` and `jsonschema` for everything they check; the gate below exits with a message when one is missing. Installed and imported as `paperspec` by other programs, the gate is skipped: the standard-library modules (`keys`, `text`, `jcs`, `package`, `db`, `rights`, ...) run on Python 3.12, and `schema` and `crypto` import their packages on first use, so `paperspec[schema]` and `paperspec[crypto]` are needed only for those two. """ import importlib.util import sys if __name__ == "tools.oracle": if sys.version_info < (3, 14): sys.exit("The paperspec tools need Python 3.14 or later; this is Python %d.%d." % sys.version_info[:2]) _missing = [m for m in ("cryptography", "jsonschema") if importlib.util.find_spec(m) is None] if _missing: sys.exit("The paperspec tools need %s %s; run them through pixi, or install %s with pip." % ("the package" if len(_missing) == 1 else "the packages", " and ".join(_missing), "it" if len(_missing) == 1 else "them"))