burnman-cpp 0.2.0__tar.gz → 0.3.0__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 burnman-cpp might be problematic. Click here for more details.

Files changed (400) hide show
  1. burnman_cpp-0.3.0/.github/workflows/wheels.yml +68 -0
  2. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/.gitignore +1 -0
  3. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/CMakeLists.txt +17 -1
  4. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/PKG-INFO +20 -9
  5. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/README.md +16 -7
  6. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/pyproject.toml +21 -2
  7. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram.py +5 -2
  8. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_line_resolution.py +14 -1
  9. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_slb2024.py +22 -6
  10. burnman_cpp-0.3.0/python/tests/test_wheel_metadata.py +22 -0
  11. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/continuation.cpp +7 -4
  12. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/tracing.cpp +21 -5
  13. burnman_cpp-0.3.0/tools/build_wheel_dependencies.py +177 -0
  14. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/.clang-format +0 -0
  15. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/.github/workflows/benchmarks.yml +0 -0
  16. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/.github/workflows/format.yml +0 -0
  17. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/.github/workflows/tests.yml +0 -0
  18. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/LICENSE +0 -0
  19. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/Makefile +0 -0
  20. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/benchmarks/README.md +0 -0
  21. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/benchmarks/core/benchmark_assemblage.cpp +0 -0
  22. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/benchmarks/core/benchmark_mineral.cpp +0 -0
  23. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/benchmarks/cpp_python_speedup.py +0 -0
  24. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/benchmarks/eos/benchmark_property_modifiers.cpp +0 -0
  25. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/benchmarks/parse_benchmarks.py +0 -0
  26. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/benchmarks/python_benchmarks.py +0 -0
  27. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/benchmarks/requirements.txt +0 -0
  28. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_basalt_phase_diagram.py +0 -0
  29. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_composition.py +0 -0
  30. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_equilibrate.py +0 -0
  31. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_forsterite_thermodynamic_sections.py +0 -0
  32. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_green2025_at1.py +0 -0
  33. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_green2025_klb1.py +0 -0
  34. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_green2025_mix1g.py +0 -0
  35. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_green2025_re46.py +0 -0
  36. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_green2025_ton101s.py +0 -0
  37. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_green2025_ton101u.py +0 -0
  38. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_harzburgite_basalt_px.py +0 -0
  39. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_iron_hematite_tx.py +0 -0
  40. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_metasediment_contours.py +0 -0
  41. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_metasediment_phase_diagram.py +0 -0
  42. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_olivine_px.py +0 -0
  43. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_olivine_tx.py +0 -0
  44. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_olivine_vx.py +0 -0
  45. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_patch_phase_diagram.py +0 -0
  46. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_phase_diagram_grid.py +0 -0
  47. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_plot_pyrolite_sp_relaxed_properties.py +0 -0
  48. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_pyrolite_phase_diagram.py +0 -0
  49. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_pyrolite_phase_diagram_zoom.py +0 -0
  50. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_pyrolite_sp_phase_diagram.py +0 -0
  51. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_refine_phase_diagram.py +0 -0
  52. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_single_point_equilibrium.py +0 -0
  53. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/example_solution_equilibrium.py +0 -0
  54. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/green2025.py +0 -0
  55. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/examples/green2025_reference.md +0 -0
  56. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/assemblage.hpp +0 -0
  57. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/combined_mineral.hpp +0 -0
  58. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/composite_material.hpp +0 -0
  59. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/composition.hpp +0 -0
  60. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/equation_of_state.hpp +0 -0
  61. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/material.hpp +0 -0
  62. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/mineral.hpp +0 -0
  63. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/relaxed_solution.hpp +0 -0
  64. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/solution.hpp +0 -0
  65. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/solution_model.hpp +0 -0
  66. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/solution_models/asymmetric_regular_solution.hpp +0 -0
  67. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/solution_models/ideal_solution.hpp +0 -0
  68. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/solution_models/solution_model_base.hpp +0 -0
  69. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/core/solution_models/symmetric_regular_solution.hpp +0 -0
  70. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/birch_murnaghan.hpp +0 -0
  71. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/components/bukowinski_electronic.hpp +0 -0
  72. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/components/debye.hpp +0 -0
  73. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/components/einstein.hpp +0 -0
  74. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/components/excess_params.hpp +0 -0
  75. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/components/gsl_params.hpp +0 -0
  76. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/components/property_modifiers.hpp +0 -0
  77. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/hp.hpp +0 -0
  78. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/hp_liquid.hpp +0 -0
  79. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/make_eos.hpp +0 -0
  80. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/mie_grueneisen_debye.hpp +0 -0
  81. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/modified_tait.hpp +0 -0
  82. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/slb.hpp +0 -0
  83. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/eos/vinet.hpp +0 -0
  84. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/minerals/datasets.hpp +0 -0
  85. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/minerals/model_sets.hpp +0 -0
  86. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/minerals/phase_aliases.hpp +0 -0
  87. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/minerals/water.hpp +0 -0
  88. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/optim/roots/bracket.hpp +0 -0
  89. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/optim/roots/brent.hpp +0 -0
  90. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/optim/roots/damped_newton_solver.hpp +0 -0
  91. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/optim/roots/damped_newton_state.hpp +0 -0
  92. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/optim/roots/damped_newton_types.hpp +0 -0
  93. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/averaging_base.hpp +0 -0
  94. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/averaging_schemes.hpp +0 -0
  95. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/averaging_utils.hpp +0 -0
  96. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/hs.hpp +0 -0
  97. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/hs_lower.hpp +0 -0
  98. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/hs_upper.hpp +0 -0
  99. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/reuss.hpp +0 -0
  100. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/voigt.hpp +0 -0
  101. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/averaging/vrh.hpp +0 -0
  102. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equality_constraint_base.hpp +0 -0
  103. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equality_constraint_helpers.hpp +0 -0
  104. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equality_constraint_variants.hpp +0 -0
  105. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equality_constraints.hpp +0 -0
  106. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equilibrate.hpp +0 -0
  107. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equilibrate_impl.hpp +0 -0
  108. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equilibrate_lambda_bounds.hpp +0 -0
  109. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equilibrate_objective.hpp +0 -0
  110. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equilibrate_types.hpp +0 -0
  111. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/equilibration/equilibrate_utils.hpp +0 -0
  112. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/boundary_repair.hpp +0 -0
  113. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/calculation.hpp +0 -0
  114. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/common.hpp +0 -0
  115. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/consistency.hpp +0 -0
  116. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/continuation.hpp +0 -0
  117. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/contours.hpp +0 -0
  118. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/critical.hpp +0 -0
  119. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/domain.hpp +0 -0
  120. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/polygons.hpp +0 -0
  121. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/properties.hpp +0 -0
  122. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/refinement.hpp +0 -0
  123. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/stability.hpp +0 -0
  124. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/tracing.hpp +0 -0
  125. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/types.hpp +0 -0
  126. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram/verification.hpp +0 -0
  127. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/phase_diagram.hpp +0 -0
  128. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/tools/polytope.hpp +0 -0
  129. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/chemistry_utils.hpp +0 -0
  130. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/constants.hpp +0 -0
  131. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/exceptions.hpp +0 -0
  132. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/index_utils.hpp +0 -0
  133. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/math_utils.hpp +0 -0
  134. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/matrix_utils.hpp +0 -0
  135. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/polygon_utils.hpp +0 -0
  136. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/string_utils.hpp +0 -0
  137. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/types/mineral_params.hpp +0 -0
  138. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/types/ndarray.hpp +0 -0
  139. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/types/simple_types.hpp +0 -0
  140. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/types/types.hpp +0 -0
  141. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/utils.hpp +0 -0
  142. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/validate_optionals.hpp +0 -0
  143. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/vector_utils.hpp +0 -0
  144. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/include/burnman/utils/warnings.hpp +0 -0
  145. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/bindings.hpp +0 -0
  146. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/combined.cpp +0 -0
  147. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/composition.cpp +0 -0
  148. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/equilibration.cpp +0 -0
  149. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/materials.cpp +0 -0
  150. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/minerals.cpp +0 -0
  151. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/model_sets.cpp +0 -0
  152. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/modifiers.cpp +0 -0
  153. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/module.cpp +0 -0
  154. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/params.cpp +0 -0
  155. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/phase_diagram.cpp +0 -0
  156. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/polytope.cpp +0 -0
  157. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/solutions.cpp +0 -0
  158. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/bindings/utils.cpp +0 -0
  159. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/__init__.py +0 -0
  160. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/adapters.py +0 -0
  161. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/constants.py +0 -0
  162. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/minerals/__init__.py +0 -0
  163. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/__init__.py +0 -0
  164. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/aspect.py +0 -0
  165. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/contours.py +0 -0
  166. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/phase_diagram.py +0 -0
  167. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/phase_diagram_helpers.py +0 -0
  168. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/phase_diagram_workflow.py +0 -0
  169. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/polytope.py +0 -0
  170. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/potential_grid.py +0 -0
  171. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/burnman_cpp/tools/properties.py +0 -0
  172. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/conftest.py +0 -0
  173. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/basalt_field_verification.json +0 -0
  174. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/basalt_local_amphibole.json +0 -0
  175. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/basalt_local_plagioclase.json +0 -0
  176. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/basalt_nearby_bivariant_junctions.json +0 -0
  177. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/forsterite_latent_interval.json +0 -0
  178. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/green_provisional_loops.json +0 -0
  179. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/harzburgite_garnet_composition_boundary.json +0 -0
  180. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/harzburgite_thin_composition_field.json +0 -0
  181. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_contour_field.json +0 -0
  182. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_contour_ordering_field.json +0 -0
  183. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_curve_edit.json +0 -0
  184. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_curved_mica_field.json +0 -0
  185. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_curved_node_connections.json +0 -0
  186. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_endpoints.json +0 -0
  187. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_missing_melt_connection.json +0 -0
  188. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_ordering_segment.json +0 -0
  189. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_parallel_fields.json +0 -0
  190. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_thin_finite_field.json +0 -0
  191. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_univariant_loop.json +0 -0
  192. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/metasediment_univariant_segments.json +0 -0
  193. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/phase_diagram_model_limit_fan.json +0 -0
  194. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_cold_endpoints.json +0 -0
  195. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_critical_endpoints.json +0 -0
  196. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_crossed_loops.json +0 -0
  197. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_duplicate_curve.json +0 -0
  198. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_duplicate_invariant.json +0 -0
  199. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_duplicate_junctions.json +0 -0
  200. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_endpoints.json +0 -0
  201. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_exchanged_junction_zeros.json +0 -0
  202. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_frame_order.json +0 -0
  203. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_limiting_neighbours.json +0 -0
  204. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_local_opx.json +0 -0
  205. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_missing_solution_branch.json +0 -0
  206. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_model_limit.json +0 -0
  207. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_narrow_curves.json +0 -0
  208. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_narrow_solution_replacement.json +0 -0
  209. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_nearby_junctions.json +0 -0
  210. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_nearby_univariant_junctions.json +0 -0
  211. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_neighbouring_branches.json +0 -0
  212. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_partial_duplicate.json +0 -0
  213. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_perimeter_neighbours.json +0 -0
  214. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_coincident_phase_outs.json +0 -0
  215. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_cold_coexistence.json +0 -0
  216. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_cold_model_limits.json +0 -0
  217. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_cold_reaction_duplicates.json +0 -0
  218. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_detached_junctions.json +0 -0
  219. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_equivalent_reaction_curves.json +0 -0
  220. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_garnet_stability.json +0 -0
  221. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_model_limit_duplicates.json +0 -0
  222. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_pt_repair_regressions.json +0 -0
  223. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_reaction_extents.json +0 -0
  224. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_refinement_segment.json +0 -0
  225. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_retired_junction_geometry.json +0 -0
  226. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_short_branch_labels.json +0 -0
  227. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_solution_replacement.json +0 -0
  228. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_solvus_seeds.json +0 -0
  229. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_ak_branch_switch.json +0 -0
  230. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_cf_copy_junctions.json +0 -0
  231. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_enthalpy_branch.json +0 -0
  232. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_failed_bracket.json +0 -0
  233. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_false_cpx_junction.json +0 -0
  234. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_false_junction.json +0 -0
  235. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_junction.json +0 -0
  236. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_missing_ak_boundary.json +0 -0
  237. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_reaction_classification.json +0 -0
  238. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_soft_grid_point.json +0 -0
  239. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_trace_site_junctions.json +0 -0
  240. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_trace_site_response.json +0 -0
  241. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_unconnected_junctions.json +0 -0
  242. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_sp_wrong_branch_junction.json +0 -0
  243. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_stable_vertex_loop.json +0 -0
  244. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/data/pyrolite_zoom_reaction_limits.json +0 -0
  245. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_adapters.py +0 -0
  246. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_aspect_table.py +0 -0
  247. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_bindings.py +0 -0
  248. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_complete_datasets.py +0 -0
  249. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_composition.py +0 -0
  250. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_composition_phase_diagram.py +0 -0
  251. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_composition_reference.py +0 -0
  252. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_constants.py +0 -0
  253. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_contour_tools.py +0 -0
  254. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_enthalpy_ps_infill.py +0 -0
  255. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_equilibration.py +0 -0
  256. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_forsterite_sections.py +0 -0
  257. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_gaussian_moment_corrected.py +0 -0
  258. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_green2025.py +0 -0
  259. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_melt.py +0 -0
  260. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_mineral_catalogue_reference.py +0 -0
  261. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_model_sets.py +0 -0
  262. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_modifiers.py +0 -0
  263. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_native_failure_reference.py +0 -0
  264. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_native_minerals.py +0 -0
  265. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_branch_identity.py +0 -0
  266. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_consistency.py +0 -0
  267. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_contours.py +0 -0
  268. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_critical_endpoints.py +0 -0
  269. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_partial_duplicates.py +0 -0
  270. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_patching.py +0 -0
  271. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_perimeter_labels.py +0 -0
  272. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_plot.py +0 -0
  273. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_phase_diagram_workflow.py +0 -0
  274. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_polygon_utils.py +0 -0
  275. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_polytope.py +0 -0
  276. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_potential_grid.py +0 -0
  277. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_property_grid.py +0 -0
  278. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_reference_tools.py +0 -0
  279. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_slb_reference.py +0 -0
  280. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_stable_equilibrium.py +0 -0
  281. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/python/tests/test_thermodynamic_phase_diagram.py +0 -0
  282. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/assemblage.cpp +0 -0
  283. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/combined_mineral.cpp +0 -0
  284. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/composite_material.cpp +0 -0
  285. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/composition.cpp +0 -0
  286. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/equation_of_state.cpp +0 -0
  287. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/material.cpp +0 -0
  288. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/mineral.cpp +0 -0
  289. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/relaxed_solution.cpp +0 -0
  290. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/solution.cpp +0 -0
  291. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/solution_models/asymmetric_regular_solution.cpp +0 -0
  292. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/solution_models/ideal_solution.cpp +0 -0
  293. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/solution_models/solution_model_base.cpp +0 -0
  294. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/core/solution_models/symmetric_regular_solution.cpp +0 -0
  295. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/birch_murnaghan.cpp +0 -0
  296. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/components/bukowinski_electronic.cpp +0 -0
  297. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/components/debye.cpp +0 -0
  298. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/components/einstein.cpp +0 -0
  299. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/components/property_modifiers.cpp +0 -0
  300. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/hp.cpp +0 -0
  301. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/hp_liquid.cpp +0 -0
  302. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/make_eos.cpp +0 -0
  303. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/mie_grueneisen_debye.cpp +0 -0
  304. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/modified_tait.cpp +0 -0
  305. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/slb.cpp +0 -0
  306. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/eos/vinet.cpp +0 -0
  307. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/minerals/datasets.cpp +0 -0
  308. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/minerals/model_sets.cpp +0 -0
  309. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/minerals/phase_aliases.cpp +0 -0
  310. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/minerals/water.cpp +0 -0
  311. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/optim/roots/damped_newton_solver.cpp +0 -0
  312. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/averaging/averaging_base.cpp +0 -0
  313. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/averaging/averaging_utils.cpp +0 -0
  314. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/averaging/hs.cpp +0 -0
  315. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/averaging/hs_lower.cpp +0 -0
  316. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/averaging/hs_upper.cpp +0 -0
  317. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/averaging/reuss.cpp +0 -0
  318. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/averaging/voigt.cpp +0 -0
  319. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/averaging/vrh.cpp +0 -0
  320. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/equilibration/equality_constraint_variants.cpp +0 -0
  321. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/equilibration/equilibrate_impl.cpp +0 -0
  322. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/equilibration/equilibrate_lambda_bounds.cpp +0 -0
  323. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/equilibration/equilibrate_objective.cpp +0 -0
  324. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/equilibration/equilibrate_utils.cpp +0 -0
  325. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/boundary_repair.cpp +0 -0
  326. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/calculation.cpp +0 -0
  327. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/common.cpp +0 -0
  328. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/consistency.cpp +0 -0
  329. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/contours.cpp +0 -0
  330. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/critical.cpp +0 -0
  331. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/domain.cpp +0 -0
  332. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/polygons.cpp +0 -0
  333. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/potential.cpp +0 -0
  334. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/properties.cpp +0 -0
  335. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/refinement.cpp +0 -0
  336. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/stability.cpp +0 -0
  337. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/phase_diagram/verification.cpp +0 -0
  338. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/polytope.cpp +0 -0
  339. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/tools/solution_simplification.cpp +0 -0
  340. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/utils/chemistry_utils.cpp +0 -0
  341. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/src/utils/polygon_utils.cpp +0 -0
  342. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/core/test_assemblage.cpp +0 -0
  343. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/core/test_composition.cpp +0 -0
  344. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/core/test_material.cpp +0 -0
  345. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/core/test_mineral.cpp +0 -0
  346. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/core/test_solution.cpp +0 -0
  347. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/core/test_solution_model.cpp +0 -0
  348. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_birch_murnaghan.cpp +0 -0
  349. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_bukowinski_electronic.cpp +0 -0
  350. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_debye.cpp +0 -0
  351. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_einstein.cpp +0 -0
  352. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_excess_params.cpp +0 -0
  353. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_hp.cpp +0 -0
  354. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_mie_grueneisen_debye.cpp +0 -0
  355. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_modified_tait.cpp +0 -0
  356. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_property_modifiers.cpp +0 -0
  357. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_slb.cpp +0 -0
  358. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_vinet.cpp +0 -0
  359. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/eos/test_volume_accuracy.cpp +0 -0
  360. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/include/eos_names.hpp +0 -0
  361. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/include/equilibration_fixtures.hpp +0 -0
  362. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/include/ps1994_reference.hpp +0 -0
  363. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/include/solution_fixtures.hpp +0 -0
  364. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/include/thermocalc_reference.hpp +0 -0
  365. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/include/tolerances.hpp +0 -0
  366. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/minerals/test_native_datasets.cpp +0 -0
  367. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/minerals/test_thermocalc_reference.cpp +0 -0
  368. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/minerals/test_water.cpp +0 -0
  369. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/optim/roots/test_damped_newton.cpp +0 -0
  370. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/optim/roots/test_roots.cpp +0 -0
  371. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/reference/burnman.json +0 -0
  372. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/reference/ps1994.json +0 -0
  373. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/reference/thermocalc_metapelite.json +0 -0
  374. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/test_main.cpp +0 -0
  375. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/averaging/test_averaging_schemes.cpp +0 -0
  376. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/equilibration/test_equality_constraints.cpp +0 -0
  377. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/equilibration/test_equilibrate.cpp +0 -0
  378. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/equilibration/test_equilibrate_lambda_bounds.cpp +0 -0
  379. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/equilibration/test_equilibrate_objective.cpp +0 -0
  380. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/equilibration/test_equilibrate_utils.cpp +0 -0
  381. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/test_phase_diagram.cpp +0 -0
  382. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/test_phase_diagram_consistency.cpp +0 -0
  383. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/tools/test_polytope.cpp +0 -0
  384. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_chemistry_utils.cpp +0 -0
  385. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_constants.cpp +0 -0
  386. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_exceptions.cpp +0 -0
  387. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_index_utils.cpp +0 -0
  388. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_math_utils.cpp +0 -0
  389. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_matrix_utils.cpp +0 -0
  390. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_polygon_utils.cpp +0 -0
  391. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_string_utils.cpp +0 -0
  392. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_types.cpp +0 -0
  393. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_validate_optionals.cpp +0 -0
  394. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_vector_utils.cpp +0 -0
  395. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tests/utils/test_warnings.cpp +0 -0
  396. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tools/burnman_reference.py +0 -0
  397. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tools/check_reference_data.py +0 -0
  398. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tools/export_example_minerals.py +0 -0
  399. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tools/extract_thermocalc_reference.py +0 -0
  400. {burnman_cpp-0.2.0 → burnman_cpp-0.3.0}/tools/generate_ps1994_reference.py +0 -0
@@ -0,0 +1,68 @@
1
+ name: Wheels
2
+
3
+ on:
4
+ pull_request:
5
+ paths:
6
+ - CMakeLists.txt
7
+ - pyproject.toml
8
+ - src/**
9
+ - include/**
10
+ - python/**
11
+ - tools/build_wheel_dependencies.py
12
+ - .github/workflows/wheels.yml
13
+ push:
14
+ tags: ["v*"]
15
+ workflow_dispatch:
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ defaults:
21
+ run:
22
+ shell: bash
23
+
24
+ jobs:
25
+ sdist:
26
+ runs-on: ubuntu-24.04
27
+ steps:
28
+ - uses: actions/checkout@v7
29
+ with:
30
+ persist-credentials: false
31
+ - uses: actions/setup-python@v7
32
+ with:
33
+ python-version: "3.12"
34
+ - run: python -m pip install build twine
35
+ - run: python -m build --sdist
36
+ - run: python -m twine check --strict dist/*
37
+ - uses: actions/upload-artifact@v7
38
+ with:
39
+ name: sdist
40
+ path: dist/*.tar.gz
41
+
42
+ wheels:
43
+ needs: sdist
44
+ timeout-minutes: 90
45
+ strategy:
46
+ fail-fast: false
47
+ matrix:
48
+ os: [ubuntu-24.04, ubuntu-24.04-arm, macos-15, macos-15-intel]
49
+ runs-on: ${{ matrix.os }}
50
+ env:
51
+ # Pull requests test each architecture; releases/manual runs build every ABI.
52
+ CIBW_BUILD: ${{ github.event_name == 'pull_request' && 'cp312-*' || 'cp3{10,11,12,13,14,15}-*' }}
53
+ CIBW_ARCHS: native
54
+ steps:
55
+ - uses: actions/download-artifact@v7
56
+ with:
57
+ name: sdist
58
+ path: dist
59
+ - uses: actions/setup-python@v7
60
+ with:
61
+ python-version: "3.12"
62
+ - run: python -m pip install cibuildwheel==4.3.1
63
+ # Build from the archive users receive, not from a developer checkout.
64
+ - run: python -m cibuildwheel dist/*.tar.gz --output-dir wheelhouse
65
+ - uses: actions/upload-artifact@v7
66
+ with:
67
+ name: wheels-${{ matrix.os }}
68
+ path: wheelhouse/*.whl
@@ -22,6 +22,7 @@ __pycache__/
22
22
  *.egg-info/
23
23
  .pytest_cache/
24
24
  dist/
25
+ wheelhouse/
25
26
 
26
27
  # Output files
27
28
  examples/*_output/
@@ -9,7 +9,11 @@ if(APPLE AND NOT DEFINED CMAKE_OSX_DEPLOYMENT_TARGET AND
9
9
  set(CMAKE_OSX_DEPLOYMENT_TARGET "${BURNMAN_HOST_MACOS_VERSION}"
10
10
  CACHE STRING "Minimum supported macOS version")
11
11
  endif()
12
- project(burnman_cpp VERSION 0.1.0 LANGUAGES CXX)
12
+ # Keep the installed package metadata and native __version__ in agreement.
13
+ file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/pyproject.toml" BURNMAN_VERSION_LINE
14
+ REGEX "^version = ")
15
+ string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" BURNMAN_VERSION "${BURNMAN_VERSION_LINE}")
16
+ project(burnman_cpp VERSION ${BURNMAN_VERSION} LANGUAGES CXX)
13
17
 
14
18
  option(BURNMAN_BUILD_PYTHON "Build the Python extension" ON)
15
19
  option(BURNMAN_BUILD_TESTS "Build the C++ unit tests" OFF)
@@ -31,6 +35,11 @@ function(burnman_compiler_warnings target)
31
35
  endfunction()
32
36
 
33
37
  # Let CMake find standard Homebrew installations as well as system packages.
38
+ set(BURNMAN_WHEEL_DEPENDENCIES "" CACHE PATH "Private prefix for wheel dependencies")
39
+ if(BURNMAN_WHEEL_DEPENDENCIES)
40
+ list(PREPEND CMAKE_PREFIX_PATH "${BURNMAN_WHEEL_DEPENDENCIES}")
41
+ set(GSL_ROOT_DIR "${BURNMAN_WHEEL_DEPENDENCIES}")
42
+ endif()
34
43
  if(APPLE)
35
44
  list(APPEND CMAKE_PREFIX_PATH /opt/homebrew /usr/local)
36
45
  endif()
@@ -77,6 +86,13 @@ if(BURNMAN_BUILD_PYTHON)
77
86
  target_compile_definitions(_core PRIVATE BURNMAN_VERSION="${PROJECT_VERSION}")
78
87
  burnman_compiler_warnings(_core)
79
88
  install(TARGETS _core LIBRARY DESTINATION burnman_cpp RUNTIME DESTINATION burnman_cpp)
89
+ if(BURNMAN_WHEEL_DEPENDENCIES)
90
+ # Let the wheel repair tool find libraries that use relative install names.
91
+ set_target_properties(_core PROPERTIES
92
+ INSTALL_RPATH "${BURNMAN_WHEEL_DEPENDENCIES}/lib")
93
+ install(DIRECTORY "${BURNMAN_WHEEL_DEPENDENCIES}/share/licenses/"
94
+ DESTINATION burnman_cpp/native_licenses)
95
+ endif()
80
96
  endif()
81
97
 
82
98
  if(BURNMAN_BUILD_TESTS OR BURNMAN_BUILD_BENCHMARKS)
@@ -1,16 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: burnman_cpp
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Python bindings for the BurnMan C++ mineral physics library
5
5
  Author-Email: The BurnMan Team <bob.myhill@bristol.ac.uk>
6
6
  License-Expression: GPL-3.0-or-later
7
7
  License-File: LICENSE
8
- Classifier: Operating System :: OS Independent
8
+ Classifier: Operating System :: MacOS :: MacOS X
9
+ Classifier: Operating System :: POSIX :: Linux
9
10
  Classifier: Programming Language :: Python :: 3.10
10
11
  Classifier: Programming Language :: Python :: 3.11
11
12
  Classifier: Programming Language :: Python :: 3.12
12
13
  Classifier: Programming Language :: Python :: 3.13
13
14
  Classifier: Programming Language :: Python :: 3.14
15
+ Classifier: Programming Language :: Python :: 3.15
14
16
  Requires-Python: >=3.10
15
17
  Requires-Dist: numpy>=1.23
16
18
  Requires-Dist: scipy>=1.9
@@ -46,7 +48,22 @@ Python authors (as of 2025, from the [BurnMan README](https://github.com/geodyna
46
48
  * Juliane Dannberg
47
49
  * Rene Gassmoeller
48
50
 
49
- ## Requirements
51
+ ## Installation
52
+
53
+ ### Published Python wheels
54
+
55
+ Install the published package with:
56
+
57
+ ```sh
58
+ python -m pip install --upgrade pip
59
+ python -m pip install burnman_cpp
60
+ ```
61
+
62
+ If no matching wheel is available, pip builds from source and needs the dependencies below.
63
+
64
+ ### Building from source
65
+
66
+ Source builds require:
50
67
 
51
68
  - A C++17 compiler, such as GCC or Clang.
52
69
  - CMake 3.18 or newer.
@@ -55,10 +72,6 @@ Python authors (as of 2025, from the [BurnMan README](https://github.com/geodyna
55
72
  - Python 3.10 or newer and its development headers for the Python package.
56
73
  - Catch2 3.4 or newer for C++ tests and benchmarks.
57
74
 
58
- ## Installation
59
-
60
- ### Native dependencies
61
-
62
75
  On Ubuntu:
63
76
 
64
77
  ```sh
@@ -75,8 +88,6 @@ xcode-select --install
75
88
  brew install python cmake eigen gsl nlopt cddlib gmp catch2
76
89
  ```
77
90
 
78
- ### Python package
79
-
80
91
  Clone the repository:
81
92
 
82
93
  ```sh
@@ -22,7 +22,22 @@ Python authors (as of 2025, from the [BurnMan README](https://github.com/geodyna
22
22
  * Juliane Dannberg
23
23
  * Rene Gassmoeller
24
24
 
25
- ## Requirements
25
+ ## Installation
26
+
27
+ ### Published Python wheels
28
+
29
+ Install the published package with:
30
+
31
+ ```sh
32
+ python -m pip install --upgrade pip
33
+ python -m pip install burnman_cpp
34
+ ```
35
+
36
+ If no matching wheel is available, pip builds from source and needs the dependencies below.
37
+
38
+ ### Building from source
39
+
40
+ Source builds require:
26
41
 
27
42
  - A C++17 compiler, such as GCC or Clang.
28
43
  - CMake 3.18 or newer.
@@ -31,10 +46,6 @@ Python authors (as of 2025, from the [BurnMan README](https://github.com/geodyna
31
46
  - Python 3.10 or newer and its development headers for the Python package.
32
47
  - Catch2 3.4 or newer for C++ tests and benchmarks.
33
48
 
34
- ## Installation
35
-
36
- ### Native dependencies
37
-
38
49
  On Ubuntu:
39
50
 
40
51
  ```sh
@@ -51,8 +62,6 @@ xcode-select --install
51
62
  brew install python cmake eigen gsl nlopt cddlib gmp catch2
52
63
  ```
53
64
 
54
- ### Python package
55
-
56
65
  Clone the repository:
57
66
 
58
67
  ```sh
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
4
4
 
5
5
  [project]
6
6
  name = "burnman_cpp"
7
- version = "0.2.0"
7
+ version = "0.3.0"
8
8
  authors = [{name = "The BurnMan Team", email = "bob.myhill@bristol.ac.uk"}]
9
9
  description = "Python bindings for the BurnMan C++ mineral physics library"
10
10
  readme = "README.md"
@@ -13,12 +13,14 @@ license = "GPL-3.0-or-later"
13
13
  license-files = ["LICENSE"]
14
14
  dependencies = ["numpy>=1.23", "scipy>=1.9"]
15
15
  classifiers = [
16
- "Operating System :: OS Independent",
16
+ "Operating System :: MacOS :: MacOS X",
17
+ "Operating System :: POSIX :: Linux",
17
18
  "Programming Language :: Python :: 3.10",
18
19
  "Programming Language :: Python :: 3.11",
19
20
  "Programming Language :: Python :: 3.12",
20
21
  "Programming Language :: Python :: 3.13",
21
22
  "Programming Language :: Python :: 3.14",
23
+ "Programming Language :: Python :: 3.15",
22
24
  ]
23
25
 
24
26
  [project.optional-dependencies]
@@ -36,6 +38,7 @@ sdist.include = [
36
38
  "/python/bindings/*.cpp", "/python/bindings/*.hpp",
37
39
  "/python/burnman_cpp/**/*.py", "/python/tests/*.py", "/examples/*.py",
38
40
  "/tools/export_example_minerals.py",
41
+ "/tools/build_wheel_dependencies.py",
39
42
  ]
40
43
  sdist.exclude = [".venv/**", "build/**", "bin/**", "*.csv", "benchmark-report.xml", "**/__pycache__/**"]
41
44
 
@@ -44,3 +47,19 @@ testpaths = ["python/tests"]
44
47
 
45
48
  [tool.black]
46
49
  target-version = ["py310"]
50
+
51
+ [tool.cibuildwheel]
52
+ build = "cp3{10,11,12,13,14,15}-*"
53
+ skip = "*-musllinux_* *-win*"
54
+ test-extras = ["test"]
55
+ test-command = "python -m pytest {project}/python/tests/test_wheel_metadata.py {project}/python/tests/test_bindings.py {project}/python/tests/test_equilibration.py {project}/python/tests/test_stable_equilibrium.py {project}/python/tests/test_polytope.py -q"
56
+
57
+ [tool.cibuildwheel.linux]
58
+ manylinux-x86_64-image = "manylinux_2_28"
59
+ manylinux-aarch64-image = "manylinux_2_28"
60
+ before-all = "dnf install -y autoconf automake libtool && python3 {project}/tools/build_wheel_dependencies.py --prefix /tmp/burnman-wheel-deps"
61
+ environment = { CC="gcc", CXX="g++", CFLAGS="", CXXFLAGS="", LDFLAGS="", CMAKE_ARGS="-DBURNMAN_WHEEL_DEPENDENCIES=/tmp/burnman-wheel-deps", CMAKE_BUILD_PARALLEL_LEVEL="2" }
62
+
63
+ [tool.cibuildwheel.macos]
64
+ before-all = "brew install autoconf automake libtool && python3 {project}/tools/build_wheel_dependencies.py --prefix /tmp/burnman-wheel-deps"
65
+ environment = { CC="clang", CXX="clang++", CFLAGS="", CXXFLAGS="", LDFLAGS="", MACOSX_DEPLOYMENT_TARGET="11.0", CMAKE_ARGS="-DBURNMAN_WHEEL_DEPENDENCIES=/tmp/burnman-wheel-deps", CMAKE_BUILD_PARALLEL_LEVEL="2" }
@@ -410,7 +410,8 @@ def test_resume_refines_curved_chords_only_when_resolution_is_requested():
410
410
  assert p.residual < 0.01
411
411
 
412
412
 
413
- def test_resume_removes_a_verified_retraced_part_of_a_curved_boundary():
413
+ @pytest.mark.parametrize("reverse_order", [False, True])
414
+ def test_resume_removes_a_verified_retraced_part_of_a_curved_boundary(reverse_order):
414
415
  phases = curved_phases()
415
416
  opts = settings()
416
417
  opts.max_recovery_passes = 0
@@ -430,10 +431,12 @@ def test_resume_removes_a_verified_retraced_part_of_a_curved_boundary():
430
431
  line,
431
432
  id=1,
432
433
  end_node=line["start_node"],
433
- points=[original[0], original[3], original[0]],
434
+ points=original[:6] + original[4::-1],
434
435
  termination="junction; junction",
435
436
  )
436
437
  saved["boundaries"].append(duplicate)
438
+ if reverse_order:
439
+ saved["boundaries"].reverse()
437
440
  saved["resolved"] = False # Request repair of the injected retrace.
438
441
  assert not any(
439
442
  p.has_open_boundary for p in bm.phase_diagram_field_polygons(saved).polygons
@@ -454,13 +454,26 @@ def test_equivalent_univariant_extents_need_a_verified_root_not_every_warm_start
454
454
 
455
455
 
456
456
  @pytest.mark.parametrize("reverse", [False, True])
457
+ @pytest.mark.parametrize("different_faces", [False, True])
457
458
  @pytest.mark.parametrize(
458
459
  "fixture", ["model_limit_duplicates", "cold_reaction_duplicates"]
459
460
  )
460
- def test_equivalent_reactions_can_end_at_separate_model_limit_records(reverse, fixture):
461
+ def test_equivalent_reactions_can_end_at_separate_model_limit_records(
462
+ reverse, different_faces, fixture
463
+ ):
461
464
  data = json.loads(
462
465
  (Path(__file__).parent / f"data/pyrolite_pt_{fixture}.json").read_text()
463
466
  )
467
+ if different_faces:
468
+ # The same saved garnet equilibrium can be represented with its full
469
+ # composition space or a frozen face. Identity must compare roots on
470
+ # the union, without copying either starting composition to the other.
471
+ for point in data["boundaries"][0]["points"]:
472
+ for phase in point["phases"]:
473
+ if phase["candidate_index"] == 6:
474
+ phase["composition_basis"] = np.eye(
475
+ len(phase["composition"])
476
+ ).tolist()
464
477
  if reverse:
465
478
  transform_saved_traces(data, "reverse")
466
479
  result = refine_pyrolite_fixture(data)
@@ -458,15 +458,31 @@ def test_resumed_model_limit_remains_attached_to_recomputed_eos_envelope(example
458
458
  previous,
459
459
  opts,
460
460
  )
461
- point = result.boundaries[0].points[0 if case["start"] else -1]
461
+ line = result.boundaries[0]
462
+ point = line.points[0 if case["start"] else -1]
462
463
  saved = previous["boundaries"][0]["points"][0 if case["start"] else -1]
464
+ location = np.array([point.pressure, point.temperature])
465
+ scale = np.ptp(np.asarray(result.coordinate_ranges), axis=1)
466
+ # Rebuilding the EOS envelope may re-correct a nearby saved endpoint onto
467
+ # that envelope. Verify the accepted equilibrium and its attachment rather
468
+ # than requiring the old numerical stopping point to remain unchanged.
463
469
  assert (
464
- point.pressure == saved["pressure"]
465
- and point.temperature == saved["temperature"]
470
+ np.linalg.norm((location - [saved["pressure"], saved["temperature"]]) / scale)
471
+ <= 2.0 * opts.node_tolerance
466
472
  )
467
- location = np.array([point.pressure, point.temperature])
473
+ assert point.mass_balance_error <= opts.mass_balance_tolerance
474
+ n_endmembers = sum(len(phase.composition) for phase in point.phases)
475
+ assert point.residual <= np.hypot(
476
+ np.sqrt(n_endmembers) * 0.1 * opts.affinity_tolerance,
477
+ np.linalg.norm(list(result.composition_start.values()))
478
+ * opts.mass_balance_tolerance,
479
+ )
480
+ assert point.minimum_affinity >= -opts.affinity_tolerance
481
+ node_id = line.start_node if case["start"] else line.end_node
482
+ node = result.nodes[node_id]
483
+ assert (node.pressure, node.temperature) == (point.pressure, point.temperature)
468
484
  assert any(
469
- np.min(np.linalg.norm((ring - location) / [150.0e9, 4000.0], axis=1)) < 1.0e-12
485
+ np.min(np.linalg.norm((ring - location) / scale, axis=1)) < 1.0e-12
470
486
  for ring in result.excluded_regions
471
487
  )
472
488
  # The common serializer keeps the envelope, original compositions and
@@ -481,7 +497,7 @@ def test_resumed_model_limit_remains_attached_to_recomputed_eos_envelope(example
481
497
  )
482
498
  assert resumed.settings.required_eos_phases == ["opx"]
483
499
  assert any(
484
- np.min(np.linalg.norm((ring - location) / [150.0e9, 4000.0], axis=1)) < 1.0e-12
500
+ np.min(np.linalg.norm((ring - location) / scale, axis=1)) < 1.0e-12
485
501
  for ring in resumed.excluded_regions
486
502
  )
487
503
 
@@ -0,0 +1,22 @@
1
+ # ------------------------------------------------------
2
+ #
3
+ # SPDX-License-Identifier: GPL-3.0-or-later
4
+ #
5
+ # SPDX-FileCopyrightText: Copyright (C) 2026 by the BurnMan Team.
6
+ #
7
+ # This file is part of BurnMan.
8
+ #
9
+ # Detailed license information governing the source code
10
+ # and contributions can be found in the LICENSE document.
11
+ #
12
+ # ------------------------------------------------------
13
+
14
+ """The installed distribution and its compiled extension describe one release."""
15
+
16
+ from importlib.metadata import version
17
+
18
+ import burnman_cpp as bm
19
+
20
+
21
+ def test_native_and_distribution_versions_agree():
22
+ assert bm.__version__ == version("burnman_cpp")
@@ -1057,10 +1057,10 @@ bool same_boundary_curve(Engine &engine, const Result &result,
1057
1057
  return std::find(two.assemblage.begin(), two.assemblage.end(),
1058
1058
  p.id) == two.assemblage.end();
1059
1059
  });
1060
- // Reaction extents can carry different saved active faces. Open
1060
+ // Independent traces can carry different saved active faces. Open
1061
1061
  // their union without copying compositions between independent
1062
1062
  // starting states, so a stale frozen site cannot define identity.
1063
- if (univariant && !share_composition_faces(first_seed, warm))
1063
+ if (!share_composition_faces(first_seed, warm))
1064
1064
  return false;
1065
1065
  // Identity needs more accurate roots than ordinary tracing: weak
1066
1066
  // frozen-site affinities can otherwise leave two accepted states
@@ -1152,6 +1152,10 @@ bool same_boundary_curve(Engine &engine, const Result &result,
1152
1152
  // corrected equilibria; failed warm starts supply no evidence either way,
1153
1153
  // whereas any actual disagreement vetoes the identification.
1154
1154
  const auto forward = verified(first, second);
1155
+ // A partial retrace must lie on the whole curve. The reverse requirement
1156
+ // would incorrectly demand that its short arc also covers the whole curve.
1157
+ if (partial)
1158
+ return forward.value_or(false);
1155
1159
  if (shared_branch) {
1156
1160
  if (forward == false)
1157
1161
  return false;
@@ -1159,7 +1163,6 @@ bool same_boundary_curve(Engine &engine, const Result &result,
1159
1163
  return backward != false &&
1160
1164
  (forward.value_or(false) || backward.value_or(false));
1161
1165
  }
1162
- return forward.value_or(false) &&
1163
- (partial || verified(second, first).value_or(false));
1166
+ return forward.value_or(false) && verified(second, first).value_or(false);
1164
1167
  }
1165
1168
  } // namespace burnman::phase_diagrams::detail
@@ -2473,6 +2473,9 @@ void Tracer::model_domain() {
2473
2473
  }
2474
2474
 
2475
2475
  void Tracer::reconcile_boundaries(bool transfer_labels_only) {
2476
+ auto returns_to_node = [](const Boundary &line) {
2477
+ return line.start_node >= 0 && line.start_node == line.end_node;
2478
+ };
2476
2479
  std::vector<Boundary> unique;
2477
2480
  for (auto &line : result.boundaries) {
2478
2481
  bool duplicate = false;
@@ -2484,11 +2487,18 @@ void Tracer::reconcile_boundaries(bool transfer_labels_only) {
2484
2487
  continue;
2485
2488
  bool same_sides = same_boundary_sides(old, line);
2486
2489
  bool same_ends = same_boundary_nodes(old, line, result);
2487
- const bool partial = complete_boundary(line) != complete_boundary(old);
2488
- auto &part = complete_boundary(line) ? old : line;
2489
- auto &whole = complete_boundary(line) ? line : old;
2490
+ const bool unfinished = complete_boundary(line) != complete_boundary(old);
2491
+ // An out-and-back trace can be complete at its shared starting node
2492
+ // while covering only part of another boundary. Verify its entire arc
2493
+ // just as for an unfinished retrace; a genuine closed loop must survive.
2494
+ const bool partial =
2495
+ unfinished || returns_to_node(line) != returns_to_node(old);
2496
+ const bool line_is_part =
2497
+ unfinished ? !complete_boundary(line) : returns_to_node(line);
2498
+ auto &part = line_is_part ? line : old;
2499
+ auto &whole = line_is_part ? old : line;
2490
2500
  if (partial) {
2491
- // An unfinished retrace is removable only when an anchored,
2501
+ // A partial retrace is removable only when an anchored,
2492
2502
  // completed record covers its entire equilibrium branch.
2493
2503
  auto shares = [&](int node) {
2494
2504
  return node >= 0 &&
@@ -2527,7 +2537,13 @@ void Tracer::reconcile_boundaries(bool transfer_labels_only) {
2527
2537
  bad.reaction_kind = good.reaction_kind;
2528
2538
  }
2529
2539
  duplicate = true;
2530
- retain_curve(old, line);
2540
+ // Keep the whole arc even if its covered retrace has more samples.
2541
+ if (partial && !line_is_part) {
2542
+ const int id = old.id;
2543
+ old = std::move(line);
2544
+ old.id = id;
2545
+ } else if (!partial)
2546
+ retain_curve(old, line);
2531
2547
  if (!same_sides && univariant)
2532
2548
  label(old);
2533
2549
  break;
@@ -0,0 +1,177 @@
1
+ # ------------------------------------------------------
2
+ #
3
+ # SPDX-License-Identifier: GPL-3.0-or-later
4
+ #
5
+ # SPDX-FileCopyrightText: Copyright (C) 2026 by the BurnMan Team.
6
+ #
7
+ # This file is part of BurnMan.
8
+ #
9
+ # Detailed license information governing the source code
10
+ # and contributions can be found in the LICENSE document.
11
+ #
12
+ # ------------------------------------------------------
13
+
14
+ """Build reproducible native wheel dependencies without using Homebrew bottles."""
15
+
16
+ import argparse
17
+ import hashlib
18
+ import json
19
+ import os
20
+ from pathlib import Path
21
+ import platform
22
+ import shutil
23
+ import subprocess
24
+ import urllib.request
25
+
26
+ SOURCES = {
27
+ "eigen": (
28
+ "https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz",
29
+ "8586084f71f9bde545ee7fa6d00288b264a2b7ac3607b974e54d13e7162c1c72",
30
+ ),
31
+ "gmp": (
32
+ "https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.xz",
33
+ "a3c2b80201b89e68616f4ad30bc66aee4927c3ce50e33929ca819d5c43538898",
34
+ ),
35
+ "gsl": (
36
+ "https://ftp.gnu.org/gnu/gsl/gsl-2.8.tar.gz",
37
+ "6a99eeed15632c6354895b1dd542ed5a855c0f15d9ad1326c6fe2b2c9e423190",
38
+ ),
39
+ "cddlib": (
40
+ "https://github.com/cddlib/cddlib/releases/download/0.94n/cddlib-0.94n.tar.gz",
41
+ "b87ee07ba2c1d0ab92a3e4eccacdf568f981a095a392e3b9efd7e7e4a9e125b1",
42
+ ),
43
+ "nlopt": (
44
+ "https://github.com/stevengj/nlopt/archive/refs/tags/v2.10.1.tar.gz",
45
+ "30d13ce16da119db3e987784f7864e35a562ec62c186352fae55cd003e6c58ff",
46
+ ),
47
+ }
48
+
49
+
50
+ def source_tree(name, work, env):
51
+ """Download a pinned archive, verify it, and extract its source directory."""
52
+ url, checksum = SOURCES[name]
53
+ archive = work / (name + "-" + url.rsplit("/", 1)[1])
54
+ if not archive.exists():
55
+ print(f"Downloading {url}", flush=True)
56
+ urllib.request.urlretrieve(url, archive)
57
+ if hashlib.sha256(archive.read_bytes()).hexdigest() != checksum:
58
+ raise RuntimeError(f"Checksum mismatch: {archive}")
59
+ source = work / name
60
+ source.mkdir(exist_ok=True)
61
+ subprocess.run(
62
+ ["tar", "xf", str(archive), "--strip-components=1", "-C", str(source)],
63
+ check=True,
64
+ env=env,
65
+ )
66
+ return source
67
+
68
+
69
+ def build_dependencies(prefix, work, jobs):
70
+ """Install shared libraries, Eigen headers and their notices into prefix."""
71
+ prefix, work = prefix.resolve(), work.resolve()
72
+ prefix.mkdir(parents=True, exist_ok=True)
73
+ work.mkdir(parents=True, exist_ok=True)
74
+ macos = platform.system() == "Darwin"
75
+ target = os.environ.get("MACOSX_DEPLOYMENT_TARGET", "11.0") if macos else ""
76
+ compiler = ("clang", "clang++") if macos else ("gcc", "g++")
77
+ manifest = dict(
78
+ sources=SOURCES, arch=platform.machine(), target=target, compiler=compiler
79
+ )
80
+ stamp = prefix / "build-manifest.json"
81
+ if stamp.exists():
82
+ if json.loads(stamp.read_text()) != json.loads(json.dumps(manifest)):
83
+ raise RuntimeError("Dependency settings changed; use a fresh prefix.")
84
+ print(f"Using verified dependency build at {prefix}", flush=True)
85
+ return
86
+ flags = "-O2 -fPIC" + (f" -mmacosx-version-min={target}" if macos else "")
87
+ env = dict(
88
+ os.environ,
89
+ CC=compiler[0],
90
+ CXX=compiler[1],
91
+ CFLAGS=flags,
92
+ CXXFLAGS=flags,
93
+ CPPFLAGS=f"-I{prefix}/include",
94
+ LDFLAGS=f"-L{prefix}/lib -Wl,-rpath,{prefix}/lib",
95
+ )
96
+ if macos:
97
+ env["MACOSX_DEPLOYMENT_TARGET"] = target
98
+
99
+ def run(*args, cwd):
100
+ print("+", *map(str, args), flush=True)
101
+ subprocess.run(list(map(str, args)), cwd=cwd, env=env, check=True)
102
+
103
+ for name in SOURCES:
104
+ source = source_tree(name, work, env)
105
+ if name in {"eigen", "nlopt"}:
106
+ options = (
107
+ ["-DBUILD_TESTING=OFF", "-DEIGEN_BUILD_DOC=OFF"]
108
+ if name == "eigen"
109
+ else [
110
+ f"-DNLOPT_{feature}=OFF"
111
+ for feature in [
112
+ "PYTHON",
113
+ "OCTAVE",
114
+ "MATLAB",
115
+ "GUILE",
116
+ "JAVA",
117
+ "SWIG",
118
+ "TESTS",
119
+ ]
120
+ ]
121
+ )
122
+ run(
123
+ "cmake",
124
+ "-S",
125
+ source,
126
+ "-B",
127
+ source / "build",
128
+ f"-DCMAKE_INSTALL_PREFIX={prefix}",
129
+ "-DCMAKE_INSTALL_LIBDIR=lib",
130
+ "-DCMAKE_BUILD_TYPE=Release",
131
+ "-DBUILD_SHARED_LIBS=ON",
132
+ *options,
133
+ cwd=source,
134
+ )
135
+ run("cmake", "--build", source / "build", "--parallel", jobs, cwd=source)
136
+ run("cmake", "--install", source / "build", cwd=source)
137
+ else:
138
+ # Modern libtool avoids flat-namespace libraries on recent macOS.
139
+ if name in {"gmp", "cddlib"}:
140
+ run("autoreconf", "-fi", cwd=source)
141
+ options = ["--disable-assembly", "--with-pic"] if name == "gmp" else []
142
+ run(
143
+ source / "configure",
144
+ f"--prefix={prefix}",
145
+ "--enable-shared",
146
+ "--disable-static",
147
+ *options,
148
+ cwd=source,
149
+ )
150
+ run("make", f"-j{jobs}", cwd=source)
151
+ if name == "gmp":
152
+ run("make", f"-j{jobs}", "check", cwd=source)
153
+ run("make", "install", cwd=source)
154
+ notices = prefix / "share/licenses" / name
155
+ notices.mkdir(parents=True, exist_ok=True)
156
+ for path in source.iterdir():
157
+ if path.is_file() and path.name.startswith(
158
+ ("COPYING", "LICENSE", "AUTHORS", "COPYRIGHT")
159
+ ):
160
+ shutil.copy2(path, notices / path.name)
161
+ (notices / "SOURCE.txt").write_text(SOURCES[name][0] + "\n")
162
+ stamp.write_text(json.dumps(manifest, indent=2) + "\n")
163
+
164
+
165
+ if __name__ == "__main__":
166
+ parser = argparse.ArgumentParser(description=__doc__)
167
+ parser.add_argument("--prefix", type=Path, required=True)
168
+ parser.add_argument("--work-dir", type=Path)
169
+ parser.add_argument("--jobs", type=int, default=2)
170
+ args = parser.parse_args()
171
+ if args.jobs < 1:
172
+ parser.error("--jobs must be positive")
173
+ build_dependencies(
174
+ args.prefix,
175
+ args.work_dir or args.prefix.parent / "burnman-wheel-build",
176
+ args.jobs,
177
+ )
File without changes
File without changes