import pdb
from casadi import *
class MyCallback(Callback):
def __init__(self,name,N,opts = {}):
Callback.__init__(self)
self.N = N
self.construct(name,opts)
def get_n_in(self):
return 1
def get_n_out(self):
return 2
def get_sparsity_in(self,n):
return Sparsity.dense((self.N,1))
def get_sparsity_out(self,n):
return Sparsity.dense((self.N//2,1))
def has_jacobian(self):
return True
def eval(self,arg):
x = arg[0];
y = x[0:self.N//2]
z = x[self.N//2:self.N]
return y,z
def get_jacobian(self,*args):
x = SX.sym('x',self.N)
y = SX.sym('y',self.N//2)
z = SX.sym('z',self.N//2)
I = SX.eye(self.N//2)
Z = SX((self.N//2,self.N//2))
jac = Function("jac_y",[x,y,z],[horzcat(I,Z),horzcat(Z,I)])
#pdb.set_trace()
return jac
x = DM([1,2,3,4])
print("x = ",x)
F = MyCallback("F",4)
print(F)
y,z = F(x)
print("y = ",y,"; z = ",z)
Fjac = F.jacobian()
print(Fjac)