Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ As of 2026-10-31. "Released" means a tagged version; "merged" means on main with
| 3 | interpolation, splines, polynomials | [go-approx/interp](https://github.com/go-approx/interp), [go-approx/poly](https://github.com/go-approx/poly) ([docs](https://go-approx.github.io/docs/latest/)) | interp v0.2.1 and poly v0.1.0 released, every measured case at or below NumPy/SciPy ([interp docs/perf.md](https://github.com/go-approx/interp/blob/main/docs/perf.md), [poly docs/perf.md](https://github.com/go-approx/poly/blob/main/docs/perf.md)) | numpy.interp, interp1d, PCHIP, Akima and poly1d bit-identical to NumPy/SciPy; splines within 1e-15–1e-10 |
| 4 | filter design, filtering, spectral estimation | [go-dsp/signal](https://github.com/go-dsp/signal) ([docs](https://go-dsp.github.io/docs/latest/signal/)) | v0.1.0 released; all 28 measured cases at or below SciPy ([docs/perf.md](https://github.com/go-dsp/signal/blob/main/docs/perf.md)) | 40 Remez designs within 3e-8 of SciPy; accuracy table over 225 groups in [docs/accuracy.md](https://github.com/go-dsp/signal/blob/main/docs/accuracy.md) |
| 5 (SLSQP slice) | constrained NLP: SLSQP (`Minimize(…, SLSQP, …)` with `Constraint`, `NonlinearConstraint`, `LinearConstraint`) | [go-numerics/optimize](https://github.com/go-numerics/optimize) ([docs](https://go-numerics.github.io/docs/latest/optimize/)) | v0.3.0 released; Hock–Schittkowski cases 20–94× faster than SciPy, n = 50 with 100 bounds 1.4× ([docs/perf.md](https://github.com/go-numerics/optimize/blob/main/docs/perf.md)); v0.3.1: oracle and benchmark harnesses tested in CI | 100/100 statuses and 88/100 runs on SciPy 1.18.1's exact path (nit/nfev/njev, multipliers) over 36 Hock–Schittkowski problems and 10 stress cases; the other 12 are runs where SciPy's own arm64 and x86_64 wheels disagree; 100% statement coverage, fuzzed |
| 5 (interior-point slice) | constrained NLP: trust-region interior point (`Minimize(…, TrustConstr, …)`, SciPy `trust-constr`, fmincon `'interior-point'`), same constraint types | [go-numerics/optimize](https://github.com/go-numerics/optimize) ([docs](https://go-numerics.github.io/docs/latest/optimize/)) | v0.4.0 released; Hock–Schittkowski cases 65–130× faster than SciPy, n = 50 with 100 bounds 2.7× ([docs/perf.md](https://github.com/go-numerics/optimize/blob/main/docs/perf.md)); QP (active set, ADMM) and global methods still planned | on the same 100 runs: success/failure as SciPy 1.18.1 on 100/100, same status 95/100, objective within 1e-5 of SciPy or 1e-4 of the optimum; 59–68 runs on SciPy's exact path where SciPy's own two wheels disagree on 35; 100% statement coverage, fuzzed |
| 5 (interior-point slice) | constrained NLP: trust-region interior point (`Minimize(…, TrustConstr, …)`, SciPy `trust-constr`, fmincon `'interior-point'`), same constraint types | [go-numerics/optimize](https://github.com/go-numerics/optimize) ([docs](https://go-numerics.github.io/docs/latest/optimize/)) | v0.4.0 released; Hock–Schittkowski cases 65–130× faster than SciPy, n = 50 with 100 bounds 2.7× ([docs/perf.md](https://github.com/go-numerics/optimize/blob/main/docs/perf.md)); global methods still planned | on the same 100 runs: success/failure as SciPy 1.18.1 on 100/100, same status 95/100, objective within 1e-5 of SciPy or 1e-4 of the optimum; 59–68 runs on SciPy's exact path where SciPy's own two wheels disagree on 35; 100% statement coverage, fuzzed |
| 5 (QP slice) | convex quadratic programming: `Quadprog` (Goldfarb–Idnani dual active set and OSQP v1.0.0's ADMM with Ruiz scaling, adaptive ρ, polishing and certificates; `QPSolver` updates and warm starts), MATLAB `quadprog`, OSQP | [go-numerics/optimize](https://github.com/go-numerics/optimize) ([docs](https://go-numerics.github.io/docs/latest/optimize/)) | v0.5.0 released; ADMM runs OSQP v1.0.0's iterations on 25 of 25 generated instances, in 0.5–0.65× its time on dense n ≥ 500 and 0.8–0.9× on the larger portfolios, but 1.04–1.49× in the solve phase and 2.2–4.9× in the setup on small sparse problems (go-sparse's AMD, symbolic analysis and LDLᵀ solves: open defect there); the active set 0.68–0.76× the `quadprog` package from n = 500, 2.0× at n = 50 (open defect) ([docs/perf.md](https://github.com/go-numerics/optimize/blob/main/docs/perf.md)); `QPAuto` threshold n + m = 2500 measured | status, iteration and ρ-update counts equal OSQP v1.0.0's on 38 of 38 planted and 12 of 12 sparse cases; 33 Maros–Mészáros problems (tiny and small tiers, pinned and checksummed): Clarabel's objective on 27, OSQP's own status on the other 6, active set on all 13 positive definite; 100% statement coverage, fuzzed |
| 5 (rest)–22 | see [PLAN.md](PLAN.md) | | planned | |
| — | embeddable Julia: oracle harness (M0), parser (M1) and lowering (M2), see [bib/julia.md](bib/julia.md); runtime design (M3) in [bib/julia-runtime.md](bib/julia-runtime.md) | [go-embedded-julia/julia](https://github.com/go-embedded-julia/julia) | v0.1.0 (oracle + lexer), v0.2.0 (complete JuliaSyntax port), v0.3.0 (M2 lowering: the femtolisp front end of julia 1.12.6, `lower.NewState().Lower(ex)` = `Meta.lower`), v0.4.0 (package `core`: types, `apply_type`, subtyping and method specificity) and v0.5.0 (package `core/dispatch`: method tables, world ages, dispatch of concrete calls) released; corpus parsed in 0.70× julia's `Meta.parseall` time on one core; subtyping 1.49× **slower** than julia's `jl_subtype` on one core (3.63 ms vs 2.44 ms for the 20 000 pairs; open defect, allocation-bound, a pooling branch awaits a low-load A/B); M3 (Core runtime) in progress: types, subtyping, specificity and dispatch done; type intersection, builtins, intrinsics and the interpreter next | parser: tokens, green trees and `Expr` identical to julia 1.12.6 on 1191 / 1191 files of its `share/julia` tree and 976 / 976 snippets, error messages included; where JuliaSyntax itself throws and julia falls back to flisp (3 fuzz-found inputs) an error is returned. Lowering (v0.3.0), identical to `Meta.lower` modulo gensym numbering: 53 997 / 53 997 corpus forms (1191 / 1191 files), 124 / 124 snippets, 48 / 48 hygienic-scope forms, 477 / 477 built expressions, `deparse` 119 / 119 and front-end functions 151 / 151 against `julia --lisp`; 100% statement coverage; known gap: a `Float64` in a lowering error message returns `lower.ErrUnsupported`. `core` (v0.4.0), a port of jltypes.c and subtype.c of 1.12.6 without intersection: subtyping identical to julia on 20 000 random pairs and 4 902 cases from `test/subtype.jl`; specificity (`jl_type_morespecific`) identical to `Base.morespecific` on the same corpus. `core/dispatch` (v0.5.0): the selected method, ambiguity and no-method answers and the static parameters identical to julia's `which` and `jl_type_intersection_with_env` on 9 000 calls over 1 500 random method tables; 100% statement coverage, mutation-tested |
| — | vector-update kernels `Axpy`, `Xpby`, `AxpyDot`, `Scale` (shared by the solvers) | [go-simd/floats](https://github.com/go-simd/floats) | v0.4.0 released: SIMD on amd64 and arm64, FMA loop elsewhere | — |
Loading