prism-q 0.22.0

PRISM-Q: Performance Rust Interoperable Simulator for Quantum
Documentation
name: Python Wheels

on:
  push:
    tags: ["py-v*"]
  pull_request:
    paths:
      - "bindings/python/**"
      - "src/**"
      - "Cargo.toml"
      - ".github/workflows/python.yml"
  workflow_dispatch:

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    name: wheels-${{ matrix.platform.os }}-${{ matrix.platform.target }}
    runs-on: ${{ matrix.platform.runner }}
    strategy:
      fail-fast: false
      matrix:
        platform:
          - { os: linux, runner: ubuntu-latest, target: x86_64 }
          - { os: macos, runner: macos-latest, target: aarch64 }
          - { os: windows, runner: windows-latest, target: x64 }
    steps:
      - uses: actions/checkout@v7

      - uses: actions/setup-python@v6
        with:
          python-version: "3.12"

      - uses: dtolnay/rust-toolchain@stable

      - name: Build wheels
        uses: PyO3/maturin-action@v1
        with:
          command: build
          args: --profile python-release --manifest-path bindings/python/Cargo.toml --out dist
          manylinux: auto

      - name: Smoke test and pytest
        shell: bash
        run: |
          python -m pip install --upgrade pip
          python -m pip install numpy pytest
          python -m pip install --no-index --find-links dist prism-q
          pytest bindings/python/tests -q

      - uses: actions/upload-artifact@v7
        with:
          name: wheels-${{ matrix.platform.os }}-${{ matrix.platform.target }}
          path: dist

  sdist:
    name: sdist
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
      - name: Build sdist
        uses: PyO3/maturin-action@v1
        with:
          command: sdist
          args: --manifest-path bindings/python/Cargo.toml --out dist
      - uses: actions/upload-artifact@v7
        with:
          name: sdist
          path: dist

  publish:
    name: Publish to PyPI
    if: startsWith(github.ref, 'refs/tags/py-v')
    needs: [build, sdist]
    runs-on: ubuntu-latest
    environment: pypi
    permissions:
      id-token: write
    steps:
      - uses: actions/download-artifact@v8
        with:
          path: dist
          merge-multiple: true
      - name: Publish
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          packages-dir: dist