fix(opendss): restore OpenDSSDirect.py as a dev dependency - #3075
Merged
vogt31337 merged 3 commits intoJul 17, 2026
Merged
Conversation
It was dropped from the all/dev extras in e2nIEE#3062 because installing it alongside pytest~=9.1 crashes the pytest process on Windows (upstream bug: dss-extensions/OpenDSSDirect.py#148). That left the OpenDSS converter with 0% coverage in CI, since opendssdirect was never installed to begin with. The crash is Windows-specific: it reproduces with pytest==9.1.1 + OpenDSSDirect.py==0.9.4 on Windows but not on Linux, where this repo's PR-gating CI actually runs. Restore the dependency and skip test_from_opendss.py on win32 before it ever imports opendssdirect, instead of avoiding the dependency for every platform.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #3075 +/- ##
===========================================
+ Coverage 71.63% 72.12% +0.48%
===========================================
Files 355 355
Lines 39370 39376 +6
===========================================
+ Hits 28204 28399 +195
+ Misses 11166 10977 -189 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
vogt31337
previously approved these changes
Jul 16, 2026
Replaces the Windows platform-skip with an actual fix. Traced the crash on a real windows-latest GitHub Actions runner (Houmgaor#diag- opendss-windows-crash): dss_python_backend's Free Pascal runtime raises an internal first-chance SEH exception during its own module init that it normally handles and silences itself. pytest enables Python's faulthandler by default, which installs a Windows vectored exception handler that intercepts that first-chance exception before Pascal's own handler gets it, and reports it as a fatal crash. A plain `python -c "import opendssdirect"` never enables faulthandler, so it never sees this -- matching the upstream report exactly. Bracketing just the import with faulthandler.disable()/.enable() eliminates the false crash entirely (verified: clean pytest pass, no exception message) while leaving faulthandler protecting the rest of the run (verified: a real segfault after the import is still caught and reported). See dss-extensions/OpenDSSDirect.py#148
The CHANGELOG entry still described the old Windows platform-skip; update it to match the actual fix.
|
Contributor
Author
|
@vogt31337 thanks for your quick review, I diagnosed the minimal fix in the meantime, so there are some new commits posterior to your review. Let me know if all seems good. |
vogt31337
approved these changes
Jul 16, 2026
KS-HTK
added a commit
that referenced
this pull request
Aug 6, 2026
* updated docstings (#2934) deprecated unused keyword args * Feature/get all elements (#2939) * adding first draft of simple_hl_plot a function to easily highlight buses and lines paired with a hover functionality * added function to get a dataframe of all elements in the net * add test clean comments renaming * add changelog entry * ltds_fix (#2938) * updated ltds notebooks * updated ltds notebooks, fixed LTDS converter * added pytest split to tutorial_test pipeline (#2935) * added pytest split to tutorial_test pipeline * added notebook test times * fixed many links (#2937) other formatting Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix copyright text formatting in LICENSE file (#2914) * Fix copyright text formatting in LICENSE file * Refactor copyright notice in LICENSE Updated copyright notice formatting in LICENSE file following [upstream changes](licensee/licensee#950) to handle multi-line attribution. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * added PowerElectronicsConnection to the LTDS converter, updated LTDS notebooks (PowerElectronicsConnection) (#2942) Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> * ltds_pce (#2944) * added PowerElectronicsConnection to the LTDS converter, updated LTDS notebooks (PowerElectronicsConnection) * updated LTDS notebooks for mapping Excel data * ltds_notebook (#2949) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * ltds_notebook (#2950) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * Feature check vkr percent (#2948) * added check to check if vkr_percent values are reasonable. * added changelog entry. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Feature additional diagnostic functions (#2952) * added more diagnostic functions. * added changelog entry. * fixed a small bug, used the wrong value in the reactance field. * Correct loading_percent description in motor_par.csv (#2947) Updated the description of loading_percent. * ucte2pp conversion fixes (#2823) * consider empty R dataframe in ucte conversion * convert impedances and trafos with G/B=NaN to G/B=0 * change fillna for trafos and impedances to the ucte_parser * fillna df if 0 * fix nan values in impedances and trafos * ucte2pp: averaging voltages and clean up parser * changelog entries for ucte2pp fixes * average voltage setpoints using topological search instead of ucte name * empty space at EOF * fix codacy issue * remove create_switch from pp_import_functions * fix create_vsc functions * change symmetrical tap changer to 90 degree tap step degree * correct handling of symmetrical PSTs in ucte2pp * comment averaging function based on PR review * changes ucte converter * ucte2pp: add flag for voltage harmonization, with default false * fix test * fix tests and restrict tolerances a bit --------- Co-authored-by: mrichter <mario.richter@iee.fraunhofer.de> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix 2733 (#2951) * change patch sizes for plot (#2733) * fix patch sizes for plot only once (#2733) `get_collection_sizes()` takes arguments to adjust the relative size of an element. --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix runopp(init="results") so the OPF solver preserves the model initial vector (#2902) * Fix runopp(init=results) warm-start handling in pips OPF * Update CHANGELOG for upcoming release fixes and features --------- Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Feature/highlight plot (#2833) * integrated highlighting feature into simple_plot * integrated hover feature into simple_plot * update plotting tutorial * adjust color * Fix unit g0_us (#2958) attribute name g0_us_per_km is incorrectly named as g0_nf_per_km in add_zero_impedance_parameters function. * updated branding with versions from marketing (#2953) * [IMPROVEMENT] fix `bool` parameters input in `read_excel` and add `add_basic_std_types` parameter (#2961) * Add basic std types flag to from_excel Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix reading bool Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix backward compatibility Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Silence sonarcloud and codacy Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove ruff ignore --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * added permissions block to all workflows (#2964) * updated the issue templates to use the issue types instead of labels and title (#2966) minor changes in forms layouts * Feature/revised issue templates (#2967) * updated the issue templates to use the issue types instead of labels and title minor changes in forms layouts * fix for config not parsing by github (hopefully) added documentation template added emoji to template title for more visual guidance * uniform formatting for templates * added missing blank line at end of file * display logger message only if GetActiveScenario() isn't None (#2969) Only display a logger message if GetActiveScenario is not None Added else case with a info message if no study case / scenario is active. * Update docstring (#2970) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * ltds_notebook (#2972) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * Update lightsim2grid version (#2976) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * fix cmin for low voltage 10% tolerance (#2913) * fix(cmin): fix cmin for low voltage 10% tolerance * [Fix] Fix `reindex_buses` against creating duplicate indecies (#2963) * Fix reindex_buses Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Add allow_duplicate_index argument Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix unused import Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix test Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * feature/doc strings update (#2979) * added/reformatted many docstrings * added show_plot=False to test_plotting_toolbox * refactored docstrings and added types * fixed f-string in groups.py * fixed incorrect type * fixed incorrect type * fixed missing import * fixed import issue with specific lightsim2grid versions * fixed mypy issues in contingency refactored test in test_contingency * fixed mypy issues * updated var name * updated the contributing.rst (#2973) * updated the contributing.rst * removed raw directive * changed contributing to markdown for better github compatibility replaced contributing on readTheDocs by link to GitHub * Added a section on changelog to the contributing.md Added a changelog entry to the changelog * Update CHANGELOG.rst * [Feature]: Toggle Colormap for simple_plot (#2971) * colormap-integration in simple_plot * adjust colors *add docstrings *add second button to better visualize options for the user * change ext_grid color * some formatting * only plot colormap if buses or lines are available (fix tutorial-test error) * removed some spaces removed some whitelines added results to hover info * add changelog entry * adepted authors * adapted zorder make plotting bus-switches optional * typo * small adaptions * small adjustments --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * ltds_notebook (#2980) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * update LTDS Jupiter Notebook respecting new Excel format --------- Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> * Fix diagnostic report (#2983) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Tutorials for UKPN (#2984) * Fix tutorial on power flow * Updated Jupyter notebooks for UKPN * Fix on tutorial directory * [Fix] `DiscreteTapControl` to work with negative `tap_step_percent` (#2990) * abs tap_step_percent Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Add changelog, test case Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove code duplication Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * updated the notebook to ignore warnings instead of capturing all output and only displaying specifics. (#2996) * voltage dependend loads create differing results (#2991) * fixed issue with voltage dependent loads. * fixed typo in import * removed unused imports * Fixed test now failing due to nan instead of 0 for in_service=False * Fixed juliacall version leading to errror in pandamodels-storage.ipynb (#3011) * fix failing runpp(net, consider_line_temperature=True) (#3004) * fix failing runpp(net, consider_line_temperature=True) for grids with a mix of lines with alpha and without added warning * adapt test * some structuring * import default ALPHA * rename ALPHA to ALPHA_TDPF due to duplicate (branch cols) * fix NameError * Fix: Apply transformer correction factor K_T only for max case (IEC 60909-0:2016) (#2962) * Fixing usage of transformer impedance correction factor in min case of short-circuit calculations, Adapting tests * take case from net._options for trafo k_t fix (calculation only for max case) * case was missing. * fixed a broken test. * fix test_all_currents.py * min and max test case for test_trafo_impedace fixed * Fix SyntaxError: invalid escape sequences in test_group.py (Python 3.14) Use raw strings (r"...") for all regex match patterns containing escape sequences like \(, \[, and \. which are SyntaxError in Python 3.14. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Christian Bredtmann <christian.bredtmann@envelio.de> Co-authored-by: pawellytaev <pawel.lytaev@uni-kassel.de> Co-authored-by: envelio-cb <88880102+envelio-cb@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: Reinhold Bertram <reinhold.bertram@envelio.de> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: IEECNB215543\gbanerjee <gourab.banerjee@iee.fraunhofer.de> * docs: fix separated spelling in docs (#3008) Signed-off-by: Yoshiki <yosinn1@gmail.com> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Adaptions to PowerFactory2pp Converter (#3005) Changes in PowerFactory2pp converter * Fixed test now failing due to nan instead of 0 for in_service=False * get coords from (sub)stations unpack only 2 coordinates, third one is 0 return None,None is no ext_grid can be created * replace tuple with list to consolidate the code and fit the GeoJson standard * tuple list .. * cim2pp: mapping SV data to the assets with flag use_sv_data_for_assets=True (#3024) * cim2pp: mapping SV data to the assets with flag use_sv_data_for_assets=True * add GeographicalRegion from eqbd profile (#3025) * add GeographicalRegion from eqbd profile * add GeographicalRegion to cim_classes * Check if static generator has connected bus before importing it from powerfactory (#2975) * When importing static generators from powerfactory, first check if they are connected to a bus. If not, do not import them (previously, this was not checked for static gens that are reference machines, which led to import errors) * Update to changelog * simplified check for av_mode constq --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: pawellytaev <86314586+pawellytaev@users.noreply.github.com> * fix warning in LTDS yupiter notebook (#3033) * Speed up CGMES import (parser + trafo tap characteristic table) (#3020) * Speed up CGMES trafo tap characteristic table build Replace the per-group itertuples loop in _create_trafo_characteristic_table with vectorized factorize and column-wise DataFrame construction. Output is unchanged; convert time drops significantly on large CGMES networks. * Speed up CGMES XML parsing with single-pass tag grouping Group profile children by tag in one pass instead of calling findall per element type, and streamline _parse_element attribute handling. Parsed CIM tables and converted networks are unchanged on large CGMES test cases. --------- Co-authored-by: Šime Pavlić <simepavlic@Simes-MacBook-Pro.local> Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> Co-authored-by: mrifraunhofer <94368111+mrifraunhofer@users.noreply.github.com> * update scipy-stubs in toml (#3038) * limited scipy-stubs to <1.18 for python<3.12 support * Fixed SQL Injection possiblilities and some assertion in code (#3035) * fixed sql injection possibility * removed assertion from code * update from_jao.py * Update run_import.py * Update sql_io.py * fixed issue in from_jao * fixed duplicate definition of test_dir/test_path fixed sqlite table query * fixed issues with psycopg version 3 being installed but version 2 being used. * simplified pipeline to use env vars to pass args to test_sql_io * fixed upload_sql_table added changelog entries * fixed sql using param for table or column names * improved use of psql.Identifier * improved use of psql.Identifier * fixed import error when type checking fixed issue with to_sql_str * fixed missing comma in pyproject.toml * improved SQL Query construction * fixed issue with DEFAULT in query as Literal and not SQL Directive * fixed issue with None being passed as str * import fail will no longer result in successful pipeline as postgresql not available will fail now. * fixed type being handled as string instead of sql directive * fixed missing dsn and schema for availability test * fixed issue where .as_string was called on a string * fixed issue where to_sql_str was used for int values * Issues/fixing critical codacy (#3040) * fixed cp1 eur passed in kw instead of mw * fixed typo in bug-report template * removed unreachable return * fixed typo in create_buses_dc * Feature/integrate helm solver (#2067) * added a new powerflow method, HELM. Provided by HELMpy package. * added some tests for the new powerflow method. * added a new powerflow method, HELM. Provided by HELMpy package. * updated doc string. * added a new powerflow method, HELM. Provided by HELMpy package. * added a new powerflow method, HELM. Provided by HELMpy package. * changed the standard iterations for helm, since helmpy crashes after 40 iterations with an index error. * made some modifications to adapt the values to what helmpy awaits. * added MBASE, since pandapower sometimes doesn't set this value. * added the 9case testcase. * fixed the helm integration into pandapower, the shunts needed to be scaled differently, the slack angle was ignored and the result extraction wasn't correct. * updated the integration to use pv_bus_model=2 since it is the default. * typing fixes. * added some doc about helm. * added more typing exclusion for mypy. * added install git, since sphinx needs it to pull packages. * added helm to algorithm literal and moved the import to the test. * update of pipeline. * added missing empty line * updated docs and removed uv from pipeline. * added install git. * Update github_test_action.yml updated docs pipeline to only install docs requirements * added vscode workspace to gitignore. * made some minor fixes to spelling and copyright headers. * minor fixes for codacy. --------- Co-authored-by: Jan Wiemer <32835953+jwiemer112@users.noreply.github.com> Co-authored-by: Roman Bolgaryn <roman.bolgaryn@iee.fraunhofer.de> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Fixed issues in diagnostic functions + more tests (#3052) * parametrized the diagnostic test. added more diag functions to the no issues test. * fixed diagnostic_functions and added tests. * fixed continuous bus indices being tested incorrectly. closes #3042 * Hardening from_json (#3050) * first version to fix #3049 * fix for broken de-/serialization of (Log)SplineCharateristic. * hardening from_json deserialiser. * changed parameter to skip_checks. * missed one refactor. * fix for LSC, overwrote the setted values... * needed to allow more modules. * added more fixes needed for older networks, and added _eq_ method, since otherwise comparisons between SC / LSC fail. * added an _eq_ and _hash_ function to SC and LSC * had to fix LSC again, since it created the log10 of the values, which were already log10(x) * had to add _eq_ and _hash_ to fuse and ocrelay otherwise they would not have worked as well. * Fix 3ph loadflow with `gen` element (#3010) * Fix gen 3ph result table Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix gen build Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove change to diagnostic Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove change to diagnostic Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Enhance ImportError logging in run_pandamodels.py Improve error handling for ImportError in _call_pandamodels function. * Simplify ImportError handling for juliacall --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Neutral earthing impedance (rn_ohm) and zigzag earthing transformers in the zero-sequence short circuit (#3016) * [ADDED] neutral earthing impedance (rn_ohm) and zigzag earthing transformers in zero-sequence short circuit - add rn_ohm (resistive neutral earthing) to create_transformer / create_transformer_from_parameters and the bulk variants; apply the neutral earthing impedance 3*(rn_ohm + j*xn_ohm) to the zero-sequence impedance of all earthed-star vector groups, after the IEC transformer correction factor. Previously xn_ohm was only considered for power-station-unit transformers, and only as a reactance, so a neutral earthing resistor (NER/NGR) could not be modelled for ordinary earthed transformers. - add zigzag earthing transformer vector groups ZNyn / ZNd / ZNy / ZN. Per the YNzn zero-sequence model the zigzag winding completely decouples the primary and secondary zero sequences and presents a shunt-to-ground: the HV-winding leakage portion (si0_hv_partial) in series with 3*Z_N at the star point. An earthed-wye secondary (ZNyn) gets its own decoupled zero-sequence path to ground (LV leakage portion + zero-sequence magnetising); a delta / unearthed secondary (ZNd / ZNy) has none. - add unit tests in test_1ph: neutral earthing adds exactly 3*Z_N to the zero sequence; zigzag earthing of a delta-fed system, with the NER limiting it and the primary/secondary decoupling. - update changelog. Enables IEC 60909 single-phase earth-fault studies on delta-fed systems earthed through a neutral earthing resistor and/or a zigzag earthing transformer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fixed naming convention issues. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * add init_pq option for PandaModels opf warm starts (#2985) * add init_pq option for PandaModels opf warm starts * add changelog, fix float assertion * New parameter wasn't handed over properly. Also logic in add_pm_gen_start_values_from_results seemed buggy. Return values which were nowehere used and empty return statements. * Handed **kwargs to opf options / to _runpm --------- Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * Fix generalized OPF cost Hessian evaluation (#3055) * Fix generalized OPF cost Hessian evaluation * cleaning the comments * Move OPF cost function regression test into coverage suite * Add changelog entry for OPF cost function fix * Cover OPF generalized cost with empty Hessian * Resolve changelog conflict * Resolve changelog conflict * Resolve changelog conflict --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Add an OpenDSS → pandapower converter (from_opendss) (#3056) * Add OpenDSS -> pandapower converter (from_opendss) Balanced positive-sequence importer that reads an OpenDSS feeder through OpenDSSDirect.py and maps buses, lines (LineCode carried through as std_type), two-winding and center-tapped split-phase service transformers (imported at their solved tap), loads, shunt capacitors, switches and the source. The returned net carries an opendss_import report with element counts, per-bus phase counts, the OpenDSS-solved voltages and the approximations made. Positive-sequence is exact for symmetric (e.g. European 3-phase 4-wire) feeders and a documented approximation for unsymmetrical North-American topology, which runpp_3ph cannot represent (#873). Adds an "opendss" optional-dependency extra, unit tests (inline circuits), docs and a changelog entry. Revisits #1442. * Add the opendss extra to the "all" dependency group Per maintainer feedback on #3043: a new production dependency group should be included in "all". Drops the now-redundant explicit opendss entry from "dev" (it inherits from "all"). * Address Codacy and SonarCloud static-analysis findings - __init__.py: replace the wildcard re-export with an explicit `from ... import from_opendss` plus __all__ (pyflakes F401/F403), and add the package docstring (pydocstyle D104). - from_dss.py: convert the docstrings to the numpy section style expected by pydocstyle (D213/D203/D406/D407/D413/D417). - from_dss.py: avoid a floating-point equality check when detecting a missing voltage base (Sonar S1244), use dict() instead of a dict comprehension (S7500), and reword a comment that read like code (S125). No behaviour change; the 9 converter tests still pass. * Avoid pydocstyle D211/D212 vs D203/D213 conflict in the converter The repository's static-analysis config enables both members of the mutually-exclusive pydocstyle pairs (blank-line-before-class-docstring and multi-line-summary-placement), so a multi-line module docstring or a class docstring cannot satisfy it. Use a one-line module docstring with the rationale moved to comments, and drop the docstring on the private _ImportReport dataclass (a private class needs none). No behaviour change. * fixed comment issues, which failed sphinx build. --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * More plotly results annotations (#2375) * add more hoverinfo to plot * overwrite pandapower version to make tests work * fix wrong filepaths in test_file_io * change back to original _version.py * fixed unit issue and added typing. * reverted changes to test_file_io.py --------- Co-authored-by: Heiner Früh <heiner.frueh@stuttgart-netze.de> Co-authored-by: Heiner <heiner.frueh@ieh.uni-stuttgart.de> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * fix(converter): Kron-reduce explicit-neutral OpenDSS LineCodes in from_opendss (#3058) * fix(converter): Kron-reduce explicit-neutral OpenDSS LineCodes from_opendss silently mis-computed positive-sequence resistance for 3-phase-plus-neutral matrix LineCodes (the standard 4-wire European LV format): Lines.R1()/X1()/C1() do not Kron-reduce the neutral out of a >3-conductor matrix before forming the sequence value, so the imported line carried neither the declared conductor's impedance nor a value derivable from it. Found while validating the converter against a real, independently sourced Portuguese LV network (Koirala et al., "Non-Synthetic European Low Voltage Test System", 2020) -- a genuine 4-wire matrix LineCode corpus outside the 3-conductor feeders the converter had been exercised against so far. Adds `_kron_positive_sequence`, used only for >3-conductor lines; the common <=3-conductor path is untouched. Two regression fixtures cover zero-mutual (the real-world pattern found) and asymmetric neutral coupling (proves an actual reduction happens, not a pass-through). * fix: R1/X1/C1 are stale for any matrix-defined line, not just >3-cond The Kron-reduction fix only guarded lines with more than 3 conductors, diagnosed from the first reproduction (an explicit-neutral European LineCode). Checking OpenDSS's own Pascal source shows the real trigger is broader: TLineObj/TLineCodeObj hard-code R1 := 0.0580, X1 := 0.1206 at construction, and switching to a matrix definition (rmatrix=/ xmatrix=) sets SymComponentsModel := FALSE but never clears or recomputes those fields. OpenDSS's own text property interface knows this and reports them as '----' once matrix mode is active, but the direct numeric getters this converter calls don't perform the same guard -- so any matrix-defined line, not just 4-conductor ones, silently gets the stale default. Confirmed empirically: a plain 3-conductor matrix LineCode with no neutral at all returned the same 0.058/0.1206 instead of its declared values. Widens the fix to always derive R1/X1/C1 from the declared matrix (Kron-eliminating conductors beyond the first 3 only when there are more than 3) instead of trusting OpenDSS's getters at all -- verified to exactly reproduce the declared value for symmetric-components- defined lines too, so this is safe universally. Generalizes the self/mutual averaging to the actual conductor count instead of hard-coding 3, since the previous formula would have silently mis-handled 1- and 2-conductor matrix lines (a common SMART-DS/ IEEE-test-feeder pattern for single-phase laterals) had it ever been reached. Adds two more regression tests for those cases. * [FEATURE] Simple Redispatch solver using pandamodels.jl (#3059) * added a redispatch solver via pandamodels.jl * fixed changelog. * updated pandamodels.jl version. * changed default to actual floats not ints. * fixed tests, since comparison failed due to nan values. * pp.create.create_transformers value initialization not working (#2894) * pp.create.create_transformers value initialization not working (#2886) * create_transformers now forwards tap and optional std-type params. * updated tests verifying these fields. * pp.create.create_transformers value initialization not working (#2886) * Remove unnecessary shift_degree extraction. * Remove redundant tap_changer_type value check. * Pass std_params directly to params dict instead of extracting individually. * test_create should use tolist() instead of "value". * npt.NDArray should use "integer" as a numpy. * pp.create.create_transformers value initialization not working (#2886) * Remove redundant tap_changer_type value check reverted. * UT added for std_type override when create_transformers is used. * pp.create.create_transformers value initialization not working (#2886) * fix: prevent duplicate kwargs when using standard types * refactor: undo unrelated test changes * fixed return type and fixed potential None error. * fixed test test_create_transformers_for_single_override_std_type. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Add compute_switch_flows() for zero-impedance bus-bus switches (#2956) After runpp(), bus-bus switches with z_ohm=0 have NaN in res_switch because Pandapower fuses their buses into a single internal node. This makes it impossible to determine the power flow through individual bus couplers, bus-section switches, or similar zero- impedance switching devices. This commit adds a new toolbox function compute_switch_flows(net) that populates res_switch (p_from_mw, q_from_mvar, p_to_mw, q_to_mvar, i_ka, loading_percent) for these switches using a post-hoc nodal balance approach: 1. Identify fused-bus groups from _pd2ppc_lookups["bus"] 2. Calculate net local injection at each bus from res_* tables (loads, generators, shunts, wards, and outgoing branch flows) 3. Build the zero-impedance switch tree within each fused group 4. DFS from leaves to root to accumulate subtree demand and derive individual switch flows The function raises ValueError if zero-impedance switches form a cycle within a fused group, since the flow split is physically indeterminate without impedance information. Switches with z_ohm > 0 are not modified, as they already have results from the Newton-Raphson solver. Also adds documentation (toolbox.rst, switch.rst, CHANGELOG.rst) and 17 tests covering single couplers, chains, branching trees, cycle detection, sign convention, cross-validation, and loading percent. Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Do not open networks from files with older format version than the installed pandapower version (#2912) * do not open networks with newer format versions than the currently installed pandapower version * usage of possibility to open newer networks in all file io-functions # Conflicts: # pandapower/convert_format.py # pandapower/file_io.py * small bug fix * add test for new behavior (do not open newer networks) * added changelog entry * removed TODO, small correction in file_io.py * fixed an error in file_io.py, prob due to a merge error on my part. * fixed docstring. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * bump version. * fixed upload pipeline. * bump version. Needed to remove direct dependency to helmpy, needs to be installed manually. * fixed a misleading logger.warning message. * bump version. * [Fix] unsafe json load (#3061) * block deserializing arbitrary objects from json * remove dead code (geo data fallback) * surface DeserializationNotAllowed exception * allow deserializing Enums defined in pandapower --------- Co-authored-by: SRDM <42580302+SimonRubenDrauz@users.noreply.github.com> * upgrade of all fixed versions (#3062) * upgrade of all versions, but opendss killed the pipeline see dss-extensions/OpenDSSDirect.py#148 * excluded an incompatible scipy version. * added support for python 3.10 of sphinx. * fixed version for networkx * some more version fixes. * fixed some typing issues. * fixed a bug in this timeseries notebook. * bump version. * updated the Logo paths and e2n Link in accordance with PR #15 on pandapower-homepage (#3066) * feat(opendss): import series Reactor elements as branches (#3067) Found while test-importing more real feeder libraries (EPRI's Ckt5/Ckt7) for validation beyond the original PR's four families: EPRI models the substation's Thevenin-equivalent source impedance as a bus-to-bus Reactor (SourceBus -> feeder head), not a Transformer, a topology from_opendss did not yet cover. _add_reactors treats a series (two-bus) Reactor as a fixed-impedance line (R/X from dss.Reactors.R()/X(), rated at CktElement.NormalAmps()). A shunt reactor (single bus, to ground) is a different element and is skipped with a warning rather than misread as a second branch. 4 new regression tests on an inline synthetic feeder. * fix(opendss): restore OpenDSSDirect.py as a dev dependency (#3075) * fix(opendss): restore OpenDSSDirect.py as a dev dependency It was dropped from the all/dev extras in #3062 because installing it alongside pytest~=9.1 crashes the pytest process on Windows (upstream bug: dss-extensions/OpenDSSDirect.py#148). That left the OpenDSS converter with 0% coverage in CI, since opendssdirect was never installed to begin with. The crash is Windows-specific: it reproduces with pytest==9.1.1 + OpenDSSDirect.py==0.9.4 on Windows but not on Linux, where this repo's PR-gating CI actually runs. Restore the dependency and skip test_from_opendss.py on win32 before it ever imports opendssdirect, instead of avoiding the dependency for every platform. * fix(opendss): disable faulthandler around the opendssdirect import Replaces the Windows platform-skip with an actual fix. Traced the crash on a real windows-latest GitHub Actions runner (Houmgaor#diag- opendss-windows-crash): dss_python_backend's Free Pascal runtime raises an internal first-chance SEH exception during its own module init that it normally handles and silences itself. pytest enables Python's faulthandler by default, which installs a Windows vectored exception handler that intercepts that first-chance exception before Pascal's own handler gets it, and reports it as a fatal crash. A plain `python -c "import opendssdirect"` never enables faulthandler, so it never sees this -- matching the upstream report exactly. Bracketing just the import with faulthandler.disable()/.enable() eliminates the false crash entirely (verified: clean pytest pass, no exception message) while leaving faulthandler protecting the rest of the run (verified: a real segfault after the import is still caught and reported). See dss-extensions/OpenDSSDirect.py#148 * docs(changelog): update entry to describe the faulthandler fix The CHANGELOG entry still described the old Windows platform-skip; update it to match the actual fix. * removed support for 3.10 * added fixes that exist on feature/v4.0.0 to simplify merging in the future (#3072) * added skip for test that relies on newer version of pgm-io * fixed mypy issues * added typing and fixed docstring * fixed redefinition of var type * fixed incorrect use of skipif * fixed use of object as fallback for geoseries when typechecking * fixed typing in groups.py * fixed occurences of create_empty_network * removed duplicate ukpn tutorials * fixed missing import in plotly_traces.ipynb * fixed opf test failing --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> Signed-off-by: Yoshiki <yosinn1@gmail.com> Co-authored-by: Jan Wiemer <32835953+jwiemer112@users.noreply.github.com> Co-authored-by: mrifraunhofer <94368111+mrifraunhofer@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> Co-authored-by: Bryn Pickering <17178478+brynpickering@users.noreply.github.com> Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> Co-authored-by: Arisaka97 <solitaire2312@gmail.com> Co-authored-by: pawellytaev <86314586+pawellytaev@users.noreply.github.com> Co-authored-by: mrichter <mario.richter@iee.fraunhofer.de> Co-authored-by: Moritz <29129441+MoritzHauff@users.noreply.github.com> Co-authored-by: Jeremias Lang <158100420+jerelang@users.noreply.github.com> Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: Engr. Ahmad Furqan <ahmadfurqanc@gmail.com> Co-authored-by: nis-nurr <rijad.nuridini@nis.ch> Co-authored-by: marcopau <77792704+marcopau@users.noreply.github.com> Co-authored-by: envelio-js <johannes.sorg@envelio.de> Co-authored-by: Christian Bredtmann <christian.bredtmann@envelio.de> Co-authored-by: pawellytaev <pawel.lytaev@uni-kassel.de> Co-authored-by: envelio-cb <88880102+envelio-cb@users.noreply.github.com> Co-authored-by: Reinhold Bertram <reinhold.bertram@envelio.de> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: IEECNB215543\gbanerjee <gourab.banerjee@iee.fraunhofer.de> Co-authored-by: yosinn1-blip <yosinn1@gmail.com> Co-authored-by: Frank Marten <79512075+fmarten99@users.noreply.github.com> Co-authored-by: Šime Pavlić <pavlicsime1994@gmail.com> Co-authored-by: Šime Pavlić <simepavlic@Simes-MacBook-Pro.local> Co-authored-by: Roman Bolgaryn <roman.bolgaryn@iee.fraunhofer.de> Co-authored-by: stardeltapower <65967874+stardeltapower@users.noreply.github.com> Co-authored-by: Ehsanpoly <90526732+Ehsanpoly@users.noreply.github.com> Co-authored-by: Houmgaor <35099109+Houmgaor@users.noreply.github.com> Co-authored-by: Heiner <heiner.frueh@gmx.de> Co-authored-by: Heiner Früh <heiner.frueh@stuttgart-netze.de> Co-authored-by: Heiner <heiner.frueh@ieh.uni-stuttgart.de> Co-authored-by: Nemanja Stankić <36014264+belobradi@users.noreply.github.com> Co-authored-by: Pascal Ehlert <pascal@ehlert-it.de> Co-authored-by: Daniel Lohmeier <31214121+dlohmeier@users.noreply.github.com> Co-authored-by: Joschka Thurner <joschka.thurner@retoflow.de> Co-authored-by: SRDM <42580302+SimonRubenDrauz@users.noreply.github.com>
2 tasks
Ehsanpoly
added a commit
to Ehsanpoly/pandapower
that referenced
this pull request
Aug 9, 2026
* updated docstings (e2nIEE#2934) deprecated unused keyword args * Feature/get all elements (e2nIEE#2939) * adding first draft of simple_hl_plot a function to easily highlight buses and lines paired with a hover functionality * added function to get a dataframe of all elements in the net * add test clean comments renaming * add changelog entry * ltds_fix (e2nIEE#2938) * updated ltds notebooks * updated ltds notebooks, fixed LTDS converter * added pytest split to tutorial_test pipeline (e2nIEE#2935) * added pytest split to tutorial_test pipeline * added notebook test times * fixed many links (e2nIEE#2937) other formatting Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix copyright text formatting in LICENSE file (e2nIEE#2914) * Fix copyright text formatting in LICENSE file * Refactor copyright notice in LICENSE Updated copyright notice formatting in LICENSE file following [upstream changes](licensee/licensee#950) to handle multi-line attribution. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * added PowerElectronicsConnection to the LTDS converter, updated LTDS notebooks (PowerElectronicsConnection) (e2nIEE#2942) Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> * ltds_pce (e2nIEE#2944) * added PowerElectronicsConnection to the LTDS converter, updated LTDS notebooks (PowerElectronicsConnection) * updated LTDS notebooks for mapping Excel data * ltds_notebook (e2nIEE#2949) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * ltds_notebook (e2nIEE#2950) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * Feature check vkr percent (e2nIEE#2948) * added check to check if vkr_percent values are reasonable. * added changelog entry. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Feature additional diagnostic functions (e2nIEE#2952) * added more diagnostic functions. * added changelog entry. * fixed a small bug, used the wrong value in the reactance field. * Correct loading_percent description in motor_par.csv (e2nIEE#2947) Updated the description of loading_percent. * ucte2pp conversion fixes (e2nIEE#2823) * consider empty R dataframe in ucte conversion * convert impedances and trafos with G/B=NaN to G/B=0 * change fillna for trafos and impedances to the ucte_parser * fillna df if 0 * fix nan values in impedances and trafos * ucte2pp: averaging voltages and clean up parser * changelog entries for ucte2pp fixes * average voltage setpoints using topological search instead of ucte name * empty space at EOF * fix codacy issue * remove create_switch from pp_import_functions * fix create_vsc functions * change symmetrical tap changer to 90 degree tap step degree * correct handling of symmetrical PSTs in ucte2pp * comment averaging function based on PR review * changes ucte converter * ucte2pp: add flag for voltage harmonization, with default false * fix test * fix tests and restrict tolerances a bit --------- Co-authored-by: mrichter <mario.richter@iee.fraunhofer.de> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix 2733 (e2nIEE#2951) * change patch sizes for plot (e2nIEE#2733) * fix patch sizes for plot only once (e2nIEE#2733) `get_collection_sizes()` takes arguments to adjust the relative size of an element. --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix runopp(init="results") so the OPF solver preserves the model initial vector (e2nIEE#2902) * Fix runopp(init=results) warm-start handling in pips OPF * Update CHANGELOG for upcoming release fixes and features --------- Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Feature/highlight plot (e2nIEE#2833) * integrated highlighting feature into simple_plot * integrated hover feature into simple_plot * update plotting tutorial * adjust color * Fix unit g0_us (e2nIEE#2958) attribute name g0_us_per_km is incorrectly named as g0_nf_per_km in add_zero_impedance_parameters function. * updated branding with versions from marketing (e2nIEE#2953) * [IMPROVEMENT] fix `bool` parameters input in `read_excel` and add `add_basic_std_types` parameter (e2nIEE#2961) * Add basic std types flag to from_excel Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix reading bool Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix backward compatibility Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Silence sonarcloud and codacy Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove ruff ignore --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * added permissions block to all workflows (e2nIEE#2964) * updated the issue templates to use the issue types instead of labels and title (e2nIEE#2966) minor changes in forms layouts * Feature/revised issue templates (e2nIEE#2967) * updated the issue templates to use the issue types instead of labels and title minor changes in forms layouts * fix for config not parsing by github (hopefully) added documentation template added emoji to template title for more visual guidance * uniform formatting for templates * added missing blank line at end of file * display logger message only if GetActiveScenario() isn't None (e2nIEE#2969) Only display a logger message if GetActiveScenario is not None Added else case with a info message if no study case / scenario is active. * Update docstring (e2nIEE#2970) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * ltds_notebook (e2nIEE#2972) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * Update lightsim2grid version (e2nIEE#2976) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * fix cmin for low voltage 10% tolerance (e2nIEE#2913) * fix(cmin): fix cmin for low voltage 10% tolerance * [Fix] Fix `reindex_buses` against creating duplicate indecies (e2nIEE#2963) * Fix reindex_buses Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Add allow_duplicate_index argument Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix unused import Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix test Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * feature/doc strings update (e2nIEE#2979) * added/reformatted many docstrings * added show_plot=False to test_plotting_toolbox * refactored docstrings and added types * fixed f-string in groups.py * fixed incorrect type * fixed incorrect type * fixed missing import * fixed import issue with specific lightsim2grid versions * fixed mypy issues in contingency refactored test in test_contingency * fixed mypy issues * updated var name * updated the contributing.rst (e2nIEE#2973) * updated the contributing.rst * removed raw directive * changed contributing to markdown for better github compatibility replaced contributing on readTheDocs by link to GitHub * Added a section on changelog to the contributing.md Added a changelog entry to the changelog * Update CHANGELOG.rst * [Feature]: Toggle Colormap for simple_plot (e2nIEE#2971) * colormap-integration in simple_plot * adjust colors *add docstrings *add second button to better visualize options for the user * change ext_grid color * some formatting * only plot colormap if buses or lines are available (fix tutorial-test error) * removed some spaces removed some whitelines added results to hover info * add changelog entry * adepted authors * adapted zorder make plotting bus-switches optional * typo * small adaptions * small adjustments --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * ltds_notebook (e2nIEE#2980) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * update LTDS Jupiter Notebook respecting new Excel format --------- Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> * Fix diagnostic report (e2nIEE#2983) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Tutorials for UKPN (e2nIEE#2984) * Fix tutorial on power flow * Updated Jupyter notebooks for UKPN * Fix on tutorial directory * [Fix] `DiscreteTapControl` to work with negative `tap_step_percent` (e2nIEE#2990) * abs tap_step_percent Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Add changelog, test case Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove code duplication Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * updated the notebook to ignore warnings instead of capturing all output and only displaying specifics. (e2nIEE#2996) * voltage dependend loads create differing results (e2nIEE#2991) * fixed issue with voltage dependent loads. * fixed typo in import * removed unused imports * Fixed test now failing due to nan instead of 0 for in_service=False * Fixed juliacall version leading to errror in pandamodels-storage.ipynb (e2nIEE#3011) * fix failing runpp(net, consider_line_temperature=True) (e2nIEE#3004) * fix failing runpp(net, consider_line_temperature=True) for grids with a mix of lines with alpha and without added warning * adapt test * some structuring * import default ALPHA * rename ALPHA to ALPHA_TDPF due to duplicate (branch cols) * fix NameError * Fix: Apply transformer correction factor K_T only for max case (IEC 60909-0:2016) (e2nIEE#2962) * Fixing usage of transformer impedance correction factor in min case of short-circuit calculations, Adapting tests * take case from net._options for trafo k_t fix (calculation only for max case) * case was missing. * fixed a broken test. * fix test_all_currents.py * min and max test case for test_trafo_impedace fixed * Fix SyntaxError: invalid escape sequences in test_group.py (Python 3.14) Use raw strings (r"...") for all regex match patterns containing escape sequences like \(, \[, and \. which are SyntaxError in Python 3.14. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Christian Bredtmann <christian.bredtmann@envelio.de> Co-authored-by: pawellytaev <pawel.lytaev@uni-kassel.de> Co-authored-by: envelio-cb <88880102+envelio-cb@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: Reinhold Bertram <reinhold.bertram@envelio.de> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: IEECNB215543\gbanerjee <gourab.banerjee@iee.fraunhofer.de> * docs: fix separated spelling in docs (e2nIEE#3008) Signed-off-by: Yoshiki <yosinn1@gmail.com> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Adaptions to PowerFactory2pp Converter (e2nIEE#3005) Changes in PowerFactory2pp converter * Fixed test now failing due to nan instead of 0 for in_service=False * get coords from (sub)stations unpack only 2 coordinates, third one is 0 return None,None is no ext_grid can be created * replace tuple with list to consolidate the code and fit the GeoJson standard * tuple list .. * cim2pp: mapping SV data to the assets with flag use_sv_data_for_assets=True (e2nIEE#3024) * cim2pp: mapping SV data to the assets with flag use_sv_data_for_assets=True * add GeographicalRegion from eqbd profile (e2nIEE#3025) * add GeographicalRegion from eqbd profile * add GeographicalRegion to cim_classes * Check if static generator has connected bus before importing it from powerfactory (e2nIEE#2975) * When importing static generators from powerfactory, first check if they are connected to a bus. If not, do not import them (previously, this was not checked for static gens that are reference machines, which led to import errors) * Update to changelog * simplified check for av_mode constq --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: pawellytaev <86314586+pawellytaev@users.noreply.github.com> * fix warning in LTDS yupiter notebook (e2nIEE#3033) * Speed up CGMES import (parser + trafo tap characteristic table) (e2nIEE#3020) * Speed up CGMES trafo tap characteristic table build Replace the per-group itertuples loop in _create_trafo_characteristic_table with vectorized factorize and column-wise DataFrame construction. Output is unchanged; convert time drops significantly on large CGMES networks. * Speed up CGMES XML parsing with single-pass tag grouping Group profile children by tag in one pass instead of calling findall per element type, and streamline _parse_element attribute handling. Parsed CIM tables and converted networks are unchanged on large CGMES test cases. --------- Co-authored-by: Šime Pavlić <simepavlic@Simes-MacBook-Pro.local> Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> Co-authored-by: mrifraunhofer <94368111+mrifraunhofer@users.noreply.github.com> * update scipy-stubs in toml (e2nIEE#3038) * limited scipy-stubs to <1.18 for python<3.12 support * Fixed SQL Injection possiblilities and some assertion in code (e2nIEE#3035) * fixed sql injection possibility * removed assertion from code * update from_jao.py * Update run_import.py * Update sql_io.py * fixed issue in from_jao * fixed duplicate definition of test_dir/test_path fixed sqlite table query * fixed issues with psycopg version 3 being installed but version 2 being used. * simplified pipeline to use env vars to pass args to test_sql_io * fixed upload_sql_table added changelog entries * fixed sql using param for table or column names * improved use of psql.Identifier * improved use of psql.Identifier * fixed import error when type checking fixed issue with to_sql_str * fixed missing comma in pyproject.toml * improved SQL Query construction * fixed issue with DEFAULT in query as Literal and not SQL Directive * fixed issue with None being passed as str * import fail will no longer result in successful pipeline as postgresql not available will fail now. * fixed type being handled as string instead of sql directive * fixed missing dsn and schema for availability test * fixed issue where .as_string was called on a string * fixed issue where to_sql_str was used for int values * Issues/fixing critical codacy (e2nIEE#3040) * fixed cp1 eur passed in kw instead of mw * fixed typo in bug-report template * removed unreachable return * fixed typo in create_buses_dc * Feature/integrate helm solver (e2nIEE#2067) * added a new powerflow method, HELM. Provided by HELMpy package. * added some tests for the new powerflow method. * added a new powerflow method, HELM. Provided by HELMpy package. * updated doc string. * added a new powerflow method, HELM. Provided by HELMpy package. * added a new powerflow method, HELM. Provided by HELMpy package. * changed the standard iterations for helm, since helmpy crashes after 40 iterations with an index error. * made some modifications to adapt the values to what helmpy awaits. * added MBASE, since pandapower sometimes doesn't set this value. * added the 9case testcase. * fixed the helm integration into pandapower, the shunts needed to be scaled differently, the slack angle was ignored and the result extraction wasn't correct. * updated the integration to use pv_bus_model=2 since it is the default. * typing fixes. * added some doc about helm. * added more typing exclusion for mypy. * added install git, since sphinx needs it to pull packages. * added helm to algorithm literal and moved the import to the test. * update of pipeline. * added missing empty line * updated docs and removed uv from pipeline. * added install git. * Update github_test_action.yml updated docs pipeline to only install docs requirements * added vscode workspace to gitignore. * made some minor fixes to spelling and copyright headers. * minor fixes for codacy. --------- Co-authored-by: Jan Wiemer <32835953+jwiemer112@users.noreply.github.com> Co-authored-by: Roman Bolgaryn <roman.bolgaryn@iee.fraunhofer.de> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Fixed issues in diagnostic functions + more tests (e2nIEE#3052) * parametrized the diagnostic test. added more diag functions to the no issues test. * fixed diagnostic_functions and added tests. * fixed continuous bus indices being tested incorrectly. closes e2nIEE#3042 * Hardening from_json (e2nIEE#3050) * first version to fix e2nIEE#3049 * fix for broken de-/serialization of (Log)SplineCharateristic. * hardening from_json deserialiser. * changed parameter to skip_checks. * missed one refactor. * fix for LSC, overwrote the setted values... * needed to allow more modules. * added more fixes needed for older networks, and added _eq_ method, since otherwise comparisons between SC / LSC fail. * added an _eq_ and _hash_ function to SC and LSC * had to fix LSC again, since it created the log10 of the values, which were already log10(x) * had to add _eq_ and _hash_ to fuse and ocrelay otherwise they would not have worked as well. * Fix 3ph loadflow with `gen` element (e2nIEE#3010) * Fix gen 3ph result table Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix gen build Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove change to diagnostic Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove change to diagnostic Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Enhance ImportError logging in run_pandamodels.py Improve error handling for ImportError in _call_pandamodels function. * Simplify ImportError handling for juliacall --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Neutral earthing impedance (rn_ohm) and zigzag earthing transformers in the zero-sequence short circuit (e2nIEE#3016) * [ADDED] neutral earthing impedance (rn_ohm) and zigzag earthing transformers in zero-sequence short circuit - add rn_ohm (resistive neutral earthing) to create_transformer / create_transformer_from_parameters and the bulk variants; apply the neutral earthing impedance 3*(rn_ohm + j*xn_ohm) to the zero-sequence impedance of all earthed-star vector groups, after the IEC transformer correction factor. Previously xn_ohm was only considered for power-station-unit transformers, and only as a reactance, so a neutral earthing resistor (NER/NGR) could not be modelled for ordinary earthed transformers. - add zigzag earthing transformer vector groups ZNyn / ZNd / ZNy / ZN. Per the YNzn zero-sequence model the zigzag winding completely decouples the primary and secondary zero sequences and presents a shunt-to-ground: the HV-winding leakage portion (si0_hv_partial) in series with 3*Z_N at the star point. An earthed-wye secondary (ZNyn) gets its own decoupled zero-sequence path to ground (LV leakage portion + zero-sequence magnetising); a delta / unearthed secondary (ZNd / ZNy) has none. - add unit tests in test_1ph: neutral earthing adds exactly 3*Z_N to the zero sequence; zigzag earthing of a delta-fed system, with the NER limiting it and the primary/secondary decoupling. - update changelog. Enables IEC 60909 single-phase earth-fault studies on delta-fed systems earthed through a neutral earthing resistor and/or a zigzag earthing transformer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fixed naming convention issues. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * add init_pq option for PandaModels opf warm starts (e2nIEE#2985) * add init_pq option for PandaModels opf warm starts * add changelog, fix float assertion * New parameter wasn't handed over properly. Also logic in add_pm_gen_start_values_from_results seemed buggy. Return values which were nowehere used and empty return statements. * Handed **kwargs to opf options / to _runpm --------- Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * Fix generalized OPF cost Hessian evaluation (e2nIEE#3055) * Fix generalized OPF cost Hessian evaluation * cleaning the comments * Move OPF cost function regression test into coverage suite * Add changelog entry for OPF cost function fix * Cover OPF generalized cost with empty Hessian * Resolve changelog conflict * Resolve changelog conflict * Resolve changelog conflict --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Add an OpenDSS → pandapower converter (from_opendss) (e2nIEE#3056) * Add OpenDSS -> pandapower converter (from_opendss) Balanced positive-sequence importer that reads an OpenDSS feeder through OpenDSSDirect.py and maps buses, lines (LineCode carried through as std_type), two-winding and center-tapped split-phase service transformers (imported at their solved tap), loads, shunt capacitors, switches and the source. The returned net carries an opendss_import report with element counts, per-bus phase counts, the OpenDSS-solved voltages and the approximations made. Positive-sequence is exact for symmetric (e.g. European 3-phase 4-wire) feeders and a documented approximation for unsymmetrical North-American topology, which runpp_3ph cannot represent (e2nIEE#873). Adds an "opendss" optional-dependency extra, unit tests (inline circuits), docs and a changelog entry. Revisits e2nIEE#1442. * Add the opendss extra to the "all" dependency group Per maintainer feedback on e2nIEE#3043: a new production dependency group should be included in "all". Drops the now-redundant explicit opendss entry from "dev" (it inherits from "all"). * Address Codacy and SonarCloud static-analysis findings - __init__.py: replace the wildcard re-export with an explicit `from ... import from_opendss` plus __all__ (pyflakes F401/F403), and add the package docstring (pydocstyle D104). - from_dss.py: convert the docstrings to the numpy section style expected by pydocstyle (D213/D203/D406/D407/D413/D417). - from_dss.py: avoid a floating-point equality check when detecting a missing voltage base (Sonar S1244), use dict() instead of a dict comprehension (S7500), and reword a comment that read like code (S125). No behaviour change; the 9 converter tests still pass. * Avoid pydocstyle D211/D212 vs D203/D213 conflict in the converter The repository's static-analysis config enables both members of the mutually-exclusive pydocstyle pairs (blank-line-before-class-docstring and multi-line-summary-placement), so a multi-line module docstring or a class docstring cannot satisfy it. Use a one-line module docstring with the rationale moved to comments, and drop the docstring on the private _ImportReport dataclass (a private class needs none). No behaviour change. * fixed comment issues, which failed sphinx build. --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * More plotly results annotations (e2nIEE#2375) * add more hoverinfo to plot * overwrite pandapower version to make tests work * fix wrong filepaths in test_file_io * change back to original _version.py * fixed unit issue and added typing. * reverted changes to test_file_io.py --------- Co-authored-by: Heiner Früh <heiner.frueh@stuttgart-netze.de> Co-authored-by: Heiner <heiner.frueh@ieh.uni-stuttgart.de> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * fix(converter): Kron-reduce explicit-neutral OpenDSS LineCodes in from_opendss (e2nIEE#3058) * fix(converter): Kron-reduce explicit-neutral OpenDSS LineCodes from_opendss silently mis-computed positive-sequence resistance for 3-phase-plus-neutral matrix LineCodes (the standard 4-wire European LV format): Lines.R1()/X1()/C1() do not Kron-reduce the neutral out of a >3-conductor matrix before forming the sequence value, so the imported line carried neither the declared conductor's impedance nor a value derivable from it. Found while validating the converter against a real, independently sourced Portuguese LV network (Koirala et al., "Non-Synthetic European Low Voltage Test System", 2020) -- a genuine 4-wire matrix LineCode corpus outside the 3-conductor feeders the converter had been exercised against so far. Adds `_kron_positive_sequence`, used only for >3-conductor lines; the common <=3-conductor path is untouched. Two regression fixtures cover zero-mutual (the real-world pattern found) and asymmetric neutral coupling (proves an actual reduction happens, not a pass-through). * fix: R1/X1/C1 are stale for any matrix-defined line, not just >3-cond The Kron-reduction fix only guarded lines with more than 3 conductors, diagnosed from the first reproduction (an explicit-neutral European LineCode). Checking OpenDSS's own Pascal source shows the real trigger is broader: TLineObj/TLineCodeObj hard-code R1 := 0.0580, X1 := 0.1206 at construction, and switching to a matrix definition (rmatrix=/ xmatrix=) sets SymComponentsModel := FALSE but never clears or recomputes those fields. OpenDSS's own text property interface knows this and reports them as '----' once matrix mode is active, but the direct numeric getters this converter calls don't perform the same guard -- so any matrix-defined line, not just 4-conductor ones, silently gets the stale default. Confirmed empirically: a plain 3-conductor matrix LineCode with no neutral at all returned the same 0.058/0.1206 instead of its declared values. Widens the fix to always derive R1/X1/C1 from the declared matrix (Kron-eliminating conductors beyond the first 3 only when there are more than 3) instead of trusting OpenDSS's getters at all -- verified to exactly reproduce the declared value for symmetric-components- defined lines too, so this is safe universally. Generalizes the self/mutual averaging to the actual conductor count instead of hard-coding 3, since the previous formula would have silently mis-handled 1- and 2-conductor matrix lines (a common SMART-DS/ IEEE-test-feeder pattern for single-phase laterals) had it ever been reached. Adds two more regression tests for those cases. * [FEATURE] Simple Redispatch solver using pandamodels.jl (e2nIEE#3059) * added a redispatch solver via pandamodels.jl * fixed changelog. * updated pandamodels.jl version. * changed default to actual floats not ints. * fixed tests, since comparison failed due to nan values. * pp.create.create_transformers value initialization not working (e2nIEE#2894) * pp.create.create_transformers value initialization not working (e2nIEE#2886) * create_transformers now forwards tap and optional std-type params. * updated tests verifying these fields. * pp.create.create_transformers value initialization not working (e2nIEE#2886) * Remove unnecessary shift_degree extraction. * Remove redundant tap_changer_type value check. * Pass std_params directly to params dict instead of extracting individually. * test_create should use tolist() instead of "value". * npt.NDArray should use "integer" as a numpy. * pp.create.create_transformers value initialization not working (e2nIEE#2886) * Remove redundant tap_changer_type value check reverted. * UT added for std_type override when create_transformers is used. * pp.create.create_transformers value initialization not working (e2nIEE#2886) * fix: prevent duplicate kwargs when using standard types * refactor: undo unrelated test changes * fixed return type and fixed potential None error. * fixed test test_create_transformers_for_single_override_std_type. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Add compute_switch_flows() for zero-impedance bus-bus switches (e2nIEE#2956) After runpp(), bus-bus switches with z_ohm=0 have NaN in res_switch because Pandapower fuses their buses into a single internal node. This makes it impossible to determine the power flow through individual bus couplers, bus-section switches, or similar zero- impedance switching devices. This commit adds a new toolbox function compute_switch_flows(net) that populates res_switch (p_from_mw, q_from_mvar, p_to_mw, q_to_mvar, i_ka, loading_percent) for these switches using a post-hoc nodal balance approach: 1. Identify fused-bus groups from _pd2ppc_lookups["bus"] 2. Calculate net local injection at each bus from res_* tables (loads, generators, shunts, wards, and outgoing branch flows) 3. Build the zero-impedance switch tree within each fused group 4. DFS from leaves to root to accumulate subtree demand and derive individual switch flows The function raises ValueError if zero-impedance switches form a cycle within a fused group, since the flow split is physically indeterminate without impedance information. Switches with z_ohm > 0 are not modified, as they already have results from the Newton-Raphson solver. Also adds documentation (toolbox.rst, switch.rst, CHANGELOG.rst) and 17 tests covering single couplers, chains, branching trees, cycle detection, sign convention, cross-validation, and loading percent. Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Do not open networks from files with older format version than the installed pandapower version (e2nIEE#2912) * do not open networks with newer format versions than the currently installed pandapower version * usage of possibility to open newer networks in all file io-functions # Conflicts: # pandapower/convert_format.py # pandapower/file_io.py * small bug fix * add test for new behavior (do not open newer networks) * added changelog entry * removed TODO, small correction in file_io.py * fixed an error in file_io.py, prob due to a merge error on my part. * fixed docstring. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * bump version. * fixed upload pipeline. * bump version. Needed to remove direct dependency to helmpy, needs to be installed manually. * fixed a misleading logger.warning message. * bump version. * [Fix] unsafe json load (e2nIEE#3061) * block deserializing arbitrary objects from json * remove dead code (geo data fallback) * surface DeserializationNotAllowed exception * allow deserializing Enums defined in pandapower --------- Co-authored-by: SRDM <42580302+SimonRubenDrauz@users.noreply.github.com> * upgrade of all fixed versions (e2nIEE#3062) * upgrade of all versions, but opendss killed the pipeline see dss-extensions/OpenDSSDirect.py#148 * excluded an incompatible scipy version. * added support for python 3.10 of sphinx. * fixed version for networkx * some more version fixes. * fixed some typing issues. * fixed a bug in this timeseries notebook. * bump version. * updated the Logo paths and e2n Link in accordance with PR e2nIEE#15 on pandapower-homepage (e2nIEE#3066) * feat(opendss): import series Reactor elements as branches (e2nIEE#3067) Found while test-importing more real feeder libraries (EPRI's Ckt5/Ckt7) for validation beyond the original PR's four families: EPRI models the substation's Thevenin-equivalent source impedance as a bus-to-bus Reactor (SourceBus -> feeder head), not a Transformer, a topology from_opendss did not yet cover. _add_reactors treats a series (two-bus) Reactor as a fixed-impedance line (R/X from dss.Reactors.R()/X(), rated at CktElement.NormalAmps()). A shunt reactor (single bus, to ground) is a different element and is skipped with a warning rather than misread as a second branch. 4 new regression tests on an inline synthetic feeder. * fix(opendss): restore OpenDSSDirect.py as a dev dependency (e2nIEE#3075) * fix(opendss): restore OpenDSSDirect.py as a dev dependency It was dropped from the all/dev extras in e2nIEE#3062 because installing it alongside pytest~=9.1 crashes the pytest process on Windows (upstream bug: dss-extensions/OpenDSSDirect.py#148). That left the OpenDSS converter with 0% coverage in CI, since opendssdirect was never installed to begin with. The crash is Windows-specific: it reproduces with pytest==9.1.1 + OpenDSSDirect.py==0.9.4 on Windows but not on Linux, where this repo's PR-gating CI actually runs. Restore the dependency and skip test_from_opendss.py on win32 before it ever imports opendssdirect, instead of avoiding the dependency for every platform. * fix(opendss): disable faulthandler around the opendssdirect import Replaces the Windows platform-skip with an actual fix. Traced the crash on a real windows-latest GitHub Actions runner (Houmgaor#diag- opendss-windows-crash): dss_python_backend's Free Pascal runtime raises an internal first-chance SEH exception during its own module init that it normally handles and silences itself. pytest enables Python's faulthandler by default, which installs a Windows vectored exception handler that intercepts that first-chance exception before Pascal's own handler gets it, and reports it as a fatal crash. A plain `python -c "import opendssdirect"` never enables faulthandler, so it never sees this -- matching the upstream report exactly. Bracketing just the import with faulthandler.disable()/.enable() eliminates the false crash entirely (verified: clean pytest pass, no exception message) while leaving faulthandler protecting the rest of the run (verified: a real segfault after the import is still caught and reported). See dss-extensions/OpenDSSDirect.py#148 * docs(changelog): update entry to describe the faulthandler fix The CHANGELOG entry still described the old Windows platform-skip; update it to match the actual fix. * removed support for 3.10 * added fixes that exist on feature/v4.0.0 to simplify merging in the future (e2nIEE#3072) * added skip for test that relies on newer version of pgm-io * fixed mypy issues * added typing and fixed docstring * fixed redefinition of var type * fixed incorrect use of skipif * fixed use of object as fallback for geoseries when typechecking * fixed typing in groups.py * fixed occurences of create_empty_network * removed duplicate ukpn tutorials * fixed missing import in plotly_traces.ipynb * fixed opf test failing --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> Signed-off-by: Yoshiki <yosinn1@gmail.com> Co-authored-by: Jan Wiemer <32835953+jwiemer112@users.noreply.github.com> Co-authored-by: mrifraunhofer <94368111+mrifraunhofer@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> Co-authored-by: Bryn Pickering <17178478+brynpickering@users.noreply.github.com> Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> Co-authored-by: Arisaka97 <solitaire2312@gmail.com> Co-authored-by: pawellytaev <86314586+pawellytaev@users.noreply.github.com> Co-authored-by: mrichter <mario.richter@iee.fraunhofer.de> Co-authored-by: Moritz <29129441+MoritzHauff@users.noreply.github.com> Co-authored-by: Jeremias Lang <158100420+jerelang@users.noreply.github.com> Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: Engr. Ahmad Furqan <ahmadfurqanc@gmail.com> Co-authored-by: nis-nurr <rijad.nuridini@nis.ch> Co-authored-by: marcopau <77792704+marcopau@users.noreply.github.com> Co-authored-by: envelio-js <johannes.sorg@envelio.de> Co-authored-by: Christian Bredtmann <christian.bredtmann@envelio.de> Co-authored-by: pawellytaev <pawel.lytaev@uni-kassel.de> Co-authored-by: envelio-cb <88880102+envelio-cb@users.noreply.github.com> Co-authored-by: Reinhold Bertram <reinhold.bertram@envelio.de> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: IEECNB215543\gbanerjee <gourab.banerjee@iee.fraunhofer.de> Co-authored-by: yosinn1-blip <yosinn1@gmail.com> Co-authored-by: Frank Marten <79512075+fmarten99@users.noreply.github.com> Co-authored-by: Šime Pavlić <pavlicsime1994@gmail.com> Co-authored-by: Šime Pavlić <simepavlic@Simes-MacBook-Pro.local> Co-authored-by: Roman Bolgaryn <roman.bolgaryn@iee.fraunhofer.de> Co-authored-by: stardeltapower <65967874+stardeltapower@users.noreply.github.com> Co-authored-by: Ehsanpoly <90526732+Ehsanpoly@users.noreply.github.com> Co-authored-by: Houmgaor <35099109+Houmgaor@users.noreply.github.com> Co-authored-by: Heiner <heiner.frueh@gmx.de> Co-authored-by: Heiner Früh <heiner.frueh@stuttgart-netze.de> Co-authored-by: Heiner <heiner.frueh@ieh.uni-stuttgart.de> Co-authored-by: Nemanja Stankić <36014264+belobradi@users.noreply.github.com> Co-authored-by: Pascal Ehlert <pascal@ehlert-it.de> Co-authored-by: Daniel Lohmeier <31214121+dlohmeier@users.noreply.github.com> Co-authored-by: Joschka Thurner <joschka.thurner@retoflow.de> Co-authored-by: SRDM <42580302+SimonRubenDrauz@users.noreply.github.com>
KS-HTK
added a commit
that referenced
this pull request
Aug 10, 2026
* updated docstings (#2934) deprecated unused keyword args * Feature/get all elements (#2939) * adding first draft of simple_hl_plot a function to easily highlight buses and lines paired with a hover functionality * added function to get a dataframe of all elements in the net * add test clean comments renaming * add changelog entry * ltds_fix (#2938) * updated ltds notebooks * updated ltds notebooks, fixed LTDS converter * added pytest split to tutorial_test pipeline (#2935) * added pytest split to tutorial_test pipeline * added notebook test times * fixed many links (#2937) other formatting * Fix copyright text formatting in LICENSE file (#2914) * Fix copyright text formatting in LICENSE file * Refactor copyright notice in LICENSE Updated copyright notice formatting in LICENSE file following [upstream changes](licensee/licensee#950) to handle multi-line attribution. --------- * added PowerElectronicsConnection to the LTDS converter, updated LTDS notebooks (PowerElectronicsConnection) (#2942) * ltds_pce (#2944) * added PowerElectronicsConnection to the LTDS converter, updated LTDS notebooks (PowerElectronicsConnection) * updated LTDS notebooks for mapping Excel data * ltds_notebook (#2949) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * ltds_notebook (#2950) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * Feature check vkr percent (#2948) * added check to check if vkr_percent values are reasonable. * added changelog entry. --------- * Feature additional diagnostic functions (#2952) * added more diagnostic functions. * added changelog entry. * fixed a small bug, used the wrong value in the reactance field. * Correct loading_percent description in motor_par.csv (#2947) Updated the description of loading_percent. * ucte2pp conversion fixes (#2823) * consider empty R dataframe in ucte conversion * convert impedances and trafos with G/B=NaN to G/B=0 * change fillna for trafos and impedances to the ucte_parser * fillna df if 0 * fix nan values in impedances and trafos * ucte2pp: averaging voltages and clean up parser * changelog entries for ucte2pp fixes * average voltage setpoints using topological search instead of ucte name * empty space at EOF * fix codacy issue * remove create_switch from pp_import_functions * fix create_vsc functions * change symmetrical tap changer to 90 degree tap step degree * correct handling of symmetrical PSTs in ucte2pp * comment averaging function based on PR review * changes ucte converter * ucte2pp: add flag for voltage harmonization, with default false * fix test * fix tests and restrict tolerances a bit --------- * Fix 2733 (#2951) * change patch sizes for plot (#2733) * fix patch sizes for plot only once (#2733) `get_collection_sizes()` takes arguments to adjust the relative size of an element. --------- * Fix runopp(init="results") so the OPF solver preserves the model initial vector (#2902) * Fix runopp(init=results) warm-start handling in pips OPF * Update CHANGELOG for upcoming release fixes and features --------- * Feature/highlight plot (#2833) * integrated highlighting feature into simple_plot * integrated hover feature into simple_plot * update plotting tutorial * adjust color * Fix unit g0_us (#2958) attribute name g0_us_per_km is incorrectly named as g0_nf_per_km in add_zero_impedance_parameters function. * updated branding with versions from marketing (#2953) * [IMPROVEMENT] fix `bool` parameters input in `read_excel` and add `add_basic_std_types` parameter (#2961) * Add basic std types flag to from_excel * Fix reading bool * Fix backward compatibility * Silence sonarcloud and codacy * Remove ruff ignore --------- * added permissions block to all workflows (#2964) * updated the issue templates to use the issue types instead of labels and title (#2966) minor changes in forms layouts * Feature/revised issue templates (#2967) * updated the issue templates to use the issue types instead of labels and title minor changes in forms layouts * fix for config not parsing by github (hopefully) added documentation template added emoji to template title for more visual guidance * uniform formatting for templates * added missing blank line at end of file * display logger message only if GetActiveScenario() isn't None (#2969) Only display a logger message if GetActiveScenario is not None Added else case with a info message if no study case / scenario is active. * Update docstring (#2970) * ltds_notebook (#2972) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * Update lightsim2grid version (#2976) * fix cmin for low voltage 10% tolerance (#2913) * fix(cmin): fix cmin for low voltage 10% tolerance * [Fix] Fix `reindex_buses` against creating duplicate indecies (#2963) * Fix reindex_buses * Add allow_duplicate_index argument * Fix unused import * Fix test --------- * feature/doc strings update (#2979) * added/reformatted many docstrings * added show_plot=False to test_plotting_toolbox * refactored docstrings and added types * fixed f-string in groups.py * fixed incorrect type * fixed incorrect type * fixed missing import * fixed import issue with specific lightsim2grid versions * fixed mypy issues in contingency refactored test in test_contingency * fixed mypy issues * updated var name * updated the contributing.rst (#2973) * updated the contributing.rst * removed raw directive * changed contributing to markdown for better github compatibility replaced contributing on readTheDocs by link to GitHub * Added a section on changelog to the contributing.md Added a changelog entry to the changelog * Update CHANGELOG.rst * [Feature]: Toggle Colormap for simple_plot (#2971) * colormap-integration in simple_plot * adjust colors *add docstrings *add second button to better visualize options for the user * change ext_grid color * some formatting * only plot colormap if buses or lines are available (fix tutorial-test error) * removed some spaces removed some whitelines added results to hover info * add changelog entry * adepted authors * adapted zorder make plotting bus-switches optional * typo * small adaptions * small adjustments --------- * ltds_notebook (#2980) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * update LTDS Jupiter Notebook respecting new Excel format --------- * Fix diagnostic report (#2983) * Tutorials for UKPN (#2984) * Fix tutorial on power flow * Updated Jupyter notebooks for UKPN * Fix on tutorial directory * [Fix] `DiscreteTapControl` to work with negative `tap_step_percent` (#2990) * abs tap_step_percent * Add changelog, test case * Remove code duplication --------- * updated the notebook to ignore warnings instead of capturing all output and only displaying specifics. (#2996) * voltage dependend loads create differing results (#2991) * fixed issue with voltage dependent loads. * fixed typo in import * removed unused imports * Fixed test now failing due to nan instead of 0 for in_service=False * Fixed juliacall version leading to errror in pandamodels-storage.ipynb (#3011) * fix failing runpp(net, consider_line_temperature=True) (#3004) * fix failing runpp(net, consider_line_temperature=True) for grids with a mix of lines with alpha and without added warning * adapt test * some structuring * import default ALPHA * rename ALPHA to ALPHA_TDPF due to duplicate (branch cols) * fix NameError * Fix: Apply transformer correction factor K_T only for max case (IEC 60909-0:2016) (#2962) * Fixing usage of transformer impedance correction factor in min case of short-circuit calculations, Adapting tests * take case from net._options for trafo k_t fix (calculation only for max case) * case was missing. * fixed a broken test. * fix test_all_currents.py * min and max test case for test_trafo_impedace fixed * Fix SyntaxError: invalid escape sequences in test_group.py (Python 3.14) Use raw strings (r"...") for all regex match patterns containing escape sequences like \(, \[, and \. which are SyntaxError in Python 3.14. --------- * docs: fix separated spelling in docs (#3008) * Adaptions to PowerFactory2pp Converter (#3005) Changes in PowerFactory2pp converter * Fixed test now failing due to nan instead of 0 for in_service=False * get coords from (sub)stations unpack only 2 coordinates, third one is 0 return None,None is no ext_grid can be created * replace tuple with list to consolidate the code and fit the GeoJson standard * tuple list .. * cim2pp: mapping SV data to the assets with flag use_sv_data_for_assets=True (#3024) * cim2pp: mapping SV data to the assets with flag use_sv_data_for_assets=True * add GeographicalRegion from eqbd profile (#3025) * add GeographicalRegion from eqbd profile * add GeographicalRegion to cim_classes * Check if static generator has connected bus before importing it from powerfactory (#2975) * When importing static generators from powerfactory, first check if they are connected to a bus. If not, do not import them (previously, this was not checked for static gens that are reference machines, which led to import errors) * Update to changelog * simplified check for av_mode constq --------- * fix warning in LTDS yupiter notebook (#3033) * Speed up CGMES import (parser + trafo tap characteristic table) (#3020) * Speed up CGMES trafo tap characteristic table build Replace the per-group itertuples loop in _create_trafo_characteristic_table with vectorized factorize and column-wise DataFrame construction. Output is unchanged; convert time drops significantly on large CGMES networks. * Speed up CGMES XML parsing with single-pass tag grouping Group profile children by tag in one pass instead of calling findall per element type, and streamline _parse_element attribute handling. Parsed CIM tables and converted networks are unchanged on large CGMES test cases. --------- * update scipy-stubs in toml (#3038) * limited scipy-stubs to <1.18 for python<3.12 support * Fixed SQL Injection possiblilities and some assertion in code (#3035) * fixed sql injection possibility * removed assertion from code * update from_jao.py * Update run_import.py * Update sql_io.py * fixed issue in from_jao * fixed duplicate definition of test_dir/test_path fixed sqlite table query * fixed issues with psycopg version 3 being installed but version 2 being used. * simplified pipeline to use env vars to pass args to test_sql_io * fixed upload_sql_table added changelog entries * fixed sql using param for table or column names * improved use of psql.Identifier * improved use of psql.Identifier * fixed import error when type checking fixed issue with to_sql_str * fixed missing comma in pyproject.toml * improved SQL Query construction * fixed issue with DEFAULT in query as Literal and not SQL Directive * fixed issue with None being passed as str * import fail will no longer result in successful pipeline as postgresql not available will fail now. * fixed type being handled as string instead of sql directive * fixed missing dsn and schema for availability test * fixed issue where .as_string was called on a string * fixed issue where to_sql_str was used for int values * Issues/fixing critical codacy (#3040) * fixed cp1 eur passed in kw instead of mw * fixed typo in bug-report template * removed unreachable return * fixed typo in create_buses_dc * Feature/integrate helm solver (#2067) * added a new powerflow method, HELM. Provided by HELMpy package. * added some tests for the new powerflow method. * added a new powerflow method, HELM. Provided by HELMpy package. * updated doc string. * added a new powerflow method, HELM. Provided by HELMpy package. * added a new powerflow method, HELM. Provided by HELMpy package. * changed the standard iterations for helm, since helmpy crashes after 40 iterations with an index error. * made some modifications to adapt the values to what helmpy awaits. * added MBASE, since pandapower sometimes doesn't set this value. * added the 9case testcase. * fixed the helm integration into pandapower, the shunts needed to be scaled differently, the slack angle was ignored and the result extraction wasn't correct. * updated the integration to use pv_bus_model=2 since it is the default. * typing fixes. * added some doc about helm. * added more typing exclusion for mypy. * added install git, since sphinx needs it to pull packages. * added helm to algorithm literal and moved the import to the test. * update of pipeline. * added missing empty line * updated docs and removed uv from pipeline. * added install git. * Update github_test_action.yml updated docs pipeline to only install docs requirements * added vscode workspace to gitignore. * made some minor fixes to spelling and copyright headers. * minor fixes for codacy. --------- * Fixed issues in diagnostic functions + more tests (#3052) * parametrized the diagnostic test. added more diag functions to the no issues test. * fixed diagnostic_functions and added tests. * fixed continuous bus indices being tested incorrectly. closes #3042 * Hardening from_json (#3050) * first version to fix #3049 * fix for broken de-/serialization of (Log)SplineCharateristic. * hardening from_json deserialiser. * changed parameter to skip_checks. * missed one refactor. * fix for LSC, overwrote the setted values... * needed to allow more modules. * added more fixes needed for older networks, and added _eq_ method, since otherwise comparisons between SC / LSC fail. * added an _eq_ and _hash_ function to SC and LSC * had to fix LSC again, since it created the log10 of the values, which were already log10(x) * had to add _eq_ and _hash_ to fuse and ocrelay otherwise they would not have worked as well. * Fix 3ph loadflow with `gen` element (#3010) * Fix gen 3ph result table * Fix gen build * Remove change to diagnostic * Remove change to diagnostic * Enhance ImportError logging in run_pandamodels.py Improve error handling for ImportError in _call_pandamodels function. * Simplify ImportError handling for juliacall --------- * Neutral earthing impedance (rn_ohm) and zigzag earthing transformers in the zero-sequence short circuit (#3016) * [ADDED] neutral earthing impedance (rn_ohm) and zigzag earthing transformers in zero-sequence short circuit - add rn_ohm (resistive neutral earthing) to create_transformer / create_transformer_from_parameters and the bulk variants; apply the neutral earthing impedance 3*(rn_ohm + j*xn_ohm) to the zero-sequence impedance of all earthed-star vector groups, after the IEC transformer correction factor. Previously xn_ohm was only considered for power-station-unit transformers, and only as a reactance, so a neutral earthing resistor (NER/NGR) could not be modelled for ordinary earthed transformers. - add zigzag earthing transformer vector groups ZNyn / ZNd / ZNy / ZN. Per the YNzn zero-sequence model the zigzag winding completely decouples the primary and secondary zero sequences and presents a shunt-to-ground: the HV-winding leakage portion (si0_hv_partial) in series with 3*Z_N at the star point. An earthed-wye secondary (ZNyn) gets its own decoupled zero-sequence path to ground (LV leakage portion + zero-sequence magnetising); a delta / unearthed secondary (ZNd / ZNy) has none. - add unit tests in test_1ph: neutral earthing adds exactly 3*Z_N to the zero sequence; zigzag earthing of a delta-fed system, with the NER limiting it and the primary/secondary decoupling. - update changelog. Enables IEC 60909 single-phase earth-fault studies on delta-fed systems earthed through a neutral earthing resistor and/or a zigzag earthing transformer. * fixed naming convention issues. --------- * add init_pq option for PandaModels opf warm starts (#2985) * add init_pq option for PandaModels opf warm starts * add changelog, fix float assertion * New parameter wasn't handed over properly. Also logic in add_pm_gen_start_values_from_results seemed buggy. Return values which were nowehere used and empty return statements. * Handed **kwargs to opf options / to _runpm --------- * Fix generalized OPF cost Hessian evaluation (#3055) * Fix generalized OPF cost Hessian evaluation * cleaning the comments * Move OPF cost function regression test into coverage suite * Add changelog entry for OPF cost function fix * Cover OPF generalized cost with empty Hessian * Resolve changelog conflict * Resolve changelog conflict * Resolve changelog conflict --------- * Add an OpenDSS → pandapower converter (from_opendss) (#3056) * Add OpenDSS -> pandapower converter (from_opendss) Balanced positive-sequence importer that reads an OpenDSS feeder through OpenDSSDirect.py and maps buses, lines (LineCode carried through as std_type), two-winding and center-tapped split-phase service transformers (imported at their solved tap), loads, shunt capacitors, switches and the source. The returned net carries an opendss_import report with element counts, per-bus phase counts, the OpenDSS-solved voltages and the approximations made. Positive-sequence is exact for symmetric (e.g. European 3-phase 4-wire) feeders and a documented approximation for unsymmetrical North-American topology, which runpp_3ph cannot represent (#873). Adds an "opendss" optional-dependency extra, unit tests (inline circuits), docs and a changelog entry. Revisits #1442. * Add the opendss extra to the "all" dependency group Per maintainer feedback on #3043: a new production dependency group should be included in "all". Drops the now-redundant explicit opendss entry from "dev" (it inherits from "all"). * Address Codacy and SonarCloud static-analysis findings - __init__.py: replace the wildcard re-export with an explicit `from ... import from_opendss` plus __all__ (pyflakes F401/F403), and add the package docstring (pydocstyle D104). - from_dss.py: convert the docstrings to the numpy section style expected by pydocstyle (D213/D203/D406/D407/D413/D417). - from_dss.py: avoid a floating-point equality check when detecting a missing voltage base (Sonar S1244), use dict() instead of a dict comprehension (S7500), and reword a comment that read like code (S125). No behaviour change; the 9 converter tests still pass. * Avoid pydocstyle D211/D212 vs D203/D213 conflict in the converter The repository's static-analysis config enables both members of the mutually-exclusive pydocstyle pairs (blank-line-before-class-docstring and multi-line-summary-placement), so a multi-line module docstring or a class docstring cannot satisfy it. Use a one-line module docstring with the rationale moved to comments, and drop the docstring on the private _ImportReport dataclass (a private class needs none). No behaviour change. * fixed comment issues, which failed sphinx build. --------- * More plotly results annotations (#2375) * add more hoverinfo to plot * overwrite pandapower version to make tests work * fix wrong filepaths in test_file_io * change back to original _version.py * fixed unit issue and added typing. * reverted changes to test_file_io.py --------- * fix(converter): Kron-reduce explicit-neutral OpenDSS LineCodes in from_opendss (#3058) * fix(converter): Kron-reduce explicit-neutral OpenDSS LineCodes from_opendss silently mis-computed positive-sequence resistance for 3-phase-plus-neutral matrix LineCodes (the standard 4-wire European LV format): Lines.R1()/X1()/C1() do not Kron-reduce the neutral out of a >3-conductor matrix before forming the sequence value, so the imported line carried neither the declared conductor's impedance nor a value derivable from it. Found while validating the converter against a real, independently sourced Portuguese LV network (Koirala et al., "Non-Synthetic European Low Voltage Test System", 2020) -- a genuine 4-wire matrix LineCode corpus outside the 3-conductor feeders the converter had been exercised against so far. Adds `_kron_positive_sequence`, used only for >3-conductor lines; the common <=3-conductor path is untouched. Two regression fixtures cover zero-mutual (the real-world pattern found) and asymmetric neutral coupling (proves an actual reduction happens, not a pass-through). * fix: R1/X1/C1 are stale for any matrix-defined line, not just >3-cond The Kron-reduction fix only guarded lines with more than 3 conductors, diagnosed from the first reproduction (an explicit-neutral European LineCode). Checking OpenDSS's own Pascal source shows the real trigger is broader: TLineObj/TLineCodeObj hard-code R1 := 0.0580, X1 := 0.1206 at construction, and switching to a matrix definition (rmatrix=/ xmatrix=) sets SymComponentsModel := FALSE but never clears or recomputes those fields. OpenDSS's own text property interface knows this and reports them as '----' once matrix mode is active, but the direct numeric getters this converter calls don't perform the same guard -- so any matrix-defined line, not just 4-conductor ones, silently gets the stale default. Confirmed empirically: a plain 3-conductor matrix LineCode with no neutral at all returned the same 0.058/0.1206 instead of its declared values. Widens the fix to always derive R1/X1/C1 from the declared matrix (Kron-eliminating conductors beyond the first 3 only when there are more than 3) instead of trusting OpenDSS's getters at all -- verified to exactly reproduce the declared value for symmetric-components- defined lines too, so this is safe universally. Generalizes the self/mutual averaging to the actual conductor count instead of hard-coding 3, since the previous formula would have silently mis-handled 1- and 2-conductor matrix lines (a common SMART-DS/ IEEE-test-feeder pattern for single-phase laterals) had it ever been reached. Adds two more regression tests for those cases. * [FEATURE] Simple Redispatch solver using pandamodels.jl (#3059) * added a redispatch solver via pandamodels.jl * fixed changelog. * updated pandamodels.jl version. * changed default to actual floats not ints. * fixed tests, since comparison failed due to nan values. * pp.create.create_transformers value initialization not working (#2894) * pp.create.create_transformers value initialization not working (#2886) * create_transformers now forwards tap and optional std-type params. * updated tests verifying these fields. * pp.create.create_transformers value initialization not working (#2886) * Remove unnecessary shift_degree extraction. * Remove redundant tap_changer_type value check. * Pass std_params directly to params dict instead of extracting individually. * test_create should use tolist() instead of "value". * npt.NDArray should use "integer" as a numpy. * pp.create.create_transformers value initialization not working (#2886) * Remove redundant tap_changer_type value check reverted. * UT added for std_type override when create_transformers is used. * pp.create.create_transformers value initialization not working (#2886) * fix: prevent duplicate kwargs when using standard types * refactor: undo unrelated test changes * fixed return type and fixed potential None error. * fixed test test_create_transformers_for_single_override_std_type. --------- * Add compute_switch_flows() for zero-impedance bus-bus switches (#2956) After runpp(), bus-bus switches with z_ohm=0 have NaN in res_switch because Pandapower fuses their buses into a single internal node. This makes it impossible to determine the power flow through individual bus couplers, bus-section switches, or similar zero- impedance switching devices. This commit adds a new toolbox function compute_switch_flows(net) that populates res_switch (p_from_mw, q_from_mvar, p_to_mw, q_to_mvar, i_ka, loading_percent) for these switches using a post-hoc nodal balance approach: 1. Identify fused-bus groups from _pd2ppc_lookups["bus"] 2. Calculate net local injection at each bus from res_* tables (loads, generators, shunts, wards, and outgoing branch flows) 3. Build the zero-impedance switch tree within each fused group 4. DFS from leaves to root to accumulate subtree demand and derive individual switch flows The function raises ValueError if zero-impedance switches form a cycle within a fused group, since the flow split is physically indeterminate without impedance information. Switches with z_ohm > 0 are not modified, as they already have results from the Newton-Raphson solver. Also adds documentation (toolbox.rst, switch.rst, CHANGELOG.rst) and 17 tests covering single couplers, chains, branching trees, cycle detection, sign convention, cross-validation, and loading percent. * Do not open networks from files with older format version than the installed pandapower version (#2912) * do not open networks with newer format versions than the currently installed pandapower version * usage of possibility to open newer networks in all file io-functions # Conflicts: # pandapower/convert_format.py # pandapower/file_io.py * small bug fix * add test for new behavior (do not open newer networks) * added changelog entry * removed TODO, small correction in file_io.py * fixed an error in file_io.py, prob due to a merge error on my part. * fixed docstring. --------- * bump version. * fixed upload pipeline. * bump version. Needed to remove direct dependency to helmpy, needs to be installed manually. * fixed a misleading logger.warning message. * bump version. * [Fix] unsafe json load (#3061) * block deserializing arbitrary objects from json * remove dead code (geo data fallback) * surface DeserializationNotAllowed exception * allow deserializing Enums defined in pandapower --------- * upgrade of all fixed versions (#3062) * upgrade of all versions, but opendss killed the pipeline see dss-extensions/OpenDSSDirect.py#148 * excluded an incompatible scipy version. * added support for python 3.10 of sphinx. * fixed version for networkx * some more version fixes. * fixed some typing issues. * fixed a bug in this timeseries notebook. * bump version. * updated the Logo paths and e2n Link in accordance with PR #15 on pandapower-homepage (#3066) * feat(opendss): import series Reactor elements as branches (#3067) Found while test-importing more real feeder libraries (EPRI's Ckt5/Ckt7) for validation beyond the original PR's four families: EPRI models the substation's Thevenin-equivalent source impedance as a bus-to-bus Reactor (SourceBus -> feeder head), not a Transformer, a topology from_opendss did not yet cover. _add_reactors treats a series (two-bus) Reactor as a fixed-impedance line (R/X from dss.Reactors.R()/X(), rated at CktElement.NormalAmps()). A shunt reactor (single bus, to ground) is a different element and is skipped with a warning rather than misread as a second branch. 4 new regression tests on an inline synthetic feeder. * fix(opendss): restore OpenDSSDirect.py as a dev dependency (#3075) * fix(opendss): restore OpenDSSDirect.py as a dev dependency It was dropped from the all/dev extras in #3062 because installing it alongside pytest~=9.1 crashes the pytest process on Windows (upstream bug: dss-extensions/OpenDSSDirect.py#148). That left the OpenDSS converter with 0% coverage in CI, since opendssdirect was never installed to begin with. The crash is Windows-specific: it reproduces with pytest==9.1.1 + OpenDSSDirect.py==0.9.4 on Windows but not on Linux, where this repo's PR-gating CI actually runs. Restore the dependency and skip test_from_opendss.py on win32 before it ever imports opendssdirect, instead of avoiding the dependency for every platform. * fix(opendss): disable faulthandler around the opendssdirect import Replaces the Windows platform-skip with an actual fix. Traced the crash on a real windows-latest GitHub Actions runner (Houmgaor#diag- opendss-windows-crash): dss_python_backend's Free Pascal runtime raises an internal first-chance SEH exception during its own module init that it normally handles and silences itself. pytest enables Python's faulthandler by default, which installs a Windows vectored exception handler that intercepts that first-chance exception before Pascal's own handler gets it, and reports it as a fatal crash. A plain `python -c "import opendssdirect"` never enables faulthandler, so it never sees this -- matching the upstream report exactly. Bracketing just the import with faulthandler.disable()/.enable() eliminates the false crash entirely (verified: clean pytest pass, no exception message) while leaving faulthandler protecting the rest of the run (verified: a real segfault after the import is still caught and reported). See dss-extensions/OpenDSSDirect.py#148 * docs(changelog): update entry to describe the faulthandler fix The CHANGELOG entry still described the old Windows platform-skip; update it to match the actual fix. * removed support for 3.10 * added fixes that exist on feature/v4.0.0 to simplify merging in the future (#3072) * added skip for test that relies on newer version of pgm-io * fixed mypy issues * added typing and fixed docstring * fixed redefinition of var type * fixed incorrect use of skipif * fixed use of object as fallback for geoseries when typechecking * fixed typing in groups.py * fixed occurences of create_empty_network * removed duplicate ukpn tutorials * fixed missing import in plotly_traces.ipynb * fixed opf test failing --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> Signed-off-by: Yoshiki <yosinn1@gmail.com> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: Jan Wiemer <32835953+jwiemer112@users.noreply.github.com> Co-authored-by: mrifraunhofer <94368111+mrifraunhofer@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> Co-authored-by: Bryn Pickering <17178478+brynpickering@users.noreply.github.com> Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> Co-authored-by: Arisaka97 <solitaire2312@gmail.com> Co-authored-by: pawellytaev <86314586+pawellytaev@users.noreply.github.com> Co-authored-by: mrichter <mario.richter@iee.fraunhofer.de> Co-authored-by: Moritz <29129441+MoritzHauff@users.noreply.github.com> Co-authored-by: Jeremias Lang <158100420+jerelang@users.noreply.github.com> Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: Engr. Ahmad Furqan <ahmadfurqanc@gmail.com> Co-authored-by: nis-nurr <rijad.nuridini@nis.ch> Co-authored-by: marcopau <77792704+marcopau@users.noreply.github.com> Co-authored-by: envelio-js <johannes.sorg@envelio.de> Co-authored-by: Christian Bredtmann <christian.bredtmann@envelio.de> Co-authored-by: pawellytaev <pawel.lytaev@uni-kassel.de> Co-authored-by: envelio-cb <88880102+envelio-cb@users.noreply.github.com> Co-authored-by: Reinhold Bertram <reinhold.bertram@envelio.de> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: IEECNB215543\gbanerjee <gourab.banerjee@iee.fraunhofer.de> Co-authored-by: yosinn1-blip <yosinn1@gmail.com> Co-authored-by: Frank Marten <79512075+fmarten99@users.noreply.github.com> Co-authored-by: Šime Pavlić <pavlicsime1994@gmail.com> Co-authored-by: Šime Pavlić <simepavlic@Simes-MacBook-Pro.local> Co-authored-by: Roman Bolgaryn <roman.bolgaryn@iee.fraunhofer.de> Co-authored-by: stardeltapower <65967874+stardeltapower@users.noreply.github.com> Co-authored-by: Houmgaor <35099109+Houmgaor@users.noreply.github.com> Co-authored-by: Heiner <heiner.frueh@gmx.de> Co-authored-by: Heiner Früh <heiner.frueh@stuttgart-netze.de> Co-authored-by: Heiner <heiner.frueh@ieh.uni-stuttgart.de> Co-authored-by: Nemanja Stankić <36014264+belobradi@users.noreply.github.com> Co-authored-by: Pascal Ehlert <pascal@ehlert-it.de> Co-authored-by: Daniel Lohmeier <31214121+dlohmeier@users.noreply.github.com> Co-authored-by: Joschka Thurner <joschka.thurner@retoflow.de> Co-authored-by: SRDM <42580302+SimonRubenDrauz@users.noreply.github.com>
KS-HTK
added a commit
that referenced
this pull request
Aug 21, 2026
* updated docstings (#2934) deprecated unused keyword args * Feature/get all elements (#2939) * Hallo * Hallo Leute * adding first draft of simple_hl_plot a function to easily highlight buses and lines paired with a hover functionality * added function to get a dataframe of all elements in the net * add test clean comments renaming * add test * add docu * add changelog entry * ltds_fix (#2938) * updated ltds notebooks * updated ltds notebooks, fixed LTDS converter * added pytest split to tutorial_test pipeline (#2935) * added pytest split to tutorial_test pipeline * added notebook test times * fixed many links (#2937) other formatting Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix copyright text formatting in LICENSE file (#2914) * Fix copyright text formatting in LICENSE file * Refactor copyright notice in LICENSE Updated copyright notice formatting in LICENSE file following [upstream changes](licensee/licensee#950) to handle multi-line attribution. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * added PowerElectronicsConnection to the LTDS converter, updated LTDS notebooks (PowerElectronicsConnection) (#2942) Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> * ltds_pce (#2944) * added PowerElectronicsConnection to the LTDS converter, updated LTDS notebooks (PowerElectronicsConnection) * updated LTDS notebooks for mapping Excel data * ltds_notebook (#2949) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * ltds_notebook (#2950) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * Feature check vkr percent (#2948) * added check to check if vkr_percent values are reasonable. * added changelog entry. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Feature additional diagnostic functions (#2952) * added more diagnostic functions. * added changelog entry. * fixed a small bug, used the wrong value in the reactance field. * Correct loading_percent description in motor_par.csv (#2947) Updated the description of loading_percent. * ucte2pp conversion fixes (#2823) * consider empty R dataframe in ucte conversion * convert impedances and trafos with G/B=NaN to G/B=0 * change fillna for trafos and impedances to the ucte_parser * fillna df if 0 * fix nan values in impedances and trafos * ucte2pp: averaging voltages and clean up parser * changelog entries for ucte2pp fixes * average voltage setpoints using topological search instead of ucte name * empty space at EOF * fix codacy issue * remove create_switch from pp_import_functions * fix create_vsc functions * changelog :) * change symmetrical tap changer to 90 degree tap step degree * correct handling of symmetrical PSTs in ucte2pp * comment averaging function based on PR review * changes ucte converter * ucte2pp: add flag for voltage harmonization, with default false * fix test * fix tests and restrict tolerances a bit --------- Co-authored-by: mrichter <mario.richter@iee.fraunhofer.de> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix 2733 (#2951) * change patch sizes for plot (#2733) * fix patch sizes for plot only once (#2733) `get_collection_sizes()` takes arguments to adjust the relative size of an element. --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Fix runopp(init="results") so the OPF solver preserves the model initial vector (#2902) * Fix runopp(init=results) warm-start handling in pips OPF * Update CHANGELOG for upcoming release fixes and features --------- Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Feature/highlight plot (#2833) * integrated highlighting feature into simple_plot * integrated hover feature into simple_plot * update plotting tutorial * adjust color * Fix unit g0_us (#2958) attribute name g0_us_per_km is incorrectly named as g0_nf_per_km in add_zero_impedance_parameters function. * updated branding with versions from marketing (#2953) * [IMPROVEMENT] fix `bool` parameters input in `read_excel` and add `add_basic_std_types` parameter (#2961) * Add basic std types flag to from_excel Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix reading bool Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix backward compatibility Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Silence sonarcloud and codacy Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove ruff ignore --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * added permissions block to all workflows (#2964) * updated the issue templates to use the issue types instead of labels and title (#2966) minor changes in forms layouts * Feature/revised issue templates (#2967) * updated the issue templates to use the issue types instead of labels and title minor changes in forms layouts * fix for config not parsing by github (hopefully) added documentation template added emoji to template title for more visual guidance * uniform formatting for templates * added missing blank line at end of file * display logger message only if GetActiveScenario() isn't None (#2969) Only display a logger message if GetActiveScenario is not None Added else case with a info message if no study case / scenario is active. * Update docstring (#2970) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * ltds_notebook (#2972) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * Update lightsim2grid version (#2976) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * fix cmin for low voltage 10% tolerance (#2913) * fix(cmin): fix cmin for low voltage 10% tolerance * [Fix] Fix `reindex_buses` against creating duplicate indecies (#2963) * Fix reindex_buses Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Add allow_duplicate_index argument Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix unused import Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix test Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * feature/doc strings update (#2979) * added/reformatted many docstrings * added show_plot=False to test_plotting_toolbox * refactored docstrings and added types * fixed f-string in groups.py * fixed incorrect type * fixed incorrect type * fixed missing import * fixed import issue with specific lightsim2grid versions * fixed mypy issues in contingency refactored test in test_contingency * fixed mypy issues * updated var name * updated the contributing.rst (#2973) * updated the contributing.rst * removed raw directive * changed contributing to markdown for better github compatibility replaced contributing on readTheDocs by link to GitHub * Added a section on changelog to the contributing.md Added a changelog entry to the changelog * Update CHANGELOG.rst * [Feature]: Toggle Colormap for simple_plot (#2971) * colormap-integration in simple_plot * adjust colors *add docstrings *add second button to better visualize options for the user * change ext_grid color * some formatting * only plot colormap if buses or lines are available (fix tutorial-test error) * removed some spaces removed some whitelines added results to hover info * add changelog entry * adepted authors * adapted zorder make plotting bus-switches optional * typo * small adaptions * small adjustments --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * ltds_notebook (#2980) * updated ltds notebooks * updated LTDS notebooks for mapping Excel data * updated LTDS notebooks for mapping Excel data * UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * fix UKPN Jupiter Notebook * update LTDS Jupiter Notebook respecting new Excel format --------- Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> * Fix diagnostic report (#2983) Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Tutorials for UKPN (#2984) * Fix tutorial on power flow * Updated Jupyter notebooks for UKPN * Fix on tutorial directory * [Fix] `DiscreteTapControl` to work with negative `tap_step_percent` (#2990) * abs tap_step_percent Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Add changelog, test case Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove code duplication Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * updated the notebook to ignore warnings instead of capturing all output and only displaying specifics. (#2996) * voltage dependend loads create differing results (#2991) * fixed issue with voltage dependent loads. * fixed typo in import * removed unused imports * Fixed test now failing due to nan instead of 0 for in_service=False * Fixed juliacall version leading to errror in pandamodels-storage.ipynb (#3011) * fix failing runpp(net, consider_line_temperature=True) (#3004) * fix failing runpp(net, consider_line_temperature=True) for grids with a mix of lines with alpha and without added warning * adapt test * some structuring * import default ALPHA * rename ALPHA to ALPHA_TDPF due to duplicate (branch cols) * fix NameError * Fix: Apply transformer correction factor K_T only for max case (IEC 60909-0:2016) (#2962) * Fixing usage of transformer impedance correction factor in min case of short-circuit calculations, Adapting tests * take case from net._options for trafo k_t fix (calculation only for max case) * case was missing. * fixed a broken test. * fix test_all_currents.py * min and max test case for test_trafo_impedace fixed * Fix SyntaxError: invalid escape sequences in test_group.py (Python 3.14) Use raw strings (r"...") for all regex match patterns containing escape sequences like \(, \[, and \. which are SyntaxError in Python 3.14. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Christian Bredtmann <christian.bredtmann@envelio.de> Co-authored-by: pawellytaev <pawel.lytaev@uni-kassel.de> Co-authored-by: envelio-cb <88880102+envelio-cb@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: Reinhold Bertram <reinhold.bertram@envelio.de> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: IEECNB215543\gbanerjee <gourab.banerjee@iee.fraunhofer.de> * docs: fix separated spelling in docs (#3008) Signed-off-by: Yoshiki <yosinn1@gmail.com> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Adaptions to PowerFactory2pp Converter (#3005) Changes in PowerFactory2pp converter * Fixed test now failing due to nan instead of 0 for in_service=False * get coords from (sub)stations unpack only 2 coordinates, third one is 0 return None,None is no ext_grid can be created * replace tuple with list to consolidate the code and fit the GeoJson standard * tuple list .. * cim2pp: mapping SV data to the assets with flag use_sv_data_for_assets=True (#3024) * cim2pp: mapping SV data to the assets with flag use_sv_data_for_assets=True * add GeographicalRegion from eqbd profile (#3025) * add GeographicalRegion from eqbd profile * add GeographicalRegion to cim_classes * Check if static generator has connected bus before importing it from powerfactory (#2975) * When importing static generators from powerfactory, first check if they are connected to a bus. If not, do not import them (previously, this was not checked for static gens that are reference machines, which led to import errors) * Update to changelog * simplified check for av_mode constq --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: pawellytaev <86314586+pawellytaev@users.noreply.github.com> * fix warning in LTDS yupiter notebook (#3033) * Speed up CGMES import (parser + trafo tap characteristic table) (#3020) * Speed up CGMES trafo tap characteristic table build Replace the per-group itertuples loop in _create_trafo_characteristic_table with vectorized factorize and column-wise DataFrame construction. Output is unchanged; convert time drops significantly on large CGMES networks. * Speed up CGMES XML parsing with single-pass tag grouping Group profile children by tag in one pass instead of calling findall per element type, and streamline _parse_element attribute handling. Parsed CIM tables and converted networks are unchanged on large CGMES test cases. --------- Co-authored-by: Šime Pavlić <simepavlic@Simes-MacBook-Pro.local> Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> Co-authored-by: mrifraunhofer <94368111+mrifraunhofer@users.noreply.github.com> * update scipy-stubs in toml (#3038) * limited scipy-stubs to <1.18 for python<3.12 support * Fixed SQL Injection possiblilities and some assertion in code (#3035) * fixed sql injection possibility * removed assertion from code * update from_jao.py * Update run_import.py * Update sql_io.py * fixed issue in from_jao * fixed duplicate definition of test_dir/test_path fixed sqlite table query * fixed issues with psycopg version 3 being installed but version 2 being used. * simplified pipeline to use env vars to pass args to test_sql_io * fixed upload_sql_table added changelog entries * fixed sql using param for table or column names * improved use of psql.Identifier * improved use of psql.Identifier * fixed import error when type checking fixed issue with to_sql_str * fixed missing comma in pyproject.toml * improved SQL Query construction * fixed issue with DEFAULT in query as Literal and not SQL Directive * fixed issue with None being passed as str * import fail will no longer result in successful pipeline as postgresql not available will fail now. * fixed type being handled as string instead of sql directive * fixed missing dsn and schema for availability test * fixed issue where .as_string was called on a string * fixed issue where to_sql_str was used for int values * Issues/fixing critical codacy (#3040) * fixed cp1 eur passed in kw instead of mw * fixed typo in bug-report template * removed unreachable return * fixed typo in create_buses_dc * Feature/integrate helm solver (#2067) * added a new powerflow method, HELM. Provided by HELMpy package. * added some tests for the new powerflow method. * added a new powerflow method, HELM. Provided by HELMpy package. * updated doc string. * added a new powerflow method, HELM. Provided by HELMpy package. * added a new powerflow method, HELM. Provided by HELMpy package. * changed the standard iterations for helm, since helmpy crashes after 40 iterations with an index error. * made some modifications to adapt the values to what helmpy awaits. * added MBASE, since pandapower sometimes doesn't set this value. * added the 9case testcase. * fixed the helm integration into pandapower, the shunts needed to be scaled differently, the slack angle was ignored and the result extraction wasn't correct. * updated the integration to use pv_bus_model=2 since it is the default. * typing fixes. * added some doc about helm. * added more typing exclusion for mypy. * added install git, since sphinx needs it to pull packages. * added helm to algorithm literal and moved the import to the test. * update of pipeline. * added missing empty line * updated docs and removed uv from pipeline. * added install git. * Update github_test_action.yml updated docs pipeline to only install docs requirements * added vscode workspace to gitignore. * made some minor fixes to spelling and copyright headers. * minor fixes for codacy. --------- Co-authored-by: Jan Wiemer <32835953+jwiemer112@users.noreply.github.com> Co-authored-by: Roman Bolgaryn <roman.bolgaryn@iee.fraunhofer.de> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * Fixed issues in diagnostic functions + more tests (#3052) * parametrized the diagnostic test. added more diag functions to the no issues test. * fixed diagnostic_functions and added tests. * fixed continuous bus indices being tested incorrectly. closes #3042 * Hardening from_json (#3050) * first version to fix #3049 * fix for broken de-/serialization of (Log)SplineCharateristic. * hardening from_json deserialiser. * changed parameter to skip_checks. * missed one refactor. * fix for LSC, overwrote the setted values... * needed to allow more modules. * added more fixes needed for older networks, and added _eq_ method, since otherwise comparisons between SC / LSC fail. * added an _eq_ and _hash_ function to SC and LSC * had to fix LSC again, since it created the log10 of the values, which were already log10(x) * had to add _eq_ and _hash_ to fuse and ocrelay otherwise they would not have worked as well. * Fix 3ph loadflow with `gen` element (#3010) * Fix gen 3ph result table Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Fix gen build Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove change to diagnostic Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Remove change to diagnostic Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> * Enhance ImportError logging in run_pandamodels.py Improve error handling for ImportError in _call_pandamodels function. * Simplify ImportError handling for juliacall --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Neutral earthing impedance (rn_ohm) and zigzag earthing transformers in the zero-sequence short circuit (#3016) * [ADDED] neutral earthing impedance (rn_ohm) and zigzag earthing transformers in zero-sequence short circuit - add rn_ohm (resistive neutral earthing) to create_transformer / create_transformer_from_parameters and the bulk variants; apply the neutral earthing impedance 3*(rn_ohm + j*xn_ohm) to the zero-sequence impedance of all earthed-star vector groups, after the IEC transformer correction factor. Previously xn_ohm was only considered for power-station-unit transformers, and only as a reactance, so a neutral earthing resistor (NER/NGR) could not be modelled for ordinary earthed transformers. - add zigzag earthing transformer vector groups ZNyn / ZNd / ZNy / ZN. Per the YNzn zero-sequence model the zigzag winding completely decouples the primary and secondary zero sequences and presents a shunt-to-ground: the HV-winding leakage portion (si0_hv_partial) in series with 3*Z_N at the star point. An earthed-wye secondary (ZNyn) gets its own decoupled zero-sequence path to ground (LV leakage portion + zero-sequence magnetising); a delta / unearthed secondary (ZNd / ZNy) has none. - add unit tests in test_1ph: neutral earthing adds exactly 3*Z_N to the zero sequence; zigzag earthing of a delta-fed system, with the NER limiting it and the primary/secondary decoupling. - update changelog. Enables IEC 60909 single-phase earth-fault studies on delta-fed systems earthed through a neutral earthing resistor and/or a zigzag earthing transformer. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fixed naming convention issues. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * add init_pq option for PandaModels opf warm starts (#2985) * add init_pq option for PandaModels opf warm starts * add changelog, fix float assertion * New parameter wasn't handed over properly. Also logic in add_pm_gen_start_values_from_results seemed buggy. Return values which were nowehere used and empty return statements. * Handed **kwargs to opf options / to _runpm --------- Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * Fix generalized OPF cost Hessian evaluation (#3055) * Fix generalized OPF cost Hessian evaluation * cleaning the comments * Move OPF cost function regression test into coverage suite * Add changelog entry for OPF cost function fix * Cover OPF generalized cost with empty Hessian * Resolve changelog conflict * Resolve changelog conflict * Resolve changelog conflict --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Add an OpenDSS → pandapower converter (from_opendss) (#3056) * Add OpenDSS -> pandapower converter (from_opendss) Balanced positive-sequence importer that reads an OpenDSS feeder through OpenDSSDirect.py and maps buses, lines (LineCode carried through as std_type), two-winding and center-tapped split-phase service transformers (imported at their solved tap), loads, shunt capacitors, switches and the source. The returned net carries an opendss_import report with element counts, per-bus phase counts, the OpenDSS-solved voltages and the approximations made. Positive-sequence is exact for symmetric (e.g. European 3-phase 4-wire) feeders and a documented approximation for unsymmetrical North-American topology, which runpp_3ph cannot represent (#873). Adds an "opendss" optional-dependency extra, unit tests (inline circuits), docs and a changelog entry. Revisits #1442. * Add the opendss extra to the "all" dependency group Per maintainer feedback on #3043: a new production dependency group should be included in "all". Drops the now-redundant explicit opendss entry from "dev" (it inherits from "all"). * Address Codacy and SonarCloud static-analysis findings - __init__.py: replace the wildcard re-export with an explicit `from ... import from_opendss` plus __all__ (pyflakes F401/F403), and add the package docstring (pydocstyle D104). - from_dss.py: convert the docstrings to the numpy section style expected by pydocstyle (D213/D203/D406/D407/D413/D417). - from_dss.py: avoid a floating-point equality check when detecting a missing voltage base (Sonar S1244), use dict() instead of a dict comprehension (S7500), and reword a comment that read like code (S125). No behaviour change; the 9 converter tests still pass. * Avoid pydocstyle D211/D212 vs D203/D213 conflict in the converter The repository's static-analysis config enables both members of the mutually-exclusive pydocstyle pairs (blank-line-before-class-docstring and multi-line-summary-placement), so a multi-line module docstring or a class docstring cannot satisfy it. Use a one-line module docstring with the rationale moved to comments, and drop the docstring on the private _ImportReport dataclass (a private class needs none). No behaviour change. * fixed comment issues, which failed sphinx build. --------- Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * More plotly results annotations (#2375) * add more hoverinfo to plot * overwrite pandapower version to make tests work * fix wrong filepaths in test_file_io * change back to original _version.py * fixed unit issue and added typing. * reverted changes to test_file_io.py --------- Co-authored-by: Heiner Früh <heiner.frueh@stuttgart-netze.de> Co-authored-by: Heiner <heiner.frueh@ieh.uni-stuttgart.de> Co-authored-by: Mike Vogt <mike.vogt@iee.fraunhofer.de> * fix(converter): Kron-reduce explicit-neutral OpenDSS LineCodes in from_opendss (#3058) * fix(converter): Kron-reduce explicit-neutral OpenDSS LineCodes from_opendss silently mis-computed positive-sequence resistance for 3-phase-plus-neutral matrix LineCodes (the standard 4-wire European LV format): Lines.R1()/X1()/C1() do not Kron-reduce the neutral out of a >3-conductor matrix before forming the sequence value, so the imported line carried neither the declared conductor's impedance nor a value derivable from it. Found while validating the converter against a real, independently sourced Portuguese LV network (Koirala et al., "Non-Synthetic European Low Voltage Test System", 2020) -- a genuine 4-wire matrix LineCode corpus outside the 3-conductor feeders the converter had been exercised against so far. Adds `_kron_positive_sequence`, used only for >3-conductor lines; the common <=3-conductor path is untouched. Two regression fixtures cover zero-mutual (the real-world pattern found) and asymmetric neutral coupling (proves an actual reduction happens, not a pass-through). * fix: R1/X1/C1 are stale for any matrix-defined line, not just >3-cond The Kron-reduction fix only guarded lines with more than 3 conductors, diagnosed from the first reproduction (an explicit-neutral European LineCode). Checking OpenDSS's own Pascal source shows the real trigger is broader: TLineObj/TLineCodeObj hard-code R1 := 0.0580, X1 := 0.1206 at construction, and switching to a matrix definition (rmatrix=/ xmatrix=) sets SymComponentsModel := FALSE but never clears or recomputes those fields. OpenDSS's own text property interface knows this and reports them as '----' once matrix mode is active, but the direct numeric getters this converter calls don't perform the same guard -- so any matrix-defined line, not just 4-conductor ones, silently gets the stale default. Confirmed empirically: a plain 3-conductor matrix LineCode with no neutral at all returned the same 0.058/0.1206 instead of its declared values. Widens the fix to always derive R1/X1/C1 from the declared matrix (Kron-eliminating conductors beyond the first 3 only when there are more than 3) instead of trusting OpenDSS's getters at all -- verified to exactly reproduce the declared value for symmetric-components- defined lines too, so this is safe universally. Generalizes the self/mutual averaging to the actual conductor count instead of hard-coding 3, since the previous formula would have silently mis-handled 1- and 2-conductor matrix lines (a common SMART-DS/ IEEE-test-feeder pattern for single-phase laterals) had it ever been reached. Adds two more regression tests for those cases. * [FEATURE] Simple Redispatch solver using pandamodels.jl (#3059) * added a redispatch solver via pandamodels.jl * fixed changelog. * updated pandamodels.jl version. * changed default to actual floats not ints. * fixed tests, since comparison failed due to nan values. * pp.create.create_transformers value initialization not working (#2894) * pp.create.create_transformers value initialization not working (#2886) * create_transformers now forwards tap and optional std-type params. * updated tests verifying these fields. * pp.create.create_transformers value initialization not working (#2886) * Remove unnecessary shift_degree extraction. * Remove redundant tap_changer_type value check. * Pass std_params directly to params dict instead of extracting individually. * test_create should use tolist() instead of "value". * npt.NDArray should use "integer" as a numpy. * pp.create.create_transformers value initialization not working (#2886) * Remove redundant tap_changer_type value check reverted. * UT added for std_type override when create_transformers is used. * pp.create.create_transformers value initialization not working (#2886) * fix: prevent duplicate kwargs when using standard types * refactor: undo unrelated test changes * fixed return type and fixed potential None error. * fixed test test_create_transformers_for_single_override_std_type. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Add compute_switch_flows() for zero-impedance bus-bus switches (#2956) After runpp(), bus-bus switches with z_ohm=0 have NaN in res_switch because Pandapower fuses their buses into a single internal node. This makes it impossible to determine the power flow through individual bus couplers, bus-section switches, or similar zero- impedance switching devices. This commit adds a new toolbox function compute_switch_flows(net) that populates res_switch (p_from_mw, q_from_mvar, p_to_mw, q_to_mvar, i_ka, loading_percent) for these switches using a post-hoc nodal balance approach: 1. Identify fused-bus groups from _pd2ppc_lookups["bus"] 2. Calculate net local injection at each bus from res_* tables (loads, generators, shunts, wards, and outgoing branch flows) 3. Build the zero-impedance switch tree within each fused group 4. DFS from leaves to root to accumulate subtree demand and derive individual switch flows The function raises ValueError if zero-impedance switches form a cycle within a fused group, since the flow split is physically indeterminate without impedance information. Switches with z_ohm > 0 are not modified, as they already have results from the Newton-Raphson solver. Also adds documentation (toolbox.rst, switch.rst, CHANGELOG.rst) and 17 tests covering single couplers, chains, branching trees, cycle detection, sign convention, cross-validation, and loading percent. Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * Do not open networks from files with older format version than the installed pandapower version (#2912) * do not open networks with newer format versions than the currently installed pandapower version * usage of possibility to open newer networks in all file io-functions # Conflicts: # pandapower/convert_format.py # pandapower/file_io.py * small bug fix * add test for new behavior (do not open newer networks) * added changelog entry * removed TODO, small correction in file_io.py * fixed an error in file_io.py, prob due to a merge error on my part. * fixed docstring. --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * bump version. * fixed upload pipeline. * bump version. Needed to remove direct dependency to helmpy, needs to be installed manually. * fixed a misleading logger.warning message. * bump version. * [Fix] unsafe json load (#3061) * block deserializing arbitrary objects from json * remove dead code (geo data fallback) * surface DeserializationNotAllowed exception * allow deserializing Enums defined in pandapower --------- Co-authored-by: SRDM <42580302+SimonRubenDrauz@users.noreply.github.com> * upgrade of all fixed versions (#3062) * upgrade of all versions, but opendss killed the pipeline see dss-extensions/OpenDSSDirect.py#148 * excluded an incompatible scipy version. * added support for python 3.10 of sphinx. * fixed version for networkx * some more version fixes. * fixed some typing issues. * fixed a bug in this timeseries notebook. * bump version. * updated the Logo paths and e2n Link in accordance with PR #15 on pandapower-homepage (#3066) * feat(opendss): import series Reactor elements as branches (#3067) Found while test-importing more real feeder libraries (EPRI's Ckt5/Ckt7) for validation beyond the original PR's four families: EPRI models the substation's Thevenin-equivalent source impedance as a bus-to-bus Reactor (SourceBus -> feeder head), not a Transformer, a topology from_opendss did not yet cover. _add_reactors treats a series (two-bus) Reactor as a fixed-impedance line (R/X from dss.Reactors.R()/X(), rated at CktElement.NormalAmps()). A shunt reactor (single bus, to ground) is a different element and is skipped with a warning rather than misread as a second branch. 4 new regression tests on an inline synthetic feeder. * fix(opendss): restore OpenDSSDirect.py as a dev dependency (#3075) * fix(opendss): restore OpenDSSDirect.py as a dev dependency It was dropped from the all/dev extras in #3062 because installing it alongside pytest~=9.1 crashes the pytest process on Windows (upstream bug: dss-extensions/OpenDSSDirect.py#148). That left the OpenDSS converter with 0% coverage in CI, since opendssdirect was never installed to begin with. The crash is Windows-specific: it reproduces with pytest==9.1.1 + OpenDSSDirect.py==0.9.4 on Windows but not on Linux, where this repo's PR-gating CI actually runs. Restore the dependency and skip test_from_opendss.py on win32 before it ever imports opendssdirect, instead of avoiding the dependency for every platform. * fix(opendss): disable faulthandler around the opendssdirect import Replaces the Windows platform-skip with an actual fix. Traced the crash on a real windows-latest GitHub Actions runner (Houmgaor#diag- opendss-windows-crash): dss_python_backend's Free Pascal runtime raises an internal first-chance SEH exception during its own module init that it normally handles and silences itself. pytest enables Python's faulthandler by default, which installs a Windows vectored exception handler that intercepts that first-chance exception before Pascal's own handler gets it, and reports it as a fatal crash. A plain `python -c "import opendssdirect"` never enables faulthandler, so it never sees this -- matching the upstream report exactly. Bracketing just the import with faulthandler.disable()/.enable() eliminates the false crash entirely (verified: clean pytest pass, no exception message) while leaving faulthandler protecting the rest of the run (verified: a real segfault after the import is still caught and reported). See dss-extensions/OpenDSSDirect.py#148 * docs(changelog): update entry to describe the faulthandler fix The CHANGELOG entry still described the old Windows platform-skip; update it to match the actual fix. * added fixes that exist on feature/v4.0.0 to simplify merging in the future (#3072) * fixed opf test failing (#3086) * fixed use of bus_geodata in create_dcline_collection (#3087) * Fixed tutorial plotting pyqt. (#3094) * Fixed tutorial plotting pyqt by updating access of line geodata and size of buses. * Updated changelog. * Fix errors in impedance element documentation (#3096) Two documentation errors in the impedance element, both verified against _calc_impedance_parameters_from_dataframe in build_branch.py: - doc/elements/impedance.rst: the asymmetric to-from impedance z_tf was written as (rft_pu + j*xtf_pu); it should use rtf_pu, matching the code (rji = rtf_pu; r_t = rji * sn_net / sn_impedance). The from-to impedance z_ft on the line above correctly uses rft_pu. - doc/elements/impedance_par.csv: the to-bus shunt parameters gt_pu, bt_pu, gt0_pu and bt0_pu were described as being at the from_bus; they are at the to_bus (gj = gt_pu, bj = bt_pu, which become the to-bus shunt g_t/b_t in the code), as the t suffix and the from-bus entries gf_pu/bf_pu indicate. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * removed scipy limits to allow for support in qgis (#3088) * updated contributing link in readme.rst (#3101) * fix elmzpu in station controller (#3100) Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> * mypy check previously excluded folders (#2787) * mypy check plotting * mypy fix matplotlib type hint * mypy run on entire codebase * mypy type annotation for cim_classes.py ns_dict * fix trailing whitespaces * fixed mypy issues in jao converter and minor other mypy issues * fixed mypy issues in cim converter * fixed issue in utility_functions added geopandas stubs to requirements for typing * fixed issue in ucte_parser * fixed mypy issues in auxiliary.py * fixed mypy issues in patch_makers.py * fixed mypy issues * fixed mypy issues in create functions * fixed mypy issues in plotting * fixed mypy issues in grid_modification.py and groups.py * fixed remaining mypy issues * fixed bug introduced while fixing mypy issues * fixed more mypy issues * added lxml-stubs to typing requirements --------- Co-authored-by: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> * fixed pandera version * fixed mypy issues * fixed typing issue * removed duplicate ukpn tutorials --------- Signed-off-by: furqan463 <ahmadfurqanc@gmail.com> Signed-off-by: Yoshiki <yosinn1@gmail.com> Co-authored-by: Jan Wiemer <32835953+jwiemer112@users.noreply.github.com> Co-authored-by: mrifraunhofer <94368111+mrifraunhofer@users.noreply.github.com> Co-authored-by: V3 <mike.vogt@iee.fraunhofer.de> Co-authored-by: Bryn Pickering <17178478+brynpickering@users.noreply.github.com> Co-authored-by: David Heck <david.heck@iee.fraunhofer.de> Co-authored-by: Arisaka97 <solitaire2312@gmail.com> Co-authored-by: pawellytaev <86314586+pawellytaev@users.noreply.github.com> Co-authored-by: mrichter <mario.richter@iee.fraunhofer.de> Co-authored-by: Moritz <29129441+MoritzHauff@users.noreply.github.com> Co-authored-by: Jeremias Lang <158100420+jerelang@users.noreply.github.com> Co-authored-by: jereOG <jerelang@users.noreply.github.com> Co-authored-by: Engr. Ahmad Furqan <ahmadfurqanc@gmail.com> Co-authored-by: nis-nurr <rijad.nuridini@nis.ch> Co-authored-by: marcopau <77792704+marcopau@users.noreply.github.com> Co-authored-by: envelio-js <johannes.sorg@envelio.de> Co-authored-by: Christian Bredtmann <christian.bredtmann@envelio.de> Co-authored-by: pawellytaev <pawel.lytaev@uni-kassel.de> Co-authored-by: envelio-cb <88880102+envelio-cb@users.noreply.github.com> Co-authored-by: Reinhold Bertram <reinhold.bertram@envelio.de> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: IEECNB215543\gbanerjee <gourab.banerjee@iee.fraunhofer.de> Co-authored-by: yosinn1-blip <yosinn1@gmail.com> Co-authored-by: Frank Marten <79512075+fmarten99@users.noreply.github.com> Co-authored-by: Šime Pavlić <pavlicsime1994@gmail.com> Co-authored-by: Šime Pavlić <simepavlic@Simes-MacBook-Pro.local> Co-authored-by: Roman Bolgaryn <roman.bolgaryn@iee.fraunhofer.de> Co-authored-by: stardeltapower <65967874+stardeltapower@users.noreply.github.com> Co-authored-by: Ehsanpoly <90526732+Ehsanpoly@users.noreply.github.com> Co-authored-by: Houmgaor <35099109+Houmgaor@users.noreply.github.com> Co-authored-by: Heiner <heiner.frueh@gmx.de> Co-authored-by: Heiner Früh <heiner.frueh@stuttgart-netze.de> Co-authored-by: Heiner <heiner.frueh@ieh.uni-stuttgart.de> Co-authored-by: Nemanja Stankić <36014264+belobradi@users.noreply.github.com> Co-authored-by: Pascal Ehlert <pascal@ehlert-it.de> Co-authored-by: Daniel Lohmeier <31214121+dlohmeier@users.noreply.github.com> Co-authored-by: Joschka Thurner <joschka.thurner@retoflow.de> Co-authored-by: SRDM <42580302+SimonRubenDrauz@users.noreply.github.com> Co-authored-by: schafbergert <146320543+schafbergert@users.noreply.github.com> Co-authored-by: Travis <travisyjcao@gmail.com> Co-authored-by: Clemens Korner <clemens.korner@gmail.com>
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
OpenDSSDirect.pyto theall/devextras inpyproject.toml, dropped in upgrade of all fixed versions #3062 because installing it alongsidepytest~=9.1crashes the pytest process on Windows. Without it, the OpenDSS converter (Add an OpenDSS → pandapower converter (from_opendss) #3056, OpenDSS converter: import series Reactor elements #3067, feat(converter): import OpenDSS RegControl as a tap controller #3074) has had 0% patch coverage in CI, sinceopendssdirectwas never installed to exercise it.pandapower/converter/opendss/from_dss.pyand the test module now bracket theopendssdirectimport withfaulthandler.disable()/.enable().Root cause
Traced on a real
windows-latestGitHub Actions runner (throwaway diagnostic branch, since removed):dss_python_backend(OpenDSSDirect.py's Free-Pascal-compiled native backend) raises an internal, first-chance Windows structured exception during its own module init — one its own Pascal runtime normally catches and handles silently as part of normal startup.pytestenables Python'sfaulthandlerby default, which installs a Windows vectored exception handler that intercepts that first-chance exception before the Pascal runtime's own handler gets it, and reports it as a fatal crash (Windows fatal exception: code 0xe0465043) — killing the whole process instead of a clean, catchableImportError. A plainpython -c "import opendssdirect"never enables faulthandler, so it never sees this, exactly matching the upstream report (dss-extensions/OpenDSSDirect.py#148) that a REPL import works fine but pytest crashes.Confirmed empirically, both isolated and end-to-end, on
windows-latest:pytestwith the defaultfaulthandlerplugin: reproduces the crash every time.pytest -p no:faulthandler: completely clean, no exception, test passes.faulthandler.disable()/.enable(), faulthandler plugin left on for everything else): clean pass, no exception.pandapower/test/converter/test_from_opendss.py— not a hand-rolled repro — run against a realpandapower[dev]install onwindows-latest: 19 passed, no skip, no crash.Test plan
pytest pandapower/test/converter/test_from_opendss.pypasses locally withopendssdirect.pyinstalled (Linux, Python 3.14.6) — 19/19windows-latestwithuv sync --extra dev(this PR's actualpyproject.toml+ code) — 19/19, no skip, no crashfaulthandlerstill catches a genuine segfault after being re-enabledcc @vogt31337