zepben.ewb 1.0.0__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.
- zepben/ewb/__init__.py +601 -0
- zepben/ewb/auth/__init__.py +10 -0
- zepben/ewb/auth/client/__init__.py +5 -0
- zepben/ewb/auth/client/zepben_token_fetcher.py +273 -0
- zepben/ewb/auth/common/__init__.py +5 -0
- zepben/ewb/auth/common/auth_exception.py +16 -0
- zepben/ewb/auth/common/auth_method.py +28 -0
- zepben/ewb/auth/common/auth_provider_config.py +96 -0
- zepben/ewb/database/__init__.py +4 -0
- zepben/ewb/database/paths/__init__.py +4 -0
- zepben/ewb/database/paths/database_type.py +34 -0
- zepben/ewb/database/paths/ewb_data_file_paths.py +237 -0
- zepben/ewb/database/sql/__init__.py +4 -0
- zepben/ewb/database/sql/column.py +37 -0
- zepben/ewb/database/sql/sql_table.py +142 -0
- zepben/ewb/database/sqlite/__init__.py +4 -0
- zepben/ewb/database/sqlite/common/__init__.py +4 -0
- zepben/ewb/database/sqlite/common/base_cim_reader.py +212 -0
- zepben/ewb/database/sqlite/common/base_cim_writer.py +159 -0
- zepben/ewb/database/sqlite/common/base_collection_reader.py +96 -0
- zepben/ewb/database/sqlite/common/base_collection_writer.py +73 -0
- zepben/ewb/database/sqlite/common/base_database_reader.py +127 -0
- zepben/ewb/database/sqlite/common/base_database_tables.py +137 -0
- zepben/ewb/database/sqlite/common/base_database_writer.py +195 -0
- zepben/ewb/database/sqlite/common/base_entry_writer.py +34 -0
- zepben/ewb/database/sqlite/common/base_service_reader.py +50 -0
- zepben/ewb/database/sqlite/common/base_service_writer.py +104 -0
- zepben/ewb/database/sqlite/common/metadata_collection_reader.py +39 -0
- zepben/ewb/database/sqlite/common/metadata_collection_writer.py +38 -0
- zepben/ewb/database/sqlite/common/metadata_entry_reader.py +45 -0
- zepben/ewb/database/sqlite/common/metadata_entry_writer.py +41 -0
- zepben/ewb/database/sqlite/common/reader_exceptions.py +30 -0
- zepben/ewb/database/sqlite/customer/__init__.py +4 -0
- zepben/ewb/database/sqlite/customer/customer_cim_reader.py +169 -0
- zepben/ewb/database/sqlite/customer/customer_cim_writer.py +137 -0
- zepben/ewb/database/sqlite/customer/customer_database_reader.py +44 -0
- zepben/ewb/database/sqlite/customer/customer_database_tables.py +37 -0
- zepben/ewb/database/sqlite/customer/customer_database_writer.py +45 -0
- zepben/ewb/database/sqlite/customer/customer_service_reader.py +57 -0
- zepben/ewb/database/sqlite/customer/customer_service_writer.py +47 -0
- zepben/ewb/database/sqlite/diagram/__init__.py +4 -0
- zepben/ewb/database/sqlite/diagram/diagram_cim_reader.py +105 -0
- zepben/ewb/database/sqlite/diagram/diagram_cim_writer.py +81 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_reader.py +45 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_tables.py +29 -0
- zepben/ewb/database/sqlite/diagram/diagram_database_writer.py +44 -0
- zepben/ewb/database/sqlite/diagram/diagram_service_reader.py +49 -0
- zepben/ewb/database/sqlite/diagram/diagram_service_writer.py +41 -0
- zepben/ewb/database/sqlite/extensions/__init__.py +4 -0
- zepben/ewb/database/sqlite/extensions/prepared_statement.py +112 -0
- zepben/ewb/database/sqlite/extensions/result_set.py +153 -0
- zepben/ewb/database/sqlite/network/__init__.py +4 -0
- zepben/ewb/database/sqlite/network/network_cim_reader.py +3167 -0
- zepben/ewb/database/sqlite/network/network_cim_writer.py +2561 -0
- zepben/ewb/database/sqlite/network/network_database_reader.py +175 -0
- zepben/ewb/database/sqlite/network/network_database_tables.py +242 -0
- zepben/ewb/database/sqlite/network/network_database_writer.py +43 -0
- zepben/ewb/database/sqlite/network/network_service_reader.py +265 -0
- zepben/ewb/database/sqlite/network/network_service_writer.py +209 -0
- zepben/ewb/database/sqlite/tables/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/associations/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/associations/loop_substation_relationship.py +17 -0
- zepben/ewb/database/sqlite/tables/associations/table_asset_organisation_roles_assets.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_assets_power_system_resources.py +41 -0
- zepben/ewb/database/sqlite/tables/associations/table_battery_units_battery_controls.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_circuits_substations.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_circuits_terminals.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_customer_agreements_pricing_structures.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_end_devices_end_device_functions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_equipment_containers.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_operational_restrictions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_equipment_usage_points.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_loops_substations.py +43 -0
- zepben/ewb/database/sqlite/tables/associations/table_pricing_structures_tariffs.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_functions_protected_switches.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_functions_sensors.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_protection_relay_schemes_protection_relay_functions.py +40 -0
- zepben/ewb/database/sqlite/tables/associations/table_synchronous_machines_reactive_capability_curves.py +39 -0
- zepben/ewb/database/sqlite/tables/associations/table_usage_points_end_devices.py +40 -0
- zepben/ewb/database/sqlite/tables/exceptions.py +10 -0
- zepben/ewb/database/sqlite/tables/extensions/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/table_reclose_delays.py +38 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/assetinfo/table_relay_info.py +21 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/metering/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61968/metering/table_pan_demand_response_functions.py +21 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/core/table_sites.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/table_loops.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/feeder/table_lv_feeders.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/generation/production/table_ev_charging_units.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_distance_relays.py +28 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_function_thresholds.py +36 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_function_time_limits.py +34 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_functions.py +24 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_schemes.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_protection_relay_systems.py +20 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/protection/table_voltage_relays.py +15 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/table_battery_controls.py +23 -0
- zepben/ewb/database/sqlite/tables/extensions/iec61970/base/wires/table_power_transformer_end_ratings.py +34 -0
- zepben/ewb/database/sqlite/tables/iec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_cable_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_no_load_tests.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_open_circuit_tests.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_overhead_wire_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_power_transformer_info.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_short_circuit_tests.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_shunt_compensator_info.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_switch_info.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_end_info.py +46 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_tank_info.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_transformer_test.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/assetinfo/table_wire_info.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_functions.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_info.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_organisation_roles.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_asset_owners.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_assets.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_streetlights.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61968/assets/table_structures.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_agreements.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_documents.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_location_street_address_field.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_location_street_addresses.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_locations.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_organisation_roles.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_organisations.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_position_points.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_street_addresses.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61968/common/table_town_details.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_customer_agreements.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_customers.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_pricing_structures.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/customers/table_tariffs.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/table_current_transformer_info.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassetinfo/table_potential_transformer_info.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassets/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/infiec61968/infassets/table_poles.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_end_device_functions.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_end_devices.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_meters.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61968/metering/table_usage_points.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61968/operations/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61968/operations/table_operational_restrictions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_auxiliary_equipment.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_current_transformers.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_fault_indicators.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_potential_transformers.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/auxiliaryequipment/table_sensors.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_ac_dc_terminals.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_base_voltages.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_conducting_equipment.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_connectivity_node_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_connectivity_nodes.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_curve_data.py +46 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_curves.py +17 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_equipment.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_equipment_containers.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_feeders.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_geographical_regions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_identified_objects.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_name_types.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_names.py +36 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_power_system_resources.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_sub_geographical_regions.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_substations.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/core/table_terminals.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagram_object_points.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagram_objects.py +31 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/diagramlayout/table_diagrams.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/table_equivalent_branches.py +35 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/equivalents/table_equivalent_equipment.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_battery_units.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_photo_voltaic_units.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_power_electronics_units.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/generation/production/table_power_electronics_wind_units.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_accumulators.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_analogs.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_controls.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_discretes.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_io_points.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/meas/table_measurements.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/protection/table_current_relays.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_controls.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_points.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/scada/table_remote_sources.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ac_line_segments.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_breakers.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_busbar_sections.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_clamps.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_conductors.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_connectors.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_cuts.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_disconnectors.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_earth_fault_compensators.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_connections.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_consumer_phases.py +37 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_consumers.py +26 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_source_phases.py +33 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_energy_sources.py +44 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_fuses.py +20 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ground_disconnectors.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_grounding_impedances.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_grounds.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_jumpers.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_junctions.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_linear_shunt_compensators.py +23 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_lines.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_load_break_switches.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_impedances.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_line_parameters.py +14 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_phase_impedances.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_per_length_sequence_impedances.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_petersen_coils.py +27 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_phase_impedance_data.py +52 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_electronics_connection_phases.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_electronics_connections.py +50 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_transformer_ends.py +43 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_power_transformers.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_protected_switches.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_ratio_tap_changers.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_reactive_capability_curves.py +18 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_reclosers.py +15 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_regulating_cond_eq.py +19 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_regulating_controls.py +29 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_rotating_machines.py +36 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_series_compensators.py +25 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_shunt_compensators.py +22 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_static_var_compensator.py +24 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_switches.py +21 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_synchronous_machines.py +95 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_tap_changer_controls.py +28 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_tap_changers.py +25 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_transformer_ends.py +30 -0
- zepben/ewb/database/sqlite/tables/iec61970/base/wires/table_transformer_star_impedances.py +32 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/feeder/__init__.py +4 -0
- zepben/ewb/database/sqlite/tables/iec61970/infiec61970/feeder/table_circuits.py +27 -0
- zepben/ewb/database/sqlite/tables/sqlite_table.py +45 -0
- zepben/ewb/database/sqlite/tables/table_metadata_data_sources.py +21 -0
- zepben/ewb/database/sqlite/tables/table_version.py +39 -0
- zepben/ewb/dataclassy/__init__.py +15 -0
- zepben/ewb/dataclassy/dataclass.py +192 -0
- zepben/ewb/dataclassy/decorator.py +35 -0
- zepben/ewb/dataclassy/functions.py +80 -0
- zepben/ewb/examples/__init__.py +6 -0
- zepben/ewb/examples/simple_test_network.py +158 -0
- zepben/ewb/exceptions.py +52 -0
- zepben/ewb/model/__init__.py +4 -0
- zepben/ewb/model/busbranch/__init__.py +4 -0
- zepben/ewb/model/busbranch/bus_branch.py +1051 -0
- zepben/ewb/model/cim/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/assetinfo/relay_info.py +128 -0
- zepben/ewb/model/cim/extensions/iec61968/metering/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61968/metering/pan_demand_reponse_function.py +112 -0
- zepben/ewb/model/cim/extensions/iec61970/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/core/site.py +37 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/loop.py +207 -0
- zepben/ewb/model/cim/extensions/iec61970/base/feeder/lv_feeder.py +258 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/generation/production/ev_charging_unit.py +18 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/distance_relay.py +69 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/power_direction_kind.py +36 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_kind.py +112 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_function.py +448 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_scheme.py +97 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/protection_relay_system.py +97 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/relay_setting.py +35 -0
- zepben/ewb/model/cim/extensions/iec61970/base/protection/voltage_relay.py +20 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/battery_control.py +36 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/battery_control_mode.py +83 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/transformer_cooling_type.py +57 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/transformer_end_rated_s.py +26 -0
- zepben/ewb/model/cim/extensions/iec61970/base/wires/vector_group.py +293 -0
- zepben/ewb/model/cim/extensions/zbex.py +17 -0
- zepben/ewb/model/cim/iec61968/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assetinfo/cable_info.py +15 -0
- zepben/ewb/model/cim/iec61968/assetinfo/no_load_test.py +42 -0
- zepben/ewb/model/cim/iec61968/assetinfo/open_circuit_test.py +42 -0
- zepben/ewb/model/cim/iec61968/assetinfo/overhead_wire_info.py +15 -0
- zepben/ewb/model/cim/iec61968/assetinfo/power_transformer_info.py +103 -0
- zepben/ewb/model/cim/iec61968/assetinfo/short_circuit_test.py +67 -0
- zepben/ewb/model/cim/iec61968/assetinfo/shunt_compensator_info.py +26 -0
- zepben/ewb/model/cim/iec61968/assetinfo/switch_info.py +17 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_end_info.py +137 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_tank_info.py +108 -0
- zepben/ewb/model/cim/iec61968/assetinfo/transformer_test.py +26 -0
- zepben/ewb/model/cim/iec61968/assetinfo/wire_info.py +24 -0
- zepben/ewb/model/cim/iec61968/assetinfo/wire_material_kind.py +57 -0
- zepben/ewb/model/cim/iec61968/assets/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/assets/asset.py +154 -0
- zepben/ewb/model/cim/iec61968/assets/asset_container.py +16 -0
- zepben/ewb/model/cim/iec61968/assets/asset_function.py +15 -0
- zepben/ewb/model/cim/iec61968/assets/asset_info.py +19 -0
- zepben/ewb/model/cim/iec61968/assets/asset_organisation_role.py +13 -0
- zepben/ewb/model/cim/iec61968/assets/asset_owner.py +13 -0
- zepben/ewb/model/cim/iec61968/assets/streetlight.py +29 -0
- zepben/ewb/model/cim/iec61968/assets/structure.py +16 -0
- zepben/ewb/model/cim/iec61968/common/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/common/agreement.py +16 -0
- zepben/ewb/model/cim/iec61968/common/document.py +36 -0
- zepben/ewb/model/cim/iec61968/common/location.py +129 -0
- zepben/ewb/model/cim/iec61968/common/organisation.py +15 -0
- zepben/ewb/model/cim/iec61968/common/organisation_role.py +22 -0
- zepben/ewb/model/cim/iec61968/common/position_point.py +44 -0
- zepben/ewb/model/cim/iec61968/common/street_address.py +28 -0
- zepben/ewb/model/cim/iec61968/common/street_detail.py +46 -0
- zepben/ewb/model/cim/iec61968/common/town_detail.py +25 -0
- zepben/ewb/model/cim/iec61968/customers/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/customers/customer.py +93 -0
- zepben/ewb/model/cim/iec61968/customers/customer_agreement.py +107 -0
- zepben/ewb/model/cim/iec61968/customers/customer_kind.py +69 -0
- zepben/ewb/model/cim/iec61968/customers/pricing_structure.py +88 -0
- zepben/ewb/model/cim/iec61968/customers/tariff.py +18 -0
- zepben/ewb/model/cim/iec61968/infiec61968/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/current_transformer_info.py +51 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/potential_transformer_info.py +33 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/transformer_construction_kind.py +69 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassetinfo/transformer_function_kind.py +45 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/pole.py +87 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infassets/streetlight_lamp_kind.py +27 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infcommon/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/infiec61968/infcommon/ratio.py +34 -0
- zepben/ewb/model/cim/iec61968/metering/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/metering/controlled_appliance.py +152 -0
- zepben/ewb/model/cim/iec61968/metering/end_device.py +165 -0
- zepben/ewb/model/cim/iec61968/metering/end_device_function.py +17 -0
- zepben/ewb/model/cim/iec61968/metering/end_device_function_kind.py +48 -0
- zepben/ewb/model/cim/iec61968/metering/meter.py +28 -0
- zepben/ewb/model/cim/iec61968/metering/usage_point.py +186 -0
- zepben/ewb/model/cim/iec61968/operations/__init__.py +4 -0
- zepben/ewb/model/cim/iec61968/operations/operational_restriction.py +92 -0
- zepben/ewb/model/cim/iec61970/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/auxiliary_equipment.py +24 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/current_transformer.py +37 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/fault_indicator.py +18 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/potential_transformer.py +38 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/potential_transformer_kind.py +30 -0
- zepben/ewb/model/cim/iec61970/base/auxiliaryequipment/sensor.py +92 -0
- zepben/ewb/model/cim/iec61970/base/core/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/core/ac_dc_terminal.py +16 -0
- zepben/ewb/model/cim/iec61970/base/core/base_voltage.py +17 -0
- zepben/ewb/model/cim/iec61970/base/core/conducting_equipment.py +198 -0
- zepben/ewb/model/cim/iec61970/base/core/connectivity_node.py +105 -0
- zepben/ewb/model/cim/iec61970/base/core/connectivity_node_container.py +15 -0
- zepben/ewb/model/cim/iec61970/base/core/curve.py +125 -0
- zepben/ewb/model/cim/iec61970/base/core/curve_data.py +29 -0
- zepben/ewb/model/cim/iec61970/base/core/equipment.py +366 -0
- zepben/ewb/model/cim/iec61970/base/core/equipment_container.py +199 -0
- zepben/ewb/model/cim/iec61970/base/core/feeder.py +260 -0
- zepben/ewb/model/cim/iec61970/base/core/geographical_region.py +82 -0
- zepben/ewb/model/cim/iec61970/base/core/identified_object.py +239 -0
- zepben/ewb/model/cim/iec61970/base/core/name.py +36 -0
- zepben/ewb/model/cim/iec61970/base/core/name_type.py +203 -0
- zepben/ewb/model/cim/iec61970/base/core/phase_code.py +202 -0
- zepben/ewb/model/cim/iec61970/base/core/power_system_resource.py +106 -0
- zepben/ewb/model/cim/iec61970/base/core/sub_geographical_region.py +93 -0
- zepben/ewb/model/cim/iec61970/base/core/substation.py +277 -0
- zepben/ewb/model/cim/iec61970/base/core/terminal.py +171 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram.py +109 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_object.py +160 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_object_point.py +25 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/diagram_style.py +28 -0
- zepben/ewb/model/cim/iec61970/base/diagramlayout/orientation_kind.py +29 -0
- zepben/ewb/model/cim/iec61970/base/domain/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/domain/unit_symbol.py +494 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/equivalent_branch.py +113 -0
- zepben/ewb/model/cim/iec61970/base/equivalents/equivalent_equipment.py +15 -0
- zepben/ewb/model/cim/iec61970/base/generation/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/battery_state_kind.py +39 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/battery_unit.py +108 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/photo_voltaic_unit.py +13 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/power_electronics_unit.py +28 -0
- zepben/ewb/model/cim/iec61970/base/generation/production/power_electronics_wind_unit.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/meas/accumulator.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/accumulator_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/analog.py +18 -0
- zepben/ewb/model/cim/iec61970/base/meas/analog_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/control.py +26 -0
- zepben/ewb/model/cim/iec61970/base/meas/discrete.py +13 -0
- zepben/ewb/model/cim/iec61970/base/meas/discrete_value.py +20 -0
- zepben/ewb/model/cim/iec61970/base/meas/iopoint.py +16 -0
- zepben/ewb/model/cim/iec61970/base/meas/measurement.py +60 -0
- zepben/ewb/model/cim/iec61970/base/meas/measurement_value.py +21 -0
- zepben/ewb/model/cim/iec61970/base/protection/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/protection/current_relay.py +23 -0
- zepben/ewb/model/cim/iec61970/base/scada/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_control.py +22 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_point.py +16 -0
- zepben/ewb/model/cim/iec61970/base/scada/remote_source.py +22 -0
- zepben/ewb/model/cim/iec61970/base/wires/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/base/wires/ac_line_segment.py +214 -0
- zepben/ewb/model/cim/iec61970/base/wires/breaker.py +32 -0
- zepben/ewb/model/cim/iec61970/base/wires/busbar_section.py +19 -0
- zepben/ewb/model/cim/iec61970/base/wires/clamp.py +32 -0
- zepben/ewb/model/cim/iec61970/base/wires/conductor.py +49 -0
- zepben/ewb/model/cim/iec61970/base/wires/connector.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/cut.py +36 -0
- zepben/ewb/model/cim/iec61970/base/wires/disconnector.py +17 -0
- zepben/ewb/model/cim/iec61970/base/wires/earth_fault_compensator.py +21 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_connection.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_consumer.py +107 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_consumer_phase.py +56 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_source.py +172 -0
- zepben/ewb/model/cim/iec61970/base/wires/energy_source_phase.py +45 -0
- zepben/ewb/model/cim/iec61970/base/wires/fuse.py +23 -0
- zepben/ewb/model/cim/iec61970/base/wires/ground.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/ground_disconnector.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/grounding_impedance.py +19 -0
- zepben/ewb/model/cim/iec61970/base/wires/jumper.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/junction.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/line.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/linear_shunt_compensator.py +26 -0
- zepben/ewb/model/cim/iec61970/base/wires/load_break_switch.py +14 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_impedance.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_line_parameter.py +13 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_phase_impedance.py +99 -0
- zepben/ewb/model/cim/iec61970/base/wires/per_length_sequence_impedance.py +43 -0
- zepben/ewb/model/cim/iec61970/base/wires/petersen_coil.py +22 -0
- zepben/ewb/model/cim/iec61970/base/wires/phase_impedance_data.py +37 -0
- zepben/ewb/model/cim/iec61970/base/wires/phase_shunt_connection_kind.py +40 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_electronics_connection.py +524 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_electronics_connection_phase.py +34 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_transformer.py +217 -0
- zepben/ewb/model/cim/iec61970/base/wires/power_transformer_end.py +208 -0
- zepben/ewb/model/cim/iec61970/base/wires/protected_switch.py +96 -0
- zepben/ewb/model/cim/iec61970/base/wires/ratio_tap_changer.py +30 -0
- zepben/ewb/model/cim/iec61970/base/wires/reactive_capability_curve.py +16 -0
- zepben/ewb/model/cim/iec61970/base/wires/recloser.py +15 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_cond_eq.py +45 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_control.py +173 -0
- zepben/ewb/model/cim/iec61970/base/wires/regulating_control_mode_kind.py +48 -0
- zepben/ewb/model/cim/iec61970/base/wires/rotating_machine.py +36 -0
- zepben/ewb/model/cim/iec61970/base/wires/series_compensator.py +42 -0
- zepben/ewb/model/cim/iec61970/base/wires/shunt_compensator.py +59 -0
- zepben/ewb/model/cim/iec61970/base/wires/single_phase_kind.py +107 -0
- zepben/ewb/model/cim/iec61970/base/wires/static_var_compensator.py +40 -0
- zepben/ewb/model/cim/iec61970/base/wires/svc_control_mode.py +30 -0
- zepben/ewb/model/cim/iec61970/base/wires/switch.py +119 -0
- zepben/ewb/model/cim/iec61970/base/wires/synchronous_machine.py +168 -0
- zepben/ewb/model/cim/iec61970/base/wires/synchronous_machine_kind.py +46 -0
- zepben/ewb/model/cim/iec61970/base/wires/tap_changer.py +150 -0
- zepben/ewb/model/cim/iec61970/base/wires/tap_changer_control.py +49 -0
- zepben/ewb/model/cim/iec61970/base/wires/transformer_end.py +73 -0
- zepben/ewb/model/cim/iec61970/base/wires/transformer_star_impedance.py +48 -0
- zepben/ewb/model/cim/iec61970/base/wires/winding_connection.py +45 -0
- zepben/ewb/model/cim/iec61970/infiec61970/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/infiec61970/feeder/__init__.py +4 -0
- zepben/ewb/model/cim/iec61970/infiec61970/feeder/circuit.py +144 -0
- zepben/ewb/model/phases.py +168 -0
- zepben/ewb/model/resistance_reactance.py +40 -0
- zepben/ewb/services/__init__.py +4 -0
- zepben/ewb/services/common/__init__.py +16 -0
- zepben/ewb/services/common/base_service.py +383 -0
- zepben/ewb/services/common/base_service_comparator.py +394 -0
- zepben/ewb/services/common/difference.py +47 -0
- zepben/ewb/services/common/enum_mapper.py +55 -0
- zepben/ewb/services/common/meta/__init__.py +4 -0
- zepben/ewb/services/common/meta/data_source.py +16 -0
- zepben/ewb/services/common/meta/metadata_collection.py +28 -0
- zepben/ewb/services/common/meta/metadata_translations.py +47 -0
- zepben/ewb/services/common/meta/service_info.py +22 -0
- zepben/ewb/services/common/reference_resolvers.py +374 -0
- zepben/ewb/services/common/resolver.py +597 -0
- zepben/ewb/services/common/translator/__init__.py +4 -0
- zepben/ewb/services/common/translator/base_cim2proto.py +115 -0
- zepben/ewb/services/common/translator/base_proto2cim.py +146 -0
- zepben/ewb/services/common/translator/service_differences.py +81 -0
- zepben/ewb/services/common/translator/util.py +75 -0
- zepben/ewb/services/customer/__init__.py +4 -0
- zepben/ewb/services/customer/customer_service_comparator.py +52 -0
- zepben/ewb/services/customer/customers.py +23 -0
- zepben/ewb/services/customer/translator/__init__.py +21 -0
- zepben/ewb/services/customer/translator/customer_cim2proto.py +71 -0
- zepben/ewb/services/customer/translator/customer_enum_mappers.py +18 -0
- zepben/ewb/services/customer/translator/customer_proto2cim.py +87 -0
- zepben/ewb/services/diagram/__init__.py +4 -0
- zepben/ewb/services/diagram/diagram_service_comparator.py +39 -0
- zepben/ewb/services/diagram/diagrams.py +107 -0
- zepben/ewb/services/diagram/translator/__init__.py +11 -0
- zepben/ewb/services/diagram/translator/diagram_cim2proto.py +51 -0
- zepben/ewb/services/diagram/translator/diagram_enum_mappers.py +21 -0
- zepben/ewb/services/diagram/translator/diagram_proto2cim.py +61 -0
- zepben/ewb/services/measurement/__init__.py +4 -0
- zepben/ewb/services/measurement/measurements.py +35 -0
- zepben/ewb/services/measurement/translator/__init__.py +6 -0
- zepben/ewb/services/measurement/translator/measurement_cim2proto.py +42 -0
- zepben/ewb/services/measurement/translator/measurement_proto2cim.py +52 -0
- zepben/ewb/services/network/__init__.py +4 -0
- zepben/ewb/services/network/network_extensions.py +119 -0
- zepben/ewb/services/network/network_service.py +302 -0
- zepben/ewb/services/network/network_service_comparator.py +1322 -0
- zepben/ewb/services/network/network_state.py +36 -0
- zepben/ewb/services/network/tracing/__init__.py +4 -0
- zepben/ewb/services/network/tracing/busbranch_trace.py +36 -0
- zepben/ewb/services/network/tracing/connectivity/__init__.py +4 -0
- zepben/ewb/services/network/tracing/connectivity/connectivity_result.py +105 -0
- zepben/ewb/services/network/tracing/connectivity/nominal_phase_path.py +23 -0
- zepben/ewb/services/network/tracing/connectivity/phase_paths.py +70 -0
- zepben/ewb/services/network/tracing/connectivity/terminal_connectivity_connected.py +226 -0
- zepben/ewb/services/network/tracing/connectivity/terminal_connectivity_internal.py +64 -0
- zepben/ewb/services/network/tracing/connectivity/transformer_phase_paths.py +202 -0
- zepben/ewb/services/network/tracing/connectivity/xy_candidate_phase_paths.py +235 -0
- zepben/ewb/services/network/tracing/connectivity/xy_phase_step.py +24 -0
- zepben/ewb/services/network/tracing/feeder/__init__.py +4 -0
- zepben/ewb/services/network/tracing/feeder/assign_to_feeders.py +202 -0
- zepben/ewb/services/network/tracing/feeder/assign_to_lv_feeders.py +202 -0
- zepben/ewb/services/network/tracing/feeder/clear_direction.py +80 -0
- zepben/ewb/services/network/tracing/feeder/direction_status.py +133 -0
- zepben/ewb/services/network/tracing/feeder/feeder_direction.py +107 -0
- zepben/ewb/services/network/tracing/feeder/set_direction.py +143 -0
- zepben/ewb/services/network/tracing/find_swer_equipment.py +175 -0
- zepben/ewb/services/network/tracing/networktrace/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/actions/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/actions/equipment_tree_builder.py +104 -0
- zepben/ewb/services/network/tracing/networktrace/actions/tree_node.py +35 -0
- zepben/ewb/services/network/tracing/networktrace/compute_data.py +60 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/__init__.py +4 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/conditions.py +73 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/direction_condition.py +63 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/equipment_step_limit_condition.py +26 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/equipment_type_step_limit_condition.py +44 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/network_trace_queue_condition.py +67 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/network_trace_stop_condition.py +65 -0
- zepben/ewb/services/network/tracing/networktrace/conditions/open_condition.py +39 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace.py +433 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_action_type.py +42 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_queue_next.py +84 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_step.py +128 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_step_path_provider.py +351 -0
- zepben/ewb/services/network/tracing/networktrace/network_trace_tracker.py +39 -0
- zepben/ewb/services/network/tracing/networktrace/operators/__init__.py +14 -0
- zepben/ewb/services/network/tracing/networktrace/operators/equipment_container_state_operators.py +264 -0
- zepben/ewb/services/network/tracing/networktrace/operators/feeder_direction_state_operations.py +181 -0
- zepben/ewb/services/network/tracing/networktrace/operators/in_service_state_operators.py +76 -0
- zepben/ewb/services/network/tracing/networktrace/operators/network_state_operators.py +120 -0
- zepben/ewb/services/network/tracing/networktrace/operators/open_state_operators.py +104 -0
- zepben/ewb/services/network/tracing/networktrace/operators/phase_state_operators.py +56 -0
- zepben/ewb/services/network/tracing/networktrace/tracing.py +132 -0
- zepben/ewb/services/network/tracing/phases/__init__.py +4 -0
- zepben/ewb/services/network/tracing/phases/phase_inferrer.py +205 -0
- zepben/ewb/services/network/tracing/phases/phase_status.py +101 -0
- zepben/ewb/services/network/tracing/phases/remove_phases.py +143 -0
- zepben/ewb/services/network/tracing/phases/set_phases.py +490 -0
- zepben/ewb/services/network/tracing/traversal/__init__.py +4 -0
- zepben/ewb/services/network/tracing/traversal/context_value_computer.py +63 -0
- zepben/ewb/services/network/tracing/traversal/debug_logging.py +124 -0
- zepben/ewb/services/network/tracing/traversal/queue.py +112 -0
- zepben/ewb/services/network/tracing/traversal/queue_condition.py +75 -0
- zepben/ewb/services/network/tracing/traversal/step_action.py +83 -0
- zepben/ewb/services/network/tracing/traversal/step_context.py +59 -0
- zepben/ewb/services/network/tracing/traversal/stop_condition.py +57 -0
- zepben/ewb/services/network/tracing/traversal/traversal.py +634 -0
- zepben/ewb/services/network/tracing/traversal/traversal_condition.py +22 -0
- zepben/ewb/services/network/tracing/traversal/weighted_priority_queue.py +85 -0
- zepben/ewb/services/network/tracing/util.py +93 -0
- zepben/ewb/services/network/translator/__init__.py +392 -0
- zepben/ewb/services/network/translator/network_cim2proto.py +1867 -0
- zepben/ewb/services/network/translator/network_enum_mappers.py +78 -0
- zepben/ewb/services/network/translator/network_proto2cim.py +2201 -0
- zepben/ewb/services/services.py +48 -0
- zepben/ewb/streaming/__init__.py +4 -0
- zepben/ewb/streaming/data/__init__.py +4 -0
- zepben/ewb/streaming/data/current_state_event.py +314 -0
- zepben/ewb/streaming/data/current_state_event_batch.py +25 -0
- zepben/ewb/streaming/data/set_current_states_status.py +286 -0
- zepben/ewb/streaming/exceptions.py +14 -0
- zepben/ewb/streaming/get/__init__.py +4 -0
- zepben/ewb/streaming/get/consumer.py +209 -0
- zepben/ewb/streaming/get/customer_consumer.py +111 -0
- zepben/ewb/streaming/get/diagram_consumer.py +107 -0
- zepben/ewb/streaming/get/hierarchy/__init__.py +4 -0
- zepben/ewb/streaming/get/hierarchy/data.py +27 -0
- zepben/ewb/streaming/get/included_energized_containers.py +36 -0
- zepben/ewb/streaming/get/included_energizing_containers.py +36 -0
- zepben/ewb/streaming/get/network_consumer.py +870 -0
- zepben/ewb/streaming/get/query_network_state_client.py +64 -0
- zepben/ewb/streaming/get/query_network_state_service.py +94 -0
- zepben/ewb/streaming/grpc/__init__.py +4 -0
- zepben/ewb/streaming/grpc/auth_token_plugin.py +24 -0
- zepben/ewb/streaming/grpc/connect.py +209 -0
- zepben/ewb/streaming/grpc/grpc.py +107 -0
- zepben/ewb/streaming/grpc/grpc_channel_builder.py +190 -0
- zepben/ewb/streaming/mutations/__init__.py +4 -0
- zepben/ewb/streaming/mutations/update_network_state_client.py +80 -0
- zepben/ewb/streaming/mutations/update_network_state_service.py +61 -0
- zepben/ewb/testing/__init__.py +4 -0
- zepben/ewb/testing/test_network_builder.py +816 -0
- zepben/ewb/types.py +17 -0
- zepben/ewb/util.py +200 -0
- zepben_ewb-1.0.0.dist-info/METADATA +90 -0
- zepben_ewb-1.0.0.dist-info/RECORD +641 -0
- zepben_ewb-1.0.0.dist-info/WHEEL +5 -0
- zepben_ewb-1.0.0.dist-info/licenses/LICENSE +374 -0
- zepben_ewb-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1322 @@
|
|
|
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
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Callable, Optional, Any
|
|
7
|
+
|
|
8
|
+
from zepben.ewb import BatteryControl, PanDemandResponseFunction, StaticVarCompensator
|
|
9
|
+
from zepben.ewb.model.cim.extensions.iec61968.assetinfo.relay_info import RelayInfo
|
|
10
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.core.site import Site
|
|
11
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.feeder.loop import Loop
|
|
12
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.feeder.lv_feeder import LvFeeder
|
|
13
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.generation.production.ev_charging_unit import EvChargingUnit
|
|
14
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.protection.distance_relay import DistanceRelay
|
|
15
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.protection.protection_relay_function import ProtectionRelayFunction
|
|
16
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.protection.protection_relay_scheme import ProtectionRelayScheme
|
|
17
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.protection.protection_relay_system import ProtectionRelaySystem
|
|
18
|
+
from zepben.ewb.model.cim.extensions.iec61970.base.protection.voltage_relay import VoltageRelay
|
|
19
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.cable_info import CableInfo
|
|
20
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.no_load_test import NoLoadTest
|
|
21
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.open_circuit_test import OpenCircuitTest
|
|
22
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.overhead_wire_info import OverheadWireInfo
|
|
23
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.power_transformer_info import PowerTransformerInfo
|
|
24
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.short_circuit_test import ShortCircuitTest
|
|
25
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.shunt_compensator_info import ShuntCompensatorInfo
|
|
26
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.switch_info import SwitchInfo
|
|
27
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.transformer_end_info import TransformerEndInfo
|
|
28
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.transformer_tank_info import TransformerTankInfo
|
|
29
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.transformer_test import TransformerTest
|
|
30
|
+
from zepben.ewb.model.cim.iec61968.assetinfo.wire_info import WireInfo
|
|
31
|
+
from zepben.ewb.model.cim.iec61968.assets.asset import Asset
|
|
32
|
+
from zepben.ewb.model.cim.iec61968.assets.asset_owner import AssetOwner
|
|
33
|
+
from zepben.ewb.model.cim.iec61968.assets.streetlight import Streetlight
|
|
34
|
+
from zepben.ewb.model.cim.iec61968.common.location import Location
|
|
35
|
+
from zepben.ewb.model.cim.iec61968.infiec61968.infassetinfo.current_transformer_info import CurrentTransformerInfo
|
|
36
|
+
from zepben.ewb.model.cim.iec61968.infiec61968.infassetinfo.potential_transformer_info import PotentialTransformerInfo
|
|
37
|
+
from zepben.ewb.model.cim.iec61968.infiec61968.infassets.pole import Pole
|
|
38
|
+
from zepben.ewb.model.cim.iec61968.metering.end_device import EndDevice
|
|
39
|
+
from zepben.ewb.model.cim.iec61968.metering.end_device_function import EndDeviceFunction
|
|
40
|
+
from zepben.ewb.model.cim.iec61968.metering.meter import Meter
|
|
41
|
+
from zepben.ewb.model.cim.iec61968.metering.usage_point import UsagePoint
|
|
42
|
+
from zepben.ewb.model.cim.iec61968.operations.operational_restriction import OperationalRestriction
|
|
43
|
+
from zepben.ewb.model.cim.iec61970.base.auxiliaryequipment.auxiliary_equipment import AuxiliaryEquipment
|
|
44
|
+
from zepben.ewb.model.cim.iec61970.base.auxiliaryequipment.current_transformer import CurrentTransformer
|
|
45
|
+
from zepben.ewb.model.cim.iec61970.base.auxiliaryequipment.fault_indicator import FaultIndicator
|
|
46
|
+
from zepben.ewb.model.cim.iec61970.base.auxiliaryequipment.potential_transformer import PotentialTransformer
|
|
47
|
+
from zepben.ewb.model.cim.iec61970.base.auxiliaryequipment.sensor import Sensor
|
|
48
|
+
from zepben.ewb.model.cim.iec61970.base.core.base_voltage import BaseVoltage
|
|
49
|
+
from zepben.ewb.model.cim.iec61970.base.core.conducting_equipment import ConductingEquipment
|
|
50
|
+
from zepben.ewb.model.cim.iec61970.base.core.connectivity_node import ConnectivityNode
|
|
51
|
+
from zepben.ewb.model.cim.iec61970.base.core.curve import Curve
|
|
52
|
+
from zepben.ewb.model.cim.iec61970.base.core.equipment import Equipment
|
|
53
|
+
from zepben.ewb.model.cim.iec61970.base.core.equipment_container import EquipmentContainer
|
|
54
|
+
from zepben.ewb.model.cim.iec61970.base.core.feeder import Feeder
|
|
55
|
+
from zepben.ewb.model.cim.iec61970.base.core.geographical_region import GeographicalRegion
|
|
56
|
+
from zepben.ewb.model.cim.iec61970.base.core.phase_code import PhaseCode
|
|
57
|
+
from zepben.ewb.model.cim.iec61970.base.core.power_system_resource import PowerSystemResource
|
|
58
|
+
from zepben.ewb.model.cim.iec61970.base.core.sub_geographical_region import SubGeographicalRegion
|
|
59
|
+
from zepben.ewb.model.cim.iec61970.base.core.substation import Substation
|
|
60
|
+
from zepben.ewb.model.cim.iec61970.base.core.terminal import Terminal
|
|
61
|
+
from zepben.ewb.model.cim.iec61970.base.equivalents.equivalent_branch import EquivalentBranch
|
|
62
|
+
from zepben.ewb.model.cim.iec61970.base.generation.production.battery_unit import BatteryUnit
|
|
63
|
+
from zepben.ewb.model.cim.iec61970.base.generation.production.photo_voltaic_unit import PhotoVoltaicUnit
|
|
64
|
+
from zepben.ewb.model.cim.iec61970.base.generation.production.power_electronics_unit import PowerElectronicsUnit
|
|
65
|
+
from zepben.ewb.model.cim.iec61970.base.generation.production.power_electronics_wind_unit import PowerElectronicsWindUnit
|
|
66
|
+
from zepben.ewb.model.cim.iec61970.base.meas.accumulator import Accumulator
|
|
67
|
+
from zepben.ewb.model.cim.iec61970.base.meas.analog import Analog
|
|
68
|
+
from zepben.ewb.model.cim.iec61970.base.meas.control import Control
|
|
69
|
+
from zepben.ewb.model.cim.iec61970.base.meas.discrete import Discrete
|
|
70
|
+
from zepben.ewb.model.cim.iec61970.base.meas.measurement import Measurement
|
|
71
|
+
from zepben.ewb.model.cim.iec61970.base.protection.current_relay import CurrentRelay
|
|
72
|
+
from zepben.ewb.model.cim.iec61970.base.scada.remote_control import RemoteControl
|
|
73
|
+
from zepben.ewb.model.cim.iec61970.base.scada.remote_source import RemoteSource
|
|
74
|
+
from zepben.ewb.model.cim.iec61970.base.wires.ac_line_segment import AcLineSegment
|
|
75
|
+
from zepben.ewb.model.cim.iec61970.base.wires.breaker import Breaker
|
|
76
|
+
from zepben.ewb.model.cim.iec61970.base.wires.busbar_section import BusbarSection
|
|
77
|
+
from zepben.ewb.model.cim.iec61970.base.wires.clamp import Clamp
|
|
78
|
+
from zepben.ewb.model.cim.iec61970.base.wires.conductor import Conductor
|
|
79
|
+
from zepben.ewb.model.cim.iec61970.base.wires.cut import Cut
|
|
80
|
+
from zepben.ewb.model.cim.iec61970.base.wires.disconnector import Disconnector
|
|
81
|
+
from zepben.ewb.model.cim.iec61970.base.wires.earth_fault_compensator import EarthFaultCompensator
|
|
82
|
+
from zepben.ewb.model.cim.iec61970.base.wires.energy_consumer import EnergyConsumer
|
|
83
|
+
from zepben.ewb.model.cim.iec61970.base.wires.energy_consumer_phase import EnergyConsumerPhase
|
|
84
|
+
from zepben.ewb.model.cim.iec61970.base.wires.energy_source import EnergySource
|
|
85
|
+
from zepben.ewb.model.cim.iec61970.base.wires.energy_source_phase import EnergySourcePhase
|
|
86
|
+
from zepben.ewb.model.cim.iec61970.base.wires.fuse import Fuse
|
|
87
|
+
from zepben.ewb.model.cim.iec61970.base.wires.ground import Ground
|
|
88
|
+
from zepben.ewb.model.cim.iec61970.base.wires.ground_disconnector import GroundDisconnector
|
|
89
|
+
from zepben.ewb.model.cim.iec61970.base.wires.grounding_impedance import GroundingImpedance
|
|
90
|
+
from zepben.ewb.model.cim.iec61970.base.wires.jumper import Jumper
|
|
91
|
+
from zepben.ewb.model.cim.iec61970.base.wires.junction import Junction
|
|
92
|
+
from zepben.ewb.model.cim.iec61970.base.wires.linear_shunt_compensator import LinearShuntCompensator
|
|
93
|
+
from zepben.ewb.model.cim.iec61970.base.wires.load_break_switch import LoadBreakSwitch
|
|
94
|
+
from zepben.ewb.model.cim.iec61970.base.wires.per_length_phase_impedance import PerLengthPhaseImpedance
|
|
95
|
+
from zepben.ewb.model.cim.iec61970.base.wires.per_length_sequence_impedance import PerLengthSequenceImpedance
|
|
96
|
+
from zepben.ewb.model.cim.iec61970.base.wires.petersen_coil import PetersenCoil
|
|
97
|
+
from zepben.ewb.model.cim.iec61970.base.wires.power_electronics_connection import PowerElectronicsConnection
|
|
98
|
+
from zepben.ewb.model.cim.iec61970.base.wires.power_electronics_connection_phase import PowerElectronicsConnectionPhase
|
|
99
|
+
from zepben.ewb.model.cim.iec61970.base.wires.power_transformer import PowerTransformer
|
|
100
|
+
from zepben.ewb.model.cim.iec61970.base.wires.power_transformer_end import PowerTransformerEnd
|
|
101
|
+
from zepben.ewb.model.cim.iec61970.base.wires.protected_switch import ProtectedSwitch
|
|
102
|
+
from zepben.ewb.model.cim.iec61970.base.wires.ratio_tap_changer import RatioTapChanger
|
|
103
|
+
from zepben.ewb.model.cim.iec61970.base.wires.reactive_capability_curve import ReactiveCapabilityCurve
|
|
104
|
+
from zepben.ewb.model.cim.iec61970.base.wires.recloser import Recloser
|
|
105
|
+
from zepben.ewb.model.cim.iec61970.base.wires.regulating_cond_eq import RegulatingCondEq
|
|
106
|
+
from zepben.ewb.model.cim.iec61970.base.wires.regulating_control import RegulatingControl
|
|
107
|
+
from zepben.ewb.model.cim.iec61970.base.wires.rotating_machine import RotatingMachine
|
|
108
|
+
from zepben.ewb.model.cim.iec61970.base.wires.series_compensator import SeriesCompensator
|
|
109
|
+
from zepben.ewb.model.cim.iec61970.base.wires.shunt_compensator import ShuntCompensator
|
|
110
|
+
from zepben.ewb.model.cim.iec61970.base.wires.single_phase_kind import SinglePhaseKind
|
|
111
|
+
from zepben.ewb.model.cim.iec61970.base.wires.switch import Switch
|
|
112
|
+
from zepben.ewb.model.cim.iec61970.base.wires.synchronous_machine import SynchronousMachine
|
|
113
|
+
from zepben.ewb.model.cim.iec61970.base.wires.tap_changer import TapChanger
|
|
114
|
+
from zepben.ewb.model.cim.iec61970.base.wires.tap_changer_control import TapChangerControl
|
|
115
|
+
from zepben.ewb.model.cim.iec61970.base.wires.transformer_end import TransformerEnd
|
|
116
|
+
from zepben.ewb.model.cim.iec61970.base.wires.transformer_star_impedance import TransformerStarImpedance
|
|
117
|
+
from zepben.ewb.model.cim.iec61970.infiec61970.feeder.circuit import Circuit
|
|
118
|
+
from zepben.ewb.services.common.base_service_comparator import BaseServiceComparator
|
|
119
|
+
from zepben.ewb.services.common.difference import ValueDifference
|
|
120
|
+
from zepben.ewb.services.common.translator.service_differences import ObjectDifference
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@dataclass
|
|
124
|
+
class NetworkServiceComparatorOptions:
|
|
125
|
+
compare_terminals: bool = True
|
|
126
|
+
compare_traced_phases: bool = True
|
|
127
|
+
compare_feeder_equipment: bool = True
|
|
128
|
+
compare_equipment_containers: bool = True
|
|
129
|
+
compare_lv_simplification: bool = True
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
#
|
|
133
|
+
# NOTE: The functions below are accessed by reflection rather than directly. Make sure you check the code coverage
|
|
134
|
+
# to ensure they are covered correctly.
|
|
135
|
+
#
|
|
136
|
+
|
|
137
|
+
class NetworkServiceComparator(BaseServiceComparator):
|
|
138
|
+
"""
|
|
139
|
+
Compare the objects supported by the network service.
|
|
140
|
+
"""
|
|
141
|
+
|
|
142
|
+
def __init__(self, options: NetworkServiceComparatorOptions = NetworkServiceComparatorOptions()):
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
:param options: Indicates which optional checks to perform.
|
|
146
|
+
"""
|
|
147
|
+
super().__init__()
|
|
148
|
+
self._options = options
|
|
149
|
+
|
|
150
|
+
##################################
|
|
151
|
+
# Extensions IEC61968 Asset Info #
|
|
152
|
+
##################################
|
|
153
|
+
|
|
154
|
+
def _compare_relay_info(self, source: RelayInfo, target: RelayInfo) -> ObjectDifference:
|
|
155
|
+
diff = ObjectDifference(source, target)
|
|
156
|
+
|
|
157
|
+
self._compare_values(diff, RelayInfo.curve_setting, RelayInfo.reclose_fast)
|
|
158
|
+
self._compare_indexed_value_collections(diff, RelayInfo.reclose_delays)
|
|
159
|
+
|
|
160
|
+
return self._compare_asset_info(diff)
|
|
161
|
+
|
|
162
|
+
################################
|
|
163
|
+
# Extensions IEC61968 Metering #
|
|
164
|
+
################################
|
|
165
|
+
|
|
166
|
+
def _compare_pan_demand_response_function(self, source: PanDemandResponseFunction, target: PanDemandResponseFunction) -> ObjectDifference:
|
|
167
|
+
diff = ObjectDifference(source, target)
|
|
168
|
+
|
|
169
|
+
# noinspection PyProtectedMember
|
|
170
|
+
self._compare_values(diff, PanDemandResponseFunction.kind, PanDemandResponseFunction._appliance_bitmask)
|
|
171
|
+
|
|
172
|
+
return self._compare_end_device_function(diff)
|
|
173
|
+
|
|
174
|
+
#################################
|
|
175
|
+
# Extensions IEC61970 Base Core #
|
|
176
|
+
#################################
|
|
177
|
+
|
|
178
|
+
def _compare_site(self, source: Site, target: Site) -> ObjectDifference:
|
|
179
|
+
return self._compare_equipment_container(ObjectDifference(source, target))
|
|
180
|
+
|
|
181
|
+
###################################
|
|
182
|
+
# Extensions IEC61970 Base Feeder #
|
|
183
|
+
###################################
|
|
184
|
+
|
|
185
|
+
def _compare_loop(self, source: Loop, target: Loop) -> ObjectDifference:
|
|
186
|
+
diff = ObjectDifference(source, target)
|
|
187
|
+
|
|
188
|
+
self._compare_id_reference_collections(diff, Loop.circuits, Loop.substations, Loop.energizing_substations)
|
|
189
|
+
|
|
190
|
+
return self._compare_identified_object(diff)
|
|
191
|
+
|
|
192
|
+
def _compare_lv_feeder(self, source: LvFeeder, target: LvFeeder) -> ObjectDifference:
|
|
193
|
+
diff = ObjectDifference(source, target)
|
|
194
|
+
|
|
195
|
+
self._compare_id_references(diff, LvFeeder.normal_head_terminal)
|
|
196
|
+
self._compare_id_reference_collections(diff, LvFeeder.normal_energizing_feeders)
|
|
197
|
+
if self._options.compare_feeder_equipment:
|
|
198
|
+
self._compare_id_reference_collections(diff, LvFeeder.current_equipment)
|
|
199
|
+
self._compare_id_reference_collections(diff, LvFeeder.current_energizing_feeders)
|
|
200
|
+
|
|
201
|
+
return self._compare_equipment_container(diff)
|
|
202
|
+
|
|
203
|
+
##################################################
|
|
204
|
+
# Extensions IEC61970 Base Generation Production #
|
|
205
|
+
##################################################
|
|
206
|
+
|
|
207
|
+
def _compare_ev_charging_unit(self, source: EvChargingUnit, target: EvChargingUnit) -> ObjectDifference:
|
|
208
|
+
diff = ObjectDifference(source, target)
|
|
209
|
+
return self._compare_power_electronics_unit(diff)
|
|
210
|
+
|
|
211
|
+
#######################################
|
|
212
|
+
# Extensions IEC61970 Base Protection #
|
|
213
|
+
#######################################
|
|
214
|
+
|
|
215
|
+
def _compare_distance_relay(self, source: DistanceRelay, target: DistanceRelay) -> ObjectDifference:
|
|
216
|
+
diff = ObjectDifference(source, target)
|
|
217
|
+
|
|
218
|
+
self._compare_floats(
|
|
219
|
+
diff,
|
|
220
|
+
DistanceRelay.backward_blind,
|
|
221
|
+
DistanceRelay.backward_reach,
|
|
222
|
+
DistanceRelay.backward_reactance,
|
|
223
|
+
DistanceRelay.forward_blind,
|
|
224
|
+
DistanceRelay.forward_reach,
|
|
225
|
+
DistanceRelay.forward_reactance,
|
|
226
|
+
DistanceRelay.operation_phase_angle1,
|
|
227
|
+
DistanceRelay.operation_phase_angle2,
|
|
228
|
+
DistanceRelay.operation_phase_angle3,
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
return self._compare_protection_relay_function(diff)
|
|
232
|
+
|
|
233
|
+
def _compare_protection_relay_function(self, diff: ObjectDifference) -> ObjectDifference:
|
|
234
|
+
self._compare_values(
|
|
235
|
+
diff,
|
|
236
|
+
ProtectionRelayFunction.model,
|
|
237
|
+
ProtectionRelayFunction.reclosing,
|
|
238
|
+
ProtectionRelayFunction.protection_kind,
|
|
239
|
+
ProtectionRelayFunction.directable,
|
|
240
|
+
ProtectionRelayFunction.power_direction
|
|
241
|
+
)
|
|
242
|
+
self._compare_floats(diff, ProtectionRelayFunction.relay_delay_time)
|
|
243
|
+
self._compare_indexed_value_collections(
|
|
244
|
+
diff,
|
|
245
|
+
ProtectionRelayFunction.time_limits,
|
|
246
|
+
ProtectionRelayFunction.thresholds
|
|
247
|
+
)
|
|
248
|
+
self._compare_id_reference_collections(
|
|
249
|
+
diff,
|
|
250
|
+
ProtectionRelayFunction.protected_switches,
|
|
251
|
+
ProtectionRelayFunction.sensors,
|
|
252
|
+
ProtectionRelayFunction.schemes,
|
|
253
|
+
)
|
|
254
|
+
self._compare_id_references(diff, ProtectionRelayFunction.relay_info)
|
|
255
|
+
|
|
256
|
+
return self._compare_power_system_resource(diff)
|
|
257
|
+
|
|
258
|
+
def _compare_protection_relay_scheme(self, source: ProtectionRelayScheme, target: ProtectionRelayScheme) -> ObjectDifference:
|
|
259
|
+
diff = ObjectDifference(source, target)
|
|
260
|
+
self._compare_id_references(diff, ProtectionRelayScheme.system)
|
|
261
|
+
self._compare_id_reference_collections(diff, ProtectionRelayScheme.functions)
|
|
262
|
+
|
|
263
|
+
return self._compare_identified_object(diff)
|
|
264
|
+
|
|
265
|
+
def _compare_protection_relay_system(self, source: ProtectionRelaySystem, target: ProtectionRelaySystem) -> ObjectDifference:
|
|
266
|
+
diff = ObjectDifference(source, target)
|
|
267
|
+
|
|
268
|
+
self._compare_values(diff, ProtectionRelaySystem.protection_kind)
|
|
269
|
+
self._compare_id_reference_collections(diff, ProtectionRelaySystem.schemes)
|
|
270
|
+
|
|
271
|
+
return self._compare_equipment(diff)
|
|
272
|
+
|
|
273
|
+
def _compare_voltage_relay(self, source: VoltageRelay, target: VoltageRelay) -> ObjectDifference:
|
|
274
|
+
diff = ObjectDifference(source, target)
|
|
275
|
+
|
|
276
|
+
return self._compare_protection_relay_function(diff)
|
|
277
|
+
|
|
278
|
+
##################################
|
|
279
|
+
# Extensions IEC61970 Base Wires #
|
|
280
|
+
##################################
|
|
281
|
+
|
|
282
|
+
def _compare_battery_control(self, source: BatteryControl, target: BatteryControl) -> ObjectDifference:
|
|
283
|
+
diff = ObjectDifference(source, target)
|
|
284
|
+
|
|
285
|
+
self._compare_floats(diff, BatteryControl.charging_rate, BatteryControl.discharging_rate, BatteryControl.reserve_percent)
|
|
286
|
+
self._compare_values(diff, BatteryControl.control_mode)
|
|
287
|
+
|
|
288
|
+
return self._compare_regulating_control(diff)
|
|
289
|
+
|
|
290
|
+
#######################
|
|
291
|
+
# IEC61968 Asset Info #
|
|
292
|
+
#######################
|
|
293
|
+
|
|
294
|
+
def _compare_cable_info(self, source: CableInfo, target: CableInfo) -> ObjectDifference:
|
|
295
|
+
return self._compare_wire_info(ObjectDifference(source, target))
|
|
296
|
+
|
|
297
|
+
def _compare_no_load_test(self, source: NoLoadTest, target: NoLoadTest) -> ObjectDifference:
|
|
298
|
+
diff = ObjectDifference(source, target)
|
|
299
|
+
|
|
300
|
+
self._compare_values(diff, NoLoadTest.energised_end_voltage, NoLoadTest.loss, NoLoadTest.loss_zero)
|
|
301
|
+
self._compare_floats(diff, NoLoadTest.exciting_current, NoLoadTest.exciting_current_zero)
|
|
302
|
+
|
|
303
|
+
return self._compare_transformer_test(diff)
|
|
304
|
+
|
|
305
|
+
def _compare_open_circuit_test(self, source: OpenCircuitTest, target: OpenCircuitTest) -> ObjectDifference:
|
|
306
|
+
diff = ObjectDifference(source, target)
|
|
307
|
+
|
|
308
|
+
self._compare_values(
|
|
309
|
+
diff,
|
|
310
|
+
OpenCircuitTest.energised_end_step,
|
|
311
|
+
OpenCircuitTest.energised_end_voltage,
|
|
312
|
+
OpenCircuitTest.open_end_step,
|
|
313
|
+
OpenCircuitTest.open_end_voltage
|
|
314
|
+
)
|
|
315
|
+
self._compare_floats(diff, OpenCircuitTest.phase_shift)
|
|
316
|
+
|
|
317
|
+
return self._compare_transformer_test(diff)
|
|
318
|
+
|
|
319
|
+
def _compare_overhead_wire_info(self, source: OverheadWireInfo, target: OverheadWireInfo) -> ObjectDifference:
|
|
320
|
+
return self._compare_wire_info(ObjectDifference(source, target))
|
|
321
|
+
|
|
322
|
+
def _compare_power_transformer_info(self, source: PowerTransformerInfo, target: PowerTransformerInfo) -> ObjectDifference:
|
|
323
|
+
diff = ObjectDifference(source, target)
|
|
324
|
+
|
|
325
|
+
self._compare_id_reference_collections(diff, PowerTransformerInfo.transformer_tank_infos)
|
|
326
|
+
|
|
327
|
+
return self._compare_asset_info(diff)
|
|
328
|
+
|
|
329
|
+
def _compare_short_circuit_test(self, source: ShortCircuitTest, target: ShortCircuitTest) -> ObjectDifference:
|
|
330
|
+
diff = ObjectDifference(source, target)
|
|
331
|
+
|
|
332
|
+
self._compare_values(
|
|
333
|
+
diff,
|
|
334
|
+
ShortCircuitTest.energised_end_step,
|
|
335
|
+
ShortCircuitTest.grounded_end_step,
|
|
336
|
+
ShortCircuitTest.loss,
|
|
337
|
+
ShortCircuitTest.loss_zero,
|
|
338
|
+
ShortCircuitTest.power
|
|
339
|
+
)
|
|
340
|
+
self._compare_floats(
|
|
341
|
+
diff,
|
|
342
|
+
ShortCircuitTest.current,
|
|
343
|
+
ShortCircuitTest.leakage_impedance,
|
|
344
|
+
ShortCircuitTest.leakage_impedance_zero,
|
|
345
|
+
ShortCircuitTest.voltage,
|
|
346
|
+
ShortCircuitTest.voltage_ohmic_part
|
|
347
|
+
)
|
|
348
|
+
return self._compare_transformer_test(diff)
|
|
349
|
+
|
|
350
|
+
def _compare_shunt_compensator_info(self, source: ShuntCompensatorInfo, target: ShuntCompensatorInfo) -> ObjectDifference:
|
|
351
|
+
diff = ObjectDifference(source, target)
|
|
352
|
+
|
|
353
|
+
self._compare_values(
|
|
354
|
+
diff,
|
|
355
|
+
ShuntCompensatorInfo.max_power_loss,
|
|
356
|
+
ShuntCompensatorInfo.rated_current,
|
|
357
|
+
ShuntCompensatorInfo.rated_reactive_power,
|
|
358
|
+
ShuntCompensatorInfo.rated_voltage,
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
return self._compare_asset_info(diff)
|
|
362
|
+
|
|
363
|
+
def _compare_switch_info(self, source: SwitchInfo, target: SwitchInfo) -> ObjectDifference:
|
|
364
|
+
diff = ObjectDifference(source, target)
|
|
365
|
+
|
|
366
|
+
self._compare_floats(diff, SwitchInfo.rated_interrupting_time)
|
|
367
|
+
|
|
368
|
+
return self._compare_asset_info(diff)
|
|
369
|
+
|
|
370
|
+
def _compare_transformer_end_info(self, source: TransformerEndInfo, target: TransformerEndInfo) -> ObjectDifference:
|
|
371
|
+
diff = ObjectDifference(source, target)
|
|
372
|
+
|
|
373
|
+
self._compare_id_references(
|
|
374
|
+
diff,
|
|
375
|
+
TransformerEndInfo.transformer_star_impedance,
|
|
376
|
+
TransformerEndInfo.energised_end_no_load_tests,
|
|
377
|
+
TransformerEndInfo.energised_end_short_circuit_tests,
|
|
378
|
+
TransformerEndInfo.grounded_end_short_circuit_tests,
|
|
379
|
+
TransformerEndInfo.open_end_open_circuit_tests,
|
|
380
|
+
TransformerEndInfo.energised_end_open_circuit_tests
|
|
381
|
+
)
|
|
382
|
+
self._compare_values(
|
|
383
|
+
diff,
|
|
384
|
+
TransformerEndInfo.connection_kind,
|
|
385
|
+
TransformerEndInfo.emergency_s,
|
|
386
|
+
TransformerEndInfo.end_number,
|
|
387
|
+
TransformerEndInfo.insulation_u,
|
|
388
|
+
TransformerEndInfo.phase_angle_clock,
|
|
389
|
+
TransformerEndInfo.rated_s,
|
|
390
|
+
TransformerEndInfo.rated_u,
|
|
391
|
+
TransformerEndInfo.short_term_s
|
|
392
|
+
)
|
|
393
|
+
self._compare_floats(diff, TransformerEndInfo.r)
|
|
394
|
+
|
|
395
|
+
return self._compare_asset_info(diff)
|
|
396
|
+
|
|
397
|
+
def _compare_transformer_tank_info(self, source: TransformerTankInfo, target: TransformerTankInfo) -> ObjectDifference:
|
|
398
|
+
diff = ObjectDifference(source, target)
|
|
399
|
+
|
|
400
|
+
self._compare_id_reference_collections(diff, TransformerTankInfo.transformer_end_infos)
|
|
401
|
+
|
|
402
|
+
return self._compare_asset_info(diff)
|
|
403
|
+
|
|
404
|
+
def _compare_transformer_test(self, diff: ObjectDifference) -> ObjectDifference:
|
|
405
|
+
self._compare_values(diff, TransformerTest.base_power)
|
|
406
|
+
self._compare_floats(diff, TransformerTest.temperature)
|
|
407
|
+
|
|
408
|
+
return self._compare_identified_object(diff)
|
|
409
|
+
|
|
410
|
+
def _compare_wire_info(self, diff: ObjectDifference) -> ObjectDifference:
|
|
411
|
+
self._compare_values(diff, WireInfo.rated_current, WireInfo.material)
|
|
412
|
+
|
|
413
|
+
return self._compare_asset_info(diff)
|
|
414
|
+
|
|
415
|
+
###################
|
|
416
|
+
# IEC61968 Assets #
|
|
417
|
+
###################
|
|
418
|
+
|
|
419
|
+
def _compare_asset(self, diff: ObjectDifference) -> ObjectDifference:
|
|
420
|
+
self._compare_id_references(diff, Asset.location)
|
|
421
|
+
self._compare_id_reference_collections(diff, Asset.organisation_roles)
|
|
422
|
+
self._compare_id_reference_collections(diff, Asset.power_system_resources)
|
|
423
|
+
|
|
424
|
+
return self._compare_identified_object(diff)
|
|
425
|
+
|
|
426
|
+
def _compare_asset_container(self, diff: ObjectDifference) -> ObjectDifference:
|
|
427
|
+
return self._compare_asset(diff)
|
|
428
|
+
|
|
429
|
+
def _compare_asset_function(self, diff: ObjectDifference) -> ObjectDifference:
|
|
430
|
+
return self._compare_identified_object(diff)
|
|
431
|
+
|
|
432
|
+
def _compare_asset_info(self, diff: ObjectDifference) -> ObjectDifference:
|
|
433
|
+
return self._compare_identified_object(diff)
|
|
434
|
+
|
|
435
|
+
def _compare_asset_organisation_role(self, diff: ObjectDifference) -> ObjectDifference:
|
|
436
|
+
return self._compare_organisation_role(diff)
|
|
437
|
+
|
|
438
|
+
def _compare_asset_owner(self, source: AssetOwner, target: AssetOwner) -> ObjectDifference:
|
|
439
|
+
return self._compare_asset_organisation_role(ObjectDifference(source, target))
|
|
440
|
+
|
|
441
|
+
def _compare_streetlight(self, source: Streetlight, target: Streetlight) -> ObjectDifference:
|
|
442
|
+
diff = ObjectDifference(source, target)
|
|
443
|
+
|
|
444
|
+
self._compare_values(diff, Streetlight.light_rating, Streetlight.lamp_kind)
|
|
445
|
+
self._compare_id_references(diff, Streetlight.pole)
|
|
446
|
+
|
|
447
|
+
return self._compare_asset(diff)
|
|
448
|
+
|
|
449
|
+
def _compare_structure(self, diff: ObjectDifference) -> ObjectDifference:
|
|
450
|
+
return self._compare_asset_container(diff)
|
|
451
|
+
|
|
452
|
+
###################
|
|
453
|
+
# IEC61968 Common #
|
|
454
|
+
###################
|
|
455
|
+
|
|
456
|
+
def _compare_location(self, source: Location, target: Location) -> ObjectDifference:
|
|
457
|
+
diff = ObjectDifference(source, target)
|
|
458
|
+
|
|
459
|
+
self._compare_values(diff, Location.main_address)
|
|
460
|
+
self._compare_indexed_value_collections(diff, Location.points)
|
|
461
|
+
|
|
462
|
+
return self._compare_identified_object(diff)
|
|
463
|
+
|
|
464
|
+
#####################################
|
|
465
|
+
# IEC61968 InfIEC61968 InfAssetInfo #
|
|
466
|
+
#####################################
|
|
467
|
+
|
|
468
|
+
def _compare_current_transformer_info(self, source: CurrentTransformerInfo, target: CurrentTransformerInfo) -> ObjectDifference:
|
|
469
|
+
diff = ObjectDifference(source, target)
|
|
470
|
+
|
|
471
|
+
self._compare_values(
|
|
472
|
+
diff,
|
|
473
|
+
CurrentTransformerInfo.accuracy_class,
|
|
474
|
+
CurrentTransformerInfo.core_count,
|
|
475
|
+
CurrentTransformerInfo.ct_class,
|
|
476
|
+
CurrentTransformerInfo.knee_point_voltage,
|
|
477
|
+
CurrentTransformerInfo.max_ratio,
|
|
478
|
+
CurrentTransformerInfo.nominal_ratio,
|
|
479
|
+
CurrentTransformerInfo.rated_current,
|
|
480
|
+
CurrentTransformerInfo.secondary_fls_rating,
|
|
481
|
+
CurrentTransformerInfo.usage
|
|
482
|
+
)
|
|
483
|
+
self._compare_floats(
|
|
484
|
+
diff,
|
|
485
|
+
CurrentTransformerInfo.accuracy_limit,
|
|
486
|
+
CurrentTransformerInfo.primary_ratio,
|
|
487
|
+
CurrentTransformerInfo.secondary_ratio
|
|
488
|
+
)
|
|
489
|
+
|
|
490
|
+
return self._compare_asset_info(diff)
|
|
491
|
+
|
|
492
|
+
def _compare_potential_transformer_info(self, source: PotentialTransformerInfo, target: PotentialTransformerInfo) -> ObjectDifference:
|
|
493
|
+
diff = ObjectDifference(source, target)
|
|
494
|
+
|
|
495
|
+
self._compare_values(
|
|
496
|
+
diff,
|
|
497
|
+
PotentialTransformerInfo.accuracy_class,
|
|
498
|
+
PotentialTransformerInfo.nominal_ratio,
|
|
499
|
+
PotentialTransformerInfo.pt_class,
|
|
500
|
+
PotentialTransformerInfo.rated_voltage,
|
|
501
|
+
)
|
|
502
|
+
self._compare_floats(
|
|
503
|
+
diff,
|
|
504
|
+
PotentialTransformerInfo.primary_ratio,
|
|
505
|
+
PotentialTransformerInfo.secondary_ratio
|
|
506
|
+
)
|
|
507
|
+
|
|
508
|
+
return self._compare_asset_info(diff)
|
|
509
|
+
|
|
510
|
+
##################################
|
|
511
|
+
# IEC61968 InfIEC61968 InfAssets #
|
|
512
|
+
##################################
|
|
513
|
+
|
|
514
|
+
def _compare_pole(self, source: Pole, target: Pole) -> ObjectDifference:
|
|
515
|
+
diff = ObjectDifference(source, target)
|
|
516
|
+
|
|
517
|
+
self._compare_values(diff, Pole.classification)
|
|
518
|
+
self._compare_id_reference_collections(diff, Pole.streetlights)
|
|
519
|
+
|
|
520
|
+
return self._compare_structure(diff)
|
|
521
|
+
|
|
522
|
+
#####################
|
|
523
|
+
# IEC61968 Metering #
|
|
524
|
+
#####################
|
|
525
|
+
|
|
526
|
+
def _compare_end_device(self, diff: ObjectDifference) -> ObjectDifference:
|
|
527
|
+
if self._options.compare_lv_simplification:
|
|
528
|
+
self._compare_id_reference_collections(diff, EndDevice.usage_points)
|
|
529
|
+
|
|
530
|
+
self._compare_values(diff, EndDevice.customer_mrid)
|
|
531
|
+
self._compare_id_references(diff, EndDevice.service_location)
|
|
532
|
+
self._compare_id_reference_collections(diff, EndDevice.functions)
|
|
533
|
+
|
|
534
|
+
return self._compare_asset_container(diff)
|
|
535
|
+
|
|
536
|
+
def _compare_end_device_function(self, diff: ObjectDifference) -> ObjectDifference:
|
|
537
|
+
self._compare_values(diff, EndDeviceFunction.enabled)
|
|
538
|
+
|
|
539
|
+
return self._compare_asset_function(diff)
|
|
540
|
+
|
|
541
|
+
def _compare_meter(self, source: Meter, target: Meter) -> ObjectDifference:
|
|
542
|
+
return self._compare_end_device(ObjectDifference(source, target))
|
|
543
|
+
|
|
544
|
+
def _compare_usage_point(self, source: UsagePoint, target: UsagePoint) -> ObjectDifference:
|
|
545
|
+
diff = ObjectDifference(source, target)
|
|
546
|
+
|
|
547
|
+
self._compare_id_references(diff, UsagePoint.usage_point_location)
|
|
548
|
+
self._compare_values(
|
|
549
|
+
diff,
|
|
550
|
+
UsagePoint.is_virtual,
|
|
551
|
+
UsagePoint.connection_category,
|
|
552
|
+
UsagePoint.rated_power,
|
|
553
|
+
UsagePoint.approved_inverter_capacity,
|
|
554
|
+
UsagePoint.phase_code
|
|
555
|
+
)
|
|
556
|
+
if self._options.compare_lv_simplification:
|
|
557
|
+
self._compare_id_reference_collections(diff, UsagePoint.equipment)
|
|
558
|
+
self._compare_id_reference_collections(diff, UsagePoint.end_devices)
|
|
559
|
+
|
|
560
|
+
return self._compare_identified_object(diff)
|
|
561
|
+
|
|
562
|
+
#######################
|
|
563
|
+
# IEC61968 Operations #
|
|
564
|
+
#######################
|
|
565
|
+
|
|
566
|
+
def _compare_operational_restriction(self, source: OperationalRestriction, target: OperationalRestriction) -> ObjectDifference:
|
|
567
|
+
diff = ObjectDifference(source, target)
|
|
568
|
+
|
|
569
|
+
self._compare_id_reference_collections(diff, OperationalRestriction.equipment)
|
|
570
|
+
|
|
571
|
+
return self._compare_document(diff)
|
|
572
|
+
|
|
573
|
+
#####################################
|
|
574
|
+
# IEC61970 Base Auxiliary Equipment #
|
|
575
|
+
#####################################
|
|
576
|
+
|
|
577
|
+
def _compare_auxiliary_equipment(self, diff: ObjectDifference) -> ObjectDifference:
|
|
578
|
+
if self._options.compare_terminals:
|
|
579
|
+
self._compare_id_references(diff, AuxiliaryEquipment.terminal)
|
|
580
|
+
|
|
581
|
+
return self._compare_equipment(diff)
|
|
582
|
+
|
|
583
|
+
def _compare_current_transformer(self, source: CurrentTransformer, target: CurrentTransformer) -> ObjectDifference:
|
|
584
|
+
diff = ObjectDifference(source, target)
|
|
585
|
+
|
|
586
|
+
self._compare_values(diff, CurrentTransformer.core_burden)
|
|
587
|
+
self._compare_id_references(diff, CurrentTransformer.current_transformer_info)
|
|
588
|
+
|
|
589
|
+
return self._compare_sensor(diff)
|
|
590
|
+
|
|
591
|
+
def _compare_fault_indicator(self, source: FaultIndicator, target: FaultIndicator) -> ObjectDifference:
|
|
592
|
+
return self._compare_auxiliary_equipment(ObjectDifference(source, target))
|
|
593
|
+
|
|
594
|
+
def _compare_potential_transformer(self, source: PotentialTransformer, target: PotentialTransformer) -> ObjectDifference:
|
|
595
|
+
diff = ObjectDifference(source, target)
|
|
596
|
+
|
|
597
|
+
self._compare_values(diff, PotentialTransformer.type)
|
|
598
|
+
self._compare_id_references(diff, PotentialTransformer.potential_transformer_info)
|
|
599
|
+
|
|
600
|
+
return self._compare_sensor(diff)
|
|
601
|
+
|
|
602
|
+
def _compare_sensor(self, diff: ObjectDifference) -> ObjectDifference:
|
|
603
|
+
self._compare_id_reference_collections(diff, Sensor.relay_functions)
|
|
604
|
+
|
|
605
|
+
return self._compare_auxiliary_equipment(diff)
|
|
606
|
+
|
|
607
|
+
######################
|
|
608
|
+
# IEC61970 Base Core #
|
|
609
|
+
######################
|
|
610
|
+
|
|
611
|
+
def _compare_ac_dc_terminal(self, diff: ObjectDifference) -> ObjectDifference:
|
|
612
|
+
return self._compare_identified_object(diff)
|
|
613
|
+
|
|
614
|
+
def _compare_base_voltage(self, source: BaseVoltage, target: BaseVoltage) -> ObjectDifference:
|
|
615
|
+
diff = ObjectDifference(source, target)
|
|
616
|
+
|
|
617
|
+
self._compare_values(diff, BaseVoltage.nominal_voltage)
|
|
618
|
+
|
|
619
|
+
return self._compare_identified_object(diff)
|
|
620
|
+
|
|
621
|
+
def _compare_conducting_equipment(self, diff: ObjectDifference) -> ObjectDifference:
|
|
622
|
+
self._compare_id_references(diff, ConductingEquipment.base_voltage)
|
|
623
|
+
|
|
624
|
+
if self._options.compare_terminals:
|
|
625
|
+
self._compare_indexed_id_reference_collections(diff, ConductingEquipment.terminals)
|
|
626
|
+
|
|
627
|
+
return self._compare_equipment(diff)
|
|
628
|
+
|
|
629
|
+
def _compare_connectivity_node(self, source: ConnectivityNode, target: ConnectivityNode) -> ObjectDifference:
|
|
630
|
+
diff = ObjectDifference(source, target)
|
|
631
|
+
|
|
632
|
+
self._compare_id_reference_collections(diff, ConnectivityNode.terminals)
|
|
633
|
+
|
|
634
|
+
return self._compare_identified_object(diff)
|
|
635
|
+
|
|
636
|
+
def _compare_connectivity_node_container(self, diff: ObjectDifference) -> ObjectDifference:
|
|
637
|
+
return self._compare_power_system_resource(diff)
|
|
638
|
+
|
|
639
|
+
def _compare_curve(self, diff: ObjectDifference) -> ObjectDifference:
|
|
640
|
+
self._compare_indexed_value_collections(diff, Curve.data)
|
|
641
|
+
|
|
642
|
+
return self._compare_identified_object(diff)
|
|
643
|
+
|
|
644
|
+
def _compare_equipment(self, diff: ObjectDifference) -> ObjectDifference:
|
|
645
|
+
self._compare_values(diff, Equipment.in_service, Equipment.normally_in_service, Equipment.commissioned_date)
|
|
646
|
+
|
|
647
|
+
if self._options.compare_equipment_containers:
|
|
648
|
+
self._compare_id_reference_collections(diff, Equipment.containers, Equipment.current_containers)
|
|
649
|
+
|
|
650
|
+
if self._options.compare_lv_simplification:
|
|
651
|
+
self._compare_id_reference_collections(diff, Equipment.usage_points)
|
|
652
|
+
|
|
653
|
+
self._compare_id_reference_collections(diff, Equipment.operational_restrictions)
|
|
654
|
+
|
|
655
|
+
return self._compare_power_system_resource(diff)
|
|
656
|
+
|
|
657
|
+
def _compare_equipment_container(self, diff: ObjectDifference) -> ObjectDifference:
|
|
658
|
+
self._compare_id_reference_collections(diff, EquipmentContainer.equipment)
|
|
659
|
+
|
|
660
|
+
return self._compare_connectivity_node_container(diff)
|
|
661
|
+
|
|
662
|
+
def _compare_feeder(self, source: Feeder, target: Feeder) -> ObjectDifference:
|
|
663
|
+
diff = ObjectDifference(source, target)
|
|
664
|
+
|
|
665
|
+
self._compare_id_references(diff, Feeder.normal_head_terminal, Feeder.normal_energizing_substation)
|
|
666
|
+
self._compare_id_reference_collections(diff, Feeder.normal_energized_lv_feeders)
|
|
667
|
+
if self._options.compare_feeder_equipment:
|
|
668
|
+
self._compare_id_reference_collections(diff, Feeder.current_equipment)
|
|
669
|
+
self._compare_id_reference_collections(diff, Feeder.current_energized_lv_feeders)
|
|
670
|
+
|
|
671
|
+
return self._compare_equipment_container(diff)
|
|
672
|
+
|
|
673
|
+
def _compare_geographical_region(self, source: GeographicalRegion, target: GeographicalRegion) -> ObjectDifference:
|
|
674
|
+
diff = ObjectDifference(source, target)
|
|
675
|
+
|
|
676
|
+
self._compare_id_reference_collections(diff, GeographicalRegion.sub_geographical_regions)
|
|
677
|
+
|
|
678
|
+
return self._compare_identified_object(diff)
|
|
679
|
+
|
|
680
|
+
def _compare_power_system_resource(self, diff: ObjectDifference) -> ObjectDifference:
|
|
681
|
+
self._compare_id_references(diff, PowerSystemResource.asset_info, PowerSystemResource.location)
|
|
682
|
+
self._compare_id_reference_collections(diff, PowerSystemResource.assets)
|
|
683
|
+
|
|
684
|
+
return self._compare_identified_object(diff)
|
|
685
|
+
|
|
686
|
+
def _compare_sub_geographical_region(self, source: SubGeographicalRegion, target: SubGeographicalRegion) -> ObjectDifference:
|
|
687
|
+
diff = ObjectDifference(source, target)
|
|
688
|
+
|
|
689
|
+
self._compare_id_references(diff, SubGeographicalRegion.geographical_region)
|
|
690
|
+
self._compare_id_reference_collections(diff, SubGeographicalRegion.substations)
|
|
691
|
+
|
|
692
|
+
return self._compare_identified_object(diff)
|
|
693
|
+
|
|
694
|
+
def _compare_substation(self, source: Substation, target: Substation) -> ObjectDifference:
|
|
695
|
+
diff = ObjectDifference(source, target)
|
|
696
|
+
|
|
697
|
+
self._compare_id_references(diff, Substation.sub_geographical_region)
|
|
698
|
+
self._compare_id_reference_collections(diff, Substation.feeders)
|
|
699
|
+
|
|
700
|
+
return self._compare_equipment_container(diff)
|
|
701
|
+
|
|
702
|
+
def _compare_terminal(self, source: Terminal, target: Terminal) -> ObjectDifference:
|
|
703
|
+
diff = ObjectDifference(source, target)
|
|
704
|
+
|
|
705
|
+
self._compare_id_references(diff, Terminal.conducting_equipment, Terminal.connectivity_node)
|
|
706
|
+
self._compare_values(
|
|
707
|
+
diff,
|
|
708
|
+
Terminal.phases,
|
|
709
|
+
Terminal.sequence_number,
|
|
710
|
+
Terminal.normal_feeder_direction,
|
|
711
|
+
Terminal.current_feeder_direction,
|
|
712
|
+
Terminal.phases
|
|
713
|
+
)
|
|
714
|
+
|
|
715
|
+
return self._compare_ac_dc_terminal(diff)
|
|
716
|
+
|
|
717
|
+
#############################
|
|
718
|
+
# IEC61970 Base Equivalents #
|
|
719
|
+
#############################
|
|
720
|
+
|
|
721
|
+
def _compare_equivalent_branch(self, source: EquivalentBranch, target: EquivalentBranch) -> ObjectDifference:
|
|
722
|
+
diff = ObjectDifference(source, target)
|
|
723
|
+
|
|
724
|
+
self._compare_floats(
|
|
725
|
+
diff,
|
|
726
|
+
EquivalentBranch.negative_r12,
|
|
727
|
+
EquivalentBranch.negative_r21,
|
|
728
|
+
EquivalentBranch.negative_x12,
|
|
729
|
+
EquivalentBranch.negative_x21,
|
|
730
|
+
EquivalentBranch.positive_r12,
|
|
731
|
+
EquivalentBranch.positive_r21,
|
|
732
|
+
EquivalentBranch.positive_x12,
|
|
733
|
+
EquivalentBranch.positive_x21,
|
|
734
|
+
EquivalentBranch.r,
|
|
735
|
+
EquivalentBranch.r21,
|
|
736
|
+
EquivalentBranch.x,
|
|
737
|
+
EquivalentBranch.x21,
|
|
738
|
+
EquivalentBranch.zero_r12,
|
|
739
|
+
EquivalentBranch.zero_r21,
|
|
740
|
+
EquivalentBranch.zero_x12,
|
|
741
|
+
EquivalentBranch.zero_x21
|
|
742
|
+
)
|
|
743
|
+
|
|
744
|
+
return self._compare_equivalent_equipment(diff)
|
|
745
|
+
|
|
746
|
+
def _compare_equivalent_equipment(self, diff: ObjectDifference) -> ObjectDifference:
|
|
747
|
+
return self._compare_conducting_equipment(diff)
|
|
748
|
+
|
|
749
|
+
#######################################
|
|
750
|
+
# IEC61970 Base Generation Production #
|
|
751
|
+
#######################################
|
|
752
|
+
|
|
753
|
+
def _compare_battery_unit(self, source: BatteryUnit, target: BatteryUnit) -> ObjectDifference:
|
|
754
|
+
diff = ObjectDifference(source, target)
|
|
755
|
+
|
|
756
|
+
self._compare_values(diff, BatteryUnit.battery_state, BatteryUnit.rated_e, BatteryUnit.stored_e)
|
|
757
|
+
self._compare_id_reference_collections(diff, BatteryUnit.controls)
|
|
758
|
+
|
|
759
|
+
return self._compare_power_electronics_unit(diff)
|
|
760
|
+
|
|
761
|
+
def _compare_photo_voltaic_unit(self, source: PhotoVoltaicUnit, target: PhotoVoltaicUnit) -> ObjectDifference:
|
|
762
|
+
return self._compare_power_electronics_unit(ObjectDifference(source, target))
|
|
763
|
+
|
|
764
|
+
def _compare_power_electronics_unit(self, diff: ObjectDifference) -> ObjectDifference:
|
|
765
|
+
self._compare_id_references(diff, PowerElectronicsUnit.power_electronics_connection)
|
|
766
|
+
self._compare_values(diff, PowerElectronicsUnit.max_p, PowerElectronicsUnit.min_p)
|
|
767
|
+
|
|
768
|
+
return self._compare_equipment(diff)
|
|
769
|
+
|
|
770
|
+
def _compare_power_electronics_wind_unit(self, source: PowerElectronicsWindUnit, target: PowerElectronicsWindUnit) -> ObjectDifference:
|
|
771
|
+
return self._compare_power_electronics_unit(ObjectDifference(source, target))
|
|
772
|
+
|
|
773
|
+
######################
|
|
774
|
+
# IEC61970 Base Meas #
|
|
775
|
+
######################
|
|
776
|
+
|
|
777
|
+
def _compare_accumulator(self, source: Accumulator, target: Accumulator) -> ObjectDifference:
|
|
778
|
+
return self._compare_measurement(ObjectDifference(source, target))
|
|
779
|
+
|
|
780
|
+
def _compare_analog(self, source: Analog, target: Analog) -> ObjectDifference:
|
|
781
|
+
diff = ObjectDifference(source, target)
|
|
782
|
+
|
|
783
|
+
self._compare_values(diff, Analog.positive_flow_in)
|
|
784
|
+
|
|
785
|
+
return self._compare_measurement(diff)
|
|
786
|
+
|
|
787
|
+
def _compare_control(self, source: Control, target: Control) -> ObjectDifference:
|
|
788
|
+
diff = ObjectDifference(source, target)
|
|
789
|
+
|
|
790
|
+
self._compare_values(diff, Control.power_system_resource_mrid)
|
|
791
|
+
self._compare_id_references(diff, Control.remote_control)
|
|
792
|
+
|
|
793
|
+
return self._compare_io_point(diff)
|
|
794
|
+
|
|
795
|
+
def _compare_discrete(self, source: Discrete, target: Discrete) -> ObjectDifference:
|
|
796
|
+
return self._compare_measurement(ObjectDifference(source, target))
|
|
797
|
+
|
|
798
|
+
def _compare_io_point(self, diff: ObjectDifference) -> ObjectDifference:
|
|
799
|
+
return self._compare_identified_object(diff)
|
|
800
|
+
|
|
801
|
+
def _compare_measurement(self, diff: ObjectDifference) -> ObjectDifference:
|
|
802
|
+
self._compare_values(diff, Measurement.power_system_resource_mrid, Measurement.unit_symbol, Measurement.phases, Measurement.terminal_mrid)
|
|
803
|
+
self._compare_id_references(diff, Measurement.remote_source)
|
|
804
|
+
|
|
805
|
+
return self._compare_identified_object(diff)
|
|
806
|
+
|
|
807
|
+
############################
|
|
808
|
+
# IEC61970 Base Protection #
|
|
809
|
+
############################
|
|
810
|
+
|
|
811
|
+
def _compare_current_relay(self, source: CurrentRelay, target: CurrentRelay) -> ObjectDifference:
|
|
812
|
+
diff = ObjectDifference(source, target)
|
|
813
|
+
|
|
814
|
+
self._compare_values(diff, CurrentRelay.inverse_time_flag)
|
|
815
|
+
self._compare_floats(diff, CurrentRelay.current_limit_1, CurrentRelay.time_delay_1)
|
|
816
|
+
|
|
817
|
+
return self._compare_protection_relay_function(diff)
|
|
818
|
+
|
|
819
|
+
#######################
|
|
820
|
+
# IEC61970 Base Scada #
|
|
821
|
+
#######################
|
|
822
|
+
|
|
823
|
+
def _compare_remote_control(self, source: RemoteControl, target: RemoteControl) -> ObjectDifference:
|
|
824
|
+
diff = ObjectDifference(source, target)
|
|
825
|
+
|
|
826
|
+
self._compare_id_references(diff, RemoteControl.control)
|
|
827
|
+
|
|
828
|
+
return self._compare_remote_point(diff)
|
|
829
|
+
|
|
830
|
+
def _compare_remote_point(self, diff: ObjectDifference) -> ObjectDifference:
|
|
831
|
+
return self._compare_identified_object(diff)
|
|
832
|
+
|
|
833
|
+
def _compare_remote_source(self, source: RemoteSource, target: RemoteSource) -> ObjectDifference:
|
|
834
|
+
diff = ObjectDifference(source, target)
|
|
835
|
+
|
|
836
|
+
self._compare_id_references(diff, RemoteSource.measurement)
|
|
837
|
+
|
|
838
|
+
return self._compare_remote_point(diff)
|
|
839
|
+
|
|
840
|
+
#######################
|
|
841
|
+
# IEC61970 Base Wires #
|
|
842
|
+
#######################
|
|
843
|
+
|
|
844
|
+
def _compare_ac_line_segment(self, source: AcLineSegment, target: AcLineSegment) -> ObjectDifference:
|
|
845
|
+
diff = ObjectDifference(source, target)
|
|
846
|
+
|
|
847
|
+
self._compare_id_references(diff, AcLineSegment.per_length_impedance)
|
|
848
|
+
self._compare_id_reference_collections(diff, AcLineSegment.cuts)
|
|
849
|
+
self._compare_id_reference_collections(diff, AcLineSegment.clamps)
|
|
850
|
+
|
|
851
|
+
return self._compare_conductor(diff)
|
|
852
|
+
|
|
853
|
+
def _compare_breaker(self, source: Breaker, target: Breaker) -> ObjectDifference:
|
|
854
|
+
diff = ObjectDifference(source, target)
|
|
855
|
+
|
|
856
|
+
self._compare_floats(diff, Breaker.in_transit_time)
|
|
857
|
+
|
|
858
|
+
return self._compare_protected_switch(diff)
|
|
859
|
+
|
|
860
|
+
def _compare_busbar_section(self, source: BusbarSection, target: BusbarSection) -> ObjectDifference:
|
|
861
|
+
return self._compare_connector(ObjectDifference(source, target))
|
|
862
|
+
|
|
863
|
+
def _compare_clamp(self, source: Clamp, target: Clamp) -> ObjectDifference:
|
|
864
|
+
diff = ObjectDifference(source, target)
|
|
865
|
+
|
|
866
|
+
self._compare_floats(diff, Clamp.length_from_terminal_1)
|
|
867
|
+
self._compare_id_references(diff, Clamp.ac_line_segment)
|
|
868
|
+
|
|
869
|
+
return self._compare_conducting_equipment(diff)
|
|
870
|
+
|
|
871
|
+
def _compare_conductor(self, diff: ObjectDifference) -> ObjectDifference:
|
|
872
|
+
self._compare_floats(diff, Conductor.length, Conductor.design_rating)
|
|
873
|
+
self._compare_values(diff, Conductor.design_temperature)
|
|
874
|
+
self._compare_id_references(diff, Conductor.wire_info)
|
|
875
|
+
|
|
876
|
+
return self._compare_conducting_equipment(diff)
|
|
877
|
+
|
|
878
|
+
def _compare_connector(self, diff: ObjectDifference) -> ObjectDifference:
|
|
879
|
+
return self._compare_conducting_equipment(diff)
|
|
880
|
+
|
|
881
|
+
def _compare_cut(self, source: Cut, target: Cut) -> ObjectDifference:
|
|
882
|
+
diff = ObjectDifference(source, target)
|
|
883
|
+
|
|
884
|
+
self._compare_floats(diff, Cut.length_from_terminal_1)
|
|
885
|
+
self._compare_id_references(diff, Cut.ac_line_segment)
|
|
886
|
+
|
|
887
|
+
return self._compare_switch(diff)
|
|
888
|
+
|
|
889
|
+
def _compare_disconnector(self, source: Disconnector, target: Disconnector) -> ObjectDifference:
|
|
890
|
+
return self._compare_switch(ObjectDifference(source, target))
|
|
891
|
+
|
|
892
|
+
def _compare_earth_fault_compensator(self, diff: ObjectDifference) -> ObjectDifference:
|
|
893
|
+
self._compare_floats(diff, EarthFaultCompensator.r)
|
|
894
|
+
|
|
895
|
+
return self._compare_conducting_equipment(diff)
|
|
896
|
+
|
|
897
|
+
def _compare_energy_connection(self, diff: ObjectDifference) -> ObjectDifference:
|
|
898
|
+
return self._compare_conducting_equipment(diff)
|
|
899
|
+
|
|
900
|
+
def _compare_energy_consumer(self, source: EnergyConsumer, target: EnergyConsumer) -> ObjectDifference:
|
|
901
|
+
diff = ObjectDifference(source, target)
|
|
902
|
+
|
|
903
|
+
self._compare_id_reference_collections(diff, EnergyConsumer.phases)
|
|
904
|
+
self._compare_values(diff, EnergyConsumer.customer_count, EnergyConsumer.grounded, EnergyConsumer.phase_connection)
|
|
905
|
+
self._compare_floats(diff, EnergyConsumer.p, EnergyConsumer.p_fixed, EnergyConsumer.q, EnergyConsumer.q_fixed)
|
|
906
|
+
|
|
907
|
+
return self._compare_energy_connection(diff)
|
|
908
|
+
|
|
909
|
+
def _compare_energy_consumer_phase(self, source: EnergyConsumerPhase, target: EnergyConsumerPhase) -> ObjectDifference:
|
|
910
|
+
diff = ObjectDifference(source, target)
|
|
911
|
+
|
|
912
|
+
self._compare_id_references(diff, EnergyConsumerPhase.energy_consumer)
|
|
913
|
+
self._compare_values(diff, EnergyConsumerPhase.phase)
|
|
914
|
+
self._compare_floats(diff, EnergyConsumerPhase.p, EnergyConsumerPhase.p_fixed, EnergyConsumerPhase.q, EnergyConsumerPhase.q_fixed)
|
|
915
|
+
|
|
916
|
+
return self._compare_power_system_resource(diff)
|
|
917
|
+
|
|
918
|
+
def _compare_energy_source(self, source: EnergySource, target: EnergySource) -> ObjectDifference:
|
|
919
|
+
diff = ObjectDifference(source, target)
|
|
920
|
+
|
|
921
|
+
self._compare_id_reference_collections(diff, EnergySource.phases)
|
|
922
|
+
self._compare_floats(
|
|
923
|
+
diff,
|
|
924
|
+
EnergySource.active_power,
|
|
925
|
+
EnergySource.reactive_power,
|
|
926
|
+
EnergySource.voltage_angle,
|
|
927
|
+
EnergySource.voltage_magnitude,
|
|
928
|
+
EnergySource.p_max,
|
|
929
|
+
EnergySource.p_min,
|
|
930
|
+
EnergySource.r,
|
|
931
|
+
EnergySource.r0,
|
|
932
|
+
EnergySource.rn,
|
|
933
|
+
EnergySource.x,
|
|
934
|
+
EnergySource.x0,
|
|
935
|
+
EnergySource.xn,
|
|
936
|
+
EnergySource.r_min,
|
|
937
|
+
EnergySource.rn_min,
|
|
938
|
+
EnergySource.r0_min,
|
|
939
|
+
EnergySource.x_min,
|
|
940
|
+
EnergySource.xn_min,
|
|
941
|
+
EnergySource.x0_min,
|
|
942
|
+
EnergySource.r_max,
|
|
943
|
+
EnergySource.rn_max,
|
|
944
|
+
EnergySource.r0_max,
|
|
945
|
+
EnergySource.x_max,
|
|
946
|
+
EnergySource.xn_max,
|
|
947
|
+
EnergySource.x0_max
|
|
948
|
+
)
|
|
949
|
+
self._compare_values(
|
|
950
|
+
diff,
|
|
951
|
+
EnergySource.is_external_grid
|
|
952
|
+
)
|
|
953
|
+
|
|
954
|
+
return self._compare_energy_connection(diff)
|
|
955
|
+
|
|
956
|
+
def _compare_energy_source_phase(self, source: EnergySourcePhase, target: EnergySourcePhase) -> ObjectDifference:
|
|
957
|
+
diff = ObjectDifference(source, target)
|
|
958
|
+
|
|
959
|
+
self._compare_id_references(diff, EnergySourcePhase.energy_source)
|
|
960
|
+
self._compare_values(diff, EnergySourcePhase.phase)
|
|
961
|
+
|
|
962
|
+
return self._compare_power_system_resource(diff)
|
|
963
|
+
|
|
964
|
+
def _compare_fuse(self, source: Fuse, target: Fuse) -> ObjectDifference:
|
|
965
|
+
diff = ObjectDifference(source, target)
|
|
966
|
+
self._compare_id_references(diff, Fuse.function)
|
|
967
|
+
return self._compare_switch(diff)
|
|
968
|
+
|
|
969
|
+
def _compare_ground(self, source: Ground, target: Ground) -> ObjectDifference:
|
|
970
|
+
return self._compare_conducting_equipment(ObjectDifference(source, target))
|
|
971
|
+
|
|
972
|
+
def _compare_ground_disconnector(self, source: GroundDisconnector, target: GroundDisconnector) -> ObjectDifference:
|
|
973
|
+
return self._compare_switch(ObjectDifference(source, target))
|
|
974
|
+
|
|
975
|
+
def _compare_grounding_impedance(self, source: GroundingImpedance, target: GroundingImpedance) -> ObjectDifference:
|
|
976
|
+
diff = ObjectDifference(source, target)
|
|
977
|
+
self._compare_floats(diff, GroundingImpedance.x)
|
|
978
|
+
return self._compare_earth_fault_compensator(diff)
|
|
979
|
+
|
|
980
|
+
def _compare_jumper(self, source: Jumper, target: Jumper) -> ObjectDifference:
|
|
981
|
+
return self._compare_switch(ObjectDifference(source, target))
|
|
982
|
+
|
|
983
|
+
def _compare_junction(self, source: Junction, target: Junction) -> ObjectDifference:
|
|
984
|
+
return self._compare_connector(ObjectDifference(source, target))
|
|
985
|
+
|
|
986
|
+
def _compare_line(self, diff: ObjectDifference) -> ObjectDifference:
|
|
987
|
+
return self._compare_equipment_container(diff)
|
|
988
|
+
|
|
989
|
+
def _compare_linear_shunt_compensator(self, source: LinearShuntCompensator, target: LinearShuntCompensator) -> ObjectDifference:
|
|
990
|
+
diff = ObjectDifference(source, target)
|
|
991
|
+
|
|
992
|
+
self._compare_floats(
|
|
993
|
+
diff,
|
|
994
|
+
LinearShuntCompensator.b0_per_section,
|
|
995
|
+
LinearShuntCompensator.b_per_section,
|
|
996
|
+
LinearShuntCompensator.g0_per_section,
|
|
997
|
+
LinearShuntCompensator.g_per_section
|
|
998
|
+
)
|
|
999
|
+
|
|
1000
|
+
return self._compare_shunt_compensator(diff)
|
|
1001
|
+
|
|
1002
|
+
def _compare_load_break_switch(self, source: LoadBreakSwitch, target: LoadBreakSwitch) -> ObjectDifference:
|
|
1003
|
+
return self._compare_protected_switch(ObjectDifference(source, target))
|
|
1004
|
+
|
|
1005
|
+
def _compare_per_length_impedance(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1006
|
+
return self._compare_per_length_line_parameter(diff)
|
|
1007
|
+
|
|
1008
|
+
def _compare_per_length_line_parameter(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1009
|
+
return self._compare_identified_object(diff)
|
|
1010
|
+
|
|
1011
|
+
def _compare_per_length_phase_impedance(self, source: PerLengthPhaseImpedance, target: PerLengthPhaseImpedance) -> ObjectDifference:
|
|
1012
|
+
diff = ObjectDifference(source, target)
|
|
1013
|
+
|
|
1014
|
+
self._compare_unordered_value_collection(diff, lambda it: f"{it.from_phase}-{it.to_phase}", PerLengthPhaseImpedance.data)
|
|
1015
|
+
|
|
1016
|
+
return self._compare_per_length_impedance(diff)
|
|
1017
|
+
|
|
1018
|
+
def _compare_per_length_sequence_impedance(self, source: PerLengthSequenceImpedance, target: PerLengthSequenceImpedance) -> ObjectDifference:
|
|
1019
|
+
diff = ObjectDifference(source, target)
|
|
1020
|
+
|
|
1021
|
+
self._compare_floats(
|
|
1022
|
+
diff,
|
|
1023
|
+
PerLengthSequenceImpedance.r,
|
|
1024
|
+
PerLengthSequenceImpedance.x,
|
|
1025
|
+
PerLengthSequenceImpedance.bch,
|
|
1026
|
+
PerLengthSequenceImpedance.gch,
|
|
1027
|
+
PerLengthSequenceImpedance.r0,
|
|
1028
|
+
PerLengthSequenceImpedance.x0,
|
|
1029
|
+
PerLengthSequenceImpedance.b0ch,
|
|
1030
|
+
PerLengthSequenceImpedance.g0ch
|
|
1031
|
+
)
|
|
1032
|
+
|
|
1033
|
+
return self._compare_per_length_impedance(diff)
|
|
1034
|
+
|
|
1035
|
+
def _compare_petersen_coil(self, source: PetersenCoil, target: PetersenCoil) -> ObjectDifference:
|
|
1036
|
+
diff = ObjectDifference(source, target)
|
|
1037
|
+
self._compare_floats(diff, PetersenCoil.x_ground_nominal)
|
|
1038
|
+
return self._compare_earth_fault_compensator(diff)
|
|
1039
|
+
|
|
1040
|
+
def _compare_power_electronics_connection(self, source: PowerElectronicsConnection, target: PowerElectronicsConnection) -> ObjectDifference:
|
|
1041
|
+
diff = ObjectDifference(source, target)
|
|
1042
|
+
|
|
1043
|
+
self._compare_id_reference_collections(diff, PowerElectronicsConnection.units, PowerElectronicsConnection.phases)
|
|
1044
|
+
self._compare_values(
|
|
1045
|
+
diff,
|
|
1046
|
+
PowerElectronicsConnection.max_i_fault,
|
|
1047
|
+
PowerElectronicsConnection.rated_s,
|
|
1048
|
+
PowerElectronicsConnection.rated_u,
|
|
1049
|
+
PowerElectronicsConnection.inverter_standard,
|
|
1050
|
+
PowerElectronicsConnection.sustain_op_overvolt_limit,
|
|
1051
|
+
PowerElectronicsConnection.inv_volt_watt_resp_mode,
|
|
1052
|
+
PowerElectronicsConnection.inv_watt_resp_v1,
|
|
1053
|
+
PowerElectronicsConnection.inv_watt_resp_v2,
|
|
1054
|
+
PowerElectronicsConnection.inv_watt_resp_v3,
|
|
1055
|
+
PowerElectronicsConnection.inv_watt_resp_v4,
|
|
1056
|
+
PowerElectronicsConnection.inv_volt_var_resp_mode,
|
|
1057
|
+
PowerElectronicsConnection.inv_var_resp_v1,
|
|
1058
|
+
PowerElectronicsConnection.inv_var_resp_v2,
|
|
1059
|
+
PowerElectronicsConnection.inv_var_resp_v3,
|
|
1060
|
+
PowerElectronicsConnection.inv_var_resp_v4,
|
|
1061
|
+
PowerElectronicsConnection.inv_reactive_power_mode
|
|
1062
|
+
)
|
|
1063
|
+
self._compare_floats(
|
|
1064
|
+
diff,
|
|
1065
|
+
PowerElectronicsConnection.max_q,
|
|
1066
|
+
PowerElectronicsConnection.min_q,
|
|
1067
|
+
PowerElectronicsConnection.p,
|
|
1068
|
+
PowerElectronicsConnection.q,
|
|
1069
|
+
PowerElectronicsConnection.stop_at_over_freq,
|
|
1070
|
+
PowerElectronicsConnection.stop_at_under_freq,
|
|
1071
|
+
PowerElectronicsConnection.inv_watt_resp_p_at_v1,
|
|
1072
|
+
PowerElectronicsConnection.inv_watt_resp_p_at_v2,
|
|
1073
|
+
PowerElectronicsConnection.inv_watt_resp_p_at_v3,
|
|
1074
|
+
PowerElectronicsConnection.inv_watt_resp_p_at_v4,
|
|
1075
|
+
PowerElectronicsConnection.inv_var_resp_q_at_v1,
|
|
1076
|
+
PowerElectronicsConnection.inv_var_resp_q_at_v2,
|
|
1077
|
+
PowerElectronicsConnection.inv_var_resp_q_at_v3,
|
|
1078
|
+
PowerElectronicsConnection.inv_var_resp_q_at_v4,
|
|
1079
|
+
PowerElectronicsConnection.inv_fix_reactive_power
|
|
1080
|
+
)
|
|
1081
|
+
|
|
1082
|
+
return self._compare_regulating_cond_eq(diff)
|
|
1083
|
+
|
|
1084
|
+
def _compare_power_electronics_connection_phase(self, source: PowerElectronicsConnectionPhase, target: PowerElectronicsConnectionPhase) -> ObjectDifference:
|
|
1085
|
+
diff = ObjectDifference(source, target)
|
|
1086
|
+
|
|
1087
|
+
self._compare_id_references(diff, PowerElectronicsConnectionPhase.power_electronics_connection)
|
|
1088
|
+
self._compare_values(diff, PowerElectronicsConnectionPhase.phase)
|
|
1089
|
+
self._compare_floats(diff, PowerElectronicsConnectionPhase.p, PowerElectronicsConnectionPhase.q)
|
|
1090
|
+
|
|
1091
|
+
return self._compare_power_system_resource(diff)
|
|
1092
|
+
|
|
1093
|
+
def _compare_power_transformer(self, source: PowerTransformer, target: PowerTransformer) -> ObjectDifference:
|
|
1094
|
+
diff = ObjectDifference(source, target)
|
|
1095
|
+
|
|
1096
|
+
self._compare_indexed_id_reference_collections(diff, PowerTransformer.ends)
|
|
1097
|
+
self._compare_values(diff, PowerTransformer.vector_group, PowerTransformer.construction_kind, PowerTransformer.function)
|
|
1098
|
+
self._compare_floats(diff, PowerTransformer.transformer_utilisation)
|
|
1099
|
+
self._compare_id_references(diff, PowerTransformer.power_transformer_info)
|
|
1100
|
+
|
|
1101
|
+
return self._compare_conducting_equipment(diff)
|
|
1102
|
+
|
|
1103
|
+
def _compare_power_transformer_end(self, source: PowerTransformerEnd, target: PowerTransformerEnd) -> ObjectDifference:
|
|
1104
|
+
diff = ObjectDifference(source, target)
|
|
1105
|
+
|
|
1106
|
+
self._compare_id_references(diff, PowerTransformerEnd.power_transformer)
|
|
1107
|
+
self._compare_values(
|
|
1108
|
+
diff,
|
|
1109
|
+
PowerTransformerEnd.connection_kind,
|
|
1110
|
+
PowerTransformerEnd.phase_angle_clock,
|
|
1111
|
+
PowerTransformerEnd.rated_s,
|
|
1112
|
+
PowerTransformerEnd.rated_u
|
|
1113
|
+
)
|
|
1114
|
+
self._compare_floats(
|
|
1115
|
+
diff,
|
|
1116
|
+
PowerTransformerEnd.b,
|
|
1117
|
+
PowerTransformerEnd.b0,
|
|
1118
|
+
PowerTransformerEnd.g,
|
|
1119
|
+
PowerTransformerEnd.g0,
|
|
1120
|
+
PowerTransformerEnd.r,
|
|
1121
|
+
PowerTransformerEnd.r0,
|
|
1122
|
+
PowerTransformerEnd.x,
|
|
1123
|
+
PowerTransformerEnd.x0
|
|
1124
|
+
)
|
|
1125
|
+
self._compare_indexed_value_collections(diff, PowerTransformerEnd.s_ratings)
|
|
1126
|
+
|
|
1127
|
+
return self._compare_transformer_end(diff)
|
|
1128
|
+
|
|
1129
|
+
def _compare_protected_switch(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1130
|
+
self._compare_values(diff, ProtectedSwitch.breaking_capacity)
|
|
1131
|
+
self._compare_id_reference_collections(diff, ProtectedSwitch.relay_functions)
|
|
1132
|
+
|
|
1133
|
+
return self._compare_switch(diff)
|
|
1134
|
+
|
|
1135
|
+
def _compare_ratio_tap_changer(self, source: RatioTapChanger, target: RatioTapChanger) -> ObjectDifference:
|
|
1136
|
+
diff = ObjectDifference(source, target)
|
|
1137
|
+
|
|
1138
|
+
self._compare_id_references(diff, RatioTapChanger.transformer_end)
|
|
1139
|
+
self._compare_floats(diff, RatioTapChanger.step_voltage_increment)
|
|
1140
|
+
|
|
1141
|
+
return self._compare_tap_changer(diff)
|
|
1142
|
+
|
|
1143
|
+
def _compare_reactive_capability_curve(self, source: ReactiveCapabilityCurve, target: ReactiveCapabilityCurve) -> ObjectDifference:
|
|
1144
|
+
return self._compare_curve(ObjectDifference(source, target))
|
|
1145
|
+
|
|
1146
|
+
def _compare_recloser(self, source: Recloser, target: Recloser) -> ObjectDifference:
|
|
1147
|
+
return self._compare_protected_switch(ObjectDifference(source, target))
|
|
1148
|
+
|
|
1149
|
+
def _compare_regulating_cond_eq(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1150
|
+
self._compare_values(diff, RegulatingCondEq.control_enabled)
|
|
1151
|
+
self._compare_id_references(diff, RegulatingCondEq.regulating_control)
|
|
1152
|
+
|
|
1153
|
+
return self._compare_energy_connection(diff)
|
|
1154
|
+
|
|
1155
|
+
def _compare_regulating_control(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1156
|
+
self._compare_values(
|
|
1157
|
+
diff,
|
|
1158
|
+
RegulatingControl.discrete,
|
|
1159
|
+
RegulatingControl.mode,
|
|
1160
|
+
RegulatingControl.monitored_phase,
|
|
1161
|
+
RegulatingControl.enabled
|
|
1162
|
+
)
|
|
1163
|
+
self._compare_floats(
|
|
1164
|
+
diff,
|
|
1165
|
+
RegulatingControl.target_deadband,
|
|
1166
|
+
RegulatingControl.target_value,
|
|
1167
|
+
RegulatingControl.max_allowed_target_value,
|
|
1168
|
+
RegulatingControl.min_allowed_target_value,
|
|
1169
|
+
RegulatingControl.rated_current,
|
|
1170
|
+
RegulatingControl.ct_primary,
|
|
1171
|
+
RegulatingControl.min_target_deadband
|
|
1172
|
+
)
|
|
1173
|
+
self._compare_id_references(diff, RegulatingControl.terminal)
|
|
1174
|
+
self._compare_id_reference_collections(diff, RegulatingControl.regulating_conducting_equipment)
|
|
1175
|
+
|
|
1176
|
+
return self._compare_power_system_resource(diff)
|
|
1177
|
+
|
|
1178
|
+
def _compare_rotating_machine(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1179
|
+
self._compare_values(diff, RotatingMachine.rated_u)
|
|
1180
|
+
self._compare_floats(diff, RotatingMachine.rated_power_factor, RotatingMachine.rated_s, RotatingMachine.p, RotatingMachine.q)
|
|
1181
|
+
|
|
1182
|
+
return self._compare_regulating_cond_eq(diff)
|
|
1183
|
+
|
|
1184
|
+
def _compare_series_compensator(self, source: SeriesCompensator, target: SeriesCompensator) -> ObjectDifference:
|
|
1185
|
+
diff = ObjectDifference(source, target)
|
|
1186
|
+
self._compare_values(diff, SeriesCompensator.varistor_rated_current, SeriesCompensator.varistor_voltage_threshold)
|
|
1187
|
+
self._compare_floats(diff, SeriesCompensator.r, SeriesCompensator.r0, SeriesCompensator.x, SeriesCompensator.x0)
|
|
1188
|
+
|
|
1189
|
+
return self._compare_conducting_equipment(diff)
|
|
1190
|
+
|
|
1191
|
+
def _compare_shunt_compensator(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1192
|
+
self._compare_values(diff, ShuntCompensator.grounded, ShuntCompensator.nom_u, ShuntCompensator.phase_connection)
|
|
1193
|
+
self._compare_floats(diff, ShuntCompensator.sections)
|
|
1194
|
+
self._compare_id_references(diff, ShuntCompensator.shunt_compensator_info)
|
|
1195
|
+
|
|
1196
|
+
return self._compare_regulating_cond_eq(diff)
|
|
1197
|
+
|
|
1198
|
+
def _compare_static_var_compensator(self, source: StaticVarCompensator, target: StaticVarCompensator) -> ObjectDifference:
|
|
1199
|
+
diff = ObjectDifference(source, target)
|
|
1200
|
+
self._compare_values(diff, StaticVarCompensator.svc_control_mode, StaticVarCompensator.voltage_set_point)
|
|
1201
|
+
self._compare_floats(
|
|
1202
|
+
diff,
|
|
1203
|
+
StaticVarCompensator.capacitive_rating,
|
|
1204
|
+
StaticVarCompensator.inductive_rating,
|
|
1205
|
+
StaticVarCompensator.q,
|
|
1206
|
+
)
|
|
1207
|
+
|
|
1208
|
+
return self._compare_regulating_cond_eq(diff)
|
|
1209
|
+
|
|
1210
|
+
def _compare_switch(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1211
|
+
self._compare_floats(diff, Switch.rated_current)
|
|
1212
|
+
self._add_if_different(diff, "isNormallyOpen", self._compare_open_status(diff, lambda it, phase: it.is_normally_open(phase)))
|
|
1213
|
+
self._add_if_different(diff, "isOpen", self._compare_open_status(diff, lambda it, phase: it.is_open()))
|
|
1214
|
+
self._compare_id_references(diff, Switch.switch_info)
|
|
1215
|
+
|
|
1216
|
+
return self._compare_conducting_equipment(diff)
|
|
1217
|
+
|
|
1218
|
+
def _compare_synchronous_machine(self, source: SynchronousMachine, target: SynchronousMachine) -> ObjectDifference:
|
|
1219
|
+
diff = ObjectDifference(source, target)
|
|
1220
|
+
|
|
1221
|
+
self._compare_values(
|
|
1222
|
+
diff,
|
|
1223
|
+
SynchronousMachine.condenser_p,
|
|
1224
|
+
SynchronousMachine.earthing,
|
|
1225
|
+
SynchronousMachine.max_u,
|
|
1226
|
+
SynchronousMachine.min_u,
|
|
1227
|
+
SynchronousMachine.type,
|
|
1228
|
+
SynchronousMachine.operating_mode
|
|
1229
|
+
)
|
|
1230
|
+
|
|
1231
|
+
self._compare_floats(
|
|
1232
|
+
diff,
|
|
1233
|
+
SynchronousMachine.base_q,
|
|
1234
|
+
SynchronousMachine.earthing_star_point_r,
|
|
1235
|
+
SynchronousMachine.earthing_star_point_x,
|
|
1236
|
+
SynchronousMachine.ikk,
|
|
1237
|
+
SynchronousMachine.max_q,
|
|
1238
|
+
SynchronousMachine.min_q,
|
|
1239
|
+
SynchronousMachine.mu,
|
|
1240
|
+
SynchronousMachine.r,
|
|
1241
|
+
SynchronousMachine.r0,
|
|
1242
|
+
SynchronousMachine.r2,
|
|
1243
|
+
SynchronousMachine.sat_direct_subtrans_x,
|
|
1244
|
+
SynchronousMachine.sat_direct_sync_x,
|
|
1245
|
+
SynchronousMachine.sat_direct_trans_x,
|
|
1246
|
+
SynchronousMachine.x0,
|
|
1247
|
+
SynchronousMachine.x2,
|
|
1248
|
+
)
|
|
1249
|
+
self._compare_id_reference_collections(diff, SynchronousMachine.curves)
|
|
1250
|
+
|
|
1251
|
+
return self._compare_rotating_machine(diff)
|
|
1252
|
+
|
|
1253
|
+
def _compare_tap_changer(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1254
|
+
self._compare_values(
|
|
1255
|
+
diff,
|
|
1256
|
+
TapChanger.control_enabled,
|
|
1257
|
+
TapChanger.neutral_u,
|
|
1258
|
+
TapChanger.high_step,
|
|
1259
|
+
TapChanger.low_step,
|
|
1260
|
+
TapChanger.neutral_step,
|
|
1261
|
+
TapChanger.normal_step
|
|
1262
|
+
)
|
|
1263
|
+
self._compare_floats(diff, TapChanger.step)
|
|
1264
|
+
|
|
1265
|
+
self._compare_id_references(diff, TapChanger.tap_changer_control)
|
|
1266
|
+
return self._compare_power_system_resource(diff)
|
|
1267
|
+
|
|
1268
|
+
def _compare_tap_changer_control(self, source: TapChangerControl, target: TapChangerControl) -> ObjectDifference:
|
|
1269
|
+
diff = ObjectDifference(source, target)
|
|
1270
|
+
|
|
1271
|
+
self._compare_values(
|
|
1272
|
+
diff,
|
|
1273
|
+
TapChangerControl.limit_voltage,
|
|
1274
|
+
TapChangerControl.line_drop_compensation,
|
|
1275
|
+
TapChangerControl.forward_ldc_blocking,
|
|
1276
|
+
TapChangerControl.co_generation_enabled
|
|
1277
|
+
)
|
|
1278
|
+
self._compare_floats(
|
|
1279
|
+
diff,
|
|
1280
|
+
TapChangerControl.line_drop_r,
|
|
1281
|
+
TapChangerControl.line_drop_x,
|
|
1282
|
+
TapChangerControl.reverse_line_drop_r,
|
|
1283
|
+
TapChangerControl.reverse_line_drop_x,
|
|
1284
|
+
TapChangerControl.time_delay,
|
|
1285
|
+
)
|
|
1286
|
+
|
|
1287
|
+
return self._compare_regulating_control(diff)
|
|
1288
|
+
|
|
1289
|
+
def _compare_transformer_end(self, diff: ObjectDifference) -> ObjectDifference:
|
|
1290
|
+
self._compare_values(diff, TransformerEnd.grounded, TransformerEnd.end_number)
|
|
1291
|
+
self._compare_floats(diff, TransformerEnd.r_ground, TransformerEnd.x_ground)
|
|
1292
|
+
self._compare_id_references(diff, TransformerEnd.base_voltage, TransformerEnd.ratio_tap_changer, TransformerEnd.terminal, TransformerEnd.star_impedance)
|
|
1293
|
+
|
|
1294
|
+
return self._compare_identified_object(diff)
|
|
1295
|
+
|
|
1296
|
+
def _compare_transformer_star_impedance(self, source: TransformerStarImpedance, target: TransformerStarImpedance) -> ObjectDifference:
|
|
1297
|
+
diff = ObjectDifference(source, target)
|
|
1298
|
+
|
|
1299
|
+
self._compare_floats(diff, TransformerStarImpedance.r, TransformerStarImpedance.r0, TransformerStarImpedance.x, TransformerStarImpedance.x0)
|
|
1300
|
+
self._compare_id_references(diff, TransformerStarImpedance.transformer_end_info)
|
|
1301
|
+
|
|
1302
|
+
return self._compare_identified_object(diff)
|
|
1303
|
+
|
|
1304
|
+
###############################
|
|
1305
|
+
# IEC61970 InfIEC61970 Feeder #
|
|
1306
|
+
###############################
|
|
1307
|
+
|
|
1308
|
+
def _compare_circuit(self, source: Circuit, target: Circuit) -> ObjectDifference:
|
|
1309
|
+
diff = ObjectDifference(source, target)
|
|
1310
|
+
|
|
1311
|
+
self._compare_id_references(diff, Circuit.loop)
|
|
1312
|
+
self._compare_id_reference_collections(diff, Circuit.end_terminals, Circuit.end_substations)
|
|
1313
|
+
|
|
1314
|
+
return self._compare_line(diff)
|
|
1315
|
+
|
|
1316
|
+
@staticmethod
|
|
1317
|
+
# NOTE: Should be Callable[[Switch, SinglePhaseKind], bool], but type inference does not work correctly.
|
|
1318
|
+
def _compare_open_status(diff: ObjectDifference, open_test: Callable[[Any, SinglePhaseKind], bool]) -> Optional[ValueDifference]:
|
|
1319
|
+
source_status = {phase: open_test(diff.source, phase) for phase in PhaseCode.ABCN.single_phases}
|
|
1320
|
+
target_status = {phase: open_test(diff.target, phase) for phase in PhaseCode.ABCN.single_phases}
|
|
1321
|
+
|
|
1322
|
+
return ValueDifference(source_status, target_status) if source_status != target_status else None
|