ember-cfd 0.1.0a1__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 (181) hide show
  1. ember_cfd-0.1.0a1/.flake8 +2 -0
  2. ember_cfd-0.1.0a1/.github/workflows/ci.yml +36 -0
  3. ember_cfd-0.1.0a1/.github/workflows/wheels.yml +113 -0
  4. ember_cfd-0.1.0a1/.gitignore +59 -0
  5. ember_cfd-0.1.0a1/.pre-commit-config.yaml +72 -0
  6. ember_cfd-0.1.0a1/.python-version +1 -0
  7. ember_cfd-0.1.0a1/.readthedocs.yaml +24 -0
  8. ember_cfd-0.1.0a1/COPYING +674 -0
  9. ember_cfd-0.1.0a1/Makefile +43 -0
  10. ember_cfd-0.1.0a1/PKG-INFO +114 -0
  11. ember_cfd-0.1.0a1/README.md +91 -0
  12. ember_cfd-0.1.0a1/docs/Makefile +12 -0
  13. ember_cfd-0.1.0a1/docs/_ext/tikz.py +102 -0
  14. ember_cfd-0.1.0a1/docs/_static/_tikz/cell_indexing_64b0bfa32a6f.svg +463 -0
  15. ember_cfd-0.1.0a1/docs/_static/_tikz/cell_indexing_6d75a7f863f0.svg +469 -0
  16. ember_cfd-0.1.0a1/docs/_static/_tikz/cell_indexing_c791f18305c0.svg +471 -0
  17. ember_cfd-0.1.0a1/docs/_static/_tikz/coordinate_system_5c381a977fe8.svg +88 -0
  18. ember_cfd-0.1.0a1/docs/_tikz/cell_indexing.tikz +150 -0
  19. ember_cfd-0.1.0a1/docs/_tikz/coordinate_system.tikz +90 -0
  20. ember_cfd-0.1.0a1/docs/algorithm.rst +223 -0
  21. ember_cfd-0.1.0a1/docs/api/average.rst +7 -0
  22. ember_cfd-0.1.0a1/docs/api/block.rst +8 -0
  23. ember_cfd-0.1.0a1/docs/api/convergence_history.rst +6 -0
  24. ember_cfd-0.1.0a1/docs/api/cut.rst +7 -0
  25. ember_cfd-0.1.0a1/docs/api/fluid.rst +14 -0
  26. ember_cfd-0.1.0a1/docs/api/grid.rst +8 -0
  27. ember_cfd-0.1.0a1/docs/api/patch.rst +95 -0
  28. ember_cfd-0.1.0a1/docs/api/solver.rst +11 -0
  29. ember_cfd-0.1.0a1/docs/auto_examples/images/sphx_glr_run_duct_001.png +0 -0
  30. ember_cfd-0.1.0a1/docs/auto_examples/images/sphx_glr_run_duct_002.png +0 -0
  31. ember_cfd-0.1.0a1/docs/auto_examples/images/thumb/sphx_glr_run_duct_thumb.png +0 -0
  32. ember_cfd-0.1.0a1/docs/auto_examples/run_duct.codeobj.json +884 -0
  33. ember_cfd-0.1.0a1/docs/auto_examples/run_duct.ipynb +223 -0
  34. ember_cfd-0.1.0a1/docs/auto_examples/run_duct.py +345 -0
  35. ember_cfd-0.1.0a1/docs/auto_examples/run_duct.py.md5 +1 -0
  36. ember_cfd-0.1.0a1/docs/auto_examples/run_duct.rst +557 -0
  37. ember_cfd-0.1.0a1/docs/auto_examples/run_duct.zip +0 -0
  38. ember_cfd-0.1.0a1/docs/conf.py +134 -0
  39. ember_cfd-0.1.0a1/docs/coordinate_system.rst +149 -0
  40. ember_cfd-0.1.0a1/docs/index.rst +36 -0
  41. ember_cfd-0.1.0a1/docs/install.rst +116 -0
  42. ember_cfd-0.1.0a1/docs/references.rst +7 -0
  43. ember_cfd-0.1.0a1/docs/refs.bib +54 -0
  44. ember_cfd-0.1.0a1/docs/solver_configuration.rst +15 -0
  45. ember_cfd-0.1.0a1/examples/README.txt +10 -0
  46. ember_cfd-0.1.0a1/examples/plot_block_basics.py +305 -0
  47. ember_cfd-0.1.0a1/examples/plot_cut_average.py +147 -0
  48. ember_cfd-0.1.0a1/examples/plot_isentropic_nozzle.py +160 -0
  49. ember_cfd-0.1.0a1/examples/plot_joule_cycle.py +115 -0
  50. ember_cfd-0.1.0a1/examples/plot_patches.py +179 -0
  51. ember_cfd-0.1.0a1/examples/plot_shocked_nozzle.py +208 -0
  52. ember_cfd-0.1.0a1/examples/run_duct.py +336 -0
  53. ember_cfd-0.1.0a1/pyproject.toml +87 -0
  54. ember_cfd-0.1.0a1/scripts/duct_cfl_sweep.sh +77 -0
  55. ember_cfd-0.1.0a1/scripts/mg_irs_bench.py +201 -0
  56. ember_cfd-0.1.0a1/scripts/run_duct.py +245 -0
  57. ember_cfd-0.1.0a1/setup.cfg +4 -0
  58. ember_cfd-0.1.0a1/setup.py +174 -0
  59. ember_cfd-0.1.0a1/src/ember/__init__.py +34 -0
  60. ember_cfd-0.1.0a1/src/ember/_fortran/adapt.f90 +196 -0
  61. ember_cfd-0.1.0a1/src/ember/_fortran/block.f90 +1 -0
  62. ember_cfd-0.1.0a1/src/ember/_fortran/distribute.f90 +209 -0
  63. ember_cfd-0.1.0a1/src/ember/_fortran/filter.f90 +94 -0
  64. ember_cfd-0.1.0a1/src/ember/_fortran/geometry.f90 +285 -0
  65. ember_cfd-0.1.0a1/src/ember/_fortran/indexing.f90 +86 -0
  66. ember_cfd-0.1.0a1/src/ember/_fortran/inline_info.txt +0 -0
  67. ember_cfd-0.1.0a1/src/ember/_fortran/interpolate.f90 +284 -0
  68. ember_cfd-0.1.0a1/src/ember/_fortran/matvec.f90 +262 -0
  69. ember_cfd-0.1.0a1/src/ember/_fortran/mixing.f90 +234 -0
  70. ember_cfd-0.1.0a1/src/ember/_fortran/multigrid.f90 +191 -0
  71. ember_cfd-0.1.0a1/src/ember/_fortran/operators.f90 +146 -0
  72. ember_cfd-0.1.0a1/src/ember/_fortran/perfect.f90 +1 -0
  73. ember_cfd-0.1.0a1/src/ember/_fortran/perturbation.f90 +362 -0
  74. ember_cfd-0.1.0a1/src/ember/_fortran/polar.f90 +52 -0
  75. ember_cfd-0.1.0a1/src/ember/_fortran/residual.f90 +984 -0
  76. ember_cfd-0.1.0a1/src/ember/_fortran/scree.f90 +672 -0
  77. ember_cfd-0.1.0a1/src/ember/_fortran/smooth_const.f90 +474 -0
  78. ember_cfd-0.1.0a1/src/ember/_fortran/smooth_v2.f90 +881 -0
  79. ember_cfd-0.1.0a1/src/ember/_fortran/viscous.f90 +836 -0
  80. ember_cfd-0.1.0a1/src/ember/average.py +440 -0
  81. ember_cfd-0.1.0a1/src/ember/basepatch.py +956 -0
  82. ember_cfd-0.1.0a1/src/ember/block.py +3030 -0
  83. ember_cfd-0.1.0a1/src/ember/block_restart.py +282 -0
  84. ember_cfd-0.1.0a1/src/ember/block_util.py +558 -0
  85. ember_cfd-0.1.0a1/src/ember/collections.py +778 -0
  86. ember_cfd-0.1.0a1/src/ember/convergence_history.py +877 -0
  87. ember_cfd-0.1.0a1/src/ember/cooling.py +81 -0
  88. ember_cfd-0.1.0a1/src/ember/cusp.py +118 -0
  89. ember_cfd-0.1.0a1/src/ember/cut.py +1097 -0
  90. ember_cfd-0.1.0a1/src/ember/fluid.py +1147 -0
  91. ember_cfd-0.1.0a1/src/ember/fluxes.py +283 -0
  92. ember_cfd-0.1.0a1/src/ember/geometry.py +597 -0
  93. ember_cfd-0.1.0a1/src/ember/grid.py +2290 -0
  94. ember_cfd-0.1.0a1/src/ember/inlet.py +216 -0
  95. ember_cfd-0.1.0a1/src/ember/inviscid.py +24 -0
  96. ember_cfd-0.1.0a1/src/ember/mixing.py +350 -0
  97. ember_cfd-0.1.0a1/src/ember/mixing_communicator.py +260 -0
  98. ember_cfd-0.1.0a1/src/ember/nonmatch.py +123 -0
  99. ember_cfd-0.1.0a1/src/ember/nonmatch_communicator.py +146 -0
  100. ember_cfd-0.1.0a1/src/ember/outlet.py +580 -0
  101. ember_cfd-0.1.0a1/src/ember/patch.py +192 -0
  102. ember_cfd-0.1.0a1/src/ember/periodic.py +94 -0
  103. ember_cfd-0.1.0a1/src/ember/periodic_communicator.py +216 -0
  104. ember_cfd-0.1.0a1/src/ember/perturbation.py +630 -0
  105. ember_cfd-0.1.0a1/src/ember/plot3d.py +326 -0
  106. ember_cfd-0.1.0a1/src/ember/probe.py +29 -0
  107. ember_cfd-0.1.0a1/src/ember/rotating.py +68 -0
  108. ember_cfd-0.1.0a1/src/ember/set_iter.py +651 -0
  109. ember_cfd-0.1.0a1/src/ember/solver.py +556 -0
  110. ember_cfd-0.1.0a1/src/ember/struct.py +806 -0
  111. ember_cfd-0.1.0a1/src/ember/ts3.py +1581 -0
  112. ember_cfd-0.1.0a1/src/ember/util.py +1740 -0
  113. ember_cfd-0.1.0a1/src/ember/util_yaml.py +73 -0
  114. ember_cfd-0.1.0a1/src/ember_cfd.egg-info/PKG-INFO +114 -0
  115. ember_cfd-0.1.0a1/src/ember_cfd.egg-info/SOURCES.txt +179 -0
  116. ember_cfd-0.1.0a1/src/ember_cfd.egg-info/dependency_links.txt +1 -0
  117. ember_cfd-0.1.0a1/src/ember_cfd.egg-info/not-zip-safe +1 -0
  118. ember_cfd-0.1.0a1/src/ember_cfd.egg-info/requires.txt +4 -0
  119. ember_cfd-0.1.0a1/src/ember_cfd.egg-info/scm_file_list.json +175 -0
  120. ember_cfd-0.1.0a1/src/ember_cfd.egg-info/scm_version.json +8 -0
  121. ember_cfd-0.1.0a1/src/ember_cfd.egg-info/top_level.txt +1 -0
  122. ember_cfd-0.1.0a1/tests/conftest.py +141 -0
  123. ember_cfd-0.1.0a1/tests/data/F_body_golden.npz +0 -0
  124. ember_cfd-0.1.0a1/tests/data/duct.cnv +0 -0
  125. ember_cfd-0.1.0a1/tests/data/log_duct.txt +5718 -0
  126. ember_cfd-0.1.0a1/tests/data/residual_golden.npz +0 -0
  127. ember_cfd-0.1.0a1/tests/test_average.py +987 -0
  128. ember_cfd-0.1.0a1/tests/test_block.py +2739 -0
  129. ember_cfd-0.1.0a1/tests/test_block_copy_patches.py +299 -0
  130. ember_cfd-0.1.0a1/tests/test_block_core.py +483 -0
  131. ember_cfd-0.1.0a1/tests/test_block_i_perk.py +37 -0
  132. ember_cfd-0.1.0a1/tests/test_block_set_iterative.py +1370 -0
  133. ember_cfd-0.1.0a1/tests/test_block_util.py +1101 -0
  134. ember_cfd-0.1.0a1/tests/test_convergence_history.py +504 -0
  135. ember_cfd-0.1.0a1/tests/test_cut.py +1717 -0
  136. ember_cfd-0.1.0a1/tests/test_cut_scipy_parity.py +125 -0
  137. ember_cfd-0.1.0a1/tests/test_fluid.py +590 -0
  138. ember_cfd-0.1.0a1/tests/test_fluxes.py +256 -0
  139. ember_cfd-0.1.0a1/tests/test_geometry.py +1116 -0
  140. ember_cfd-0.1.0a1/tests/test_grid.py +991 -0
  141. ember_cfd-0.1.0a1/tests/test_grid_connectivity.py +686 -0
  142. ember_cfd-0.1.0a1/tests/test_grid_resample.py +966 -0
  143. ember_cfd-0.1.0a1/tests/test_grid_utilities.py +2161 -0
  144. ember_cfd-0.1.0a1/tests/test_inviscid_patch.py +159 -0
  145. ember_cfd-0.1.0a1/tests/test_io.py +1413 -0
  146. ember_cfd-0.1.0a1/tests/test_mg_irs.py +301 -0
  147. ember_cfd-0.1.0a1/tests/test_mixing_integration.py +132 -0
  148. ember_cfd-0.1.0a1/tests/test_multigrid.py +386 -0
  149. ember_cfd-0.1.0a1/tests/test_nonmatch_communicator.py +537 -0
  150. ember_cfd-0.1.0a1/tests/test_nonmatch_patch.py +362 -0
  151. ember_cfd-0.1.0a1/tests/test_operators.py +400 -0
  152. ember_cfd-0.1.0a1/tests/test_outlet.py +273 -0
  153. ember_cfd-0.1.0a1/tests/test_patch.py +4673 -0
  154. ember_cfd-0.1.0a1/tests/test_periodic_communicator.py +199 -0
  155. ember_cfd-0.1.0a1/tests/test_perturbation.py +596 -0
  156. ember_cfd-0.1.0a1/tests/test_polar_source.py +124 -0
  157. ember_cfd-0.1.0a1/tests/test_read_probe_dat.py +376 -0
  158. ember_cfd-0.1.0a1/tests/test_residual_golden.py +140 -0
  159. ember_cfd-0.1.0a1/tests/test_residual_smoothing.py +133 -0
  160. ember_cfd-0.1.0a1/tests/test_scree_mg.py +452 -0
  161. ember_cfd-0.1.0a1/tests/test_set_F_body_golden.py +144 -0
  162. ember_cfd-0.1.0a1/tests/test_smooth.py +430 -0
  163. ember_cfd-0.1.0a1/tests/test_struct.py +1856 -0
  164. ember_cfd-0.1.0a1/tests/test_timestep_diffusion.py +96 -0
  165. ember_cfd-0.1.0a1/tests/test_ts3_probe.py +223 -0
  166. ember_cfd-0.1.0a1/tests/test_ts3_readback.py +178 -0
  167. ember_cfd-0.1.0a1/tests/test_update_filter.py +127 -0
  168. ember_cfd-0.1.0a1/tests/test_util.py +1876 -0
  169. ember_cfd-0.1.0a1/tests/test_viscous_periodic.py +153 -0
  170. ember_cfd-0.1.0a1/tests/test_wdist.py +289 -0
  171. ember_cfd-0.1.0a1/tools/build_docs.sh +8 -0
  172. ember_cfd-0.1.0a1/tools/check_compile.sh +47 -0
  173. ember_cfd-0.1.0a1/tools/check_dead_code.sh +15 -0
  174. ember_cfd-0.1.0a1/tools/check_member_order.py +120 -0
  175. ember_cfd-0.1.0a1/tools/check_no_claude_commit_msg.sh +10 -0
  176. ember_cfd-0.1.0a1/tools/check_no_typing.sh +26 -0
  177. ember_cfd-0.1.0a1/tools/check_spec0.py +85 -0
  178. ember_cfd-0.1.0a1/tools/check_stale_build_artifacts.sh +29 -0
  179. ember_cfd-0.1.0a1/tools/compile_wilkes.sh +107 -0
  180. ember_cfd-0.1.0a1/tools/profile_main_loop.py +39 -0
  181. ember_cfd-0.1.0a1/uv.lock +2238 -0
@@ -0,0 +1,2 @@
1
+ [flake8]
2
+ extend-ignore = E501
@@ -0,0 +1,36 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+
14
+ - name: Install build dependencies
15
+ run: sudo apt-get update && sudo apt-get install -y gfortran ninja-build
16
+
17
+ - name: Install uv
18
+ uses: astral-sh/setup-uv@v5
19
+
20
+ - name: Install dependencies
21
+ run: uv sync --no-install-project
22
+
23
+ - name: Build wheel
24
+ run: uv build --wheel
25
+
26
+ - name: Install wheel
27
+ run: uv pip install --no-deps dist/*.whl
28
+
29
+ - name: Test
30
+ run: uv run --no-sync pytest tests
31
+
32
+ - name: Lint
33
+ run: uv run --no-sync ruff check src tests
34
+
35
+ - name: Check SPEC 0 compliance
36
+ run: uv run --no-sync python tools/check_spec0.py
@@ -0,0 +1,113 @@
1
+ name: Build wheels
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ build-wheels:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ with:
14
+ # setuptools-scm needs full history and tags to compute the version
15
+ fetch-depth: 0
16
+
17
+ - name: Build wheels
18
+ uses: pypa/cibuildwheel@v4.1.0
19
+
20
+ - name: Build sdist
21
+ run: pipx run build --sdist --outdir wheelhouse
22
+
23
+ - uses: actions/upload-artifact@v4
24
+ with:
25
+ name: wheels
26
+ path: |
27
+ wheelhouse/*.whl
28
+ wheelhouse/*.tar.gz
29
+
30
+ verify-install:
31
+ needs: build-wheels
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: actions/download-artifact@v4
35
+ with:
36
+ name: wheels
37
+ path: wheelhouse
38
+
39
+ - name: Start local package index
40
+ run: |
41
+ mkdir -p packages
42
+ pipx run --spec pypiserver pypi-server run -p 8080 -a . -P . packages &
43
+ # First run has to install pypiserver into a fresh pipx venv, so
44
+ # poll for readiness instead of assuming a fixed startup delay.
45
+ for i in $(seq 1 30); do
46
+ curl -sf http://localhost:8080/simple/ && break
47
+ sleep 1
48
+ done
49
+ curl -sf http://localhost:8080/simple/
50
+
51
+ - name: Publish wheels to local index
52
+ run: pipx run twine upload --repository-url http://localhost:8080/ -u x -p x wheelhouse/*.whl
53
+
54
+ - name: Install from local index
55
+ run: |
56
+ python -m venv verify-venv
57
+ verify-venv/bin/pip install --index-url http://localhost:8080/simple/ ember-cfd
58
+
59
+ - name: Smoke test the installed wheel
60
+ run: |
61
+ verify-venv/bin/python -c "from ember.fortran import set_residual; print('OK')"
62
+
63
+ publish-testpypi:
64
+ needs: verify-install
65
+ runs-on: ubuntu-latest
66
+ environment: testpypi
67
+ permissions:
68
+ id-token: write
69
+ steps:
70
+ - uses: actions/download-artifact@v4
71
+ with:
72
+ name: wheels
73
+ path: wheelhouse
74
+
75
+ - name: Publish to TestPyPI
76
+ uses: pypa/gh-action-pypi-publish@release/v1
77
+ with:
78
+ repository-url: https://test.pypi.org/legacy/
79
+ packages-dir: wheelhouse/
80
+ # Re-running a tag must not fail here just because TestPyPI already
81
+ # holds that version; publish-pypi is gated on this job succeeding.
82
+ skip-existing: true
83
+
84
+ - name: Install from TestPyPI
85
+ run: |
86
+ python -m venv testpypi-venv
87
+ # Dependencies (numpy, h5py, ...) generally aren't published on
88
+ # TestPyPI, so fall back to real PyPI for anything it's missing.
89
+ testpypi-venv/bin/pip install \
90
+ --index-url https://test.pypi.org/simple/ \
91
+ --extra-index-url https://pypi.org/simple/ \
92
+ ember-cfd
93
+
94
+ - name: Smoke test the installed package
95
+ run: |
96
+ testpypi-venv/bin/python -c "from ember.fortran import set_residual; print('OK')"
97
+
98
+ publish-pypi:
99
+ needs: publish-testpypi
100
+ runs-on: ubuntu-latest
101
+ environment: pypi
102
+ permissions:
103
+ id-token: write
104
+ steps:
105
+ - uses: actions/download-artifact@v4
106
+ with:
107
+ name: wheels
108
+ path: wheelhouse
109
+
110
+ - name: Publish to PyPI
111
+ uses: pypa/gh-action-pypi-publish@release/v1
112
+ with:
113
+ packages-dir: wheelhouse/
@@ -0,0 +1,59 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+ .coverage
9
+
10
+ examples/.ipynb_checkpoints
11
+
12
+ # Virtual environments
13
+ .venv
14
+
15
+ # Claude Code project instructions
16
+ CLAUDE.md
17
+ .claude/
18
+
19
+ *so
20
+ *.mod
21
+
22
+ # Editable install directory
23
+ /ember/
24
+
25
+ # Benchmark scripts
26
+ benchmark_*.py
27
+
28
+ doc/_build/
29
+ doc/_static/
30
+ docs/_build/
31
+
32
+ # sphinx-gallery generated output. plot_*.py examples are cheap and always
33
+ # regenerated, so their output stays ignored. run_*.py examples are expensive
34
+ # (see examples/README.txt) -- their generated output is committed so RTD and
35
+ # other clean-clone builds reuse it via sphinx-gallery's md5 cache instead of
36
+ # re-running the example; run `make docs-full` and `git add` the results
37
+ # after changing a run_*.py example.
38
+ docs/auto_examples/*
39
+ !docs/auto_examples/run_*
40
+ !docs/auto_examples/images
41
+ docs/auto_examples/images/*
42
+ !docs/auto_examples/images/sphx_glr_run_*.png
43
+ !docs/auto_examples/images/thumb
44
+ docs/auto_examples/images/thumb/*
45
+ !docs/auto_examples/images/thumb/sphx_glr_run_*.png
46
+ docs/sg_execution_times.rst
47
+
48
+ *.pkl
49
+ for-reference/
50
+
51
+ # Reference papers, profiler dumps, Fortran sources
52
+ *.pdf
53
+ *.lprof
54
+ *.f
55
+
56
+ # Archived/untracked scratch scripts and study outputs
57
+ archive/
58
+
59
+ matplotlibrc
@@ -0,0 +1,72 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v6.0.0
4
+ hooks:
5
+ - id: trailing-whitespace
6
+ - id: end-of-file-fixer
7
+ - id: check-merge-conflict
8
+ - id: check-yaml
9
+ - id: check-toml
10
+ - id: debug-statements
11
+
12
+ - repo: local
13
+ hooks:
14
+ - id: check-fortran
15
+ name: check fortran syntax
16
+ entry: tools/check_compile.sh
17
+ language: script
18
+ files: \.f90$
19
+ pass_filenames: false
20
+
21
+ - id: check-no-typing
22
+ name: check no type annotations
23
+ entry: tools/check_no_typing.sh
24
+ language: script
25
+ files: ^src/ember/.*\.py$
26
+ pass_filenames: false
27
+
28
+ - id: check-dead-code
29
+ name: check dead code
30
+ entry: tools/check_dead_code.sh
31
+ language: script
32
+ pass_filenames: false
33
+
34
+ - id: check-stale-build-artifacts
35
+ name: check stale build artifacts
36
+ entry: tools/check_stale_build_artifacts.sh
37
+ language: script
38
+ pass_filenames: false
39
+
40
+ - id: check-member-order
41
+ name: check class member order
42
+ entry: uv run python tools/check_member_order.py
43
+ language: system
44
+ files: ^src/ember/.*\.py$
45
+ pass_filenames: true
46
+
47
+ - id: run-tests
48
+ name: run tests
49
+ entry: uv run pytest tests -q --tb=short
50
+ language: system
51
+ pass_filenames: false
52
+ always_run: true
53
+
54
+ - id: build-docs
55
+ name: build docs
56
+ entry: tools/build_docs.sh
57
+ language: script
58
+ files: ^(docs/.*|src/ember/.*\.py)$
59
+ pass_filenames: false
60
+
61
+ - id: no-claude-in-commit-msg
62
+ name: no Claude in commit message
63
+ entry: tools/check_no_claude_commit_msg.sh
64
+ language: script
65
+ stages: [commit-msg]
66
+
67
+ - repo: https://github.com/astral-sh/ruff-pre-commit
68
+ rev: v0.12.8
69
+ hooks:
70
+ - id: ruff-check
71
+ args: [--fix]
72
+ - id: ruff-format
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,24 @@
1
+ # Read the Docs configuration file
2
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3
+
4
+ # Required
5
+ version: 2
6
+
7
+ # Set the OS, Python version, and other tools you might need
8
+ build:
9
+ os: ubuntu-24.04
10
+ tools:
11
+ python: "3.13"
12
+ # gfortran is required to compile the Fortran extension module from
13
+ # source (there are no prebuilt wheels to install here).
14
+ apt_packages:
15
+ - gfortran
16
+ jobs:
17
+ install:
18
+ # dependency-groups support (--group) needs pip>=25.1
19
+ - pip install --upgrade pip
20
+ - pip install --group docs -e .
21
+
22
+ # Build documentation in the "docs/" directory with Sphinx
23
+ sphinx:
24
+ configuration: docs/conf.py