Solver Selection

The Python namespaces follow the Rust solver-module layout:

Problem class

Python modules

Typical output

Use when

TOPP2

copp.solver.topp2_ra, copp.solver.reach_set2

a profile

You need a fast time-optimal baseline under second-order constraints.

COPP2

copp.solver.copp2_socp

a profile

You need convex objectives under second-order constraints.

TOPP3

copp.solver.topp3_lp, copp.solver.topp3_socp

Profile3rd(a, b)

You need jerk-aware time-optimal timing.

COPP3

copp.solver.copp3_socp

Profile3rd(a, b)

You need jerk-aware convex-objective timing.

Strict and Expert APIs

Clarabel-backed solvers have two forms:

profile = copp.solver.topp3_socp.solve(problem, options)
result = copp.solver.topp3_socp.solve_expert(problem, options)

The strict form returns a profile or raises CoppError when no accepted profile is available. The expert form returns raw solver diagnostics so you can inspect solver_status, residuals, objective values, and whether result.profile is present.

Reachability Artifacts

Reachability solvers expose intermediate data because it is often useful for debugging feasibility. copp.solver.reach_set2.backward and copp.solver.reach_set2.bidirectional return one-dimensional lower/upper intervals for a.