Summary
Introduce the core backend protocol that all solver backends must satisfy.
Scope
Create src/op_engine/backends/__init__.py defining:
-
LinearSolverBackend(Protocol) — @runtime_checkable, with methods:
solve(left_op, right_op, x) -> NDArray — equivalent to current implicit_solve()
clear_cache() -> None — equivalent to clear_implicit_solver_cache()
convert_operator(op: OperatorLike) -> Any — replaces CoreSolver._as_scipy_operator()
-
Tighten OperatorLike — add dtype property (already checked in _SolverMeta but not in protocol)
-
Export LinearSolverBackend from op_engine.__init__
Files to create/modify
src/op_engine/backends/__init__.py (new) — protocol definitions
src/op_engine/__init__.py — add to exports
Acceptance criteria
Dependencies
None — can start immediately.
Design context
Current anchor points in codebase:
OperatorLike / PredictorLike protocols: core_solver.py ~L99-125
ScipyOperator type alias: core_solver.py L149
Operator / DenseOperator / SparseOperator aliases: matrix_ops.py L18-20
Summary
Introduce the core backend protocol that all solver backends must satisfy.
Scope
Create
src/op_engine/backends/__init__.pydefining:LinearSolverBackend(Protocol)—@runtime_checkable, with methods:solve(left_op, right_op, x) -> NDArray— equivalent to currentimplicit_solve()clear_cache() -> None— equivalent toclear_implicit_solver_cache()convert_operator(op: OperatorLike) -> Any— replacesCoreSolver._as_scipy_operator()Tighten
OperatorLike— adddtypeproperty (already checked in_SolverMetabut not in protocol)Export
LinearSolverBackendfromop_engine.__init__Files to create/modify
src/op_engine/backends/__init__.py(new) — protocol definitionssrc/op_engine/__init__.py— add to exportsAcceptance criteria
LinearSolverBackendis atyping.Protocolwith@runtime_checkablemypy --strictpasses for the new moduleDependencies
None — can start immediately.
Design context
Current anchor points in codebase:
OperatorLike/PredictorLikeprotocols:core_solver.py~L99-125ScipyOperatortype alias:core_solver.pyL149Operator/DenseOperator/SparseOperatoraliases:matrix_ops.pyL18-20