distopf 1.1.0.dev4__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.dev4 → distopf-1.1.0.dev5}/.gitignore +4 -0
  2. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/PKG-INFO +73 -21
  3. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/README.md +70 -20
  4. distopf-1.1.0.dev5/docs/solver-failure-guide.md +52 -0
  5. {distopf-1.1.0.dev4 → 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.dev4 → distopf-1.1.0.dev5}/pyproject.toml +5 -1
  11. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/__init__.py +12 -1
  12. distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/bus_data.csv +5295 -0
  13. distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/gen_data copy.csv +188 -0
  14. distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible/reg_data.csv +7 -0
  15. distopf-1.1.0.dev5/src/distopf/cli.py +919 -0
  16. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/fbs.py +425 -37
  17. distopf-1.1.0.dev5/src/distopf/pyomo_models/common_constraints.py +830 -0
  18. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/constraints_nlp.py +1 -0
  19. distopf-1.1.0.dev5/src/distopf/pyomo_models/lindist_constraints.py +263 -0
  20. distopf-1.1.0.dev5/src/distopf/pyomo_models/nl_bfm_constraints.py +418 -0
  21. distopf-1.1.0.dev5/src/distopf/pyomo_models/primary_lindist_constraints.py +182 -0
  22. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/results.py +1 -3
  23. distopf-1.1.0.dev5/src/distopf/utils/__init__.py +5 -0
  24. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/utils/results_comparison.py +77 -0
  25. distopf-1.1.0.dev5/src/distopf/utils/topology.py +90 -0
  26. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_case.py +3 -0
  27. distopf-1.1.0.dev5/tests/test_cli.py +744 -0
  28. distopf-1.1.0.dev5/tests/test_exact_replay_and_comparison.py +309 -0
  29. distopf-1.1.0.dev5/tests/test_fbs_replay.py +63 -0
  30. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_results.py +1 -3
  31. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_utilities.py +33 -0
  32. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/uv.lock +89 -36
  33. distopf-1.1.0.dev4/src/distopf/cases/csv/ieee9500_wye/bus_data.csv +0 -5295
  34. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/.github/copilot-instructions.md +0 -0
  35. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/.github/skills/run-opf/SKILL.md +0 -0
  36. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/.github/workflows/lint.yml +0 -0
  37. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/.github/workflows/pypi-publish.yml +0 -0
  38. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/2026-04-21-distopf_2-triplex-agent.md +0 -0
  39. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/DISCLAIMER.md +0 -0
  40. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/LICENSE.md +0 -0
  41. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/column_migration.md +0 -0
  42. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/docs/STYLE_GUIDE.md +0 -0
  43. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/docs/architecture.puml +0 -0
  44. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/TEMPORAL_README.md +0 -0
  45. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/debug_enapp_123.py +0 -0
  46. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/profile_matrix.py +0 -0
  47. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_enapp.py +0 -0
  48. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123.py +0 -0
  49. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123_isolated.py +0 -0
  50. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_123_spatiotemporal.py +0 -0
  51. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_refactor.py +0 -0
  52. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_enapp_tenapp.py +0 -0
  53. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_comparison.py +0 -0
  54. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_quick.py +0 -0
  55. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/run_temporal_tenapp.py +0 -0
  56. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/advanced/temp_test.py +0 -0
  57. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/basics/basic_optimal_power_flow.py +0 -0
  58. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow.py +0 -0
  59. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow_examples.html +0 -0
  60. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/basics/basic_power_flow_examples.py +0 -0
  61. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/control_devices/fbs13.py +0 -0
  62. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/control_devices/reg_cap_example.py +0 -0
  63. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/control_devices/test_regulator_mi.py +0 -0
  64. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/data_import/cim_example.py +0 -0
  65. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/data_import/compare_cim_case.py +0 -0
  66. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/data_import/dss_converter_test.py +0 -0
  67. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/data_import/dss_examples.py +0 -0
  68. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/data_import/dss_test_loss.py +0 -0
  69. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/data_import/dss_test_results.txt +0 -0
  70. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/notebooks/adding_generators.ipynb +0 -0
  71. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/notebooks/adding_generators.py +0 -0
  72. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/notebooks/basic_power_flow_examples.ipynb +0 -0
  73. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/notebooks/build_your_own_opf.ipynb +0 -0
  74. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/notebooks/distopf_pesgm2026_tutorial.ipynb +0 -0
  75. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/optimization/extract_duals.py +0 -0
  76. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/optimization/penalties.py +0 -0
  77. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/optimization/penalty_example.py +0 -0
  78. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/optimization/thermal_limits.py +0 -0
  79. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/build_your_own_opf.py +0 -0
  80. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/build_your_own_opf_static.py +0 -0
  81. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/nlp.py +0 -0
  82. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_dss_example.py +0 -0
  83. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_mi.py +0 -0
  84. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_multiperiod.py +0 -0
  85. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_nlp_123_comparison.py +0 -0
  86. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_nlp_13_comparison.py +0 -0
  87. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_regulator_control.py +0 -0
  88. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_tests.py +0 -0
  89. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/pyomo/pyomo_time_comparison.py +0 -0
  90. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/01_simple_power_flow.py +0 -0
  91. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/02_loss_minimization.py +0 -0
  92. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/03_voltage_optimization.py +0 -0
  93. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/04_comparing_wrappers.py +0 -0
  94. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/05_control_strategies.py +0 -0
  95. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/06_visualization_gallery.py +0 -0
  96. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/07_quick_start.py +0 -0
  97. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/08_reactive_power_importance.py +0 -0
  98. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/09_optimization_tradeoffs.py +0 -0
  99. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/10_working_with_results.py +0 -0
  100. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/examples/tutorials/11_fbs_power_flow.py +0 -0
  101. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/api.py +0 -0
  102. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/__init__.py +0 -0
  103. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/cim/IEEE123_PV.xml +0 -0
  104. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/cim/IEEE13.xml +0 -0
  105. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/battery_data.csv +0 -0
  106. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/branch_data.csv +0 -0
  107. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/bus_data.csv +0 -0
  108. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/cap_data.csv +0 -0
  109. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/default_loadshape.csv +0 -0
  110. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/gen_data.csv +0 -0
  111. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/pv_loadshape.csv +0 -0
  112. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/2Bus-1ph-batt/reg_data.csv +0 -0
  113. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/battery_data.csv +0 -0
  114. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/branch_data.csv +0 -0
  115. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/bus_data.csv +0 -0
  116. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/cap_data.csv +0 -0
  117. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/default_loadshape.csv +0 -0
  118. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/gen_data.csv +0 -0
  119. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/pv_loadshape.csv +0 -0
  120. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/3Bus-1ph-batt/reg_data.csv +0 -0
  121. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/branch_data.csv +0 -0
  122. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/bus_data.csv +0 -0
  123. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/cap_data.csv +0 -0
  124. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/gen_data.csv +0 -0
  125. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss/reg_data.csv +0 -0
  126. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/battery_data.csv +0 -0
  127. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/branch_data.csv +0 -0
  128. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/bus_data.csv +0 -0
  129. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/cap_data.csv +0 -0
  130. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/default_loadshape.csv +0 -0
  131. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/gen_data.csv +0 -0
  132. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/pv_loadshape.csv +0 -0
  133. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/4Bus-YY-Bal_dss_batt/reg_data.csv +0 -0
  134. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/branch_data.csv +0 -0
  135. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/bus_data.csv +0 -0
  136. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/cap_data.csv +0 -0
  137. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/gen_data.csv +0 -0
  138. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500/reg_data.csv +0 -0
  139. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/branch_data.csv +0 -0
  140. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/bus_data.csv +0 -0
  141. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/cap_data.csv +0 -0
  142. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/gen_data.csv +0 -0
  143. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/9500-primary-network/reg_data.csv +0 -0
  144. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/branch_data.csv +0 -0
  145. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/bus_data.csv +0 -0
  146. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/cap_data.csv +0 -0
  147. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/gen_data.csv +0 -0
  148. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123/reg_data.csv +0 -0
  149. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/bat_data.csv +0 -0
  150. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/branch_data.csv +0 -0
  151. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/bus_data.csv +0 -0
  152. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/cap_data.csv +0 -0
  153. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/default_loadshape.csv +0 -0
  154. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/gen_data.csv +0 -0
  155. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/pv_loadshape.csv +0 -0
  156. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/reg_data.csv +0 -0
  157. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_30der/schedules.csv +0 -0
  158. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/battery_data.csv +0 -0
  159. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/branch_data.csv +0 -0
  160. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/bus_data.csv +0 -0
  161. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/cap_data.csv +0 -0
  162. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/default_loadshape.csv +0 -0
  163. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/gen_data.csv +0 -0
  164. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/pv_loadshape.csv +0 -0
  165. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_alternate/reg_data.csv +0 -0
  166. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/bat_data.csv +0 -0
  167. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/battery_data_v1.csv +0 -0
  168. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/branch_data.csv +0 -0
  169. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/bus_data.csv +0 -0
  170. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/cap_data.csv +0 -0
  171. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/gen_data.csv +0 -0
  172. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/reg_data.csv +0 -0
  173. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee123_bat/schedules.csv +0 -0
  174. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/branch_data.csv +0 -0
  175. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/bus_data.csv +0 -0
  176. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/cap_data.csv +0 -0
  177. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/gen_data.csv +0 -0
  178. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13/reg_data.csv +0 -0
  179. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/battery_data.csv +0 -0
  180. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/branch_data.csv +0 -0
  181. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/bus_data.csv +0 -0
  182. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/cap_data.csv +0 -0
  183. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/default_loadshape.csv +0 -0
  184. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/gen_data.csv +0 -0
  185. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/pv_loadshape.csv +0 -0
  186. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee13_battery/reg_data.csv +0 -0
  187. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/bat_data.csv +0 -0
  188. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/branch_data.csv +0 -0
  189. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/bus_data.csv +0 -0
  190. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/gen_data.csv +0 -0
  191. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee33/schedules.csv +0 -0
  192. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/branch_data.csv +0 -0
  193. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/bus_data.csv +0 -0
  194. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/cap_data.csv +0 -0
  195. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/gen_data.csv +0 -0
  196. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee34/reg_data.csv +0 -0
  197. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/branch_data.csv +0 -0
  198. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/bus_data.csv +0 -0
  199. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/cap_data.csv +0 -0
  200. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/gen_data.csv +0 -0
  201. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/ieee9500/reg_data.csv +0 -0
  202. {distopf-1.1.0.dev4/src/distopf/cases/csv/ieee9500_wye → distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible}/branch_data.csv +0 -0
  203. {distopf-1.1.0.dev4/src/distopf/cases/csv/ieee9500_wye → distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible}/cap_data.csv +0 -0
  204. {distopf-1.1.0.dev4/src/distopf/cases/csv/ieee9500_wye → distopf-1.1.0.dev5/src/distopf/cases/csv/ieee9500_feasible}/gen_data.csv +0 -0
  205. /distopf-1.1.0.dev4/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
  206. /distopf-1.1.0.dev4/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
  207. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/branch_data.csv +0 -0
  208. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/bus_data.csv +0 -0
  209. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/cap_data.csv +0 -0
  210. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/gen_data.csv +0 -0
  211. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/minimal_triplex/reg_data.csv +0 -0
  212. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/branch_data.csv +0 -0
  213. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/bus_data.csv +0 -0
  214. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/cap_data.csv +0 -0
  215. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/gen_data.csv +0 -0
  216. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/smartds_small/reg_data.csv +0 -0
  217. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/branch_data.csv +0 -0
  218. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/bus_data.csv +0 -0
  219. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/cap_data.csv +0 -0
  220. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/gen_data.csv +0 -0
  221. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_3ph/reg_data.csv +0 -0
  222. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/branch_data.csv +0 -0
  223. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/bus_data.csv +0 -0
  224. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/cap_data.csv +0 -0
  225. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/gen_data.csv +0 -0
  226. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/csv/triplex_pv/reg_data.csv +0 -0
  227. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2Bus/2Bus.DSS +0 -0
  228. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2BusD/2Bus.DSS +0 -0
  229. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/2Bus_1phase/2Bus1ph.DSS +0 -0
  230. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/IEEE34_BusXY.csv +0 -0
  231. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/IEEELineCodes.dss +0 -0
  232. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/Run_IEEE34Mod1.dss +0 -0
  233. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/Run_IEEE34Mod2.dss +0 -0
  234. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_Curr_Elem.txt +0 -0
  235. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_Power_elem_kVA.txt +0 -0
  236. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_RegTaps.txt +0 -0
  237. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34-2_VLN_Node.txt +0 -0
  238. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34Mod1.dss +0 -0
  239. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/ieee34Mod2.dss +0 -0
  240. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/34Bus/nmsu_linecode2_ABC.txt +0 -0
  241. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/3Bus/3Bus.DSS +0 -0
  242. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4Bus-DY-Bal.DSS +0 -0
  243. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_Curr_Elem.Txt +0 -0
  244. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_Power_elem_kVA.txt +0 -0
  245. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_VLL_Node.Txt +0 -0
  246. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-DY-Bal/4busDYBal_VLN_Node.Txt +0 -0
  247. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4Bus-GrdYD-Bal.DSS +0 -0
  248. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4busYDBal_Losses.Txt +0 -0
  249. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-GrdYD-Bal/4busYDBal_VLN_Node.Txt +0 -0
  250. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-OYOD-Bal/4Bus-OYOD-Bal.DSS +0 -0
  251. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-OYOD-UnBal/4bus-OYOD-UnBal.dss +0 -0
  252. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YD-Bal/4Bus-YD-Bal.DSS +0 -0
  253. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YY-Bal/4Bus-YY-Bal.DSS +0 -0
  254. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YYD/Three Winding Transformer Test System-EPRI-2017-Rev4.docx +0 -0
  255. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4Bus-YYD/YYD-Master.DSS +0 -0
  256. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Expanded4WireDelta.pdf +0 -0
  257. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wireIndMotor.dss +0 -0
  258. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wire_Lagging.dss +0 -0
  259. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/4wire-Delta/Kersting4wire_Leading.dss +0 -0
  260. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/BalancedLoads.dss +0 -0
  261. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/BusCoords.dss +0 -0
  262. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/CableData.dss +0 -0
  263. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/CapControls.dss +0 -0
  264. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Capacitors.dss +0 -0
  265. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/DSSViewIntercom.Txt +0 -0
  266. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/EnergyStorage.dss +0 -0
  267. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Generators.dss +0 -0
  268. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LatLongCoords.dss +0 -0
  269. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LineCodes.dss +0 -0
  270. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LineGeometry.dss +0 -0
  271. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LinesSwitchesGeometry.dss +0 -0
  272. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LinesSwitchesLineCodes.dss +0 -0
  273. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/LoadXfmrCodes.dss +0 -0
  274. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Loads_primary.dss +0 -0
  275. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Master-unbal-initial-config.dss +0 -0
  276. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Master.dss +0 -0
  277. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PVSystems_primary.dss +0 -0
  278. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PV_10pen_DSSPV.dss +0 -0
  279. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/PV_NN_100_DSSPV.dss +0 -0
  280. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/README.md +0 -0
  281. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Regulators.dss +0 -0
  282. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/Transformers.dss +0 -0
  283. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/TriplexLineCodes.dss +0 -0
  284. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/TriplexLines.dss +0 -0
  285. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/UnbalancedLoads.dss +0 -0
  286. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/WireData.dss +0 -0
  287. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/bus_info_temp.json +0 -0
  288. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/desktop.ini +0 -0
  289. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Daisy.DSV +0 -0
  290. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Daisy.dbl +0 -0
  291. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Isolated.Txt +0 -0
  292. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Loops.Txt +0 -0
  293. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_Power_elem_kVA.txt +0 -0
  294. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/final9500node_VLN_Node.Txt +0 -0
  295. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/ieee9500bal.dss +0 -0
  296. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/ieee9500unbal.dss +0 -0
  297. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/9500-primary-network/xfmrs_info_triplex_nodes.json +0 -0
  298. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/BusCoords.dat +0 -0
  299. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/CircuitPlottingScripts.dss +0 -0
  300. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/DSSGraph_Output.CSV +0 -0
  301. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/DSSViewIntercom.Txt +0 -0
  302. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Loads.DSS +0 -0
  303. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Master.dss +0 -0
  304. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEE123Regulators.DSS +0 -0
  305. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/IEEELineCodes.DSS +0 -0
  306. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/P174_Run_SolarRamp.DSS +0 -0
  307. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/P174_Run_VoltageProfile.DSS +0 -0
  308. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/PV5sdata1.csv +0 -0
  309. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/PaperLoadShape.txt +0 -0
  310. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/RevRegTest.dss +0 -0
  311. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/Run_IEEE123Bus.DSS +0 -0
  312. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/Run_YearlySim.dss +0 -0
  313. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SetDailyLoadShape.DSS +0 -0
  314. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp-Mack.DSS +0 -0
  315. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp.DSS +0 -0
  316. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/SolarRamp.csv +0 -0
  317. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/StorageRamp.CSV +0 -0
  318. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/WindRamp.DSS +0 -0
  319. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/WindRampRevRegTest.DSS +0 -0
  320. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Curr_Elem.Txt +0 -0
  321. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Daisy.DSV +0 -0
  322. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Daisy.dbl +0 -0
  323. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_BUSCOORDS.CSV +0 -0
  324. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_ElemPowers.CSV +0 -0
  325. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_LOADS.CSV +0 -0
  326. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_EXP_P_BYPHASE.CSV +0 -0
  327. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Elements.Txt +0 -0
  328. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_GenMeterOut.Txt +0 -0
  329. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Loadshape_default.DSV +0 -0
  330. /distopf-1.1.0.dev4/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
  331. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Loops.Txt +0 -0
  332. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Losses.DSV +0 -0
  333. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Losses.dbl +0 -0
  334. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power.DSV +0 -0
  335. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power.dbl +0 -0
  336. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power_elem_kVA.txt +0 -0
  337. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Power_seq_kVA.txt +0 -0
  338. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9998.DSV +0 -0
  339. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9998.dbl +0 -0
  340. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9999.DSV +0 -0
  341. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Profile9999.dbl +0 -0
  342. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_RegTaps.Txt +0 -0
  343. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_VLN.Txt +0 -0
  344. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_VLN_Node.Txt +0 -0
  345. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Voltage.DSV +0 -0
  346. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Voltage.dbl +0 -0
  347. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_PQ.DSV +0 -0
  348. /distopf-1.1.0.dev4/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
  349. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_V.DSV +0 -0
  350. /distopf-1.1.0.dev4/src/distopf/distributed/spatial/__init__.py → /distopf-1.1.0.dev5/src/distopf/cases/dss/ieee123_dss/ieee123_Vsource_source_V.dbl +0 -0
  351. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/DSSViewIntercom.Txt +0 -0
  352. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Node_BusXY.csv +0 -0
  353. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt.dss +0 -0
  354. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_EXP_ElemPowers.CSV +0 -0
  355. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power.DSV +0 -0
  356. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power.dbl +0 -0
  357. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEE13Nodeckt_Power_elem_kVA.txt +0 -0
  358. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/IEEELineCodes.dss +0 -0
  359. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/branch_data.csv +0 -0
  360. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/bus_data.csv +0 -0
  361. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/cap_data.csv +0 -0
  362. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee13_dss/parsedcsvs/IEEE13buscsvs/gen_data.csv +0 -0
  363. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/BalancedLoads.dss +0 -0
  364. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/BusCoords.dss +0 -0
  365. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/CableData.dss +0 -0
  366. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/CapControls.dss +0 -0
  367. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Capacitors.dss +0 -0
  368. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/DSSViewIntercom.Txt +0 -0
  369. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/EnergyStorage.dss +0 -0
  370. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Generators.dss +0 -0
  371. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LatLongCoords.dss +0 -0
  372. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineCodes.dss +0 -0
  373. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineConstantsCode.DSS +0 -0
  374. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LineGeometry.dss +0 -0
  375. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LinesSwitchesGeometry.dss +0 -0
  376. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LinesSwitchesLineCodes.dss +0 -0
  377. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/LoadXfmrCodes.dss +0 -0
  378. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Master-bal-initial-config.dss +0 -0
  379. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Master-unbal-initial-config.dss +0 -0
  380. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/PV_10pen_DSSPV.dss +0 -0
  381. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/PV_NN_100_DSSPV.dss +0 -0
  382. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/README.md +0 -0
  383. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Regulators.dss +0 -0
  384. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Elements.Txt +0 -0
  385. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_LineConstants.txt +0 -0
  386. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Mon_mon1_1.csv +0 -0
  387. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power.DSV +0 -0
  388. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power.dbl +0 -0
  389. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Test9500new_Power_elem_kVA.txt +0 -0
  390. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/Transformers.dss +0 -0
  391. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/TriplexLineCodes.dss +0 -0
  392. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/TriplexLines.dss +0 -0
  393. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/UnbalancedLoads.dss +0 -0
  394. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_dss/WireData.dss +0 -0
  395. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/BalancedLoads.dss +0 -0
  396. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/BusCoords.dss +0 -0
  397. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/CableData.dss +0 -0
  398. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/CapControls.dss +0 -0
  399. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Capacitors.dss +0 -0
  400. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/DSSViewIntercom.Txt +0 -0
  401. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/EnergyStorage.dss +0 -0
  402. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Generators.dss +0 -0
  403. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LatLongCoords.dss +0 -0
  404. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineCodes.dss +0 -0
  405. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineConstantsCode.DSS +0 -0
  406. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LineGeometry.dss +0 -0
  407. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LinesSwitchesGeometry.dss +0 -0
  408. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LinesSwitchesLineCodes.dss +0 -0
  409. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/LoadXfmrCodes.dss +0 -0
  410. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Master-bal-initial-config.dss +0 -0
  411. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Master-unbal-initial-config.dss +0 -0
  412. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/PV_10pen_DSSPV.dss +0 -0
  413. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/PV_NN_100_DSSPV.dss +0 -0
  414. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/README.md +0 -0
  415. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Regulators.dss +0 -0
  416. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Elements.Txt +0 -0
  417. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_LineConstants.txt +0 -0
  418. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Mon_mon1_1.csv +0 -0
  419. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power.DSV +0 -0
  420. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power.dbl +0 -0
  421. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Test9500new_Power_elem_kVA.txt +0 -0
  422. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/Transformers.dss +0 -0
  423. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/TriplexLineCodes.dss +0 -0
  424. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/TriplexLines.dss +0 -0
  425. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/UnbalancedLoads.dss +0 -0
  426. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/ieee9500_wye/WireData.dss +0 -0
  427. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/minimal_triplex/minimal_triplex.dss +0 -0
  428. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/Line.txt +0 -0
  429. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/Load.txt +0 -0
  430. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/MyLineCodes.txt +0 -0
  431. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/rahul123/ieee123master_base.dss +0 -0
  432. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Buscoords.dss +0 -0
  433. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Intermediates.txt +0 -0
  434. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/LineCodes.dss +0 -0
  435. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Lines.dss +0 -0
  436. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/LoadShapes.dss +0 -0
  437. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Loads.dss +0 -0
  438. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Master.dss +0 -0
  439. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/PVSystems.dss +0 -0
  440. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/SMART-DS_version.txt +0 -0
  441. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/Transformers.dss +0 -0
  442. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/Summary_data.csv +0 -0
  443. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/blown_fuses.csv +0 -0
  444. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/de-energized_nodes.csv +0 -0
  445. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_line_overloads.csv +0 -0
  446. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_over_voltages.csv +0 -0
  447. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_transformer_overloads.csv +0 -0
  448. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_under_voltages.csv +0 -0
  449. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/peak_voltages.csv +0 -0
  450. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/pu_voltages_histogram.png +0 -0
  451. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/opendss/analysis/pu_voltages_percentiles.png +0 -0
  452. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_15_180.csv +0 -0
  453. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_15_225.csv +0 -0
  454. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_25_180.csv +0 -0
  455. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_25_225.csv +0 -0
  456. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_25_90.csv +0 -0
  457. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/SFO_37.7452_-122.4074_35_135.csv +0 -0
  458. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_16017_pu.csv +0 -0
  459. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_17146_pu.csv +0 -0
  460. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_17950_pu.csv +0 -0
  461. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_1835_pu.csv +0 -0
  462. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_19648_pu.csv +0 -0
  463. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_19955_pu.csv +0 -0
  464. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_20964_pu.csv +0 -0
  465. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_22499_pu.csv +0 -0
  466. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_22635_pu.csv +0 -0
  467. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_2581_pu.csv +0 -0
  468. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29069_pu.csv +0 -0
  469. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29376_pu.csv +0 -0
  470. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_29596_pu.csv +0 -0
  471. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_31655_pu.csv +0 -0
  472. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_31818_pu.csv +0 -0
  473. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_32244_pu.csv +0 -0
  474. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_33164_pu.csv +0 -0
  475. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_33792_pu.csv +0 -0
  476. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_8445_pu.csv +0 -0
  477. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kvar_8470_pu.csv +0 -0
  478. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_16017_pu.csv +0 -0
  479. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_17146_pu.csv +0 -0
  480. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_17950_pu.csv +0 -0
  481. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_1835_pu.csv +0 -0
  482. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_19648_pu.csv +0 -0
  483. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_19955_pu.csv +0 -0
  484. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_20964_pu.csv +0 -0
  485. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_22499_pu.csv +0 -0
  486. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_22635_pu.csv +0 -0
  487. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_2581_pu.csv +0 -0
  488. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29069_pu.csv +0 -0
  489. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29376_pu.csv +0 -0
  490. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_29596_pu.csv +0 -0
  491. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_31655_pu.csv +0 -0
  492. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_31818_pu.csv +0 -0
  493. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_32244_pu.csv +0 -0
  494. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_33164_pu.csv +0 -0
  495. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_33792_pu.csv +0 -0
  496. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_8445_pu.csv +0 -0
  497. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/com_kw_8470_pu.csv +0 -0
  498. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_10747_pu.csv +0 -0
  499. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_1077_pu.csv +0 -0
  500. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_13334_pu.csv +0 -0
  501. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_14588_pu.csv +0 -0
  502. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_14705_pu.csv +0 -0
  503. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_3216_pu.csv +0 -0
  504. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_6157_pu.csv +0 -0
  505. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kvar_7380_pu.csv +0 -0
  506. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_10747_pu.csv +0 -0
  507. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_1077_pu.csv +0 -0
  508. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_13334_pu.csv +0 -0
  509. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_14588_pu.csv +0 -0
  510. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_14705_pu.csv +0 -0
  511. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_3216_pu.csv +0 -0
  512. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_6157_pu.csv +0 -0
  513. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/profiles/res_kw_7380_pu.csv +0 -0
  514. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/reactive_ids.json +0 -0
  515. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/real_ids.json +0 -0
  516. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/smartds_small/sensors/voltage_ids.json +0 -0
  517. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line/main.dss +0 -0
  518. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_line/main.dss +0 -0
  519. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_load/main.dss +0 -0
  520. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_line_unbal_load_unbal_line/main.dss +0 -0
  521. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/test_reg/main.dss +0 -0
  522. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/triplex_3ph/triplex_3ph.dss +0 -0
  523. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cases/dss/triplex_pv/triplex_pv.dss +0 -0
  524. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/__init__.py +0 -0
  525. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/cim_to_csv_converter.py +0 -0
  526. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/__init__.py +0 -0
  527. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/base_processor.py +0 -0
  528. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/bus_processor.py +0 -0
  529. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/capacitor_processor.py +0 -0
  530. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/generator_processor.py +0 -0
  531. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/line_processor.py +0 -0
  532. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/regulator_processor.py +0 -0
  533. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/switch_processor.py +0 -0
  534. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/processors/transformer_processor.py +0 -0
  535. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/utils/__init__.py +0 -0
  536. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/utils/phase_utils.py +0 -0
  537. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/validators/__init__.py +0 -0
  538. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/cim_importer/validators/topology_validator.py +0 -0
  539. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/__init__.py +0 -0
  540. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/ADMM_MATH_REPORT.md +0 -0
  541. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/ENAPP_MATH_REPORT.md +0 -0
  542. {distopf-1.1.0.dev4/src/distopf/matrix_models/matrix_bess/spatial_decomposition → distopf-1.1.0.dev5/src/distopf/distributed/spatial}/__init__.py +0 -0
  543. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/admm_agents.py +0 -0
  544. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/boundary.py +0 -0
  545. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/decompose.py +0 -0
  546. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/enapp copy.py +0 -0
  547. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/enapp_agents.py +0 -0
  548. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/execution.py +0 -0
  549. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/messaging.py +0 -0
  550. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/penalties.py +0 -0
  551. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/spatial/schedule.py +0 -0
  552. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/__init__.py +0 -0
  553. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/objectives.py +0 -0
  554. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_1o.py +0 -0
  555. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_admm.py +0 -0
  556. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/tenapp_aprx.py +0 -0
  557. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/distributed/temporal/utils.py +0 -0
  558. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/dss_importer/__init__.py +0 -0
  559. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/dss_importer/dss_to_csv_converter.py +0 -0
  560. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/__init__.py +0 -0
  561. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/base.py +0 -0
  562. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/binary_variable_notes.md +0 -0
  563. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist.py +0 -0
  564. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_capacitor_mi.py +0 -0
  565. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_capacitor_regulator_mi.py +0 -0
  566. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_loads.py +0 -0
  567. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_p_gen.py +0 -0
  568. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_q_gen.py +0 -0
  569. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/lindist_regulator_mi.py +0 -0
  570. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/__init__.py +0 -0
  571. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/base_mp.py +0 -0
  572. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_capacitor_mi_mp.py +0 -0
  573. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_loads_mp.py +0 -0
  574. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/lindist_mp.py +0 -0
  575. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/objectives.py +0 -0
  576. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/pyomo_solver.py +0 -0
  577. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/readme.md +0 -0
  578. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/solvers.py +0 -0
  579. {distopf-1.1.0.dev4/src/distopf/utils → distopf-1.1.0.dev5/src/distopf/matrix_models/matrix_bess/spatial_decomposition}/__init__.py +0 -0
  580. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/spatial_decomposition/decompose.py +0 -0
  581. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/matrix_bess/spatial_decomposition/enapp.py +0 -0
  582. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/objectives.py +0 -0
  583. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/matrix_models/solvers.py +0 -0
  584. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/plot.py +0 -0
  585. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/__init__.py +0 -0
  586. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/constraints.py +0 -0
  587. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/factories.py +0 -0
  588. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/lindist.py +0 -0
  589. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/nl_branchflow.py +0 -0
  590. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/nl_branchflow_prebuilt.py +0 -0
  591. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/objectives.py +0 -0
  592. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/protocol.py +0 -0
  593. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/results.py +0 -0
  594. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/slack_constraints.py +0 -0
  595. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/pyomo_models/solvers.py +0 -0
  596. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/utils/call_recorder.py +0 -0
  597. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/utils/input_handlers.py +0 -0
  598. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/utils/kcl_check.py +0 -0
  599. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/utils/ngon.py +0 -0
  600. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/utils/query_interface.py +0 -0
  601. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/validators.py +0 -0
  602. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/wrappers/__init__.py +0 -0
  603. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/wrappers/base.py +0 -0
  604. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/wrappers/matrix_bess_wrapper.py +0 -0
  605. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/wrappers/matrix_wrapper.py +0 -0
  606. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/src/distopf/wrappers/pyomo_wrapper.py +0 -0
  607. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/__init__.py +0 -0
  608. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/conftest.py +0 -0
  609. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/data/IEEE13.xml +0 -0
  610. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/branch_data.csv +0 -0
  611. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/bus_data.csv +0 -0
  612. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/cap_data.csv +0 -0
  613. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/gen_data.csv +0 -0
  614. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/data/ieee13/reg_data.csv +0 -0
  615. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/integration/__init__.py +0 -0
  616. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/integration/test_full_conversion.py +0 -0
  617. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/integration/test_impedance_comparison.py +0 -0
  618. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/__init__.py +0 -0
  619. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_cim_to_csv_helpser.py +0 -0
  620. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_cim_to_csv_linking.py +0 -0
  621. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_converter_run.py +0 -0
  622. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_phase_utils.py +0 -0
  623. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_processors.py +0 -0
  624. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_reg_transformer_small.py +0 -0
  625. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_regulator_impedances.py +0 -0
  626. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_topology_validator.py +0 -0
  627. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/cim_converter/unit/test_transformer_tank_impedances.py +0 -0
  628. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/__init__.py +0 -0
  629. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/integration/__init__.py +0 -0
  630. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/integration/test_dss_converter_integration.py +0 -0
  631. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/integration/test_triplex_lindist.py +0 -0
  632. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/unit/__init__.py +0 -0
  633. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_dss_converter.py +0 -0
  634. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_transformer.py +0 -0
  635. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_triplex_converter.py +0 -0
  636. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/dss_converter/unit/test_triplex_pv.py +0 -0
  637. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/integration_references.json +0 -0
  638. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/pyomo_models/test_dual_extraction.py +0 -0
  639. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/pyomo_models/test_pyomo_lindist.py +0 -0
  640. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_admm_agents.py +0 -0
  641. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_backends.py +0 -0
  642. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_distributed_api.py +0 -0
  643. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_enapp_integration.py +0 -0
  644. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_exports.py +0 -0
  645. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_integration_snapshots.py +0 -0
  646. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_matrix_models.py +0 -0
  647. {distopf-1.1.0.dev4 → distopf-1.1.0.dev5}/tests/test_nlp_backend.py +0 -0
  648. {distopf-1.1.0.dev4 → 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.dev4
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 = {
@@ -134,7 +137,7 @@ result = case.run_enapp(
134
137
 
135
138
  Set `parallel=True` to solve the independent area subproblems with multiprocessing. The coordination iterations themselves remain sequential: each iteration waits for all area solves before exchanging boundary messages. Use `parallel=False` for serial execution or when debugging.
136
139
 
137
- 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:1140):
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):
138
141
 
139
142
  ```python
140
143
  result.save("results/ieee13-enapp")
@@ -143,6 +146,42 @@ replayed = opf.replay("results/ieee13-enapp/run_config.json")
143
146
 
144
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.
145
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`.
184
+
146
185
 
147
186
 
148
187
  ## Optimization Wrappers
@@ -231,12 +270,14 @@ result = case.run_opf(wrapper="matrix_bess", objective="loss")
231
270
  ```
232
271
 
233
272
  #### Wrapper Comparison
234
- | Feature | Matrix/Matrix BESS | Pyomo |
235
- |---------|---|---|
236
- | Model Type | LinDistFlow (linear) | LinDistFlow, BranchFlow, or SOCP-relaxed BranchFlow |
237
- | Formulation | Matrix-based | Algebraic equations |
238
- | Solver API | Scipy or CVXPY | Pyomo |
239
- | 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.
240
281
 
241
282
  #### Solver Requirements
242
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.
@@ -247,11 +288,11 @@ DistOPF supports multiple optimization objectives for distribution system OPF:
247
288
 
248
289
  | Objective | String | Supported Wrappers | Description |
249
290
  |-----------|--------|-------------------|-------------|
250
- | **Loss Minimization** | `"loss"`, `"loss_min"` | All | Minimize distribution losses (most common) |
251
- | **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 |
252
293
  | **Voltage Deviation** | `"voltage_deviation"` | Pyomo | Minimize deviations from nominal voltage (1.0 p.u.) |
253
- | **Generation Curtailment** | `"curtail"`, `"curtail_min"`, `"curtailment"` | Pyomo | Minimize DER curtailment |
254
- | **Cost Minimization** | `"cost"`, `"cost_min"` | Pyomo (LinDistFlow, BranchFlow, SOCP) | 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 |
255
296
 
256
297
  #### Cost Minimization with Price Data
257
298
 
@@ -261,10 +302,10 @@ To use cost minimization, add an hourly `price` column to the case schedules (in
261
302
  import pandas as pd
262
303
  import distopf as opf
263
304
 
264
- case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der")
305
+ case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der", n_steps=24)
265
306
 
266
307
  # Add hourly electricity prices
267
- 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,
268
309
  68, 65, 62, 58, 55, 60, 75, 82, 78, 65, 50, 42]
269
310
 
270
311
  # Run OPF minimizing energy cost
@@ -274,10 +315,15 @@ print(f"Total energy cost: ${result.objective_value:.2f}")
274
315
 
275
316
  ### Result Fields
276
317
 
277
- `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.
278
323
 
279
324
  | Field Name | Alias |
280
325
  |---|---|
326
+ | `voltages` | — |
281
327
  | `active_power_flows` | `p_flows` |
282
328
  | `reactive_power_flows` | `q_flows` |
283
329
  | `active_power_generation` | `p_gens` |
@@ -286,19 +332,25 @@ print(f"Total energy cost: ${result.objective_value:.2f}")
286
332
  | `reactive_power_loads` | `q_loads` |
287
333
  | `capacitor_reactive_power` | `q_caps` |
288
334
  | `battery_active_power` | `p_bats` |
289
- | `voltage_magnitudes` | `voltages` |
335
+ | `battery_reactive_power` | `q_bats` |
336
+
337
+ #### Plotting and Dual Variables
290
338
 
291
- #### Dual Variables
292
- 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:
293
342
 
294
343
  ```python
295
344
  result = case.run_opf(wrapper="pyomo", objective="loss", duals=True)
296
345
  result.dual_power_balance_p
297
346
  result.dual_power_balance_q
298
347
  result.dual_voltage_drop
299
- result.dual_voltage_limits
348
+ result.dual_voltage_limits_lower
349
+ result.dual_voltage_limits_upper
300
350
  ```
301
351
 
352
+ Dual extraction is Pyomo-only; matrix and FBS results do not populate these fields.
353
+
302
354
  ## Using a custom model.
303
355
  Create CSVs formatted as shown below and store them in a single folder. The csv names must match exactly as shown.
304
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 = {
@@ -110,7 +111,7 @@ result = case.run_enapp(
110
111
 
111
112
  Set `parallel=True` to solve the independent area subproblems with multiprocessing. The coordination iterations themselves remain sequential: each iteration waits for all area solves before exchanging boundary messages. Use `parallel=False` for serial execution or when debugging.
112
113
 
113
- 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:1140):
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):
114
115
 
115
116
  ```python
116
117
  result.save("results/ieee13-enapp")
@@ -119,6 +120,42 @@ replayed = opf.replay("results/ieee13-enapp/run_config.json")
119
120
 
120
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.
121
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`.
158
+
122
159
 
123
160
 
124
161
  ## Optimization Wrappers
@@ -207,12 +244,14 @@ result = case.run_opf(wrapper="matrix_bess", objective="loss")
207
244
  ```
208
245
 
209
246
  #### Wrapper Comparison
210
- | Feature | Matrix/Matrix BESS | Pyomo |
211
- |---------|---|---|
212
- | Model Type | LinDistFlow (linear) | LinDistFlow, BranchFlow, or SOCP-relaxed BranchFlow |
213
- | Formulation | Matrix-based | Algebraic equations |
214
- | Solver API | Scipy or CVXPY | Pyomo |
215
- | 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.
216
255
 
217
256
  #### Solver Requirements
218
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.
@@ -223,11 +262,11 @@ DistOPF supports multiple optimization objectives for distribution system OPF:
223
262
 
224
263
  | Objective | String | Supported Wrappers | Description |
225
264
  |-----------|--------|-------------------|-------------|
226
- | **Loss Minimization** | `"loss"`, `"loss_min"` | All | Minimize distribution losses (most common) |
227
- | **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 |
228
267
  | **Voltage Deviation** | `"voltage_deviation"` | Pyomo | Minimize deviations from nominal voltage (1.0 p.u.) |
229
- | **Generation Curtailment** | `"curtail"`, `"curtail_min"`, `"curtailment"` | Pyomo | Minimize DER curtailment |
230
- | **Cost Minimization** | `"cost"`, `"cost_min"` | Pyomo (LinDistFlow, BranchFlow, SOCP) | 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 |
231
270
 
232
271
  #### Cost Minimization with Price Data
233
272
 
@@ -237,10 +276,10 @@ To use cost minimization, add an hourly `price` column to the case schedules (in
237
276
  import pandas as pd
238
277
  import distopf as opf
239
278
 
240
- case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der")
279
+ case = opf.create_case(opf.CASES_DIR / "csv" / "ieee123_30der", n_steps=24)
241
280
 
242
281
  # Add hourly electricity prices
243
- 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,
244
283
  68, 65, 62, 58, 55, 60, 75, 82, 78, 65, 50, 42]
245
284
 
246
285
  # Run OPF minimizing energy cost
@@ -250,10 +289,15 @@ print(f"Total energy cost: ${result.objective_value:.2f}")
250
289
 
251
290
  ### Result Fields
252
291
 
253
- `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.
254
297
 
255
298
  | Field Name | Alias |
256
299
  |---|---|
300
+ | `voltages` | — |
257
301
  | `active_power_flows` | `p_flows` |
258
302
  | `reactive_power_flows` | `q_flows` |
259
303
  | `active_power_generation` | `p_gens` |
@@ -262,19 +306,25 @@ print(f"Total energy cost: ${result.objective_value:.2f}")
262
306
  | `reactive_power_loads` | `q_loads` |
263
307
  | `capacitor_reactive_power` | `q_caps` |
264
308
  | `battery_active_power` | `p_bats` |
265
- | `voltage_magnitudes` | `voltages` |
309
+ | `battery_reactive_power` | `q_bats` |
310
+
311
+ #### Plotting and Dual Variables
266
312
 
267
- #### Dual Variables
268
- 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:
269
316
 
270
317
  ```python
271
318
  result = case.run_opf(wrapper="pyomo", objective="loss", duals=True)
272
319
  result.dual_power_balance_p
273
320
  result.dual_power_balance_q
274
321
  result.dual_voltage_drop
275
- result.dual_voltage_limits
322
+ result.dual_voltage_limits_lower
323
+ result.dual_voltage_limits_upper
276
324
  ```
277
325
 
326
+ Dual extraction is Pyomo-only; matrix and FBS results do not populate these fields.
327
+
278
328
  ## Using a custom model.
279
329
  Create CSVs formatted as shown below and store them in a single folder. The csv names must match exactly as shown.
280
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 = []
@@ -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 = []
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "distopf"
3
- version = "1.1.0.dev4"
3
+ version = "1.1.0.dev5"
4
4
  description = "A package for solving unbalanced three-phase distribution system optimal power flow problems."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -21,6 +21,8 @@ dependencies = [
21
21
  "altdss[all]>=0.2.4",
22
22
  "pyscipopt>=6.0.0",
23
23
  "highspy>=1.13.0",
24
+ "rich-click>=1.9.9",
25
+ "tomli>=2.0.1; python_version < '3.11'",
24
26
  ]
25
27
 
26
28
  [project.optional-dependencies]
@@ -53,6 +55,8 @@ gurobi = [
53
55
  "gurobipy>=13.0.2",
54
56
  ]
55
57
 
58
+ [project.scripts]
59
+ distopf = "distopf.cli:distopf"
56
60
 
57
61
  [tool.mypy]
58
62
  [[tool.mypy.overrides]]
@@ -40,7 +40,12 @@ logger.addHandler(_logging.NullHandler())
40
40
  from distopf.cases import CASES_DIR
41
41
  from distopf.api import Case, create_case, replay
42
42
  from distopf.results import PowerFlowResult
43
- from distopf.fbs import run_fbs_with_opf_setpoints
43
+ from distopf.fbs import (
44
+ replay_exact_power_flow,
45
+ replay_exact_power_flow_from_opf_result,
46
+ run_fbs_from_saved_results,
47
+ run_fbs_with_opf_setpoints,
48
+ )
44
49
 
45
50
  # =============================================================================
46
51
  # Matrix models and solvers - loaded eagerly as they're commonly used
@@ -85,6 +90,7 @@ from distopf.plot import (
85
90
  from distopf.wrappers.matrix_wrapper import create_model, auto_solve
86
91
  from distopf.fbs import fbs_solve, FBS
87
92
 
93
+ from distopf.utils.results_comparison import compare_voltage_results, compare_voltage_tables
88
94
  from distopf.utils.input_handlers import (
89
95
  get,
90
96
  handle_bus_input,
@@ -141,6 +147,9 @@ __all__ = [
141
147
  "replay",
142
148
  # Result containers
143
149
  "PowerFlowResult",
150
+ "replay_exact_power_flow",
151
+ "replay_exact_power_flow_from_opf_result",
152
+ "run_fbs_from_saved_results",
144
153
  "run_fbs_with_opf_setpoints",
145
154
  # Power flow solver
146
155
  "fbs_solve",
@@ -164,6 +173,8 @@ __all__ = [
164
173
  "cp_obj_curtail",
165
174
  "cp_obj_curtail_lp",
166
175
  "cp_obj_none",
176
+ "compare_voltage_results",
177
+ "compare_voltage_tables",
167
178
  "plot_network",
168
179
  "plot_voltages",
169
180
  "plot_power_flows",