sleipnirgroup-jormungandr 0.6.7.dev45__tar.gz → 0.6.7.dev47__tar.gz

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.

Potentially problematic release.


This version of sleipnirgroup-jormungandr might be problematic. Click here for more details.

Files changed (123) hide show
  1. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/expression.hpp +0 -2
  3. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/pool.hpp +11 -61
  4. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/src/sleipnir/__init__.py +1 -1
  5. sleipnirgroup_jormungandr-0.6.7.dev47/src/util/pool.cpp +79 -0
  6. sleipnirgroup_jormungandr-0.6.7.dev45/src/util/pool.cpp +0 -8
  7. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/CMakeLists.txt +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/LICENSE.txt +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/README.md +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/SleipnirConfig.cmake.in +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/cmake/BuildTypes.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/cmake/CompilerFlags.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/cmake/Pybind11Mkdoc.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/cmake/SubdirList.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/cmake/arm-none-eabi.cmake +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/gradient.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/hessian.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/slice.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/variable.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/multistart.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/ocp.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/problem.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/options.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/assert.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/concepts.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/empty.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/function_ref.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/print.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/profiler.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/scope_exit.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/spy.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/include/sleipnir/util/symbol_exports.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/pyproject.toml +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/autodiff/bind_variable.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/binders.hpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/docstrings.hpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/for_each_type.hpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/main.cpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/bind_ocp.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/bind_problem.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/cpp/try_cast.hpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/src/sleipnir/autodiff/__init__.py +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/src/sleipnir/optimization/__init__.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/autodiff/gradient_test.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/autodiff/hessian_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/autodiff/jacobian_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/autodiff/variable_matrix_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/autodiff/variable_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/cart_pole_problem_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/cart_pole_util.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/constraints_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/decision_variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/differential_drive_problem_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/differential_drive_util.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/double_integrator_problem_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/flywheel_ocp_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/flywheel_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/linear_problem_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/multistart_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/near.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/nonlinear_problem_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/problem_spy_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/quadratic_problem_test.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/rk4.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/solver/exit_status_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/python/test/optimization/trivial_problem_test.py +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/autodiff/gradient.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/autodiff/hessian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/autodiff/jacobian.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/autodiff/variable_matrix.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/optimization/ocp.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/optimization/problem.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/optimization/solver/ipm.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/optimization/solver/newton.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev45 → sleipnirgroup_jormungandr-0.6.7.dev47}/src/optimization/solver/sqp.cpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sleipnirgroup-jormungandr
3
- Version: 0.6.7.dev45
3
+ Version: 0.6.7.dev47
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -21,8 +21,6 @@
21
21
 
22
22
  namespace slp::detail {
23
23
 
24
- // The global pool allocator uses a thread-local static pool resource, which
25
- // isn't guaranteed to be initialized properly across DLL boundaries on Windows
26
24
  #ifdef _WIN32
27
25
  inline constexpr bool USE_POOL_ALLOCATOR = false;
28
26
  #else
@@ -2,7 +2,6 @@
2
2
 
3
3
  #pragma once
4
4
 
5
- #include <algorithm>
6
5
  #include <cstddef>
7
6
  #include <memory>
8
7
 
@@ -24,8 +23,10 @@ class SLEIPNIR_DLLEXPORT PoolResource {
24
23
  /// Constructs a default PoolResource.
25
24
  ///
26
25
  /// @param blocks_per_chunk Number of blocks per chunk of memory.
27
- explicit PoolResource(size_t blocks_per_chunk)
28
- : blocks_per_chunk{blocks_per_chunk} {}
26
+ explicit PoolResource(size_t blocks_per_chunk);
27
+
28
+ /// Destructor.
29
+ ~PoolResource();
29
30
 
30
31
  /// Copy constructor.
31
32
  PoolResource(const PoolResource&) = delete;
@@ -36,12 +37,12 @@ class SLEIPNIR_DLLEXPORT PoolResource {
36
37
  PoolResource& operator=(const PoolResource&) = delete;
37
38
 
38
39
  /// Move constructor.
39
- PoolResource(PoolResource&&) = default;
40
+ PoolResource(PoolResource&&);
40
41
 
41
42
  /// Move assignment operator.
42
43
  ///
43
44
  /// @return This pool resource.
44
- PoolResource& operator=(PoolResource&&) = default;
45
+ PoolResource& operator=(PoolResource&&);
45
46
 
46
47
  /// Returns a block of memory from the pool.
47
48
  ///
@@ -50,27 +51,7 @@ class SLEIPNIR_DLLEXPORT PoolResource {
50
51
  /// than alignof(std::max_align_t).
51
52
  /// @return A block of memory from the pool.
52
53
  [[nodiscard]]
53
- void* allocate(size_t bytes, size_t alignment = alignof(std::max_align_t)) {
54
- // Round up to a multiple of the alignment so consecutive blocks in a chunk
55
- // stay aligned. `alignment` is a power of two, so `alignment - 1` is a mask
56
- // of the bits below it.
57
- //
58
- // 1. Add `alignment - 1` so the round-down in step 4 becomes a round-up
59
- // 2. Create mask `alignment - 1` with every bit below the alignment set
60
- // 3. Invert mask via `~(alignment - 1)` so only higher bits are set
61
- // 4. Bitwise AND to zero out lower bits, rounding down to a multiple of the
62
- // alignment
63
- size_t block_size = (bytes + alignment - 1) & ~(alignment - 1);
64
-
65
- auto& pool = get_pool(block_size);
66
- if (pool.free_list.empty()) {
67
- add_chunk(pool);
68
- }
69
-
70
- auto ptr = pool.free_list.back();
71
- pool.free_list.pop_back();
72
- return ptr;
73
- }
54
+ void* allocate(size_t bytes, size_t alignment = alignof(std::max_align_t));
74
55
 
75
56
  /// Gives a block of memory back to the pool.
76
57
  ///
@@ -80,17 +61,8 @@ class SLEIPNIR_DLLEXPORT PoolResource {
80
61
  /// @param p A pointer to the block of memory.
81
62
  /// @param bytes Number of bytes in the block (unused).
82
63
  /// @param alignment Alignment of the block (unused).
83
- void deallocate(
84
- void* p, [[maybe_unused]] size_t bytes,
85
- [[maybe_unused]] size_t alignment = alignof(std::max_align_t)) {
86
- // Find the last chunk that starts at or before p
87
- auto chunk = std::upper_bound(
88
- m_chunks.begin(), m_chunks.end(), static_cast<std::byte*>(p),
89
- [](const std::byte* ptr, const Chunk& c) { return ptr < c.begin; });
90
- --chunk;
91
-
92
- m_pools[chunk->pool_index].free_list.emplace_back(p);
93
- }
64
+ void deallocate(void* p, size_t bytes,
65
+ size_t alignment = alignof(std::max_align_t));
94
66
 
95
67
  /// Returns true if this pool resource has the same backing storage as
96
68
  /// another.
@@ -144,35 +116,13 @@ class SLEIPNIR_DLLEXPORT PoolResource {
144
116
  ///
145
117
  /// @param block_size Number of bytes per block.
146
118
  /// @return The pool for the given block size.
147
- Pool& get_pool(size_t block_size) {
148
- for (auto& pool : m_pools) {
149
- if (pool.block_size == block_size) {
150
- return pool;
151
- }
152
- }
153
-
154
- return m_pools.emplace_back(Pool{block_size, {}});
155
- }
119
+ Pool& get_pool(size_t block_size);
156
120
 
157
121
  /// Adds a memory chunk to the given pool, partitions it into blocks with the
158
122
  /// pool's block size, and appends pointers to them to the pool's free list.
159
123
  ///
160
124
  /// @param pool The pool.
161
- void add_chunk(Pool& pool) {
162
- auto begin =
163
- m_buffer.emplace_back(new std::byte[pool.block_size * blocks_per_chunk])
164
- .get();
165
-
166
- size_t pool_index = &pool - m_pools.data();
167
- auto pos = std::upper_bound(
168
- m_chunks.begin(), m_chunks.end(), begin,
169
- [](const std::byte* ptr, const Chunk& c) { return ptr < c.begin; });
170
- m_chunks.insert(pos, Chunk{begin, pool_index});
171
-
172
- for (int i = blocks_per_chunk - 1; i >= 0; --i) {
173
- pool.free_list.emplace_back(begin + pool.block_size * i);
174
- }
175
- }
125
+ void add_chunk(Pool& pool);
176
126
  };
177
127
 
178
128
  /// This class is an allocator for the pool resource.
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.7.dev45"
5
+ __version__ = "0.6.7.dev47"
@@ -0,0 +1,79 @@
1
+ // Copyright (c) Sleipnir contributors
2
+
3
+ #include "sleipnir/util/pool.hpp"
4
+
5
+ #include <algorithm>
6
+ #include <cstddef>
7
+
8
+ slp::PoolResource::PoolResource(size_t blocks_per_chunk)
9
+ : blocks_per_chunk{blocks_per_chunk} {}
10
+
11
+ slp::PoolResource::~PoolResource() = default;
12
+
13
+ slp::PoolResource::PoolResource(PoolResource&&) = default;
14
+
15
+ slp::PoolResource& slp::PoolResource::operator=(PoolResource&&) = default;
16
+
17
+ void* slp::PoolResource::allocate(size_t bytes, size_t alignment) {
18
+ // Round up to a multiple of the alignment so consecutive blocks in a chunk
19
+ // stay aligned. `alignment` is a power of two, so `alignment - 1` is a mask
20
+ // of the bits below it.
21
+ //
22
+ // 1. Add `alignment - 1` so the round-down in step 4 becomes a round-up
23
+ // 2. Create mask `alignment - 1` with every bit below the alignment set
24
+ // 3. Invert mask via `~(alignment - 1)` so only higher bits are set
25
+ // 4. Bitwise AND to zero out lower bits, rounding down to a multiple of the
26
+ // alignment
27
+ size_t block_size = (bytes + alignment - 1) & ~(alignment - 1);
28
+
29
+ auto& pool = get_pool(block_size);
30
+ if (pool.free_list.empty()) {
31
+ add_chunk(pool);
32
+ }
33
+
34
+ auto ptr = pool.free_list.back();
35
+ pool.free_list.pop_back();
36
+ return ptr;
37
+ }
38
+
39
+ void slp::PoolResource::deallocate(void* p, [[maybe_unused]] size_t bytes,
40
+ [[maybe_unused]] size_t alignment) {
41
+ // Find the last chunk that starts at or before p
42
+ auto chunk = std::upper_bound(
43
+ m_chunks.begin(), m_chunks.end(), static_cast<std::byte*>(p),
44
+ [](const std::byte* ptr, const Chunk& c) { return ptr < c.begin; });
45
+ --chunk;
46
+
47
+ m_pools[chunk->pool_index].free_list.emplace_back(p);
48
+ }
49
+
50
+ slp::PoolResource::Pool& slp::PoolResource::get_pool(size_t block_size) {
51
+ for (auto& pool : m_pools) {
52
+ if (pool.block_size == block_size) {
53
+ return pool;
54
+ }
55
+ }
56
+
57
+ return m_pools.emplace_back(Pool{block_size, {}});
58
+ }
59
+
60
+ void slp::PoolResource::add_chunk(Pool& pool) {
61
+ auto begin =
62
+ m_buffer.emplace_back(new std::byte[pool.block_size * blocks_per_chunk])
63
+ .get();
64
+
65
+ size_t pool_index = &pool - m_pools.data();
66
+ auto pos = std::upper_bound(
67
+ m_chunks.begin(), m_chunks.end(), begin,
68
+ [](const std::byte* ptr, const Chunk& c) { return ptr < c.begin; });
69
+ m_chunks.insert(pos, Chunk{begin, pool_index});
70
+
71
+ for (int i = blocks_per_chunk - 1; i >= 0; --i) {
72
+ pool.free_list.emplace_back(begin + pool.block_size * i);
73
+ }
74
+ }
75
+
76
+ slp::PoolResource& slp::global_pool_resource() {
77
+ thread_local PoolResource pool{16384};
78
+ return pool;
79
+ }
@@ -1,8 +0,0 @@
1
- // Copyright (c) Sleipnir contributors
2
-
3
- #include "sleipnir/util/pool.hpp"
4
-
5
- slp::PoolResource& slp::global_pool_resource() {
6
- thread_local PoolResource pool{16384};
7
- return pool;
8
- }