- // No derivative defined? Then return abstract derivative object
- if (opt.derivative_f == NULL)
- return fderivative(serial, diff_param, seq);
+ if (opt.derivative_f) {
+ // Invoke the defined derivative function.
+ current_serial = serial;
+ if (opt.derivative_use_exvector_args)
+ return ((derivative_funcp_exvector)(opt.derivative_f))(seq, diff_param);
+ switch (opt.nparams) {
+ // the following lines have been generated for max. @maxargs@ parameters
++++ for N in range(1, maxargs + 1):
+ case @N@:
+ return ((derivative_funcp_@N@)(opt.derivative_f))(@seq('seq[%(n)d]', N, 0)@, diff_param);
+---
+ // end of generated lines
+ }
+ }
+ // No derivative defined? Fall back to abstract derivative object.
+ return fderivative(serial, diff_param, seq);
+}