Skip to content

fix warning in LTDS yupiter notebook (#3033) #7243

fix warning in LTDS yupiter notebook (#3033)

fix warning in LTDS yupiter notebook (#3033) #7243

# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: pandapower
on:
push:
paths-ignore:
- 'CHANGELOG.rst'
- '**/CHANGELOG.rst'
pull_request:
paths-ignore:
- 'CHANGELOG.rst'
- '**/CHANGELOG.rst'
permissions:
contents: read
# https://stackoverflow.com/questions/66335225/how-to-cancel-previous-runs-in-the-pr-when-you-push-new-commitsupdate-the-curre
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
# Reminder: when removing the support of an old python version here, then don't forget to
# remove it also in pyproject.toml 'requires-python' and the release pipelines
group: [ 1, 2 ]
steps:
# - uses: julia-actions/setup-julia # Update version when using this by adding commit sha!
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a #v4.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync --extra dev
uv pip install pytest-split
uv pip uninstall juliacall
# if ${{ matrix.python-version == '3.10' }}; then uv pip install pypower; fi
# if ${{ matrix.python-version != '3.10' }}; then uv pip install numba; fi
# if ${{ matrix.python-version == '3.14' }}; then uv pip install lightsim2grid; fi
# if ${{ matrix.python-version == '3.13' }}; then uv pip install lightsim2grid; fi
- name: List of installed packages
run: |
uv pip list
- name: Test with pytest
if: ${{ matrix.python-version != '3.10' }}
run: |
uv run pytest --splits 2 --group ${{ matrix.group }} --ignore=pandapower/test/opf
- name: Test with pytest, Codecov and Coverage
if: ${{ matrix.python-version == '3.10' }}
run: |
uv pip install pytest-cov numpy~=1.26
uv run pytest --cov=./ --cov-report=xml --splits 2 --group ${{ matrix.group }} --ignore=pandapower/test/opf
cp ./coverage.xml ./coverage-${{ matrix.group }}.xml
- name: Upload coverage as artifact
if: ${{ matrix.python-version == '3.10' }}
uses: actions/upload-artifact@v7
with:
name: coverage-${{ matrix.group }}
path: ./coverage-${{ matrix.group }}.xml
numpy1-support:
runs-on: ubuntu-latest
timeout-minutes: 20
strategy:
matrix:
group: [1, 2]
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a #v4.2.0
with:
python-version: "3.14"
- name: Install dependencies
run: |
uv sync --extra dev
uv pip install pytest-split
uv pip install numpy~=1.26
uv pip uninstall juliacall
- name: List of installed packages
run: |
uv pip list
- name: Test with pytest
run: |
uv run pytest --splits 2 --group ${{ matrix.group }} --ignore=pandapower/test/opf
opf:
# needs: build
runs-on: ubuntu-latest
timeout-minutes: 60
continue-on-error: true
strategy:
matrix:
python-version: ['3.14']
julia-version: ['1.10']
# Reminder: when removing the support of an old python version here, then don't forget to
# remove it also in pyproject.toml 'requires-python'
group: [ 1 ]
steps:
- uses: actions/checkout@v6
- uses: julia-actions/setup-julia@5c9647d97b78a5debe5164e9eec09d653d29bd71 #v2
with:
version: ${{ matrix.julia-version }}
arch: 'x64'
#- name: Install uv
# uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a #v4.2.0
# with:
# python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
# uv sync --extra dev
python -m pip install pypower pytest-split pytest-cov juliacall julia
python -m pip install .[pandamodels,test]
# if [ -f requirements.txt ]; then uv pip install -r requirements.txt; fi
#- name: Install Julia
# run: |
# ./.install_julia.sh 1.10.4
# uv pip install julia
# uv run python ./.install_pycall.py
- name: Install PandaModels.jl
run: |
julia -e 'using Pkg; Pkg.add("PandaModels")'
julia -e 'using Pkg; ENV["PYTHON"] = "/home/runner/work/pandapower/pandapower/.venv/bin/python3"; Pkg.add("PyCall")'
python -c "import julia; julia.install(color=True)"
- name: List of installed packages
run: |
pip list
julia -e 'using Pkg; Pkg.status()'
- name: Test with pytest, Codecov and Coverage
run: |
pytest --cov=./ --cov-report=xml pandapower/test/opf
# uv run python-jl -m pytest --cov=./ --cov-report=xml
cp ./coverage.xml ./coverage-${{ matrix.group }}.xml
upload-coverage:
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Download artifacts
uses: actions/download-artifact@v8
with:
path: .
pattern: coverage-*
merge-multiple: true
- name: duplicate reports
run: |
ls -al
cp coverage-1.xml codacy-coverage-1.xml
cp coverage-2.xml codacy-coverage-2.xml
- name: Upload coverage to Codacy
continue-on-error: true
uses: codacy/codacy-coverage-reporter-action@89d6c85cfafaec52c72b6c5e8b2878d33104c699 #v1.3
with:
coverage-reports: codacy-coverage-1.xml,codacy-coverage-2.xml
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
- name: Upload coverage to Codecov
continue-on-error: true
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 #v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage-1.xml,./coverage-2.xml
verbose: true
warnings:
# make pytest raise warnings as errors to see if there are warnings
needs: build
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
matrix:
python-version: ['3.14']
group: [ 1, 2 ]
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a #v4.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync --extra dev
uv pip install pytest-split
if [ -f requirements.txt ]; then uv pip install -r requirements.txt; fi
- name: List of installed packages
run: |
uv pip list
- name: Test with pytest
run: |
uv run pytest -W error --splits 2 --group ${{ matrix.group }}
relying: # packages that rely on pandapower
needs: build
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a #v4.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync --extra test
uv pip install setuptools
if [ -f requirements.txt ]; then uv pip install -r requirements.txt; fi
uv pip install matplotlib
uv pip install lxml
if ${{ matrix.python-version != '3.10' }}; then uv pip install numba; fi
- name: Install pandapipes and simbench
run: |
uv pip install git+https://github.com/e2nIEE/pandapipes@develop#egg=pandapipes
uv pip install git+https://github.com/e2nIEE/simbench@develop#egg=simbench
- name: List of installed packages
run: |
uv pip list
- name: Test pandapipes
run: |
uv run python -c 'from pandapipes import pp_dir; import pytest; import sys; ec = pytest.main([pp_dir]); sys.exit(ec)'
- name: Test simbench
run: |
uv run python -c 'from simbench import sb_dir; import pytest; import sys; ec = pytest.main([sb_dir]); sys.exit(ec)'
linting:
# run flake8 and check for errors
needs: build
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
matrix:
python-version: ['3.10']
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a #v4.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync
uv pip install flake8 matplotlib
- name: List of installed packages
run: |
uv pip list
- name: Lint with flake8 (syntax errors and undefined names)
continue-on-error: true
run: |
# stop the build if there are Python syntax errors or undefined names (omitted by exit-zero)
uv run flake8 . --exclude .venv --count --exit-zero --select=E9,F63,F7,F82 --show-source --statistics
- name: Lint with flake8 (all errors and warnings)
run: |
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
uv run flake8 . --exclude .venv --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
postgresql:
# for the one test to cover postgresql
needs: build
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: test_user
POSTGRES_PASSWORD: secret
POSTGRES_DB: sandbox
ports:
- 5432:5432
- 55432:5432 # custom port to test against.
options: >-
--name postgres
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
strategy:
matrix:
python-version: ['3.14']
steps:
- name: Wait for PostgreSQL database to be ready
run: |
until pg_isready -h localhost -U test_user; do
echo "Waiting for Postgres…"
sleep 2
done
- name: Check psql and service version compatibility
run: |
SERVER_VERSION=$(docker exec postgres psql -U test_user -d sandbox -tA -c "SHOW server_version;")
CLIENT_VERSION=$(psql --version | awk '{print $3}')
SERVER_MAJOR=${SERVER_VERSION%%.*}
CLIENT_MAJOR=${CLIENT_VERSION%%.*}
echo "PostgreSQL Server Version: $SERVER_MAJOR - Client Version: $CLIENT_MAJOR"
if [ "$SERVER_MAJOR" != "$CLIENT_MAJOR" ]; then
echo "::error::psql version mismatch - server=$SERVER_MAJOR vs client=$CLIENT_MAJOR"
exit 1
fi
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a #v4.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync --extra test --extra fileio
- name: List of installed packages
run: |
uv pip list
- name: Create test_schema in sandbox database
env:
PGPASSWORD: secret
run: |
psql -h localhost -U test_user -d sandbox -c "CREATE SCHEMA test_schema AUTHORIZATION test_user"
psql -h localhost -U test_user --list sandbox
- name: Test pandapower File I/O
run: |
uv run python -c "import os; import json; from pandapower import pp_dir; conn_data={'host': 'localhost', 'user': 'test_user', 'database': 'sandbox', 'password': 'secret', 'schema': 'test_schema'}; fp = open(os.path.join(pp_dir, 'test', 'test_files', 'postgresql_connect_data.json'), 'w'); json.dump(conn_data, fp); fp.close()"
uv run python -c "from pandapower import pp_dir; import pytest; import sys; import os; ec = pytest.main([os.path.join(pp_dir,'test','api','test_sql_io.py')]); sys.exit(ec)"
- name: Test pandapower File I/O against alternative port
run: |
uv run python -c "import os; import json; from pandapower import pp_dir; conn_data={'host': 'localhost', 'user': 'test_user', 'database': 'sandbox', 'password': 'secret', 'schema': 'test_schema', 'port': 55432}; fp = open(os.path.join(pp_dir, 'test', 'test_files', 'postgresql_connect_data.json'), 'w'); json.dump(conn_data, fp); fp.close()"
uv run python -c "from pandapower import pp_dir; import pytest; import sys; import os; ec = pytest.main([os.path.join(pp_dir,'test','api','test_sql_io.py')]); sys.exit(ec)"
tutorial_tests:
needs: build
runs-on: ubuntu-latest
strategy:
matrix:
group: [ 1, 2, 3 ]
steps:
# UV does not work for julia, do not add it here!
- uses: actions/checkout@v6
- name: Install dependencies
run: |
python -m pip install -e .[all,tutorials,test]
- name: List all installed packages
run: |
python -m pip list
- name: Test with pytest
# Careful when copying this command. The PYTHONPATH setup is Linux specific syntax.
run: |
pytest --splits 3 --group ${{ matrix.group }} --nbmake --nbmake-timeout=900 --timeout=900 "./tutorials"
tutorial_warnings_tests:
needs: build
runs-on: ubuntu-latest
steps:
# UV does not work for julia, do not add it here!
- uses: actions/checkout@v6
- name: Install dependencies
run: |
python -m pip install -e .[all,tutorials,test]
- name: List all installed packages
run: |
python -m pip list
- name: Test with pytest
run: |
pytest -W error --nbmake --nbmake-timeout=900 --timeout=900 "./tutorials"
docs_check:
needs: build
name: Sphinx docs check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Check sphinx build
uses: ammaraskar/sphinx-action@54e52bfb642e9b60ea5b6bcb05fe3f74b40d290a #8.2.3
with:
pre-build-command: "python -m pip install uv && uv pip install .[dev] --system --link-mode=copy"
build-command: "sphinx-build -b html . _build -W"
docs-folder: "doc/"
typing:
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
python-version: ['3.14']
# Reminder: when removing the support of an old python version here, then don't forget to
# remove it also in pyproject.toml 'requires-python'
steps:
- uses: actions/checkout@v6
- name: Install uv
uses: astral-sh/setup-uv@38f3f104447c67c051c4a08e39b64a148898af3a #v4.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
uv sync --all-extras
- name: Check types with mypy
run: |
uv run mypy