distopf 1.1.0.dev3__tar.gz → 1.1.0.dev5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.gitignore +4 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/PKG-INFO +98 -23
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/README.md +95 -22
- distopf-1.1.0.dev5/docs/solver-failure-guide.md +52 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/README.md +23 -10
- distopf-1.1.0.dev5/examples/cli/example_ieee123_30der.toml +14 -0
- distopf-1.1.0.dev5/examples/cli/example_ieee123_bat.toml +16 -0
- distopf-1.1.0.dev5/examples/cli/example_ieee13.toml +31 -0
- distopf-1.1.0.dev5/examples/cli/example_scenario.toml +31 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/pyproject.toml +5 -1
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/__init__.py +12 -1
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/api.py +8 -2
- distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/bus_data.csv +5295 -0
- distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/gen_data copy.csv +188 -0
- distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/reg_data.csv +7 -0
- distopf-1.1.0.dev5/src/distopf/cli.py +919 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/fbs.py +425 -37
- distopf-1.1.0.dev5/src/distopf/pyomo_models/common_constraints.py +830 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/constraints_nlp.py +27 -2
- distopf-1.1.0.dev5/src/distopf/pyomo_models/lindist_constraints.py +263 -0
- distopf-1.1.0.dev5/src/distopf/pyomo_models/nl_bfm_constraints.py +418 -0
- distopf-1.1.0.dev5/src/distopf/pyomo_models/primary_lindist_constraints.py +182 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/results.py +1 -3
- distopf-1.1.0.dev5/src/distopf/utils/__init__.py +5 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/results_comparison.py +77 -0
- distopf-1.1.0.dev5/src/distopf/utils/topology.py +90 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/pyomo_wrapper.py +23 -12
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_case.py +3 -0
- distopf-1.1.0.dev5/tests/test_cli.py +744 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_distributed_api.py +8 -2
- distopf-1.1.0.dev5/tests/test_exact_replay_and_comparison.py +309 -0
- distopf-1.1.0.dev5/tests/test_fbs_replay.py +63 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_nlp_backend.py +48 -4
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_results.py +1 -3
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_utilities.py +33 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/uv.lock +54 -1
- distopf-1.1.0.dev3/src/distopf/cases/csv/ieee9500_wye/bus_data.csv +0 -5295
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.github/copilot-instructions.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.github/skills/run-opf/SKILL.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.github/workflows/lint.yml +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.github/workflows/pypi-publish.yml +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/2026-04-21-distopf_2-triplex-agent.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/DISCLAIMER.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/LICENSE.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/column_migration.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/docs/STYLE_GUIDE.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/docs/architecture.puml +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/TEMPORAL_README.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/debug_enapp_123.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/profile_matrix.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123_isolated.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123_spatiotemporal.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_refactor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_tenapp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_comparison.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_quick.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_tenapp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/temp_test.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/basics/basic_optimal_power_flow.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow_examples.html +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow_examples.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/control_devices/fbs13.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/control_devices/reg_cap_example.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/control_devices/test_regulator_mi.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/cim_example.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/compare_cim_case.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/dss_converter_test.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/dss_examples.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/dss_test_loss.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/dss_test_results.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/adding_generators.ipynb +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/adding_generators.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/basic_power_flow_examples.ipynb +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/build_your_own_opf.ipynb +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/distopf_pesgm2026_tutorial.ipynb +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/optimization/extract_duals.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/optimization/penalties.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/optimization/penalty_example.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/optimization/thermal_limits.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/build_your_own_opf.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/build_your_own_opf_static.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/nlp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_dss_example.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_mi.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_multiperiod.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_nlp_123_comparison.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_nlp_13_comparison.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_regulator_control.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_tests.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_time_comparison.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/01_simple_power_flow.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/02_loss_minimization.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/03_voltage_optimization.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/04_comparing_wrappers.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/05_control_strategies.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/06_visualization_gallery.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/07_quick_start.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/08_reactive_power_importance.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/09_optimization_tradeoffs.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/10_working_with_results.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/11_fbs_power_flow.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/cim/IEEE123_PV.xml +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/cim/IEEE13.xml +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/battery_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/default_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/pv_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/battery_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/default_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/pv_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/battery_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/default_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/pv_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/bat_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/default_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/pv_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/schedules.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/battery_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/default_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/pv_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/bat_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/battery_data_v1.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/schedules.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/battery_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/default_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/pv_loadshape.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/bat_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/schedules.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/reg_data.csv +0 -0
- {distopf-1.1.0.dev3/src/distopf/cases/csv/ieee9500_wye → distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible}/branch_data.csv +0 -0
- {distopf-1.1.0.dev3/src/distopf/cases/csv/ieee9500_wye → distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible}/cap_data.csv +0 -0
- {distopf-1.1.0.dev3/src/distopf/cases/csv/ieee9500_wye → distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible}/gen_data.csv +0 -0
- /distopf-1.1.0.dev3/src/distopf/cases/dss/ieee123_dss/ieee123_Loadshape_default.dbl → /distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/readme.md +0 -0
- /distopf-1.1.0.dev3/src/distopf/cases/csv/ieee9500_wye/reg_data.csv → /distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/reg_data_orig.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2Bus/2Bus.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2BusD/2Bus.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2Bus_1phase/2Bus1ph.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/IEEE34_BusXY.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/IEEELineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/Run_IEEE34Mod1.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/Run_IEEE34Mod2.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_Curr_Elem.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_Power_elem_kVA.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_RegTaps.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_VLN_Node.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34Mod1.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34Mod2.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/nmsu_linecode2_ABC.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/3Bus/3Bus.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4Bus-DY-Bal.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_Curr_Elem.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_Power_elem_kVA.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_VLL_Node.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_VLN_Node.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4Bus-GrdYD-Bal.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4busYDBal_Losses.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4busYDBal_VLN_Node.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-OYOD-Bal/4Bus-OYOD-Bal.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-OYOD-UnBal/4bus-OYOD-UnBal.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YD-Bal/4Bus-YD-Bal.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YY-Bal/4Bus-YY-Bal.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YYD/Three Winding Transformer Test System-EPRI-2017-Rev4.docx +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YYD/YYD-Master.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Expanded4WireDelta.pdf +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wireIndMotor.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wire_Lagging.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wire_Leading.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/BalancedLoads.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/BusCoords.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/CableData.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/CapControls.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Capacitors.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/DSSViewIntercom.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/EnergyStorage.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Generators.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LatLongCoords.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LineGeometry.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LinesSwitchesGeometry.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LinesSwitchesLineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LoadXfmrCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Loads_primary.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Master-unbal-initial-config.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Master.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PVSystems_primary.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PV_10pen_DSSPV.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PV_NN_100_DSSPV.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/README.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Regulators.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Transformers.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/TriplexLineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/TriplexLines.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/UnbalancedLoads.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/WireData.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/bus_info_temp.json +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/desktop.ini +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Daisy.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Daisy.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Isolated.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Loops.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Power_elem_kVA.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_VLN_Node.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/ieee9500bal.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/ieee9500unbal.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/xfmrs_info_triplex_nodes.json +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/BusCoords.dat +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/CircuitPlottingScripts.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/DSSGraph_Output.CSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/DSSViewIntercom.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Loads.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Master.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Regulators.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEELineCodes.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/P174_Run_SolarRamp.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/P174_Run_VoltageProfile.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/PV5sdata1.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/PaperLoadShape.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/RevRegTest.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/Run_IEEE123Bus.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/Run_YearlySim.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SetDailyLoadShape.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp-Mack.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/StorageRamp.CSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/WindRamp.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/WindRampRevRegTest.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Curr_Elem.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Daisy.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Daisy.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_BUSCOORDS.CSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_ElemPowers.CSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_LOADS.CSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_P_BYPHASE.CSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Elements.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_GenMeterOut.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Loadshape_default.DSV +0 -0
- /distopf-1.1.0.dev3/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_PQ.dbl → /distopf-1.1.0.dev5/src/distopf/cases/dss/ieee123_dss/ieee123_Loadshape_default.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Loops.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Losses.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Losses.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power_elem_kVA.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power_seq_kVA.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9998.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9998.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9999.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9999.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_RegTaps.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_VLN.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_VLN_Node.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Voltage.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Voltage.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_PQ.DSV +0 -0
- /distopf-1.1.0.dev3/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_V.dbl → /distopf-1.1.0.dev5/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_PQ.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_V.DSV +0 -0
- /distopf-1.1.0.dev3/src/distopf/distributed/spatial/__init__.py → /distopf-1.1.0.dev5/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_V.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/DSSViewIntercom.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Node_BusXY.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_EXP_ElemPowers.CSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power_elem_kVA.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEELineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/BalancedLoads.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/BusCoords.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/CableData.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/CapControls.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Capacitors.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/DSSViewIntercom.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/EnergyStorage.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Generators.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LatLongCoords.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineConstantsCode.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineGeometry.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LinesSwitchesGeometry.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LinesSwitchesLineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LoadXfmrCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Master-bal-initial-config.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Master-unbal-initial-config.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/PV_10pen_DSSPV.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/PV_NN_100_DSSPV.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/README.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Regulators.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Elements.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_LineConstants.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Mon_mon1_1.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power_elem_kVA.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Transformers.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/TriplexLineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/TriplexLines.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/UnbalancedLoads.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/WireData.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/BalancedLoads.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/BusCoords.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/CableData.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/CapControls.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Capacitors.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/DSSViewIntercom.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/EnergyStorage.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Generators.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LatLongCoords.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineConstantsCode.DSS +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineGeometry.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LinesSwitchesGeometry.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LinesSwitchesLineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LoadXfmrCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Master-bal-initial-config.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Master-unbal-initial-config.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/PV_10pen_DSSPV.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/PV_NN_100_DSSPV.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/README.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Regulators.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Elements.Txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_LineConstants.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Mon_mon1_1.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power.DSV +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power.dbl +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power_elem_kVA.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Transformers.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/TriplexLineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/TriplexLines.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/UnbalancedLoads.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/WireData.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/minimal_triplex/minimal_triplex.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/Line.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/Load.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/MyLineCodes.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/ieee123master_base.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Buscoords.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Intermediates.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/LineCodes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Lines.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/LoadShapes.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Loads.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Master.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/PVSystems.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/SMART-DS_version.txt +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Transformers.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/Summary_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/blown_fuses.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/de-energized_nodes.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_line_overloads.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_over_voltages.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_transformer_overloads.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_under_voltages.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_voltages.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/pu_voltages_histogram.png +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/pu_voltages_percentiles.png +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_15_180.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_15_225.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_25_180.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_25_225.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_25_90.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_35_135.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_16017_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_17146_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_17950_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_1835_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_19648_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_19955_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_20964_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_22499_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_22635_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_2581_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29069_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29376_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29596_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_31655_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_31818_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_32244_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_33164_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_33792_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_8445_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_8470_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_16017_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_17146_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_17950_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_1835_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_19648_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_19955_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_20964_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_22499_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_22635_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_2581_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29069_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29376_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29596_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_31655_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_31818_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_32244_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_33164_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_33792_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_8445_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_8470_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_10747_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_1077_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_13334_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_14588_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_14705_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_3216_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_6157_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_7380_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_10747_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_1077_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_13334_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_14588_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_14705_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_3216_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_6157_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_7380_pu.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/reactive_ids.json +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/real_ids.json +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/voltage_ids.json +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line/main.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_line/main.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_load/main.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_load_unbal_line/main.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_reg/main.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/triplex_3ph/triplex_3ph.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/triplex_pv/triplex_pv.dss +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/cim_to_csv_converter.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/base_processor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/bus_processor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/capacitor_processor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/generator_processor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/line_processor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/regulator_processor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/switch_processor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/transformer_processor.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/utils/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/utils/phase_utils.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/validators/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/validators/topology_validator.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/ADMM_MATH_REPORT.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/ENAPP_MATH_REPORT.md +0 -0
- {distopf-1.1.0.dev3/src/distopf/matrix_models/matrix_bess/spatial_decomposition → distopf-1.1.0.dev5/src/distopf/distributed/spatial}/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/admm_agents.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/boundary.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/decompose.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/enapp copy.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/enapp_agents.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/execution.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/messaging.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/penalties.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/schedule.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/objectives.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_1o.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_admm.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_aprx.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/utils.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/dss_importer/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/dss_importer/dss_to_csv_converter.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/base.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/binary_variable_notes.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_capacitor_mi.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_capacitor_regulator_mi.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_loads.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_p_gen.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_q_gen.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_regulator_mi.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/base_mp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_capacitor_mi_mp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_loads_mp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_mp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/objectives.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/pyomo_solver.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/readme.md +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/solvers.py +0 -0
- {distopf-1.1.0.dev3/src/distopf/utils → distopf-1.1.0.dev5/src/distopf/matrix_models/matrix_bess/spatial_decomposition}/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/spatial_decomposition/decompose.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/spatial_decomposition/enapp.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/objectives.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/solvers.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/plot.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/constraints.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/factories.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/lindist.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/nl_branchflow.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/nl_branchflow_prebuilt.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/objectives.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/protocol.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/results.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/slack_constraints.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/solvers.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/call_recorder.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/input_handlers.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/kcl_check.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/ngon.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/query_interface.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/validators.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/base.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/matrix_bess_wrapper.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/matrix_wrapper.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/conftest.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/IEEE13.xml +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/branch_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/bus_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/cap_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/gen_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/reg_data.csv +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/integration/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/integration/test_full_conversion.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/integration/test_impedance_comparison.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_cim_to_csv_helpser.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_cim_to_csv_linking.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_converter_run.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_phase_utils.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_processors.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_reg_transformer_small.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_regulator_impedances.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_topology_validator.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_transformer_tank_impedances.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/integration/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/integration/test_dss_converter_integration.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/integration/test_triplex_lindist.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/__init__.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_dss_converter.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_transformer.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_triplex_converter.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_triplex_pv.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/integration_references.json +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/pyomo_models/test_dual_extraction.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/pyomo_models/test_pyomo_lindist.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_admm_agents.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_backends.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_enapp_integration.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_exports.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_integration_snapshots.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_matrix_models.py +0 -0
- {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_smoke.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: distopf
|
|
3
|
-
Version: 1.1.0.
|
|
3
|
+
Version: 1.1.0.dev5
|
|
4
4
|
Summary: A package for solving unbalanced three-phase distribution system optimal power flow problems.
|
|
5
5
|
Author: Abodh Poudyal
|
|
6
6
|
Author-email: Nathan Gray <nathan.gray@pnnl.gov>, Rabayet Sadnan <rabayet.sadnan@pnnl.gov>
|
|
@@ -16,7 +16,9 @@ Requires-Dist: pandas>=2.3.3
|
|
|
16
16
|
Requires-Dist: plotly>=6.3.0
|
|
17
17
|
Requires-Dist: pyomo>=6.9.4
|
|
18
18
|
Requires-Dist: pyscipopt>=6.0.0
|
|
19
|
+
Requires-Dist: rich-click>=1.9.9
|
|
19
20
|
Requires-Dist: scipy>=1.15.3
|
|
21
|
+
Requires-Dist: tomli>=2.0.1; python_version < '3.11'
|
|
20
22
|
Provides-Extra: cim
|
|
21
23
|
Requires-Dist: cim-graph==0.4.1a2; extra == 'cim'
|
|
22
24
|
Requires-Dist: gridappsd-python==2025.3.2a13; extra == 'cim'
|
|
@@ -100,13 +102,14 @@ result.plot_network().show(renderer="browser")
|
|
|
100
102
|
```python
|
|
101
103
|
import distopf as opf
|
|
102
104
|
case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der")
|
|
103
|
-
|
|
105
|
+
case.modify(v_max=1.05, v_min=0.95, gen_mult=10)
|
|
106
|
+
result = case.run_opf(objective="curtail_min", control_variable="P")
|
|
104
107
|
result.plot_network().show(renderer="browser")
|
|
105
108
|
```
|
|
106
109
|
|
|
107
110
|
## Spatial ENAPP and ADMM solvers
|
|
108
111
|
|
|
109
|
-
The spatial solvers are available through the public [`Case.run_enapp()`](src/distopf/api.py:
|
|
112
|
+
The spatial solvers are available through the public [`Case.run_enapp()`](src/distopf/api.py:590) and [`Case.run_admm()`](src/distopf/api.py:630) methods. Supply an area topology as a JSON-safe dictionary keyed by area name. Each area must define `up_areas`, `down_areas`, and exactly one `up_buses` entry; bus names must match the selected case.
|
|
110
113
|
|
|
111
114
|
```python
|
|
112
115
|
area_info = {
|
|
@@ -127,19 +130,57 @@ case = opf.create_case(opf.CASES_DIR / "csv" / "ieee13")
|
|
|
127
130
|
result = case.run_enapp(
|
|
128
131
|
area_info=area_info,
|
|
129
132
|
objective="substation_power",
|
|
130
|
-
parallel=
|
|
133
|
+
parallel=True,
|
|
131
134
|
max_iterations=25,
|
|
132
135
|
)
|
|
133
136
|
```
|
|
134
137
|
|
|
135
|
-
|
|
138
|
+
Set `parallel=True` to solve the independent area subproblems with multiprocessing. The coordination iterations themselves remain sequential: each iteration waits for all area solves before exchanging boundary messages. Use `parallel=False` for serial execution or when debugging.
|
|
139
|
+
|
|
140
|
+
Runs made through these methods are recorded by [`record_call()`](src/distopf/utils/call_recorder.py:90). Calling [`PowerFlowResult.save()`](src/distopf/results.py:209) writes `run_config.json`, including the distributed solver, topology, and `parallel` setting, so named-objective runs can be reproduced with [`replay()`](src/distopf/api.py:1165):
|
|
136
141
|
|
|
137
142
|
```python
|
|
138
143
|
result.save("results/ieee13-enapp")
|
|
139
144
|
replayed = opf.replay("results/ieee13-enapp/run_config.json")
|
|
140
145
|
```
|
|
141
146
|
|
|
142
|
-
|
|
147
|
+
Replay preserves the recorded `parallel` setting for ENAPP and ADMM. Parallel replay requires a normal multiprocessing-capable execution environment; arbitrary custom objective callables and solve/iteration callbacks remain non-replayable because they cannot be reconstructed from JSON.
|
|
148
|
+
|
|
149
|
+
### Command-line interface
|
|
150
|
+
|
|
151
|
+
The installed `distopf` command provides human-readable and JSON output for saved runs, user-authored TOML scenarios, and result comparisons. Run `distopf --help` or any subcommand with `--help` for the complete option list.
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
distopf inspect results/ieee13-enapp/run_config.json
|
|
155
|
+
distopf validate results/ieee13-enapp/run_config.json
|
|
156
|
+
distopf run results/ieee13-enapp/run_config.json --output-dir results/replayed
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Public commands are:
|
|
160
|
+
|
|
161
|
+
- `run CONFIG [--output-dir DIR] [--verbose] [--json]` runs a JSON `run_config.json` replay artifact or a TOML scenario. Scenario analysis types are `pf`/`power_flow`, `fbs`, `opf`, `enapp`, and `admm`.
|
|
162
|
+
- `inspect CONFIG [--json]` displays scenario or replay metadata without solving.
|
|
163
|
+
- `validate CONFIG [--json]` checks configuration structure, referenced paths, replayability, and case data.
|
|
164
|
+
- `replay-exact-power-flow INPUT_PATH [OUTPUT_PATH] [--overwrite] [--json]` replays saved OPF setpoints through the exact FBS power flow. The output defaults to `INPUT_PATH/exact`; existing output is preserved unless `--overwrite` is supplied.
|
|
165
|
+
- `compare LEFT_FOLDER RIGHT_FOLDER [--output-dir DIR] [--nominal-voltage VALUE] [--json]` compares common result CSV tables and writes `comparison.json` plus difference CSVs. `--nominal-voltage` defaults to `1.0` and is used for voltage metrics.
|
|
166
|
+
- `compare-exact FOLDER [RIGHT_FOLDER] [--batch] [--depth N] [--workers N] [--output-dir DIR] [--nominal-voltage VALUE] [--json]` compares a result folder with its `exact` FBS replay, creating that replay when needed. With `--batch`, it processes directories exactly `--depth` levels below `FOLDER`; `RIGHT_FOLDER` cannot be combined with `--batch`.
|
|
167
|
+
|
|
168
|
+
Add `--json` to any command for machine-readable output. Successful commands return `0`; validation failures return `1`; run and comparison runtime failures return `2`.
|
|
169
|
+
|
|
170
|
+
Use `distopf run --help` for the full scenario format. A minimal `scenario.toml` is:
|
|
171
|
+
|
|
172
|
+
```toml
|
|
173
|
+
[case]
|
|
174
|
+
path = "../cases/csv/ieee13"
|
|
175
|
+
|
|
176
|
+
[analysis]
|
|
177
|
+
type = "opf"
|
|
178
|
+
objective = "loss"
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
TOML scenarios require only `case.path` and `analysis.type`; `pf`/`power_flow`, `fbs`, `opf`, `enapp`, and `admm` are supported. Case options go directly under `[case]`, modifications under `[case.modifications]`, and ENAPP/ADMM topology under `[analysis.area_info.<area>]`. The `version` field is optional and defaults to `1`.
|
|
182
|
+
|
|
183
|
+
JSON `run_config.json` files generated by `PowerFlowResult.save()` remain supported as exact replay artifacts. Use `--json` on any subcommand for automation. `inspect` reads metadata without solving. `validate` checks the schema, referenced case directory, replayability, and case data. `run` executes either format and can persist result CSV files and metadata with `--output-dir`. Successful commands return exit code `0`; validation failures return `1`; run/runtime failures return `2`.
|
|
143
184
|
|
|
144
185
|
|
|
145
186
|
|
|
@@ -168,6 +209,27 @@ Use `formulation="branchflow"`.
|
|
|
168
209
|
- **Speed**: Slower than linear, but more accurate
|
|
169
210
|
- **Accuracy**: Nonlinear power flow representation
|
|
170
211
|
|
|
212
|
+
### Pyomo Wrapper — SOCP Relaxation
|
|
213
|
+
The SOCP formulation is a relaxation of the nonlinear BranchFlow model. It uses the same
|
|
214
|
+
Pyomo/IPOPT solve path, but replaces the two branch-current equality constraints with
|
|
215
|
+
inequality constraints. Use `formulation="socp"`.
|
|
216
|
+
|
|
217
|
+
- **Model**: BranchFlow model with relaxed current constraints
|
|
218
|
+
- **Solver**: IPOPT for continuous problems; MINLP solvers for discrete controls
|
|
219
|
+
- **Use case**: Faster or more robust optimization when exact current equalities are not required
|
|
220
|
+
- **Wrapper**: Pyomo only; it is not available through the matrix wrappers
|
|
221
|
+
|
|
222
|
+
```python
|
|
223
|
+
import distopf as opf
|
|
224
|
+
|
|
225
|
+
case = opf.create_case(opf.CASES_DIR / "csv" / "ieee13")
|
|
226
|
+
result = case.run_opf(
|
|
227
|
+
formulation="socp",
|
|
228
|
+
objective="loss",
|
|
229
|
+
solver="ipopt",
|
|
230
|
+
)
|
|
231
|
+
```
|
|
232
|
+
|
|
171
233
|
#### Continuous Optimization (IPOPT)
|
|
172
234
|
For continuous optimization without discrete controls:
|
|
173
235
|
|
|
@@ -208,12 +270,14 @@ result = case.run_opf(wrapper="matrix_bess", objective="loss")
|
|
|
208
270
|
```
|
|
209
271
|
|
|
210
272
|
#### Wrapper Comparison
|
|
211
|
-
| Feature | Matrix
|
|
212
|
-
|
|
213
|
-
|
|
|
214
|
-
|
|
|
215
|
-
|
|
|
216
|
-
|
|
|
273
|
+
| Feature | Matrix | Matrix BESS | Pyomo |
|
|
274
|
+
|---------|---|---|---|
|
|
275
|
+
| Primary role | Single-period convex LinDistFlow OPF | Multi-period LinDistFlow OPF with batteries and schedules | LinDistFlow, BranchFlow, or SOCP-relaxed BranchFlow |
|
|
276
|
+
| Solver API | SciPy or CVXPY | CVXPY | Pyomo |
|
|
277
|
+
| Default solver path | CVXPY with CLARABEL | CVXPY with CLARABEL | IPOPT |
|
|
278
|
+
| Other supported solver choices | Depends on installed CVXPY/SciPy backends | Depends on installed CVXPY backend | MINLP solvers such as Bonmin/Couenne for supported discrete models |
|
|
279
|
+
|
|
280
|
+
The default `Case.run_opf()` wrapper is Pyomo unless a `formulation` selects another wrapper. Matrix is intended for fast single-period convex models; Matrix BESS is the time-series/battery backend. Pyomo is the backend for nonlinear BranchFlow, SOCP, Pyomo dual extraction, and its supported discrete formulations. Solver availability depends on the installed backend and model.
|
|
217
281
|
|
|
218
282
|
#### Solver Requirements
|
|
219
283
|
- **IPOPT**: Install via `conda install -c conda-forge ipopt`. On Ubuntu, `apt-get install coinor-libipopt-dev` only installs headers and shared libraries; it does not provide the `ipopt` executable that Pyomo's `SolverFactory("ipopt")` expects.
|
|
@@ -224,11 +288,11 @@ DistOPF supports multiple optimization objectives for distribution system OPF:
|
|
|
224
288
|
|
|
225
289
|
| Objective | String | Supported Wrappers | Description |
|
|
226
290
|
|-----------|--------|-------------------|-------------|
|
|
227
|
-
| **Loss Minimization** | `"loss"`, `"loss_min"` |
|
|
228
|
-
| **Substation Power** | `"substation"`, `"substation_power"` | Pyomo
|
|
291
|
+
| **Loss Minimization** | `"loss"`, `"loss_min"` | Matrix, Matrix BESS, Pyomo | Minimize distribution losses (most common) |
|
|
292
|
+
| **Substation Power** | `"substation"`, `"substation_power"` | Pyomo | Minimize power imported from substation |
|
|
229
293
|
| **Voltage Deviation** | `"voltage_deviation"` | Pyomo | Minimize deviations from nominal voltage (1.0 p.u.) |
|
|
230
|
-
| **Generation Curtailment** | `"curtail"`, `"curtail_min"`, `"curtailment"` | Pyomo | Minimize DER curtailment |
|
|
231
|
-
| **Cost Minimization** | `"cost"`, `"cost_min"` | Pyomo
|
|
294
|
+
| **Generation Curtailment** | `"curtail"`, `"curtail_min"`, `"curtailment"` | Matrix, Matrix BESS, Pyomo | Minimize DER curtailment |
|
|
295
|
+
| **Cost Minimization** | `"cost"`, `"cost_min"` | Pyomo | Minimize energy procurement cost from the swing bus; requires price data and a time horizon |
|
|
232
296
|
|
|
233
297
|
#### Cost Minimization with Price Data
|
|
234
298
|
|
|
@@ -238,10 +302,10 @@ To use cost minimization, add an hourly `price` column to the case schedules (in
|
|
|
238
302
|
import pandas as pd
|
|
239
303
|
import distopf as opf
|
|
240
304
|
|
|
241
|
-
case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der")
|
|
305
|
+
case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der", n_steps=24)
|
|
242
306
|
|
|
243
307
|
# Add hourly electricity prices
|
|
244
|
-
case.schedules['price'] = [38, 35, 34, 32, 30, 32, 38, 45, 52, 58, 62, 65,
|
|
308
|
+
case.schedules['price'] = [38, 35, 34, 32, 30, 32, 38, 45, 52, 58, 62, 65,
|
|
245
309
|
68, 65, 62, 58, 55, 60, 75, 82, 78, 65, 50, 42]
|
|
246
310
|
|
|
247
311
|
# Run OPF minimizing energy cost
|
|
@@ -251,10 +315,15 @@ print(f"Total energy cost: ${result.objective_value:.2f}")
|
|
|
251
315
|
|
|
252
316
|
### Result Fields
|
|
253
317
|
|
|
254
|
-
`PowerFlowResult` uses descriptive field names. Short aliases are also accepted for backward compatibility.
|
|
318
|
+
`PowerFlowResult` uses descriptive field names. Short aliases are also accepted for backward compatibility. Fields are optional: availability depends on the analysis, backend, case devices, and requested options.
|
|
319
|
+
|
|
320
|
+
Core fields include `voltages`/`voltage_magnitudes`, `voltage_angles`, active and reactive power flows, active and reactive generation, and active and reactive loads. FBS results provide `voltage_angles`, `currents`, and `current_angles` (angles are in degrees); these fields can also be present when another backend has computed them.
|
|
321
|
+
|
|
322
|
+
Battery and device fields include `battery_active_power`, `battery_reactive_power`, `p_charge`, `p_discharge`, and `soc`; regulator/capacitor-related fields include `tap_ratios`, `reg_taps`, `z_caps`, and `u_caps`, where supported by the selected model. `capacitor_reactive_power` is also available for capacitor outputs. Mixed-integer binary details may remain available through `raw_result` rather than the unified result fields.
|
|
255
323
|
|
|
256
324
|
| Field Name | Alias |
|
|
257
325
|
|---|---|
|
|
326
|
+
| `voltages` | — |
|
|
258
327
|
| `active_power_flows` | `p_flows` |
|
|
259
328
|
| `reactive_power_flows` | `q_flows` |
|
|
260
329
|
| `active_power_generation` | `p_gens` |
|
|
@@ -263,19 +332,25 @@ print(f"Total energy cost: ${result.objective_value:.2f}")
|
|
|
263
332
|
| `reactive_power_loads` | `q_loads` |
|
|
264
333
|
| `capacitor_reactive_power` | `q_caps` |
|
|
265
334
|
| `battery_active_power` | `p_bats` |
|
|
266
|
-
| `
|
|
335
|
+
| `battery_reactive_power` | `q_bats` |
|
|
336
|
+
|
|
337
|
+
#### Plotting and Dual Variables
|
|
267
338
|
|
|
268
|
-
|
|
269
|
-
|
|
339
|
+
The public plotting methods return Plotly figures: `plot_voltages(t=None)`, `plot_power_flows(t=None)`, `plot_gens(t=None)`, `plot_batteries()`, `plot_schedules()`, `plot_network(v_min=0.95, v_max=1.05, show_phases="abc", show_reactive_power=False, t=None)`, `plot_voltage_vs_distance(title=..., color_by="algorithm", include_secondary_phases=False)`, and `plot_line_flow_vs_distance(power_type="active", title=..., color_by="algorithm", include_secondary_phases=False)`. Methods that require unavailable result data or a case reference raise `RuntimeError`.
|
|
340
|
+
|
|
341
|
+
When running with `duals=True` using the Pyomo wrapper, dual variables are accessible on the result object. The unified names are:
|
|
270
342
|
|
|
271
343
|
```python
|
|
272
344
|
result = case.run_opf(wrapper="pyomo", objective="loss", duals=True)
|
|
273
345
|
result.dual_power_balance_p
|
|
274
346
|
result.dual_power_balance_q
|
|
275
347
|
result.dual_voltage_drop
|
|
276
|
-
result.
|
|
348
|
+
result.dual_voltage_limits_lower
|
|
349
|
+
result.dual_voltage_limits_upper
|
|
277
350
|
```
|
|
278
351
|
|
|
352
|
+
Dual extraction is Pyomo-only; matrix and FBS results do not populate these fields.
|
|
353
|
+
|
|
279
354
|
## Using a custom model.
|
|
280
355
|
Create CSVs formatted as shown below and store them in a single folder. The csv names must match exactly as shown.
|
|
281
356
|
Column order is not important.
|
|
@@ -76,13 +76,14 @@ result.plot_network().show(renderer="browser")
|
|
|
76
76
|
```python
|
|
77
77
|
import distopf as opf
|
|
78
78
|
case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der")
|
|
79
|
-
|
|
79
|
+
case.modify(v_max=1.05, v_min=0.95, gen_mult=10)
|
|
80
|
+
result = case.run_opf(objective="curtail_min", control_variable="P")
|
|
80
81
|
result.plot_network().show(renderer="browser")
|
|
81
82
|
```
|
|
82
83
|
|
|
83
84
|
## Spatial ENAPP and ADMM solvers
|
|
84
85
|
|
|
85
|
-
The spatial solvers are available through the public [`Case.run_enapp()`](src/distopf/api.py:
|
|
86
|
+
The spatial solvers are available through the public [`Case.run_enapp()`](src/distopf/api.py:590) and [`Case.run_admm()`](src/distopf/api.py:630) methods. Supply an area topology as a JSON-safe dictionary keyed by area name. Each area must define `up_areas`, `down_areas`, and exactly one `up_buses` entry; bus names must match the selected case.
|
|
86
87
|
|
|
87
88
|
```python
|
|
88
89
|
area_info = {
|
|
@@ -103,19 +104,57 @@ case = opf.create_case(opf.CASES_DIR / "csv" / "ieee13")
|
|
|
103
104
|
result = case.run_enapp(
|
|
104
105
|
area_info=area_info,
|
|
105
106
|
objective="substation_power",
|
|
106
|
-
parallel=
|
|
107
|
+
parallel=True,
|
|
107
108
|
max_iterations=25,
|
|
108
109
|
)
|
|
109
110
|
```
|
|
110
111
|
|
|
111
|
-
|
|
112
|
+
Set `parallel=True` to solve the independent area subproblems with multiprocessing. The coordination iterations themselves remain sequential: each iteration waits for all area solves before exchanging boundary messages. Use `parallel=False` for serial execution or when debugging.
|
|
113
|
+
|
|
114
|
+
Runs made through these methods are recorded by [`record_call()`](src/distopf/utils/call_recorder.py:90). Calling [`PowerFlowResult.save()`](src/distopf/results.py:209) writes `run_config.json`, including the distributed solver, topology, and `parallel` setting, so named-objective runs can be reproduced with [`replay()`](src/distopf/api.py:1165):
|
|
112
115
|
|
|
113
116
|
```python
|
|
114
117
|
result.save("results/ieee13-enapp")
|
|
115
118
|
replayed = opf.replay("results/ieee13-enapp/run_config.json")
|
|
116
119
|
```
|
|
117
120
|
|
|
118
|
-
|
|
121
|
+
Replay preserves the recorded `parallel` setting for ENAPP and ADMM. Parallel replay requires a normal multiprocessing-capable execution environment; arbitrary custom objective callables and solve/iteration callbacks remain non-replayable because they cannot be reconstructed from JSON.
|
|
122
|
+
|
|
123
|
+
### Command-line interface
|
|
124
|
+
|
|
125
|
+
The installed `distopf` command provides human-readable and JSON output for saved runs, user-authored TOML scenarios, and result comparisons. Run `distopf --help` or any subcommand with `--help` for the complete option list.
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
distopf inspect results/ieee13-enapp/run_config.json
|
|
129
|
+
distopf validate results/ieee13-enapp/run_config.json
|
|
130
|
+
distopf run results/ieee13-enapp/run_config.json --output-dir results/replayed
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Public commands are:
|
|
134
|
+
|
|
135
|
+
- `run CONFIG [--output-dir DIR] [--verbose] [--json]` runs a JSON `run_config.json` replay artifact or a TOML scenario. Scenario analysis types are `pf`/`power_flow`, `fbs`, `opf`, `enapp`, and `admm`.
|
|
136
|
+
- `inspect CONFIG [--json]` displays scenario or replay metadata without solving.
|
|
137
|
+
- `validate CONFIG [--json]` checks configuration structure, referenced paths, replayability, and case data.
|
|
138
|
+
- `replay-exact-power-flow INPUT_PATH [OUTPUT_PATH] [--overwrite] [--json]` replays saved OPF setpoints through the exact FBS power flow. The output defaults to `INPUT_PATH/exact`; existing output is preserved unless `--overwrite` is supplied.
|
|
139
|
+
- `compare LEFT_FOLDER RIGHT_FOLDER [--output-dir DIR] [--nominal-voltage VALUE] [--json]` compares common result CSV tables and writes `comparison.json` plus difference CSVs. `--nominal-voltage` defaults to `1.0` and is used for voltage metrics.
|
|
140
|
+
- `compare-exact FOLDER [RIGHT_FOLDER] [--batch] [--depth N] [--workers N] [--output-dir DIR] [--nominal-voltage VALUE] [--json]` compares a result folder with its `exact` FBS replay, creating that replay when needed. With `--batch`, it processes directories exactly `--depth` levels below `FOLDER`; `RIGHT_FOLDER` cannot be combined with `--batch`.
|
|
141
|
+
|
|
142
|
+
Add `--json` to any command for machine-readable output. Successful commands return `0`; validation failures return `1`; run and comparison runtime failures return `2`.
|
|
143
|
+
|
|
144
|
+
Use `distopf run --help` for the full scenario format. A minimal `scenario.toml` is:
|
|
145
|
+
|
|
146
|
+
```toml
|
|
147
|
+
[case]
|
|
148
|
+
path = "../cases/csv/ieee13"
|
|
149
|
+
|
|
150
|
+
[analysis]
|
|
151
|
+
type = "opf"
|
|
152
|
+
objective = "loss"
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
TOML scenarios require only `case.path` and `analysis.type`; `pf`/`power_flow`, `fbs`, `opf`, `enapp`, and `admm` are supported. Case options go directly under `[case]`, modifications under `[case.modifications]`, and ENAPP/ADMM topology under `[analysis.area_info.<area>]`. The `version` field is optional and defaults to `1`.
|
|
156
|
+
|
|
157
|
+
JSON `run_config.json` files generated by `PowerFlowResult.save()` remain supported as exact replay artifacts. Use `--json` on any subcommand for automation. `inspect` reads metadata without solving. `validate` checks the schema, referenced case directory, replayability, and case data. `run` executes either format and can persist result CSV files and metadata with `--output-dir`. Successful commands return exit code `0`; validation failures return `1`; run/runtime failures return `2`.
|
|
119
158
|
|
|
120
159
|
|
|
121
160
|
|
|
@@ -144,6 +183,27 @@ Use `formulation="branchflow"`.
|
|
|
144
183
|
- **Speed**: Slower than linear, but more accurate
|
|
145
184
|
- **Accuracy**: Nonlinear power flow representation
|
|
146
185
|
|
|
186
|
+
### Pyomo Wrapper — SOCP Relaxation
|
|
187
|
+
The SOCP formulation is a relaxation of the nonlinear BranchFlow model. It uses the same
|
|
188
|
+
Pyomo/IPOPT solve path, but replaces the two branch-current equality constraints with
|
|
189
|
+
inequality constraints. Use `formulation="socp"`.
|
|
190
|
+
|
|
191
|
+
- **Model**: BranchFlow model with relaxed current constraints
|
|
192
|
+
- **Solver**: IPOPT for continuous problems; MINLP solvers for discrete controls
|
|
193
|
+
- **Use case**: Faster or more robust optimization when exact current equalities are not required
|
|
194
|
+
- **Wrapper**: Pyomo only; it is not available through the matrix wrappers
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
import distopf as opf
|
|
198
|
+
|
|
199
|
+
case = opf.create_case(opf.CASES_DIR / "csv" / "ieee13")
|
|
200
|
+
result = case.run_opf(
|
|
201
|
+
formulation="socp",
|
|
202
|
+
objective="loss",
|
|
203
|
+
solver="ipopt",
|
|
204
|
+
)
|
|
205
|
+
```
|
|
206
|
+
|
|
147
207
|
#### Continuous Optimization (IPOPT)
|
|
148
208
|
For continuous optimization without discrete controls:
|
|
149
209
|
|
|
@@ -184,12 +244,14 @@ result = case.run_opf(wrapper="matrix_bess", objective="loss")
|
|
|
184
244
|
```
|
|
185
245
|
|
|
186
246
|
#### Wrapper Comparison
|
|
187
|
-
| Feature | Matrix
|
|
188
|
-
|
|
189
|
-
|
|
|
190
|
-
|
|
|
191
|
-
|
|
|
192
|
-
|
|
|
247
|
+
| Feature | Matrix | Matrix BESS | Pyomo |
|
|
248
|
+
|---------|---|---|---|
|
|
249
|
+
| Primary role | Single-period convex LinDistFlow OPF | Multi-period LinDistFlow OPF with batteries and schedules | LinDistFlow, BranchFlow, or SOCP-relaxed BranchFlow |
|
|
250
|
+
| Solver API | SciPy or CVXPY | CVXPY | Pyomo |
|
|
251
|
+
| Default solver path | CVXPY with CLARABEL | CVXPY with CLARABEL | IPOPT |
|
|
252
|
+
| Other supported solver choices | Depends on installed CVXPY/SciPy backends | Depends on installed CVXPY backend | MINLP solvers such as Bonmin/Couenne for supported discrete models |
|
|
253
|
+
|
|
254
|
+
The default `Case.run_opf()` wrapper is Pyomo unless a `formulation` selects another wrapper. Matrix is intended for fast single-period convex models; Matrix BESS is the time-series/battery backend. Pyomo is the backend for nonlinear BranchFlow, SOCP, Pyomo dual extraction, and its supported discrete formulations. Solver availability depends on the installed backend and model.
|
|
193
255
|
|
|
194
256
|
#### Solver Requirements
|
|
195
257
|
- **IPOPT**: Install via `conda install -c conda-forge ipopt`. On Ubuntu, `apt-get install coinor-libipopt-dev` only installs headers and shared libraries; it does not provide the `ipopt` executable that Pyomo's `SolverFactory("ipopt")` expects.
|
|
@@ -200,11 +262,11 @@ DistOPF supports multiple optimization objectives for distribution system OPF:
|
|
|
200
262
|
|
|
201
263
|
| Objective | String | Supported Wrappers | Description |
|
|
202
264
|
|-----------|--------|-------------------|-------------|
|
|
203
|
-
| **Loss Minimization** | `"loss"`, `"loss_min"` |
|
|
204
|
-
| **Substation Power** | `"substation"`, `"substation_power"` | Pyomo
|
|
265
|
+
| **Loss Minimization** | `"loss"`, `"loss_min"` | Matrix, Matrix BESS, Pyomo | Minimize distribution losses (most common) |
|
|
266
|
+
| **Substation Power** | `"substation"`, `"substation_power"` | Pyomo | Minimize power imported from substation |
|
|
205
267
|
| **Voltage Deviation** | `"voltage_deviation"` | Pyomo | Minimize deviations from nominal voltage (1.0 p.u.) |
|
|
206
|
-
| **Generation Curtailment** | `"curtail"`, `"curtail_min"`, `"curtailment"` | Pyomo | Minimize DER curtailment |
|
|
207
|
-
| **Cost Minimization** | `"cost"`, `"cost_min"` | Pyomo
|
|
268
|
+
| **Generation Curtailment** | `"curtail"`, `"curtail_min"`, `"curtailment"` | Matrix, Matrix BESS, Pyomo | Minimize DER curtailment |
|
|
269
|
+
| **Cost Minimization** | `"cost"`, `"cost_min"` | Pyomo | Minimize energy procurement cost from the swing bus; requires price data and a time horizon |
|
|
208
270
|
|
|
209
271
|
#### Cost Minimization with Price Data
|
|
210
272
|
|
|
@@ -214,10 +276,10 @@ To use cost minimization, add an hourly `price` column to the case schedules (in
|
|
|
214
276
|
import pandas as pd
|
|
215
277
|
import distopf as opf
|
|
216
278
|
|
|
217
|
-
case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der")
|
|
279
|
+
case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der", n_steps=24)
|
|
218
280
|
|
|
219
281
|
# Add hourly electricity prices
|
|
220
|
-
case.schedules['price'] = [38, 35, 34, 32, 30, 32, 38, 45, 52, 58, 62, 65,
|
|
282
|
+
case.schedules['price'] = [38, 35, 34, 32, 30, 32, 38, 45, 52, 58, 62, 65,
|
|
221
283
|
68, 65, 62, 58, 55, 60, 75, 82, 78, 65, 50, 42]
|
|
222
284
|
|
|
223
285
|
# Run OPF minimizing energy cost
|
|
@@ -227,10 +289,15 @@ print(f"Total energy cost: ${result.objective_value:.2f}")
|
|
|
227
289
|
|
|
228
290
|
### Result Fields
|
|
229
291
|
|
|
230
|
-
`PowerFlowResult` uses descriptive field names. Short aliases are also accepted for backward compatibility.
|
|
292
|
+
`PowerFlowResult` uses descriptive field names. Short aliases are also accepted for backward compatibility. Fields are optional: availability depends on the analysis, backend, case devices, and requested options.
|
|
293
|
+
|
|
294
|
+
Core fields include `voltages`/`voltage_magnitudes`, `voltage_angles`, active and reactive power flows, active and reactive generation, and active and reactive loads. FBS results provide `voltage_angles`, `currents`, and `current_angles` (angles are in degrees); these fields can also be present when another backend has computed them.
|
|
295
|
+
|
|
296
|
+
Battery and device fields include `battery_active_power`, `battery_reactive_power`, `p_charge`, `p_discharge`, and `soc`; regulator/capacitor-related fields include `tap_ratios`, `reg_taps`, `z_caps`, and `u_caps`, where supported by the selected model. `capacitor_reactive_power` is also available for capacitor outputs. Mixed-integer binary details may remain available through `raw_result` rather than the unified result fields.
|
|
231
297
|
|
|
232
298
|
| Field Name | Alias |
|
|
233
299
|
|---|---|
|
|
300
|
+
| `voltages` | — |
|
|
234
301
|
| `active_power_flows` | `p_flows` |
|
|
235
302
|
| `reactive_power_flows` | `q_flows` |
|
|
236
303
|
| `active_power_generation` | `p_gens` |
|
|
@@ -239,19 +306,25 @@ print(f"Total energy cost: ${result.objective_value:.2f}")
|
|
|
239
306
|
| `reactive_power_loads` | `q_loads` |
|
|
240
307
|
| `capacitor_reactive_power` | `q_caps` |
|
|
241
308
|
| `battery_active_power` | `p_bats` |
|
|
242
|
-
| `
|
|
309
|
+
| `battery_reactive_power` | `q_bats` |
|
|
310
|
+
|
|
311
|
+
#### Plotting and Dual Variables
|
|
243
312
|
|
|
244
|
-
|
|
245
|
-
|
|
313
|
+
The public plotting methods return Plotly figures: `plot_voltages(t=None)`, `plot_power_flows(t=None)`, `plot_gens(t=None)`, `plot_batteries()`, `plot_schedules()`, `plot_network(v_min=0.95, v_max=1.05, show_phases="abc", show_reactive_power=False, t=None)`, `plot_voltage_vs_distance(title=..., color_by="algorithm", include_secondary_phases=False)`, and `plot_line_flow_vs_distance(power_type="active", title=..., color_by="algorithm", include_secondary_phases=False)`. Methods that require unavailable result data or a case reference raise `RuntimeError`.
|
|
314
|
+
|
|
315
|
+
When running with `duals=True` using the Pyomo wrapper, dual variables are accessible on the result object. The unified names are:
|
|
246
316
|
|
|
247
317
|
```python
|
|
248
318
|
result = case.run_opf(wrapper="pyomo", objective="loss", duals=True)
|
|
249
319
|
result.dual_power_balance_p
|
|
250
320
|
result.dual_power_balance_q
|
|
251
321
|
result.dual_voltage_drop
|
|
252
|
-
result.
|
|
322
|
+
result.dual_voltage_limits_lower
|
|
323
|
+
result.dual_voltage_limits_upper
|
|
253
324
|
```
|
|
254
325
|
|
|
326
|
+
Dual extraction is Pyomo-only; matrix and FBS results do not populate these fields.
|
|
327
|
+
|
|
255
328
|
## Using a custom model.
|
|
256
329
|
Create CSVs formatted as shown below and store them in a single folder. The csv names must match exactly as shown.
|
|
257
330
|
Column order is not important.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Common Solver Failure Causes
|
|
2
|
+
|
|
3
|
+
This guide covers data and model-configuration conditions that can produce
|
|
4
|
+
infeasible, unconstrained, or otherwise misleading solves. It is diagnostic
|
|
5
|
+
guidance, not a complete solver manual: the exact symptoms and available
|
|
6
|
+
options depend on the selected `Case` analysis, wrapper, formulation, and
|
|
7
|
+
installed solver. Check the returned result status and error message before
|
|
8
|
+
assuming that a numerical solver failure is the root cause.
|
|
9
|
+
|
|
10
|
+
The examples below use the public case data tables and validation helpers. They
|
|
11
|
+
do not change solver behavior or repair input data automatically.
|
|
12
|
+
|
|
13
|
+
## Bus Has Phases Missing From Its Incoming Branch
|
|
14
|
+
|
|
15
|
+
The model creates voltage variables from `bus_data`, but voltage-drop equations
|
|
16
|
+
only connect phases present on the incoming `branch_data` row. A declared phase
|
|
17
|
+
with no incoming branch phase is therefore bounded but unconstrained.
|
|
18
|
+
|
|
19
|
+
Observed in the converted ieee9500_wye case:
|
|
20
|
+
|
|
21
|
+
- Bus `2827`: declared `ac`, incoming `a`, unconstrained `v[2827, c]`.
|
|
22
|
+
- Bus `4440`: declared `ab`, incoming `a`, unconstrained `v[4440, b]`.
|
|
23
|
+
|
|
24
|
+
With a constant objective, these variables can take their lower voltage bound.
|
|
25
|
+
|
|
26
|
+
Check for this condition before solving:
|
|
27
|
+
|
|
28
|
+
```python
|
|
29
|
+
from distopf.utils import find_unconstrained_bus_phases
|
|
30
|
+
|
|
31
|
+
bad_phases = find_unconstrained_bus_phases(case.bus_data, case.branch_data)
|
|
32
|
+
print(bad_phases)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Remove invalid bus phases or add the corresponding incoming branch phases
|
|
36
|
+
before building the voltage equations. This condition is especially important
|
|
37
|
+
for radial multi-phase models; a successful solver return does not by itself
|
|
38
|
+
prove that every declared phase was connected by a voltage-drop equation.
|
|
39
|
+
|
|
40
|
+
## Interpreting solver failures
|
|
41
|
+
|
|
42
|
+
- Distinguish input validation errors, infeasibility, unbounded objectives, and
|
|
43
|
+
backend/executable availability errors; they require different fixes.
|
|
44
|
+
- Confirm that the requested wrapper and formulation support the requested
|
|
45
|
+
objective and controls. Matrix, Matrix BESS, Pyomo, and FBS expose different
|
|
46
|
+
capabilities and result fields.
|
|
47
|
+
- For Pyomo nonlinear or discrete formulations, check the selected solver and
|
|
48
|
+
initialization options separately from the network data. For multi-period
|
|
49
|
+
cases, also check schedules, time-step bounds, and battery limits.
|
|
50
|
+
- Preserve the original case and solver logs when reporting a failure. A
|
|
51
|
+
minimal reproduction with the case path, wrapper/formulation, objective,
|
|
52
|
+
control flags, and relevant options is more useful than a traceback alone.
|
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
This directory contains a comprehensive set of examples showing how to use DistOPF
|
|
4
4
|
for various optimal power flow (OPF) problems, organized by topic.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
Most `.py` files in this directory are ordinary Python scripts. Run them from the
|
|
7
|
+
repository root with, for example, `uv run examples/tutorials/01_simple_power_flow.py`.
|
|
8
|
+
Some files are Marimo apps (marked `Marimo` in the tables below); open one with
|
|
9
|
+
`uv run marimo edit examples/basics/basic_power_flow_examples.py` or start Marimo
|
|
10
|
+
and select the file in its browser UI. A Marimo app is edited/run through Marimo,
|
|
11
|
+
not executed as a plain script when interactive cells are required.
|
|
8
12
|
|
|
9
13
|
## Directory Structure
|
|
10
14
|
|
|
@@ -21,12 +25,16 @@ examples/
|
|
|
21
25
|
|
|
22
26
|
## How to Run Examples
|
|
23
27
|
|
|
24
|
-
Each
|
|
28
|
+
Each ordinary script is standalone and can be run independently:
|
|
25
29
|
|
|
26
30
|
uv run examples/tutorials/01_simple_power_flow.py
|
|
27
|
-
uv run examples/pyomo/
|
|
31
|
+
uv run examples/pyomo/pyomo_multiperiod.py
|
|
28
32
|
uv run examples/data_import/cim_example.py
|
|
29
33
|
|
|
34
|
+
For a Marimo app, use Marimo's editor instead:
|
|
35
|
+
|
|
36
|
+
uv run marimo edit examples/basics/basic_power_flow_examples.py
|
|
37
|
+
|
|
30
38
|
---
|
|
31
39
|
|
|
32
40
|
## `tutorials/` — Start Here
|
|
@@ -129,8 +137,8 @@ Performance benchmarking, distributed algorithms, and experimental scripts.
|
|
|
129
137
|
|
|
130
138
|
**Objective**
|
|
131
139
|
The goal of optimization:
|
|
132
|
-
- `"loss_min"
|
|
133
|
-
- `"
|
|
140
|
+
- `"loss_min"` (or `"loss"`): Minimize real power losses
|
|
141
|
+
- `"voltage_deviation"`: Minimize voltage deviations (Pyomo)
|
|
134
142
|
|
|
135
143
|
**Control Variable**
|
|
136
144
|
What DERs (generators, batteries, inverters) are allowed to control:
|
|
@@ -141,9 +149,14 @@ Performance benchmarking, distributed algorithms, and experimental scripts.
|
|
|
141
149
|
|
|
142
150
|
**Wrapper / Formulation**
|
|
143
151
|
Which optimization engine to use:
|
|
144
|
-
- `"matrix"`:
|
|
145
|
-
- `"pyomo"`: Pyomo
|
|
146
|
-
- `"matrix_bess"`: Multi-period with batteries
|
|
152
|
+
- `"matrix"`: Single-period matrix LinDistFlow models using CVXPY/SciPy backends
|
|
153
|
+
- `"pyomo"`: Pyomo models using `formulation="lindist"`, `"branchflow"`, or `"socp"`
|
|
154
|
+
- `"matrix_bess"`: Multi-period matrix models with batteries and schedules
|
|
155
|
+
|
|
156
|
+
`model_type` is an internal wrapper/model-selection term; public users should
|
|
157
|
+
prefer `Case.run_opf(formulation=...)` and the public `Case` APIs rather than
|
|
158
|
+
constructing wrapper classes directly. `formulation="branchflow"` selects the
|
|
159
|
+
nonlinear Pyomo model; it is not an argument named `model_type` on `run_opf()`.
|
|
147
160
|
|
|
148
161
|
**Results**
|
|
149
162
|
After solving, you get:
|
|
@@ -175,5 +188,5 @@ Performance benchmarking, distributed algorithms, and experimental scripts.
|
|
|
175
188
|
## Resources
|
|
176
189
|
|
|
177
190
|
- [Project README](../README.md): Project overview
|
|
178
|
-
- `src/distopf/wrappers/base.py
|
|
191
|
+
- [`src/distopf/wrappers/base.py`](../src/distopf/wrappers/base.py): Internal/advanced wrapper base reference; ordinary users should start with the public `Case` APIs in [`src/distopf/api.py`](../src/distopf/api.py)
|
|
179
192
|
- `tests/`: Unit tests with more detailed usage patterns
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Minimal user-authored DistOPF scenario.
|
|
2
|
+
# Paths are resolved relative to this file.
|
|
3
|
+
|
|
4
|
+
[case]
|
|
5
|
+
path = "../../src/distopf/cases/csv/ieee123_30der"
|
|
6
|
+
|
|
7
|
+
[analysis]
|
|
8
|
+
type = "opf"
|
|
9
|
+
objective = "loss"
|
|
10
|
+
|
|
11
|
+
# Optional: save results and the generated run_config.json here.
|
|
12
|
+
[output]
|
|
13
|
+
directory = "../../scratch/example_results_ieee123_30der"
|
|
14
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Minimal user-authored DistOPF scenario.
|
|
2
|
+
# Paths are resolved relative to this file.
|
|
3
|
+
|
|
4
|
+
[case]
|
|
5
|
+
path = "../../src/distopf/cases/csv/ieee123_bat"
|
|
6
|
+
n_steps = 24
|
|
7
|
+
start_step = 0
|
|
8
|
+
|
|
9
|
+
[analysis]
|
|
10
|
+
type = "opf"
|
|
11
|
+
objective = "loss"
|
|
12
|
+
|
|
13
|
+
# Optional: save results and the generated run_config.json here.
|
|
14
|
+
[output]
|
|
15
|
+
directory = "../../scratch/example_results_ieee123_bat"
|
|
16
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Minimal user-authored DistOPF scenario.
|
|
2
|
+
# Paths are resolved relative to this file.
|
|
3
|
+
|
|
4
|
+
[case]
|
|
5
|
+
path = "../../src/distopf/cases/csv/ieee13"
|
|
6
|
+
|
|
7
|
+
[analysis]
|
|
8
|
+
type = "opf"
|
|
9
|
+
objective = "loss"
|
|
10
|
+
|
|
11
|
+
# Optional: save results and the generated run_config.json here.
|
|
12
|
+
[output]
|
|
13
|
+
directory = "../../scratch/example_results"
|
|
14
|
+
|
|
15
|
+
# For ENAPP or ADMM, use this form instead:
|
|
16
|
+
# [analysis]
|
|
17
|
+
# type = "enapp"
|
|
18
|
+
# objective = "loss"
|
|
19
|
+
# parallel = false
|
|
20
|
+
|
|
21
|
+
# [analysis.area_info.area1]
|
|
22
|
+
# up_areas = []
|
|
23
|
+
# down_areas = ["area2"]
|
|
24
|
+
# up_buses = ["sourcebus"]
|
|
25
|
+
# down_buses = ["632"]
|
|
26
|
+
|
|
27
|
+
# [analysis.area_info.area2]
|
|
28
|
+
# up_areas = ["area1"]
|
|
29
|
+
# down_areas = []
|
|
30
|
+
# up_buses = ["632"]
|
|
31
|
+
# down_buses = []
|