Fix bug in max-cut solver (issue #611) (backport #635) #3932
This file contains 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
# This code is part of a Qiskit project. | |
# | |
# (C) Copyright IBM 2021, 2024. | |
# | |
# This code is licensed under the Apache License, Version 2.0. You may | |
# obtain a copy of this license in the LICENSE.txt file in the root directory | |
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. | |
# | |
# Any modifications or derivative works of this code must retain this | |
# copyright notice, and modified files need to carry a notice indicating | |
# that they have been altered from the originals. | |
name: Optimization Unit Tests | |
on: | |
push: | |
branches: | |
- main | |
- 'stable/**' | |
pull_request: | |
branches: | |
- main | |
- 'stable/**' | |
schedule: | |
# run every day at 1AM | |
- cron: '0 1 * * *' | |
concurrency: | |
group: ${{ github.repository }}-${{ github.ref }}-${{ github.head_ref }}-${{ github.workflow }} | |
cancel-in-progress: true | |
jobs: | |
Checks: | |
if: github.repository_owner == 'qiskit-community' | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest] | |
python-version: [3.8] | |
steps: | |
- name: Print Concurrency Group | |
env: | |
CONCURRENCY_GROUP: ${{ github.repository }}-${{ github.ref }}-${{ github.head_ref }}-${{ github.workflow }} | |
run: | | |
echo -e "\033[31;1;4mConcurrency Group\033[0m" | |
echo -e "$CONCURRENCY_GROUP\n" | |
shell: bash | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: 'pip' | |
cache-dependency-path: | | |
setup.py | |
requirements.txt | |
requirements-dev.txt | |
- uses: ./.github/actions/install-main-dependencies | |
with: | |
os: ${{ matrix.os }} | |
python-version: ${{ matrix.python-version }} | |
qiskit-main: "false" | |
if: ${{ !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }} | |
- uses: ./.github/actions/install-optimization | |
with: | |
os: ${{ matrix.os }} | |
- name: Install Dependencies | |
run: | | |
pip install jupyter qiskit[visualization] | |
sudo apt-get -y install pandoc graphviz | |
sudo apt-get -y install python3-enchant | |
sudo apt-get -y install hunspell-en-us | |
pip install pyenchant | |
echo "earliest_version: 0.1.0" >> releasenotes/config.yaml | |
shell: bash | |
- name: Run pip check | |
run: | | |
pip install "pip<24.2" | |
pip check | |
if: ${{ !cancelled() }} | |
shell: bash | |
- name: Copyright Check | |
run: | | |
python tools/check_copyright.py -check | |
if: ${{ !cancelled() }} | |
shell: bash | |
- run: make spell | |
if: ${{ !cancelled() }} | |
shell: bash | |
- name: Style Check | |
run: | | |
make clean_sphinx | |
make style | |
if: ${{ !cancelled() }} | |
shell: bash | |
- name: Run make html | |
run: | | |
make clean_sphinx | |
make html | |
cd docs/_build/html | |
mkdir artifacts | |
tar -zcvf artifacts/documentation.tar.gz --exclude=./artifacts . | |
if: ${{ !cancelled() }} | |
shell: bash | |
- name: Run upload documentation | |
uses: actions/upload-artifact@v4 | |
with: | |
name: documentation | |
path: docs/_build/html/artifacts/documentation.tar.gz | |
if: ${{ !cancelled() }} | |
- run: make doctest | |
if: ${{ !cancelled() }} | |
shell: bash | |
Optimization: | |
if: github.repository_owner == 'qiskit-community' | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
python-version: [3.8, 3.9, '3.10', 3.11, 3.12] | |
include: | |
- os: macos-latest | |
python-version: 3.8 | |
- os: macos-latest | |
python-version: 3.11 | |
- os: windows-latest | |
python-version: 3.8 | |
- os: windows-latest | |
python-version: 3.11 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: 'pip' | |
cache-dependency-path: | | |
setup.py | |
requirements.txt | |
requirements-dev.txt | |
- name: install Windows dependencies | |
run: | | |
source "$CONDA/etc/profile.d/conda.sh" | |
conda create -y -n scsenv python=${{ matrix.python-version }} -c conda-forge | |
conda activate scsenv | |
conda install -y scs lapack cvxpy -c conda-forge | |
if: ${{ matrix.os == 'windows-latest' }} | |
shell: bash | |
- uses: ./.github/actions/install-main-dependencies | |
with: | |
os: ${{ matrix.os }} | |
python-version: ${{ matrix.python-version }} | |
if: ${{ !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }} | |
- uses: ./.github/actions/install-optimization | |
with: | |
os: ${{ matrix.os }} | |
- name: Run lint | |
run: | | |
if [ "${{ matrix.os }}" == "windows-latest" ]; then | |
source "$CONDA/etc/profile.d/conda.sh" | |
conda activate scsenv | |
fi | |
make lint | |
shell: bash | |
- name: Run mypy | |
run: | | |
if [ "${{ matrix.os }}" == "windows-latest" ]; then | |
source "$CONDA/etc/profile.d/conda.sh" | |
conda activate scsenv | |
fi | |
make mypy | |
if: ${{ !cancelled() }} | |
shell: bash | |
- name: Optimization Unit Tests under Python ${{ matrix.python-version }} | |
uses: ./.github/actions/run-tests | |
with: | |
os: ${{ matrix.os }} | |
event-name: ${{ github.event_name }} | |
run-slow: ${{ contains(github.event.pull_request.labels.*.name, 'run_slow') }} | |
python-version: ${{ matrix.python-version }} | |
if: ${{ !cancelled() }} | |
- name: Deprecation Messages | |
run: | | |
if [ "${{ matrix.os }}" == "windows-latest" ]; then | |
source "$CONDA/etc/profile.d/conda.sh" | |
conda activate scsenv | |
fi | |
mkdir ./ci-artifact-data | |
python tools/extract_deprecation.py -file out.txt -output ./ci-artifact-data/opt.dep | |
shell: bash | |
- name: Coverage combine | |
run: | | |
if [ "${{ matrix.os }}" == "windows-latest" ]; then | |
source "$CONDA/etc/profile.d/conda.sh" | |
conda activate scsenv | |
fi | |
coverage3 combine | |
mv .coverage ./ci-artifact-data/opt.dat | |
if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == 3.8 }} | |
shell: bash | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.os }}-${{ matrix.python-version }} | |
path: ./ci-artifact-data/* | |
- name: Optimization Unit Tests without cplex/cvxpy/matplotlib/gurobipy under Python ${{ matrix.python-version }} | |
env: | |
PYTHONWARNINGS: default | |
run: | | |
if [ "${{ matrix.os }}" == "windows-latest" ]; then | |
source "$CONDA/etc/profile.d/conda.sh" | |
conda activate scsenv | |
fi | |
pip uninstall -y cplex cvxpy matplotlib gurobipy | |
if [ "${{ github.event_name }}" == "schedule" ] || [ "${{ contains(github.event.pull_request.labels.*.name, 'run_slow') }}" == "true" ]; then | |
export QISKIT_TESTS="run_slow" | |
fi | |
stestr --test-path test run | |
if: ${{ !cancelled() }} | |
shell: bash | |
Tutorials: | |
if: github.repository_owner == 'qiskit-community' | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest] | |
python-version: [3.8, 3.11] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
cache: 'pip' | |
cache-dependency-path: | | |
setup.py | |
requirements.txt | |
requirements-dev.txt | |
- uses: ./.github/actions/install-main-dependencies | |
with: | |
os: ${{ matrix.os }} | |
python-version: ${{ matrix.python-version }} | |
if: ${{ !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }} | |
- uses: ./.github/actions/install-optimization | |
with: | |
os: ${{ matrix.os }} | |
- name: Install Dependencies | |
run: | | |
pip install jupyter qiskit[visualization] | |
sudo apt-get install -y pandoc graphviz | |
shell: bash | |
- name: Run Qiskit Optimization Tutorials | |
env: | |
QISKIT_PARALLEL: False | |
QISKIT_DOCS_BUILD_TUTORIALS: 'always' | |
run: | | |
echo "earliest_version: 0.1.0" >> releasenotes/config.yaml | |
make html | |
cd docs/_build/html | |
mkdir artifacts | |
tar -zcvf artifacts/tutorials.tar.gz --exclude=./artifacts . | |
shell: bash | |
- name: Run upload tutorials | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tutorials${{ matrix.python-version }} | |
path: docs/_build/html/artifacts/tutorials.tar.gz | |
- name: Run stable tutorials | |
env: | |
QISKIT_PARALLEL: False | |
QISKIT_DOCS_BUILD_TUTORIALS: 'always' | |
run: | | |
# clean last sphinx output | |
make clean_sphinx | |
# get current version | |
version=$(pip show qiskit-optimization | awk -F. '/^Version:/ { print substr($1,10), $2-1 }' OFS=.) | |
# download stable version | |
wget https://codeload.github.com/qiskit-community/qiskit-optimization/zip/stable/$version -O /tmp/repo.zip | |
unzip /tmp/repo.zip -d /tmp/ | |
# copy stable tutorials to main tutorials | |
rm -rf docs/tutorials/* | |
cp -R /tmp/qiskit-optimization-stable-$version/docs/tutorials/* docs/tutorials | |
# run tutorials and zip results | |
echo "earliest_version: 0.1.0" >> releasenotes/config.yaml | |
# ignore unreleased/untagged notes | |
tools/ignore_untagged_notes.sh | |
make html | |
cd docs/_build/html | |
mkdir artifacts | |
tar -zcvf artifacts/tutorials.tar.gz --exclude=./artifacts . | |
if: ${{ matrix.python-version == 3.8 && !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }} | |
shell: bash | |
- name: Run upload stable tutorials | |
uses: actions/upload-artifact@v4 | |
with: | |
name: tutorials-stable${{ matrix.python-version }} | |
path: docs/_build/html/artifacts/tutorials.tar.gz | |
if: ${{ matrix.python-version == 3.8 && !startsWith(github.ref, 'refs/heads/stable') && !startsWith(github.base_ref, 'stable/') }} | |
Deprecation_Messages_and_Coverage: | |
if: github.repository_owner == 'qiskit-community' | |
needs: [Checks, Optimization, Tutorials] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: [3.8] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ubuntu-latest-3.8 | |
path: /tmp/o38 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ubuntu-latest-3.9 | |
path: /tmp/o39 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ubuntu-latest-3.10 | |
path: /tmp/o310 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ubuntu-latest-3.11 | |
path: /tmp/o311 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: ubuntu-latest-3.12 | |
path: /tmp/o312 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: macos-latest-3.8 | |
path: /tmp/m38 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: macos-latest-3.11 | |
path: /tmp/m311 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: windows-latest-3.8 | |
path: /tmp/w38 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: windows-latest-3.11 | |
path: /tmp/w311 | |
- name: Install Dependencies | |
run: pip install -U coverage coveralls diff-cover | |
shell: bash | |
- name: Combined Deprecation Messages | |
run: | | |
sort -f -u /tmp/o38/opt.dep /tmp/o39/opt.dep /tmp/o310/opt.dep /tmp/o311/opt.dep /tmp/o312/opt.dep /tmp/m38/opt.dep /tmp/m311/opt.dep /tmp/w38/opt.dep /tmp/w311/opt.dep || true | |
shell: bash | |
- name: Coverage combine | |
run: coverage3 combine /tmp/o38/opt.dat | |
shell: bash | |
- name: Upload to Coveralls | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: coveralls --service=github | |
shell: bash |