kymora 0.7.0__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 (296) hide show
  1. kymora-0.7.0/.github/CODEOWNERS +2 -0
  2. kymora-0.7.0/.github/ISSUE_TEMPLATE/bug_report.yml +50 -0
  3. kymora-0.7.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  4. kymora-0.7.0/.github/ISSUE_TEMPLATE/feature_request.yml +44 -0
  5. kymora-0.7.0/.github/PULL_REQUEST_TEMPLATE.md +18 -0
  6. kymora-0.7.0/.github/actions/setup-venv/action.yml +25 -0
  7. kymora-0.7.0/.github/dependabot.yml +21 -0
  8. kymora-0.7.0/.github/workflows/benchmark.yml +47 -0
  9. kymora-0.7.0/.github/workflows/ci.yml +115 -0
  10. kymora-0.7.0/.github/workflows/docs.yml +43 -0
  11. kymora-0.7.0/.github/workflows/release.yml +156 -0
  12. kymora-0.7.0/.gitignore +16 -0
  13. kymora-0.7.0/CHANGELOG.md +254 -0
  14. kymora-0.7.0/CITATION.cff +25 -0
  15. kymora-0.7.0/CLAIMS.md +45 -0
  16. kymora-0.7.0/CLAUDE.md +67 -0
  17. kymora-0.7.0/CODE_OF_CONDUCT.md +129 -0
  18. kymora-0.7.0/CONTRIBUTING.md +143 -0
  19. kymora-0.7.0/Cargo.lock +370 -0
  20. kymora-0.7.0/Cargo.toml +22 -0
  21. kymora-0.7.0/Dockerfile +34 -0
  22. kymora-0.7.0/LICENSE +21 -0
  23. kymora-0.7.0/Makefile +28 -0
  24. kymora-0.7.0/PKG-INFO +297 -0
  25. kymora-0.7.0/README.md +256 -0
  26. kymora-0.7.0/SECURITY.md +32 -0
  27. kymora-0.7.0/arch.md +532 -0
  28. kymora-0.7.0/benchmarks/LINUX_16VCPU_PLAN.md +89 -0
  29. kymora-0.7.0/benchmarks/STATE.md +185 -0
  30. kymora-0.7.0/benchmarks/__init__.py +1 -0
  31. kymora-0.7.0/benchmarks/adapters/antropy_.md +11 -0
  32. kymora-0.7.0/benchmarks/adapters/antropy_.py +106 -0
  33. kymora-0.7.0/benchmarks/adapters/base.py +41 -0
  34. kymora-0.7.0/benchmarks/adapters/catch22_.md +13 -0
  35. kymora-0.7.0/benchmarks/adapters/catch22_.py +72 -0
  36. kymora-0.7.0/benchmarks/adapters/kymora.md +16 -0
  37. kymora-0.7.0/benchmarks/adapters/kymora.py +97 -0
  38. kymora-0.7.0/benchmarks/adapters/numba_baseline.md +18 -0
  39. kymora-0.7.0/benchmarks/adapters/numba_baseline.py +459 -0
  40. kymora-0.7.0/benchmarks/adapters/numpy_baseline.md +15 -0
  41. kymora-0.7.0/benchmarks/adapters/numpy_baseline.py +231 -0
  42. kymora-0.7.0/benchmarks/adapters/sktime_.md +12 -0
  43. kymora-0.7.0/benchmarks/adapters/sktime_.py +92 -0
  44. kymora-0.7.0/benchmarks/adapters/tsfel_.md +11 -0
  45. kymora-0.7.0/benchmarks/adapters/tsfel_.py +95 -0
  46. kymora-0.7.0/benchmarks/adapters/tsflex_.md +11 -0
  47. kymora-0.7.0/benchmarks/adapters/tsflex_.py +93 -0
  48. kymora-0.7.0/benchmarks/adapters/tsfresh_.md +16 -0
  49. kymora-0.7.0/benchmarks/adapters/tsfresh_.py +105 -0
  50. kymora-0.7.0/benchmarks/agreement/AGREEMENT_REPORT.md +131 -0
  51. kymora-0.7.0/benchmarks/agreement/agreement_matrix.json +20256 -0
  52. kymora-0.7.0/benchmarks/agreement/feature_map.json +459 -0
  53. kymora-0.7.0/benchmarks/baseline/baseline.json +91 -0
  54. kymora-0.7.0/benchmarks/bench_ablation.py +111 -0
  55. kymora-0.7.0/benchmarks/bench_libraries.py +347 -0
  56. kymora-0.7.0/benchmarks/bench_matrix.py +313 -0
  57. kymora-0.7.0/benchmarks/bench_ucr_downstream.py +316 -0
  58. kymora-0.7.0/benchmarks/datasets/generators.py +266 -0
  59. kymora-0.7.0/benchmarks/datasets/manifest.json +202 -0
  60. kymora-0.7.0/benchmarks/datasets/real.py +166 -0
  61. kymora-0.7.0/benchmarks/harness/env.py +276 -0
  62. kymora-0.7.0/benchmarks/harness/runner.py +387 -0
  63. kymora-0.7.0/benchmarks/harness/schema.py +79 -0
  64. kymora-0.7.0/benchmarks/harness/stats.py +118 -0
  65. kymora-0.7.0/benchmarks/report/REPORT.md +32 -0
  66. kymora-0.7.0/benchmarks/report/charts/smoke_runtime.svg +31 -0
  67. kymora-0.7.0/benchmarks/report/make_report.py +241 -0
  68. kymora-0.7.0/benchmarks/report/results.json +1266 -0
  69. kymora-0.7.0/benchmarks/reproduce.py +40 -0
  70. kymora-0.7.0/benchmarks/requirements-antropy.txt +4 -0
  71. kymora-0.7.0/benchmarks/requirements-catch22.txt +3 -0
  72. kymora-0.7.0/benchmarks/requirements-kymora.txt +4 -0
  73. kymora-0.7.0/benchmarks/requirements-numba.txt +4 -0
  74. kymora-0.7.0/benchmarks/requirements-numpy.txt +3 -0
  75. kymora-0.7.0/benchmarks/requirements-sktime.txt +7 -0
  76. kymora-0.7.0/benchmarks/requirements-tsfel.txt +5 -0
  77. kymora-0.7.0/benchmarks/requirements-tsflex.txt +5 -0
  78. kymora-0.7.0/benchmarks/requirements-tsfresh.txt +5 -0
  79. kymora-0.7.0/benchmarks/results/2026-10-04_Aamod/env.json +509 -0
  80. kymora-0.7.0/benchmarks/results/2026-10-04_Aamod/smoke.jsonl +10 -0
  81. kymora-0.7.0/benchmarks/results/2026-10-04_reproduce_readme/env.json +523 -0
  82. kymora-0.7.0/benchmarks/results/2026-10-04_reproduce_readme/readme_reproduce.jsonl +4 -0
  83. kymora-0.7.0/benchmarks/results/B_032_R1.json +1 -0
  84. kymora-0.7.0/benchmarks/results/B_032_R2.json +1 -0
  85. kymora-0.7.0/benchmarks/results/B_040_R1/env.json +529 -0
  86. kymora-0.7.0/benchmarks/results/B_040_R1/readme_reproduce.jsonl +4 -0
  87. kymora-0.7.0/benchmarks/results/B_040_R2/env.json +529 -0
  88. kymora-0.7.0/benchmarks/results/B_040_R2/readme_reproduce.jsonl +4 -0
  89. kymora-0.7.0/benchmarks/results/B_HEAD_R1/env.json +529 -0
  90. kymora-0.7.0/benchmarks/results/B_HEAD_R1/readme_reproduce.jsonl +4 -0
  91. kymora-0.7.0/benchmarks/results/B_HEAD_R2/env.json +529 -0
  92. kymora-0.7.0/benchmarks/results/B_HEAD_R2/readme_reproduce.jsonl +4 -0
  93. kymora-0.7.0/benchmarks/results/B_HEAD_probe.json +1 -0
  94. kymora-0.7.0/benchmarks/results/B_PRE_R1c/env.json +530 -0
  95. kymora-0.7.0/benchmarks/results/B_PRE_R1c/readme_reproduce.jsonl +4 -0
  96. kymora-0.7.0/benchmarks/results/B_PRE_R2/env.json +530 -0
  97. kymora-0.7.0/benchmarks/results/B_PRE_R2/readme_reproduce.jsonl +4 -0
  98. kymora-0.7.0/benchmarks/results/B_probe_PA2_v032.json +1 -0
  99. kymora-0.7.0/benchmarks/results/B_probe_PA2_v040.json +1 -0
  100. kymora-0.7.0/benchmarks/results/B_probe_PA2_vHEAD.json +1 -0
  101. kymora-0.7.0/benchmarks/results/B_probe_PA2_vPRE.json +1 -0
  102. kymora-0.7.0/benchmarks/results/B_probe_PA_v040.json +1 -0
  103. kymora-0.7.0/benchmarks/results/B_probe_PA_vHEAD.json +1 -0
  104. kymora-0.7.0/benchmarks/results/B_probe_PA_vPRE.json +1 -0
  105. kymora-0.7.0/benchmarks/results/B_probe_PB_v032.json +1 -0
  106. kymora-0.7.0/benchmarks/results/B_probe_PB_v040.json +1 -0
  107. kymora-0.7.0/benchmarks/results/B_probe_PB_vHEAD.json +1 -0
  108. kymora-0.7.0/benchmarks/results/B_probe_PB_vPRE.json +1 -0
  109. kymora-0.7.0/benchmarks/results/F1_H1/env.json +529 -0
  110. kymora-0.7.0/benchmarks/results/F1_H1/readme_reproduce.jsonl +4 -0
  111. kymora-0.7.0/benchmarks/results/F1_H2/env.json +529 -0
  112. kymora-0.7.0/benchmarks/results/F1_H2/readme_reproduce.jsonl +4 -0
  113. kymora-0.7.0/benchmarks/results/F1_P1/env.json +529 -0
  114. kymora-0.7.0/benchmarks/results/F1_P1/readme_reproduce.jsonl +4 -0
  115. kymora-0.7.0/benchmarks/results/F1_P2/env.json +529 -0
  116. kymora-0.7.0/benchmarks/results/F1_P2/readme_reproduce.jsonl +4 -0
  117. kymora-0.7.0/benchmarks/results/F1_REPORT.md +149 -0
  118. kymora-0.7.0/benchmarks/results/F1_SUMMARY.json +1 -0
  119. kymora-0.7.0/benchmarks/results/LOSS_LEDGER.md +147 -0
  120. kymora-0.7.0/benchmarks/results/ablation_report.md +23 -0
  121. kymora-0.7.0/benchmarks/results/bench_matrix.json +171 -0
  122. kymora-0.7.0/benchmarks/results/bench_matrix.md +40 -0
  123. kymora-0.7.0/benchmarks/results/downstream_report.md +18 -0
  124. kymora-0.7.0/benchmarks/results/latest.json +53 -0
  125. kymora-0.7.0/benchmarks/results/latest.md +15 -0
  126. kymora-0.7.0/benchmarks/setup_venvs.py +59 -0
  127. kymora-0.7.0/benchmarks/smoke.py +89 -0
  128. kymora-0.7.0/benchmarks/suites/agreement.py +842 -0
  129. kymora-0.7.0/benchmarks/suites/l1_root_cause.py +661 -0
  130. kymora-0.7.0/benchmarks/suites/latency.py +182 -0
  131. kymora-0.7.0/benchmarks/suites/latency_overhead.py +168 -0
  132. kymora-0.7.0/benchmarks/suites/make_b3_report.py +356 -0
  133. kymora-0.7.0/benchmarks/suites/make_competitor_report.py +244 -0
  134. kymora-0.7.0/benchmarks/suites/memory.py +301 -0
  135. kymora-0.7.0/benchmarks/suites/reproduce_readme.py +196 -0
  136. kymora-0.7.0/benchmarks/suites/scaling.py +203 -0
  137. kymora-0.7.0/benchmarks/suites/sliding.py +336 -0
  138. kymora-0.7.0/benchmarks/suites/startup.py +385 -0
  139. kymora-0.7.0/benchmarks/suites/streaming.py +304 -0
  140. kymora-0.7.0/benchmarks/suites/throughput.py +410 -0
  141. kymora-0.7.0/benchmarks/suites/throughput_competitors.py +219 -0
  142. kymora-0.7.0/benchmarks/zenith_baseline.md +48 -0
  143. kymora-0.7.0/docs/REFACTOR_REPORT.md +82 -0
  144. kymora-0.7.0/docs/REFACTOR_STATE.md +195 -0
  145. kymora-0.7.0/docs/RENAME_RELEASE_CHECKLIST.md +46 -0
  146. kymora-0.7.0/docs/ROADMAP.md +58 -0
  147. kymora-0.7.0/docs/api.md +324 -0
  148. kymora-0.7.0/docs/arch_audit.md +89 -0
  149. kymora-0.7.0/docs/benchmarks.md +86 -0
  150. kymora-0.7.0/docs/contributing.md +61 -0
  151. kymora-0.7.0/docs/faq.md +31 -0
  152. kymora-0.7.0/docs/features.md +128 -0
  153. kymora-0.7.0/docs/index.md +65 -0
  154. kymora-0.7.0/docs/install.md +44 -0
  155. kymora-0.7.0/docs/migrating.md +121 -0
  156. kymora-0.7.0/docs/naming/NAME_CHECK.md +63 -0
  157. kymora-0.7.0/docs/nan-policy.md +76 -0
  158. kymora-0.7.0/docs/parity_matrix.md +861 -0
  159. kymora-0.7.0/docs/quickstart.md +114 -0
  160. kymora-0.7.0/docs/redundancy_report.md +22 -0
  161. kymora-0.7.0/docs/refactor/baseline/SUMMARY.md +41 -0
  162. kymora-0.7.0/docs/refactor/baseline/api_surface.txt +2 -0
  163. kymora-0.7.0/docs/refactor/baseline/bench_smoke.txt +14 -0
  164. kymora-0.7.0/docs/refactor/baseline/cargo_clippy.txt +11 -0
  165. kymora-0.7.0/docs/refactor/baseline/cargo_test.txt +36 -0
  166. kymora-0.7.0/docs/refactor/baseline/feature_names.txt +4 -0
  167. kymora-0.7.0/docs/refactor/baseline/file_classification.txt +251 -0
  168. kymora-0.7.0/docs/refactor/baseline/golden_hashes.txt +3 -0
  169. kymora-0.7.0/docs/refactor/baseline/ls_files.txt +240 -0
  170. kymora-0.7.0/docs/refactor/baseline/mkdocs_build.txt +34 -0
  171. kymora-0.7.0/docs/refactor/baseline/mypy.txt +16 -0
  172. kymora-0.7.0/docs/refactor/baseline/name_inventory_raw.txt +218 -0
  173. kymora-0.7.0/docs/refactor/baseline/pytest.txt +3 -0
  174. kymora-0.7.0/docs/refactor/baseline/website_build.txt +85 -0
  175. kymora-0.7.0/docs/refactor/deleted_files.md +65 -0
  176. kymora-0.7.0/docs/refactor/name_inventory.md +58 -0
  177. kymora-0.7.0/docs/refactor/naming.md +67 -0
  178. kymora-0.7.0/docs/refactor/phase1_VERIFICATION.md +59 -0
  179. kymora-0.7.0/docs/refactor/phase3_VERIFICATION.md +56 -0
  180. kymora-0.7.0/docs/refactor/phase4_VERIFICATION.md +50 -0
  181. kymora-0.7.0/docs/refactor/phase5_VERIFICATION.md +82 -0
  182. kymora-0.7.0/docs/refactor/phase6_VERIFICATION.md +76 -0
  183. kymora-0.7.0/docs/refactor/phase7_VERIFICATION.md +70 -0
  184. kymora-0.7.0/docs/refactor/phase8_VERIFICATION.md +59 -0
  185. kymora-0.7.0/docs/refactor/rename-kymora/INVENTORY.md +99 -0
  186. kymora-0.7.0/docs/refactor/rename-kymora/NAME_CHECK_RAW.json +155 -0
  187. kymora-0.7.0/docs/refactor/rename-kymora/deleted_files.md +65 -0
  188. kymora-0.7.0/docs/refactor/rename-kymora/file_classification.txt +323 -0
  189. kymora-0.7.0/docs/refactor/rename-kymora/name_occurrences.txt +237 -0
  190. kymora-0.7.0/docs/refactor/rename-kymora/phase0_VERIFICATION.md +63 -0
  191. kymora-0.7.0/docs/refactor/rename-kymora/phase3_VERIFICATION.md +50 -0
  192. kymora-0.7.0/docs/refactor/rename-kymora/phase4_VERIFICATION.md +99 -0
  193. kymora-0.7.0/docs/refactor/rename-kymora/phase5_VERIFICATION.md +79 -0
  194. kymora-0.7.0/docs/timeline_progress.md +128 -0
  195. kymora-0.7.0/docs/validation.md +79 -0
  196. kymora-0.7.0/landing/.gitignore +7 -0
  197. kymora-0.7.0/landing/index.html +54 -0
  198. kymora-0.7.0/landing/package-lock.json +2797 -0
  199. kymora-0.7.0/landing/package.json +28 -0
  200. kymora-0.7.0/landing/postcss.config.js +6 -0
  201. kymora-0.7.0/landing/public/figures/architecture.png +0 -0
  202. kymora-0.7.0/landing/public/figures/memory.png +0 -0
  203. kymora-0.7.0/landing/public/figures/scaling.png +0 -0
  204. kymora-0.7.0/landing/public/figures/speedup.png +0 -0
  205. kymora-0.7.0/landing/public/figures/throughput.png +0 -0
  206. kymora-0.7.0/landing/public/robots.txt +4 -0
  207. kymora-0.7.0/landing/public/sitemap.xml +8 -0
  208. kymora-0.7.0/landing/src/App.tsx +100 -0
  209. kymora-0.7.0/landing/src/benchmarks.ts +98 -0
  210. kymora-0.7.0/landing/src/components/Benchmarks.tsx +217 -0
  211. kymora-0.7.0/landing/src/components/CTA.tsx +95 -0
  212. kymora-0.7.0/landing/src/components/Features.tsx +146 -0
  213. kymora-0.7.0/landing/src/components/Footer.tsx +172 -0
  214. kymora-0.7.0/landing/src/components/Hero.tsx +624 -0
  215. kymora-0.7.0/landing/src/components/HowItWorks.tsx +222 -0
  216. kymora-0.7.0/landing/src/components/Nav.tsx +184 -0
  217. kymora-0.7.0/landing/src/components/Rails.tsx +216 -0
  218. kymora-0.7.0/landing/src/components/RandomHighlight.tsx +372 -0
  219. kymora-0.7.0/landing/src/components/RowType.tsx +840 -0
  220. kymora-0.7.0/landing/src/index.css +974 -0
  221. kymora-0.7.0/landing/src/main.tsx +10 -0
  222. kymora-0.7.0/landing/tailwind.config.js +53 -0
  223. kymora-0.7.0/landing/tsconfig.json +20 -0
  224. kymora-0.7.0/landing/tsconfig.node.json +10 -0
  225. kymora-0.7.0/landing/vercel.json +15 -0
  226. kymora-0.7.0/landing/vite.config.ts +7 -0
  227. kymora-0.7.0/mkdocs.yml +60 -0
  228. kymora-0.7.0/paper/README.md +46 -0
  229. kymora-0.7.0/paper/figures/architecture.pdf +0 -0
  230. kymora-0.7.0/paper/figures/architecture.png +0 -0
  231. kymora-0.7.0/paper/figures/memory.pdf +0 -0
  232. kymora-0.7.0/paper/figures/memory.png +0 -0
  233. kymora-0.7.0/paper/figures/scaling.pdf +0 -0
  234. kymora-0.7.0/paper/figures/scaling.png +0 -0
  235. kymora-0.7.0/paper/figures/speedup.pdf +0 -0
  236. kymora-0.7.0/paper/figures/speedup.png +0 -0
  237. kymora-0.7.0/paper/figures/throughput.pdf +0 -0
  238. kymora-0.7.0/paper/figures/throughput.png +0 -0
  239. kymora-0.7.0/paper/generate_figures.py +410 -0
  240. kymora-0.7.0/paper/main.tex +648 -0
  241. kymora-0.7.0/paper/paper.bib +74 -0
  242. kymora-0.7.0/paper/paper.md +76 -0
  243. kymora-0.7.0/paper/references.bib +170 -0
  244. kymora-0.7.0/patent/patent_disclosure.md +143 -0
  245. kymora-0.7.0/pyproject.toml +46 -0
  246. kymora-0.7.0/python/kymora/__init__.py +160 -0
  247. kymora-0.7.0/python/kymora/_core.pyi +180 -0
  248. kymora-0.7.0/python/kymora/py.typed +1 -0
  249. kymora-0.7.0/python/kymora/select.py +294 -0
  250. kymora-0.7.0/python/kymora/tune.py +112 -0
  251. kymora-0.7.0/reproduce.sh +26 -0
  252. kymora-0.7.0/src/error.rs +101 -0
  253. kymora-0.7.0/src/exec.rs +167 -0
  254. kymora-0.7.0/src/extract.rs +101 -0
  255. kymora-0.7.0/src/features/entropy.rs +78 -0
  256. kymora-0.7.0/src/features/mod.rs +233 -0
  257. kymora-0.7.0/src/features/multistream.rs +200 -0
  258. kymora-0.7.0/src/features/spectral.rs +121 -0
  259. kymora-0.7.0/src/features/stats.rs +174 -0
  260. kymora-0.7.0/src/features/streaming.rs +370 -0
  261. kymora-0.7.0/src/features/temporal.rs +313 -0
  262. kymora-0.7.0/src/features/views.rs +169 -0
  263. kymora-0.7.0/src/ffi.rs +851 -0
  264. kymora-0.7.0/src/intermediates.rs +313 -0
  265. kymora-0.7.0/src/kernels/fft.rs +260 -0
  266. kymora-0.7.0/src/kernels/mod.rs +6 -0
  267. kymora-0.7.0/src/kernels/perm.rs +55 -0
  268. kymora-0.7.0/src/kernels/reduce.rs +819 -0
  269. kymora-0.7.0/src/kernels/sort.rs +510 -0
  270. kymora-0.7.0/src/lib.rs +30 -0
  271. kymora-0.7.0/src/pipeline.rs +250 -0
  272. kymora-0.7.0/src/plan.rs +160 -0
  273. kymora-0.7.0/src/registry.rs +1134 -0
  274. kymora-0.7.0/src/scratch.rs +70 -0
  275. kymora-0.7.0/tests/fixtures/tsfresh_777_names.json +779 -0
  276. kymora-0.7.0/tests/golden/core33_names.json +35 -0
  277. kymora-0.7.0/tests/golden/core33_output.json +359 -0
  278. kymora-0.7.0/tests/property/test_properties.py +261 -0
  279. kymora-0.7.0/tests/reference/test_validation.py +174 -0
  280. kymora-0.7.0/tests/test_features.py +180 -0
  281. kymora-0.7.0/tests/test_invariants.py +131 -0
  282. kymora-0.7.0/tests/test_nan_policy.py +217 -0
  283. kymora-0.7.0/tests/test_phase2.py +69 -0
  284. kymora-0.7.0/tests/test_phase3.py +154 -0
  285. kymora-0.7.0/tests/test_phase4.py +203 -0
  286. kymora-0.7.0/tests/test_phase5.py +178 -0
  287. kymora-0.7.0/tests/test_python_api.py +172 -0
  288. kymora-0.7.0/tests/test_streaming.py +58 -0
  289. kymora-0.7.0/tests/test_zenith.py +136 -0
  290. kymora-0.7.0/tools/check_snippets.py +117 -0
  291. kymora-0.7.0/tools/feature_redundancy_analysis.py +183 -0
  292. kymora-0.7.0/tools/name_check.py +172 -0
  293. kymora-0.7.0/tools/rename_to_kymora.py +222 -0
  294. kymora-0.7.0/tools/run_phase0_baseline.py +111 -0
  295. kymora-0.7.0/tools/validation_report.py +152 -0
  296. kymora-0.7.0/vercel.json +19 -0
@@ -0,0 +1,2 @@
1
+ # Default owners for everything in this repository.
2
+ * @Aamodx6
@@ -0,0 +1,50 @@
1
+ name: Bug report
2
+ description: Something produces wrong values, crashes, or fails to install
3
+ title: "[Bug]: "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for the report. For a wrong-value report, the most useful thing
10
+ you can include is what you expected and how you computed it — a
11
+ numpy/scipy expression turns the report straight into a test case.
12
+ - type: input
13
+ id: version
14
+ attributes:
15
+ label: kymora version
16
+ description: "`python -c \"import kymora; print(kymora.__version__)\"`"
17
+ placeholder: "0.5.0"
18
+ validations:
19
+ required: true
20
+ - type: textarea
21
+ id: env
22
+ attributes:
23
+ label: Environment
24
+ description: OS, Python version, install method, architecture
25
+ placeholder: |
26
+ Windows 11, Python 3.14.6, pip install kymora, x86_64
27
+ validations:
28
+ required: true
29
+ - type: textarea
30
+ id: what-happened
31
+ attributes:
32
+ label: What happened
33
+ description: Actual behaviour, error message / stack trace
34
+ validations:
35
+ required: true
36
+ - type: textarea
37
+ id: expected
38
+ attributes:
39
+ label: What you expected
40
+ description: Expected values and how you computed them (numpy/scipy expression is ideal)
41
+ validations:
42
+ required: true
43
+ - type: textarea
44
+ id: repro
45
+ attributes:
46
+ label: Minimal reproduction
47
+ description: Smallest runnable snippet that shows the problem
48
+ render: python
49
+ validations:
50
+ required: true
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: true
2
+ links:
3
+ - name: Security report (private)
4
+ url: https://github.com/Aamodx6/Kymora/security/advisories/new
5
+ about: Vulnerability reports — never file these as public issues
6
+ - name: Documentation
7
+ url: https://aamodx6.github.io/Kymora/
8
+ about: Install, quickstart, API reference
@@ -0,0 +1,44 @@
1
+ name: Feature proposal
2
+ description: Propose a change before writing code (required for new features)
3
+ title: "[Proposal]: "
4
+ labels: ["proposal"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ The 33-feature catalog is **closed on purpose** — the low-redundancy set
10
+ *is* the product differentiation. PRs that add a feature without an
11
+ accepted proposal may be closed on scope grounds regardless of quality
12
+ (see CONTRIBUTING.md → "Adding a feature"). Refactors, docs, and
13
+ platform fixes do not need a proposal — open a regular issue or PR.
14
+ - type: textarea
15
+ id: problem
16
+ attributes:
17
+ label: Problem
18
+ description: What are you trying to do that the library cannot express today?
19
+ validations:
20
+ required: true
21
+ - type: textarea
22
+ id: proposal
23
+ attributes:
24
+ label: Proposed change
25
+ description: What should be added/changed, and the public API shape if any
26
+ validations:
27
+ required: true
28
+ - type: textarea
29
+ id: redundancy
30
+ attributes:
31
+ label: Redundancy assessment
32
+ description: >
33
+ For feature proposals: how does this differ from the existing 33
34
+ (correlation with the closest existing feature, or why it measures
35
+ something none of them do)?
36
+ - type: checkboxes
37
+ id: checks
38
+ attributes:
39
+ label: Checklist
40
+ options:
41
+ - label: I searched existing issues for duplicates
42
+ required: true
43
+ - label: I read CONTRIBUTING.md (architecture rules, feature policy)
44
+ required: true
@@ -0,0 +1,18 @@
1
+ ## What & why
2
+
3
+ <!-- Explain *why*, not just what — the diff shows the what. -->
4
+
5
+ ## Checklist
6
+
7
+ - [ ] One logical change per PR (a feature and a refactor is two PRs)
8
+ - [ ] New behaviour has a test that fails without the change
9
+ - [ ] `pytest tests/ -q` passes (after rebuilding: `maturin develop --release`)
10
+ - [ ] `cargo test --no-default-features`, `cargo fmt --all -- --check`,
11
+ `cargo clippy --no-default-features --all-targets -- -D warnings` pass
12
+ - [ ] `python tools/validation_report.py` passes (feature behaviour unchanged)
13
+ - [ ] Version impact noted below per the CONTRIBUTING versioning table
14
+ (feature order/length is public API)
15
+
16
+ ## Version impact
17
+
18
+ <!-- patch / minor / major / none — see CONTRIBUTING.md → Versioning policy -->
@@ -0,0 +1,25 @@
1
+ name: 'Set up virtualenv'
2
+ description: 'Create .venv, put its bin dir on PATH, export VIRTUAL_ENV (maturin requires a venv)'
3
+
4
+ runs:
5
+ using: composite
6
+ steps:
7
+ - name: Create a virtualenv (maturin requires one)
8
+ shell: bash
9
+ run: |
10
+ python -m venv .venv
11
+ # Native tools (maturin) cannot read the MSYS-style path bash reports
12
+ # on Windows, so emit a Windows path there via `pwd -W`.
13
+ if [ -d .venv/bin ]; then
14
+ root="$PWD"; bin="$root/.venv/bin"
15
+ else
16
+ root="$(pwd -W)"; bin="$root/.venv/Scripts"
17
+ fi
18
+ echo "$bin" >> "$GITHUB_PATH"
19
+ echo "VIRTUAL_ENV=$root/.venv" >> "$GITHUB_ENV"
20
+ - name: Confirm the venv is the active interpreter
21
+ shell: bash
22
+ run: |
23
+ # A wrong path here would silently install into the runner's Python and
24
+ # test a different build than the one maturin produced.
25
+ python -c "import sys; assert sys.prefix.replace(chr(92), '/').endswith('/.venv'), sys.prefix"
@@ -0,0 +1,21 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: github-actions
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ groups:
8
+ actions:
9
+ patterns: ["*"]
10
+
11
+ - package-ecosystem: cargo
12
+ directory: /
13
+ schedule:
14
+ interval: weekly
15
+ groups:
16
+ cargo:
17
+ patterns: ["*"]
18
+
19
+ # pip/PyPI is intentionally absent: dependencies live in pyproject.toml
20
+ # behind the maturin backend; Renovate/dependabot pip support for that
21
+ # layout is limited and the runtime dep set is numpy-only.
@@ -0,0 +1,47 @@
1
+ name: Benchmark
2
+
3
+ # Manual / weekly, never gating. Publishes numbers a stranger can reproduce on a
4
+ # known runner instead of one laptop.
5
+ on:
6
+ workflow_dispatch:
7
+ inputs:
8
+ n_series:
9
+ description: "Number of series"
10
+ default: "1000"
11
+ n_steps:
12
+ description: "Steps per series"
13
+ default: "500"
14
+ schedule:
15
+ - cron: "37 4 * * 1"
16
+
17
+ jobs:
18
+ bench:
19
+ runs-on: ubuntu-latest
20
+ timeout-minutes: 90
21
+ steps:
22
+ - uses: actions/checkout@v7
23
+ - uses: actions/setup-python@v7
24
+ with:
25
+ python-version: "3.12"
26
+ - uses: dtolnay/rust-toolchain@stable
27
+ - uses: Swatinem/rust-cache@v2
28
+ - uses: ./.github/actions/setup-venv
29
+ - run: |
30
+ python -m pip install --upgrade pip maturin
31
+ python -m pip install -e ".[bench]"
32
+ maturin develop --release
33
+ - name: Record runner spec
34
+ run: |
35
+ echo "cores: $(nproc)" | tee -a "$GITHUB_STEP_SUMMARY"
36
+ python -c "import platform;print('python:', platform.python_version())" | tee -a "$GITHUB_STEP_SUMMARY"
37
+ - run: |
38
+ python benchmarks/bench_libraries.py \
39
+ --n-series ${{ github.event.inputs.n_series || '1000' }} \
40
+ --n-steps ${{ github.event.inputs.n_steps || '500' }} \
41
+ --json benchmarks/results/latest.json \
42
+ --markdown benchmarks/results/latest.md
43
+ - run: cat benchmarks/results/latest.md >> "$GITHUB_STEP_SUMMARY"
44
+ - uses: actions/upload-artifact@v7
45
+ with:
46
+ name: benchmark-results
47
+ path: benchmarks/results/
@@ -0,0 +1,115 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ concurrency:
10
+ group: ci-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ env:
14
+ CARGO_TERM_COLOR: always
15
+
16
+ jobs:
17
+ rust:
18
+ name: rust (fmt, clippy, unit tests)
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v7
22
+ - uses: dtolnay/rust-toolchain@stable
23
+ with:
24
+ components: rustfmt, clippy
25
+ - uses: Swatinem/rust-cache@v2
26
+ - run: cargo fmt --all -- --check
27
+ # The pyo3 extension-module feature omits libpython at link time, which
28
+ # breaks `cargo test` binaries; test the pure-Rust core without it.
29
+ - run: cargo clippy --no-default-features --all-targets -- -D warnings
30
+ - run: cargo test --no-default-features
31
+
32
+ test:
33
+ name: py${{ matrix.python }} on ${{ matrix.os }}
34
+ runs-on: ${{ matrix.os }}
35
+ strategy:
36
+ fail-fast: false
37
+ matrix:
38
+ os: [ubuntu-latest, macos-latest, windows-latest]
39
+ python: ["3.11", "3.12", "3.13"]
40
+ steps:
41
+ - uses: actions/checkout@v7
42
+ - uses: actions/setup-python@v7
43
+ with:
44
+ python-version: ${{ matrix.python }}
45
+ - uses: dtolnay/rust-toolchain@stable
46
+ - uses: Swatinem/rust-cache@v2
47
+ with:
48
+ key: ${{ matrix.os }}-${{ matrix.python }}
49
+ - uses: ./.github/actions/setup-venv
50
+ - name: Install package and test deps
51
+ run: |
52
+ python -m pip install --upgrade pip
53
+ python -m pip install maturin
54
+ python -m pip install -e ".[test]"
55
+ - name: Build extension in release mode
56
+ run: maturin develop --release
57
+ - name: Run tests
58
+ run: python -m pytest tests/ -q
59
+
60
+ validation-report:
61
+ name: reference-validation report
62
+ runs-on: ubuntu-latest
63
+ steps:
64
+ - uses: actions/checkout@v7
65
+ - uses: actions/setup-python@v7
66
+ with:
67
+ python-version: "3.12"
68
+ - uses: dtolnay/rust-toolchain@stable
69
+ - uses: Swatinem/rust-cache@v2
70
+ - uses: ./.github/actions/setup-venv
71
+ - run: |
72
+ python -m pip install --upgrade pip maturin
73
+ python -m pip install -e ".[test]"
74
+ maturin develop --release
75
+ - run: python tools/validation_report.py --out validation-report.md
76
+ - name: Publish report to the job summary
77
+ run: cat validation-report.md >> "$GITHUB_STEP_SUMMARY"
78
+ - uses: actions/upload-artifact@v7
79
+ with:
80
+ name: validation-report
81
+ path: validation-report.md
82
+
83
+ typecheck:
84
+ name: mypy against the type stubs
85
+ runs-on: ubuntu-latest
86
+ steps:
87
+ - uses: actions/checkout@v7
88
+ - uses: actions/setup-python@v7
89
+ with:
90
+ python-version: "3.12"
91
+ - uses: dtolnay/rust-toolchain@stable
92
+ - uses: Swatinem/rust-cache@v2
93
+ - uses: ./.github/actions/setup-venv
94
+ - run: |
95
+ python -m pip install --upgrade pip maturin mypy pandas-stubs
96
+ python -m pip install -e ".[pandas]"
97
+ maturin develop --release
98
+ - run: mypy python/kymora
99
+
100
+ snippets:
101
+ name: README + docs snippets execute
102
+ runs-on: ubuntu-latest
103
+ steps:
104
+ - uses: actions/checkout@v4
105
+ - uses: actions/setup-python@v5
106
+ with:
107
+ python-version: "3.12"
108
+ - uses: dtolnay/rust-toolchain@stable
109
+ - uses: Swatinem/rust-cache@v2
110
+ - uses: ./.github/actions/setup-venv
111
+ - run: |
112
+ python -m pip install --upgrade pip maturin scikit-learn
113
+ python -m pip install -e ".[test]"
114
+ maturin develop --release
115
+ - run: python tools/check_snippets.py
@@ -0,0 +1,43 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths: ["docs/**", "mkdocs.yml", ".github/workflows/docs.yml", "README.md"]
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+ pages: write
12
+ id-token: write
13
+
14
+ concurrency:
15
+ group: pages
16
+ cancel-in-progress: false
17
+
18
+ jobs:
19
+ build:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v7
23
+ - uses: actions/setup-python@v7
24
+ with:
25
+ python-version: "3.12"
26
+ # Docs need only mkdocs itself — the primary path used to install the
27
+ # project (maturin backend, no Rust here) with --no-deps, which could
28
+ # never bring mkdocs in; this installs exactly the pyproject docs floors.
29
+ - run: python -m pip install --upgrade pip && python -m pip install "mkdocs>=1.6" "mkdocs-material>=9.5"
30
+ - run: mkdocs build --strict
31
+ - uses: actions/upload-pages-artifact@v5
32
+ with:
33
+ path: site
34
+
35
+ deploy:
36
+ needs: build
37
+ runs-on: ubuntu-latest
38
+ environment:
39
+ name: github-pages
40
+ url: ${{ steps.deployment.outputs.page_url }}
41
+ steps:
42
+ - id: deployment
43
+ uses: actions/deploy-pages@v5
@@ -0,0 +1,156 @@
1
+ name: Release
2
+
3
+ # Wheels are built on every push to main (so a broken build surfaces before a
4
+ # tag), and published to PyPI only when a GitHub Release is published.
5
+ on:
6
+ push:
7
+ branches: [main]
8
+ tags: ["v*"]
9
+ release:
10
+ types: [published]
11
+ workflow_dispatch:
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ linux:
18
+ name: wheel ${{ matrix.target }} (manylinux)
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ target: [x86_64, aarch64]
24
+ steps:
25
+ - uses: actions/checkout@v7
26
+ - uses: actions/setup-python@v7
27
+ with:
28
+ python-version: "3.12"
29
+ - name: Build wheel
30
+ uses: PyO3/maturin-action@v1
31
+ with:
32
+ target: ${{ matrix.target }}
33
+ args: --release --out dist
34
+ manylinux: "2014"
35
+ # aarch64 needs emulation/cross; x86_64 builds natively.
36
+ sccache: "true"
37
+ - uses: actions/upload-artifact@v7
38
+ with:
39
+ name: wheels-linux-${{ matrix.target }}
40
+ path: dist
41
+
42
+ macos:
43
+ name: wheel ${{ matrix.target }} (macOS)
44
+ runs-on: macos-latest
45
+ strategy:
46
+ fail-fast: false
47
+ matrix:
48
+ target: [x86_64, aarch64]
49
+ steps:
50
+ - uses: actions/checkout@v7
51
+ - uses: actions/setup-python@v7
52
+ with:
53
+ python-version: "3.12"
54
+ - uses: PyO3/maturin-action@v1
55
+ with:
56
+ target: ${{ matrix.target }}
57
+ args: --release --out dist
58
+ sccache: "true"
59
+ - uses: actions/upload-artifact@v7
60
+ with:
61
+ name: wheels-macos-${{ matrix.target }}
62
+ path: dist
63
+
64
+ windows:
65
+ name: wheel x64 (Windows)
66
+ runs-on: windows-latest
67
+ steps:
68
+ - uses: actions/checkout@v7
69
+ - uses: actions/setup-python@v7
70
+ with:
71
+ python-version: "3.12"
72
+ architecture: x64
73
+ - uses: PyO3/maturin-action@v1
74
+ with:
75
+ target: x64
76
+ args: --release --out dist
77
+ sccache: "true"
78
+ - uses: actions/upload-artifact@v7
79
+ with:
80
+ name: wheels-windows-x64
81
+ path: dist
82
+
83
+ sdist:
84
+ name: sdist
85
+ runs-on: ubuntu-latest
86
+ steps:
87
+ - uses: actions/checkout@v7
88
+ - uses: PyO3/maturin-action@v1
89
+ with:
90
+ command: sdist
91
+ args: --out dist
92
+ - uses: actions/upload-artifact@v7
93
+ with:
94
+ name: wheels-sdist
95
+ path: dist
96
+
97
+ smoke-test:
98
+ name: install wheel and import (${{ matrix.os }}, py${{ matrix.python }})
99
+ needs: [linux, macos, windows]
100
+ runs-on: ${{ matrix.os }}
101
+ strategy:
102
+ fail-fast: false
103
+ matrix:
104
+ include:
105
+ - {os: ubuntu-latest, python: "3.13", artifact: wheels-linux-x86_64}
106
+ - {os: macos-latest, python: "3.13", artifact: wheels-macos-aarch64}
107
+ - {os: windows-latest, python: "3.13", artifact: wheels-windows-x64}
108
+ steps:
109
+ - uses: actions/checkout@v7
110
+ - uses: actions/setup-python@v7
111
+ with:
112
+ python-version: ${{ matrix.python }}
113
+ - uses: actions/download-artifact@v8
114
+ with:
115
+ name: ${{ matrix.artifact }}
116
+ path: dist
117
+ # Installs from the built wheel only — no Rust toolchain on this runner,
118
+ # so a missing/incompatible wheel fails here instead of at a user's pip.
119
+ - name: Install from wheel
120
+ shell: bash
121
+ run: |
122
+ # Dependencies come from PyPI; kymora itself must come from the
123
+ # freshly built wheel, so install it with --no-index --no-deps.
124
+ python -m pip install --upgrade pip
125
+ python -m pip install "numpy>=1.24"
126
+ python -m pip install --no-index --no-deps --find-links dist kymora
127
+ - name: Import and extract outside the source tree
128
+ shell: bash
129
+ run: |
130
+ cd "$(mktemp -d)"
131
+ python -c "
132
+ import numpy as np, kymora
133
+ X = np.random.default_rng(0).standard_normal((64, 128))
134
+ f = kymora.extract_features(X)
135
+ assert f.shape == (64, len(kymora.feature_names())), f.shape
136
+ assert np.isfinite(f).all()
137
+ print('ok', kymora.__version__, f.shape)
138
+ "
139
+
140
+ publish:
141
+ name: publish to PyPI
142
+ if: github.event_name == 'release' && github.event.action == 'published'
143
+ needs: [linux, macos, windows, sdist, smoke-test]
144
+ runs-on: ubuntu-latest
145
+ environment: pypi
146
+ permissions:
147
+ # Trusted Publishing (OIDC) — no PyPI API token is stored in this repo.
148
+ id-token: write
149
+ steps:
150
+ - uses: actions/download-artifact@v8
151
+ with:
152
+ pattern: wheels-*
153
+ merge-multiple: true
154
+ path: dist
155
+ - run: ls -l dist
156
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,16 @@
1
+ /target
2
+ /.venv
3
+ __pycache__/
4
+ *.pyd
5
+ *.so
6
+ dist/
7
+ .pytest_cache/
8
+ *.pdb
9
+ .hypothesis/
10
+ site/
11
+ node_modules/
12
+ landing/dist/
13
+ .gstack/
14
+ benchmarks/.venvs/
15
+ benchmarks/datasets/cache/
16
+ .DS_Store