grid-data-models 2.3.7__tar.gz → 2.4.0__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 (165) hide show
  1. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/PKG-INFO +15 -7
  2. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/README.md +8 -1
  3. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/pyproject.toml +5 -4
  4. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/cli/reducer.py +2 -2
  5. grid_data_models-2.4.0/src/gdm/distribution/__init__.py +44 -0
  6. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/inspection/inspector.py +1 -1
  7. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/inspection/relationships.py +1 -1
  8. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/inspection/topology.py +1 -1
  9. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/knowledge/documentation.py +2 -3
  10. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/operations/merger.py +1 -1
  11. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/operations/splitter.py +2 -2
  12. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/server.py +49 -33
  13. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/utilities/subsystem.py +2 -2
  14. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/utilities/timeseries.py +1 -1
  15. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/validation/auto_fixer.py +1 -1
  16. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/validation/diagnostics.py +1 -1
  17. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/quantities.py +6 -0
  18. grid_data_models-2.4.0/src/gdm/systems/__init__.py +1 -0
  19. grid_data_models-2.4.0/src/gdm/systems/distribution/__init__.py +13 -0
  20. grid_data_models-2.4.0/src/gdm/systems/distribution/common/__init__.py +4 -0
  21. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/common/limitset.py +1 -1
  22. grid_data_models-2.4.0/src/gdm/systems/distribution/components/__init__.py +31 -0
  23. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/base/distribution_branch_base.py +18 -7
  24. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/base/distribution_component_base.py +2 -2
  25. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/base/distribution_switch_base.py +3 -1
  26. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/base/distribution_transformer_base.py +4 -4
  27. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_battery.py +9 -9
  28. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_bus.py +5 -5
  29. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_capacitor.py +11 -9
  30. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_load.py +7 -7
  31. grid_data_models-2.4.0/src/gdm/systems/distribution/components/distribution_reactor.py +48 -0
  32. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_regulator.py +9 -7
  33. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_solar.py +11 -9
  34. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_substation.py +1 -1
  35. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_transformer.py +6 -6
  36. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_vsource.py +6 -6
  37. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/geometry_branch.py +8 -8
  38. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/geometry_switch.py +9 -9
  39. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/matrix_impedance_branch.py +8 -6
  40. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/matrix_impedance_fuse.py +10 -6
  41. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/matrix_impedance_recloser.py +9 -7
  42. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/matrix_impedance_switch.py +8 -6
  43. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/sequence_impedance_branch.py +8 -6
  44. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/controllers/__init__.py +8 -6
  45. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/controllers/distribution_capacitor_controller.py +3 -1
  46. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/controllers/distribution_inverter_controller.py +4 -4
  47. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/controllers/distribution_recloser_controller.py +4 -2
  48. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/controllers/distribution_regulator_controller.py +2 -2
  49. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/distribution_graph.py +1 -1
  50. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/distribution_system.py +195 -45
  51. grid_data_models-2.4.0/src/gdm/systems/distribution/equipment/__init__.py +57 -0
  52. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/base/matrix_impedance_branch_equipment_base.py +1 -1
  53. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/battery_equipment.py +1 -1
  54. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/capacitor_equipment.py +2 -2
  55. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/concentric_cable_equipment.py +1 -1
  56. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/distribution_transformer_equipment.py +2 -2
  57. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/geometry_branch_equipment.py +4 -4
  58. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/inverter_equipment.py +1 -1
  59. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/load_equipment.py +2 -2
  60. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/matrix_impedance_branch_equipment.py +2 -2
  61. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/matrix_impedance_fuse_equipment.py +3 -3
  62. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/matrix_impedance_recloser_equipment.py +2 -2
  63. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/matrix_impedance_switch_equipment.py +3 -3
  64. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/phase_voltagesource_equipment.py +1 -1
  65. grid_data_models-2.4.0/src/gdm/systems/distribution/equipment/power_transformer_equipment.py +82 -0
  66. grid_data_models-2.4.0/src/gdm/systems/distribution/equipment/reactor_equipment.py +38 -0
  67. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/solar_equipment.py +2 -2
  68. grid_data_models-2.4.0/src/gdm/systems/distribution/equipment/station_switch_equipment.py +38 -0
  69. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/voltagesource_equipment.py +3 -1
  70. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/market/__init__.py +1 -1
  71. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/market/aggregator.py +5 -5
  72. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/market/tariff.py +1 -1
  73. grid_data_models-2.4.0/src/gdm/systems/distribution/model_reduction/__init__.py +4 -0
  74. grid_data_models-2.4.0/src/gdm/systems/distribution/model_reduction/reducer.py +713 -0
  75. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/sys_functools.py +156 -79
  76. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_3_2__to__2_3_3.py +6 -2
  77. grid_data_models-2.4.0/src/gdm/systems/distribution/upgrade_handler/from__2_3_7__to__2_3_8.py +15 -0
  78. grid_data_models-2.4.0/src/gdm/systems/distribution/upgrade_handler/from__2_3_8__to__2_4_0.py +9 -0
  79. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/upgrade_handler.py +26 -14
  80. grid_data_models-2.4.0/src/gdm/systems/distribution/utils/__init__.py +5 -0
  81. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/utils/aggregate_components.py +5 -5
  82. grid_data_models-2.4.0/src/gdm/systems/substation/__init__.py +167 -0
  83. grid_data_models-2.4.0/src/gdm/systems/substation/automation.py +140 -0
  84. grid_data_models-2.4.0/src/gdm/systems/substation/builder.py +859 -0
  85. grid_data_models-2.4.0/src/gdm/systems/substation/components.py +173 -0
  86. grid_data_models-2.4.0/src/gdm/systems/substation/detailed_reference.py +303 -0
  87. grid_data_models-2.4.0/src/gdm/systems/substation/enums.py +109 -0
  88. grid_data_models-2.4.0/src/gdm/systems/substation/equipment.py +91 -0
  89. grid_data_models-2.4.0/src/gdm/systems/substation/metering.py +90 -0
  90. grid_data_models-2.4.0/src/gdm/systems/substation/models.py +166 -0
  91. grid_data_models-2.4.0/src/gdm/systems/substation/protection.py +138 -0
  92. grid_data_models-2.4.0/src/gdm/systems/substation/reference_designs.py +1097 -0
  93. grid_data_models-2.4.0/src/gdm/systems/substation/renewable.py +251 -0
  94. grid_data_models-2.4.0/src/gdm/systems/substation/substation_system.py +891 -0
  95. grid_data_models-2.4.0/src/gdm/systems/substation/topology.py +167 -0
  96. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/tracked_changes.py +38 -2
  97. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/version.py +1 -1
  98. grid_data_models-2.3.7/src/gdm/dataset/cost_model.py +0 -54
  99. grid_data_models-2.3.7/src/gdm/dataset/dataset_system.py +0 -76
  100. grid_data_models-2.3.7/src/gdm/distribution/__init__.py +0 -12
  101. grid_data_models-2.3.7/src/gdm/distribution/common/__init__.py +0 -4
  102. grid_data_models-2.3.7/src/gdm/distribution/components/__init__.py +0 -24
  103. grid_data_models-2.3.7/src/gdm/distribution/equipment/__init__.py +0 -46
  104. grid_data_models-2.3.7/src/gdm/distribution/model_reduction/__init__.py +0 -2
  105. grid_data_models-2.3.7/src/gdm/distribution/model_reduction/reducer.py +0 -176
  106. grid_data_models-2.3.7/src/gdm/distribution/upgrade_handler/__init__.py +0 -0
  107. grid_data_models-2.3.7/src/gdm/distribution/utils/__init__.py +0 -5
  108. grid_data_models-2.3.7/src/gdm/structural/__init__.py +0 -22
  109. grid_data_models-2.3.7/src/gdm/structural/components/__init__.py +0 -0
  110. grid_data_models-2.3.7/src/gdm/structural/components/base.py +0 -23
  111. grid_data_models-2.3.7/src/gdm/structural/components/building.py +0 -25
  112. grid_data_models-2.3.7/src/gdm/structural/components/overhead_line_segment.py +0 -59
  113. grid_data_models-2.3.7/src/gdm/structural/components/pole.py +0 -187
  114. grid_data_models-2.3.7/src/gdm/structural/components/pvsystem.py +0 -29
  115. grid_data_models-2.3.7/src/gdm/structural/components/transformer.py +0 -81
  116. grid_data_models-2.3.7/src/gdm/structural/components/underground_cable.py +0 -41
  117. grid_data_models-2.3.7/src/gdm/structural/components/underground_junction.py +0 -29
  118. grid_data_models-2.3.7/src/gdm/structural/structural_system.py +0 -11
  119. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/.gitignore +0 -0
  120. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/LICENSE.txt +0 -0
  121. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/__init__.py +0 -0
  122. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/cli/cli.py +0 -0
  123. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/constants.py +0 -0
  124. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/exceptions.py +0 -0
  125. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/hashing_utils.py +0 -0
  126. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/__init__.py +0 -0
  127. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/exceptions.py +0 -0
  128. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/inspection/__init__.py +0 -0
  129. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/knowledge/__init__.py +0 -0
  130. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/operations/__init__.py +0 -0
  131. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/schemas.py +0 -0
  132. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/utilities/__init__.py +0 -0
  133. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/validation/__init__.py +0 -0
  134. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/validation/suggestions.py +0 -0
  135. {grid_data_models-2.3.7 → grid_data_models-2.4.0}/src/gdm/mcp/version.py +0 -0
  136. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/catalog_system.py +0 -0
  137. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/common/curve.py +0 -0
  138. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/common/sequence_pair.py +0 -0
  139. {grid_data_models-2.3.7/src/gdm/dataset → grid_data_models-2.4.0/src/gdm/systems/distribution/components/base}/__init__.py +0 -0
  140. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/components/distribution_feeder.py +0 -0
  141. {grid_data_models-2.3.7/src/gdm/distribution/components → grid_data_models-2.4.0/src/gdm/systems/distribution/controllers}/base/__init__.py +0 -0
  142. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/controllers/base/capacitor_controller_base.py +0 -0
  143. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/controllers/base/inverter_controller_base.py +0 -0
  144. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/controllers/distribution_switch_controller.py +0 -0
  145. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/enums.py +0 -0
  146. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/bare_conductor_equipment.py +0 -0
  147. {grid_data_models-2.3.7/src/gdm/distribution/controllers → grid_data_models-2.4.0/src/gdm/systems/distribution/equipment}/base/__init__.py +0 -0
  148. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/phase_capacitor_equipment.py +0 -0
  149. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/phase_load_equipment.py +0 -0
  150. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/recloser_controller_equipment.py +0 -0
  151. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/equipment/sequence_impedance_branch_equipment.py +0 -0
  152. {grid_data_models-2.3.7/src/gdm/distribution/equipment/base → grid_data_models-2.4.0/src/gdm/systems/distribution/upgrade_handler}/__init__.py +0 -0
  153. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_0_1__to__2_1_2.py +0 -0
  154. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_1_2__to__2_1_3.py +0 -0
  155. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_1_3__to__2_1_4.py +0 -0
  156. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_1_4__to__2_1_5.py +0 -0
  157. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_1_5__to__2_2_0.py +0 -0
  158. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_2_0__to__2_2_1.py +0 -0
  159. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_2_1__to__2_3_0.py +0 -0
  160. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_3_0__to__2_3_1.py +0 -0
  161. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_3_1__to__2_3_2.py +0 -0
  162. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_3_3__to__2_3_4.py +0 -0
  163. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_3_4__to__2_3_5.py +0 -0
  164. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_3_5__to__2_3_6.py +0 -0
  165. {grid_data_models-2.3.7/src/gdm → grid_data_models-2.4.0/src/gdm/systems}/distribution/upgrade_handler/from__2_3_6__to__2_3_7.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: grid-data-models
3
- Version: 2.3.7
3
+ Version: 2.4.0
4
4
  Project-URL: Documentation, https://github.com/NREL-Distribution-Suites/grid-data-models#readme
5
5
  Project-URL: Issues, https://github.com/NREL-Distribution-Suites/grid-data-models/issues
6
6
  Project-URL: Source, https://github.com/NREL-Distribution-Suites/grid-data-models
@@ -10,12 +10,13 @@ License-File: LICENSE.txt
10
10
  Classifier: License :: OSI Approved :: BSD License
11
11
  Classifier: Operating System :: OS Independent
12
12
  Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
13
14
  Requires-Python: >=3.11
14
15
  Requires-Dist: geopandas
15
16
  Requires-Dist: importlib-metadata
16
- Requires-Dist: infrasys~=1.2
17
+ Requires-Dist: infrasys==1.2.1
17
18
  Requires-Dist: networkx
18
- Requires-Dist: pandas~=3.0.3
19
+ Requires-Dist: pandas~=3.0.6
19
20
  Requires-Dist: plotly
20
21
  Requires-Dist: pydantic
21
22
  Requires-Dist: semver
@@ -30,23 +31,30 @@ Requires-Dist: pytest-doctestplus; extra == 'dev'
30
31
  Requires-Dist: ruff; extra == 'dev'
31
32
  Provides-Extra: doc
32
33
  Requires-Dist: autodoc-pydantic[erdantic]; extra == 'doc'
33
- Requires-Dist: jupyter-book<3,>=2.1.6; extra == 'doc'
34
+ Requires-Dist: jupyter-book<3,>=2.1.7; extra == 'doc'
34
35
  Requires-Dist: myst-parser; extra == 'doc'
35
36
  Requires-Dist: pydata-sphinx-theme; extra == 'doc'
36
37
  Requires-Dist: sphinx; extra == 'doc'
37
38
  Requires-Dist: sphinxcontrib-mermaid; extra == 'doc'
38
39
  Provides-Extra: mcp
39
- Requires-Dist: mcp>=1.28.1; extra == 'mcp'
40
+ Requires-Dist: mcp>=2.2.0; extra == 'mcp'
40
41
  Description-Content-Type: text/markdown
41
42
 
42
43
 
43
44
 
44
- [![Upload to PyPi](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/publish_to_pypi.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/publish_to_pypi.yml) • [![Pytest](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/pull_request_tests.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/pull_request_tests.yml) • [![deploy-book](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/deploy.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/deploy.yml) • ![PyPI - Downloads](https://img.shields.io/pypi/dm/grid-data-models) • [![codecov](https://codecov.io/github/NLR-Distribution-Suite/grid-data-models/branch/main/graph/badge.svg?token=K0X11EXOX8)](https://codecov.io/github/NLR-Distribution-Suite/grid-data-models) • [![CodeFactor](https://www.codefactor.io/repository/github/nlr-distribution-suite/grid-data-models/badge)](https://www.codefactor.io/repository/github/nlr-distribution-suite/grid-data-models) • ![MCP Server](https://img.shields.io/badge/MCP_Server-enabled-brightgreen) • ![MCP Tools](https://img.shields.io/badge/MCP_Tools-20-blue) • [![GitHub issues](https://img.shields.io/github/issues/NLR-Distribution-Suite/grid-data-models)](https://github.com/NLR-Distribution-Suite/grid-data-models/issues) • [![License](https://img.shields.io/github/license/NLR-Distribution-Suite/grid-data-models)](https://github.com/NLR-Distribution-Suite/grid-data-models/blob/main/LICENSE.txt) • [![PyPI Downloads](https://static.pepy.tech/personalized-badge/grid-data-models?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/grid-data-models) • [![Generate LinkedIn Post Draft](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/linkedin_draft.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/linkedin_draft.yml)
45
+ [![Upload to PyPi](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/publish_to_pypi.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/publish_to_pypi.yml) • [![Pytest](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/pull_request_tests.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/pull_request_tests.yml) • [![deploy-book](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/deploy.yml/badge.svg?branch=main)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/deploy.yml) • ![PyPI - Downloads](https://img.shields.io/pypi/dm/grid-data-models) • [![codecov](https://codecov.io/github/NLR-Distribution-Suite/grid-data-models/branch/main/graph/badge.svg?token=K0X11EXOX8)](https://codecov.io/github/NLR-Distribution-Suite/grid-data-models) • [![CodeFactor](https://www.codefactor.io/repository/github/nlr-distribution-suite/grid-data-models/badge)](https://www.codefactor.io/repository/github/nlr-distribution-suite/grid-data-models) • ![MCP Server](https://img.shields.io/badge/MCP_Server-enabled-brightgreen) • ![MCP Tools](https://img.shields.io/badge/MCP_Tools-20-blue) • [![GitHub issues](https://img.shields.io/github/issues/NLR-Distribution-Suite/grid-data-models)](https://github.com/NLR-Distribution-Suite/grid-data-models/issues) • [![License](https://img.shields.io/github/license/NLR-Distribution-Suite/grid-data-models)](https://github.com/NLR-Distribution-Suite/grid-data-models/blob/main/LICENSE.txt) • [![PyPI Downloads](https://static.pepy.tech/personalized-badge/grid-data-models?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/grid-data-models) • [![Generate LinkedIn Post Draft](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/linkedin_draft.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/linkedin_draft.yml)
45
46
 
46
47
  # Grid Data Models (GDM)
47
48
 
48
49
  GDM is a python package containing data models for power system assets and datasets. This package is actively being developed at [National Renewable Energy Laboratory (NREL)](https://www.nrel.gov/).
49
50
 
51
+ GDM models distribution networks and utility substations as complementary
52
+ systems. `DistributionSystem` represents feeder and network connectivity;
53
+ `SubstationSystem` represents station topology, primary equipment, protection,
54
+ metering, and automation. They can remain separate or be joined at explicit
55
+ feeder boundaries. See the [system model guide](docs/systems/index.md) and the
56
+ [guide to connecting systems](docs/systems/connecting-systems.md).
57
+
50
58
  ## Installation
51
59
 
52
60
  You can install the latest version of `grid-data-models` from PyPi.
@@ -1,11 +1,18 @@
1
1
 
2
2
 
3
- [![Upload to PyPi](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/publish_to_pypi.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/publish_to_pypi.yml) • [![Pytest](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/pull_request_tests.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/pull_request_tests.yml) • [![deploy-book](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/deploy.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/deploy.yml) • ![PyPI - Downloads](https://img.shields.io/pypi/dm/grid-data-models) • [![codecov](https://codecov.io/github/NLR-Distribution-Suite/grid-data-models/branch/main/graph/badge.svg?token=K0X11EXOX8)](https://codecov.io/github/NLR-Distribution-Suite/grid-data-models) • [![CodeFactor](https://www.codefactor.io/repository/github/nlr-distribution-suite/grid-data-models/badge)](https://www.codefactor.io/repository/github/nlr-distribution-suite/grid-data-models) • ![MCP Server](https://img.shields.io/badge/MCP_Server-enabled-brightgreen) • ![MCP Tools](https://img.shields.io/badge/MCP_Tools-20-blue) • [![GitHub issues](https://img.shields.io/github/issues/NLR-Distribution-Suite/grid-data-models)](https://github.com/NLR-Distribution-Suite/grid-data-models/issues) • [![License](https://img.shields.io/github/license/NLR-Distribution-Suite/grid-data-models)](https://github.com/NLR-Distribution-Suite/grid-data-models/blob/main/LICENSE.txt) • [![PyPI Downloads](https://static.pepy.tech/personalized-badge/grid-data-models?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/grid-data-models) • [![Generate LinkedIn Post Draft](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/linkedin_draft.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/linkedin_draft.yml)
3
+ [![Upload to PyPi](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/publish_to_pypi.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/publish_to_pypi.yml) • [![Pytest](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/pull_request_tests.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/pull_request_tests.yml) • [![deploy-book](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/deploy.yml/badge.svg?branch=main)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/deploy.yml) • ![PyPI - Downloads](https://img.shields.io/pypi/dm/grid-data-models) • [![codecov](https://codecov.io/github/NLR-Distribution-Suite/grid-data-models/branch/main/graph/badge.svg?token=K0X11EXOX8)](https://codecov.io/github/NLR-Distribution-Suite/grid-data-models) • [![CodeFactor](https://www.codefactor.io/repository/github/nlr-distribution-suite/grid-data-models/badge)](https://www.codefactor.io/repository/github/nlr-distribution-suite/grid-data-models) • ![MCP Server](https://img.shields.io/badge/MCP_Server-enabled-brightgreen) • ![MCP Tools](https://img.shields.io/badge/MCP_Tools-20-blue) • [![GitHub issues](https://img.shields.io/github/issues/NLR-Distribution-Suite/grid-data-models)](https://github.com/NLR-Distribution-Suite/grid-data-models/issues) • [![License](https://img.shields.io/github/license/NLR-Distribution-Suite/grid-data-models)](https://github.com/NLR-Distribution-Suite/grid-data-models/blob/main/LICENSE.txt) • [![PyPI Downloads](https://static.pepy.tech/personalized-badge/grid-data-models?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/grid-data-models) • [![Generate LinkedIn Post Draft](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/linkedin_draft.yml/badge.svg)](https://github.com/NLR-Distribution-Suite/grid-data-models/actions/workflows/linkedin_draft.yml)
4
4
 
5
5
  # Grid Data Models (GDM)
6
6
 
7
7
  GDM is a python package containing data models for power system assets and datasets. This package is actively being developed at [National Renewable Energy Laboratory (NREL)](https://www.nrel.gov/).
8
8
 
9
+ GDM models distribution networks and utility substations as complementary
10
+ systems. `DistributionSystem` represents feeder and network connectivity;
11
+ `SubstationSystem` represents station topology, primary equipment, protection,
12
+ metering, and automation. They can remain separate or be joined at explicit
13
+ feeder boundaries. See the [system model guide](docs/systems/index.md) and the
14
+ [guide to connecting systems](docs/systems/connecting-systems.md).
15
+
9
16
  ## Installation
10
17
 
11
18
  You can install the latest version of `grid-data-models` from PyPi.
@@ -17,6 +17,7 @@ authors = [
17
17
  ]
18
18
  classifiers = [
19
19
  "Programming Language :: Python :: 3.11",
20
+ "Programming Language :: Python :: 3.12",
20
21
  "License :: OSI Approved :: BSD License",
21
22
  "Operating System :: OS Independent",
22
23
  ]
@@ -24,19 +25,19 @@ dependencies = [
24
25
  "semver",
25
26
  "networkx",
26
27
  "pydantic",
27
- "infrasys~=1.2",
28
+ "infrasys==1.2.1",
28
29
  "importlib_metadata",
29
30
  "typer",
30
- "pandas~=3.0.3",
31
+ "pandas~=3.0.6",
31
32
  "geopandas",
32
33
  "plotly",
33
34
  ]
34
35
 
35
36
  [project.optional-dependencies]
36
- mcp = ["mcp>=1.28.1"]
37
+ mcp = ["mcp>=2.2.0"]
37
38
  dev = ["pre-commit", "pytest", "pytest-cov", "pytest-doctestplus", "pytest-asyncio", "ruff", "docutils"]
38
39
  doc = [
39
- "jupyter-book>=2.1.6,<3",
40
+ "jupyter-book>=2.1.7,<3",
40
41
  "sphinx",
41
42
  "pydata-sphinx-theme",
42
43
  "myst-parser",
@@ -5,8 +5,8 @@ from typing import Annotated
5
5
 
6
6
  import typer
7
7
 
8
- from gdm.distribution.model_reduction.reducer import reduce_to_three_phase_system
9
- from gdm.distribution.distribution_system import DistributionSystem
8
+ from gdm.systems.distribution.model_reduction.reducer import reduce_to_three_phase_system
9
+ from gdm.systems.distribution.distribution_system import DistributionSystem
10
10
  from gdm.exceptions import FolderAlreadyExistsError
11
11
 
12
12
 
@@ -0,0 +1,44 @@
1
+ """Compatibility namespace for the former ``gdm.distribution`` package.
2
+
3
+ The implementation now lives under :mod:`gdm.systems.distribution`. Legacy imports and
4
+ serialized component module paths are mapped to the canonical modules so
5
+ classes are not duplicated during a migration.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import importlib
11
+ import pkgutil
12
+ import sys
13
+ import warnings
14
+
15
+
16
+ _CANONICAL_PACKAGE = "gdm.systems.distribution"
17
+ warnings.warn(
18
+ "gdm.distribution is deprecated and will be removed in a future release; "
19
+ "use gdm.systems.distribution instead.",
20
+ DeprecationWarning,
21
+ stacklevel=2,
22
+ )
23
+ _canonical_package = importlib.import_module(_CANONICAL_PACKAGE)
24
+
25
+ for name, value in vars(_canonical_package).items():
26
+ if not name.startswith("__") or name in {"__version__"}:
27
+ globals()[name] = value
28
+
29
+ _module_names = [
30
+ module_info.name
31
+ for module_info in pkgutil.walk_packages(
32
+ _canonical_package.__path__, prefix=f"{_CANONICAL_PACKAGE}."
33
+ )
34
+ ]
35
+
36
+ for canonical_name in sorted(_module_names, key=lambda name: (name.count("."), name)):
37
+ legacy_name = f"{__name__}{canonical_name[len(_CANONICAL_PACKAGE) :]}"
38
+ module = importlib.import_module(canonical_name)
39
+ sys.modules[legacy_name] = module
40
+
41
+ parent_name, child_name = legacy_name.rsplit(".", 1)
42
+ parent = sys.modules.get(parent_name)
43
+ if parent is not None:
44
+ setattr(parent, child_name, module)
@@ -4,7 +4,7 @@ import contextlib
4
4
  from collections import defaultdict
5
5
  from uuid import UUID
6
6
 
7
- from gdm.distribution import DistributionSystem
7
+ from gdm.systems.distribution import DistributionSystem
8
8
 
9
9
  from gdm.mcp.exceptions import ComponentNotFoundError
10
10
  from gdm.mcp.schemas import (
@@ -3,7 +3,7 @@
3
3
  import contextlib
4
4
  from uuid import UUID
5
5
 
6
- from gdm.distribution import DistributionSystem
6
+ from gdm.systems.distribution import DistributionSystem
7
7
 
8
8
  from gdm.mcp.schemas import ComponentInfo
9
9
 
@@ -3,7 +3,7 @@
3
3
  from typing import Optional
4
4
 
5
5
  import networkx as nx
6
- from gdm.distribution import DistributionSystem
6
+ from gdm.systems.distribution import DistributionSystem
7
7
  from gdm.exceptions import MultipleOrEmptyVsourceFound
8
8
 
9
9
  from gdm.mcp.exceptions import TopologyError
@@ -6,7 +6,7 @@ from pathlib import Path
6
6
  from typing import List, Optional, Dict, Any
7
7
  import inspect
8
8
 
9
- from gdm.distribution.components import (
9
+ from gdm.systems.distribution.components import (
10
10
  DistributionBus,
11
11
  DistributionSubstation,
12
12
  DistributionFeeder,
@@ -56,11 +56,10 @@ def find_gdm_repo() -> Optional[Path]:
56
56
  possible_paths = [
57
57
  Path.cwd().parent / "grid-data-models", # Sibling directory
58
58
  Path.cwd() / ".." / "grid-data-models", # Relative sibling
59
- Path(__file__).parent.parent.parent.parent.parent / "grid-data-models", # From this file
59
+ Path(__file__).resolve().parents[4], # This checkout's repository root
60
60
  Path.home() / "Documents" / "GitHub" / "grid-data-models",
61
61
  Path.home() / "Documents" / "grid-data-models",
62
62
  Path.home() / "grid-data-models",
63
- Path("/Users/alatif/Documents/GitHub/grid-data-models"), # Known location
64
63
  ]
65
64
 
66
65
  # Also check GDM_REPO_PATH environment variable
@@ -3,7 +3,7 @@
3
3
  from collections import defaultdict
4
4
  from uuid import UUID
5
5
 
6
- from gdm.distribution import DistributionSystem
6
+ from gdm.systems.distribution import DistributionSystem
7
7
 
8
8
  from gdm.mcp.exceptions import MergeConflictError
9
9
  from gdm.mcp.schemas import MergeConflict, MergeReport
@@ -3,8 +3,8 @@
3
3
  from collections import defaultdict
4
4
  from typing import Optional
5
5
 
6
- from gdm.distribution import DistributionSystem
7
- from gdm.distribution.components import DistributionBus
6
+ from gdm.systems.distribution import DistributionSystem
7
+ from gdm.systems.distribution.components import DistributionBus
8
8
 
9
9
  from gdm.mcp.schemas import SplitReport
10
10
 
@@ -12,10 +12,10 @@ import sqlite3
12
12
  from typing import Annotated, Any
13
13
 
14
14
  import typer
15
- from gdm.distribution import DistributionSystem
16
- from mcp.server import Server
15
+ from gdm.systems.distribution import DistributionSystem
16
+ from mcp.server import Server, ServerRequestContext
17
17
  from mcp.server.stdio import stdio_server
18
- from mcp.types import TextContent, Tool
18
+ from mcp.types import CallToolResult, ListToolsResult, TextContent, Tool
19
19
 
20
20
  from gdm.mcp import __version__
21
21
  from gdm.mcp.exceptions import GDMMCPException
@@ -42,7 +42,7 @@ from gdm.mcp.knowledge.documentation import (
42
42
  list_available_components as list_components_doc,
43
43
  get_component_fields as get_fields_doc,
44
44
  )
45
- from gdm.distribution.model_reduction.reducer import (
45
+ from gdm.systems.distribution.model_reduction.reducer import (
46
46
  reduce_to_primary_system,
47
47
  reduce_to_three_phase_system,
48
48
  )
@@ -51,9 +51,6 @@ from gdm.distribution.model_reduction.reducer import (
51
51
  logging.basicConfig(level=logging.INFO)
52
52
  logger = logging.getLogger("gdm_mcp")
53
53
 
54
- # Create MCP server instance
55
- app = Server("grid-data-models-mcp")
56
-
57
54
  # Runtime toggle for serving tool calls. Control tools remain available.
58
55
  _TOOL_CALLS_ENABLED = True
59
56
  _CONTROL_TOOLS = {"set_tool_calls_enabled", "get_tool_calls_enabled"}
@@ -185,10 +182,9 @@ def _split_tool_input_schema() -> dict[str, Any]:
185
182
  }
186
183
 
187
184
 
188
- @app.list_tools()
189
- async def list_tools() -> list[Tool]:
185
+ async def list_tools(ctx: ServerRequestContext, params=None) -> ListToolsResult:
190
186
  """List all available MCP tools."""
191
- return [
187
+ tools = [
192
188
  # Validation tools
193
189
  Tool(
194
190
  name="diagnose_system",
@@ -686,6 +682,7 @@ async def list_tools() -> list[Tool]:
686
682
  },
687
683
  ),
688
684
  ]
685
+ return ListToolsResult(tools=tools)
689
686
 
690
687
 
691
688
  # Tool dispatch map
@@ -717,27 +714,30 @@ _TOOL_HANDLERS: dict[str, Any] = {
717
714
  }
718
715
 
719
716
 
720
- @app.call_tool()
721
- async def call_tool(name: str, arguments: Any) -> list[TextContent]:
717
+ async def call_tool(ctx: ServerRequestContext, params: Any) -> CallToolResult:
722
718
  """Handle tool calls from MCP clients."""
719
+ name = params.name
720
+ arguments = params.arguments or {}
723
721
  try:
724
722
  logger.info(f"Tool called: {name} with arguments: {arguments}")
725
723
 
726
724
  if not _TOOL_CALLS_ENABLED and name not in _CONTROL_TOOLS:
727
- return [
728
- TextContent(
729
- type="text",
730
- text=json.dumps(
731
- {
732
- "error": (
733
- "Tool calls are currently disabled. "
734
- "Use set_tool_calls_enabled to re-enable."
735
- )
736
- },
737
- indent=2,
738
- ),
739
- )
740
- ]
725
+ return CallToolResult(
726
+ content=[
727
+ TextContent(
728
+ type="text",
729
+ text=json.dumps(
730
+ {
731
+ "error": (
732
+ "Tool calls are currently disabled. "
733
+ "Use set_tool_calls_enabled to re-enable."
734
+ )
735
+ },
736
+ indent=2,
737
+ ),
738
+ )
739
+ ]
740
+ )
741
741
 
742
742
  handler = _TOOL_HANDLERS.get(name)
743
743
  if handler is not None:
@@ -745,18 +745,27 @@ async def call_tool(name: str, arguments: Any) -> list[TextContent]:
745
745
  else:
746
746
  result = {"error": f"Unknown tool: {name}"}
747
747
 
748
- return [TextContent(type="text", text=json.dumps(result, indent=2, default=str))]
748
+ return CallToolResult(
749
+ content=[TextContent(type="text", text=json.dumps(result, indent=2, default=str))]
750
+ )
749
751
 
750
752
  except GDMMCPException as e:
751
753
  logger.error(f"GDM MCP error in {name}: {str(e)}")
752
- return [TextContent(type="text", text=json.dumps({"error": str(e)}, indent=2))]
754
+ return CallToolResult(
755
+ content=[TextContent(type="text", text=json.dumps({"error": str(e)}, indent=2))],
756
+ is_error=True,
757
+ )
753
758
  except Exception as e:
754
759
  logger.error(f"Unexpected error in {name}: {str(e)}", exc_info=True)
755
- return [
756
- TextContent(
757
- type="text", text=json.dumps({"error": f"Unexpected error: {str(e)}"}, indent=2)
758
- )
759
- ]
760
+ return CallToolResult(
761
+ content=[
762
+ TextContent(
763
+ type="text",
764
+ text=json.dumps({"error": f"Unexpected error: {str(e)}"}, indent=2),
765
+ )
766
+ ],
767
+ is_error=True,
768
+ )
760
769
 
761
770
 
762
771
  # Tool implementations
@@ -1079,6 +1088,13 @@ def _run_server(
1079
1088
  # Run the server
1080
1089
  import asyncio
1081
1090
 
1091
+ app = Server(
1092
+ "grid-data-models-mcp",
1093
+ version=__version__,
1094
+ on_list_tools=list_tools,
1095
+ on_call_tool=call_tool,
1096
+ )
1097
+
1082
1098
  async def run():
1083
1099
  async with stdio_server() as (read_stream, write_stream):
1084
1100
  await app.run(read_stream, write_stream, app.create_initialization_options())
@@ -1,7 +1,7 @@
1
1
  """Subsystem extraction utilities."""
2
2
 
3
- from gdm.distribution import DistributionSystem
4
- from gdm.distribution.components import DistributionBus
3
+ from gdm.systems.distribution import DistributionSystem
4
+ from gdm.systems.distribution.components import DistributionBus
5
5
  from infrasys import SingleTimeSeries
6
6
 
7
7
 
@@ -4,7 +4,7 @@ from collections import defaultdict
4
4
  from typing import Optional
5
5
  from uuid import UUID
6
6
 
7
- from gdm.distribution import DistributionSystem
7
+ from gdm.systems.distribution import DistributionSystem
8
8
 
9
9
  from gdm.mcp.schemas import TimeSeriesInfo
10
10
 
@@ -4,7 +4,7 @@ import copy
4
4
  from datetime import datetime
5
5
  from typing import Any
6
6
 
7
- from gdm.distribution import DistributionSystem
7
+ from gdm.systems.distribution import DistributionSystem
8
8
 
9
9
  from gdm.mcp.schemas import (
10
10
  ChangeLogEntry,
@@ -5,7 +5,7 @@ import traceback
5
5
  from typing import Any
6
6
  from uuid import UUID
7
7
 
8
- from gdm.distribution import DistributionSystem
8
+ from gdm.systems.distribution import DistributionSystem
9
9
  from pydantic import ValidationError as PydanticValidationError
10
10
 
11
11
  from gdm.mcp.schemas import (
@@ -84,3 +84,9 @@ class Irradiance(BaseQuantity):
84
84
  """Quantity representing irradiance in kilowatt per meter**2"""
85
85
 
86
86
  __base_unit__ = "kilowatt/meter**2"
87
+
88
+
89
+ class Frequency(BaseQuantity):
90
+ """Quantity representing frequency."""
91
+
92
+ __base_unit__ = "hertz"
@@ -0,0 +1 @@
1
+ """System model namespaces."""
@@ -0,0 +1,13 @@
1
+ from gdm.version import VERSION
2
+
3
+ __version__ = VERSION
4
+
5
+ # from gdm.tracked_changes import apply_tracked_changes, apply_update_scenario, get_distribution_system_on_date
6
+ from gdm.systems.distribution.model_reduction.reducer import (
7
+ reduce_to_primary_system,
8
+ reduce_to_radial_network,
9
+ reduce_to_three_phase_system,
10
+ )
11
+ from gdm.systems.distribution.distribution_graph import build_graph_from_system
12
+ from gdm.systems.distribution.distribution_system import DistributionSystem
13
+ from gdm.systems.distribution.catalog_system import CatalogSystem
@@ -0,0 +1,4 @@
1
+ from gdm.systems.distribution.common.limitset import ThermalLimitSet, VoltageLimitSet
2
+ from gdm.systems.distribution.common.curve import Curve, TimeCurrentCurve
3
+ from gdm.systems.distribution.common.sequence_pair import SequencePair
4
+ from infrasys import Location
@@ -5,7 +5,7 @@ from infrasys import Component
5
5
  from pydantic import Field
6
6
 
7
7
  from gdm.quantities import Current, Voltage
8
- from gdm.distribution.enums import LimitType
8
+ from gdm.systems.distribution.enums import LimitType
9
9
  from gdm.constants import PINT_SCHEMA
10
10
 
11
11
 
@@ -0,0 +1,31 @@
1
+ from gdm.systems.distribution.components.distribution_battery import DistributionBattery
2
+ from gdm.systems.distribution.components.distribution_bus import DistributionBus
3
+ from gdm.systems.distribution.components.distribution_capacitor import DistributionCapacitor
4
+ from gdm.systems.distribution.components.distribution_load import DistributionLoad
5
+ from gdm.systems.distribution.components.distribution_regulator import DistributionRegulator
6
+ from gdm.systems.distribution.components.distribution_solar import DistributionSolar
7
+ from gdm.systems.distribution.components.distribution_transformer import DistributionTransformer
8
+ from gdm.systems.distribution.components.distribution_vsource import DistributionVoltageSource
9
+ from gdm.systems.distribution.components.geometry_branch import GeometryBranch
10
+ from gdm.systems.distribution.components.geometry_switch import GeometrySwitch
11
+ from gdm.systems.distribution.components.matrix_impedance_branch import MatrixImpedanceBranch
12
+ from gdm.systems.distribution.components.matrix_impedance_fuse import MatrixImpedanceFuse
13
+ from gdm.systems.distribution.components.matrix_impedance_recloser import MatrixImpedanceRecloser
14
+ from gdm.systems.distribution.components.matrix_impedance_switch import MatrixImpedanceSwitch
15
+ from gdm.systems.distribution.components.sequence_impedance_branch import SequenceImpedanceBranch
16
+ from gdm.systems.distribution.components.distribution_reactor import DistributionReactor
17
+ from gdm.systems.distribution.components.distribution_feeder import DistributionFeeder
18
+
19
+ from gdm.systems.distribution.components.base.distribution_branch_base import (
20
+ DistributionBranchBase,
21
+ )
22
+ from gdm.systems.distribution.components.base.distribution_component_base import (
23
+ DistributionComponentBase,
24
+ )
25
+ from gdm.systems.distribution.components.base.distribution_switch_base import (
26
+ DistributionSwitchBase,
27
+ )
28
+ from gdm.systems.distribution.components.base.distribution_transformer_base import (
29
+ DistributionTransformerBase,
30
+ )
31
+ from gdm.systems.distribution.components.distribution_substation import DistributionSubstation
@@ -7,9 +7,9 @@ import math
7
7
 
8
8
  from pydantic import model_validator, Field
9
9
 
10
- from gdm.distribution.components.distribution_bus import DistributionBus
11
- from gdm.distribution.enums import Phase
12
- from gdm.distribution.components.base.distribution_component_base import (
10
+ from gdm.systems.distribution.components.distribution_bus import DistributionBus
11
+ from gdm.systems.distribution.enums import Phase, VoltageTypes
12
+ from gdm.systems.distribution.components.base.distribution_component_base import (
13
13
  InServiceDistributionComponentBase,
14
14
  )
15
15
  from gdm.quantities import Distance
@@ -48,14 +48,25 @@ class DistributionBranchBase(InServiceDistributionComponentBase, ABC):
48
48
  )
49
49
  raise ValueError(msg)
50
50
 
51
+ rated_voltage_LN_from = (
52
+ self.buses[0].rated_voltage
53
+ if self.buses[0].voltage_type == VoltageTypes.LINE_TO_GROUND
54
+ else self.buses[0].rated_voltage / math.sqrt(3)
55
+ )
56
+ rated_voltage_LN_to = (
57
+ self.buses[1].rated_voltage
58
+ if self.buses[1].voltage_type == VoltageTypes.LINE_TO_GROUND
59
+ else self.buses[1].rated_voltage / math.sqrt(3)
60
+ )
61
+
51
62
  if not math.isclose(
52
- self.buses[0].rated_voltage.magnitude,
53
- self.buses[1].rated_voltage.magnitude,
63
+ rated_voltage_LN_from.magnitude,
64
+ rated_voltage_LN_to.magnitude,
54
65
  rel_tol=0.001, # 10^-3
55
66
  ):
56
67
  msg = (
57
- f"From bus {self.buses[0].rated_voltage=}"
58
- f"and to bus voltage {self.buses[1].rated_voltage=} rating should be same."
68
+ f"From bus line to ground voltage {rated_voltage_LN_from=}"
69
+ f"and to bus line to ground voltage {rated_voltage_LN_to=} rating should be same."
59
70
  )
60
71
  raise ValueError(msg)
61
72
 
@@ -7,8 +7,8 @@ from abc import ABC
7
7
  from pydantic import Field
8
8
  from infrasys import Component
9
9
 
10
- from gdm.distribution.components.distribution_feeder import DistributionFeeder
11
- from gdm.distribution.components.distribution_substation import DistributionSubstation
10
+ from gdm.systems.distribution.components.distribution_feeder import DistributionFeeder
11
+ from gdm.systems.distribution.components.distribution_substation import DistributionSubstation
12
12
 
13
13
 
14
14
  class DistributionComponentBase(Component, ABC):
@@ -3,7 +3,9 @@ from abc import ABC
3
3
 
4
4
  from pydantic import model_validator, Field
5
5
 
6
- from gdm.distribution.components.base.distribution_branch_base import DistributionBranchBase
6
+ from gdm.systems.distribution.components.base.distribution_branch_base import (
7
+ DistributionBranchBase,
8
+ )
7
9
 
8
10
 
9
11
  class DistributionSwitchBase(DistributionBranchBase, ABC):
@@ -7,12 +7,12 @@ from abc import ABC
7
7
  from infrasys.quantities import Voltage
8
8
  from pydantic import Field, model_validator
9
9
 
10
- from gdm.distribution.enums import Phase, VoltageTypes
11
- from gdm.distribution.components.distribution_bus import DistributionBus
12
- from gdm.distribution.components.base.distribution_component_base import (
10
+ from gdm.systems.distribution.enums import Phase, VoltageTypes
11
+ from gdm.systems.distribution.components.distribution_bus import DistributionBus
12
+ from gdm.systems.distribution.components.base.distribution_component_base import (
13
13
  InServiceDistributionComponentBase,
14
14
  )
15
- from gdm.distribution.equipment.distribution_transformer_equipment import (
15
+ from gdm.systems.distribution.equipment.distribution_transformer_equipment import (
16
16
  DistributionTransformerEquipment,
17
17
  )
18
18