hmath-python 1.0.0__tar.gz → 1.0.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 (228) hide show
  1. hmath_python-1.0.1/.clang-format +4 -0
  2. hmath_python-1.0.1/.github/workflows/docs.yml +60 -0
  3. hmath_python-1.0.1/.github/workflows/publish-python.yml +81 -0
  4. hmath_python-1.0.1/.github/workflows/python-wheels.yml +73 -0
  5. hmath_python-1.0.1/.github/workflows/validate.yml +126 -0
  6. hmath_python-1.0.1/CHANGELOG.md +28 -0
  7. hmath_python-1.0.1/MANIFEST.in +15 -0
  8. {hmath_python-1.0.0 → hmath_python-1.0.1}/PKG-INFO +6 -3
  9. {hmath_python-1.0.0 → hmath_python-1.0.1}/README.md +4 -2
  10. hmath_python-1.0.1/ROADMAP.md +96 -0
  11. hmath_python-1.0.1/bench/Main.hs +244 -0
  12. hmath_python-1.0.1/bench/native.c +80 -0
  13. hmath_python-1.0.1/bindings/python/LICENSE +373 -0
  14. hmath_python-1.0.1/bindings/python/_hmath_native/__init__.py +23 -0
  15. hmath_python-1.0.1/bindings/python/_hmath_native/licenses/GHC-LICENSE +31 -0
  16. hmath_python-1.0.1/bindings/python/_hmath_native/licenses/GMP-COPYING.LESSERv3 +165 -0
  17. hmath_python-1.0.1/bindings/python/_hmath_native/licenses/GMP-COPYINGv3 +674 -0
  18. hmath_python-1.0.1/bindings/python/_hmath_native/licenses/LIBFFI-LICENSE +21 -0
  19. hmath_python-1.0.1/bindings/python/_hmath_native/licenses/NOTICE +14 -0
  20. {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath.py +4 -8
  21. {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_cffi.py +2 -2
  22. {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_python.egg-info/PKG-INFO +6 -3
  23. hmath_python-1.0.1/bindings/python/hmath_python.egg-info/SOURCES.txt +225 -0
  24. {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_python.egg-info/top_level.txt +1 -0
  25. hmath_python-1.0.1/bindings/python/test_bindings.py +92 -0
  26. hmath_python-1.0.1/bindings/wave/hmath.wave +152 -0
  27. hmath_python-1.0.1/bindings/wave/smoke.wave +87 -0
  28. hmath_python-1.0.1/cabal.project +5 -0
  29. hmath_python-1.0.1/cbits/backend.c +606 -0
  30. hmath_python-1.0.1/cbits/interchange_io.c +196 -0
  31. hmath_python-1.0.1/cbits/native.c +503 -0
  32. hmath_python-1.0.1/cbits/native_dlpack.c +183 -0
  33. hmath_python-1.0.1/cbits/native_internal.h +29 -0
  34. hmath_python-1.0.1/cbits/runtime.c +94 -0
  35. hmath_python-1.0.1/docs/contributing.md +38 -0
  36. hmath_python-1.0.1/docs/explanation/architecture.md +47 -0
  37. hmath_python-1.0.1/docs/explanation/releases.md +40 -0
  38. hmath_python-1.0.1/docs/getting-started/first-calculation.md +59 -0
  39. hmath_python-1.0.1/docs/getting-started/installation.md +56 -0
  40. hmath_python-1.0.1/docs/guides/build.md +48 -0
  41. hmath_python-1.0.1/docs/guides/c.md +47 -0
  42. hmath_python-1.0.1/docs/guides/numpy.md +46 -0
  43. hmath_python-1.0.1/docs/guides/troubleshooting.md +50 -0
  44. hmath_python-1.0.1/docs/guides/wave.md +39 -0
  45. hmath_python-1.0.1/docs/index.md +31 -0
  46. hmath_python-1.0.1/docs/linear-algebra.md +75 -0
  47. hmath_python-1.0.1/docs/reference/c.md +46 -0
  48. hmath_python-1.0.1/docs/reference/haskell.md +34 -0
  49. hmath_python-1.0.1/docs/reference/python.md +83 -0
  50. hmath_python-1.0.1/docs/reference/wave.md +40 -0
  51. hmath_python-1.0.1/examples/c/main.c +88 -0
  52. hmath_python-1.0.1/examples/haskell/Domains.hs +16 -0
  53. hmath_python-1.0.1/examples/haskell/Foundations.hs +41 -0
  54. hmath_python-1.0.1/examples/haskell/Main.hs +37 -0
  55. hmath_python-1.0.1/examples/haskell/Scientific.hs +21 -0
  56. hmath_python-1.0.1/examples/python/main.py +133 -0
  57. hmath_python-1.0.1/fourmolu.yaml +3 -0
  58. hmath_python-1.0.1/hmath.cabal +350 -0
  59. hmath_python-1.0.1/include/hmath.h +149 -0
  60. hmath_python-1.0.1/include/hmath_backend.h +30 -0
  61. hmath_python-1.0.1/include/hmath_dlpack.h +31 -0
  62. hmath_python-1.0.1/meson/cmake/HMathConfig.cmake.in +10 -0
  63. hmath_python-1.0.1/meson/cmake/HMathConfigVersion.cmake.in +13 -0
  64. hmath_python-1.0.1/meson/hmath.pc.in +9 -0
  65. hmath_python-1.0.1/meson-build.py +115 -0
  66. hmath_python-1.0.1/meson.build +252 -0
  67. hmath_python-1.0.1/meson_options.txt +11 -0
  68. hmath_python-1.0.1/mkdocs.yml +59 -0
  69. {hmath_python-1.0.0 → hmath_python-1.0.1}/pyproject.toml +7 -1
  70. hmath_python-1.0.1/requirements-docs.txt +2 -0
  71. hmath_python-1.0.1/setup.py +66 -0
  72. hmath_python-1.0.1/src/HMath/API/Algebra.hs +199 -0
  73. hmath_python-1.0.1/src/HMath/API/Buffer.hs +136 -0
  74. hmath_python-1.0.1/src/HMath/API/Convergence.hs +93 -0
  75. hmath_python-1.0.1/src/HMath/API/Shape.hs +130 -0
  76. hmath_python-1.0.1/src/HMath/API.hs +19 -0
  77. hmath_python-1.0.1/src/HMath/Algebra.hs +507 -0
  78. hmath_python-1.0.1/src/HMath/Algorithms.hs +352 -0
  79. hmath_python-1.0.1/src/HMath/Autodiff.hs +597 -0
  80. hmath_python-1.0.1/src/HMath/Backend.hs +674 -0
  81. hmath_python-1.0.1/src/HMath/Basic.hs +40 -0
  82. hmath_python-1.0.1/src/HMath/Calculus.hs +835 -0
  83. hmath_python-1.0.1/src/HMath/Combinatorics.hs +327 -0
  84. hmath_python-1.0.1/src/HMath/Complex.hs +190 -0
  85. hmath_python-1.0.1/src/HMath/Constants.hs +148 -0
  86. hmath_python-1.0.1/src/HMath/DataStructure.hs +455 -0
  87. hmath_python-1.0.1/src/HMath/DeepLearning/Core.hs +499 -0
  88. hmath_python-1.0.1/src/HMath/DeepLearning/Layers.hs +837 -0
  89. hmath_python-1.0.1/src/HMath/DeepLearning/Metrics.hs +163 -0
  90. hmath_python-1.0.1/src/HMath/DeepLearning/Precision.hs +202 -0
  91. hmath_python-1.0.1/src/HMath/DeepLearning.hs +16 -0
  92. hmath_python-1.0.1/src/HMath/Discrete.hs +283 -0
  93. hmath_python-1.0.1/src/HMath/Error.hs +53 -0
  94. hmath_python-1.0.1/src/HMath/Expression.hs +902 -0
  95. hmath_python-1.0.1/src/HMath/FFI.hs +83 -0
  96. hmath_python-1.0.1/src/HMath/Fourier.hs +492 -0
  97. hmath_python-1.0.1/src/HMath/Geometry/Collision.hs +166 -0
  98. hmath_python-1.0.1/src/HMath/Geometry/Internal.hs +191 -0
  99. hmath_python-1.0.1/src/HMath/Geometry/Polygon.hs +304 -0
  100. hmath_python-1.0.1/src/HMath/Geometry/Primitives.hs +592 -0
  101. hmath_python-1.0.1/src/HMath/Geometry/Spatial.hs +214 -0
  102. hmath_python-1.0.1/src/HMath/Geometry/Transform.hs +235 -0
  103. hmath_python-1.0.1/src/HMath/Geometry/Triangulation.hs +222 -0
  104. hmath_python-1.0.1/src/HMath/Geometry.hs +55 -0
  105. hmath_python-1.0.1/src/HMath/Graph/Analysis.hs +627 -0
  106. hmath_python-1.0.1/src/HMath/Graph/Core.hs +472 -0
  107. hmath_python-1.0.1/src/HMath/Graph/Flow.hs +315 -0
  108. hmath_python-1.0.1/src/HMath/Graph/Paths.hs +257 -0
  109. hmath_python-1.0.1/src/HMath/Graph.hs +17 -0
  110. hmath_python-1.0.1/src/HMath/Image/Color.hs +158 -0
  111. hmath_python-1.0.1/src/HMath/Image/Core.hs +176 -0
  112. hmath_python-1.0.1/src/HMath/Image/Filter.hs +255 -0
  113. hmath_python-1.0.1/src/HMath/Image/Histogram.hs +161 -0
  114. hmath_python-1.0.1/src/HMath/Image/Measure.hs +204 -0
  115. hmath_python-1.0.1/src/HMath/Image/Spatial.hs +198 -0
  116. hmath_python-1.0.1/src/HMath/Image.hs +30 -0
  117. hmath_python-1.0.1/src/HMath/Interchange/Array.hs +395 -0
  118. hmath_python-1.0.1/src/HMath/Interchange/Binary.hs +160 -0
  119. hmath_python-1.0.1/src/HMath/Interchange/Compression.hs +81 -0
  120. hmath_python-1.0.1/src/HMath/Interchange/IO.hs +240 -0
  121. hmath_python-1.0.1/src/HMath/Interchange/Numpy.hs +446 -0
  122. hmath_python-1.0.1/src/HMath/Interchange/Text.hs +390 -0
  123. hmath_python-1.0.1/src/HMath/Interchange.hs +25 -0
  124. hmath_python-1.0.1/src/HMath/Interpolation.hs +878 -0
  125. hmath_python-1.0.1/src/HMath/Linear.hs +69 -0
  126. hmath_python-1.0.1/src/HMath/MachineLearning/Clustering.hs +447 -0
  127. hmath_python-1.0.1/src/HMath/MachineLearning/Decomposition.hs +571 -0
  128. hmath_python-1.0.1/src/HMath/MachineLearning/Internal.hs +172 -0
  129. hmath_python-1.0.1/src/HMath/MachineLearning/Neighbors.hs +315 -0
  130. hmath_python-1.0.1/src/HMath/MachineLearning/Preprocessing.hs +314 -0
  131. hmath_python-1.0.1/src/HMath/MachineLearning/Regression.hs +642 -0
  132. hmath_python-1.0.1/src/HMath/MachineLearning.hs +26 -0
  133. hmath_python-1.0.1/src/HMath/Matrix/Advanced.hs +449 -0
  134. hmath_python-1.0.1/src/HMath/Matrix/Decomposition.hs +498 -0
  135. hmath_python-1.0.1/src/HMath/Matrix/Internal.hs +75 -0
  136. hmath_python-1.0.1/src/HMath/Matrix/Iterative.hs +787 -0
  137. hmath_python-1.0.1/src/HMath/Matrix/LAPACK.hs +571 -0
  138. hmath_python-1.0.1/src/HMath/Matrix/LU.hs +293 -0
  139. hmath_python-1.0.1/src/HMath/Matrix/QR.hs +139 -0
  140. hmath_python-1.0.1/src/HMath/Matrix.hs +270 -0
  141. hmath_python-1.0.1/src/HMath/NumberTheory.hs +720 -0
  142. hmath_python-1.0.1/src/HMath/Numeric.hs +673 -0
  143. hmath_python-1.0.1/src/HMath/ODE/Tableau.hs +139 -0
  144. hmath_python-1.0.1/src/HMath/ODE.hs +787 -0
  145. hmath_python-1.0.1/src/HMath/Optimization/Common.hs +257 -0
  146. hmath_python-1.0.1/src/HMath/Optimization/Constrained.hs +515 -0
  147. hmath_python-1.0.1/src/HMath/Optimization/FirstOrder.hs +262 -0
  148. hmath_python-1.0.1/src/HMath/Optimization/Global.hs +309 -0
  149. hmath_python-1.0.1/src/HMath/Optimization/Local.hs +457 -0
  150. hmath_python-1.0.1/src/HMath/Optimization.hs +18 -0
  151. hmath_python-1.0.1/src/HMath/PDE.hs +632 -0
  152. hmath_python-1.0.1/src/HMath/Polynomial.hs +798 -0
  153. hmath_python-1.0.1/src/HMath/Probability.hs +1046 -0
  154. hmath_python-1.0.1/src/HMath/Quaternion.hs +309 -0
  155. hmath_python-1.0.1/src/HMath/Random.hs +753 -0
  156. hmath_python-1.0.1/src/HMath/Root.hs +493 -0
  157. hmath_python-1.0.1/src/HMath/Rotation.hs +260 -0
  158. hmath_python-1.0.1/src/HMath/Scalar.hs +359 -0
  159. hmath_python-1.0.1/src/HMath/Signal/Internal.hs +68 -0
  160. hmath_python-1.0.1/src/HMath/Signal.hs +1135 -0
  161. hmath_python-1.0.1/src/HMath/Sparse/Spectral.hs +272 -0
  162. hmath_python-1.0.1/src/HMath/Sparse.hs +473 -0
  163. hmath_python-1.0.1/src/HMath/Special.hs +1179 -0
  164. hmath_python-1.0.1/src/HMath/Statistics/Advanced.hs +1001 -0
  165. hmath_python-1.0.1/src/HMath/Statistics.hs +34 -0
  166. hmath_python-1.0.1/src/HMath/Symbolic.hs +1178 -0
  167. hmath_python-1.0.1/src/HMath/Tensor/Mutable.hs +124 -0
  168. hmath_python-1.0.1/src/HMath/Tensor.hs +770 -0
  169. hmath_python-1.0.1/src/HMath/TimeSeries/Core.hs +285 -0
  170. hmath_python-1.0.1/src/HMath/TimeSeries/Diagnostics.hs +298 -0
  171. hmath_python-1.0.1/src/HMath/TimeSeries/Models.hs +497 -0
  172. hmath_python-1.0.1/src/HMath/TimeSeries.hs +14 -0
  173. hmath_python-1.0.1/src/HMath/Trigonometry.hs +310 -0
  174. hmath_python-1.0.1/src/HMath/Units.hs +324 -0
  175. hmath_python-1.0.1/src/HMath/Vector.hs +182 -0
  176. hmath_python-1.0.1/src/HMath.hs +23 -0
  177. hmath_python-1.0.1/test/AlgebraBatchSpec.hs +602 -0
  178. hmath_python-1.0.1/test/ApplicationBatchSpec.hs +894 -0
  179. hmath_python-1.0.1/test/BackendAPISpec.hs +429 -0
  180. hmath_python-1.0.1/test/DifferentiableBatchSpec.hs +1232 -0
  181. hmath_python-1.0.1/test/DiscreteBatchSpec.hs +778 -0
  182. hmath_python-1.0.1/test/ExpressionBatchSpec.hs +955 -0
  183. hmath_python-1.0.1/test/GeometryBatchSpec.hs +855 -0
  184. hmath_python-1.0.1/test/InterchangeSpec.hs +451 -0
  185. hmath_python-1.0.1/test/IterativeBatchSpec.hs +294 -0
  186. hmath_python-1.0.1/test/LUSpec.hs +445 -0
  187. hmath_python-1.0.1/test/LinearBatchSpec.hs +1146 -0
  188. hmath_python-1.0.1/test/LinearSpec.hs +73 -0
  189. hmath_python-1.0.1/test/MachineLearningBatchSpec.hs +483 -0
  190. hmath_python-1.0.1/test/Main.hs +110 -0
  191. hmath_python-1.0.1/test/MatrixSpec.hs +522 -0
  192. hmath_python-1.0.1/test/NumericalBatchSpec.hs +387 -0
  193. hmath_python-1.0.1/test/ProbabilityBatchSpec.hs +2077 -0
  194. hmath_python-1.0.1/test/Properties.hs +38 -0
  195. hmath_python-1.0.1/test/ScalarBatchSpec.hs +640 -0
  196. hmath_python-1.0.1/test/SignalBatchSpec.hs +1398 -0
  197. hmath_python-1.0.1/test/SparseSpectralSpec.hs +283 -0
  198. hmath_python-1.0.1/test/abi-symbols.txt +45 -0
  199. hmath_python-1.0.1/test/ffi_bad_results.c +64 -0
  200. hmath_python-1.0.1/test/ffi_failure_detection.py +66 -0
  201. hmath_python-1.0.1/test/ffi_lifecycle.py +192 -0
  202. hmath_python-1.0.1/test/fuzz_native.c +74 -0
  203. hmath_python-1.0.1/test/install/CMakeLists.txt +5 -0
  204. hmath_python-1.0.1/test/install/client.c +11 -0
  205. hmath_python-1.0.1/test/interchange_differential.py +316 -0
  206. hmath_python-1.0.1/test/interchange_driver.hs +262 -0
  207. hmath_python-1.0.1/test/interchange_native.c +72 -0
  208. hmath_python-1.0.1/test/native/abi_rejection.py +45 -0
  209. hmath_python-1.0.1/test/native/contracts.c +336 -0
  210. hmath_python-1.0.1/test/native/dlpack_numpy.py +89 -0
  211. hmath_python-1.0.1/test/native/header_c99.c +8 -0
  212. hmath_python-1.0.1/test/native/wrong_abi.c +8 -0
  213. hmath_python-1.0.1/tools/benchmark.py +361 -0
  214. hmath_python-1.0.1/tools/build_docs.py +42 -0
  215. hmath_python-1.0.1/tools/build_python_wheel.sh +43 -0
  216. hmath_python-1.0.1/tools/check_abi.py +37 -0
  217. hmath_python-1.0.1/tools/check_docs_examples.py +17 -0
  218. hmath_python-1.0.1/tools/check_install.py +122 -0
  219. hmath_python-1.0.1/tools/check_interchange.py +41 -0
  220. hmath_python-1.0.1/tools/check_python_wheel.py +41 -0
  221. hmath_python-1.0.1/tools/interchange_adapters.py +154 -0
  222. hmath_python-1.0.1/tools/run_fuzz.py +79 -0
  223. hmath_python-1.0.1/tools/run_wave.py +51 -0
  224. hmath_python-1.0.0/bindings/python/hmath_python.egg-info/SOURCES.txt +0 -10
  225. {hmath_python-1.0.0 → hmath_python-1.0.1}/LICENSE +0 -0
  226. {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_python.egg-info/dependency_links.txt +0 -0
  227. {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_python.egg-info/requires.txt +0 -0
  228. {hmath_python-1.0.0 → hmath_python-1.0.1}/setup.cfg +0 -0
@@ -0,0 +1,4 @@
1
+ BasedOnStyle: LLVM
2
+ IndentWidth: 4
3
+ ColumnLimit: 100
4
+ SortIncludes: CaseSensitive
@@ -0,0 +1,60 @@
1
+ # SPDX-License-Identifier: MPL-2.0
2
+ name: Documentation
3
+
4
+ on:
5
+ push:
6
+ branches: [master]
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ concurrency:
14
+ group: documentation-${{ github.event.pull_request.number || github.ref }}
15
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-24.04
20
+ steps:
21
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
22
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
23
+ with:
24
+ python-version: '3.12'
25
+ cache: pip
26
+ cache-dependency-path: requirements-docs.txt
27
+ - uses: haskell-actions/setup@7fd2bb5ca789761088fbc831406b2910e47e56f1 # v2
28
+ with:
29
+ ghc-version: '9.10.3'
30
+ cabal-version: '3.16.1.0'
31
+ - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
32
+ with:
33
+ path: build-docs/cabal
34
+ key: docs-haddock-${{ hashFiles('hmath.cabal', 'cabal.project', 'src/**', 'cbits/**') }}
35
+ restore-keys: docs-haddock-
36
+ - name: Build documentation and Haskell reference
37
+ run: |
38
+ python -m pip install -r requirements-docs.txt
39
+ python tools/build_docs.py
40
+ - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
41
+ with:
42
+ path: site
43
+
44
+ deploy:
45
+ if: github.repository == 'wavefnd/hmath' && github.ref == 'refs/heads/master' && github.event_name != 'pull_request'
46
+ needs: build
47
+ runs-on: ubuntu-24.04
48
+ concurrency:
49
+ group: documentation-pages
50
+ cancel-in-progress: false
51
+ permissions:
52
+ pages: write
53
+ id-token: write
54
+ environment:
55
+ name: github-pages
56
+ url: ${{ steps.deployment.outputs.page_url }}
57
+ steps:
58
+ - name: Deploy to GitHub Pages
59
+ id: deployment
60
+ uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4
@@ -0,0 +1,81 @@
1
+ # SPDX-License-Identifier: MPL-2.0
2
+ name: Publish Python and GitHub Release
3
+
4
+ on:
5
+ workflow_dispatch:
6
+ inputs:
7
+ index:
8
+ description: Package index
9
+ type: choice
10
+ options: [testpypi, pypi]
11
+ default: testpypi
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ concurrency:
17
+ group: publish-python-${{ inputs.index }}
18
+ cancel-in-progress: false
19
+
20
+ jobs:
21
+ build:
22
+ if: github.repository == 'wavefnd/hmath' && github.ref == 'refs/heads/master'
23
+ uses: ./.github/workflows/python-wheels.yml
24
+
25
+ publish:
26
+ needs: build
27
+ runs-on: ubuntu-24.04
28
+ environment:
29
+ name: ${{ inputs.index }}
30
+ permissions:
31
+ id-token: write
32
+ steps:
33
+ - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
34
+ with:
35
+ name: python-distributions
36
+ path: dist/
37
+ - name: Publish to TestPyPI
38
+ if: inputs.index == 'testpypi'
39
+ uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # release/v1
40
+ with:
41
+ repository-url: https://test.pypi.org/legacy/
42
+ - name: Publish to PyPI
43
+ if: inputs.index == 'pypi'
44
+ uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # release/v1
45
+
46
+ github-release:
47
+ if: inputs.index == 'pypi'
48
+ needs: [build, publish]
49
+ runs-on: ubuntu-24.04
50
+ permissions:
51
+ contents: write
52
+ steps:
53
+ - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
54
+ with:
55
+ name: python-distributions
56
+ path: dist/
57
+ - name: Create the versioned GitHub release
58
+ env:
59
+ GH_TOKEN: ${{ github.token }}
60
+ GH_REPO: ${{ github.repository }}
61
+ RELEASE_VERSION: ${{ needs.build.outputs.version }}
62
+ RELEASE_SHA: ${{ github.sha }}
63
+ run: |
64
+ tag="v$RELEASE_VERSION"
65
+ error_log="$RUNNER_TEMP/release-tag-error.log"
66
+ if ! existing="$(gh api "repos/$GH_REPO/commits/$tag" --jq .sha 2>"$error_log")"; then
67
+ if ! grep -Eq '\(HTTP (404|422)\)' "$error_log"; then
68
+ cat "$error_log" >&2
69
+ exit 1
70
+ fi
71
+ existing=""
72
+ fi
73
+ if [ -n "$existing" ] && [ "$existing" != "$RELEASE_SHA" ]; then
74
+ echo "Tag $tag points to another commit; refusing to publish mismatched artifacts."
75
+ exit 1
76
+ fi
77
+ gh release create "$tag" dist/* \
78
+ --target "$RELEASE_SHA" \
79
+ --title "HMath $RELEASE_VERSION" \
80
+ --generate-notes \
81
+ --latest
@@ -0,0 +1,73 @@
1
+ # SPDX-License-Identifier: MPL-2.0
2
+ name: Python wheels
3
+
4
+ on:
5
+ push:
6
+ branches: [master]
7
+ paths-ignore: ['docs/**', 'mkdocs.yml', 'requirements-docs.txt', 'tools/build_docs.py', 'README.md']
8
+ pull_request:
9
+ paths-ignore: ['docs/**', 'mkdocs.yml', 'requirements-docs.txt', 'tools/build_docs.py', 'README.md']
10
+ workflow_call:
11
+ outputs:
12
+ version:
13
+ description: Version read from the built package metadata
14
+ value: ${{ jobs.build.outputs.version }}
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ concurrency:
20
+ group: python-wheels-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
21
+ cancel-in-progress: ${{ github.event_name != 'workflow_dispatch' }}
22
+
23
+ jobs:
24
+ build:
25
+ runs-on: ubuntu-24.04
26
+ outputs:
27
+ version: ${{ steps.version.outputs.version }}
28
+ steps:
29
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
30
+ - name: Read package version
31
+ id: version
32
+ run: |
33
+ python - <<'PY'
34
+ import os, pathlib, tomllib
35
+ version = tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version']
36
+ with open(os.environ['GITHUB_OUTPUT'], 'a') as output:
37
+ print('version=' + version, file=output)
38
+ PY
39
+ - name: Build self-contained manylinux wheel and source distribution
40
+ run: |
41
+ docker run --rm --volume "$PWD:/io" \
42
+ quay.io/pypa/manylinux_2_28_x86_64@sha256:e0adf18521ad35192df733a6c62d35df7801957d24e0470238aacecfab2188a3 \
43
+ bash /io/tools/build_python_wheel.sh
44
+ python -m pip install twine
45
+ python -m twine check --strict dist/*
46
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
47
+ with:
48
+ name: python-distributions
49
+ path: dist/*
50
+ if-no-files-found: error
51
+
52
+ test:
53
+ needs: build
54
+ runs-on: ubuntu-24.04
55
+ strategy:
56
+ fail-fast: false
57
+ matrix:
58
+ python: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
59
+ container: python:${{ matrix.python }}-slim-bookworm
60
+ steps:
61
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
62
+ - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
63
+ with:
64
+ name: python-distributions
65
+ path: /tmp/hmath-distributions
66
+ - name: Verify installation without GHC or a system HMath library
67
+ run: |
68
+ python -m pip install /tmp/hmath-distributions/*.whl
69
+ cd "$RUNNER_TEMP"
70
+ python "$GITHUB_WORKSPACE/tools/check_python_wheel.py"
71
+ python -m pip install numpy cffi
72
+ python "$GITHUB_WORKSPACE/tools/check_python_wheel.py" "$GITHUB_WORKSPACE/bindings/python/test_bindings.py"
73
+ python "$GITHUB_WORKSPACE/tools/check_docs_examples.py"
@@ -0,0 +1,126 @@
1
+ # SPDX-License-Identifier: MPL-2.0
2
+ name: Validate
3
+
4
+ on:
5
+ push:
6
+ branches: [master]
7
+ paths-ignore: ['docs/**', 'mkdocs.yml', 'requirements-docs.txt', 'tools/build_docs.py', 'README.md']
8
+ pull_request:
9
+ paths-ignore: ['docs/**', 'mkdocs.yml', 'requirements-docs.txt', 'tools/build_docs.py', 'README.md']
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ concurrency:
16
+ group: validate-${{ github.event.pull_request.number || github.ref }}
17
+ cancel-in-progress: true
18
+
19
+ jobs:
20
+ linux:
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ ghc: ['9.6.7', '9.10.3']
25
+ buildtype: [debug, release]
26
+ runs-on: ubuntu-24.04
27
+ steps:
28
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
29
+ - uses: haskell-actions/setup@7fd2bb5ca789761088fbc831406b2910e47e56f1 # v2
30
+ id: haskell
31
+ with:
32
+ ghc-version: ${{ matrix.ghc }}
33
+ cabal-version: '3.16.1.0'
34
+ - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
35
+ with:
36
+ path: |
37
+ ~/.cabal/packages
38
+ ${{ steps.haskell.outputs.cabal-store }}
39
+ dist-newstyle
40
+ build-ci/cabal
41
+ build-interchange/cabal
42
+ key: cabal-${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.buildtype }}-${{ hashFiles('hmath.cabal', 'cabal.project', 'src/**', 'cbits/**', 'test/**', 'bench/**') }}
43
+ restore-keys: cabal-${{ runner.os }}-${{ matrix.ghc }}-${{ matrix.buildtype }}-
44
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
45
+ with:
46
+ python-version: '3.12'
47
+ cache: pip
48
+ cache-dependency-path: pyproject.toml
49
+ - name: Dependencies
50
+ run: |
51
+ sudo apt-get update
52
+ sudo apt-get install -y liblapacke-dev libopenblas-dev zlib1g-dev cmake ninja-build clang
53
+ python -m pip install meson==1.8.5 numpy cffi
54
+ - name: Differential validation dependencies
55
+ if: matrix.ghc == '9.10.3' && matrix.buildtype == 'release'
56
+ run: |
57
+ python -m pip install scipy h5py pyarrow onnx
58
+ cabal update
59
+ - name: Wave compiler
60
+ if: matrix.ghc == '9.10.3' && matrix.buildtype == 'release'
61
+ env:
62
+ GH_TOKEN: ${{ github.token }}
63
+ run: |
64
+ mkdir -p "$RUNNER_TEMP/wave"
65
+ gh release download v0.2.1-pre-beta --repo wavefnd/Wave --pattern wave-v0.2.1-pre-beta-x86_64-linux-gnu.tar.gz --dir "$RUNNER_TEMP/wave"
66
+ cd "$RUNNER_TEMP/wave"
67
+ echo '4e5daf46a93414e00b8ea073eda09e4b7aa7d248cc03f2aeb965a36fc9b0fef0 wave-v0.2.1-pre-beta-x86_64-linux-gnu.tar.gz' | sha256sum --check
68
+ tar -xzf wave-v0.2.1-pre-beta-x86_64-linux-gnu.tar.gz
69
+ test -n "$(find "$RUNNER_TEMP/wave" -type f -name wavec -print -quit)"
70
+ find "$RUNNER_TEMP/wave" -type f -name wavec -printf '%h\n' >> "$GITHUB_PATH"
71
+ - name: Build and integration tests
72
+ run: |
73
+ wave_tests=auto
74
+ if [ '${{ matrix.ghc }}' = '9.10.3' ] && [ '${{ matrix.buildtype }}' = release ]; then
75
+ wave_tests=enabled
76
+ fi
77
+ meson setup build-ci --buildtype=${{ matrix.buildtype }} -Doffline=true -Dwerror=true -Dpython_bindings=enabled -Dwave_bindings="$wave_tests" -Dbenchmarks=true
78
+ meson compile -C build-ci
79
+ meson test -C build-ci --print-errorlogs
80
+ python tools/check_install.py build-ci
81
+ python tools/check_abi.py build-ci/libhmath.so
82
+ - name: Properties and interchange
83
+ if: matrix.ghc == '9.10.3' && matrix.buildtype == 'release'
84
+ run: |
85
+ cabal test hmath-properties -fvalidation-frameworks -fcriterion-benchmarks --test-show-details=direct
86
+ python tools/check_interchange.py --builddir=build-interchange --require-optional
87
+ - name: Sanitized metadata and DLPack fuzzing
88
+ if: matrix.ghc == '9.10.3' && matrix.buildtype == 'release'
89
+ run: python tools/run_fuzz.py --runs=100000 --output=build-ci/fuzz.log
90
+ - name: Criterion fixture and native benchmark smoke
91
+ if: matrix.ghc == '9.10.3' && matrix.buildtype == 'release'
92
+ run: |
93
+ cabal bench hmath-criterion -fvalidation-frameworks -fcriterion-benchmarks --benchmark-options='--iters 1'
94
+ python tools/benchmark.py --library=build-ci/libhmath.so --native=build-ci/hmath-native-benchmark --iterations=10 --output=build-ci/benchmark.json
95
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
96
+ if: always()
97
+ with:
98
+ name: validation-${{ matrix.ghc }}-${{ matrix.buildtype }}
99
+ path: |
100
+ build-ci/meson-logs/
101
+ build-ci/hmath-build.json
102
+ build-ci/fuzz.log
103
+ build-ci/benchmark.*
104
+
105
+ portability-build:
106
+ # Build probes do not establish full native platform support.
107
+ strategy:
108
+ fail-fast: false
109
+ matrix:
110
+ os: [macos-15, windows-2022]
111
+ runs-on: ${{ matrix.os }}
112
+ steps:
113
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
114
+ - uses: haskell-actions/setup@7fd2bb5ca789761088fbc831406b2910e47e56f1 # v2
115
+ id: haskell
116
+ with:
117
+ ghc-version: '9.10.3'
118
+ cabal-version: '3.16.1.0'
119
+ - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
120
+ with:
121
+ path: |
122
+ ${{ steps.haskell.outputs.cabal-store }}
123
+ dist-newstyle
124
+ key: cabal-portability-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('hmath.cabal', 'cabal.project', 'src/**', 'cbits/**') }}
125
+ restore-keys: cabal-portability-${{ runner.os }}-${{ runner.arch }}-
126
+ - run: cabal build --offline lib:hmath flib:hmath -f-interchange-zlib --ghc-options="-Wall -Werror"
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ ## 1.0.1
4
+
5
+ - Bundle the native HMath library and required runtime dependencies in the Linux x86-64 Python wheel, fixing import failures after a normal pip installation.
6
+ - Validate the same release wheel in clean CPython 3.9–3.14 environments without a system HMath library, GHC, or native-library environment overrides.
7
+ - Add a searchable documentation site with installation, guides, language references, and generated Haskell API documentation.
8
+ - Cache Haskell builds and dependencies; run differential validation once rather than repeating it across the compiler/build-type matrix.
9
+
10
+ ## 1.0.0
11
+
12
+ - Add checked native tensors, ownership and cancellation contracts, and CPU DLPack exchange.
13
+ - Establish C, Python, and Wave as the officially maintained external interfaces.
14
+ - Add configurable BLAS/LAPACK providers and pure reference operations.
15
+ - Add Haskell shape, algebra, buffer, and convergence interfaces and typed array interchange.
16
+ - Add integrated validation, benchmarks, native installation checks, and build metadata.
17
+
18
+ The first release covers the implemented Haskell numerical modules and the
19
+ C, Python, and Wave interfaces on Linux x86-64. Python distributions in 1.0.0
20
+ contain only bindings and require a separately installed HMath shared library.
21
+ Upgrade to 1.0.1 or newer for a self-contained Linux x86-64 Python wheel.
22
+
23
+ Package versions follow SemVer: compatible fixes increment the patch, compatible
24
+ features increment the minor, and breaking public API changes increment the major.
25
+ C ABI epoch 1 is reported independently and identifies the calling and ownership
26
+ conventions. Existing legacy C symbols remain available. GPU execution,
27
+ distributed computation, additional platforms, and unchecked goals in the roadmap
28
+ remain future development; they are not prerequisites for this release.
@@ -0,0 +1,15 @@
1
+ include LICENSE README.md CHANGELOG.md ROADMAP.md hmath.cabal cabal.project meson-build.py
2
+ include meson.build meson_options.txt mkdocs.yml requirements-docs.txt fourmolu.yaml .clang-format
3
+ recursive-include src *.hs
4
+ recursive-include cbits *.c *.h
5
+ recursive-include include *.h
6
+ recursive-include bindings/python/_hmath_native/licenses *
7
+ recursive-include bindings/python *.py LICENSE
8
+ recursive-include bindings/wave *.wave
9
+ recursive-include docs *.md
10
+ recursive-include tools *.py *.sh
11
+ recursive-include test *.hs *.c *.py *.txt
12
+ recursive-include examples *.hs *.c *.py
13
+ recursive-include bench *.hs *.c
14
+ recursive-include meson *.in
15
+ recursive-include .github/workflows *.yml
@@ -1,11 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hmath-python
3
- Version: 1.0.0
3
+ Version: 1.0.1
4
4
  Summary: Python bindings for the Haskell HMath numerical library
5
5
  License-Expression: MPL-2.0
6
6
  Project-URL: Homepage, https://github.com/wavefnd/hmath
7
7
  Project-URL: Source, https://github.com/wavefnd/hmath
8
8
  Project-URL: Issues, https://github.com/wavefnd/hmath/issues
9
+ Project-URL: Documentation, https://wavefnd.github.io/hmath/
9
10
  Keywords: mathematics,haskell,ffi,tensor
10
11
  Classifier: Development Status :: 5 - Production/Stable
11
12
  Classifier: Operating System :: POSIX :: Linux
@@ -24,14 +25,14 @@ Dynamic: license-file
24
25
 
25
26
  HMath is a mathematics and numerical computing library with Python bindings, written in Haskell. It also provides native Haskell, C, and Wave interfaces.
26
27
 
27
- The 1.0.0 release targets Linux x86-64. The Python distribution is named **hmath-python** and is imported as `hmath`.
28
+ HMath targets Linux x86-64. The Python distribution is named **hmath-python** and is imported as `hmath`. Version 1.0.1 includes the native library and runtime; GHC is not needed to use its Python wheel.
28
29
 
29
30
  ## Python quick start
30
31
 
31
32
  Install the Python package on Linux x86-64:
32
33
 
33
34
  ```sh
34
- pip install hmath-python
35
+ python -m pip install --upgrade --only-binary=:all: "hmath-python>=1.0.1"
35
36
  ```
36
37
 
37
38
  ```python
@@ -46,6 +47,8 @@ with Tensor.matrix([1, 2, 3, 4], 2, 2) as matrix:
46
47
 
47
48
  Use `with` to release native resources automatically. Invalid operations raise `HMathError`. Install `hmath-python[numpy,cffi]` for optional NumPy and cffi support.
48
49
 
50
+ See the [documentation](https://wavefnd.github.io/hmath/) for installation requirements, tutorials, API reference, and C/Wave integration.
51
+
49
52
  ## Features
50
53
 
51
54
  - **Core math:** checked scalar operations, numeric types, constants, units, number theory, and polynomials.
@@ -2,14 +2,14 @@
2
2
 
3
3
  HMath is a mathematics and numerical computing library with Python bindings, written in Haskell. It also provides native Haskell, C, and Wave interfaces.
4
4
 
5
- The 1.0.0 release targets Linux x86-64. The Python distribution is named **hmath-python** and is imported as `hmath`.
5
+ HMath targets Linux x86-64. The Python distribution is named **hmath-python** and is imported as `hmath`. Version 1.0.1 includes the native library and runtime; GHC is not needed to use its Python wheel.
6
6
 
7
7
  ## Python quick start
8
8
 
9
9
  Install the Python package on Linux x86-64:
10
10
 
11
11
  ```sh
12
- pip install hmath-python
12
+ python -m pip install --upgrade --only-binary=:all: "hmath-python>=1.0.1"
13
13
  ```
14
14
 
15
15
  ```python
@@ -24,6 +24,8 @@ with Tensor.matrix([1, 2, 3, 4], 2, 2) as matrix:
24
24
 
25
25
  Use `with` to release native resources automatically. Invalid operations raise `HMathError`. Install `hmath-python[numpy,cffi]` for optional NumPy and cffi support.
26
26
 
27
+ See the [documentation](https://wavefnd.github.io/hmath/) for installation requirements, tutorials, API reference, and C/Wave integration.
28
+
27
29
  ## Features
28
30
 
29
31
  - **Core math:** checked scalar operations, numeric types, constants, units, number theory, and polynomials.
@@ -0,0 +1,96 @@
1
+ # HMath development roadmap
2
+
3
+ [Roadmap issue](https://github.com/wavefnd/hmath/issues/1) · [Planning milestone](https://github.com/wavefnd/hmath/milestone/1)
4
+
5
+ ## Status and scope
6
+
7
+ HMath is preparing its first 1.0.0 release. This roadmap preserves the complete maintainer-provided development checklist: **47 functional areas and 944 individual requirements**. Each area links to an English tracking issue containing its checklist, historical baseline, and completion criteria.
8
+
9
+ The agreed 1.0.0 scope is the implemented Haskell numerical modules and the C ABI 1, Python, and Wave interfaces on **Linux x86-64**. It includes the reference CPU implementations, tested optional OpenBLAS/LAPACKE integration, numerical interchange, and local build/install validation. GPU execution, explicit SIMD acceleration, distributed execution, additional platforms, and other unfinished checklist goals remain later work. The original checklist is a long-term backlog, not a promise that every item ships in 1.0.0.
10
+
11
+ Official external language support is limited to **C, Python, and Wave**. Haskell remains the implementation and native API. The counts below preserve the original checklist; the earlier requests for other maintained bindings are superseded by this scope decision in [#45](https://github.com/wavefnd/hmath/issues/45).
12
+
13
+ ## Suggested work order
14
+
15
+ 1. Correct the confirmed matrix, RTS lifecycle, and FFI test defects below.
16
+ 2. Agree numerical types and precision, shapes and layouts, error handling, ownership, threading, and API/ABI contracts.
17
+ 3. Harden scalar, vector, matrix, and statistics foundations together with meaningful Haskell/C/Python regression tests.
18
+ 4. Add selected numerical algorithms, arrays, interoperability, and language bindings in reviewable increments.
19
+ 5. Add optional acceleration and advanced domains after their reference behavior and tests exist.
20
+ 6. Validate the agreed first-release scope and publish 1.0.0 after review. Continue with compatible fixes in 1.0.x, compatible features in 1.x, and breaking public API changes in 2.0.0 or later.
21
+
22
+ ## Prototype correctness work
23
+
24
+ - [#2](https://github.com/wavefnd/hmath/issues/2) — Preserve matrix shape and values across zero-dimension operations
25
+ - [#3](https://github.com/wavefnd/hmath/issues/3) — Reject unsupported GHC RTS reinitialization without terminating the host
26
+ - [#4](https://github.com/wavefnd/hmath/issues/4) — Make C and Python FFI tests fail on incorrect numerical results
27
+
28
+ These are focused starting tasks. They do not replace the broader functional-area requirements.
29
+
30
+ ## Complete feature backlog
31
+
32
+ | Area | Development goal | Requirements | Priority | Issue |
33
+ | --- | --- | ---: | --- | --- |
34
+ | 1 | Implement core arithmetic, elementary functions, and scalar numerical utilities | 40 | high | [#5](https://github.com/wavefnd/hmath/issues/5) |
35
+ | 2 | Provide mathematical constants, unit conversions, and dimensional safety | 16 | medium | [#6](https://github.com/wavefnd/hmath/issues/6) |
36
+ | 3 | Define numerical types, precision controls, and floating-point semantics | 18 | high | [#7](https://github.com/wavefnd/hmath/issues/7) |
37
+ | 4 | Implement trigonometric, hyperbolic, and angular operations | 12 | medium | [#8](https://github.com/wavefnd/hmath/issues/8) |
38
+ | 5 | Implement number-theoretic algorithms and arithmetic functions | 21 | medium | [#9](https://github.com/wavefnd/hmath/issues/9) |
39
+ | 6 | Implement polynomial operations and algebraic abstractions | 16 | medium | [#10](https://github.com/wavefnd/hmath/issues/10) |
40
+ | 7 | Extend vector and matrix operations with explicit shape contracts | 22 | high | [#11](https://github.com/wavefnd/hmath/issues/11) |
41
+ | 8 | Implement matrix factorizations and linear-system solvers | 20 | medium | [#12](https://github.com/wavefnd/hmath/issues/12) |
42
+ | 9 | Implement sparse matrix representations and numerical operations | 12 | medium | [#13](https://github.com/wavefnd/hmath/issues/13) |
43
+ | 10 | Implement tensors and multidimensional array semantics | 25 | high | [#14](https://github.com/wavefnd/hmath/issues/14) |
44
+ | 11 | Implement numerical differentiation and integration | 19 | medium | [#15](https://github.com/wavefnd/hmath/issues/15) |
45
+ | 12 | Implement ODE solvers and dynamical-system analysis | 15 | medium | [#16](https://github.com/wavefnd/hmath/issues/16) |
46
+ | 13 | Implement PDE grids, discretization operators, and solvers | 13 | low | [#17](https://github.com/wavefnd/hmath/issues/17) |
47
+ | 14 | Implement automatic differentiation and differentiable operations | 18 | medium | [#18](https://github.com/wavefnd/hmath/issues/18) |
48
+ | 15 | Implement local, constrained, and global optimization algorithms | 24 | medium | [#19](https://github.com/wavefnd/hmath/issues/19) |
49
+ | 16 | Implement scalar and multivariate root-finding algorithms | 11 | medium | [#20](https://github.com/wavefnd/hmath/issues/20) |
50
+ | 17 | Expand descriptive statistics and statistical inference | 27 | medium | [#21](https://github.com/wavefnd/hmath/issues/21) |
51
+ | 18 | Add probability distributions and probabilistic inference | 22 | medium | [#22](https://github.com/wavefnd/hmath/issues/22) |
52
+ | 19 | Implement reproducible random number generation and sampling | 19 | medium | [#23](https://github.com/wavefnd/hmath/issues/23) |
53
+ | 20 | Build deep learning numerical primitives | 28 | low | [#24](https://github.com/wavefnd/hmath/issues/24) |
54
+ | 21 | Implement machine learning estimators and preprocessing | 23 | low | [#25](https://github.com/wavefnd/hmath/issues/25) |
55
+ | 22 | Add Fourier transforms and spectral analysis | 18 | medium | [#26](https://github.com/wavefnd/hmath/issues/26) |
56
+ | 23 | Implement digital signal processing and wavelets | 22 | medium | [#27](https://github.com/wavefnd/hmath/issues/27) |
57
+ | 24 | Develop interpolation, approximation, and curve APIs | 18 | medium | [#28](https://github.com/wavefnd/hmath/issues/28) |
58
+ | 25 | Implement special functions with numerical error contracts | 25 | medium | [#29](https://github.com/wavefnd/hmath/issues/29) |
59
+ | 26 | Add complex arithmetic, quaternions, and rotation groups | 15 | medium | [#30](https://github.com/wavefnd/hmath/issues/30) |
60
+ | 27 | Create computational geometry and spatial query APIs | 27 | low | [#31](https://github.com/wavefnd/hmath/issues/31) |
61
+ | 28 | Implement combinatorics and discrete mathematics | 22 | medium | [#32](https://github.com/wavefnd/hmath/issues/32) |
62
+ | 29 | Implement graph representations and algorithms | 26 | low | [#33](https://github.com/wavefnd/hmath/issues/33) |
63
+ | 30 | Build symbolic expression manipulation and evaluation | 25 | low | [#34](https://github.com/wavefnd/hmath/issues/34) |
64
+ | 31 | Implement time series analysis and forecasting | 19 | low | [#35](https://github.com/wavefnd/hmath/issues/35) |
65
+ | 32 | Implement numerical image processing operations | 20 | low | [#36](https://github.com/wavefnd/hmath/issues/36) |
66
+ | 33 | Implement numerical algorithms and data structures | 21 | medium | [#37](https://github.com/wavefnd/hmath/issues/37) |
67
+ | 34 | Implement a bounded numerical expression evaluator | 14 | medium | [#38](https://github.com/wavefnd/hmath/issues/38) |
68
+ | 35 | Add CPU backends and hardware-aware numerical optimization | 18 | low | [#39](https://github.com/wavefnd/hmath/issues/39) |
69
+ | 36 | Integrate configurable BLAS and LAPACK backends | 15 | low | [#40](https://github.com/wavefnd/hmath/issues/40) |
70
+ | 37 | Implement GPU numerical backends and device execution | 19 | low | [#41](https://github.com/wavefnd/hmath/issues/41) |
71
+ | 38 | Implement parallel, streaming, and distributed numerical execution | 15 | low | [#42](https://github.com/wavefnd/hmath/issues/42) |
72
+ | 39 | Define and harden the Haskell API and numerical type contracts | 19 | high | [#43](https://github.com/wavefnd/hmath/issues/43) |
73
+ | 40 | Specify and harden the native C ABI and FFI lifecycle | 21 | high | [#44](https://github.com/wavefnd/hmath/issues/44) |
74
+ | 41 | Provide language bindings with consistent errors and resource cleanup | 19 | medium | [#45](https://github.com/wavefnd/hmath/issues/45) |
75
+ | 42 | Add versioned numerical serialization and array interchange | 16 | medium | [#46](https://github.com/wavefnd/hmath/issues/46) |
76
+ | 43 | Harden builds, packaging, installation, and release artifacts | 28 | high | [#47](https://github.com/wavefnd/hmath/issues/47) |
77
+ | 44 | Establish numerical, FFI, and cross-platform validation | 25 | high | [#48](https://github.com/wavefnd/hmath/issues/48) |
78
+ | 45 | Build reproducible numerical and interoperability benchmarks | 16 | medium | [#49](https://github.com/wavefnd/hmath/issues/49) |
79
+ | 46 | Document numerical contracts, native integration, and practical examples | 19 | medium | [#50](https://github.com/wavefnd/hmath/issues/50) |
80
+ | 47 | Define and satisfy the HMath 1.0.0 release gates | 21 | high | [#51](https://github.com/wavefnd/hmath/issues/51) |
81
+
82
+ ## Working through the backlog
83
+
84
+ Choose a bounded implementation task from a tracking issue and link any smaller issue or pull request back to it. Define input domains, numerical accuracy, errors, shapes, ownership, and relevant tests before treating that task as complete. Reuse shared primitives across overlapping areas such as FFTs, spatial indexes, Kalman filters, and combinatorics.
85
+
86
+ Close a feature tracking issue only when its agreed scope and completion criteria are satisfied. Record any explicitly deferred goal rather than silently dropping it. API/ABI freeze and release publication remain future work under [the release-gate issue](https://github.com/wavefnd/hmath/issues/51).
87
+
88
+ ## Reference documentation
89
+
90
+ - [NumPy routines](https://numpy.org/doc/stable/reference/routines.html)
91
+ - [SciPy API reference](https://docs.scipy.org/doc/scipy/reference/index.html)
92
+ - [GNU Scientific Library manual](https://www.gnu.org/software/gsl/doc/html/)
93
+ - [PyTorch documentation](https://docs.pytorch.org/docs/stable/index.html)
94
+
95
+ These are the source checklist's reference links, not additional runtime dependencies.
96
+