FsMath 0.0.2
dotnet add package FsMath --version 0.0.2
NuGet\Install-Package FsMath -Version 0.0.2
<PackageReference Include="FsMath" Version="0.0.2" />
<PackageVersion Include="FsMath" Version="0.0.2" />
<PackageReference Include="FsMath" />
paket add FsMath --version 0.0.2
#r "nuget: FsMath, 0.0.2"
#:package FsMath@0.0.2
#addin nuget:?package=FsMath&version=0.0.2
#tool nuget:?package=FsMath&version=0.0.2
FsMath - Fast & Friendly Numerical Foundation for F#
FsMath is a lightweight maths library designed for modern F# workflows. It focuses on zero-friction interop with existing array-centric libraries ( FSharp.Stats, Math.NET Numerics, libtorch via TorchSharp, etc.) while giving you the performance head-room of SIMD-accelerated kernels and a clean, idiomatic F# API.
Why another numeric library?
| Goal | What it means in practice |
|---|---|
| Interop first | Core types are just aliases or thin wrappers around native F# 'T [] arrays → you can pass data to any array-based .NET or C library without conversion or pinning. |
| Predictable memory layout | Matrices are stored row-major (C-style) to line up with libtorch / TorchSharp, modern BLAS back-ends, and GPU kernels. |
| SIMD out-of-the-box | Tight loops (dot, outer product, reductions ...) auto-detect hardware with SIMD support and pure-managed fallback otherwise. |
| F#-idiomatic API | Pipelining, module functions, inline operators (.+, .*, transpose) and SRTP �type-class� dispatch keep your notebooks & scripts concise. |
Key features
- Vector / RowVector / Matrix - minimal, generic, and structural-equality aware.
- High-level operators -
.+,.-,.*,./, outer product, Kronecker, hadamard, etc. - SIMD optimizes - dot products, outer products, reductions, and more.
- Unsafe-free - everything is pure managed IL; no native dlls to ship.
- Perfect interop - drop-in arrays to FSharp.Stats, TorchSharp, DiffSharp, and any BLAS/LAPACK P/Invoke you like.
Getting started
open FsMath
open FSharp.Stats.Distributions
// init vector
let v1 = vector [| 1.0; 2.0; 3.0 |]
// init vector with random samples (using FSharp.Stats)
let v2 = Array.init 3 (fun _ -> Continuous.ChiSquared.Sample 30.)
// SIMD-accelerated element-wise multiply
let result = v1 .* v2
// interop: pass 'result' straight into e.g. TorchSharp tensor
Documentation
| Topic | Where |
|---|---|
| API reference | docs/ folder & generated markdown |
| Benchmarks | benchmarks/ |
| Contributing guide | CONTRIBUTING.md |
build
Check the build project to take a look at the build targets.
# Windows
./build.cmd
# Linux/mac
build.sh
run tests
# Windows
./build.cmd runtests
# Linux/mac
./build.sh runtests
run tests with coverage
To generate code coverage reports locally:
# Windows
./build.cmd runtestswithcoverage
# Linux/mac
./build.sh runtestswithcoverage
For a complete coverage report with HTML output, use the provided scripts:
# Windows
./scripts/generate-coverage.ps1
# Linux/mac
./scripts/generate-coverage.sh
This will generate coverage reports in the TestResults directory and create an HTML report you can open in your browser. Coverage is automatically collected and reported in CI/CD pipelines, with coverage summaries displayed in pull requests and detailed HTML reports available as downloadable artifacts.
docs
The docs are contained in .fsx and .md files in the docs folder. To develop docs on a local server with hot reload, run the following in the root of the project:
# Windows
./build.cmd watchdocs
# Linux/mac
./build.sh watchdocs
pack nuget package(s)
# Windows
./build.cmd pack
# Linux/mac
build.sh pack
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- FSharp.Core (>= 8.0.403)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on FsMath:
| Package | Downloads |
|---|---|
|
FSharp.Stats
F#-first linear algebra, machine learning, fitting, signal processing, and statistical testing. |
GitHub repositories
This package is not used by any popular GitHub repositories.