[build-system] requires = ["build", "wheel", "setuptools"] build-backend = "setuptools.build_meta" [project] name = "pandapower" dynamic = ["version"] authors = [ { name = "Leon Thurner", email = "leon.thurner@retoflow.de" }, { name = "Alexander Scheidler", email = "alexander.scheidler@iee.fraunhofer.de" }, { name = "Mike Vogt", email = "mike.vogt@iee.fraunhofer.de"} ] maintainers = [ { name = "pandapower Developers", email = "info@pandapower.org" } ] description = "An easy to use open source tool for power system modeling, analysis and optimization with a high degree of automation." readme = "README.rst" license-files = ["LICENSE", "AUTHORS"] requires-python = ">=3.11" classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", # Add the specific Python versions supported here, e.g.: # REMINDER: When removing or adding support for a Version here, please remember to update ALL github pipelines. # REMINDER: The mypy and sonarcloud config also contain the lowest supported python version "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14" ] dependencies = [ "pandas~=3.0.5", "networkx~=3.6", "scipy~=1.18; python_version >= '3.12'", "scipy<1.17; python_version < '3.12'", "numpy>=1.26,<2.5", "packaging~=26.0", "tqdm~=4.68", "colorama==0.4.6", "deepdiff~=9.1", "geojson~=3.3", "typing_extensions~=4.16", "pandera>=0.27.0,<=0.29.0" ] keywords = [ "power system", "network", "analysis", "optimization", "automation", "grid", "electricity", "energy", "engineering", "simulation", "pandapower" ] [project.urls] Homepage = "https://www.pandapower.org" Documentation = "https://pandapower.readthedocs.io" Source = "https://www.github.com/e2nIEE/pandapower" Repository = "https://www.github.com/e2nIEE/pandapower.git" Issues = "https://www.github.com/e2nIEE/pandapower/issues" Download = "https://pypi.org/project/pandapower/#files" Changelog = "https://github.com/e2nIEE/pandapower/blob/develop/CHANGELOG.rst" [project.optional-dependencies] plotting = ["plotly~=6.8", "matplotlib~=3.11", "igraph", "geopandas~=1.1"] performance = ["ortools~=9.15", "numba~=0.66", "lightsim2grid~=0.13.0"] fileio = ["xlsxwriter~=3.2", "openpyxl~=3.1", "cryptography~=49.0", "geopandas~=1.1", "psycopg~=3.2", "lxml~=6.1"] converter = ["matpowercaseframes~=2.1", "lxml~=6.1", "pypowsybl~=1.15"] pgm = ["power-grid-model-io~=1.2; python_version <= '3.11'", "power-grid-model-io~=1.3.87; python_version > '3.11'"] control = ["shapely~=2.1"] pandamodels = ["juliacall<=0.9.32"] opendss = ["OpenDSSDirect.py~=0.9"] helm = ["fast-helmpy"] tdpf = ["transformer-thermal-model~=0.6"] all = ["pandapower[plotting,performance,fileio,converter,pgm,control,helm,opendss,tdpf]"] [dependency-groups] tutorials = [ "julia", "juliacall<=0.9.32", "seaborn", "jupyter", "notebook" ] docs = [ "numpydoc~=1.10", "matplotlib~=3.11", "sphinx~=9.1; python_version > '3.11'", "sphinx~=8.1; python_version == '3.11'", "sphinx_rtd_theme~=3.1", "sphinx-pyproject~=0.3", "sphinxcontrib-imagesvg~=0.1", "pandapower[converter]", "geopandas~=1.1", ] typing = [ "mypy~=2.1", "pandas-stubs~=3.0.5", "types-shapely~=2.1", "types-openpyxl~=3.1", "types-networkx~=3.6", "types-tqdm~=4.68", "scipy-stubs~=1.17.1; python_version >= '3.12'", "pandera[mypy]>=0.27.0,<=0.29.0", "psycopg~=3.2", "matplotlib~=3.10", "types-geopandas~=1.1.4", "types-python-dateutil", "types-seaborn", "types-xlrd", "lxml-stubs", ] test = [ "pandapower[all]", "pytest~=9.1", "nbmake~=1.5", "pytest-timeout~=2.4", "pytest-split~=0.11", "pytest-cov", "pypower", ] dev = [ {include-group = "docs"}, {include-group = "test"}, {include-group = "typing"}, "ruff", "pytest-xdist", "pre-commit", ] # "shapely", "pyproj", "Pyogrio" are dependencies of geopandas and should be already available ("Fiona" got dropped) # "hashlib", "zlib", "base64" produce install problems, so they are not included [tool.setuptools.dynamic] version = {attr = "pandapower._version.__version__"} [tool.setuptools.packages.find] include = [ "pandapower*", ] [tool.setuptools.package-data] "*" = [ "*.p", "*.m", "*.mat", "*.json", "*.jl", "*.csv" ] [tool.pytest.ini_options] addopts = [ "--strict-markers", "--maxfail=10", # stop after the first ten failures / error / timeout "--timeout=60", # "--timeout-method=thread", # per‑test timeout in seconds (requires pytest-timeout) ] markers = [ "slow: marks tests as slow (deselect with '-m \"not slow\"'), e.g. in run_fast_tests" ] filterwarnings = [ "ignore:the matrix subclass:PendingDeprecationWarning" ] # For debug use: #log_cli = 1 #log_cli_level = "WARN" #log_file = "./pytest.log" #log_file_level = "WARN" [tool.coverage.run] omit = [ "pandapower/test/*" ] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "def __str__", "if __name__ == .__main__.:" ] # styling information for ruff formatter [tool.ruff] line-length = 120 [tool.ruff.format] # Use `\n` line endings for all files line-ending = "lf" [tool.ruff.lint.extend-per-file-ignores] # F811 is redefinition of symbol because ruff does not understand pytest fixtures and will complain "test/**/*.py" = ["F811"] [tool.uv] default-groups = ["dev"]