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.
- hmath_python-1.0.1/.clang-format +4 -0
- hmath_python-1.0.1/.github/workflows/docs.yml +60 -0
- hmath_python-1.0.1/.github/workflows/publish-python.yml +81 -0
- hmath_python-1.0.1/.github/workflows/python-wheels.yml +73 -0
- hmath_python-1.0.1/.github/workflows/validate.yml +126 -0
- hmath_python-1.0.1/CHANGELOG.md +28 -0
- hmath_python-1.0.1/MANIFEST.in +15 -0
- {hmath_python-1.0.0 → hmath_python-1.0.1}/PKG-INFO +6 -3
- {hmath_python-1.0.0 → hmath_python-1.0.1}/README.md +4 -2
- hmath_python-1.0.1/ROADMAP.md +96 -0
- hmath_python-1.0.1/bench/Main.hs +244 -0
- hmath_python-1.0.1/bench/native.c +80 -0
- hmath_python-1.0.1/bindings/python/LICENSE +373 -0
- hmath_python-1.0.1/bindings/python/_hmath_native/__init__.py +23 -0
- hmath_python-1.0.1/bindings/python/_hmath_native/licenses/GHC-LICENSE +31 -0
- hmath_python-1.0.1/bindings/python/_hmath_native/licenses/GMP-COPYING.LESSERv3 +165 -0
- hmath_python-1.0.1/bindings/python/_hmath_native/licenses/GMP-COPYINGv3 +674 -0
- hmath_python-1.0.1/bindings/python/_hmath_native/licenses/LIBFFI-LICENSE +21 -0
- hmath_python-1.0.1/bindings/python/_hmath_native/licenses/NOTICE +14 -0
- {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath.py +4 -8
- {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_cffi.py +2 -2
- {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_python.egg-info/PKG-INFO +6 -3
- hmath_python-1.0.1/bindings/python/hmath_python.egg-info/SOURCES.txt +225 -0
- {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_python.egg-info/top_level.txt +1 -0
- hmath_python-1.0.1/bindings/python/test_bindings.py +92 -0
- hmath_python-1.0.1/bindings/wave/hmath.wave +152 -0
- hmath_python-1.0.1/bindings/wave/smoke.wave +87 -0
- hmath_python-1.0.1/cabal.project +5 -0
- hmath_python-1.0.1/cbits/backend.c +606 -0
- hmath_python-1.0.1/cbits/interchange_io.c +196 -0
- hmath_python-1.0.1/cbits/native.c +503 -0
- hmath_python-1.0.1/cbits/native_dlpack.c +183 -0
- hmath_python-1.0.1/cbits/native_internal.h +29 -0
- hmath_python-1.0.1/cbits/runtime.c +94 -0
- hmath_python-1.0.1/docs/contributing.md +38 -0
- hmath_python-1.0.1/docs/explanation/architecture.md +47 -0
- hmath_python-1.0.1/docs/explanation/releases.md +40 -0
- hmath_python-1.0.1/docs/getting-started/first-calculation.md +59 -0
- hmath_python-1.0.1/docs/getting-started/installation.md +56 -0
- hmath_python-1.0.1/docs/guides/build.md +48 -0
- hmath_python-1.0.1/docs/guides/c.md +47 -0
- hmath_python-1.0.1/docs/guides/numpy.md +46 -0
- hmath_python-1.0.1/docs/guides/troubleshooting.md +50 -0
- hmath_python-1.0.1/docs/guides/wave.md +39 -0
- hmath_python-1.0.1/docs/index.md +31 -0
- hmath_python-1.0.1/docs/linear-algebra.md +75 -0
- hmath_python-1.0.1/docs/reference/c.md +46 -0
- hmath_python-1.0.1/docs/reference/haskell.md +34 -0
- hmath_python-1.0.1/docs/reference/python.md +83 -0
- hmath_python-1.0.1/docs/reference/wave.md +40 -0
- hmath_python-1.0.1/examples/c/main.c +88 -0
- hmath_python-1.0.1/examples/haskell/Domains.hs +16 -0
- hmath_python-1.0.1/examples/haskell/Foundations.hs +41 -0
- hmath_python-1.0.1/examples/haskell/Main.hs +37 -0
- hmath_python-1.0.1/examples/haskell/Scientific.hs +21 -0
- hmath_python-1.0.1/examples/python/main.py +133 -0
- hmath_python-1.0.1/fourmolu.yaml +3 -0
- hmath_python-1.0.1/hmath.cabal +350 -0
- hmath_python-1.0.1/include/hmath.h +149 -0
- hmath_python-1.0.1/include/hmath_backend.h +30 -0
- hmath_python-1.0.1/include/hmath_dlpack.h +31 -0
- hmath_python-1.0.1/meson/cmake/HMathConfig.cmake.in +10 -0
- hmath_python-1.0.1/meson/cmake/HMathConfigVersion.cmake.in +13 -0
- hmath_python-1.0.1/meson/hmath.pc.in +9 -0
- hmath_python-1.0.1/meson-build.py +115 -0
- hmath_python-1.0.1/meson.build +252 -0
- hmath_python-1.0.1/meson_options.txt +11 -0
- hmath_python-1.0.1/mkdocs.yml +59 -0
- {hmath_python-1.0.0 → hmath_python-1.0.1}/pyproject.toml +7 -1
- hmath_python-1.0.1/requirements-docs.txt +2 -0
- hmath_python-1.0.1/setup.py +66 -0
- hmath_python-1.0.1/src/HMath/API/Algebra.hs +199 -0
- hmath_python-1.0.1/src/HMath/API/Buffer.hs +136 -0
- hmath_python-1.0.1/src/HMath/API/Convergence.hs +93 -0
- hmath_python-1.0.1/src/HMath/API/Shape.hs +130 -0
- hmath_python-1.0.1/src/HMath/API.hs +19 -0
- hmath_python-1.0.1/src/HMath/Algebra.hs +507 -0
- hmath_python-1.0.1/src/HMath/Algorithms.hs +352 -0
- hmath_python-1.0.1/src/HMath/Autodiff.hs +597 -0
- hmath_python-1.0.1/src/HMath/Backend.hs +674 -0
- hmath_python-1.0.1/src/HMath/Basic.hs +40 -0
- hmath_python-1.0.1/src/HMath/Calculus.hs +835 -0
- hmath_python-1.0.1/src/HMath/Combinatorics.hs +327 -0
- hmath_python-1.0.1/src/HMath/Complex.hs +190 -0
- hmath_python-1.0.1/src/HMath/Constants.hs +148 -0
- hmath_python-1.0.1/src/HMath/DataStructure.hs +455 -0
- hmath_python-1.0.1/src/HMath/DeepLearning/Core.hs +499 -0
- hmath_python-1.0.1/src/HMath/DeepLearning/Layers.hs +837 -0
- hmath_python-1.0.1/src/HMath/DeepLearning/Metrics.hs +163 -0
- hmath_python-1.0.1/src/HMath/DeepLearning/Precision.hs +202 -0
- hmath_python-1.0.1/src/HMath/DeepLearning.hs +16 -0
- hmath_python-1.0.1/src/HMath/Discrete.hs +283 -0
- hmath_python-1.0.1/src/HMath/Error.hs +53 -0
- hmath_python-1.0.1/src/HMath/Expression.hs +902 -0
- hmath_python-1.0.1/src/HMath/FFI.hs +83 -0
- hmath_python-1.0.1/src/HMath/Fourier.hs +492 -0
- hmath_python-1.0.1/src/HMath/Geometry/Collision.hs +166 -0
- hmath_python-1.0.1/src/HMath/Geometry/Internal.hs +191 -0
- hmath_python-1.0.1/src/HMath/Geometry/Polygon.hs +304 -0
- hmath_python-1.0.1/src/HMath/Geometry/Primitives.hs +592 -0
- hmath_python-1.0.1/src/HMath/Geometry/Spatial.hs +214 -0
- hmath_python-1.0.1/src/HMath/Geometry/Transform.hs +235 -0
- hmath_python-1.0.1/src/HMath/Geometry/Triangulation.hs +222 -0
- hmath_python-1.0.1/src/HMath/Geometry.hs +55 -0
- hmath_python-1.0.1/src/HMath/Graph/Analysis.hs +627 -0
- hmath_python-1.0.1/src/HMath/Graph/Core.hs +472 -0
- hmath_python-1.0.1/src/HMath/Graph/Flow.hs +315 -0
- hmath_python-1.0.1/src/HMath/Graph/Paths.hs +257 -0
- hmath_python-1.0.1/src/HMath/Graph.hs +17 -0
- hmath_python-1.0.1/src/HMath/Image/Color.hs +158 -0
- hmath_python-1.0.1/src/HMath/Image/Core.hs +176 -0
- hmath_python-1.0.1/src/HMath/Image/Filter.hs +255 -0
- hmath_python-1.0.1/src/HMath/Image/Histogram.hs +161 -0
- hmath_python-1.0.1/src/HMath/Image/Measure.hs +204 -0
- hmath_python-1.0.1/src/HMath/Image/Spatial.hs +198 -0
- hmath_python-1.0.1/src/HMath/Image.hs +30 -0
- hmath_python-1.0.1/src/HMath/Interchange/Array.hs +395 -0
- hmath_python-1.0.1/src/HMath/Interchange/Binary.hs +160 -0
- hmath_python-1.0.1/src/HMath/Interchange/Compression.hs +81 -0
- hmath_python-1.0.1/src/HMath/Interchange/IO.hs +240 -0
- hmath_python-1.0.1/src/HMath/Interchange/Numpy.hs +446 -0
- hmath_python-1.0.1/src/HMath/Interchange/Text.hs +390 -0
- hmath_python-1.0.1/src/HMath/Interchange.hs +25 -0
- hmath_python-1.0.1/src/HMath/Interpolation.hs +878 -0
- hmath_python-1.0.1/src/HMath/Linear.hs +69 -0
- hmath_python-1.0.1/src/HMath/MachineLearning/Clustering.hs +447 -0
- hmath_python-1.0.1/src/HMath/MachineLearning/Decomposition.hs +571 -0
- hmath_python-1.0.1/src/HMath/MachineLearning/Internal.hs +172 -0
- hmath_python-1.0.1/src/HMath/MachineLearning/Neighbors.hs +315 -0
- hmath_python-1.0.1/src/HMath/MachineLearning/Preprocessing.hs +314 -0
- hmath_python-1.0.1/src/HMath/MachineLearning/Regression.hs +642 -0
- hmath_python-1.0.1/src/HMath/MachineLearning.hs +26 -0
- hmath_python-1.0.1/src/HMath/Matrix/Advanced.hs +449 -0
- hmath_python-1.0.1/src/HMath/Matrix/Decomposition.hs +498 -0
- hmath_python-1.0.1/src/HMath/Matrix/Internal.hs +75 -0
- hmath_python-1.0.1/src/HMath/Matrix/Iterative.hs +787 -0
- hmath_python-1.0.1/src/HMath/Matrix/LAPACK.hs +571 -0
- hmath_python-1.0.1/src/HMath/Matrix/LU.hs +293 -0
- hmath_python-1.0.1/src/HMath/Matrix/QR.hs +139 -0
- hmath_python-1.0.1/src/HMath/Matrix.hs +270 -0
- hmath_python-1.0.1/src/HMath/NumberTheory.hs +720 -0
- hmath_python-1.0.1/src/HMath/Numeric.hs +673 -0
- hmath_python-1.0.1/src/HMath/ODE/Tableau.hs +139 -0
- hmath_python-1.0.1/src/HMath/ODE.hs +787 -0
- hmath_python-1.0.1/src/HMath/Optimization/Common.hs +257 -0
- hmath_python-1.0.1/src/HMath/Optimization/Constrained.hs +515 -0
- hmath_python-1.0.1/src/HMath/Optimization/FirstOrder.hs +262 -0
- hmath_python-1.0.1/src/HMath/Optimization/Global.hs +309 -0
- hmath_python-1.0.1/src/HMath/Optimization/Local.hs +457 -0
- hmath_python-1.0.1/src/HMath/Optimization.hs +18 -0
- hmath_python-1.0.1/src/HMath/PDE.hs +632 -0
- hmath_python-1.0.1/src/HMath/Polynomial.hs +798 -0
- hmath_python-1.0.1/src/HMath/Probability.hs +1046 -0
- hmath_python-1.0.1/src/HMath/Quaternion.hs +309 -0
- hmath_python-1.0.1/src/HMath/Random.hs +753 -0
- hmath_python-1.0.1/src/HMath/Root.hs +493 -0
- hmath_python-1.0.1/src/HMath/Rotation.hs +260 -0
- hmath_python-1.0.1/src/HMath/Scalar.hs +359 -0
- hmath_python-1.0.1/src/HMath/Signal/Internal.hs +68 -0
- hmath_python-1.0.1/src/HMath/Signal.hs +1135 -0
- hmath_python-1.0.1/src/HMath/Sparse/Spectral.hs +272 -0
- hmath_python-1.0.1/src/HMath/Sparse.hs +473 -0
- hmath_python-1.0.1/src/HMath/Special.hs +1179 -0
- hmath_python-1.0.1/src/HMath/Statistics/Advanced.hs +1001 -0
- hmath_python-1.0.1/src/HMath/Statistics.hs +34 -0
- hmath_python-1.0.1/src/HMath/Symbolic.hs +1178 -0
- hmath_python-1.0.1/src/HMath/Tensor/Mutable.hs +124 -0
- hmath_python-1.0.1/src/HMath/Tensor.hs +770 -0
- hmath_python-1.0.1/src/HMath/TimeSeries/Core.hs +285 -0
- hmath_python-1.0.1/src/HMath/TimeSeries/Diagnostics.hs +298 -0
- hmath_python-1.0.1/src/HMath/TimeSeries/Models.hs +497 -0
- hmath_python-1.0.1/src/HMath/TimeSeries.hs +14 -0
- hmath_python-1.0.1/src/HMath/Trigonometry.hs +310 -0
- hmath_python-1.0.1/src/HMath/Units.hs +324 -0
- hmath_python-1.0.1/src/HMath/Vector.hs +182 -0
- hmath_python-1.0.1/src/HMath.hs +23 -0
- hmath_python-1.0.1/test/AlgebraBatchSpec.hs +602 -0
- hmath_python-1.0.1/test/ApplicationBatchSpec.hs +894 -0
- hmath_python-1.0.1/test/BackendAPISpec.hs +429 -0
- hmath_python-1.0.1/test/DifferentiableBatchSpec.hs +1232 -0
- hmath_python-1.0.1/test/DiscreteBatchSpec.hs +778 -0
- hmath_python-1.0.1/test/ExpressionBatchSpec.hs +955 -0
- hmath_python-1.0.1/test/GeometryBatchSpec.hs +855 -0
- hmath_python-1.0.1/test/InterchangeSpec.hs +451 -0
- hmath_python-1.0.1/test/IterativeBatchSpec.hs +294 -0
- hmath_python-1.0.1/test/LUSpec.hs +445 -0
- hmath_python-1.0.1/test/LinearBatchSpec.hs +1146 -0
- hmath_python-1.0.1/test/LinearSpec.hs +73 -0
- hmath_python-1.0.1/test/MachineLearningBatchSpec.hs +483 -0
- hmath_python-1.0.1/test/Main.hs +110 -0
- hmath_python-1.0.1/test/MatrixSpec.hs +522 -0
- hmath_python-1.0.1/test/NumericalBatchSpec.hs +387 -0
- hmath_python-1.0.1/test/ProbabilityBatchSpec.hs +2077 -0
- hmath_python-1.0.1/test/Properties.hs +38 -0
- hmath_python-1.0.1/test/ScalarBatchSpec.hs +640 -0
- hmath_python-1.0.1/test/SignalBatchSpec.hs +1398 -0
- hmath_python-1.0.1/test/SparseSpectralSpec.hs +283 -0
- hmath_python-1.0.1/test/abi-symbols.txt +45 -0
- hmath_python-1.0.1/test/ffi_bad_results.c +64 -0
- hmath_python-1.0.1/test/ffi_failure_detection.py +66 -0
- hmath_python-1.0.1/test/ffi_lifecycle.py +192 -0
- hmath_python-1.0.1/test/fuzz_native.c +74 -0
- hmath_python-1.0.1/test/install/CMakeLists.txt +5 -0
- hmath_python-1.0.1/test/install/client.c +11 -0
- hmath_python-1.0.1/test/interchange_differential.py +316 -0
- hmath_python-1.0.1/test/interchange_driver.hs +262 -0
- hmath_python-1.0.1/test/interchange_native.c +72 -0
- hmath_python-1.0.1/test/native/abi_rejection.py +45 -0
- hmath_python-1.0.1/test/native/contracts.c +336 -0
- hmath_python-1.0.1/test/native/dlpack_numpy.py +89 -0
- hmath_python-1.0.1/test/native/header_c99.c +8 -0
- hmath_python-1.0.1/test/native/wrong_abi.c +8 -0
- hmath_python-1.0.1/tools/benchmark.py +361 -0
- hmath_python-1.0.1/tools/build_docs.py +42 -0
- hmath_python-1.0.1/tools/build_python_wheel.sh +43 -0
- hmath_python-1.0.1/tools/check_abi.py +37 -0
- hmath_python-1.0.1/tools/check_docs_examples.py +17 -0
- hmath_python-1.0.1/tools/check_install.py +122 -0
- hmath_python-1.0.1/tools/check_interchange.py +41 -0
- hmath_python-1.0.1/tools/check_python_wheel.py +41 -0
- hmath_python-1.0.1/tools/interchange_adapters.py +154 -0
- hmath_python-1.0.1/tools/run_fuzz.py +79 -0
- hmath_python-1.0.1/tools/run_wave.py +51 -0
- hmath_python-1.0.0/bindings/python/hmath_python.egg-info/SOURCES.txt +0 -10
- {hmath_python-1.0.0 → hmath_python-1.0.1}/LICENSE +0 -0
- {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_python.egg-info/dependency_links.txt +0 -0
- {hmath_python-1.0.0 → hmath_python-1.0.1}/bindings/python/hmath_python.egg-info/requires.txt +0 -0
- {hmath_python-1.0.0 → hmath_python-1.0.1}/setup.cfg +0 -0
|
@@ -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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
|