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.
Files changed (648) hide show
  1. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.gitignore +4 -0
  2. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/PKG-INFO +98 -23
  3. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/README.md +95 -22
  4. distopf-1.1.0.dev5/docs/solver-failure-guide.md +52 -0
  5. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/README.md +23 -10
  6. distopf-1.1.0.dev5/examples/cli/example_ieee123_30der.toml +14 -0
  7. distopf-1.1.0.dev5/examples/cli/example_ieee123_bat.toml +16 -0
  8. distopf-1.1.0.dev5/examples/cli/example_ieee13.toml +31 -0
  9. distopf-1.1.0.dev5/examples/cli/example_scenario.toml +31 -0
  10. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/pyproject.toml +5 -1
  11. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/__init__.py +12 -1
  12. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/api.py +8 -2
  13. distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/bus_data.csv +5295 -0
  14. distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/gen_data copy.csv +188 -0
  15. distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/reg_data.csv +7 -0
  16. distopf-1.1.0.dev5/src/distopf/cli.py +919 -0
  17. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/fbs.py +425 -37
  18. distopf-1.1.0.dev5/src/distopf/pyomo_models/common_constraints.py +830 -0
  19. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/constraints_nlp.py +27 -2
  20. distopf-1.1.0.dev5/src/distopf/pyomo_models/lindist_constraints.py +263 -0
  21. distopf-1.1.0.dev5/src/distopf/pyomo_models/nl_bfm_constraints.py +418 -0
  22. distopf-1.1.0.dev5/src/distopf/pyomo_models/primary_lindist_constraints.py +182 -0
  23. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/results.py +1 -3
  24. distopf-1.1.0.dev5/src/distopf/utils/__init__.py +5 -0
  25. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/results_comparison.py +77 -0
  26. distopf-1.1.0.dev5/src/distopf/utils/topology.py +90 -0
  27. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/pyomo_wrapper.py +23 -12
  28. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_case.py +3 -0
  29. distopf-1.1.0.dev5/tests/test_cli.py +744 -0
  30. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_distributed_api.py +8 -2
  31. distopf-1.1.0.dev5/tests/test_exact_replay_and_comparison.py +309 -0
  32. distopf-1.1.0.dev5/tests/test_fbs_replay.py +63 -0
  33. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_nlp_backend.py +48 -4
  34. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_results.py +1 -3
  35. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_utilities.py +33 -0
  36. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/uv.lock +54 -1
  37. distopf-1.1.0.dev3/src/distopf/cases/csv/ieee9500_wye/bus_data.csv +0 -5295
  38. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.github/copilot-instructions.md +0 -0
  39. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.github/skills/run-opf/SKILL.md +0 -0
  40. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.github/workflows/lint.yml +0 -0
  41. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/.github/workflows/pypi-publish.yml +0 -0
  42. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/2026-04-21-distopf_2-triplex-agent.md +0 -0
  43. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/DISCLAIMER.md +0 -0
  44. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/LICENSE.md +0 -0
  45. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/column_migration.md +0 -0
  46. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/docs/STYLE_GUIDE.md +0 -0
  47. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/docs/architecture.puml +0 -0
  48. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/TEMPORAL_README.md +0 -0
  49. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/debug_enapp_123.py +0 -0
  50. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/profile_matrix.py +0 -0
  51. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp.py +0 -0
  52. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123.py +0 -0
  53. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123_isolated.py +0 -0
  54. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123_spatiotemporal.py +0 -0
  55. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_refactor.py +0 -0
  56. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_tenapp.py +0 -0
  57. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_comparison.py +0 -0
  58. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_quick.py +0 -0
  59. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_tenapp.py +0 -0
  60. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/advanced/temp_test.py +0 -0
  61. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/basics/basic_optimal_power_flow.py +0 -0
  62. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow.py +0 -0
  63. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow_examples.html +0 -0
  64. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow_examples.py +0 -0
  65. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/control_devices/fbs13.py +0 -0
  66. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/control_devices/reg_cap_example.py +0 -0
  67. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/control_devices/test_regulator_mi.py +0 -0
  68. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/cim_example.py +0 -0
  69. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/compare_cim_case.py +0 -0
  70. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/dss_converter_test.py +0 -0
  71. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/dss_examples.py +0 -0
  72. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/dss_test_loss.py +0 -0
  73. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/data_import/dss_test_results.txt +0 -0
  74. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/adding_generators.ipynb +0 -0
  75. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/adding_generators.py +0 -0
  76. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/basic_power_flow_examples.ipynb +0 -0
  77. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/build_your_own_opf.ipynb +0 -0
  78. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/notebooks/distopf_pesgm2026_tutorial.ipynb +0 -0
  79. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/optimization/extract_duals.py +0 -0
  80. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/optimization/penalties.py +0 -0
  81. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/optimization/penalty_example.py +0 -0
  82. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/optimization/thermal_limits.py +0 -0
  83. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/build_your_own_opf.py +0 -0
  84. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/build_your_own_opf_static.py +0 -0
  85. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/nlp.py +0 -0
  86. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_dss_example.py +0 -0
  87. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_mi.py +0 -0
  88. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_multiperiod.py +0 -0
  89. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_nlp_123_comparison.py +0 -0
  90. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_nlp_13_comparison.py +0 -0
  91. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_regulator_control.py +0 -0
  92. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_tests.py +0 -0
  93. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_time_comparison.py +0 -0
  94. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/01_simple_power_flow.py +0 -0
  95. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/02_loss_minimization.py +0 -0
  96. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/03_voltage_optimization.py +0 -0
  97. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/04_comparing_wrappers.py +0 -0
  98. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/05_control_strategies.py +0 -0
  99. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/06_visualization_gallery.py +0 -0
  100. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/07_quick_start.py +0 -0
  101. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/08_reactive_power_importance.py +0 -0
  102. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/09_optimization_tradeoffs.py +0 -0
  103. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/10_working_with_results.py +0 -0
  104. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/examples/tutorials/11_fbs_power_flow.py +0 -0
  105. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/__init__.py +0 -0
  106. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/cim/IEEE123_PV.xml +0 -0
  107. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/cim/IEEE13.xml +0 -0
  108. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/battery_data.csv +0 -0
  109. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/branch_data.csv +0 -0
  110. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/bus_data.csv +0 -0
  111. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/cap_data.csv +0 -0
  112. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/default_loadshape.csv +0 -0
  113. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/gen_data.csv +0 -0
  114. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/pv_loadshape.csv +0 -0
  115. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/reg_data.csv +0 -0
  116. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/battery_data.csv +0 -0
  117. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/branch_data.csv +0 -0
  118. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/bus_data.csv +0 -0
  119. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/cap_data.csv +0 -0
  120. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/default_loadshape.csv +0 -0
  121. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/gen_data.csv +0 -0
  122. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/pv_loadshape.csv +0 -0
  123. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/reg_data.csv +0 -0
  124. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/branch_data.csv +0 -0
  125. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/bus_data.csv +0 -0
  126. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/cap_data.csv +0 -0
  127. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/gen_data.csv +0 -0
  128. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/reg_data.csv +0 -0
  129. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/battery_data.csv +0 -0
  130. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/branch_data.csv +0 -0
  131. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/bus_data.csv +0 -0
  132. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/cap_data.csv +0 -0
  133. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/default_loadshape.csv +0 -0
  134. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/gen_data.csv +0 -0
  135. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/pv_loadshape.csv +0 -0
  136. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/reg_data.csv +0 -0
  137. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/branch_data.csv +0 -0
  138. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/bus_data.csv +0 -0
  139. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/cap_data.csv +0 -0
  140. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/gen_data.csv +0 -0
  141. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/reg_data.csv +0 -0
  142. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/branch_data.csv +0 -0
  143. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/bus_data.csv +0 -0
  144. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/cap_data.csv +0 -0
  145. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/gen_data.csv +0 -0
  146. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/reg_data.csv +0 -0
  147. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/branch_data.csv +0 -0
  148. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/bus_data.csv +0 -0
  149. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/cap_data.csv +0 -0
  150. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/gen_data.csv +0 -0
  151. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/reg_data.csv +0 -0
  152. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/bat_data.csv +0 -0
  153. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/branch_data.csv +0 -0
  154. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/bus_data.csv +0 -0
  155. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/cap_data.csv +0 -0
  156. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/default_loadshape.csv +0 -0
  157. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/gen_data.csv +0 -0
  158. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/pv_loadshape.csv +0 -0
  159. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/reg_data.csv +0 -0
  160. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/schedules.csv +0 -0
  161. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/battery_data.csv +0 -0
  162. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/branch_data.csv +0 -0
  163. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/bus_data.csv +0 -0
  164. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/cap_data.csv +0 -0
  165. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/default_loadshape.csv +0 -0
  166. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/gen_data.csv +0 -0
  167. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/pv_loadshape.csv +0 -0
  168. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/reg_data.csv +0 -0
  169. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/bat_data.csv +0 -0
  170. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/battery_data_v1.csv +0 -0
  171. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/branch_data.csv +0 -0
  172. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/bus_data.csv +0 -0
  173. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/cap_data.csv +0 -0
  174. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/gen_data.csv +0 -0
  175. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/reg_data.csv +0 -0
  176. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/schedules.csv +0 -0
  177. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/branch_data.csv +0 -0
  178. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/bus_data.csv +0 -0
  179. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/cap_data.csv +0 -0
  180. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/gen_data.csv +0 -0
  181. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/reg_data.csv +0 -0
  182. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/battery_data.csv +0 -0
  183. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/branch_data.csv +0 -0
  184. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/bus_data.csv +0 -0
  185. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/cap_data.csv +0 -0
  186. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/default_loadshape.csv +0 -0
  187. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/gen_data.csv +0 -0
  188. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/pv_loadshape.csv +0 -0
  189. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/reg_data.csv +0 -0
  190. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/bat_data.csv +0 -0
  191. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/branch_data.csv +0 -0
  192. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/bus_data.csv +0 -0
  193. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/gen_data.csv +0 -0
  194. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/schedules.csv +0 -0
  195. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/branch_data.csv +0 -0
  196. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/bus_data.csv +0 -0
  197. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/cap_data.csv +0 -0
  198. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/gen_data.csv +0 -0
  199. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/reg_data.csv +0 -0
  200. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/branch_data.csv +0 -0
  201. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/bus_data.csv +0 -0
  202. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/cap_data.csv +0 -0
  203. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/gen_data.csv +0 -0
  204. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/reg_data.csv +0 -0
  205. {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
  206. {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
  207. {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
  208. /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
  209. /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
  210. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/branch_data.csv +0 -0
  211. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/bus_data.csv +0 -0
  212. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/cap_data.csv +0 -0
  213. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/gen_data.csv +0 -0
  214. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/reg_data.csv +0 -0
  215. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/branch_data.csv +0 -0
  216. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/bus_data.csv +0 -0
  217. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/cap_data.csv +0 -0
  218. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/gen_data.csv +0 -0
  219. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/reg_data.csv +0 -0
  220. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/branch_data.csv +0 -0
  221. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/bus_data.csv +0 -0
  222. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/cap_data.csv +0 -0
  223. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/gen_data.csv +0 -0
  224. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/reg_data.csv +0 -0
  225. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/branch_data.csv +0 -0
  226. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/bus_data.csv +0 -0
  227. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/cap_data.csv +0 -0
  228. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/gen_data.csv +0 -0
  229. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/reg_data.csv +0 -0
  230. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2Bus/2Bus.DSS +0 -0
  231. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2BusD/2Bus.DSS +0 -0
  232. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2Bus_1phase/2Bus1ph.DSS +0 -0
  233. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/IEEE34_BusXY.csv +0 -0
  234. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/IEEELineCodes.dss +0 -0
  235. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/Run_IEEE34Mod1.dss +0 -0
  236. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/Run_IEEE34Mod2.dss +0 -0
  237. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_Curr_Elem.txt +0 -0
  238. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_Power_elem_kVA.txt +0 -0
  239. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_RegTaps.txt +0 -0
  240. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_VLN_Node.txt +0 -0
  241. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34Mod1.dss +0 -0
  242. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34Mod2.dss +0 -0
  243. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/nmsu_linecode2_ABC.txt +0 -0
  244. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/3Bus/3Bus.DSS +0 -0
  245. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4Bus-DY-Bal.DSS +0 -0
  246. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_Curr_Elem.Txt +0 -0
  247. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_Power_elem_kVA.txt +0 -0
  248. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_VLL_Node.Txt +0 -0
  249. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_VLN_Node.Txt +0 -0
  250. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4Bus-GrdYD-Bal.DSS +0 -0
  251. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4busYDBal_Losses.Txt +0 -0
  252. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4busYDBal_VLN_Node.Txt +0 -0
  253. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-OYOD-Bal/4Bus-OYOD-Bal.DSS +0 -0
  254. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-OYOD-UnBal/4bus-OYOD-UnBal.dss +0 -0
  255. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YD-Bal/4Bus-YD-Bal.DSS +0 -0
  256. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YY-Bal/4Bus-YY-Bal.DSS +0 -0
  257. {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
  258. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YYD/YYD-Master.DSS +0 -0
  259. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Expanded4WireDelta.pdf +0 -0
  260. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wireIndMotor.dss +0 -0
  261. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wire_Lagging.dss +0 -0
  262. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wire_Leading.dss +0 -0
  263. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/BalancedLoads.dss +0 -0
  264. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/BusCoords.dss +0 -0
  265. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/CableData.dss +0 -0
  266. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/CapControls.dss +0 -0
  267. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Capacitors.dss +0 -0
  268. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/DSSViewIntercom.Txt +0 -0
  269. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/EnergyStorage.dss +0 -0
  270. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Generators.dss +0 -0
  271. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LatLongCoords.dss +0 -0
  272. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LineCodes.dss +0 -0
  273. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LineGeometry.dss +0 -0
  274. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LinesSwitchesGeometry.dss +0 -0
  275. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LinesSwitchesLineCodes.dss +0 -0
  276. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LoadXfmrCodes.dss +0 -0
  277. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Loads_primary.dss +0 -0
  278. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Master-unbal-initial-config.dss +0 -0
  279. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Master.dss +0 -0
  280. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PVSystems_primary.dss +0 -0
  281. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PV_10pen_DSSPV.dss +0 -0
  282. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PV_NN_100_DSSPV.dss +0 -0
  283. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/README.md +0 -0
  284. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Regulators.dss +0 -0
  285. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Transformers.dss +0 -0
  286. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/TriplexLineCodes.dss +0 -0
  287. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/TriplexLines.dss +0 -0
  288. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/UnbalancedLoads.dss +0 -0
  289. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/WireData.dss +0 -0
  290. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/bus_info_temp.json +0 -0
  291. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/desktop.ini +0 -0
  292. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Daisy.DSV +0 -0
  293. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Daisy.dbl +0 -0
  294. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Isolated.Txt +0 -0
  295. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Loops.Txt +0 -0
  296. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Power_elem_kVA.txt +0 -0
  297. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_VLN_Node.Txt +0 -0
  298. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/ieee9500bal.dss +0 -0
  299. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/ieee9500unbal.dss +0 -0
  300. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/xfmrs_info_triplex_nodes.json +0 -0
  301. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/BusCoords.dat +0 -0
  302. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/CircuitPlottingScripts.dss +0 -0
  303. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/DSSGraph_Output.CSV +0 -0
  304. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/DSSViewIntercom.Txt +0 -0
  305. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Loads.DSS +0 -0
  306. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Master.dss +0 -0
  307. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Regulators.DSS +0 -0
  308. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEELineCodes.DSS +0 -0
  309. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/P174_Run_SolarRamp.DSS +0 -0
  310. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/P174_Run_VoltageProfile.DSS +0 -0
  311. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/PV5sdata1.csv +0 -0
  312. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/PaperLoadShape.txt +0 -0
  313. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/RevRegTest.dss +0 -0
  314. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/Run_IEEE123Bus.DSS +0 -0
  315. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/Run_YearlySim.dss +0 -0
  316. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SetDailyLoadShape.DSS +0 -0
  317. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp-Mack.DSS +0 -0
  318. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp.DSS +0 -0
  319. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp.csv +0 -0
  320. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/StorageRamp.CSV +0 -0
  321. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/WindRamp.DSS +0 -0
  322. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/WindRampRevRegTest.DSS +0 -0
  323. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Curr_Elem.Txt +0 -0
  324. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Daisy.DSV +0 -0
  325. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Daisy.dbl +0 -0
  326. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_BUSCOORDS.CSV +0 -0
  327. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_ElemPowers.CSV +0 -0
  328. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_LOADS.CSV +0 -0
  329. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_P_BYPHASE.CSV +0 -0
  330. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Elements.Txt +0 -0
  331. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_GenMeterOut.Txt +0 -0
  332. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Loadshape_default.DSV +0 -0
  333. /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
  334. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Loops.Txt +0 -0
  335. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Losses.DSV +0 -0
  336. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Losses.dbl +0 -0
  337. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power.DSV +0 -0
  338. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power.dbl +0 -0
  339. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power_elem_kVA.txt +0 -0
  340. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power_seq_kVA.txt +0 -0
  341. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9998.DSV +0 -0
  342. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9998.dbl +0 -0
  343. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9999.DSV +0 -0
  344. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9999.dbl +0 -0
  345. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_RegTaps.Txt +0 -0
  346. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_VLN.Txt +0 -0
  347. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_VLN_Node.Txt +0 -0
  348. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Voltage.DSV +0 -0
  349. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Voltage.dbl +0 -0
  350. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_PQ.DSV +0 -0
  351. /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
  352. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_V.DSV +0 -0
  353. /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
  354. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/DSSViewIntercom.Txt +0 -0
  355. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Node_BusXY.csv +0 -0
  356. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt.dss +0 -0
  357. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_EXP_ElemPowers.CSV +0 -0
  358. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power.DSV +0 -0
  359. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power.dbl +0 -0
  360. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power_elem_kVA.txt +0 -0
  361. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEELineCodes.dss +0 -0
  362. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/branch_data.csv +0 -0
  363. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/bus_data.csv +0 -0
  364. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/cap_data.csv +0 -0
  365. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/gen_data.csv +0 -0
  366. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/BalancedLoads.dss +0 -0
  367. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/BusCoords.dss +0 -0
  368. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/CableData.dss +0 -0
  369. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/CapControls.dss +0 -0
  370. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Capacitors.dss +0 -0
  371. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/DSSViewIntercom.Txt +0 -0
  372. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/EnergyStorage.dss +0 -0
  373. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Generators.dss +0 -0
  374. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LatLongCoords.dss +0 -0
  375. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineCodes.dss +0 -0
  376. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineConstantsCode.DSS +0 -0
  377. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineGeometry.dss +0 -0
  378. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LinesSwitchesGeometry.dss +0 -0
  379. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LinesSwitchesLineCodes.dss +0 -0
  380. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LoadXfmrCodes.dss +0 -0
  381. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Master-bal-initial-config.dss +0 -0
  382. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Master-unbal-initial-config.dss +0 -0
  383. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/PV_10pen_DSSPV.dss +0 -0
  384. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/PV_NN_100_DSSPV.dss +0 -0
  385. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/README.md +0 -0
  386. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Regulators.dss +0 -0
  387. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Elements.Txt +0 -0
  388. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_LineConstants.txt +0 -0
  389. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Mon_mon1_1.csv +0 -0
  390. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power.DSV +0 -0
  391. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power.dbl +0 -0
  392. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power_elem_kVA.txt +0 -0
  393. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Transformers.dss +0 -0
  394. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/TriplexLineCodes.dss +0 -0
  395. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/TriplexLines.dss +0 -0
  396. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/UnbalancedLoads.dss +0 -0
  397. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/WireData.dss +0 -0
  398. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/BalancedLoads.dss +0 -0
  399. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/BusCoords.dss +0 -0
  400. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/CableData.dss +0 -0
  401. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/CapControls.dss +0 -0
  402. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Capacitors.dss +0 -0
  403. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/DSSViewIntercom.Txt +0 -0
  404. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/EnergyStorage.dss +0 -0
  405. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Generators.dss +0 -0
  406. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LatLongCoords.dss +0 -0
  407. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineCodes.dss +0 -0
  408. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineConstantsCode.DSS +0 -0
  409. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineGeometry.dss +0 -0
  410. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LinesSwitchesGeometry.dss +0 -0
  411. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LinesSwitchesLineCodes.dss +0 -0
  412. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LoadXfmrCodes.dss +0 -0
  413. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Master-bal-initial-config.dss +0 -0
  414. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Master-unbal-initial-config.dss +0 -0
  415. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/PV_10pen_DSSPV.dss +0 -0
  416. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/PV_NN_100_DSSPV.dss +0 -0
  417. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/README.md +0 -0
  418. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Regulators.dss +0 -0
  419. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Elements.Txt +0 -0
  420. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_LineConstants.txt +0 -0
  421. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Mon_mon1_1.csv +0 -0
  422. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power.DSV +0 -0
  423. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power.dbl +0 -0
  424. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power_elem_kVA.txt +0 -0
  425. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Transformers.dss +0 -0
  426. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/TriplexLineCodes.dss +0 -0
  427. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/TriplexLines.dss +0 -0
  428. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/UnbalancedLoads.dss +0 -0
  429. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/WireData.dss +0 -0
  430. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/minimal_triplex/minimal_triplex.dss +0 -0
  431. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/Line.txt +0 -0
  432. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/Load.txt +0 -0
  433. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/MyLineCodes.txt +0 -0
  434. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/ieee123master_base.dss +0 -0
  435. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Buscoords.dss +0 -0
  436. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Intermediates.txt +0 -0
  437. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/LineCodes.dss +0 -0
  438. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Lines.dss +0 -0
  439. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/LoadShapes.dss +0 -0
  440. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Loads.dss +0 -0
  441. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Master.dss +0 -0
  442. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/PVSystems.dss +0 -0
  443. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/SMART-DS_version.txt +0 -0
  444. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Transformers.dss +0 -0
  445. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/Summary_data.csv +0 -0
  446. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/blown_fuses.csv +0 -0
  447. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/de-energized_nodes.csv +0 -0
  448. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_line_overloads.csv +0 -0
  449. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_over_voltages.csv +0 -0
  450. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_transformer_overloads.csv +0 -0
  451. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_under_voltages.csv +0 -0
  452. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_voltages.csv +0 -0
  453. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/pu_voltages_histogram.png +0 -0
  454. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/pu_voltages_percentiles.png +0 -0
  455. {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
  456. {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
  457. {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
  458. {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
  459. {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
  460. {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
  461. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_16017_pu.csv +0 -0
  462. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_17146_pu.csv +0 -0
  463. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_17950_pu.csv +0 -0
  464. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_1835_pu.csv +0 -0
  465. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_19648_pu.csv +0 -0
  466. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_19955_pu.csv +0 -0
  467. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_20964_pu.csv +0 -0
  468. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_22499_pu.csv +0 -0
  469. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_22635_pu.csv +0 -0
  470. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_2581_pu.csv +0 -0
  471. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29069_pu.csv +0 -0
  472. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29376_pu.csv +0 -0
  473. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29596_pu.csv +0 -0
  474. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_31655_pu.csv +0 -0
  475. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_31818_pu.csv +0 -0
  476. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_32244_pu.csv +0 -0
  477. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_33164_pu.csv +0 -0
  478. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_33792_pu.csv +0 -0
  479. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_8445_pu.csv +0 -0
  480. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_8470_pu.csv +0 -0
  481. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_16017_pu.csv +0 -0
  482. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_17146_pu.csv +0 -0
  483. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_17950_pu.csv +0 -0
  484. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_1835_pu.csv +0 -0
  485. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_19648_pu.csv +0 -0
  486. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_19955_pu.csv +0 -0
  487. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_20964_pu.csv +0 -0
  488. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_22499_pu.csv +0 -0
  489. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_22635_pu.csv +0 -0
  490. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_2581_pu.csv +0 -0
  491. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29069_pu.csv +0 -0
  492. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29376_pu.csv +0 -0
  493. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29596_pu.csv +0 -0
  494. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_31655_pu.csv +0 -0
  495. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_31818_pu.csv +0 -0
  496. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_32244_pu.csv +0 -0
  497. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_33164_pu.csv +0 -0
  498. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_33792_pu.csv +0 -0
  499. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_8445_pu.csv +0 -0
  500. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_8470_pu.csv +0 -0
  501. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_10747_pu.csv +0 -0
  502. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_1077_pu.csv +0 -0
  503. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_13334_pu.csv +0 -0
  504. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_14588_pu.csv +0 -0
  505. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_14705_pu.csv +0 -0
  506. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_3216_pu.csv +0 -0
  507. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_6157_pu.csv +0 -0
  508. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_7380_pu.csv +0 -0
  509. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_10747_pu.csv +0 -0
  510. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_1077_pu.csv +0 -0
  511. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_13334_pu.csv +0 -0
  512. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_14588_pu.csv +0 -0
  513. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_14705_pu.csv +0 -0
  514. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_3216_pu.csv +0 -0
  515. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_6157_pu.csv +0 -0
  516. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_7380_pu.csv +0 -0
  517. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/reactive_ids.json +0 -0
  518. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/real_ids.json +0 -0
  519. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/voltage_ids.json +0 -0
  520. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line/main.dss +0 -0
  521. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_line/main.dss +0 -0
  522. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_load/main.dss +0 -0
  523. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_load_unbal_line/main.dss +0 -0
  524. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_reg/main.dss +0 -0
  525. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/triplex_3ph/triplex_3ph.dss +0 -0
  526. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cases/dss/triplex_pv/triplex_pv.dss +0 -0
  527. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/__init__.py +0 -0
  528. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/cim_to_csv_converter.py +0 -0
  529. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/__init__.py +0 -0
  530. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/base_processor.py +0 -0
  531. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/bus_processor.py +0 -0
  532. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/capacitor_processor.py +0 -0
  533. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/generator_processor.py +0 -0
  534. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/line_processor.py +0 -0
  535. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/regulator_processor.py +0 -0
  536. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/switch_processor.py +0 -0
  537. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/transformer_processor.py +0 -0
  538. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/utils/__init__.py +0 -0
  539. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/utils/phase_utils.py +0 -0
  540. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/validators/__init__.py +0 -0
  541. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/cim_importer/validators/topology_validator.py +0 -0
  542. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/__init__.py +0 -0
  543. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/ADMM_MATH_REPORT.md +0 -0
  544. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/ENAPP_MATH_REPORT.md +0 -0
  545. {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
  546. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/admm_agents.py +0 -0
  547. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/boundary.py +0 -0
  548. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/decompose.py +0 -0
  549. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/enapp copy.py +0 -0
  550. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/enapp_agents.py +0 -0
  551. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/execution.py +0 -0
  552. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/messaging.py +0 -0
  553. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/penalties.py +0 -0
  554. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/schedule.py +0 -0
  555. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/__init__.py +0 -0
  556. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/objectives.py +0 -0
  557. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_1o.py +0 -0
  558. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_admm.py +0 -0
  559. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_aprx.py +0 -0
  560. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/utils.py +0 -0
  561. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/dss_importer/__init__.py +0 -0
  562. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/dss_importer/dss_to_csv_converter.py +0 -0
  563. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/__init__.py +0 -0
  564. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/base.py +0 -0
  565. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/binary_variable_notes.md +0 -0
  566. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist.py +0 -0
  567. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_capacitor_mi.py +0 -0
  568. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_capacitor_regulator_mi.py +0 -0
  569. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_loads.py +0 -0
  570. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_p_gen.py +0 -0
  571. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_q_gen.py +0 -0
  572. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_regulator_mi.py +0 -0
  573. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/__init__.py +0 -0
  574. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/base_mp.py +0 -0
  575. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_capacitor_mi_mp.py +0 -0
  576. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_loads_mp.py +0 -0
  577. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_mp.py +0 -0
  578. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/objectives.py +0 -0
  579. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/pyomo_solver.py +0 -0
  580. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/readme.md +0 -0
  581. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/solvers.py +0 -0
  582. {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
  583. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/spatial_decomposition/decompose.py +0 -0
  584. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/spatial_decomposition/enapp.py +0 -0
  585. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/objectives.py +0 -0
  586. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/matrix_models/solvers.py +0 -0
  587. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/plot.py +0 -0
  588. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/__init__.py +0 -0
  589. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/constraints.py +0 -0
  590. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/factories.py +0 -0
  591. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/lindist.py +0 -0
  592. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/nl_branchflow.py +0 -0
  593. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/nl_branchflow_prebuilt.py +0 -0
  594. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/objectives.py +0 -0
  595. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/protocol.py +0 -0
  596. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/results.py +0 -0
  597. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/slack_constraints.py +0 -0
  598. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/solvers.py +0 -0
  599. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/call_recorder.py +0 -0
  600. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/input_handlers.py +0 -0
  601. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/kcl_check.py +0 -0
  602. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/ngon.py +0 -0
  603. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/utils/query_interface.py +0 -0
  604. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/validators.py +0 -0
  605. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/__init__.py +0 -0
  606. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/base.py +0 -0
  607. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/matrix_bess_wrapper.py +0 -0
  608. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/src/distopf/wrappers/matrix_wrapper.py +0 -0
  609. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/__init__.py +0 -0
  610. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/conftest.py +0 -0
  611. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/IEEE13.xml +0 -0
  612. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/branch_data.csv +0 -0
  613. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/bus_data.csv +0 -0
  614. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/cap_data.csv +0 -0
  615. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/gen_data.csv +0 -0
  616. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/reg_data.csv +0 -0
  617. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/integration/__init__.py +0 -0
  618. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/integration/test_full_conversion.py +0 -0
  619. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/integration/test_impedance_comparison.py +0 -0
  620. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/__init__.py +0 -0
  621. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_cim_to_csv_helpser.py +0 -0
  622. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_cim_to_csv_linking.py +0 -0
  623. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_converter_run.py +0 -0
  624. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_phase_utils.py +0 -0
  625. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_processors.py +0 -0
  626. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_reg_transformer_small.py +0 -0
  627. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_regulator_impedances.py +0 -0
  628. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_topology_validator.py +0 -0
  629. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_transformer_tank_impedances.py +0 -0
  630. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/__init__.py +0 -0
  631. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/integration/__init__.py +0 -0
  632. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/integration/test_dss_converter_integration.py +0 -0
  633. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/integration/test_triplex_lindist.py +0 -0
  634. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/__init__.py +0 -0
  635. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_dss_converter.py +0 -0
  636. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_transformer.py +0 -0
  637. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_triplex_converter.py +0 -0
  638. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_triplex_pv.py +0 -0
  639. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/integration_references.json +0 -0
  640. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/pyomo_models/test_dual_extraction.py +0 -0
  641. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/pyomo_models/test_pyomo_lindist.py +0 -0
  642. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_admm_agents.py +0 -0
  643. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_backends.py +0 -0
  644. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_enapp_integration.py +0 -0
  645. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_exports.py +0 -0
  646. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_integration_snapshots.py +0 -0
  647. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_matrix_models.py +0 -0
  648. {distopf-1.1.0.dev3 → distopf-1.1.0.dev5}/tests/test_smoke.py +0 -0
@@ -15,3 +15,7 @@ examples/layouts/*
15
15
  *.code-workspace
16
16
  scratch/*
17
17
  */.ipynb_checkpoints/*
18
+ graphify-out/
19
+ CLAUDE.md
20
+ .claude/
21
+ benchmarks/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: distopf
3
- Version: 1.1.0.dev3
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
- result = case.run_opf(objective="curtail_min", control_variable="P", v_max=1.05, v_min=0.95, gen_mult=10)
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:577) and [`Case.run_admm()`](src/distopf/api.py:617) 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.
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=False,
133
+ parallel=True,
131
134
  max_iterations=25,
132
135
  )
133
136
  ```
134
137
 
135
- 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 and topology, so named-objective runs can be reproduced with [`replay()`](src/distopf/api.py:1140):
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
- Custom objective callables and solve/iteration callbacks are intentionally marked non-replayable because they cannot be reconstructed from JSON.
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/Matrix BESS | Pyomo |
212
- |---------|---|---|
213
- | Model Type | LinDistFlow (linear) | LinDistFlow or Non-Linear BranchFlow |
214
- | Formulation | Matrix-based | Algebraic equations |
215
- | Solver API | Scipy or CVXPY | Pyomo |
216
- | Prefered Solver | HiGHs or Clarabel | IPOPT, Gurobi, Knitro |
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"` | All | Minimize distribution losses (most common) |
228
- | **Substation Power** | `"substation"`, `"substation_power"` | Pyomo, Matrix | Minimize power imported from substation |
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 (LinDistFlow, BranchFlow) | Minimize energy procurement cost from swing bus |
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
- | `voltage_magnitudes` | `voltages` |
335
+ | `battery_reactive_power` | `q_bats` |
336
+
337
+ #### Plotting and Dual Variables
267
338
 
268
- #### Dual Variables
269
- When running with `duals=True`, dual variables are accessible on the result object:
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.dual_voltage_limits
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
- result = case.run_opf(objective="curtail_min", control_variable="P", v_max=1.05, v_min=0.95, gen_mult=10)
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:577) and [`Case.run_admm()`](src/distopf/api.py:617) 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
+ 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=False,
107
+ parallel=True,
107
108
  max_iterations=25,
108
109
  )
109
110
  ```
110
111
 
111
- 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 and topology, so named-objective runs can be reproduced with [`replay()`](src/distopf/api.py:1140):
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
- Custom objective callables and solve/iteration callbacks are intentionally marked non-replayable because they cannot be reconstructed from JSON.
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/Matrix BESS | Pyomo |
188
- |---------|---|---|
189
- | Model Type | LinDistFlow (linear) | LinDistFlow or Non-Linear BranchFlow |
190
- | Formulation | Matrix-based | Algebraic equations |
191
- | Solver API | Scipy or CVXPY | Pyomo |
192
- | Prefered Solver | HiGHs or Clarabel | IPOPT, Gurobi, Knitro |
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"` | All | Minimize distribution losses (most common) |
204
- | **Substation Power** | `"substation"`, `"substation_power"` | Pyomo, Matrix | Minimize power imported from substation |
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 (LinDistFlow, BranchFlow) | Minimize energy procurement cost from swing bus |
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
- | `voltage_magnitudes` | `voltages` |
309
+ | `battery_reactive_power` | `q_bats` |
310
+
311
+ #### Plotting and Dual Variables
243
312
 
244
- #### Dual Variables
245
- When running with `duals=True`, dual variables are accessible on the result object:
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.dual_voltage_limits
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
- Some examples are Marimo notebooks. To use these, run `marimo edit`. Marimo will
7
- open the browser and list the available notebooks.
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 example is standalone and can be run independently:
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/build_your_own_opf.py
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"`: Minimize real power losses
133
- - `"voltage_dev"`: Minimize voltage deviations
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"`: CVXPY + CLARABEL (fast, convex problems)
145
- - `"pyomo"`: Pyomo + IPOPT (flexible, nonlinear problems; supports `model_type="branchflow"` for exact NLP)
146
- - `"matrix_bess"`: Multi-period with batteries (CVXPY + CLARABEL)
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`: Wrapper API documentation
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 = []