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.
Files changed (300) hide show
  1. pyfastcd-1.3.1/.clang-format +22 -0
  2. pyfastcd-1.3.1/CHANGELOG.md +211 -0
  3. pyfastcd-1.3.1/CITATION.cff +36 -0
  4. pyfastcd-1.3.1/CMakeLists.txt +417 -0
  5. pyfastcd-1.3.1/CONTRIBUTING.md +150 -0
  6. pyfastcd-1.3.1/LICENSE +21 -0
  7. pyfastcd-1.3.1/PKG-INFO +292 -0
  8. pyfastcd-1.3.1/README.md +249 -0
  9. pyfastcd-1.3.1/SECURITY.md +13 -0
  10. pyfastcd-1.3.1/assets/fastCD.png +0 -0
  11. pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/assessment.md +19 -0
  12. pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/complex-measured.c +319 -0
  13. pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/kernel-binary-check.json +12 -0
  14. pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/results.json +147227 -0
  15. pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/results.md +213 -0
  16. pyfastcd-1.3.1/benchmark-results/fields-pilot-20261103/upstream-build.json +76 -0
  17. pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/assessment.md +52 -0
  18. pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/commands.json +31 -0
  19. pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/dependency-build.json +18 -0
  20. pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/results.json +36882 -0
  21. pyfastcd-1.3.1/benchmark-results/flint-pilot-20261104/results.md +83 -0
  22. pyfastcd-1.3.1/benchmark-results/paper-results.json +17597 -0
  23. pyfastcd-1.3.1/benchmark-results/paper-results.md +105 -0
  24. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/benchmark.log +241 -0
  25. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/build.log +21 -0
  26. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/commands.json +79 -0
  27. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/comparison.json +459 -0
  28. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/configure.log +9 -0
  29. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/corpus-manifest.json +162 -0
  30. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/ctest.log +13 -0
  31. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/environment.json +78 -0
  32. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/fastcd-build-Release.txt +32 -0
  33. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/operation-count-probe.cpp +67 -0
  34. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/operation-counts.json +184 -0
  35. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/results.json +17597 -0
  36. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/results.md +105 -0
  37. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/sha256.json +16 -0
  38. pyfastcd-1.3.1/benchmark-results/paper-v2-20261023/validation.json +72 -0
  39. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/README.md +100 -0
  40. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/auto-assessment.json +646 -0
  41. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/benchmark.log +242 -0
  42. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/build.log +21 -0
  43. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/commands.json +75 -0
  44. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/comparison-previous-leaf.json +459 -0
  45. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/comparison.json +460 -0
  46. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/configure.log +9 -0
  47. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/corpus-manifest.json +162 -0
  48. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/ctest.log +13 -0
  49. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/environment.json +88 -0
  50. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/fastcd-build-Release.txt +32 -0
  51. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-cutoff16-ctest.log +107 -0
  52. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-cutoff4-ctest.log +107 -0
  53. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-default-ctest.log +123 -0
  54. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-no-simd-ctest.log +107 -0
  55. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/local-sanitized-ctest.log +107 -0
  56. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/operation-count-comparison.json +513 -0
  57. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/operation-counts.json +192 -0
  58. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/results.json +17597 -0
  59. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/results.md +105 -0
  60. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/sha256.json +26 -0
  61. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/source.patch +7591 -0
  62. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/timing-start.txt +1 -0
  63. pyfastcd-1.3.1/benchmark-results/paper-v2-octonion243-20261023/validation.json +80 -0
  64. pyfastcd-1.3.1/benchmark-results/stability-20261107/PLOTS.md +34 -0
  65. pyfastcd-1.3.1/benchmark-results/stability-20261107/README.md +107 -0
  66. pyfastcd-1.3.1/benchmark-results/stability-20261107/SHA256SUMS +99 -0
  67. pyfastcd-1.3.1/benchmark-results/stability-20261107/accuracy-summary.csv +1369 -0
  68. pyfastcd-1.3.1/benchmark-results/stability-20261107/accuracy-tables.md +113 -0
  69. pyfastcd-1.3.1/benchmark-results/stability-20261107/agreement.json +52 -0
  70. pyfastcd-1.3.1/benchmark-results/stability-20261107/block-size-summary.csv +11 -0
  71. pyfastcd-1.3.1/benchmark-results/stability-20261107/block-size-tables.md +14 -0
  72. pyfastcd-1.3.1/benchmark-results/stability-20261107/builds.json +195 -0
  73. pyfastcd-1.3.1/benchmark-results/stability-20261107/cc-accuracy-summary.json +5051 -0
  74. pyfastcd-1.3.1/benchmark-results/stability-20261107/cc-speed-summary.csv +73 -0
  75. pyfastcd-1.3.1/benchmark-results/stability-20261107/cc-speed-tables.md +28 -0
  76. pyfastcd-1.3.1/benchmark-results/stability-20261107/key-figures.json +1310 -0
  77. pyfastcd-1.3.1/benchmark-results/stability-20261107/plot-data.csv +145 -0
  78. pyfastcd-1.3.1/benchmark-results/stability-20261107/plot-data.json +19100 -0
  79. pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-complex.pdf +0 -0
  80. pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-complex.png +0 -0
  81. pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-complex.svg +1318 -0
  82. pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-real.pdf +0 -0
  83. pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-real.png +0 -0
  84. pyfastcd-1.3.1/benchmark-results/stability-20261107/relative-error-real.svg +1460 -0
  85. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-batch.pdf +0 -0
  86. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-batch.png +0 -0
  87. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-batch.svg +1682 -0
  88. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-single.pdf +0 -0
  89. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-single.png +0 -0
  90. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-complex-single.svg +1602 -0
  91. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-batch.pdf +0 -0
  92. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-batch.png +0 -0
  93. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-batch.svg +1851 -0
  94. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-single.pdf +0 -0
  95. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-single.png +0 -0
  96. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-real-single.svg +1743 -0
  97. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-summary.csv +29 -0
  98. pyfastcd-1.3.1/benchmark-results/stability-20261107/speed-tables.md +32 -0
  99. pyfastcd-1.3.1/benchmark-results/stability-20261107/study.json +704 -0
  100. pyfastcd-1.3.1/benchmark-results/stability-20261107/ties.json +1749 -0
  101. pyfastcd-1.3.1/benchmark-results/t440-20261019/README.md +94 -0
  102. pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-benchmark.log +393 -0
  103. pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-build/fastcd-build-Release.txt +31 -0
  104. pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-build.log +18 -0
  105. pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-configure.log +9 -0
  106. pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline-ctest.log +11 -0
  107. pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline.json +25617 -0
  108. pyfastcd-1.3.1/benchmark-results/t440-20261019/baseline.md +93 -0
  109. pyfastcd-1.3.1/benchmark-results/t440-20261019/documentation-audit.json +38 -0
  110. pyfastcd-1.3.1/benchmark-results/t440-20261019/environment.json +15 -0
  111. pyfastcd-1.3.1/benchmark-results/t440-20261019/local-build-ctest.log +123 -0
  112. pyfastcd-1.3.1/benchmark-results/t440-20261019/local-cutoff16-ctest.log +107 -0
  113. pyfastcd-1.3.1/benchmark-results/t440-20261019/local-cutoff4-ctest.log +107 -0
  114. pyfastcd-1.3.1/benchmark-results/t440-20261019/local-no-simd-ctest.log +107 -0
  115. pyfastcd-1.3.1/benchmark-results/t440-20261019/local-sanitized-ctest.log +107 -0
  116. pyfastcd-1.3.1/benchmark-results/t440-20261019/operation-counts.json +160 -0
  117. pyfastcd-1.3.1/benchmark-results/t440-20261019/operation-counts.log +160 -0
  118. pyfastcd-1.3.1/benchmark-results/t440-20261019/pilot16.json +1952 -0
  119. pyfastcd-1.3.1/benchmark-results/t440-20261019/pilot16.md +51 -0
  120. pyfastcd-1.3.1/benchmark-results/t440-20261019/summary.json +738 -0
  121. pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-benchmark.log +385 -0
  122. pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-build/fastcd-build-Release.txt +32 -0
  123. pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-build.log +21 -0
  124. pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-configure.log +9 -0
  125. pyfastcd-1.3.1/benchmark-results/t440-20261019/updated-ctest.log +13 -0
  126. pyfastcd-1.3.1/benchmark-results/t440-20261019/updated.json +25617 -0
  127. pyfastcd-1.3.1/benchmark-results/t440-20261019/updated.md +93 -0
  128. pyfastcd-1.3.1/benchmark-results/t440-20261019/validation.json +117 -0
  129. pyfastcd-1.3.1/benchmark-results/t440-20261104/README.md +87 -0
  130. pyfastcd-1.3.1/benchmark-results/t440-20261104/domains.json +99285 -0
  131. pyfastcd-1.3.1/benchmark-results/t440-20261104/domains.md +213 -0
  132. pyfastcd-1.3.1/benchmark-results/t440-20261104/flint.json +80998 -0
  133. pyfastcd-1.3.1/benchmark-results/t440-20261104/flint.md +155 -0
  134. pyfastcd-1.3.1/benchmark-results/t440-20261104/real.json +17597 -0
  135. pyfastcd-1.3.1/benchmark-results/t440-20261104/real.md +105 -0
  136. pyfastcd-1.3.1/benchmark-results/t440-20261109/README.md +119 -0
  137. pyfastcd-1.3.1/benchmark-results/t440-20261109/domains.json +108985 -0
  138. pyfastcd-1.3.1/benchmark-results/t440-20261109/domains.md +213 -0
  139. pyfastcd-1.3.1/benchmark-results/t440-20261109/flint.json +87334 -0
  140. pyfastcd-1.3.1/benchmark-results/t440-20261109/flint.md +155 -0
  141. pyfastcd-1.3.1/benchmark-results/t440-20261109/host-load.log +5948 -0
  142. pyfastcd-1.3.1/benchmark-results/t440-20261109/real.json +17597 -0
  143. pyfastcd-1.3.1/benchmark-results/t440-20261109/real.md +105 -0
  144. pyfastcd-1.3.1/benchmarks/benchmark.c +622 -0
  145. pyfastcd-1.3.1/benchmarks/benchmark.py +669 -0
  146. pyfastcd-1.3.1/benchmarks/domains.c +459 -0
  147. pyfastcd-1.3.1/benchmarks/domains.py +303 -0
  148. pyfastcd-1.3.1/benchmarks/flint.c +530 -0
  149. pyfastcd-1.3.1/benchmarks/flint.py +382 -0
  150. pyfastcd-1.3.1/benchmarks/flint_schedule.h +106 -0
  151. pyfastcd-1.3.1/benchmarks/protocols.py +221 -0
  152. pyfastcd-1.3.1/benchmarks/run_dedicated.sh +88 -0
  153. pyfastcd-1.3.1/benchmarks/stability.py +530 -0
  154. pyfastcd-1.3.1/benchmarks/stability_agreement.py +87 -0
  155. pyfastcd-1.3.1/benchmarks/stability_archive.py +388 -0
  156. pyfastcd-1.3.1/benchmarks/stability_block_size.py +157 -0
  157. pyfastcd-1.3.1/benchmarks/stability_cc_accuracy.py +137 -0
  158. pyfastcd-1.3.1/benchmarks/stability_cc_performance.py +147 -0
  159. pyfastcd-1.3.1/benchmarks/stability_plots.py +401 -0
  160. pyfastcd-1.3.1/benchmarks/stability_report.py +133 -0
  161. pyfastcd-1.3.1/benchmarks/stability_speed.py +138 -0
  162. pyfastcd-1.3.1/benchmarks/stability_speed_report.py +76 -0
  163. pyfastcd-1.3.1/benchmarks/stability_study.py +402 -0
  164. pyfastcd-1.3.1/benchmarks/stability_ties.py +86 -0
  165. pyfastcd-1.3.1/benchmarks/stability_timing.py +143 -0
  166. pyfastcd-1.3.1/benchmarks/stack_offset.h +41 -0
  167. pyfastcd-1.3.1/benchmarks/test_benchmark.py +166 -0
  168. pyfastcd-1.3.1/benchmarks/test_domains_benchmark.py +99 -0
  169. pyfastcd-1.3.1/benchmarks/test_flint_benchmark.py +245 -0
  170. pyfastcd-1.3.1/benchmarks/test_stability.py +68 -0
  171. pyfastcd-1.3.1/benchmarks/test_stability_archives.py +128 -0
  172. pyfastcd-1.3.1/benchmarks/test_stability_plots.py +109 -0
  173. pyfastcd-1.3.1/benchmarks/test_stability_tools.py +194 -0
  174. pyfastcd-1.3.1/cmake/fastcdConfig.cmake.in +5 -0
  175. pyfastcd-1.3.1/docs/benchmark.md +413 -0
  176. pyfastcd-1.3.1/docs/c-api.md +859 -0
  177. pyfastcd-1.3.1/docs/mathematics.md +680 -0
  178. pyfastcd-1.3.1/docs/python-api.md +729 -0
  179. pyfastcd-1.3.1/docs/quasilinear-supplement-fastCD.pdf +0 -0
  180. pyfastcd-1.3.1/docs/quasilinear-supplement-fastCD.tex +1188 -0
  181. pyfastcd-1.3.1/docs/quickstart-c.md +331 -0
  182. pyfastcd-1.3.1/docs/quickstart-python.md +153 -0
  183. pyfastcd-1.3.1/docs/stability.md +489 -0
  184. pyfastcd-1.3.1/include/fastcd/arithmetic.h +46 -0
  185. pyfastcd-1.3.1/include/fastcd/complex.h +62 -0
  186. pyfastcd-1.3.1/include/fastcd/fastcd.h +330 -0
  187. pyfastcd-1.3.1/include/fastcd/finite.h +245 -0
  188. pyfastcd-1.3.1/pyproject.toml +151 -0
  189. pyfastcd-1.3.1/python/src/pyfastcd/__init__.py +59 -0
  190. pyfastcd-1.3.1/python/src/pyfastcd/__init__.pyi +9 -0
  191. pyfastcd-1.3.1/python/src/pyfastcd/_algebra.py +1037 -0
  192. pyfastcd-1.3.1/python/src/pyfastcd/_algebra.pyi +207 -0
  193. pyfastcd-1.3.1/python/src/pyfastcd/_array.py +1687 -0
  194. pyfastcd-1.3.1/python/src/pyfastcd/_array.pyi +231 -0
  195. pyfastcd-1.3.1/python/src/pyfastcd/_core.c +4184 -0
  196. pyfastcd-1.3.1/python/src/pyfastcd/_core.pyi +230 -0
  197. pyfastcd-1.3.1/python/src/pyfastcd/_domains.py +881 -0
  198. pyfastcd-1.3.1/python/src/pyfastcd/_domains_core.c +524 -0
  199. pyfastcd-1.3.1/python/src/pyfastcd/_domains_core.pyi +18 -0
  200. pyfastcd-1.3.1/python/src/pyfastcd/_field.py +287 -0
  201. pyfastcd-1.3.1/python/src/pyfastcd/_field.pyi +55 -0
  202. pyfastcd-1.3.1/python/src/pyfastcd/_operators.py +146 -0
  203. pyfastcd-1.3.1/python/src/pyfastcd/_typing.py +32 -0
  204. pyfastcd-1.3.1/python/src/pyfastcd/_validation.py +69 -0
  205. pyfastcd-1.3.1/python/src/pyfastcd/py.typed +1 -0
  206. pyfastcd-1.3.1/python/tests/data/v1.1.0-real-pickles.json +158 -0
  207. pyfastcd-1.3.1/python/tests/reference_cd.py +175 -0
  208. pyfastcd-1.3.1/python/tests/test_domain_regressions.py +151 -0
  209. pyfastcd-1.3.1/python/tests/test_domains.py +511 -0
  210. pyfastcd-1.3.1/python/tests/test_pyfastcd.py +2842 -0
  211. pyfastcd-1.3.1/python/tests/typing_domains.py +51 -0
  212. pyfastcd-1.3.1/src/arithmetic.c +7 -0
  213. pyfastcd-1.3.1/src/balanced_sum.h +224 -0
  214. pyfastcd-1.3.1/src/cariow_cariowa.c +320 -0
  215. pyfastcd-1.3.1/src/cariow_cariowa_impl.h +258 -0
  216. pyfastcd-1.3.1/src/complex.c +456 -0
  217. pyfastcd-1.3.1/src/direct.c +126 -0
  218. pyfastcd-1.3.1/src/direct_impl.h +67 -0
  219. pyfastcd-1.3.1/src/fastcd.c +1230 -0
  220. pyfastcd-1.3.1/src/fastcd_internal.h +74 -0
  221. pyfastcd-1.3.1/src/finite/direct_instance.h +65 -0
  222. pyfastcd-1.3.1/src/finite/direct_value.h +123 -0
  223. pyfastcd-1.3.1/src/finite/field.c +227 -0
  224. pyfastcd-1.3.1/src/finite/field_internal.h +41 -0
  225. pyfastcd-1.3.1/src/finite/finite.c +141 -0
  226. pyfastcd-1.3.1/src/finite/finite_backend.c +484 -0
  227. pyfastcd-1.3.1/src/finite/finite_backend.h +139 -0
  228. pyfastcd-1.3.1/src/finite/finite_instance.h +78 -0
  229. pyfastcd-1.3.1/src/finite/finite_maps.h +33 -0
  230. pyfastcd-1.3.1/src/finite/finite_prime.c +43 -0
  231. pyfastcd-1.3.1/src/finite/finite_value.h +221 -0
  232. pyfastcd-1.3.1/src/finite/generated/field_products.h +1814 -0
  233. pyfastcd-1.3.1/src/finite/generated/finite_byte.c +4548 -0
  234. pyfastcd-1.3.1/src/finite/generated/finite_maps.c +2054 -0
  235. pyfastcd-1.3.1/src/finite/generated/finite_medium_bar.c +8066 -0
  236. pyfastcd-1.3.1/src/finite/generated/finite_medium_mont.c +8140 -0
  237. pyfastcd-1.3.1/src/finite/generated/finite_mont_16.c +6401 -0
  238. pyfastcd-1.3.1/src/finite/generated/finite_mont_4.c +3320 -0
  239. pyfastcd-1.3.1/src/finite/generated/finite_mont_8.c +3859 -0
  240. pyfastcd-1.3.1/src/finite/generated/finite_short_16.c +162 -0
  241. pyfastcd-1.3.1/src/finite/generated/finite_short_32.c +2497 -0
  242. pyfastcd-1.3.1/src/finite/generated/finite_short_8.c +157 -0
  243. pyfastcd-1.3.1/src/finite/generated/finite_shuffle_16.c +329 -0
  244. pyfastcd-1.3.1/src/finite/generated/finite_shuffle_32.c +3187 -0
  245. pyfastcd-1.3.1/src/finite/generated/finite_shuffle_8.c +311 -0
  246. pyfastcd-1.3.1/src/finite/generated/finite_ternary_16.c +3561 -0
  247. pyfastcd-1.3.1/src/finite/generated/finite_ternary_32.c +2002 -0
  248. pyfastcd-1.3.1/src/finite/generated/finite_ternary_64.c +1686 -0
  249. pyfastcd-1.3.1/src/finite/internal.h +27 -0
  250. pyfastcd-1.3.1/src/finite/operations.c +417 -0
  251. pyfastcd-1.3.1/src/finite/plan.c +100 -0
  252. pyfastcd-1.3.1/src/finite/schedule_impl.h +259 -0
  253. pyfastcd-1.3.1/src/generated/cariow_cariowa_kernels.h +7614 -0
  254. pyfastcd-1.3.1/src/generated/cariow_cariowa_masks.h +7755 -0
  255. pyfastcd-1.3.1/src/generated/direct_kernels.h +2769 -0
  256. pyfastcd-1.3.1/src/generated/quasilinear_kernels.h +4984 -0
  257. pyfastcd-1.3.1/src/pair.h +60 -0
  258. pyfastcd-1.3.1/src/quasilinear.c +165 -0
  259. pyfastcd-1.3.1/src/quasilinear_impl.h +375 -0
  260. pyfastcd-1.3.1/src/quasilinear_simd.h +365 -0
  261. pyfastcd-1.3.1/tests/reference_cd.c +163 -0
  262. pyfastcd-1.3.1/tests/reference_cd.h +35 -0
  263. pyfastcd-1.3.1/tests/test_domain_public_api.c +48 -0
  264. pyfastcd-1.3.1/tests/test_domains.c +363 -0
  265. pyfastcd-1.3.1/tests/test_fastcd.c +3772 -0
  266. pyfastcd-1.3.1/tests/test_field_reduce.c +30 -0
  267. pyfastcd-1.3.1/tests/test_finite_direct.c +74 -0
  268. pyfastcd-1.3.1/tests/test_public_api.c +52 -0
  269. pyfastcd-1.3.1/tests/test_quasilinear_leaf.c +51 -0
  270. pyfastcd-1.3.1/tests/test_stability.c +316 -0
  271. pyfastcd-1.3.1/tools/check_cariow_counts.py +179 -0
  272. pyfastcd-1.3.1/tools/check_quasilinear_counts.py +140 -0
  273. pyfastcd-1.3.1/tools/check_stability_archives.py +193 -0
  274. pyfastcd-1.3.1/tools/check_v110_compat.py +261 -0
  275. pyfastcd-1.3.1/tools/finite/c_format.py +42 -0
  276. pyfastcd-1.3.1/tools/finite/finite_coordinate_projection.py +80 -0
  277. pyfastcd-1.3.1/tools/finite/finite_direct.py +336 -0
  278. pyfastcd-1.3.1/tools/finite/finite_prepare_linear.h +98 -0
  279. pyfastcd-1.3.1/tools/finite/finite_prepare_small.h +57 -0
  280. pyfastcd-1.3.1/tools/finite/finite_ternary_io.h +57 -0
  281. pyfastcd-1.3.1/tools/finite/finite_transpose.py +65 -0
  282. pyfastcd-1.3.1/tools/finite/finite_value_schedule.h +216 -0
  283. pyfastcd-1.3.1/tools/finite/finite_vector_packing.py +64 -0
  284. pyfastcd-1.3.1/tools/finite/generate_fields.py +44 -0
  285. pyfastcd-1.3.1/tools/finite/generate_finite_backends.py +373 -0
  286. pyfastcd-1.3.1/tools/finite/generate_finite_byte.py +307 -0
  287. pyfastcd-1.3.1/tools/finite/generate_finite_differences.py +234 -0
  288. pyfastcd-1.3.1/tools/finite/generate_finite_maps.py +265 -0
  289. pyfastcd-1.3.1/tools/finite/generate_finite_medium.py +238 -0
  290. pyfastcd-1.3.1/tools/finite/generate_finite_multipoint.py +223 -0
  291. pyfastcd-1.3.1/tools/finite/generate_finite_prime_simd.py +266 -0
  292. pyfastcd-1.3.1/tools/finite/generate_finite_short.py +161 -0
  293. pyfastcd-1.3.1/tools/finite/generate_finite_short_prime.py +48 -0
  294. pyfastcd-1.3.1/tools/finite/generate_finite_shuffle.py +307 -0
  295. pyfastcd-1.3.1/tools/finite/generate_finite_simd.py +269 -0
  296. pyfastcd-1.3.1/tools/finite/generate_finite_slice_vector.py +236 -0
  297. pyfastcd-1.3.1/tools/finite/generate_finite_slice_wide.py +249 -0
  298. pyfastcd-1.3.1/tools/finite/generate_finite_small_multipoint.py +118 -0
  299. pyfastcd-1.3.1/tools/finite/generate_finite_ternary.py +229 -0
  300. 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"