casadi 3.6.7__cp313-none-macosx_10_13_x86_64.macosx_10_13_intel.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 (1312) hide show
  1. casadi/__init__.py +92 -0
  2. casadi/_casadi.so +0 -0
  3. casadi/casadi-cli +0 -0
  4. casadi/casadi.py +50976 -0
  5. casadi/cbc +0 -0
  6. casadi/clp +0 -0
  7. casadi/cmake/casadi-config-version.cmake +11 -0
  8. casadi/cmake/casadi-config.cmake +8 -0
  9. casadi/cmake/casadi-targets-release.cmake +19 -0
  10. casadi/cmake/casadi-targets.cmake +106 -0
  11. casadi/cmake/highs/highs-config.cmake +17 -0
  12. casadi/cmake/highs/highs-targets-release.cmake +28 -0
  13. casadi/cmake/highs/highs-targets.cmake +117 -0
  14. casadi/cmake/osqp/osqp-config.cmake +1 -0
  15. casadi/cmake/osqp/osqp-targets-noconfig.cmake +29 -0
  16. casadi/cmake/osqp/osqp-targets.cmake +113 -0
  17. casadi/cmake/qdldl/qdldl-config.cmake +1 -0
  18. casadi/cmake/qdldl/qdldl-targets-noconfig.cmake +29 -0
  19. casadi/cmake/qdldl/qdldl-targets.cmake +113 -0
  20. casadi/cmake/sleqp/sleqp-config-version.cmake +65 -0
  21. casadi/cmake/sleqp/sleqp-config.cmake +1 -0
  22. casadi/cmake/sleqp/sleqp-targets-release.cmake +20 -0
  23. casadi/cmake/sleqp/sleqp-targets.cmake +106 -0
  24. casadi/cmake/trlib/trlib-config-release.cmake +19 -0
  25. casadi/cmake/trlib/trlib-config-version.cmake +83 -0
  26. casadi/cmake/trlib/trlib-config.cmake +107 -0
  27. casadi/highs +0 -0
  28. casadi/include/blasfeo.h +52 -0
  29. casadi/include/blasfeo_block_size.h +447 -0
  30. casadi/include/blasfeo_common.h +274 -0
  31. casadi/include/blasfeo_d_aux.h +255 -0
  32. casadi/include/blasfeo_d_aux_ext_dep.h +145 -0
  33. casadi/include/blasfeo_d_aux_ext_dep_ref.h +84 -0
  34. casadi/include/blasfeo_d_aux_old.h +75 -0
  35. casadi/include/blasfeo_d_aux_ref.h +208 -0
  36. casadi/include/blasfeo_d_aux_test.h +226 -0
  37. casadi/include/blasfeo_d_blas.h +46 -0
  38. casadi/include/blasfeo_d_blas_api.h +281 -0
  39. casadi/include/blasfeo_d_blasfeo_api.h +364 -0
  40. casadi/include/blasfeo_d_blasfeo_api_ref.h +147 -0
  41. casadi/include/blasfeo_d_blasfeo_hp_api.h +84 -0
  42. casadi/include/blasfeo_d_blasfeo_ref_api.h +283 -0
  43. casadi/include/blasfeo_d_kernel.h +1321 -0
  44. casadi/include/blasfeo_i_aux_ext_dep.h +69 -0
  45. casadi/include/blasfeo_m_aux.h +57 -0
  46. casadi/include/blasfeo_memory.h +62 -0
  47. casadi/include/blasfeo_naming.h +77 -0
  48. casadi/include/blasfeo_processor_features.h +88 -0
  49. casadi/include/blasfeo_s_aux.h +168 -0
  50. casadi/include/blasfeo_s_aux_ext_dep.h +141 -0
  51. casadi/include/blasfeo_s_aux_ext_dep_ref.h +82 -0
  52. casadi/include/blasfeo_s_aux_old.h +64 -0
  53. casadi/include/blasfeo_s_aux_ref.h +147 -0
  54. casadi/include/blasfeo_s_aux_test.h +177 -0
  55. casadi/include/blasfeo_s_blas.h +46 -0
  56. casadi/include/blasfeo_s_blas_api.h +182 -0
  57. casadi/include/blasfeo_s_blasfeo_api.h +284 -0
  58. casadi/include/blasfeo_s_blasfeo_api_ref.h +135 -0
  59. casadi/include/blasfeo_s_blasfeo_ref_api.h +252 -0
  60. casadi/include/blasfeo_s_kernel.h +692 -0
  61. casadi/include/blasfeo_stdlib.h +62 -0
  62. casadi/include/blasfeo_target.h +73 -0
  63. casadi/include/blasfeo_timing.h +114 -0
  64. casadi/include/blasfeo_v_aux_ext_dep.h +83 -0
  65. casadi/include/casadi/casadi.hpp +31 -0
  66. casadi/include/casadi/casadi.i +4691 -0
  67. casadi/include/casadi/casadi_c.h +138 -0
  68. casadi/include/casadi/casadi_numpy.hpp +97 -0
  69. casadi/include/casadi/config.h +46 -0
  70. casadi/include/casadi/core/calculus.hpp +1750 -0
  71. casadi/include/casadi/core/callback.hpp +226 -0
  72. casadi/include/casadi/core/casadi_common.hpp +318 -0
  73. casadi/include/casadi/core/casadi_enum.hpp +90 -0
  74. casadi/include/casadi/core/casadi_export.h +43 -0
  75. casadi/include/casadi/core/casadi_interrupt.hpp +83 -0
  76. casadi/include/casadi/core/casadi_limits.hpp +104 -0
  77. casadi/include/casadi/core/casadi_logger.hpp +134 -0
  78. casadi/include/casadi/core/casadi_meta.hpp +107 -0
  79. casadi/include/casadi/core/casadi_misc.hpp +1001 -0
  80. casadi/include/casadi/core/casadi_types.hpp +66 -0
  81. casadi/include/casadi/core/code_generator.hpp +975 -0
  82. casadi/include/casadi/core/conic.hpp +213 -0
  83. casadi/include/casadi/core/core.hpp +70 -0
  84. casadi/include/casadi/core/dae_builder.hpp +723 -0
  85. casadi/include/casadi/core/dm.hpp +87 -0
  86. casadi/include/casadi/core/dm_fwd.hpp +39 -0
  87. casadi/include/casadi/core/dple.hpp +138 -0
  88. casadi/include/casadi/core/exception.hpp +167 -0
  89. casadi/include/casadi/core/expm.hpp +84 -0
  90. casadi/include/casadi/core/external.hpp +70 -0
  91. casadi/include/casadi/core/fmu.hpp +224 -0
  92. casadi/include/casadi/core/function.hpp +1347 -0
  93. casadi/include/casadi/core/generic_expression.hpp +760 -0
  94. casadi/include/casadi/core/generic_matrix.hpp +1598 -0
  95. casadi/include/casadi/core/generic_type.hpp +311 -0
  96. casadi/include/casadi/core/global_options.hpp +97 -0
  97. casadi/include/casadi/core/im.hpp +52 -0
  98. casadi/include/casadi/core/im_fwd.hpp +35 -0
  99. casadi/include/casadi/core/importer.hpp +221 -0
  100. casadi/include/casadi/core/integration_tools.hpp +292 -0
  101. casadi/include/casadi/core/integrator.hpp +256 -0
  102. casadi/include/casadi/core/interpolant.hpp +163 -0
  103. casadi/include/casadi/core/linsol.hpp +171 -0
  104. casadi/include/casadi/core/matrix_decl.hpp +1352 -0
  105. casadi/include/casadi/core/matrix_fwd.hpp +37 -0
  106. casadi/include/casadi/core/mx.hpp +953 -0
  107. casadi/include/casadi/core/nlp_builder.hpp +162 -0
  108. casadi/include/casadi/core/nlp_tools.hpp +124 -0
  109. casadi/include/casadi/core/nlpsol.hpp +234 -0
  110. casadi/include/casadi/core/nonzeros.hpp +111 -0
  111. casadi/include/casadi/core/options.hpp +119 -0
  112. casadi/include/casadi/core/optistack.hpp +670 -0
  113. casadi/include/casadi/core/polynomial.hpp +126 -0
  114. casadi/include/casadi/core/printable.hpp +73 -0
  115. casadi/include/casadi/core/rootfinder.hpp +176 -0
  116. casadi/include/casadi/core/runtime/casadi_axpy.hpp +8 -0
  117. casadi/include/casadi/core/runtime/casadi_bfgs.hpp +49 -0
  118. casadi/include/casadi/core/runtime/casadi_bilin.hpp +42 -0
  119. casadi/include/casadi/core/runtime/casadi_bound_consistency.hpp +51 -0
  120. casadi/include/casadi/core/runtime/casadi_cache.hpp +59 -0
  121. casadi/include/casadi/core/runtime/casadi_clear.hpp +27 -0
  122. casadi/include/casadi/core/runtime/casadi_clip_max.hpp +33 -0
  123. casadi/include/casadi/core/runtime/casadi_clip_min.hpp +33 -0
  124. casadi/include/casadi/core/runtime/casadi_convexify.hpp +182 -0
  125. casadi/include/casadi/core/runtime/casadi_copy.hpp +31 -0
  126. casadi/include/casadi/core/runtime/casadi_cvx.hpp +463 -0
  127. casadi/include/casadi/core/runtime/casadi_de_boor.hpp +36 -0
  128. casadi/include/casadi/core/runtime/casadi_dense_lsqr.hpp +247 -0
  129. casadi/include/casadi/core/runtime/casadi_densify.hpp +48 -0
  130. casadi/include/casadi/core/runtime/casadi_dot.hpp +27 -0
  131. casadi/include/casadi/core/runtime/casadi_feasiblesqpmethod.hpp +208 -0
  132. casadi/include/casadi/core/runtime/casadi_file_slurp.hpp +32 -0
  133. casadi/include/casadi/core/runtime/casadi_fill.hpp +27 -0
  134. casadi/include/casadi/core/runtime/casadi_finite_diff.hpp +345 -0
  135. casadi/include/casadi/core/runtime/casadi_flip.hpp +33 -0
  136. casadi/include/casadi/core/runtime/casadi_getu.hpp +35 -0
  137. casadi/include/casadi/core/runtime/casadi_iamax.hpp +36 -0
  138. casadi/include/casadi/core/runtime/casadi_interpn.hpp +39 -0
  139. casadi/include/casadi/core/runtime/casadi_interpn_grad.hpp +72 -0
  140. casadi/include/casadi/core/runtime/casadi_interpn_interpolate.hpp +43 -0
  141. casadi/include/casadi/core/runtime/casadi_interpn_weights.hpp +39 -0
  142. casadi/include/casadi/core/runtime/casadi_ipqp.hpp +868 -0
  143. casadi/include/casadi/core/runtime/casadi_jac.hpp +186 -0
  144. casadi/include/casadi/core/runtime/casadi_kkt.hpp +67 -0
  145. casadi/include/casadi/core/runtime/casadi_kron.hpp +50 -0
  146. casadi/include/casadi/core/runtime/casadi_ldl.hpp +109 -0
  147. casadi/include/casadi/core/runtime/casadi_logsumexp.hpp +41 -0
  148. casadi/include/casadi/core/runtime/casadi_low.hpp +65 -0
  149. casadi/include/casadi/core/runtime/casadi_lsqr.hpp +247 -0
  150. casadi/include/casadi/core/runtime/casadi_masked_norm_inf.hpp +33 -0
  151. casadi/include/casadi/core/runtime/casadi_max_viol.hpp +37 -0
  152. casadi/include/casadi/core/runtime/casadi_mmax.hpp +28 -0
  153. casadi/include/casadi/core/runtime/casadi_mmin.hpp +29 -0
  154. casadi/include/casadi/core/runtime/casadi_mtimes.hpp +75 -0
  155. casadi/include/casadi/core/runtime/casadi_mv.hpp +46 -0
  156. casadi/include/casadi/core/runtime/casadi_mv_dense.hpp +39 -0
  157. casadi/include/casadi/core/runtime/casadi_nd_boor_dual_eval.hpp +127 -0
  158. casadi/include/casadi/core/runtime/casadi_nd_boor_eval.hpp +120 -0
  159. casadi/include/casadi/core/runtime/casadi_newton.hpp +66 -0
  160. casadi/include/casadi/core/runtime/casadi_nlp.hpp +289 -0
  161. casadi/include/casadi/core/runtime/casadi_norm_1.hpp +29 -0
  162. casadi/include/casadi/core/runtime/casadi_norm_2.hpp +24 -0
  163. casadi/include/casadi/core/runtime/casadi_norm_inf.hpp +28 -0
  164. casadi/include/casadi/core/runtime/casadi_norm_inf_mul.hpp +105 -0
  165. casadi/include/casadi/core/runtime/casadi_ocp_block.hpp +55 -0
  166. casadi/include/casadi/core/runtime/casadi_oracle.hpp +44 -0
  167. casadi/include/casadi/core/runtime/casadi_oracle_callback.hpp +39 -0
  168. casadi/include/casadi/core/runtime/casadi_polyval.hpp +29 -0
  169. casadi/include/casadi/core/runtime/casadi_project.hpp +39 -0
  170. casadi/include/casadi/core/runtime/casadi_qp.hpp +86 -0
  171. casadi/include/casadi/core/runtime/casadi_qr.hpp +272 -0
  172. casadi/include/casadi/core/runtime/casadi_qrqp.hpp +1239 -0
  173. casadi/include/casadi/core/runtime/casadi_rank1.hpp +40 -0
  174. casadi/include/casadi/core/runtime/casadi_regularize.hpp +73 -0
  175. casadi/include/casadi/core/runtime/casadi_runtime.hpp +318 -0
  176. casadi/include/casadi/core/runtime/casadi_scal.hpp +26 -0
  177. casadi/include/casadi/core/runtime/casadi_scaled_copy.hpp +31 -0
  178. casadi/include/casadi/core/runtime/casadi_sparsify.hpp +42 -0
  179. casadi/include/casadi/core/runtime/casadi_sparsity.hpp +24 -0
  180. casadi/include/casadi/core/runtime/casadi_sqpmethod.hpp +178 -0
  181. casadi/include/casadi/core/runtime/casadi_sum.hpp +31 -0
  182. casadi/include/casadi/core/runtime/casadi_sum_viol.hpp +37 -0
  183. casadi/include/casadi/core/runtime/casadi_swap.hpp +32 -0
  184. casadi/include/casadi/core/runtime/casadi_trans.hpp +35 -0
  185. casadi/include/casadi/core/runtime/casadi_tri_project.hpp +37 -0
  186. casadi/include/casadi/core/runtime/casadi_trilsolve.hpp +81 -0
  187. casadi/include/casadi/core/runtime/casadi_triusolve.hpp +81 -0
  188. casadi/include/casadi/core/runtime/casadi_vector_fmax.hpp +28 -0
  189. casadi/include/casadi/core/runtime/casadi_vector_fmin.hpp +28 -0
  190. casadi/include/casadi/core/runtime/casadi_vfmax.hpp +28 -0
  191. casadi/include/casadi/core/runtime/casadi_vfmin.hpp +28 -0
  192. casadi/include/casadi/core/runtime/shared.hpp +261 -0
  193. casadi/include/casadi/core/serializer.hpp +256 -0
  194. casadi/include/casadi/core/serializing_stream.hpp +329 -0
  195. casadi/include/casadi/core/shared_object.hpp +270 -0
  196. casadi/include/casadi/core/slice.hpp +149 -0
  197. casadi/include/casadi/core/sparsity.hpp +1495 -0
  198. casadi/include/casadi/core/sparsity_interface.hpp +745 -0
  199. casadi/include/casadi/core/submatrix.hpp +156 -0
  200. casadi/include/casadi/core/sx.hpp +203 -0
  201. casadi/include/casadi/core/sx_elem.hpp +351 -0
  202. casadi/include/casadi/core/sx_fwd.hpp +45 -0
  203. casadi/include/casadi/core/timing.hpp +98 -0
  204. casadi/include/casadi/core/tools.hpp +67 -0
  205. casadi/include/casadi/core/xml_file.hpp +93 -0
  206. casadi/include/casadi/core/xml_node.hpp +207 -0
  207. casadi/include/casadi/doc.i +58615 -0
  208. casadi/include/casadi/doc_merged.i +36123 -0
  209. casadi/include/casadi/mem.h +311 -0
  210. casadi/include/casadi/valgrind-casadi.supp +511 -0
  211. casadi/include/casadi/valgrind-python.supp +1416 -0
  212. casadi/include/coin/BonArraysHelpers.hpp +52 -0
  213. casadi/include/coin/BonAuxInfos.hpp +110 -0
  214. casadi/include/coin/BonBabInfos.hpp +57 -0
  215. casadi/include/coin/BonBabSetupBase.hpp +386 -0
  216. casadi/include/coin/BonBonminSetup.hpp +95 -0
  217. casadi/include/coin/BonBranchingTQP.hpp +197 -0
  218. casadi/include/coin/BonCbc.hpp +127 -0
  219. casadi/include/coin/BonCbcLpStrategy.hpp +45 -0
  220. casadi/include/coin/BonCbcNlpStrategy.hpp +98 -0
  221. casadi/include/coin/BonCbcNode.hpp +133 -0
  222. casadi/include/coin/BonChooseVariable.hpp +345 -0
  223. casadi/include/coin/BonCurvBranchingSolver.hpp +77 -0
  224. casadi/include/coin/BonCutStrengthener.hpp +244 -0
  225. casadi/include/coin/BonDiver.hpp +424 -0
  226. casadi/include/coin/BonDummyHeuristic.hpp +53 -0
  227. casadi/include/coin/BonDummyPump.hpp +43 -0
  228. casadi/include/coin/BonEcpCuts.hpp +97 -0
  229. casadi/include/coin/BonExitCodes.hpp +12 -0
  230. casadi/include/coin/BonFixAndSolveHeuristic.hpp +43 -0
  231. casadi/include/coin/BonGuessHeuristic.hpp +46 -0
  232. casadi/include/coin/BonHeuristicDive.hpp +88 -0
  233. casadi/include/coin/BonHeuristicDiveFractional.hpp +67 -0
  234. casadi/include/coin/BonHeuristicDiveMIP.hpp +83 -0
  235. casadi/include/coin/BonHeuristicDiveMIPFractional.hpp +67 -0
  236. casadi/include/coin/BonHeuristicDiveMIPVectorLength.hpp +74 -0
  237. casadi/include/coin/BonHeuristicDiveVectorLength.hpp +74 -0
  238. casadi/include/coin/BonHeuristicFPump.hpp +111 -0
  239. casadi/include/coin/BonHeuristicLocalBranching.hpp +59 -0
  240. casadi/include/coin/BonHeuristicRINS.hpp +55 -0
  241. casadi/include/coin/BonIpoptInteriorWarmStarter.hpp +103 -0
  242. casadi/include/coin/BonIpoptSolver.hpp +188 -0
  243. casadi/include/coin/BonIpoptWarmStart.hpp +148 -0
  244. casadi/include/coin/BonLinearCutsGenerator.hpp +75 -0
  245. casadi/include/coin/BonLocalSolverBasedHeuristic.hpp +102 -0
  246. casadi/include/coin/BonLpBranchingSolver.hpp +80 -0
  247. casadi/include/coin/BonMilpRounding.hpp +74 -0
  248. casadi/include/coin/BonOACutGenerator2.hpp +56 -0
  249. casadi/include/coin/BonOAMessages.hpp +44 -0
  250. casadi/include/coin/BonOaDecBase.hpp +297 -0
  251. casadi/include/coin/BonOaFeasChecker.hpp +73 -0
  252. casadi/include/coin/BonOaNlpOptim.hpp +116 -0
  253. casadi/include/coin/BonOsiTMINLPInterface.hpp +1342 -0
  254. casadi/include/coin/BonOuterApprox.hpp +123 -0
  255. casadi/include/coin/BonPseudoCosts.hpp +91 -0
  256. casadi/include/coin/BonPumpForMinlp.hpp +45 -0
  257. casadi/include/coin/BonQuadCut.hpp +217 -0
  258. casadi/include/coin/BonQuadRow.hpp +122 -0
  259. casadi/include/coin/BonRegisteredOptions.hpp +225 -0
  260. casadi/include/coin/BonStrongBranchingSolver.hpp +69 -0
  261. casadi/include/coin/BonSubMipSolver.hpp +143 -0
  262. casadi/include/coin/BonTMINLP.hpp +420 -0
  263. casadi/include/coin/BonTMINLP2OsiLP.hpp +164 -0
  264. casadi/include/coin/BonTMINLP2Quad.hpp +191 -0
  265. casadi/include/coin/BonTMINLP2TNLP.hpp +509 -0
  266. casadi/include/coin/BonTMINLPLinObj.hpp +216 -0
  267. casadi/include/coin/BonTMatrix.hpp +167 -0
  268. casadi/include/coin/BonTNLP2FPNLP.hpp +264 -0
  269. casadi/include/coin/BonTNLPSolver.hpp +241 -0
  270. casadi/include/coin/BonTypes.hpp +95 -0
  271. casadi/include/coin/BonminConfig.h +19 -0
  272. casadi/include/coin/CbcBranchActual.hpp +26 -0
  273. casadi/include/coin/CbcBranchAllDifferent.hpp +61 -0
  274. casadi/include/coin/CbcBranchBase.hpp +79 -0
  275. casadi/include/coin/CbcBranchCut.hpp +182 -0
  276. casadi/include/coin/CbcBranchDecision.hpp +135 -0
  277. casadi/include/coin/CbcBranchDefaultDecision.hpp +101 -0
  278. casadi/include/coin/CbcBranchDynamic.hpp +210 -0
  279. casadi/include/coin/CbcBranchLotsize.hpp +249 -0
  280. casadi/include/coin/CbcBranchToFixLots.hpp +94 -0
  281. casadi/include/coin/CbcBranchingObject.hpp +245 -0
  282. casadi/include/coin/CbcClique.hpp +309 -0
  283. casadi/include/coin/CbcCompare.hpp +46 -0
  284. casadi/include/coin/CbcCompareActual.hpp +16 -0
  285. casadi/include/coin/CbcCompareBase.hpp +155 -0
  286. casadi/include/coin/CbcCompareDefault.hpp +129 -0
  287. casadi/include/coin/CbcCompareDepth.hpp +48 -0
  288. casadi/include/coin/CbcCompareEstimate.hpp +48 -0
  289. casadi/include/coin/CbcCompareObjective.hpp +50 -0
  290. casadi/include/coin/CbcConfig.h +18 -0
  291. casadi/include/coin/CbcConsequence.hpp +50 -0
  292. casadi/include/coin/CbcCountRowCut.hpp +176 -0
  293. casadi/include/coin/CbcCutGenerator.hpp +550 -0
  294. casadi/include/coin/CbcCutModifier.hpp +59 -0
  295. casadi/include/coin/CbcCutSubsetModifier.hpp +69 -0
  296. casadi/include/coin/CbcDummyBranchingObject.hpp +83 -0
  297. casadi/include/coin/CbcEventHandler.hpp +250 -0
  298. casadi/include/coin/CbcFathom.hpp +136 -0
  299. casadi/include/coin/CbcFathomDynamicProgramming.hpp +177 -0
  300. casadi/include/coin/CbcFeasibilityBase.hpp +60 -0
  301. casadi/include/coin/CbcFixVariable.hpp +68 -0
  302. casadi/include/coin/CbcFollowOn.hpp +207 -0
  303. casadi/include/coin/CbcFullNodeInfo.hpp +171 -0
  304. casadi/include/coin/CbcGeneral.hpp +60 -0
  305. casadi/include/coin/CbcGeneralDepth.hpp +289 -0
  306. casadi/include/coin/CbcHeuristic.hpp +735 -0
  307. casadi/include/coin/CbcHeuristicDINS.hpp +98 -0
  308. casadi/include/coin/CbcHeuristicDW.hpp +374 -0
  309. casadi/include/coin/CbcHeuristicDive.hpp +198 -0
  310. casadi/include/coin/CbcHeuristicDiveCoefficient.hpp +52 -0
  311. casadi/include/coin/CbcHeuristicDiveFractional.hpp +52 -0
  312. casadi/include/coin/CbcHeuristicDiveGuided.hpp +55 -0
  313. casadi/include/coin/CbcHeuristicDiveLineSearch.hpp +52 -0
  314. casadi/include/coin/CbcHeuristicDivePseudoCost.hpp +60 -0
  315. casadi/include/coin/CbcHeuristicDiveVectorLength.hpp +52 -0
  316. casadi/include/coin/CbcHeuristicFPump.hpp +375 -0
  317. casadi/include/coin/CbcHeuristicGreedy.hpp +289 -0
  318. casadi/include/coin/CbcHeuristicLocal.hpp +276 -0
  319. casadi/include/coin/CbcHeuristicPivotAndFix.hpp +58 -0
  320. casadi/include/coin/CbcHeuristicRENS.hpp +79 -0
  321. casadi/include/coin/CbcHeuristicRINS.hpp +106 -0
  322. casadi/include/coin/CbcHeuristicRandRound.hpp +58 -0
  323. casadi/include/coin/CbcHeuristicVND.hpp +95 -0
  324. casadi/include/coin/CbcLinked.hpp +1443 -0
  325. casadi/include/coin/CbcMessage.hpp +94 -0
  326. casadi/include/coin/CbcMipStartIO.hpp +29 -0
  327. casadi/include/coin/CbcModel.hpp +3296 -0
  328. casadi/include/coin/CbcNWay.hpp +171 -0
  329. casadi/include/coin/CbcNode.hpp +380 -0
  330. casadi/include/coin/CbcNodeInfo.hpp +377 -0
  331. casadi/include/coin/CbcObject.hpp +288 -0
  332. casadi/include/coin/CbcObjectUpdateData.hpp +63 -0
  333. casadi/include/coin/CbcOrClpParam.cpp +4321 -0
  334. casadi/include/coin/CbcOrClpParam.hpp +585 -0
  335. casadi/include/coin/CbcParam.hpp +338 -0
  336. casadi/include/coin/CbcPartialNodeInfo.hpp +116 -0
  337. casadi/include/coin/CbcSOS.hpp +290 -0
  338. casadi/include/coin/CbcSimpleInteger.hpp +299 -0
  339. casadi/include/coin/CbcSimpleIntegerDynamicPseudoCost.hpp +619 -0
  340. casadi/include/coin/CbcSimpleIntegerPseudoCost.hpp +122 -0
  341. casadi/include/coin/CbcSolver.hpp +460 -0
  342. casadi/include/coin/CbcStrategy.hpp +269 -0
  343. casadi/include/coin/CbcSubProblem.hpp +84 -0
  344. casadi/include/coin/CbcTree.hpp +493 -0
  345. casadi/include/coin/CbcTreeLocal.hpp +393 -0
  346. casadi/include/coin/Cbc_C_Interface.h +904 -0
  347. casadi/include/coin/Cgl012cut.hpp +464 -0
  348. casadi/include/coin/CglAllDifferent.hpp +115 -0
  349. casadi/include/coin/CglClique.hpp +312 -0
  350. casadi/include/coin/CglConfig.h +19 -0
  351. casadi/include/coin/CglCutGenerator.hpp +133 -0
  352. casadi/include/coin/CglDuplicateRow.hpp +189 -0
  353. casadi/include/coin/CglFlowCover.hpp +371 -0
  354. casadi/include/coin/CglGMI.hpp +364 -0
  355. casadi/include/coin/CglGMIParam.hpp +313 -0
  356. casadi/include/coin/CglGomory.hpp +204 -0
  357. casadi/include/coin/CglKnapsackCover.hpp +310 -0
  358. casadi/include/coin/CglLandP.hpp +306 -0
  359. casadi/include/coin/CglLandPValidator.hpp +130 -0
  360. casadi/include/coin/CglLiftAndProject.hpp +104 -0
  361. casadi/include/coin/CglMessage.hpp +49 -0
  362. casadi/include/coin/CglMixedIntegerRounding.hpp +429 -0
  363. casadi/include/coin/CglMixedIntegerRounding2.hpp +427 -0
  364. casadi/include/coin/CglOddHole.hpp +160 -0
  365. casadi/include/coin/CglParam.hpp +93 -0
  366. casadi/include/coin/CglPreProcess.hpp +600 -0
  367. casadi/include/coin/CglProbing.hpp +543 -0
  368. casadi/include/coin/CglRedSplit.hpp +448 -0
  369. casadi/include/coin/CglRedSplit2.hpp +494 -0
  370. casadi/include/coin/CglRedSplit2Param.hpp +495 -0
  371. casadi/include/coin/CglRedSplitParam.hpp +272 -0
  372. casadi/include/coin/CglResidualCapacity.hpp +240 -0
  373. casadi/include/coin/CglSimpleRounding.hpp +174 -0
  374. casadi/include/coin/CglStored.hpp +140 -0
  375. casadi/include/coin/CglTreeInfo.hpp +216 -0
  376. casadi/include/coin/CglTwomir.hpp +562 -0
  377. casadi/include/coin/CglZeroHalf.hpp +133 -0
  378. casadi/include/coin/ClpAmplObjective.hpp +113 -0
  379. casadi/include/coin/ClpCholeskyBase.hpp +321 -0
  380. casadi/include/coin/ClpCholeskyDense.hpp +157 -0
  381. casadi/include/coin/ClpCholeskyMumps.hpp +65 -0
  382. casadi/include/coin/ClpCholeskyPardiso.hpp +67 -0
  383. casadi/include/coin/ClpConfig.h +17 -0
  384. casadi/include/coin/ClpConstraint.hpp +129 -0
  385. casadi/include/coin/ClpConstraintAmpl.hpp +109 -0
  386. casadi/include/coin/ClpConstraintLinear.hpp +113 -0
  387. casadi/include/coin/ClpConstraintQuadratic.hpp +123 -0
  388. casadi/include/coin/ClpDualRowDantzig.hpp +72 -0
  389. casadi/include/coin/ClpDualRowPivot.hpp +136 -0
  390. casadi/include/coin/ClpDualRowSteepest.hpp +160 -0
  391. casadi/include/coin/ClpDummyMatrix.hpp +186 -0
  392. casadi/include/coin/ClpDynamicExampleMatrix.hpp +199 -0
  393. casadi/include/coin/ClpDynamicMatrix.hpp +420 -0
  394. casadi/include/coin/ClpEventHandler.hpp +193 -0
  395. casadi/include/coin/ClpFactorization.hpp +556 -0
  396. casadi/include/coin/ClpGubDynamicMatrix.hpp +270 -0
  397. casadi/include/coin/ClpGubMatrix.hpp +373 -0
  398. casadi/include/coin/ClpInterior.hpp +622 -0
  399. casadi/include/coin/ClpLinearObjective.hpp +104 -0
  400. casadi/include/coin/ClpMatrixBase.hpp +561 -0
  401. casadi/include/coin/ClpMessage.hpp +131 -0
  402. casadi/include/coin/ClpModel.hpp +1442 -0
  403. casadi/include/coin/ClpNetworkMatrix.hpp +235 -0
  404. casadi/include/coin/ClpNode.hpp +364 -0
  405. casadi/include/coin/ClpNonLinearCost.hpp +432 -0
  406. casadi/include/coin/ClpObjective.hpp +142 -0
  407. casadi/include/coin/ClpPEDualRowDantzig.hpp +84 -0
  408. casadi/include/coin/ClpPEDualRowSteepest.hpp +100 -0
  409. casadi/include/coin/ClpPEPrimalColumnDantzig.hpp +71 -0
  410. casadi/include/coin/ClpPEPrimalColumnSteepest.hpp +107 -0
  411. casadi/include/coin/ClpPESimplex.hpp +231 -0
  412. casadi/include/coin/ClpPackedMatrix.hpp +778 -0
  413. casadi/include/coin/ClpParameters.hpp +132 -0
  414. casadi/include/coin/ClpPdcoBase.hpp +110 -0
  415. casadi/include/coin/ClpPlusMinusOneMatrix.hpp +565 -0
  416. casadi/include/coin/ClpPresolve.hpp +379 -0
  417. casadi/include/coin/ClpPrimalColumnDantzig.hpp +74 -0
  418. casadi/include/coin/ClpPrimalColumnPivot.hpp +163 -0
  419. casadi/include/coin/ClpPrimalColumnSteepest.hpp +281 -0
  420. casadi/include/coin/ClpQuadraticObjective.hpp +161 -0
  421. casadi/include/coin/ClpSimplex.hpp +2137 -0
  422. casadi/include/coin/ClpSimplexDual.hpp +304 -0
  423. casadi/include/coin/ClpSimplexNonlinear.hpp +117 -0
  424. casadi/include/coin/ClpSimplexOther.hpp +282 -0
  425. casadi/include/coin/ClpSimplexPrimal.hpp +244 -0
  426. casadi/include/coin/ClpSolve.hpp +505 -0
  427. casadi/include/coin/Clp_C_Interface.h +554 -0
  428. casadi/include/coin/CoinAlloc.hpp +179 -0
  429. casadi/include/coin/CoinBuild.hpp +159 -0
  430. casadi/include/coin/CoinDenseFactorization.hpp +452 -0
  431. casadi/include/coin/CoinDenseVector.hpp +401 -0
  432. casadi/include/coin/CoinDistance.hpp +51 -0
  433. casadi/include/coin/CoinError.hpp +274 -0
  434. casadi/include/coin/CoinFactorization.hpp +2178 -0
  435. casadi/include/coin/CoinFileIO.hpp +185 -0
  436. casadi/include/coin/CoinFinite.hpp +37 -0
  437. casadi/include/coin/CoinFloatEqual.hpp +204 -0
  438. casadi/include/coin/CoinHelperFunctions.hpp +1270 -0
  439. casadi/include/coin/CoinIndexedVector.hpp +1437 -0
  440. casadi/include/coin/CoinLpIO.hpp +836 -0
  441. casadi/include/coin/CoinMessage.hpp +95 -0
  442. casadi/include/coin/CoinMessageHandler.hpp +717 -0
  443. casadi/include/coin/CoinModel.hpp +1214 -0
  444. casadi/include/coin/CoinModelUseful.hpp +518 -0
  445. casadi/include/coin/CoinMpsIO.hpp +1142 -0
  446. casadi/include/coin/CoinOslFactorization.hpp +287 -0
  447. casadi/include/coin/CoinPackedMatrix.hpp +956 -0
  448. casadi/include/coin/CoinPackedVector.hpp +670 -0
  449. casadi/include/coin/CoinPackedVectorBase.hpp +274 -0
  450. casadi/include/coin/CoinParam.hpp +644 -0
  451. casadi/include/coin/CoinPragma.hpp +29 -0
  452. casadi/include/coin/CoinPresolveDoubleton.hpp +76 -0
  453. casadi/include/coin/CoinPresolveDual.hpp +84 -0
  454. casadi/include/coin/CoinPresolveDupcol.hpp +259 -0
  455. casadi/include/coin/CoinPresolveEmpty.hpp +120 -0
  456. casadi/include/coin/CoinPresolveFixed.hpp +185 -0
  457. casadi/include/coin/CoinPresolveForcing.hpp +69 -0
  458. casadi/include/coin/CoinPresolveImpliedFree.hpp +66 -0
  459. casadi/include/coin/CoinPresolveIsolated.hpp +59 -0
  460. casadi/include/coin/CoinPresolveMatrix.hpp +1996 -0
  461. casadi/include/coin/CoinPresolveMonitor.hpp +105 -0
  462. casadi/include/coin/CoinPresolvePsdebug.hpp +169 -0
  463. casadi/include/coin/CoinPresolveSingleton.hpp +115 -0
  464. casadi/include/coin/CoinPresolveSubst.hpp +103 -0
  465. casadi/include/coin/CoinPresolveTighten.hpp +58 -0
  466. casadi/include/coin/CoinPresolveTripleton.hpp +69 -0
  467. casadi/include/coin/CoinPresolveUseless.hpp +63 -0
  468. casadi/include/coin/CoinPresolveZeros.hpp +65 -0
  469. casadi/include/coin/CoinRational.hpp +43 -0
  470. casadi/include/coin/CoinSearchTree.hpp +523 -0
  471. casadi/include/coin/CoinShallowPackedVector.hpp +149 -0
  472. casadi/include/coin/CoinSignal.hpp +127 -0
  473. casadi/include/coin/CoinSimpFactorization.hpp +432 -0
  474. casadi/include/coin/CoinSmartPtr.hpp +548 -0
  475. casadi/include/coin/CoinSnapshot.hpp +572 -0
  476. casadi/include/coin/CoinSort.hpp +753 -0
  477. casadi/include/coin/CoinStructuredModel.hpp +270 -0
  478. casadi/include/coin/CoinTime.hpp +350 -0
  479. casadi/include/coin/CoinTypes.hpp +67 -0
  480. casadi/include/coin/CoinUtility.hpp +26 -0
  481. casadi/include/coin/CoinUtilsConfig.h +34 -0
  482. casadi/include/coin/CoinWarmStart.hpp +56 -0
  483. casadi/include/coin/CoinWarmStartBasis.hpp +468 -0
  484. casadi/include/coin/CoinWarmStartDual.hpp +180 -0
  485. casadi/include/coin/CoinWarmStartPrimalDual.hpp +233 -0
  486. casadi/include/coin/CoinWarmStartVector.hpp +523 -0
  487. casadi/include/coin/Coin_C_defines.h +149 -0
  488. casadi/include/coin/Idiot.hpp +327 -0
  489. casadi/include/coin/OsiAuxInfo.hpp +261 -0
  490. casadi/include/coin/OsiBranchingObject.hpp +1097 -0
  491. casadi/include/coin/OsiCbcSolverInterface.hpp +791 -0
  492. casadi/include/coin/OsiChooseVariable.hpp +645 -0
  493. casadi/include/coin/OsiClpSolverInterface.hpp +1604 -0
  494. casadi/include/coin/OsiColCut.hpp +322 -0
  495. casadi/include/coin/OsiCollections.hpp +34 -0
  496. casadi/include/coin/OsiConfig.h +19 -0
  497. casadi/include/coin/OsiCut.hpp +251 -0
  498. casadi/include/coin/OsiCuts.hpp +505 -0
  499. casadi/include/coin/OsiPresolve.hpp +272 -0
  500. casadi/include/coin/OsiRowCut.hpp +345 -0
  501. casadi/include/coin/OsiRowCutDebugger.hpp +190 -0
  502. casadi/include/coin/OsiSolverBranch.hpp +169 -0
  503. casadi/include/coin/OsiSolverInterface.hpp +2221 -0
  504. casadi/include/coin/OsiSolverParameters.hpp +144 -0
  505. casadi/include/coin/OsiUnitTests.hpp +390 -0
  506. casadi/include/coin-or/IpAlgBuilder.hpp +417 -0
  507. casadi/include/coin-or/IpAlgStrategy.hpp +201 -0
  508. casadi/include/coin-or/IpAlgTypes.hpp +64 -0
  509. casadi/include/coin-or/IpAugSystemSolver.hpp +212 -0
  510. casadi/include/coin-or/IpBlas.hpp +426 -0
  511. casadi/include/coin-or/IpCachedResults.hpp +897 -0
  512. casadi/include/coin-or/IpCompoundMatrix.hpp +423 -0
  513. casadi/include/coin-or/IpCompoundSymMatrix.hpp +348 -0
  514. casadi/include/coin-or/IpCompoundVector.hpp +395 -0
  515. casadi/include/coin-or/IpConvCheck.hpp +97 -0
  516. casadi/include/coin-or/IpDebug.hpp +167 -0
  517. casadi/include/coin-or/IpDenseVector.hpp +626 -0
  518. casadi/include/coin-or/IpDiagMatrix.hpp +158 -0
  519. casadi/include/coin-or/IpEqMultCalculator.hpp +76 -0
  520. casadi/include/coin-or/IpException.hpp +156 -0
  521. casadi/include/coin-or/IpExpansionMatrix.hpp +245 -0
  522. casadi/include/coin-or/IpGenTMatrix.hpp +290 -0
  523. casadi/include/coin-or/IpHessianUpdater.hpp +73 -0
  524. casadi/include/coin-or/IpIdentityMatrix.hpp +167 -0
  525. casadi/include/coin-or/IpIpoptAlg.hpp +257 -0
  526. casadi/include/coin-or/IpIpoptApplication.hpp +367 -0
  527. casadi/include/coin-or/IpIpoptCalculatedQuantities.hpp +1009 -0
  528. casadi/include/coin-or/IpIpoptData.hpp +966 -0
  529. casadi/include/coin-or/IpIpoptNLP.hpp +328 -0
  530. casadi/include/coin-or/IpIterateInitializer.hpp +68 -0
  531. casadi/include/coin-or/IpIteratesVector.hpp +840 -0
  532. casadi/include/coin-or/IpIterationOutput.hpp +78 -0
  533. casadi/include/coin-or/IpJournalist.hpp +573 -0
  534. casadi/include/coin-or/IpLapack.hpp +227 -0
  535. casadi/include/coin-or/IpLibraryLoader.hpp +76 -0
  536. casadi/include/coin-or/IpLineSearch.hpp +106 -0
  537. casadi/include/coin-or/IpLinearSolvers.h +46 -0
  538. casadi/include/coin-or/IpMatrix.hpp +434 -0
  539. casadi/include/coin-or/IpMuUpdate.hpp +77 -0
  540. casadi/include/coin-or/IpNLP.hpp +306 -0
  541. casadi/include/coin-or/IpNLPScaling.hpp +582 -0
  542. casadi/include/coin-or/IpObserver.hpp +422 -0
  543. casadi/include/coin-or/IpOptionsList.hpp +412 -0
  544. casadi/include/coin-or/IpOrigIpoptNLP.hpp +603 -0
  545. casadi/include/coin-or/IpPDSystemSolver.hpp +137 -0
  546. casadi/include/coin-or/IpReferenced.hpp +262 -0
  547. casadi/include/coin-or/IpRegOptions.hpp +1152 -0
  548. casadi/include/coin-or/IpReturnCodes.h +23 -0
  549. casadi/include/coin-or/IpReturnCodes.hpp +18 -0
  550. casadi/include/coin-or/IpReturnCodes.inc +71 -0
  551. casadi/include/coin-or/IpReturnCodes_inc.h +45 -0
  552. casadi/include/coin-or/IpScaledMatrix.hpp +291 -0
  553. casadi/include/coin-or/IpSearchDirCalculator.hpp +72 -0
  554. casadi/include/coin-or/IpSmartPtr.hpp +865 -0
  555. casadi/include/coin-or/IpSolveStatistics.hpp +210 -0
  556. casadi/include/coin-or/IpSparseSymLinearSolverInterface.hpp +260 -0
  557. casadi/include/coin-or/IpStdAugSystemSolver.cpp +555 -0
  558. casadi/include/coin-or/IpStdCInterface.h +428 -0
  559. casadi/include/coin-or/IpSumSymMatrix.hpp +186 -0
  560. casadi/include/coin-or/IpSymLinearSolver.hpp +141 -0
  561. casadi/include/coin-or/IpSymMatrix.hpp +167 -0
  562. casadi/include/coin-or/IpSymScaledMatrix.hpp +255 -0
  563. casadi/include/coin-or/IpSymTMatrix.hpp +275 -0
  564. casadi/include/coin-or/IpTNLP.hpp +820 -0
  565. casadi/include/coin-or/IpTNLPAdapter.hpp +648 -0
  566. casadi/include/coin-or/IpTNLPReducer.hpp +274 -0
  567. casadi/include/coin-or/IpTaggedObject.hpp +128 -0
  568. casadi/include/coin-or/IpTimedTask.hpp +218 -0
  569. casadi/include/coin-or/IpTimingStatistics.hpp +323 -0
  570. casadi/include/coin-or/IpTripletHelper.hpp +308 -0
  571. casadi/include/coin-or/IpTypes.h +81 -0
  572. casadi/include/coin-or/IpTypes.hpp +30 -0
  573. casadi/include/coin-or/IpUtils.hpp +166 -0
  574. casadi/include/coin-or/IpVector.hpp +892 -0
  575. casadi/include/coin-or/IpZeroSymMatrix.hpp +155 -0
  576. casadi/include/coin-or/IpoptConfig.h +45 -0
  577. casadi/include/coin-or/SensAlgorithm.hpp +114 -0
  578. casadi/include/coin-or/SensApplication.hpp +188 -0
  579. casadi/include/coin-or/SensBacksolver.hpp +36 -0
  580. casadi/include/coin-or/SensMeasurement.hpp +56 -0
  581. casadi/include/coin-or/SensPCalculator.hpp +137 -0
  582. casadi/include/coin-or/SensRegOp.hpp +21 -0
  583. casadi/include/coin-or/SensSchurData.hpp +182 -0
  584. casadi/include/coin-or/SensSchurDriver.hpp +118 -0
  585. casadi/include/coin-or/SensSimpleBacksolver.hpp +49 -0
  586. casadi/include/coin-or/SensStepCalc.hpp +85 -0
  587. casadi/include/coin-or/SensUtils.hpp +63 -0
  588. casadi/include/coin-or/metis/defs.h +161 -0
  589. casadi/include/coin-or/metis/macros.h +143 -0
  590. casadi/include/coin-or/metis/metis.h +37 -0
  591. casadi/include/coin-or/metis/proto.h +505 -0
  592. casadi/include/coin-or/metis/rename.h +418 -0
  593. casadi/include/coin-or/metis/struct.h +251 -0
  594. casadi/include/coin-or/mumps/dmumps_c.h +142 -0
  595. casadi/include/coin-or/mumps/mumps_c_types.h +72 -0
  596. casadi/include/coin-or/mumps/mumps_compat.h +27 -0
  597. casadi/include/coin-or/mumps/mumps_int_def.h +11 -0
  598. casadi/include/coin-or/mumps/mumps_mpi.h +67 -0
  599. casadi/include/d_blas.h +78 -0
  600. casadi/include/d_blas_64.h +73 -0
  601. casadi/include/fatrop/auxiliary/Common.hpp +34 -0
  602. casadi/include/fatrop/auxiliary/DynamicLib.hpp +34 -0
  603. casadi/include/fatrop/auxiliary/FatropOptions.hpp +68 -0
  604. casadi/include/fatrop/auxiliary/FatropVector.hpp +143 -0
  605. casadi/include/fatrop/auxiliary/LinearAlgebra.hpp +88 -0
  606. casadi/include/fatrop/auxiliary/VectorUtils.hpp +54 -0
  607. casadi/include/fatrop/blasfeo_wrapper/LinearAlgebraBlasfeo.hpp +493 -0
  608. casadi/include/fatrop/fatrop.hpp +39 -0
  609. casadi/include/fatrop/function_evaluation/CasadiCodegen.hpp +104 -0
  610. casadi/include/fatrop/function_evaluation/FunctionEvaluation.hpp +60 -0
  611. casadi/include/fatrop/json/json.h +946 -0
  612. casadi/include/fatrop/ocp/CasadiCApiUserdataWrap.hpp +87 -0
  613. casadi/include/fatrop/ocp/DuInfEvaluator.hpp +38 -0
  614. casadi/include/fatrop/ocp/FatropOCP.hpp +161 -0
  615. casadi/include/fatrop/ocp/FatropOCPBuilder.hpp +52 -0
  616. casadi/include/fatrop/ocp/FatropOCPResto.hpp +299 -0
  617. casadi/include/fatrop/ocp/OCP.hpp +82 -0
  618. casadi/include/fatrop/ocp/OCPAbstract.hpp +254 -0
  619. casadi/include/fatrop/ocp/OCPAdapter.hpp +197 -0
  620. casadi/include/fatrop/ocp/OCPCInterface.h +289 -0
  621. casadi/include/fatrop/ocp/OCPDims.hpp +60 -0
  622. casadi/include/fatrop/ocp/OCPInitializer.hpp +41 -0
  623. casadi/include/fatrop/ocp/OCPKKT.hpp +69 -0
  624. casadi/include/fatrop/ocp/OCPLSRiccati.hpp +198 -0
  625. casadi/include/fatrop/ocp/OCPLSScaler.hpp +66 -0
  626. casadi/include/fatrop/ocp/OCPLinearSolver.hpp +75 -0
  627. casadi/include/fatrop/ocp/OCPNoScaling.hpp +42 -0
  628. casadi/include/fatrop/ocp/OCPScalingMethod.hpp +42 -0
  629. casadi/include/fatrop/ocp/StageOCP.hpp +592 -0
  630. casadi/include/fatrop/ocp/StageOCPApplication.hpp +242 -0
  631. casadi/include/fatrop/ocp/StageOCPExpressions.hpp +182 -0
  632. casadi/include/fatrop/ocp/UStageEvalAbstract.hpp +168 -0
  633. casadi/include/fatrop/ocp/UStageOCPImpl.hpp +152 -0
  634. casadi/include/fatrop/quasi_newton/bfgs.hpp +159 -0
  635. casadi/include/fatrop/solver/AlgBuilder.hpp +76 -0
  636. casadi/include/fatrop/solver/AlgStrategy.hpp +33 -0
  637. casadi/include/fatrop/solver/FatropAlg.hpp +121 -0
  638. casadi/include/fatrop/solver/FatropData.hpp +188 -0
  639. casadi/include/fatrop/solver/FatropOptions.hpp +95 -0
  640. casadi/include/fatrop/solver/FatropPrinter.hpp +65 -0
  641. casadi/include/fatrop/solver/FatropStats.hpp +63 -0
  642. casadi/include/fatrop/solver/Filter.hpp +54 -0
  643. casadi/include/fatrop/solver/IterationData.hpp +56 -0
  644. casadi/include/fatrop/solver/LineSearch.hpp +86 -0
  645. casadi/include/fatrop/solver/NLPL1.hpp +263 -0
  646. casadi/include/fatrop/templates/NLPAlg.hpp +104 -0
  647. casadi/include/highs/HConfig.h +21 -0
  648. casadi/include/highs/Highs.h +1529 -0
  649. casadi/include/highs/filereaderlp/builder.hpp +25 -0
  650. casadi/include/highs/filereaderlp/def.hpp +19 -0
  651. casadi/include/highs/filereaderlp/model.hpp +68 -0
  652. casadi/include/highs/filereaderlp/reader.hpp +10 -0
  653. casadi/include/highs/interfaces/highs_c_api.h +2283 -0
  654. casadi/include/highs/io/Filereader.h +47 -0
  655. casadi/include/highs/io/FilereaderEms.h +33 -0
  656. casadi/include/highs/io/FilereaderLp.h +54 -0
  657. casadi/include/highs/io/FilereaderMps.h +30 -0
  658. casadi/include/highs/io/HMPSIO.h +81 -0
  659. casadi/include/highs/io/HMpsFF.h +235 -0
  660. casadi/include/highs/io/HighsIO.h +109 -0
  661. casadi/include/highs/io/LoadOptions.h +27 -0
  662. casadi/include/highs/ipm/IpxSolution.h +35 -0
  663. casadi/include/highs/ipm/IpxWrapper.h +73 -0
  664. casadi/include/highs/ipm/basiclu/basiclu.h +161 -0
  665. casadi/include/highs/ipm/basiclu/basiclu_factorize.h +247 -0
  666. casadi/include/highs/ipm/basiclu/basiclu_get_factors.h +108 -0
  667. casadi/include/highs/ipm/basiclu/basiclu_initialize.h +119 -0
  668. casadi/include/highs/ipm/basiclu/basiclu_obj_factorize.h +34 -0
  669. casadi/include/highs/ipm/basiclu/basiclu_obj_free.h +19 -0
  670. casadi/include/highs/ipm/basiclu/basiclu_obj_get_factors.h +34 -0
  671. casadi/include/highs/ipm/basiclu/basiclu_obj_initialize.h +46 -0
  672. casadi/include/highs/ipm/basiclu/basiclu_obj_solve_dense.h +29 -0
  673. casadi/include/highs/ipm/basiclu/basiclu_obj_solve_for_update.h +42 -0
  674. casadi/include/highs/ipm/basiclu/basiclu_obj_solve_sparse.h +32 -0
  675. casadi/include/highs/ipm/basiclu/basiclu_obj_update.h +31 -0
  676. casadi/include/highs/ipm/basiclu/basiclu_object.h +30 -0
  677. casadi/include/highs/ipm/basiclu/basiclu_solve_dense.h +75 -0
  678. casadi/include/highs/ipm/basiclu/basiclu_solve_for_update.h +169 -0
  679. casadi/include/highs/ipm/basiclu/basiclu_solve_sparse.h +112 -0
  680. casadi/include/highs/ipm/basiclu/basiclu_update.h +125 -0
  681. casadi/include/highs/ipm/basiclu/lu_def.h +39 -0
  682. casadi/include/highs/ipm/basiclu/lu_file.h +21 -0
  683. casadi/include/highs/ipm/basiclu/lu_internal.h +220 -0
  684. casadi/include/highs/ipm/basiclu/lu_list.h +168 -0
  685. casadi/include/highs/ipm/ipx/basiclu_kernel.h +20 -0
  686. casadi/include/highs/ipm/ipx/basiclu_wrapper.h +47 -0
  687. casadi/include/highs/ipm/ipx/basis.h +351 -0
  688. casadi/include/highs/ipm/ipx/conjugate_residuals.h +74 -0
  689. casadi/include/highs/ipm/ipx/control.h +163 -0
  690. casadi/include/highs/ipm/ipx/crossover.h +157 -0
  691. casadi/include/highs/ipm/ipx/diagonal_precond.h +45 -0
  692. casadi/include/highs/ipm/ipx/forrest_tomlin.h +102 -0
  693. casadi/include/highs/ipm/ipx/guess_basis.h +21 -0
  694. casadi/include/highs/ipm/ipx/indexed_vector.h +113 -0
  695. casadi/include/highs/ipm/ipx/info.h +27 -0
  696. casadi/include/highs/ipm/ipx/ipm.h +94 -0
  697. casadi/include/highs/ipm/ipx/ipx_c.h +47 -0
  698. casadi/include/highs/ipm/ipx/ipx_config.h +9 -0
  699. casadi/include/highs/ipm/ipx/ipx_info.h +111 -0
  700. casadi/include/highs/ipm/ipx/ipx_internal.h +88 -0
  701. casadi/include/highs/ipm/ipx/ipx_parameters.h +75 -0
  702. casadi/include/highs/ipm/ipx/ipx_status.h +57 -0
  703. casadi/include/highs/ipm/ipx/iterate.h +328 -0
  704. casadi/include/highs/ipm/ipx/kkt_solver.h +70 -0
  705. casadi/include/highs/ipm/ipx/kkt_solver_basis.h +66 -0
  706. casadi/include/highs/ipm/ipx/kkt_solver_diag.h +48 -0
  707. casadi/include/highs/ipm/ipx/linear_operator.h +26 -0
  708. casadi/include/highs/ipm/ipx/lp_solver.h +201 -0
  709. casadi/include/highs/ipm/ipx/lu_factorization.h +79 -0
  710. casadi/include/highs/ipm/ipx/lu_update.h +129 -0
  711. casadi/include/highs/ipm/ipx/maxvolume.h +54 -0
  712. casadi/include/highs/ipm/ipx/model.h +409 -0
  713. casadi/include/highs/ipm/ipx/multistream.h +52 -0
  714. casadi/include/highs/ipm/ipx/normal_matrix.h +44 -0
  715. casadi/include/highs/ipm/ipx/power_method.h +44 -0
  716. casadi/include/highs/ipm/ipx/sparse_matrix.h +195 -0
  717. casadi/include/highs/ipm/ipx/sparse_utils.h +58 -0
  718. casadi/include/highs/ipm/ipx/splitted_normal_matrix.h +63 -0
  719. casadi/include/highs/ipm/ipx/starting_basis.h +39 -0
  720. casadi/include/highs/ipm/ipx/symbolic_invert.h +29 -0
  721. casadi/include/highs/ipm/ipx/timer.h +24 -0
  722. casadi/include/highs/ipm/ipx/utils.h +39 -0
  723. casadi/include/highs/lp_data/HConst.h +305 -0
  724. casadi/include/highs/lp_data/HStruct.h +146 -0
  725. casadi/include/highs/lp_data/HighsAnalysis.h +26 -0
  726. casadi/include/highs/lp_data/HighsCallback.h +40 -0
  727. casadi/include/highs/lp_data/HighsCallbackStruct.h +62 -0
  728. casadi/include/highs/lp_data/HighsDebug.h +37 -0
  729. casadi/include/highs/lp_data/HighsInfo.h +322 -0
  730. casadi/include/highs/lp_data/HighsInfoDebug.h +30 -0
  731. casadi/include/highs/lp_data/HighsLp.h +101 -0
  732. casadi/include/highs/lp_data/HighsLpSolverObject.h +48 -0
  733. casadi/include/highs/lp_data/HighsLpUtils.h +266 -0
  734. casadi/include/highs/lp_data/HighsModelUtils.h +109 -0
  735. casadi/include/highs/lp_data/HighsOptions.h +1357 -0
  736. casadi/include/highs/lp_data/HighsRanging.h +46 -0
  737. casadi/include/highs/lp_data/HighsRuntimeOptions.h +276 -0
  738. casadi/include/highs/lp_data/HighsSolution.h +137 -0
  739. casadi/include/highs/lp_data/HighsSolutionDebug.h +90 -0
  740. casadi/include/highs/lp_data/HighsSolve.h +26 -0
  741. casadi/include/highs/lp_data/HighsStatus.h +32 -0
  742. casadi/include/highs/mip/HighsCliqueTable.h +318 -0
  743. casadi/include/highs/mip/HighsConflictPool.h +112 -0
  744. casadi/include/highs/mip/HighsCutGeneration.h +96 -0
  745. casadi/include/highs/mip/HighsCutPool.h +171 -0
  746. casadi/include/highs/mip/HighsDebugSol.h +135 -0
  747. casadi/include/highs/mip/HighsDomain.h +641 -0
  748. casadi/include/highs/mip/HighsDomainChange.h +51 -0
  749. casadi/include/highs/mip/HighsDynamicRowMatrix.h +107 -0
  750. casadi/include/highs/mip/HighsGFkSolve.h +441 -0
  751. casadi/include/highs/mip/HighsImplications.h +146 -0
  752. casadi/include/highs/mip/HighsLpAggregator.h +53 -0
  753. casadi/include/highs/mip/HighsLpRelaxation.h +360 -0
  754. casadi/include/highs/mip/HighsMipSolver.h +105 -0
  755. casadi/include/highs/mip/HighsMipSolverData.h +236 -0
  756. casadi/include/highs/mip/HighsModkSeparator.h +63 -0
  757. casadi/include/highs/mip/HighsNodeQueue.h +314 -0
  758. casadi/include/highs/mip/HighsObjectiveFunction.h +74 -0
  759. casadi/include/highs/mip/HighsPathSeparator.h +42 -0
  760. casadi/include/highs/mip/HighsPrimalHeuristics.h +68 -0
  761. casadi/include/highs/mip/HighsPseudocost.h +363 -0
  762. casadi/include/highs/mip/HighsRedcostFixing.h +45 -0
  763. casadi/include/highs/mip/HighsSearch.h +244 -0
  764. casadi/include/highs/mip/HighsSeparation.h +44 -0
  765. casadi/include/highs/mip/HighsSeparator.h +56 -0
  766. casadi/include/highs/mip/HighsTableauSeparator.h +37 -0
  767. casadi/include/highs/mip/HighsTransformedLp.h +66 -0
  768. casadi/include/highs/model/HighsHessian.h +54 -0
  769. casadi/include/highs/model/HighsHessianUtils.h +49 -0
  770. casadi/include/highs/model/HighsModel.h +52 -0
  771. casadi/include/highs/parallel/HighsBinarySemaphore.h +113 -0
  772. casadi/include/highs/parallel/HighsCacheAlign.h +87 -0
  773. casadi/include/highs/parallel/HighsCombinable.h +121 -0
  774. casadi/include/highs/parallel/HighsMutex.h +129 -0
  775. casadi/include/highs/parallel/HighsParallel.h +133 -0
  776. casadi/include/highs/parallel/HighsRaceTimer.h +43 -0
  777. casadi/include/highs/parallel/HighsSchedulerConstants.h +24 -0
  778. casadi/include/highs/parallel/HighsSpinMutex.h +53 -0
  779. casadi/include/highs/parallel/HighsSplitDeque.h +583 -0
  780. casadi/include/highs/parallel/HighsTask.h +175 -0
  781. casadi/include/highs/parallel/HighsTaskExecutor.h +209 -0
  782. casadi/include/highs/pdlp/CupdlpWrapper.h +93 -0
  783. casadi/include/highs/pdlp/cupdlp/cupdlp_cs.h +41 -0
  784. casadi/include/highs/pdlp/cupdlp/cupdlp_defs.h +423 -0
  785. casadi/include/highs/pdlp/cupdlp/cupdlp_linalg.h +183 -0
  786. casadi/include/highs/pdlp/cupdlp/cupdlp_proj.h +19 -0
  787. casadi/include/highs/pdlp/cupdlp/cupdlp_restart.h +31 -0
  788. casadi/include/highs/pdlp/cupdlp/cupdlp_scaling_cuda.h +28 -0
  789. casadi/include/highs/pdlp/cupdlp/cupdlp_solver.h +98 -0
  790. casadi/include/highs/pdlp/cupdlp/cupdlp_step.h +33 -0
  791. casadi/include/highs/pdlp/cupdlp/cupdlp_utils.c +1726 -0
  792. casadi/include/highs/pdqsort/pdqsort.h +532 -0
  793. casadi/include/highs/presolve/HPresolve.h +365 -0
  794. casadi/include/highs/presolve/HPresolveAnalysis.h +54 -0
  795. casadi/include/highs/presolve/HighsPostsolveStack.h +907 -0
  796. casadi/include/highs/presolve/HighsSymmetry.h +284 -0
  797. casadi/include/highs/presolve/ICrash.h +127 -0
  798. casadi/include/highs/presolve/ICrashUtil.h +65 -0
  799. casadi/include/highs/presolve/ICrashX.h +26 -0
  800. casadi/include/highs/presolve/PresolveComponent.h +93 -0
  801. casadi/include/highs/qpsolver/a_asm.hpp +67 -0
  802. casadi/include/highs/qpsolver/a_quass.hpp +19 -0
  803. casadi/include/highs/qpsolver/basis.hpp +150 -0
  804. casadi/include/highs/qpsolver/crashsolution.hpp +12 -0
  805. casadi/include/highs/qpsolver/dantzigpricing.hpp +72 -0
  806. casadi/include/highs/qpsolver/devexpricing.hpp +99 -0
  807. casadi/include/highs/qpsolver/eventhandler.hpp +23 -0
  808. casadi/include/highs/qpsolver/factor.hpp +400 -0
  809. casadi/include/highs/qpsolver/feasibility_bounded.hpp +105 -0
  810. casadi/include/highs/qpsolver/feasibility_highs.hpp +270 -0
  811. casadi/include/highs/qpsolver/gradient.hpp +39 -0
  812. casadi/include/highs/qpsolver/instance.hpp +63 -0
  813. casadi/include/highs/qpsolver/matrix.hpp +335 -0
  814. casadi/include/highs/qpsolver/perturbation.hpp +8 -0
  815. casadi/include/highs/qpsolver/pricing.hpp +15 -0
  816. casadi/include/highs/qpsolver/qpconst.hpp +27 -0
  817. casadi/include/highs/qpsolver/qpvector.hpp +235 -0
  818. casadi/include/highs/qpsolver/quass.hpp +20 -0
  819. casadi/include/highs/qpsolver/ratiotest.hpp +19 -0
  820. casadi/include/highs/qpsolver/runtime.hpp +38 -0
  821. casadi/include/highs/qpsolver/scaling.hpp +8 -0
  822. casadi/include/highs/qpsolver/settings.hpp +57 -0
  823. casadi/include/highs/qpsolver/snippets.hpp +29 -0
  824. casadi/include/highs/qpsolver/statistics.hpp +23 -0
  825. casadi/include/highs/qpsolver/steepestedgepricing.hpp +167 -0
  826. casadi/include/highs/simplex/HApp.h +422 -0
  827. casadi/include/highs/simplex/HEkk.h +403 -0
  828. casadi/include/highs/simplex/HEkkDual.h +515 -0
  829. casadi/include/highs/simplex/HEkkDualRHS.h +137 -0
  830. casadi/include/highs/simplex/HEkkDualRow.h +204 -0
  831. casadi/include/highs/simplex/HEkkPrimal.h +195 -0
  832. casadi/include/highs/simplex/HSimplex.h +45 -0
  833. casadi/include/highs/simplex/HSimplexDebug.h +51 -0
  834. casadi/include/highs/simplex/HSimplexNla.h +184 -0
  835. casadi/include/highs/simplex/HSimplexReport.h +24 -0
  836. casadi/include/highs/simplex/HighsSimplexAnalysis.h +503 -0
  837. casadi/include/highs/simplex/SimplexConst.h +274 -0
  838. casadi/include/highs/simplex/SimplexStruct.h +264 -0
  839. casadi/include/highs/simplex/SimplexTimer.h +427 -0
  840. casadi/include/highs/test/DevKkt.h +146 -0
  841. casadi/include/highs/test/KktCh2.h +82 -0
  842. casadi/include/highs/util/FactorTimer.h +224 -0
  843. casadi/include/highs/util/HFactor.h +587 -0
  844. casadi/include/highs/util/HFactorConst.h +84 -0
  845. casadi/include/highs/util/HFactorDebug.h +58 -0
  846. casadi/include/highs/util/HSet.h +92 -0
  847. casadi/include/highs/util/HVector.h +25 -0
  848. casadi/include/highs/util/HVectorBase.h +105 -0
  849. casadi/include/highs/util/HighsCDouble.h +310 -0
  850. casadi/include/highs/util/HighsComponent.h +56 -0
  851. casadi/include/highs/util/HighsDataStack.h +86 -0
  852. casadi/include/highs/util/HighsDisjointSets.h +110 -0
  853. casadi/include/highs/util/HighsHash.h +1277 -0
  854. casadi/include/highs/util/HighsHashTree.h +1443 -0
  855. casadi/include/highs/util/HighsInt.h +39 -0
  856. casadi/include/highs/util/HighsIntegers.h +215 -0
  857. casadi/include/highs/util/HighsLinearSumBounds.h +160 -0
  858. casadi/include/highs/util/HighsMatrixPic.h +40 -0
  859. casadi/include/highs/util/HighsMatrixSlice.h +564 -0
  860. casadi/include/highs/util/HighsMatrixUtils.h +57 -0
  861. casadi/include/highs/util/HighsMemoryAllocation.h +55 -0
  862. casadi/include/highs/util/HighsRandom.h +245 -0
  863. casadi/include/highs/util/HighsRbTree.h +455 -0
  864. casadi/include/highs/util/HighsSort.h +134 -0
  865. casadi/include/highs/util/HighsSparseMatrix.h +147 -0
  866. casadi/include/highs/util/HighsSparseVectorSum.h +98 -0
  867. casadi/include/highs/util/HighsSplay.h +138 -0
  868. casadi/include/highs/util/HighsTimer.h +343 -0
  869. casadi/include/highs/util/HighsUtils.h +210 -0
  870. casadi/include/highs/util/stringutil.h +44 -0
  871. casadi/include/highs/zstr/strict_fstream.hpp +237 -0
  872. casadi/include/highs/zstr/zstr.hpp +472 -0
  873. casadi/include/highs_export.h +43 -0
  874. casadi/include/hpipm_aux_mem.h +52 -0
  875. casadi/include/hpipm_aux_string.h +50 -0
  876. casadi/include/hpipm_common.h +76 -0
  877. casadi/include/hpipm_d_cast_qcqp.h +71 -0
  878. casadi/include/hpipm_d_cond.h +135 -0
  879. casadi/include/hpipm_d_cond_aux.h +92 -0
  880. casadi/include/hpipm_d_cond_qcqp.h +129 -0
  881. casadi/include/hpipm_d_core_qp_ipm.h +101 -0
  882. casadi/include/hpipm_d_core_qp_ipm_aux.h +68 -0
  883. casadi/include/hpipm_d_dense_qcqp.h +199 -0
  884. casadi/include/hpipm_d_dense_qcqp_dim.h +98 -0
  885. casadi/include/hpipm_d_dense_qcqp_ipm.h +193 -0
  886. casadi/include/hpipm_d_dense_qcqp_res.h +108 -0
  887. casadi/include/hpipm_d_dense_qcqp_sol.h +85 -0
  888. casadi/include/hpipm_d_dense_qcqp_utils.h +82 -0
  889. casadi/include/hpipm_d_dense_qp.h +207 -0
  890. casadi/include/hpipm_d_dense_qp_dim.h +92 -0
  891. casadi/include/hpipm_d_dense_qp_ipm.h +260 -0
  892. casadi/include/hpipm_d_dense_qp_kkt.h +72 -0
  893. casadi/include/hpipm_d_dense_qp_res.h +106 -0
  894. casadi/include/hpipm_d_dense_qp_sol.h +94 -0
  895. casadi/include/hpipm_d_dense_qp_utils.h +83 -0
  896. casadi/include/hpipm_d_ocp_qcqp.h +322 -0
  897. casadi/include/hpipm_d_ocp_qcqp_dim.h +130 -0
  898. casadi/include/hpipm_d_ocp_qcqp_ipm.h +192 -0
  899. casadi/include/hpipm_d_ocp_qcqp_red.h +118 -0
  900. casadi/include/hpipm_d_ocp_qcqp_res.h +115 -0
  901. casadi/include/hpipm_d_ocp_qcqp_sol.h +114 -0
  902. casadi/include/hpipm_d_ocp_qcqp_utils.h +81 -0
  903. casadi/include/hpipm_d_ocp_qp.h +306 -0
  904. casadi/include/hpipm_d_ocp_qp_dim.h +142 -0
  905. casadi/include/hpipm_d_ocp_qp_ipm.h +252 -0
  906. casadi/include/hpipm_d_ocp_qp_kkt.h +66 -0
  907. casadi/include/hpipm_d_ocp_qp_red.h +117 -0
  908. casadi/include/hpipm_d_ocp_qp_res.h +113 -0
  909. casadi/include/hpipm_d_ocp_qp_sol.h +128 -0
  910. casadi/include/hpipm_d_ocp_qp_utils.h +82 -0
  911. casadi/include/hpipm_d_part_cond.h +115 -0
  912. casadi/include/hpipm_d_part_cond_qcqp.h +106 -0
  913. casadi/include/hpipm_d_sim_erk.h +122 -0
  914. casadi/include/hpipm_d_sim_rk.h +71 -0
  915. casadi/include/hpipm_d_tree_ocp_qcqp.h +213 -0
  916. casadi/include/hpipm_d_tree_ocp_qcqp_dim.h +117 -0
  917. casadi/include/hpipm_d_tree_ocp_qcqp_ipm.h +191 -0
  918. casadi/include/hpipm_d_tree_ocp_qcqp_res.h +109 -0
  919. casadi/include/hpipm_d_tree_ocp_qcqp_sol.h +99 -0
  920. casadi/include/hpipm_d_tree_ocp_qcqp_utils.h +84 -0
  921. casadi/include/hpipm_d_tree_ocp_qp.h +195 -0
  922. casadi/include/hpipm_d_tree_ocp_qp_dim.h +111 -0
  923. casadi/include/hpipm_d_tree_ocp_qp_ipm.h +209 -0
  924. casadi/include/hpipm_d_tree_ocp_qp_kkt.h +52 -0
  925. casadi/include/hpipm_d_tree_ocp_qp_res.h +107 -0
  926. casadi/include/hpipm_d_tree_ocp_qp_sol.h +100 -0
  927. casadi/include/hpipm_d_tree_ocp_qp_utils.h +83 -0
  928. casadi/include/hpipm_m_dense_qp.h +68 -0
  929. casadi/include/hpipm_m_dense_qp_dim.h +68 -0
  930. casadi/include/hpipm_m_ocp_qp.h +49 -0
  931. casadi/include/hpipm_m_ocp_qp_ipm_hard.h +115 -0
  932. casadi/include/hpipm_m_ocp_qp_kkt.h +45 -0
  933. casadi/include/hpipm_s_cast_qcqp.h +72 -0
  934. casadi/include/hpipm_s_cond.h +137 -0
  935. casadi/include/hpipm_s_cond_aux.h +92 -0
  936. casadi/include/hpipm_s_cond_qcqp.h +130 -0
  937. casadi/include/hpipm_s_core_qp_ipm.h +101 -0
  938. casadi/include/hpipm_s_core_qp_ipm_aux.h +68 -0
  939. casadi/include/hpipm_s_dense_qcqp.h +200 -0
  940. casadi/include/hpipm_s_dense_qcqp_dim.h +99 -0
  941. casadi/include/hpipm_s_dense_qcqp_ipm.h +204 -0
  942. casadi/include/hpipm_s_dense_qcqp_res.h +109 -0
  943. casadi/include/hpipm_s_dense_qcqp_sol.h +86 -0
  944. casadi/include/hpipm_s_dense_qcqp_utils.h +83 -0
  945. casadi/include/hpipm_s_dense_qp.h +207 -0
  946. casadi/include/hpipm_s_dense_qp_dim.h +94 -0
  947. casadi/include/hpipm_s_dense_qp_ipm.h +260 -0
  948. casadi/include/hpipm_s_dense_qp_kkt.h +72 -0
  949. casadi/include/hpipm_s_dense_qp_res.h +107 -0
  950. casadi/include/hpipm_s_dense_qp_sol.h +94 -0
  951. casadi/include/hpipm_s_dense_qp_utils.h +84 -0
  952. casadi/include/hpipm_s_ocp_qcqp.h +322 -0
  953. casadi/include/hpipm_s_ocp_qcqp_dim.h +131 -0
  954. casadi/include/hpipm_s_ocp_qcqp_ipm.h +193 -0
  955. casadi/include/hpipm_s_ocp_qcqp_red.h +119 -0
  956. casadi/include/hpipm_s_ocp_qcqp_res.h +116 -0
  957. casadi/include/hpipm_s_ocp_qcqp_sol.h +115 -0
  958. casadi/include/hpipm_s_ocp_qcqp_utils.h +82 -0
  959. casadi/include/hpipm_s_ocp_qp.h +306 -0
  960. casadi/include/hpipm_s_ocp_qp_dim.h +141 -0
  961. casadi/include/hpipm_s_ocp_qp_ipm.h +252 -0
  962. casadi/include/hpipm_s_ocp_qp_kkt.h +66 -0
  963. casadi/include/hpipm_s_ocp_qp_red.h +118 -0
  964. casadi/include/hpipm_s_ocp_qp_res.h +115 -0
  965. casadi/include/hpipm_s_ocp_qp_sol.h +128 -0
  966. casadi/include/hpipm_s_ocp_qp_utils.h +83 -0
  967. casadi/include/hpipm_s_part_cond.h +115 -0
  968. casadi/include/hpipm_s_part_cond_qcqp.h +107 -0
  969. casadi/include/hpipm_s_sim_erk.h +121 -0
  970. casadi/include/hpipm_s_sim_rk.h +72 -0
  971. casadi/include/hpipm_s_tree_ocp_qcqp.h +213 -0
  972. casadi/include/hpipm_s_tree_ocp_qcqp_dim.h +118 -0
  973. casadi/include/hpipm_s_tree_ocp_qcqp_ipm.h +192 -0
  974. casadi/include/hpipm_s_tree_ocp_qcqp_res.h +110 -0
  975. casadi/include/hpipm_s_tree_ocp_qcqp_sol.h +97 -0
  976. casadi/include/hpipm_s_tree_ocp_qcqp_utils.h +85 -0
  977. casadi/include/hpipm_s_tree_ocp_qp.h +196 -0
  978. casadi/include/hpipm_s_tree_ocp_qp_dim.h +111 -0
  979. casadi/include/hpipm_s_tree_ocp_qp_ipm.h +208 -0
  980. casadi/include/hpipm_s_tree_ocp_qp_kkt.h +54 -0
  981. casadi/include/hpipm_s_tree_ocp_qp_res.h +108 -0
  982. casadi/include/hpipm_s_tree_ocp_qp_sol.h +98 -0
  983. casadi/include/hpipm_s_tree_ocp_qp_utils.h +84 -0
  984. casadi/include/hpipm_scenario_tree.h +70 -0
  985. casadi/include/hpipm_timing.h +67 -0
  986. casadi/include/hpipm_tree.h +76 -0
  987. casadi/include/licenses/CSparse/Doc/License.txt +19 -0
  988. casadi/include/licenses/FMI-Standard-2.0.2/LICENSE.txt +473 -0
  989. casadi/include/licenses/FMI-Standard-3.0/LICENSE.txt +464 -0
  990. casadi/include/licenses/blasfeo-external/LICENSE.txt +26 -0
  991. casadi/include/licenses/bonmin-external/Bonmin/LICENSE +87 -0
  992. casadi/include/licenses/bonmin-external/LICENSE +3 -0
  993. casadi/include/licenses/casadi/LICENSE/LICENSE.txt +165 -0
  994. casadi/include/licenses/casadi-sundials/LICENSE +64 -0
  995. casadi/include/licenses/casadi-sundials/cvodes/LICENSE +60 -0
  996. casadi/include/licenses/casadi-sundials/idas/LICENSE +59 -0
  997. casadi/include/licenses/casadi-sundials/kinsol/LICENSE +59 -0
  998. casadi/include/licenses/casadi-sundials/sundials/LICENSE +67 -0
  999. casadi/include/licenses/cbc-external/Cbc/LICENSE +239 -0
  1000. casadi/include/licenses/cbc-external/LICENSE +245 -0
  1001. casadi/include/licenses/cgl-external/Cgl/LICENSE +239 -0
  1002. casadi/include/licenses/cgl-external/LICENSE +245 -0
  1003. casadi/include/licenses/clp-external/Clp/LICENSE +239 -0
  1004. casadi/include/licenses/clp-external/LICENSE +245 -0
  1005. casadi/include/licenses/coinutils-external/CoinUtils/LICENSE +239 -0
  1006. casadi/include/licenses/coinutils-external/LICENSE +245 -0
  1007. casadi/include/licenses/fatrop-external/LICENSE.txt +165 -0
  1008. casadi/include/licenses/fatrop-external/external/blasfeo/LICENSE.txt +26 -0
  1009. casadi/include/licenses/fatrop-external/external/pybind11/LICENSE +29 -0
  1010. casadi/include/licenses/fatrop-external/misc/license_header.txt +17 -0
  1011. casadi/include/licenses/highs-external/LICENSE.txt +21 -0
  1012. casadi/include/licenses/highs-external/extern/filereaderlp/LICENSE +19 -0
  1013. casadi/include/licenses/highs-external/extern/pdqsort/license.txt +16 -0
  1014. casadi/include/licenses/hpipm-external/LICENSE.txt +26 -0
  1015. casadi/include/licenses/hpipm-external/experimental/andrea/prototype/code/plotregion/license.txt +24 -0
  1016. casadi/include/licenses/ipopt-external/LICENSE +260 -0
  1017. casadi/include/licenses/metis-external/LICENSE +87 -0
  1018. casadi/include/licenses/metis-external/metis-4.0/LICENSE +18 -0
  1019. casadi/include/licenses/mockups-external/LICENSE +21 -0
  1020. casadi/include/licenses/mumps-external/LICENSE +87 -0
  1021. casadi/include/licenses/mumps-external/MUMPS/LICENSE +50 -0
  1022. casadi/include/licenses/osi-external/LICENSE +245 -0
  1023. casadi/include/licenses/osi-external/Osi/LICENSE +239 -0
  1024. casadi/include/licenses/osqp-external/LICENSE +201 -0
  1025. casadi/include/licenses/osqp-external/lin_sys/direct/qdldl/amd/LICENSE +36 -0
  1026. casadi/include/licenses/osqp-external/lin_sys/direct/qdldl/qdldl_sources/LICENSE +201 -0
  1027. casadi/include/licenses/qpOASES/LICENSE.txt +503 -0
  1028. casadi/include/licenses/sleqp-external/LICENSE +165 -0
  1029. casadi/include/licenses/superscs-external/LICENSE.txt +24 -0
  1030. casadi/include/licenses/tinyxml2-9.0.0/LICENSE.txt +18 -0
  1031. casadi/include/licenses/trlib-external/LICENSE +21 -0
  1032. casadi/include/osqp/auxil.h +181 -0
  1033. casadi/include/osqp/constants.h +128 -0
  1034. casadi/include/osqp/cs.h +180 -0
  1035. casadi/include/osqp/ctrlc.h +56 -0
  1036. casadi/include/osqp/error.h +38 -0
  1037. casadi/include/osqp/glob_opts.h +167 -0
  1038. casadi/include/osqp/lin_alg.h +216 -0
  1039. casadi/include/osqp/lin_sys.h +54 -0
  1040. casadi/include/osqp/osqp.h +430 -0
  1041. casadi/include/osqp/osqp_configure.h +49 -0
  1042. casadi/include/osqp/polish.h +25 -0
  1043. casadi/include/osqp/proj.h +37 -0
  1044. casadi/include/osqp/scaling.h +44 -0
  1045. casadi/include/osqp/types.h +326 -0
  1046. casadi/include/osqp/util.h +222 -0
  1047. casadi/include/osqp/version.h +9 -0
  1048. casadi/include/qdldl/qdldl.h +169 -0
  1049. casadi/include/qdldl/qdldl_types.h +23 -0
  1050. casadi/include/s_blas.h +78 -0
  1051. casadi/include/s_blas_64.h +73 -0
  1052. casadi/include/sleqp/defs.h +58 -0
  1053. casadi/include/sleqp/export.h +43 -0
  1054. casadi/include/sleqp/pub_cmp.h +18 -0
  1055. casadi/include/sleqp/pub_dyn.h +140 -0
  1056. casadi/include/sleqp/pub_error.h +50 -0
  1057. casadi/include/sleqp/pub_func.h +257 -0
  1058. casadi/include/sleqp/pub_hess_struct.h +105 -0
  1059. casadi/include/sleqp/pub_iterate.h +88 -0
  1060. casadi/include/sleqp/pub_log.h +88 -0
  1061. casadi/include/sleqp/pub_lsq.h +158 -0
  1062. casadi/include/sleqp/pub_mem.h +52 -0
  1063. casadi/include/sleqp/pub_problem.h +213 -0
  1064. casadi/include/sleqp/pub_scale.h +150 -0
  1065. casadi/include/sleqp/pub_settings.h +162 -0
  1066. casadi/include/sleqp/pub_solver.h +155 -0
  1067. casadi/include/sleqp/pub_types.h +230 -0
  1068. casadi/include/sleqp/pub_working_set.h +135 -0
  1069. casadi/include/sleqp/sparse/pub_mat.h +153 -0
  1070. casadi/include/sleqp/sparse/pub_vec.h +336 -0
  1071. casadi/include/sleqp.h +38 -0
  1072. casadi/include/superscs/cones.h +185 -0
  1073. casadi/include/superscs/constants.h +144 -0
  1074. casadi/include/superscs/cs.h +109 -0
  1075. casadi/include/superscs/ctrlc.h +77 -0
  1076. casadi/include/superscs/directions.h +125 -0
  1077. casadi/include/superscs/glbopts.h +240 -0
  1078. casadi/include/superscs/linAlg.h +437 -0
  1079. casadi/include/superscs/linSys.h +205 -0
  1080. casadi/include/superscs/linsys/amatrix.h +77 -0
  1081. casadi/include/superscs/linsys/common.h +49 -0
  1082. casadi/include/superscs/normalize.h +138 -0
  1083. casadi/include/superscs/scs.h +656 -0
  1084. casadi/include/superscs/scs_blas.h +79 -0
  1085. casadi/include/superscs/scs_parser.h +187 -0
  1086. casadi/include/superscs/unit_test_util.h +210 -0
  1087. casadi/include/superscs/util.h +354 -0
  1088. casadi/include/tinyxml2.h +2380 -0
  1089. casadi/include/trlib/trlib_eigen_inverse.h +118 -0
  1090. casadi/include/trlib/trlib_krylov.h +493 -0
  1091. casadi/include/trlib/trlib_leftmost.h +181 -0
  1092. casadi/include/trlib/trlib_private.h +109 -0
  1093. casadi/include/trlib/trlib_quadratic_zero.h +57 -0
  1094. casadi/include/trlib/trlib_tri_factor.h +409 -0
  1095. casadi/include/trlib/trlib_types.h +36 -0
  1096. casadi/include/trlib.h +44 -0
  1097. casadi/lib/cmake/tinyxml2/tinyxml2-config-version.cmake +65 -0
  1098. casadi/lib/cmake/tinyxml2/tinyxml2-config.cmake +57 -0
  1099. casadi/lib/cmake/tinyxml2/tinyxml2-static-targets-release.cmake +19 -0
  1100. casadi/lib/cmake/tinyxml2/tinyxml2-static-targets.cmake +107 -0
  1101. casadi/lib/libtinyxml2.a +0 -0
  1102. casadi/lib/pkgconfig/tinyxml2.pc +10 -0
  1103. casadi/libCbc.3.10.11.dylib +0 -0
  1104. casadi/libCbc.3.dylib +0 -0
  1105. casadi/libCbc.dylib +0 -0
  1106. casadi/libCbc.la +35 -0
  1107. casadi/libCbcSolver.3.10.11.dylib +0 -0
  1108. casadi/libCbcSolver.3.dylib +0 -0
  1109. casadi/libCbcSolver.dylib +0 -0
  1110. casadi/libCbcSolver.la +35 -0
  1111. casadi/libCgl.1.10.8.dylib +0 -0
  1112. casadi/libCgl.1.dylib +0 -0
  1113. casadi/libCgl.dylib +0 -0
  1114. casadi/libCgl.la +35 -0
  1115. casadi/libClp.1.14.9.dylib +0 -0
  1116. casadi/libClp.1.dylib +0 -0
  1117. casadi/libClp.dylib +0 -0
  1118. casadi/libClp.la +35 -0
  1119. casadi/libClpSolver.1.14.9.dylib +0 -0
  1120. casadi/libClpSolver.1.dylib +0 -0
  1121. casadi/libClpSolver.dylib +0 -0
  1122. casadi/libClpSolver.la +35 -0
  1123. casadi/libCoinUtils.3.11.10.dylib +0 -0
  1124. casadi/libCoinUtils.3.dylib +0 -0
  1125. casadi/libCoinUtils.dylib +0 -0
  1126. casadi/libCoinUtils.la +35 -0
  1127. casadi/libOsi.1.13.9.dylib +0 -0
  1128. casadi/libOsi.1.dylib +0 -0
  1129. casadi/libOsi.dylib +0 -0
  1130. casadi/libOsi.la +35 -0
  1131. casadi/libOsiCbc.3.10.11.dylib +0 -0
  1132. casadi/libOsiCbc.3.dylib +0 -0
  1133. casadi/libOsiCbc.dylib +0 -0
  1134. casadi/libOsiCbc.la +35 -0
  1135. casadi/libOsiClp.1.14.9.dylib +0 -0
  1136. casadi/libOsiClp.1.dylib +0 -0
  1137. casadi/libOsiClp.dylib +0 -0
  1138. casadi/libOsiClp.la +35 -0
  1139. casadi/libOsiCommonTests.1.13.9.dylib +0 -0
  1140. casadi/libOsiCommonTests.1.dylib +0 -0
  1141. casadi/libOsiCommonTests.dylib +0 -0
  1142. casadi/libOsiCommonTests.la +35 -0
  1143. casadi/libblasfeo.dylib +0 -0
  1144. casadi/libbonmin.4.8.9.dylib +0 -0
  1145. casadi/libbonmin.4.dylib +0 -0
  1146. casadi/libbonmin.dylib +0 -0
  1147. casadi/libbonmin.la +35 -0
  1148. casadi/libc++.1.0.dylib +0 -0
  1149. casadi/libcasadi.3.7.dylib +0 -0
  1150. casadi/libcasadi.dylib +0 -0
  1151. casadi/libcasadi_conic_cbc.3.7.dylib +0 -0
  1152. casadi/libcasadi_conic_cbc.dylib +0 -0
  1153. casadi/libcasadi_conic_clp.3.7.dylib +0 -0
  1154. casadi/libcasadi_conic_clp.dylib +0 -0
  1155. casadi/libcasadi_conic_cplex.3.7.dylib +0 -0
  1156. casadi/libcasadi_conic_cplex.dylib +0 -0
  1157. casadi/libcasadi_conic_fatrop.3.7.dylib +0 -0
  1158. casadi/libcasadi_conic_fatrop.dylib +0 -0
  1159. casadi/libcasadi_conic_gurobi.3.7.dylib +0 -0
  1160. casadi/libcasadi_conic_gurobi.dylib +0 -0
  1161. casadi/libcasadi_conic_highs.3.7.dylib +0 -0
  1162. casadi/libcasadi_conic_highs.dylib +0 -0
  1163. casadi/libcasadi_conic_hpipm.3.7.dylib +0 -0
  1164. casadi/libcasadi_conic_hpipm.dylib +0 -0
  1165. casadi/libcasadi_conic_ipqp.3.7.dylib +0 -0
  1166. casadi/libcasadi_conic_ipqp.dylib +0 -0
  1167. casadi/libcasadi_conic_nlpsol.3.7.dylib +0 -0
  1168. casadi/libcasadi_conic_nlpsol.dylib +0 -0
  1169. casadi/libcasadi_conic_osqp.3.7.dylib +0 -0
  1170. casadi/libcasadi_conic_osqp.dylib +0 -0
  1171. casadi/libcasadi_conic_qpoases.3.7.dylib +0 -0
  1172. casadi/libcasadi_conic_qpoases.dylib +0 -0
  1173. casadi/libcasadi_conic_qrqp.3.7.dylib +0 -0
  1174. casadi/libcasadi_conic_qrqp.dylib +0 -0
  1175. casadi/libcasadi_conic_superscs.3.7.dylib +0 -0
  1176. casadi/libcasadi_conic_superscs.dylib +0 -0
  1177. casadi/libcasadi_importer_shell.3.7.dylib +0 -0
  1178. casadi/libcasadi_importer_shell.dylib +0 -0
  1179. casadi/libcasadi_integrator_collocation.3.7.dylib +0 -0
  1180. casadi/libcasadi_integrator_collocation.dylib +0 -0
  1181. casadi/libcasadi_integrator_cvodes.3.7.dylib +0 -0
  1182. casadi/libcasadi_integrator_cvodes.dylib +0 -0
  1183. casadi/libcasadi_integrator_idas.3.7.dylib +0 -0
  1184. casadi/libcasadi_integrator_idas.dylib +0 -0
  1185. casadi/libcasadi_integrator_rk.3.7.dylib +0 -0
  1186. casadi/libcasadi_integrator_rk.dylib +0 -0
  1187. casadi/libcasadi_interpolant_bspline.3.7.dylib +0 -0
  1188. casadi/libcasadi_interpolant_bspline.dylib +0 -0
  1189. casadi/libcasadi_interpolant_linear.3.7.dylib +0 -0
  1190. casadi/libcasadi_interpolant_linear.dylib +0 -0
  1191. casadi/libcasadi_linsol_csparse.3.7.dylib +0 -0
  1192. casadi/libcasadi_linsol_csparse.dylib +0 -0
  1193. casadi/libcasadi_linsol_csparsecholesky.3.7.dylib +0 -0
  1194. casadi/libcasadi_linsol_csparsecholesky.dylib +0 -0
  1195. casadi/libcasadi_linsol_lapacklu.3.7.dylib +0 -0
  1196. casadi/libcasadi_linsol_lapacklu.dylib +0 -0
  1197. casadi/libcasadi_linsol_lapackqr.3.7.dylib +0 -0
  1198. casadi/libcasadi_linsol_lapackqr.dylib +0 -0
  1199. casadi/libcasadi_linsol_ldl.3.7.dylib +0 -0
  1200. casadi/libcasadi_linsol_ldl.dylib +0 -0
  1201. casadi/libcasadi_linsol_lsqr.3.7.dylib +0 -0
  1202. casadi/libcasadi_linsol_lsqr.dylib +0 -0
  1203. casadi/libcasadi_linsol_ma27.3.7.dylib +0 -0
  1204. casadi/libcasadi_linsol_ma27.dylib +0 -0
  1205. casadi/libcasadi_linsol_mumps.3.7.dylib +0 -0
  1206. casadi/libcasadi_linsol_mumps.dylib +0 -0
  1207. casadi/libcasadi_linsol_qr.3.7.dylib +0 -0
  1208. casadi/libcasadi_linsol_qr.dylib +0 -0
  1209. casadi/libcasadi_linsol_symbolicqr.3.7.dylib +0 -0
  1210. casadi/libcasadi_linsol_symbolicqr.dylib +0 -0
  1211. casadi/libcasadi_linsol_tridiag.3.7.dylib +0 -0
  1212. casadi/libcasadi_linsol_tridiag.dylib +0 -0
  1213. casadi/libcasadi_nlpsol_ampl.3.7.dylib +0 -0
  1214. casadi/libcasadi_nlpsol_ampl.dylib +0 -0
  1215. casadi/libcasadi_nlpsol_blocksqp.3.7.dylib +0 -0
  1216. casadi/libcasadi_nlpsol_blocksqp.dylib +0 -0
  1217. casadi/libcasadi_nlpsol_bonmin.3.7.dylib +0 -0
  1218. casadi/libcasadi_nlpsol_bonmin.dylib +0 -0
  1219. casadi/libcasadi_nlpsol_fatrop.3.7.dylib +0 -0
  1220. casadi/libcasadi_nlpsol_fatrop.dylib +0 -0
  1221. casadi/libcasadi_nlpsol_feasiblesqpmethod.3.7.dylib +0 -0
  1222. casadi/libcasadi_nlpsol_feasiblesqpmethod.dylib +0 -0
  1223. casadi/libcasadi_nlpsol_ipopt.3.7.dylib +0 -0
  1224. casadi/libcasadi_nlpsol_ipopt.dylib +0 -0
  1225. casadi/libcasadi_nlpsol_knitro.3.7.dylib +0 -0
  1226. casadi/libcasadi_nlpsol_knitro.dylib +0 -0
  1227. casadi/libcasadi_nlpsol_madnlp.3.7.dylib +0 -0
  1228. casadi/libcasadi_nlpsol_madnlp.dylib +0 -0
  1229. casadi/libcasadi_nlpsol_qrsqp.3.7.dylib +0 -0
  1230. casadi/libcasadi_nlpsol_qrsqp.dylib +0 -0
  1231. casadi/libcasadi_nlpsol_scpgen.3.7.dylib +0 -0
  1232. casadi/libcasadi_nlpsol_scpgen.dylib +0 -0
  1233. casadi/libcasadi_nlpsol_sleqp.3.7.dylib +0 -0
  1234. casadi/libcasadi_nlpsol_sleqp.dylib +0 -0
  1235. casadi/libcasadi_nlpsol_snopt.3.7.dylib +0 -0
  1236. casadi/libcasadi_nlpsol_snopt.dylib +0 -0
  1237. casadi/libcasadi_nlpsol_sqpmethod.3.7.dylib +0 -0
  1238. casadi/libcasadi_nlpsol_sqpmethod.dylib +0 -0
  1239. casadi/libcasadi_rootfinder_fast_newton.3.7.dylib +0 -0
  1240. casadi/libcasadi_rootfinder_fast_newton.dylib +0 -0
  1241. casadi/libcasadi_rootfinder_kinsol.3.7.dylib +0 -0
  1242. casadi/libcasadi_rootfinder_kinsol.dylib +0 -0
  1243. casadi/libcasadi_rootfinder_newton.3.7.dylib +0 -0
  1244. casadi/libcasadi_rootfinder_newton.dylib +0 -0
  1245. casadi/libcasadi_rootfinder_nlpsol.3.7.dylib +0 -0
  1246. casadi/libcasadi_rootfinder_nlpsol.dylib +0 -0
  1247. casadi/libcasadi_sundials_common.3.7.dylib +0 -0
  1248. casadi/libcasadi_sundials_common.dylib +0 -0
  1249. casadi/libcasadi_xmlfile_tinyxml.3.7.dylib +0 -0
  1250. casadi/libcasadi_xmlfile_tinyxml.dylib +0 -0
  1251. casadi/libcoinmetis.2.dylib +0 -0
  1252. casadi/libcoinmetis.dylib +0 -0
  1253. casadi/libcoinmetis.la +41 -0
  1254. casadi/libcoinmumps.3.dylib +0 -0
  1255. casadi/libcoinmumps.dylib +0 -0
  1256. casadi/libcoinmumps.la +41 -0
  1257. casadi/libcplex_adaptor.dylib +0 -0
  1258. casadi/libfatrop.dylib +0 -0
  1259. casadi/libgcc_s.1.1.dylib +0 -0
  1260. casadi/libgcc_s.1.dylib +0 -0
  1261. casadi/libgfortran.5.dylib +0 -0
  1262. casadi/libgurobi_adaptor.dylib +0 -0
  1263. casadi/libhighs.1.7.dylib +0 -0
  1264. casadi/libhighs.1.dylib +0 -0
  1265. casadi/libhighs.dylib +0 -0
  1266. casadi/libhpipm.dylib +0 -0
  1267. casadi/libindirect.a +0 -0
  1268. casadi/libipopt.3.dylib +0 -0
  1269. casadi/libipopt.dylib +0 -0
  1270. casadi/libipopt.la +41 -0
  1271. casadi/liblinsys.a +0 -0
  1272. casadi/libmatlab_ipc.dylib +0 -0
  1273. casadi/libosqp.a +0 -0
  1274. casadi/libosqp.dylib +0 -0
  1275. casadi/libqdldl.a +0 -0
  1276. casadi/libqdldl.dylib +0 -0
  1277. casadi/libquadmath.0.dylib +0 -0
  1278. casadi/libsipopt.3.dylib +0 -0
  1279. casadi/libsipopt.dylib +0 -0
  1280. casadi/libsipopt.la +41 -0
  1281. casadi/libsleqp.1.0.1.dylib +0 -0
  1282. casadi/libsleqp.dylib +0 -0
  1283. casadi/libsuperscs.a +0 -0
  1284. casadi/libtrlib.0.4.dylib +0 -0
  1285. casadi/libtrlib.dylib +0 -0
  1286. casadi/libz.1.2.13.dylib +0 -0
  1287. casadi/pkgconfig/bonmin.pc +12 -0
  1288. casadi/pkgconfig/casadi.pc +12 -0
  1289. casadi/pkgconfig/cbc.pc +12 -0
  1290. casadi/pkgconfig/cgl.pc +12 -0
  1291. casadi/pkgconfig/clp.pc +12 -0
  1292. casadi/pkgconfig/coinmetis.pc +13 -0
  1293. casadi/pkgconfig/coinmumps.pc +15 -0
  1294. casadi/pkgconfig/coinutils.pc +12 -0
  1295. casadi/pkgconfig/highs.pc +12 -0
  1296. casadi/pkgconfig/ipopt.pc +15 -0
  1297. casadi/pkgconfig/osi-cbc.pc +12 -0
  1298. casadi/pkgconfig/osi-clp.pc +12 -0
  1299. casadi/pkgconfig/osi-unittests.pc +12 -0
  1300. casadi/pkgconfig/osi.pc +12 -0
  1301. casadi/pkgconfig/sleqp.pc +10 -0
  1302. casadi/tools/__init__.py +52 -0
  1303. casadi/tools/bounds.py +107 -0
  1304. casadi/tools/graph/__init__.py +35 -0
  1305. casadi/tools/graph/graph.py +747 -0
  1306. casadi/tools/in_out.py +89 -0
  1307. casadi/tools/structure.py +1446 -0
  1308. casadi/tools/structure3.py +1441 -0
  1309. casadi-3.6.7.dist-info/METADATA +45 -0
  1310. casadi-3.6.7.dist-info/RECORD +1312 -0
  1311. casadi-3.6.7.dist-info/WHEEL +5 -0
  1312. dummy.txt +1 -0
@@ -0,0 +1,1443 @@
1
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2
+ /* */
3
+ /* This file is part of the HiGHS linear optimization suite */
4
+ /* */
5
+ /* Written and engineered 2008-2024 by Julian Hall, Ivet Galabova, */
6
+ /* Leona Gottwald and Michael Feldmeier */
7
+ /* */
8
+ /* Available as open-source under the MIT License */
9
+ /* */
10
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
11
+ #ifndef HIGHS_UTIL_HASH_TREE_H_
12
+ #define HIGHS_UTIL_HASH_TREE_H_
13
+
14
+ #include <stdexcept>
15
+
16
+ #include "util/HighsHash.h"
17
+
18
+ using std::memcpy;
19
+ using std::memmove;
20
+
21
+ template <typename K, typename V = void>
22
+ class HighsHashTree {
23
+ using Entry = HighsHashTableEntry<K, V>;
24
+ using ValueType =
25
+ typename std::remove_reference<decltype(Entry().value())>::type;
26
+
27
+ enum Type {
28
+ kEmpty = 0,
29
+ kListLeaf = 1,
30
+ kInnerLeafSizeClass1 = 2,
31
+ kInnerLeafSizeClass2 = 3,
32
+ kInnerLeafSizeClass3 = 4,
33
+ kInnerLeafSizeClass4 = 5,
34
+ kBranchNode = 6,
35
+ };
36
+
37
+ enum Constants {
38
+ kBitsPerLevel = 6,
39
+ kBranchFactor = 1 << kBitsPerLevel,
40
+ // even though we could use up to 64 bits of the hash this would require
41
+ // additional handling in the last levels to avoid negative shift values
42
+ // up to 9 depth levels are Ok though as up to index 8 the
43
+ // get_hash_chunks16() function shifts right by a non-negative amount
44
+ kMaxDepth = 9,
45
+ kMinLeafSize = 6,
46
+ kLeafBurstThreshold = 54,
47
+ };
48
+
49
+ static uint64_t compute_hash(const K& key) {
50
+ return HighsHashHelpers::hash(key);
51
+ }
52
+
53
+ static uint8_t get_hash_chunk(uint64_t hash, int pos) {
54
+ return (hash >> (64 - kBitsPerLevel - pos * kBitsPerLevel)) &
55
+ (kBranchFactor - 1);
56
+ }
57
+
58
+ static uint16_t get_hash_chunks16(uint64_t hash, int pos) {
59
+ return (hash >> (48 - pos * kBitsPerLevel));
60
+ }
61
+
62
+ static uint8_t get_first_chunk16(uint16_t chunks) {
63
+ return chunks >> (16 - kBitsPerLevel);
64
+ }
65
+
66
+ static void set_hash_chunk(uint64_t& hash, uint64_t chunk, int chunkPos) {
67
+ const int shiftAmount = (60 - kBitsPerLevel - chunkPos * kBitsPerLevel);
68
+ chunk ^= (hash >> shiftAmount) & (kBranchFactor - 1);
69
+ hash ^= chunk << shiftAmount;
70
+ }
71
+
72
+ struct Occupation {
73
+ uint64_t occupation;
74
+
75
+ Occupation() {}
76
+ Occupation(uint64_t occupation) : occupation(occupation) {}
77
+ operator uint64_t() const { return occupation; }
78
+
79
+ void set(uint8_t pos) { occupation |= uint64_t{1} << (pos); }
80
+
81
+ void flip(uint8_t pos) { occupation ^= uint64_t{1} << (pos); }
82
+
83
+ bool test(uint8_t pos) const { return occupation & (uint64_t{1} << pos); }
84
+
85
+ int num_set_until(uint8_t pos) const {
86
+ return HighsHashHelpers::popcnt(occupation >> pos);
87
+ }
88
+
89
+ int num_set_after(uint8_t pos) const {
90
+ return HighsHashHelpers::popcnt(occupation << (63 - (pos)));
91
+ }
92
+
93
+ int num_set() const { return HighsHashHelpers::popcnt(occupation); }
94
+ };
95
+
96
+ static constexpr int entries_to_size_class(unsigned int numEntries) {
97
+ return 1 + unsigned(numEntries + ((kLeafBurstThreshold - kMinLeafSize) / 3 -
98
+ kMinLeafSize - 1)) /
99
+ ((kLeafBurstThreshold - kMinLeafSize) / 3);
100
+ }
101
+
102
+ template <int kSizeClass>
103
+ struct InnerLeaf {
104
+ static constexpr int capacity() {
105
+ return kMinLeafSize +
106
+ (kSizeClass - 1) * (kLeafBurstThreshold - kMinLeafSize) / 3;
107
+ }
108
+ // the leaf stores entries the same way as inner nodes
109
+ // but handles collisions on the occupation flag like a
110
+ // linear probing hash table.
111
+ // Since the occupation flag has 64 bits and we only use
112
+ // 15 collisions should be rare and most often we won't need
113
+ // to do a linear scan and key comparisons at all
114
+ Occupation occupation;
115
+ int size;
116
+ uint64_t hashes[capacity() + 1];
117
+ Entry entries[capacity()];
118
+
119
+ InnerLeaf() : occupation(0), size(0) { hashes[0] = 0; }
120
+
121
+ template <int kOtherSize>
122
+ InnerLeaf(InnerLeaf<kOtherSize>&& other) {
123
+ assert(other.size <= capacity());
124
+ memcpy((void*)this, (void*)&other,
125
+ (char*)&other.hashes[other.size + 1] - (char*)&other);
126
+ std::move(&other.entries[0], &other.entries[size], &entries[0]);
127
+ }
128
+
129
+ int get_num_entries() const { return size; }
130
+
131
+ std::pair<ValueType*, bool> insert_entry(uint64_t fullHash, int hashPos,
132
+ Entry& entry) {
133
+ assert(size < capacity());
134
+ uint16_t hash = get_hash_chunks16(fullHash, hashPos);
135
+ uint8_t hashChunk = get_first_chunk16(hash);
136
+
137
+ int pos = occupation.num_set_until(hashChunk);
138
+
139
+ if (occupation.test(hashChunk)) {
140
+ // since the occupation flag is set we need to start searching from
141
+ // pos-1 and can rely on a hash chunk with the same value existing for
142
+ // the scan
143
+ --pos;
144
+ while (hashes[pos] > hash) ++pos;
145
+
146
+ if (find_key(entry.key(), hash, pos))
147
+ return std::make_pair(&entries[pos].value(), false);
148
+
149
+ } else {
150
+ occupation.set(hashChunk);
151
+
152
+ if (pos < size)
153
+ while (hashes[pos] > hash) ++pos;
154
+ }
155
+
156
+ if (pos < size) move_backward(pos, size);
157
+ entries[pos] = std::move(entry);
158
+ hashes[pos] = hash;
159
+ ++size;
160
+ hashes[size] = 0;
161
+
162
+ return std::make_pair(&entries[pos].value(), true);
163
+ }
164
+
165
+ ValueType* find_entry(uint64_t fullHash, int hashPos, const K& key) {
166
+ uint16_t hash = get_hash_chunks16(fullHash, hashPos);
167
+ uint8_t hashChunk = get_first_chunk16(hash);
168
+ if (!occupation.test(hashChunk)) return nullptr;
169
+
170
+ int pos = occupation.num_set_until(hashChunk) - 1;
171
+ while (hashes[pos] > hash) ++pos;
172
+
173
+ if (find_key(key, hash, pos)) return &entries[pos].value();
174
+
175
+ return nullptr;
176
+ }
177
+
178
+ bool erase_entry(uint64_t fullHash, int hashPos, const K& key) {
179
+ uint16_t hash = get_hash_chunks16(fullHash, hashPos);
180
+ uint8_t hashChunk = get_first_chunk16(hash);
181
+ if (!occupation.test(hashChunk)) return false;
182
+
183
+ int startPos = occupation.num_set_until(hashChunk) - 1;
184
+ while (get_first_chunk16(hashes[startPos]) > hashChunk) ++startPos;
185
+
186
+ int pos = startPos;
187
+ while (hashes[pos] > hash) ++pos;
188
+
189
+ if (!find_key(key, hash, pos)) return false;
190
+
191
+ --size;
192
+ if (pos < size) {
193
+ std::move(&entries[pos + 1], &entries[size + 1], &entries[pos]);
194
+ memmove(&hashes[pos], &hashes[pos + 1],
195
+ sizeof(hashes[0]) * (size - pos));
196
+ if (get_first_chunk16(hashes[startPos]) != hashChunk)
197
+ occupation.flip(hashChunk);
198
+ } else if (startPos == pos)
199
+ occupation.flip(hashChunk);
200
+
201
+ hashes[size] = 0;
202
+ return true;
203
+ }
204
+
205
+ void rehash(int hashPos) {
206
+ // function needs to possibly reorder elements by a different hash value
207
+ // chances are very high we are already ordered correctly as we use 16
208
+ // bits of the hash and one level is uses 6 bits, so the new values
209
+ // are guaranteed to be ordered correctly by their 10 most significant
210
+ // bits if increasing the hash position by 1 and only if the 10 bits of
211
+ // the hash had a collision the new 6 bits might break a tie differently.
212
+ // It is, however, important to maintain the exact ordering as otherwise
213
+ // elements may not be found.
214
+ occupation = 0;
215
+ for (int i = 0; i < size; ++i) {
216
+ hashes[i] = get_hash_chunks16(compute_hash(entries[i].key()), hashPos);
217
+ occupation.set(get_first_chunk16(hashes[i]));
218
+ }
219
+
220
+ int i = 0;
221
+ while (i < size) {
222
+ uint8_t hashChunk = get_first_chunk16(hashes[i]);
223
+ int pos = occupation.num_set_until(hashChunk) - 1;
224
+
225
+ // if the position is after i the element definitely comes later, so we
226
+ // swap it to that position and proceed without increasing i until
227
+ // eventually an element appears that comes at position i or before
228
+ if (pos > i) {
229
+ std::swap(hashes[pos], hashes[i]);
230
+ std::swap(entries[pos], entries[i]);
231
+ continue;
232
+ }
233
+
234
+ // the position is before or at i, now check where the exact location
235
+ // should be for the ordering by hash so that the invariant is that all
236
+ // elements up to i are properly sorted. Essentially insertion sort but
237
+ // with the modification of having a high chance to guess the correct
238
+ // position already using the occupation flags.
239
+ while (pos < i && hashes[pos] >= hashes[i]) ++pos;
240
+
241
+ // if the final position is before i we need to move elements to
242
+ // make space at that position, otherwise nothing needs to be done but
243
+ // incrementing i increasing the sorted range by 1.
244
+ if (pos < i) {
245
+ uint64_t hash = hashes[i];
246
+ auto entry = std::move(entries[i]);
247
+ move_backward(pos, i);
248
+ hashes[pos] = hash;
249
+ entries[pos] = std::move(entry);
250
+ }
251
+ ++i;
252
+ }
253
+ }
254
+
255
+ void move_backward(const int& first, const int& last) {
256
+ // move elements backwards
257
+ std::move_backward(&entries[first], &entries[last], &entries[last + 1]);
258
+ memmove(&hashes[first + 1], &hashes[first],
259
+ sizeof(hashes[0]) * (last - first));
260
+ }
261
+
262
+ bool find_key(const K& key, const uint16_t& hash, int& pos) const {
263
+ // find key
264
+ while (pos != size && hashes[pos] == hash) {
265
+ if (key == entries[pos].key()) return true;
266
+ ++pos;
267
+ }
268
+ return false;
269
+ }
270
+ };
271
+
272
+ struct ListNode {
273
+ ListNode* next;
274
+ HighsHashTableEntry<K, V> entry;
275
+ ListNode(HighsHashTableEntry<K, V>&& entry)
276
+ : next(nullptr), entry(std::move(entry)) {}
277
+ };
278
+ struct ListLeaf {
279
+ ListNode first;
280
+ int count;
281
+
282
+ ListLeaf(HighsHashTableEntry<K, V>&& entry)
283
+ : first(std::move(entry)), count(1) {}
284
+ };
285
+
286
+ struct BranchNode;
287
+
288
+ struct NodePtr {
289
+ uintptr_t ptrAndType;
290
+
291
+ NodePtr() : ptrAndType(kEmpty) {}
292
+ NodePtr(std::nullptr_t) : ptrAndType(kEmpty) {}
293
+ NodePtr(ListLeaf* ptr)
294
+ : ptrAndType(reinterpret_cast<uintptr_t>(ptr) | kListLeaf) {}
295
+ NodePtr(InnerLeaf<1>* ptr)
296
+ : ptrAndType(reinterpret_cast<uintptr_t>(ptr) | kInnerLeafSizeClass1) {}
297
+ NodePtr(InnerLeaf<2>* ptr)
298
+ : ptrAndType(reinterpret_cast<uintptr_t>(ptr) | kInnerLeafSizeClass2) {}
299
+ NodePtr(InnerLeaf<3>* ptr)
300
+ : ptrAndType(reinterpret_cast<uintptr_t>(ptr) | kInnerLeafSizeClass3) {}
301
+ NodePtr(InnerLeaf<4>* ptr)
302
+ : ptrAndType(reinterpret_cast<uintptr_t>(ptr) | kInnerLeafSizeClass4) {}
303
+ NodePtr(BranchNode* ptr)
304
+ : ptrAndType(reinterpret_cast<uintptr_t>(ptr) | kBranchNode) {
305
+ assert(ptr != nullptr);
306
+ }
307
+
308
+ Type getType() const { return Type(ptrAndType & 7u); }
309
+
310
+ int numEntriesEstimate() const {
311
+ switch (getType()) {
312
+ case kEmpty:
313
+ return 0;
314
+ case kListLeaf:
315
+ return 1;
316
+ case kInnerLeafSizeClass1:
317
+ return InnerLeaf<1>::capacity();
318
+ case kInnerLeafSizeClass2:
319
+ return InnerLeaf<2>::capacity();
320
+ case kInnerLeafSizeClass3:
321
+ return InnerLeaf<3>::capacity();
322
+ case kInnerLeafSizeClass4:
323
+ return InnerLeaf<4>::capacity();
324
+ case kBranchNode:
325
+ // something large should be returned so that the number of entries
326
+ // is estimated above the threshold to merge when the parent checks
327
+ // its children after deletion
328
+ return kBranchFactor;
329
+ default:
330
+ throw std::logic_error("Unexpected type in hash tree");
331
+ }
332
+ }
333
+
334
+ int numEntries() const {
335
+ switch (getType()) {
336
+ case kEmpty:
337
+ return 0;
338
+ case kListLeaf:
339
+ return getListLeaf()->count;
340
+ case kInnerLeafSizeClass1:
341
+ return getInnerLeafSizeClass1()->size;
342
+ case kInnerLeafSizeClass2:
343
+ return getInnerLeafSizeClass2()->size;
344
+ case kInnerLeafSizeClass3:
345
+ return getInnerLeafSizeClass3()->size;
346
+ case kInnerLeafSizeClass4:
347
+ return getInnerLeafSizeClass4()->size;
348
+ case kBranchNode:
349
+ // something large should be returned so that the number of entries
350
+ // is estimated above the threshold to merge when the parent checks
351
+ // its children after deletion
352
+ return kBranchFactor;
353
+ default:
354
+ throw std::logic_error("Unexpected type in hash tree");
355
+ }
356
+ }
357
+
358
+ ListLeaf* getListLeaf() const {
359
+ assert(getType() == kListLeaf);
360
+ return reinterpret_cast<ListLeaf*>(ptrAndType & ~uintptr_t{7});
361
+ }
362
+
363
+ InnerLeaf<1>* getInnerLeafSizeClass1() const {
364
+ assert(getType() == kInnerLeafSizeClass1);
365
+ return reinterpret_cast<InnerLeaf<1>*>(ptrAndType & ~uintptr_t{7});
366
+ }
367
+ InnerLeaf<2>* getInnerLeafSizeClass2() const {
368
+ assert(getType() == kInnerLeafSizeClass2);
369
+ return reinterpret_cast<InnerLeaf<2>*>(ptrAndType & ~uintptr_t{7});
370
+ }
371
+
372
+ InnerLeaf<3>* getInnerLeafSizeClass3() const {
373
+ assert(getType() == kInnerLeafSizeClass3);
374
+ return reinterpret_cast<InnerLeaf<3>*>(ptrAndType & ~uintptr_t{7});
375
+ }
376
+
377
+ InnerLeaf<4>* getInnerLeafSizeClass4() const {
378
+ assert(getType() == kInnerLeafSizeClass4);
379
+ return reinterpret_cast<InnerLeaf<4>*>(ptrAndType & ~uintptr_t{7});
380
+ }
381
+
382
+ BranchNode* getBranchNode() const {
383
+ assert(getType() == kBranchNode);
384
+ return reinterpret_cast<BranchNode*>(ptrAndType & ~uintptr_t{7});
385
+ }
386
+ };
387
+
388
+ struct BranchNode {
389
+ Occupation occupation;
390
+ NodePtr child[1];
391
+ };
392
+
393
+ // allocate branch nodes in multiples of 64 bytes to reduce allocator stress
394
+ // with different sizes and reduce reallocations of nodes
395
+ static constexpr size_t getBranchNodeSize(int numChilds) {
396
+ return (sizeof(BranchNode) + size_t(numChilds - 1) * sizeof(NodePtr) + 63) &
397
+ ~63;
398
+ };
399
+
400
+ static BranchNode* createBranchingNode(int numChilds) {
401
+ BranchNode* branch =
402
+ (BranchNode*)::operator new(getBranchNodeSize(numChilds));
403
+ branch->occupation = 0;
404
+ return branch;
405
+ }
406
+
407
+ static void destroyBranchingNode(void* innerNode) {
408
+ ::operator delete(innerNode);
409
+ }
410
+
411
+ static BranchNode* addChildToBranchNode(BranchNode* branch, uint8_t hashValue,
412
+ int location) {
413
+ int rightChilds = branch->occupation.num_set_after(hashValue);
414
+ assert(rightChilds + location == branch->occupation.num_set());
415
+
416
+ size_t newSize = getBranchNodeSize(location + rightChilds + 1);
417
+ size_t rightSize = rightChilds * sizeof(NodePtr);
418
+
419
+ if (newSize == getBranchNodeSize(location + rightChilds)) {
420
+ memmove(&branch->child[location + 1], &branch->child[location],
421
+ rightSize);
422
+
423
+ return branch;
424
+ }
425
+
426
+ BranchNode* newBranch = (BranchNode*)::operator new(newSize);
427
+ // sizeof(Branch) already contains the size for 1 pointer. So we just
428
+ // need to add the left and right sizes up for the number of
429
+ // additional pointers
430
+ size_t leftSize = sizeof(BranchNode) + (location - 1) * sizeof(NodePtr);
431
+
432
+ memcpy(newBranch, branch, leftSize);
433
+ memcpy(&newBranch->child[location + 1], &branch->child[location],
434
+ rightSize);
435
+
436
+ destroyBranchingNode(branch);
437
+
438
+ return newBranch;
439
+ }
440
+
441
+ template <int SizeClass1, int SizeClass2>
442
+ static void mergeIntoLeaf(InnerLeaf<SizeClass1>* leaf,
443
+ InnerLeaf<SizeClass2>* mergeLeaf, int hashPos) {
444
+ for (int i = 0; i < mergeLeaf->size; ++i)
445
+ leaf->insert_entry(compute_hash(mergeLeaf->entries[i].key()), hashPos,
446
+ mergeLeaf->entries[i]);
447
+ }
448
+
449
+ template <int SizeClass>
450
+ static void mergeIntoLeaf(InnerLeaf<SizeClass>* leaf, int hashPos,
451
+ NodePtr mergeNode) {
452
+ switch (mergeNode.getType()) {
453
+ case kListLeaf: {
454
+ ListLeaf* mergeLeaf = mergeNode.getListLeaf();
455
+ leaf->insert_entry(compute_hash(mergeLeaf->first.entry.key()), hashPos,
456
+ mergeLeaf->first.entry);
457
+ ListNode* iter = mergeLeaf->first.next;
458
+ while (iter != nullptr) {
459
+ ListNode* next = iter->next;
460
+ leaf->insert_entry(compute_hash(iter->entry.key()), hashPos,
461
+ iter->entry);
462
+ delete iter;
463
+ iter = next;
464
+ }
465
+ break;
466
+ }
467
+ case kInnerLeafSizeClass1:
468
+ mergeIntoLeaf(leaf, mergeNode.getInnerLeafSizeClass1(), hashPos);
469
+ delete mergeNode.getInnerLeafSizeClass1();
470
+ break;
471
+ case kInnerLeafSizeClass2:
472
+ mergeIntoLeaf(leaf, mergeNode.getInnerLeafSizeClass2(), hashPos);
473
+ delete mergeNode.getInnerLeafSizeClass2();
474
+ break;
475
+ case kInnerLeafSizeClass3:
476
+ mergeIntoLeaf(leaf, mergeNode.getInnerLeafSizeClass3(), hashPos);
477
+ delete mergeNode.getInnerLeafSizeClass3();
478
+ break;
479
+ case kInnerLeafSizeClass4:
480
+ mergeIntoLeaf(leaf, mergeNode.getInnerLeafSizeClass4(), hashPos);
481
+ delete mergeNode.getInnerLeafSizeClass4();
482
+ break;
483
+ default:
484
+ break;
485
+ }
486
+ }
487
+
488
+ template <int SizeClass1, int SizeClass2>
489
+ static HighsHashTableEntry<K, V>* findCommonInLeaf(
490
+ InnerLeaf<SizeClass1>* leaf1, InnerLeaf<SizeClass2>* leaf2, int hashPos) {
491
+ uint64_t matchMask = leaf1->occupation & leaf2->occupation;
492
+ if (matchMask == 0) return nullptr;
493
+
494
+ int offset1 = -1;
495
+ int offset2 = -1;
496
+ while (matchMask) {
497
+ int pos = HighsHashHelpers::log2i(matchMask);
498
+ matchMask ^= (uint64_t{1} << pos);
499
+
500
+ int i =
501
+ leaf1->occupation.num_set_until(static_cast<uint8_t>(pos)) + offset1;
502
+ while (get_first_chunk16(leaf1->hashes[i]) != pos) {
503
+ ++i;
504
+ ++offset1;
505
+ }
506
+
507
+ int j =
508
+ leaf2->occupation.num_set_until(static_cast<uint8_t>(pos)) + offset2;
509
+ while (get_first_chunk16(leaf2->hashes[j]) != pos) {
510
+ ++j;
511
+ ++offset2;
512
+ }
513
+
514
+ while (true) {
515
+ if (leaf1->hashes[i] > leaf2->hashes[j]) {
516
+ ++i;
517
+ if (i == leaf1->size || get_first_chunk16(leaf1->hashes[i]) != pos)
518
+ break;
519
+ } else if (leaf2->hashes[j] > leaf1->hashes[i]) {
520
+ ++j;
521
+ if (j == leaf2->size || get_first_chunk16(leaf2->hashes[j]) != pos)
522
+ break;
523
+ } else {
524
+ if (leaf1->entries[i].key() == leaf2->entries[j].key())
525
+ return &leaf1->entries[i];
526
+
527
+ ++i;
528
+ if (i == leaf1->size || get_first_chunk16(leaf1->hashes[i]) != pos)
529
+ break;
530
+ ++j;
531
+ if (j == leaf2->size || get_first_chunk16(leaf2->hashes[j]) != pos)
532
+ break;
533
+ }
534
+ };
535
+ }
536
+
537
+ return nullptr;
538
+ }
539
+
540
+ template <int SizeClass>
541
+ static HighsHashTableEntry<K, V>* findCommonInLeaf(InnerLeaf<SizeClass>* leaf,
542
+ NodePtr n2, int hashPos) {
543
+ switch (n2.getType()) {
544
+ case kInnerLeafSizeClass1:
545
+ return findCommonInLeaf(leaf, n2.getInnerLeafSizeClass1(), hashPos);
546
+ case kInnerLeafSizeClass2:
547
+ return findCommonInLeaf(leaf, n2.getInnerLeafSizeClass2(), hashPos);
548
+ case kInnerLeafSizeClass3:
549
+ return findCommonInLeaf(leaf, n2.getInnerLeafSizeClass3(), hashPos);
550
+ case kInnerLeafSizeClass4:
551
+ return findCommonInLeaf(leaf, n2.getInnerLeafSizeClass4(), hashPos);
552
+ case kBranchNode: {
553
+ BranchNode* branch = n2.getBranchNode();
554
+ uint64_t matchMask = branch->occupation & leaf->occupation;
555
+
556
+ int offset = -1;
557
+ while (matchMask) {
558
+ int pos = HighsHashHelpers::log2i(matchMask);
559
+ matchMask ^= (uint64_t{1} << pos);
560
+
561
+ int i = leaf->occupation.num_set_until(static_cast<uint8_t>(pos)) +
562
+ offset;
563
+ while (get_first_chunk16(leaf->hashes[i]) != pos) {
564
+ ++i;
565
+ ++offset;
566
+ }
567
+
568
+ int j =
569
+ branch->occupation.num_set_until(static_cast<uint8_t>(pos)) - 1;
570
+
571
+ do {
572
+ if (find_recurse(branch->child[j],
573
+ compute_hash(leaf->entries[i].key()), hashPos + 1,
574
+ leaf->entries[i].key()))
575
+ return &leaf->entries[i];
576
+ ++i;
577
+ } while (i < leaf->size && get_first_chunk16(leaf->hashes[i]) == pos);
578
+ }
579
+ break;
580
+ }
581
+ default:
582
+ break;
583
+ }
584
+
585
+ return nullptr;
586
+ }
587
+
588
+ static NodePtr removeChildFromBranchNode(BranchNode* branch, int location,
589
+ uint64_t hash, int hashPos) {
590
+ NodePtr newNode;
591
+ int newNumChild = branch->occupation.num_set();
592
+
593
+ // first check if we might be able to merge all children into one new leaf
594
+ // based on the node numbers and assuming all of them might be in the
595
+ // smallest size class
596
+ if (newNumChild * InnerLeaf<1>::capacity() <= kLeafBurstThreshold) {
597
+ // since we have a good chance of merging we now check the actual size
598
+ // classes to see if that yields a number of entries at most the burst
599
+ // threshold
600
+ int childEntries = 0;
601
+ for (int i = 0; i <= newNumChild; ++i) {
602
+ childEntries += branch->child[i].numEntriesEstimate();
603
+ if (childEntries > kLeafBurstThreshold) break;
604
+ }
605
+
606
+ if (childEntries < kLeafBurstThreshold) {
607
+ // create a new merged inner leaf node containing all entries of
608
+ // children first recompute the number of entries, but this time access
609
+ // each child to get the actual number of entries needed and determine
610
+ // this nodes size class since before we estimated the number of child
611
+ // entries from the capacities of our child leaf node types which are
612
+ // stored in the branch nodes pointers directly and avoid unnecessary
613
+ // accesses of nodes that are not in cache.
614
+ childEntries = 0;
615
+ for (int i = 0; i <= newNumChild; ++i)
616
+ childEntries += branch->child[i].numEntries();
617
+
618
+ // check again if we exceed due to the extremely unlikely case
619
+ // of having less than 5 list nodes with together more than 30 entries
620
+ // as list nodes are only created in the last depth level
621
+ if (childEntries < kLeafBurstThreshold) {
622
+ switch (entries_to_size_class(childEntries)) {
623
+ case 1: {
624
+ InnerLeaf<1>* newLeafSize1 = new InnerLeaf<1>;
625
+ newNode = newLeafSize1;
626
+ for (int i = 0; i <= newNumChild; ++i)
627
+ mergeIntoLeaf(newLeafSize1, hashPos, branch->child[i]);
628
+ break;
629
+ }
630
+ case 2: {
631
+ InnerLeaf<2>* newLeafSize2 = new InnerLeaf<2>;
632
+ newNode = newLeafSize2;
633
+ for (int i = 0; i <= newNumChild; ++i)
634
+ mergeIntoLeaf(newLeafSize2, hashPos, branch->child[i]);
635
+ break;
636
+ }
637
+ case 3: {
638
+ InnerLeaf<3>* newLeafSize3 = new InnerLeaf<3>;
639
+ newNode = newLeafSize3;
640
+ for (int i = 0; i <= newNumChild; ++i)
641
+ mergeIntoLeaf(newLeafSize3, hashPos, branch->child[i]);
642
+ break;
643
+ }
644
+ case 4: {
645
+ InnerLeaf<4>* newLeafSize4 = new InnerLeaf<4>;
646
+ newNode = newLeafSize4;
647
+ for (int i = 0; i <= newNumChild; ++i)
648
+ mergeIntoLeaf(newLeafSize4, hashPos, branch->child[i]);
649
+ break;
650
+ }
651
+ default:
652
+ // Unexpected result from 'entries_to_size_class'
653
+ assert(false);
654
+ }
655
+
656
+ destroyBranchingNode(branch);
657
+ return newNode;
658
+ }
659
+ }
660
+ }
661
+
662
+ size_t newSize = getBranchNodeSize(newNumChild);
663
+ size_t rightSize = (newNumChild - location) * sizeof(NodePtr);
664
+ if (newSize == getBranchNodeSize(newNumChild + 1)) {
665
+ // allocated size class is the same, so we do not allocate a new node
666
+ memmove(&branch->child[location], &branch->child[location + 1],
667
+ rightSize);
668
+ newNode = branch;
669
+ } else {
670
+ // allocated size class changed, so we allocate a smaller branch node
671
+ BranchNode* compressedBranch = (BranchNode*)::operator new(newSize);
672
+ newNode = compressedBranch;
673
+
674
+ size_t leftSize =
675
+ offsetof(BranchNode, child) + location * sizeof(NodePtr);
676
+ memcpy(compressedBranch, branch, leftSize);
677
+ memcpy(&compressedBranch->child[location], &branch->child[location + 1],
678
+ rightSize);
679
+
680
+ destroyBranchingNode(branch);
681
+ }
682
+
683
+ return newNode;
684
+ }
685
+
686
+ NodePtr root;
687
+
688
+ template <int SizeClass>
689
+ static std::pair<ValueType*, bool> insert_into_leaf(
690
+ NodePtr* insertNode, InnerLeaf<SizeClass>* leaf, uint64_t hash,
691
+ int hashPos, HighsHashTableEntry<K, V>& entry) {
692
+ if (leaf->size == InnerLeaf<SizeClass>::capacity()) {
693
+ auto existingEntry = leaf->find_entry(hash, hashPos, entry.key());
694
+ if (existingEntry) return std::make_pair(existingEntry, false);
695
+
696
+ InnerLeaf<SizeClass + 1>* newLeaf =
697
+ new InnerLeaf<SizeClass + 1>(std::move(*leaf));
698
+ *insertNode = newLeaf;
699
+ delete leaf;
700
+ return newLeaf->insert_entry(hash, hashPos, entry);
701
+ }
702
+
703
+ return leaf->insert_entry(hash, hashPos, entry);
704
+ }
705
+
706
+ static std::pair<ValueType*, bool> insert_recurse(
707
+ NodePtr* insertNode, uint64_t hash, int hashPos,
708
+ HighsHashTableEntry<K, V>& entry) {
709
+ switch (insertNode->getType()) {
710
+ case kEmpty: {
711
+ if (hashPos == kMaxDepth) {
712
+ ListLeaf* leaf = new ListLeaf(std::move(entry));
713
+ *insertNode = leaf;
714
+ return std::make_pair(&leaf->first.entry.value(), true);
715
+ } else {
716
+ InnerLeaf<1>* leaf = new InnerLeaf<1>;
717
+ *insertNode = leaf;
718
+ return leaf->insert_entry(hash, hashPos, entry);
719
+ }
720
+ }
721
+ case kListLeaf: {
722
+ ListLeaf* leaf = insertNode->getListLeaf();
723
+ ListNode* iter = &leaf->first;
724
+ while (true) {
725
+ // check for existing key
726
+ if (iter->entry.key() == entry.key())
727
+ return std::make_pair(&iter->entry.value(), false);
728
+
729
+ if (iter->next == nullptr) {
730
+ // reached the end of the list and key is not duplicate, so insert
731
+ iter->next = new ListNode(std::move(entry));
732
+ ++leaf->count;
733
+ return std::make_pair(&iter->next->entry.value(), true);
734
+ }
735
+ iter = iter->next;
736
+ }
737
+
738
+ break;
739
+ }
740
+ case kInnerLeafSizeClass1:
741
+ return insert_into_leaf(insertNode,
742
+ insertNode->getInnerLeafSizeClass1(), hash,
743
+ hashPos, entry);
744
+ break;
745
+ case kInnerLeafSizeClass2:
746
+ return insert_into_leaf(insertNode,
747
+ insertNode->getInnerLeafSizeClass2(), hash,
748
+ hashPos, entry);
749
+ break;
750
+ case kInnerLeafSizeClass3:
751
+ return insert_into_leaf(insertNode,
752
+ insertNode->getInnerLeafSizeClass3(), hash,
753
+ hashPos, entry);
754
+ break;
755
+ case kInnerLeafSizeClass4: {
756
+ InnerLeaf<4>* leaf = insertNode->getInnerLeafSizeClass4();
757
+ if (leaf->size < InnerLeaf<4>::capacity())
758
+ return leaf->insert_entry(hash, hashPos, entry);
759
+
760
+ auto existingEntry = leaf->find_entry(hash, hashPos, entry.key());
761
+ if (existingEntry) return std::make_pair(existingEntry, false);
762
+ Occupation occupation = leaf->occupation;
763
+
764
+ uint8_t hashChunk = get_hash_chunk(hash, hashPos);
765
+ occupation.set(hashChunk);
766
+
767
+ int branchSize = occupation.num_set();
768
+
769
+ BranchNode* branch = createBranchingNode(branchSize);
770
+ *insertNode = branch;
771
+ branch->occupation = occupation;
772
+
773
+ if (hashPos + 1 == kMaxDepth) {
774
+ for (int i = 0; i < branchSize; ++i) branch->child[i] = nullptr;
775
+
776
+ for (int i = 0; i < leaf->size; ++i) {
777
+ int pos =
778
+ occupation.num_set_until(get_first_chunk16(leaf->hashes[i])) -
779
+ 1;
780
+ if (branch->child[pos].getType() == kEmpty)
781
+ branch->child[pos] = new ListLeaf(std::move(leaf->entries[i]));
782
+ else {
783
+ ListLeaf* listLeaf = branch->child[pos].getListLeaf();
784
+ ListNode* newNode = new ListNode(std::move(listLeaf->first));
785
+ listLeaf->first.next = newNode;
786
+ listLeaf->first.entry = std::move(leaf->entries[i]);
787
+ ++listLeaf->count;
788
+ }
789
+ }
790
+
791
+ delete leaf;
792
+
793
+ ListLeaf* listLeaf;
794
+
795
+ int pos = occupation.num_set_until(get_hash_chunk(hash, hashPos)) - 1;
796
+ if (branch->child[pos].getType() == kEmpty) {
797
+ listLeaf = new ListLeaf(std::move(entry));
798
+ branch->child[pos] = listLeaf;
799
+ } else {
800
+ listLeaf = branch->child[pos].getListLeaf();
801
+ ListNode* newNode = new ListNode(std::move(listLeaf->first));
802
+ listLeaf->first.next = newNode;
803
+ listLeaf->first.entry = std::move(entry);
804
+ ++listLeaf->count;
805
+ }
806
+
807
+ return std::make_pair(&listLeaf->first.entry.value(), true);
808
+ }
809
+
810
+ if (branchSize > 1) {
811
+ // maxsize in one bucket = number of items - (num buckets-1)
812
+ // since each bucket has at least 1 item the largest one can only
813
+ // have all remaining ones After adding the item: If it does not
814
+ // collide
815
+ int maxEntriesPerLeaf = 2 + leaf->size - branchSize;
816
+
817
+ if (maxEntriesPerLeaf <= InnerLeaf<1>::capacity()) {
818
+ // all items can go into the smallest leaf size
819
+ for (int i = 0; i < branchSize; ++i)
820
+ branch->child[i] = new InnerLeaf<1>;
821
+
822
+ for (int i = 0; i < leaf->size; ++i) {
823
+ int pos =
824
+ occupation.num_set_until(get_first_chunk16(leaf->hashes[i])) -
825
+ 1;
826
+ branch->child[pos].getInnerLeafSizeClass1()->insert_entry(
827
+ compute_hash(leaf->entries[i].key()), hashPos + 1,
828
+ leaf->entries[i]);
829
+ }
830
+
831
+ delete leaf;
832
+
833
+ int pos =
834
+ occupation.num_set_until(get_hash_chunk(hash, hashPos)) - 1;
835
+ return branch->child[pos].getInnerLeafSizeClass1()->insert_entry(
836
+ hash, hashPos + 1, entry);
837
+ } else {
838
+ // there are many collisions, determine the exact sizes first
839
+ uint8_t sizes[InnerLeaf<4>::capacity() + 1] = {};
840
+ sizes[occupation.num_set_until(hashChunk) - 1] += 1;
841
+ for (int i = 0; i < leaf->size; ++i) {
842
+ int pos =
843
+ occupation.num_set_until(get_first_chunk16(leaf->hashes[i])) -
844
+ 1;
845
+ sizes[pos] += 1;
846
+ }
847
+
848
+ for (int i = 0; i < branchSize; ++i) {
849
+ switch (entries_to_size_class(sizes[i])) {
850
+ case 1:
851
+ branch->child[i] = new InnerLeaf<1>;
852
+ break;
853
+ case 2:
854
+ branch->child[i] = new InnerLeaf<2>;
855
+ break;
856
+ case 3:
857
+ branch->child[i] = new InnerLeaf<3>;
858
+ break;
859
+ case 4:
860
+ branch->child[i] = new InnerLeaf<4>;
861
+ break;
862
+ default:
863
+ // Unexpected result from 'entries_to_size_class'
864
+ assert(false);
865
+ }
866
+ }
867
+
868
+ for (int i = 0; i < leaf->size; ++i) {
869
+ int pos =
870
+ occupation.num_set_until(get_first_chunk16(leaf->hashes[i])) -
871
+ 1;
872
+
873
+ switch (branch->child[pos].getType()) {
874
+ case kInnerLeafSizeClass1:
875
+ branch->child[pos].getInnerLeafSizeClass1()->insert_entry(
876
+ compute_hash(leaf->entries[i].key()), hashPos + 1,
877
+ leaf->entries[i]);
878
+ break;
879
+ case kInnerLeafSizeClass2:
880
+ branch->child[pos].getInnerLeafSizeClass2()->insert_entry(
881
+ compute_hash(leaf->entries[i].key()), hashPos + 1,
882
+ leaf->entries[i]);
883
+ break;
884
+ case kInnerLeafSizeClass3:
885
+ branch->child[pos].getInnerLeafSizeClass3()->insert_entry(
886
+ compute_hash(leaf->entries[i].key()), hashPos + 1,
887
+ leaf->entries[i]);
888
+ break;
889
+ case kInnerLeafSizeClass4:
890
+ branch->child[pos].getInnerLeafSizeClass4()->insert_entry(
891
+ compute_hash(leaf->entries[i].key()), hashPos + 1,
892
+ leaf->entries[i]);
893
+ break;
894
+ default:
895
+ break;
896
+ }
897
+ }
898
+ }
899
+
900
+ delete leaf;
901
+
902
+ int pos = occupation.num_set_until(hashChunk) - 1;
903
+ insertNode = &branch->child[pos];
904
+ ++hashPos;
905
+ } else {
906
+ // extremely unlikely that the new branch node only gets one
907
+ // child in that case create it and defer the insertion into
908
+ // the next depth
909
+ branch->child[0] = leaf;
910
+ insertNode = &branch->child[0];
911
+ ++hashPos;
912
+ leaf->rehash(hashPos);
913
+ }
914
+
915
+ break;
916
+ }
917
+ case kBranchNode: {
918
+ BranchNode* branch = insertNode->getBranchNode();
919
+
920
+ int location =
921
+ branch->occupation.num_set_until(get_hash_chunk(hash, hashPos));
922
+
923
+ if (branch->occupation.test(get_hash_chunk(hash, hashPos))) {
924
+ --location;
925
+ } else {
926
+ branch = addChildToBranchNode(branch, get_hash_chunk(hash, hashPos),
927
+ location);
928
+
929
+ branch->child[location] = nullptr;
930
+ branch->occupation.set(get_hash_chunk(hash, hashPos));
931
+ }
932
+
933
+ *insertNode = branch;
934
+ insertNode = &branch->child[location];
935
+ ++hashPos;
936
+ }
937
+ }
938
+
939
+ return insert_recurse(insertNode, hash, hashPos, entry);
940
+ }
941
+
942
+ static void erase_recurse(NodePtr* erase_node, uint64_t hash, int hashPos,
943
+ const K& key) {
944
+ switch (erase_node->getType()) {
945
+ case kEmpty: {
946
+ return;
947
+ }
948
+ case kListLeaf: {
949
+ ListLeaf* leaf = erase_node->getListLeaf();
950
+
951
+ // check for existing key
952
+ ListNode* iter = &leaf->first;
953
+
954
+ do {
955
+ ListNode* next = iter->next;
956
+ if (iter->entry.key() == key) {
957
+ // key found, decrease count
958
+ --leaf->count;
959
+ if (next != nullptr) {
960
+ // if we have a next node after replace the entry in iter by
961
+ // moving that node into it
962
+ *iter = std::move(*next);
963
+ // delete memory of that node
964
+ delete next;
965
+ }
966
+
967
+ break;
968
+ }
969
+
970
+ iter = next;
971
+ } while (iter != nullptr);
972
+
973
+ if (leaf->count == 0) {
974
+ delete leaf;
975
+ *erase_node = nullptr;
976
+ }
977
+
978
+ return;
979
+ }
980
+ case kInnerLeafSizeClass1: {
981
+ InnerLeaf<1>* leaf = erase_node->getInnerLeafSizeClass1();
982
+ if (leaf->erase_entry(hash, hashPos, key)) {
983
+ if (leaf->size == 0) {
984
+ delete leaf;
985
+ *erase_node = nullptr;
986
+ }
987
+ }
988
+
989
+ return;
990
+ }
991
+ case kInnerLeafSizeClass2: {
992
+ InnerLeaf<2>* leaf = erase_node->getInnerLeafSizeClass2();
993
+
994
+ if (leaf->erase_entry(hash, hashPos, key)) {
995
+ if (leaf->size == InnerLeaf<1>::capacity()) {
996
+ InnerLeaf<1>* newLeaf = new InnerLeaf<1>(std::move(*leaf));
997
+ *erase_node = newLeaf;
998
+ delete leaf;
999
+ }
1000
+ }
1001
+
1002
+ return;
1003
+ }
1004
+ case kInnerLeafSizeClass3: {
1005
+ InnerLeaf<3>* leaf = erase_node->getInnerLeafSizeClass3();
1006
+
1007
+ if (leaf->erase_entry(hash, hashPos, key)) {
1008
+ if (leaf->size == InnerLeaf<2>::capacity()) {
1009
+ InnerLeaf<2>* newLeaf = new InnerLeaf<2>(std::move(*leaf));
1010
+ *erase_node = newLeaf;
1011
+ delete leaf;
1012
+ }
1013
+ }
1014
+
1015
+ return;
1016
+ }
1017
+ case kInnerLeafSizeClass4: {
1018
+ InnerLeaf<4>* leaf = erase_node->getInnerLeafSizeClass4();
1019
+
1020
+ if (leaf->erase_entry(hash, hashPos, key)) {
1021
+ if (leaf->size == InnerLeaf<3>::capacity()) {
1022
+ InnerLeaf<3>* newLeaf = new InnerLeaf<3>(std::move(*leaf));
1023
+ *erase_node = newLeaf;
1024
+ delete leaf;
1025
+ }
1026
+ }
1027
+
1028
+ return;
1029
+ }
1030
+ case kBranchNode: {
1031
+ BranchNode* branch = erase_node->getBranchNode();
1032
+
1033
+ if (!branch->occupation.test(get_hash_chunk(hash, hashPos))) return;
1034
+
1035
+ int location =
1036
+ branch->occupation.num_set_until(get_hash_chunk(hash, hashPos)) - 1;
1037
+ erase_recurse(&branch->child[location], hash, hashPos + 1, key);
1038
+
1039
+ if (branch->child[location].getType() != kEmpty) return;
1040
+
1041
+ branch->occupation.flip(get_hash_chunk(hash, hashPos));
1042
+
1043
+ *erase_node =
1044
+ removeChildFromBranchNode(branch, location, hash, hashPos);
1045
+ break;
1046
+ }
1047
+ }
1048
+ }
1049
+
1050
+ static const ValueType* find_recurse(NodePtr node, uint64_t hash, int hashPos,
1051
+ const K& key) {
1052
+ int startPos = hashPos;
1053
+ switch (node.getType()) {
1054
+ case kEmpty:
1055
+ return nullptr;
1056
+ case kListLeaf: {
1057
+ ListLeaf* leaf = node.getListLeaf();
1058
+ ListNode* iter = &leaf->first;
1059
+ do {
1060
+ if (iter->entry.key() == key) return &iter->entry.value();
1061
+ iter = iter->next;
1062
+ } while (iter != nullptr);
1063
+ return nullptr;
1064
+ }
1065
+ case kInnerLeafSizeClass1: {
1066
+ InnerLeaf<1>* leaf = node.getInnerLeafSizeClass1();
1067
+ return leaf->find_entry(hash, hashPos, key);
1068
+ }
1069
+ case kInnerLeafSizeClass2: {
1070
+ InnerLeaf<2>* leaf = node.getInnerLeafSizeClass2();
1071
+ return leaf->find_entry(hash, hashPos, key);
1072
+ }
1073
+ case kInnerLeafSizeClass3: {
1074
+ InnerLeaf<3>* leaf = node.getInnerLeafSizeClass3();
1075
+ return leaf->find_entry(hash, hashPos, key);
1076
+ }
1077
+ case kInnerLeafSizeClass4: {
1078
+ InnerLeaf<4>* leaf = node.getInnerLeafSizeClass4();
1079
+ return leaf->find_entry(hash, hashPos, key);
1080
+ }
1081
+ case kBranchNode: {
1082
+ BranchNode* branch = node.getBranchNode();
1083
+ if (!branch->occupation.test(get_hash_chunk(hash, hashPos)))
1084
+ return nullptr;
1085
+ int location =
1086
+ branch->occupation.num_set_until(get_hash_chunk(hash, hashPos)) - 1;
1087
+ node = branch->child[location];
1088
+ ++hashPos;
1089
+ }
1090
+ }
1091
+
1092
+ assert(hashPos > startPos);
1093
+
1094
+ return find_recurse(node, hash, hashPos, key);
1095
+ }
1096
+
1097
+ static const HighsHashTableEntry<K, V>* find_common_recurse(NodePtr n1,
1098
+ NodePtr n2,
1099
+ int hashPos) {
1100
+ if (n1.getType() > n2.getType()) std::swap(n1, n2);
1101
+
1102
+ switch (n1.getType()) {
1103
+ case kEmpty:
1104
+ return nullptr;
1105
+ case kListLeaf: {
1106
+ ListLeaf* leaf = n1.getListLeaf();
1107
+ ListNode* iter = &leaf->first;
1108
+ do {
1109
+ if (find_recurse(n2, compute_hash(iter->entry.key()), hashPos,
1110
+ iter->entry.key()))
1111
+ return &iter->entry;
1112
+ iter = iter->next;
1113
+ } while (iter != nullptr);
1114
+ return nullptr;
1115
+ }
1116
+ case kInnerLeafSizeClass1:
1117
+ return findCommonInLeaf(n1.getInnerLeafSizeClass1(), n2, hashPos);
1118
+ case kInnerLeafSizeClass2:
1119
+ return findCommonInLeaf(n1.getInnerLeafSizeClass2(), n2, hashPos);
1120
+ case kInnerLeafSizeClass3:
1121
+ return findCommonInLeaf(n1.getInnerLeafSizeClass3(), n2, hashPos);
1122
+ case kInnerLeafSizeClass4:
1123
+ return findCommonInLeaf(n1.getInnerLeafSizeClass4(), n2, hashPos);
1124
+ case kBranchNode: {
1125
+ BranchNode* branch1 = n1.getBranchNode();
1126
+ BranchNode* branch2 = n2.getBranchNode();
1127
+
1128
+ uint64_t matchMask = branch1->occupation & branch2->occupation;
1129
+
1130
+ while (matchMask) {
1131
+ int pos = HighsHashHelpers::log2i(matchMask);
1132
+ assert((branch1->occupation >> pos) & 1);
1133
+ assert((branch2->occupation >> pos) & 1);
1134
+ assert((matchMask >> pos) & 1);
1135
+
1136
+ matchMask ^= (uint64_t{1} << pos);
1137
+
1138
+ assert(((matchMask >> pos) & 1) == 0);
1139
+
1140
+ int location1 =
1141
+ branch1->occupation.num_set_until(static_cast<uint8_t>(pos)) - 1;
1142
+ int location2 =
1143
+ branch2->occupation.num_set_until(static_cast<uint8_t>(pos)) - 1;
1144
+
1145
+ const HighsHashTableEntry<K, V>* match =
1146
+ find_common_recurse(branch1->child[location1],
1147
+ branch2->child[location2], hashPos + 1);
1148
+ if (match != nullptr) return match;
1149
+ }
1150
+
1151
+ return nullptr;
1152
+ }
1153
+ default:
1154
+ throw std::logic_error("Unexpected type in hash tree");
1155
+ }
1156
+ }
1157
+
1158
+ static void destroy_recurse(NodePtr node) {
1159
+ switch (node.getType()) {
1160
+ case kEmpty:
1161
+ break;
1162
+ case kListLeaf: {
1163
+ ListLeaf* leaf = node.getListLeaf();
1164
+ ListNode* iter = leaf->first.next;
1165
+ delete leaf;
1166
+ while (iter != nullptr) {
1167
+ ListNode* next = iter->next;
1168
+ delete iter;
1169
+ iter = next;
1170
+ }
1171
+
1172
+ break;
1173
+ }
1174
+ case kInnerLeafSizeClass1:
1175
+ delete node.getInnerLeafSizeClass1();
1176
+ break;
1177
+ case kInnerLeafSizeClass2:
1178
+ delete node.getInnerLeafSizeClass2();
1179
+ break;
1180
+ case kInnerLeafSizeClass3:
1181
+ delete node.getInnerLeafSizeClass3();
1182
+ break;
1183
+ case kInnerLeafSizeClass4:
1184
+ delete node.getInnerLeafSizeClass4();
1185
+ break;
1186
+ case kBranchNode: {
1187
+ BranchNode* branch = node.getBranchNode();
1188
+ int size = branch->occupation.num_set();
1189
+
1190
+ for (int i = 0; i < size; ++i) destroy_recurse(branch->child[i]);
1191
+
1192
+ destroyBranchingNode(branch);
1193
+ }
1194
+ }
1195
+ }
1196
+
1197
+ static NodePtr copy_recurse(NodePtr node) {
1198
+ switch (node.getType()) {
1199
+ case kEmpty:
1200
+ throw std::logic_error("Unexpected node type in empty in hash tree");
1201
+ case kListLeaf: {
1202
+ ListLeaf* leaf = node.getListLeaf();
1203
+
1204
+ ListLeaf* copyLeaf = new ListLeaf(*leaf);
1205
+
1206
+ ListNode* iter = &leaf->first;
1207
+ ListNode* copyIter = &copyLeaf->first;
1208
+ do {
1209
+ copyIter->next = new ListNode(*iter->next);
1210
+ iter = iter->next;
1211
+ copyIter = copyIter->next;
1212
+ } while (iter->next != nullptr);
1213
+
1214
+ return copyLeaf;
1215
+ }
1216
+ case kInnerLeafSizeClass1: {
1217
+ InnerLeaf<1>* leaf = node.getInnerLeafSizeClass1();
1218
+ return new InnerLeaf<1>(*leaf);
1219
+ }
1220
+ case kInnerLeafSizeClass2: {
1221
+ InnerLeaf<2>* leaf = node.getInnerLeafSizeClass2();
1222
+ return new InnerLeaf<2>(*leaf);
1223
+ }
1224
+ case kInnerLeafSizeClass3: {
1225
+ InnerLeaf<3>* leaf = node.getInnerLeafSizeClass3();
1226
+ return new InnerLeaf<3>(*leaf);
1227
+ }
1228
+ case kInnerLeafSizeClass4: {
1229
+ InnerLeaf<4>* leaf = node.getInnerLeafSizeClass4();
1230
+ return new InnerLeaf<4>(*leaf);
1231
+ }
1232
+ case kBranchNode: {
1233
+ BranchNode* branch = node.getBranchNode();
1234
+ int size = branch->occupation.num_set();
1235
+ BranchNode* newBranch =
1236
+ (BranchNode*)::operator new(getBranchNodeSize(size));
1237
+ newBranch->occupation = branch->occupation;
1238
+ for (int i = 0; i < size; ++i)
1239
+ newBranch->child[i] = copy_recurse(branch->child[i]);
1240
+
1241
+ return newBranch;
1242
+ }
1243
+ default:
1244
+ throw std::logic_error("Unexpected type in hash tree");
1245
+ }
1246
+ }
1247
+
1248
+ template <typename R, typename F,
1249
+ typename std::enable_if<std::is_void<R>::value, int>::type = 0>
1250
+ static void for_each_recurse(NodePtr node, F&& f) {
1251
+ switch (node.getType()) {
1252
+ case kEmpty:
1253
+ break;
1254
+ case kListLeaf: {
1255
+ ListLeaf* leaf = node.getListLeaf();
1256
+ ListNode* iter = &leaf->first;
1257
+ do {
1258
+ iter->entry.forward(f);
1259
+ iter = iter->next;
1260
+ } while (iter != nullptr);
1261
+ break;
1262
+ }
1263
+ case kInnerLeafSizeClass1: {
1264
+ InnerLeaf<1>* leaf = node.getInnerLeafSizeClass1();
1265
+ for (int i = 0; i < leaf->size; ++i) leaf->entries[i].forward(f);
1266
+
1267
+ break;
1268
+ }
1269
+ case kInnerLeafSizeClass2: {
1270
+ InnerLeaf<2>* leaf = node.getInnerLeafSizeClass2();
1271
+ for (int i = 0; i < leaf->size; ++i) leaf->entries[i].forward(f);
1272
+
1273
+ break;
1274
+ }
1275
+ case kInnerLeafSizeClass3: {
1276
+ InnerLeaf<3>* leaf = node.getInnerLeafSizeClass3();
1277
+ for (int i = 0; i < leaf->size; ++i) leaf->entries[i].forward(f);
1278
+
1279
+ break;
1280
+ }
1281
+ case kInnerLeafSizeClass4: {
1282
+ InnerLeaf<4>* leaf = node.getInnerLeafSizeClass4();
1283
+ for (int i = 0; i < leaf->size; ++i) leaf->entries[i].forward(f);
1284
+
1285
+ break;
1286
+ }
1287
+ case kBranchNode: {
1288
+ BranchNode* branch = node.getBranchNode();
1289
+ int size = branch->occupation.num_set();
1290
+
1291
+ for (int i = 0; i < size; ++i) for_each_recurse<R>(branch->child[i], f);
1292
+ }
1293
+ }
1294
+ }
1295
+
1296
+ template <typename R, typename F,
1297
+ typename std::enable_if<!std::is_void<R>::value, int>::type = 0>
1298
+ static R for_each_recurse(NodePtr node, F&& f) {
1299
+ switch (node.getType()) {
1300
+ case kEmpty:
1301
+ break;
1302
+ case kListLeaf: {
1303
+ ListLeaf* leaf = node.getListLeaf();
1304
+ ListNode* iter = &leaf->first;
1305
+ do {
1306
+ auto x = iter->entry.forward(f);
1307
+ if (x) return x;
1308
+ iter = iter->next;
1309
+ } while (iter != nullptr);
1310
+ break;
1311
+ }
1312
+ case kInnerLeafSizeClass1: {
1313
+ InnerLeaf<1>* leaf = node.getInnerLeafSizeClass1();
1314
+ for (int i = 0; i < leaf->size; ++i) {
1315
+ auto x = leaf->entries[i].forward(f);
1316
+ if (x) return x;
1317
+ }
1318
+
1319
+ break;
1320
+ }
1321
+ case kInnerLeafSizeClass2: {
1322
+ InnerLeaf<2>* leaf = node.getInnerLeafSizeClass2();
1323
+ for (int i = 0; i < leaf->size; ++i) {
1324
+ auto x = leaf->entries[i].forward(f);
1325
+ if (x) return x;
1326
+ }
1327
+
1328
+ break;
1329
+ }
1330
+ case kInnerLeafSizeClass3: {
1331
+ InnerLeaf<3>* leaf = node.getInnerLeafSizeClass3();
1332
+ for (int i = 0; i < leaf->size; ++i) {
1333
+ auto x = leaf->entries[i].forward(f);
1334
+ if (x) return x;
1335
+ }
1336
+
1337
+ break;
1338
+ }
1339
+ case kInnerLeafSizeClass4: {
1340
+ InnerLeaf<4>* leaf = node.getInnerLeafSizeClass4();
1341
+ for (int i = 0; i < leaf->size; ++i) {
1342
+ auto x = leaf->entries[i].forward(f);
1343
+ if (x) return x;
1344
+ }
1345
+
1346
+ break;
1347
+ }
1348
+ case kBranchNode: {
1349
+ BranchNode* branch = node.getBranchNode();
1350
+ int size = branch->occupation.num_set();
1351
+
1352
+ for (int i = 0; i < size; ++i) {
1353
+ auto x = for_each_recurse<R>(branch->child[i], f);
1354
+ if (x) return x;
1355
+ }
1356
+ }
1357
+ }
1358
+
1359
+ return R();
1360
+ }
1361
+
1362
+ public:
1363
+ template <typename... Args>
1364
+ bool insert(Args&&... args) {
1365
+ HighsHashTableEntry<K, V> entry(std::forward<Args>(args)...);
1366
+ uint64_t hash = compute_hash(entry.key());
1367
+ return insert_recurse(&root, hash, 0, entry).second;
1368
+ }
1369
+
1370
+ template <typename... Args>
1371
+ std::pair<ValueType*, bool> insert_or_get(Args&&... args) {
1372
+ HighsHashTableEntry<K, V> entry(std::forward<Args>(args)...);
1373
+ uint64_t hash = compute_hash(entry.key());
1374
+ return insert_recurse(&root, hash, 0, entry);
1375
+ }
1376
+
1377
+ void erase(const K& key) {
1378
+ uint64_t hash = compute_hash(key);
1379
+
1380
+ erase_recurse(&root, hash, 0, key);
1381
+ }
1382
+
1383
+ bool contains(const K& key) const {
1384
+ uint64_t hash = compute_hash(key);
1385
+ return find_recurse(root, hash, 0, key) != nullptr;
1386
+ }
1387
+
1388
+ const ValueType* find(const K& key) const {
1389
+ uint64_t hash = compute_hash(key);
1390
+
1391
+ return find_recurse(root, hash, 0, key);
1392
+ }
1393
+
1394
+ ValueType* find(const K& key) {
1395
+ uint64_t hash = compute_hash(key);
1396
+
1397
+ return find_recurse(root, hash, 0, key);
1398
+ }
1399
+
1400
+ const HighsHashTableEntry<K, V>* find_common(
1401
+ const HighsHashTree<K, V>& other) const {
1402
+ return find_common_recurse(root, other.root, 0);
1403
+ }
1404
+
1405
+ bool empty() const { return root.getType() == kEmpty; }
1406
+
1407
+ void clear() {
1408
+ destroy_recurse(root);
1409
+ root = nullptr;
1410
+ }
1411
+
1412
+ template <typename F>
1413
+ auto for_each(F&& f) const
1414
+ -> decltype(HighsHashTableEntry<K, V>().forward(f)) {
1415
+ using R = decltype(for_each(f));
1416
+ return for_each_recurse<R>(root, f);
1417
+ }
1418
+
1419
+ HighsHashTree() = default;
1420
+
1421
+ HighsHashTree(HighsHashTree&& other) : root(other.root) {
1422
+ other.root = nullptr;
1423
+ }
1424
+
1425
+ HighsHashTree(const HighsHashTree& other) : root(copy_recurse(other.root)) {}
1426
+
1427
+ HighsHashTree& operator=(HighsHashTree&& other) {
1428
+ destroy_recurse(root);
1429
+ root = other.root;
1430
+ other.root = nullptr;
1431
+ return *this;
1432
+ }
1433
+
1434
+ HighsHashTree& operator=(const HighsHashTree& other) {
1435
+ destroy_recurse(root);
1436
+ root = copy_recurse(other.root);
1437
+ return *this;
1438
+ }
1439
+
1440
+ ~HighsHashTree() { destroy_recurse(root); }
1441
+ };
1442
+
1443
+ #endif