pyfastcd 1.3.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.
- pyfastcd-1.3.1/.clang-format +22 -0
- pyfastcd-1.3.1/CHANGELOG.md +211 -0
- pyfastcd-1.3.1/CITATION.cff +36 -0
- pyfastcd-1.3.1/CMakeLists.txt +417 -0
- pyfastcd-1.3.1/CONTRIBUTING.md +150 -0
- pyfastcd-1.3.1/LICENSE +21 -0
- pyfastcd-1.3.1/PKG-INFO +292 -0
- pyfastcd-1.3.1/README.md +249 -0
- pyfastcd-1.3.1/SECURITY.md +13 -0
- pyfastcd-1.3.1/assets/fastCD.png +0 -0
- pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/assessment.md +19 -0
- pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/complex-measured.c +319 -0
- pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/kernel-binary-check.json +12 -0
- pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/results.json +147227 -0
- pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/results.md +213 -0
- pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/upstream-build.json +76 -0
- pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/assessment.md +52 -0
- pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/commands.json +31 -0
- pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/dependency-build.json +18 -0
- pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/results.json +36882 -0
- pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/results.md +83 -0
- pyfastcd-1.3.1/benchmark-results/paper-results.json +17597 -0
- pyfastcd-1.3.1/benchmark-results/paper-results.md +105 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/benchmark.log +241 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/build.log +21 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/commands.json +79 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/comparison.json +459 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/configure.log +9 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/corpus-manifest.json +162 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/ctest.log +13 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/environment.json +78 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/fastcd-build-Release.txt +32 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/operation-count-probe.cpp +67 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/operation-counts.json +184 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/results.json +17597 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/results.md +105 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/sha256.json +16 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/validation.json +72 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/README.md +100 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/auto-assessment.json +646 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/benchmark.log +242 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/build.log +21 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/commands.json +75 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/comparison-previous-leaf.json +459 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/comparison.json +460 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/configure.log +9 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/corpus-manifest.json +162 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/ctest.log +13 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/environment.json +88 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/fastcd-build-Release.txt +32 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-cutoff16-ctest.log +107 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-cutoff4-ctest.log +107 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-default-ctest.log +123 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-no-simd-ctest.log +107 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-sanitized-ctest.log +107 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/operation-count-comparison.json +513 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/operation-counts.json +192 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/results.json +17597 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/results.md +105 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/sha256.json +26 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/source.patch +7591 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/timing-start.txt +1 -0
- pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/validation.json +80 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/PLOTS.md +34 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/README.md +107 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/SHA256SUMS +99 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/accuracy-summary.csv +1369 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/accuracy-tables.md +113 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/agreement.json +52 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/block-size-summary.csv +11 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/block-size-tables.md +14 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/builds.json +195 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/cc-accuracy-summary.json +5051 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/cc-speed-summary.csv +73 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/cc-speed-tables.md +28 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/key-figures.json +1310 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/plot-data.csv +145 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/plot-data.json +19100 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-complex.pdf +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-complex.png +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-complex.svg +1318 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-real.pdf +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-real.png +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-real.svg +1460 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-batch.pdf +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-batch.png +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-batch.svg +1682 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-single.pdf +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-single.png +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-single.svg +1602 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-batch.pdf +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-batch.png +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-batch.svg +1851 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-single.pdf +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-single.png +0 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-single.svg +1743 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-summary.csv +29 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-tables.md +32 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/study.json +704 -0
- pyfastcd-1.3.1/benchmark-results/stability-20261107/ties.json +1749 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/README.md +94 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-benchmark.log +393 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-build/fastcd-build-Release.txt +31 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-build.log +18 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-configure.log +9 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-ctest.log +11 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline.json +25617 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline.md +93 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/documentation-audit.json +38 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/environment.json +15 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/local-build-ctest.log +123 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/local-cutoff16-ctest.log +107 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/local-cutoff4-ctest.log +107 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/local-no-simd-ctest.log +107 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/local-sanitized-ctest.log +107 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/operation-counts.json +160 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/operation-counts.log +160 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/pilot16.json +1952 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/pilot16.md +51 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/summary.json +738 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-benchmark.log +385 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-build/fastcd-build-Release.txt +32 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-build.log +21 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-configure.log +9 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-ctest.log +13 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/updated.json +25617 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/updated.md +93 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261019/validation.json +117 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261104/README.md +87 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261104/domains.json +99285 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261104/domains.md +213 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261104/flint.json +80998 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261104/flint.md +155 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261104/real.json +17597 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261104/real.md +105 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261109/README.md +119 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261109/domains.json +108985 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261109/domains.md +213 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261109/flint.json +87334 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261109/flint.md +155 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261109/host-load.log +5948 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261109/real.json +17597 -0
- pyfastcd-1.3.1/benchmark-results/t440-20261109/real.md +105 -0
- pyfastcd-1.3.1/benchmarks/benchmark.c +622 -0
- pyfastcd-1.3.1/benchmarks/benchmark.py +669 -0
- pyfastcd-1.3.1/benchmarks/domains.c +459 -0
- pyfastcd-1.3.1/benchmarks/domains.py +303 -0
- pyfastcd-1.3.1/benchmarks/flint.c +530 -0
- pyfastcd-1.3.1/benchmarks/flint.py +382 -0
- pyfastcd-1.3.1/benchmarks/flint_schedule.h +106 -0
- pyfastcd-1.3.1/benchmarks/protocols.py +221 -0
- pyfastcd-1.3.1/benchmarks/run_dedicated.sh +88 -0
- pyfastcd-1.3.1/benchmarks/stability.py +530 -0
- pyfastcd-1.3.1/benchmarks/stability_agreement.py +87 -0
- pyfastcd-1.3.1/benchmarks/stability_archive.py +388 -0
- pyfastcd-1.3.1/benchmarks/stability_block_size.py +157 -0
- pyfastcd-1.3.1/benchmarks/stability_cc_accuracy.py +137 -0
- pyfastcd-1.3.1/benchmarks/stability_cc_performance.py +147 -0
- pyfastcd-1.3.1/benchmarks/stability_plots.py +401 -0
- pyfastcd-1.3.1/benchmarks/stability_report.py +133 -0
- pyfastcd-1.3.1/benchmarks/stability_speed.py +138 -0
- pyfastcd-1.3.1/benchmarks/stability_speed_report.py +76 -0
- pyfastcd-1.3.1/benchmarks/stability_study.py +402 -0
- pyfastcd-1.3.1/benchmarks/stability_ties.py +86 -0
- pyfastcd-1.3.1/benchmarks/stability_timing.py +143 -0
- pyfastcd-1.3.1/benchmarks/stack_offset.h +41 -0
- pyfastcd-1.3.1/benchmarks/test_benchmark.py +166 -0
- pyfastcd-1.3.1/benchmarks/test_domains_benchmark.py +99 -0
- pyfastcd-1.3.1/benchmarks/test_flint_benchmark.py +245 -0
- pyfastcd-1.3.1/benchmarks/test_stability.py +68 -0
- pyfastcd-1.3.1/benchmarks/test_stability_archives.py +128 -0
- pyfastcd-1.3.1/benchmarks/test_stability_plots.py +109 -0
- pyfastcd-1.3.1/benchmarks/test_stability_tools.py +194 -0
- pyfastcd-1.3.1/cmake/fastcdConfig.cmake.in +5 -0
- pyfastcd-1.3.1/docs/benchmark.md +413 -0
- pyfastcd-1.3.1/docs/c-api.md +859 -0
- pyfastcd-1.3.1/docs/mathematics.md +680 -0
- pyfastcd-1.3.1/docs/python-api.md +729 -0
- pyfastcd-1.3.1/docs/quasilinear-supplement-fastCD.pdf +0 -0
- pyfastcd-1.3.1/docs/quasilinear-supplement-fastCD.tex +1188 -0
- pyfastcd-1.3.1/docs/quickstart-c.md +331 -0
- pyfastcd-1.3.1/docs/quickstart-python.md +153 -0
- pyfastcd-1.3.1/docs/stability.md +489 -0
- pyfastcd-1.3.1/include/fastcd/arithmetic.h +46 -0
- pyfastcd-1.3.1/include/fastcd/complex.h +62 -0
- pyfastcd-1.3.1/include/fastcd/fastcd.h +330 -0
- pyfastcd-1.3.1/include/fastcd/finite.h +245 -0
- pyfastcd-1.3.1/pyproject.toml +151 -0
- pyfastcd-1.3.1/python/src/pyfastcd/__init__.py +59 -0
- pyfastcd-1.3.1/python/src/pyfastcd/__init__.pyi +9 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_algebra.py +1037 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_algebra.pyi +207 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_array.py +1687 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_array.pyi +231 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_core.c +4184 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_core.pyi +230 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_domains.py +881 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_domains_core.c +524 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_domains_core.pyi +18 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_field.py +287 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_field.pyi +55 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_operators.py +146 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_typing.py +32 -0
- pyfastcd-1.3.1/python/src/pyfastcd/_validation.py +69 -0
- pyfastcd-1.3.1/python/src/pyfastcd/py.typed +1 -0
- pyfastcd-1.3.1/python/tests/data/v1.1.0-real-pickles.json +158 -0
- pyfastcd-1.3.1/python/tests/reference_cd.py +175 -0
- pyfastcd-1.3.1/python/tests/test_domain_regressions.py +151 -0
- pyfastcd-1.3.1/python/tests/test_domains.py +511 -0
- pyfastcd-1.3.1/python/tests/test_pyfastcd.py +2842 -0
- pyfastcd-1.3.1/python/tests/typing_domains.py +51 -0
- pyfastcd-1.3.1/src/arithmetic.c +7 -0
- pyfastcd-1.3.1/src/balanced_sum.h +224 -0
- pyfastcd-1.3.1/src/cariow_cariowa.c +320 -0
- pyfastcd-1.3.1/src/cariow_cariowa_impl.h +258 -0
- pyfastcd-1.3.1/src/complex.c +456 -0
- pyfastcd-1.3.1/src/direct.c +126 -0
- pyfastcd-1.3.1/src/direct_impl.h +67 -0
- pyfastcd-1.3.1/src/fastcd.c +1230 -0
- pyfastcd-1.3.1/src/fastcd_internal.h +74 -0
- pyfastcd-1.3.1/src/finite/direct_instance.h +65 -0
- pyfastcd-1.3.1/src/finite/direct_value.h +123 -0
- pyfastcd-1.3.1/src/finite/field.c +227 -0
- pyfastcd-1.3.1/src/finite/field_internal.h +41 -0
- pyfastcd-1.3.1/src/finite/finite.c +141 -0
- pyfastcd-1.3.1/src/finite/finite_backend.c +484 -0
- pyfastcd-1.3.1/src/finite/finite_backend.h +139 -0
- pyfastcd-1.3.1/src/finite/finite_instance.h +78 -0
- pyfastcd-1.3.1/src/finite/finite_maps.h +33 -0
- pyfastcd-1.3.1/src/finite/finite_prime.c +43 -0
- pyfastcd-1.3.1/src/finite/finite_value.h +221 -0
- pyfastcd-1.3.1/src/finite/generated/field_products.h +1814 -0
- pyfastcd-1.3.1/src/finite/generated/finite_byte.c +4548 -0
- pyfastcd-1.3.1/src/finite/generated/finite_maps.c +2054 -0
- pyfastcd-1.3.1/src/finite/generated/finite_medium_bar.c +8066 -0
- pyfastcd-1.3.1/src/finite/generated/finite_medium_mont.c +8140 -0
- pyfastcd-1.3.1/src/finite/generated/finite_mont_16.c +6401 -0
- pyfastcd-1.3.1/src/finite/generated/finite_mont_4.c +3320 -0
- pyfastcd-1.3.1/src/finite/generated/finite_mont_8.c +3859 -0
- pyfastcd-1.3.1/src/finite/generated/finite_short_16.c +162 -0
- pyfastcd-1.3.1/src/finite/generated/finite_short_32.c +2497 -0
- pyfastcd-1.3.1/src/finite/generated/finite_short_8.c +157 -0
- pyfastcd-1.3.1/src/finite/generated/finite_shuffle_16.c +329 -0
- pyfastcd-1.3.1/src/finite/generated/finite_shuffle_32.c +3187 -0
- pyfastcd-1.3.1/src/finite/generated/finite_shuffle_8.c +311 -0
- pyfastcd-1.3.1/src/finite/generated/finite_ternary_16.c +3561 -0
- pyfastcd-1.3.1/src/finite/generated/finite_ternary_32.c +2002 -0
- pyfastcd-1.3.1/src/finite/generated/finite_ternary_64.c +1686 -0
- pyfastcd-1.3.1/src/finite/internal.h +27 -0
- pyfastcd-1.3.1/src/finite/operations.c +417 -0
- pyfastcd-1.3.1/src/finite/plan.c +100 -0
- pyfastcd-1.3.1/src/finite/schedule_impl.h +259 -0
- pyfastcd-1.3.1/src/generated/cariow_cariowa_kernels.h +7614 -0
- pyfastcd-1.3.1/src/generated/cariow_cariowa_masks.h +7755 -0
- pyfastcd-1.3.1/src/generated/direct_kernels.h +2769 -0
- pyfastcd-1.3.1/src/generated/quasilinear_kernels.h +4984 -0
- pyfastcd-1.3.1/src/pair.h +60 -0
- pyfastcd-1.3.1/src/quasilinear.c +165 -0
- pyfastcd-1.3.1/src/quasilinear_impl.h +375 -0
- pyfastcd-1.3.1/src/quasilinear_simd.h +365 -0
- pyfastcd-1.3.1/tests/reference_cd.c +163 -0
- pyfastcd-1.3.1/tests/reference_cd.h +35 -0
- pyfastcd-1.3.1/tests/test_domain_public_api.c +48 -0
- pyfastcd-1.3.1/tests/test_domains.c +363 -0
- pyfastcd-1.3.1/tests/test_fastcd.c +3772 -0
- pyfastcd-1.3.1/tests/test_field_reduce.c +30 -0
- pyfastcd-1.3.1/tests/test_finite_direct.c +74 -0
- pyfastcd-1.3.1/tests/test_public_api.c +52 -0
- pyfastcd-1.3.1/tests/test_quasilinear_leaf.c +51 -0
- pyfastcd-1.3.1/tests/test_stability.c +316 -0
- pyfastcd-1.3.1/tools/check_cariow_counts.py +179 -0
- pyfastcd-1.3.1/tools/check_quasilinear_counts.py +140 -0
- pyfastcd-1.3.1/tools/check_stability_archives.py +193 -0
- pyfastcd-1.3.1/tools/check_v110_compat.py +261 -0
- pyfastcd-1.3.1/tools/finite/c_format.py +42 -0
- pyfastcd-1.3.1/tools/finite/finite_coordinate_projection.py +80 -0
- pyfastcd-1.3.1/tools/finite/finite_direct.py +336 -0
- pyfastcd-1.3.1/tools/finite/finite_prepare_linear.h +98 -0
- pyfastcd-1.3.1/tools/finite/finite_prepare_small.h +57 -0
- pyfastcd-1.3.1/tools/finite/finite_ternary_io.h +57 -0
- pyfastcd-1.3.1/tools/finite/finite_transpose.py +65 -0
- pyfastcd-1.3.1/tools/finite/finite_value_schedule.h +216 -0
- pyfastcd-1.3.1/tools/finite/finite_vector_packing.py +64 -0
- pyfastcd-1.3.1/tools/finite/generate_fields.py +44 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_backends.py +373 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_byte.py +307 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_differences.py +234 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_maps.py +265 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_medium.py +238 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_multipoint.py +223 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_prime_simd.py +266 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_short.py +161 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_short_prime.py +48 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_shuffle.py +307 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_simd.py +269 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_slice_vector.py +236 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_slice_wide.py +249 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_small_multipoint.py +118 -0
- pyfastcd-1.3.1/tools/finite/generate_finite_ternary.py +229 -0
- pyfastcd-1.3.1/tools/generate_kernels.py +685 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Conventions of the original real kernels: four-space blocks, eight-space
|
|
2
|
+
# continuations, type-attached pointers, and comments explaining each stage.
|
|
3
|
+
BasedOnStyle: LLVM
|
|
4
|
+
IndentWidth: 4
|
|
5
|
+
ContinuationIndentWidth: 8
|
|
6
|
+
ColumnLimit: 88
|
|
7
|
+
PointerAlignment: Left
|
|
8
|
+
DerivePointerAlignment: false
|
|
9
|
+
BreakBeforeBraces: Attach
|
|
10
|
+
AllowShortFunctionsOnASingleLine: Empty
|
|
11
|
+
AllowShortIfStatementsOnASingleLine: WithoutElse
|
|
12
|
+
AllowShortLoopsOnASingleLine: true
|
|
13
|
+
IndentCaseLabels: true
|
|
14
|
+
SortIncludes: Never
|
|
15
|
+
AlignAfterOpenBracket: DontAlign
|
|
16
|
+
AlignOperands: DontAlign
|
|
17
|
+
ReflowComments: false
|
|
18
|
+
BreakStringLiterals: false
|
|
19
|
+
SeparateDefinitionBlocks: Always
|
|
20
|
+
# The token-pasting macro expands to a function name, not a declaration type.
|
|
21
|
+
Macros:
|
|
22
|
+
- FASTCD_FF_JOIN(a,b)=a
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to fastCD are recorded in this file. The project follows
|
|
4
|
+
[Semantic Versioning](https://semver.org/spec/v2.0.0.html); the format follows
|
|
5
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/). The C library and the
|
|
6
|
+
`pyfastcd` package share one version number, defined in `src/fastcd.c`.
|
|
7
|
+
|
|
8
|
+
## [1.3.1] - 2026-11-10
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- A release workflow, `.github/workflows/release.yml`, that builds the source
|
|
13
|
+
distribution and wheels for CPython 3.10 through 3.14 on Linux, macOS and
|
|
14
|
+
Windows and publishes them to PyPI when a version tag is pushed.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- `README.md`, `docs/benchmark.md`, `docs/stability.md` and the archives
|
|
19
|
+
`benchmark-results/t440-20261109/` and
|
|
20
|
+
`benchmark-results/stability-20261107/` name the measured commits by
|
|
21
|
+
their hashes in the published history, `33addc9` and `558e609`.
|
|
22
|
+
|
|
23
|
+
## [1.3.0] - 2026-11-10
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Drivers for an exact-reference accuracy study and paired timings
|
|
28
|
+
(`benchmarks/stability*.py`), run end to end by
|
|
29
|
+
`benchmarks/stability_study.py`; the C regression test
|
|
30
|
+
`tests/test_stability.c`; and the study in
|
|
31
|
+
`benchmark-results/stability-20261107/`, which `docs/stability.md`
|
|
32
|
+
summarizes.
|
|
33
|
+
- `tools/check_stability_archives.py`, a read-only check of the published
|
|
34
|
+
study files against their recorded hashes, of the tables in
|
|
35
|
+
`docs/stability.md` against the study, and of the measured commit's source
|
|
36
|
+
against the recorded source. With `--full` it also checks the raw data,
|
|
37
|
+
which is not distributed.
|
|
38
|
+
- The benchmark run of 2026-11-09 in `benchmark-results/t440-20261109/`,
|
|
39
|
+
which the README tables and `docs/benchmark.md` report.
|
|
40
|
+
- `tools/check_cariow_counts.py`, which checks the Cariow–Cariowa operation
|
|
41
|
+
counts in `docs/mathematics.md` through dimension 1024, and a CI job that
|
|
42
|
+
runs it.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- Floating-point sums whose length grows with the dimension are accumulated
|
|
47
|
+
in blocks of eight with a balanced tree between blocks: in the quasilinear
|
|
48
|
+
kernels, in the complex-coefficient pairing shared by quadratic norms,
|
|
49
|
+
squares, anticommutators and reciprocals, and in the Cariow–Cariowa
|
|
50
|
+
correction sums above dimension 256. Real quasilinear products from
|
|
51
|
+
dimension 16 upward, complex quasilinear products from dimension 4
|
|
52
|
+
upward, and the complex-coefficient operations that use the pairing from
|
|
53
|
+
dimension 16 upward can round differently from 1.2.0, as can
|
|
54
|
+
Cariow–Cariowa results at dimensions 512 and 1024. Direct and
|
|
55
|
+
finite-field results, the public API, workspace sizes and the published
|
|
56
|
+
arithmetic counts are unchanged.
|
|
57
|
+
- Over C and finite fields, AUTO selects direct multiplication up to
|
|
58
|
+
dimension 4. Finite-field direct multiplication uses the packed field
|
|
59
|
+
arithmetic of the quasilinear kernels from dimension 16 on.
|
|
60
|
+
- For real coefficients, AUTO selects direct multiplication for single
|
|
61
|
+
products at dimension 4. Batches at dimension 4 still use quasilinear
|
|
62
|
+
where the two-lane SIMD kernels are built; other builds follow the
|
|
63
|
+
single-product choice for batches, as before.
|
|
64
|
+
- The benchmark runners for finite fields and for the comparison with FLINT
|
|
65
|
+
(Fast Library for Number Theory), an independent exact-arithmetic C
|
|
66
|
+
library, time each block at its own stack offset, spread over a 4 KB page,
|
|
67
|
+
so that the observations of a cell do not share one stack placement.
|
|
68
|
+
- The benchmark runners are built with branch padding where the compiler
|
|
69
|
+
supports it, so that timing loops do not depend on 32-byte code placement
|
|
70
|
+
on Skylake-family processors. The library is built as before.
|
|
71
|
+
- `tools/check_v110_compat.py` accepts the two differences that the
|
|
72
|
+
compatibility rules permit: floating-point results that differ by
|
|
73
|
+
rounding, and a different `"auto"` choice. Every other result must still
|
|
74
|
+
match v1.1.0 exactly.
|
|
75
|
+
|
|
76
|
+
### Fixed
|
|
77
|
+
|
|
78
|
+
- Finite-field operations in the Python package rejected NumPy `uint32`
|
|
79
|
+
arrays on Windows, where NumPy exports them with the buffer format `L`.
|
|
80
|
+
- CTest runs of GCC sanitizer builds turn off AddressSanitizer's
|
|
81
|
+
use-after-return detection, whose frames misalign the AVX-512 stack
|
|
82
|
+
variables of the finite-field kernels (GCC bug 110027) and crashed the
|
|
83
|
+
finite-field tests.
|
|
84
|
+
|
|
85
|
+
## [1.2.0] - 2026-11-04
|
|
86
|
+
|
|
87
|
+
### Added
|
|
88
|
+
|
|
89
|
+
- `FiniteField(char=..., deg=...)`: immutable, cached finite fields for use
|
|
90
|
+
as coefficients, with deterministic irreducible polynomial selection,
|
|
91
|
+
and `FiniteField.from_modulus` for an explicit polynomial. Field scalars
|
|
92
|
+
and batches use the `Element` and `ElementArray` classes with exact
|
|
93
|
+
polynomial storage.
|
|
94
|
+
- `char`, `deg`, and `field` arguments on `Algebra` and `cd_element` select
|
|
95
|
+
complex or odd-characteristic finite-field coefficients. Calls without
|
|
96
|
+
them keep their real-coefficient behavior.
|
|
97
|
+
- Finite-field quasilinear CD multiplication with fixed-degree arithmetic
|
|
98
|
+
and runtime-dispatched x86 kernels, an independent direct recursion,
|
|
99
|
+
structural operations, field scalars, broadcasting, output buffers and
|
|
100
|
+
buffer/NumPy/DLPack support.
|
|
101
|
+
- Complex CD arithmetic through the complex alternating recursion, alongside
|
|
102
|
+
a direct implementation of the defining recursion.
|
|
103
|
+
- `quadratic_norm()` on all elements and arrays, returning the canonical
|
|
104
|
+
coefficient-field quadratic form; `norm_squared()` returns the same form.
|
|
105
|
+
- C headers `<fastcd/arithmetic.h>`, `<fastcd/complex.h>` and
|
|
106
|
+
`<fastcd/finite.h>` for finite and complex contexts, workspace queries,
|
|
107
|
+
record operations, products, batches and quadratic norms. The real C ABI
|
|
108
|
+
is unchanged.
|
|
109
|
+
- Benchmark protocols for complex and finite fields (`--protocol domains`)
|
|
110
|
+
and for comparison with FLINT (Fast Library for Number Theory)
|
|
111
|
+
(`--protocol flint`), with full-corpus verification, paired confidence
|
|
112
|
+
intervals and reproducible corpus and build manifests. Only the FLINT
|
|
113
|
+
benchmark executable links FLINT.
|
|
114
|
+
- C and Python tests for the new coefficient fields, exact workspace
|
|
115
|
+
boundary checks, a portable reduction test, v1.1.0 pickle fixtures,
|
|
116
|
+
`tools/check_v110_compat.py`, and type stubs that infer coefficient types.
|
|
117
|
+
- T440 benchmark data for the 1.2.0 source: the full real-coefficient
|
|
118
|
+
protocol through dimension 1024, direct versus quasilinear over the
|
|
119
|
+
default finite fields and C, and the FLINT comparison. The README tables
|
|
120
|
+
use this run.
|
|
121
|
+
|
|
122
|
+
## [1.1.0] - 2026-10-26
|
|
123
|
+
|
|
124
|
+
### Changed
|
|
125
|
+
|
|
126
|
+
- Automatic single-product selection at dimension 4 now uses quasilinear
|
|
127
|
+
instead of direct, including one-record batches and composite operations.
|
|
128
|
+
This follows the lower measured mean in the earlier 2026-10-23 T440 run;
|
|
129
|
+
the paired 95% interval still includes equal performance. AUTO results
|
|
130
|
+
can round differently from the previous direct default.
|
|
131
|
+
- Quasilinear multiplication uses a fused nonrecursive bilinear map and a
|
|
132
|
+
specialized complex octonion alternating-product base case; arithmetic
|
|
133
|
+
counts and validation instructions are documented in
|
|
134
|
+
`docs/mathematics.md`. Its floating-point rounding can differ from version
|
|
135
|
+
1.0.0.
|
|
136
|
+
- The complex octonion base case of the quasilinear recursion uses 72
|
|
137
|
+
products, 156 additions/subtractions and 15 halvings, 243 operations in
|
|
138
|
+
total, so a full dimension-16 real product uses 417 operations. The
|
|
139
|
+
arithmetic-count check covers dimensions through 1024, and the
|
|
140
|
+
mathematics documentation gives the addition-count argument for the
|
|
141
|
+
fixed nonrecursive-map decomposition.
|
|
142
|
+
- The C and Python stability documentation clarifies that AUTO choices,
|
|
143
|
+
workspace lengths, and arithmetic schedules can change between compatible
|
|
144
|
+
releases; bitwise floating-point reproducibility across versions is not
|
|
145
|
+
guaranteed.
|
|
146
|
+
|
|
147
|
+
### Added
|
|
148
|
+
|
|
149
|
+
- Full T440 benchmark data through dimension 1024 with the paper's input
|
|
150
|
+
corpora and protocol. The run passes all 600,000 verification checks and
|
|
151
|
+
supports the current AUTO choices. Source distributions include the
|
|
152
|
+
benchmark archives linked by the documentation.
|
|
153
|
+
- CI checks for quasilinear arithmetic counts and the complete source
|
|
154
|
+
distribution to wheel to installed-package test path, including byte-for-byte
|
|
155
|
+
verification of the bundled benchmark archives.
|
|
156
|
+
|
|
157
|
+
### Fixed
|
|
158
|
+
|
|
159
|
+
- Documentation matches scalar-comparison exceptions, NumPy return types,
|
|
160
|
+
zero-copy layout rules, and the current arithmetic schedules. The
|
|
161
|
+
nonrecursive-map addition-count argument is given in full, and the
|
|
162
|
+
mathematics documentation follows the notation of the paper's v2.
|
|
163
|
+
- NumPy boolean scalars are rejected as dimensions, levels, and basis indices,
|
|
164
|
+
matching Python booleans consistently across supported NumPy versions.
|
|
165
|
+
- README image and file links use absolute URLs on `git.tanuki-cd.com`, so the
|
|
166
|
+
package description links to the canonical repository when rendered on PyPI.
|
|
167
|
+
- Scalar equality preserves the exact values of integers, decimals, fractions,
|
|
168
|
+
and NumPy scalars instead of rounding comparison operands to binary64.
|
|
169
|
+
Equal hashable scalars and `Element` values now remain interchangeable in
|
|
170
|
+
dictionaries and sets. `ElementArray` uses the same comparison rules;
|
|
171
|
+
supplying `__float__` alone does not imply numeric equality.
|
|
172
|
+
- Cariow–Cariowa batches return immediately when SIMD pairing processes every
|
|
173
|
+
record, avoiding out-of-range tail pointers for minimally allocated padded
|
|
174
|
+
batches. Multiplication arithmetic and the archived paper data are unchanged.
|
|
175
|
+
- The kernel generator's fixed-length `zip` traversals explicitly use
|
|
176
|
+
`strict=True`, satisfying the configured lint checks without changing the
|
|
177
|
+
generated kernels.
|
|
178
|
+
- CMake reconfigures when the canonical version changes, including builds
|
|
179
|
+
with the benchmark disabled, keeping installed package metadata in sync.
|
|
180
|
+
|
|
181
|
+
## [1.0.0] - 2026-09-13
|
|
182
|
+
|
|
183
|
+
The first public release.
|
|
184
|
+
|
|
185
|
+
### Added
|
|
186
|
+
|
|
187
|
+
- C library `libfastcd`: direct, Cariow–Cariowa, and quasilinear
|
|
188
|
+
Cayley–Dickson multiplication with benchmark-derived automatic selection,
|
|
189
|
+
strided batch products with two-lane SIMD pairing, coordinate and structural
|
|
190
|
+
operations, cross products, commutators, associators, indexed basis
|
|
191
|
+
operations, and matrix-free operator commutators.
|
|
192
|
+
- Python package `pyfastcd`: `Algebra`, `Element`, `ElementArray`,
|
|
193
|
+
`BasisProduct`, and `cd_element`, with NumPy ufunc, buffer, and DLPack
|
|
194
|
+
interoperability and complete type stubs.
|
|
195
|
+
- Independent reference oracles for the C and Python test suites, and a
|
|
196
|
+
reproducible benchmark driver that records source, executable, and corpus
|
|
197
|
+
hashes with its results.
|
|
198
|
+
- Single quasilinear products above dimension 16 evaluate the two recursive
|
|
199
|
+
calls of the top complex-kernel call in the two SIMD lanes and continue
|
|
200
|
+
through the paired kernel, bitwise identical for finite results to the
|
|
201
|
+
scalar and batched forms; the quasilinear workspace query grows
|
|
202
|
+
accordingly. The `FASTCD_CC_DOUBLING=1` tuning option evaluates
|
|
203
|
+
Cariow–Cariowa products through one doubling step with paired
|
|
204
|
+
half-dimensional kernels, and `benchmarks/run_dedicated.sh` scripts a
|
|
205
|
+
complete build, test, and benchmark run.
|
|
206
|
+
- Cariow–Cariowa multiplication is available through dimension 1024 via a
|
|
207
|
+
table-driven kernel with the same operations as the generated kernels; it
|
|
208
|
+
needs `2N` workspace doubles above dimension 64 and is not recommended
|
|
209
|
+
there. The benchmark times it at every supported dimension by default;
|
|
210
|
+
`--max-cc-dimension` restricts the timed range, and dimensions above the
|
|
211
|
+
cap are marked "not timed" as opposed to "unavailable".
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use fastCD in your work, please cite it using this metadata."
|
|
3
|
+
type: software
|
|
4
|
+
title: "fastCD: fast Cayley–Dickson arithmetic over real and complex numbers and finite fields"
|
|
5
|
+
abstract: >-
|
|
6
|
+
A C library and NumPy-compatible Python extension for multiplication in the
|
|
7
|
+
Cayley–Dickson tower over the real numbers, the complex numbers, and
|
|
8
|
+
odd-characteristic finite fields, including a quasilinear O(N log N)
|
|
9
|
+
multiplication algorithm alongside the direct recursion and the
|
|
10
|
+
Cariow–Cariowa algorithm.
|
|
11
|
+
authors:
|
|
12
|
+
- family-names: Lemley
|
|
13
|
+
given-names: Harrison
|
|
14
|
+
version: 1.3.1
|
|
15
|
+
date-released: 2026-11-10
|
|
16
|
+
license: MIT
|
|
17
|
+
repository-code: "https://git.tanuki-cd.com/algebraity/fastCD"
|
|
18
|
+
keywords:
|
|
19
|
+
- Cayley-Dickson algebras
|
|
20
|
+
- hypercomplex numbers
|
|
21
|
+
- quaternions
|
|
22
|
+
- octonions
|
|
23
|
+
- sedenions
|
|
24
|
+
- finite fields
|
|
25
|
+
- fast multiplication
|
|
26
|
+
preferred-citation:
|
|
27
|
+
type: article
|
|
28
|
+
title: "Quasilinear multiplication in the Cayley-Dickson tower"
|
|
29
|
+
authors:
|
|
30
|
+
- family-names: Lemley
|
|
31
|
+
given-names: Harrison
|
|
32
|
+
year: 2026
|
|
33
|
+
url: "https://arxiv.org/abs/2609.11588"
|
|
34
|
+
identifiers:
|
|
35
|
+
- type: other
|
|
36
|
+
value: "arXiv:2609.11588"
|