PY ?= python3
SAGE ?= sage
LEAN ?= lean
CC ?= cc

.PHONY: all audit certificates exact-law-certificates weighted-phase-certificates interval-audit native-validation lean-validation finite-field-ridge-validation product-likelihood-validation mldsa-likelihood-validation randomized-encoding-validation nongaussian-validation figures

all: audit

audit:
	shasum -a 256 -c ARTIFACT_SHA256SUMS.txt
	$(PY) scripts/audit_certificates.py

certificates: exact-law-certificates weighted-phase-certificates interval-audit

exact-law-certificates:
	$(SAGE) formal/verify_near_dyadic_carry.sage --m 12 --r 1 --precision 160 --kappa-terms 80 --out results/certificates/near_dyadic_m12_r1.json
	$(PY) scripts/constant_weight_capacity.py 3329 8380417 --out results/certificates/constant_weight_capacity.json

weighted-phase-certificates:
	$(PY) scripts/run_weighted_phase_certificates.py --sage $(SAGE) --candidates results/tables/weighted_phase_candidates.csv --precision 192 --intervals 32768 --target-gap 1e-30 --out results/tables/weighted_phase_certificates.csv

interval-audit:
	$(PY) scripts/audit_certificates.py

native-validation:
	mkdir -p build
	$(CC) -std=c11 -O3 -Wall -Wextra -Werror experiments/representation_kernels.c -o build/representation_kernels
	build/representation_kernels 3329:16 8380417:32 > results/tables/native_representation_validation.csv

lean-validation:
	$(LEAN) formal/CenteredReductionDelta.lean

finite-field-ridge-validation:
	PYTHONPATH=scripts $(PY) scripts/validate_finite_field_ridge.py

product-likelihood-validation:
	PYTHONPATH=scripts $(PY) scripts/validate_product_likelihood.py --coarse results/tables/likelihood_hocpa_mlkem_centered_product_likelihood_grid1025_n100.csv --fine results/tables/likelihood_hocpa_mlkem_centered_product_likelihood_n100.csv --output results/tables/product_likelihood_validation.json

mldsa-likelihood-validation:
	PYTHONPATH=scripts $(PY) scripts/validate_mldsa_sparse_likelihood.py --workers 4 --out results/tables/mldsa_sparse_likelihood_validation.csv

randomized-encoding-validation:
	$(PY) scripts/validate_randomized_complement_encoding.py --out results/tables/randomized_complement_encoding_exact.csv
	$(PY) scripts/validate_randomized_encoding_lower_bound.py --out results/tables/randomized_encoding_lower_bound_exact.csv

nongaussian-validation:
	$(PY) scripts/validate_nongaussian_sufficiency.py --out results/tables/nongaussian_sufficiency_exact.csv

figures:
	PYTHONPATH=scripts $(PY) scripts/make_paper_figures.py --out-dir build/figures --data-dir results/figure_data --weighted results/tables/weighted_hw_robustness.csv --weighted-phase results/tables/weighted_phase_certificates.csv --sample results/tables/exact_sample_complexity.csv
