Skip to content

Nature Unit Tests #7446

Nature Unit Tests

Nature Unit Tests #7446

Workflow file for this run

# This code is part of a Qiskit project.
#
# (C) Copyright IBM 2021, 2024.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.
name: Nature Unit Tests
on:
push:
branches:
- main
- 'stable/**'
pull_request:
branches:
- main
- 'stable/**'
schedule:
# run every day at 1AM
- cron: '0 1 * * *'
concurrency:
group: ${{ github.repository }}-${{ github.ref }}-${{ github.head_ref }}-${{ github.workflow }}
cancel-in-progress: true
jobs:
Checks:
if: github.repository_owner == 'qiskit-community'
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
python-version: [3.8]
steps:
- name: Print Concurrency Group
env:
CONCURRENCY_GROUP: ${{ github.repository }}-${{ github.ref }}-${{ github.head_ref }}-${{ github.workflow }}
run: |
echo -e "\033[31;1;4mConcurrency Group\033[0m"
echo -e "$CONCURRENCY_GROUP\n"
shell: bash
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: |
setup.py
requirements.txt
requirements-dev.txt
- name: Create conda environment
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda create -y -n psi4env python=${{ matrix.python-version }}
shell: bash
- uses: ./.github/actions/install-main-dependencies
with:
os: ${{ matrix.os }}
python-version: ${{ matrix.python-version }}
use-conda: "true"
qiskit-main: "false"
if: ${{ !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }}
- uses: ./.github/actions/install-nature
with:
use-conda: "true"
- name: Install Dependencies
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
sudo apt-get install -y pandoc
sudo apt-get -y install python3-enchant
sudo apt-get -y install hunspell-en-us
pip install pyenchant
# append to reno config
echo "earliest_version: 0.1.0" >> releasenotes/config.yaml
# disable a PySCF UserWarning w.r.t. a change in the B3LYP DFT functional
echo "B3LYP_WITH_VWN5 = True" >> ~/.pyscf_conf.py
shell: bash
- name: Set up problem matches
run: |
echo "::add-matcher::./.github/problem_matchers/copyright.json"
echo "::add-matcher::./.github/problem_matchers/spell.json"
echo "::add-matcher::./.github/problem_matchers/black.json"
- name: PIP Check
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
pip check
if: ${{ !cancelled() }}
shell: bash
- name: Copyright Check
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
python tools/check_copyright.py -check
if: ${{ !cancelled() }}
shell: bash
- name: Spell Check
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
make spell
if: ${{ !cancelled() }}
shell: bash
- name: Style Check
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
make clean_sphinx
make style
if: ${{ !cancelled() }}
shell: bash
- name: Run make html
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
make clean_sphinx
make html
cd docs/_build/html
mkdir artifacts
tar -zcvf artifacts/documentation.tar.gz --exclude=./artifacts .
if: ${{ !cancelled() }}
shell: bash
- name: Run upload documentation
uses: actions/upload-artifact@v4
with:
name: documentation
path: docs/_build/html/artifacts/documentation.tar.gz
if: ${{ !cancelled() }}
- name: Doctest
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
make doctest
if: ${{ !cancelled() }}
shell: bash
Nature:
if: github.repository_owner == 'qiskit-community'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: [3.8, 3.9, '3.10', 3.11, 3.12]
include:
- os: macos-latest
python-version: 3.8
- os: macos-latest
python-version: 3.12
- os: windows-latest
python-version: 3.8
- os: windows-latest
python-version: 3.12
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: |
setup.py
requirements.txt
requirements-dev.txt
- name: Create conda environment
run: |
if [ "${{ matrix.os }}" == "macos-latest" ]; then
sudo chown -R $USER: "$CONDA"
fi
source "$CONDA/etc/profile.d/conda.sh"
if [ "${{ matrix.python-version }}" >= "3.11" ]; then
conda create -y -n psi4env python=${{ matrix.python-version }} -c conda-forge
else
conda create -y -n psi4env python=${{ matrix.python-version }}
fi
shell: bash
- name: Install PSI4
uses: ./.github/actions/install-psi4
with:
os: ${{ matrix.os }}
python-version: ${{ matrix.python-version }}
- uses: ./.github/actions/install-main-dependencies
with:
os: ${{ matrix.os }}
python-version: ${{ matrix.python-version }}
use-conda: "true"
if: ${{ !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }}
- uses: ./.github/actions/install-nature
with:
use-conda: "true"
- name: Set up problem matches
run: |
echo "::add-matcher::./.github/problem_matchers/pylint.json"
echo "::add-matcher::./.github/problem_matchers/mypy.json"
if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == 3.8 }}
- name: Run lint
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
make lint
shell: bash
- name: Run mypy
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
make mypy
if: ${{ !cancelled() }}
shell: bash
- name: Stestr Cache
uses: actions/cache@v4
with:
path: |
.stestr
.stestr1
key: stestr-${{ matrix.os }}-${{ matrix.python-version }}-${{ github.run_id }}-${{ github.run_number }}-${{ github.run_attempt }}
restore-keys: |
stestr-${{ matrix.os }}-${{ matrix.python-version }}-
stestr-${{ matrix.os }}-
if: ${{ !cancelled() }}
- name: Nature Unit Tests under Python ${{ matrix.python-version }}
uses: ./.github/actions/run-tests
with:
os: ${{ matrix.os }}
event-name: ${{ github.event_name }}
run-slow: ${{ contains(github.event.pull_request.labels.*.name, 'run_slow') }}
python-version: ${{ matrix.python-version }}
if: ${{ !cancelled() }}
- name: Deprecation Messages
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
mkdir ./ci-artifact-data
python tools/extract_deprecation.py -file out.txt -output ./ci-artifact-data/nat.dep
shell: bash
- name: Coverage combine
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
coverage3 combine
mv .coverage ./ci-artifact-data/nat.dat
if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == 3.8 }}
shell: bash
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}-${{ matrix.python-version }}
path: ./ci-artifact-data/*
- name: Nature Unit Tests without matplotlib/pyscf/psi4/sparse/opt_einsum under Python ${{ matrix.python-version }}
env:
PYTHONWARNINGS: default
run: |
source "$CONDA/etc/profile.d/conda.sh"
conda activate psi4env
pip uninstall -y matplotlib pyscf sparse opt_einsum
echo 'Uninstall psi4'
conda remove -y --force psi4
if [ "${{ github.event_name }}" == "schedule" ] || [ "${{ contains(github.event.pull_request.labels.*.name, 'run_slow') }}" == "true" ]; then
export QISKIT_TESTS="run_slow"
fi
mkdir -p ./.stestr1
stestr --test-path test --repo-url .stestr1 run
if: ${{ !cancelled() }}
shell: bash
Tutorials:
if: github.repository_owner == 'qiskit-community'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: [3.8, 3.12]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: |
setup.py
requirements.txt
requirements-dev.txt
- uses: ./.github/actions/install-main-dependencies
with:
os: ${{ matrix.os }}
python-version: ${{ matrix.python-version }}
use-conda: "false"
if: ${{ !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }}
- uses: ./.github/actions/install-nature
with:
use-conda: "false"
- name: Install Dependencies
run: |
pip install jupyter
sudo apt-get install -y pandoc
echo "earliest_version: 0.1.0" >> releasenotes/config.yaml
# disable a PySCF UserWarning w.r.t. a change in the B3LYP DFT functional
echo "B3LYP_WITH_VWN5 = True" >> ~/.pyscf_conf.py
shell: bash
- name: Run Qiskit Nature Tutorials
env:
QISKIT_PARALLEL: False
QISKIT_DOCS_BUILD_TUTORIALS: 'always'
run: |
make html
cd docs/_build/html
mkdir artifacts
tar -zcvf artifacts/tutorials.tar.gz --exclude=./artifacts .
shell: bash
- name: Run upload tutorials
uses: actions/upload-artifact@v4
with:
name: tutorials${{ matrix.python-version }}
path: docs/_build/html/artifacts/tutorials.tar.gz
- name: Run stable tutorials
env:
QISKIT_PARALLEL: False
QISKIT_DOCS_BUILD_TUTORIALS: 'always'
run: |
# clean last sphinx output
make clean_sphinx
# get current version
version=$(pip show qiskit-nature | awk -F. '/^Version:/ { print substr($1,10), $2-1 }' OFS=.)
# download stable version
wget https://codeload.github.com/qiskit-community/qiskit-nature/zip/stable/$version -O /tmp/repo.zip
unzip /tmp/repo.zip -d /tmp/
# copy stable tutorials to main tutorials
cp -R /tmp/qiskit-nature-stable-$version/docs/tutorials/* docs/tutorials
# run tutorials and zip results
echo "earliest_version: 0.1.0" >> releasenotes/config.yaml
# ignore unreleased/untagged notes
tools/ignore_untagged_notes.sh
make html
cd docs/_build/html
mkdir artifacts
tar -zcvf artifacts/tutorials.tar.gz --exclude=./artifacts .
if: ${{ matrix.python-version == 3.8 && !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }}
shell: bash
- name: Run upload stable tutorials
uses: actions/upload-artifact@v4
with:
name: tutorials-stable${{ matrix.python-version }}
path: docs/_build/html/artifacts/tutorials.tar.gz
if: ${{ matrix.python-version == 3.8 && !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }}
Deprecation_Messages_and_Coverage:
if: github.repository_owner == 'qiskit-community'
needs: [Checks, Nature, Tutorials]
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.8]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: actions/download-artifact@v4
with:
name: ubuntu-latest-3.8
path: /tmp/u38
- uses: actions/download-artifact@v4
with:
name: ubuntu-latest-3.9
path: /tmp/u39
- uses: actions/download-artifact@v4
with:
name: ubuntu-latest-3.10
path: /tmp/u310
- uses: actions/download-artifact@v4
with:
name: ubuntu-latest-3.11
path: /tmp/u311
- uses: actions/download-artifact@v4
with:
name: ubuntu-latest-3.12
path: /tmp/u312
- uses: actions/download-artifact@v4
with:
name: macos-latest-3.8
path: /tmp/m38
- uses: actions/download-artifact@v4
with:
name: macos-latest-3.12
path: /tmp/m312
- uses: actions/download-artifact@v4
with:
name: windows-latest-3.8
path: /tmp/w38
- uses: actions/download-artifact@v4
with:
name: windows-latest-3.12
path: /tmp/w312
- name: Install Dependencies
run: pip install -U coverage coveralls diff-cover
shell: bash
- name: Combined Deprecation Messages
run: |
sort -f -u /tmp/u38/nat.dep /tmp/u39/nat.dep /tmp/u310/nat.dep /tmp/u311/nat.dep /tmp/u312/nat.dep /tmp/m38/nat.dep /tmp/m312/nat.dep /tmp/w38/nat.dep /tmp/w312/nat.dep || true
shell: bash
- name: Coverage combine
run: coverage3 combine /tmp/u38/nat.dat
shell: bash
- name: Upload to Coveralls
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: coveralls --service=github
shell: bash