cimoxide 0.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) hide show
  1. cimoxide-0.0.4/Cargo.toml +4 -0
  2. cimoxide-0.0.4/PKG-INFO +7 -0
  3. cimoxide-0.0.4/cimdecoder/Cargo.toml +15 -0
  4. cimoxide-0.0.4/cimdecoder/benches/real_grid.rs +100 -0
  5. cimoxide-0.0.4/cimdecoder/src/lib.rs +280 -0
  6. cimoxide-0.0.4/cimdecoder/tests/real_grid.rs +24 -0
  7. cimoxide-0.0.4/cimdecoder/tests/smoke.rs +38 -0
  8. cimoxide-0.0.4/cimoxide-py/Cargo.lock +336 -0
  9. cimoxide-0.0.4/cimoxide-py/Cargo.toml +16 -0
  10. cimoxide-0.0.4/cimoxide-py/src/lib.rs +309 -0
  11. cimoxide-0.0.4/cimstructs/Cargo.toml +9 -0
  12. cimoxide-0.0.4/cimstructs/src/ACDCConverter.rs +302 -0
  13. cimoxide-0.0.4/cimstructs/src/ACDCConverterDCTerminal.rs +104 -0
  14. cimoxide-0.0.4/cimstructs/src/ACDCTerminal.rs +90 -0
  15. cimoxide-0.0.4/cimstructs/src/ACLineSegment.rs +186 -0
  16. cimoxide-0.0.4/cimstructs/src/Accumulator.rs +87 -0
  17. cimoxide-0.0.4/cimstructs/src/AccumulatorLimit.rs +79 -0
  18. cimoxide-0.0.4/cimstructs/src/AccumulatorLimitSet.rs +76 -0
  19. cimoxide-0.0.4/cimstructs/src/AccumulatorReset.rs +98 -0
  20. cimoxide-0.0.4/cimstructs/src/AccumulatorValue.rs +83 -0
  21. cimoxide-0.0.4/cimstructs/src/ActivePower.rs +2 -0
  22. cimoxide-0.0.4/cimstructs/src/ActivePowerLimit.rs +89 -0
  23. cimoxide-0.0.4/cimstructs/src/ActivePowerPerCurrentFlow.rs +2 -0
  24. cimoxide-0.0.4/cimstructs/src/ActivePowerPerFrequency.rs +2 -0
  25. cimoxide-0.0.4/cimstructs/src/Analog.rs +98 -0
  26. cimoxide-0.0.4/cimstructs/src/AnalogControl.rs +120 -0
  27. cimoxide-0.0.4/cimstructs/src/AnalogLimit.rs +79 -0
  28. cimoxide-0.0.4/cimstructs/src/AnalogLimitSet.rs +76 -0
  29. cimoxide-0.0.4/cimstructs/src/AnalogValue.rs +83 -0
  30. cimoxide-0.0.4/cimstructs/src/AngleDegrees.rs +2 -0
  31. cimoxide-0.0.4/cimstructs/src/AngleRadians.rs +2 -0
  32. cimoxide-0.0.4/cimstructs/src/ApparentPower.rs +2 -0
  33. cimoxide-0.0.4/cimstructs/src/ApparentPowerLimit.rs +89 -0
  34. cimoxide-0.0.4/cimstructs/src/Area.rs +2 -0
  35. cimoxide-0.0.4/cimstructs/src/AsynchronousMachine.rs +232 -0
  36. cimoxide-0.0.4/cimstructs/src/AsynchronousMachineDynamics.rs +103 -0
  37. cimoxide-0.0.4/cimstructs/src/AsynchronousMachineEquivalentCircuit.rs +152 -0
  38. cimoxide-0.0.4/cimstructs/src/AsynchronousMachineKind.rs +17 -0
  39. cimoxide-0.0.4/cimstructs/src/AsynchronousMachineTimeConstantReactance.rs +152 -0
  40. cimoxide-0.0.4/cimstructs/src/AsynchronousMachineUserDefined.rs +108 -0
  41. cimoxide-0.0.4/cimstructs/src/AuxiliaryEquipment.rs +88 -0
  42. cimoxide-0.0.4/cimstructs/src/BaseVoltage.rs +68 -0
  43. cimoxide-0.0.4/cimstructs/src/BasicIntervalSchedule.rs +89 -0
  44. cimoxide-0.0.4/cimstructs/src/BatteryStateKind.rs +26 -0
  45. cimoxide-0.0.4/cimstructs/src/BatteryUnit.rs +120 -0
  46. cimoxide-0.0.4/cimstructs/src/Bay.rs +68 -0
  47. cimoxide-0.0.4/cimstructs/src/BoundaryPoint.rs +150 -0
  48. cimoxide-0.0.4/cimstructs/src/Breaker.rs +107 -0
  49. cimoxide-0.0.4/cimstructs/src/BusNameMarker.rs +79 -0
  50. cimoxide-0.0.4/cimstructs/src/BusbarSection.rs +93 -0
  51. cimoxide-0.0.4/cimstructs/src/CAESPlant.rs +57 -0
  52. cimoxide-0.0.4/cimstructs/src/CSCDynamics.rs +73 -0
  53. cimoxide-0.0.4/cimstructs/src/CSCUserDefined.rs +78 -0
  54. cimoxide-0.0.4/cimstructs/src/Capacitance.rs +2 -0
  55. cimoxide-0.0.4/cimstructs/src/Clamp.rs +104 -0
  56. cimoxide-0.0.4/cimstructs/src/CogenerationPlant.rs +57 -0
  57. cimoxide-0.0.4/cimstructs/src/CombinedCyclePlant.rs +57 -0
  58. cimoxide-0.0.4/cimstructs/src/Command.rs +131 -0
  59. cimoxide-0.0.4/cimstructs/src/Conductance.rs +2 -0
  60. cimoxide-0.0.4/cimstructs/src/ConductingEquipment.rs +88 -0
  61. cimoxide-0.0.4/cimstructs/src/Conductor.rs +93 -0
  62. cimoxide-0.0.4/cimstructs/src/ConformLoad.rs +133 -0
  63. cimoxide-0.0.4/cimstructs/src/ConformLoadGroup.rs +62 -0
  64. cimoxide-0.0.4/cimstructs/src/ConformLoadSchedule.rs +103 -0
  65. cimoxide-0.0.4/cimstructs/src/ConnectivityNode.rs +79 -0
  66. cimoxide-0.0.4/cimstructs/src/ConnectivityNodeContainer.rs +57 -0
  67. cimoxide-0.0.4/cimstructs/src/Connector.rs +82 -0
  68. cimoxide-0.0.4/cimstructs/src/Control.rs +121 -0
  69. cimoxide-0.0.4/cimstructs/src/ControlArea.rs +101 -0
  70. cimoxide-0.0.4/cimstructs/src/ControlAreaGeneratingUnit.rs +79 -0
  71. cimoxide-0.0.4/cimstructs/src/ControlAreaTypeKind.rs +20 -0
  72. cimoxide-0.0.4/cimstructs/src/CoordinateSystem.rs +67 -0
  73. cimoxide-0.0.4/cimstructs/src/CrossCompoundTurbineGovernorDynamics.rs +84 -0
  74. cimoxide-0.0.4/cimstructs/src/CsConverter.rs +336 -0
  75. cimoxide-0.0.4/cimstructs/src/CsOperatingModeKind.rs +17 -0
  76. cimoxide-0.0.4/cimstructs/src/CsPpccControlKind.rs +20 -0
  77. cimoxide-0.0.4/cimstructs/src/Currency.rs +494 -0
  78. cimoxide-0.0.4/cimstructs/src/CurrentFlow.rs +2 -0
  79. cimoxide-0.0.4/cimstructs/src/CurrentLimit.rs +89 -0
  80. cimoxide-0.0.4/cimstructs/src/CurrentTransformer.rs +82 -0
  81. cimoxide-0.0.4/cimstructs/src/Curve.rs +101 -0
  82. cimoxide-0.0.4/cimstructs/src/CurveData.rs +78 -0
  83. cimoxide-0.0.4/cimstructs/src/CurveStyle.rs +17 -0
  84. cimoxide-0.0.4/cimstructs/src/Cut.rs +129 -0
  85. cimoxide-0.0.4/cimstructs/src/DCBaseTerminal.rs +94 -0
  86. cimoxide-0.0.4/cimstructs/src/DCBreaker.rs +82 -0
  87. cimoxide-0.0.4/cimstructs/src/DCBusbar.rs +82 -0
  88. cimoxide-0.0.4/cimstructs/src/DCChopper.rs +82 -0
  89. cimoxide-0.0.4/cimstructs/src/DCConductingEquipment.rs +88 -0
  90. cimoxide-0.0.4/cimstructs/src/DCConverterOperatingModeKind.rs +20 -0
  91. cimoxide-0.0.4/cimstructs/src/DCConverterUnit.rs +79 -0
  92. cimoxide-0.0.4/cimstructs/src/DCDisconnector.rs +82 -0
  93. cimoxide-0.0.4/cimstructs/src/DCEquipmentContainer.rs +57 -0
  94. cimoxide-0.0.4/cimstructs/src/DCGround.rs +104 -0
  95. cimoxide-0.0.4/cimstructs/src/DCLine.rs +68 -0
  96. cimoxide-0.0.4/cimstructs/src/DCLineSegment.rs +126 -0
  97. cimoxide-0.0.4/cimstructs/src/DCNode.rs +79 -0
  98. cimoxide-0.0.4/cimstructs/src/DCPolarityKind.rs +20 -0
  99. cimoxide-0.0.4/cimstructs/src/DCSeriesDevice.rs +104 -0
  100. cimoxide-0.0.4/cimstructs/src/DCShunt.rs +104 -0
  101. cimoxide-0.0.4/cimstructs/src/DCSwitch.rs +82 -0
  102. cimoxide-0.0.4/cimstructs/src/DCTerminal.rs +93 -0
  103. cimoxide-0.0.4/cimstructs/src/DCTopologicalIsland.rs +71 -0
  104. cimoxide-0.0.4/cimstructs/src/DCTopologicalNode.rs +68 -0
  105. cimoxide-0.0.4/cimstructs/src/DayType.rs +57 -0
  106. cimoxide-0.0.4/cimstructs/src/Diagram.rs +123 -0
  107. cimoxide-0.0.4/cimstructs/src/DiagramObject.rs +145 -0
  108. cimoxide-0.0.4/cimstructs/src/DiagramObjectGluePoint.rs +29 -0
  109. cimoxide-0.0.4/cimstructs/src/DiagramObjectPoint.rs +100 -0
  110. cimoxide-0.0.4/cimstructs/src/DiagramObjectStyle.rs +57 -0
  111. cimoxide-0.0.4/cimstructs/src/DiagramStyle.rs +57 -0
  112. cimoxide-0.0.4/cimstructs/src/DifferenceModel.rs +122 -0
  113. cimoxide-0.0.4/cimstructs/src/DiscExcContIEEEDEC1A.rs +265 -0
  114. cimoxide-0.0.4/cimstructs/src/DiscExcContIEEEDEC2A.rs +122 -0
  115. cimoxide-0.0.4/cimstructs/src/DiscExcContIEEEDEC3A.rs +89 -0
  116. cimoxide-0.0.4/cimstructs/src/DisconnectingCircuitBreaker.rs +107 -0
  117. cimoxide-0.0.4/cimstructs/src/Disconnector.rs +107 -0
  118. cimoxide-0.0.4/cimstructs/src/DiscontinuousExcitationControlDynamics.rs +73 -0
  119. cimoxide-0.0.4/cimstructs/src/DiscontinuousExcitationControlUserDefined.rs +78 -0
  120. cimoxide-0.0.4/cimstructs/src/Discrete.rs +98 -0
  121. cimoxide-0.0.4/cimstructs/src/DiscreteValue.rs +83 -0
  122. cimoxide-0.0.4/cimstructs/src/DroopSignalFeedbackKind.rs +23 -0
  123. cimoxide-0.0.4/cimstructs/src/DynamicsFunctionBlock.rs +68 -0
  124. cimoxide-0.0.4/cimstructs/src/EarthFaultCompensator.rs +93 -0
  125. cimoxide-0.0.4/cimstructs/src/EnergyArea.rs +57 -0
  126. cimoxide-0.0.4/cimstructs/src/EnergyConnection.rs +82 -0
  127. cimoxide-0.0.4/cimstructs/src/EnergyConsumer.rs +170 -0
  128. cimoxide-0.0.4/cimstructs/src/EnergySchedulingType.rs +57 -0
  129. cimoxide-0.0.4/cimstructs/src/EnergySource.rs +236 -0
  130. cimoxide-0.0.4/cimstructs/src/Equipment.rs +101 -0
  131. cimoxide-0.0.4/cimstructs/src/EquipmentContainer.rs +57 -0
  132. cimoxide-0.0.4/cimstructs/src/EquivalentBranch.rs +263 -0
  133. cimoxide-0.0.4/cimstructs/src/EquivalentEquipment.rs +93 -0
  134. cimoxide-0.0.4/cimstructs/src/EquivalentInjection.rs +263 -0
  135. cimoxide-0.0.4/cimstructs/src/EquivalentNetwork.rs +57 -0
  136. cimoxide-0.0.4/cimstructs/src/EquivalentShunt.rs +109 -0
  137. cimoxide-0.0.4/cimstructs/src/ExcAC1A.rs +309 -0
  138. cimoxide-0.0.4/cimstructs/src/ExcAC2A.rs +375 -0
  139. cimoxide-0.0.4/cimstructs/src/ExcAC3A.rs +353 -0
  140. cimoxide-0.0.4/cimstructs/src/ExcAC4A.rs +166 -0
  141. cimoxide-0.0.4/cimstructs/src/ExcAC5A.rs +265 -0
  142. cimoxide-0.0.4/cimstructs/src/ExcAC6A.rs +320 -0
  143. cimoxide-0.0.4/cimstructs/src/ExcAC8B.rs +364 -0
  144. cimoxide-0.0.4/cimstructs/src/ExcANS.rs +221 -0
  145. cimoxide-0.0.4/cimstructs/src/ExcAVR1.rs +199 -0
  146. cimoxide-0.0.4/cimstructs/src/ExcAVR2.rs +210 -0
  147. cimoxide-0.0.4/cimstructs/src/ExcAVR3.rs +199 -0
  148. cimoxide-0.0.4/cimstructs/src/ExcAVR4.rs +221 -0
  149. cimoxide-0.0.4/cimstructs/src/ExcAVR5.rs +100 -0
  150. cimoxide-0.0.4/cimstructs/src/ExcAVR7.rs +298 -0
  151. cimoxide-0.0.4/cimstructs/src/ExcBBC.rs +188 -0
  152. cimoxide-0.0.4/cimstructs/src/ExcCZ.rs +177 -0
  153. cimoxide-0.0.4/cimstructs/src/ExcDC1A.rs +265 -0
  154. cimoxide-0.0.4/cimstructs/src/ExcDC2A.rs +265 -0
  155. cimoxide-0.0.4/cimstructs/src/ExcDC3A.rs +243 -0
  156. cimoxide-0.0.4/cimstructs/src/ExcDC3A1.rs +221 -0
  157. cimoxide-0.0.4/cimstructs/src/ExcELIN1.rs +232 -0
  158. cimoxide-0.0.4/cimstructs/src/ExcELIN2.rs +364 -0
  159. cimoxide-0.0.4/cimstructs/src/ExcHU.rs +199 -0
  160. cimoxide-0.0.4/cimstructs/src/ExcIEEEAC1A.rs +265 -0
  161. cimoxide-0.0.4/cimstructs/src/ExcIEEEAC2A.rs +298 -0
  162. cimoxide-0.0.4/cimstructs/src/ExcIEEEAC3A.rs +298 -0
  163. cimoxide-0.0.4/cimstructs/src/ExcIEEEAC4A.rs +166 -0
  164. cimoxide-0.0.4/cimstructs/src/ExcIEEEAC5A.rs +221 -0
  165. cimoxide-0.0.4/cimstructs/src/ExcIEEEAC6A.rs +309 -0
  166. cimoxide-0.0.4/cimstructs/src/ExcIEEEAC7B.rs +353 -0
  167. cimoxide-0.0.4/cimstructs/src/ExcIEEEAC8B.rs +265 -0
  168. cimoxide-0.0.4/cimstructs/src/ExcIEEEDC1A.rs +243 -0
  169. cimoxide-0.0.4/cimstructs/src/ExcIEEEDC2A.rs +243 -0
  170. cimoxide-0.0.4/cimstructs/src/ExcIEEEDC3A.rs +188 -0
  171. cimoxide-0.0.4/cimstructs/src/ExcIEEEDC4B.rs +276 -0
  172. cimoxide-0.0.4/cimstructs/src/ExcIEEEST1A.rs +276 -0
  173. cimoxide-0.0.4/cimstructs/src/ExcIEEEST1AUELselectorKind.rs +23 -0
  174. cimoxide-0.0.4/cimstructs/src/ExcIEEEST2A.rs +210 -0
  175. cimoxide-0.0.4/cimstructs/src/ExcIEEEST3A.rs +287 -0
  176. cimoxide-0.0.4/cimstructs/src/ExcIEEEST4B.rs +243 -0
  177. cimoxide-0.0.4/cimstructs/src/ExcIEEEST5B.rs +254 -0
  178. cimoxide-0.0.4/cimstructs/src/ExcIEEEST6B.rs +221 -0
  179. cimoxide-0.0.4/cimstructs/src/ExcIEEEST7B.rs +232 -0
  180. cimoxide-0.0.4/cimstructs/src/ExcNI.rs +177 -0
  181. cimoxide-0.0.4/cimstructs/src/ExcOEX3T.rs +276 -0
  182. cimoxide-0.0.4/cimstructs/src/ExcPIC.rs +320 -0
  183. cimoxide-0.0.4/cimstructs/src/ExcREXS.rs +463 -0
  184. cimoxide-0.0.4/cimstructs/src/ExcREXSFeedbackSignalKind.rs +20 -0
  185. cimoxide-0.0.4/cimstructs/src/ExcRQB.rs +210 -0
  186. cimoxide-0.0.4/cimstructs/src/ExcSCRX.rs +155 -0
  187. cimoxide-0.0.4/cimstructs/src/ExcSEXS.rs +177 -0
  188. cimoxide-0.0.4/cimstructs/src/ExcSK.rs +419 -0
  189. cimoxide-0.0.4/cimstructs/src/ExcST1A.rs +265 -0
  190. cimoxide-0.0.4/cimstructs/src/ExcST2A.rs +232 -0
  191. cimoxide-0.0.4/cimstructs/src/ExcST3A.rs +287 -0
  192. cimoxide-0.0.4/cimstructs/src/ExcST4B.rs +276 -0
  193. cimoxide-0.0.4/cimstructs/src/ExcST6B.rs +320 -0
  194. cimoxide-0.0.4/cimstructs/src/ExcST6BOELselectorKind.rs +20 -0
  195. cimoxide-0.0.4/cimstructs/src/ExcST7B.rs +243 -0
  196. cimoxide-0.0.4/cimstructs/src/ExcST7BOELselectorKind.rs +23 -0
  197. cimoxide-0.0.4/cimstructs/src/ExcST7BUELselectorKind.rs +23 -0
  198. cimoxide-0.0.4/cimstructs/src/ExcitationSystemDynamics.rs +73 -0
  199. cimoxide-0.0.4/cimstructs/src/ExcitationSystemUserDefined.rs +78 -0
  200. cimoxide-0.0.4/cimstructs/src/ExternalNetworkInjection.rs +290 -0
  201. cimoxide-0.0.4/cimstructs/src/FaultIndicator.rs +82 -0
  202. cimoxide-0.0.4/cimstructs/src/FossilFuel.rs +79 -0
  203. cimoxide-0.0.4/cimstructs/src/FrancisGovernorControlKind.rs +20 -0
  204. cimoxide-0.0.4/cimstructs/src/Frequency.rs +2 -0
  205. cimoxide-0.0.4/cimstructs/src/FuelType.rs +41 -0
  206. cimoxide-0.0.4/cimstructs/src/FullModel.rs +80 -0
  207. cimoxide-0.0.4/cimstructs/src/Fuse.rs +107 -0
  208. cimoxide-0.0.4/cimstructs/src/GenICompensationForGenJ.rs +101 -0
  209. cimoxide-0.0.4/cimstructs/src/GeneratingUnit.rs +253 -0
  210. cimoxide-0.0.4/cimstructs/src/GeneratorControlSource.rs +23 -0
  211. cimoxide-0.0.4/cimstructs/src/GenericNonLinearLoadModelKind.rs +17 -0
  212. cimoxide-0.0.4/cimstructs/src/GeographicalRegion.rs +57 -0
  213. cimoxide-0.0.4/cimstructs/src/GovCT1.rs +457 -0
  214. cimoxide-0.0.4/cimstructs/src/GovCT2.rs +688 -0
  215. cimoxide-0.0.4/cimstructs/src/GovGAST.rs +182 -0
  216. cimoxide-0.0.4/cimstructs/src/GovGAST1.rs +446 -0
  217. cimoxide-0.0.4/cimstructs/src/GovGAST2.rs +424 -0
  218. cimoxide-0.0.4/cimstructs/src/GovGAST3.rs +303 -0
  219. cimoxide-0.0.4/cimstructs/src/GovGAST4.rs +193 -0
  220. cimoxide-0.0.4/cimstructs/src/GovGASTWD.rs +435 -0
  221. cimoxide-0.0.4/cimstructs/src/GovHydro1.rs +226 -0
  222. cimoxide-0.0.4/cimstructs/src/GovHydro2.rs +391 -0
  223. cimoxide-0.0.4/cimstructs/src/GovHydro3.rs +468 -0
  224. cimoxide-0.0.4/cimstructs/src/GovHydro4.rs +501 -0
  225. cimoxide-0.0.4/cimstructs/src/GovHydro4ModelKind.rs +20 -0
  226. cimoxide-0.0.4/cimstructs/src/GovHydroDD.rs +457 -0
  227. cimoxide-0.0.4/cimstructs/src/GovHydroFrancis.rs +369 -0
  228. cimoxide-0.0.4/cimstructs/src/GovHydroIEEE0.rs +160 -0
  229. cimoxide-0.0.4/cimstructs/src/GovHydroIEEE2.rs +358 -0
  230. cimoxide-0.0.4/cimstructs/src/GovHydroPID.rs +435 -0
  231. cimoxide-0.0.4/cimstructs/src/GovHydroPID2.rs +314 -0
  232. cimoxide-0.0.4/cimstructs/src/GovHydroPelton.rs +380 -0
  233. cimoxide-0.0.4/cimstructs/src/GovHydroR.rs +534 -0
  234. cimoxide-0.0.4/cimstructs/src/GovHydroWEH.rs +633 -0
  235. cimoxide-0.0.4/cimstructs/src/GovHydroWPID.rs +314 -0
  236. cimoxide-0.0.4/cimstructs/src/GovSteam0.rs +160 -0
  237. cimoxide-0.0.4/cimstructs/src/GovSteam1.rs +501 -0
  238. cimoxide-0.0.4/cimstructs/src/GovSteam2.rs +160 -0
  239. cimoxide-0.0.4/cimstructs/src/GovSteamBB.rs +259 -0
  240. cimoxide-0.0.4/cimstructs/src/GovSteamCC.rs +259 -0
  241. cimoxide-0.0.4/cimstructs/src/GovSteamEU.rs +457 -0
  242. cimoxide-0.0.4/cimstructs/src/GovSteamFV2.rs +204 -0
  243. cimoxide-0.0.4/cimstructs/src/GovSteamFV3.rs +413 -0
  244. cimoxide-0.0.4/cimstructs/src/GovSteamFV4.rs +633 -0
  245. cimoxide-0.0.4/cimstructs/src/GovSteamIEEE1.rs +303 -0
  246. cimoxide-0.0.4/cimstructs/src/GovSteamSGO.rs +204 -0
  247. cimoxide-0.0.4/cimstructs/src/GrossToNetActivePowerCurve.rs +88 -0
  248. cimoxide-0.0.4/cimstructs/src/Ground.rs +82 -0
  249. cimoxide-0.0.4/cimstructs/src/GroundDisconnector.rs +107 -0
  250. cimoxide-0.0.4/cimstructs/src/GroundingImpedance.rs +98 -0
  251. cimoxide-0.0.4/cimstructs/src/HVDCDynamics.rs +62 -0
  252. cimoxide-0.0.4/cimstructs/src/HydroEnergyConversionKind.rs +17 -0
  253. cimoxide-0.0.4/cimstructs/src/HydroGeneratingUnit.rs +201 -0
  254. cimoxide-0.0.4/cimstructs/src/HydroPlantStorageKind.rs +20 -0
  255. cimoxide-0.0.4/cimstructs/src/HydroPowerPlant.rs +68 -0
  256. cimoxide-0.0.4/cimstructs/src/HydroPump.rs +99 -0
  257. cimoxide-0.0.4/cimstructs/src/HydroTurbineKind.rs +20 -0
  258. cimoxide-0.0.4/cimstructs/src/IOPoint.rs +57 -0
  259. cimoxide-0.0.4/cimstructs/src/IdentifiedObject.rs +84 -0
  260. cimoxide-0.0.4/cimstructs/src/IfdBaseKind.rs +20 -0
  261. cimoxide-0.0.4/cimstructs/src/Inductance.rs +2 -0
  262. cimoxide-0.0.4/cimstructs/src/InputSignalKind.rs +44 -0
  263. cimoxide-0.0.4/cimstructs/src/Jumper.rs +107 -0
  264. cimoxide-0.0.4/cimstructs/src/Junction.rs +82 -0
  265. cimoxide-0.0.4/cimstructs/src/Length.rs +2 -0
  266. cimoxide-0.0.4/cimstructs/src/Limit.rs +57 -0
  267. cimoxide-0.0.4/cimstructs/src/LimitKind.rs +29 -0
  268. cimoxide-0.0.4/cimstructs/src/LimitSet.rs +68 -0
  269. cimoxide-0.0.4/cimstructs/src/Line.rs +68 -0
  270. cimoxide-0.0.4/cimstructs/src/LinearShuntCompensator.rs +171 -0
  271. cimoxide-0.0.4/cimstructs/src/LoadAggregate.rs +57 -0
  272. cimoxide-0.0.4/cimstructs/src/LoadArea.rs +57 -0
  273. cimoxide-0.0.4/cimstructs/src/LoadBreakSwitch.rs +107 -0
  274. cimoxide-0.0.4/cimstructs/src/LoadComposite.rs +178 -0
  275. cimoxide-0.0.4/cimstructs/src/LoadDynamics.rs +57 -0
  276. cimoxide-0.0.4/cimstructs/src/LoadGenericNonLinear.rs +134 -0
  277. cimoxide-0.0.4/cimstructs/src/LoadGroup.rs +68 -0
  278. cimoxide-0.0.4/cimstructs/src/LoadMotor.rs +211 -0
  279. cimoxide-0.0.4/cimstructs/src/LoadResponseCharacteristic.rs +178 -0
  280. cimoxide-0.0.4/cimstructs/src/LoadStatic.rs +255 -0
  281. cimoxide-0.0.4/cimstructs/src/LoadUserDefined.rs +68 -0
  282. cimoxide-0.0.4/cimstructs/src/Location.rs +90 -0
  283. cimoxide-0.0.4/cimstructs/src/Measurement.rs +122 -0
  284. cimoxide-0.0.4/cimstructs/src/MeasurementValue.rs +89 -0
  285. cimoxide-0.0.4/cimstructs/src/MeasurementValueQuality.rs +103 -0
  286. cimoxide-0.0.4/cimstructs/src/MeasurementValueSource.rs +57 -0
  287. cimoxide-0.0.4/cimstructs/src/MechLoad1.rs +116 -0
  288. cimoxide-0.0.4/cimstructs/src/MechanicalLoadDynamics.rs +84 -0
  289. cimoxide-0.0.4/cimstructs/src/MechanicalLoadUserDefined.rs +83 -0
  290. cimoxide-0.0.4/cimstructs/src/Model.rs +123 -0
  291. cimoxide-0.0.4/cimstructs/src/Money.rs +2 -0
  292. cimoxide-0.0.4/cimstructs/src/MutualCoupling.rs +167 -0
  293. cimoxide-0.0.4/cimstructs/src/NonConformLoad.rs +133 -0
  294. cimoxide-0.0.4/cimstructs/src/NonConformLoadGroup.rs +62 -0
  295. cimoxide-0.0.4/cimstructs/src/NonConformLoadSchedule.rs +103 -0
  296. cimoxide-0.0.4/cimstructs/src/NonlinearShuntCompensator.rs +127 -0
  297. cimoxide-0.0.4/cimstructs/src/NonlinearShuntCompensatorPoint.rs +100 -0
  298. cimoxide-0.0.4/cimstructs/src/NuclearGeneratingUnit.rs +157 -0
  299. cimoxide-0.0.4/cimstructs/src/OperationalLimit.rs +79 -0
  300. cimoxide-0.0.4/cimstructs/src/OperationalLimitDirectionKind.rs +20 -0
  301. cimoxide-0.0.4/cimstructs/src/OperationalLimitSet.rs +79 -0
  302. cimoxide-0.0.4/cimstructs/src/OperationalLimitType.rs +101 -0
  303. cimoxide-0.0.4/cimstructs/src/OrientationKind.rs +17 -0
  304. cimoxide-0.0.4/cimstructs/src/OverexcLim2.rs +111 -0
  305. cimoxide-0.0.4/cimstructs/src/OverexcLimIEEE.rs +133 -0
  306. cimoxide-0.0.4/cimstructs/src/OverexcLimX1.rs +177 -0
  307. cimoxide-0.0.4/cimstructs/src/OverexcLimX2.rs +188 -0
  308. cimoxide-0.0.4/cimstructs/src/OverexcitationLimiterDynamics.rs +73 -0
  309. cimoxide-0.0.4/cimstructs/src/OverexcitationLimiterUserDefined.rs +78 -0
  310. cimoxide-0.0.4/cimstructs/src/PFVArControllerType1Dynamics.rs +73 -0
  311. cimoxide-0.0.4/cimstructs/src/PFVArControllerType1UserDefined.rs +78 -0
  312. cimoxide-0.0.4/cimstructs/src/PFVArControllerType2Dynamics.rs +73 -0
  313. cimoxide-0.0.4/cimstructs/src/PFVArControllerType2UserDefined.rs +78 -0
  314. cimoxide-0.0.4/cimstructs/src/PFVArType1IEEEPFController.rs +155 -0
  315. cimoxide-0.0.4/cimstructs/src/PFVArType1IEEEVArController.rs +133 -0
  316. cimoxide-0.0.4/cimstructs/src/PFVArType2Common1.rs +122 -0
  317. cimoxide-0.0.4/cimstructs/src/PFVArType2IEEEPFController.rs +144 -0
  318. cimoxide-0.0.4/cimstructs/src/PFVArType2IEEEVArController.rs +144 -0
  319. cimoxide-0.0.4/cimstructs/src/PU.rs +2 -0
  320. cimoxide-0.0.4/cimstructs/src/PerCent.rs +2 -0
  321. cimoxide-0.0.4/cimstructs/src/PetersenCoil.rs +164 -0
  322. cimoxide-0.0.4/cimstructs/src/PetersenCoilModeKind.rs +20 -0
  323. cimoxide-0.0.4/cimstructs/src/PhaseCode.rs +89 -0
  324. cimoxide-0.0.4/cimstructs/src/PhaseTapChanger.rs +113 -0
  325. cimoxide-0.0.4/cimstructs/src/PhaseTapChangerAsymmetrical.rs +133 -0
  326. cimoxide-0.0.4/cimstructs/src/PhaseTapChangerLinear.rs +140 -0
  327. cimoxide-0.0.4/cimstructs/src/PhaseTapChangerNonLinear.rs +140 -0
  328. cimoxide-0.0.4/cimstructs/src/PhaseTapChangerSymmetrical.rs +122 -0
  329. cimoxide-0.0.4/cimstructs/src/PhaseTapChangerTable.rs +57 -0
  330. cimoxide-0.0.4/cimstructs/src/PhaseTapChangerTablePoint.rs +84 -0
  331. cimoxide-0.0.4/cimstructs/src/PhaseTapChangerTabular.rs +118 -0
  332. cimoxide-0.0.4/cimstructs/src/PhotoVoltaicUnit.rs +87 -0
  333. cimoxide-0.0.4/cimstructs/src/PositionPoint.rs +86 -0
  334. cimoxide-0.0.4/cimstructs/src/PostLineSensor.rs +82 -0
  335. cimoxide-0.0.4/cimstructs/src/PotentialTransformer.rs +82 -0
  336. cimoxide-0.0.4/cimstructs/src/PowerElectronicsConnection.rs +169 -0
  337. cimoxide-0.0.4/cimstructs/src/PowerElectronicsUnit.rs +99 -0
  338. cimoxide-0.0.4/cimstructs/src/PowerElectronicsWindUnit.rs +87 -0
  339. cimoxide-0.0.4/cimstructs/src/PowerSystemResource.rs +57 -0
  340. cimoxide-0.0.4/cimstructs/src/PowerSystemStabilizerDynamics.rs +73 -0
  341. cimoxide-0.0.4/cimstructs/src/PowerSystemStabilizerUserDefined.rs +78 -0
  342. cimoxide-0.0.4/cimstructs/src/PowerTransformer.rs +148 -0
  343. cimoxide-0.0.4/cimstructs/src/PowerTransformerEnd.rs +230 -0
  344. cimoxide-0.0.4/cimstructs/src/ProprietaryParameterDynamics.rs +309 -0
  345. cimoxide-0.0.4/cimstructs/src/ProtectedSwitch.rs +107 -0
  346. cimoxide-0.0.4/cimstructs/src/Pss1.rs +232 -0
  347. cimoxide-0.0.4/cimstructs/src/Pss1A.rs +309 -0
  348. cimoxide-0.0.4/cimstructs/src/Pss2B.rs +386 -0
  349. cimoxide-0.0.4/cimstructs/src/Pss2ST.rs +265 -0
  350. cimoxide-0.0.4/cimstructs/src/Pss5.rs +254 -0
  351. cimoxide-0.0.4/cimstructs/src/PssELIN2.rs +188 -0
  352. cimoxide-0.0.4/cimstructs/src/PssIEEE1A.rs +199 -0
  353. cimoxide-0.0.4/cimstructs/src/PssIEEE2B.rs +364 -0
  354. cimoxide-0.0.4/cimstructs/src/PssIEEE3B.rs +254 -0
  355. cimoxide-0.0.4/cimstructs/src/PssIEEE4B.rs +804 -0
  356. cimoxide-0.0.4/cimstructs/src/PssPTIST1.rs +188 -0
  357. cimoxide-0.0.4/cimstructs/src/PssPTIST3.rs +441 -0
  358. cimoxide-0.0.4/cimstructs/src/PssRQB.rs +177 -0
  359. cimoxide-0.0.4/cimstructs/src/PssSB4.rs +188 -0
  360. cimoxide-0.0.4/cimstructs/src/PssSH.rs +210 -0
  361. cimoxide-0.0.4/cimstructs/src/PssSK.rs +188 -0
  362. cimoxide-0.0.4/cimstructs/src/PssSTAB2A.rs +155 -0
  363. cimoxide-0.0.4/cimstructs/src/PssWECC.rs +265 -0
  364. cimoxide-0.0.4/cimstructs/src/Quality61850.rs +166 -0
  365. cimoxide-0.0.4/cimstructs/src/RaiseLowerCommand.rs +113 -0
  366. cimoxide-0.0.4/cimstructs/src/RatioTapChanger.rs +135 -0
  367. cimoxide-0.0.4/cimstructs/src/RatioTapChangerTable.rs +57 -0
  368. cimoxide-0.0.4/cimstructs/src/RatioTapChangerTablePoint.rs +73 -0
  369. cimoxide-0.0.4/cimstructs/src/Reactance.rs +2 -0
  370. cimoxide-0.0.4/cimstructs/src/ReactiveCapabilityCurve.rs +77 -0
  371. cimoxide-0.0.4/cimstructs/src/ReactivePower.rs +2 -0
  372. cimoxide-0.0.4/cimstructs/src/RealEnergy.rs +2 -0
  373. cimoxide-0.0.4/cimstructs/src/RegularIntervalSchedule.rs +93 -0
  374. cimoxide-0.0.4/cimstructs/src/RegularTimePoint.rs +78 -0
  375. cimoxide-0.0.4/cimstructs/src/RegulatingCondEq.rs +104 -0
  376. cimoxide-0.0.4/cimstructs/src/RegulatingControl.rs +156 -0
  377. cimoxide-0.0.4/cimstructs/src/RegulatingControlModeKind.rs +35 -0
  378. cimoxide-0.0.4/cimstructs/src/RegulationSchedule.rs +103 -0
  379. cimoxide-0.0.4/cimstructs/src/RemoteInputSignal.rs +134 -0
  380. cimoxide-0.0.4/cimstructs/src/RemoteSignalKind.rs +38 -0
  381. cimoxide-0.0.4/cimstructs/src/ReportingGroup.rs +57 -0
  382. cimoxide-0.0.4/cimstructs/src/Resistance.rs +2 -0
  383. cimoxide-0.0.4/cimstructs/src/RotatingMachine.rs +158 -0
  384. cimoxide-0.0.4/cimstructs/src/RotatingMachineDynamics.rs +128 -0
  385. cimoxide-0.0.4/cimstructs/src/RotationSpeed.rs +2 -0
  386. cimoxide-0.0.4/cimstructs/src/RotorKind.rs +17 -0
  387. cimoxide-0.0.4/cimstructs/src/SVCControlMode.rs +29 -0
  388. cimoxide-0.0.4/cimstructs/src/SVCUserDefined.rs +78 -0
  389. cimoxide-0.0.4/cimstructs/src/Season.rs +77 -0
  390. cimoxide-0.0.4/cimstructs/src/SeasonDayTypeSchedule.rs +104 -0
  391. cimoxide-0.0.4/cimstructs/src/Seconds.rs +2 -0
  392. cimoxide-0.0.4/cimstructs/src/Sensor.rs +82 -0
  393. cimoxide-0.0.4/cimstructs/src/SeriesCompensator.rs +159 -0
  394. cimoxide-0.0.4/cimstructs/src/ServiceLocation.rs +72 -0
  395. cimoxide-0.0.4/cimstructs/src/SetPoint.rs +124 -0
  396. cimoxide-0.0.4/cimstructs/src/ShortCircuitRotorKind.rs +23 -0
  397. cimoxide-0.0.4/cimstructs/src/ShuntCompensator.rs +169 -0
  398. cimoxide-0.0.4/cimstructs/src/SolarGeneratingUnit.rs +168 -0
  399. cimoxide-0.0.4/cimstructs/src/SolarPowerPlant.rs +57 -0
  400. cimoxide-0.0.4/cimstructs/src/Source.rs +20 -0
  401. cimoxide-0.0.4/cimstructs/src/Statements.rs +64 -0
  402. cimoxide-0.0.4/cimstructs/src/StaticLoadModelKind.rs +23 -0
  403. cimoxide-0.0.4/cimstructs/src/StaticVarCompensator.rs +158 -0
  404. cimoxide-0.0.4/cimstructs/src/StaticVarCompensatorDynamics.rs +73 -0
  405. cimoxide-0.0.4/cimstructs/src/StationSupply.rs +122 -0
  406. cimoxide-0.0.4/cimstructs/src/Status.rs +74 -0
  407. cimoxide-0.0.4/cimstructs/src/StreetAddress.rs +97 -0
  408. cimoxide-0.0.4/cimstructs/src/StreetDetail.rs +165 -0
  409. cimoxide-0.0.4/cimstructs/src/StringMeasurement.rs +87 -0
  410. cimoxide-0.0.4/cimstructs/src/StringMeasurementValue.rs +83 -0
  411. cimoxide-0.0.4/cimstructs/src/SubGeographicalRegion.rs +68 -0
  412. cimoxide-0.0.4/cimstructs/src/SubLoadArea.rs +68 -0
  413. cimoxide-0.0.4/cimstructs/src/Substation.rs +68 -0
  414. cimoxide-0.0.4/cimstructs/src/SurgeArrester.rs +82 -0
  415. cimoxide-0.0.4/cimstructs/src/Susceptance.rs +2 -0
  416. cimoxide-0.0.4/cimstructs/src/SvInjection.rs +67 -0
  417. cimoxide-0.0.4/cimstructs/src/SvPowerFlow.rs +67 -0
  418. cimoxide-0.0.4/cimstructs/src/SvShuntCompensatorSections.rs +56 -0
  419. cimoxide-0.0.4/cimstructs/src/SvStatus.rs +56 -0
  420. cimoxide-0.0.4/cimstructs/src/SvSwitch.rs +56 -0
  421. cimoxide-0.0.4/cimstructs/src/SvTapStep.rs +56 -0
  422. cimoxide-0.0.4/cimstructs/src/SvVoltage.rs +67 -0
  423. cimoxide-0.0.4/cimstructs/src/Switch.rs +137 -0
  424. cimoxide-0.0.4/cimstructs/src/SwitchSchedule.rs +103 -0
  425. cimoxide-0.0.4/cimstructs/src/SynchronousMachine.rs +364 -0
  426. cimoxide-0.0.4/cimstructs/src/SynchronousMachineDetailed.rs +141 -0
  427. cimoxide-0.0.4/cimstructs/src/SynchronousMachineDynamics.rs +103 -0
  428. cimoxide-0.0.4/cimstructs/src/SynchronousMachineEquivalentCircuit.rs +238 -0
  429. cimoxide-0.0.4/cimstructs/src/SynchronousMachineKind.rs +32 -0
  430. cimoxide-0.0.4/cimstructs/src/SynchronousMachineModelKind.rs +26 -0
  431. cimoxide-0.0.4/cimstructs/src/SynchronousMachineOperatingMode.rs +20 -0
  432. cimoxide-0.0.4/cimstructs/src/SynchronousMachineSimplified.rs +97 -0
  433. cimoxide-0.0.4/cimstructs/src/SynchronousMachineTimeConstantReactance.rs +271 -0
  434. cimoxide-0.0.4/cimstructs/src/SynchronousMachineUserDefined.rs +108 -0
  435. cimoxide-0.0.4/cimstructs/src/TapChanger.rs +156 -0
  436. cimoxide-0.0.4/cimstructs/src/TapChangerControl.rs +102 -0
  437. cimoxide-0.0.4/cimstructs/src/TapChangerTablePoint.rs +100 -0
  438. cimoxide-0.0.4/cimstructs/src/TapSchedule.rs +103 -0
  439. cimoxide-0.0.4/cimstructs/src/Temperature.rs +2 -0
  440. cimoxide-0.0.4/cimstructs/src/Terminal.rs +116 -0
  441. cimoxide-0.0.4/cimstructs/src/TextDiagramObject.rs +107 -0
  442. cimoxide-0.0.4/cimstructs/src/ThermalGeneratingUnit.rs +190 -0
  443. cimoxide-0.0.4/cimstructs/src/TieFlow.rs +90 -0
  444. cimoxide-0.0.4/cimstructs/src/TopologicalIsland.rs +82 -0
  445. cimoxide-0.0.4/cimstructs/src/TopologicalNode.rs +90 -0
  446. cimoxide-0.0.4/cimstructs/src/TownDetail.rs +84 -0
  447. cimoxide-0.0.4/cimstructs/src/TransformerEnd.rs +123 -0
  448. cimoxide-0.0.4/cimstructs/src/TurbLCFB1.rs +199 -0
  449. cimoxide-0.0.4/cimstructs/src/TurbineGovernorDynamics.rs +84 -0
  450. cimoxide-0.0.4/cimstructs/src/TurbineGovernorUserDefined.rs +83 -0
  451. cimoxide-0.0.4/cimstructs/src/TurbineLoadControllerDynamics.rs +73 -0
  452. cimoxide-0.0.4/cimstructs/src/TurbineLoadControllerUserDefined.rs +78 -0
  453. cimoxide-0.0.4/cimstructs/src/URI.rs +29 -0
  454. cimoxide-0.0.4/cimstructs/src/UnderexcLim2Simplified.rs +144 -0
  455. cimoxide-0.0.4/cimstructs/src/UnderexcLimIEEE1.rs +232 -0
  456. cimoxide-0.0.4/cimstructs/src/UnderexcLimIEEE2.rs +507 -0
  457. cimoxide-0.0.4/cimstructs/src/UnderexcLimX1.rs +133 -0
  458. cimoxide-0.0.4/cimstructs/src/UnderexcLimX2.rs +144 -0
  459. cimoxide-0.0.4/cimstructs/src/UnderexcitationLimiterDynamics.rs +73 -0
  460. cimoxide-0.0.4/cimstructs/src/UnderexcitationLimiterUserDefined.rs +78 -0
  461. cimoxide-0.0.4/cimstructs/src/UnitMultiplier.rs +74 -0
  462. cimoxide-0.0.4/cimstructs/src/UnitSymbol.rs +434 -0
  463. cimoxide-0.0.4/cimstructs/src/VAdjIEEE.rs +133 -0
  464. cimoxide-0.0.4/cimstructs/src/VCompIEEEType1.rs +100 -0
  465. cimoxide-0.0.4/cimstructs/src/VCompIEEEType2.rs +78 -0
  466. cimoxide-0.0.4/cimstructs/src/VSCDynamics.rs +73 -0
  467. cimoxide-0.0.4/cimstructs/src/VSCUserDefined.rs +78 -0
  468. cimoxide-0.0.4/cimstructs/src/Validity.rs +20 -0
  469. cimoxide-0.0.4/cimstructs/src/ValueAliasSet.rs +57 -0
  470. cimoxide-0.0.4/cimstructs/src/ValueToAlias.rs +79 -0
  471. cimoxide-0.0.4/cimstructs/src/VisibilityLayer.rs +82 -0
  472. cimoxide-0.0.4/cimstructs/src/Voltage.rs +2 -0
  473. cimoxide-0.0.4/cimstructs/src/VoltageAdjusterDynamics.rs +73 -0
  474. cimoxide-0.0.4/cimstructs/src/VoltageAdjusterUserDefined.rs +78 -0
  475. cimoxide-0.0.4/cimstructs/src/VoltageCompensatorDynamics.rs +73 -0
  476. cimoxide-0.0.4/cimstructs/src/VoltageCompensatorUserDefined.rs +78 -0
  477. cimoxide-0.0.4/cimstructs/src/VoltageLevel.rs +101 -0
  478. cimoxide-0.0.4/cimstructs/src/VoltageLimit.rs +89 -0
  479. cimoxide-0.0.4/cimstructs/src/VoltagePerReactivePower.rs +2 -0
  480. cimoxide-0.0.4/cimstructs/src/VolumeFlowRate.rs +2 -0
  481. cimoxide-0.0.4/cimstructs/src/VsCapabilityCurve.rs +77 -0
  482. cimoxide-0.0.4/cimstructs/src/VsConverter.rs +336 -0
  483. cimoxide-0.0.4/cimstructs/src/VsPpccControlKind.rs +29 -0
  484. cimoxide-0.0.4/cimstructs/src/VsQpccControlKind.rs +23 -0
  485. cimoxide-0.0.4/cimstructs/src/WaveTrap.rs +82 -0
  486. cimoxide-0.0.4/cimstructs/src/WindAeroConstIEC.rs +57 -0
  487. cimoxide-0.0.4/cimstructs/src/WindAeroOneDimIEC.rs +79 -0
  488. cimoxide-0.0.4/cimstructs/src/WindAeroTwoDimIEC.rs +134 -0
  489. cimoxide-0.0.4/cimstructs/src/WindContCurrLimIEC.rs +134 -0
  490. cimoxide-0.0.4/cimstructs/src/WindContPType3IEC.rs +310 -0
  491. cimoxide-0.0.4/cimstructs/src/WindContPType4aIEC.rs +90 -0
  492. cimoxide-0.0.4/cimstructs/src/WindContPType4bIEC.rs +101 -0
  493. cimoxide-0.0.4/cimstructs/src/WindContPitchAngleIEC.rs +167 -0
  494. cimoxide-0.0.4/cimstructs/src/WindContQIEC.rs +310 -0
  495. cimoxide-0.0.4/cimstructs/src/WindContQLimIEC.rs +79 -0
  496. cimoxide-0.0.4/cimstructs/src/WindContQPQULimIEC.rs +79 -0
  497. cimoxide-0.0.4/cimstructs/src/WindContRotorRIEC.rs +145 -0
  498. cimoxide-0.0.4/cimstructs/src/WindDynamicsLookupTable.rs +200 -0
  499. cimoxide-0.0.4/cimstructs/src/WindGenTurbineType1aIEC.rs +93 -0
  500. cimoxide-0.0.4/cimstructs/src/WindGenTurbineType1bIEC.rs +93 -0
  501. cimoxide-0.0.4/cimstructs/src/WindGenTurbineType2IEC.rs +104 -0
  502. cimoxide-0.0.4/cimstructs/src/WindGenType3IEC.rs +90 -0
  503. cimoxide-0.0.4/cimstructs/src/WindGenType3aIEC.rs +94 -0
  504. cimoxide-0.0.4/cimstructs/src/WindGenType3bIEC.rs +105 -0
  505. cimoxide-0.0.4/cimstructs/src/WindGenType4IEC.rs +101 -0
  506. cimoxide-0.0.4/cimstructs/src/WindGenUnitKind.rs +17 -0
  507. cimoxide-0.0.4/cimstructs/src/WindGeneratingUnit.rs +179 -0
  508. cimoxide-0.0.4/cimstructs/src/WindLookupTableFunctionKind.rs +59 -0
  509. cimoxide-0.0.4/cimstructs/src/WindMechIEC.rs +101 -0
  510. cimoxide-0.0.4/cimstructs/src/WindPitchContPowerIEC.rs +134 -0
  511. cimoxide-0.0.4/cimstructs/src/WindPlantDynamics.rs +73 -0
  512. cimoxide-0.0.4/cimstructs/src/WindPlantFreqPcontrolIEC.rs +222 -0
  513. cimoxide-0.0.4/cimstructs/src/WindPlantIEC.rs +89 -0
  514. cimoxide-0.0.4/cimstructs/src/WindPlantQcontrolModeKind.rs +23 -0
  515. cimoxide-0.0.4/cimstructs/src/WindPlantReactiveControlIEC.rs +255 -0
  516. cimoxide-0.0.4/cimstructs/src/WindPlantUserDefined.rs +78 -0
  517. cimoxide-0.0.4/cimstructs/src/WindPowerPlant.rs +57 -0
  518. cimoxide-0.0.4/cimstructs/src/WindProtectionIEC.rs +134 -0
  519. cimoxide-0.0.4/cimstructs/src/WindQcontrolModeKind.rs +26 -0
  520. cimoxide-0.0.4/cimstructs/src/WindRefFrameRotIEC.rs +90 -0
  521. cimoxide-0.0.4/cimstructs/src/WindTurbineType1or2Dynamics.rs +84 -0
  522. cimoxide-0.0.4/cimstructs/src/WindTurbineType1or2IEC.rs +94 -0
  523. cimoxide-0.0.4/cimstructs/src/WindTurbineType3IEC.rs +173 -0
  524. cimoxide-0.0.4/cimstructs/src/WindTurbineType3or4Dynamics.rs +95 -0
  525. cimoxide-0.0.4/cimstructs/src/WindTurbineType3or4IEC.rs +143 -0
  526. cimoxide-0.0.4/cimstructs/src/WindTurbineType4IEC.rs +118 -0
  527. cimoxide-0.0.4/cimstructs/src/WindTurbineType4aIEC.rs +134 -0
  528. cimoxide-0.0.4/cimstructs/src/WindTurbineType4bIEC.rs +145 -0
  529. cimoxide-0.0.4/cimstructs/src/WindType1or2UserDefined.rs +83 -0
  530. cimoxide-0.0.4/cimstructs/src/WindType3or4UserDefined.rs +88 -0
  531. cimoxide-0.0.4/cimstructs/src/WindUVRTQcontrolModeKind.rs +20 -0
  532. cimoxide-0.0.4/cimstructs/src/WindingConnection.rs +32 -0
  533. cimoxide-0.0.4/cimstructs/src/WorkLocation.rs +72 -0
  534. cimoxide-0.0.4/cimstructs/src/base.rs +59 -0
  535. cimoxide-0.0.4/cimstructs/src/constants.rs +9 -0
  536. cimoxide-0.0.4/cimstructs/src/lib.rs +1574 -0
  537. cimoxide-0.0.4/cimstructs/src/profile_meta.rs +3872 -0
  538. cimoxide-0.0.4/cimstructs/src/registry.rs +909 -0
  539. cimoxide-0.0.4/cimvalidation/Cargo.toml +10 -0
  540. cimoxide-0.0.4/cimvalidation/src/detect.rs +68 -0
  541. cimoxide-0.0.4/cimvalidation/src/generated_lib.rs +149 -0
  542. cimoxide-0.0.4/cimvalidation/src/generated_p61968_13_geographicallocation_ap_con_complex_shacl.rs +37 -0
  543. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_diagramlayout_ap_con_complex_notsolvedmas_shacl.rs +71 -0
  544. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_diagramlayout_ap_con_complex_shacl.rs +37 -0
  545. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_equipment_ap_con_complex_shacl.rs +3973 -0
  546. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_equipmentboundary_ap_con_complex_shacl.rs +403 -0
  547. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_operation_ap_con_complex_shacl.rs +37 -0
  548. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_shortcircuit_ap_con_complex_shacl.rs +297 -0
  549. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_statevariables_ap_con_complex_shacl.rs +323 -0
  550. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_steadystatehypothesis_ap_con_complex_notsolvedmas_shacl.rs +37 -0
  551. cimoxide-0.0.4/cimvalidation/src/generated_p61970_301_steadystatehypothesis_ap_con_complex_shacl.rs +817 -0
  552. cimoxide-0.0.4/cimvalidation/src/generated_p61970_302_dynamics_ap_con_complex_shacl.rs +36817 -0
  553. cimoxide-0.0.4/cimvalidation/src/generated_p61970_452_equipment_ap_con_complex_shacl.rs +375 -0
  554. cimoxide-0.0.4/cimvalidation/src/generated_p61970_452_operation_ap_con_complex_shacl.rs +197 -0
  555. cimoxide-0.0.4/cimvalidation/src/generated_p61970_453_diagramlayout_ap_con_complex_shacl.rs +38 -0
  556. cimoxide-0.0.4/cimvalidation/src/generated_p61970_456_steadystatehypothesis_ap_con_complex_notsolvedmas_shacl.rs +1536 -0
  557. cimoxide-0.0.4/cimvalidation/src/generated_p61970_456_steadystatehypothesis_ap_con_complex_shacl.rs +219 -0
  558. cimoxide-0.0.4/cimvalidation/src/generated_p61970_456_topology_ap_con_complex_shacl.rs +61 -0
  559. cimoxide-0.0.4/cimvalidation/src/generated_p61970_552_header_ap_con_simple_shacl.rs +542 -0
  560. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_1_equipment_ap_con_complex_shacl.rs +36 -0
  561. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_diagramlayout_ap_con_complex_inverseassociation_shacl.rs +39 -0
  562. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_diagramlayout_ap_con_simple_shacl.rs +538 -0
  563. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_dynamics_ap_con_complex_inverseassociation_shacl.rs +2251 -0
  564. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_dynamics_ap_con_simple_shacl.rs +80923 -0
  565. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_equipment_ap_con_complex_inverseassociation_shacl.rs +795 -0
  566. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_equipment_ap_con_complex_shacl.rs +61 -0
  567. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_equipment_ap_con_simple_shacl.rs +14011 -0
  568. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_equipmentboundary_ap_con_simple_shacl.rs +986 -0
  569. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_geographicallocation_ap_con_complex_shacl.rs +39 -0
  570. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_geographicallocation_ap_con_simple_shacl.rs +286 -0
  571. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_operation_ap_con_complex_inverseassociation_shacl.rs +67 -0
  572. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_operation_ap_con_simple_shacl.rs +2988 -0
  573. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_shortcircuit_ap_con_simple_shacl.rs +1940 -0
  574. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_statevariables_ap_con_simple_shacl.rs +886 -0
  575. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_steadystatehypothesis_ap_con_simple_shacl.rs +3354 -0
  576. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_topology_ap_con_complex_inverseassociation_shacl.rs +39 -0
  577. cimoxide-0.0.4/cimvalidation/src/generated_p61970_600_2_topology_ap_con_simple_shacl.rs +236 -0
  578. cimoxide-0.0.4/cimvalidation/src/helpers.rs +29 -0
  579. cimoxide-0.0.4/cimvalidation/src/lib.rs +9 -0
  580. cimoxide-0.0.4/cimvalidation/src/sparql/common.rs +292 -0
  581. cimoxide-0.0.4/cimvalidation/src/sparql/common_solved_mas.rs +689 -0
  582. cimoxide-0.0.4/cimvalidation/src/sparql/diagram_layout.rs +47 -0
  583. cimoxide-0.0.4/cimvalidation/src/sparql/dynamics.rs +526 -0
  584. cimoxide-0.0.4/cimvalidation/src/sparql/equipment.rs +2068 -0
  585. cimoxide-0.0.4/cimvalidation/src/sparql/equipment_boundary.rs +65 -0
  586. cimoxide-0.0.4/cimvalidation/src/sparql/equipment_not_solved_mas.rs +246 -0
  587. cimoxide-0.0.4/cimvalidation/src/sparql/mod.rs +120 -0
  588. cimoxide-0.0.4/cimvalidation/src/sparql/operation.rs +103 -0
  589. cimoxide-0.0.4/cimvalidation/src/sparql/prof10.rs +187 -0
  590. cimoxide-0.0.4/cimvalidation/src/sparql/quality.rs +522 -0
  591. cimoxide-0.0.4/cimvalidation/src/sparql/shortcircuit.rs +135 -0
  592. cimoxide-0.0.4/cimvalidation/src/sparql/shortcircuit_not_solved_mas.rs +53 -0
  593. cimoxide-0.0.4/cimvalidation/src/sparql/ssh.rs +466 -0
  594. cimoxide-0.0.4/cimvalidation/src/sparql/ssh_not_solved_mas.rs +422 -0
  595. cimoxide-0.0.4/cimvalidation/src/sparql/state_variables.rs +72 -0
  596. cimoxide-0.0.4/cimvalidation/src/sparql/state_variables_solved_mas.rs +431 -0
  597. cimoxide-0.0.4/cimvalidation/src/sparql/topology_not_solved_mas.rs +191 -0
  598. cimoxide-0.0.4/cimvalidation/src/violation.rs +11 -0
  599. cimoxide-0.0.4/pyproject.toml +18 -0
  600. cimoxide-0.0.4/python/cimoxide/__init__.py +18 -0
  601. cimoxide-0.0.4/python/cimoxide/__init__.pyi +139 -0
@@ -0,0 +1,4 @@
1
+ [workspace]
2
+ members = ["cimgen", "cimstructs", "cimdecoder", "cimvalidation", "cimoxide-cli"]
3
+ exclude = ["cimoxide-py"]
4
+ resolver = "2"
@@ -0,0 +1,7 @@
1
+ Metadata-Version: 2.4
2
+ Name: cimoxide
3
+ Version: 0.0.4
4
+ Classifier: Programming Language :: Rust
5
+ Classifier: Topic :: Scientific/Engineering
6
+ Summary: Python bindings for the cimoxide CGMES parser
7
+ Requires-Python: >=3.9
@@ -0,0 +1,15 @@
1
+ [package]
2
+ name = "cimdecoder"
3
+ version = "0.0.4"
4
+ edition = "2024"
5
+
6
+ [dependencies]
7
+ cimstructs = { path = "../cimstructs" }
8
+ quick-xml = { version = "0.37", features = ["encoding"] }
9
+
10
+ [dev-dependencies]
11
+ criterion = { version = "0.5", features = ["html_reports"] }
12
+
13
+ [[bench]]
14
+ name = "real_grid"
15
+ harness = false
@@ -0,0 +1,100 @@
1
+ //! Benchmark methodology matches the Go BenchmarkRealGridLoad* benchmarks in
2
+ //! cimgo/validation/cgmes_config_test.go: files are pre-loaded into memory
3
+ //! before the timed loop so only parse/decode time is measured, not I/O.
4
+
5
+ use std::path::Path;
6
+ use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
7
+ use cimdecoder::CimDataset;
8
+
9
+ const BASE: &str = "../CGMES-Test-Configurations/v3.0/RealGrid/RealGrid-Merged";
10
+
11
+ fn load_files() -> Vec<(String, String)> {
12
+ ["RealGrid_EQ.xml", "RealGrid_SSH.xml", "RealGrid_TP.xml", "RealGrid_SV.xml"]
13
+ .iter()
14
+ .map(|name| {
15
+ let content = std::fs::read_to_string(Path::new(BASE).join(name))
16
+ .unwrap_or_else(|e| panic!("cannot read {name}: {e}"));
17
+ (name.to_string(), content)
18
+ })
19
+ .collect()
20
+ }
21
+
22
+ /// Decode each file independently (sequential, like BenchmarkRealGridLoadSequential).
23
+ fn bench_sequential(c: &mut Criterion) {
24
+ let blobs = load_files();
25
+ let total_bytes: u64 = blobs.iter().map(|(_, s)| s.len() as u64).sum();
26
+
27
+ let mut group = c.benchmark_group("decode_sequential");
28
+ group.throughput(Throughput::Bytes(total_bytes));
29
+
30
+ group.bench_function("all_four_profiles", |b| {
31
+ b.iter(|| {
32
+ let mut ds = CimDataset::new();
33
+ for (_, content) in &blobs {
34
+ ds.merge(CimDataset::decode_str(content).unwrap());
35
+ }
36
+ ds
37
+ })
38
+ });
39
+
40
+ group.finish();
41
+ }
42
+
43
+ /// Decode all four files in parallel using one thread per file, then merge sequentially.
44
+ /// Uses the same pre-loaded in-memory blobs as bench_sequential for a fair comparison.
45
+ fn bench_parallel(c: &mut Criterion) {
46
+ let blobs = load_files();
47
+ let total_bytes: u64 = blobs.iter().map(|(_, s)| s.len() as u64).sum();
48
+
49
+ let mut group = c.benchmark_group("decode_parallel");
50
+ group.throughput(Throughput::Bytes(total_bytes));
51
+
52
+ group.bench_function("all_four_profiles", |b| {
53
+ b.iter(|| {
54
+ let datasets: Vec<CimDataset> = std::thread::scope(|s| {
55
+ blobs
56
+ .iter()
57
+ .map(|(_, content)| s.spawn(|| CimDataset::decode_str(content).unwrap()))
58
+ .collect::<Vec<_>>()
59
+ .into_iter()
60
+ .map(|h| h.join().expect("decode thread panicked"))
61
+ .collect()
62
+ });
63
+ datasets
64
+ .into_iter()
65
+ .reduce(|mut a, b| {
66
+ a.merge(b);
67
+ a
68
+ })
69
+ .unwrap()
70
+ })
71
+ });
72
+
73
+ group.finish();
74
+ }
75
+
76
+ /// Decode individual profiles to show per-file throughput.
77
+ fn bench_per_profile(c: &mut Criterion) {
78
+ let blobs = load_files();
79
+ let mut group = c.benchmark_group("decode_single");
80
+
81
+ for (name, content) in &blobs {
82
+ let label = name.trim_end_matches(".xml").trim_start_matches("RealGrid_");
83
+ let bytes = content.len() as u64;
84
+ group.throughput(Throughput::Bytes(bytes));
85
+ group.bench_with_input(
86
+ BenchmarkId::new("profile", label),
87
+ content,
88
+ |b, c| b.iter(|| CimDataset::decode_str(c).unwrap()),
89
+ );
90
+ }
91
+
92
+ group.finish();
93
+ }
94
+
95
+ criterion_group! {
96
+ name = benches;
97
+ config = Criterion::default().sample_size(10);
98
+ targets = bench_sequential, bench_parallel, bench_per_profile
99
+ }
100
+ criterion_main!(benches);
@@ -0,0 +1,280 @@
1
+ use std::collections::HashMap;
2
+ use std::path::Path;
3
+
4
+ use quick_xml::events::Event;
5
+ use quick_xml::Reader;
6
+
7
+ use cimstructs::base::{CimElement, FieldValue, RdfBlock};
8
+ use cimstructs::registry::{self, ParseFn};
9
+
10
+ pub struct CimEntry {
11
+ pub element: Box<dyn CimElement>,
12
+ pub block: RdfBlock,
13
+ }
14
+
15
+ pub struct CimDataset {
16
+ pub entries: HashMap<String, CimEntry>,
17
+ /// Maps `type_name()` → list of MRIDs of that type. Populated on insert, maintained on merge.
18
+ pub by_type: HashMap<String, Vec<String>>,
19
+ }
20
+
21
+ impl Default for CimDataset {
22
+ fn default() -> Self {
23
+ Self::new()
24
+ }
25
+ }
26
+
27
+ impl CimDataset {
28
+ pub fn new() -> Self {
29
+ Self {
30
+ entries: HashMap::new(),
31
+ by_type: HashMap::new(),
32
+ }
33
+ }
34
+
35
+ pub fn decode_str(content: &str) -> Result<Self, Box<dyn std::error::Error>> {
36
+ let mut ds = Self::new();
37
+ let reg = registry::registry();
38
+ parse_rdf(content, &reg, &mut ds)?;
39
+ Ok(ds)
40
+ }
41
+
42
+ pub fn decode_file(path: &Path) -> Result<Self, Box<dyn std::error::Error>> {
43
+ Self::decode_str(&std::fs::read_to_string(path)?)
44
+ }
45
+
46
+ pub fn decode_files(paths: &[&Path]) -> Result<Self, Box<dyn std::error::Error>> {
47
+ let mut combined = Self::new();
48
+ for path in paths {
49
+ let file_ds = Self::decode_file(path)?;
50
+ combined.merge(file_ds);
51
+ }
52
+ Ok(combined)
53
+ }
54
+
55
+ /// Decode files in parallel using one thread per file, then merge sequentially.
56
+ /// Falls back to `decode_files` for 0–1 paths to avoid thread-spawn overhead.
57
+ pub fn decode_files_parallel(paths: &[&Path]) -> Result<Self, Box<dyn std::error::Error>> {
58
+ if paths.len() <= 1 {
59
+ return Self::decode_files(paths);
60
+ }
61
+ let results: Vec<Result<Self, String>> = std::thread::scope(|s| {
62
+ paths
63
+ .iter()
64
+ .map(|p| s.spawn(|| Self::decode_file(p).map_err(|e| e.to_string())))
65
+ .collect::<Vec<_>>()
66
+ .into_iter()
67
+ .map(|h| h.join().expect("decode thread panicked"))
68
+ .collect()
69
+ });
70
+ let datasets: Vec<Self> = results
71
+ .into_iter()
72
+ .collect::<Result<_, String>>()
73
+ .map_err(|e| -> Box<dyn std::error::Error> { e.into() })?;
74
+ Ok(datasets
75
+ .into_iter()
76
+ .reduce(|mut a, b| {
77
+ a.merge(b);
78
+ a
79
+ })
80
+ .unwrap_or_default())
81
+ }
82
+
83
+ /// Merge another dataset into self, combining objects with the same MRID.
84
+ /// For conflicting MRIDs: merge RdfBlocks (later scalar wins, lists union),
85
+ /// then re-instantiate the typed element.
86
+ pub fn merge(&mut self, other: CimDataset) {
87
+ let reg = registry::registry();
88
+ for (mrid, incoming) in other.entries {
89
+ if let Some(existing) = self.entries.get_mut(&mrid) {
90
+ existing.block.merge_from(&incoming.block);
91
+ let type_name = existing.block.type_name.clone();
92
+ if let Some(f) = reg.get(type_name.as_str()) {
93
+ existing.element = f(&existing.block);
94
+ }
95
+ } else {
96
+ let type_name = incoming.element.type_name().to_string();
97
+ self.by_type.entry(type_name).or_default().push(mrid.clone());
98
+ self.entries.insert(mrid, incoming);
99
+ }
100
+ }
101
+ }
102
+
103
+ /// Release all RdfBlocks to free memory after the final merge.
104
+ pub fn drop_blocks(&mut self) {
105
+ for entry in self.entries.values_mut() {
106
+ entry.block = RdfBlock::default();
107
+ }
108
+ }
109
+ }
110
+
111
+ // --- XML streaming parser ---------------------------------------------------
112
+
113
+ fn parse_rdf(
114
+ content: &str,
115
+ reg: &HashMap<&'static str, ParseFn>,
116
+ ds: &mut CimDataset,
117
+ ) -> Result<(), Box<dyn std::error::Error>> {
118
+ let mut reader = Reader::from_str(content);
119
+ let mut buf = Vec::new();
120
+
121
+ let mut depth: u32 = 0;
122
+ let mut current: Option<RdfBlock> = None;
123
+ let mut pending_key: Option<String> = None;
124
+
125
+ loop {
126
+ match reader.read_event_into(&mut buf) {
127
+ Ok(Event::Start(ref e)) => {
128
+ depth += 1;
129
+ let local = local_name(e.name().as_ref())?;
130
+
131
+ match depth {
132
+ 2 => {
133
+ let mrid = extract_about(e.attributes())?;
134
+ current = Some(RdfBlock {
135
+ type_name: local,
136
+ mrid,
137
+ fields: HashMap::new(),
138
+ });
139
+ }
140
+ 3 => {
141
+ if let Some(ref mut block) = current {
142
+ if let Some(res) = find_resource(e.attributes())? {
143
+ add_field(block, &local, FieldValue::Resource(res));
144
+ } else {
145
+ pending_key = Some(local);
146
+ }
147
+ }
148
+ }
149
+ _ => {}
150
+ }
151
+ }
152
+
153
+ Ok(Event::Empty(ref e)) => {
154
+ let local = local_name(e.name().as_ref())?;
155
+ match depth {
156
+ 1 => {
157
+ // Top-level self-closing element: <cim:Foo rdf:ID="x" />
158
+ let mrid = extract_about(e.attributes())?;
159
+ if !mrid.is_empty() {
160
+ if let Some(f) = reg.get(local.as_str()) {
161
+ let block = RdfBlock { type_name: local, mrid: mrid.clone(), fields: HashMap::new() };
162
+ let element = f(&block);
163
+ let type_name = element.type_name().to_string();
164
+ ds.by_type.entry(type_name).or_default().push(mrid.clone());
165
+ ds.entries.insert(mrid, CimEntry { element, block });
166
+ }
167
+ }
168
+ }
169
+ 2 => {
170
+ // Self-closing field element within the current type block.
171
+ if let Some(ref mut block) = current {
172
+ if let Some(res) = find_resource(e.attributes())? {
173
+ add_field(block, &local, FieldValue::Resource(res));
174
+ }
175
+ }
176
+ }
177
+ _ => {}
178
+ }
179
+ }
180
+
181
+ Ok(Event::Text(ref e)) => {
182
+ if depth == 3 {
183
+ if let (Some(block), Some(key)) =
184
+ (&mut current, pending_key.take())
185
+ {
186
+ let text = e.unescape()?.trim().to_string();
187
+ if !text.is_empty() {
188
+ add_field(block, &key, FieldValue::Text(text));
189
+ }
190
+ }
191
+ }
192
+ }
193
+
194
+ Ok(Event::End(_)) => {
195
+ if depth == 2 {
196
+ pending_key = None;
197
+ if let Some(block) = current.take() {
198
+ if !block.mrid.is_empty() {
199
+ if let Some(f) = reg.get(block.type_name.as_str()) {
200
+ let element = f(&block);
201
+ let type_name = element.type_name().to_string();
202
+ ds.by_type.entry(type_name).or_default().push(block.mrid.clone());
203
+ ds.entries.insert(block.mrid.clone(), CimEntry { element, block });
204
+ }
205
+ }
206
+ }
207
+ }
208
+ depth = depth.saturating_sub(1);
209
+ }
210
+
211
+ Ok(Event::Eof) => break,
212
+ Err(e) => return Err(Box::new(e)),
213
+ _ => {}
214
+ }
215
+ buf.clear();
216
+ }
217
+
218
+ Ok(())
219
+ }
220
+
221
+ // --- helpers ----------------------------------------------------------------
222
+
223
+ fn local_name(raw: &[u8]) -> Result<String, Box<dyn std::error::Error>> {
224
+ let s = std::str::from_utf8(raw)?;
225
+ Ok(s.find(':').map(|i| &s[i + 1..]).unwrap_or(s).to_string())
226
+ }
227
+
228
+ fn strip_fragment(s: &str) -> String {
229
+ if let Some(i) = s.rfind('#') {
230
+ s[i + 1..].to_string()
231
+ } else {
232
+ s.trim_start_matches('#').to_string()
233
+ }
234
+ }
235
+
236
+ fn extract_about(
237
+ attrs: quick_xml::events::attributes::Attributes<'_>,
238
+ ) -> Result<String, Box<dyn std::error::Error>> {
239
+ for attr in attrs.flatten() {
240
+ let key = std::str::from_utf8(attr.key.as_ref())?;
241
+ if key == "rdf:about" || key == "rdf:ID" {
242
+ return Ok(strip_fragment(std::str::from_utf8(&attr.value)?));
243
+ }
244
+ }
245
+ Ok(String::new())
246
+ }
247
+
248
+ fn find_resource(
249
+ attrs: quick_xml::events::attributes::Attributes<'_>,
250
+ ) -> Result<Option<String>, Box<dyn std::error::Error>> {
251
+ for attr in attrs.flatten() {
252
+ let key = std::str::from_utf8(attr.key.as_ref())?;
253
+ if key == "rdf:resource" {
254
+ return Ok(Some(strip_fragment(std::str::from_utf8(&attr.value)?)));
255
+ }
256
+ }
257
+ Ok(None)
258
+ }
259
+
260
+ /// Insert a field value, upgrading Resource → ResourceList on repeated keys.
261
+ fn add_field(block: &mut RdfBlock, key: &str, val: FieldValue) {
262
+ if let FieldValue::Resource(ref new_ref) = val {
263
+ match block.fields.get_mut(key) {
264
+ Some(FieldValue::ResourceList(list)) => {
265
+ list.push(new_ref.clone());
266
+ return;
267
+ }
268
+ Some(existing @ FieldValue::Resource(_)) => {
269
+ let old = match existing {
270
+ FieldValue::Resource(s) => s.clone(),
271
+ _ => unreachable!(),
272
+ };
273
+ *existing = FieldValue::ResourceList(vec![old, new_ref.clone()]);
274
+ return;
275
+ }
276
+ _ => {}
277
+ }
278
+ }
279
+ block.fields.insert(key.to_string(), val);
280
+ }
@@ -0,0 +1,24 @@
1
+ use std::path::Path;
2
+ use cimdecoder::CimDataset;
3
+
4
+ const BASE: &str = "../CGMES-Test-Configurations/v3.0/RealGrid/RealGrid-Merged";
5
+
6
+ #[test]
7
+ fn decode_eq_counts() {
8
+ let ds = CimDataset::decode_file(Path::new(&format!("{BASE}/RealGrid_EQ.xml")))
9
+ .expect("decode EQ failed");
10
+ eprintln!("EQ: {} objects", ds.entries.len());
11
+ assert!(ds.entries.len() > 10_000, "expected many EQ objects");
12
+ }
13
+
14
+ #[test]
15
+ fn decode_and_merge_all() {
16
+ let files: Vec<std::path::PathBuf> = ["RealGrid_EQ.xml", "RealGrid_SSH.xml", "RealGrid_TP.xml", "RealGrid_SV.xml"]
17
+ .iter()
18
+ .map(|f| Path::new(BASE).join(f))
19
+ .collect();
20
+ let paths: Vec<&Path> = files.iter().map(|p| p.as_path()).collect();
21
+ let ds = CimDataset::decode_files(&paths).expect("decode_files failed");
22
+ eprintln!("Merged: {} objects", ds.entries.len());
23
+ assert!(ds.entries.len() > 10_000);
24
+ }
@@ -0,0 +1,38 @@
1
+ use std::path::Path;
2
+ use cimdecoder::CimDataset;
3
+
4
+ #[test]
5
+ fn decode_small_file() {
6
+ let path = Path::new("../testdata/test_003.xml");
7
+ let ds = CimDataset::decode_file(path).expect("decode failed");
8
+ assert!(!ds.entries.is_empty(), "expected at least one object");
9
+
10
+ let node = ds.entries.get("N0").expect("TopologicalNode N0 not found");
11
+ assert_eq!(node.element.type_name(), "TopologicalNode");
12
+ assert_eq!(node.element.mrid(), "N0");
13
+ }
14
+
15
+ #[test]
16
+ fn decode_eq_file_fields() {
17
+ let path = Path::new("../testdata/test_sparql_EQ_001.xml");
18
+ let ds = CimDataset::decode_file(path).expect("decode failed");
19
+
20
+ // BaseVoltage.nominalVoltage (f64 field) should be decoded
21
+ let bv = ds.entries.get("BV.110").expect("BaseVoltage BV.110 not found");
22
+ assert_eq!(bv.element.type_name(), "BaseVoltage");
23
+ // Check raw block has the field
24
+ assert!(bv.block.fields.contains_key("BaseVoltage.nominalVoltage"), "missing nominalVoltage field");
25
+
26
+ // VoltageLevel → BaseVoltage (MridRef) should be decoded
27
+ let vl = ds.entries.get("VL.110").expect("VoltageLevel VL.110 not found");
28
+ assert_eq!(vl.element.type_name(), "VoltageLevel");
29
+ assert!(vl.block.fields.contains_key("VoltageLevel.BaseVoltage"), "missing BaseVoltage ref");
30
+ }
31
+
32
+ #[test]
33
+ fn decode_merge_two_files() {
34
+ let eq = Path::new("../testdata/test_003.xml");
35
+ let tp = Path::new("../testdata/test_004.xml");
36
+ let ds = CimDataset::decode_files(&[eq, tp]).expect("decode_files failed");
37
+ assert!(!ds.entries.is_empty(), "expected objects after merge");
38
+ }