diff --git a/.github/workflows/build_centos7.yml b/.github/workflows/build_centos7.yml index 022dd5029..03accc2cb 100644 --- a/.github/workflows/build_centos7.yml +++ b/.github/workflows/build_centos7.yml @@ -46,198 +46,94 @@ jobs: cache: false tags: 1.1.1 - versions: - runs-on: ubuntu-latest - outputs: - antares-version: ${{steps.antares-version.outputs.result}} - antares-xpansion-version: ${{steps.antares-xpansion-version.outputs.result}} - steps: - - uses: actions/checkout@v4 - - name: Read antares-solver version - id: antares-version - uses: ./.github/actions/read-json-value - with: - path: 'antares-version.json' - key: 'antares_version' - - - name: Read antares-xpansion version - id: antares-xpansion-version - uses: ./.github/actions/read-json-value - with: - path: 'antares-version.json' - key: 'antares_xpansion_version' - - build: runs-on: ubuntu-latest - needs: [ docker_publish, versions ] - container: 'antaresrte/xpansion-centos7:1.1.1' - env: - VCPKG_ROOT: ${{ github.workspace }}/vcpkg - ORTOOLS_DIR: $GITHUB_WORKSPACE/or-tools - ORTOOLS_URL: "https://github.com/rte-france/or-tools-rte/releases/download/v9.11-rte1.1/ortools_cxx_centos7_static_sirius.zip" - + needs: [ docker_publish ] outputs: - TGZ_NAME: ${{ steps.export_output.outputs.TGZ_NAME }} - SINGLE_FILE_NAME: ${{ steps.export_output.outputs.SINGLE_FILE_NAME }} - + TGZ_NAME: ${{ steps.get-archives.outputs.TGZ_NAME }} + SINGLE_FILE_NAME: ${{ steps.get-archives.outputs.SINGLE_FILE_NAME }} steps: - - run: | - source /opt/rh/devtoolset-11/enable - echo $PATH >> $GITHUB_PATH - - name: Get release - if: github.event_name == 'release' && github.event.action == 'created' - id: get_release - uses: bruceadams/get-release@v1.3.2 - - uses: actions/checkout@v3 #Keep at 3 - with: - submodules: true - - - run: | - yum install -y nodejs - - - name: Setup cmake - uses: jwlawson/actions-setup-cmake@v1.13 - with: - cmake-version: '3.28.x' - - - name: Download pre-compiled librairies - uses: ./.github/workflows/download-extract-precompiled-libraries-tgz + - uses: actions/checkout@master with: - antares-version: ${{needs.versions.outputs.antares-version}} - os: centos7 - os-full-name: CentOS-7.9.2009 - ortools-url: ${{env.ORTOOLS_URL}} - ortools-dir: ${{env.ORTOOLS_DIR}} - - - name: repo update - run: | - yum update - sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo - sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo - sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo - - - name: Install dependencies - run: | - pip3 install --upgrade pip - pip3 install wheel #Does not work in requirements - pip3 install -r requirements-tests.txt - pip3 install -r requirements-ui.txt + fetch-depth: 0 + sparse-checkout: | + docker + src/vcpkg.json + ref: ${{ env.REF }} - - name: Set-up Xpress with pip for centos 7 - shell: bash - run: | - export PATH=/root/miniconda3/condabin:$PATH - conda install -c fico-xpress "xpress>=9.2,<9.3" - XPRESS_DIR=/root/miniconda3/lib/python3.8/site-packages/xpress - echo "XPRESSDIR=$XPRESS_DIR" >> $GITHUB_ENV - echo "XPAUTH_PATH=$XPRESS_DIR/license/community-xpauth.xpr" >> $GITHUB_ENV - echo "Create symbolic link for XPRESS library file because it is missing in the Python installation" - ln -s $XPRESS_DIR/lib/libxprs.so.42 $XPRESS_DIR/lib/libxprs.so - - - - name: vcpkg install + - name: create vcpkg cache dir run: | - git config --global safe.directory '*' - git submodule update --remote --init vcpkg - pushd vcpkg - git fetch --unshallow - ./bootstrap-vcpkg.sh -disableMetrics - echo "VCPKG_ROOT=$GITHUB_WORKSPACE/vcpkg" >> $GITHUB_ENV echo "VCPKG_CACHE_DIR=$GITHUB_WORKSPACE/vcpkg_cache" >> $GITHUB_ENV - echo "VCPKG_BINARY_SOURCES=clear;files,$GITHUB_WORKSPACE/vcpkg_cache,readwrite" >> $GITHUB_ENV + mkdir -p ${{ github.workspace }}/vcpkg_cache - name: Restore vcpkg binary dir from cache id: cache-vcpkg-binary - uses: actions/cache/restore@v3 + uses: actions/cache/restore@v4 with: - path: ${{ env.VCPKG_CACHE_DIR }} - key: vcpkg-cache-centOS-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} + path: ${{ github.workspace }}/vcpkg_cache + key: vcpkg-cache-centos7-${{ hashFiles('vcpkg.json', '.git/modules/vcpkg/HEAD') }} # Allows to restore a cache when deps have only partially changed (like adding a dependency) - restore-keys: vcpkg-cache-centOS- - - - name: Configure - run: | - source /opt/rh/devtoolset-11/enable - cmake -B _build -S . \ - -DBUILD_TESTING=ON \ - -DCMAKE_PREFIX_PATH="${GITHUB_WORKSPACE}/deps;${{env.ORTOOLS_DIR}}/install" \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=_install \ - -DBUILD_UI=ON \ - -DALLOW_RUN_AS_ROOT=ON \ - -DVCPKG_TARGET_TRIPLET=x64-linux-release \ - -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake - - - name: Build - run: | - cmake --build _build --config Release -j$(nproc) + restore-keys: vcpkg-cache-centos7- - - - name: Tests with Cucumber - uses: ./.github/workflows/cucumber-tests + - name: Setup ccache + uses: hendrikmuhs/ccache-action@v1.2 with: - # feature: "features/outer_loop_tests.feature" - mpi_path: ${GITHUB_WORKSPACE}/_build/vcpkg_installed/x64-linux-release/tools/openmpi/bin + key: centos7-on-${{ runner.os }} - - name: Cache vcpkg binary dir - if: always() - id: save-cache-vcpkg-binary - uses: actions/cache/save@v3 - with: - path: ${{ env.VCPKG_CACHE_DIR }} - key: vcpkg-cache-centOS-${{ hashFiles('src/vcpkg.json', '.git/modules/vcpkg/HEAD') }} - - - name: Running unit tests - timeout-minutes: 120 - shell: bash + - name: set env variables -- DockerFiles run: | - export PATH=${GITHUB_WORKSPACE}/_build/vcpkg_installed/x64-linux-release/tools/openmpi/bin/:$PATH - cd _build - ctest -C Release --output-on-failure -L "unit|benders|lpnamer|medium" + echo "DOCKERFILE=$(pwd)/docker/centos7-build" >> $GITHUB_ENV + echo "DOCKERDIR=$(pwd)/docker" >> $GITHUB_ENV - ####################### - - name: Install + - name: Build the image and Antares-Xpansion + run: | + ls -latr .ccache/ + echo "-------------" + docker build \ + -t antaresxpansion:centos7 \ + --build-arg="BRANCH=${{ github.ref_name }}" \ + --build-arg="NPROC=$(nproc)" \ + --build-arg="VCPKG_CACHE_DIR=./vcpkg_cache" \ + --build-arg CCACHE_DIR=./.ccache \ + --build-arg CCACHE_KEY=centos7-on-${{ runner.os }} \ + -f ${{ env.DOCKERFILE }} . + + - name: create a container without starting it && retrieve archive dir + id: get-archives run: | - cd _build - cmake --install . + container_id=$(docker create antaresxpansion:centos7) + docker cp $container_id:/workspace/antares-xpansion/archive archive + echo "TGZ_NAME=$(basename "$(ls ./archive/multiple/*.tar.gz)")" >> $GITHUB_OUTPUT + echo "SINGLE_FILE_NAME=$(basename "$(ls ./archive/single/*.tar.gz)")" >> $GITHUB_OUTPUT + docker cp $container_id:/workspace/vcpkg_cache ${{ env.VCPKG_CACHE_DIR }} + docker cp $container_id:/workspace/.ccache/. .ccache + ls -la .ccache + docker rm $container_id - - id: create-single-file - name: Single file .tar.gz creation - uses: ./.github/workflows/single-file-creation-tgz + - name: Cache vcpkg binary dir + if: always() + id: save-cache-vcpkg-binary + uses: actions/cache/save@v4 with: - antares-xpansion-version: ${{needs.versions.outputs.antares-xpansion-version}} - - - name: Installer .tar.gz creation - run: | - cd _build - export FILE_NAME="antaresXpansion-${{needs.versions.outputs.antares-xpansion-version}}-CentOS-7.9.2009" - cpack -G TGZ -D CPACK_PACKAGE_FILE_NAME=$FILE_NAME - #Need to differentiate between xpress/no_xpress files - #Cpack command line doesn't seem to care about -P or -R options - echo "TGZ_NAME=$FILE_NAME.tar.gz" >> $GITHUB_ENV + path: ${{ github.workspace }}/vcpkg_cache + key: vcpkg-cache-centos7-${{ hashFiles('vcpkg.json', '.git/modules/vcpkg/HEAD') }} - name: Upload .tar.gz - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: ${{env.TGZ_NAME}} - path: _build/${{env.TGZ_NAME}} + path: archive/single + name: ${{ steps.get-archives.outputs.SINGLE_FILE_NAME }} - - name: Upload single file - uses: actions/upload-artifact@v3 + - name: Upload .tar.gz + uses: actions/upload-artifact@v4 with: - name: ${{ steps.create-single-file.outputs.archive-name }} - path: ${{ steps.create-single-file.outputs.archive-path }} + path: archive/multiple + name: ${{ steps.get-archives.outputs.TGZ_NAME }} - - name: export asset name in output - id: export_output - run: | - echo "TGZ_NAME=${{env.TGZ_NAME}}" >> $GITHUB_OUTPUT - echo "SINGLE_FILE_NAME=${{ steps.create-single-file.outputs.archive-name }}" >> $GITHUB_OUTPUT - ####################### + ##################### userguide: if: github.event_name == 'release' && github.event.action == 'created' runs-on: ubuntu-latest @@ -291,7 +187,7 @@ jobs: needs: [ build, build_running_image ] steps: - name: Download build assets - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: ${{needs.build.outputs.TGZ_NAME}} @@ -338,7 +234,7 @@ jobs: needs: [ build, build_running_image ] steps: - name: Download build assets - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: ${{needs.build.outputs.SINGLE_FILE_NAME}} @@ -392,13 +288,13 @@ jobs: path: docs/ - name: Download build assets - uses: actions/download-artifact@v3 #build use v3 + uses: actions/download-artifact@v4 with: name: ${{needs.build.outputs.TGZ_NAME}} path: _build/ - name: Download build assets single file - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: ${{needs.build.outputs.SINGLE_FILE_NAME}} path: . diff --git a/.github/workflows/build_oracle8.yml b/.github/workflows/build_oracle8.yml index 0ab49eac4..7eda7e2f9 100644 --- a/.github/workflows/build_oracle8.yml +++ b/.github/workflows/build_oracle8.yml @@ -136,7 +136,6 @@ jobs: -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=_install \ -DCMAKE_PREFIX_PATH="${GITHUB_WORKSPACE}/deps;${{env.ORTOOLS_DIR}}/install" \ - -DBUILD_UI=OFF \ -DALLOW_RUN_AS_ROOT=ON \ -DVCPKG_TARGET_TRIPLET=x64-linux-release \ -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake diff --git a/.github/workflows/build_ubuntu.yml b/.github/workflows/build_ubuntu.yml index 0c7dbf26d..f20f73899 100644 --- a/.github/workflows/build_ubuntu.yml +++ b/.github/workflows/build_ubuntu.yml @@ -63,7 +63,6 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements-tests.txt - pip install -r requirements-ui.txt - name: Set-up Xpress with pip for Ubuntu shell: bash @@ -142,7 +141,6 @@ jobs: -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=_install \ -DCMAKE_PREFIX_PATH="${{ github.workspace }}/deps;${{env.ORTOOLS_DIR}}/install" \ - -DBUILD_UI=ON \ -DVCPKG_TARGET_TRIPLET=x64-linux-release \ -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake diff --git a/.github/workflows/build_windows.yml b/.github/workflows/build_windows.yml index 45c695e70..3da760ab0 100644 --- a/.github/workflows/build_windows.yml +++ b/.github/workflows/build_windows.yml @@ -52,7 +52,6 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements-tests.txt - pip install -r requirements-ui.txt - name: Set-up Xpress with pip shell: bash @@ -121,7 +120,6 @@ jobs: -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} -DCMAKE_INSTALL_PREFIX=_install -DPython3_EXECUTABLE="${{ env.Python3_ROOT_DIR }}/python.exe" - -DBUILD_UI=ON - name: Build run: | diff --git a/.github/workflows/ubuntu-system-deps-build.yml b/.github/workflows/ubuntu-system-deps-build.yml index b54157050..52f916054 100644 --- a/.github/workflows/ubuntu-system-deps-build.yml +++ b/.github/workflows/ubuntu-system-deps-build.yml @@ -36,7 +36,6 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements-tests.txt - pip install -r requirements-ui.txt - name: Install mandatory system libraries run: | @@ -94,7 +93,6 @@ jobs: -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=_install \ - -DBUILD_UI=ON \ -DVCPKG_TARGET_TRIPLET=x64-linux-release \ -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake diff --git a/.github/workflows/windows-vcpkg-deps-build.yml b/.github/workflows/windows-vcpkg-deps-build.yml index b9b8c78bb..af97b6562 100644 --- a/.github/workflows/windows-vcpkg-deps-build.yml +++ b/.github/workflows/windows-vcpkg-deps-build.yml @@ -39,7 +39,6 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements-tests.txt - pip install -r requirements-ui.txt - name: Pre-requisites shell: cmd @@ -75,7 +74,7 @@ jobs: - name: Configure run: | $pwd=Get-Location - cmake -B _build -S . -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} -DCMAKE_INSTALL_PREFIX=_install -DBUILD_UI=ON + cmake -B _build -S . -DBUILD_TESTING=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }} -DCMAKE_INSTALL_PREFIX=_install - name: Cache vcpkg binary dir if: always() diff --git a/.gitignore b/.gitignore index 89d88ecaa..5a5859edb 100644 --- a/.gitignore +++ b/.gitignore @@ -44,7 +44,6 @@ CMakeFiles/* src/python/config.yaml src/python/antares_xpansion/__version__.py src/python/resources.py -config-ui.yaml build_config.yaml # Tests @@ -54,6 +53,7 @@ coverage-reports # Doc pdf file antaresxpansionuserguide.pdf include/google/protobuf/message.h +xwiki_source # vscode .vscode diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bf1ff759..f67736238 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -255,7 +255,6 @@ endif (COIN_OR) # =========================================================================== # Targets # =========================================================================== -option(BUILD_UI "Build antares-xpansion ui" OFF) option(BUILD_TESTING "Activates unit tests building" OFF) if (WIN32) diff --git a/README.md b/README.md index b880f59f2..05e307cae 100644 --- a/README.md +++ b/README.md @@ -96,11 +96,6 @@ where `x.y.z` is the version number. ``` - -### Graphical user interface - -Antares-Xpansion comes with a GUI. The GUI can be launched by running `antares-xpansion-ui.exe`. For now, this GUI is in the experimental phase. - ## Technologies Antares-Xpansion is developed mainly in **C++** and uses a **Python** runner to drive the execution of multiple executables. diff --git a/docker/centos7-build b/docker/centos7-build new file mode 100644 index 000000000..49233b49e --- /dev/null +++ b/docker/centos7-build @@ -0,0 +1,126 @@ +FROM antaresrte/xpansion-centos7:1.1.1 + + + +CMD ["/bin/bash"] + +RUN mkdir /workspace + +RUN echo "source /opt/rh/devtoolset-11/enable" >> /etc/bashrc +SHELL ["/bin/bash", "--login", "-c"] + + +RUN mkdir -p /workspace/vcpkg_cache +ARG VCPKG_CACHE_DIR +COPY $VCPKG_CACHE_DIR /workspace/ + + +ARG BRANCH=develop +RUN cd /workspace && \ + source /opt/rh/rh-git227/enable && \ + git clone https://github.com/AntaresSimulatorTeam/antares-xpansion.git --depth=1 --single-branch --branch $BRANCH && \ + cd antares-xpansion && \ + git submodule update --init vcpkg && ./vcpkg/bootstrap-vcpkg.sh -disableMetrics && \ + export VCPKG_ROOT=/workspace/antares-xpansion/vcpkg + + + + +RUN ORTOOLS_TAG=$(cat /workspace/antares-xpansion/antares-version.json | jq -r '."or-tools-rte"' ) && \ + echo "ORTOOLS_TAG=$ORTOOLS_TAG" && \ + URL_ORTOOLS=https://github.com/rte-france/or-tools-rte/releases/download/v$ORTOOLS_TAG/ortools_cxx_centos7_static_sirius.zip && \ + mkdir -p ortools && cd ortools && \ + wget -q -O ortools.zip $URL_ORTOOLS && \ + unzip -q ortools.zip && \ + rm ortools.zip + +RUN ANTARES_VERSION=$(cat /workspace/antares-xpansion/antares-version.json | jq -r '."antares_version"' ) && \ + echo "ANTARES_VERSION=$ANTARES_VERSION" && \ + mkdir -p deps && \ + URL_ANTARES=https://github.com/AntaresSimulatorTeam/Antares_Simulator/releases/download/v$ANTARES_VERSION/antares-${ANTARES_VERSION}-CentOS-7.9.2009.tar.gz && \ + wget $URL_ANTARES && \ + tar -xvf antares-${ANTARES_VERSION}-CentOS-7.9.2009.tar.gz -C deps --strip-components=1 &&\ + rm -rf antares-${ANTARES_VERSION}-CentOS-7.9.2009.tar.gz + +WORKDIR /workspace/antares-xpansion + +RUN pip3 install --upgrade pip && \ + pip3 install wheel && \ + pip3 install -r requirements-tests.txt + +# Accept build arguments for ccache +ARG CCACHE_DIR +ARG CCACHE_KEY + +# Copy ccache directory into the container +COPY ${CCACHE_DIR:-/dev/null} /workspace/.ccache + +# Configure ccache environment variables +ENV CCACHE_DIR=/workspace/.ccache +ENV CCACHE_BASEDIR=/workspace +ENV CCACHE_COMPRESS=1 +ENV PATH="/usr/lib/ccache:$PATH" + +RUN source /opt/rh/devtoolset-11/enable && \ + source /opt/rh/rh-git227/enable && \ + export VCPKG_BINARY_SOURCES="clear;files,/workspace/vcpkg_cache,readwrite" && \ + cmake -B _build -S . \ + -DBUILD_TESTING=ON \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_PREFIX_PATH="/deps;/ortools/install" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=_install \ + -DALLOW_RUN_AS_ROOT=ON \ + -DVCPKG_TARGET_TRIPLET=x64-linux-release \ + -DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake + +ARG NPROC=2 +RUN source /opt/rh/devtoolset-11/enable && \ + source /opt/rh/rh-git227/enable && \ + export VCPKG_BINARY_SOURCES="clear;files,/workspace/vcpkg_cache,readwrite" && \ + cmake --build _build --config Release -j${NPROC} &&\ + ccache -s +# tests +RUN export PATH=/root/miniconda3/condabin:$PATH && \ + XPRESS_DIR=/root/miniconda3/lib/python3.8/site-packages/xpress && \ + export XPRESSDIR=$XPRESS_DIR \ + export XPAUTH_PATH=$XPRESS_DIR/license/community-xpauth.xpr && \ + echo "Create symbolic link for XPRESS library file because it is missing in the Python installation" && \ + ln -s $XPRESS_DIR/lib/libxprs.so.42 $XPRESS_DIR/lib/libxprs.so && \ + export PATH="/workspace/antares-xpansion/_build/vcpkg_installed/x64-linux-release/tools/openmpi/bin:$PATH" && \ + pushd tests/end_to_end && \ + behave --tags ~@flaky cucumber/features --no-capture --no-capture-stderr --format pretty && \ + popd && \ + cd _build && \ + ctest -C Release --output-on-failure -L "unit|benders|lpnamer|medium" +# Install +RUN cd _build && \ + cmake --install . + +RUN XPANSION_VERSION=$(cat /workspace/antares-xpansion/antares-version.json | jq -r '."antares_xpansion_version"' ) && \ + LSB_RELEASE_ID_SHORT=$(lsb_release --short --id) && \ + LSB_RELEASE_VERSION_SHORT=$(lsb_release --short --release) && \ + cd _install && \ + rm -f ./antares-xpansion-launcher* && \ + pyinstaller -F ../src/python/launch.py -n antares-xpansion-launcher --add-data "../src/python/config.yaml:." --add-data "./bin/:bin" && \ + mv ./dist/antares-xpansion-launcher* . && \ + rm -rf bin && \ + rm -rf build && \ + rm -rf dist && \ + rm -f *.spec && \ + cd .. &&\ + ARCHIVE_NAME=antaresXpansion-$XPANSION_VERSION-$LSB_RELEASE_ID_SHORT-$LSB_RELEASE_VERSION_SHORT-single-file.tar.gz && \ + tar -czf $ARCHIVE_NAME -C _install . && \ + mkdir -p archive/single && \ + mv $ARCHIVE_NAME archive/single + +RUN XPANSION_VERSION=$(cat /workspace/antares-xpansion/antares-version.json | jq -r '."antares_xpansion_version"' ) && \ + cd _build && \ + export FILE_NAME="antaresXpansion-$XPANSION_VERSION-CentOS-7.9.2009" && \ + cpack -G TGZ -D CPACK_PACKAGE_FILE_NAME=$FILE_NAME && \ + cd .. && \ + mkdir -p archive/multiple && \ + mv _build/${FILE_NAME}.tar.gz archive/multiple + + diff --git a/docker/centos7-system-deps b/docker/centos7-system-deps index 4c68196a3..3464734b4 100644 --- a/docker/centos7-system-deps +++ b/docker/centos7-system-deps @@ -15,14 +15,10 @@ RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.r sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo RUN \ - yum install -y wget git epel-release redhat-lsb-core gcc gcc-c++ make centos-release-scl scl-utils &&\ - yum install -y devtoolset-11-gcc* environment-modules rpm-build zlib-devel &&\ - yum install -y doxygen graphviz &&\ - yum install -y install python3-devel + yum install -y wget rh-git227-git epel-release redhat-lsb-core centos-release-scl scl-utils &&\ + yum install -y devtoolset-11-gcc* environment-modules rpm-build zlib-devel ccache &&\ + yum install -y install python3-pip jq && python3 -m pip install --upgrade pip -RUN \ - yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm &&\ - yum install -y git # The default python version (3.6) is too old to download xpress with pip # This version of miniconda embeds python3.8 @@ -35,6 +31,13 @@ RUN \ RUN \ rm -f Miniconda3-py38_23.5.1-0-Linux-x86_64.sh +RUN export PATH=/root/miniconda3/condabin:$PATH && \ + conda install -c fico-xpress "xpress>=9.2,<9.3" + + +# Install CMake +RUN pip3 install cmake==3.28.4 + #create user RUN useradd user diff --git a/docs/developer-guide/install_from_sources/0-INSTALL.md b/docs/developer-guide/install_from_sources/0-INSTALL.md index e4fad0faf..fd12fc3e4 100644 --- a/docs/developer-guide/install_from_sources/0-INSTALL.md +++ b/docs/developer-guide/install_from_sources/0-INSTALL.md @@ -18,9 +18,8 @@ Follow this [link][Doxygen_Code_Documentation] for Doxygen code documentation. - [Dependencies](2-Dependencies-install.md) - [Build](3-Build.md) - [Tests](4-Tests.md) -- [UI creation](5-ui-creation.md) -- [Installer creation](6-Installer-creation.md) -- [Xpress integration](7-Xpress.md) +- [Installer creation](5-Installer-creation.md) +- [Xpress integration](6-Xpress.md) [ubuntu_system_svg]: https://github.com/AntaresSimulatorTeam/antares-xpansion/actions/workflows/ubuntu-system-deps-build.yml/badge.svg?query=branch%3Adevelop [ubuntu_system_link]: https://github.com/AntaresSimulatorTeam/antares-xpansion/actions/workflows/ubuntu-system-deps-build.yml?query=branch%3Adevelop diff --git a/docs/developer-guide/install_from_sources/3-Build.md b/docs/developer-guide/install_from_sources/3-Build.md index ea64bdd47..4810e6f52 100644 --- a/docs/developer-guide/install_from_sources/3-Build.md +++ b/docs/developer-guide/install_from_sources/3-Build.md @@ -42,7 +42,6 @@ Here is a list of available CMake configure options: |`BUILD_not_system`|`ON`|Enable build of external librairies not available on system package manager.| |`BUILD_ALL`|`OFF`|Enable build of ALL external librairies.| |`BUILD_TESTING`|`OFF`|Enable test build.| -|`BUILD_UI`|`OFF`|Enable UI build.| |`ALLOW_RUN_AS_ROOT`|`OFF`|allow mpi to run as root for centOs docker.| Additionnal vcpkg options: diff --git a/docs/developer-guide/install_from_sources/6-Installer-creation.md b/docs/developer-guide/install_from_sources/5-Installer-creation.md similarity index 100% rename from docs/developer-guide/install_from_sources/6-Installer-creation.md rename to docs/developer-guide/install_from_sources/5-Installer-creation.md diff --git a/docs/developer-guide/install_from_sources/5-ui-creation.md b/docs/developer-guide/install_from_sources/5-ui-creation.md deleted file mode 100644 index 0e940a4e0..000000000 --- a/docs/developer-guide/install_from_sources/5-ui-creation.md +++ /dev/null @@ -1,26 +0,0 @@ -# User interface creation -A PyQt5 user interface (UI) is available: `src\python\antares-xpansion-ui.py` To build the UI, the option `BUILD_UI` must be enabled at [configure time](3-Build.md#configure). - -## Install requirements - -=== "Windows" - ``` - pip3 install -r requirements-ui.txt - ``` -=== "Centos" - ``` - pip3 install -r requirements-ui.txt - ``` -=== "Ubuntu" - - ``` - sudo apt install python3-pyqt5 - ``` - -## Force new generation for resource file -A `resource.py` python module is created when configuring CMake. To force the regeneration of this file if images are changed, use `pyrcc5`. -``` -cd src\python -pyrcc5 images.qrc > resources.py -``` - diff --git a/docs/developer-guide/install_from_sources/7-Xpress.md b/docs/developer-guide/install_from_sources/6-Xpress.md similarity index 100% rename from docs/developer-guide/install_from_sources/7-Xpress.md rename to docs/developer-guide/install_from_sources/6-Xpress.md diff --git a/docs/pdf-doc-generation-with-sphinx/create_xwiki_doc.sh b/docs/pdf-doc-generation-with-sphinx/create_xwiki_doc.sh new file mode 100644 index 000000000..fb4b0d73e --- /dev/null +++ b/docs/pdf-doc-generation-with-sphinx/create_xwiki_doc.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# This script can be useful to modify the markdown source files of the docs used by mkdocs to a format that can be (almost) correctly formatted with xWiki in markdown mode. The main modifications are to replace the following : +# Inline math : \\( ...some math... \\) with the mathjax macro {{mathjax}} ...some math... {{/mathjax}} +# Display mode math : $$ ...some math... $$ with the mathjax macro and an equation environement {{mathjax}}\begin{equation*} ...some math... \end{equation*}{{/mathjax}} +# Special characters that are managed differently within mkdocs and xWiki + +# copy reference guide md files and assets +rm -rf xwiki_source/user-guide +cp -r ../user-guide xwiki_source/ +cp -r ../assets/ xwiki_source/ +cp ../index.md xwiki_source/user-guide/ + +# change style for inline latex math \\( -> {{mathjax}} and \\) -> {{/mathjax}} +find xwiki_source/user-guide/ -type f -name "*.md" -exec sed -i 's=\\\\)=\\)\{\{/mathjax\}\}=g ; s=\\\\(=\{\{mathjax\}\}\\(=g' {} \; + +# change style for display latex math \n$$ -> {{mathjax}}\begin{equation*} and $$\n -> \end{equation*}{{/mathjax}} +find xwiki_source/user-guide/ -type f -name "*.md" -exec perl -0777 -pi -e 's/(\s*)\$\$\n\s*\n/\1\\end{equation*}\1\{\{\/mathjax}}\n\n/g; s/\n\n(\s*)\$\$/\n\1\{\{mathjax}}\n\1\\begin{equation*}/g' {} \; + +# Replace \\{ with \{ +find xwiki_source/user-guide/ -type f -name "*.md" -exec sed -i 's=\\\\{=\\\{=g ; s=\\\\}=\\\}=g' {} \; + +# Replace \\\\ with \\ +find xwiki_source/user-guide/ -type f -name "*.md" -exec sed -i 's=\\\\\\\\=\\\\=g' {} \; + +# Replace \_ (used in mkdocs to avoid confusion with italic) with _ for latex/xWiki +find xwiki_source/user-guide/ -type f -name "*.md" -exec sed -i 's=\\_=_=g' {} \; + +# # clean +# To be run once the content of the files within xwiki_source/user-guide has been copied (manually) to xWiki +# rm -rf xwiki_source/user-guide diff --git a/docs/user-guide/get-started/launching-optimization.md b/docs/user-guide/get-started/launching-optimization.md index 8523bf655..929cfd9e3 100644 --- a/docs/user-guide/get-started/launching-optimization.md +++ b/docs/user-guide/get-started/launching-optimization.md @@ -94,10 +94,6 @@ Show the Antares-Xpansion version. Show the Antares-Simulator version (used in the `antares` step). -## Graphical user interface - -Since v0.6.0, Antares-Xpansion comes with a GUI. The GUI can be launched by running `antares-xpansion-ui.exe`. For now, this GUI is in the experimental phase. - ![](../../assets/media/ui.png) ## Output of Antares-Xpansion diff --git a/docs/user-guide/optimization-principles/problem-formalization.md b/docs/user-guide/optimization-principles/problem-formalization.md index 763ee02f1..3a7bc492b 100644 --- a/docs/user-guide/optimization-principles/problem-formalization.md +++ b/docs/user-guide/optimization-principles/problem-formalization.md @@ -132,7 +132,7 @@ $$ $$ This problem can be linearized by introducing continuous variables \\(\vartheta_{l, s} \in \mathbb{R}\\) for \\(l \in [1, N]\\) and \\(s \in [1,52]\\), which gives rise to an equivalent reformulation of the investment problem, known as the Benders reformulation or _Benders master problem_: - + $$ \begin{aligned} \min\_{x \in \mathcal{X}}\ & c^{\top}x + \sum_{l=1}^{N} p_{l} \sum_{s=1}^{52} \vartheta_{l, s} \\\\ diff --git a/mkdocs.yml b/mkdocs.yml index e6f326749..19c636d79 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -53,8 +53,8 @@ nav: - 'Dependencies install': 'developer-guide/install_from_sources/2-Dependencies-install.md' - 'Build': 'developer-guide/install_from_sources/3-Build.md' - 'Tests': 'developer-guide/install_from_sources/4-Tests.md' - - 'UI creation': 'developer-guide/install_from_sources/5-ui-creation.md' - - 'Installer creation': 'developer-guide/install_from_sources/6-Installer-creation.md' + - 'Installer creation': 'developer-guide/install_from_sources/5-Installer-creation.md' + - 'Xpress': 'developer-guide/install_from_sources/6-Xpress.md' - 'Antares-Xpansion simulation procedure' : - 'Overview' : 'developer-guide/xpansion_steps/0-overview.md' - 'Antares optimization problem retrieval' : 'developer-guide/xpansion_steps/1-antares-solver-problem.md' diff --git a/requirements-ui.txt b/requirements-ui.txt deleted file mode 100644 index 7984510f3..000000000 --- a/requirements-ui.txt +++ /dev/null @@ -1,2 +0,0 @@ --r requirements.txt -PyQt5 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 903eeb892..b19b4e0c7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -15,15 +15,6 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/python/config.yaml.in ${CMAKE_CURRENT #use file generator to define xpansion executable name with $ : need to be done with generate instead of configure because values are not available at configure time file(GENERATE OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/python/config.yaml INPUT ${CMAKE_CURRENT_SOURCE_DIR}/python/config.yaml) -if (BUILD_UI) - execute_process(COMMAND pyrcc5 images.qrc - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/python/ - OUTPUT_FILE resources.py) - - #configure file to define install directory - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/python/config-ui.yaml.in ${CMAKE_CURRENT_SOURCE_DIR}/python/config-ui.yaml) -endif() - find_program(PYINSTALLER "pyinstaller") #if pyinstaller available add compiled version of python scripts @@ -35,10 +26,6 @@ if (PYINSTALLER) install(CODE "execute_process(COMMAND ${PYINSTALLER} -F ${CMAKE_CURRENT_SOURCE_DIR}/python/launch.py -n antares-xpansion-launcher --add-data \"${CMAKE_CURRENT_SOURCE_DIR}/python/config.yaml:.\")" ) endif() - if (BUILD_UI) - install(CODE "execute_process(COMMAND ${PYINSTALLER} -F ${CMAKE_CURRENT_SOURCE_DIR}/python/antares-xpansion-ui.py -n antares-xpansion-ui)" ) - endif() - #code is executed in CMAKE_BINARY_DIR install(DIRECTORY ${CMAKE_BINARY_DIR}/dist/ DESTINATION . diff --git a/src/python/antares-xpansion-ui.py b/src/python/antares-xpansion-ui.py deleted file mode 100644 index 9e0c4735b..000000000 --- a/src/python/antares-xpansion-ui.py +++ /dev/null @@ -1,332 +0,0 @@ -import os -import psutil -import sys -import yaml - -from PyQt5.QtCore import Qt -from PyQt5.QtGui import QFont, QMovie, QIcon -from PyQt5.QtWidgets import QApplication, QLabel, QLineEdit, QPushButton, QVBoxLayout, \ - QHBoxLayout, QWidget, QFileDialog, QRadioButton, QSpacerItem, QSizePolicy, QPlainTextEdit, QMessageBox, QGridLayout, \ - QComboBox, QGroupBox, QSpinBox, QCheckBox -from PyQt5.QtCore import QProcess, QByteArray, QSettings -from pathlib import Path - -import resources - -STEPS = ["full", "antares", "problem_generation", - "benders", "study_update", "sensitivity", "resume"] -STEP_WITH_SIMULATION_NAME = ["problem_generation", - "benders", "study_update", "sensitivity", "resume"] -NEW_SIMULATION_NAME = "New" -LAST_ANTARES_STUDY_DIR = "last_antares_study_dir" - - -class MainWidget(QWidget): - - def __init__(self, parent=None): - QWidget.__init__(self, parent=parent) - - self.setWindowTitle('antares-xpansion-ui') - - self._define_install_dir() - - self._settings = QSettings("pyqt_settings.ini", QSettings.IniFormat) - - self._define_launcher_name() - self._main_layout = QVBoxLayout() - - self._init_antares_study_selection_widget() - self._init_antares_xpansion_run_widget() - self._init_log_widget() - - self.setLayout(self._main_layout) - - self._check_run_availability() - - def _define_install_dir(self): - self._install_dir = None - - if Path('config-ui.yaml').is_file(): - with open('config-ui.yaml') as file: - content = yaml.full_load(file) - if content is not None: - self._install_dir = content.get('INSTALL_DIR', "bin") - - def _define_launcher_name(self): - self._launcher_name = "antares-xpansion-launcher" - if sys.platform.startswith("win32"): - self._launcher_name += ".exe" - - def _init_log_widget(self): - log_layout = QHBoxLayout() - self._log_text_edit = QPlainTextEdit() - self._log_text_edit.setReadOnly(True) - font = QFont() - font.setFamily("DejaVu Sans Mono") - self._log_text_edit.setFont(font) - log_layout.addWidget(self._log_text_edit) - self._main_layout.addLayout(log_layout) - - def _init_antares_xpansion_run_widget(self): - - self._xpansion_config_layout = QHBoxLayout() - - self._init_step_selection_widget() - self._init_xpansion_config_widget() - - self._xpansion_config_layout.addSpacerItem( - QSpacerItem(1, 1, QSizePolicy.Expanding, QSizePolicy.Fixed)) - self._init_xpansion_run_widget() - - self._main_layout.addLayout(self._xpansion_config_layout) - - def _init_xpansion_config_widget(self): - - method_layout = QHBoxLayout() - self._sequential_radio_button = QRadioButton('Sequential') - self._sequential_radio_button.setChecked(True) - self._sequential_radio_button.toggled.connect(self._method_changed) - method_layout.addWidget(self._sequential_radio_button) - self._mpibenders_radio_button = QRadioButton('Parallel') - self._mpibenders_radio_button.toggled.connect(self._method_changed) - method_layout.addWidget(self._mpibenders_radio_button) - method_layout.addWidget(QLabel("core number")) - self._nb_core_edit = QSpinBox() - self._nb_core_edit.setMinimum(2) - self._nb_core_edit.setMaximum(128) - cpu_count = psutil.cpu_count(logical=False) - self._nb_core_edit.setValue(cpu_count) - self._nb_core_edit.setEnabled(False) - method_layout.addWidget(self._nb_core_edit) - nb_cpu_label = QLabel( - "available physical cores {nb_cpu}".format( - nb_cpu=cpu_count)) - nb_cpu_label.setTextInteractionFlags(Qt.LinksAccessibleByMouse) - nb_cpu_label.linkActivated.connect(self._use_available_core) - method_layout.addWidget(nb_cpu_label) - method_gb = QGroupBox("Method") - method_gb.setLayout(method_layout) - self._xpansion_config_layout.addWidget(method_gb) - - option_gb = QGroupBox("Options") - option_layout = QVBoxLayout() - self._keep_mps_checkbox = QCheckBox("Keep intermediate files") - self._keep_mps_checkbox.setChecked(False) - option_layout.addWidget(self._keep_mps_checkbox) - option_gb.setLayout(option_layout) - self._xpansion_config_layout.addWidget(option_gb) - - def _init_xpansion_run_widget(self): - self._running_label = QLabel() - self.movie = QMovie(":/images/loading.gif", QByteArray()) - self._running_label.setMovie(self.movie) - self.movie.start() - self._running_label.setVisible(False) - self._xpansion_config_layout.addWidget(self._running_label) - self._run_process = QProcess() - self._run_process.readyReadStandardOutput.connect(self._handle_stdout) - self._run_process.readyReadStandardError.connect(self._handle_stderr) - self._run_process.stateChanged.connect(self._handle_state) - self._run_process.finished.connect(self._cleanup_run_process) - self._run_button = QPushButton('Run') - self._set_run_label() - self._run_button.clicked.connect(self._run_or_stop) - self._xpansion_config_layout.addWidget(self._run_button) - - def _init_antares_study_selection_widget(self): - layout_study_path = QGridLayout() - - layout_study_path.addWidget(QLabel('Antares study path'), 0, 0) - self._study_path_text_edit = QLineEdit( - self._settings.value(LAST_ANTARES_STUDY_DIR)) - layout_study_path.addWidget(self._study_path_text_edit, 0, 1) - select_button = QPushButton('...') - select_button.clicked.connect(self._select_study_path) - layout_study_path.addWidget(select_button, 0, 2) - - self._combo_simulation_name = QComboBox() - self._combo_simulation_name.currentTextChanged.connect( - self._simulation_name_changed) - layout_study_path.addWidget(QLabel('Simulation name'), 1, 0) - layout_study_path.addWidget(self._combo_simulation_name, 1, 1) - self._init_simulation_name_combo( - self._settings.value(LAST_ANTARES_STUDY_DIR)) - - self._main_layout.addLayout(layout_study_path) - - def _init_step_selection_widget(self): - step_layout = QHBoxLayout() - - self._step_buttons = {} - for step in STEPS: - self._step_buttons[step] = QRadioButton(step) - self._step_buttons[step].setEnabled( - step not in STEP_WITH_SIMULATION_NAME) - step_layout.addWidget(self._step_buttons[step]) - - self._step_buttons["full"].setChecked(True) - - self._step_gb = QGroupBox("Steps") - self._step_gb.setLayout(step_layout) - self._xpansion_config_layout.addWidget(self._step_gb) - - def set_study_path(self, study_path: str): - self._settings.setValue(LAST_ANTARES_STUDY_DIR, study_path) - self._study_path_text_edit.setText(study_path) - self._init_simulation_name_combo(study_path) - self._check_run_availability() - - def _init_simulation_name_combo(self, study_path: str): - if study_path: - self._combo_simulation_name.blockSignals(True) - self._combo_simulation_name.clear() - self._combo_simulation_name.addItem(NEW_SIMULATION_NAME) - self._insert_study_simulation_in_combobox(study_path) - self._combo_simulation_name.blockSignals(False) - - def _insert_study_simulation_in_combobox(self, study_path): - output_path = Path(study_path) / 'output' - if output_path.is_dir(): - for directory in sorted(output_path.iterdir(), key=os.path.getmtime, reverse=True): - if (output_path / directory).is_dir(): - self._combo_simulation_name.addItem(directory.name) - - def _select_study_path(self): - self.set_study_path( - QFileDialog.getExistingDirectory(self, 'Select study folder', self._study_path_text_edit.text())) - - def _check_run_availability(self): - study_path = self._study_path_text_edit.text() - run_available = Path(study_path).is_dir() - self._run_button.setEnabled(run_available) - self._step_gb.setEnabled(run_available) - - def _get_method(self): - if self._mpibenders_radio_button.isChecked(): - return "mpibenders" - if self._sequential_radio_button.isChecked(): - return "sequential" - - def _get_step(self): - for step in self._step_buttons: - if self._step_buttons[step].isChecked(): - return step - - def _get_nb_core(self): - return self._nb_core_edit.value() - - def _get_keep_mps(self): - return self._keep_mps_checkbox.isChecked() - - def _handle_stdout(self): - data = self._run_process.readAllStandardOutput() - stdout = bytes(data).decode("utf8") - self._add_text_to_log(stdout) - - def _handle_stderr(self): - data = self._run_process.readAllStandardError() - stderr = bytes(data).decode("utf8") - self._add_text_to_log(stderr) - - def _handle_state(self, state): - if state == QProcess.NotRunning: - self._set_run_label() - if self._get_step() not in STEP_WITH_SIMULATION_NAME: - self._init_simulation_name_combo( - self._study_path_text_edit.text()) - else: - self._set_stop_label() - - def _method_changed(self): - self._nb_core_edit.setEnabled( - self._mpibenders_radio_button.isChecked()) - - def _use_available_core(self): - cpu_count = psutil.cpu_count(logical=False) - self._nb_core_edit.setValue(cpu_count) - - def _set_stop_label(self): - self._run_button.setText("Stop") - self._run_button.setIcon(QIcon(":/images/stop-48.png")) - self._running_label.setVisible(True) - - def _set_run_label(self): - self._run_button.setText("Run") - self._run_button.setIcon(QIcon(":/images/play-48.png")) - self._running_label.setVisible(False) - - def _simulation_name_changed(self, text): - for step in self._step_buttons: - if text == NEW_SIMULATION_NAME: - self._step_buttons[step].setEnabled( - step not in STEP_WITH_SIMULATION_NAME) - else: - self._step_buttons[step].setEnabled( - step in STEP_WITH_SIMULATION_NAME) - - def _add_text_to_log(self, s): - self._log_text_edit.appendPlainText(s.rstrip('\r\n')) - - def _cleanup_run_process(self): - self._run_process.close() - - def _run_or_stop(self): - if self._run_process and self._run_process.isOpen(): - qm = QMessageBox() - ret = qm.question(self, "Stop simulation", - "Do you want to stop current simulation ?") - if ret == qm.Yes: - self._run_process.close() - else: - self._run() - - def _run(self): - self._log_text_edit.clear() - study_path = self._study_path_text_edit.text() - if study_path: - if Path(study_path).is_dir(): - self._run_study(study_path) - else: - self._add_text_to_log("Study path is not a directory") - else: - self._add_text_to_log("No study path defined") - - def _run_study(self, study_path): - commands = [ - "--dataDir", str(study_path), - "--method", self._get_method(), - "--step", self._get_step(), - "-n", str(self._get_nb_core())] - program_in_python_package = None - install_dir_full = None - if self._install_dir is not None and Path(self._install_dir).is_dir(): - install_dir_full = str(Path(self._install_dir).resolve()) - - program_in_python_package = Path(os.path.abspath( - __file__)).parent / self._launcher_name - commands.extend(["--installDir", install_dir_full]) - - program_in_single_package = Path( - sys.executable).parent / self._launcher_name - - if self._get_keep_mps(): - commands.append("--keepMps") - if not self._step_buttons["full"].isChecked(): - commands.append("--simulationName") - commands.append(self._combo_simulation_name.currentText()) - if Path("launch.py").is_file(): - commands.insert(0, "launch.py") - program = str(Path(sys.executable)) - elif program_in_python_package is not None and program_in_python_package.is_dir(): - program = str(program_in_python_package) - else: - program = str(program_in_single_package) - self._run_process.start(program, commands) - self._set_stop_label() - - -app = QApplication([]) - -window = MainWidget() -window.show() -app.exec() diff --git a/src/python/config-ui.yaml.in b/src/python/config-ui.yaml.in deleted file mode 100644 index b1b7a6cc6..000000000 --- a/src/python/config-ui.yaml.in +++ /dev/null @@ -1 +0,0 @@ -INSTALL_DIR : ${CURRENT_RUNTIME_OUTPUT_DIRECTORY} diff --git a/src/python/images.qrc b/src/python/images.qrc deleted file mode 100644 index dfefd8bf5..000000000 --- a/src/python/images.qrc +++ /dev/null @@ -1,7 +0,0 @@ - - - images/loading.gif - images/play-48.png - images/stop-48.png - - diff --git a/src/python/images/loading.gif b/src/python/images/loading.gif deleted file mode 100644 index 7c12c21fc..000000000 Binary files a/src/python/images/loading.gif and /dev/null differ diff --git a/src/python/images/play-48.png b/src/python/images/play-48.png deleted file mode 100644 index f2476decf..000000000 Binary files a/src/python/images/play-48.png and /dev/null differ diff --git a/src/python/images/stop-48.png b/src/python/images/stop-48.png deleted file mode 100644 index 35e53f248..000000000 Binary files a/src/python/images/stop-48.png and /dev/null differ