Skip to content

Commit

Permalink
Add support for Python 3.12 and musllinux to main (Qiskit#997)
Browse files Browse the repository at this point in the history
* Add support for Python 3.12 and musllinux to main

As part of the 0.13.2 release we added support for Python 3.12 and
musllinux to rustworkx. However, these changes did not happen on main
yet. This commit applies the necessary changes to the main branch for
the 0.14.0 and future releases. Also to simplify the configuration of
the cibuildwheel jobs this combines Qiskit#753 into this PR so that the
configuration is centralized in the pyproject.toml.

* DNM: Test wheel build configuration

* Remove testtools usage from test suite

* Don't require blas on numpy install

* Fix docs typo

* Drop musl on aarch64

* Try installing openblas to fix numpy build

* Fix toml syntax

* Adjust override to use allowed fields only

* Fix toml syntax again

* Switch back to pip command

* Downgrade pp64le to tier 4 and skip tests

* Fix apk command copy paste error

* Raise minimum supported macOS version to 10.12

In Rust 1.74 the Rust programming language is raising their minimum
support macOS version to 10.12, so rustworkx is raising it's supported
version of macOS to match this.

* Tweak test skip regex

* Split arm into 2 jobs

* Revert "DNM: Test wheel build configuration"

This reverts commit 57dd451.
  • Loading branch information
mtreinish authored Oct 10, 2023
1 parent 632aa9a commit 2062a1c
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 104 deletions.
15 changes: 1 addition & 14 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
strategy:
matrix:
rust: [stable]
python-version: [3.8, 3.9, "3.10", "3.11"]
python-version: [3.8, 3.9, "3.10", "3.11", "3.12"]
platform: [
{ os: "macOS-latest", python-architecture: "x64", rust-target: "x86_64-apple-darwin" },
{ os: "ubuntu-latest", python-architecture: "x64", rust-target: "x86_64-unknown-linux-gnu" },
Expand All @@ -76,19 +76,6 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.platform.python-architecture }}
if: runner.os != 'Windows'
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: 3.7
architecture: ${{ matrix.platform.python-architecture }}
if: ${{ runner.os == 'Windows' && matrix.python-version == '3.7.16' }}
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.platform.python-architecture }}
if: ${{ runner.os == 'Windows' && matrix.python-version != '3.7.16' }}

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@master
Expand Down
110 changes: 42 additions & 68 deletions .github/workflows/wheels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,20 +55,10 @@ jobs:
- uses: dtolnay/rust-toolchain@stable
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.10.1 twine
python -m pip install cibuildwheel==2.16.2 twine
- name: Build wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
CIBW_BEFORE_ALL_LINUX: "yum install -y wget && {package}/tools/install_rust.sh"
CIBW_ENVIRONMENT_LINUX: 'PATH="$PATH:$HOME/.cargo/bin"'
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=10.9
CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64:latest
CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686:latest
CIBW_SKIP: cp36-* cp37-* pp* *win32 *musl*
CIBW_BEFORE_BUILD: pip install -U setuptools-rust
CIBW_TEST_REQUIRES: networkx testtools fixtures
CIBW_TEST_COMMAND: python -m unittest discover {project}/tests/rustworkx_tests
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
Expand Down Expand Up @@ -97,21 +87,43 @@ jobs:
platforms: all
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.10.1 twine
python -m pip install cibuildwheel==2.16.2 twine
- name: Build wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
CIBW_ARCHS_LINUX: aarch64
CIBW_SKIP: cp36-* cp37-* cp311-* cp312-* pp* *musl*
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
build_wheels_aarch64_part_2:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
name: Install Python
with:
python-version: '3.8'
- uses: dtolnay/rust-toolchain@stable
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: all
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.16.2 twine
- name: Build wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
CIBW_BEFORE_ALL_LINUX: "yum install -y wget && {package}/tools/install_rust.sh"
CIBW_ENVIRONMENT_LINUX: 'PATH="$PATH:$HOME/.cargo/bin" CARGO_NET_GIT_FETCH_WITH_CLI="true"'
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=10.9
CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64:latest
CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686:latest
CIBW_SKIP: cp36-* cp37-* pp* *win32 *musl*
CIBW_BEFORE_BUILD: pip install -U setuptools-rust
CIBW_TEST_REQUIRES: networkx scipy testtools fixtures
CIBW_TEST_COMMAND: python -m unittest discover {project}/tests/rustworkx_tests
CIBW_ARCHS_LINUX: aarch64
CIBW_SKIP: cp36-* cp37-* cp38-* cp39-* cp310-* pp* *musl*
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
Expand Down Expand Up @@ -140,20 +152,12 @@ jobs:
platforms: all
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.10.1 twine
python -m pip install cibuildwheel==2.16.2 twine
- name: Build wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
CIBW_BEFORE_ALL_LINUX: "yum install -y wget && {package}/tools/install_rust.sh"
CIBW_ENVIRONMENT_LINUX: 'PATH="$PATH:$HOME/.cargo/bin" CARGO_NET_GIT_FETCH_WITH_CLI="true"'
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=10.9
CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64:latest
CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686:latest
CIBW_SKIP: cp36-* cp37-* cp39-* cp310-* cp311-* pp* *win32 *musl*
CIBW_BEFORE_BUILD: pip install -U setuptools-rust
CIBW_TEST_REQUIRES: networkx testtools fixtures
CIBW_TEST_COMMAND: python -m unittest discover {project}/tests/rustworkx_tests
CIBW_SKIP: cp36-* cp37-* cp39-* cp310-* cp311-* pp* *win32
CIBW_ARCHS_LINUX: ppc64le
- uses: actions/upload-artifact@v3
with:
Expand Down Expand Up @@ -183,20 +187,12 @@ jobs:
platforms: all
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.10.1 twine
python -m pip install cibuildwheel==2.16.2 twine
- name: Build wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
CIBW_BEFORE_ALL_LINUX: "yum install -y wget && {package}/tools/install_rust.sh"
CIBW_ENVIRONMENT_LINUX: 'PATH="$PATH:$HOME/.cargo/bin" CARGO_NET_GIT_FETCH_WITH_CLI="true"'
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=10.9
CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64:latest
CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686:latest
CIBW_SKIP: cp36-* cp37-* cp38-* pp* *win32 *musl*
CIBW_BEFORE_BUILD: pip install -U setuptools-rust
CIBW_TEST_REQUIRES: networkx testtools fixtures
CIBW_TEST_COMMAND: python -m unittest discover {project}/tests/rustworkx_tests
CIBW_SKIP: cp36-* cp37-* cp38-* cp312-* pp* *win32 *musl*
CIBW_ARCHS_LINUX: ppc64le
- uses: actions/upload-artifact@v3
with:
Expand Down Expand Up @@ -226,22 +222,13 @@ jobs:
platforms: all
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.10.1 twine
python -m pip install cibuildwheel==2.16.2 twine
- name: Build wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
CIBW_BEFORE_ALL_LINUX: "yum install -y wget && {package}/tools/install_rust.sh"
CIBW_ENVIRONMENT_LINUX: 'PATH="$PATH:$HOME/.cargo/bin" CARGO_NET_GIT_FETCH_WITH_CLI="true"'
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=10.9
CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64:latest
CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686:latest
CIBW_SKIP: cp36-* cp37-* cp39-* cp310-* cp311-* pp* *win32 *musl*
CIBW_BEFORE_BUILD: pip install -U setuptools-rust
CIBW_TEST_REQUIRES: networkx testtools fixtures
CIBW_TEST_COMMAND: python -m unittest discover {project}/tests/rustworkx_tests
CIBW_ARCHS_LINUX: s390x
CIBW_TEST_SKIP: "*-*linux_s390x"
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
Expand Down Expand Up @@ -270,22 +257,13 @@ jobs:
platforms: all
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.10.1 twine
python -m pip install cibuildwheel==2.16.2 twine
- name: Build wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
CIBW_BEFORE_ALL_LINUX: "yum install -y wget && {package}/tools/install_rust.sh"
CIBW_ENVIRONMENT_LINUX: 'PATH="$PATH:$HOME/.cargo/bin" CARGO_NET_GIT_FETCH_WITH_CLI="true"'
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=10.9
CIBW_MANYLINUX_X86_64_IMAGE: quay.io/pypa/manylinux2014_x86_64:latest
CIBW_MANYLINUX_I686_IMAGE: quay.io/pypa/manylinux2014_i686:latest
CIBW_SKIP: cp36-* cp37-* cp38-* pp* *win32 *musl*
CIBW_BEFORE_BUILD: pip install -U setuptools-rust
CIBW_TEST_REQUIRES: networkx testtools fixtures
CIBW_TEST_COMMAND: python -m unittest discover {project}/tests/rustworkx_tests
CIBW_SKIP: cp36-* cp37-* cp38-* cp312-* pp* *win32 *musl*
CIBW_ARCHS_LINUX: s390x
CIBW_TEST_SKIP: "*-*linux_s390x"
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
Expand All @@ -300,7 +278,7 @@ jobs:
steps:
- uses: actions/checkout@v3
- name: Build wheels
uses: joerick/cibuildwheel@v2.10.1
uses: joerick/cibuildwheel@v2.16.2
env:
CIBW_BEFORE_ALL: rustup target add aarch64-apple-darwin
CIBW_ARCHS_MACOS: arm64 universal2
Expand Down Expand Up @@ -338,16 +316,12 @@ jobs:
run: rustup default stable-i686-pc-windows-msvc
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel==2.10.1 twine
python -m pip install cibuildwheel==2.16.2 twine
- name: Build wheels
run: |
python -m cibuildwheel --output-dir wheelhouse
env:
CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=10.9
CIBW_SKIP: cp36-* cp37-* pp* *amd64 *musl*
CIBW_BEFORE_BUILD: pip install -U setuptools-rust
CIBW_TEST_REQUIRES: networkx testtools fixtures
CIBW_TEST_COMMAND: python -m unittest discover {project}/tests/rustworkx_tests
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
Expand Down
6 changes: 5 additions & 1 deletion docs/source/install.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,11 @@ source.
- s390x
- :ref:`tier-4`
- Distributions compatible with the `manylinux 2014`_ packaging specification
* - macOS (10.9 or newer)
* - Linux (musl)
- x86_64
- :ref:`tier-3`
-
* - macOS (10.12 or newer)
- x86_64
- :ref:`tier-1`
-
Expand Down
26 changes: 25 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,28 @@ build-backend = "setuptools.build_meta"

[tool.black]
line-length = 100
target-version = ['py37', 'py38', 'py39', 'py310']
target-version = ['py38', 'py39', 'py310', 'py311']

[tool.cibuildwheel]
manylinux-x86_64-image = "manylinux2014"
manylinux-i686-image = "manylinux2014"
skip = "pp* cp36-* cp37-* *win32 *musllinux*i686"
test-requires = "networkx"
test-command = "python -m unittest discover {project}/tests/rustworkx_tests"
before-build = "pip install -U setuptools-rust"
test-skip = "cp38-*musllinux* *linux_s390x *ppc64le"

[tool.cibuildwheel.linux]
before-all = "yum install -y wget && {package}/tools/install_rust.sh"
environment = 'PATH="$PATH:$HOME/.cargo/bin" CARGO_NET_GIT_FETCH_WITH_CLI="true"'

[[tool.cibuildwheel.overrides]]
select = "*-musllinux*"
before-all = "apk add --no-cache curl gcc && curl https://sh.rustup.rs -sSf | sh -s -- -y && source $HOME/.cargo/env && rustup install stable && rustup default stable"

[[tool.cibuildwheel.overrides]]
select = "*i686"
before-test = 'python -m pip install numpy --config-settings=setup-args="-Dallow-noblas=true"'

[tool.cibuildwheel.macos]
environment = "MACOSX_DEPLOYMENT_TARGET=10.12"
26 changes: 26 additions & 0 deletions releasenotes/notes/platform-updates-e9b296144e633c95.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
features:
- |
Added support for musl Linux platforms on x86_64 and aarch64 at :ref:`tier-3`.
upgrade:
- |
Support for the Linux ppc64le pllatform has changed from tier 3 to tier 4
(as documented in :ref:`platform-suppport`). This is a result of no longer
being able to run tests during the pre-compiled wheel publishing jobs due
to constraints in the available CI infrastructure. There hopefully
shouldn't be any meaningful impact resulting from this change, but as there
are no longer tests being run to validate the binaries prior to publishing
them there are no longer guarantees that the wheels for ppc64le are fully
functional (although the likelihood they are is still high as it works on
other platforms). If any issues are encountered with ppc64le Linux please
open an issue.
- |
For macOS the minimum version of macOS is now 10.12. Previously, the
precompiled binary wheel packages for macOS x86_64 were published with
support for >=10.9. However, because of changes in the
`support policy <https://blog.rust-lang.org/2023/09/25/Increasing-Apple-Version-Requirements.html>`__
for the Rust programming language the minimum version needed to raised
to macOS 10.12. If you're using Qiskit on macOS 10.9 you can probably
build Qiskit from source while the rustworkx MSRV (minimum supported Rust
version) is < 1.74, but the precompiled binaries published to PyPI will
only be compatible with macOS >= 10.12.
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ def readme():
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX :: Linux",
Expand Down
12 changes: 2 additions & 10 deletions tests/retworkx_backwards_compat/graph/test_max_weight_matching.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@
# https://github.com/networkx/networkx/blob/3351206a3ce5b3a39bb2fc451e93ef545b96c95b/networkx/algorithms/tests/test_matching.py

import random
import unittest

import fixtures
import networkx
import testtools

import retworkx

Expand All @@ -26,14 +25,7 @@ def match_dict_to_set(match):
return {(u, v) for (u, v) in set(map(frozenset, match.items()))}


class TestMaxWeightMatching(testtools.TestCase):
def setUp(self):
super().setUp()
stdout = self.useFixture(fixtures.StringStream("stdout")).stream
self.useFixture(fixtures.MonkeyPatch("sys.stdout", stdout))
stderr = self.useFixture(fixtures.StringStream("stderr")).stream
self.useFixture(fixtures.MonkeyPatch("sys.stderr", stderr))

class TestMaxWeightMatching(unittest.TestCase):
def compare_match_sets(self, rx_match, expected_match):
for (u, v) in rx_match:
if (u, v) not in expected_match and (v, u) not in expected_match:
Expand Down
12 changes: 2 additions & 10 deletions tests/rustworkx_tests/graph/test_max_weight_matching.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,9 @@
# https://github.com/networkx/networkx/blob/3351206a3ce5b3a39bb2fc451e93ef545b96c95b/networkx/algorithms/tests/test_matching.py

import random
import unittest

import fixtures
import networkx
import testtools

import rustworkx

Expand All @@ -26,14 +25,7 @@ def match_dict_to_set(match):
return {(u, v) for (u, v) in set(map(frozenset, match.items()))}


class TestMaxWeightMatching(testtools.TestCase):
def setUp(self):
super().setUp()
stdout = self.useFixture(fixtures.StringStream("stdout")).stream
self.useFixture(fixtures.MonkeyPatch("sys.stdout", stdout))
stderr = self.useFixture(fixtures.StringStream("stderr")).stream
self.useFixture(fixtures.MonkeyPatch("sys.stderr", stderr))

class TestMaxWeightMatching(unittest.TestCase):
def compare_match_sets(self, rx_match, expected_match):
for (u, v) in rx_match:
if (u, v) not in expected_match and (v, u) not in expected_match:
Expand Down

0 comments on commit 2062a1c

Please sign in to comment.