Fixes for DMRG test suite and related bugs. #669
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Author(s): Minsik Cho, Shaun Weatherly | |
# Based on: https://docs.github.com/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-python | |
name: Do static analysis and run tests for quemb | |
on: | |
push: | |
branches: [ "main" ] | |
pull_request: | |
branches: [ "main" ] | |
permissions: | |
contents: read | |
jobs: | |
analysis: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: ["3.12"] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check trailing whitespace | |
# Idea taken from https://peter.eisentraut.org/blog/2014/11/04/checking-whitespace-with-git | |
# Windows uses different new line convention, thats why we exclude docs/make.bat | |
run: | | |
git diff-tree --check $(git hash-object -t tree /dev/null) HEAD -- '(exclude)docs/make.bat' | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Prepare pip | |
run: | | |
python -m pip install --upgrade pip | |
- uses: actions/cache@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: ${{ env.pythonLocation }}-${{ runner.OS }}-pip-cache-${{ hashFiles('setup.py') }}}}}} | |
- name: Install dependencies | |
run: | | |
pip install -r tests/static_analysis_requirements.txt | |
pip install . | |
- name: Check formatting | |
run: | | |
ruff format --diff | |
- name: Static analysis with ruff | |
run: | | |
ruff check . | |
- name: Static analysis with pylint | |
# ruff does nearly everything that we want from pylint | |
# except for detecting unresolved imports | |
# TODO: if they add it to ruff as well https://github.com/astral-sh/ruff/issues/9103 | |
# remove pylint. | |
run: | | |
pylint --disable=all --enable=E0401,R0401,E0611 . | |
- name: Static analysis with mypy | |
run: | | |
mypy tests/ example/ src/ | |
testsuite: | |
runs-on: ubuntu-latest | |
needs: analysis | |
strategy: | |
matrix: | |
python-version: ["3.10", "3.12"] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Restore pip Cache | |
id: restore-pip-cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: ${{ env.pythonLocation }}-${{ runner.OS }}-pip-cache-${{ hashFiles('setup.py') }}}} | |
- name: Install pip | |
if: steps.restore-pip-cache.outputs.cache-hit != 'true' | |
run: python -m pip install --upgrade pip | |
- name: Save pip Cache | |
if: steps.restore-pip-cache.outputs.cache-hit != 'true' | |
id: save-pip-cache | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: ${{ steps.restore-pip-cache.outputs.cache-primary-key }} | |
- name: Restore quemb Cache | |
id: restore-quemb-cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: ${{ env.pythonLocation }}-${{ runner.OS }}-quemb-cache-${{ hashFiles('setup.py') }}-${{ hashFiles('dev-requirements.txt') }}-${{ hashFiles('tests/test_requirements.txt') }}}} | |
- name: Install quemb | |
if: steps.restore-quemb-cache.outputs.cache-hit != 'true' | |
run: | | |
pip install -r tests/test_requirements.txt | |
pip install . | |
- name: Save quemb Cache | |
if: steps.restore-quemb-cache.outputs.cache-hit != 'true' | |
id: save-quemb-cache | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: ${{ steps.restore-quemb-cache.outputs.cache-primary-key }} | |
- name: Restore block2 Cache | |
id: restore-block2-cache | |
uses: actions/cache/restore@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: ${{ env.pythonLocation }}-${{ runner.OS }}-block2-cache-${{ hashFiles('setup.py') }}-${{ hashFiles('dev-requirements.txt') }}-${{ hashFiles('test_requirements.txt')}}}} | |
- name: Install block2 | |
if: steps.restore-block2-cache.outputs.cache-hit != 'true' | |
run: | | |
pip install git+https://github.com/pyscf/dmrgscf | |
pip install block2 --extra-index-url=https://block-hczhai.github.io/block2-preview/pypi/ | |
PYSCFHOME=$(pip show pyscf-dmrgscf | grep 'Location' | tr ' ' '\n' | tail -n 1) | |
cp src/quemb/shared/external/dmrgscf_settings.py ${PYSCFHOME}/pyscf/dmrgscf/settings.py | |
chmod +x ${PYSCFHOME}/pyscf/dmrgscf/nevpt_mpi.py | |
- name: Save block2 Cache | |
if: steps.restore-block2-cache.outputs.cache-hit != 'true' | |
id: save-block2-cache | |
uses: actions/cache/save@v4 | |
with: | |
path: ${{ env.pythonLocation }} | |
key: ${{ steps.restore-block2-cache.outputs.cache-primary-key }} | |
- name: Test with pytest | |
run: | | |
pip install . | |
cd tests | |
QUEMB_SKIP_EXPENSIVE_TESTS=true pytest --durations=0 --durations-min=1.0 --doctest-modules --junitxml=junit/quemb-test-results_${{ matrix.python-version }}.xml | |
# If --duration=0, pytest reports all tests that took longer than what was given with durations-min=[time in seconds] | |
- name: Upload pytest junit results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: quemb-test-results_${{ matrix.python-version }} | |
path: tests/junit/quemb-test-results_${{ matrix.python-version }}.xml |