+ex function::expl_derivative(const symbol & s) const // explicit differentiation
+{
+ GINAC_ASSERT(serial<registered_functions().size());
+ const function_options &opt = registered_functions()[serial];
+
+ // No explicit derivative defined? Then this function shall not be called!
+ if (opt.expl_derivative_f == NULL)
+ throw(std::logic_error("function::expl_derivative(): explicit derivation is called, but no such function defined"));
+
+ current_serial = serial;
+ if (opt.expl_derivative_use_exvector_args)
+ return ((expl_derivative_funcp_exvector)(opt.expl_derivative_f))(seq, s);
+ switch (opt.nparams) {
+ // the following lines have been generated for max. @maxargs@ parameters
++++ for N in range(1, maxargs + 1):
+ case @N@:
+ return ((expl_derivative_funcp_@N@)(opt.expl_derivative_f))(@seq('seq[%(n)d]', N, 0)@, s);
+---
+ // end of generated lines
+ }
+}
+