Skip to content

Release version 0.4.2 #231

Release version 0.4.2

Release version 0.4.2 #231

Workflow file for this run

name: Build, lint and test package
on:
push:
branches:
- 'main'
- 'beta'
- 'release'
pull_request:
workflow_dispatch:
env:
SRC_DIR: lambeq
TEST_DIR: tests
DOCS_DIR: docs
jobs:
lint:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ "3.10", "3.11", "3.12" ]
outputs:
error-check: ${{ steps.error-check.conclusion }}
steps:
- uses: actions/checkout@v3
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install linter
run: python -m pip install flake8 flake8-broken-line flake8-bugbear flake8-copyright flake8-import-order flake8-quotes
- name: Check for errors
id: error-check
run:
# stop the build if there are Python syntax errors or undefined names
flake8 ${{ env.SRC_DIR }} --count --isolated --select=E9,F63,F7,F82 --show-source --statistics
- name: Lint with flake8
run:
# max-doc-length should be 72 but the copyright notice is too wide for that, so we only error on >74 characters
flake8 ${{ env.SRC_DIR }} --max-doc-length=74
- name: Check doc line lengths and complexity
run:
# exit-zero treats all errors as warnings
flake8 ${{ env.SRC_DIR }} --count --exit-zero --isolated --max-complexity=10 --max-doc-length=72 --select=C901,W505 --statistics
build_and_test:
needs: lint
if: ${{ always() && needs.lint.outputs.error-check == 'success' }}
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ "3.10", "3.11", "3.12" ]
steps:
- uses: actions/checkout@v3
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install base package
run: pip install .
- name: Check package import works
run: python -c 'import lambeq'
- name: Install downgraded Qiskit (for compatibility reasons)
# This should be removed once the following PR is merged:
# https://github.com/PennyLaneAI/pennylane-qiskit/pull/493
run: pip install 'qiskit<1' pytket-qiskit qiskit-ibm-runtime
- name: Install extra dependencies and tester
run: pip install .[extras] .[test]
- name: Locate bobcat pre-trained model cache
id: loc-bobcat-cache
run: echo "dir=$(python -c 'from lambeq.text2diagram.model_downloader import ModelDownloader; print(ModelDownloader("bert").model_dir)')" >> $GITHUB_OUTPUT
- name: Restore bobcat pre-trained model from cache
id: bobcat-cache
uses: actions/cache@v2
with:
path: ${{ steps.loc-bobcat-cache.outputs.dir }}
key: bobcat-bert-v1
- name: Test with pytest
run: >
coverage run --source=${{ env.SRC_DIR }}
--module pytest ${{ env.SRC_DIR }} ${{ env.TEST_DIR }}
--doctest-modules
--durations=50
--ignore=${{ env.TEST_DIR }}/text2diagram/test_depccg_parser.py
--ignore=${{ env.DOCS_DIR }}/extract_code_cells.py
- name: Preparation for notebook testing
run: pip install nbmake
- name: Test example notebooks
env:
TEST_NOTEBOOKS: 1
run: >
pytest --nbmake ${{ env.DOCS_DIR }}/examples/
--nbmake-timeout=60
- name: Test tutorial notebooks
env:
TEST_NOTEBOOKS: 1
run: >
pytest --nbmake ${{ env.DOCS_DIR }}/tutorials/
--nbmake-timeout=60
--ignore ${{ env.DOCS_DIR }}/tutorials/code
- name: Coverage report
run: coverage report -m
type_check:
needs: lint
if: ${{ always() && needs.lint.outputs.error-check == 'success' }}
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ "3.10", "3.11", "3.12" ]
steps:
- uses: actions/checkout@v3
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies with type hints
run: python -m pip install numpy pytket spacy torch types-PyYAML types-Pillow ipython
- name: Install type checker
run: python -m pip install mypy
- name: Type check with mypy
run: mypy ${{ env.SRC_DIR }}
- name: View strict type errors
continue-on-error: true # this is expected to fail but the job should still succeed
run: mypy --strict ${{ env.SRC_DIR }}