diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index b0cdcc8..20b9ef4 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -26,4 +26,5 @@ jobs: - name: Run tests run: | + # pixi run pytest -n auto -v src/mechdriver/tests/ pixi run pytest -v src/mechdriver/tests/ diff --git a/.gitignore b/.gitignore index 883d7cb..7076e33 100644 --- a/.gitignore +++ b/.gitignore @@ -117,3 +117,6 @@ __pycache__/ # rattler-build output output/ build/ + +# Log files +*.log diff --git a/README.md b/README.md index 58666d0..06d50ff 100644 --- a/README.md +++ b/README.md @@ -90,25 +90,79 @@ pixi run node csed-0001 out.log "g16 run.inp run.out" # run Gaussian ## Test +Testing MechDriver is a two-step process. First, electronic structure calculations are +run in parallel on a local cluster (requires SSH node access; currently not interfaced +to a workload manager). Then, an end-to-end workflow is run with the filesystem database +from step 1. This second step can be done locally and also runs on GitHub Actions. + ### Step 1: Generate Electronic Structure Data -The data generated here is compressed and stored in the MechDriver repository to be used -on step 2. +#### Run local tests + +Local tests can be run with the following command. +``` +pixi run test local <...> &> test.log & +``` +The nodes can be individually named or expanded as a Bash sequence, e.g. +`csed-00{09..12}`. The species/reaction-specific subtasks are parallelized across the +given nodes for each task. Unfortunately, this means that all jobs for a given task +must complete before the workflow can move on to the next one. + +At the end of the run, the data from the local test run will be zipped into `.tgz` +archive for use in GitHub Actions workflow testing (see below). This archive will +include a `provenance.yaml` file recording the current commit hash of each repository. +To make sure the latter is accurate, you will be prevented from running tests if you +have uncommitted changes in one or more Python files. + +#### Check progress + +You can check the progress of a local test run as follows. +``` +pixi run test status ``` -pixi run test setup # create clean run directories -pixi run test els # run data generation on a node, e.g. csed-0005 -pixi run test status # check data generation progress +This will display a table showing the status of your jobs and generate a set of +`check_.log` files, containing the paths to any jobs that do not have an `OK` +status (including running jobs), as well as the last line of the job log file. +This file is designed to be easily grep-able: +``` +grep "~conf_energy" check_quick.log # See paths +grep "~conf_energy" -A 1 check_quick.log # See paths and last lines ``` -### Step 2: Run End-to-end Workflow with Existing Electronic Structure Data +#### Signature required -This step uses the data from step 1 to run an end-to-end workflow with the code. +Once the local tests have completed, you **must** run the following command to "sign" +the test run. +Make sure your Git username is configured before you do this. [^4] ``` -pytest -v src/mechdriver/tests/ +pixi run test sign ``` -Although this works with old data, step 1 should be regularly re-run to catch any bugs -related to electronic structure data generation. -This is currently an honor system. +This will create a `signature.yaml` file in the test directory containing your Git +username and the commit hashes of each AutoMech module. + +To confirm that the tests are up to date, the GitHub Actions workflow checks that these +commit hashes match the current ones on GitHub (excluding "Merge pull request" commits). +Note that this means you will need to merge any changes to the lower-level modules +**before** merging changes to MechDriver. + +#### What if I only made a small change? + +If you only made a small change, or made changes that you are confident will not affect +the tested functionality, you can do the last step (signing) *without* re-running the +local tests. +This time, when you run `pixi run test sign`, you will be prompted to approve the +additional commits to each module relative to the tested version. +The record of these additional changes will be included in the `signature.yaml` file. + + +### Step 2: End-to-end Workflow Test with Step 1 Data + +Once the local tests have been run, you can use the following command to run an +end-to-end workflow test using the electronic structure data generated above.[^5] +``` +pytest -n auto -v src/mechdriver/tests/ +``` +This is the same command that will be run on GitHub Actions. ## Contribute @@ -252,3 +306,7 @@ gets out of sync, i.e. `pixi run update upstream dev --force`. [^3]: This script simply runs `git status` in each repository. If you want to run a different command, you can pass it as an argument, i.e. `pixi run git branch -v` to see which branches are checked out. + +[^4]: The command to configure your git username is `git config --global user.name ""` + +[^5]: The `-n auto` option runs these tests in parallel. diff --git a/pixi.lock b/pixi.lock index ab5e6b6..5e9282f 100644 --- a/pixi.lock +++ b/pixi.lock @@ -345,11 +345,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/98/318351f17c4c2f59b7d7fc8280fc95c0159357732a26cc6b33de0aeca44d/astroid-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/89/294c9a6b6c75a08da55e9d05321d0707e9418735e3062b12ef0f54c33474/black-24.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/7d/7f8df0fdbbbefc4362d3eca6b69b7a8a4249a8a88dabc00a207d31fddcd7/black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/7a/cef76fd8438a42f96db64ddaa85280485a9c395e7df3db8158cfec1eee34/dill-0.3.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/f0/48285f0262fe47103a4a45972ed2f9b93e4c80b8fd609fa98da78b2a5706/filelock-3.15.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/6c/a4f39abe7f19600b74528d0c717b52fff0b300bb0161081510d39c53cb00/identify-2.6.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl @@ -359,7 +360,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/f7/8a4dcea720a581e69ac8c5a38524baf0e3e2bb5f3819a9ff661464fe7d10/mdit_py_plugins-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2b/ee/d53a3d4792a09b6cd757978951d6dcf8b10825a8b8522b68e9b5eb53b9a1/mypy-1.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/a0/684ebd636f258bdd263b12be46dd4e1ed33ac73a76d590b209c026e3c65f/mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/de/21aa8394f16add8f7427f0a1326ccd2b3a2a8a3245c9252bc5ac034c6155/myst_parser-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl @@ -370,7 +371,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/d3/c622950d87a2ffd1654208733b5bd1c5645930014abed8f4c0d74863988b/pydata_sphinx_theme-0.15.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/ff/7f52c1461d8ceaefa989d2700a027f84427879bb7571145bbffdec5d5f4a/pylint-3.2.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/e7/81ebdd666d3bff6670d27349b5053605d83d55548e6bd5711f3b0ae7dd23/pytest-8.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cd/2d/af3ed295223c7fbb5e9b465e1243dff0f901964dc3c7ee6093c76e2dee5f/ruff-0.5.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/6d/82/1d96bf03ee4c0fdc3c0cbe61470070e659ca78dc0086fb88b66c185e2449/pytest_xdist-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/d8/537923e6cb27c835b7991f0f0caeb85191aed744a0d808bc71ad598f9df2/ruff-0.5.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/da/674dc189391b3fb3d92a957d7366a73eb58b3bbbf0a882f5c7814fcd5f02/sphinx-7.4.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/a6/fd554bc33ab0fd3ea28dc3cef7d0c3fdd3b97ff57e9bab5b0bd1c00d9968/sphinx_autodoc_typehints-2.2.3-py3-none-any.whl @@ -695,11 +697,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c7/81/f49fae71340af02a6014278517c36449bdd8e8b792f4ef7397f3b054f460/astroid-3.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/89/294c9a6b6c75a08da55e9d05321d0707e9418735e3062b12ef0f54c33474/black-24.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/7d/7f8df0fdbbbefc4362d3eca6b69b7a8a4249a8a88dabc00a207d31fddcd7/black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/7a/cef76fd8438a42f96db64ddaa85280485a9c395e7df3db8158cfec1eee34/dill-0.3.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/f0/48285f0262fe47103a4a45972ed2f9b93e4c80b8fd609fa98da78b2a5706/filelock-3.15.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f7/d3/d31b7fe744a3b2e6c51ea04af6575d1583deb09eb33cecfc99fa7644a725/identify-2.5.36-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl @@ -709,7 +712,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/f7/8a4dcea720a581e69ac8c5a38524baf0e3e2bb5f3819a9ff661464fe7d10/mdit_py_plugins-0.4.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2b/ee/d53a3d4792a09b6cd757978951d6dcf8b10825a8b8522b68e9b5eb53b9a1/mypy-1.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/a0/684ebd636f258bdd263b12be46dd4e1ed33ac73a76d590b209c026e3c65f/mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e2/de/21aa8394f16add8f7427f0a1326ccd2b3a2a8a3245c9252bc5ac034c6155/myst_parser-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl @@ -720,7 +723,8 @@ environments: - pypi: https://files.pythonhosted.org/packages/e7/d3/c622950d87a2ffd1654208733b5bd1c5645930014abed8f4c0d74863988b/pydata_sphinx_theme-0.15.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/ff/7f52c1461d8ceaefa989d2700a027f84427879bb7571145bbffdec5d5f4a/pylint-3.2.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/e7/81ebdd666d3bff6670d27349b5053605d83d55548e6bd5711f3b0ae7dd23/pytest-8.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/9a/dde343d95ecd0747207e4e8d143c373ef961cbd6b78c61a659f67582dbd2/ruff-0.5.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/6d/82/1d96bf03ee4c0fdc3c0cbe61470070e659ca78dc0086fb88b66c185e2449/pytest_xdist-3.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/af/79/8a57016a761d11491b913460a3d1545cdbe96dca6acb1279102814c9147b/ruff-0.5.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ed/dc/c02e01294f7265e63a7315fe086dd1df7dacb9f840a804da846b96d01b96/snowballstemmer-2.2.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b4/fa/130c32ed94cf270e3d0b9ded16fb7b2c8fea86fa7263c29a696a30c1dde7/sphinx-7.3.7-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d2/56/7d40865aa7279ca4a1c698c95c5a5b1f38deaad859c89be01f8043744e4d/sphinx_autodoc_typehints-2.2.2-py3-none-any.whl @@ -1143,8 +1147,8 @@ packages: - kind: pypi name: black version: 24.4.2 - url: https://files.pythonhosted.org/packages/0f/89/294c9a6b6c75a08da55e9d05321d0707e9418735e3062b12ef0f54c33474/black-24.4.2-py3-none-any.whl - sha256: d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c + url: https://files.pythonhosted.org/packages/e0/7d/7f8df0fdbbbefc4362d3eca6b69b7a8a4249a8a88dabc00a207d31fddcd7/black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063 requires_dist: - click>=8.0.0 - mypy-extensions>=0.4.3 @@ -1154,7 +1158,7 @@ packages: - tomli>=1.1.0 ; python_full_version < '3.11' - typing-extensions>=4.0.1 ; python_full_version < '3.11' - colorama>=0.4.3 ; extra == 'colorama' - - aiohttp!=3.9.0,>=3.7.4 ; implementation_name == 'pypy' and sys_platform == 'win32' and extra == 'd' + - aiohttp>=3.7.4,!=3.9.0 ; implementation_name == 'pypy' and sys_platform == 'win32' and extra == 'd' - aiohttp>=3.7.4 ; (implementation_name != 'pypy' and extra == 'd') or (sys_platform != 'win32' and extra == 'd') - ipython>=7.8.0 ; extra == 'jupyter' - tokenize-rt>=3.2.0 ; extra == 'jupyter' @@ -1749,6 +1753,17 @@ packages: - pkg:pypi/exceptiongroup?source=conda-forge-mapping size: 20418 timestamp: 1720869435725 +- kind: pypi + name: execnet + version: 2.1.1 + url: https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl + sha256: 26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc + requires_dist: + - hatch ; extra == 'testing' + - pre-commit ; extra == 'testing' + - pytest ; extra == 'testing' + - tox ; extra == 'testing' + requires_python: '>=3.8' - kind: conda name: executing version: 2.0.1 @@ -4958,8 +4973,8 @@ packages: - kind: pypi name: mypy version: 1.10.1 - url: https://files.pythonhosted.org/packages/2b/ee/d53a3d4792a09b6cd757978951d6dcf8b10825a8b8522b68e9b5eb53b9a1/mypy-1.10.1-py3-none-any.whl - sha256: 71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a + url: https://files.pythonhosted.org/packages/d5/a0/684ebd636f258bdd263b12be46dd4e1ed33ac73a76d590b209c026e3c65f/mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a requires_dist: - typing-extensions>=4.1.0 - mypy-extensions>=1.0.0 @@ -6020,28 +6035,6 @@ packages: - pkg:pypi/pydantic?source=hash-mapping size: 292538 timestamp: 1720293163725 -- kind: conda - name: pydantic-core - version: 2.20.1 - build: py310h42e942d_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.20.1-py310h42e942d_0.conda - sha256: 0645b2283b9fcc50d6f51891bc8c06f0db0ecb16beb177a4e42c98ae888e38d5 - md5: 51dcc27558e8cbe3aa6d3641cd78aa6d - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - typing-extensions >=4.6.0,!=4.7.0 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic-core?source=hash-mapping - size: 1602867 - timestamp: 1720041574812 - kind: conda name: pydantic-core version: 2.20.1 @@ -6142,9 +6135,9 @@ packages: sha256: 32cd6c042b5004b8e857d727708720c54a676d1e22917cf1a2df9b4d4868abd6 requires_dist: - platformdirs>=2.2.0 - - astroid<=3.3.0.dev0,>=3.2.2 - - isort!=5.13.0,<6,>=4.2.5 - - mccabe<0.8,>=0.6 + - astroid>=3.2.2,<=3.3.0.dev0 + - isort>=4.2.5,!=5.13.0,<6 + - mccabe>=0.6,<0.8 - tomlkit>=0.10.1 - typing-extensions>=3.10.0 ; python_full_version < '3.10' - dill>=0.2 ; python_full_version < '3.11' @@ -6245,7 +6238,7 @@ packages: requires_dist: - iniconfig - packaging - - pluggy<2.0,>=1.5 + - pluggy>=1.5,<2.0 - exceptiongroup>=1.0.0rc8 ; python_full_version < '3.11' - tomli>=1 ; python_full_version < '3.11' - colorama ; sys_platform == 'win32' @@ -6258,6 +6251,18 @@ packages: - setuptools ; extra == 'dev' - xmlschema ; extra == 'dev' requires_python: '>=3.8' +- kind: pypi + name: pytest-xdist + version: 3.6.1 + url: https://files.pythonhosted.org/packages/6d/82/1d96bf03ee4c0fdc3c0cbe61470070e659ca78dc0086fb88b66c185e2449/pytest_xdist-3.6.1-py3-none-any.whl + sha256: 9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7 + requires_dist: + - execnet>=2.1 + - pytest>=7.0.0 + - psutil>=3.0 ; extra == 'psutil' + - setproctitle ; extra == 'setproctitle' + - filelock ; extra == 'testing' + requires_python: '>=3.8' - kind: conda name: python version: 3.10.14 @@ -6940,14 +6945,14 @@ packages: - kind: pypi name: ruff version: 0.5.0 - url: https://files.pythonhosted.org/packages/28/9a/dde343d95ecd0747207e4e8d143c373ef961cbd6b78c61a659f67582dbd2/ruff-0.5.0.tar.gz - sha256: eb641b5873492cf9bd45bc9c5ae5320648218e04386a5f0c264ad6ccce8226a1 + url: https://files.pythonhosted.org/packages/af/79/8a57016a761d11491b913460a3d1545cdbe96dca6acb1279102814c9147b/ruff-0.5.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 81e5facfc9f4a674c6a78c64d38becfbd5e4f739c31fcd9ce44c849f1fad9e4c requires_python: '>=3.7' - kind: pypi name: ruff version: 0.5.3 - url: https://files.pythonhosted.org/packages/cd/2d/af3ed295223c7fbb5e9b465e1243dff0f901964dc3c7ee6093c76e2dee5f/ruff-0.5.3.tar.gz - sha256: 2a3eb4f1841771fa5b67a56be9c2d16fd3cc88e378bd86aaeaec2f7e6bcdd0a2 + url: https://files.pythonhosted.org/packages/5f/d8/537923e6cb27c835b7991f0f0caeb85191aed744a0d808bc71ad598f9df2/ruff-0.5.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 03bfe9ab5bdc0b08470c3b261643ad54ea86edc32b64d1e080892d7953add3ad requires_python: '>=3.7' - kind: conda name: scipy @@ -7683,13 +7688,13 @@ packages: url: https://files.pythonhosted.org/packages/07/4d/410156100224c5e2f0011d435e477b57aed9576fc7fe137abcf14ec16e11/virtualenv-20.26.3-py3-none-any.whl sha256: 8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589 requires_dist: - - distlib<1,>=0.3.7 - - filelock<4,>=3.12.2 + - distlib>=0.3.7,<1 + - filelock>=3.12.2,<4 - importlib-metadata>=6.6 ; python_full_version < '3.8' - - platformdirs<5,>=3.9.1 + - platformdirs>=3.9.1,<5 - furo>=2023.7.26 ; extra == 'docs' - proselint>=0.13 ; extra == 'docs' - - sphinx!=7.3,>=7.1.2 ; extra == 'docs' + - sphinx>=7.1.2,!=7.3 ; extra == 'docs' - sphinx-argparse>=0.4 ; extra == 'docs' - sphinxcontrib-towncrier>=0.2.1a0 ; extra == 'docs' - towncrier>=23.6 ; extra == 'docs' diff --git a/pixi.toml b/pixi.toml index cc9ad9b..6da2494 100644 --- a/pixi.toml +++ b/pixi.toml @@ -64,6 +64,7 @@ sphinx = "*" myst-parser = "*" sphinx-book-theme = "*" sphinx-autodoc-typehints = "*" +pytest-xdist = { version = ">=3.6.1, <4", extras = ["psutil"] } [feature.build.dependencies] cmake = ">=3.30.0,<3.31" diff --git a/scripts/test.py b/scripts/test.py index 078166a..6bd346c 100644 --- a/scripts/test.py +++ b/scripts/test.py @@ -1,6 +1,7 @@ #!/usr/bin/env python import os import shutil +import socket import subprocess import tarfile import textwrap @@ -68,7 +69,8 @@ def local(nodes: Sequence[str]): :param nodes: A comma-separted list of nodes """ - assert len(TESTS) == 1, "Not yet ready for more than one test." + print("Process ID:", os.getpid()) + print("Host name:", socket.gethostname()) # 1. Record the current repository versions check_for_uncommited_python_changes(throw_error=True)