aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py')
-rw-r--r--.venv/lib/python3.12/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py b/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py
new file mode 100644
index 00000000..f3229c0b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py
@@ -0,0 +1,106 @@
+
+"""
+A benchmark for validation of applicators containing lots of useless schemas.
+
+Signals a small possible optimization to remove all such schemas ahead of time.
+"""
+
+from pyperf import Runner
+
+from jsonschema import Draft202012Validator as Validator
+
+NUM_USELESS = 100000
+
+subschema = {"const": 37}
+
+valid = 37
+invalid = 12
+
+baseline = Validator(subschema)
+
+
+# These should be indistinguishable from just `subschema`
+by_name = {
+ "single subschema": {
+ "anyOf": Validator({"anyOf": [subschema]}),
+ "allOf": Validator({"allOf": [subschema]}),
+ "oneOf": Validator({"oneOf": [subschema]}),
+ },
+ "redundant subschemas": {
+ "anyOf": Validator({"anyOf": [subschema] * NUM_USELESS}),
+ "allOf": Validator({"allOf": [subschema] * NUM_USELESS}),
+ },
+ "useless successful subschemas (beginning)": {
+ "anyOf": Validator({"anyOf": [subschema, *[True] * NUM_USELESS]}),
+ "allOf": Validator({"allOf": [subschema, *[True] * NUM_USELESS]}),
+ },
+ "useless successful subschemas (middle)": {
+ "anyOf": Validator(
+ {
+ "anyOf": [
+ *[True] * (NUM_USELESS // 2),
+ subschema,
+ *[True] * (NUM_USELESS // 2),
+ ],
+ },
+ ),
+ "allOf": Validator(
+ {
+ "allOf": [
+ *[True] * (NUM_USELESS // 2),
+ subschema,
+ *[True] * (NUM_USELESS // 2),
+ ],
+ },
+ ),
+ },
+ "useless successful subschemas (end)": {
+ "anyOf": Validator({"anyOf": [*[True] * NUM_USELESS, subschema]}),
+ "allOf": Validator({"allOf": [*[True] * NUM_USELESS, subschema]}),
+ },
+ "useless failing subschemas (beginning)": {
+ "anyOf": Validator({"anyOf": [subschema, *[False] * NUM_USELESS]}),
+ "oneOf": Validator({"oneOf": [subschema, *[False] * NUM_USELESS]}),
+ },
+ "useless failing subschemas (middle)": {
+ "anyOf": Validator(
+ {
+ "anyOf": [
+ *[False] * (NUM_USELESS // 2),
+ subschema,
+ *[False] * (NUM_USELESS // 2),
+ ],
+ },
+ ),
+ "oneOf": Validator(
+ {
+ "oneOf": [
+ *[False] * (NUM_USELESS // 2),
+ subschema,
+ *[False] * (NUM_USELESS // 2),
+ ],
+ },
+ ),
+ },
+ "useless failing subschemas (end)": {
+ "anyOf": Validator({"anyOf": [*[False] * NUM_USELESS, subschema]}),
+ "oneOf": Validator({"oneOf": [*[False] * NUM_USELESS, subschema]}),
+ },
+}
+
+if __name__ == "__main__":
+ runner = Runner()
+
+ runner.bench_func("baseline valid", lambda: baseline.is_valid(valid))
+ runner.bench_func("baseline invalid", lambda: baseline.is_valid(invalid))
+
+ for group, applicators in by_name.items():
+ for applicator, validator in applicators.items():
+ runner.bench_func(
+ f"{group}: {applicator} valid",
+ lambda validator=validator: validator.is_valid(valid),
+ )
+ runner.bench_func(
+ f"{group}: {applicator} invalid",
+ lambda validator=validator: validator.is_valid(invalid),
+ )