gridoxide 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. gridoxide-0.3.0/.dockerignore +10 -0
  2. {gridoxide-0.2.0 → gridoxide-0.3.0}/Cargo.lock +18 -4
  3. {gridoxide-0.2.0 → gridoxide-0.3.0}/Cargo.toml +32 -4
  4. {gridoxide-0.2.0 → gridoxide-0.3.0}/PKG-INFO +19 -1
  5. {gridoxide-0.2.0 → gridoxide-0.3.0}/build.rs +19 -0
  6. {gridoxide-0.2.0 → gridoxide-0.3.0}/capi/CMakeLists.txt +1 -1
  7. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/Cargo.toml +1 -1
  8. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/jacobian.rs +18 -0
  9. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/mod.rs +1 -1
  10. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/sensitivity.rs +160 -7
  11. gridoxide-0.3.0/crates/gridoxide-gpu/Cargo.toml +44 -0
  12. gridoxide-0.3.0/crates/gridoxide-gpu/build.rs +195 -0
  13. gridoxide-0.3.0/crates/gridoxide-gpu/cuda/kernels.cu +483 -0
  14. gridoxide-0.3.0/crates/gridoxide-gpu/cuda/kernels.h +128 -0
  15. gridoxide-0.3.0/crates/gridoxide-gpu/src/cuda.rs +251 -0
  16. gridoxide-0.3.0/crates/gridoxide-gpu/src/cudss.rs +499 -0
  17. gridoxide-0.3.0/crates/gridoxide-gpu/src/dc.rs +629 -0
  18. gridoxide-0.3.0/crates/gridoxide-gpu/src/device.rs +676 -0
  19. gridoxide-0.3.0/crates/gridoxide-gpu/src/gpu.rs +336 -0
  20. gridoxide-0.3.0/crates/gridoxide-gpu/src/lib.rs +50 -0
  21. gridoxide-0.3.0/crates/gridoxide-gpu/src/newton.rs +727 -0
  22. gridoxide-0.3.0/crates/gridoxide-gpu/src/uniform.rs +305 -0
  23. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/mod.rs +35 -0
  24. gridoxide-0.3.0/docker/gpu/Dockerfile +63 -0
  25. gridoxide-0.3.0/examples/dc_contingencies_bench.rs +53 -0
  26. gridoxide-0.3.0/examples/gpu_probe_dump.rs +160 -0
  27. gridoxide-0.3.0/plans/GPU_BATCH_TODO.md +57 -0
  28. gridoxide-0.3.0/probes/cudss_ubatch/.gitignore +3 -0
  29. gridoxide-0.3.0/probes/cudss_ubatch/README.md +83 -0
  30. gridoxide-0.3.0/probes/cudss_ubatch/explore.cpp +189 -0
  31. gridoxide-0.3.0/probes/cudss_ubatch/probe.cpp +456 -0
  32. gridoxide-0.3.0/probes/cudss_ubatch/run.sh +93 -0
  33. gridoxide-0.3.0/probes/cudss_ubatch/stub/cuda_runtime.h +31 -0
  34. gridoxide-0.3.0/probes/cudss_ubatch/stub/library_types.h +4 -0
  35. {gridoxide-0.2.0 → gridoxide-0.3.0}/pyproject.toml +1 -1
  36. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/README.md +18 -0
  37. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/gridoxide/__init__.py +10 -0
  38. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_dc.py +36 -0
  39. gridoxide-0.3.0/python/tests/test_gpu.py +190 -0
  40. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/lib.rs +3 -0
  41. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/python.rs +455 -0
  42. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dc_batch_test.rs +151 -0
  43. {gridoxide-0.2.0 → gridoxide-0.3.0}/.cargo/config.toml +0 -0
  44. {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/book.yml +0 -0
  45. {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/build.yml +0 -0
  46. {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/publish.yml +0 -0
  47. {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/pypi.yml +0 -0
  48. {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/python.yml +0 -0
  49. {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/release.yml +0 -0
  50. {gridoxide-0.2.0 → gridoxide-0.3.0}/.github/workflows/vscode.yml +0 -0
  51. {gridoxide-0.2.0 → gridoxide-0.3.0}/.gitignore +0 -0
  52. {gridoxide-0.2.0 → gridoxide-0.3.0}/.gitmodules +0 -0
  53. {gridoxide-0.2.0 → gridoxide-0.3.0}/LICENSE +0 -0
  54. {gridoxide-0.2.0 → gridoxide-0.3.0}/README.md +0 -0
  55. {gridoxide-0.2.0 → gridoxide-0.3.0}/capi/examples/powerflow.c +0 -0
  56. {gridoxide-0.2.0 → gridoxide-0.3.0}/capi/examples/powerflow.cpp +0 -0
  57. {gridoxide-0.2.0 → gridoxide-0.3.0}/capi/gridoxideConfig.cmake.in +0 -0
  58. {gridoxide-0.2.0 → gridoxide-0.3.0}/cbindgen.toml +0 -0
  59. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/ac_sensitivity.rs +0 -0
  60. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/batch.rs +0 -0
  61. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/bde.rs +0 -0
  62. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/branch_flow.rs +0 -0
  63. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/constrained.rs +0 -0
  64. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/augmented.rs +0 -0
  65. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/corrector.rs +0 -0
  66. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/direction.rs +0 -0
  67. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/events.rs +0 -0
  68. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/continuation/mod.rs +0 -0
  69. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/dc.rs +0 -0
  70. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/dispatch.rs +0 -0
  71. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/injection_hessian.rs +0 -0
  72. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/json.rs +0 -0
  73. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/lib.rs +0 -0
  74. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/batch.rs +0 -0
  75. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/btheta.rs +0 -0
  76. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/linear/impedance.rs +0 -0
  77. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/measurement.rs +0 -0
  78. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/network.rs +0 -0
  79. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/area.rs +0 -0
  80. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/mod.rs +0 -0
  81. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/qlimits.rs +0 -0
  82. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/remote.rs +0 -0
  83. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/slack.rs +0 -0
  84. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/outerloop/taps.rs +0 -0
  85. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/qv.rs +0 -0
  86. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/ratings.rs +0 -0
  87. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/roots.rs +0 -0
  88. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/scenario.rs +0 -0
  89. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/bad_data.rs +0 -0
  90. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/batch.rs +0 -0
  91. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/case.rs +0 -0
  92. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/constraints.rs +0 -0
  93. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/functional.rs +0 -0
  94. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/iterative.rs +0 -0
  95. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/jacobian.rs +0 -0
  96. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/mod.rs +0 -0
  97. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/nr.rs +0 -0
  98. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/se/observability.rs +0 -0
  99. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/shortcircuit/fortescue.rs +0 -0
  100. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/shortcircuit/mod.rs +0 -0
  101. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/shortcircuit/network.rs +0 -0
  102. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/shortcircuit/solver.rs +0 -0
  103. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/solver.rs +0 -0
  104. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/switches.rs +0 -0
  105. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/topology/bus_view.rs +0 -0
  106. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/topology/mod.rs +0 -0
  107. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/topology/model.rs +0 -0
  108. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/topology/reduction.rs +0 -0
  109. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-core/src/types.rs +0 -0
  110. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/Cargo.toml +0 -0
  111. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/build.rs +0 -0
  112. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/block_sparse.rs +0 -0
  113. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/PROVENANCE.md +0 -0
  114. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/amd/aat.rs +0 -0
  115. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/amd/core.rs +0 -0
  116. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/amd/mod.rs +0 -0
  117. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/amd/postorder.rs +0 -0
  118. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/analyze.rs +0 -0
  119. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/btf/maxtrans.rs +0 -0
  120. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/btf/mod.rs +0 -0
  121. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/btf/strongcomp.rs +0 -0
  122. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/factor.rs +0 -0
  123. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/ffi_oracle.rs +0 -0
  124. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/kernel.rs +0 -0
  125. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/refactor.rs +0 -0
  126. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/scale.rs +0 -0
  127. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/solve.rs +0 -0
  128. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/klu_native/types.rs +0 -0
  129. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/lib.rs +0 -0
  130. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/lu.rs +0 -0
  131. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/sparse.rs +0 -0
  132. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/sparse_klu.rs +0 -0
  133. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/src/sparse_pardiso.rs +0 -0
  134. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Doc/License.txt +0 -0
  135. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Include/amd.h +0 -0
  136. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Include/amd_internal.h +0 -0
  137. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/README.txt +0 -0
  138. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd.f +0 -0
  139. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_1.c +0 -0
  140. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_2.c +0 -0
  141. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_aat.c +0 -0
  142. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_control.c +0 -0
  143. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_defaults.c +0 -0
  144. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_dump.c +0 -0
  145. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_info.c +0 -0
  146. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l1.c +0 -0
  147. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l2.c +0 -0
  148. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_aat.c +0 -0
  149. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_control.c +0 -0
  150. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_defaults.c +0 -0
  151. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_dump.c +0 -0
  152. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_info.c +0 -0
  153. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_order.c +0 -0
  154. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_post_tree.c +0 -0
  155. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_postorder.c +0 -0
  156. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_preprocess.c +0 -0
  157. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_l_valid.c +0 -0
  158. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_order.c +0 -0
  159. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_post_tree.c +0 -0
  160. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_postorder.c +0 -0
  161. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_preprocess.c +0 -0
  162. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_valid.c +0 -0
  163. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amd_version.c +0 -0
  164. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/AMD/Source/amdbar.f +0 -0
  165. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Doc/License.txt +0 -0
  166. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Include/btf.h +0 -0
  167. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Include/btf_internal.h +0 -0
  168. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/README.txt +0 -0
  169. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_l_maxtrans.c +0 -0
  170. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_l_order.c +0 -0
  171. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_l_strongcomp.c +0 -0
  172. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_maxtrans.c +0 -0
  173. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_order.c +0 -0
  174. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_strongcomp.c +0 -0
  175. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/BTF/Source/btf_version.c +0 -0
  176. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Doc/License.txt +0 -0
  177. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Include/colamd.h +0 -0
  178. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/README.txt +0 -0
  179. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Source/colamd.c +0 -0
  180. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Source/colamd_l.c +0 -0
  181. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/COLAMD/Source/colamd_version.c +0 -0
  182. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Doc/License.txt +0 -0
  183. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Include/klu.h +0 -0
  184. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Include/klu_internal.h +0 -0
  185. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Include/klu_version.h +0 -0
  186. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/README.txt +0 -0
  187. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu.c +0 -0
  188. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_analyze.c +0 -0
  189. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_analyze_given.c +0 -0
  190. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_defaults.c +0 -0
  191. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_diagnostics.c +0 -0
  192. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_dump.c +0 -0
  193. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_extract.c +0 -0
  194. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_factor.c +0 -0
  195. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_free_numeric.c +0 -0
  196. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_free_symbolic.c +0 -0
  197. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_kernel.c +0 -0
  198. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l.c +0 -0
  199. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_analyze.c +0 -0
  200. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_analyze_given.c +0 -0
  201. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_defaults.c +0 -0
  202. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_diagnostics.c +0 -0
  203. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_dump.c +0 -0
  204. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_extract.c +0 -0
  205. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_factor.c +0 -0
  206. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_free_numeric.c +0 -0
  207. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_free_symbolic.c +0 -0
  208. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_kernel.c +0 -0
  209. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_memory.c +0 -0
  210. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_refactor.c +0 -0
  211. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_scale.c +0 -0
  212. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_solve.c +0 -0
  213. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_sort.c +0 -0
  214. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_l_tsolve.c +0 -0
  215. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_memory.c +0 -0
  216. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_refactor.c +0 -0
  217. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_scale.c +0 -0
  218. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_solve.c +0 -0
  219. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_sort.c +0 -0
  220. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_tsolve.c +0 -0
  221. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_version.c +0 -0
  222. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z.c +0 -0
  223. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_diagnostics.c +0 -0
  224. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_dump.c +0 -0
  225. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_extract.c +0 -0
  226. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_factor.c +0 -0
  227. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_free_numeric.c +0 -0
  228. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_kernel.c +0 -0
  229. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_refactor.c +0 -0
  230. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_scale.c +0 -0
  231. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_solve.c +0 -0
  232. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_sort.c +0 -0
  233. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_z_tsolve.c +0 -0
  234. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl.c +0 -0
  235. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_diagnostics.c +0 -0
  236. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_dump.c +0 -0
  237. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_extract.c +0 -0
  238. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_factor.c +0 -0
  239. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_free_numeric.c +0 -0
  240. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_kernel.c +0 -0
  241. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_refactor.c +0 -0
  242. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_scale.c +0 -0
  243. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_solve.c +0 -0
  244. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_sort.c +0 -0
  245. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/KLU/Source/klu_zl_tsolve.c +0 -0
  246. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/PROVENANCE.md +0 -0
  247. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/SuiteSparse_config/README.txt +0 -0
  248. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/SuiteSparse_config/SuiteSparse_config.c +0 -0
  249. {gridoxide-0.2.0 → gridoxide-0.3.0}/crates/gridoxide-sparse/vendor/suitesparse/SuiteSparse_config/SuiteSparse_config.h +0 -0
  250. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/.gitignore +0 -0
  251. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/book.toml +0 -0
  252. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/README.md +0 -0
  253. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/one-node-2ph.json +0 -0
  254. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/one-node-slg.json +0 -0
  255. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/pst-worked-example.crac.json +0 -0
  256. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/two-bus-lmp.json +0 -0
  257. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/examples/two-bus-lmp.opf.json +0 -0
  258. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/SUMMARY.md +0 -0
  259. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/external_network_injection.md +0 -0
  260. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/index.md +0 -0
  261. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/node_breaker.md +0 -0
  262. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/phase_tap_changer_linear.md +0 -0
  263. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/ratio_tap_changer_table.md +0 -0
  264. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/shunt_conductance.md +0 -0
  265. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/cgmes/static_var_compensator.md +0 -0
  266. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/dae.md +0 -0
  267. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/events.md +0 -0
  268. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/index.md +0 -0
  269. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/initialization.md +0 -0
  270. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/input.md +0 -0
  271. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/models.md +0 -0
  272. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/smallsignal.md +0 -0
  273. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/dynamics/validation.md +0 -0
  274. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/getting_started/building.md +0 -0
  275. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/getting_started/c_api.md +0 -0
  276. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/getting_started/mcp.md +0 -0
  277. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/getting_started/python.md +0 -0
  278. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/import/iidm.md +0 -0
  279. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/import/matpower.md +0 -0
  280. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/import/ucte.md +0 -0
  281. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/introduction.md +0 -0
  282. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/opf/index.md +0 -0
  283. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/opf/worked_example.md +0 -0
  284. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/area_interchange.md +0 -0
  285. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/continuation.md +0 -0
  286. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/dc.md +0 -0
  287. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/distributed_slack.md +0 -0
  288. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/index.md +0 -0
  289. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/linear_impedance.md +0 -0
  290. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/multi_island.md +0 -0
  291. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/outer_loops.md +0 -0
  292. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/q_limits.md +0 -0
  293. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/qv.md +0 -0
  294. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/tap_control.md +0 -0
  295. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/powerflow/zero_impedance_branches.md +0 -0
  296. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/rao/index.md +0 -0
  297. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/rao/linear.md +0 -0
  298. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/rao/margins.md +0 -0
  299. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/rao/search.md +0 -0
  300. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/reference/benchmarking.md +0 -0
  301. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/reference/feature_comparison.md +0 -0
  302. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/reference/provenance.md +0 -0
  303. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/reference/resources.md +0 -0
  304. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/sensitivity/ac.md +0 -0
  305. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/short_circuit/faults.md +0 -0
  306. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/short_circuit/index.md +0 -0
  307. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/short_circuit/sequence.md +0 -0
  308. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/short_circuit/worked_example.md +0 -0
  309. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/solvers/backends.md +0 -0
  310. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/solvers/klu.md +0 -0
  311. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/diagnostics.md +0 -0
  312. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/index.md +0 -0
  313. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/iterative.md +0 -0
  314. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/measurements.md +0 -0
  315. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/src/state_estimation/worked_example.md +0 -0
  316. {gridoxide-0.2.0 → gridoxide-0.3.0}/docs/theme/custom.css +0 -0
  317. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/base_mismatch_probe.rs +0 -0
  318. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bde_check.rs +0 -0
  319. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_contingency.rs +0 -0
  320. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_dc.rs +0 -0
  321. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_network.rs +0 -0
  322. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_node_breaker.rs +0 -0
  323. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/bench_se.rs +0 -0
  324. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/cgmes_area_probe.rs +0 -0
  325. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/cgmes_microgrid_be_dump.rs +0 -0
  326. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/cpf_probe.rs +0 -0
  327. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/dispatch_probe.rs +0 -0
  328. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/doc_numbers.rs +0 -0
  329. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/dynamics_scale.rs +0 -0
  330. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/iidm_area_probe.rs +0 -0
  331. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/iidm_regulation_probe.rs +0 -0
  332. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/klu_scaling_stress.rs +0 -0
  333. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/pf_profile.rs +0 -0
  334. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/qv_probe.rs +0 -0
  335. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/remote_probe.rs +0 -0
  336. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/se_converge.rs +0 -0
  337. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/se_profile.rs +0 -0
  338. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/smallsignal_scale.rs +0 -0
  339. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/switch_ceiling.rs +0 -0
  340. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/tap_control_probe.rs +0 -0
  341. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/tap_deadband_probe.rs +0 -0
  342. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/tap_regulation_probe.rs +0 -0
  343. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/ucte_area_probe.rs +0 -0
  344. {gridoxide-0.2.0 → gridoxide-0.3.0}/examples/voltage_control_probe.rs +0 -0
  345. {gridoxide-0.2.0 → gridoxide-0.3.0}/include/gridoxide.h +0 -0
  346. {gridoxide-0.2.0 → gridoxide-0.3.0}/include/gridoxide.hpp +0 -0
  347. {gridoxide-0.2.0 → gridoxide-0.3.0}/plans/DYNAMICS_LIBRARY_TODO.md +0 -0
  348. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/gridoxide/generate_grid.py +0 -0
  349. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/gridoxide/matpower.py +0 -0
  350. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/_pglib.py +0 -0
  351. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_ac_opf.py +0 -0
  352. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_ac_sensitivity.py +0 -0
  353. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_continuation.py +0 -0
  354. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_dc_opf.py +0 -0
  355. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_dispatch.py +0 -0
  356. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_dynamics.py +0 -0
  357. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_generate_grid.py +0 -0
  358. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_gridoxide.py +0 -0
  359. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_matpower.py +0 -0
  360. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_matpower_opf.py +0 -0
  361. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_node_breaker.py +0 -0
  362. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_qv.py +0 -0
  363. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_short_circuit.py +0 -0
  364. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_state_estimation.py +0 -0
  365. {gridoxide-0.2.0 → gridoxide-0.3.0}/python/tests/test_tap_control.py +0 -0
  366. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/README.md +0 -0
  367. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/accuracy_case_suite.py +0 -0
  368. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_batch.py +0 -0
  369. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_gridoxide_cgmes.py +0 -0
  370. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_gridoxide_native.py +0 -0
  371. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_lightsim2grid.py +0 -0
  372. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_pandapower.py +0 -0
  373. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_pgm.py +0 -0
  374. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_pypowsybl.py +0 -0
  375. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_pypowsybl_cgmes.py +0 -0
  376. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_se_pgm.py +0 -0
  377. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/bench_veragrid.py +0 -0
  378. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/cases.py +0 -0
  379. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/cgmes_sv.py +0 -0
  380. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/check_cgmes_sv_consistency.py +0 -0
  381. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/check_dc_matpower.py +0 -0
  382. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/check_matpower_residual.py +0 -0
  383. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/convert_pandapower_case.py +0 -0
  384. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/cross_validate_cgmes_microgrid_be.py +0 -0
  385. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/generate_grid.py +0 -0
  386. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/iidm_reference.py +0 -0
  387. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/jax_oracle.py +0 -0
  388. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/matpower_to_pgm.py +0 -0
  389. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/run_case_suite.py +0 -0
  390. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/se_iterations.py +0 -0
  391. {gridoxide-0.2.0 → gridoxide-0.3.0}/scripts/bench/ucte_reference.py +0 -0
  392. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/capi/mod.rs +0 -0
  393. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/capi/powerflow.rs +0 -0
  394. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/capi/types.rs +0 -0
  395. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/cgmes.rs +0 -0
  396. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/arnoldi.rs +0 -0
  397. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/arpack.rs +0 -0
  398. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/dae.rs +0 -0
  399. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/dyd.rs +0 -0
  400. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/dyr.rs +0 -0
  401. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/events.rs +0 -0
  402. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/init.rs +0 -0
  403. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/integrator.rs +0 -0
  404. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/json.rs +0 -0
  405. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/mod.rs +0 -0
  406. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/avr.rs +0 -0
  407. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/gov.rs +0 -0
  408. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/load.rs +0 -0
  409. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/machine.rs +0 -0
  410. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/mod.rs +0 -0
  411. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/pss.rs +0 -0
  412. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/models/unit.rs +0 -0
  413. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/shift.rs +0 -0
  414. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/dynamics/smallsignal.rs +0 -0
  415. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/iidm/dynamics.rs +0 -0
  416. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/iidm/mod.rs +0 -0
  417. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/load.rs +0 -0
  418. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/main.rs +0 -0
  419. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/matpower.rs +0 -0
  420. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/ac.rs +0 -0
  421. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/bnb.rs +0 -0
  422. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/dc.rs +0 -0
  423. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/highs.rs +0 -0
  424. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/ipm.rs +0 -0
  425. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/ipopt.rs +0 -0
  426. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/mod.rs +0 -0
  427. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/model.rs +0 -0
  428. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/opf/nlp.rs +0 -0
  429. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/measurement.rs +0 -0
  430. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/mod.rs +0 -0
  431. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/opf.rs +0 -0
  432. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/se.rs +0 -0
  433. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/pgm/shortcircuit.rs +0 -0
  434. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/automaton.rs +0 -0
  435. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/castor.rs +0 -0
  436. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/costly.rs +0 -0
  437. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/crac.rs +0 -0
  438. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/crac_json.rs +0 -0
  439. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/evaluate.rs +0 -0
  440. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/limits.rs +0 -0
  441. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/linear.rs +0 -0
  442. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/mnec.rs +0 -0
  443. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/mod.rs +0 -0
  444. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/parameters.rs +0 -0
  445. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/search.rs +0 -0
  446. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/usage.rs +0 -0
  447. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/rao/validate.rs +0 -0
  448. {gridoxide-0.2.0 → gridoxide-0.3.0}/src/ucte.rs +0 -0
  449. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/ac_contingency_test.rs +0 -0
  450. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/ac_sensitivity_test.rs +0 -0
  451. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/all.rs +0 -0
  452. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/area_interchange_test.rs +0 -0
  453. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/batch_solver_test.rs +0 -0
  454. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/bde_test.rs +0 -0
  455. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/block_jacobian_test.rs +0 -0
  456. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/branch_flow_test.rs +0 -0
  457. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/capi_test.rs +0 -0
  458. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_area_test.rs +0 -0
  459. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_common/mod.rs +0 -0
  460. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_dispatch_test.rs +0 -0
  461. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_fullgrid_test.rs +0 -0
  462. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_identity_test.rs +0 -0
  463. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_limits_test.rs +0 -0
  464. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_be_test.rs +0 -0
  465. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_hvdc_test.rs +0 -0
  466. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_nl_test.rs +0 -0
  467. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_type1_test.rs +0 -0
  468. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_type2_test.rs +0 -0
  469. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_microgrid_type3_test.rs +0 -0
  470. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_minigrid_test.rs +0 -0
  471. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_node_breaker_se_test.rs +0 -0
  472. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_node_breaker_solve_test.rs +0 -0
  473. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_node_breaker_test.rs +0 -0
  474. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_powerflow_test.rs +0 -0
  475. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_pst_phase_tap_changer_linear_test.rs +0 -0
  476. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_pst_phase_tap_changer_table_test.rs +0 -0
  477. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_realgrid_test.rs +0 -0
  478. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_remote_test.rs +0 -0
  479. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_smallgrid_test.rs +0 -0
  480. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_smoke_test.rs +0 -0
  481. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_svedala_test.rs +0 -0
  482. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_tap_regulation_test.rs +0 -0
  483. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_tap_table_test.rs +0 -0
  484. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_voltage_base_test.rs +0 -0
  485. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cgmes_voltage_control_test.rs +0 -0
  486. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_continuation_test.rs +0 -0
  487. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_dynamics_test.rs +0 -0
  488. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_estimate_test.rs +0 -0
  489. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_opf_test.rs +0 -0
  490. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_qv_test.rs +0 -0
  491. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_rao_test.rs +0 -0
  492. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_security_test.rs +0 -0
  493. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_sensitivity_test.rs +0 -0
  494. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_short_circuit_test.rs +0 -0
  495. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_solve_test.rs +0 -0
  496. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/cli_switches_test.rs +0 -0
  497. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/common/mod.rs +0 -0
  498. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/constrained_switch_test.rs +0 -0
  499. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/continuation_events_test.rs +0 -0
  500. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/continuation_test.rs +0 -0
  501. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dc_powerflow_test.rs +0 -0
  502. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dc_sensitivity_test.rs +0 -0
  503. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/distributed_slack_test.rs +0 -0
  504. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_dyd_test.rs +0 -0
  505. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_dyr_test.rs +0 -0
  506. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_events_test.rs +0 -0
  507. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_json_test.rs +0 -0
  508. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_models_test.rs +0 -0
  509. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_reference_test.rs +0 -0
  510. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_relay_test.rs +0 -0
  511. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_ring/mod.rs +0 -0
  512. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_smallsignal_arpack_test.rs +0 -0
  513. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_smallsignal_test.rs +0 -0
  514. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/dynamics_test.rs +0 -0
  515. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/iidm_test.rs +0 -0
  516. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/injection_hessian_test.rs +0 -0
  517. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/klu_jacobian_test.rs +0 -0
  518. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/klu_native_jacobian_test.rs +0 -0
  519. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/link_test.rs +0 -0
  520. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/matpower_opf_test.rs +0 -0
  521. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/matpower_se_test.rs +0 -0
  522. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/matpower_test.rs +0 -0
  523. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/measurement_residual_test.rs +0 -0
  524. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/multi_island_test.rs +0 -0
  525. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/openrao/mod.rs +0 -0
  526. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_ac_test.rs +0 -0
  527. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_cross_test.rs +0 -0
  528. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_data_test.rs +0 -0
  529. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_dc_test.rs +0 -0
  530. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_highs_test.rs +0 -0
  531. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_ipm_test.rs +0 -0
  532. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_ipopt_test.rs +0 -0
  533. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_milp_test.rs +0 -0
  534. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_nlp_test.rs +0 -0
  535. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/opf_pwl_test.rs +0 -0
  536. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/outer_loop_test.rs +0 -0
  537. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pardiso_jacobian_test.rs +0 -0
  538. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/persistent_solver_test.rs +0 -0
  539. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pglib/mod.rs +0 -0
  540. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_asym_line_test.rs +0 -0
  541. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_asym_three_winding_test.rs +0 -0
  542. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_asym_transformer_test.rs +0 -0
  543. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_component_coverage_test.rs +0 -0
  544. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_gen_test.rs +0 -0
  545. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_line_test.rs +0 -0
  546. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_load_test.rs +0 -0
  547. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_network_test.rs +0 -0
  548. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_node_test.rs +0 -0
  549. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_short_circuit_test.rs +0 -0
  550. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_shunt_test.rs +0 -0
  551. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_source_test.rs +0 -0
  552. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_three_winding_transformer_test.rs +0 -0
  553. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/pgm_transformer_test.rs +0 -0
  554. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/power_flow_methods_test.rs +0 -0
  555. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/powerflow_test.rs +0 -0
  556. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/q_limits_test.rs +0 -0
  557. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/qv_test.rs +0 -0
  558. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_castor_test.rs +0 -0
  559. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_crac_test.rs +0 -0
  560. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_cucumber_test.rs +0 -0
  561. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_evaluate_test.rs +0 -0
  562. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_linear_test.rs +0 -0
  563. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_search_test.rs +0 -0
  564. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/rao_validate_test.rs +0 -0
  565. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/remote_voltage_test.rs +0 -0
  566. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/se_batch_test.rs +0 -0
  567. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/se_three_phase_test.rs +0 -0
  568. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/state_estimation_test.rs +0 -0
  569. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/tap_control_test.rs +0 -0
  570. {gridoxide-0.2.0 → gridoxide-0.3.0}/tests/ucte_test.rs +0 -0
@@ -0,0 +1,10 @@
1
+ # The build context of docker/gpu/Dockerfile: the sources cargo needs, not the
2
+ # build output, local environments or test data (the tests mount the checkout).
3
+ target/
4
+ .venv/
5
+ .git/
6
+ probes/cudss_ubatch/work/
7
+ tests/data/
8
+ docs/book/
9
+ editors/
10
+ scripts/bench/.case-cache/
@@ -670,13 +670,14 @@ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
670
670
 
671
671
  [[package]]
672
672
  name = "gridoxide"
673
- version = "0.2.0"
673
+ version = "0.3.0"
674
674
  dependencies = [
675
675
  "bindgen",
676
676
  "cbindgen",
677
677
  "cimoxide-model",
678
678
  "faer",
679
679
  "gridoxide-core",
680
+ "gridoxide-gpu",
680
681
  "gridoxide-sparse",
681
682
  "num-complex",
682
683
  "pyo3",
@@ -688,7 +689,7 @@ dependencies = [
688
689
 
689
690
  [[package]]
690
691
  name = "gridoxide-core"
691
- version = "0.2.0"
692
+ version = "0.3.0"
692
693
  dependencies = [
693
694
  "faer",
694
695
  "gridoxide-sparse",
@@ -698,9 +699,22 @@ dependencies = [
698
699
  "serde_json",
699
700
  ]
700
701
 
702
+ [[package]]
703
+ name = "gridoxide-gpu"
704
+ version = "0.3.0"
705
+ dependencies = [
706
+ "bindgen",
707
+ "cc",
708
+ "gridoxide",
709
+ "gridoxide-core",
710
+ "gridoxide-sparse",
711
+ "num-complex",
712
+ "rayon",
713
+ ]
714
+
701
715
  [[package]]
702
716
  name = "gridoxide-mcp"
703
- version = "0.2.0"
717
+ version = "0.3.0"
704
718
  dependencies = [
705
719
  "gridoxide",
706
720
  "num-complex",
@@ -709,7 +723,7 @@ dependencies = [
709
723
 
710
724
  [[package]]
711
725
  name = "gridoxide-sparse"
712
- version = "0.2.0"
726
+ version = "0.3.0"
713
727
  dependencies = [
714
728
  "bindgen",
715
729
  "cc",
@@ -1,9 +1,12 @@
1
1
  [workspace]
2
- members = ["crates/gridoxide-core", "crates/gridoxide-sparse"]
2
+ # gridoxide-gpu is an optional dependency of gridoxide (the `gpu` feature): a
3
+ # plain `cargo build` here builds only this root package, and the GPU crate
4
+ # builds without CUDA unless its `cuda` feature is on.
5
+ members = ["crates/gridoxide-core", "crates/gridoxide-sparse", "crates/gridoxide-gpu"]
3
6
 
4
7
  # Shared by every crate in the workspace, so they release in lockstep.
5
8
  [workspace.package]
6
- version = "0.2.0"
9
+ version = "0.3.0"
7
10
  edition = "2024"
8
11
  repository = "https://github.com/m-mirz/gridoxide"
9
12
 
@@ -76,10 +79,13 @@ crate-type = ["cdylib", "rlib", "staticlib"]
76
79
  # The sparse LU backends and the vendored SuiteSparse they build on — see
77
80
  # crates/gridoxide-sparse. Its modules are re-exported under their old names
78
81
  # in src/lib.rs, so `gridoxide::sparse` and the rest resolve as before.
79
- gridoxide-sparse = { path = "crates/gridoxide-sparse", version = "0.2.0" }
82
+ gridoxide-sparse = { path = "crates/gridoxide-sparse", version = "0.3.0" }
80
83
  # The solvers — network model, power flow, state estimation, short circuit —
81
84
  # re-exported the same way; see crates/gridoxide-core.
82
- gridoxide-core = { path = "crates/gridoxide-core", version = "0.2.0" }
85
+ gridoxide-core = { path = "crates/gridoxide-core", version = "0.3.0" }
86
+ # Batched AC power flow on an NVIDIA GPU, re-exported as `gridoxide::gpu`; see
87
+ # the `gpu` feature.
88
+ gridoxide-gpu = { path = "crates/gridoxide-gpu", version = "0.3.0", optional = true }
83
89
  faer = "0.24.4"
84
90
  num-complex = { version = "0.4.6", features = ["serde"] }
85
91
  # Powers `crates/gridoxide-core/src/batch.rs`'s across-scenario parallelism. Not a new build cost:
@@ -279,6 +285,18 @@ opf-ipopt = ["opf", "dep:bindgen"]
279
285
  # runner has ARPACK installed — the same local/manual-verification-only position
280
286
  # `pardiso`, `opf-highs` and `opf-ipopt` are in.
281
287
  smallsignal-arpack = ["dynamics"]
288
+ # Batched AC power flow on one NVIDIA GPU (crates/gridoxide-gpu, re-exported
289
+ # as `gridoxide::gpu`): sweeps and N-1 over cuDSS's uniform batch, every
290
+ # scenario stopped at its own convergence. With `python`, the bindings gain
291
+ # `GpuBatchSolver`. Needs cuDSS 1.0 or later (`CUDSS_DIR`), the CUDA 12
292
+ # toolkit with nvcc and libclang at build time — see
293
+ # crates/gridoxide-gpu/build.rs — and an NVIDIA GPU at run time. Not built or
294
+ # tested in CI, which has no GPU; the published wheel does not ship it.
295
+ #
296
+ # cuDSS is NVIDIA's proprietary library, linked dynamically from the user's
297
+ # install like oneMKL for `pardiso`: nothing of it is redistributed by this
298
+ # crate.
299
+ gpu = ["dep:gridoxide-gpu", "gridoxide-gpu/cuda"]
282
300
  # Exports a C ABI (src/capi/) so a C++ project can embed gridoxide, plus the
283
301
  # `cbindgen`-generated `include/gridoxide.h` that describes it.
284
302
  #
@@ -406,3 +424,13 @@ required-features = ["cgmes"]
406
424
  # session with `CARGO_PROFILE_DEV_DEBUG=true`.
407
425
  [profile.dev]
408
426
  debug = "line-tables-only"
427
+
428
+ [[example]]
429
+ name = "dc_contingencies_bench"
430
+ path = "examples/dc_contingencies_bench.rs"
431
+ required-features = ["matpower"]
432
+
433
+ [[example]]
434
+ name = "gpu_probe_dump"
435
+ path = "examples/gpu_probe_dump.rs"
436
+ required-features = ["matpower"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gridoxide
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Requires-Dist: numpy>=1.24 ; extra == 'matpower'
@@ -149,6 +149,24 @@ feature to use them:
149
149
  - `"klu"` — links vendored SuiteSparse C directly (`--features python,klu`).
150
150
  - `"pardiso"` — Intel oneMKL's PARDISO solver (`--features python,pardiso`, needs `MKLROOT` set).
151
151
 
152
+ ### Batched power flow on an NVIDIA GPU
153
+
154
+ Not in the published wheel either: `GpuBatchSolver` needs a build with `--features python,gpu`, with
155
+ cuDSS 1.0 or later (`CUDSS_DIR`) and the CUDA 12 toolkit, or the image `docker/gpu/Dockerfile` builds. It
156
+ solves `solve_batch`'s scenarios and `solve_contingencies`' outage lists on the GPU, every scenario to
157
+ its own convergence, from the model's last `solve()`:
158
+
159
+ ```python
160
+ model = gridoxide.PowerFlowModel.from_matpower("case9241pegase.m")
161
+ model.solve()
162
+ gpu = gridoxide.GpuBatchSolver(model, capacity=1024) # keeps its analysis for every later call
163
+ results = gpu.solve_batch(scenarios) # one BatchResult per scenario, as on the CPU
164
+ outages = gpu.solve_contingencies([[b] for b in range(model.n_branches)])
165
+ ```
166
+
167
+ Outages that split the network are solved on the CPU. On an A100 the GPU pays only on large networks and
168
+ large batches; the CPU's `solve_batch` on all cores is faster on most cases.
169
+
152
170
  ## State estimation
153
171
 
154
172
  `StateEstimationModel` recovers the most likely grid state from measurements, rather than computing
@@ -12,6 +12,25 @@ fn main() {
12
12
  arpack::build();
13
13
  #[cfg(feature = "capi")]
14
14
  capi::build();
15
+ #[cfg(feature = "gpu")]
16
+ gpu::build();
17
+ }
18
+
19
+ /// Puts cuDSS's and the CUDA runtime's library directories on the run path
20
+ /// of this package's artifacts, the Python extension among them, when the
21
+ /// `gpu` feature is enabled. gridoxide-gpu links them, but its run path
22
+ /// reaches only its own tests and examples; it hands the directories on as
23
+ /// `DEP_CUDSS_LIB_DIRS` (see crates/gridoxide-gpu/build.rs). An image that
24
+ /// moves the libraries elsewhere sets `LD_LIBRARY_PATH` instead.
25
+ #[cfg(feature = "gpu")]
26
+ mod gpu {
27
+ pub fn build() {
28
+ let dirs = std::env::var("DEP_CUDSS_LIB_DIRS")
29
+ .expect("gridoxide-gpu's build script sets DEP_CUDSS_LIB_DIRS with its `cuda` feature");
30
+ for dir in dirs.split(':') {
31
+ println!("cargo:rustc-link-arg=-Wl,-rpath,{dir}");
32
+ }
33
+ }
15
34
  }
16
35
 
17
36
  /// Generates `include/gridoxide.h` from the C ABI in `src/capi/`, only when
@@ -154,7 +154,7 @@ configure_package_config_file(
154
154
 
155
155
  write_basic_package_version_file(
156
156
  "${CMAKE_CURRENT_BINARY_DIR}/gridoxideConfigVersion.cmake"
157
- VERSION 0.2.0
157
+ VERSION 0.3.0
158
158
  COMPATIBILITY SameMinorVersion)
159
159
 
160
160
  install(FILES
@@ -12,7 +12,7 @@ categories = ["science", "simulation"]
12
12
  license = "Apache-2.0"
13
13
 
14
14
  [dependencies]
15
- gridoxide-sparse = { path = "../gridoxide-sparse", version = "0.2.0" }
15
+ gridoxide-sparse = { path = "../gridoxide-sparse", version = "0.3.0" }
16
16
  faer = "0.24.4"
17
17
  num-complex = { version = "0.4.6", features = ["serde"] }
18
18
  # The batch solvers — power flow's and state estimation's — run scenarios
@@ -389,6 +389,24 @@ impl JacobianPattern {
389
389
  &self.entries
390
390
  }
391
391
 
392
+ /// The fill's first pass, for a device that runs it itself: each
393
+ /// non-slack row bus with its `Y[i][i]`, owning slots `4d..4d + 4`
394
+ /// (H, N, M, L).
395
+ pub fn diag_slots(&self) -> &[(u32, Complex<f64>)] {
396
+ &self.diag
397
+ }
398
+
399
+ /// Each off-diagonal `(i, k)` pair with `Y[i][k]`, pair `p` owning slots
400
+ /// `4 · diag_slots().len() + 4p ..` (H, N, M, L).
401
+ pub fn pair_slots(&self) -> &[(u32, u32, Complex<f64>)] {
402
+ &self.pairs
403
+ }
404
+
405
+ /// The fill's second pass: the slot each entry copies, in entry order.
406
+ pub fn slot_sources(&self) -> &[u32] {
407
+ &self.src
408
+ }
409
+
392
410
  /// Writes this iteration's Jacobian values into `values`, which is
393
411
  /// resized to [`len`](Self::len) and otherwise fully overwritten.
394
412
  ///
@@ -36,7 +36,7 @@ pub use btheta::{
36
36
  DcBranch, DcIslandReport, DcIslandStatus, DcSolution, DcSolver, dc_branches, dc_power_flow,
37
37
  };
38
38
  pub use impedance::{LinearIslandReport, LinearIslandStatus, LinearReport, linear_power_flow};
39
- pub use sensitivity::{DcSensitivity, DenseMatrix};
39
+ pub use sensitivity::{DcContingencies, DcSensitivity, DenseMatrix};
40
40
 
41
41
  /// Which terms the DC susceptance keeps.
42
42
  ///
@@ -49,7 +49,7 @@
49
49
  //! limitation, as a `TODO PTDF: distributed slack` in the equivalent place.
50
50
 
51
51
  use crate::types::{Bus, BusType};
52
- use gridoxide_sparse::sparse::RealFactorization;
52
+ use gridoxide_sparse::klu_native::KluNativeSystem;
53
53
 
54
54
  use super::btheta::{DcBranch, NOT_UNKNOWN, Partition, partition, reduced_b_triplets};
55
55
  use crate::network::Verdict;
@@ -86,10 +86,58 @@ impl DenseMatrix {
86
86
  }
87
87
  }
88
88
 
89
+ /// Angles and flows after each outage of
90
+ /// [`DcSensitivity::contingencies`], outage after outage.
91
+ #[derive(Clone, Debug)]
92
+ pub struct DcContingencies {
93
+ n_buses: usize,
94
+ n_branches: usize,
95
+ /// Per outage, one angle per bus (radians), outage-major.
96
+ pub angles: Vec<f64>,
97
+ /// Per outage, one from-end flow per flat branch (per unit), outage-major.
98
+ pub flows: Vec<f64>,
99
+ /// Per outage, whether it has a post-outage state; an unsolved outage's
100
+ /// rows are NaN.
101
+ pub solved: Vec<bool>,
102
+ }
103
+
104
+ impl DcContingencies {
105
+ /// From buffers computed elsewhere (gridoxide-gpu's device solver), in
106
+ /// this layout: `angles` and `flows` outage-major, NaN rows where
107
+ /// `solved` is false.
108
+ pub fn from_parts(
109
+ n_buses: usize,
110
+ n_branches: usize,
111
+ angles: Vec<f64>,
112
+ flows: Vec<f64>,
113
+ solved: Vec<bool>,
114
+ ) -> Self {
115
+ assert_eq!(angles.len(), solved.len() * n_buses);
116
+ assert_eq!(flows.len(), solved.len() * n_branches);
117
+ Self {
118
+ n_buses,
119
+ n_branches,
120
+ angles,
121
+ flows,
122
+ solved,
123
+ }
124
+ }
125
+
126
+ /// Outage `k`'s bus angles.
127
+ pub fn angles(&self, k: usize) -> &[f64] {
128
+ &self.angles[k * self.n_buses..(k + 1) * self.n_buses]
129
+ }
130
+
131
+ /// Outage `k`'s branch flows.
132
+ pub fn flows(&self, k: usize) -> &[f64] {
133
+ &self.flows[k * self.n_branches..(k + 1) * self.n_branches]
134
+ }
135
+ }
136
+
89
137
  /// One island's factorized reduced system, plus the bookkeeping to map
90
138
  /// between global bus indices and its own rows.
91
139
  struct Island {
92
- factorization: RealFactorization,
140
+ factorization: KluNativeSystem,
93
141
  /// Reduced row -> global bus index.
94
142
  unknown: Vec<usize>,
95
143
  /// Positions into `DcSensitivity::branches` for this island's branches.
@@ -99,10 +147,11 @@ struct Island {
99
147
  /// Precomputed DC sensitivity factors for one network.
100
148
  ///
101
149
  /// Holds one factorization per island, computed once. Every accessor below is
102
- /// a solve against those, never a refactorization — which is the entire reason
103
- /// [`sparse::RealFactorization`](gridoxide_sparse::sparse::RealFactorization) exists
104
- /// rather than reusing the Newton path's
105
- /// [`solver::LinearSolver`](crate::solver::LinearSolver).
150
+ /// a solve against those, never a refactorization: gridoxide's KLU port
151
+ /// ([`KluNativeSystem::solve`]), which solves one right-hand side about twice
152
+ /// as fast as faer's sparse LU on these matrices (290 against 585 µs on
153
+ /// case9241pegase's reduced B) and, unlike faer's solve, never parallelises
154
+ /// on its own, so [`contingencies`](Self::contingencies) owns the threads.
106
155
  pub struct DcSensitivity {
107
156
  n_buses: usize,
108
157
  /// Total flat branch count (lines + transformers), the index space every
@@ -189,7 +238,7 @@ impl DcSensitivity {
189
238
  }
190
239
 
191
240
  let triplets = reduced_b_triplets(branches, &island_branches[ci], &reduced_pos);
192
- let factorization = RealFactorization::new(m, &triplets)?;
241
+ let factorization = KluNativeSystem::new(m, &triplets)?;
193
242
 
194
243
  let idx = islands.len();
195
244
  for &i in &c.bus_indices {
@@ -396,6 +445,110 @@ impl DcSensitivity {
396
445
  Some(out)
397
446
  }
398
447
 
448
+ /// Every single-branch outage of `outages`, each on its own: the bus
449
+ /// angles and the branch flows after it.
450
+ ///
451
+ /// [`outage_flows`](Self::outage_flows) gives the flows; this adds the
452
+ /// angles, from the same solve. The outage is the transfer
453
+ /// `c = f_l / (1 − d_l)` across the branch's terminals that the removed
454
+ /// branch would have carried, so with `θ⁽ˡ⁾` the angle response to a unit
455
+ /// transfer (the solve `outage_flows` already makes):
456
+ ///
457
+ /// \\[ \theta^{new} = \theta + c\,\theta^{(l)}, \qquad
458
+ /// f^{new} = f + c\,\psi[:, l], \quad f^{new}_l = 0 \\]
459
+ ///
460
+ /// Reference buses keep their angles, and so does every bus outside the
461
+ /// outaged branch's island. `base_angles` and `base_flows` are the base
462
+ /// case's (`Bus::voltage_ang` after a DC solve, per bus, and
463
+ /// [`DcSolution::branch_p`](super::btheta::DcSolution::branch_p)).
464
+ ///
465
+ /// The outages run in parallel on the current rayon pool, one triangular
466
+ /// solve each against the factorization computed once in
467
+ /// [`new`](Self::new); install a pool around the call to choose the
468
+ /// thread count. An outage with no post-outage state (a radial branch,
469
+ /// one out of range or carrying no DC flow) is marked unsolved and its
470
+ /// rows are NaN. `None` only if the base vectors have the wrong length.
471
+ pub fn contingencies(
472
+ &self,
473
+ base_angles: &[f64],
474
+ base_flows: &[f64],
475
+ outages: &[usize],
476
+ ) -> Option<DcContingencies> {
477
+ use rayon::prelude::*;
478
+ if base_angles.len() != self.n_buses || base_flows.len() != self.n_branches {
479
+ return None;
480
+ }
481
+ let (n, m) = (self.n_buses, self.n_branches);
482
+ // Zeroed, not NaN-filled: a zeroed allocation is mapped lazily, so the
483
+ // workers touch its pages in parallel, where filling 2.9 GB first
484
+ // (case9241pegase's full N-1) took a second on one thread.
485
+ let mut out = DcContingencies {
486
+ n_buses: n,
487
+ n_branches: m,
488
+ angles: vec![0.0; outages.len() * n],
489
+ flows: vec![0.0; outages.len() * m],
490
+ solved: vec![false; outages.len()],
491
+ };
492
+ out.angles
493
+ .par_chunks_mut(n.max(1))
494
+ .zip(out.flows.par_chunks_mut(m.max(1)))
495
+ .zip(out.solved.par_iter_mut())
496
+ .zip(outages.par_iter())
497
+ .for_each(|(((angles, flows), solved), &l)| {
498
+ *solved = self.one_contingency(base_angles, base_flows, l, angles, flows);
499
+ if !*solved {
500
+ angles.fill(f64::NAN);
501
+ flows.fill(f64::NAN);
502
+ }
503
+ });
504
+ Some(out)
505
+ }
506
+
507
+ /// One outage of [`contingencies`](Self::contingencies) into its rows;
508
+ /// `false` (rows untouched) if it has no post-outage state.
509
+ fn one_contingency(
510
+ &self,
511
+ base_angles: &[f64],
512
+ base_flows: &[f64],
513
+ l: usize,
514
+ angles: &mut [f64],
515
+ flows: &mut [f64],
516
+ ) -> bool {
517
+ let Some((br, island)) = self.branch_and_island(l) else {
518
+ return false;
519
+ };
520
+ let mut rhs = vec![0.0; island.unknown.len()];
521
+ if self.reduced_pos[br.from] != NOT_UNKNOWN {
522
+ rhs[self.reduced_pos[br.from]] += 1.0;
523
+ }
524
+ if self.reduced_pos[br.to] != NOT_UNKNOWN {
525
+ rhs[self.reduced_pos[br.to]] -= 1.0;
526
+ }
527
+ let Some(theta) = island.factorization.solve(&rhs) else {
528
+ return false;
529
+ };
530
+ let angle = |bus: usize| match self.reduced_pos[bus] {
531
+ NOT_UNKNOWN => 0.0,
532
+ r => theta[r],
533
+ };
534
+ let d = br.b * (angle(br.from) - angle(br.to));
535
+ if (1.0 - d).abs() < LODF_BRIDGE_TOL {
536
+ return false;
537
+ }
538
+ let c = base_flows[l] / (1.0 - d);
539
+ angles.copy_from_slice(base_angles);
540
+ for (r, &bus) in island.unknown.iter().enumerate() {
541
+ angles[bus] += c * theta[r];
542
+ }
543
+ flows.copy_from_slice(base_flows);
544
+ for &pos in &island.branch_positions {
545
+ let b = &self.branches[pos];
546
+ flows[b.index] += c * b.b * (angle(b.from) - angle(b.to));
547
+ }
548
+ flows[l] = 0.0;
549
+ true
550
+ }
551
+
399
552
  /// Whether removing every branch in `branches` at once would disconnect the
400
553
  /// network, leaving no post-outage flows to compute.
401
554
  ///
@@ -0,0 +1,44 @@
1
+ [package]
2
+ name = "gridoxide-gpu"
3
+ description = "gridoxide's batched AC power flow for NVIDIA GPUs: an adaptive Newton loop over cuDSS's uniform batch"
4
+ version.workspace = true
5
+ edition.workspace = true
6
+ repository.workspace = true
7
+ license = "Apache-2.0"
8
+ # Links cuDSS (with the `cuda` feature), and hands its library directories to
9
+ # dependents as DEP_CUDSS_LIB_DIRS; see build.rs.
10
+ links = "cudss"
11
+ # The tests and examples need gridoxide, a dev-dependency the published crate
12
+ # cannot carry (see below), so they stay out of the package.
13
+ exclude = ["tests/", "examples/"]
14
+
15
+ [dependencies]
16
+ gridoxide-core = { path = "../gridoxide-core", version = "0.3.0" }
17
+ gridoxide-sparse = { path = "../gridoxide-sparse", version = "0.3.0" }
18
+ num-complex = "0.4.6"
19
+ # The CPU hand-off's scenarios in parallel, on the pool gridoxide's CPU
20
+ # BatchSolver shares (already in the dependency tree).
21
+ rayon = "1.12"
22
+
23
+ [dev-dependencies]
24
+ # The tests and the counting example read MATPOWER cases through gridoxide's
25
+ # reader. A dev-dependency only, and without a version on purpose: gridoxide
26
+ # depends on this crate (its `gpu` feature), so the cycle must not reach the
27
+ # registry, and `cargo publish` drops a dev-dependency that has no version.
28
+ gridoxide = { path = "../..", features = ["matpower"] }
29
+
30
+ [build-dependencies]
31
+ bindgen = { version = "0.72", optional = true }
32
+ cc = { version = "1.2", optional = true }
33
+
34
+ [features]
35
+ default = []
36
+ # The cuDSS backend, `CudssUniformBatch` (src/cudss.rs), and the Newton step's
37
+ # kernels, `DeviceBatch` (src/device.rs, cuda/kernels.cu). Off by default so
38
+ # this crate, and the workspace, build and test without CUDA. Needs libclang
39
+ # (for bindgen), CUDSS_DIR and the CUDA 12 toolkit with nvcc (CUDA_ARCH,
40
+ # default sm_80); build.rs says what each is. On a machine without CUDA it can
41
+ # still be type-checked against the probe's stub headers, nvcc skipped:
42
+ # CUDSS_DIR=<cudss> CUDA_INCLUDE_DIR=$PWD/probes/cudss_ubatch/stub \
43
+ # GRIDOXIDE_GPU_NO_NVCC=1 cargo check -p gridoxide-gpu --features cuda --all-targets
44
+ cuda = ["dep:bindgen", "dep:cc"]