import clarabel
import numpy as np
from scipy import sparse
def termination_callback(info: clarabel.DefaultInfo) -> bool:
if info.iterations < 3:
print("tick")
return False else:
print("BOOM!")
return True
P = sparse.csc_matrix([[4., 1.], [1., 2.]])
P = sparse.triu(P).tocsc()
A = sparse.csc_matrix([
[-1., -1.],
[-1., 0.],
[0., -1.],
[1., 1.],
[1., 0.],
[0., 1.]])
q = np.array([1., 1.])
b = np.array([-1., 0., 0., 1., 0.7, 0.7])
cones = [clarabel.NonnegativeConeT(3), clarabel.NonnegativeConeT(3)]
settings = clarabel.DefaultSettings()
solver = clarabel.DefaultSolver(P, q, A, b, cones, settings)
solver.solve()
solver.set_termination_callback(termination_callback)
solver.solve()
solver.unset_termination_callback()
solver.solve()
counter = [-1]
def termination_callback_with_state(info: clarabel.DefaultInfo) -> bool:
counter[0] += 1
print(f"Iteration {info.iterations}: Counter = {counter[0]}")
if counter[0] >= 3:
return True
return False
solver = clarabel.DefaultSolver(P, q, A, b, cones, settings)
solver.solve()
solver.set_termination_callback(termination_callback_with_state)
solver.solve()
solver.unset_termination_callback()
solver.solve()