# Kindred Solver

Assembly constraint solver addon for [Kindred Create](https://git.kindred-systems.com/kindred/create). Implements the `IKCSolver` interface via `kcsolve.register_solver()`.

## Components

### Kindred Solver (Phase 1)

Expression-based Newton-Raphson constraint solver. Pure Python, registered as a Create addon.

- Expression DAG with eval, symbolic differentiation, simplification: `kindred_solver/expr.py`
- Parameter table with fixed/free tracking: `kindred_solver/params.py`
- Quaternion rotation as polynomial Expr trees: `kindred_solver/quat.py`
- RigidBody entity (7 params: position + unit quaternion): `kindred_solver/entities.py`
- Constraint residual generators (Coincident, DistancePointPoint, Fixed): `kindred_solver/constraints.py`
- Newton-Raphson solver with symbolic Jacobian: `kindred_solver/newton.py`
- Pre-solve passes (substitution, single-equation): `kindred_solver/prepass.py`
- DOF counting via Jacobian rank: `kindred_solver/dof.py`
- KCSolve IKCSolver bridge: `kindred_solver/solver.py`

### GNN (future phases)

Graph neural network constraint prediction layer. OndselSolver C++ engine and ML training infrastructure. Moved to `GNN/` — will be integrated in later phases.

## Create Addon Integration

This repo is a git submodule at `mods/solver/` in the Create repository. The addon loader discovers `package.xml` and executes `Init.py`, which registers the solver:

```python
import kcsolve
from kindred_solver import KindredSolver
kcsolve.register_solver("kindred", KindredSolver)
```

## Testing

```bash
python3 -m venv .venv && . .venv/bin/activate
pip install pytest numpy
PYTHONPATH=. pytest tests/ -v
```

## Repository Structure

```
├── package.xml            # Create addon manifest
├── Init.py                # Solver registration entry point
├── kindred_solver/        # Phase 1: expression-based Newton solver
│   ├── expr.py            # Expression DAG
│   ├── params.py          # Parameter table
│   ├── quat.py            # Quaternion math as Expr trees
│   ├── entities.py        # RigidBody entity
│   ├── constraints.py     # Constraint residual generators
│   ├── newton.py          # Newton-Raphson solver
│   ├── prepass.py         # Pre-solve passes
│   ├── dof.py             # DOF counting
│   └── solver.py          # IKCSolver bridge
├── tests/                 # Unit tests (82 tests)
└── GNN/                   # GNN solver layer (future phases)
```

## License

LGPL-2.1-or-later (see [LICENSE](LICENSE))
