v1.6 — Latest Release

2D Geometry
Constraint Solver

Rust + WASM — 47+ constraints, 10 entities, 4 solvers, sparse CG, propagation, multi-start, diagnostics, drag mode

47+ Constraints
10 Entity Types
4 Solver Algorithms
3 Bindings (Rust/WASM/Python)

Capabilities

A comprehensive constraint solving toolkit with multiple algorithms, intelligent features, and cross-platform bindings.

Algorithms(5)

Algorithm
Levenberg-Marquardt

Damped least-squares with Armijo backtracking. Dense + sparse variant for well-conditioned systems.

Algorithm
DogLeg (Powell)

Trust-region interpolating steepest descent and Gauss-Newton. 22.7× faster than LM for chains.

Algorithm
BFGS Quasi-Newton

Inverse Hessian approximation with strong Wolfe line search + zoom algorithm.

Algorithm
L-BFGS Solver

Limited-memory BFGS with two-loop recursion. O(mn) memory. Auto-selected for n≥100 variables.

Algorithm
Sparse CG Solver

CSC Jacobian, SpGEMM for Jᵀ·J, Conjugate Gradient with Jacobi preconditioner for large sparse systems.

Features(6)

Feature
Constraint Propagation

20 deduction rules. Fully-deducible systems solve instantly without iteration.

Feature
Multi-Start

Random perturbation restarts. Keeps best solution across all starts for robust convergence.

Feature
Subsystem Decomposition

Union-Find splits independent constraint groups for parallel-friendly solving.

Feature
Parameter Reduction

Eliminates Coincident, Horizontal, Vertical, EqualRadius, Concentric, EqualMinorAxes constraints.

Feature
Fallback Chain

Auto-tries all algorithms if primary fails. Ensures maximum solve success rate.

Feature
Warm Start / Drag Mode

Reuses previous solution as initial guess. Fix variables temporarily for interactive dragging.

Diagnostics(3)

Diagnostic
DOF Analysis

Algebraic + QR rank-based. Detects under/over/full constraint status precisely.

Diagnostic
Convergence Tracking

Per-iteration max residual and cost history for debugging solver behavior.

Diagnostic
Geometric Validation

Detects negative radius, zero-length lines, degenerate arcs/ellipses after solving.

Bindings(2)

Binding
Python Bindings

PyO3/maturin wheel. Full API: entities, constraints, solve, DOF, diagnostics. pip install ready.

Binding
WASM Bindings

solve_sketch() and solve_sketch_v2() JSON APIs. Runs directly in the browser via WebAssembly.

Additional(2)

Utility
Undo/Redo

Full System state snapshots with batch nesting for interactive editing workflows.

Utility
JSON + Binary Serialization

Full round-trip via serde. Save/load systems, share configurations across platforms.

Solve Pipeline

The <code>solve_with_config()</code> flow from input to verified result.

solve_with_config(config)

Decompose Subsystems

Union-Find splits independent constraint groups — solve each separately for efficiency.

Multi-Start Restart

Random perturbation restarts across multiple attempts. Keeps the best solution found.

Constraint Propagation

20 deduction rules propagate known values. Fully-deducible systems solve instantly.

Parameter Reduction

Eliminates Coincident, Horizontal, Vertical, EqualRadius, Concentric, EqualMinorAxes.

Primary Algorithm

Attempts the configured primary solver (LM, DogLeg, BFGS, L-BFGS, or Sparse CG).

Fallback Chain

If primary fails, auto-tries remaining algorithms in order. Maximum solve success rate.

Return SolveResult

Converged status, max residual, iterations, convergence history, and diagnostics.

Entities & Constraints

10 geometric entity types and 47+ constraints covering points, lines, circles, arcs, ellipses, hyperbolas, and parabolas.

Entity Types

EntityFieldsDOF
Pointx, y, fixed2
Linep1, p20 (derived)
Circlecenter, radius, fixed1
Arccenter, start, end, radius, fixed1
Ellipsecenter, focus1, radmin, fixed5
Hyperbolacenter, focus1, radmin, fixed5
Parabolavertex, focus, fixed4

DERIVED ENTITY TYPES

ArcOfEllipse3
ArcOfHyperbola3
ArcOfParabola2

Constraints by Category

DistanceHorizontalVerticalCoincidentFixedPointAngleBetweenPointsMidpointSymmetryPointLineDistancePointOnLineAt

PointOnLineParallelPerpendicularAngleEqualLengthLineLineIntersectionEqualLineLength

PointOnCircleLineCircleTangentCircleCircleTangentCircleCircleTangentInternalEqualRadiusConcentricCircleRadiusC2CDistanceP2CDistance

Documentation

Everything you need to build, test, benchmark, and understand the solver.

Requirements

  • RustRust 1.70+ (stable toolchain)
  • WASMwasm-pack for WebAssembly builds
  • PythonPython 3.8+ with maturin for Python bindings

Build Rust library:

cargo build --release

Build WASM package:

./build_wasm.sh # Runs: wasm-pack build --target web --out-name solver_test

Build Python wheel:

cd py-lib && maturin build --release

Run tests:

cargo test

Run benchmarks:

cargo bench

API Documentation

First-class APIs in Rust, JavaScript/WASM, and Python with consistent semantics across all bindings.

RustNative library with full type safety
1use solver_test::{System, Point, Constraint, SolverConfig, Algorithm};
2
3let mut sys = System::new();
4let p0 = sys.add_point(Point { x: 0.0, y: 0.0, fixed: true });
5let p1 = sys.add_point(Point { x: 3.0, y: 4.0, fixed: false });
6sys.add_constraint(Constraint::Distance { p1: 0, p2: 1, d: 5.0 });
7
8let config = SolverConfig::new()
9 .max_iterations(200)
10 .tolerance(1e-8)
11 .primary_algorithm(Algorithm::LevenbergMarquardt)
12 .fallback_algorithms(vec![Algorithm::DogLeg, Algorithm::Bfgs]);
13
14let result = sys.solve_with_config(&config);
15println!("Converged: {}, Residual: {:.2e}", result.converged, result.max_residual);
16
17// DOF analysis
18let dof = sys.analyze_dof();
19println!("DOF: {}, Status: {:?}", dof.degrees_of_freedom, dof.status);
20
21// Solution verification
22let verification = sys.verify_solution(1e-6);
23println!("Verdict: {:?}", verification.verdict);

Download

Complete source with Rust library, WASM bindings, Python bindings, benchmarks, proptests, and interactive WASM demo.

solver-modular-proptest-1.6.zip

Complete distribution package

Source codeComplete Rust library with all modules
py-lib/Python bindings (PyO3/maturin)
benches/Criterion.rs benchmarks
benchmarks/Quick wall-clock benchmarks
proptest-regressions/Property-based test seeds
examples/Interactive WASM demo & Node.js example
Python wheelPrebuilt geom_solver wheel (cp312)