Add Fast Per-Shot Edge Reweighting #509
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: ci | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| push: | |
| branches: | |
| - master | |
| jobs: | |
| build_sdist: | |
| name: Build SDist | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - name: Build SDist | |
| run: pipx run build --sdist | |
| - name: Check metadata | |
| run: pipx run twine check dist/* | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-sdist | |
| path: dist/*.tar.gz | |
| build_wheels: | |
| runs-on: ${{ matrix.os_dist.os }} | |
| env: | |
| MACOSX_DEPLOYMENT_TARGET: "11.0" | |
| CIBW_BUILD: "${{ matrix.os_dist.dist }}" | |
| CIBW_ARCHS_MACOS: "x86_64 universal2 arm64" | |
| CIBW_BEFORE_BUILD: pip install --upgrade ninja | |
| CIBW_TEST_REQUIRES: pytest stim | |
| CIBW_TEST_COMMAND: pytest {project}/tests | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os_dist: [ | |
| # macosx x86_64 | |
| # {os: macos-latest, dist: cp36-macosx_x86_64}, | |
| # {os: macos-latest, dist: cp37-macosx_x86_64}, | |
| {os: macos-latest, dist: cp38-macosx_x86_64}, | |
| {os: macos-latest, dist: cp39-macosx_x86_64}, | |
| {os: macos-latest, dist: cp310-macosx_x86_64}, | |
| {os: macos-latest, dist: cp311-macosx_x86_64}, | |
| {os: macos-latest, dist: cp312-macosx_x86_64}, | |
| {os: macos-latest, dist: cp313-macosx_x86_64}, | |
| # macosx arm64 | |
| # {os: macos-latest, dist: cp38-macosx_arm64}, | |
| {os: macos-latest, dist: cp39-macosx_arm64}, | |
| {os: macos-latest, dist: cp310-macosx_arm64}, | |
| {os: macos-latest, dist: cp311-macosx_arm64}, | |
| {os: macos-latest, dist: cp312-macosx_arm64}, | |
| {os: macos-latest, dist: cp313-macosx_arm64}, | |
| # macosx universal2 | |
| # {os: macos-latest, dist: cp38-macosx_universal2}, | |
| # {os: macos-latest, dist: cp39-macosx_universal2}, | |
| # {os: macos-latest, dist: cp310-macosx_universal2}, | |
| # {os: macos-latest, dist: cp311-macosx_universal2}, | |
| # {os: macos-latest, dist: cp312-macosx_universal2}, | |
| # windows amd64 | |
| # {os: windows-latest, dist: cp36-win_amd64}, | |
| # {os: windows-latest, dist: cp37-win_amd64}, | |
| {os: windows-latest, dist: cp38-win_amd64}, | |
| {os: windows-latest, dist: cp39-win_amd64}, | |
| {os: windows-latest, dist: cp310-win_amd64}, | |
| {os: windows-latest, dist: cp311-win_amd64}, | |
| {os: windows-latest, dist: cp312-win_amd64}, | |
| {os: windows-latest, dist: cp313-win_amd64}, | |
| # windows win32 | |
| # {os: windows-latest, dist: cp36-win32}, | |
| # {os: windows-latest, dist: cp37-win32}, | |
| # scipy install fails | |
| # {os: windows-latest, dist: cp38-win32}, | |
| # {os: windows-latest, dist: cp39-win32}, | |
| # {os: windows-latest, dist: cp310-win32}, | |
| # {os: windows-latest, dist: cp311-win32}, | |
| # For arm64, get error "cibuildwheel: No build identifiers selected" | |
| # {os: windows-latest, dist: cp39-win_arm64}, | |
| # {os: windows-latest, dist: cp310-win_arm64}, | |
| # {os: windows-latest, dist: cp311-win_arm64}, | |
| # ubuntu x86_64 | |
| # {os: ubuntu-latest, dist: cp36-manylinux_x86_64}, | |
| # {os: ubuntu-latest, dist: cp37-manylinux_x86_64}, | |
| {os: ubuntu-latest, dist: cp38-manylinux_x86_64}, | |
| {os: ubuntu-latest, dist: cp39-manylinux_x86_64}, | |
| {os: ubuntu-latest, dist: cp310-manylinux_x86_64}, | |
| {os: ubuntu-latest, dist: cp311-manylinux_x86_64}, | |
| {os: ubuntu-latest, dist: cp312-manylinux_x86_64}, | |
| {os: ubuntu-latest, dist: cp313-manylinux_x86_64}, | |
| # ubuntu i686 | |
| # {os: ubuntu-latest, dist: cp36-manylinux_i686}, | |
| # {os: ubuntu-latest, dist: cp37-manylinux_i686}, | |
| # scipy built distribution not available and build fails on manylinux_i686 for python 3.8 up | |
| # {os: ubuntu-latest, dist: cp38-manylinux_i686}, | |
| # {os: ubuntu-latest, dist: cp39-manylinux_i686}, | |
| # {os: ubuntu-latest, dist: cp310-manylinux_i686}, | |
| # {os: ubuntu-latest, dist: cp311-manylinux_i686}, | |
| # Don't include musllinux as it has g++-9 (need g++-10 for <bits>) | |
| # {os: ubuntu-latest, dist: cp36-musllinux_x86_64}, | |
| # {os: ubuntu-latest, dist: cp37-musllinux_x86_64}, | |
| # {os: ubuntu-latest, dist: cp38-musllinux_x86_64}, | |
| # {os: ubuntu-latest, dist: cp39-musllinux_x86_64}, | |
| # {os: ubuntu-latest, dist: cp310-musllinux_x86_64}, | |
| # {os: ubuntu-latest, dist: cp311-musllinux_x86_64}, | |
| # {os: ubuntu-latest, dist: cp36-musllinux_i686}, | |
| # {os: ubuntu-latest, dist: cp37-musllinux_i686}, | |
| # {os: ubuntu-latest, dist: cp38-musllinux_i686}, | |
| # {os: ubuntu-latest, dist: cp39-musllinux_i686}, | |
| # {os: ubuntu-latest, dist: cp310-musllinux_i686}, | |
| # {os: ubuntu-latest, dist: cp311-musllinux_i686}, | |
| ] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.x' | |
| - name: Install g++ | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt update | |
| sudo apt install gcc-11 g++-11 | |
| - uses: pypa/cibuildwheel@v3.0.0 | |
| - name: Verify clean directory | |
| run: git diff --exit-code | |
| shell: bash | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-${{ matrix.os_dist.dist }} | |
| path: wheelhouse/*.whl | |
| merge_upload_artifacts: | |
| needs: ["build_sdist", "build_wheels"] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Merge Artifacts | |
| uses: actions/upload-artifact/merge@v4 | |
| with: | |
| name: dist | |
| pattern: dist-* | |
| benchmark_windows: | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - run: cmake . | |
| - run: cmake --build . --target pymatching_perf --config Release | |
| - run: Release\pymatching_perf.exe | |
| benchmark: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [macos-latest, ubuntu-latest] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - name: Install g++-11 (Ubuntu) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update -y -qq | |
| sudo apt-get install -y -qq gcc-11 g++-11 | |
| - run: CC=gcc-11 CXX=g++-11 cmake . | |
| if: matrix.os == 'ubuntu-latest' | |
| - run: cmake . | |
| if: matrix.os == 'macos-latest' | |
| - run: make pymatching_perf | |
| - run: ./pymatching_perf | |
| gtest: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [macos-latest, ubuntu-latest] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - name: Install g++-11 (Ubuntu) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: | | |
| sudo apt-get update -y -qq | |
| sudo apt-get install -y -qq gcc-11 g++-11 | |
| - run: CC=gcc-11 CXX=g++-11 cmake . | |
| if: matrix.os == 'ubuntu-latest' | |
| - run: cmake . | |
| if: matrix.os == 'macos-latest' | |
| - run: make pymatching_tests | |
| - run: ./pymatching_tests | |
| pip_install: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| platform: [windows-latest, macos-latest, ubuntu-latest] | |
| python-version: ["3.13"] | |
| runs-on: ${{ matrix.platform }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Add requirements | |
| run: python -m pip install --upgrade cmake>=3.12 ninja pytest ruff pytest-cov setuptools | |
| - name: Build and install | |
| run: python -m pip install --verbose -e . | |
| - name: Test without stim or rustworkx | |
| run: python -m pytest tests | |
| - name: Install stim and rustworkx | |
| run: python -m pip install stim rustworkx | |
| - name: Test with stim and rustworkx using coverage | |
| run: python -m pytest tests --cov=./src/pymatching --cov-report term | |
| - name: ruff lint | |
| run: ruff check src tests | |
| - name: ruff format | |
| run: ruff format --check src tests | |
| build_docs: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.x' | |
| - name: Install pandoc | |
| run: | | |
| sudo apt install pandoc | |
| python -m pip install pandoc | |
| - name: Add sphinx requirements | |
| run: python -m pip install -r ./docs/sphinx_docs/requirements.txt | |
| - name: Build and install PyMatching | |
| run: pip install --verbose . | |
| - name: Build docs | |
| run: cd docs/sphinx_docs && make html | |
| codecov: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: true | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.x' | |
| - name: Add requirements | |
| run: python -m pip install --upgrade cmake>=3.12 ninja pytest ruff pytest-cov stim rustworkx | |
| - name: Build and install | |
| run: pip install --verbose -e . | |
| - name: Run tests and collect coverage | |
| run: pytest tests --cov=./src/pymatching --cov-report=xml | |
| - name: Upload coverage reports to Codecov | |
| uses: codecov/codecov-action@v3 | |
| # upload_pypi: | |
| # needs: [build_wheels, build_sdist] | |
| # runs-on: ubuntu-latest | |
| # environment: pypi | |
| # permissions: | |
| # id-token: write | |
| # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | |
| # steps: | |
| # - uses: actions/download-artifact@v4 | |
| # with: | |
| # # unpacks all CIBW artifacts into dist/ | |
| # pattern: cibw-* | |
| # path: dist | |
| # merge-multiple: true | |
| # - uses: pypa/gh-action-pypi-publish@release/v1 |