casadi 3.6.3__cp35-none-win_amd64.whl → 3.6.5__cp35-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (897) hide show
  1. casadi/_casadi.pyd +0 -0
  2. casadi/bin/libtinyxml2.dll +0 -0
  3. casadi/blasfeo.lib +0 -0
  4. casadi/casadi-cli.exe +0 -0
  5. casadi/casadi.lib +0 -0
  6. casadi/casadi.py +415 -260
  7. casadi/cbc.exe +0 -0
  8. casadi/clp.exe +0 -0
  9. casadi/cmake/alpaqa/alpaqaConfig.cmake +24 -0
  10. casadi/cmake/alpaqa/alpaqaConfigVersion.cmake +67 -0
  11. casadi/cmake/alpaqa/alpaqaTargets-release.cmake +19 -0
  12. casadi/cmake/alpaqa/alpaqaTargets.cmake +108 -0
  13. casadi/cmake/casadi-config-version.cmake +1 -1
  14. casadi/cmake/highs/highs-config.cmake +18 -4
  15. casadi/cmake/sleqp/sleqp-config-version.cmake +67 -0
  16. casadi/cmake/sleqp/sleqp-config.cmake +1 -0
  17. casadi/cmake/sleqp/sleqp-targets-release.cmake +20 -0
  18. casadi/cmake/sleqp/sleqp-targets.cmake +94 -0
  19. casadi/cmake/trlib/trlib-config-release.cmake +19 -0
  20. casadi/cmake/trlib/trlib-config-version.cmake +59 -0
  21. casadi/cmake/trlib/trlib-config.cmake +99 -0
  22. casadi/highs.exe +0 -0
  23. casadi/highs.lib +0 -0
  24. casadi/hpipm.lib +0 -0
  25. casadi/include/alpaqa/accelerators/anderson.hpp +133 -0
  26. casadi/include/alpaqa/accelerators/internal/anderson-helpers.hpp +92 -0
  27. casadi/include/alpaqa/accelerators/internal/limited-memory-qr.hpp +295 -0
  28. casadi/include/alpaqa/accelerators/lbfgs.hpp +244 -0
  29. casadi/include/alpaqa/accelerators/steihaugcg.hpp +143 -0
  30. casadi/include/alpaqa/alpaqa.hpp +3 -0
  31. casadi/include/alpaqa/casadi/CasADiControlProblem.hpp +185 -0
  32. casadi/include/alpaqa/casadi/CasADiFunctionWrapper.hpp +104 -0
  33. casadi/include/alpaqa/casadi/CasADiProblem.hpp +102 -0
  34. casadi/include/alpaqa/casadi-loader-export.hpp +15 -0
  35. casadi/include/alpaqa/casadi-ocp-loader-export.hpp +15 -0
  36. casadi/include/alpaqa/config/config.hpp +165 -0
  37. casadi/include/alpaqa/dl/dl-problem.h +476 -0
  38. casadi/include/alpaqa/dl/dl-problem.hpp +301 -0
  39. casadi/include/alpaqa/export.h +42 -0
  40. casadi/include/alpaqa/export.hpp +30 -0
  41. casadi/include/alpaqa/implementation/accelerators/lbfgs.tpp +240 -0
  42. casadi/include/alpaqa/implementation/casadi/CasADiControlProblem.tpp +594 -0
  43. casadi/include/alpaqa/implementation/casadi/CasADiLoader-util.hpp +50 -0
  44. casadi/include/alpaqa/implementation/casadi/CasADiProblem.tpp +425 -0
  45. casadi/include/alpaqa/implementation/inner/directions/panoc/structured-lbfgs.tpp +164 -0
  46. casadi/include/alpaqa/implementation/inner/panoc-helpers.tpp +389 -0
  47. casadi/include/alpaqa/implementation/inner/panoc-ocp.tpp +798 -0
  48. casadi/include/alpaqa/implementation/inner/panoc.tpp +448 -0
  49. casadi/include/alpaqa/implementation/inner/pantr.tpp +474 -0
  50. casadi/include/alpaqa/implementation/inner/zerofpr.tpp +482 -0
  51. casadi/include/alpaqa/implementation/outer/alm.tpp +228 -0
  52. casadi/include/alpaqa/implementation/outer/internal/alm-helpers.tpp +80 -0
  53. casadi/include/alpaqa/implementation/params/params.tpp +158 -0
  54. casadi/include/alpaqa/implementation/problem/ocproblem.tpp +56 -0
  55. casadi/include/alpaqa/implementation/problem/type-erased-problem.tpp +211 -0
  56. casadi/include/alpaqa/implementation/util/io/csv.tpp +120 -0
  57. casadi/include/alpaqa/implementation/util/print.tpp +151 -0
  58. casadi/include/alpaqa/inner/directions/panoc/anderson.hpp +98 -0
  59. casadi/include/alpaqa/inner/directions/panoc/lbfgs.hpp +94 -0
  60. casadi/include/alpaqa/inner/directions/panoc/structured-lbfgs.hpp +146 -0
  61. casadi/include/alpaqa/inner/directions/panoc/structured-newton.hpp +264 -0
  62. casadi/include/alpaqa/inner/directions/panoc-direction-update.hpp +96 -0
  63. casadi/include/alpaqa/inner/directions/panoc-ocp/lqr.hpp +181 -0
  64. casadi/include/alpaqa/inner/directions/panoc-ocp/ocp-vars.hpp +492 -0
  65. casadi/include/alpaqa/inner/directions/pantr/newton-tr.hpp +192 -0
  66. casadi/include/alpaqa/inner/directions/pantr/pantr-direction.hpp +99 -0
  67. casadi/include/alpaqa/inner/inner-solve-options.hpp +30 -0
  68. casadi/include/alpaqa/inner/internal/lipschitz.hpp +27 -0
  69. casadi/include/alpaqa/inner/internal/panoc-helpers.hpp +10 -0
  70. casadi/include/alpaqa/inner/internal/panoc-stop-crit.hpp +124 -0
  71. casadi/include/alpaqa/inner/internal/solverstatus.hpp +42 -0
  72. casadi/include/alpaqa/inner/panoc-ocp.hpp +302 -0
  73. casadi/include/alpaqa/inner/panoc.hpp +274 -0
  74. casadi/include/alpaqa/inner/pantr.hpp +284 -0
  75. casadi/include/alpaqa/inner/zerofpr.hpp +274 -0
  76. casadi/include/alpaqa/ipopt/ipopt-adapter.hpp +81 -0
  77. casadi/include/alpaqa/ipopt/ipopt-enums.hpp +35 -0
  78. casadi/include/alpaqa/lbfgsb/lbfgsb-adapter.hpp +111 -0
  79. casadi/include/alpaqa/newton-tr-pantr-alm.hpp +27 -0
  80. casadi/include/alpaqa/outer/alm.hpp +190 -0
  81. casadi/include/alpaqa/outer/internal/alm-helpers.hpp +10 -0
  82. casadi/include/alpaqa/panoc-alm.hpp +27 -0
  83. casadi/include/alpaqa/panoc-anderson-alm.hpp +27 -0
  84. casadi/include/alpaqa/params/params.hpp +60 -0
  85. casadi/include/alpaqa/problem/box-constr-problem.hpp +220 -0
  86. casadi/include/alpaqa/problem/box.hpp +82 -0
  87. casadi/include/alpaqa/problem/functional-problem.hpp +73 -0
  88. casadi/include/alpaqa/problem/kkt-error.hpp +43 -0
  89. casadi/include/alpaqa/problem/ocproblem-counters.hpp +116 -0
  90. casadi/include/alpaqa/problem/ocproblem.hpp +662 -0
  91. casadi/include/alpaqa/problem/problem-counters.hpp +116 -0
  92. casadi/include/alpaqa/problem/problem-with-counters.hpp +141 -0
  93. casadi/include/alpaqa/problem/type-erased-problem.hpp +874 -0
  94. casadi/include/alpaqa/problem/unconstr-problem.hpp +37 -0
  95. casadi/include/alpaqa/structured-panoc-alm.hpp +27 -0
  96. casadi/include/alpaqa/structured-zerofpr-alm.hpp +27 -0
  97. casadi/include/alpaqa/util/alloc-check.hpp +23 -0
  98. casadi/include/alpaqa/util/atomic-stop-signal.hpp +24 -0
  99. casadi/include/alpaqa/util/check-dim.hpp +64 -0
  100. casadi/include/alpaqa/util/copyable_unique_ptr.hpp +32 -0
  101. casadi/include/alpaqa/util/demangled-typename.hpp +9 -0
  102. casadi/include/alpaqa/util/enumerate.hpp +70 -0
  103. casadi/include/alpaqa/util/float.hpp +25 -0
  104. casadi/include/alpaqa/util/index-set.hpp +97 -0
  105. casadi/include/alpaqa/util/io/csv.hpp +43 -0
  106. casadi/include/alpaqa/util/iter-adapter.hpp +68 -0
  107. casadi/include/alpaqa/util/max-history.hpp +47 -0
  108. casadi/include/alpaqa/util/noop-delete.hpp +15 -0
  109. casadi/include/alpaqa/util/not-implemented.hpp +12 -0
  110. casadi/include/alpaqa/util/print.hpp +78 -0
  111. casadi/include/alpaqa/util/quadmath/quadmath-print.hpp +20 -0
  112. casadi/include/alpaqa/util/quadmath/quadmath.hpp +137 -0
  113. casadi/include/alpaqa/util/required-method.hpp +29 -0
  114. casadi/include/alpaqa/util/ringbuffer.hpp +212 -0
  115. casadi/include/alpaqa/util/set-intersection.hpp +129 -0
  116. casadi/include/alpaqa/util/sparse-ops.hpp +164 -0
  117. casadi/include/alpaqa/util/timed.hpp +22 -0
  118. casadi/include/alpaqa/util/type-erasure.hpp +568 -0
  119. casadi/include/alpaqa/util/type-traits.hpp +58 -0
  120. casadi/include/alpaqa/zerofpr-alm.hpp +27 -0
  121. casadi/include/alpaqa/zerofpr-anderson-alm.hpp +27 -0
  122. casadi/include/alpaqa-version.h +8 -0
  123. casadi/include/casadi/casadi.i +43 -18
  124. casadi/include/casadi/config.h +8 -8
  125. casadi/include/casadi/core/calculus.hpp +1 -1
  126. casadi/include/casadi/core/code_generator.hpp +29 -1
  127. casadi/include/casadi/core/core.hpp +1 -0
  128. casadi/include/casadi/core/fmu.hpp +29 -1
  129. casadi/include/casadi/core/generic_expression.hpp +1 -1
  130. casadi/include/casadi/core/generic_type.hpp +25 -1
  131. casadi/include/casadi/core/matrix_decl.hpp +15 -0
  132. casadi/include/casadi/core/nlpsol.hpp +0 -2
  133. casadi/include/casadi/core/runtime/casadi_nlp.hpp +131 -6
  134. casadi/include/casadi/core/runtime/casadi_sqpmethod.hpp +11 -1
  135. casadi/include/casadi/core/serializing_stream.hpp +12 -0
  136. casadi/include/casadi/core/sparsity.hpp +5 -3
  137. casadi/include/casadi/core/tools.hpp +67 -0
  138. casadi/include/casadi/doc.i +1457 -825
  139. casadi/include/casadi/doc_merged.i +1089 -570
  140. casadi/include/coin/BonArraysHelpers.hpp +52 -0
  141. casadi/include/coin/BonAuxInfos.hpp +110 -0
  142. casadi/include/coin/BonBabInfos.hpp +57 -0
  143. casadi/include/coin/BonBabSetupBase.hpp +386 -0
  144. casadi/include/coin/BonBonminSetup.hpp +95 -0
  145. casadi/include/coin/BonBranchingTQP.hpp +197 -0
  146. casadi/include/coin/BonCbc.hpp +127 -0
  147. casadi/include/coin/BonCbcLpStrategy.hpp +45 -0
  148. casadi/include/coin/BonCbcNlpStrategy.hpp +98 -0
  149. casadi/include/coin/BonCbcNode.hpp +133 -0
  150. casadi/include/coin/BonChooseVariable.hpp +345 -0
  151. casadi/include/coin/BonCurvBranchingSolver.hpp +77 -0
  152. casadi/include/coin/BonCutStrengthener.hpp +244 -0
  153. casadi/include/coin/BonDiver.hpp +424 -0
  154. casadi/include/coin/BonDummyHeuristic.hpp +53 -0
  155. casadi/include/coin/BonDummyPump.hpp +43 -0
  156. casadi/include/coin/BonEcpCuts.hpp +97 -0
  157. casadi/include/coin/BonExitCodes.hpp +12 -0
  158. casadi/include/coin/BonFixAndSolveHeuristic.hpp +43 -0
  159. casadi/include/coin/BonGuessHeuristic.hpp +46 -0
  160. casadi/include/coin/BonHeuristicDive.hpp +88 -0
  161. casadi/include/coin/BonHeuristicDiveFractional.hpp +67 -0
  162. casadi/include/coin/BonHeuristicDiveMIP.hpp +83 -0
  163. casadi/include/coin/BonHeuristicDiveMIPFractional.hpp +67 -0
  164. casadi/include/coin/BonHeuristicDiveMIPVectorLength.hpp +74 -0
  165. casadi/include/coin/BonHeuristicDiveVectorLength.hpp +74 -0
  166. casadi/include/coin/BonHeuristicFPump.hpp +111 -0
  167. casadi/include/coin/BonHeuristicLocalBranching.hpp +59 -0
  168. casadi/include/coin/BonHeuristicRINS.hpp +55 -0
  169. casadi/include/coin/BonIpoptInteriorWarmStarter.hpp +103 -0
  170. casadi/include/coin/BonIpoptSolver.hpp +188 -0
  171. casadi/include/coin/BonIpoptWarmStart.hpp +148 -0
  172. casadi/include/coin/BonLinearCutsGenerator.hpp +75 -0
  173. casadi/include/coin/BonLocalSolverBasedHeuristic.hpp +102 -0
  174. casadi/include/coin/BonLpBranchingSolver.hpp +80 -0
  175. casadi/include/coin/BonMilpRounding.hpp +74 -0
  176. casadi/include/coin/BonOACutGenerator2.hpp +56 -0
  177. casadi/include/coin/BonOAMessages.hpp +44 -0
  178. casadi/include/coin/BonOaDecBase.hpp +297 -0
  179. casadi/include/coin/BonOaFeasChecker.hpp +73 -0
  180. casadi/include/coin/BonOaNlpOptim.hpp +116 -0
  181. casadi/include/coin/BonOsiTMINLPInterface.hpp +1342 -0
  182. casadi/include/coin/BonOuterApprox.hpp +123 -0
  183. casadi/include/coin/BonPseudoCosts.hpp +91 -0
  184. casadi/include/coin/BonPumpForMinlp.hpp +45 -0
  185. casadi/include/coin/BonQuadCut.hpp +217 -0
  186. casadi/include/coin/BonQuadRow.hpp +122 -0
  187. casadi/include/coin/BonRegisteredOptions.hpp +225 -0
  188. casadi/include/coin/BonStrongBranchingSolver.hpp +69 -0
  189. casadi/include/coin/BonSubMipSolver.hpp +143 -0
  190. casadi/include/coin/BonTMINLP.hpp +420 -0
  191. casadi/include/coin/BonTMINLP2OsiLP.hpp +164 -0
  192. casadi/include/coin/BonTMINLP2Quad.hpp +191 -0
  193. casadi/include/coin/BonTMINLP2TNLP.hpp +509 -0
  194. casadi/include/coin/BonTMINLPLinObj.hpp +216 -0
  195. casadi/include/coin/BonTMatrix.hpp +167 -0
  196. casadi/include/coin/BonTNLP2FPNLP.hpp +264 -0
  197. casadi/include/coin/BonTNLPSolver.hpp +241 -0
  198. casadi/include/coin/BonTypes.hpp +95 -0
  199. casadi/include/coin/BonminConfig.h +19 -0
  200. casadi/include/coin/CbcBranchActual.hpp +26 -0
  201. casadi/include/coin/CbcBranchAllDifferent.hpp +61 -0
  202. casadi/include/coin/CbcBranchBase.hpp +79 -0
  203. casadi/include/coin/CbcBranchCut.hpp +182 -0
  204. casadi/include/coin/CbcBranchDecision.hpp +135 -0
  205. casadi/include/coin/CbcBranchDefaultDecision.hpp +101 -0
  206. casadi/include/coin/CbcBranchDynamic.hpp +210 -0
  207. casadi/include/coin/CbcBranchLotsize.hpp +249 -0
  208. casadi/include/coin/CbcBranchToFixLots.hpp +94 -0
  209. casadi/include/coin/CbcBranchingObject.hpp +245 -0
  210. casadi/include/coin/CbcClique.hpp +309 -0
  211. casadi/include/coin/CbcCompare.hpp +46 -0
  212. casadi/include/coin/CbcCompareActual.hpp +16 -0
  213. casadi/include/coin/CbcCompareBase.hpp +155 -0
  214. casadi/include/coin/CbcCompareDefault.hpp +129 -0
  215. casadi/include/coin/CbcCompareDepth.hpp +48 -0
  216. casadi/include/coin/CbcCompareEstimate.hpp +48 -0
  217. casadi/include/coin/CbcCompareObjective.hpp +50 -0
  218. casadi/include/coin/CbcConfig.h +18 -0
  219. casadi/include/coin/CbcConsequence.hpp +50 -0
  220. casadi/include/coin/CbcCountRowCut.hpp +176 -0
  221. casadi/include/coin/CbcCutGenerator.hpp +550 -0
  222. casadi/include/coin/CbcCutModifier.hpp +59 -0
  223. casadi/include/coin/CbcCutSubsetModifier.hpp +69 -0
  224. casadi/include/coin/CbcDummyBranchingObject.hpp +83 -0
  225. casadi/include/coin/CbcEventHandler.hpp +250 -0
  226. casadi/include/coin/CbcFathom.hpp +136 -0
  227. casadi/include/coin/CbcFathomDynamicProgramming.hpp +177 -0
  228. casadi/include/coin/CbcFeasibilityBase.hpp +60 -0
  229. casadi/include/coin/CbcFixVariable.hpp +68 -0
  230. casadi/include/coin/CbcFollowOn.hpp +207 -0
  231. casadi/include/coin/CbcFullNodeInfo.hpp +171 -0
  232. casadi/include/coin/CbcGeneral.hpp +60 -0
  233. casadi/include/coin/CbcGeneralDepth.hpp +289 -0
  234. casadi/include/coin/CbcHeuristic.hpp +735 -0
  235. casadi/include/coin/CbcHeuristicDINS.hpp +98 -0
  236. casadi/include/coin/CbcHeuristicDW.hpp +374 -0
  237. casadi/include/coin/CbcHeuristicDive.hpp +198 -0
  238. casadi/include/coin/CbcHeuristicDiveCoefficient.hpp +52 -0
  239. casadi/include/coin/CbcHeuristicDiveFractional.hpp +52 -0
  240. casadi/include/coin/CbcHeuristicDiveGuided.hpp +55 -0
  241. casadi/include/coin/CbcHeuristicDiveLineSearch.hpp +52 -0
  242. casadi/include/coin/CbcHeuristicDivePseudoCost.hpp +60 -0
  243. casadi/include/coin/CbcHeuristicDiveVectorLength.hpp +52 -0
  244. casadi/include/coin/CbcHeuristicFPump.hpp +375 -0
  245. casadi/include/coin/CbcHeuristicGreedy.hpp +289 -0
  246. casadi/include/coin/CbcHeuristicLocal.hpp +276 -0
  247. casadi/include/coin/CbcHeuristicPivotAndFix.hpp +58 -0
  248. casadi/include/coin/CbcHeuristicRENS.hpp +79 -0
  249. casadi/include/coin/CbcHeuristicRINS.hpp +106 -0
  250. casadi/include/coin/CbcHeuristicRandRound.hpp +58 -0
  251. casadi/include/coin/CbcHeuristicVND.hpp +95 -0
  252. casadi/include/coin/CbcLinked.hpp +1443 -0
  253. casadi/include/coin/CbcMessage.hpp +94 -0
  254. casadi/include/coin/CbcMipStartIO.hpp +29 -0
  255. casadi/include/coin/CbcModel.hpp +3296 -0
  256. casadi/include/coin/CbcNWay.hpp +171 -0
  257. casadi/include/coin/CbcNode.hpp +380 -0
  258. casadi/include/coin/CbcNodeInfo.hpp +377 -0
  259. casadi/include/coin/CbcObject.hpp +288 -0
  260. casadi/include/coin/CbcObjectUpdateData.hpp +63 -0
  261. casadi/include/coin/CbcOrClpParam.cpp +4321 -0
  262. casadi/include/coin/CbcOrClpParam.hpp +585 -0
  263. casadi/include/coin/CbcParam.hpp +338 -0
  264. casadi/include/coin/CbcPartialNodeInfo.hpp +116 -0
  265. casadi/include/coin/CbcSOS.hpp +290 -0
  266. casadi/include/coin/CbcSimpleInteger.hpp +299 -0
  267. casadi/include/coin/CbcSimpleIntegerDynamicPseudoCost.hpp +619 -0
  268. casadi/include/coin/CbcSimpleIntegerPseudoCost.hpp +122 -0
  269. casadi/include/coin/CbcSolver.hpp +460 -0
  270. casadi/include/coin/CbcStrategy.hpp +269 -0
  271. casadi/include/coin/CbcSubProblem.hpp +84 -0
  272. casadi/include/coin/CbcTree.hpp +493 -0
  273. casadi/include/coin/CbcTreeLocal.hpp +393 -0
  274. casadi/include/coin/Cbc_C_Interface.h +904 -0
  275. casadi/include/coin/Cgl012cut.hpp +464 -0
  276. casadi/include/coin/CglAllDifferent.hpp +115 -0
  277. casadi/include/coin/CglClique.hpp +312 -0
  278. casadi/include/coin/CglConfig.h +19 -0
  279. casadi/include/coin/CglCutGenerator.hpp +133 -0
  280. casadi/include/coin/CglDuplicateRow.hpp +189 -0
  281. casadi/include/coin/CglFlowCover.hpp +371 -0
  282. casadi/include/coin/CglGMI.hpp +364 -0
  283. casadi/include/coin/CglGMIParam.hpp +313 -0
  284. casadi/include/coin/CglGomory.hpp +204 -0
  285. casadi/include/coin/CglKnapsackCover.hpp +310 -0
  286. casadi/include/coin/CglLandP.hpp +306 -0
  287. casadi/include/coin/CglLandPValidator.hpp +130 -0
  288. casadi/include/coin/CglLiftAndProject.hpp +104 -0
  289. casadi/include/coin/CglMessage.hpp +49 -0
  290. casadi/include/coin/CglMixedIntegerRounding.hpp +429 -0
  291. casadi/include/coin/CglMixedIntegerRounding2.hpp +427 -0
  292. casadi/include/coin/CglOddHole.hpp +160 -0
  293. casadi/include/coin/CglParam.hpp +93 -0
  294. casadi/include/coin/CglPreProcess.hpp +600 -0
  295. casadi/include/coin/CglProbing.hpp +543 -0
  296. casadi/include/coin/CglRedSplit.hpp +448 -0
  297. casadi/include/coin/CglRedSplit2.hpp +494 -0
  298. casadi/include/coin/CglRedSplit2Param.hpp +495 -0
  299. casadi/include/coin/CglRedSplitParam.hpp +272 -0
  300. casadi/include/coin/CglResidualCapacity.hpp +240 -0
  301. casadi/include/coin/CglSimpleRounding.hpp +174 -0
  302. casadi/include/coin/CglStored.hpp +140 -0
  303. casadi/include/coin/CglTreeInfo.hpp +216 -0
  304. casadi/include/coin/CglTwomir.hpp +562 -0
  305. casadi/include/coin/CglZeroHalf.hpp +133 -0
  306. casadi/include/coin/ClpAmplObjective.hpp +113 -0
  307. casadi/include/coin/ClpCholeskyBase.hpp +321 -0
  308. casadi/include/coin/ClpCholeskyDense.hpp +157 -0
  309. casadi/include/coin/ClpCholeskyMumps.hpp +65 -0
  310. casadi/include/coin/ClpCholeskyPardiso.hpp +67 -0
  311. casadi/include/coin/ClpConfig.h +17 -0
  312. casadi/include/coin/ClpConstraint.hpp +129 -0
  313. casadi/include/coin/ClpConstraintAmpl.hpp +109 -0
  314. casadi/include/coin/ClpConstraintLinear.hpp +113 -0
  315. casadi/include/coin/ClpConstraintQuadratic.hpp +123 -0
  316. casadi/include/coin/ClpDualRowDantzig.hpp +72 -0
  317. casadi/include/coin/ClpDualRowPivot.hpp +136 -0
  318. casadi/include/coin/ClpDualRowSteepest.hpp +160 -0
  319. casadi/include/coin/ClpDummyMatrix.hpp +186 -0
  320. casadi/include/coin/ClpDynamicExampleMatrix.hpp +199 -0
  321. casadi/include/coin/ClpDynamicMatrix.hpp +420 -0
  322. casadi/include/coin/ClpEventHandler.hpp +193 -0
  323. casadi/include/coin/ClpFactorization.hpp +556 -0
  324. casadi/include/coin/ClpGubDynamicMatrix.hpp +270 -0
  325. casadi/include/coin/ClpGubMatrix.hpp +373 -0
  326. casadi/include/coin/ClpInterior.hpp +622 -0
  327. casadi/include/coin/ClpLinearObjective.hpp +104 -0
  328. casadi/include/coin/ClpMatrixBase.hpp +561 -0
  329. casadi/include/coin/ClpMessage.hpp +131 -0
  330. casadi/include/coin/ClpModel.hpp +1442 -0
  331. casadi/include/coin/ClpNetworkMatrix.hpp +235 -0
  332. casadi/include/coin/ClpNode.hpp +364 -0
  333. casadi/include/coin/ClpNonLinearCost.hpp +432 -0
  334. casadi/include/coin/ClpObjective.hpp +142 -0
  335. casadi/include/coin/ClpPEDualRowDantzig.hpp +84 -0
  336. casadi/include/coin/ClpPEDualRowSteepest.hpp +100 -0
  337. casadi/include/coin/ClpPEPrimalColumnDantzig.hpp +71 -0
  338. casadi/include/coin/ClpPEPrimalColumnSteepest.hpp +107 -0
  339. casadi/include/coin/ClpPESimplex.hpp +231 -0
  340. casadi/include/coin/ClpPackedMatrix.hpp +778 -0
  341. casadi/include/coin/ClpParameters.hpp +132 -0
  342. casadi/include/coin/ClpPdcoBase.hpp +110 -0
  343. casadi/include/coin/ClpPlusMinusOneMatrix.hpp +565 -0
  344. casadi/include/coin/ClpPresolve.hpp +379 -0
  345. casadi/include/coin/ClpPrimalColumnDantzig.hpp +74 -0
  346. casadi/include/coin/ClpPrimalColumnPivot.hpp +163 -0
  347. casadi/include/coin/ClpPrimalColumnSteepest.hpp +281 -0
  348. casadi/include/coin/ClpQuadraticObjective.hpp +161 -0
  349. casadi/include/coin/ClpSimplex.hpp +2137 -0
  350. casadi/include/coin/ClpSimplexDual.hpp +304 -0
  351. casadi/include/coin/ClpSimplexNonlinear.hpp +117 -0
  352. casadi/include/coin/ClpSimplexOther.hpp +282 -0
  353. casadi/include/coin/ClpSimplexPrimal.hpp +244 -0
  354. casadi/include/coin/ClpSolve.hpp +505 -0
  355. casadi/include/coin/Clp_C_Interface.h +554 -0
  356. casadi/include/coin/CoinAlloc.hpp +179 -0
  357. casadi/include/coin/CoinBuild.hpp +159 -0
  358. casadi/include/coin/CoinDenseFactorization.hpp +452 -0
  359. casadi/include/coin/CoinDenseVector.hpp +401 -0
  360. casadi/include/coin/CoinDistance.hpp +51 -0
  361. casadi/include/coin/CoinError.hpp +274 -0
  362. casadi/include/coin/CoinFactorization.hpp +2178 -0
  363. casadi/include/coin/CoinFileIO.hpp +185 -0
  364. casadi/include/coin/CoinFinite.hpp +37 -0
  365. casadi/include/coin/CoinFloatEqual.hpp +204 -0
  366. casadi/include/coin/CoinHelperFunctions.hpp +1270 -0
  367. casadi/include/coin/CoinIndexedVector.hpp +1437 -0
  368. casadi/include/coin/CoinLpIO.hpp +836 -0
  369. casadi/include/coin/CoinMessage.hpp +95 -0
  370. casadi/include/coin/CoinMessageHandler.hpp +717 -0
  371. casadi/include/coin/CoinModel.hpp +1214 -0
  372. casadi/include/coin/CoinModelUseful.hpp +518 -0
  373. casadi/include/coin/CoinMpsIO.hpp +1142 -0
  374. casadi/include/coin/CoinOslFactorization.hpp +287 -0
  375. casadi/include/coin/CoinPackedMatrix.hpp +956 -0
  376. casadi/include/coin/CoinPackedVector.hpp +670 -0
  377. casadi/include/coin/CoinPackedVectorBase.hpp +274 -0
  378. casadi/include/coin/CoinParam.hpp +644 -0
  379. casadi/include/coin/CoinPragma.hpp +29 -0
  380. casadi/include/coin/CoinPresolveDoubleton.hpp +76 -0
  381. casadi/include/coin/CoinPresolveDual.hpp +84 -0
  382. casadi/include/coin/CoinPresolveDupcol.hpp +259 -0
  383. casadi/include/coin/CoinPresolveEmpty.hpp +120 -0
  384. casadi/include/coin/CoinPresolveFixed.hpp +185 -0
  385. casadi/include/coin/CoinPresolveForcing.hpp +69 -0
  386. casadi/include/coin/CoinPresolveImpliedFree.hpp +66 -0
  387. casadi/include/coin/CoinPresolveIsolated.hpp +59 -0
  388. casadi/include/coin/CoinPresolveMatrix.hpp +1996 -0
  389. casadi/include/coin/CoinPresolveMonitor.hpp +105 -0
  390. casadi/include/coin/CoinPresolvePsdebug.hpp +169 -0
  391. casadi/include/coin/CoinPresolveSingleton.hpp +115 -0
  392. casadi/include/coin/CoinPresolveSubst.hpp +103 -0
  393. casadi/include/coin/CoinPresolveTighten.hpp +58 -0
  394. casadi/include/coin/CoinPresolveTripleton.hpp +69 -0
  395. casadi/include/coin/CoinPresolveUseless.hpp +63 -0
  396. casadi/include/coin/CoinPresolveZeros.hpp +65 -0
  397. casadi/include/coin/CoinRational.hpp +43 -0
  398. casadi/include/coin/CoinSearchTree.hpp +523 -0
  399. casadi/include/coin/CoinShallowPackedVector.hpp +149 -0
  400. casadi/include/coin/CoinSignal.hpp +127 -0
  401. casadi/include/coin/CoinSimpFactorization.hpp +432 -0
  402. casadi/include/coin/CoinSmartPtr.hpp +548 -0
  403. casadi/include/coin/CoinSnapshot.hpp +572 -0
  404. casadi/include/coin/CoinSort.hpp +753 -0
  405. casadi/include/coin/CoinStructuredModel.hpp +270 -0
  406. casadi/include/coin/CoinTime.hpp +350 -0
  407. casadi/include/coin/CoinTypes.hpp +67 -0
  408. casadi/include/coin/CoinUtility.hpp +26 -0
  409. casadi/include/coin/CoinUtilsConfig.h +34 -0
  410. casadi/include/coin/CoinWarmStart.hpp +56 -0
  411. casadi/include/coin/CoinWarmStartBasis.hpp +468 -0
  412. casadi/include/coin/CoinWarmStartDual.hpp +180 -0
  413. casadi/include/coin/CoinWarmStartPrimalDual.hpp +233 -0
  414. casadi/include/coin/CoinWarmStartVector.hpp +523 -0
  415. casadi/include/coin/Coin_C_defines.h +149 -0
  416. casadi/include/coin/Idiot.hpp +327 -0
  417. casadi/include/coin/OsiAuxInfo.hpp +261 -0
  418. casadi/include/coin/OsiBranchingObject.hpp +1097 -0
  419. casadi/include/coin/OsiCbcSolverInterface.hpp +791 -0
  420. casadi/include/coin/OsiChooseVariable.hpp +645 -0
  421. casadi/include/coin/OsiClpSolverInterface.hpp +1604 -0
  422. casadi/include/coin/OsiColCut.hpp +322 -0
  423. casadi/include/coin/OsiCollections.hpp +34 -0
  424. casadi/include/coin/OsiConfig.h +19 -0
  425. casadi/include/coin/OsiCut.hpp +251 -0
  426. casadi/include/coin/OsiCuts.hpp +505 -0
  427. casadi/include/coin/OsiPresolve.hpp +272 -0
  428. casadi/include/coin/OsiRowCut.hpp +345 -0
  429. casadi/include/coin/OsiRowCutDebugger.hpp +190 -0
  430. casadi/include/coin/OsiSolverBranch.hpp +169 -0
  431. casadi/include/coin/OsiSolverInterface.hpp +2221 -0
  432. casadi/include/coin/OsiSolverParameters.hpp +144 -0
  433. casadi/include/coin/OsiUnitTests.hpp +390 -0
  434. casadi/include/coin-or/IpAlgBuilder.hpp +417 -0
  435. casadi/include/coin-or/IpAlgStrategy.hpp +201 -0
  436. casadi/include/coin-or/IpAlgTypes.hpp +64 -0
  437. casadi/include/coin-or/IpAugSystemSolver.hpp +212 -0
  438. casadi/include/coin-or/IpBlas.hpp +426 -0
  439. casadi/include/coin-or/IpCachedResults.hpp +897 -0
  440. casadi/include/coin-or/IpCompoundMatrix.hpp +423 -0
  441. casadi/include/coin-or/IpCompoundSymMatrix.hpp +348 -0
  442. casadi/include/coin-or/IpCompoundVector.hpp +395 -0
  443. casadi/include/coin-or/IpConvCheck.hpp +97 -0
  444. casadi/include/coin-or/IpDebug.hpp +167 -0
  445. casadi/include/coin-or/IpDenseVector.hpp +626 -0
  446. casadi/include/coin-or/IpDiagMatrix.hpp +158 -0
  447. casadi/include/coin-or/IpEqMultCalculator.hpp +76 -0
  448. casadi/include/coin-or/IpException.hpp +156 -0
  449. casadi/include/coin-or/IpExpansionMatrix.hpp +245 -0
  450. casadi/include/coin-or/IpGenTMatrix.hpp +290 -0
  451. casadi/include/coin-or/IpHessianUpdater.hpp +73 -0
  452. casadi/include/coin-or/IpIdentityMatrix.hpp +167 -0
  453. casadi/include/coin-or/IpIpoptAlg.hpp +257 -0
  454. casadi/include/coin-or/IpIpoptApplication.hpp +367 -0
  455. casadi/include/coin-or/IpIpoptCalculatedQuantities.hpp +1009 -0
  456. casadi/include/coin-or/IpIpoptData.hpp +966 -0
  457. casadi/include/coin-or/IpIpoptNLP.hpp +328 -0
  458. casadi/include/coin-or/IpIterateInitializer.hpp +68 -0
  459. casadi/include/coin-or/IpIteratesVector.hpp +840 -0
  460. casadi/include/coin-or/IpIterationOutput.hpp +78 -0
  461. casadi/include/coin-or/IpJournalist.hpp +573 -0
  462. casadi/include/coin-or/IpLapack.hpp +227 -0
  463. casadi/include/coin-or/IpLibraryLoader.hpp +76 -0
  464. casadi/include/coin-or/IpLineSearch.hpp +106 -0
  465. casadi/include/coin-or/IpLinearSolvers.h +46 -0
  466. casadi/include/coin-or/IpMatrix.hpp +434 -0
  467. casadi/include/coin-or/IpMuUpdate.hpp +77 -0
  468. casadi/include/coin-or/IpNLP.hpp +306 -0
  469. casadi/include/coin-or/IpNLPScaling.hpp +582 -0
  470. casadi/include/coin-or/IpObserver.hpp +422 -0
  471. casadi/include/coin-or/IpOptionsList.hpp +412 -0
  472. casadi/include/coin-or/IpOrigIpoptNLP.hpp +603 -0
  473. casadi/include/coin-or/IpPDSystemSolver.hpp +137 -0
  474. casadi/include/coin-or/IpReferenced.hpp +262 -0
  475. casadi/include/coin-or/IpRegOptions.hpp +1152 -0
  476. casadi/include/coin-or/IpReturnCodes.h +23 -0
  477. casadi/include/coin-or/IpReturnCodes.hpp +18 -0
  478. casadi/include/coin-or/IpReturnCodes.inc +71 -0
  479. casadi/include/coin-or/IpReturnCodes_inc.h +45 -0
  480. casadi/include/coin-or/IpScaledMatrix.hpp +291 -0
  481. casadi/include/coin-or/IpSearchDirCalculator.hpp +72 -0
  482. casadi/include/coin-or/IpSmartPtr.hpp +865 -0
  483. casadi/include/coin-or/IpSolveStatistics.hpp +210 -0
  484. casadi/include/coin-or/IpSparseSymLinearSolverInterface.hpp +260 -0
  485. casadi/include/coin-or/IpStdAugSystemSolver.cpp +555 -0
  486. casadi/include/coin-or/IpStdCInterface.h +428 -0
  487. casadi/include/coin-or/IpSumSymMatrix.hpp +186 -0
  488. casadi/include/coin-or/IpSymLinearSolver.hpp +141 -0
  489. casadi/include/coin-or/IpSymMatrix.hpp +167 -0
  490. casadi/include/coin-or/IpSymScaledMatrix.hpp +255 -0
  491. casadi/include/coin-or/IpSymTMatrix.hpp +275 -0
  492. casadi/include/coin-or/IpTNLP.hpp +820 -0
  493. casadi/include/coin-or/IpTNLPAdapter.hpp +648 -0
  494. casadi/include/coin-or/IpTNLPReducer.hpp +274 -0
  495. casadi/include/coin-or/IpTaggedObject.hpp +128 -0
  496. casadi/include/coin-or/IpTimedTask.hpp +218 -0
  497. casadi/include/coin-or/IpTimingStatistics.hpp +323 -0
  498. casadi/include/coin-or/IpTripletHelper.hpp +308 -0
  499. casadi/include/coin-or/IpTypes.h +81 -0
  500. casadi/include/coin-or/IpTypes.hpp +30 -0
  501. casadi/include/coin-or/IpUtils.hpp +166 -0
  502. casadi/include/coin-or/IpVector.hpp +892 -0
  503. casadi/include/coin-or/IpZeroSymMatrix.hpp +155 -0
  504. casadi/include/coin-or/IpoptConfig.h +45 -0
  505. casadi/include/coin-or/SensAlgorithm.hpp +114 -0
  506. casadi/include/coin-or/SensApplication.hpp +188 -0
  507. casadi/include/coin-or/SensBacksolver.hpp +36 -0
  508. casadi/include/coin-or/SensMeasurement.hpp +56 -0
  509. casadi/include/coin-or/SensPCalculator.hpp +137 -0
  510. casadi/include/coin-or/SensRegOp.hpp +21 -0
  511. casadi/include/coin-or/SensSchurData.hpp +182 -0
  512. casadi/include/coin-or/SensSchurDriver.hpp +118 -0
  513. casadi/include/coin-or/SensSimpleBacksolver.hpp +49 -0
  514. casadi/include/coin-or/SensStepCalc.hpp +85 -0
  515. casadi/include/coin-or/SensUtils.hpp +63 -0
  516. casadi/include/coin-or/metis/defs.h +161 -0
  517. casadi/include/coin-or/metis/macros.h +143 -0
  518. casadi/include/coin-or/metis/metis.h +37 -0
  519. casadi/include/coin-or/metis/proto.h +505 -0
  520. casadi/include/coin-or/metis/rename.h +418 -0
  521. casadi/include/coin-or/metis/struct.h +251 -0
  522. casadi/include/coin-or/mumps/dmumps_c.h +142 -0
  523. casadi/include/coin-or/mumps/mumps_c_types.h +72 -0
  524. casadi/include/coin-or/mumps/mumps_compat.h +27 -0
  525. casadi/include/coin-or/mumps/mumps_int_def.h +11 -0
  526. casadi/include/coin-or/mumps/mumps_mpi.h +67 -0
  527. casadi/include/d_blas.h +78 -0
  528. casadi/include/d_blas_64.h +73 -0
  529. casadi/include/highs/HConfig.h +4 -7
  530. casadi/include/highs/Highs.h +240 -51
  531. casadi/include/highs/filereaderlp/builder.hpp +12 -13
  532. casadi/include/highs/filereaderlp/model.hpp +32 -35
  533. casadi/include/highs/fortran/highs_fortran_api.mod +0 -0
  534. casadi/include/highs/interfaces/highs_c_api.h +964 -577
  535. casadi/include/highs/io/Filereader.h +2 -4
  536. casadi/include/highs/io/FilereaderEms.h +2 -4
  537. casadi/include/highs/io/FilereaderLp.h +2 -4
  538. casadi/include/highs/io/FilereaderMps.h +2 -4
  539. casadi/include/highs/io/HMPSIO.h +2 -4
  540. casadi/include/highs/io/HMpsFF.h +2 -4
  541. casadi/include/highs/io/HighsIO.h +19 -13
  542. casadi/include/highs/io/LoadOptions.h +7 -6
  543. casadi/include/highs/ipm/IpxWrapper.h +4 -5
  544. casadi/include/highs/lp_data/HConst.h +60 -15
  545. casadi/include/highs/lp_data/HStruct.h +32 -8
  546. casadi/include/highs/lp_data/HighsAnalysis.h +2 -4
  547. casadi/include/highs/lp_data/HighsCallback.h +33 -0
  548. casadi/include/highs/lp_data/HighsCallbackStruct.h +36 -0
  549. casadi/include/highs/lp_data/HighsDebug.h +2 -4
  550. casadi/include/highs/lp_data/HighsInfo.h +22 -23
  551. casadi/include/highs/lp_data/HighsInfoDebug.h +2 -4
  552. casadi/include/highs/lp_data/HighsLp.h +14 -6
  553. casadi/include/highs/lp_data/HighsLpSolverObject.h +6 -5
  554. casadi/include/highs/lp_data/HighsLpUtils.h +23 -12
  555. casadi/include/highs/lp_data/HighsModelUtils.h +22 -8
  556. casadi/include/highs/lp_data/HighsOptions.h +175 -106
  557. casadi/include/highs/lp_data/HighsRanging.h +2 -4
  558. casadi/include/highs/lp_data/HighsRuntimeOptions.h +21 -6
  559. casadi/include/highs/lp_data/HighsSolution.h +4 -4
  560. casadi/include/highs/lp_data/HighsSolutionDebug.h +2 -4
  561. casadi/include/highs/lp_data/HighsSolve.h +2 -4
  562. casadi/include/highs/lp_data/HighsStatus.h +2 -4
  563. casadi/include/highs/mip/HighsCliqueTable.h +18 -20
  564. casadi/include/highs/mip/HighsConflictPool.h +2 -4
  565. casadi/include/highs/mip/HighsCutGeneration.h +2 -4
  566. casadi/include/highs/mip/HighsCutPool.h +2 -4
  567. casadi/include/highs/mip/HighsDebugSol.h +2 -4
  568. casadi/include/highs/mip/HighsDomain.h +5 -5
  569. casadi/include/highs/mip/HighsDomainChange.h +2 -4
  570. casadi/include/highs/mip/HighsDynamicRowMatrix.h +2 -4
  571. casadi/include/highs/mip/HighsGFkSolve.h +2 -4
  572. casadi/include/highs/mip/HighsImplications.h +2 -4
  573. casadi/include/highs/mip/HighsLpAggregator.h +2 -4
  574. casadi/include/highs/mip/HighsLpRelaxation.h +2 -4
  575. casadi/include/highs/mip/HighsMipSolver.h +18 -6
  576. casadi/include/highs/mip/HighsMipSolverData.h +8 -4
  577. casadi/include/highs/mip/HighsModkSeparator.h +2 -4
  578. casadi/include/highs/mip/HighsNodeQueue.h +3 -9
  579. casadi/include/highs/mip/HighsObjectiveFunction.h +2 -4
  580. casadi/include/highs/mip/HighsPathSeparator.h +2 -4
  581. casadi/include/highs/mip/HighsPrimalHeuristics.h +2 -4
  582. casadi/include/highs/mip/HighsPseudocost.h +2 -4
  583. casadi/include/highs/mip/HighsRedcostFixing.h +2 -4
  584. casadi/include/highs/mip/HighsSearch.h +2 -4
  585. casadi/include/highs/mip/HighsSeparation.h +2 -4
  586. casadi/include/highs/mip/HighsSeparator.h +2 -4
  587. casadi/include/highs/mip/HighsTableauSeparator.h +2 -4
  588. casadi/include/highs/mip/HighsTransformedLp.h +2 -4
  589. casadi/include/highs/model/HighsHessian.h +3 -1
  590. casadi/include/highs/model/HighsModel.h +2 -0
  591. casadi/include/highs/parallel/HighsSpinMutex.h +2 -1
  592. casadi/include/highs/parallel/HighsSplitDeque.h +1 -1
  593. casadi/include/highs/parallel/HighsTaskExecutor.h +10 -2
  594. casadi/include/highs/presolve/HPresolve.h +9 -6
  595. casadi/include/highs/presolve/HPresolveAnalysis.h +5 -4
  596. casadi/include/highs/presolve/HighsPostsolveStack.h +50 -13
  597. casadi/include/highs/presolve/HighsSymmetry.h +2 -4
  598. casadi/include/highs/presolve/ICrash.h +4 -3
  599. casadi/include/highs/presolve/ICrashUtil.h +2 -2
  600. casadi/include/highs/presolve/ICrashX.h +4 -6
  601. casadi/include/highs/presolve/PresolveComponent.h +4 -42
  602. casadi/include/highs/qpsolver/a_asm.hpp +56 -0
  603. casadi/include/highs/qpsolver/a_quass.hpp +12 -0
  604. casadi/include/highs/qpsolver/quass.hpp +1 -4
  605. casadi/include/highs/simplex/HApp.h +14 -16
  606. casadi/include/highs/simplex/HEkk.h +12 -11
  607. casadi/include/highs/simplex/HEkkDual.h +2 -4
  608. casadi/include/highs/simplex/HEkkDualRHS.h +5 -6
  609. casadi/include/highs/simplex/HEkkDualRow.h +2 -4
  610. casadi/include/highs/simplex/HEkkPrimal.h +2 -4
  611. casadi/include/highs/simplex/HSimplex.h +2 -4
  612. casadi/include/highs/simplex/HSimplexDebug.h +2 -4
  613. casadi/include/highs/simplex/HSimplexNla.h +2 -4
  614. casadi/include/highs/simplex/HSimplexReport.h +3 -5
  615. casadi/include/highs/simplex/HighsSimplexAnalysis.h +2 -4
  616. casadi/include/highs/simplex/SimplexConst.h +7 -5
  617. casadi/include/highs/simplex/SimplexStruct.h +11 -5
  618. casadi/include/highs/simplex/SimplexTimer.h +2 -4
  619. casadi/include/highs/test/DevKkt.h +2 -4
  620. casadi/include/highs/test/KktCh2.h +2 -4
  621. casadi/include/highs/util/FactorTimer.h +2 -4
  622. casadi/include/highs/util/HFactor.h +2 -4
  623. casadi/include/highs/util/HFactorConst.h +2 -4
  624. casadi/include/highs/util/HFactorDebug.h +2 -4
  625. casadi/include/highs/util/HSet.h +3 -5
  626. casadi/include/highs/util/HVector.h +2 -4
  627. casadi/include/highs/util/HVectorBase.h +2 -4
  628. casadi/include/highs/util/HighsCDouble.h +2 -4
  629. casadi/include/highs/util/HighsComponent.h +2 -4
  630. casadi/include/highs/util/HighsDataStack.h +3 -5
  631. casadi/include/highs/util/HighsDisjointSets.h +8 -10
  632. casadi/include/highs/util/HighsHash.h +22 -7
  633. casadi/include/highs/util/HighsHashTree.h +25 -7
  634. casadi/include/highs/util/HighsInt.h +2 -4
  635. casadi/include/highs/util/HighsIntegers.h +2 -4
  636. casadi/include/highs/util/HighsLinearSumBounds.h +2 -4
  637. casadi/include/highs/util/HighsMatrixPic.h +2 -4
  638. casadi/include/highs/util/HighsMatrixSlice.h +2 -4
  639. casadi/include/highs/util/HighsMatrixUtils.h +2 -4
  640. casadi/include/highs/util/HighsRandom.h +2 -4
  641. casadi/include/highs/util/HighsRbTree.h +2 -4
  642. casadi/include/highs/util/HighsSort.h +2 -4
  643. casadi/include/highs/util/HighsSparseMatrix.h +11 -7
  644. casadi/include/highs/util/HighsSparseVectorSum.h +2 -4
  645. casadi/include/highs/util/HighsSplay.h +2 -4
  646. casadi/include/highs/util/HighsTimer.h +3 -4
  647. casadi/include/highs/util/HighsUtils.h +14 -4
  648. casadi/include/highs/util/stringutil.h +2 -4
  649. casadi/include/licenses/alpaqa-external/LICENSE +165 -0
  650. casadi/include/licenses/highs-external/LICENSE +1 -1
  651. casadi/include/licenses/sleqp-external/LICENSE +165 -0
  652. casadi/include/licenses/trlib-external/LICENSE +21 -0
  653. casadi/include/openblas/cblas.h +411 -0
  654. casadi/include/openblas/f77blas.h +796 -0
  655. casadi/include/openblas/lapack.h +22997 -0
  656. casadi/include/openblas/lapacke.h +12665 -0
  657. casadi/include/openblas/lapacke_config.h +119 -0
  658. casadi/include/openblas/lapacke_example_aux.h +9 -0
  659. casadi/include/openblas/lapacke_mangling.h +17 -0
  660. casadi/include/openblas/lapacke_utils.h +582 -0
  661. casadi/include/openblas/openblas/lapacke_mangling.h +17 -0
  662. casadi/include/openblas/openblas_config.h +140 -0
  663. casadi/include/qdldl/qdldl.h +169 -0
  664. casadi/include/qdldl/qdldl_types.h +23 -0
  665. casadi/include/s_blas.h +78 -0
  666. casadi/include/s_blas_64.h +73 -0
  667. casadi/include/sleqp/defs.h +58 -0
  668. casadi/include/sleqp/export.h +42 -0
  669. casadi/include/sleqp/pub_cmp.h +18 -0
  670. casadi/include/sleqp/pub_dyn.h +140 -0
  671. casadi/include/sleqp/pub_error.h +50 -0
  672. casadi/include/sleqp/pub_func.h +257 -0
  673. casadi/include/sleqp/pub_hess_struct.h +105 -0
  674. casadi/include/sleqp/pub_iterate.h +88 -0
  675. casadi/include/sleqp/pub_log.h +88 -0
  676. casadi/include/sleqp/pub_lsq.h +158 -0
  677. casadi/include/sleqp/pub_mem.h +52 -0
  678. casadi/include/sleqp/pub_problem.h +213 -0
  679. casadi/include/sleqp/pub_scale.h +150 -0
  680. casadi/include/sleqp/pub_settings.h +162 -0
  681. casadi/include/sleqp/pub_solver.h +155 -0
  682. casadi/include/sleqp/pub_types.h +230 -0
  683. casadi/include/sleqp/pub_working_set.h +135 -0
  684. casadi/include/sleqp/sparse/pub_mat.h +153 -0
  685. casadi/include/sleqp/sparse/pub_vec.h +336 -0
  686. casadi/include/sleqp.h +38 -0
  687. casadi/include/spral.h +13 -0
  688. casadi/include/spral_lsmr.h +57 -0
  689. casadi/include/spral_matrix_util.h +40 -0
  690. casadi/include/spral_random.h +26 -0
  691. casadi/include/spral_random_matrix.h +27 -0
  692. casadi/include/spral_rutherford_boeing.h +51 -0
  693. casadi/include/spral_scaling.h +139 -0
  694. casadi/include/spral_ssids.h +121 -0
  695. casadi/include/spral_ssmfe.h +268 -0
  696. casadi/include/trlib/trlib_eigen_inverse.h +118 -0
  697. casadi/include/trlib/trlib_krylov.h +493 -0
  698. casadi/include/trlib/trlib_leftmost.h +181 -0
  699. casadi/include/trlib/trlib_private.h +109 -0
  700. casadi/include/trlib/trlib_quadratic_zero.h +57 -0
  701. casadi/include/trlib/trlib_tri_factor.h +409 -0
  702. casadi/include/trlib/trlib_types.h +36 -0
  703. casadi/include/trlib.h +44 -0
  704. casadi/ipopt.lib +0 -0
  705. casadi/lapack.lib +0 -0
  706. casadi/lib/libtinyxml2.dll.a +0 -0
  707. casadi/libCbc-3.dll +0 -0
  708. casadi/libCbc.dll.a +0 -0
  709. casadi/libCbc.la +1 -1
  710. casadi/libCbcSolver-3.dll +0 -0
  711. casadi/libCbcSolver.dll.a +0 -0
  712. casadi/libCbcSolver.la +1 -1
  713. casadi/libCgl-1.dll +0 -0
  714. casadi/libCgl.dll.a +0 -0
  715. casadi/libCgl.la +1 -1
  716. casadi/libClp-1.dll +0 -0
  717. casadi/libClp.dll.a +0 -0
  718. casadi/libClp.la +1 -1
  719. casadi/libClpSolver-1.dll +0 -0
  720. casadi/libClpSolver.dll.a +0 -0
  721. casadi/libClpSolver.la +1 -1
  722. casadi/libCoinUtils-3.dll +0 -0
  723. casadi/libCoinUtils.dll.a +0 -0
  724. casadi/libCoinUtils.la +1 -1
  725. casadi/libFortranHighs.dll +0 -0
  726. casadi/libFortranHighs.dll.a +0 -0
  727. casadi/libOsi-1.dll +0 -0
  728. casadi/libOsi.dll.a +0 -0
  729. casadi/libOsi.la +1 -1
  730. casadi/libOsiCbc-3.dll +0 -0
  731. casadi/libOsiCbc.dll.a +0 -0
  732. casadi/libOsiCbc.la +1 -1
  733. casadi/libOsiClp-1.dll +0 -0
  734. casadi/libOsiClp.dll.a +0 -0
  735. casadi/libOsiClp.la +1 -1
  736. casadi/libOsiCommonTests-1.dll +0 -0
  737. casadi/libOsiCommonTests.dll.a +0 -0
  738. casadi/libOsiCommonTests.la +1 -1
  739. casadi/libalpaqa.dll +0 -0
  740. casadi/libalpaqa.dll.a +0 -0
  741. casadi/libblasfeo.dll +0 -0
  742. casadi/libblasfeo.dll.a +0 -0
  743. casadi/libbonmin-4.dll +0 -0
  744. casadi/libbonmin.dll.a +0 -0
  745. casadi/libbonmin.la +1 -1
  746. casadi/libcasadi-tp-openblas.dll +0 -0
  747. casadi/libcasadi-tp-openblas.dll.a +0 -0
  748. casadi/libcasadi.dll +0 -0
  749. casadi/libcasadi.dll.a +0 -0
  750. casadi/libcasadi_conic_cbc.dll +0 -0
  751. casadi/libcasadi_conic_cbc.dll.a +0 -0
  752. casadi/libcasadi_conic_clp.dll +0 -0
  753. casadi/libcasadi_conic_clp.dll.a +0 -0
  754. casadi/libcasadi_conic_cplex.dll +0 -0
  755. casadi/libcasadi_conic_cplex.dll.a +0 -0
  756. casadi/libcasadi_conic_gurobi.dll +0 -0
  757. casadi/libcasadi_conic_gurobi.dll.a +0 -0
  758. casadi/libcasadi_conic_highs.dll +0 -0
  759. casadi/libcasadi_conic_highs.dll.a +0 -0
  760. casadi/libcasadi_conic_hpipm.dll +0 -0
  761. casadi/libcasadi_conic_hpipm.dll.a +0 -0
  762. casadi/libcasadi_conic_ipqp.dll +0 -0
  763. casadi/libcasadi_conic_ipqp.dll.a +0 -0
  764. casadi/libcasadi_conic_nlpsol.dll +0 -0
  765. casadi/libcasadi_conic_nlpsol.dll.a +0 -0
  766. casadi/libcasadi_conic_osqp.dll +0 -0
  767. casadi/libcasadi_conic_osqp.dll.a +0 -0
  768. casadi/libcasadi_conic_proxqp.dll +0 -0
  769. casadi/libcasadi_conic_proxqp.dll.a +0 -0
  770. casadi/libcasadi_conic_qpoases.dll +0 -0
  771. casadi/libcasadi_conic_qpoases.dll.a +0 -0
  772. casadi/libcasadi_conic_qrqp.dll +0 -0
  773. casadi/libcasadi_conic_qrqp.dll.a +0 -0
  774. casadi/libcasadi_conic_superscs.dll +0 -0
  775. casadi/libcasadi_conic_superscs.dll.a +0 -0
  776. casadi/libcasadi_importer_shell.dll +0 -0
  777. casadi/libcasadi_importer_shell.dll.a +0 -0
  778. casadi/libcasadi_integrator_collocation.dll +0 -0
  779. casadi/libcasadi_integrator_collocation.dll.a +0 -0
  780. casadi/libcasadi_integrator_cvodes.dll +0 -0
  781. casadi/libcasadi_integrator_cvodes.dll.a +0 -0
  782. casadi/libcasadi_integrator_idas.dll +0 -0
  783. casadi/libcasadi_integrator_idas.dll.a +0 -0
  784. casadi/libcasadi_integrator_rk.dll +0 -0
  785. casadi/libcasadi_integrator_rk.dll.a +0 -0
  786. casadi/libcasadi_interpolant_bspline.dll +0 -0
  787. casadi/libcasadi_interpolant_bspline.dll.a +0 -0
  788. casadi/libcasadi_interpolant_linear.dll +0 -0
  789. casadi/libcasadi_interpolant_linear.dll.a +0 -0
  790. casadi/libcasadi_linsol_csparse.dll +0 -0
  791. casadi/libcasadi_linsol_csparse.dll.a +0 -0
  792. casadi/libcasadi_linsol_csparsecholesky.dll +0 -0
  793. casadi/libcasadi_linsol_csparsecholesky.dll.a +0 -0
  794. casadi/libcasadi_linsol_lapacklu.dll +0 -0
  795. casadi/libcasadi_linsol_lapacklu.dll.a +0 -0
  796. casadi/libcasadi_linsol_lapackqr.dll +0 -0
  797. casadi/libcasadi_linsol_lapackqr.dll.a +0 -0
  798. casadi/libcasadi_linsol_ldl.dll +0 -0
  799. casadi/libcasadi_linsol_ldl.dll.a +0 -0
  800. casadi/libcasadi_linsol_lsqr.dll +0 -0
  801. casadi/libcasadi_linsol_lsqr.dll.a +0 -0
  802. casadi/libcasadi_linsol_ma27.dll +0 -0
  803. casadi/libcasadi_linsol_ma27.dll.a +0 -0
  804. casadi/libcasadi_linsol_mumps.dll +0 -0
  805. casadi/libcasadi_linsol_mumps.dll.a +0 -0
  806. casadi/libcasadi_linsol_qr.dll +0 -0
  807. casadi/libcasadi_linsol_qr.dll.a +0 -0
  808. casadi/libcasadi_linsol_symbolicqr.dll +0 -0
  809. casadi/libcasadi_linsol_symbolicqr.dll.a +0 -0
  810. casadi/libcasadi_linsol_tridiag.dll +0 -0
  811. casadi/libcasadi_linsol_tridiag.dll.a +0 -0
  812. casadi/libcasadi_nlpsol_alpaqa.dll +0 -0
  813. casadi/libcasadi_nlpsol_alpaqa.dll.a +0 -0
  814. casadi/libcasadi_nlpsol_ampl.dll +0 -0
  815. casadi/libcasadi_nlpsol_ampl.dll.a +0 -0
  816. casadi/libcasadi_nlpsol_blocksqp.dll +0 -0
  817. casadi/libcasadi_nlpsol_blocksqp.dll.a +0 -0
  818. casadi/libcasadi_nlpsol_bonmin.dll +0 -0
  819. casadi/libcasadi_nlpsol_bonmin.dll.a +0 -0
  820. casadi/libcasadi_nlpsol_feasiblesqpmethod.dll +0 -0
  821. casadi/libcasadi_nlpsol_feasiblesqpmethod.dll.a +0 -0
  822. casadi/libcasadi_nlpsol_ipopt.dll +0 -0
  823. casadi/libcasadi_nlpsol_ipopt.dll.a +0 -0
  824. casadi/libcasadi_nlpsol_knitro.dll +0 -0
  825. casadi/libcasadi_nlpsol_knitro.dll.a +0 -0
  826. casadi/libcasadi_nlpsol_qrsqp.dll +0 -0
  827. casadi/libcasadi_nlpsol_qrsqp.dll.a +0 -0
  828. casadi/libcasadi_nlpsol_scpgen.dll +0 -0
  829. casadi/libcasadi_nlpsol_scpgen.dll.a +0 -0
  830. casadi/libcasadi_nlpsol_sleqp.dll +0 -0
  831. casadi/libcasadi_nlpsol_sleqp.dll.a +0 -0
  832. casadi/libcasadi_nlpsol_snopt.dll +0 -0
  833. casadi/libcasadi_nlpsol_snopt.dll.a +0 -0
  834. casadi/libcasadi_nlpsol_sqpmethod.dll +0 -0
  835. casadi/libcasadi_nlpsol_sqpmethod.dll.a +0 -0
  836. casadi/libcasadi_nlpsol_worhp.dll +0 -0
  837. casadi/libcasadi_nlpsol_worhp.dll.a +0 -0
  838. casadi/libcasadi_rootfinder_fast_newton.dll +0 -0
  839. casadi/libcasadi_rootfinder_fast_newton.dll.a +0 -0
  840. casadi/libcasadi_rootfinder_kinsol.dll +0 -0
  841. casadi/libcasadi_rootfinder_kinsol.dll.a +0 -0
  842. casadi/libcasadi_rootfinder_newton.dll +0 -0
  843. casadi/libcasadi_rootfinder_newton.dll.a +0 -0
  844. casadi/libcasadi_rootfinder_nlpsol.dll +0 -0
  845. casadi/libcasadi_rootfinder_nlpsol.dll.a +0 -0
  846. casadi/libcasadi_sundials_common.dll +0 -0
  847. casadi/libcasadi_sundials_common.dll.a +0 -0
  848. casadi/libcasadi_xmlfile_tinyxml.dll +0 -0
  849. casadi/libcasadi_xmlfile_tinyxml.dll.a +0 -0
  850. casadi/libcoinmetis-2.dll +0 -0
  851. casadi/libcoinmetis.dll.a +0 -0
  852. casadi/libcoinmumps-3.dll +0 -0
  853. casadi/libcoinmumps.dll.a +0 -0
  854. casadi/libcplex_adaptor.dll +0 -0
  855. casadi/libgurobi_adaptor.dll +0 -0
  856. casadi/libhighs.dll +0 -0
  857. casadi/libhighs.dll.a +0 -0
  858. casadi/libhpipm.dll +0 -0
  859. casadi/libhpipm.dll.a +0 -0
  860. casadi/libipopt-3.dll +0 -0
  861. casadi/libipopt.dll.a +0 -0
  862. casadi/libosqp.dll +0 -0
  863. casadi/libosqp.dll.a +0 -0
  864. casadi/libqdldl.dll +0 -0
  865. casadi/libqdldl.dll.a +0 -0
  866. casadi/libsipopt-3.dll +0 -0
  867. casadi/libsipopt.dll.a +0 -0
  868. casadi/libsleqp.dll +0 -0
  869. casadi/libsleqp.dll.a +0 -0
  870. casadi/libtinyxml2.dll +0 -0
  871. casadi/libtrlib.dll +0 -0
  872. casadi/libtrlib.dll.a +0 -0
  873. casadi/osqp.lib +0 -0
  874. casadi/pkgconfig/blas.pc +11 -0
  875. casadi/pkgconfig/bonmin.pc +1 -1
  876. casadi/pkgconfig/casadi.pc +1 -1
  877. casadi/pkgconfig/cbc.pc +2 -2
  878. casadi/pkgconfig/cgl.pc +2 -2
  879. casadi/pkgconfig/clp.pc +1 -1
  880. casadi/pkgconfig/coinutils.pc +1 -1
  881. casadi/pkgconfig/highs.pc +3 -3
  882. casadi/pkgconfig/lapack.pc +11 -0
  883. casadi/pkgconfig/openblas.pc +1 -1
  884. casadi/pkgconfig/osi-cbc.pc +1 -1
  885. casadi/pkgconfig/osi-clp.pc +1 -1
  886. casadi/pkgconfig/osi-unittests.pc +1 -1
  887. casadi/pkgconfig/osi.pc +1 -1
  888. casadi/pkgconfig/sleqp.pc +10 -0
  889. casadi/sleqp.lib +0 -0
  890. casadi/spral_ssids.exe +0 -0
  891. {casadi-3.6.3.dist-info → casadi-3.6.5.dist-info}/METADATA +11 -3
  892. {casadi-3.6.3.dist-info → casadi-3.6.5.dist-info}/RECORD +893 -325
  893. casadi/include/highs/interfaces/OsiHiGHSSolverInterface.hpp +0 -415
  894. casadi/libOsiHighs.dll +0 -0
  895. casadi/libOsiHighs.dll.a +0 -0
  896. casadi/pkgconfig/osi-highs.pc +0 -11
  897. {casadi-3.6.3.dist-info → casadi-3.6.5.dist-info}/WHEEL +0 -0
@@ -0,0 +1,244 @@
1
+ #pragma once
2
+
3
+ #include <alpaqa/config/config.hpp>
4
+ #include <alpaqa/export.hpp>
5
+
6
+ #include <cmath>
7
+ #include <limits>
8
+ #include <string>
9
+ #include <utility>
10
+ #include <vector>
11
+
12
+ namespace alpaqa {
13
+
14
+ /// Cautious BFGS update.
15
+ /// @see @ref LBFGSParams::cbfgs
16
+ template <Config Conf = DefaultConfig>
17
+ struct CBFGSParams {
18
+ USING_ALPAQA_CONFIG(Conf);
19
+ real_t α = 1;
20
+ real_t ϵ = 0; ///< Set to zero to disable CBFGS check.
21
+ explicit operator bool() const { return ϵ > 0; }
22
+ };
23
+
24
+ /// Which method to use to select the L-BFGS step size.
25
+ enum class LBFGSStepSize {
26
+ /// Initial inverse Hessian approximation is set to
27
+ /// @f$ H_0 = \gamma I @f$.
28
+ BasedOnExternalStepSize = 0,
29
+ /// Initial inverse Hessian approximation is set to
30
+ /// @f$ H_0 = \frac{s^\top y}{y^\top y} I @f$.
31
+ BasedOnCurvature = 1,
32
+ BasedOnGradientStepSize
33
+ [[deprecated("use BasedOnExternalStepSize instead")]] =
34
+ BasedOnExternalStepSize,
35
+ };
36
+
37
+ /// Parameters for the @ref LBFGS class.
38
+ template <Config Conf = DefaultConfig>
39
+ struct LBFGSParams {
40
+ USING_ALPAQA_CONFIG(Conf);
41
+
42
+ /// Length of the history to keep.
43
+ length_t memory = 10;
44
+ /// Reject update if @f$ y^\top s \le \text{min_div_fac} \cdot s^\top s @f$.
45
+ real_t min_div_fac = std::numeric_limits<real_t>::epsilon();
46
+ /// Reject update if @f$ s^\top s \le \text{min_abs_s} @f$.
47
+ real_t min_abs_s =
48
+ std::pow(std::numeric_limits<real_t>::epsilon(), real_t(2));
49
+ /// Parameters in the cautious BFGS update condition
50
+ /// @f[ \frac{y^\top s}{s^\top s} \ge \epsilon \| g \|^\alpha @f]
51
+ /// @see https://epubs.siam.org/doi/10.1137/S1052623499354242
52
+ CBFGSParams<config_t> cbfgs = {};
53
+ /// If set to true, the inverse Hessian estimate should remain definite,
54
+ /// i.e. a check is performed that rejects the update if
55
+ /// @f$ y^\top s \le \text{min_div_fac} \cdot s^\top s @f$.
56
+ /// If set to false, just try to prevent a singular Hessian by rejecting the
57
+ /// update if
58
+ /// @f$ \left| y^\top s \right| \le \text{min_div_fac} \cdot s^\top s @f$.
59
+ bool force_pos_def = true;
60
+ /// @see LBFGSStepSize
61
+ LBFGSStepSize stepsize = LBFGSStepSize::BasedOnCurvature;
62
+ };
63
+
64
+ /// Layout:
65
+ /// ~~~
66
+ /// ┌───── 2 m ─────┐
67
+ /// ┌ ┌───┬───┬───┬───┐
68
+ /// │ │ │ │ │ │
69
+ /// │ │ s │ y │ s │ y │
70
+ /// n+1 │ │ │ │ │ │
71
+ /// │ ├───┼───┼───┼───┤
72
+ /// │ │ ρ │ α │ ρ │ α │
73
+ /// └ └───┴───┴───┴───┘
74
+ /// ~~~
75
+ template <Config Conf = DefaultConfig>
76
+ struct LBFGSStorage {
77
+ USING_ALPAQA_CONFIG(Conf);
78
+
79
+ /// Re-allocate storage for a problem with a different size.
80
+ void resize(length_t n, length_t history);
81
+
82
+ /// Get the size of the s and y vectors in the buffer.
83
+ length_t n() const { return sto.rows() - 1; }
84
+ /// Get the number of previous vectors s and y stored in the buffer.
85
+ length_t history() const { return sto.cols() / 2; }
86
+
87
+ auto s(index_t i) { return sto.col(2 * i).topRows(n()); }
88
+ auto s(index_t i) const {
89
+ return std::as_const(sto).col(2 * i).topRows(n());
90
+ }
91
+ auto y(index_t i) { return sto.col(2 * i + 1).topRows(n()); }
92
+ auto y(index_t i) const {
93
+ return std::as_const(sto).col(2 * i + 1).topRows(n());
94
+ }
95
+ real_t &ρ(index_t i) { return sto.coeffRef(n(), 2 * i); }
96
+ real_t &ρ(index_t i) const { return sto.coeffRef(n(), 2 * i); }
97
+ real_t &α(index_t i) { return sto.coeffRef(n(), 2 * i + 1); }
98
+ real_t &α(index_t i) const { return sto.coeffRef(n(), 2 * i + 1); }
99
+
100
+ using storage_t = mat;
101
+ static_assert(!storage_t::IsRowMajor);
102
+ mutable storage_t sto;
103
+ };
104
+
105
+ /// Limited memory Broyden–Fletcher–Goldfarb–Shanno (L-BFGS) algorithm
106
+ /// @ingroup grp_Accelerators
107
+ template <Config Conf = DefaultConfig>
108
+ class ALPAQA_EXPORT LBFGS {
109
+ public:
110
+ USING_ALPAQA_CONFIG(Conf);
111
+
112
+ using Params = LBFGSParams<config_t>;
113
+
114
+ /// The sign of the vectors @f$ p @f$ passed to the @ref update method.
115
+ enum class Sign {
116
+ Positive, ///< @f$ p \sim \nabla \psi(x) @f$
117
+ Negative, ///< @f$ p \sim -\nabla \psi(x) @f$
118
+ };
119
+
120
+ LBFGS() = default;
121
+ LBFGS(Params params) : params(params) {}
122
+ LBFGS(Params params, length_t n) : params(params) { resize(n); }
123
+
124
+ /// Check if the new vectors s and y allow for a valid BFGS update that
125
+ /// preserves the positive definiteness of the Hessian approximation.
126
+ static bool update_valid(const Params &params, real_t yᵀs, real_t sᵀs,
127
+ real_t pᵀp);
128
+
129
+ /// Update the inverse Hessian approximation using the new vectors
130
+ /// sₖ = xₙₑₓₜ - xₖ and yₖ = pₙₑₓₜ - pₖ.
131
+ bool update_sy(crvec s, crvec y, real_t pₙₑₓₜᵀpₙₑₓₜ, bool forced = false);
132
+ /// @see @ref update_sy
133
+ bool update_sy_impl(const auto &s, const auto &y, real_t pₙₑₓₜᵀpₙₑₓₜ,
134
+ bool forced = false);
135
+
136
+ /// Update the inverse Hessian approximation using the new vectors xₙₑₓₜ
137
+ /// and pₙₑₓₜ.
138
+ bool update(crvec xₖ, crvec xₙₑₓₜ, crvec pₖ, crvec pₙₑₓₜ,
139
+ Sign sign = Sign::Positive, bool forced = false);
140
+
141
+ /// Apply the inverse Hessian approximation to the given vector q.
142
+ /// Initial inverse Hessian approximation is set to @f$ H_0 = \gamma I @f$.
143
+ /// If @p γ is negative, @f$ H_0 = \frac{s^\top y}{y^\top y} I @f$.
144
+ bool apply(rvec q, real_t γ = -1) const;
145
+
146
+ /// Apply the inverse Hessian approximation to the given vector q, applying
147
+ /// only the columns and rows of the Hessian in the index set J.
148
+ bool apply_masked(rvec q, real_t γ, crindexvec J) const;
149
+ /// @copydoc apply_masked(rvec, real_t, crindexvec) const
150
+ bool apply_masked(rvec q, real_t γ, const std::vector<index_t> &J) const;
151
+ /// @copydoc apply_masked(rvec, real_t, crindexvec) const
152
+ bool apply_masked_impl(rvec q, real_t γ, const auto &J) const;
153
+
154
+ /// Throw away the approximation and all previous vectors s and y.
155
+ void reset();
156
+ /// Re-allocate storage for a problem with a different size. Causes
157
+ /// a @ref reset.
158
+ void resize(length_t n);
159
+
160
+ /// Scale the stored y vectors by the given factor.
161
+ void scale_y(real_t factor);
162
+
163
+ /// Get a string identifier for this accelerator.
164
+ std::string get_name() const {
165
+ return "LBFGS<" + std::string(config_t::get_name()) + '>';
166
+ }
167
+ /// Get the parameters.
168
+ const Params &get_params() const { return params; }
169
+
170
+ /// Get the size of the s and y vectors in the buffer.
171
+ length_t n() const { return sto.n(); }
172
+ /// Get the number of previous vectors s and y stored in the buffer.
173
+ length_t history() const { return sto.history(); }
174
+ /// Get the next index in the circular buffer of previous s and y vectors.
175
+ index_t succ(index_t i) const { return i + 1 < history() ? i + 1 : 0; }
176
+ /// Get the previous index in the circular buffer of s and y vectors.
177
+ index_t pred(index_t i) const { return i > 0 ? i - 1 : history() - 1; }
178
+ /// Get the number of previous s and y vectors currently stored in the
179
+ /// buffer.
180
+ length_t current_history() const { return full ? history() : idx; }
181
+
182
+ auto s(index_t i) { return sto.s(i); }
183
+ auto s(index_t i) const { return sto.s(i); }
184
+ auto y(index_t i) { return sto.y(i); }
185
+ auto y(index_t i) const { return sto.y(i); }
186
+ real_t &ρ(index_t i) { return sto.ρ(i); }
187
+ real_t &ρ(index_t i) const { return sto.ρ(i); }
188
+ real_t &α(index_t i) { return sto.α(i); }
189
+ real_t &α(index_t i) const { return sto.α(i); }
190
+
191
+ /// Iterate over the indices in the history buffer, oldest first.
192
+ template <class F>
193
+ void foreach_fwd(const F &fun) const {
194
+ if (full)
195
+ for (index_t i = idx; i < history(); ++i)
196
+ fun(i);
197
+ if (idx)
198
+ for (index_t i = 0; i < idx; ++i)
199
+ fun(i);
200
+ }
201
+
202
+ /// Iterate over the indices in the history buffer, newest first.
203
+ template <class F>
204
+ void foreach_rev(const F &fun) const {
205
+ if (idx)
206
+ for (index_t i = idx; i-- > 0;)
207
+ fun(i);
208
+ if (full)
209
+ for (index_t i = history(); i-- > idx;)
210
+ fun(i);
211
+ }
212
+
213
+ private:
214
+ LBFGSStorage<config_t> sto;
215
+ index_t idx = 0;
216
+ bool full = false;
217
+ Params params;
218
+ };
219
+
220
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, CBFGSParams, DefaultConfig);
221
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, CBFGSParams, EigenConfigf);
222
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, CBFGSParams, EigenConfigd);
223
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, CBFGSParams, EigenConfigl);
224
+ #ifdef ALPAQA_WITH_QUAD_PRECISION
225
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, CBFGSParams, EigenConfigq);
226
+ #endif
227
+
228
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, LBFGSParams, DefaultConfig);
229
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, LBFGSParams, EigenConfigf);
230
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, LBFGSParams, EigenConfigd);
231
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, LBFGSParams, EigenConfigl);
232
+ #ifdef ALPAQA_WITH_QUAD_PRECISION
233
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(struct, LBFGSParams, EigenConfigq);
234
+ #endif
235
+
236
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(class, LBFGS, DefaultConfig);
237
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(class, LBFGS, EigenConfigf);
238
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(class, LBFGS, EigenConfigd);
239
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(class, LBFGS, EigenConfigl);
240
+ #ifdef ALPAQA_WITH_QUAD_PRECISION
241
+ ALPAQA_EXPORT_EXTERN_TEMPLATE(class, LBFGS, EigenConfigq);
242
+ #endif
243
+
244
+ } // namespace alpaqa
@@ -0,0 +1,143 @@
1
+ #pragma once
2
+
3
+ #include <alpaqa/config/config.hpp>
4
+ #include <alpaqa/util/alloc-check.hpp>
5
+
6
+ namespace alpaqa {
7
+
8
+ template <Config Conf>
9
+ struct SteihaugCGParams {
10
+ USING_ALPAQA_CONFIG(Conf);
11
+ real_t tol_scale = 1;
12
+ real_t tol_scale_root = real_t(0.5);
13
+ real_t tol_max = inf<config_t>;
14
+ real_t max_iter_factor = 1;
15
+ };
16
+
17
+ /// Steihaug conjugate gradients procedure based on
18
+ /// https://github.com/scipy/scipy/blob/583e70a50573169fc352b5dc6d94588a97c7389a/scipy/optimize/_trustregion_ncg.py#L44
19
+ template <Config Conf>
20
+ struct SteihaugCG {
21
+ USING_ALPAQA_CONFIG(Conf);
22
+
23
+ using Params = SteihaugCGParams<config_t>;
24
+ Params params;
25
+
26
+ SteihaugCG() = default;
27
+ SteihaugCG(const Params &params) : params{params} {}
28
+
29
+ mutable vec z, r, d, Bd, work_eval;
30
+
31
+ void resize(length_t n) {
32
+ z.resize(n);
33
+ r.resize(n);
34
+ d.resize(n);
35
+ Bd.resize(n);
36
+ work_eval.resize(n);
37
+ }
38
+
39
+ template <class HessFun>
40
+ real_t solve(const auto &grad, const HessFun &hess_prod,
41
+ real_t trust_radius, rvec step) const {
42
+ length_t n = grad.size();
43
+ // get the norm of jacobian and define the origin
44
+ auto v = [n](auto &v) { return v.topRows(n); };
45
+ auto z = v(this->z), r = v(this->r), d = v(this->d), Bd = v(this->Bd);
46
+ auto g = v(grad);
47
+ auto s = v(step);
48
+ // init the state for the first iteration
49
+ z.setZero();
50
+ r = g;
51
+ d = -r;
52
+ real_t r_sq = r.squaredNorm();
53
+ real_t grad_mag = g.norm();
54
+
55
+ // define a default tolerance
56
+ real_t tolerance =
57
+ std::fmin(params.tol_max, params.tol_scale * grad_mag *
58
+ std::fmin(params.tol_scale_root,
59
+ std::sqrt(grad_mag)));
60
+
61
+ // Workspaces and function evaluation
62
+ auto eval = [&](crvec p) {
63
+ hess_prod(p, work_eval);
64
+ return p.dot(g) + real_t(0.5) * p.dot(v(work_eval));
65
+ };
66
+
67
+ // Search for the min of the approximation of the objective function.
68
+ index_t i = 0;
69
+ const auto max_iter = static_cast<index_t>(
70
+ std::round(static_cast<real_t>(n) * params.max_iter_factor));
71
+ while (true) {
72
+ // do an iteration
73
+ hess_prod(d, Bd);
74
+ real_t dBd = d.dot(Bd);
75
+ if (dBd <= 0) {
76
+ // Look at the two boundary points.
77
+ // Find both values of t to get the boundary points such that
78
+ // ||z + t d|| == trust_radius
79
+ // and then choose the one with the predicted min value.
80
+ auto [ta, tb] =
81
+ get_boundaries_intersections(z, d, trust_radius);
82
+ auto &pa = r; // Reuse storage
83
+ auto &pb = d; // Reuse storage
84
+ pa = z + ta * d;
85
+ pb = z + tb * d;
86
+ real_t q_a = eval(pa), q_b = eval(pb);
87
+ real_t q_min = std::fmin(q_a, q_b);
88
+ if (q_a == q_min) {
89
+ s = pa;
90
+ return q_a;
91
+ } else {
92
+ s = pb;
93
+ return q_b;
94
+ }
95
+ }
96
+
97
+ real_t alpha = r_sq / dBd;
98
+ s = z + alpha * d;
99
+ if (s.norm() >= trust_radius) {
100
+ // Find t >= 0 to get the boundary point such that
101
+ // ||z + t d|| == trust_radius
102
+ auto [ta, tb] =
103
+ get_boundaries_intersections(z, d, trust_radius);
104
+ s = z + tb * d;
105
+ return eval(s);
106
+ }
107
+ r += alpha * Bd;
108
+ real_t r_next_sq = r.squaredNorm();
109
+ if (std::sqrt(r_next_sq) < tolerance || i > max_iter)
110
+ return eval(s);
111
+ real_t beta_next = r_next_sq / r_sq;
112
+ r_sq = r_next_sq;
113
+ d = beta_next * d - r;
114
+ z = s;
115
+ ++i;
116
+ }
117
+ }
118
+
119
+ /// Solve the scalar quadratic equation ||z + t d|| == trust_radius.
120
+ /// This is like a line-sphere intersection.
121
+ /// Return the two values of t, sorted from low to high.
122
+ static auto get_boundaries_intersections(crvec z, crvec d,
123
+ real_t trust_radius) {
124
+ real_t a = d.squaredNorm();
125
+ real_t b = 2 * z.dot(d);
126
+ real_t c = z.squaredNorm() - trust_radius * trust_radius;
127
+ real_t sqrt_discriminant = std::sqrt(b * b - 4 * a * c);
128
+
129
+ // The following calculation is mathematically
130
+ // equivalent to:
131
+ // ta = (-b - sqrt_discriminant) / (2*a)
132
+ // tb = (-b + sqrt_discriminant) / (2*a)
133
+ // but produce smaller round off errors.
134
+ // Look at Matrix Computation p.97
135
+ // for a better justification.
136
+ real_t aux = b + std::copysign(sqrt_discriminant, b);
137
+ real_t ta = -aux / (2 * a);
138
+ real_t tb = -2 * c / aux;
139
+ return std::make_tuple(std::fmin(ta, tb), std::fmax(ta, tb));
140
+ }
141
+ };
142
+
143
+ } // namespace alpaqa
@@ -0,0 +1,3 @@
1
+ #pragma once
2
+
3
+ #include <alpaqa/panoc-alm.hpp>
@@ -0,0 +1,185 @@
1
+ #pragma once
2
+
3
+ #include <alpaqa/casadi-ocp-loader-export.hpp>
4
+ #include <alpaqa/config/config.hpp>
5
+ #include <alpaqa/problem/box.hpp>
6
+ #include <alpaqa/util/check-dim.hpp>
7
+ #include <alpaqa/util/copyable_unique_ptr.hpp>
8
+ #include <filesystem>
9
+
10
+ namespace alpaqa {
11
+
12
+ namespace casadi_loader {
13
+ template <Config>
14
+ struct CasADiControlFunctionsWithParam;
15
+ } // namespace casadi_loader
16
+
17
+ template <Config Conf>
18
+ class CasADiControlProblem {
19
+ public:
20
+ USING_ALPAQA_CONFIG(Conf);
21
+ using Box = alpaqa::Box<config_t>;
22
+ length_t N, nx, nu, nh, nh_N, nc, nc_N;
23
+ vec x_init;
24
+ vec param;
25
+ Box U, D, D_N;
26
+ mutable vec work;
27
+
28
+ /// Components of the constraint function with indices below this number are
29
+ /// handled using a quadratic penalty method rather than using an
30
+ /// augmented Lagrangian method. Specifically, the Lagrange multipliers for
31
+ /// these components (which determine the shifts in ALM) are kept at zero.
32
+ index_t penalty_alm_split = 0;
33
+ /// Same as @ref penalty_alm_split, but for the terminal constraint.
34
+ index_t penalty_alm_split_N = 0;
35
+
36
+ CasADiControlProblem(const std::string &so_name, length_t N);
37
+ ~CasADiControlProblem();
38
+
39
+ CasADiControlProblem(const CasADiControlProblem &);
40
+ CasADiControlProblem &operator=(const CasADiControlProblem &);
41
+ CasADiControlProblem(CasADiControlProblem &&) noexcept;
42
+ CasADiControlProblem &operator=(CasADiControlProblem &&) noexcept;
43
+
44
+ /// Load the numerical problem data (bounds and parameters) from a CSV file.
45
+ /// The file should contain 8 rows, with the following contents:
46
+ /// 1. @ref U lower bound [nu]
47
+ /// 2. @ref U upper bound [nu]
48
+ /// 3. @ref D lower bound [nc]
49
+ /// 4. @ref D upper bound [nc]
50
+ /// 5. @ref D_N lower bound [nc_N]
51
+ /// 6. @ref D_N upper bound [nc_N]
52
+ /// 7. @ref x_init [nx]
53
+ /// 8. @ref param [p]
54
+ ///
55
+ /// Line endings are encoded using a single line feed (`\n`), and the column
56
+ /// separator can be specified using the @p sep argument.
57
+ void load_numerical_data(const std::filesystem::path &filepath,
58
+ char sep = ',');
59
+
60
+ void get_U(Box &U) const { U = this->U; }
61
+ void get_D(Box &D) const { D = this->D; }
62
+ void get_D_N(Box &D_N) const { D_N = this->D_N; }
63
+ void get_x_init(rvec x_init) const { x_init = this->x_init; }
64
+
65
+ void eval_f(index_t timestep, crvec x, crvec u, rvec fxu) const;
66
+ void eval_jac_f(index_t timestep, crvec x, crvec u, rmat J_fxu) const;
67
+ void eval_grad_f_prod(index_t timestep, crvec x, crvec u, crvec p,
68
+ rvec grad_fxu_p) const;
69
+ void eval_h(index_t timestep, crvec x, crvec u, rvec h) const;
70
+ void eval_h_N(crvec x, rvec h) const;
71
+ [[nodiscard]] real_t eval_l(index_t timestep, crvec h) const;
72
+ [[nodiscard]] real_t eval_l_N(crvec h) const;
73
+ void eval_qr(index_t timestep, crvec xu, crvec h, rvec qr) const;
74
+ void eval_q_N(crvec x, crvec h, rvec q) const;
75
+ void eval_add_Q(index_t timestep, crvec xu, crvec h, rmat Q) const;
76
+ void eval_add_Q_N(crvec x, crvec h, rmat Q) const;
77
+ void eval_add_R_masked(index_t timestep, crvec xu, crvec h, crindexvec mask,
78
+ rmat R, rvec work) const;
79
+ void eval_add_S_masked(index_t timestep, crvec xu, crvec h, crindexvec mask,
80
+ rmat S, rvec work) const;
81
+ void eval_add_R_prod_masked(index_t timestep, crvec xu, crvec h,
82
+ crindexvec mask_J, crindexvec mask_K, crvec v,
83
+ rvec out, rvec work) const;
84
+ void eval_add_S_prod_masked(index_t timestep, crvec xu, crvec h,
85
+ crindexvec mask_K, crvec v, rvec out,
86
+ rvec work) const;
87
+ [[nodiscard]] length_t get_R_work_size() const;
88
+ [[nodiscard]] length_t get_S_work_size() const;
89
+ void eval_constr(index_t timestep, crvec x, rvec c) const;
90
+ void eval_grad_constr_prod(index_t timestep, crvec x, crvec p,
91
+ rvec grad_cx_p) const;
92
+ void eval_add_gn_hess_constr(index_t timestep, crvec x, crvec M,
93
+ rmat out) const;
94
+ void eval_constr_N(crvec x, rvec c) const;
95
+ void eval_grad_constr_prod_N(crvec x, crvec p, rvec grad_cx_p) const;
96
+ void eval_add_gn_hess_constr_N(crvec x, crvec M, rmat out) const;
97
+
98
+ void check() const {
99
+ util::check_dim_msg<config_t>(U.lowerbound, nu,
100
+ "Length of problem.U.lowerbound does not "
101
+ "match problem size problem.nu");
102
+ util::check_dim_msg<config_t>(U.upperbound, nu,
103
+ "Length of problem.U.upperbound does not "
104
+ "match problem size problem.nu");
105
+ util::check_dim_msg<config_t>(D.lowerbound, nc,
106
+ "Length of problem.D.lowerbound does not "
107
+ "match problem size problem.nc");
108
+ util::check_dim_msg<config_t>(D.upperbound, nc,
109
+ "Length of problem.D.upperbound does not "
110
+ "match problem size problem.nc");
111
+ util::check_dim_msg<config_t>(D_N.lowerbound, nc_N,
112
+ "Length of problem.D_N.lowerbound does "
113
+ "not match problem size problem.nc_N");
114
+ util::check_dim_msg<config_t>(D_N.upperbound, nc_N,
115
+ "Length of problem.D_N.upperbound does "
116
+ "not match problem size problem.nc_N");
117
+ if (penalty_alm_split < 0 || penalty_alm_split > nc)
118
+ throw std::invalid_argument("Invalid penalty_alm_split");
119
+ if (penalty_alm_split_N < 0 || penalty_alm_split > nc_N)
120
+ throw std::invalid_argument("Invalid penalty_alm_split_N");
121
+ }
122
+
123
+ [[nodiscard]] length_t get_N() const { return N; }
124
+ [[nodiscard]] length_t get_nx() const { return nx; }
125
+ [[nodiscard]] length_t get_nu() const { return nu; }
126
+ [[nodiscard]] length_t get_nh() const { return nh; }
127
+ [[nodiscard]] length_t get_nh_N() const { return nh_N; }
128
+ [[nodiscard]] length_t get_nc() const { return nc; }
129
+ [[nodiscard]] length_t get_nc_N() const { return nc_N; }
130
+
131
+ /// @see @ref TypeErasedControlProblem::eval_proj_diff_g
132
+ void eval_proj_diff_g(crvec z, rvec e) const {
133
+ for (index_t t = 0; t < N; ++t)
134
+ e.segment(t * nc, nc) =
135
+ alpaqa::projecting_difference(z.segment(t * nc, nc), D);
136
+ e.segment(N * nc, nc_N) =
137
+ alpaqa::projecting_difference(z.segment(N * nc, nc_N), D_N);
138
+ }
139
+ /// @see @ref TypeErasedControlProblem::eval_proj_multipliers
140
+ void eval_proj_multipliers(rvec y, real_t M) const {
141
+ // If there's no lower bound, the multipliers can only be positive
142
+ auto max_lb = [M](real_t y, real_t z_lb) {
143
+ real_t y_lb = z_lb == -alpaqa::inf<config_t> ? 0 : -M;
144
+ return std::max(y, y_lb);
145
+ };
146
+ // If there's no upper bound, the multipliers can only be negative
147
+ auto min_ub = [M](real_t y, real_t z_ub) {
148
+ real_t y_ub = z_ub == alpaqa::inf<config_t> ? 0 : M;
149
+ return std::min(y, y_ub);
150
+ };
151
+ for (index_t t = 0; t < N; ++t) {
152
+ auto num_alm = nc - penalty_alm_split;
153
+ auto &&yt = y.segment(t * nc, nc);
154
+ auto &&y_qpm = yt.topRows(penalty_alm_split);
155
+ auto &&y_alm = yt.bottomRows(num_alm);
156
+ auto &&z_alm_lb = D.lowerbound.bottomRows(num_alm);
157
+ auto &&z_alm_ub = D.upperbound.bottomRows(num_alm);
158
+ y_qpm.setZero();
159
+ y_alm =
160
+ y_alm.binaryExpr(z_alm_lb, max_lb).binaryExpr(z_alm_ub, min_ub);
161
+ }
162
+ {
163
+ auto &&yt = y.segment(N * nc, nc_N);
164
+ auto num_alm = nc_N - penalty_alm_split_N;
165
+ auto &&y_qpm = yt.topRows(penalty_alm_split_N);
166
+ auto &&y_alm = yt.bottomRows(num_alm);
167
+ auto &&z_alm_lb = D.lowerbound.bottomRows(num_alm);
168
+ auto &&z_alm_ub = D.upperbound.bottomRows(num_alm);
169
+ y_qpm.setZero();
170
+ y_alm =
171
+ y_alm.binaryExpr(z_alm_lb, max_lb).binaryExpr(z_alm_ub, min_ub);
172
+ }
173
+ }
174
+
175
+ private:
176
+ using Functions = casadi_loader::CasADiControlFunctionsWithParam<Conf>;
177
+ util::copyable_unique_ptr<Functions> impl;
178
+ };
179
+
180
+ CASADI_OCP_LOADER_EXPORT_EXTERN_TEMPLATE(class, CasADiControlProblem,
181
+ EigenConfigd);
182
+ CASADI_OCP_LOADER_EXPORT_EXTERN_TEMPLATE(class, CasADiControlProblem,
183
+ DefaultConfig);
184
+
185
+ } // namespace alpaqa
@@ -0,0 +1,104 @@
1
+ #pragma once
2
+
3
+ #include <alpaqa/config/config.hpp>
4
+
5
+ #include <stdexcept>
6
+ #include <string>
7
+ #include <vector>
8
+
9
+ #include <casadi/core/function.hpp>
10
+ #include <casadi/mem.h>
11
+
12
+ namespace alpaqa::casadi_loader {
13
+
14
+ /// Class for evaluating CasADi functions, allocating the necessary workspace
15
+ /// storage in advance for allocation-free evaluations.
16
+ template <Config Conf, size_t N_in, size_t N_out>
17
+ class CasADiFunctionEvaluator {
18
+ public:
19
+ USING_ALPAQA_CONFIG(Conf);
20
+ static_assert(std::is_same_v<real_t, casadi_real>);
21
+
22
+ using casadi_dim = std::pair<casadi_int, casadi_int>;
23
+
24
+ /// @throws std::invalid_argument
25
+ CasADiFunctionEvaluator(casadi::Function &&f)
26
+ : fun(std::move(f)), iwork(fun.sz_iw()), dwork(fun.sz_w()),
27
+ arg_work(fun.sz_arg()), res_work(fun.sz_res()) {
28
+ using namespace std::literals::string_literals;
29
+ if (N_in != fun.n_in())
30
+ throw std::invalid_argument(
31
+ "Invalid number of input arguments: got "s +
32
+ std::to_string(fun.n_in()) + ", should be " +
33
+ std::to_string(N_in) + ".");
34
+ if (N_out != fun.n_out())
35
+ throw std::invalid_argument(
36
+ "Invalid number of output arguments: got "s +
37
+ std::to_string(fun.n_out()) + ", should be " +
38
+ std::to_string(N_out) + ".");
39
+ }
40
+
41
+ /// @throws std::invalid_argument
42
+ CasADiFunctionEvaluator(casadi::Function &&f,
43
+ const std::array<casadi_dim, N_in> &dim_in,
44
+ const std::array<casadi_dim, N_out> &dim_out)
45
+ : CasADiFunctionEvaluator{std::move(f)} {
46
+ validate_dimensions(dim_in, dim_out);
47
+ }
48
+
49
+ /// @throws std::invalid_argument
50
+ void
51
+ validate_dimensions(const std::array<casadi_dim, N_in> &dim_in = {},
52
+ const std::array<casadi_dim, N_out> &dim_out = {}) {
53
+ using namespace std::literals::string_literals;
54
+ static constexpr std::array count{"first", "second", "third",
55
+ "fourth", "fifth", "sixth",
56
+ "seventh", "eighth"};
57
+ static_assert(N_in <= count.size());
58
+ static_assert(N_out <= count.size());
59
+ auto to_string = [](casadi_dim d) {
60
+ return "(" + std::to_string(d.first) + ", " +
61
+ std::to_string(d.second) + ")";
62
+ };
63
+ for (size_t n = 0; n < N_in; ++n) {
64
+ auto cs_n = static_cast<casadi_int>(n);
65
+ if (dim_in[n].first != 0 && dim_in[n] != fun.size_in(cs_n))
66
+ throw std::invalid_argument(
67
+ "Invalid dimension of "s + count[n] +
68
+ " input argument: got " + to_string(fun.size_in(cs_n)) +
69
+ ", should be " + to_string(dim_in[n]) + ".");
70
+ }
71
+ for (size_t n = 0; n < N_out; ++n) {
72
+ auto cs_n = static_cast<casadi_int>(n);
73
+ if (dim_out[n].first != 0 && dim_out[n] != fun.size_out(cs_n))
74
+ throw std::invalid_argument(
75
+ "Invalid dimension of "s + count[n] +
76
+ " output argument: got " + to_string(fun.size_out(cs_n)) +
77
+ ", should be " + to_string(dim_out[n]) + ".");
78
+ }
79
+ }
80
+
81
+ protected:
82
+ void operator()(const double *const *in, double *const *out) const {
83
+ std::copy_n(in, N_in, arg_work.begin());
84
+ std::copy_n(out, N_out, res_work.begin());
85
+ fun(arg_work.data(), res_work.data(), iwork.data(), dwork.data(), 0);
86
+ }
87
+
88
+ public:
89
+ void operator()(const double *const (&in)[N_in],
90
+ double *const (&out)[N_out]) const {
91
+ this->operator()(&in[0], &out[0]);
92
+ }
93
+
94
+ public:
95
+ casadi::Function fun;
96
+
97
+ private:
98
+ mutable std::vector<casadi_int> iwork;
99
+ mutable std::vector<double> dwork;
100
+ mutable std::vector<const double *> arg_work;
101
+ mutable std::vector<double *> res_work;
102
+ };
103
+
104
+ } // namespace alpaqa::casadi_loader