Skip to content

Fixes for DMRG test suite and related bugs. #669

Fixes for DMRG test suite and related bugs.

Fixes for DMRG test suite and related bugs. #669

# 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