1
+ # /// script
2
+ # dependencies = ["nox>=2025.2.9"]
3
+ # ///
4
+
1
5
from __future__ import annotations
2
6
3
7
import argparse
4
8
from typing import Any
5
9
6
10
import nox
7
11
8
- nox .needs_version = ">=2024.4.15 "
12
+ nox .needs_version = ">=2025.2.9 "
9
13
nox .options .default_venv_backend = "uv|virtualenv"
10
14
11
15
12
- def _get_group (name : str , groups : dict [str , Any ]) -> list [str ]:
13
- group = groups [name ]
14
- return [d if isinstance (d , str ) else _get_group (d , groups ) for d in group ]
15
-
16
-
17
- def dependency_groups (pyproject : dict [str , Any ], * names : str ) -> list [str ]:
18
- groups = pyproject ["dependency-groups" ]
19
- return [item for name in names for item in _get_group (name , groups )]
20
-
21
-
22
16
@nox .session
23
17
def tests (session : nox .Session ) -> None :
24
18
"""
@@ -27,26 +21,28 @@ def tests(session: nox.Session) -> None:
27
21
opts = (
28
22
["--reinstall-package=boost-histogram" ] if session .venv_backend == "uv" else []
29
23
)
24
+ args = session .posargs or ["-n" , "auto" ]
30
25
pyproject = nox .project .load_toml ("pyproject.toml" )
31
- session .install (* dependency_groups (pyproject , "test" ))
26
+ session .install (* nox . project . dependency_groups (pyproject , "test" ))
32
27
session .install ("-v" , "." , * opts , silent = False )
33
- session .run ("pytest" , * session . posargs )
28
+ session .run ("pytest" , * args )
34
29
35
30
36
31
@nox .session (default = False )
37
32
def hist (session : nox .Session ) -> None :
38
33
"""
39
34
Run Hist's test suite
40
35
"""
36
+ args = session .posargs or ["-n" , "auto" ]
41
37
pyproject = nox .project .load_toml ("pyproject.toml" )
42
38
session .install ("." )
43
39
tmpdir = session .create_tmp ()
44
40
session .chdir (tmpdir )
45
41
session .run ("git" , "clone" , "https://github.com/scikit-hep/hist" , external = True )
46
42
session .chdir ("hist" )
47
- session .install ("." , * dependency_groups (pyproject , "test" , "plot" ))
43
+ session .install ("." , * nox . project . dependency_groups (pyproject , "test" , "plot" ))
48
44
session .run ("pip" , "list" )
49
- session .run ("pytest" , * session . posargs )
45
+ session .run ("pytest" , * args )
50
46
51
47
52
48
@nox .session (reuse_venv = True , default = False )
@@ -64,7 +60,7 @@ def docs(session: nox.Session) -> None:
64
60
serve = args .builder == "html" and session .interactive
65
61
66
62
extra_installs = ["sphinx-autobuild" ] if serve else []
67
- session .install (* dependency_groups (pyproject , "docs" ), * extra_installs )
63
+ session .install (* nox . project . dependency_groups (pyproject , "docs" ), * extra_installs )
68
64
69
65
shared_args = (
70
66
"-n" , # nitpicky mode
@@ -89,7 +85,7 @@ def build_api_docs(session: nox.Session) -> None:
89
85
"""
90
86
pyproject = nox .project .load_toml ("pyproject.toml" )
91
87
92
- session .install (* dependency_groups (pyproject , "docs" ))
88
+ session .install (* nox . project . dependency_groups (pyproject , "docs" ))
93
89
session .run (
94
90
"sphinx-apidoc" ,
95
91
"-o" ,
@@ -129,5 +125,9 @@ def make_pickle(session: nox.Session) -> None:
129
125
Make a pickle file for this version
130
126
"""
131
127
pyproject = nox .project .load_toml ("pyproject.toml" )
132
- session .install ("." , * dependency_groups (pyproject , "dev" ))
128
+ session .install ("." , * nox . project . dependency_groups (pyproject , "dev" ))
133
129
session .run ("python" , "tests/pickles/make_pickle.py" , * session .posargs )
130
+
131
+
132
+ if __name__ == "__main__" :
133
+ nox .main ()
0 commit comments