FuncDesigner is a computer algebra system (CAS) with licensed unde the BSD license and and written in Python + NumPy, that makes it cross-platform (Linux, Windows, Mac OS etc). It enhances RAD abilities of Python language for developing scientific software, especially for numerical optimization and solving systems of non-linear equations.Key feature of the framework is automatic differentiation (AD) (not to be confused with Numerical differentiation via finite-differences derivatives approximation and symbolic differentiation provided by Maxima, SymPy etc). BTW, commercial tool TOMLAB / MAD for automatic differentiation costs over 4000$.See FuncDesigner AD usageExample:from FuncDesigner import *a, b, c = oovars(\'a\', \'b\', \'c\')f1, f2 = sin(a) + cos(b) - log2(c) + sqrt(b), sum(c) + c * cosh(b) / arctan(a) + c[0] * c[1] + c[-1] / (a * c.size)f3 = f1*f2 + 2*a + sin(b) * (1+2*c.size + 3*f2.size)f = 2*a*b*c + f1*f2 + f3 + dot(a+c, b+c)point = {a:1, b:2, c:[3, 4, 5]} # however, you\'d better use numpy arrays instead of Python listsprint(f(point))print(f.D(point))print(f.D(point, a))print(f.D(point, [b]))print(f.D(point, fixedVars = [a, c]))Expected output:[ 140.9337138 110.16255336 80.67870244]{a: array([ 69.75779959, 88.89020412, 109.93551537]), b: array([-23.10565554, -39.41138045, -59.08378522]), c: array([[ 6.19249888, 38.261221 , 38.261221 ], [ 29.68377935, -0.18961959, 29.68377935], [ 23.03059873, 23.03059873, -6.22406763]])}[ 69.75779959 88.89020412 109.93551537]{b: array([-23.10565554, -39.41138045, -59.08378522])}{b: array([-23.10565554, -39.41138045, -59.08378522])} * You can use \"for\" cycle in FuncDesigner codeExample:from FuncDesigner import *a, b, c = oovars(\'a\', \'b\', \'c\')f1, f2 = sin(a) + cos(b) - log2(c) + sqrt(b), sum(c) + c * cosh(b) / arctan(a) + c[0] * c[1] + c[-1] / (a * c.size)f3 = f1*f2 + 2*a + sin(b) * (1+2*c.size + 3*f2.size)F = sin(f2)*f3 + 1M = 15for i in range(M): F = 0.5*F + 0.4*f3*cos(f1+2*f2)point = {a:1, b:2, c:[3, 4, 5]} # however, you\'d better use numpy arrays instead of Python listsprint(F(point))print(F.D(point))print(F.D(point, a))print(F.D(point, [b]))print(F.D(point, fixedVars = [a, c]))[ 4.63468686 0.30782902 1.21725266]{a: array([-436.83015952, 204.25331181, 186.38788436]), b: array([ 562.63390316, -273.23484496, -256.32464645]), c: array([[ 395.96975635, 167.24928464, 55.74976155], [ -74.80518167, -129.34496329, -19.94804845], [ -57.42472654, -45.93978123, -66.30049589]])}[-436.83015952 204.25331181 186.38788436]{b: array([ 562.63390316, -273.23484496, -256.32464645])}{b: array([ 562.63390316, -273.23484496, -256.32464645])} * If some your functions had been written on other languages (C, Fortran, etc), or are beyond FuncDesigner AD capabilities due to any other reason (has \"for\"/\"while\" loops, routines for solving systems of nonlinear, mb differential equations etc), you can define your own oofun with wrapper around the function, and the missing derivatives will be covered up by finite-differences derivatives approximation via DerApproximator. * FuncDesigner as well as DerApproximator was excluded from OpenOpt framework as independent Python module. OpenOpt can optimize FuncDesigner models with no needs to provide 1st derivatives.Example:from FuncDesigner import *from openopt import NLPa, b, c = oovars(\'a\', \'b\', \'c\')f = sum(a*[1, 2])**2+b**2+c**2startPoint = {a:[100, 12], b:2, c:40} # however, you\'d better use numpy arrays instead of Python listsp = NLP(f, startPoint)p.constraints = [(2*c+a-10)**2 [ 7.97999836, 7.8552538 ], a 1.01, ((b + c * log10(a).sum() - 1) ** 2).eq(0)]r = p.solve(\'ralg\')print r.xfExpected output:...objFunValue: 717.75631 (feasible, max constraint = 7.44605e-07){a: array([ 8.99999792, 8.87525277]), b: array([-1.01999971]), c: array([ 1.0613562])}Requirements: