class derivative(Callback):
#...I don't paste def init etc. for convenient reasons...
def eval(self, arg):
f = 2*arg[0]
return [f]
class example(Callback):
def eval(self, arg):
f = arg[0]**2
return [f]
example = example("example")
derivative= derivative("derivative",{"derivative_of":example})/casadi/core/function_internal.cpp:2304: Assertion "has_derivative()" failed:
Derivatives cannot be calculated for example
class example_der(Callback):
def has_forward(self,nfwd): return True
def get_forward(self, name, nfwd, inames, onames,opt):
opt={}
return Function("derivative",[arg],[2*arg[0]])
def eval(self, arg):
f = arg[0]**2
return [f]
der = example_der("der",{"enable_forward": True}) #enable forward not necessary if has_forward True alrdy I think
.../casadi/core/callback_internal.cpp:124: Error calling "get_forward" for object der:
.../casadi/build/swig/casadiPYTHON_wrap.cxx:3757: name 'arg' is not defined
test = 3
f = example_fwd("f")
x = MX.sym("x",1)
J = Function('J',[x],[jacobian(f(x),x)])
print(J(vertcat(3)))L = example(variable)class example(Callback):
def __init__(self, name, opts={}):
Callback.__init__(self)
self.construct(name, opts)
# Number of inputs and outputs
def get_n_in(self): return 1
def get_n_out(self): return 1
def init(self):
print('initializing object')
def get_sparsity_in(self,i):
return Sparsity.dense(1,1)
def get_sparsity_out(self,i):
return Sparsity.dense(1,1)
def get_forward(self,arg): #somehow integrate the derivative?!
return self.fwd_callback
def eval(self, arg):
f = arg[0]**2
return [f]
class example_fwd(example):
def has_forward(self,nfwd):
return nfwd==1
def get_forward(self,nfwd,name,inames,onames,opts):
class ForwardFun(Callback):
def __init__(self, opts={}):
Callback.__init__(self)
self.construct(name, opts)
def get_n_in(self): return 3
def get_n_out(self): return 1
def get_sparsity_in(self,i):
return Sparsity.dense(1,1)
def get_sparsity_out(self,i):
# Forward sensitivity
return Sparsity.dense(1,1)
# Evaluate numerically
def eval(self, arg):
return [2*arg[0]]
self.fwd_callback = ForwardFun()
return self.fwd_callbackx = MX.sym("x",1)
f = example_fwd("f")
options = {"ipopt":{"hessian_approximation":"limited-memory"}}
solver = nlpsol("solver","ipopt",{"x":x,"f":f(x)},options)
solver(x0=2){"derivative_of":}get_forwardAssertion "has_derivative()" failed:
Derivatives cannot be calculated for example