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
7 changes: 4 additions & 3 deletions STATUS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Status

As of 2026-10-31. "Released" means a tagged version; "merged" means on main without a tag yet. Every child organisation has a landing, a documentation site, a brand and a profile; [go-scikit/docs](https://go-scikit.github.io/docs/latest/) links them all.
As of 2026-11-02. "Released" means a tagged version; "merged" means on main without a tag yet. Every child organisation has a landing, a documentation site, a brand and a profile; [go-scikit/docs](https://go-scikit.github.io/docs/latest/) links them all.

| # | item | home | state | evidence |
|---|---|---|---|---|
Expand All @@ -11,6 +11,7 @@ As of 2026-10-31. "Released" means a tagged version; "merged" means on main with
| 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)); 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 | |
| 5 (global slice) | global optimisation: `Direct` (DIRECT and DIRECT-L, a port of SciPy 1.18.1's C DIRECT, MIT notice kept), `DifferentialEvolution` (12 strategies, constraints, integrality, polishing), `Basinhopping`, on a shared `RandomSource` reproducing NumPy's PCG64 and MT19937 streams | [go-numerics/optimize](https://github.com/go-numerics/optimize) ([docs](https://go-numerics.github.io/docs/latest/optimize/)) | v0.6.0 released; no measured row slower than SciPy ([docs/perf.md](https://github.com/go-numerics/optimize/blob/main/docs/perf.md)); coverage of scipy.optimize and the MATLAB toolboxes in [docs/coverage.md](https://github.com/go-numerics/optimize/blob/main/docs/coverage.md) | DIRECT: 618 / 618 arithmetic-only runs bit-identical to SciPy (x, fun, nfev, nit, first 25 points), same status and counts on the 152 transcendental runs; DE: 296 / 296 unpolished runs bit-identical (final population, energies, nfev, nit) for PCG64 and MT19937, constraints and integrality included; basin hopping: SciPy's accept decisions on 224 / 224 runs; 100% statement coverage, fuzzed |
| 5 (rest)–22 | see [PLAN.md](PLAN.md); item 6 design in [go-statistics/stats docs/design-models.md](https://github.com/go-statistics/stats/blob/main/docs/design-models.md), home [go-statistics/models](https://github.com/go-statistics/models) created | | 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 | — |
| — | vector-update kernels `Axpy`, `Xpby`, `AxpyDot`, `Scale` (shared by the solvers) | [go-simd/floats](https://github.com/go-simd/floats) | v0.7.0 released: SIMD on amd64 and arm64; fused kernels (`Axpy`, `Axpby3`) for tolerance-validated solvers, and unfused ones (`AxpyNoFMA`, `XpbyNoFMA`, `Axpby3NoFMA`, `AxpyDiffNoFMA`) plus `SumPairwise` (NumPy's 8 accumulators in the lanes) for solvers validated by equality | unfused kernels equal to NumPy on 13 088 / 13 088 cases and `SumPairwise` to `np.sum` on 6 990 / 6 990, on arm64 and amd64 |
Loading