zepben.ewb 1.0.0b1__py3-none-any.whl

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 (639) hide show
  1. zepben/ewb/__init__.py +601 -0
  2. zepben/ewb/auth/__init__.py +10 -0
  3. zepben/ewb/auth/client/__init__.py +5 -0
  4. zepben/ewb/auth/client/zepben_token_fetcher.py +273 -0
  5. zepben/ewb/auth/common/__init__.py +5 -0
  6. zepben/ewb/auth/common/auth_exception.py +16 -0
  7. zepben/ewb/auth/common/auth_method.py +28 -0
  8. zepben/ewb/auth/common/auth_provider_config.py +96 -0
  9. zepben/ewb/database/__init__.py +4 -0
  10. zepben/ewb/database/paths/__init__.py +4 -0
  11. zepben/ewb/database/paths/database_type.py +34 -0
  12. zepben/ewb/database/paths/ewb_data_file_paths.py +237 -0
  13. zepben/ewb/database/sqlite/__init__.py +4 -0
  14. zepben/ewb/database/sqlite/common/__init__.py +4 -0
  15. zepben/ewb/database/sqlite/common/base_cim_reader.py +212 -0
  16. zepben/ewb/database/sqlite/common/base_cim_writer.py +159 -0
  17. zepben/ewb/database/sqlite/common/base_collection_reader.py +96 -0
  18. zepben/ewb/database/sqlite/common/base_collection_writer.py +73 -0
  19. zepben/ewb/database/sqlite/common/base_database_reader.py +127 -0
  20. zepben/ewb/database/sqlite/common/base_database_tables.py +137 -0
  21. zepben/ewb/database/sqlite/common/base_database_writer.py +195 -0
  22. zepben/ewb/database/sqlite/common/base_entry_writer.py +34 -0
  23. zepben/ewb/database/sqlite/common/base_service_reader.py +50 -0
  24. zepben/ewb/database/sqlite/common/base_service_writer.py +104 -0
  25. zepben/ewb/database/sqlite/common/metadata_collection_reader.py +39 -0
  26. zepben/ewb/database/sqlite/common/metadata_collection_writer.py +38 -0
  27. zepben/ewb/database/sqlite/common/metadata_entry_reader.py +45 -0
  28. zepben/ewb/database/sqlite/common/metadata_entry_writer.py +41 -0
  29. zepben/ewb/database/sqlite/common/reader_exceptions.py +30 -0
  30. zepben/ewb/database/sqlite/customer/__init__.py +4 -0
  31. zepben/ewb/database/sqlite/customer/customer_cim_reader.py +169 -0
  32. zepben/ewb/database/sqlite/customer/customer_cim_writer.py +137 -0
  33. zepben/ewb/database/sqlite/customer/customer_database_reader.py +44 -0
  34. zepben/ewb/database/sqlite/customer/customer_database_tables.py +37 -0
  35. zepben/ewb/database/sqlite/customer/customer_database_writer.py +45 -0
  36. zepben/ewb/database/sqlite/customer/customer_service_reader.py +57 -0
  37. zepben/ewb/database/sqlite/customer/customer_service_writer.py +47 -0
  38. zepben/ewb/database/sqlite/diagram/__init__.py +4 -0
  39. zepben/ewb/database/sqlite/diagram/diagram_cim_reader.py +105 -0
  40. zepben/ewb/database/sqlite/diagram/diagram_cim_writer.py +81 -0
  41. zepben/ewb/database/sqlite/diagram/diagram_database_reader.py +45 -0
  42. zepben/ewb/database/sqlite/diagram/diagram_database_tables.py +29 -0
  43. zepben/ewb/database/sqlite/diagram/diagram_database_writer.py +44 -0
  44. zepben/ewb/database/sqlite/diagram/diagram_service_reader.py +49 -0
  45. zepben/ewb/database/sqlite/diagram/diagram_service_writer.py +41 -0
  46. zepben/ewb/database/sqlite/extensions/__init__.py +4 -0
  47. zepben/ewb/database/sqlite/extensions/prepared_statement.py +112 -0
  48. zepben/ewb/database/sqlite/extensions/result_set.py +153 -0
  49. zepben/ewb/database/sqlite/network/__init__.py +4 -0
  50. zepben/ewb/database/sqlite/network/network_cim_reader.py +3167 -0
  51. zepben/ewb/database/sqlite/network/network_cim_writer.py +2561 -0
  52. zepben/ewb/database/sqlite/network/network_database_reader.py +173 -0
  53. zepben/ewb/database/sqlite/network/network_database_tables.py +242 -0
  54. zepben/ewb/database/sqlite/network/network_database_writer.py +43 -0
  55. zepben/ewb/database/sqlite/network/network_service_reader.py +265 -0
  56. zepben/ewb/database/sqlite/network/network_service_writer.py +209 -0
  57. zepben/ewb/database/sqlite/tables/__init__.py +4 -0
  58. zepben/ewb/database/sqlite/tables/associations/__init__.py +4 -0
  59. zepben/ewb/database/sqlite/tables/associations/loop_substation_relationship.py +17 -0
  60. zepben/ewb/database/sqlite/tables/associations/table_asset_organisation_roles_assets.py +40 -0
  61. zepben/ewb/database/sqlite/tables/associations/table_assets_power_system_resources.py +41 -0
  62. zepben/ewb/database/sqlite/tables/associations/table_battery_units_battery_controls.py +40 -0
  63. zepben/ewb/database/sqlite/tables/associations/table_circuits_substations.py +40 -0
  64. zepben/ewb/database/sqlite/tables/associations/table_circuits_terminals.py +40 -0
  65. zepben/ewb/database/sqlite/tables/associations/table_customer_agreements_pricing_structures.py +40 -0
  66. zepben/ewb/database/sqlite/tables/associations/table_end_devices_end_device_functions.py +40 -0
  67. zepben/ewb/database/sqlite/tables/associations/table_equipment_equipment_containers.py +40 -0
  68. zepben/ewb/database/sqlite/tables/associations/table_equipment_operational_restrictions.py +40 -0
  69. zepben/ewb/database/sqlite/tables/associations/table_equipment_usage_points.py +40 -0
  70. zepben/ewb/database/sqlite/tables/associations/table_loops_substations.py +43 -0
  71. zepben/ewb/database/sqlite/tables/associations/table_pricing_structures_tariffs.py +40 -0
  72. zepben/ewb/database/sqlite/tables/associations/table_protection_relay_functions_protected_switches.py +40 -0
  73. zepben/ewb/database/sqlite/tables/associations/table_protection_relay_functions_sensors.py +40 -0
  74. zepben/ewb/database/sqlite/tables/associations/table_protection_relay_schemes_protection_relay_functions.py +40 -0
  75. zepben/ewb/database/sqlite/tables/associations/table_synchronous_machines_reactive_capability_curves.py +39 -0
  76. zepben/ewb/database/sqlite/tables/associations/table_usage_points_end_devices.py +40 -0
  77. zepben/ewb/database/sqlite/tables/column.py +37 -0
  78. zepben/ewb/database/sqlite/tables/exceptions.py +10 -0
  79. zepben/ewb/database/sqlite/tables/extensions/__init__.py +4 -0
  80. zepben/ewb/database/sqlite/tables/extensions/iec61968/__init__.py +4 -0
  81. zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/__init__.py +4 -0
  82. zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/table_reclose_delays.py +38 -0
  83. zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/table_relay_info.py +21 -0
  84. zepben/ewb/database/sqlite/tables/extensions/iec61968/metering/__init__.py +4 -0
  85. zepben/ewb/database/sqlite/tables/extensions/iec61968/metering/table_pan_demand_response_functions.py +21 -0
  86. zepben/ewb/database/sqlite/tables/extensions/iec61970/__init__.py +4 -0
  87. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/__init__.py +4 -0
  88. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/core/__init__.py +4 -0
  89. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/core/table_sites.py +15 -0
  90. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/__init__.py +4 -0
  91. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/table_loops.py +15 -0
  92. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/table_lv_feeders.py +20 -0
  93. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/__init__.py +4 -0
  94. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/production/__init__.py +4 -0
  95. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/production/table_ev_charging_units.py +15 -0
  96. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/__init__.py +4 -0
  97. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_distance_relays.py +28 -0
  98. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_function_thresholds.py +36 -0
  99. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_function_time_limits.py +34 -0
  100. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_functions.py +24 -0
  101. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_schemes.py +20 -0
  102. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_systems.py +20 -0
  103. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_voltage_relays.py +15 -0
  104. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/__init__.py +4 -0
  105. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/table_battery_controls.py +23 -0
  106. zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/table_power_transformer_end_ratings.py +34 -0
  107. zepben/ewb/database/sqlite/tables/iec61968/__init__.py +4 -0
  108. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/__init__.py +4 -0
  109. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_cable_info.py +15 -0
  110. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_no_load_tests.py +24 -0
  111. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_open_circuit_tests.py +24 -0
  112. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_overhead_wire_info.py +15 -0
  113. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_power_transformer_info.py +15 -0
  114. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_short_circuit_tests.py +29 -0
  115. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_shunt_compensator_info.py +23 -0
  116. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_switch_info.py +20 -0
  117. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_end_info.py +46 -0
  118. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_tank_info.py +27 -0
  119. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_test.py +19 -0
  120. zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_wire_info.py +19 -0
  121. zepben/ewb/database/sqlite/tables/iec61968/assets/__init__.py +4 -0
  122. zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_containers.py +14 -0
  123. zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_functions.py +14 -0
  124. zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_info.py +14 -0
  125. zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_organisation_roles.py +14 -0
  126. zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_owners.py +15 -0
  127. zepben/ewb/database/sqlite/tables/iec61968/assets/table_assets.py +18 -0
  128. zepben/ewb/database/sqlite/tables/iec61968/assets/table_streetlights.py +22 -0
  129. zepben/ewb/database/sqlite/tables/iec61968/assets/table_structures.py +14 -0
  130. zepben/ewb/database/sqlite/tables/iec61968/common/__init__.py +4 -0
  131. zepben/ewb/database/sqlite/tables/iec61968/common/table_agreements.py +14 -0
  132. zepben/ewb/database/sqlite/tables/iec61968/common/table_documents.py +23 -0
  133. zepben/ewb/database/sqlite/tables/iec61968/common/table_location_street_address_field.py +18 -0
  134. zepben/ewb/database/sqlite/tables/iec61968/common/table_location_street_addresses.py +33 -0
  135. zepben/ewb/database/sqlite/tables/iec61968/common/table_locations.py +15 -0
  136. zepben/ewb/database/sqlite/tables/iec61968/common/table_organisation_roles.py +18 -0
  137. zepben/ewb/database/sqlite/tables/iec61968/common/table_organisations.py +15 -0
  138. zepben/ewb/database/sqlite/tables/iec61968/common/table_position_points.py +30 -0
  139. zepben/ewb/database/sqlite/tables/iec61968/common/table_street_addresses.py +26 -0
  140. zepben/ewb/database/sqlite/tables/iec61968/common/table_town_details.py +19 -0
  141. zepben/ewb/database/sqlite/tables/iec61968/customers/__init__.py +4 -0
  142. zepben/ewb/database/sqlite/tables/iec61968/customers/table_customer_agreements.py +27 -0
  143. zepben/ewb/database/sqlite/tables/iec61968/customers/table_customers.py +22 -0
  144. zepben/ewb/database/sqlite/tables/iec61968/customers/table_pricing_structures.py +15 -0
  145. zepben/ewb/database/sqlite/tables/iec61968/customers/table_tariffs.py +15 -0
  146. zepben/ewb/database/sqlite/tables/iec61968/infiec61968/__init__.py +4 -0
  147. zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/__init__.py +4 -0
  148. zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/table_current_transformer_info.py +33 -0
  149. zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/table_potential_transformer_info.py +26 -0
  150. zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassets/__init__.py +4 -0
  151. zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassets/table_poles.py +20 -0
  152. zepben/ewb/database/sqlite/tables/iec61968/metering/__init__.py +4 -0
  153. zepben/ewb/database/sqlite/tables/iec61968/metering/table_end_device_functions.py +18 -0
  154. zepben/ewb/database/sqlite/tables/iec61968/metering/table_end_devices.py +19 -0
  155. zepben/ewb/database/sqlite/tables/iec61968/metering/table_meters.py +15 -0
  156. zepben/ewb/database/sqlite/tables/iec61968/metering/table_usage_points.py +23 -0
  157. zepben/ewb/database/sqlite/tables/iec61968/operations/__init__.py +4 -0
  158. zepben/ewb/database/sqlite/tables/iec61968/operations/table_operational_restrictions.py +15 -0
  159. zepben/ewb/database/sqlite/tables/iec61970/__init__.py +4 -0
  160. zepben/ewb/database/sqlite/tables/iec61970/base/__init__.py +4 -0
  161. zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/__init__.py +4 -0
  162. zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_auxiliary_equipment.py +18 -0
  163. zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_current_transformers.py +21 -0
  164. zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_fault_indicators.py +15 -0
  165. zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_potential_transformers.py +21 -0
  166. zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_sensors.py +14 -0
  167. zepben/ewb/database/sqlite/tables/iec61970/base/core/__init__.py +4 -0
  168. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_ac_dc_terminals.py +14 -0
  169. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_base_voltages.py +20 -0
  170. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_conducting_equipment.py +18 -0
  171. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_connectivity_node_containers.py +14 -0
  172. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_connectivity_nodes.py +15 -0
  173. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_curve_data.py +46 -0
  174. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_curves.py +17 -0
  175. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_equipment.py +20 -0
  176. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_equipment_containers.py +14 -0
  177. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_feeders.py +28 -0
  178. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_geographical_regions.py +15 -0
  179. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_identified_objects.py +29 -0
  180. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_name_types.py +28 -0
  181. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_names.py +36 -0
  182. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_power_system_resources.py +19 -0
  183. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_sub_geographical_regions.py +27 -0
  184. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_substations.py +27 -0
  185. zepben/ewb/database/sqlite/tables/iec61970/base/core/table_terminals.py +35 -0
  186. zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/__init__.py +4 -0
  187. zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagram_object_points.py +35 -0
  188. zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagram_objects.py +31 -0
  189. zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagrams.py +21 -0
  190. zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/__init__.py +4 -0
  191. zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/table_equivalent_branches.py +35 -0
  192. zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/table_equivalent_equipment.py +14 -0
  193. zepben/ewb/database/sqlite/tables/iec61970/base/generation/__init__.py +4 -0
  194. zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/__init__.py +4 -0
  195. zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_battery_units.py +22 -0
  196. zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_photo_voltaic_units.py +15 -0
  197. zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_power_electronics_units.py +26 -0
  198. zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_power_electronics_wind_units.py +15 -0
  199. zepben/ewb/database/sqlite/tables/iec61970/base/meas/__init__.py +4 -0
  200. zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_accumulators.py +15 -0
  201. zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_analogs.py +20 -0
  202. zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_controls.py +20 -0
  203. zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_discretes.py +15 -0
  204. zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_io_points.py +14 -0
  205. zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_measurements.py +30 -0
  206. zepben/ewb/database/sqlite/tables/iec61970/base/protection/__init__.py +4 -0
  207. zepben/ewb/database/sqlite/tables/iec61970/base/protection/table_current_relays.py +22 -0
  208. zepben/ewb/database/sqlite/tables/iec61970/base/scada/__init__.py +4 -0
  209. zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_controls.py +20 -0
  210. zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_points.py +14 -0
  211. zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_sources.py +20 -0
  212. zepben/ewb/database/sqlite/tables/iec61970/base/wires/__init__.py +4 -0
  213. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ac_line_segments.py +20 -0
  214. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_breakers.py +20 -0
  215. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_busbar_sections.py +15 -0
  216. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_clamps.py +23 -0
  217. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_conductors.py +21 -0
  218. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_connectors.py +14 -0
  219. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_cuts.py +23 -0
  220. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_disconnectors.py +15 -0
  221. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_earth_fault_compensators.py +22 -0
  222. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_connections.py +14 -0
  223. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_consumer_phases.py +37 -0
  224. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_consumers.py +26 -0
  225. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_source_phases.py +33 -0
  226. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_sources.py +44 -0
  227. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_fuses.py +20 -0
  228. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ground_disconnectors.py +15 -0
  229. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_grounding_impedances.py +24 -0
  230. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_grounds.py +15 -0
  231. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_jumpers.py +15 -0
  232. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_junctions.py +15 -0
  233. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_linear_shunt_compensators.py +23 -0
  234. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_lines.py +14 -0
  235. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_load_break_switches.py +15 -0
  236. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_impedances.py +14 -0
  237. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_line_parameters.py +14 -0
  238. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_phase_impedances.py +18 -0
  239. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_sequence_impedances.py +27 -0
  240. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_petersen_coils.py +27 -0
  241. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_phase_impedance_data.py +52 -0
  242. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_electronics_connection_phases.py +30 -0
  243. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_electronics_connections.py +50 -0
  244. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_transformer_ends.py +43 -0
  245. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_transformers.py +24 -0
  246. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_protected_switches.py +18 -0
  247. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ratio_tap_changers.py +28 -0
  248. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_reactive_capability_curves.py +18 -0
  249. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_reclosers.py +15 -0
  250. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_regulating_cond_eq.py +19 -0
  251. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_regulating_controls.py +29 -0
  252. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_rotating_machines.py +36 -0
  253. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_series_compensators.py +25 -0
  254. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_shunt_compensators.py +22 -0
  255. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_static_var_compensator.py +24 -0
  256. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_switches.py +21 -0
  257. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_synchronous_machines.py +95 -0
  258. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_tap_changer_controls.py +28 -0
  259. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_tap_changers.py +25 -0
  260. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_transformer_ends.py +30 -0
  261. zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_transformer_star_impedances.py +32 -0
  262. zepben/ewb/database/sqlite/tables/iec61970/infiec61970/__init__.py +4 -0
  263. zepben/ewb/database/sqlite/tables/iec61970/infiec61970/feeder/__init__.py +4 -0
  264. zepben/ewb/database/sqlite/tables/iec61970/infiec61970/feeder/table_circuits.py +27 -0
  265. zepben/ewb/database/sqlite/tables/sqlite_table.py +142 -0
  266. zepben/ewb/database/sqlite/tables/table_metadata_data_sources.py +21 -0
  267. zepben/ewb/database/sqlite/tables/table_version.py +38 -0
  268. zepben/ewb/dataclassy/__init__.py +15 -0
  269. zepben/ewb/dataclassy/dataclass.py +192 -0
  270. zepben/ewb/dataclassy/decorator.py +35 -0
  271. zepben/ewb/dataclassy/functions.py +80 -0
  272. zepben/ewb/examples/__init__.py +6 -0
  273. zepben/ewb/examples/simple_test_network.py +158 -0
  274. zepben/ewb/exceptions.py +52 -0
  275. zepben/ewb/model/__init__.py +4 -0
  276. zepben/ewb/model/busbranch/__init__.py +4 -0
  277. zepben/ewb/model/busbranch/bus_branch.py +1051 -0
  278. zepben/ewb/model/cim/__init__.py +4 -0
  279. zepben/ewb/model/cim/extensions/__init__.py +4 -0
  280. zepben/ewb/model/cim/extensions/iec61968/__init__.py +4 -0
  281. zepben/ewb/model/cim/extensions/iec61968/assetinfo/__init__.py +4 -0
  282. zepben/ewb/model/cim/extensions/iec61968/assetinfo/relay_info.py +128 -0
  283. zepben/ewb/model/cim/extensions/iec61968/metering/__init__.py +4 -0
  284. zepben/ewb/model/cim/extensions/iec61968/metering/pan_demand_reponse_function.py +112 -0
  285. zepben/ewb/model/cim/extensions/iec61970/__init__.py +4 -0
  286. zepben/ewb/model/cim/extensions/iec61970/base/__init__.py +4 -0
  287. zepben/ewb/model/cim/extensions/iec61970/base/core/__init__.py +4 -0
  288. zepben/ewb/model/cim/extensions/iec61970/base/core/site.py +37 -0
  289. zepben/ewb/model/cim/extensions/iec61970/base/feeder/__init__.py +4 -0
  290. zepben/ewb/model/cim/extensions/iec61970/base/feeder/loop.py +207 -0
  291. zepben/ewb/model/cim/extensions/iec61970/base/feeder/lv_feeder.py +258 -0
  292. zepben/ewb/model/cim/extensions/iec61970/base/generation/__init__.py +4 -0
  293. zepben/ewb/model/cim/extensions/iec61970/base/generation/production/__init__.py +4 -0
  294. zepben/ewb/model/cim/extensions/iec61970/base/generation/production/ev_charging_unit.py +18 -0
  295. zepben/ewb/model/cim/extensions/iec61970/base/protection/__init__.py +4 -0
  296. zepben/ewb/model/cim/extensions/iec61970/base/protection/distance_relay.py +69 -0
  297. zepben/ewb/model/cim/extensions/iec61970/base/protection/power_direction_kind.py +35 -0
  298. zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_kind.py +113 -0
  299. zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_function.py +448 -0
  300. zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_scheme.py +97 -0
  301. zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_system.py +97 -0
  302. zepben/ewb/model/cim/extensions/iec61970/base/protection/relay_setting.py +35 -0
  303. zepben/ewb/model/cim/extensions/iec61970/base/protection/voltage_relay.py +20 -0
  304. zepben/ewb/model/cim/extensions/iec61970/base/wires/__init__.py +4 -0
  305. zepben/ewb/model/cim/extensions/iec61970/base/wires/battery_control.py +36 -0
  306. zepben/ewb/model/cim/extensions/iec61970/base/wires/battery_control_mode.py +82 -0
  307. zepben/ewb/model/cim/extensions/iec61970/base/wires/transformer_cooling_type.py +56 -0
  308. zepben/ewb/model/cim/extensions/iec61970/base/wires/transformer_end_rated_s.py +26 -0
  309. zepben/ewb/model/cim/extensions/iec61970/base/wires/vector_group.py +292 -0
  310. zepben/ewb/model/cim/extensions/zbex.py +17 -0
  311. zepben/ewb/model/cim/iec61968/__init__.py +4 -0
  312. zepben/ewb/model/cim/iec61968/assetinfo/__init__.py +4 -0
  313. zepben/ewb/model/cim/iec61968/assetinfo/cable_info.py +15 -0
  314. zepben/ewb/model/cim/iec61968/assetinfo/no_load_test.py +42 -0
  315. zepben/ewb/model/cim/iec61968/assetinfo/open_circuit_test.py +42 -0
  316. zepben/ewb/model/cim/iec61968/assetinfo/overhead_wire_info.py +15 -0
  317. zepben/ewb/model/cim/iec61968/assetinfo/power_transformer_info.py +103 -0
  318. zepben/ewb/model/cim/iec61968/assetinfo/short_circuit_test.py +67 -0
  319. zepben/ewb/model/cim/iec61968/assetinfo/shunt_compensator_info.py +26 -0
  320. zepben/ewb/model/cim/iec61968/assetinfo/switch_info.py +17 -0
  321. zepben/ewb/model/cim/iec61968/assetinfo/transformer_end_info.py +137 -0
  322. zepben/ewb/model/cim/iec61968/assetinfo/transformer_tank_info.py +108 -0
  323. zepben/ewb/model/cim/iec61968/assetinfo/transformer_test.py +26 -0
  324. zepben/ewb/model/cim/iec61968/assetinfo/wire_info.py +24 -0
  325. zepben/ewb/model/cim/iec61968/assetinfo/wire_material_kind.py +55 -0
  326. zepben/ewb/model/cim/iec61968/assets/__init__.py +4 -0
  327. zepben/ewb/model/cim/iec61968/assets/asset.py +154 -0
  328. zepben/ewb/model/cim/iec61968/assets/asset_container.py +16 -0
  329. zepben/ewb/model/cim/iec61968/assets/asset_function.py +15 -0
  330. zepben/ewb/model/cim/iec61968/assets/asset_info.py +19 -0
  331. zepben/ewb/model/cim/iec61968/assets/asset_organisation_role.py +13 -0
  332. zepben/ewb/model/cim/iec61968/assets/asset_owner.py +13 -0
  333. zepben/ewb/model/cim/iec61968/assets/streetlight.py +29 -0
  334. zepben/ewb/model/cim/iec61968/assets/structure.py +16 -0
  335. zepben/ewb/model/cim/iec61968/common/__init__.py +4 -0
  336. zepben/ewb/model/cim/iec61968/common/agreement.py +16 -0
  337. zepben/ewb/model/cim/iec61968/common/document.py +36 -0
  338. zepben/ewb/model/cim/iec61968/common/location.py +129 -0
  339. zepben/ewb/model/cim/iec61968/common/organisation.py +15 -0
  340. zepben/ewb/model/cim/iec61968/common/organisation_role.py +22 -0
  341. zepben/ewb/model/cim/iec61968/common/position_point.py +44 -0
  342. zepben/ewb/model/cim/iec61968/common/street_address.py +28 -0
  343. zepben/ewb/model/cim/iec61968/common/street_detail.py +45 -0
  344. zepben/ewb/model/cim/iec61968/common/town_detail.py +25 -0
  345. zepben/ewb/model/cim/iec61968/customers/__init__.py +4 -0
  346. zepben/ewb/model/cim/iec61968/customers/customer.py +93 -0
  347. zepben/ewb/model/cim/iec61968/customers/customer_agreement.py +107 -0
  348. zepben/ewb/model/cim/iec61968/customers/customer_kind.py +67 -0
  349. zepben/ewb/model/cim/iec61968/customers/pricing_structure.py +88 -0
  350. zepben/ewb/model/cim/iec61968/customers/tariff.py +18 -0
  351. zepben/ewb/model/cim/iec61968/infiec61968/__init__.py +4 -0
  352. zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/__init__.py +4 -0
  353. zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/current_transformer_info.py +51 -0
  354. zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/potential_transformer_info.py +33 -0
  355. zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/transformer_construction_kind.py +67 -0
  356. zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/transformer_function_kind.py +43 -0
  357. zepben/ewb/model/cim/iec61968/infiec61968/infassets/__init__.py +4 -0
  358. zepben/ewb/model/cim/iec61968/infiec61968/infassets/pole.py +87 -0
  359. zepben/ewb/model/cim/iec61968/infiec61968/infassets/streetlight_lamp_kind.py +25 -0
  360. zepben/ewb/model/cim/iec61968/infiec61968/infcommon/__init__.py +4 -0
  361. zepben/ewb/model/cim/iec61968/infiec61968/infcommon/ratio.py +34 -0
  362. zepben/ewb/model/cim/iec61968/metering/__init__.py +4 -0
  363. zepben/ewb/model/cim/iec61968/metering/controlled_appliance.py +150 -0
  364. zepben/ewb/model/cim/iec61968/metering/end_device.py +165 -0
  365. zepben/ewb/model/cim/iec61968/metering/end_device_function.py +17 -0
  366. zepben/ewb/model/cim/iec61968/metering/end_device_function_kind.py +46 -0
  367. zepben/ewb/model/cim/iec61968/metering/meter.py +26 -0
  368. zepben/ewb/model/cim/iec61968/metering/usage_point.py +186 -0
  369. zepben/ewb/model/cim/iec61968/operations/__init__.py +4 -0
  370. zepben/ewb/model/cim/iec61968/operations/operational_restriction.py +92 -0
  371. zepben/ewb/model/cim/iec61970/__init__.py +4 -0
  372. zepben/ewb/model/cim/iec61970/base/__init__.py +4 -0
  373. zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/__init__.py +4 -0
  374. zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/auxiliary_equipment.py +24 -0
  375. zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/current_transformer.py +37 -0
  376. zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/fault_indicator.py +18 -0
  377. zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/potential_transformer.py +38 -0
  378. zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/potential_transformer_kind.py +28 -0
  379. zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/sensor.py +92 -0
  380. zepben/ewb/model/cim/iec61970/base/core/__init__.py +4 -0
  381. zepben/ewb/model/cim/iec61970/base/core/ac_dc_terminal.py +16 -0
  382. zepben/ewb/model/cim/iec61970/base/core/base_voltage.py +17 -0
  383. zepben/ewb/model/cim/iec61970/base/core/conducting_equipment.py +198 -0
  384. zepben/ewb/model/cim/iec61970/base/core/connectivity_node.py +105 -0
  385. zepben/ewb/model/cim/iec61970/base/core/connectivity_node_container.py +15 -0
  386. zepben/ewb/model/cim/iec61970/base/core/curve.py +124 -0
  387. zepben/ewb/model/cim/iec61970/base/core/curve_data.py +29 -0
  388. zepben/ewb/model/cim/iec61970/base/core/equipment.py +366 -0
  389. zepben/ewb/model/cim/iec61970/base/core/equipment_container.py +199 -0
  390. zepben/ewb/model/cim/iec61970/base/core/feeder.py +260 -0
  391. zepben/ewb/model/cim/iec61970/base/core/geographical_region.py +82 -0
  392. zepben/ewb/model/cim/iec61970/base/core/identified_object.py +234 -0
  393. zepben/ewb/model/cim/iec61970/base/core/name.py +36 -0
  394. zepben/ewb/model/cim/iec61970/base/core/name_type.py +203 -0
  395. zepben/ewb/model/cim/iec61970/base/core/phase_code.py +201 -0
  396. zepben/ewb/model/cim/iec61970/base/core/power_system_resource.py +106 -0
  397. zepben/ewb/model/cim/iec61970/base/core/sub_geographical_region.py +93 -0
  398. zepben/ewb/model/cim/iec61970/base/core/substation.py +277 -0
  399. zepben/ewb/model/cim/iec61970/base/core/terminal.py +171 -0
  400. zepben/ewb/model/cim/iec61970/base/diagramlayout/__init__.py +4 -0
  401. zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram.py +109 -0
  402. zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_object.py +160 -0
  403. zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_object_point.py +25 -0
  404. zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_style.py +26 -0
  405. zepben/ewb/model/cim/iec61970/base/diagramlayout/orientation_kind.py +27 -0
  406. zepben/ewb/model/cim/iec61970/base/domain/__init__.py +4 -0
  407. zepben/ewb/model/cim/iec61970/base/domain/unit_symbol.py +492 -0
  408. zepben/ewb/model/cim/iec61970/base/equivalents/__init__.py +4 -0
  409. zepben/ewb/model/cim/iec61970/base/equivalents/equivalent_branch.py +113 -0
  410. zepben/ewb/model/cim/iec61970/base/equivalents/equivalent_equipment.py +15 -0
  411. zepben/ewb/model/cim/iec61970/base/generation/__init__.py +4 -0
  412. zepben/ewb/model/cim/iec61970/base/generation/production/__init__.py +4 -0
  413. zepben/ewb/model/cim/iec61970/base/generation/production/battery_state_kind.py +37 -0
  414. zepben/ewb/model/cim/iec61970/base/generation/production/battery_unit.py +108 -0
  415. zepben/ewb/model/cim/iec61970/base/generation/production/photo_voltaic_unit.py +13 -0
  416. zepben/ewb/model/cim/iec61970/base/generation/production/power_electronics_unit.py +28 -0
  417. zepben/ewb/model/cim/iec61970/base/generation/production/power_electronics_wind_unit.py +13 -0
  418. zepben/ewb/model/cim/iec61970/base/meas/__init__.py +4 -0
  419. zepben/ewb/model/cim/iec61970/base/meas/accumulator.py +13 -0
  420. zepben/ewb/model/cim/iec61970/base/meas/accumulator_value.py +20 -0
  421. zepben/ewb/model/cim/iec61970/base/meas/analog.py +16 -0
  422. zepben/ewb/model/cim/iec61970/base/meas/analog_value.py +20 -0
  423. zepben/ewb/model/cim/iec61970/base/meas/control.py +26 -0
  424. zepben/ewb/model/cim/iec61970/base/meas/discrete.py +13 -0
  425. zepben/ewb/model/cim/iec61970/base/meas/discrete_value.py +20 -0
  426. zepben/ewb/model/cim/iec61970/base/meas/iopoint.py +16 -0
  427. zepben/ewb/model/cim/iec61970/base/meas/measurement.py +60 -0
  428. zepben/ewb/model/cim/iec61970/base/meas/measurement_value.py +21 -0
  429. zepben/ewb/model/cim/iec61970/base/protection/__init__.py +4 -0
  430. zepben/ewb/model/cim/iec61970/base/protection/current_relay.py +23 -0
  431. zepben/ewb/model/cim/iec61970/base/scada/__init__.py +4 -0
  432. zepben/ewb/model/cim/iec61970/base/scada/remote_control.py +22 -0
  433. zepben/ewb/model/cim/iec61970/base/scada/remote_point.py +16 -0
  434. zepben/ewb/model/cim/iec61970/base/scada/remote_source.py +22 -0
  435. zepben/ewb/model/cim/iec61970/base/wires/__init__.py +4 -0
  436. zepben/ewb/model/cim/iec61970/base/wires/ac_line_segment.py +214 -0
  437. zepben/ewb/model/cim/iec61970/base/wires/breaker.py +32 -0
  438. zepben/ewb/model/cim/iec61970/base/wires/busbar_section.py +19 -0
  439. zepben/ewb/model/cim/iec61970/base/wires/clamp.py +32 -0
  440. zepben/ewb/model/cim/iec61970/base/wires/conductor.py +49 -0
  441. zepben/ewb/model/cim/iec61970/base/wires/connector.py +16 -0
  442. zepben/ewb/model/cim/iec61970/base/wires/cut.py +36 -0
  443. zepben/ewb/model/cim/iec61970/base/wires/disconnector.py +17 -0
  444. zepben/ewb/model/cim/iec61970/base/wires/earth_fault_compensator.py +21 -0
  445. zepben/ewb/model/cim/iec61970/base/wires/energy_connection.py +15 -0
  446. zepben/ewb/model/cim/iec61970/base/wires/energy_consumer.py +107 -0
  447. zepben/ewb/model/cim/iec61970/base/wires/energy_consumer_phase.py +56 -0
  448. zepben/ewb/model/cim/iec61970/base/wires/energy_source.py +172 -0
  449. zepben/ewb/model/cim/iec61970/base/wires/energy_source_phase.py +45 -0
  450. zepben/ewb/model/cim/iec61970/base/wires/fuse.py +23 -0
  451. zepben/ewb/model/cim/iec61970/base/wires/ground.py +15 -0
  452. zepben/ewb/model/cim/iec61970/base/wires/ground_disconnector.py +15 -0
  453. zepben/ewb/model/cim/iec61970/base/wires/grounding_impedance.py +19 -0
  454. zepben/ewb/model/cim/iec61970/base/wires/jumper.py +16 -0
  455. zepben/ewb/model/cim/iec61970/base/wires/junction.py +15 -0
  456. zepben/ewb/model/cim/iec61970/base/wires/line.py +13 -0
  457. zepben/ewb/model/cim/iec61970/base/wires/linear_shunt_compensator.py +26 -0
  458. zepben/ewb/model/cim/iec61970/base/wires/load_break_switch.py +14 -0
  459. zepben/ewb/model/cim/iec61970/base/wires/per_length_impedance.py +13 -0
  460. zepben/ewb/model/cim/iec61970/base/wires/per_length_line_parameter.py +13 -0
  461. zepben/ewb/model/cim/iec61970/base/wires/per_length_phase_impedance.py +99 -0
  462. zepben/ewb/model/cim/iec61970/base/wires/per_length_sequence_impedance.py +43 -0
  463. zepben/ewb/model/cim/iec61970/base/wires/petersen_coil.py +22 -0
  464. zepben/ewb/model/cim/iec61970/base/wires/phase_impedance_data.py +37 -0
  465. zepben/ewb/model/cim/iec61970/base/wires/phase_shunt_connection_kind.py +38 -0
  466. zepben/ewb/model/cim/iec61970/base/wires/power_electronics_connection.py +524 -0
  467. zepben/ewb/model/cim/iec61970/base/wires/power_electronics_connection_phase.py +34 -0
  468. zepben/ewb/model/cim/iec61970/base/wires/power_transformer.py +217 -0
  469. zepben/ewb/model/cim/iec61970/base/wires/power_transformer_end.py +208 -0
  470. zepben/ewb/model/cim/iec61970/base/wires/protected_switch.py +96 -0
  471. zepben/ewb/model/cim/iec61970/base/wires/ratio_tap_changer.py +30 -0
  472. zepben/ewb/model/cim/iec61970/base/wires/reactive_capability_curve.py +16 -0
  473. zepben/ewb/model/cim/iec61970/base/wires/recloser.py +15 -0
  474. zepben/ewb/model/cim/iec61970/base/wires/regulating_cond_eq.py +45 -0
  475. zepben/ewb/model/cim/iec61970/base/wires/regulating_control.py +173 -0
  476. zepben/ewb/model/cim/iec61970/base/wires/regulating_control_mode_kind.py +46 -0
  477. zepben/ewb/model/cim/iec61970/base/wires/rotating_machine.py +36 -0
  478. zepben/ewb/model/cim/iec61970/base/wires/series_compensator.py +42 -0
  479. zepben/ewb/model/cim/iec61970/base/wires/shunt_compensator.py +59 -0
  480. zepben/ewb/model/cim/iec61970/base/wires/single_phase_kind.py +105 -0
  481. zepben/ewb/model/cim/iec61970/base/wires/static_var_compensator.py +40 -0
  482. zepben/ewb/model/cim/iec61970/base/wires/svc_control_mode.py +28 -0
  483. zepben/ewb/model/cim/iec61970/base/wires/switch.py +119 -0
  484. zepben/ewb/model/cim/iec61970/base/wires/synchronous_machine.py +168 -0
  485. zepben/ewb/model/cim/iec61970/base/wires/synchronous_machine_kind.py +44 -0
  486. zepben/ewb/model/cim/iec61970/base/wires/tap_changer.py +150 -0
  487. zepben/ewb/model/cim/iec61970/base/wires/tap_changer_control.py +49 -0
  488. zepben/ewb/model/cim/iec61970/base/wires/transformer_end.py +73 -0
  489. zepben/ewb/model/cim/iec61970/base/wires/transformer_star_impedance.py +48 -0
  490. zepben/ewb/model/cim/iec61970/base/wires/winding_connection.py +43 -0
  491. zepben/ewb/model/cim/iec61970/infiec61970/__init__.py +4 -0
  492. zepben/ewb/model/cim/iec61970/infiec61970/feeder/__init__.py +4 -0
  493. zepben/ewb/model/cim/iec61970/infiec61970/feeder/circuit.py +144 -0
  494. zepben/ewb/model/phases.py +168 -0
  495. zepben/ewb/model/resistance_reactance.py +40 -0
  496. zepben/ewb/services/__init__.py +4 -0
  497. zepben/ewb/services/common/__init__.py +16 -0
  498. zepben/ewb/services/common/base_service.py +383 -0
  499. zepben/ewb/services/common/base_service_comparator.py +394 -0
  500. zepben/ewb/services/common/difference.py +47 -0
  501. zepben/ewb/services/common/enum_mapper.py +55 -0
  502. zepben/ewb/services/common/meta/__init__.py +4 -0
  503. zepben/ewb/services/common/meta/data_source.py +16 -0
  504. zepben/ewb/services/common/meta/metadata_collection.py +28 -0
  505. zepben/ewb/services/common/meta/metadata_translations.py +47 -0
  506. zepben/ewb/services/common/meta/service_info.py +22 -0
  507. zepben/ewb/services/common/reference_resolvers.py +374 -0
  508. zepben/ewb/services/common/resolver.py +597 -0
  509. zepben/ewb/services/common/translator/__init__.py +4 -0
  510. zepben/ewb/services/common/translator/base_cim2proto.py +92 -0
  511. zepben/ewb/services/common/translator/base_proto2cim.py +112 -0
  512. zepben/ewb/services/common/translator/service_differences.py +81 -0
  513. zepben/ewb/services/common/translator/util.py +78 -0
  514. zepben/ewb/services/customer/__init__.py +4 -0
  515. zepben/ewb/services/customer/customer_service_comparator.py +52 -0
  516. zepben/ewb/services/customer/customers.py +23 -0
  517. zepben/ewb/services/customer/translator/__init__.py +21 -0
  518. zepben/ewb/services/customer/translator/customer_cim2proto.py +71 -0
  519. zepben/ewb/services/customer/translator/customer_enum_mappers.py +18 -0
  520. zepben/ewb/services/customer/translator/customer_proto2cim.py +87 -0
  521. zepben/ewb/services/diagram/__init__.py +4 -0
  522. zepben/ewb/services/diagram/diagram_service_comparator.py +39 -0
  523. zepben/ewb/services/diagram/diagrams.py +107 -0
  524. zepben/ewb/services/diagram/translator/__init__.py +11 -0
  525. zepben/ewb/services/diagram/translator/diagram_cim2proto.py +51 -0
  526. zepben/ewb/services/diagram/translator/diagram_enum_mappers.py +21 -0
  527. zepben/ewb/services/diagram/translator/diagram_proto2cim.py +61 -0
  528. zepben/ewb/services/measurement/__init__.py +4 -0
  529. zepben/ewb/services/measurement/measurements.py +35 -0
  530. zepben/ewb/services/measurement/translator/__init__.py +6 -0
  531. zepben/ewb/services/measurement/translator/measurement_cim2proto.py +42 -0
  532. zepben/ewb/services/measurement/translator/measurement_proto2cim.py +52 -0
  533. zepben/ewb/services/network/__init__.py +4 -0
  534. zepben/ewb/services/network/network_extensions.py +119 -0
  535. zepben/ewb/services/network/network_service.py +302 -0
  536. zepben/ewb/services/network/network_service_comparator.py +1322 -0
  537. zepben/ewb/services/network/network_state.py +34 -0
  538. zepben/ewb/services/network/tracing/__init__.py +4 -0
  539. zepben/ewb/services/network/tracing/busbranch_trace.py +36 -0
  540. zepben/ewb/services/network/tracing/connectivity/__init__.py +4 -0
  541. zepben/ewb/services/network/tracing/connectivity/connectivity_result.py +105 -0
  542. zepben/ewb/services/network/tracing/connectivity/nominal_phase_path.py +23 -0
  543. zepben/ewb/services/network/tracing/connectivity/phase_paths.py +70 -0
  544. zepben/ewb/services/network/tracing/connectivity/terminal_connectivity_connected.py +226 -0
  545. zepben/ewb/services/network/tracing/connectivity/terminal_connectivity_internal.py +64 -0
  546. zepben/ewb/services/network/tracing/connectivity/transformer_phase_paths.py +202 -0
  547. zepben/ewb/services/network/tracing/connectivity/xy_candidate_phase_paths.py +235 -0
  548. zepben/ewb/services/network/tracing/connectivity/xy_phase_step.py +24 -0
  549. zepben/ewb/services/network/tracing/feeder/__init__.py +4 -0
  550. zepben/ewb/services/network/tracing/feeder/assign_to_feeders.py +202 -0
  551. zepben/ewb/services/network/tracing/feeder/assign_to_lv_feeders.py +202 -0
  552. zepben/ewb/services/network/tracing/feeder/clear_direction.py +80 -0
  553. zepben/ewb/services/network/tracing/feeder/direction_status.py +133 -0
  554. zepben/ewb/services/network/tracing/feeder/feeder_direction.py +107 -0
  555. zepben/ewb/services/network/tracing/feeder/set_direction.py +143 -0
  556. zepben/ewb/services/network/tracing/find_swer_equipment.py +175 -0
  557. zepben/ewb/services/network/tracing/networktrace/__init__.py +4 -0
  558. zepben/ewb/services/network/tracing/networktrace/actions/__init__.py +4 -0
  559. zepben/ewb/services/network/tracing/networktrace/actions/equipment_tree_builder.py +71 -0
  560. zepben/ewb/services/network/tracing/networktrace/actions/tree_node.py +37 -0
  561. zepben/ewb/services/network/tracing/networktrace/compute_data.py +60 -0
  562. zepben/ewb/services/network/tracing/networktrace/conditions/__init__.py +4 -0
  563. zepben/ewb/services/network/tracing/networktrace/conditions/conditions.py +73 -0
  564. zepben/ewb/services/network/tracing/networktrace/conditions/direction_condition.py +63 -0
  565. zepben/ewb/services/network/tracing/networktrace/conditions/equipment_step_limit_condition.py +26 -0
  566. zepben/ewb/services/network/tracing/networktrace/conditions/equipment_type_step_limit_condition.py +44 -0
  567. zepben/ewb/services/network/tracing/networktrace/conditions/network_trace_queue_condition.py +67 -0
  568. zepben/ewb/services/network/tracing/networktrace/conditions/network_trace_stop_condition.py +65 -0
  569. zepben/ewb/services/network/tracing/networktrace/conditions/open_condition.py +39 -0
  570. zepben/ewb/services/network/tracing/networktrace/network_trace.py +450 -0
  571. zepben/ewb/services/network/tracing/networktrace/network_trace_action_type.py +42 -0
  572. zepben/ewb/services/network/tracing/networktrace/network_trace_queue_next.py +84 -0
  573. zepben/ewb/services/network/tracing/networktrace/network_trace_step.py +125 -0
  574. zepben/ewb/services/network/tracing/networktrace/network_trace_step_path_provider.py +351 -0
  575. zepben/ewb/services/network/tracing/networktrace/network_trace_tracker.py +39 -0
  576. zepben/ewb/services/network/tracing/networktrace/operators/__init__.py +14 -0
  577. zepben/ewb/services/network/tracing/networktrace/operators/equipment_container_state_operators.py +264 -0
  578. zepben/ewb/services/network/tracing/networktrace/operators/feeder_direction_state_operations.py +181 -0
  579. zepben/ewb/services/network/tracing/networktrace/operators/in_service_state_operators.py +76 -0
  580. zepben/ewb/services/network/tracing/networktrace/operators/network_state_operators.py +120 -0
  581. zepben/ewb/services/network/tracing/networktrace/operators/open_state_operators.py +104 -0
  582. zepben/ewb/services/network/tracing/networktrace/operators/phase_state_operators.py +56 -0
  583. zepben/ewb/services/network/tracing/networktrace/tracing.py +132 -0
  584. zepben/ewb/services/network/tracing/phases/__init__.py +4 -0
  585. zepben/ewb/services/network/tracing/phases/phase_inferrer.py +205 -0
  586. zepben/ewb/services/network/tracing/phases/phase_status.py +101 -0
  587. zepben/ewb/services/network/tracing/phases/remove_phases.py +143 -0
  588. zepben/ewb/services/network/tracing/phases/set_phases.py +490 -0
  589. zepben/ewb/services/network/tracing/traversal/__init__.py +4 -0
  590. zepben/ewb/services/network/tracing/traversal/context_value_computer.py +63 -0
  591. zepben/ewb/services/network/tracing/traversal/debug_logging.py +124 -0
  592. zepben/ewb/services/network/tracing/traversal/queue.py +112 -0
  593. zepben/ewb/services/network/tracing/traversal/queue_condition.py +75 -0
  594. zepben/ewb/services/network/tracing/traversal/step_action.py +83 -0
  595. zepben/ewb/services/network/tracing/traversal/step_context.py +59 -0
  596. zepben/ewb/services/network/tracing/traversal/stop_condition.py +57 -0
  597. zepben/ewb/services/network/tracing/traversal/traversal.py +634 -0
  598. zepben/ewb/services/network/tracing/traversal/traversal_condition.py +22 -0
  599. zepben/ewb/services/network/tracing/traversal/weighted_priority_queue.py +85 -0
  600. zepben/ewb/services/network/tracing/util.py +93 -0
  601. zepben/ewb/services/network/translator/__init__.py +392 -0
  602. zepben/ewb/services/network/translator/network_cim2proto.py +1782 -0
  603. zepben/ewb/services/network/translator/network_enum_mappers.py +78 -0
  604. zepben/ewb/services/network/translator/network_proto2cim.py +2147 -0
  605. zepben/ewb/services/services.py +48 -0
  606. zepben/ewb/streaming/__init__.py +4 -0
  607. zepben/ewb/streaming/data/__init__.py +4 -0
  608. zepben/ewb/streaming/data/current_state_event.py +314 -0
  609. zepben/ewb/streaming/data/current_state_event_batch.py +25 -0
  610. zepben/ewb/streaming/data/set_current_states_status.py +286 -0
  611. zepben/ewb/streaming/exceptions.py +14 -0
  612. zepben/ewb/streaming/get/__init__.py +4 -0
  613. zepben/ewb/streaming/get/consumer.py +209 -0
  614. zepben/ewb/streaming/get/customer_consumer.py +111 -0
  615. zepben/ewb/streaming/get/diagram_consumer.py +107 -0
  616. zepben/ewb/streaming/get/hierarchy/__init__.py +4 -0
  617. zepben/ewb/streaming/get/hierarchy/data.py +27 -0
  618. zepben/ewb/streaming/get/included_energized_containers.py +34 -0
  619. zepben/ewb/streaming/get/included_energizing_containers.py +34 -0
  620. zepben/ewb/streaming/get/network_consumer.py +870 -0
  621. zepben/ewb/streaming/get/query_network_state_client.py +64 -0
  622. zepben/ewb/streaming/get/query_network_state_service.py +94 -0
  623. zepben/ewb/streaming/grpc/__init__.py +4 -0
  624. zepben/ewb/streaming/grpc/auth_token_plugin.py +24 -0
  625. zepben/ewb/streaming/grpc/connect.py +209 -0
  626. zepben/ewb/streaming/grpc/grpc.py +107 -0
  627. zepben/ewb/streaming/grpc/grpc_channel_builder.py +185 -0
  628. zepben/ewb/streaming/mutations/__init__.py +4 -0
  629. zepben/ewb/streaming/mutations/update_network_state_client.py +80 -0
  630. zepben/ewb/streaming/mutations/update_network_state_service.py +61 -0
  631. zepben/ewb/testing/__init__.py +4 -0
  632. zepben/ewb/testing/test_network_builder.py +816 -0
  633. zepben/ewb/types.py +17 -0
  634. zepben/ewb/util.py +189 -0
  635. zepben_ewb-1.0.0b1.dist-info/METADATA +102 -0
  636. zepben_ewb-1.0.0b1.dist-info/RECORD +639 -0
  637. zepben_ewb-1.0.0b1.dist-info/WHEEL +5 -0
  638. zepben_ewb-1.0.0b1.dist-info/licenses/LICENSE +374 -0
  639. zepben_ewb-1.0.0b1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,597 @@
1
+ # Copyright 2024 Zeppelin Bend Pty Ltd
2
+ # This Source Code Form is subject to the terms of the Mozilla Public
3
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+
6
+ from __future__ import annotations
7
+
8
+ __all__ = ["ae_terminal", "agreements", "at_location", "ce_base_voltage", "ce_terminals", "circuits", "cn_terminals", "conducting_equipment",
9
+ "connectivity_node", "containers", "control", "current_containers", "current_transformer_info", "customer", "diagram", "diagram_objects",
10
+ "ec_equipment", "ec_phases", "ed_usage_points", "end_devices", "end_substation", "end_terminal", "ends", "energised_end_no_load_tests",
11
+ "energised_end_open_circuit_tests", "energised_end_short_circuit_tests", "energy_consumer", "energy_source", "eq_usage_points", "es_phases",
12
+ "fuse_function", "geographical_region", "grounded_end_short_circuit_tests", "loop", "loop_circuits", "loop_energizing_substations",
13
+ "loop_substations", "loops", "lv_feeder_normal_head_terminal", "measurement", "normal_energized_feeders", "normal_energized_loops",
14
+ "normal_energized_lv_feeders", "normal_energizing_feeders", "normal_energizing_substation", "normal_head_terminal", "open_end_open_circuit_tests",
15
+ "operational_restrictions", "or_equipment", "organisation", "organisation_roles", "per_length_impedance",
16
+ "phase_power_electronics_connection", "pole", "potential_transformer_info", "power_electronics_connection_phase", "power_electronics_unit",
17
+ "power_transformer", "power_transformer_info", "power_transformer_info_transformer_tank_info", "prf_protected_switch", "prf_scheme",
18
+ "prf_sensor", "pricing_structures", "prscheme_function", "prscheme_system", "prsystem_scheme", "ps_relay_function", "psr_location",
19
+ "ratio_tap_changer", "rc_regulating_cond_eq", "rc_terminal", "rce_regulating_control", "relay_info", "remote_control", "remote_source",
20
+ "sen_relay_function", "service_location", "shunt_compensator_info", "star_impedance_transformer_end_info", "streetlights",
21
+ "sub_geographical_region", "sub_geographical_regions", "substations", "switch_info", "tariffs", "tc_tap_changer_control", "te_base_voltage",
22
+ "te_terminal", "transformer_end", "transformer_end_info", "transformer_end_transformer_star_impedance", "transformer_star_impedance",
23
+ "transformer_tank_info", "unit_power_electronics_connection", "up_equipment", "usage_point_location", "wire_info", "cut_ac_line_segment", "cuts",
24
+ "clamp_ac_line_segment", "clamps"]
25
+
26
+ from zepben.ewb import AcLineSegment, Asset, AuxiliaryEquipment, ConductingEquipment, PowerTransformer, Pole, Streetlight, ConnectivityNode, \
27
+ Control, Customer, CustomerAgreement, Equipment, EquipmentContainer, EnergyConsumer, EnergySource, \
28
+ EnergySourcePhase, Measurement, OperationalRestriction, OrganisationRole, PowerSystemResource, PricingStructure, RemoteControl, RemoteSource, Substation, \
29
+ Terminal, \
30
+ Circuit, Loop, \
31
+ PowerElectronicsUnit, PowerElectronicsConnection, TransformerTankInfo, TransformerEndInfo, PowerTransformerInfo, \
32
+ TransformerStarImpedance, ShuntCompensator, LvFeeder, PotentialTransformer, CurrentTransformer, ProtectedSwitch, Switch, RegulatingControl, \
33
+ ProtectionRelayFunction, ProtectionRelayScheme, ProtectionRelaySystem, Sensor, Fuse, BatteryUnit, \
34
+ SynchronousMachine
35
+ from zepben.ewb.model.cim.iec61968.metering.end_device import EndDevice
36
+ from zepben.ewb.model.cim.iec61968.metering.usage_point import UsagePoint
37
+ from zepben.ewb.model.cim.iec61970.base.core.feeder import Feeder
38
+ from zepben.ewb.model.cim.iec61970.base.core.geographical_region import GeographicalRegion
39
+ from zepben.ewb.model.cim.iec61970.base.core.sub_geographical_region import SubGeographicalRegion
40
+ from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram import Diagram
41
+ from zepben.ewb.model.cim.iec61970.base.diagramlayout.diagram_object import DiagramObject
42
+ from zepben.ewb.model.cim.iec61970.base.wires.clamp import Clamp
43
+ from zepben.ewb.model.cim.iec61970.base.wires.conductor import Conductor
44
+ from zepben.ewb.model.cim.iec61970.base.wires.cut import Cut
45
+ from zepben.ewb.model.cim.iec61970.base.wires.energy_consumer_phase import EnergyConsumerPhase
46
+ from zepben.ewb.model.cim.iec61970.base.wires.power_electronics_connection_phase import PowerElectronicsConnectionPhase
47
+ from zepben.ewb.model.cim.iec61970.base.wires.power_transformer_end import PowerTransformerEnd
48
+ from zepben.ewb.model.cim.iec61970.base.wires.ratio_tap_changer import RatioTapChanger
49
+ from zepben.ewb.model.cim.iec61970.base.wires.regulating_cond_eq import RegulatingCondEq
50
+ from zepben.ewb.model.cim.iec61970.base.wires.tap_changer import TapChanger
51
+ from zepben.ewb.model.cim.iec61970.base.wires.transformer_end import TransformerEnd
52
+ from zepben.ewb.services.common.reference_resolvers import *
53
+
54
+
55
+ def ae_terminal(auxiliary_equipment: AuxiliaryEquipment) -> BoundReferenceResolver:
56
+ # noinspection PyArgumentList
57
+ return BoundReferenceResolver(auxiliary_equipment, aux_equip_to_term_resolver, None)
58
+
59
+
60
+ def agreements(c: Customer) -> BoundReferenceResolver:
61
+ # noinspection PyArgumentList
62
+ return BoundReferenceResolver(c, cust_to_custagr_resolver, custagr_to_cust_resolver)
63
+
64
+
65
+ def assets(power_system_resource: PowerSystemResource) -> BoundReferenceResolver:
66
+ # noinspection PyArgumentList
67
+ return BoundReferenceResolver(power_system_resource, psr_to_asset_resolver, asset_to_psr_resolver)
68
+
69
+
70
+ def at_location(asset: Asset) -> BoundReferenceResolver:
71
+ # noinspection PyArgumentList
72
+ return BoundReferenceResolver(asset, asset_to_location_resolver, None)
73
+
74
+
75
+ def battery_controls(bu: BatteryUnit) -> BoundReferenceResolver:
76
+ # noinspection PyArgumentList
77
+ return BoundReferenceResolver(bu, battery_unit_to_battery_control_resolver, None)
78
+
79
+
80
+ def ce_base_voltage(ce: ConductingEquipment) -> BoundReferenceResolver:
81
+ # noinspection PyArgumentList
82
+ return BoundReferenceResolver(ce, cond_equip_to_bv_resolver, None)
83
+
84
+
85
+ def ce_terminals(ce: ConductingEquipment) -> BoundReferenceResolver:
86
+ # noinspection PyArgumentList
87
+ return BoundReferenceResolver(ce, cond_equip_to_terminal_resolver, term_to_ce_resolver)
88
+
89
+
90
+ def circuits(substation: Substation) -> BoundReferenceResolver:
91
+ # noinspection PyArgumentList
92
+ return BoundReferenceResolver(substation, sub_to_circuit_resolver, circuit_to_sub_resolver)
93
+
94
+
95
+ def clamp_ac_line_segment(clamp: Clamp) -> BoundReferenceResolver:
96
+ # noinspection PyArgumentList
97
+ return BoundReferenceResolver(clamp, clamp_to_acls_resolver, None)
98
+
99
+
100
+ def clamps(acls: AcLineSegment) -> BoundReferenceResolver:
101
+ # noinspection PyArgumentList
102
+ return BoundReferenceResolver(acls, acls_to_clamp_resolver, None)
103
+
104
+
105
+ def cn_terminals(cn: ConnectivityNode) -> BoundReferenceResolver:
106
+ # noinspection PyArgumentList
107
+ return BoundReferenceResolver(cn, conn_node_to_term_resolver, term_to_cn_resolver)
108
+
109
+
110
+ def conducting_equipment(terminal: Terminal) -> BoundReferenceResolver:
111
+ # noinspection PyArgumentList
112
+ return BoundReferenceResolver(terminal, term_to_ce_resolver, cond_equip_to_terminal_resolver)
113
+
114
+
115
+ def connectivity_node(terminal: Terminal) -> BoundReferenceResolver:
116
+ # noinspection PyArgumentList
117
+ return BoundReferenceResolver(terminal, term_to_cn_resolver, conn_node_to_term_resolver)
118
+
119
+
120
+ def containers(equipment: Equipment) -> BoundReferenceResolver:
121
+ # noinspection PyArgumentList
122
+ return BoundReferenceResolver(equipment, eq_to_ec_resolver, ec_to_eq_resolver)
123
+
124
+
125
+ def control(rc: RemoteControl) -> BoundReferenceResolver:
126
+ # noinspection PyArgumentList
127
+ return BoundReferenceResolver(rc, rc_to_cont_resolver, control_to_remote_control_resolver)
128
+
129
+
130
+ def current_containers(equipment: Equipment) -> BoundReferenceResolver:
131
+ # noinspection PyArgumentList
132
+ return BoundReferenceResolver(equipment, eq_to_curcontainer_resolver, ec_to_curequipment_resolver)
133
+
134
+
135
+ def current_transformer_info(current_transformer: CurrentTransformer) -> BoundReferenceResolver:
136
+ # noinspection PyArgumentList
137
+ return BoundReferenceResolver(current_transformer, ct_to_cti_resolver, None)
138
+
139
+
140
+ def customer(customer_agreement: CustomerAgreement) -> BoundReferenceResolver:
141
+ # noinspection PyArgumentList
142
+ return BoundReferenceResolver(customer_agreement, custagr_to_cust_resolver, cust_to_custagr_resolver)
143
+
144
+
145
+ def cut_ac_line_segment(cut: Cut) -> BoundReferenceResolver:
146
+ # noinspection PyArgumentList
147
+ return BoundReferenceResolver(cut, cut_to_acls_resolver, None)
148
+
149
+
150
+ def cuts(acls: AcLineSegment) -> BoundReferenceResolver:
151
+ # noinspection PyArgumentList
152
+ return BoundReferenceResolver(acls, acls_to_cut_resolver, None)
153
+
154
+
155
+ def diagram(diagram_object: DiagramObject) -> BoundReferenceResolver:
156
+ # noinspection PyArgumentList
157
+ return BoundReferenceResolver(diagram_object, diagobj_to_diag_resolver, diag_to_diagobj_resolver)
158
+
159
+
160
+ def diagram_objects(d: Diagram) -> BoundReferenceResolver:
161
+ # noinspection PyArgumentList
162
+ return BoundReferenceResolver(d, diag_to_diagobj_resolver, diagobj_to_diag_resolver)
163
+
164
+
165
+ def ec_equipment(equipment_container: EquipmentContainer) -> BoundReferenceResolver:
166
+ # noinspection PyArgumentList
167
+ return BoundReferenceResolver(equipment_container, ec_to_eq_resolver, eq_to_ec_resolver)
168
+
169
+
170
+ def ec_phases(ec: EnergyConsumer) -> BoundReferenceResolver:
171
+ # noinspection PyArgumentList
172
+ return BoundReferenceResolver(ec, ec_to_ecp_resolver, ecp_to_ec_resolver)
173
+
174
+
175
+ def ed_usage_points(end_device: EndDevice) -> BoundReferenceResolver:
176
+ # noinspection PyArgumentList
177
+ return BoundReferenceResolver(end_device, ed_to_up_resolver, up_to_ed_resolver)
178
+
179
+
180
+ def end_devices(usage_point: UsagePoint) -> BoundReferenceResolver:
181
+ # noinspection PyArgumentList
182
+ return BoundReferenceResolver(usage_point, up_to_ed_resolver, ed_to_up_resolver)
183
+
184
+
185
+ def end_device_functions(end_device: EndDevice) -> BoundReferenceResolver:
186
+ # noinspection PyArgumentList
187
+ return BoundReferenceResolver(end_device, ed_to_edf_resolver, None)
188
+
189
+
190
+ def end_substation(circuit: Circuit) -> BoundReferenceResolver:
191
+ # noinspection PyArgumentList
192
+ return BoundReferenceResolver(circuit, circuit_to_sub_resolver, sub_to_circuit_resolver)
193
+
194
+
195
+ def end_terminal(circuit: Circuit) -> BoundReferenceResolver:
196
+ # noinspection PyArgumentList
197
+ return BoundReferenceResolver(circuit, circuit_to_term_resolver, None)
198
+
199
+
200
+ def ends(pt: PowerTransformer) -> BoundReferenceResolver:
201
+ # noinspection PyArgumentList
202
+ return BoundReferenceResolver(pt, pt_to_pte_resolver, pte_to_pt_resolver)
203
+
204
+
205
+ def energised_end_no_load_tests(tei: TransformerEndInfo) -> BoundReferenceResolver:
206
+ # noinspection PyArgumentList
207
+ return BoundReferenceResolver(tei, tei_to_ee_nlt_resolver, None)
208
+
209
+
210
+ def energised_end_open_circuit_tests(tei: TransformerEndInfo) -> BoundReferenceResolver:
211
+ # noinspection PyArgumentList
212
+ return BoundReferenceResolver(tei, tei_to_ee_oct_resolver, None)
213
+
214
+
215
+ def energised_end_short_circuit_tests(tei: TransformerEndInfo) -> BoundReferenceResolver:
216
+ # noinspection PyArgumentList
217
+ return BoundReferenceResolver(tei, tei_to_ee_sct_resolver, None)
218
+
219
+
220
+ def energy_consumer(energy_consumer_phase: EnergyConsumerPhase) -> BoundReferenceResolver:
221
+ # noinspection PyArgumentList
222
+ return BoundReferenceResolver(energy_consumer_phase, ecp_to_ec_resolver, ec_to_ecp_resolver)
223
+
224
+
225
+ def energy_source(energy_source_phase: EnergySourcePhase) -> BoundReferenceResolver:
226
+ # noinspection PyArgumentList
227
+ return BoundReferenceResolver(energy_source_phase, esp_to_es_resolver, es_to_esp_resolver)
228
+
229
+
230
+ def eq_usage_points(equipment: Equipment) -> BoundReferenceResolver:
231
+ # noinspection PyArgumentList
232
+ return BoundReferenceResolver(equipment, eq_to_up_resolver, up_to_eq_resolver)
233
+
234
+
235
+ def es_phases(es: EnergySource) -> BoundReferenceResolver:
236
+ # noinspection PyArgumentList
237
+ return BoundReferenceResolver(es, es_to_esp_resolver, esp_to_es_resolver)
238
+
239
+
240
+ def fuse_function(fuse: Fuse) -> BoundReferenceResolver:
241
+ # noinspection PyArgumentList
242
+ return BoundReferenceResolver(fuse, fuse_to_prf_resolver, None)
243
+
244
+
245
+ def geographical_region(sgr: SubGeographicalRegion) -> BoundReferenceResolver:
246
+ # noinspection PyArgumentList
247
+ return BoundReferenceResolver(sgr, sgr_to_gr_resolver, gr_to_sgr_resolver)
248
+
249
+
250
+ def grounded_end_short_circuit_tests(tei: TransformerEndInfo) -> BoundReferenceResolver:
251
+ # noinspection PyArgumentList
252
+ return BoundReferenceResolver(tei, tei_to_ge_sct_resolver, None)
253
+
254
+
255
+ def loop(circuit: Circuit) -> BoundReferenceResolver:
256
+ # noinspection PyArgumentList
257
+ return BoundReferenceResolver(circuit, circuit_to_loop_resolver, loop_to_circuit_resolver)
258
+
259
+
260
+ def loop_circuits(l_: Loop) -> BoundReferenceResolver:
261
+ # noinspection PyArgumentList
262
+ return BoundReferenceResolver(l_, loop_to_circuit_resolver, circuit_to_loop_resolver)
263
+
264
+
265
+ def loop_energizing_substations(l_: Loop) -> BoundReferenceResolver:
266
+ # noinspection PyArgumentList
267
+ return BoundReferenceResolver(l_, loop_to_esub_resolver, sub_to_eloop_resolver)
268
+
269
+
270
+ def loop_substations(l_: Loop) -> BoundReferenceResolver:
271
+ # noinspection PyArgumentList
272
+ return BoundReferenceResolver(l_, loop_to_sub_resolver, sub_to_loop_resolver)
273
+
274
+
275
+ def loops(substation: Substation) -> BoundReferenceResolver:
276
+ # noinspection PyArgumentList
277
+ return BoundReferenceResolver(substation, sub_to_loop_resolver, loop_to_sub_resolver)
278
+
279
+
280
+ def lv_feeder_normal_head_terminal(lv_feeder: LvFeeder) -> BoundReferenceResolver:
281
+ # noinspection PyArgumentList
282
+ return BoundReferenceResolver(lv_feeder, lvfeeder_to_nht_resolver, None)
283
+
284
+
285
+ def measurement(rs: RemoteSource) -> BoundReferenceResolver:
286
+ # noinspection PyArgumentList
287
+ return BoundReferenceResolver(rs, rs_to_meas_resolver, meas_to_rs_resolver)
288
+
289
+
290
+ def normal_energized_feeders(substation: Substation) -> BoundReferenceResolver:
291
+ # noinspection PyArgumentList
292
+ return BoundReferenceResolver(substation, sub_to_feeder_resolver, feeder_to_nes_resolver)
293
+
294
+
295
+ def normal_energized_loops(substation: Substation) -> BoundReferenceResolver:
296
+ # noinspection PyArgumentList
297
+ return BoundReferenceResolver(substation, sub_to_eloop_resolver, loop_to_esub_resolver)
298
+
299
+
300
+ def normal_energized_lv_feeders(feeder: Feeder) -> BoundReferenceResolver:
301
+ # noinspection PyArgumentList
302
+ return BoundReferenceResolver(feeder, feeder_to_nelvf_resolver, lvfeeder_to_nef_resolver)
303
+
304
+
305
+ def current_energized_lv_feeders(feeder: Feeder) -> BoundReferenceResolver:
306
+ # noinspection PyArgumentList
307
+ return BoundReferenceResolver(feeder, feeder_to_celvf_resolver, lvfeeder_to_cef_resolver)
308
+
309
+
310
+ def normal_energizing_feeders(lv_feeder: LvFeeder) -> BoundReferenceResolver:
311
+ # noinspection PyArgumentList
312
+ return BoundReferenceResolver(lv_feeder, lvfeeder_to_nef_resolver, feeder_to_nelvf_resolver)
313
+
314
+
315
+ def current_energizing_feeders(lv_feeder: LvFeeder) -> BoundReferenceResolver:
316
+ # noinspection PyArgumentList
317
+ return BoundReferenceResolver(lv_feeder, lvfeeder_to_cef_resolver, feeder_to_celvf_resolver)
318
+
319
+
320
+ def normal_energizing_substation(feeder: Feeder) -> BoundReferenceResolver:
321
+ # noinspection PyArgumentList
322
+ return BoundReferenceResolver(feeder, feeder_to_nes_resolver, sub_to_feeder_resolver)
323
+
324
+
325
+ def normal_head_terminal(feeder: Feeder) -> BoundReferenceResolver:
326
+ # noinspection PyArgumentList
327
+ return BoundReferenceResolver(feeder, feeder_to_nht_resolver, None)
328
+
329
+
330
+ def open_end_open_circuit_tests(tei: TransformerEndInfo) -> BoundReferenceResolver:
331
+ # noinspection PyArgumentList
332
+ return BoundReferenceResolver(tei, tei_to_oe_oct_resolver, None)
333
+
334
+
335
+ def operational_restrictions(equipment: Equipment) -> BoundReferenceResolver:
336
+ # noinspection PyArgumentList
337
+ return BoundReferenceResolver(equipment, eq_to_or_resolver, or_to_eq_resolver)
338
+
339
+
340
+ def or_equipment(operational_restriction: OperationalRestriction) -> BoundReferenceResolver:
341
+ # noinspection PyArgumentList
342
+ return BoundReferenceResolver(operational_restriction, or_to_eq_resolver, eq_to_or_resolver)
343
+
344
+
345
+ def organisation(organisation_role: OrganisationRole) -> BoundReferenceResolver:
346
+ # noinspection PyArgumentList
347
+ return BoundReferenceResolver(organisation_role, orgr_to_org_resolver, None)
348
+
349
+
350
+ def organisation_roles(asset: Asset) -> BoundReferenceResolver:
351
+ # noinspection PyArgumentList
352
+ return BoundReferenceResolver(asset, asset_to_asset_org_role_resolver, None)
353
+
354
+
355
+ def per_length_impedance(ac_line_segment: AcLineSegment):
356
+ # noinspection PyArgumentList
357
+ return BoundReferenceResolver(ac_line_segment, acls_to_pli_resolver, None)
358
+
359
+
360
+ def phase_power_electronics_connection(pec: PowerElectronicsConnectionPhase) -> BoundReferenceResolver:
361
+ # noinspection PyArgumentList
362
+ return BoundReferenceResolver(pec, pecphase_to_pec_resolver, pec_to_pecphase_resolver)
363
+
364
+
365
+ def pole(streetlight: Streetlight) -> BoundReferenceResolver:
366
+ # noinspection PyArgumentList
367
+ return BoundReferenceResolver(streetlight, streetlight_to_pole_resolver, pole_to_streetlight_resolver)
368
+
369
+
370
+ def potential_transformer_info(potential_transformer: PotentialTransformer) -> BoundReferenceResolver:
371
+ # noinspection PyArgumentList
372
+ return BoundReferenceResolver(potential_transformer, vt_to_vti_resolver, None)
373
+
374
+
375
+ def power_electronics_connection_phase(pec: PowerElectronicsConnection) -> BoundReferenceResolver:
376
+ # noinspection PyArgumentList
377
+ return BoundReferenceResolver(pec, pec_to_pecphase_resolver, pecphase_to_pec_resolver)
378
+
379
+
380
+ def power_electronics_unit(pec: PowerElectronicsConnection) -> BoundReferenceResolver:
381
+ # noinspection PyArgumentList
382
+ return BoundReferenceResolver(pec, pec_to_peu_resolver, peu_to_pec_resolver)
383
+
384
+
385
+ def power_transformer(power_transformer_end: PowerTransformerEnd) -> BoundReferenceResolver:
386
+ # noinspection PyArgumentList
387
+ return BoundReferenceResolver(power_transformer_end, pte_to_pt_resolver, pt_to_pte_resolver)
388
+
389
+
390
+ def power_transformer_info(pt: PowerTransformer) -> BoundReferenceResolver:
391
+ # noinspection PyArgumentList
392
+ return BoundReferenceResolver(pt, powertransformer_to_power_transformer_info_resolver, None)
393
+
394
+
395
+ def power_transformer_info_transformer_tank_info(pti: PowerTransformerInfo) -> BoundReferenceResolver:
396
+ # noinspection PyArgumentList
397
+ return BoundReferenceResolver(pti, pti_to_tti_resolver, None)
398
+
399
+
400
+ def power_system_resources(asset: Asset) -> BoundReferenceResolver:
401
+ # noinspection PyArgumentList
402
+ return BoundReferenceResolver(asset, asset_to_psr_resolver, psr_to_asset_resolver)
403
+
404
+
405
+ def prf_protected_switch(prf: ProtectionRelayFunction) -> BoundReferenceResolver:
406
+ # noinspection PyArgumentList
407
+ return BoundReferenceResolver(prf, prf_to_psw_resolver, psw_to_prf_resolver)
408
+
409
+
410
+ def prf_scheme(prf: ProtectionRelayFunction) -> BoundReferenceResolver:
411
+ # noinspection PyArgumentList
412
+ return BoundReferenceResolver(prf, prf_to_prscheme_resolver, prscheme_to_prf_resolver)
413
+
414
+
415
+ def prf_sensor(prf: ProtectionRelayFunction) -> BoundReferenceResolver:
416
+ # noinspection PyArgumentList
417
+ return BoundReferenceResolver(prf, prf_to_sen_resolver, sen_to_prf_resolver)
418
+
419
+
420
+ def pricing_structures(customer_agreement: CustomerAgreement) -> BoundReferenceResolver:
421
+ # noinspection PyArgumentList
422
+ return BoundReferenceResolver(customer_agreement, custagr_to_ps_resolver, None)
423
+
424
+
425
+ def prscheme_function(prscheme: ProtectionRelayScheme) -> BoundReferenceResolver:
426
+ # noinspection PyArgumentList
427
+ return BoundReferenceResolver(prscheme, prscheme_to_prf_resolver, prf_to_prscheme_resolver)
428
+
429
+
430
+ def prscheme_system(prscheme: ProtectionRelayScheme) -> BoundReferenceResolver:
431
+ # noinspection PyArgumentList
432
+ return BoundReferenceResolver(prscheme, prscheme_to_prsystem_resolver, prsystem_to_prscheme_resolver)
433
+
434
+
435
+ def prsystem_scheme(prsystem: ProtectionRelaySystem) -> BoundReferenceResolver:
436
+ # noinspection PyArgumentList
437
+ return BoundReferenceResolver(prsystem, prsystem_to_prscheme_resolver, prscheme_to_prsystem_resolver)
438
+
439
+
440
+ def ps_relay_function(ps: ProtectedSwitch) -> BoundReferenceResolver:
441
+ # noinspection PyArgumentList
442
+ return BoundReferenceResolver(ps, psw_to_prf_resolver, prf_to_psw_resolver)
443
+
444
+
445
+ def psr_location(power_system_resource: PowerSystemResource) -> BoundReferenceResolver:
446
+ # noinspection PyArgumentList
447
+ return BoundReferenceResolver(power_system_resource, psr_to_loc_resolver, None)
448
+
449
+
450
+ def ratio_tap_changer(te: TransformerEnd) -> BoundReferenceResolver:
451
+ # noinspection PyArgumentList
452
+ return BoundReferenceResolver(te, te_to_rtc_resolver, rtc_to_te_resolver)
453
+
454
+
455
+ def rc_regulating_cond_eq(regulating_control: RegulatingControl) -> BoundReferenceResolver:
456
+ # noinspection PyArgumentList
457
+ return BoundReferenceResolver(regulating_control, rc_to_rce_resolver, rce_to_rc_resolver)
458
+
459
+
460
+ def rc_terminal(rc: RegulatingControl) -> BoundReferenceResolver:
461
+ # noinspection PyArgumentList
462
+ return BoundReferenceResolver(rc, rc_to_term_resolver, None)
463
+
464
+
465
+ def rce_regulating_control(regulating_cond_eq: RegulatingCondEq) -> BoundReferenceResolver:
466
+ # noinspection PyArgumentList
467
+ return BoundReferenceResolver(regulating_cond_eq, rce_to_rc_resolver, rc_to_rce_resolver)
468
+
469
+
470
+ def reactive_capability_curve(synchronous_machine: SynchronousMachine) -> BoundReferenceResolver:
471
+ # noinspection PyArgumentList
472
+ return BoundReferenceResolver(synchronous_machine, sm_to_rcc_resolver, None)
473
+
474
+
475
+ def relay_info(prf: ProtectionRelayFunction) -> BoundReferenceResolver:
476
+ # noinspection PyArgumentList
477
+ return BoundReferenceResolver(prf, prf_to_relay_info_resolver, None)
478
+
479
+
480
+ def remote_control(c: Control) -> BoundReferenceResolver:
481
+ # noinspection PyArgumentList
482
+ return BoundReferenceResolver(c, control_to_remote_control_resolver, rc_to_cont_resolver)
483
+
484
+
485
+ def remote_source(m: Measurement) -> BoundReferenceResolver:
486
+ # noinspection PyArgumentList
487
+ return BoundReferenceResolver(m, meas_to_rs_resolver, rs_to_meas_resolver)
488
+
489
+
490
+ def sen_relay_function(sen: Sensor) -> BoundReferenceResolver:
491
+ # noinspection PyArgumentList
492
+ return BoundReferenceResolver(sen, sen_to_prf_resolver, prf_to_sen_resolver)
493
+
494
+
495
+ def service_location(end_device: EndDevice) -> BoundReferenceResolver:
496
+ # noinspection PyArgumentList
497
+ return BoundReferenceResolver(end_device, ed_to_loc_resolver, None)
498
+
499
+
500
+ def shunt_compensator_info(sc: ShuntCompensator) -> BoundReferenceResolver:
501
+ # noinspection PyArgumentList
502
+ return BoundReferenceResolver(sc, shunt_compensator_to_shunt_compensator_info_resolver, None)
503
+
504
+
505
+ def star_impedance_transformer_end_info(tsi: TransformerStarImpedance) -> BoundReferenceResolver:
506
+ # noinspection PyArgumentList
507
+ return BoundReferenceResolver(tsi, tsi_to_tei_resolver, tei_to_tsi_resolver)
508
+
509
+
510
+ def streetlights(p: Pole) -> BoundReferenceResolver:
511
+ # noinspection PyArgumentList
512
+ return BoundReferenceResolver(p, pole_to_streetlight_resolver, streetlight_to_pole_resolver)
513
+
514
+
515
+ def sub_geographical_region(substation: Substation) -> BoundReferenceResolver:
516
+ # noinspection PyArgumentList
517
+ return BoundReferenceResolver(substation, sub_to_sgr_resolver, sgr_to_sub_resolver)
518
+
519
+
520
+ def sub_geographical_regions(gr: GeographicalRegion) -> BoundReferenceResolver:
521
+ # noinspection PyArgumentList
522
+ return BoundReferenceResolver(gr, gr_to_sgr_resolver, sgr_to_gr_resolver)
523
+
524
+
525
+ def substations(sgr: SubGeographicalRegion) -> BoundReferenceResolver:
526
+ # noinspection PyArgumentList
527
+ return BoundReferenceResolver(sgr, sgr_to_sub_resolver, sub_to_sgr_resolver)
528
+
529
+
530
+ def switch_info(switch: Switch) -> BoundReferenceResolver:
531
+ # noinspection PyArgumentList
532
+ return BoundReferenceResolver(switch, switch_to_switch_info_resolver, None)
533
+
534
+
535
+ def tariffs(pricing_structure: PricingStructure) -> BoundReferenceResolver:
536
+ # noinspection PyArgumentList
537
+ return BoundReferenceResolver(pricing_structure, ps_to_tariff_resolver, None)
538
+
539
+
540
+ def tc_tap_changer_control(tap_changer: TapChanger) -> BoundReferenceResolver:
541
+ # noinspection PyArgumentList
542
+ return BoundReferenceResolver(tap_changer, tc_to_tcc_resolver, None)
543
+
544
+
545
+ def te_base_voltage(te: TransformerEnd) -> BoundReferenceResolver:
546
+ # noinspection PyArgumentList
547
+ return BoundReferenceResolver(te, te_to_bv_resolver, None)
548
+
549
+
550
+ def te_terminal(te: TransformerEnd) -> BoundReferenceResolver:
551
+ # noinspection PyArgumentList
552
+ return BoundReferenceResolver(te, te_to_term_resolver, None)
553
+
554
+
555
+ def transformer_end(rtt: RatioTapChanger) -> BoundReferenceResolver:
556
+ # noinspection PyArgumentList
557
+ return BoundReferenceResolver(rtt, rtc_to_te_resolver, te_to_rtc_resolver)
558
+
559
+
560
+ def transformer_end_info(tti: TransformerTankInfo) -> BoundReferenceResolver:
561
+ # noinspection PyArgumentList
562
+ return BoundReferenceResolver(tti, tti_to_tei_resolver, tei_to_tti_resolver)
563
+
564
+
565
+ def transformer_end_transformer_star_impedance(te: TransformerEnd) -> BoundReferenceResolver:
566
+ # noinspection PyArgumentList
567
+ return BoundReferenceResolver(te, te_to_tsi_resolver, None)
568
+
569
+
570
+ def transformer_star_impedance(tei: TransformerEndInfo) -> BoundReferenceResolver:
571
+ # noinspection PyArgumentList
572
+ return BoundReferenceResolver(tei, tei_to_tsi_resolver, tsi_to_tei_resolver)
573
+
574
+
575
+ def transformer_tank_info(tei: TransformerEndInfo) -> BoundReferenceResolver:
576
+ # noinspection PyArgumentList
577
+ return BoundReferenceResolver(tei, tei_to_tti_resolver, tti_to_tei_resolver)
578
+
579
+
580
+ def unit_power_electronics_connection(pec: PowerElectronicsUnit) -> BoundReferenceResolver:
581
+ # noinspection PyArgumentList
582
+ return BoundReferenceResolver(pec, peu_to_pec_resolver, pec_to_peu_resolver)
583
+
584
+
585
+ def up_equipment(usage_point: UsagePoint) -> BoundReferenceResolver:
586
+ # noinspection PyArgumentList
587
+ return BoundReferenceResolver(usage_point, up_to_eq_resolver, eq_to_up_resolver)
588
+
589
+
590
+ def usage_point_location(usage_point: UsagePoint) -> BoundReferenceResolver:
591
+ # noinspection PyArgumentList
592
+ return BoundReferenceResolver(usage_point, up_to_loc_resolver, None)
593
+
594
+
595
+ def wire_info(conductor: Conductor) -> BoundReferenceResolver:
596
+ # noinspection PyArgumentList
597
+ return BoundReferenceResolver(conductor, conductor_to_wire_info_resolver, None)
@@ -0,0 +1,4 @@
1
+ # Copyright 2024 Zeppelin Bend Pty Ltd
2
+ # This Source Code Form is subject to the terms of the Mozilla Public
3
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
@@ -0,0 +1,92 @@
1
+ # Copyright 2024 Zeppelin Bend Pty Ltd
2
+ # This Source Code Form is subject to the terms of the Mozilla Public
3
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
5
+
6
+ __all__ = ["identified_object_to_pb", "document_to_pb", "organisation_role_to_pb", "organisation_to_pb"]
7
+
8
+ # noinspection PyPackageRequirements,PyUnresolvedReferences
9
+ from google.protobuf.timestamp_pb2 import Timestamp as PBTimestamp
10
+ from zepben.protobuf.cim.iec61968.common.Document_pb2 import Document as PBDocument
11
+ from zepben.protobuf.cim.iec61968.common.OrganisationRole_pb2 import OrganisationRole as PBOrganisationRole
12
+ from zepben.protobuf.cim.iec61968.common.Organisation_pb2 import Organisation as PBOrganisation
13
+ from zepben.protobuf.cim.iec61970.base.core.IdentifiedObject_pb2 import IdentifiedObject as PBIdentifiedObject
14
+ from zepben.protobuf.cim.iec61970.base.core.NameType_pb2 import NameType as PBNameType
15
+ from zepben.protobuf.cim.iec61970.base.core.Name_pb2 import Name as PBName
16
+
17
+ from zepben.ewb.model.cim.iec61968.common.document import Document
18
+ from zepben.ewb.model.cim.iec61968.common.organisation import Organisation
19
+ from zepben.ewb.model.cim.iec61968.common.organisation_role import OrganisationRole
20
+ from zepben.ewb.model.cim.iec61970.base.core.identified_object import IdentifiedObject
21
+ from zepben.ewb.model.cim.iec61970.base.core.name import Name
22
+ from zepben.ewb.model.cim.iec61970.base.core.name_type import NameType
23
+ from zepben.ewb.services.common.translator.util import mrid_or_empty
24
+
25
+
26
+ ###################
27
+ # IEC61968 Common #
28
+ ###################
29
+
30
+ def document_to_pb(cim: Document) -> PBDocument:
31
+ timestamp = None
32
+ if cim.created_date_time:
33
+ timestamp = PBTimestamp()
34
+ timestamp.FromDatetime(cim.created_date_time)
35
+
36
+ return PBDocument(
37
+ io=identified_object_to_pb(cim),
38
+ title=cim.title,
39
+ createdDateTime=timestamp,
40
+ authorName=cim.author_name,
41
+ type=cim.type,
42
+ status=cim.status,
43
+ comment=cim.comment
44
+ )
45
+
46
+
47
+ def organisation_to_pb(cim: Organisation) -> PBOrganisation:
48
+ return PBOrganisation(io=identified_object_to_pb(cim))
49
+
50
+
51
+ def organisation_role_to_pb(cim: OrganisationRole) -> PBOrganisationRole:
52
+ return PBOrganisationRole(
53
+ io=identified_object_to_pb(cim),
54
+ organisationMRID=mrid_or_empty(cim.organisation)
55
+ )
56
+
57
+
58
+ Document.to_pb = document_to_pb
59
+ Organisation.to_pb = organisation_to_pb
60
+ OrganisationRole.to_pb = organisation_role_to_pb
61
+
62
+
63
+ ######################
64
+ # IEC61970 Base Core #
65
+ ######################
66
+
67
+ def identified_object_to_pb(cim: IdentifiedObject) -> PBIdentifiedObject:
68
+ return PBIdentifiedObject(
69
+ mRID=str(cim.mrid),
70
+ name=cim.name,
71
+ description=cim.description,
72
+ names=[name_to_pb(name) for name in cim.names]
73
+ )
74
+
75
+
76
+ def name_to_pb(cim: Name) -> PBName:
77
+ return PBName(
78
+ name=cim.name,
79
+ type=cim.type.name if cim.type else None
80
+ )
81
+
82
+
83
+ def name_type_to_pb(cim: NameType) -> PBNameType:
84
+ return PBNameType(
85
+ name=cim.name,
86
+ description=cim.description
87
+ )
88
+
89
+
90
+ IdentifiedObject.to_pb = identified_object_to_pb
91
+ Name.to_pb = name_to_pb
92
+ NameType.to_pb = name_type_to_pb