Add compile-time support for AVX2/512 streaming operations in LQ #4644
Workflow file for this run
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
name: Testing (Linux) | |
on: | |
workflow_call: | |
inputs: | |
lightning-version: | |
type: string | |
required: true | |
description: The version of Lightning to use. Valid values are either 'release' (most recent release candidate), 'stable' (most recent git-tag) or 'latest' (most recent commit from master) | |
pennylane-version: | |
type: string | |
required: true | |
description: The version of PennyLane to use. Valid values are either 'release' (most recent release candidate), 'stable' (most recent git-tag) or 'latest' (most recent commit from master) | |
pull_request: | |
push: | |
branches: | |
- master | |
env: | |
TF_VERSION: 2.10.0 | |
TORCH_VERSION: 1.11.0+cpu | |
COVERAGE_FLAGS: "--cov=pennylane_lightning --cov-report=term-missing --no-flaky-report -p no:warnings --tb=native" | |
GCC_VERSION: 11 | |
OMP_NUM_THREADS: "2" | |
OMP_PROC_BIND: "false" | |
concurrency: | |
group: tests_linux-${{ github.ref }}-${{ inputs.lightning-version }}-${{ inputs.pennylane-version }} | |
cancel-in-progress: true | |
jobs: | |
cpptests: | |
if: ${{ !contains(fromJSON('["schedule", "workflow_dispatch"]'), github.event_name) }} | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
pl_backend: ["lightning_qubit"] | |
timeout-minutes: 60 | |
name: C++ tests | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: | | |
echo ${{ github.event_name }} && sudo apt-get update && sudo apt-get -y -q install cmake gcc-$GCC_VERSION g++-$GCC_VERSION ninja-build gcovr lcov | |
python -m pip install scipy | |
- name: Build and run unit tests | |
run: | | |
cmake . -BBuild -G Ninja \ | |
-DCMAKE_BUILD_TYPE=Debug \ | |
-DBUILD_TESTS=ON \ | |
-DENABLE_PYTHON=OFF \ | |
-DPL_BACKEND=${{ matrix.pl_backend }} \ | |
-DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION) \ | |
-DENABLE_COVERAGE=ON | |
cmake . -BBuildKernelOMP -G Ninja \ | |
-DCMAKE_BUILD_TYPE=Debug \ | |
-DBUILD_TESTS=ON \ | |
-DENABLE_PYTHON=OFF \ | |
-DPL_BACKEND=${{ matrix.pl_backend }} \ | |
-DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION) \ | |
-DENABLE_COVERAGE=ON \ | |
-DLQ_ENABLE_KERNEL_OMP=ON | |
cmake . -BBuildKernelAVXStream -G Ninja \ | |
-DCMAKE_BUILD_TYPE=Debug \ | |
-DBUILD_TESTS=ON \ | |
-DENABLE_PYTHON=OFF \ | |
-DPL_BACKEND=${{ matrix.pl_backend }} \ | |
-DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION) \ | |
-DENABLE_COVERAGE=ON \ | |
-DLQ_ENABLE_KERNEL_AVX_STREAM=ON \ | |
-DLQ_ENABLE_KERNEL_OMP=ON | |
cmake --build ./Build | |
cmake --build ./BuildKernelOMP | |
cmake --build ./BuildKernelAVXStream | |
for d in Build BuildKernelOMP BuildKernelAVXStream; do | |
cd ./$d | |
mkdir -p ./tests/results | |
for file in *runner ; do ./$file --order lex --reporter junit --out ./tests/results/report_$file.xml; done; | |
lcov --directory . -b ../pennylane_lightning/core/src --capture --output-file coverage.info | |
lcov --remove coverage.info '/usr/*' --output-file coverage.info | |
cd .. | |
done | |
lcov --add-tracefile ./Build/coverage.info -a ./BuildKernelOMP/coverage.info \ | |
--add-tracefile ./BuildKernelAVXStream/coverage.info -o coverage.info | |
mv coverage.info coverage-${{ github.job }}-${{ matrix.pl_backend }}.info | |
- name: Upload test results | |
uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: ubuntu-tests-reports-${{ github.job }}-${{ matrix.pl_backend }} | |
path: | | |
./Build/tests/results/ | |
./BuildKernelOMP/tests/results/ | |
./BuildKernelAVXStream/tests/results/ | |
if-no-files-found: error | |
- name: Upload code coverage results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ubuntu-codecov-results-cpp | |
path: ./coverage-${{ github.job }}-${{ matrix.pl_backend }}.info | |
if-no-files-found: error | |
pythontests: | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
pl_backend: ["lightning_qubit"] | |
timeout-minutes: 60 | |
name: Python tests | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/setup-python@v4 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: true | |
path: main | |
- name: Switch to release build of Lightning | |
if: inputs.lightning-version == 'release' | |
run: | | |
cd main | |
git fetch --all | |
git checkout $(git branch -a --list "origin/v*rc*" | tail -1) | |
- name: Switch to stable build of Lightning | |
if: inputs.lightning-version == 'stable' | |
run: | | |
cd main | |
git fetch --tags --force | |
git checkout $(git tag | sort -V | tail -1) | |
git log -1 --format='%H' | |
git status | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install cmake gcc-$GCC_VERSION g++-$GCC_VERSION | |
python -m pip install scipy | |
- name: Get required Python packages | |
run: | | |
cd main | |
python -m pip install -r requirements-dev.txt | |
python -m pip install openfermionpyscf | |
- name: Checkout PennyLane for release build | |
if: inputs.pennylane-version == 'release' | |
uses: actions/checkout@v4 | |
with: | |
path: pennylane | |
repository: PennyLaneAI/pennylane | |
- name: Switch to release build of PennyLane | |
if: inputs.pennylane-version == 'release' | |
run: | | |
cd pennylane | |
git fetch --all | |
git checkout $(git branch -a --list "origin/v*rc*" | tail -1) | |
python -m pip uninstall -y pennylane && python -m pip install . -vv --no-deps | |
- name: Install Stable PennyLane | |
if: inputs.pennylane-version == 'stable' | |
run: | | |
cd main | |
python -m pip uninstall -y pennylane && python -m pip install -U pennylane | |
- name: Install ML libraries for interfaces | |
run: | | |
python -m pip install --upgrade torch==$TORCH_VERSION -f https://download.pytorch.org/whl/cpu/torch_stable.html | |
python -m pip install --upgrade "jax[cpu]" # This also installs jaxlib | |
python -m pip install --upgrade tensorflow~=$TF_VERSION keras~=$TF_VERSION | |
- name: Install backend device | |
run: | | |
cd main | |
CMAKE_ARGS="-DPL_BACKEND=${{ matrix.pl_backend }} -DLQ_ENABLE_KERNEL_OMP=ON -DENABLE_PYTHON=ON -DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION)" \ | |
python -m pip install -e . -vv | |
- name: Run PennyLane-Lightning unit tests | |
run: | | |
# TODO: Remove installing pytest-xdist with release v0.36.0 | |
python -m pip install pytest-xdist | |
cd main/ | |
DEVICENAME=`echo ${{ matrix.pl_backend }} | sed "s/_/./g"` | |
OMP_NUM_THREADS=1 PL_DEVICE=${DEVICENAME} python -m pytest -n auto tests/ -k "not unitary_correct" $COVERAGE_FLAGS | |
PL_DEVICE=${DEVICENAME} python -m pytest tests/ -k "unitary_correct" $COVERAGE_FLAGS --cov-append | |
pl-device-test --device ${DEVICENAME} --skip-ops --shots=20000 $COVERAGE_FLAGS --cov-append | |
pl-device-test --device ${DEVICENAME} --shots=None --skip-ops $COVERAGE_FLAGS --cov-append | |
mv .coverage .coverage-${{ github.job }}-${{ matrix.pl_backend }} | |
- name: Upload code coverage results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ubuntu-codecov-results-python | |
path: | | |
./main/.coverage-${{ github.job }}-${{ matrix.pl_backend }} | |
if-no-files-found: error | |
cpptestswithOpenBLAS: | |
if: ${{ !contains(fromJSON('["schedule", "workflow_dispatch"]'), github.event_name) }} | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
pl_backend: ["lightning_qubit"] | |
timeout-minutes: 60 | |
name: C++ tests (OpenBLAS) | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install cmake gcc-$GCC_VERSION g++-$GCC_VERSION libopenblas-dev ninja-build gcovr lcov | |
python -m pip install scipy | |
- name: Build and run unit tests | |
run: | | |
cmake . -BBuild -G Ninja \ | |
-DCMAKE_BUILD_TYPE=Debug \ | |
-DENABLE_PYTHON=OFF \ | |
-DENABLE_BLAS=ON \ | |
-DPL_BACKEND=${{ matrix.pl_backend }} \ | |
-DBUILD_TESTS=ON \ | |
-DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION) \ | |
-DENABLE_COVERAGE=ON | |
cmake --build ./Build | |
cd ./Build | |
mkdir -p ./tests/results | |
for file in *runner ; do ./$file --order lex --reporter junit --out ./tests/results/report_$file.xml; done; | |
lcov --directory . -b ../pennylane_lightning/core/src --capture --output-file coverage.info | |
lcov --remove coverage.info '/usr/*' --output-file coverage.info | |
mv coverage.info coverage-${{ github.job }}-${{ matrix.pl_backend }}.info | |
- name: Upload test results | |
uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: ubuntu-tests-reports-${{ github.job }}-${{ matrix.pl_backend }} | |
path: ./Build/tests/results/ | |
if-no-files-found: error | |
- name: Upload code coverage results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ubuntu-codecov-results-cpp | |
path: ./Build/coverage-${{ github.job }}-${{ matrix.pl_backend }}.info | |
if-no-files-found: error | |
pythontestswithOpenBLAS: | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
pl_backend: ["lightning_qubit"] | |
timeout-minutes: 60 | |
name: Python tests with OpenBLAS | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: true | |
path: main | |
- name: Switch to release build of Lightning | |
if: inputs.lightning-version == 'release' | |
run: | | |
cd main | |
git fetch --all | |
git checkout $(git branch -a --list "origin/v*rc*" | tail -1) | |
- name: Switch to stable build of Lightning | |
if: inputs.lightning-version == 'stable' | |
run: | | |
cd main | |
git fetch --tags --force | |
git checkout $(git tag | sort -V | tail -1) | |
git log -1 --format='%H' | |
git status | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install cmake gcc-$GCC_VERSION g++-$GCC_VERSION libopenblas-dev | |
python -m pip install scipy | |
- name: Get required Python packages | |
run: | | |
cd main | |
python -m pip install -r requirements-dev.txt | |
python -m pip install openfermionpyscf | |
- name: Checkout PennyLane for release build | |
if: inputs.pennylane-version == 'release' | |
uses: actions/checkout@v4 | |
with: | |
path: pennylane | |
repository: PennyLaneAI/pennylane | |
- name: Switch to release build of PennyLane | |
if: inputs.pennylane-version == 'release' | |
run: | | |
cd pennylane | |
git fetch --all | |
git checkout $(git branch -a --list "origin/v*rc*" | tail -1) | |
python -m pip uninstall -y pennylane && python -m pip install . -vv --no-deps | |
- name: Install Stable PennyLane | |
if: inputs.pennylane-version == 'stable' | |
run: | | |
cd main | |
python -m pip uninstall -y pennylane && python -m pip install -U pennylane | |
- name: Install ML libraries for interfaces | |
run: | | |
python -m pip install --upgrade torch==$TORCH_VERSION -f https://download.pytorch.org/whl/cpu/torch_stable.html | |
python -m pip install --upgrade "jax[cpu]" # This also installs jaxlib | |
python -m pip install --upgrade tensorflow~=$TF_VERSION keras~=$TF_VERSION | |
- name: Install backend device | |
run: | | |
cd main | |
python -m pip install scipy | |
CMAKE_ARGS="-DPL_BACKEND=${{ matrix.pl_backend }} -DENABLE_BLAS=ON -DENABLE_PYTHON=ON -DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION)" \ | |
python -m pip install -e . -vv | |
- name: Run PennyLane-Lightning unit tests | |
run: | | |
# TODO: Remove installing pytest-xdist with release v0.36.0 | |
python -m pip install pytest-xdist | |
cd main/ | |
DEVICENAME=`echo ${{ matrix.pl_backend }} | sed "s/_/./g"` | |
OMP_NUM_THREADS=1 PL_DEVICE=${DEVICENAME} python -m pytest -n auto tests/ -k "not unitary_correct and not test_native_mcm" $COVERAGE_FLAGS | |
PL_DEVICE=${DEVICENAME} python -m pytest tests/ -k "unitary_correct and not test_native_mcm" $COVERAGE_FLAGS --cov-append | |
pl-device-test --device ${DEVICENAME} --skip-ops --shots=20000 $COVERAGE_FLAGS --cov-append | |
pl-device-test --device ${DEVICENAME} --shots=None --skip-ops $COVERAGE_FLAGS --cov-append | |
mv .coverage .coverage-${{ github.job }}-${{ matrix.pl_backend }} | |
- name: Upload code coverage results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ubuntu-codecov-results-python | |
path: ./main/.coverage-${{ github.job }}-${{ matrix.pl_backend }} | |
if-no-files-found: error | |
build_and_cache_Kokkos: | |
name: "Build and cache Kokkos" | |
uses: ./.github/workflows/build_and_cache_Kokkos_linux.yml | |
with: | |
os: ubuntu-22.04 | |
cpptestswithKokkos: | |
if: ${{ !contains(fromJSON('["schedule", "workflow_dispatch"]'), github.event_name) }} | |
needs: [build_and_cache_Kokkos] | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
pl_backend: ["lightning_kokkos"] | |
exec_model: ${{ fromJson(needs.build_and_cache_Kokkos.outputs.exec_model) }} | |
kokkos_version: ${{ fromJson(needs.build_and_cache_Kokkos.outputs.kokkos_version) }} | |
timeout-minutes: 60 | |
name: C++ tests (Kokkos) | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
- name: Restoring cached dependencies | |
id: kokkos-cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ github.workspace}}/Kokkos_install/${{ matrix.exec_model }} | |
key: ${{ matrix.os }}-kokkos${{ matrix.kokkos_version }}-${{ matrix.exec_model }} | |
- name: Copy cached libraries | |
if: steps.kokkos-cache.outputs.cache-hit == 'true' | |
run: | | |
rm -rf Kokkos | |
mkdir Kokkos/ | |
cp -rf ${{ github.workspace}}/Kokkos_install/${{ matrix.exec_model }}/* Kokkos/ | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install cmake gcc-$GCC_VERSION g++-$GCC_VERSION ninja-build gcovr lcov | |
python -m pip install scipy | |
- name: Build and run unit tests | |
run: | | |
cmake . -BBuild -G Ninja \ | |
-DCMAKE_BUILD_TYPE=Debug \ | |
-DBUILD_TESTS=ON \ | |
-DENABLE_PYTHON=OFF \ | |
-DCMAKE_PREFIX_PATH=${{ github.workspace }}/Kokkos \ | |
-DPL_BACKEND=${{ matrix.pl_backend }} \ | |
-DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION) \ | |
-DENABLE_COVERAGE=ON | |
cmake --build ./Build | |
cd ./Build | |
mkdir -p ./tests/results_${{ github.job }}_${{ matrix.pl_backend }} | |
for file in *runner ; do ./$file --order lex --reporter junit --out ./tests/results_${{ github.job }}_${{ matrix.pl_backend }}/report_$file.xml; done; | |
lcov --directory . -b ../pennylane_lightning/core/src --capture --output-file coverage.info | |
lcov --remove coverage.info '/usr/*' --output-file coverage.info | |
mv coverage.info coverage-${{ github.job }}-${{ matrix.pl_backend }}.info | |
- name: Upload test results | |
uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: ubuntu-tests-reports-${{ github.job }}_${{ matrix.pl_backend }} | |
path: ./Build/tests/results_${{ github.job }}_${{ matrix.pl_backend }} | |
if-no-files-found: error | |
- name: Upload code coverage results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ubuntu-codecov-results-cpp | |
path: ./Build/coverage-${{ github.job }}-${{ matrix.pl_backend }}.info | |
if-no-files-found: error | |
pythontestswithKokkos: | |
needs: [build_and_cache_Kokkos] | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
pl_backend: ["lightning_kokkos", "all"] | |
exec_model: ${{ fromJson(needs.build_and_cache_Kokkos.outputs.exec_model) }} | |
kokkos_version: ${{ fromJson(needs.build_and_cache_Kokkos.outputs.kokkos_version) }} | |
exclude: | |
- pl_backend: ["all"] | |
exec_model: OPENMP | |
timeout-minutes: 60 | |
name: Python tests with Kokkos | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: true | |
path: main | |
- name: Switch to release build of Lightning | |
if: inputs.lightning-version == 'release' | |
run: | | |
cd main | |
git fetch --all | |
git checkout $(git branch -a --list "origin/v*rc*" | tail -1) | |
- name: Switch to stable build of Lightning | |
if: inputs.lightning-version == 'stable' | |
run: | | |
cd main | |
git fetch --tags --force | |
git checkout $(git tag | sort -V | tail -1) | |
git log -1 --format='%H' | |
git status | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Restoring cached dependencies | |
id: kokkos-cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ github.workspace}}/Kokkos_install/${{ matrix.exec_model }} | |
key: ${{ matrix.os }}-kokkos${{ matrix.kokkos_version }}-${{ matrix.exec_model }} | |
- name: Copy cached libraries | |
if: steps.kokkos-cache.outputs.cache-hit == 'true' | |
run: | | |
rm -rf Kokkos | |
mkdir Kokkos/ | |
cp -rf ${{ github.workspace}}/Kokkos_install/${{ matrix.exec_model }}/* Kokkos/ | |
pwd | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install cmake gcc-$GCC_VERSION g++-$GCC_VERSION | |
python -m pip install scipy | |
- name: Get required Python packages | |
run: | | |
cd main | |
python -m pip install -r requirements-dev.txt | |
python -m pip install openfermionpyscf | |
- name: Checkout PennyLane for release build | |
if: inputs.pennylane-version == 'release' | |
uses: actions/checkout@v4 | |
with: | |
path: pennylane | |
repository: PennyLaneAI/pennylane | |
- name: Switch to release build of PennyLane | |
if: inputs.pennylane-version == 'release' | |
run: | | |
cd pennylane | |
git fetch --all | |
git checkout $(git branch -a --list "origin/v*rc*" | tail -1) | |
python -m pip uninstall -y pennylane && python -m pip install . -vv --no-deps | |
- name: Install Stable PennyLane | |
if: inputs.pennylane-version == 'stable' | |
run: | | |
cd main | |
python -m pip uninstall -y pennylane && python -m pip install -U pennylane | |
- name: Install ML libraries for interfaces | |
run: | | |
python -m pip install --upgrade torch==$TORCH_VERSION -f https://download.pytorch.org/whl/cpu/torch_stable.html | |
python -m pip install --upgrade "jax[cpu]" # This also installs jaxlib | |
python -m pip install --upgrade tensorflow~=$TF_VERSION keras~=$TF_VERSION | |
- name: Install backend device | |
if: ${{ matrix.pl_backend != 'all'}} | |
run: | | |
cd main | |
python -m pip install scipy | |
SKIP_COMPILATION=True PL_BACKEND="lightning_qubit" pip install -e . -vv | |
CMAKE_ARGS="-DPL_BACKEND=${{ matrix.pl_backend }} -DCMAKE_PREFIX_PATH=${{ github.workspace }}/Kokkos -DENABLE_PYTHON=ON -DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION)" \ | |
python -m pip install -e . -vv | |
- name: Run PennyLane-Lightning unit tests | |
if: ${{ matrix.pl_backend != 'all'}} | |
run: | | |
# TODO: Remove installing pytest-xdist with release v0.36.0 | |
python -m pip install pytest-xdist | |
cd main/ | |
DEVICENAME=`echo ${{ matrix.pl_backend }} | sed "s/_/./g"` | |
PL_DEVICE=${DEVICENAME} python -m pytest tests/ -k "not test_native_mcm" $COVERAGE_FLAGS | |
pl-device-test --device ${DEVICENAME} --skip-ops --shots=20000 $COVERAGE_FLAGS --cov-append | |
pl-device-test --device ${DEVICENAME} --shots=None --skip-ops $COVERAGE_FLAGS --cov-append | |
mv .coverage .coverage-${{ github.job }}-${{ matrix.pl_backend }} | |
# TODO: Remove this if-cond with release v0.36.0 | |
if [ -f tests/test_native_mcm.py ]; then | |
OMP_NUM_THREADS=1 PL_DEVICE=${DEVICENAME} python -m pytest -n auto tests/ -k "test_native_mcm" $COVERAGE_FLAGS --cov-append | |
fi | |
- name: Install all backend devices | |
if: ${{ matrix.pl_backend == 'all' }} | |
run: | | |
cd main | |
CMAKE_ARGS="-DPL_BACKEND="lightning_qubit" -DCMAKE_PREFIX_PATH=${{ github.workspace }}/Kokkos -DENABLE_PYTHON=ON -DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION)" \ | |
python -m pip install -e . -vv | |
rm -rf build | |
CMAKE_ARGS="-DPL_BACKEND="lightning_kokkos" -DCMAKE_PREFIX_PATH=${{ github.workspace }}/Kokkos -DENABLE_PYTHON=ON -DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION)" \ | |
python -m pip install -e . -vv | |
- name: Run PennyLane-Lightning unit tests for lightning.qubit with all devices installed | |
if: ${{ matrix.pl_backend == 'all' }} | |
run: | | |
# TODO: Remove installing pytest-xdist with release v0.36.0 | |
python -m pip install pytest-xdist | |
cd main/ | |
OMP_NUM_THREADS=1 PL_DEVICE=lightning.qubit python -m pytest -n auto tests/ -k "not unitary_correct and not test_native_mcm" $COVERAGE_FLAGS | |
PL_DEVICE=lightning.qubit python -m pytest tests/ -k "unitary_correct and not test_native_mcm" $COVERAGE_FLAGS --cov-append | |
pl-device-test --device lightning.qubit --skip-ops --shots=20000 $COVERAGE_FLAGS --cov-append | |
pl-device-test --device lightning.qubit --shots=None --skip-ops $COVERAGE_FLAGS --cov-append | |
PL_DEVICE=lightning.kokkos python -m pytest tests/ -k "not test_native_mcm" $COVERAGE_FLAGS --cov-append | |
pl-device-test --device lightning.kokkos --skip-ops --shots=20000 $COVERAGE_FLAGS --cov-append | |
pl-device-test --device lightning.kokkos --shots=None --skip-ops $COVERAGE_FLAGS --cov-append | |
mv .coverage .coverage-${{ github.job }}-${{ matrix.pl_backend }} | |
- name: Upload code coverage results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ubuntu-codecov-results-python | |
path: ./main/.coverage-${{ github.job }}-${{ matrix.pl_backend }} | |
if-no-files-found: error | |
upload-to-codecov-linux-python: | |
needs: [pythontests, pythontestswithOpenBLAS, pythontestswithKokkos] | |
name: Upload python coverage data to codecov | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: true | |
path: main | |
- name: Download coverage reports | |
uses: actions/download-artifact@v3 | |
with: | |
name: ubuntu-codecov-results-python | |
- name: Combine coverage files | |
run: | | |
python -m pip install coverage | |
python -m coverage combine .coverage-python* | |
# Added cov xml -i to ignore "No source for code" random errors | |
# https://stackoverflow.com/questions/2386975/no-source-for-code-message-in-coverage-py | |
python -m coverage xml -i -o coverage-${{ github.job }}.xml | |
- name: Upload to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
fail_ci_if_error: true | |
verbose: true | |
token: ${{ secrets.CODECOV_TOKEN }} | |
upload-to-codecov-linux-cpp: | |
needs: [cpptests, cpptestswithOpenBLAS, cpptestswithKokkos] | |
name: Upload cpp coverage data to codecov | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Download coverage reports | |
uses: actions/download-artifact@v3 | |
with: | |
name: ubuntu-codecov-results-cpp | |
- name: Upload to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
fail_ci_if_error: true | |
verbose: true | |
token: ${{ secrets.CODECOV_TOKEN }} | |
cpptestsWithMultipleBackends: | |
# Device-specific tests are performed for both. Device-agnostic tests default to LightningQubit. | |
if: ${{ !contains(fromJSON('["schedule", "workflow_dispatch"]'), github.event_name) }} | |
needs: [build_and_cache_Kokkos] | |
strategy: | |
matrix: | |
os: [ubuntu-22.04] | |
exec_model: ${{ fromJson(needs.build_and_cache_Kokkos.outputs.exec_model) }} | |
kokkos_version: ${{ fromJson(needs.build_and_cache_Kokkos.outputs.kokkos_version) }} | |
timeout-minutes: 60 | |
name: C++ tests (multiple backends) | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.9' | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
- name: Restoring cached dependencies | |
id: kokkos-cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ github.workspace}}/Kokkos_install/${{ matrix.exec_model }} | |
key: ${{ matrix.os }}-kokkos${{ matrix.kokkos_version }}-${{ matrix.exec_model }} | |
- name: Copy cached libraries | |
if: steps.kokkos-cache.outputs.cache-hit == 'true' | |
run: | | |
rm -rf Kokkos | |
mkdir Kokkos/ | |
cp -rf ${{ github.workspace}}/Kokkos_install/${{ matrix.exec_model }}/* Kokkos/ | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install cmake gcc-$GCC_VERSION g++-$GCC_VERSION ninja-build gcovr lcov | |
python -m pip install scipy | |
- name: Build and run unit tests | |
run: | | |
set -x | |
cmake . -BBuild -G Ninja \ | |
-DCMAKE_BUILD_TYPE=Debug \ | |
-DBUILD_TESTS=ON \ | |
-DENABLE_PYTHON=OFF \ | |
-DCMAKE_PREFIX_PATH=${{ github.workspace }}/Kokkos \ | |
-DPL_BACKEND="lightning_qubit;lightning_kokkos" \ | |
-DCMAKE_CXX_COMPILER=$(which g++-$GCC_VERSION) | |
cmake --build ./Build | |
cd ./Build | |
mkdir -p ./tests/results_multiple_backends | |
for file in *runner ; do ./$file --order lex --reporter junit --out ./tests/results_multiple_backends/report_$file.xml; done; | |
set +x | |
- name: Upload test results | |
uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: ubuntu-tests-reports-${{ github.job }}-multiple-backends | |
path: ./Build/tests/results_multiple_backends/ | |
if-no-files-found: error |