diff --git a/Fit/Kernel/MinimizerFactory.cpp b/Fit/Kernel/MinimizerFactory.cpp index b0094e6b5551a2e4e047ed8bb485c60d79a1b6fc..9da3eae591cce7075fc390aba140347a572ccce1 100644 --- a/Fit/Kernel/MinimizerFactory.cpp +++ b/Fit/Kernel/MinimizerFactory.cpp @@ -23,6 +23,9 @@ #include "MinimizerCatalogue.h" #include <sstream> #include <iostream> +#include <boost/format.hpp> +#include <memory> +#include <iomanip> IMinimizer* MinimizerFactory::createMinimizer(const std::string& minimizerName, const std::string& algorithmType, @@ -76,11 +79,56 @@ void MinimizerFactory::printCatalogue() std::cout << catalogueToString() << std::endl; } +//! Returns multi-line string representing catalogue content: minimizer names and list of their +//! algorithms. + std::string MinimizerFactory::catalogueToString() { return catalogue().toString(); } +//! Returns multi-line string representing detailed catalogue content: +//! minimizer names, list of their algorithms and description, list of minimizer options. + +std::string MinimizerFactory::catalogueDetailsToString() +{ + const int text_width = 80; + std::ostringstream result; + const std::string fmt("%-20s| %-65s\n"); + + for (const auto& minimizerName : catalogue().minimizerNames()) { + // general info + const MinimizerInfo& info = catalogue().minimizerInfo(minimizerName); + result << std::string(text_width, '-') << "\n"; + result << boost::format(fmt) % info.name() % info.description(); + result << std::string(text_width, '-') << "\n"; + + // algorithm names and description + result << "\nAlgorithm names\n"; + auto algorithmNames = info.algorithmNames(); + auto algorithmDescription = info.algorithmDescriptions(); + for (size_t i=0; i<algorithmNames.size(); ++i) + result << boost::format(fmt) % algorithmNames[i] % algorithmDescription[i]; + if (algorithmNames.size()>1) + result << boost::format(fmt) % "Default algorithm" % info.algorithmName(); + + // list of minimizer options + std::unique_ptr<IMinimizer> minimizer(createMinimizer(minimizerName)); + if (auto rootMinimizer = dynamic_cast<RootMinimizerAdapter*>(minimizer.get())) { + result << "\nOptions\n"; + for(auto option : rootMinimizer->options()) { + std::ostringstream opt; + opt << std::setw(5) << std::left << option->value() << option->description(); + result << boost::format(fmt) % option->name() % opt.str(); + } + } + + result << "\n"; + } + + return result.str(); +} + const MinimizerCatalogue& MinimizerFactory::catalogue() { static MinimizerCatalogue s_catalogue = MinimizerCatalogue(); diff --git a/Fit/Kernel/MinimizerFactory.h b/Fit/Kernel/MinimizerFactory.h index 592fbf42603510abf942dbb2cc2e5507172d3a81..1a51d955cfc39aed610afbc1ad30ecbbb4663849 100644 --- a/Fit/Kernel/MinimizerFactory.h +++ b/Fit/Kernel/MinimizerFactory.h @@ -36,6 +36,8 @@ class BA_CORE_API_ MinimizerFactory static std::string catalogueToString(); + static std::string catalogueDetailsToString(); + static const MinimizerCatalogue& catalogue(); }; diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp index 7f164679245507f3bcf5d53d4c50845428e2bb66..59c374c7deaf0731d6269631d0ab51e89c72e681 100644 --- a/auto/Wrap/libBornAgainCore_wrap.cpp +++ b/auto/Wrap/libBornAgainCore_wrap.cpp @@ -5994,7 +5994,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_ (PyObject *o, std::complex<double>* val) SWIGINTERNINLINE PyObject* -SWIG_From_std_complex_Sl_double_Sg_ (/*@SWIG:/usr/share/swig3.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/ +SWIG_From_std_complex_Sl_double_Sg_ (/*@SWIG:/home/pospelov/software/local/share/swig/3.0.8/typemaps/swigmacros.swg,104,%ifcplusplus@*/ const std::complex<double>& diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py index 822afd1b5725f5e10708d674f578ffa299c0dc9e..22a432cdb5a4c966153ce12205123afe9280afb0 100644 --- a/auto/Wrap/libBornAgainFit.py +++ b/auto/Wrap/libBornAgainFit.py @@ -2665,6 +2665,11 @@ class MinimizerCatalogue(_object): return _libBornAgainFit.MinimizerCatalogue_toString(self) + def minimizerNames(self): + """minimizerNames(MinimizerCatalogue self) -> vector_string_t""" + return _libBornAgainFit.MinimizerCatalogue_minimizerNames(self) + + def algorithmNames(self, minimizerName): """ algorithmNames(MinimizerCatalogue self, std::string const & minimizerName) -> vector_string_t @@ -2688,6 +2693,11 @@ class MinimizerCatalogue(_object): """ return _libBornAgainFit.MinimizerCatalogue_algorithmDescriptions(self, minimizerName) + + def minimizerInfo(self, minimizerName): + """minimizerInfo(MinimizerCatalogue self, std::string const & minimizerName) -> MinimizerInfo const &""" + return _libBornAgainFit.MinimizerCatalogue_minimizerInfo(self, minimizerName) + __swig_destroy__ = _libBornAgainFit.delete_MinimizerCatalogue __del__ = lambda self: None MinimizerCatalogue_swigregister = _libBornAgainFit.MinimizerCatalogue_swigregister @@ -2737,6 +2747,14 @@ class MinimizerFactory(_object): catalogueToString = staticmethod(catalogueToString) __swig_getmethods__["catalogueToString"] = lambda x: catalogueToString + def catalogueDetailsToString(): + """catalogueDetailsToString() -> std::string""" + return _libBornAgainFit.MinimizerFactory_catalogueDetailsToString() + + if _newclass: + catalogueDetailsToString = staticmethod(catalogueDetailsToString) + __swig_getmethods__["catalogueDetailsToString"] = lambda x: catalogueDetailsToString + def catalogue(): """catalogue() -> MinimizerCatalogue""" return _libBornAgainFit.MinimizerFactory_catalogue() @@ -2782,6 +2800,10 @@ def MinimizerFactory_catalogueToString(): """MinimizerFactory_catalogueToString() -> std::string""" return _libBornAgainFit.MinimizerFactory_catalogueToString() +def MinimizerFactory_catalogueDetailsToString(): + """MinimizerFactory_catalogueDetailsToString() -> std::string""" + return _libBornAgainFit.MinimizerFactory_catalogueDetailsToString() + def MinimizerFactory_catalogue(): """MinimizerFactory_catalogue() -> MinimizerCatalogue""" return _libBornAgainFit.MinimizerFactory_catalogue() diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp index 182abc5541c99f92f98a78439a7f630a79c6657c..9564c82b2ac13cd5cbe7cee8ad09e6a040f8a80c 100644 --- a/auto/Wrap/libBornAgainFit_wrap.cpp +++ b/auto/Wrap/libBornAgainFit_wrap.cpp @@ -3460,48 +3460,49 @@ namespace Swig { #define SWIGTYPE_p_IMinimizer swig_types[3] #define SWIGTYPE_p_MinimizerCatalogue swig_types[4] #define SWIGTYPE_p_MinimizerFactory swig_types[5] -#define SWIGTYPE_p_RealLimits swig_types[6] -#define SWIGTYPE_p_allocator_type swig_types[7] -#define SWIGTYPE_p_char swig_types[8] -#define SWIGTYPE_p_const_iterator swig_types[9] -#define SWIGTYPE_p_container_t swig_types[10] -#define SWIGTYPE_p_corr_matrix_t swig_types[11] -#define SWIGTYPE_p_difference_type swig_types[12] -#define SWIGTYPE_p_gradient_function_t swig_types[13] -#define SWIGTYPE_p_int swig_types[14] -#define SWIGTYPE_p_iterator swig_types[15] -#define SWIGTYPE_p_long_long swig_types[16] -#define SWIGTYPE_p_objective_function_t swig_types[17] -#define SWIGTYPE_p_p_PyObject swig_types[18] -#define SWIGTYPE_p_short swig_types[19] -#define SWIGTYPE_p_signed_char swig_types[20] -#define SWIGTYPE_p_size_type swig_types[21] -#define SWIGTYPE_p_std__allocatorT_double_t swig_types[22] -#define SWIGTYPE_p_std__allocatorT_int_t swig_types[23] -#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[24] -#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[25] -#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[26] -#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[27] -#define SWIGTYPE_p_std__invalid_argument swig_types[28] -#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[29] -#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[30] -#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[31] -#define SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator swig_types[32] -#define SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator swig_types[33] -#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[34] -#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[35] -#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[36] -#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[37] -#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[38] -#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[39] -#define SWIGTYPE_p_swig__SwigPyIterator swig_types[40] -#define SWIGTYPE_p_unsigned_char swig_types[41] -#define SWIGTYPE_p_unsigned_int swig_types[42] -#define SWIGTYPE_p_unsigned_long_long swig_types[43] -#define SWIGTYPE_p_unsigned_short swig_types[44] -#define SWIGTYPE_p_value_type swig_types[45] -static swig_type_info *swig_types[47]; -static swig_module_info swig_module = {swig_types, 46, 0, 0, 0, 0}; +#define SWIGTYPE_p_MinimizerInfo swig_types[6] +#define SWIGTYPE_p_RealLimits swig_types[7] +#define SWIGTYPE_p_allocator_type swig_types[8] +#define SWIGTYPE_p_char swig_types[9] +#define SWIGTYPE_p_const_iterator swig_types[10] +#define SWIGTYPE_p_container_t swig_types[11] +#define SWIGTYPE_p_corr_matrix_t swig_types[12] +#define SWIGTYPE_p_difference_type swig_types[13] +#define SWIGTYPE_p_gradient_function_t swig_types[14] +#define SWIGTYPE_p_int swig_types[15] +#define SWIGTYPE_p_iterator swig_types[16] +#define SWIGTYPE_p_long_long swig_types[17] +#define SWIGTYPE_p_objective_function_t swig_types[18] +#define SWIGTYPE_p_p_PyObject swig_types[19] +#define SWIGTYPE_p_short swig_types[20] +#define SWIGTYPE_p_signed_char swig_types[21] +#define SWIGTYPE_p_size_type swig_types[22] +#define SWIGTYPE_p_std__allocatorT_double_t swig_types[23] +#define SWIGTYPE_p_std__allocatorT_int_t swig_types[24] +#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[25] +#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[26] +#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[27] +#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[28] +#define SWIGTYPE_p_std__invalid_argument swig_types[29] +#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[30] +#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[31] +#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[32] +#define SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator swig_types[33] +#define SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator swig_types[34] +#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[35] +#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[36] +#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[37] +#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[38] +#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[39] +#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[40] +#define SWIGTYPE_p_swig__SwigPyIterator swig_types[41] +#define SWIGTYPE_p_unsigned_char swig_types[42] +#define SWIGTYPE_p_unsigned_int swig_types[43] +#define SWIGTYPE_p_unsigned_long_long swig_types[44] +#define SWIGTYPE_p_unsigned_short swig_types[45] +#define SWIGTYPE_p_value_type swig_types[46] +static swig_type_info *swig_types[48]; +static swig_module_info swig_module = {swig_types, 47, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) @@ -5627,7 +5628,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_ (PyObject *o, std::complex<double>* val) SWIGINTERNINLINE PyObject* -SWIG_From_std_complex_Sl_double_Sg_ (/*@SWIG:/usr/share/swig3.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/ +SWIG_From_std_complex_Sl_double_Sg_ (/*@SWIG:/home/pospelov/software/local/share/swig/3.0.8/typemaps/swigmacros.swg,104,%ifcplusplus@*/ const std::complex<double>& @@ -21911,6 +21912,28 @@ fail: } +SWIGINTERN PyObject *_wrap_MinimizerCatalogue_minimizerNames(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + std::vector< std::string,std::allocator< std::string > > result; + + if (!PyArg_ParseTuple(args,(char *)"O:MinimizerCatalogue_minimizerNames",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_minimizerNames" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); + } + arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1); + result = ((MinimizerCatalogue const *)arg1)->minimizerNames(); + resultobj = swig::from(static_cast< std::vector< std::string,std::allocator< std::string > > >(result)); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_MinimizerCatalogue_algorithmNames(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ; @@ -21987,6 +22010,44 @@ fail: } +SWIGINTERN PyObject *_wrap_MinimizerCatalogue_minimizerInfo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ; + std::string *arg2 = 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 = SWIG_OLDOBJ ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + MinimizerInfo *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MinimizerCatalogue_minimizerInfo",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_minimizerInfo" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); + } + arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1); + { + std::string *ptr = (std::string *)0; + res2 = SWIG_AsPtr_std_string(obj1, &ptr); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MinimizerCatalogue_minimizerInfo" "', argument " "2"" of type '" "std::string const &""'"); + } + if (!ptr) { + SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MinimizerCatalogue_minimizerInfo" "', argument " "2"" of type '" "std::string const &""'"); + } + arg2 = ptr; + } + result = (MinimizerInfo *) &((MinimizerCatalogue const *)arg1)->minimizerInfo((std::string const &)*arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MinimizerInfo, 0 | 0 ); + if (SWIG_IsNewObj(res2)) delete arg2; + return resultobj; +fail: + if (SWIG_IsNewObj(res2)) delete arg2; + return NULL; +} + + SWIGINTERN PyObject *_wrap_delete_MinimizerCatalogue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ; @@ -22234,6 +22295,19 @@ fail: } +SWIGINTERN PyObject *_wrap_MinimizerFactory_catalogueDetailsToString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + std::string result; + + if (!PyArg_ParseTuple(args,(char *)":MinimizerFactory_catalogueDetailsToString")) SWIG_fail; + result = MinimizerFactory::catalogueDetailsToString(); + resultobj = SWIG_From_std_string(static_cast< std::string >(result)); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_MinimizerFactory_catalogue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; MinimizerCatalogue *result = 0 ; @@ -23304,6 +23378,7 @@ static PyMethodDef SwigMethods[] = { "Returns multiline string representing catalogue content. \n" "\n" ""}, + { (char *)"MinimizerCatalogue_minimizerNames", _wrap_MinimizerCatalogue_minimizerNames, METH_VARARGS, (char *)"MinimizerCatalogue_minimizerNames(MinimizerCatalogue self) -> vector_string_t"}, { (char *)"MinimizerCatalogue_algorithmNames", _wrap_MinimizerCatalogue_algorithmNames, METH_VARARGS, (char *)"\n" "MinimizerCatalogue_algorithmNames(MinimizerCatalogue self, std::string const & minimizerName) -> vector_string_t\n" "\n" @@ -23320,6 +23395,7 @@ static PyMethodDef SwigMethods[] = { "Returns list of algorithm's descriptions for the minimizer with a given name . \n" "\n" ""}, + { (char *)"MinimizerCatalogue_minimizerInfo", _wrap_MinimizerCatalogue_minimizerInfo, METH_VARARGS, (char *)"MinimizerCatalogue_minimizerInfo(MinimizerCatalogue self, std::string const & minimizerName) -> MinimizerInfo const &"}, { (char *)"delete_MinimizerCatalogue", _wrap_delete_MinimizerCatalogue, METH_VARARGS, (char *)"delete_MinimizerCatalogue(MinimizerCatalogue self)"}, { (char *)"MinimizerCatalogue_swigregister", MinimizerCatalogue_swigregister, METH_VARARGS, NULL}, { (char *)"MinimizerFactory_createMinimizer", _wrap_MinimizerFactory_createMinimizer, METH_VARARGS, (char *)"\n" @@ -23329,6 +23405,7 @@ static PyMethodDef SwigMethods[] = { ""}, { (char *)"MinimizerFactory_printCatalogue", _wrap_MinimizerFactory_printCatalogue, METH_VARARGS, (char *)"MinimizerFactory_printCatalogue()"}, { (char *)"MinimizerFactory_catalogueToString", _wrap_MinimizerFactory_catalogueToString, METH_VARARGS, (char *)"MinimizerFactory_catalogueToString() -> std::string"}, + { (char *)"MinimizerFactory_catalogueDetailsToString", _wrap_MinimizerFactory_catalogueDetailsToString, METH_VARARGS, (char *)"MinimizerFactory_catalogueDetailsToString() -> std::string"}, { (char *)"MinimizerFactory_catalogue", _wrap_MinimizerFactory_catalogue, METH_VARARGS, (char *)"MinimizerFactory_catalogue() -> MinimizerCatalogue"}, { (char *)"new_MinimizerFactory", _wrap_new_MinimizerFactory, METH_VARARGS, (char *)"\n" "new_MinimizerFactory() -> MinimizerFactory\n" @@ -23354,6 +23431,7 @@ static swig_type_info _swigt__p_IFitParameter = {"_p_IFitParameter", "IFitParame static swig_type_info _swigt__p_IMinimizer = {"_p_IMinimizer", "IMinimizer *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_MinimizerCatalogue = {"_p_MinimizerCatalogue", "MinimizerCatalogue *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_MinimizerFactory = {"_p_MinimizerFactory", "MinimizerFactory *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_MinimizerInfo = {"_p_MinimizerInfo", "MinimizerInfo *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_RealLimits = {"_p_RealLimits", "RealLimits *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_allocator_type = {"_p_allocator_type", "allocator_type *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; @@ -23402,6 +23480,7 @@ static swig_type_info *swig_type_initial[] = { &_swigt__p_IMinimizer, &_swigt__p_MinimizerCatalogue, &_swigt__p_MinimizerFactory, + &_swigt__p_MinimizerInfo, &_swigt__p_RealLimits, &_swigt__p_allocator_type, &_swigt__p_char, @@ -23450,6 +23529,7 @@ static swig_cast_info _swigc__p_IFitParameter[] = { {&_swigt__p_IFitParameter, static swig_cast_info _swigc__p_IMinimizer[] = { {&_swigt__p_IMinimizer, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_MinimizerCatalogue[] = { {&_swigt__p_MinimizerCatalogue, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_MinimizerFactory[] = { {&_swigt__p_MinimizerFactory, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_MinimizerInfo[] = { {&_swigt__p_MinimizerInfo, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_RealLimits[] = { {&_swigt__p_RealLimits, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_allocator_type[] = { {&_swigt__p_allocator_type, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; @@ -23498,6 +23578,7 @@ static swig_cast_info *swig_cast_initial[] = { _swigc__p_IMinimizer, _swigc__p_MinimizerCatalogue, _swigc__p_MinimizerFactory, + _swigc__p_MinimizerInfo, _swigc__p_RealLimits, _swigc__p_allocator_type, _swigc__p_char,