combaero 0.2.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.
Files changed (284) hide show
  1. combaero-0.2.0/.agents/workflows/bulk-merge-workflow.md +33 -0
  2. combaero-0.2.0/.agents/workflows/commit-and-push.md +16 -0
  3. combaero-0.2.0/.agents/workflows/commit-local.md +52 -0
  4. combaero-0.2.0/.agents/workflows/create-pr.md +26 -0
  5. combaero-0.2.0/.agents/workflows/merge-and-cleanup.md +35 -0
  6. combaero-0.2.0/.biomeignore +16 -0
  7. combaero-0.2.0/.clang-tidy +31 -0
  8. combaero-0.2.0/.clangd +14 -0
  9. combaero-0.2.0/.envrc +53 -0
  10. combaero-0.2.0/.gitignore +112 -0
  11. combaero-0.2.0/.pre-commit-config.yaml +67 -0
  12. combaero-0.2.0/.pre-commit-hooks/check_math_constants.py +84 -0
  13. combaero-0.2.0/.python-version +2 -0
  14. combaero-0.2.0/.windsurf/workflows/biome-fix-changed.md +33 -0
  15. combaero-0.2.0/.windsurf/workflows/commit-and-push.md +26 -0
  16. combaero-0.2.0/.windsurf/workflows/commit-only.md +107 -0
  17. combaero-0.2.0/.windsurf/workflows/create-pr-and-monitor.md +93 -0
  18. combaero-0.2.0/.windsurf/workflows/merge-and-cleanup.md +62 -0
  19. combaero-0.2.0/.windsurf/workflows/ruff-fix-changed.md +40 -0
  20. combaero-0.2.0/.windsurf/workflows/squash-merge-and-cleanup.md +279 -0
  21. combaero-0.2.0/CHANGELOG.md +38 -0
  22. combaero-0.2.0/CLAUDE.md +52 -0
  23. combaero-0.2.0/CMakeLists.txt +106 -0
  24. combaero-0.2.0/CONTRIBUTING.md +32 -0
  25. combaero-0.2.0/GEMINI.md +85 -0
  26. combaero-0.2.0/LICENSE +41 -0
  27. combaero-0.2.0/Makefile +122 -0
  28. combaero-0.2.0/PKG-INFO +88 -0
  29. combaero-0.2.0/README.md +58 -0
  30. combaero-0.2.0/benchmarks/NETWORK_SOLVER_BENCHMARK_HISTORY.md +327 -0
  31. combaero-0.2.0/benchmarks/benchmarks.py +533 -0
  32. combaero-0.2.0/benchmarks/compare_jacobian_baseline.py +250 -0
  33. combaero-0.2.0/benchmarks/continuation_benchmark.py +209 -0
  34. combaero-0.2.0/benchmarks/convergence_benchmark.py +143 -0
  35. combaero-0.2.0/benchmarks/function_profiling.py +113 -0
  36. combaero-0.2.0/benchmarks/jacobian_baseline_current.csv +25 -0
  37. combaero-0.2.0/benchmarks/mach_limit_benchmark.py +168 -0
  38. combaero-0.2.0/benchmarks/mach_sweep.py +264 -0
  39. combaero-0.2.0/benchmarks/mach_sweep_network.py +221 -0
  40. combaero-0.2.0/biome.json +52 -0
  41. combaero-0.2.0/docs/API_CPP.md +696 -0
  42. combaero-0.2.0/docs/API_PYTHON.md +594 -0
  43. combaero-0.2.0/docs/BUILDING.md +67 -0
  44. combaero-0.2.0/docs/DEVELOPMENT.md +89 -0
  45. combaero-0.2.0/docs/GUI_TECHNICAL.md +77 -0
  46. combaero-0.2.0/docs/JACOBIAN_DIFFERENCE_REPORTING.md +197 -0
  47. combaero-0.2.0/docs/METHODS_REFERENCE.md +56 -0
  48. combaero-0.2.0/docs/NETWORK_ROADMAP.md +430 -0
  49. combaero-0.2.0/docs/PACKAGING.md +132 -0
  50. combaero-0.2.0/docs/REVIEW_NETWORK_GUI.md +1404 -0
  51. combaero-0.2.0/docs/UNITS.md +921 -0
  52. combaero-0.2.0/docs/archive/COMPRESSIBLE_FLOW_IMPLEMENTATION.md +194 -0
  53. combaero-0.2.0/docs/archive/DESIGN_NETWORK_HEAT_TRANSFER.md +661 -0
  54. combaero-0.2.0/docs/archive/HYGIENE.md +54 -0
  55. combaero-0.2.0/docs/archive/MACH_LIMIT_BENCHMARK_RESULT.md +63 -0
  56. combaero-0.2.0/docs/archive/MACH_LIMIT_SOLVER_LIMITS.md +121 -0
  57. combaero-0.2.0/docs/archive/PYPI_GAP_ANALYSIS.md +57 -0
  58. combaero-0.2.0/examples/acoustics_example.cpp +232 -0
  59. combaero-0.2.0/examples/combustion_example.cpp +181 -0
  60. combaero-0.2.0/examples/combustion_state_example.cpp +240 -0
  61. combaero-0.2.0/examples/compressible_example.cpp +304 -0
  62. combaero-0.2.0/examples/cooling_example.cpp +83 -0
  63. combaero-0.2.0/examples/humidair_example.cpp +145 -0
  64. combaero-0.2.0/examples/incompressible_example.cpp +239 -0
  65. combaero-0.2.0/examples/orifice_example.cpp +259 -0
  66. combaero-0.2.0/examples/stagnation_example.cpp +230 -0
  67. combaero-0.2.0/examples/thermo_example.cpp +126 -0
  68. combaero-0.2.0/include/acoustics.h +624 -0
  69. combaero-0.2.0/include/acoustics_internal.h +66 -0
  70. combaero-0.2.0/include/area_change.h +170 -0
  71. combaero-0.2.0/include/can_annular_solvers.h +211 -0
  72. combaero-0.2.0/include/combustion.h +203 -0
  73. combaero-0.2.0/include/common_names.h +69 -0
  74. combaero-0.2.0/include/composition.h +23 -0
  75. combaero-0.2.0/include/compressible.h +371 -0
  76. combaero-0.2.0/include/cooling_correlations.h +357 -0
  77. combaero-0.2.0/include/correlation_status.h +44 -0
  78. combaero-0.2.0/include/equilibrium.h +40 -0
  79. combaero-0.2.0/include/friction.h +88 -0
  80. combaero-0.2.0/include/geometry.h +179 -0
  81. combaero-0.2.0/include/heat_transfer.h +724 -0
  82. combaero-0.2.0/include/humidair.h +101 -0
  83. combaero-0.2.0/include/incompressible.h +329 -0
  84. combaero-0.2.0/include/materials.h +92 -0
  85. combaero-0.2.0/include/math_constants.h +29 -0
  86. combaero-0.2.0/include/orifice.h +451 -0
  87. combaero-0.2.0/include/registry.h +45 -0
  88. combaero-0.2.0/include/solver_interface.h +590 -0
  89. combaero-0.2.0/include/stagnation.h +170 -0
  90. combaero-0.2.0/include/state.h +289 -0
  91. combaero-0.2.0/include/thermo.h +109 -0
  92. combaero-0.2.0/include/thermo_transport_data.h +130 -0
  93. combaero-0.2.0/include/transport.h +39 -0
  94. combaero-0.2.0/include/units.h +48 -0
  95. combaero-0.2.0/include/units_data.h +968 -0
  96. combaero-0.2.0/include/utils.h +12 -0
  97. combaero-0.2.0/pyproject.toml +90 -0
  98. combaero-0.2.0/python/CMakeLists.txt +13 -0
  99. combaero-0.2.0/python/README.md +379 -0
  100. combaero-0.2.0/python/combaero/__init__.py +1097 -0
  101. combaero-0.2.0/python/combaero/_core.cpp +5884 -0
  102. combaero-0.2.0/python/combaero/_flow_solution.py +98 -0
  103. combaero-0.2.0/python/combaero/_solver_tools.py +104 -0
  104. combaero-0.2.0/python/combaero/compressible.py +234 -0
  105. combaero-0.2.0/python/combaero/heat_transfer.py +393 -0
  106. combaero-0.2.0/python/combaero/incompressible.py +186 -0
  107. combaero-0.2.0/python/combaero/network/__init__.py +86 -0
  108. combaero-0.2.0/python/combaero/network/combustion/__init__.py +9 -0
  109. combaero-0.2.0/python/combaero/network/combustion/combustion.py +198 -0
  110. combaero-0.2.0/python/combaero/network/combustion/combustion_result.py +31 -0
  111. combaero-0.2.0/python/combaero/network/components.py +2512 -0
  112. combaero-0.2.0/python/combaero/network/diagnostics.py +237 -0
  113. combaero-0.2.0/python/combaero/network/graph.py +274 -0
  114. combaero-0.2.0/python/combaero/network/pressure_loss.py +201 -0
  115. combaero-0.2.0/python/combaero/network/schema.py +199 -0
  116. combaero-0.2.0/python/combaero/network/solver.py +1761 -0
  117. combaero-0.2.0/python/combaero/py.typed +0 -0
  118. combaero-0.2.0/python/combaero/species.py +151 -0
  119. combaero-0.2.0/python/examples/acoustic_examples.py +263 -0
  120. combaero-0.2.0/python/examples/axial_staging_combustor_network_example.py +174 -0
  121. combaero-0.2.0/python/examples/combustion_example.py +133 -0
  122. combaero-0.2.0/python/examples/combustor_heat_transfer.py +312 -0
  123. combaero-0.2.0/python/examples/combustor_liner_cooling_network.py +745 -0
  124. combaero-0.2.0/python/examples/combustor_liner_cooling_standalone.py +437 -0
  125. combaero-0.2.0/python/examples/combustor_network_example.py +115 -0
  126. combaero-0.2.0/python/examples/combustor_pressure_loss_example.py +91 -0
  127. combaero-0.2.0/python/examples/compare_combustor_implementations.py +189 -0
  128. combaero-0.2.0/python/examples/compressible_flow_example.py +172 -0
  129. combaero-0.2.0/python/examples/counterflow_effusion_combustor.py +365 -0
  130. combaero-0.2.0/python/examples/de_laval_nozzle.py +212 -0
  131. combaero-0.2.0/python/examples/flow_regime_comparison.py +390 -0
  132. combaero-0.2.0/python/examples/friction_and_pressure_drop_channel.py +207 -0
  133. combaero-0.2.0/python/examples/gas_turbine_cycle.py +267 -0
  134. combaero-0.2.0/python/examples/heat_transfer_channel_flow.py +262 -0
  135. combaero-0.2.0/python/examples/heat_transfer_measurement.py +190 -0
  136. combaero-0.2.0/python/examples/ic_engine_cycle.py +263 -0
  137. combaero-0.2.0/python/examples/material_wall_verification.py +99 -0
  138. combaero-0.2.0/python/examples/network_from_grid.py +277 -0
  139. combaero-0.2.0/python/examples/plot_utils.py +33 -0
  140. combaero-0.2.0/python/examples/reactor_design.py +316 -0
  141. combaero-0.2.0/python/examples/sequential_combustion.py +0 -0
  142. combaero-0.2.0/python/examples/thermo_properties.py +141 -0
  143. combaero-0.2.0/python/examples/wall_coupling_simple.py +149 -0
  144. combaero-0.2.0/python/tests/README.md +27 -0
  145. combaero-0.2.0/python/tests/test_acoustic_properties.py +381 -0
  146. combaero-0.2.0/python/tests/test_acoustics.py +193 -0
  147. combaero-0.2.0/python/tests/test_adapter.py +198 -0
  148. combaero-0.2.0/python/tests/test_air_properties.py +401 -0
  149. combaero-0.2.0/python/tests/test_annular_duct_acoustics.py +499 -0
  150. combaero-0.2.0/python/tests/test_area_change.py +437 -0
  151. combaero-0.2.0/python/tests/test_can_annular_acoustics.py +454 -0
  152. combaero-0.2.0/python/tests/test_chamber_mixing.py +192 -0
  153. combaero-0.2.0/python/tests/test_channel_element_htc.py +259 -0
  154. combaero-0.2.0/python/tests/test_channel_flow.py +630 -0
  155. combaero-0.2.0/python/tests/test_channel_jacobians.py +230 -0
  156. combaero-0.2.0/python/tests/test_channel_roughness.py +196 -0
  157. combaero-0.2.0/python/tests/test_combustion_elements.py +176 -0
  158. combaero-0.2.0/python/tests/test_combustion_jacobians.py +158 -0
  159. combaero-0.2.0/python/tests/test_combustion_lhv.py +44 -0
  160. combaero-0.2.0/python/tests/test_combustion_smoothing.py +64 -0
  161. combaero-0.2.0/python/tests/test_combustion_state.py +505 -0
  162. combaero-0.2.0/python/tests/test_combustor_liner_cooling_coupled.py +71 -0
  163. combaero-0.2.0/python/tests/test_combustor_network.py +183 -0
  164. combaero-0.2.0/python/tests/test_combustor_regression.py +481 -0
  165. combaero-0.2.0/python/tests/test_common_names.py +59 -0
  166. combaero-0.2.0/python/tests/test_complete_state.py +305 -0
  167. combaero-0.2.0/python/tests/test_compressible.py +431 -0
  168. combaero-0.2.0/python/tests/test_continuation_logic.py +82 -0
  169. combaero-0.2.0/python/tests/test_convective_surface.py +230 -0
  170. combaero-0.2.0/python/tests/test_cooling_correlations.py +882 -0
  171. combaero-0.2.0/python/tests/test_diagnostics_schema.py +135 -0
  172. combaero-0.2.0/python/tests/test_diameter_discharge_coefficient_connection.py +478 -0
  173. combaero-0.2.0/python/tests/test_effective_area_connection.py +302 -0
  174. combaero-0.2.0/python/tests/test_energy_boundary.py +563 -0
  175. combaero-0.2.0/python/tests/test_equivalence_ratio.py +77 -0
  176. combaero-0.2.0/python/tests/test_expansibility_factor.py +200 -0
  177. combaero-0.2.0/python/tests/test_flow_network_walls.py +245 -0
  178. combaero-0.2.0/python/tests/test_friction.py +194 -0
  179. combaero-0.2.0/python/tests/test_geometry.py +507 -0
  180. combaero-0.2.0/python/tests/test_gui_export_units.py +91 -0
  181. combaero-0.2.0/python/tests/test_gui_graph_builder.py +213 -0
  182. combaero-0.2.0/python/tests/test_gui_schemas.py +83 -0
  183. combaero-0.2.0/python/tests/test_heat_transfer.py +430 -0
  184. combaero-0.2.0/python/tests/test_htc_channel_composite.py +369 -0
  185. combaero-0.2.0/python/tests/test_humidair.py +65 -0
  186. combaero-0.2.0/python/tests/test_import.py +13 -0
  187. combaero-0.2.0/python/tests/test_incompressible.py +232 -0
  188. combaero-0.2.0/python/tests/test_incompressible_highlevel.py +263 -0
  189. combaero-0.2.0/python/tests/test_inverse_solvers.py +124 -0
  190. combaero-0.2.0/python/tests/test_jacobian_migration.py +128 -0
  191. combaero-0.2.0/python/tests/test_mass_boundary_sink.py +93 -0
  192. combaero-0.2.0/python/tests/test_mass_specific_thermo.py +217 -0
  193. combaero-0.2.0/python/tests/test_materials.py +391 -0
  194. combaero-0.2.0/python/tests/test_momentum_chamber.py +195 -0
  195. combaero-0.2.0/python/tests/test_network_blocks.py +238 -0
  196. combaero-0.2.0/python/tests/test_network_compressible.py +471 -0
  197. combaero-0.2.0/python/tests/test_network_flow_reversal.py +135 -0
  198. combaero-0.2.0/python/tests/test_network_jacobian.py +106 -0
  199. combaero-0.2.0/python/tests/test_network_scenarios.py +262 -0
  200. combaero-0.2.0/python/tests/test_network_serialization.py +63 -0
  201. combaero-0.2.0/python/tests/test_network_solver.py +273 -0
  202. combaero-0.2.0/python/tests/test_network_validation.py +117 -0
  203. combaero-0.2.0/python/tests/test_network_validation_edge_cases.py +172 -0
  204. combaero-0.2.0/python/tests/test_orifice_cd.py +162 -0
  205. combaero-0.2.0/python/tests/test_orifice_flow.py +452 -0
  206. combaero-0.2.0/python/tests/test_phi_cpp.py +89 -0
  207. combaero-0.2.0/python/tests/test_pressure_drop_channel.py +295 -0
  208. combaero-0.2.0/python/tests/test_pressure_loss.py +497 -0
  209. combaero-0.2.0/python/tests/test_reforming_equilibrium.py +181 -0
  210. combaero-0.2.0/python/tests/test_solve_orifice_mdot.py +259 -0
  211. combaero-0.2.0/python/tests/test_solver_chain_rule.py +118 -0
  212. combaero-0.2.0/python/tests/test_solver_interface.py +949 -0
  213. combaero-0.2.0/python/tests/test_solver_methods_stress.py +98 -0
  214. combaero-0.2.0/python/tests/test_solver_robustness.py +468 -0
  215. combaero-0.2.0/python/tests/test_solver_timeout.py +103 -0
  216. combaero-0.2.0/python/tests/test_solver_topology.py +132 -0
  217. combaero-0.2.0/python/tests/test_submodule_api.py +374 -0
  218. combaero-0.2.0/python/tests/test_thermal_wall_multilayer.py +108 -0
  219. combaero-0.2.0/python/tests/test_thermo_props.py +47 -0
  220. combaero-0.2.0/python/tests/test_thermo_state.py +433 -0
  221. combaero-0.2.0/python/tests/test_transport.py +69 -0
  222. combaero-0.2.0/python/tests/test_transport_state.py +392 -0
  223. combaero-0.2.0/python/tests/test_units_sync.py +117 -0
  224. combaero-0.2.0/python/tests/test_units_sync_gui.py +60 -0
  225. combaero-0.2.0/python/tests/test_wall_connection.py +173 -0
  226. combaero-0.2.0/python/tests/test_wall_coupling.py +159 -0
  227. combaero-0.2.0/python/tests/test_wall_coupling_integration.py +376 -0
  228. combaero-0.2.0/ruff.toml +48 -0
  229. combaero-0.2.0/scripts/README.md +132 -0
  230. combaero-0.2.0/scripts/bootstrap.sh +27 -0
  231. combaero-0.2.0/scripts/bulk_merge_safe.sh +111 -0
  232. combaero-0.2.0/scripts/check-commit-msg.sh +24 -0
  233. combaero-0.2.0/scripts/check-common-names.sh +58 -0
  234. combaero-0.2.0/scripts/check-gui-style.sh +30 -0
  235. combaero-0.2.0/scripts/check-python-style.sh +260 -0
  236. combaero-0.2.0/scripts/check-source-style.sh +225 -0
  237. combaero-0.2.0/scripts/check-thermo-header.sh +46 -0
  238. combaero-0.2.0/scripts/convert_jacobian_csv_to_json.py +61 -0
  239. combaero-0.2.0/scripts/ensure_venv.py +40 -0
  240. combaero-0.2.0/scripts/generate_units_md.py +306 -0
  241. combaero-0.2.0/scripts/run-clang-tidy.sh +43 -0
  242. combaero-0.2.0/scripts/run-gui.sh +50 -0
  243. combaero-0.2.0/scripts/run_examples.py +117 -0
  244. combaero-0.2.0/src/acoustics.cpp +1220 -0
  245. combaero-0.2.0/src/area_change.cpp +239 -0
  246. combaero-0.2.0/src/can_annular_solvers.cpp +492 -0
  247. combaero-0.2.0/src/combustion.cpp +1744 -0
  248. combaero-0.2.0/src/composition.cpp +115 -0
  249. combaero-0.2.0/src/compressible.cpp +1424 -0
  250. combaero-0.2.0/src/cooling_correlations.cpp +678 -0
  251. combaero-0.2.0/src/correlation_status.cpp +31 -0
  252. combaero-0.2.0/src/equilibrium.cpp +896 -0
  253. combaero-0.2.0/src/friction.cpp +171 -0
  254. combaero-0.2.0/src/geometry.cpp +186 -0
  255. combaero-0.2.0/src/heat_transfer.cpp +1475 -0
  256. combaero-0.2.0/src/humidair.cpp +395 -0
  257. combaero-0.2.0/src/incompressible.cpp +446 -0
  258. combaero-0.2.0/src/main.cpp +90 -0
  259. combaero-0.2.0/src/materials.cpp +174 -0
  260. combaero-0.2.0/src/orifice.cpp +836 -0
  261. combaero-0.2.0/src/registry.cpp +37 -0
  262. combaero-0.2.0/src/solver_interface.cpp +1867 -0
  263. combaero-0.2.0/src/stagnation.cpp +270 -0
  264. combaero-0.2.0/src/state.cpp +210 -0
  265. combaero-0.2.0/src/thermo.cpp +415 -0
  266. combaero-0.2.0/src/transport.cpp +280 -0
  267. combaero-0.2.0/src/utils.cpp +53 -0
  268. combaero-0.2.0/tests/CMakeLists.txt +42 -0
  269. combaero-0.2.0/tests/test_acoustic_adapter.cpp +145 -0
  270. combaero-0.2.0/tests/test_energy_boundary.cpp +660 -0
  271. combaero-0.2.0/tests/test_fraction_functions.cpp +77 -0
  272. combaero-0.2.0/tests/test_heat_transfer_jacobians.cpp +457 -0
  273. combaero-0.2.0/tests/test_humidair.cpp +303 -0
  274. combaero-0.2.0/tests/test_ice_equation_accuracy.cpp +88 -0
  275. combaero-0.2.0/tests/test_incompressible.cpp +93 -0
  276. combaero-0.2.0/tests/test_orifice.cpp +297 -0
  277. combaero-0.2.0/tests/test_solver_jacobians.cpp +1341 -0
  278. combaero-0.2.0/tests/test_state.cpp +68 -0
  279. combaero-0.2.0/tests/test_state_sync.cpp +71 -0
  280. combaero-0.2.0/tests/test_stream_jacobians.cpp +794 -0
  281. combaero-0.2.0/tests/test_thermo_transport.cpp +4539 -0
  282. combaero-0.2.0/tests/test_units.cpp +57 -0
  283. combaero-0.2.0/tests/test_water_equation_accuracy.cpp +88 -0
  284. combaero-0.2.0/uv.lock +1421 -0
@@ -0,0 +1,33 @@
1
+ # Bulk Merge Safe Updates Workflow
2
+
3
+ This workflow automates the consolidation of verified Dependabot updates into the `main` branch. It ensures that only "green" and "safe" (minor/patch/grouped) updates are merged, significantly reducing manual overhead.
4
+
5
+ ## Prerequisites
6
+ - GitHub CLI (`gh`) installed and authenticated.
7
+ - Local `main` branch is clean and synchronized.
8
+
9
+ ## Steps
10
+
11
+ ### 1. Discovery & LLM Review
12
+ The Agent (LLM) must first perform a dry-run to identify candidates and verify their safety.
13
+ ```bash
14
+ ./scripts/bulk_merge_safe.sh --dry-run
15
+ ```
16
+
17
+ ### 2. Safety Audit
18
+ For each PR identified by the script, the Agent must:
19
+ - [ ] Confirm the CI status is truly **SUCCESS**.
20
+ - [ ] For `minor` bumps, quickly check for known breaking changes in project-critical libraries.
21
+ - [ ] Group the candidates into a summary table for the user.
22
+
23
+ ### 3. User Approval
24
+ Present the candidate table to the user. Do **NOT** proceed until the user provides explicit approval (e.g., "Proceed with merge").
25
+
26
+ ### 4. Execution
27
+ Once approved, run the merger:
28
+ ```bash
29
+ ./scripts/bulk_merge_safe.sh
30
+ ```
31
+
32
+ ### 5. Final Sync
33
+ The script handles the final `git pull` from `main`, but the Agent should verify the local state is up-to-date and all checks remain green on `main`.
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Run style checks, units sync validation, commit locally, and push.
3
+ ---
4
+
5
+ // turbo-all
6
+ Follow the complete validation and commit process in [commit-local](file:///Users/thiemo/Projects/combaero/.agents/workflows/commit-local.md), then push.
7
+
8
+ ## Steps
9
+
10
+ ### 1. Follow commit-local workflow
11
+ Execute all steps in the [commit-local](file:///Users/thiemo/Projects/combaero/.agents/workflows/commit-local.md) workflow to ensure linting, unit sync, and local commit are successful.
12
+
13
+ ### 2. Push to current branch
14
+ ```bash
15
+ git push
16
+ ```
@@ -0,0 +1,52 @@
1
+ ---
2
+ description: Run style checks, units sync validation, commit with message file. Do not push.
3
+ ---
4
+
5
+ // turbo-all
6
+ This workflow automates the commit process with comprehensive checks and message handling.
7
+
8
+ ## Steps
9
+
10
+ ### 1. Check for old commit message files
11
+ ```bash
12
+ ./scripts/check-commit-msg.sh
13
+ ```
14
+ Note: If a `COMMIT_MSG.md` exists, review it and delete if stale, or keep to reuse it.
15
+
16
+ ### 2. Run Python formatting and linting
17
+ ```bash
18
+ uv run ruff format python/
19
+ uv run ruff check --fix python/
20
+ ```
21
+
22
+ ### 3. Run Frontend formatting and linting (Biome)
23
+ ```bash
24
+ cd gui/frontend && npm run format && cd ../..
25
+ ```
26
+
27
+ ### 4. Check for units synchronization (Mandatory)
28
+ ```bash
29
+ uv run pytest python/tests/test_units_sync.py
30
+ ```
31
+
32
+ ### 5. Check for non-ASCII characters in C++ source
33
+ ```bash
34
+ ./scripts/check-source-style.sh
35
+ ```
36
+
37
+ ### 6. Stage and run pre-commit hooks
38
+ ```bash
39
+ git add -A
40
+ uv run pre-commit run --all-files
41
+ git add -A
42
+ ```
43
+
44
+ ### 7. Create commit message file
45
+ Create a file named `COMMIT_MSG.md` in the project root with your commit message.
46
+ Follow conventional commit format: `type: brief description`.
47
+
48
+ ### 8. Commit and cleanup
49
+ ```bash
50
+ git commit -F COMMIT_MSG.md
51
+ rm COMMIT_MSG.md
52
+ ```
@@ -0,0 +1,26 @@
1
+ ---
2
+ description: Create a Pull Request and monitor CI status
3
+ ---
4
+
5
+ // turbo-all
6
+ This workflow automates the creation of a Pull Request using the GitHub CLI and tracks CI progress.
7
+
8
+ ## Steps
9
+
10
+ ### 1. Create Pull Request
11
+ ```bash
12
+ gh pr create --title "type: brief description" --body-file COMMIT_MSG.md
13
+ ```
14
+ Note: Re-use the `COMMIT_MSG.md` if available, or specify a summary.
15
+
16
+ ### 2. Monitor CI Status
17
+ ```bash
18
+ gh pr view --json statusCheckRollup --jq '.statusCheckRollup[]'
19
+ ```
20
+
21
+ ### 3. Check specific run logs if needed
22
+ ```bash
23
+ gh run list --limit 3
24
+ # Then view specific run
25
+ # gh run view <ID> --json jobs --jq '.jobs[] | {name, status, conclusion}'
26
+ ```
@@ -0,0 +1,35 @@
1
+ ---
2
+ description: Squash merge PR and cleanup branch (default for small tasks)
3
+ ---
4
+
5
+ // turbo-all
6
+ This workflow handles the final merge and cleanup. It uses squash merge by default as preferred for small task branches.
7
+
8
+ ## Merge Logic Selection
9
+ - **Squash Merge (`--squash`)**: Default for small task branches, bugfixes, and feature refinements to keep history clean.
10
+ - **Normal Merge (`--merge`)**: Used for major architectural changes or multi-contributor feature branches where preserving intermediate commit history is vital.
11
+
12
+ ## Steps
13
+
14
+ ### 1. Verification Checklist
15
+ - [ ] All CI checks are green (confirm with `gh pr view`).
16
+ - [ ] Any manual verification/benchmarks are completed.
17
+
18
+ ### 2. Execute Squash Merge (Preferred)
19
+ ```bash
20
+ gh pr merge --squash --delete-branch
21
+ ```
22
+
23
+ ### 3. Alternative: Normal Merge (Major Work)
24
+ If the work is major according to project conventions, use:
25
+ ```bash
26
+ gh pr merge --merge --delete-branch
27
+ ```
28
+
29
+ ### 4. Cleanup Local Branch
30
+ ```bash
31
+ git checkout main
32
+ git pull
33
+ # Local branch deletion is handled by --delete-branch if remote, but check local:
34
+ # git branch -d <branch_name>
35
+ ```
@@ -0,0 +1,16 @@
1
+ .venv/**
2
+ build/**
3
+ dist/**
4
+ python/**
5
+ src/**
6
+ include/**
7
+ scripts/**
8
+ tests/**
9
+ thermo_data_generator/**
10
+ benchmarks/**
11
+ cantera_validation_tests/**
12
+ node_modules/**
13
+ **/__pycache__/**
14
+ **/CMakeFiles/**
15
+ **/cmake_install.cmake
16
+ **/CMakeCache.txt
@@ -0,0 +1,31 @@
1
+ Checks: >
2
+ # Start with nothing, then opt in
3
+ -*
4
+ # Core bug-finding
5
+ clang-diagnostic-*,
6
+ clang-analyzer-*,
7
+ bugprone-*,
8
+ performance-*,
9
+ portability-*,
10
+ # Good modernization for C++17
11
+ modernize-*,
12
+ # Readability and basic style
13
+ readability-*,
14
+ # A subset of C++ Core Guidelines
15
+ cppcoreguidelines-*,
16
+ # But disable rules that fight with style or are project-specific
17
+ -clang-diagnostic-c++17-extensions,
18
+ -myproject-no-system-algorithm,
19
+ -llvm-*,
20
+ -fuchsia-*,
21
+ -google-*,
22
+ -hicpp-*,
23
+ -zircon-*,
24
+ # If any of these become noisy, turn them off:
25
+ -cppcoreguidelines-avoid-magic-numbers,
26
+ -cppcoreguidelines-owning-memory,
27
+ -cppcoreguidelines-pro-type-reinterpret-cast,
28
+ -bugprone-easily-swappable-parameters,
29
+ -performance-avoid-endl
30
+
31
+ WarningsAsErrors: ''
combaero-0.2.0/.clangd ADDED
@@ -0,0 +1,14 @@
1
+ CompileFlags:
2
+ Add: [-std=c++17]
3
+
4
+ Diagnostics:
5
+ UnusedIncludes: None
6
+ Suppress:
7
+ - '-Wc++17-extensions'
8
+
9
+ ---
10
+
11
+ If:
12
+ PathMatch: python/combaero/_core.cpp
13
+ Diagnostics:
14
+ Suppress: '*'
combaero-0.2.0/.envrc ADDED
@@ -0,0 +1,53 @@
1
+ # direnv config for combaero (root)
2
+ #
3
+ # This single .envrc manages a shared virtual environment at the repository root
4
+ # for all Python-related tasks: building the combaero wheel, running thermo_data_generator
5
+ # scripts, and executing Python tests.
6
+
7
+ # Re-run this .envrc when key files change
8
+ watch_file .envrc
9
+ watch_file pyproject.toml
10
+ watch_dir python
11
+ watch_dir thermo_data_generator
12
+
13
+ VENV_DIR="$PWD/.venv"
14
+ PYTHON_BIN="$VENV_DIR/bin/python"
15
+
16
+ # 1) Create venv if missing (prefer uv, fall back to python -m venv)
17
+ if [ ! -d "$VENV_DIR" ]; then
18
+ if command -v uv >/dev/null 2>&1; then
19
+ echo "[combaero] Creating virtualenv with uv at $VENV_DIR"
20
+ uv venv "$VENV_DIR"
21
+ else
22
+ echo "[combaero] uv not found, creating virtualenv with python -m venv at $VENV_DIR"
23
+ python3 -m venv "$VENV_DIR"
24
+ fi
25
+ fi
26
+
27
+ # 2) Activate venv
28
+ export VIRTUAL_ENV="$VENV_DIR"
29
+ export PATH="$VENV_DIR/bin:$PATH"
30
+
31
+ # 3) Build-related env flags
32
+ export COMBAERO_BUILD_PYTHON=1
33
+ export PIP_DISABLE_PIP_VERSION_CHECK=1
34
+
35
+ # 4) Auto-install dependencies via uv (once per venv)
36
+ if command -v uv >/dev/null 2>&1; then
37
+ MARKER="$VENV_DIR/.uv-bootstrap-done"
38
+ if [ ! -f "$MARKER" ]; then
39
+ echo "[combaero] Bootstrapping Python dependencies via uv"
40
+
41
+ # Install core tooling: pip, build system, and pybind11 for the wheel
42
+ uv pip install --python "$PYTHON_BIN" pip build scikit-build-core pybind11
43
+
44
+ # Install dev dependencies (pytest)
45
+ uv pip install --python "$PYTHON_BIN" pytest
46
+
47
+ # Install thermo_data_generator dependencies
48
+ uv pip install --python "$PYTHON_BIN" pandas pyyaml
49
+
50
+ touch "$MARKER"
51
+ echo "[combaero] Bootstrap complete. Dependencies installed."
52
+ fi
53
+ fi
@@ -0,0 +1,112 @@
1
+ # Build directories
2
+ build/
3
+ cmake-build-*/
4
+
5
+ # Excluded folders
6
+ humidair_examples/
7
+ cantera_examples/
8
+ temp/
9
+
10
+ # IDE files
11
+ .idea/
12
+ .vscode/
13
+ *.swp
14
+ *~
15
+
16
+ # Compiled objects
17
+ *.o
18
+ *.obj
19
+ *.lo
20
+ *.slo
21
+
22
+ # Precompiled headers
23
+ *.gch
24
+ *.pch
25
+
26
+ # Libraries
27
+ *.so
28
+ *.dylib
29
+ *.dll
30
+ *.a
31
+ *.lib
32
+ *.la
33
+ *.lai
34
+
35
+ # Fortran modules
36
+ *.mod
37
+ *.smod
38
+
39
+ # Executables
40
+ *.exe
41
+ *.out
42
+ *.app
43
+
44
+ # CMake
45
+ CMakeCache.txt
46
+ CMakeFiles/
47
+ *.cmake
48
+ !CMakeLists.txt
49
+ !.github/workflows/toolchain-mingw.cmake
50
+
51
+ # macOS
52
+ .DS_Store
53
+
54
+ # Windows
55
+ Thumbs.db
56
+ Desktop.ini
57
+ $RECYCLE.BIN/
58
+
59
+ # Linux
60
+ .directory
61
+
62
+ # Python
63
+ __pycache__/
64
+ *.py[cod]
65
+ *.pyo
66
+ *.pyd
67
+ .pytest_cache/
68
+ .cache/
69
+ dist/
70
+ .venv/
71
+ *.egg-info/
72
+
73
+ # scikit-build-core
74
+ _skbuild/
75
+ -sdist/
76
+
77
+ # Generated artifacts
78
+ thermo_data_generator/test_create_cpp_header_output.txt
79
+ thermo_data_generator/thermo_transport_data.h
80
+
81
+ # Thermo data generator - source data files (not included due to licensing)
82
+ # Users must obtain these themselves from original sources
83
+ thermo_data_generator/*.yaml
84
+ thermo_data_generator/*.txt
85
+ thermo_data_generator/*.json
86
+ !thermo_data_generator/.generator_state.json
87
+ thermo_data_generator/*.csv
88
+
89
+ # Example output (plots, data)
90
+ examples/*.png
91
+ examples/*.csv
92
+ examples/*.dat
93
+ python/examples/*.png
94
+ python/examples/*.csv
95
+ python/examples/*.dat
96
+
97
+ # CTest
98
+ Testing/
99
+ tests/Testing/
100
+
101
+ # Diagnostic output
102
+ diagnostic_plots/
103
+ diagnostic_reports/
104
+
105
+ TODO.md
106
+ .aider*
107
+
108
+ # Benchmark run outputs (auto-generated, not for tracking)
109
+ benchmarks/runs/
110
+ benchmarks/network_solver_benchmark_latest.json
111
+ gui/nw_*.json
112
+ gui/tmp/
@@ -0,0 +1,67 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v4.5.0
4
+ hooks:
5
+ - id: trailing-whitespace
6
+ - id: end-of-file-fixer
7
+ - id: check-yaml
8
+ - id: check-added-large-files
9
+ - id: check-merge-conflict
10
+
11
+ - repo: local
12
+ hooks:
13
+ - id: python-style-check
14
+ name: Python style checks (ruff + ruff format + optional mypy)
15
+ entry: bash -c './scripts/check-python-style.sh'
16
+ language: system
17
+ pass_filenames: false
18
+ files: ^(python/|cantera_validation_tests/|thermo_data_generator/)
19
+ stages: [pre-commit]
20
+
21
+ - id: cantera-validation-tests
22
+ name: Cantera Validation Tests
23
+ entry: bash -c 'CANTERA_DATA="$PWD/cantera_validation_tests" uv run --project cantera_validation_tests pytest -v --tb=short'
24
+ language: system
25
+ pass_filenames: false
26
+ always_run: false
27
+ files: ^(src/|include/|python/|cantera_validation_tests/)
28
+ stages: [pre-commit]
29
+
30
+ - id: python-unit-tests
31
+ name: Python Unit Tests
32
+ entry: bash -c 'uv run pytest python/tests/ -v'
33
+ language: system
34
+ pass_filenames: false
35
+ always_run: false
36
+ files: ^(src/|include/|python/)
37
+ stages: [pre-commit]
38
+
39
+ - id: thermo-header-check
40
+ name: Thermo/Transport Header (generated file check)
41
+ entry: bash -c './scripts/check-thermo-header.sh'
42
+ language: system
43
+ pass_filenames: false
44
+ files: ^(thermo_data_generator/|include/thermo_transport_data\.h)
45
+ stages: [pre-commit]
46
+
47
+ - id: common-names-check
48
+ name: Common names completeness check
49
+ entry: bash -c './scripts/check-common-names.sh'
50
+ language: system
51
+ pass_filenames: false
52
+ files: ^include/(thermo_transport_data|common_names)\.h$
53
+ stages: [pre-commit]
54
+
55
+ - id: math-constants-check
56
+ name: Math constants portability check (MSVC compatibility)
57
+ entry: .pre-commit-hooks/check_math_constants.py
58
+ language: system
59
+ files: \.(cpp|h|hpp|cc|cxx)$
60
+ stages: [pre-commit]
61
+
62
+ - repo: https://github.com/biomejs/pre-commit
63
+ rev: v0.6.1
64
+ hooks:
65
+ - id: biome-check
66
+ additional_dependencies: ["@biomejs/biome@2.4.9"]
67
+ files: ^gui/frontend/
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Pre-commit hook to ensure M_PI and related constants are used via math_constants.h
4
+
5
+ MSVC does not define M_PI by default (POSIX extension), so we must use our
6
+ portable math_constants.h header for cross-platform compatibility.
7
+ """
8
+
9
+ import re
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ # Constants that require math_constants.h
14
+ MATH_CONSTANTS = [
15
+ "M_PI",
16
+ "M_PI_2",
17
+ "M_PI_4",
18
+ "M_SQRT2",
19
+ "M_LN10",
20
+ ]
21
+
22
+
23
+ def check_file(filepath: Path) -> list[str]:
24
+ """Check if file uses math constants without including math_constants.h"""
25
+ errors = []
26
+
27
+ try:
28
+ content = filepath.read_text(encoding="utf-8")
29
+ except (UnicodeDecodeError, FileNotFoundError):
30
+ return errors
31
+
32
+ # Check if any math constants are used
33
+ constants_used = set()
34
+ for const in MATH_CONSTANTS:
35
+ # Match constant but not in comments or strings
36
+ if re.search(rf"\b{const}\b", content):
37
+ constants_used.add(const)
38
+
39
+ if not constants_used:
40
+ return errors
41
+
42
+ # Check if math_constants.h is included (matches both "math_constants.h" and "../include/math_constants.h")
43
+ has_include = bool(re.search(r'#include\s+[<"].*math_constants\.h[>"]', content))
44
+
45
+ if not has_include:
46
+ errors.append(
47
+ f"{filepath}: Uses {', '.join(sorted(constants_used))} "
48
+ f'but missing #include "math_constants.h" (required for MSVC compatibility)'
49
+ )
50
+
51
+ return errors
52
+
53
+
54
+ def main():
55
+ """Check all C++ files passed as arguments"""
56
+ errors = []
57
+
58
+ for arg in sys.argv[1:]:
59
+ filepath = Path(arg)
60
+
61
+ # Only check C++ source/header files
62
+ if filepath.suffix not in {".cpp", ".h", ".hpp", ".cc", ".cxx"}:
63
+ continue
64
+
65
+ # Skip the math_constants.h file itself
66
+ if filepath.name == "math_constants.h":
67
+ continue
68
+
69
+ errors.extend(check_file(filepath))
70
+
71
+ if errors:
72
+ print("\n❌ Math constants portability check failed:\n")
73
+ for error in errors:
74
+ print(f" {error}")
75
+ print(
76
+ '\nMSVC does not define M_PI by default. Use #include "math_constants.h" for portability.'
77
+ )
78
+ return 1
79
+
80
+ return 0
81
+
82
+
83
+ if __name__ == "__main__":
84
+ sys.exit(main())
@@ -0,0 +1,2 @@
1
+ # Keep this version in sync with ruff.toml target-version and GitHub workflow python-version fields.
2
+ 3.12.11
@@ -0,0 +1,33 @@
1
+ ---
2
+ description: Auto-fix issues in changed Frontend files with Biome
3
+ ---
4
+
5
+ # Biome Auto-Fix Changed Files
6
+
7
+ This workflow automatically fixes linting and formatting issues in all modified Frontend files using Biome.
8
+
9
+ ## Steps
10
+
11
+ // turbo
12
+ 1. Run Biome check with --write on all changed JS/TS/CSS/JSON files
13
+ ```bash
14
+ git status --porcelain | grep '^[AMR].*gui/frontend/.*\.\(js\|ts\|tsx\|css\|json\)$' | cut -c4- | xargs -r npx @biomejs/biome check --write --no-errors-on-unmatched --files-max-size=1000000
15
+ ```
16
+
17
+ // turbo
18
+ 2. Verify all issues are fixed
19
+ ```bash
20
+ git status --porcelain | grep '^[AMR].*gui/frontend/.*\.\(js\|ts\|tsx\|css\|json\)$' | cut -c4- | xargs -r npx @biomejs/biome check --no-errors-on-unmatched
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ Run this workflow before committing to ensure all Frontend files pass Biome checks.
26
+
27
+ ## Notes
28
+
29
+ - Only fixes files that are Added, Modified, or Renamed (AMR status) within the `gui/frontend` directory.
30
+ - Uses `check --write` to automatically apply formatting and safe lint fixes.
31
+ - The `-r` flag prevents xargs from failing when no files match.
32
+ - All steps are auto-turbo enabled for seamless execution.
33
+ - Always review the changes after auto-fix.
@@ -0,0 +1,26 @@
1
+ ---
2
+ description: Run style checks, fix issues, commit with message file, and push
3
+ ---
4
+
5
+ This workflow automates the commit and push process with proper style checking and message handling.
6
+
7
+ ## Steps
8
+
9
+ ### 1-8. Complete commit workflow
10
+ Follow all steps from @[/commit-only] workflow (check for old commit messages, stage, pre-commit, fix issues, create message file, commit, cleanup).
11
+
12
+ // turbo
13
+ ### 9. Push to remote
14
+ ```bash
15
+ git push
16
+ ```
17
+
18
+ ## Usage
19
+
20
+ This workflow runs the complete @[/commit-only] workflow and then pushes to the remote repository.
21
+
22
+ When you run this workflow, Cascade will:
23
+ 1. Run all commit-only steps (check, stage, pre-commit, fix, create message, commit, cleanup)
24
+ 2. Push to remote
25
+
26
+ This avoids issues with special characters, backticks, and multi-line messages in shell commands.