@@ -165,49 +165,10 @@ isolated = true
165165no-group = " dev"
166166type = " uv"
167167
168- [tool .poe .tasks .all ]
169- help = " Run all continuous integration (CI) tasks locally"
170- ignore_fail = " return_non_zero"
171- sequence = [
172- " benchmark" ,
173- " cov" ,
174- " docnb-force" ,
175- " linkcheck" ,
176- " style" ,
177- " test-all" ,
178- ]
179-
180- [tool .poe .tasks .benchmark ]
181- cmd = """
182- pytest benchmarks \
183- --benchmark-autosave \
184- --benchmark-json benchmarks/output.json \
185- --durations=0 \
186- -k benchmark
187- """
188- executor = {group = " test" }
189- help = " Run benchmark tests and visualize performance"
190-
191- [tool .poe .tasks .cov ]
192- cmd = """
193- pytest \
194- --cov=ampform \
195- --cov-fail-under=75 \
196- --cov-report=html \
197- --cov-report=xml \
198- --numprocesses=auto \
199- ${paths}
200- """
201- executor = {group = " test" }
202- help = " Compute how much of the source code is covered by tests"
203-
204- [[tool .poe .tasks .cov .args ]]
205- default = " src tests"
206- multiple = true
207- name = " paths"
208- positional = true
168+ [tool .poe .groups .doc ]
169+ heading = " Documentation"
209170
210- [tool .poe .tasks .doc ]
171+ [tool .poe .groups . doc . tasks .doc ]
211172cmd = """
212173sphinx-build \
213174 --builder=html \
@@ -221,7 +182,7 @@ env = {PYTHONWARNINGS = ""}
221182executor = {group = " doc" }
222183help = " Build documentation and API"
223184
224- [tool .poe .tasks .doclive ]
185+ [tool .poe .groups . doc . tasks .doclive ]
225186cmd = """
226187sphinx-autobuild \
227188 --builder=html \
@@ -249,28 +210,17 @@ sphinx-autobuild \
249210executor = {group = " doc" , with = " sphinx-autobuild" }
250211help = " Set up a server to directly preview changes to the HTML pages"
251212
252- [tool .poe .tasks .docnb ]
213+ [tool .poe .groups . doc . tasks .docnb ]
253214env = {EXECUTE_NB = " yes" }
254215help = " Build documentation and API with cached notebook execution"
255216sequence = [" doc" ]
256217
257- [tool .poe .tasks .docnb-force ]
258- env = {FORCE_EXECUTE_NB = " yes" }
259- help = " Build documentation and API with notebook execution (no cache)"
260- sequence = [" doc" ]
261-
262- [tool .poe .tasks .docnblive ]
218+ [tool .poe .groups .doc .tasks .docnblive ]
263219env = {EXECUTE_NB = " yes" }
264220help = " Set up a server to directly preview changes to the HTML pages with cached notebook execution"
265221sequence = [" doclive" ]
266222
267- [tool .poe .tasks .lab ]
268- args = [{name = " paths" , default = " " , positional = true }]
269- cmd = " jupyter lab ${paths}"
270- executor = {group = [" jupyter" , " notebooks" ]}
271- help = " Launch Jupyter Lab"
272-
273- [tool .poe .tasks .linkcheck ]
223+ [tool .poe .groups .doc .tasks .linkcheck ]
274224cmd = """
275225sphinx-build \
276226 --builder=linkcheck \
@@ -283,29 +233,60 @@ env = {PYTHONWARNINGS = ""}
283233executor = {group = " doc" }
284234help = " Check external links in the documentation (requires internet connection)"
285235
286- [tool .poe .tasks .nb ]
236+ [tool .poe .groups .notebook ]
237+ heading = " Notebooks"
238+
239+ [tool .poe .groups .notebook .tasks .lab ]
240+ args = [{name = " paths" , default = " " , positional = true }]
241+ cmd = " jupyter lab ${paths}"
242+ executor = {group = [" jupyter" , " notebooks" ]}
243+ help = " Launch Jupyter Lab"
244+
245+ [tool .poe .groups .notebook .tasks .nb ]
287246args = [{name = " paths" , default = " docs" , multiple = true , positional = true }]
288247cmd = " pytest --nbmake --nbmake-timeout=0 ${paths}"
289248executor = {group = " notebooks" , with = " nbmake" }
290249help = " Run all notebooks"
291250
292- [tool .poe .tasks .style ]
293- cmd = " pre-commit run --all-files"
294- executor = {extra = " scipy" , group = " style" }
295- help = " Perform all linting, formatting, and spelling checks"
251+ [tool .poe .groups .test ]
252+ heading = " Testing"
253+
254+ [tool .poe .groups .test .tasks .cov ]
255+ cmd = """
256+ pytest \
257+ --cov=ampform \
258+ --cov-fail-under=75 \
259+ --cov-report=html \
260+ --cov-report=xml \
261+ --numprocesses=auto \
262+ ${paths}
263+ """
264+ executor = {group = " test" }
265+ help = " Compute how much of the source code is covered by tests"
296266
297- [tool .poe .tasks .test ]
267+ [[tool .poe .groups .test .tasks .cov .args ]]
268+ default = " src tests"
269+ multiple = true
270+ name = " paths"
271+ positional = true
272+
273+ [tool .poe .groups .test .tasks .docnb-force ]
274+ env = {FORCE_EXECUTE_NB = " yes" }
275+ help = " Build documentation and API with notebook execution (no cache)"
276+ sequence = [" doc" ]
277+
278+ [tool .poe .groups .test .tasks .test ]
298279cmd = " pytest -m 'slow or not slow' --numprocesses=auto ${paths}"
299280executor = {group = " test" }
300281help = " Run all unit tests"
301282
302- [[tool .poe .tasks .test .args ]]
283+ [[tool .poe .groups . test . tasks .test .args ]]
303284default = " src tests"
304285multiple = true
305286name = " paths"
306287positional = true
307288
308- [tool .poe .tasks .test-all ]
289+ [tool .poe .groups . test . tasks .test-all ]
309290help = " Run all tests on each supported Python version"
310291sequence = [
311292 {ref = " test-py310 ${paths}" },
@@ -315,32 +296,68 @@ sequence = [
315296 {ref = " test-py314 ${paths}" },
316297]
317298
318- [[tool .poe .tasks .test-all .args ]]
299+ [[tool .poe .groups . test . tasks .test-all .args ]]
319300default = " "
320301multiple = true
321302name = " paths"
322303positional = true
323304
324- [tool .poe .tasks .test-py310 ]
305+ [tool .poe .groups . test . tasks .test-py310 ]
325306env = {UV_PYTHON = " 3.10" }
326307ref = " test"
327308
328- [tool .poe .tasks .test-py311 ]
309+ [tool .poe .groups . test . tasks .test-py311 ]
329310env = {UV_PYTHON = " 3.11" }
330311ref = " test"
331312
332- [tool .poe .tasks .test-py312 ]
313+ [tool .poe .groups . test . tasks .test-py312 ]
333314env = {UV_PYTHON = " 3.12" }
334315ref = " test"
335316
336- [tool .poe .tasks .test-py313 ]
317+ [tool .poe .groups . test . tasks .test-py313 ]
337318env = {UV_PYTHON = " 3.13" }
338319ref = " test"
339320
340- [tool .poe .tasks .test-py314 ]
321+ [tool .poe .groups . test . tasks .test-py314 ]
341322env = {UV_PYTHON = " 3.14" }
342323ref = " test"
343324
325+ [tool .poe .tasks .all ]
326+ help = " Run all continuous integration (CI) tasks locally"
327+ ignore_fail = " return_non_zero"
328+ sequence = [
329+ " benchmark" ,
330+ " cov" ,
331+ " docnb-force" ,
332+ " linkcheck" ,
333+ " style" ,
334+ " test-all" ,
335+ ]
336+
337+ [tool .poe .tasks .benchmark ]
338+ cmd = """
339+ pytest benchmarks \
340+ --benchmark-autosave \
341+ --benchmark-json benchmarks/output.json \
342+ --durations=0 \
343+ -k benchmark
344+ """
345+ executor = {group = " test" }
346+ help = " Run benchmark tests and visualize performance"
347+
348+ [tool .poe .tasks .style ]
349+ cmd = " pre-commit run --all-files"
350+ executor = {extra = " scipy" , group = " style" }
351+ help = " Perform all linting, formatting, and spelling checks"
352+
353+ [tool .poe .tasks .upgrade ]
354+ executor = {type = " simple" }
355+ help = " Upgrade lock files"
356+ parallel = [
357+ {cmd = " pre-commit autoupdate -j8" },
358+ {cmd = " uv lock --upgrade" },
359+ ]
360+
344361[tool .pytest ]
345362addopts = [
346363 " --color=yes" ,
@@ -573,6 +590,10 @@ rules.unresolved-attribute = "ignore"
573590include = [" docs/amplitude/interactive.ipynb" ]
574591rules.too-many-positional-arguments = " ignore"
575592
593+ [[tool .ty .overrides ]]
594+ include = [" docs/dynamics.ipynb" ]
595+ rules.index-out-of-bounds = " ignore"
596+
576597[[tool .ty .overrides ]]
577598include = [" tests/external/test_sympy.py" ]
578599rules.call-non-callable = " ignore"
0 commit comments