Upgrading Ubuntu22.04 to Ubuntu24.04 #6449
Workflow file for this run
This file contains hidden or 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::x86_64::LQubit::Python | |
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: | |
types: | |
- opened | |
- reopened | |
- synchronize | |
- ready_for_review | |
push: | |
branches: | |
- master | |
env: | |
TF_VERSION: 2.19.0 | |
KERAS_VERSION: 3.9.0 | |
TORCH_VERSION: 2.5.1 | |
COVERAGE_FLAGS: "--cov=pennylane_lightning --cov-report=term-missing --no-flaky-report -p no:warnings --tb=native" | |
GCC_VERSION: 13 | |
OMP_NUM_THREADS: "2" | |
OMP_PROC_BIND: "false" | |
concurrency: | |
group: tests_lqcpu_python-${{ github.ref }}-${{ github.event_name }}-${{ inputs.lightning-version }}-${{ inputs.pennylane-version }} | |
cancel-in-progress: true | |
jobs: | |
build_lightning_qubit_wheels: | |
strategy: | |
matrix: | |
pl_backend: ["lightning_qubit"] | |
blas: ["OFF", "ON"] | |
timeout-minutes: 60 | |
name: Build (${{ matrix.pl_backend }}, blas-${{ matrix.blas }}) | |
runs-on: pl-4-core-large-runner | |
steps: | |
- name: Make disk space | |
run: | | |
sudo apt-get autoremove -y && sudo apt-get autoclean -y && sudo apt-get clean -y | |
for DIR in /usr/share/dotnet /usr/local/share/powershell /usr/share/swift; do | |
sudo du -sh $DIR || echo $DIR not found | |
sudo rm -rf $DIR | |
done | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: true | |
- name: Switch to release build of Lightning | |
if: inputs.lightning-version == 'release' | |
run: | | |
git fetch --all | |
git checkout $(git branch -a --list "origin/v0.*rc*" | sort | tail -1) | |
- name: Switch to stable build of Lightning | |
if: inputs.lightning-version == 'stable' | |
run: | | |
git fetch --tags --force | |
git checkout latest_release | |
git log -1 --format='%H' | |
git status | |
- name: Checkout Catalyst | |
uses: actions/checkout@v4 | |
with: | |
repository: PennyLaneAI/catalyst | |
path: ${{ github.workspace}}/catalyst | |
ref: ${{ (inputs.pennylane-version == 'stable' && 'v0.11.0') || 'main' }} # FIXME: remove after v0.42 release | |
- 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-openblas32 wheel | |
- name: Get required Python packages | |
run: | | |
python -m pip install -r requirements-tests.txt | |
python -m pip install build | |
- name: Create device wheel ${{ inputs.lightning-version }} | |
run: | | |
PL_BACKEND=${{ matrix.pl_backend }} python scripts/configure_pyproject_toml.py | |
CMAKE_ARGS="-DENABLE_BLAS=${{ matrix.blas }} -DLQ_ENABLE_KERNEL_OMP=ON -DENABLE_PYTHON=ON -DLIGHTNING_CATALYST_SRC_PATH=${{ github.workspace }}/catalyst" python -m build | |
cd dist | |
WHEEL_NAME=$(ls *.whl) | |
cp $WHEEL_NAME ${{ github.workspace }}/wheel_${{ matrix.pl_backend }}-${{ matrix.blas }}.whl | |
echo $WHEEL_NAME > ${{ github.workspace }}/${{ matrix.pl_backend }}-${{ matrix.blas }}_name.txt | |
- name: Send wheel name | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.pl_backend }}-${{ matrix.blas }}_name.txt | |
retention-days: 1 | |
if-no-files-found: error | |
include-hidden-files: true | |
path: ${{ github.workspace }}/${{ matrix.pl_backend }}-${{ matrix.blas }}_name.txt | |
- name: Cache wheel directories | |
uses: actions/upload-artifact@v4 | |
with: | |
name: wheel_${{ matrix.pl_backend }}-${{ matrix.blas }}.whl | |
retention-days: 1 | |
if-no-files-found: error | |
include-hidden-files: true | |
path: | | |
${{ github.workspace }}/wheel_${{ matrix.pl_backend }}-${{ matrix.blas }}.whl | |
test_lightning_qubit_wheels: | |
needs: [build_lightning_qubit_wheels] | |
strategy: | |
matrix: | |
pl_backend: ["lightning_qubit"] | |
blas: ["OFF", "ON"] | |
group: [1, 2, 3, 4] | |
timeout-minutes: 60 | |
name: Python Tests (${{ matrix.pl_backend }}, blas-${{ matrix.blas }}, test-group-${{ matrix.group }}) | |
runs-on: pl-4-core-large-runner | |
steps: | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
- name: Checkout PennyLane-Lightning | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: true | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ${{ matrix.pl_backend }}-${{ matrix.blas }}_name.txt | |
path: ${{ github.workspace }} | |
- uses: actions/download-artifact@v4 | |
with: | |
name: wheel_${{ matrix.pl_backend }}-${{ matrix.blas }}.whl | |
path: ${{ github.workspace }} | |
- name: Install dependencies | |
run: | | |
sudo apt-get update && sudo apt-get -y -q install libopenblas-dev | |
- name: Get required Python packages | |
run: | | |
WHEEL_NAME=$(cat ${{ github.workspace }}/${{ matrix.pl_backend }}-${{ matrix.blas }}_name.txt) | |
mv ${{ github.workspace }}/wheel_${{ matrix.pl_backend }}-${{ matrix.blas }}.whl ${{ github.workspace }}/$WHEEL_NAME | |
python -m pip install -r requirements-tests.txt | |
python -m pip install openfermionpyscf semantic-version | |
python -m pip install ${{ github.workspace }}/$WHEEL_NAME --no-deps --force-reinstall | |
- name: Revert to older JAX version for stable | |
if: inputs.pennylane-version == 'stable' | |
run: | | |
# FIXME: remove after v0.42 release | |
python -m pip install "jax[cpu]==0.4.28" | |
- name: Checkout PennyLane for release or latest build | |
if: inputs.pennylane-version == 'release' || inputs.pennylane-version == 'latest' | |
uses: actions/checkout@v4 | |
with: | |
path: pennylane | |
repository: PennyLaneAI/pennylane | |
- name: Switch to latest build of PennyLane | |
if: inputs.pennylane-version == 'latest' | |
run: | | |
cd pennylane | |
git checkout master | |
python -m pip uninstall -y pennylane && python -m pip install . -vv --no-deps | |
- 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/v0.*rc*" | sort | 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: | | |
python -m pip uninstall -y pennylane && python -m pip install -U pennylane --no-deps | |
- name: Install ML libraries for interfaces | |
run: | | |
python -m pip install --upgrade torch==$TORCH_VERSION --index-url https://download.pytorch.org/whl/cpu | |
python -m pip install --upgrade tensorflow~=$TF_VERSION keras~=$KERAS_VERSION | |
- name: Switch to stable tag of Lightning | |
if: inputs.lightning-version == 'stable' | |
run: | | |
git fetch --tags --force | |
git checkout latest_release | |
git log -1 --format='%H' | |
git status | |
- name: Run PennyLane-Lightning integration tests | |
run: | | |
DEVICENAME=`echo ${{ matrix.pl_backend }} | sed "s/_/./g"` | |
# Remove source files here to ensure pytest collect source coverage from wheel package | |
rm -r pennylane_lightning | |
pl-device-test --device ${DEVICENAME} --skip-ops --shots=10000 $COVERAGE_FLAGS --cov-append | |
pl-device-test --device ${DEVICENAME} --shots=None --skip-ops $COVERAGE_FLAGS --cov-append | |
- name: Run PennyLane-Lightning unit tests | |
env: | |
OMP_NUM_THREADS: 1 | |
run: | | |
DEVICENAME=`echo ${{ matrix.pl_backend }} | sed "s/_/./g"` | |
# Remove `python -m` to avoid running tests with relative modules | |
PL_DEVICE=${DEVICENAME} pytest -n auto tests/ -k "not unitary_correct and not compare_sparse_and_dense_operations" \ | |
$COVERAGE_FLAGS --store-durations --splits 4 --group ${{ matrix.group }} \ | |
--durations-path='.github/workflows/python_lightning_qubit_test_durations.json' --splitting-algorithm=least_duration | |
PL_DEVICE=${DEVICENAME} pytest tests/ -k "unitary_correct or compare_sparse_and_dense_operations" $COVERAGE_FLAGS --cov-append | |
- name: Upload test durations | |
uses: actions/upload-artifact@v4 | |
with: | |
name: .test_durations-${{ matrix.exec_model }}-${{ matrix.group }} | |
retention-days: 1 | |
path: ${{ github.workspace }}/.test_durations-${{ matrix.exec_model }}-${{ matrix.group }} | |
- name: Move coverage file | |
run: | | |
mv .coverage ${{ github.workspace }}/.coverage-${{ github.job }}-${{ matrix.pl_backend }}-${{ matrix.blas }}-${{ matrix.group }} | |
- name: Upload code coverage results | |
uses: actions/upload-artifact@v4 | |
with: | |
name: .coverage-${{ github.job }}-${{ matrix.pl_backend }}-${{ matrix.blas }}-${{ matrix.group }} | |
path: | | |
${{ github.workspace }}/.coverage-${{ github.job }}-${{ matrix.pl_backend }}-${{ matrix.blas }}-${{ matrix.group }} | |
retention-days: 1 | |
if-no-files-found: error | |
include-hidden-files: true | |
upload-to-codecov-linux-python: | |
if: github.event_name == 'pull_request' | |
needs: [test_lightning_qubit_wheels] | |
name: Upload python coverage data to codecov | |
runs-on: ubuntu-24.04 | |
steps: | |
- uses: actions/setup-python@v5 | |
name: Install Python | |
with: | |
python-version: '3.10' | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-tags: true | |
- name: Download coverage reports | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: .coverage-* | |
merge-multiple: true | |
- name: Combine coverage files | |
run: | | |
# Update .coveragerc to include sources for combining equivalent paths | |
wheelpath=$Python_ROOT_DIR/lib/python3.10/site-packages | |
echo "" >> .coveragerc | |
echo "[paths]" >> .coveragerc | |
echo "source =" >> .coveragerc | |
echo " pennylane_lightning" >> .coveragerc | |
echo " $wheelpath/pennylane_lightning" >> .coveragerc | |
echo " /home/runner/work/pennylane-lightning/pennylane-lightning/pennylane_lightning" >> .coveragerc | |
python -m pip install coverage | |
python -m coverage combine --debug=pathmap .coverage-* | |
# 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 }} | |
flags: unit_tests |