gbskernels 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gbskernels-0.2.1/CHANGELOG.md +92 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/CITATION.cff +2 -2
- {gbskernels-0.2.0 → gbskernels-0.2.1}/MANIFEST.in +3 -1
- {gbskernels-0.2.0 → gbskernels-0.2.1}/PKG-INFO +30 -14
- {gbskernels-0.2.0 → gbskernels-0.2.1}/README.md +29 -13
- gbskernels-0.2.1/THIRD_PARTY_NOTICES.md +27 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/_provenance.py +21 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/README.md +10 -1
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/certified.cu +179 -63
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/certified_dd.cu +95 -39
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_certified.cu +133 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_host_api.cu +35 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_tor_recursive.cu +60 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/dd.cuh +2 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/host_api.cu +21 -4
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/tor_recursive.cu +109 -50
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/certified.py +170 -40
- {gbskernels-0.2.0 → gbskernels-0.2.1}/docs/benchmark_protocol.md +6 -2
- {gbskernels-0.2.0 → gbskernels-0.2.1}/docs/confirmatory_v2.md +7 -5
- gbskernels-0.2.1/docs/dd_certificate_proof.md +398 -0
- gbskernels-0.2.1/docs/preregistration_jiuzhang1_confirmatory.md +192 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/envs/rental_4090.md +22 -16
- {gbskernels-0.2.0 → gbskernels-0.2.1}/envs/rental_datacenter.md +3 -3
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/README.md +46 -2
- gbskernels-0.2.1/examples/jiuzhang/campaign.py +290 -0
- gbskernels-0.2.1/examples/jiuzhang/campaign_confirmatory.py +520 -0
- gbskernels-0.2.1/examples/jiuzhang/dd_adversarial_enclosure.py +320 -0
- gbskernels-0.2.1/examples/jiuzhang/decode_events.py +163 -0
- gbskernels-0.2.1/examples/jiuzhang/gate_a_pilot.py +311 -0
- gbskernels-0.2.1/examples/jiuzhang/gate_c_probe.py +209 -0
- gbskernels-0.2.1/examples/jiuzhang/q7_conditioned.py +353 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/q7_construction.py +3 -1
- gbskernels-0.2.1/examples/jiuzhang/q7_parity.py +351 -0
- gbskernels-0.2.1/examples/jiuzhang/select_confirmatory.py +388 -0
- gbskernels-0.2.1/examples/jiuzhang/validation_data/README.md +20 -0
- gbskernels-0.2.1/examples/jiuzhang/validation_data/T_full.npy +0 -0
- gbskernels-0.2.1/examples/jiuzhang/validation_data/click_probs_squashed_0.npy +0 -0
- gbskernels-0.2.1/examples/jiuzhang/validation_data/click_probs_squeezed_0.npy +0 -0
- gbskernels-0.2.1/examples/jiuzhang/validation_data/empirical_click_rates.npy +0 -0
- gbskernels-0.2.1/examples/jiuzhang/validation_data/events_band13_32.npy +0 -0
- gbskernels-0.2.1/examples/jiuzhang/validation_data/squeezing parameters.txt +25 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/gbskernels/__init__.py +78 -16
- {gbskernels-0.2.0 → gbskernels-0.2.1}/gbskernels.egg-info/PKG-INFO +30 -14
- {gbskernels-0.2.0 → gbskernels-0.2.1}/gbskernels.egg-info/SOURCES.txt +36 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/pyproject.toml +1 -1
- gbskernels-0.2.1/results/jiuzhang/legacy_fixed_sample/README.md +63 -0
- gbskernels-0.2.1/results/jiuzhang/legacy_fixed_sample/confirmatory_C27_b1.jsonl +800 -0
- gbskernels-0.2.1/results/jiuzhang/legacy_fixed_sample/confirmatory_C28_b1.jsonl +500 -0
- gbskernels-0.2.1/results/jiuzhang/legacy_fixed_sample/confirmatory_C29_s1.jsonl +400 -0
- gbskernels-0.2.1/results/jiuzhang/legacy_fixed_sample/confirmatory_C30_b4.jsonl +150 -0
- gbskernels-0.2.1/results/jiuzhang/legacy_fixed_sample/confirmatory_C30_s1.jsonl +150 -0
- gbskernels-0.2.1/results/jiuzhang/legacy_fixed_sample/private_fixed_sample_result_v2.json +623 -0
- gbskernels-0.2.1/results/jiuzhang/legacy_fixed_sample/private_fixed_sample_selection_v2.npz +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/sampling/gbs.py +8 -3
- {gbskernels-0.2.0 → gbskernels-0.2.1}/scripts/README.md +9 -5
- {gbskernels-0.2.0 → gbskernels-0.2.1}/scripts/gpu_session.sh +284 -3
- gbskernels-0.2.1/scripts/launch_session.sh +174 -0
- gbskernels-0.2.1/scripts/prepare_validation_data.py +57 -0
- gbskernels-0.2.1/tests/conftest.py +111 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_bench_provenance.py +3 -1
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_certified.py +128 -0
- gbskernels-0.2.1/tests/test_certified_api_refusals.py +89 -0
- gbskernels-0.2.1/tests/test_dd_adversarial_enclosure.py +53 -0
- gbskernels-0.2.1/tests/test_legacy_private_sample.py +275 -0
- gbskernels-0.2.1/tests/test_release_metadata.py +43 -0
- gbskernels-0.2.1/tests/test_release_runtime.py +36 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_threshold_O_xxpp.py +11 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_tor_recursive.py +31 -0
- gbskernels-0.2.1/tests/test_validation_data.py +26 -0
- gbskernels-0.2.1/uv.lock +848 -0
- gbskernels-0.2.0/CHANGELOG.md +0 -36
- gbskernels-0.2.0/scripts/launch_session.sh +0 -86
- {gbskernels-0.2.0 → gbskernels-0.2.1}/LICENSE +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/__init__.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/_inputs.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/accuracy.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/accuracy_permanent.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/calibrate_auto.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/crossover.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/kernel_footprint.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/plot_crossover.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/repeated_ab.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/sampler_throughput.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/throughput.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/throughput_end_to_end.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/throughput_gpu.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/tightness.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bench/walrus_baseline.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bindings/CMakeLists.txt +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bindings/README.md +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/bindings/gbskernels_ext.cpp +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/CMakeLists.txt +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/bench_kernels.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/certified_rounding.cuh +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_haf_coop.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_haf_small.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_hafnian.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_hafnian_dd.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_lhaf_coop.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_loop_hafnian.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_loop_hafnian_dd.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_permanent.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_permanent_coop.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_permanent_dd.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_permanent_warp.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_repeated.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_sampler_draw.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_sampler_gather.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_sampler_haf_varn.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_sampler_session.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_session.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_tor_coop.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_torontonian.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_torontonian_dd.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/check_torontonian_real_chol.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/hafnian.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/hafnian_dd.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/loop_hafnian.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/loop_hafnian_dd.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/permanent.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/permanent_coop.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/permanent_coop.cuh +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/permanent_dd.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/permanent_warp.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/preflight/cuda/cuComplex.h +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/preflight/cuda/cuda_runtime.h +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/preflight/cuda/curand_kernel.h +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/preflight/run_preflight.sh +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/repeated.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/sampler_draw.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/sampler_gather.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/sampler_session.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/subset_engine.cuh +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/torontonian.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/core/torontonian_dd.cu +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/__init__.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/dd.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/diagnostics.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/hafnian.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/loop_hafnian.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/permanent.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/repeated.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/tor_recursive.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/cpu_ref/torontonian.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/docs/DESIGN.md +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/docs/confirmatory_v2_design_spec.template.json +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/docs/confirmatory_v2_plan.template.json +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/docs/device_resident_contract.md +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/docs/exploratory_exposure_manifest.template.json +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/envs/Dockerfile +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/envs/README.md +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/gbs_demo.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/absolute_predictive_checks.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/analyze_refusals.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/audit_selection_population.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/build_exclusion_ledger.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/calibration_normalizer_replicates.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/campaign_confirmatory_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/click_count_dist.npy +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/coherence_family.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/confirmatory_common.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/confirmatory_contract.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/confirmatory_design.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/confirmatory_inference.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/confirmatory_release.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/dd_frontier_20260708T105821Z.json +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/dd_validate.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/jiuzhang1_frontier_20260707T164417Z.json +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/jiuzhang_frontier.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/joint_normalizer_replicates.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/make_precision_wall.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/prepare_registration_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/reconstruction_replicates.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/registration_readiness_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/examples/jiuzhang/select_confirmatory_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/gbskernels.egg-info/dependency_links.txt +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/gbskernels.egg-info/requires.txt +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/gbskernels.egg-info/top_level.txt +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/highprec_ref/__init__.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/highprec_ref/hafnian.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/highprec_ref/loop_hafnian.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/highprec_ref/permanent.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/highprec_ref/torontonian.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/sampling/__init__.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/sampling/boson_sampling.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/sampling/sampler.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/scripts/session.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/setup.cfg +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_absolute_predictive_checks_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_bench_accuracy.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_bench_calibrate_auto.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_bench_crossover.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_bench_throughput.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_bench_walrus_baseline.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_calibration_normalizer_replicates_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_coherence_family.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_confirmatory_design_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_confirmatory_inference_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_confirmatory_registration_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_confirmatory_release_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_confirmatory_run_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_confirmatory_selection_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_cuda_preflight.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_dd_arithmetic.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_exclusion_ledger_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_gbs_layer4.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_gbs_sampler.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_gpu_bindings.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_hafnian_highprec.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_hafnian_layer1.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_hafnian_layer2_3.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_highprec_ref.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_joint_normalizer_replicates_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_kernel_footprint.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_layer1_combinatorial.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_layer2_thewalrus.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_layer3_properties.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_layer5_cancellation.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_layer5_engineering.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_loop_hafnian.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_precision_auto.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_reconstruction_replicates_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_refusal_analysis_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_registration_readiness_v2.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_repeated.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_sampler_precision_cutoff.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_sampler_resident.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_sampling_bosonsampling.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_sampling_displaced.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_sampling_gpu_backend.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_sampling_threshold_tor.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_tightness.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_torontonian.py +0 -0
- {gbskernels-0.2.0 → gbskernels-0.2.1}/tests/test_workspace_bucketing.py +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.2.1] - 2026-07-24
|
|
4
|
+
|
|
5
|
+
### Correctness
|
|
6
|
+
|
|
7
|
+
- Add explicit absolute underflow terms to the certified FP64 and
|
|
8
|
+
double-double permanent, hafnian, loop-hafnian, and recursive-torontonian
|
|
9
|
+
recurrences.
|
|
10
|
+
Per-operation propagation now encloses mixed-scale products where an
|
|
11
|
+
intermediate underflows and a later factor amplifies the lost term.
|
|
12
|
+
- Replace assumed forward constants for double-double division and square root
|
|
13
|
+
with outward FMA residual bounds on the values actually returned. Complex
|
|
14
|
+
division refuses denominator, numerator-product, and dot-product ranges that
|
|
15
|
+
cannot be enclosed safely, and preserves tiny numerator uncertainty through
|
|
16
|
+
large quotient amplification.
|
|
17
|
+
- Preserve `+inf` refusal through host subtree reductions. Certified Python
|
|
18
|
+
APIs now reject non-finite inputs and refuse non-finite values, negative or
|
|
19
|
+
non-finite bounds, and invalid tolerances; an explicit `rtol` may escalate a
|
|
20
|
+
refused certificate to an independently computed finite reference value.
|
|
21
|
+
- Make `tor_single` fail before GPU dispatch unless its real binary64 input is
|
|
22
|
+
finite and exactly symmetric. The recursive Cholesky walk consumes one
|
|
23
|
+
triangle, so silently accepting a nonsymmetric matrix made the evaluated
|
|
24
|
+
problem depend on storage convention.
|
|
25
|
+
- Explicitly symmetrize the xxpp Husimi covariance and returned
|
|
26
|
+
`threshold_O_xxpp` matrix after binary64 linear algebra, satisfying the new
|
|
27
|
+
single-large input contract without retaining inversion roundoff skew.
|
|
28
|
+
- Replace the historical Jiuzhang fixed-sample summary with its actual
|
|
29
|
+
finite-population stratified estimand. Remove pseudo-confirmatory intervals
|
|
30
|
+
and normalizer significance calculations that could not be justified from
|
|
31
|
+
the retained inputs; report the event standard error, normalizer diagonal
|
|
32
|
+
sensitivity, and arithmetic proxy separately.
|
|
33
|
+
|
|
34
|
+
### Reproducibility
|
|
35
|
+
|
|
36
|
+
- Extend artifact provenance with the full Git commit and a tracked-dirty
|
|
37
|
+
indicator, so output generated from modified tracked sources cannot be
|
|
38
|
+
attributed to a clean release commit.
|
|
39
|
+
- Package the deterministic historical selector, aggregator, decoder audit,
|
|
40
|
+
five retained checkpoint JSONL files, and a hash-bound regenerated
|
|
41
|
+
selection/result pair under `results/jiuzhang/legacy_fixed_sample/`.
|
|
42
|
+
- The retained checkpoint rows predate the common provenance schema and do not
|
|
43
|
+
contain recoverable original GPU, container, driver, or commit metadata. The
|
|
44
|
+
release preserves their exact hashes and records current provenance for the
|
|
45
|
+
audit artifacts; it does not invent missing historical environment data.
|
|
46
|
+
|
|
47
|
+
### Scope
|
|
48
|
+
|
|
49
|
+
- The historical fixed sample was selected and evaluated during exploratory
|
|
50
|
+
development. It is not held out, preregistered, or confirmatory, and this
|
|
51
|
+
correction does not turn it into a confirmatory scientific result.
|
|
52
|
+
- The v0.2.1 tag is conditioned on a clean-tree release-validation session:
|
|
53
|
+
all 24 device gates, the Python binding smoke, adversarial and physical
|
|
54
|
+
enclosure coverage, and the Jiuzhang Gate C probe. The GitHub release carries
|
|
55
|
+
a hash-bound validation manifest for the exact tagged commit. Retained v0.2.0
|
|
56
|
+
RTX 4090 evidence remains historical rather than validation of v0.2.1.
|
|
57
|
+
|
|
58
|
+
## [0.2.0] - 2026-07-22
|
|
59
|
+
|
|
60
|
+
### Important Correction
|
|
61
|
+
|
|
62
|
+
- Replace the legacy Jiuzhang state reconstruction with the published
|
|
63
|
+
paired-source Q7 construction and the exact real xxpp threshold-torontonian
|
|
64
|
+
matrix. The two v0.1 frontier JSON files remain historical artifacts and are
|
|
65
|
+
rejected by the current figure tooling.
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
|
|
69
|
+
- A fail-closed Jiuzhang confirmatory-v2 workflow covering exposure-ledger
|
|
70
|
+
audit, outcome-blind design, immutable public registration and beacon-derived
|
|
71
|
+
selection, content-addressed evaluation, refusal recovery,
|
|
72
|
+
reconstruction/calibration uncertainty, joint normalizer replicates,
|
|
73
|
+
absolute predictive checks, simultaneous coherence-grid inference, and
|
|
74
|
+
hash-verified release bundles.
|
|
75
|
+
- Canonical registration, design, and exposure templates plus focused contract
|
|
76
|
+
and regression tests for the workflow and exact xxpp construction.
|
|
77
|
+
|
|
78
|
+
### Fixed
|
|
79
|
+
|
|
80
|
+
- Harden certified recursive-torontonian bounds with directed downward
|
|
81
|
+
subtraction, sound double-double magnitude bounds, and explicit
|
|
82
|
+
double-double-to-FP64 collapse residual accounting, plus a dedicated
|
|
83
|
+
enclosure gate.
|
|
84
|
+
|
|
85
|
+
### Scope
|
|
86
|
+
|
|
87
|
+
- This release provides code, templates, and validation contracts. It contains
|
|
88
|
+
no completed v2 registration or new scientific outcome; external calibration,
|
|
89
|
+
public timestamp/beacon evidence, and acquisition inputs remain required.
|
|
90
|
+
|
|
91
|
+
[0.2.1]: https://github.com/chaofanzhougit/GBSKernels/compare/v0.2.0...v0.2.1
|
|
92
|
+
[0.2.0]: https://github.com/chaofanzhougit/GBSKernels/compare/v0.1.1...v0.2.0
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
cff-version: 1.2.0
|
|
2
2
|
message: "If you use this software, please cite it as below."
|
|
3
3
|
title: "GBSKernels: a GPU-native, batched library of photonic sampling matrix functions"
|
|
4
|
-
version: 0.2.
|
|
5
|
-
date-released: 2026-07-
|
|
4
|
+
version: 0.2.1
|
|
5
|
+
date-released: 2026-07-24
|
|
6
6
|
license: Apache-2.0
|
|
7
7
|
repository-code: "https://github.com/chaofanzhougit/GBSKernels"
|
|
8
8
|
authors:
|
|
@@ -7,7 +7,9 @@ graft examples
|
|
|
7
7
|
graft docs
|
|
8
8
|
graft scripts
|
|
9
9
|
graft envs
|
|
10
|
-
|
|
10
|
+
graft tests
|
|
11
|
+
graft results/jiuzhang/legacy_fixed_sample
|
|
12
|
+
include LICENSE README.md CHANGELOG.md CITATION.cff THIRD_PARTY_NOTICES.md pyproject.toml uv.lock
|
|
11
13
|
prune core/build
|
|
12
14
|
prune core/build_prof
|
|
13
15
|
prune bindings/build
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gbskernels
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: GPU-native, batched library of photonic sampling matrix functions (hafnian, loop hafnian, permanent, torontonian).
|
|
5
5
|
Author-email: Chaofan Zhou <chaofanzhou97@gmail.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -44,24 +44,31 @@ companion with an explicit accuracy characterization. The Walrus is used here as
|
|
|
44
44
|
one of several independent test oracles.
|
|
45
45
|
|
|
46
46
|
> **Status.** The CPU library is complete and `pip`-installable (pure Python,
|
|
47
|
-
> `numpy` + `mpmath` only).
|
|
48
|
-
>
|
|
49
|
-
>
|
|
50
|
-
>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
47
|
+
> `numpy` + `mpmath` only). A v0.2.1 tag is released only with a clean-tree GPU
|
|
48
|
+
> validation manifest covering all 24 device gates, the Python binding smoke,
|
|
49
|
+
> adversarial and physical enclosure families, and the Jiuzhang Gate C probe.
|
|
50
|
+
> The manifest and its hash-bound evidence are attached to the GitHub release
|
|
51
|
+
> and identify the exact commit. Historical v0.2.0 RTX 4090 and A100 evidence is
|
|
52
|
+
> retained separately; see the [device evidence](results/README.md#v020-device-validation).
|
|
53
|
+
> This is pre-1.0 software and the public API may change.
|
|
54
|
+
|
|
55
|
+
Version 0.2.1 is a correctness patch that adds subnormal-aware certified bounds
|
|
56
|
+
and fail-closed certificate handling, makes the single-large real torontonian
|
|
57
|
+
input contract explicit, removes inversion roundoff skew from the xxpp
|
|
58
|
+
construction, records whether artifacts came from modified tracked sources,
|
|
59
|
+
and packages the corrected historical Jiuzhang fixed-sample audit. That audit
|
|
60
|
+
is exploratory, not a retrospective confirmatory result. See the
|
|
61
|
+
[changelog](CHANGELOG.md) for the release scope.
|
|
55
62
|
|
|
56
63
|
## Installation
|
|
57
64
|
|
|
58
|
-
|
|
59
|
-
|
|
65
|
+
The CPU package is available from
|
|
66
|
+
[PyPI](https://pypi.org/project/gbskernels/0.2.1/) and needs only `numpy` +
|
|
67
|
+
`mpmath`. The CUDA extension is a separate, optional source build (see
|
|
60
68
|
[`bindings/README.md`](bindings/README.md)):
|
|
61
69
|
|
|
62
70
|
```bash
|
|
63
|
-
|
|
64
|
-
# pip install gbskernels # planned once published to PyPI
|
|
71
|
+
python -m pip install gbskernels==0.2.1
|
|
65
72
|
```
|
|
66
73
|
|
|
67
74
|
## Quick start
|
|
@@ -103,7 +110,7 @@ implicit:
|
|
|
103
110
|
| `"dd"` | Double-double arithmetic carried internally through the cancelling sum (a GPU tier); recovers a correct double-precision result where plain double precision cancels. |
|
|
104
111
|
| `"ref"` | Arbitrary-precision reference (`mpmath`); the accuracy ground truth. |
|
|
105
112
|
| `"auto"` | Double precision plus a per-evaluation cancellation indicator; evaluations flagged as risky are recomputed in a higher tier (`mpmath` on CPU, double-double on GPU). The indicator is a calibrated heuristic, not a certificate. |
|
|
106
|
-
| `"certified"` | The double-precision value together with a **rigorous a-posteriori error bound**: `\|value − exact\| ≤ abs_error_bound`,
|
|
113
|
+
| `"certified"` | The double-precision value together with a **rigorous a-posteriori error bound**: `\|value − exact\| ≤ abs_error_bound`, including explicit absolute terms for subnormal underflow (on the GPU, bound arithmetic uses per-instruction directed rounding). Non-finite inputs and invalid/non-finite certificates fail closed. Available for all four functions on CPU and GPU. With `rtol=`, a failed or refused certified-fp64 result escalates to the arbitrary-precision reference; GPU permanent and hafnian first try a certified double-double bound. The reference result is flagged as non-certified. `tor_single(..., dd=True)` provides a separate certified-double-double large-torontonian path. |
|
|
107
114
|
|
|
108
115
|
## Features
|
|
109
116
|
|
|
@@ -161,6 +168,15 @@ The Jiuzhang v2 tooling adds workflow-contract tests for canonical hashing,
|
|
|
161
168
|
registration timing, exclusion-ledger completeness, selection, immutable run
|
|
162
169
|
reduction, refusal recovery, inference, reconstruction, and release assembly.
|
|
163
170
|
|
|
171
|
+
To run the public v0.2.1 GPU validation from a fresh clone, first stage the
|
|
172
|
+
small hash-bound inputs (the raw USTC and Zenodo archives remain
|
|
173
|
+
external; see [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md) for data
|
|
174
|
+
attribution and licensing scope):
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
python scripts/prepare_validation_data.py
|
|
178
|
+
```
|
|
179
|
+
|
|
164
180
|
The development discipline is CPU-first: host-shim-compatible CUDA kernels are
|
|
165
181
|
compiled and run through the CPU pre-flight (part of the test suite), then the
|
|
166
182
|
full source set is checked on-device against independent CPU references before
|
|
@@ -22,24 +22,31 @@ companion with an explicit accuracy characterization. The Walrus is used here as
|
|
|
22
22
|
one of several independent test oracles.
|
|
23
23
|
|
|
24
24
|
> **Status.** The CPU library is complete and `pip`-installable (pure Python,
|
|
25
|
-
> `numpy` + `mpmath` only).
|
|
26
|
-
>
|
|
27
|
-
>
|
|
28
|
-
>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
> `numpy` + `mpmath` only). A v0.2.1 tag is released only with a clean-tree GPU
|
|
26
|
+
> validation manifest covering all 24 device gates, the Python binding smoke,
|
|
27
|
+
> adversarial and physical enclosure families, and the Jiuzhang Gate C probe.
|
|
28
|
+
> The manifest and its hash-bound evidence are attached to the GitHub release
|
|
29
|
+
> and identify the exact commit. Historical v0.2.0 RTX 4090 and A100 evidence is
|
|
30
|
+
> retained separately; see the [device evidence](results/README.md#v020-device-validation).
|
|
31
|
+
> This is pre-1.0 software and the public API may change.
|
|
32
|
+
|
|
33
|
+
Version 0.2.1 is a correctness patch that adds subnormal-aware certified bounds
|
|
34
|
+
and fail-closed certificate handling, makes the single-large real torontonian
|
|
35
|
+
input contract explicit, removes inversion roundoff skew from the xxpp
|
|
36
|
+
construction, records whether artifacts came from modified tracked sources,
|
|
37
|
+
and packages the corrected historical Jiuzhang fixed-sample audit. That audit
|
|
38
|
+
is exploratory, not a retrospective confirmatory result. See the
|
|
39
|
+
[changelog](CHANGELOG.md) for the release scope.
|
|
33
40
|
|
|
34
41
|
## Installation
|
|
35
42
|
|
|
36
|
-
|
|
37
|
-
|
|
43
|
+
The CPU package is available from
|
|
44
|
+
[PyPI](https://pypi.org/project/gbskernels/0.2.1/) and needs only `numpy` +
|
|
45
|
+
`mpmath`. The CUDA extension is a separate, optional source build (see
|
|
38
46
|
[`bindings/README.md`](bindings/README.md)):
|
|
39
47
|
|
|
40
48
|
```bash
|
|
41
|
-
|
|
42
|
-
# pip install gbskernels # planned once published to PyPI
|
|
49
|
+
python -m pip install gbskernels==0.2.1
|
|
43
50
|
```
|
|
44
51
|
|
|
45
52
|
## Quick start
|
|
@@ -81,7 +88,7 @@ implicit:
|
|
|
81
88
|
| `"dd"` | Double-double arithmetic carried internally through the cancelling sum (a GPU tier); recovers a correct double-precision result where plain double precision cancels. |
|
|
82
89
|
| `"ref"` | Arbitrary-precision reference (`mpmath`); the accuracy ground truth. |
|
|
83
90
|
| `"auto"` | Double precision plus a per-evaluation cancellation indicator; evaluations flagged as risky are recomputed in a higher tier (`mpmath` on CPU, double-double on GPU). The indicator is a calibrated heuristic, not a certificate. |
|
|
84
|
-
| `"certified"` | The double-precision value together with a **rigorous a-posteriori error bound**: `\|value − exact\| ≤ abs_error_bound`,
|
|
91
|
+
| `"certified"` | The double-precision value together with a **rigorous a-posteriori error bound**: `\|value − exact\| ≤ abs_error_bound`, including explicit absolute terms for subnormal underflow (on the GPU, bound arithmetic uses per-instruction directed rounding). Non-finite inputs and invalid/non-finite certificates fail closed. Available for all four functions on CPU and GPU. With `rtol=`, a failed or refused certified-fp64 result escalates to the arbitrary-precision reference; GPU permanent and hafnian first try a certified double-double bound. The reference result is flagged as non-certified. `tor_single(..., dd=True)` provides a separate certified-double-double large-torontonian path. |
|
|
85
92
|
|
|
86
93
|
## Features
|
|
87
94
|
|
|
@@ -139,6 +146,15 @@ The Jiuzhang v2 tooling adds workflow-contract tests for canonical hashing,
|
|
|
139
146
|
registration timing, exclusion-ledger completeness, selection, immutable run
|
|
140
147
|
reduction, refusal recovery, inference, reconstruction, and release assembly.
|
|
141
148
|
|
|
149
|
+
To run the public v0.2.1 GPU validation from a fresh clone, first stage the
|
|
150
|
+
small hash-bound inputs (the raw USTC and Zenodo archives remain
|
|
151
|
+
external; see [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md) for data
|
|
152
|
+
attribution and licensing scope):
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
python scripts/prepare_validation_data.py
|
|
156
|
+
```
|
|
157
|
+
|
|
142
158
|
The development discipline is CPU-first: host-shim-compatible CUDA kernels are
|
|
143
159
|
compiled and run through the CPU pre-flight (part of the test suite), then the
|
|
144
160
|
full source set is checked on-device against independent CPU references before
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Third-party validation data
|
|
2
|
+
|
|
3
|
+
The Apache-2.0 license for GBSKernels source code does not relicense the
|
|
4
|
+
third-party scientific data under `examples/jiuzhang/validation_data/`.
|
|
5
|
+
|
|
6
|
+
The files `click_probs_squeezed_0.npy` and
|
|
7
|
+
`click_probs_squashed_0.npy` are retained Jiuzhang 1.0 probability arrays from:
|
|
8
|
+
|
|
9
|
+
- Javier Martinez-Cifuentes, Karen Milena Fonseca-Romero, and Nicolas Quesada,
|
|
10
|
+
"Classical models are a better explanation of the Jiuzhang 1.0 Gaussian
|
|
11
|
+
Boson Sampler than its targeted squeezed light model," Zenodo record
|
|
12
|
+
[7194775](https://doi.org/10.5281/zenodo.7194775), licensed
|
|
13
|
+
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
|
|
14
|
+
|
|
15
|
+
The files `T_full.npy`, `events_band13_32.npy`,
|
|
16
|
+
`squeezing parameters.txt`, and `empirical_click_rates.npy` are small derived
|
|
17
|
+
validation inputs from the Jiuzhang 1.0 data published by Han-Sen Zhong et al.:
|
|
18
|
+
|
|
19
|
+
- [Experimental raw data of "Quantum computational advantage using
|
|
20
|
+
photons"](https://quantum.ustc.edu.cn/web/en/node/915), University of Science
|
|
21
|
+
and Technology of China, 2020.
|
|
22
|
+
|
|
23
|
+
The USTC page makes the raw data publicly downloadable but does not state a
|
|
24
|
+
separate data license. These derived inputs are included for validation,
|
|
25
|
+
attribution, and reproducibility; no Apache-2.0 license is asserted over the
|
|
26
|
+
underlying USTC data. Every redistributed or derived file is bound to the
|
|
27
|
+
SHA-256 digest in `scripts/prepare_validation_data.py`.
|
|
@@ -77,6 +77,25 @@ def commit() -> str | None:
|
|
|
77
77
|
return None
|
|
78
78
|
|
|
79
79
|
|
|
80
|
+
def git_state() -> dict[str, Any]:
|
|
81
|
+
"""Record whether local tracked bytes are exactly represented by a commit."""
|
|
82
|
+
env_commit = os.environ.get("GBS_COMMIT", "").strip()
|
|
83
|
+
if env_commit:
|
|
84
|
+
return {"commit": env_commit, "tracked_dirty": None, "source": "GBS_COMMIT"}
|
|
85
|
+
try:
|
|
86
|
+
full = subprocess.run(
|
|
87
|
+
["git", "rev-parse", "HEAD"], capture_output=True, text=True, timeout=10
|
|
88
|
+
).stdout.strip()
|
|
89
|
+
if not full:
|
|
90
|
+
return {"commit": None, "tracked_dirty": None, "source": "unavailable"}
|
|
91
|
+
dirty = subprocess.run(
|
|
92
|
+
["git", "diff", "--quiet", "HEAD", "--"], timeout=10
|
|
93
|
+
).returncode != 0
|
|
94
|
+
return {"commit": full, "tracked_dirty": dirty, "source": "git"}
|
|
95
|
+
except Exception:
|
|
96
|
+
return {"commit": None, "tracked_dirty": None, "source": "unavailable"}
|
|
97
|
+
|
|
98
|
+
|
|
80
99
|
def container_digest() -> str | None:
|
|
81
100
|
"""The pinned container image digest the run was launched from (or None)."""
|
|
82
101
|
env = os.environ.get("GBS_CONTAINER_DIGEST", "").strip()
|
|
@@ -95,8 +114,10 @@ def container_digest() -> str | None:
|
|
|
95
114
|
def provenance() -> dict[str, Any]:
|
|
96
115
|
"""The common provenance block embedded in every artifact (commit + container digest +
|
|
97
116
|
machine environment), so a result reproduces from the file alone (docs/DESIGN.md §9)."""
|
|
117
|
+
state = git_state()
|
|
98
118
|
return {
|
|
99
119
|
"commit": commit(),
|
|
120
|
+
"git": state,
|
|
100
121
|
"container_digest": container_digest(),
|
|
101
122
|
"hostname": platform.node() or None,
|
|
102
123
|
"captured_utc": datetime.now(timezone.utc).isoformat(),
|
|
@@ -28,6 +28,14 @@ and run on the CPU (`core/preflight/`, exercised by the test suite via
|
|
|
28
28
|
against independent CPU references. Device-only variants, including
|
|
29
29
|
`permanent_warp.cu`, are validated in the CUDA session rather than the host shim.
|
|
30
30
|
|
|
31
|
+
**Certified arithmetic is relative-plus-absolute.** Every recurrence includes
|
|
32
|
+
an explicit binary64 subnormal floor, and mixed-scale products propagate that
|
|
33
|
+
absolute error through later factors. Double-double division and square root
|
|
34
|
+
are bounded from outward FMA residuals of the values actually returned rather
|
|
35
|
+
than assumed forward constants. Unsafe division ranges and any non-finite or
|
|
36
|
+
negative certificate refuse instead of producing a finite claim; see
|
|
37
|
+
[`docs/dd_certificate_proof.md`](../docs/dd_certificate_proof.md).
|
|
38
|
+
|
|
31
39
|
**Execution model.** The default kernels evaluate one instance per thread and
|
|
32
40
|
batch across the grid. Only the permanent uses the Gray-code delta walk; the
|
|
33
41
|
hafnian, loop hafnian, and torontonian enumerate the `2^k` subsets independently,
|
|
@@ -41,7 +49,8 @@ inputs.
|
|
|
41
49
|
**Size limits** (fixed per-thread buffers): permanent ≤ 28, hafnian ≤ 20 (double-
|
|
42
50
|
double ≤ 16), loop hafnian ≤ 20 (double-double ≤ 14), torontonian 2n ≤ 24; larger
|
|
43
51
|
inputs are rejected at the Python boundary. The single-large recursive torontonian
|
|
44
|
-
extends to dimension 64
|
|
52
|
+
extends to dimension 64 and requires a finite matrix that is exactly symmetric
|
|
53
|
+
after conversion to binary64, because its Cholesky walk consumes one triangle.
|
|
45
54
|
|
|
46
55
|
### Build and run
|
|
47
56
|
|