currently there are only 2 calculators, static and dynamic, and they are hardcoded into calculations class. How should one implement a non-linear solver? most of the static and dynamic code is boilerplate, it just loops over indices and formulas - can it be abstracted to allow a different implementation of the formula calling method?
retval = formula(*args, **kwargs)
For example in the case where the formula's attribute islinear is False can we call a non-linear solver specified by the simulation?
retval = calculator.calc(formula, args, kwargs, other-parameters?)
or whatever, not sure exactly how this would work