#![doc = include_str!("../README.md")]
#![cfg_attr(docsrs, feature(doc_cfg))]
mod options;
mod persistent;
mod translate;
pub use options::{ClarabelDirectSolve, ClarabelOptions};
pub use persistent::ClarabelPersistent;
pub use translate::solve;
use oximo_core::{Model, ModelKind};
use oximo_solver::{PersistentSolver, Solver, SolverError, SolverResult};
#[derive(Debug, Default, Clone, Copy)]
pub struct Clarabel;
pub(crate) const NAME: &str = "Clarabel";
pub(crate) const fn supported(kind: ModelKind) -> bool {
matches!(kind, ModelKind::LP | ModelKind::QP | ModelKind::SOCP)
}
impl Solver for Clarabel {
type Options = ClarabelOptions;
fn name(&self) -> &str {
NAME
}
fn supports(&self, kind: ModelKind) -> bool {
supported(kind)
}
fn solve(
&mut self,
model: &Model,
opts: &ClarabelOptions,
) -> Result<SolverResult, SolverError> {
translate::solve(model, opts)
}
}
impl PersistentSolver for Clarabel {
type Handle = ClarabelPersistent;
fn persistent(&self) -> ClarabelPersistent {
ClarabelPersistent::new()
}
}