@woosh/meep-engine 2.138.19 → 2.139.0

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 (496) hide show
  1. package/package.json +2 -1
  2. package/src/core/collection/PairUint32Map.d.ts +100 -0
  3. package/src/core/collection/PairUint32Map.d.ts.map +1 -0
  4. package/src/core/collection/PairUint32Map.js +321 -0
  5. package/src/core/collection/Uint32Map.d.ts +119 -0
  6. package/src/core/collection/Uint32Map.d.ts.map +1 -0
  7. package/src/core/collection/Uint32Map.js +345 -0
  8. package/src/core/collection/array/array_shuffle.d.ts +10 -3
  9. package/src/core/collection/array/array_shuffle.d.ts.map +1 -1
  10. package/src/core/collection/array/array_shuffle.js +27 -22
  11. package/src/core/collection/heap/FibonacciHeap.d.ts +195 -0
  12. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -0
  13. package/src/core/collection/heap/FibonacciHeap.js +586 -0
  14. package/src/core/collection/heap/Uint32Heap.js +1 -1
  15. package/src/core/collection/heap/Uint32Heap4.d.ts +169 -0
  16. package/src/core/collection/heap/Uint32Heap4.d.ts.map +1 -0
  17. package/src/core/collection/heap/Uint32Heap4.js +490 -0
  18. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +27 -0
  19. package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +1 -0
  20. package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +88 -0
  21. package/src/core/geom/3d/shape/BoxShape3D.d.ts +61 -0
  22. package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -0
  23. package/src/core/geom/3d/shape/BoxShape3D.js +158 -0
  24. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +11 -0
  25. package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
  26. package/src/core/geom/3d/shape/CapsuleShape3D.js +12 -0
  27. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts +37 -9
  28. package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
  29. package/src/core/geom/3d/shape/UnitCubeShape3D.js +45 -98
  30. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts +10 -0
  31. package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
  32. package/src/core/geom/3d/shape/UnitSphereShape3D.js +11 -0
  33. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +61 -0
  34. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +1 -0
  35. package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +148 -0
  36. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts +39 -0
  37. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.d.ts.map +1 -0
  38. package/src/core/geom/3d/tetrahedra/compute_tetrahedral_mesh_from_surface.js +147 -0
  39. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +15 -0
  40. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +1 -0
  41. package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +22 -0
  42. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts +2 -0
  43. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.d.ts.map +1 -0
  44. package/src/core/geom/3d/tetrahedra/prototype_tetrahedrize_mesh.js +673 -0
  45. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts +26 -0
  46. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -0
  47. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +222 -0
  48. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts +34 -0
  49. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.d.ts.map +1 -0
  50. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_find_tets_around_edge.js +146 -0
  51. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts +36 -0
  52. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -0
  53. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +232 -0
  54. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts +33 -0
  55. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -0
  56. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +255 -0
  57. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts +68 -0
  58. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -0
  59. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +365 -0
  60. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts +31 -0
  61. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.d.ts.map +1 -0
  62. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_smooth_vertex.js +112 -0
  63. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts +22 -0
  64. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.d.ts.map +1 -0
  65. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_vertex_is_boundary.js +55 -0
  66. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +32 -0
  67. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts.map +1 -0
  68. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +66 -0
  69. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts +22 -0
  70. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.d.ts.map +1 -1
  71. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.js +49 -0
  72. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +134 -0
  73. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
  74. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +276 -3
  75. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +17 -0
  76. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -0
  77. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +135 -0
  78. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts +14 -0
  79. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.d.ts.map +1 -0
  80. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compact.js +177 -0
  81. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts.map +1 -1
  82. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +20 -4
  83. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  84. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +5 -3
  85. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  86. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +9 -0
  87. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.d.ts.map +1 -1
  88. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_get_or_create.js +21 -45
  89. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.d.ts.map +1 -1
  90. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill.js +7 -1
  91. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts +8 -6
  92. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
  93. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +8 -6
  94. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +22 -0
  95. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts.map +1 -0
  96. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +73 -0
  97. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  98. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +51 -1
  99. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts +10 -0
  100. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -0
  101. package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +42 -0
  102. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts +28 -0
  103. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -0
  104. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +227 -0
  105. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts +13 -0
  106. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.d.ts.map +1 -0
  107. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_walk_boundary_loops.js +108 -0
  108. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +11 -0
  109. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +1 -0
  110. package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +20 -0
  111. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +20 -0
  112. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +1 -0
  113. package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +38 -0
  114. package/src/core/graph/csr/CSRGraph.d.ts +168 -0
  115. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -0
  116. package/src/core/graph/csr/CSRGraph.js +319 -0
  117. package/src/core/graph/metis/cluster_mesh_metis.d.ts +12 -0
  118. package/src/core/graph/metis/cluster_mesh_metis.d.ts.map +1 -1
  119. package/src/core/graph/metis/cluster_mesh_metis.js +12 -0
  120. package/src/core/graph/metis/metis.d.ts +19 -0
  121. package/src/core/graph/metis/metis.d.ts.map +1 -1
  122. package/src/core/graph/metis/metis.js +20 -0
  123. package/src/core/graph/metis/metis_cluster_bs.d.ts +11 -0
  124. package/src/core/graph/metis/metis_cluster_bs.d.ts.map +1 -1
  125. package/src/core/graph/metis/metis_cluster_bs.js +11 -0
  126. package/src/core/graph/metis/metis_options.d.ts +17 -2
  127. package/src/core/graph/metis/metis_options.d.ts.map +1 -1
  128. package/src/core/graph/metis/metis_options.js +17 -2
  129. package/src/core/graph/metis/native/MetisGraph.d.ts +144 -0
  130. package/src/core/graph/metis/native/MetisGraph.d.ts.map +1 -0
  131. package/src/core/graph/metis/native/MetisGraph.js +212 -0
  132. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts +72 -0
  133. package/src/core/graph/metis/native/bisection/BisectionScratch.d.ts.map +1 -0
  134. package/src/core/graph/metis/native/bisection/BisectionScratch.js +101 -0
  135. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts +37 -0
  136. package/src/core/graph/metis/native/bisection/bisect_graph.d.ts.map +1 -0
  137. package/src/core/graph/metis/native/bisection/bisect_graph.js +100 -0
  138. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts +15 -0
  139. package/src/core/graph/metis/native/bisection/compute_2way_params.d.ts.map +1 -0
  140. package/src/core/graph/metis/native/bisection/compute_2way_params.js +84 -0
  141. package/src/core/graph/metis/native/bisection/fm_2way.d.ts +30 -0
  142. package/src/core/graph/metis/native/bisection/fm_2way.d.ts.map +1 -0
  143. package/src/core/graph/metis/native/bisection/fm_2way.js +290 -0
  144. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts +23 -0
  145. package/src/core/graph/metis/native/bisection/grow_bisection.d.ts.map +1 -0
  146. package/src/core/graph/metis/native/bisection/grow_bisection.js +137 -0
  147. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts +28 -0
  148. package/src/core/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -0
  149. package/src/core/graph/metis/native/bisection/split_graph_two_way.js +119 -0
  150. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts +20 -0
  151. package/src/core/graph/metis/native/coarsen/coarsen_graph.d.ts.map +1 -0
  152. package/src/core/graph/metis/native/coarsen/coarsen_graph.js +94 -0
  153. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts +24 -0
  154. package/src/core/graph/metis/native/coarsen/create_coarse_graph.d.ts.map +1 -0
  155. package/src/core/graph/metis/native/coarsen/create_coarse_graph.js +158 -0
  156. package/src/core/graph/metis/native/coarsen/match_shem.d.ts +41 -0
  157. package/src/core/graph/metis/native/coarsen/match_shem.d.ts.map +1 -0
  158. package/src/core/graph/metis/native/coarsen/match_shem.js +175 -0
  159. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts +24 -0
  160. package/src/core/graph/metis/native/initial/initial_kway_bfs.d.ts.map +1 -0
  161. package/src/core/graph/metis/native/initial/initial_kway_bfs.js +122 -0
  162. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts +29 -0
  163. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.d.ts.map +1 -0
  164. package/src/core/graph/metis/native/initial/initial_kway_recursive_bisection.js +170 -0
  165. package/src/core/graph/metis/native/metis_partition_kway.d.ts +41 -0
  166. package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -0
  167. package/src/core/graph/metis/native/metis_partition_kway.js +126 -0
  168. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts +62 -0
  169. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.d.ts.map +1 -0
  170. package/src/core/graph/metis/native/refine/IndexedFloatMaxHeap.js +261 -0
  171. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts +45 -0
  172. package/src/core/graph/metis/native/refine/RefinementScratch.d.ts.map +1 -0
  173. package/src/core/graph/metis/native/refine/RefinementScratch.js +53 -0
  174. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts +18 -0
  175. package/src/core/graph/metis/native/refine/compute_kway_params.d.ts.map +1 -0
  176. package/src/core/graph/metis/native/refine/compute_kway_params.js +138 -0
  177. package/src/core/graph/metis/native/refine/fm_kway.d.ts +63 -0
  178. package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -0
  179. package/src/core/graph/metis/native/refine/fm_kway.js +462 -0
  180. package/src/core/graph/metis/native/refine/project_kway.d.ts +22 -0
  181. package/src/core/graph/metis/native/refine/project_kway.d.ts.map +1 -0
  182. package/src/core/graph/metis/native/refine/project_kway.js +43 -0
  183. package/src/core/graph/metis/native/refine/refine_kway.d.ts +34 -0
  184. package/src/core/graph/metis/native/refine/refine_kway.d.ts.map +1 -0
  185. package/src/core/graph/metis/native/refine/refine_kway.js +43 -0
  186. package/src/core/math/linalg/eigen/matrix_householder_in_place.d.ts +2 -2
  187. package/src/core/math/linalg/eigen/matrix_householder_in_place.js +2 -2
  188. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts +6 -4
  189. package/src/core/math/linalg/eigen/matrix_qr_in_place.d.ts.map +1 -1
  190. package/src/core/math/linalg/eigen/matrix_qr_in_place.js +69 -23
  191. package/src/engine/EngineHarness.d.ts +3 -1
  192. package/src/engine/EngineHarness.d.ts.map +1 -1
  193. package/src/engine/EngineHarness.js +6 -4
  194. package/src/engine/control/first-person/DESIGN.md +30 -6
  195. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +563 -0
  196. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +102 -9
  197. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  198. package/src/engine/control/first-person/FirstPersonPlayerController.js +38 -3
  199. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +533 -4
  200. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  201. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +315 -6
  202. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +220 -22
  203. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  204. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +858 -241
  205. package/src/engine/control/first-person/TODO.md +127 -0
  206. package/src/engine/control/first-person/abilities/Ability.d.ts +101 -0
  207. package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -0
  208. package/src/engine/control/first-person/abilities/Ability.js +119 -0
  209. package/src/engine/control/first-person/abilities/AbilitySet.d.ts +86 -0
  210. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -0
  211. package/src/engine/control/first-person/abilities/AbilitySet.js +185 -0
  212. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts +62 -0
  213. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -0
  214. package/src/engine/control/first-person/abilities/LedgeGrab.js +199 -0
  215. package/src/engine/control/first-person/abilities/Mantle.d.ts +45 -0
  216. package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -0
  217. package/src/engine/control/first-person/abilities/Mantle.js +188 -0
  218. package/src/engine/control/first-person/abilities/Slide.d.ts +33 -0
  219. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -0
  220. package/src/engine/control/first-person/abilities/Slide.js +158 -0
  221. package/src/engine/control/first-person/abilities/WallJump.d.ts +45 -0
  222. package/src/engine/control/first-person/abilities/WallJump.d.ts.map +1 -0
  223. package/src/engine/control/first-person/abilities/WallJump.js +131 -0
  224. package/src/engine/control/first-person/abilities/WallRun.d.ts +44 -0
  225. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -0
  226. package/src/engine/control/first-person/abilities/WallRun.js +180 -0
  227. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts +49 -0
  228. package/src/engine/control/first-person/composer/EyeOffsetStack.d.ts.map +1 -0
  229. package/src/engine/control/first-person/composer/EyeOffsetStack.js +60 -0
  230. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts +100 -0
  231. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.d.ts.map +1 -0
  232. package/src/engine/control/first-person/mastery/BreathRhythmEvaluator.js +133 -0
  233. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts +10 -0
  234. package/src/engine/control/first-person/mastery/DecisionPoint.d.ts.map +1 -0
  235. package/src/engine/control/first-person/mastery/DecisionPoint.js +30 -0
  236. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts +61 -0
  237. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.d.ts.map +1 -0
  238. package/src/engine/control/first-person/mastery/FootAsymmetryTurnEvaluator.js +109 -0
  239. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts +40 -0
  240. package/src/engine/control/first-person/mastery/MasteryEvaluator.d.ts.map +1 -0
  241. package/src/engine/control/first-person/mastery/MasteryEvaluator.js +45 -0
  242. package/src/engine/control/first-person/mastery/MasteryScore.d.ts +68 -0
  243. package/src/engine/control/first-person/mastery/MasteryScore.d.ts.map +1 -0
  244. package/src/engine/control/first-person/mastery/MasteryScore.js +100 -0
  245. package/src/engine/control/first-person/mastery/MasterySet.d.ts +60 -0
  246. package/src/engine/control/first-person/mastery/MasterySet.d.ts.map +1 -0
  247. package/src/engine/control/first-person/mastery/MasterySet.js +86 -0
  248. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +58 -0
  249. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -0
  250. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +83 -0
  251. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +69 -0
  252. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -0
  253. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +109 -0
  254. package/src/engine/control/first-person/math/Spring.d.ts +56 -0
  255. package/src/engine/control/first-person/math/Spring.d.ts.map +1 -0
  256. package/src/engine/control/first-person/math/Spring.js +71 -0
  257. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts +26 -0
  258. package/src/engine/control/first-person/math/computeLRCBreathRate.d.ts.map +1 -0
  259. package/src/engine/control/first-person/math/computeLRCBreathRate.js +41 -0
  260. package/src/engine/control/first-person/math/computeMassRatios.d.ts +35 -0
  261. package/src/engine/control/first-person/math/computeMassRatios.d.ts.map +1 -0
  262. package/src/engine/control/first-person/math/computeMassRatios.js +44 -0
  263. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts +31 -1
  264. package/src/engine/control/first-person/pose/FirstPersonPose.d.ts.map +1 -1
  265. package/src/engine/control/first-person/pose/FirstPersonPose.js +49 -3
  266. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts +7 -0
  267. package/src/engine/control/first-person/pose/FirstPersonPosture.d.ts.map +1 -0
  268. package/src/engine/control/first-person/pose/FirstPersonPosture.js +27 -0
  269. package/src/engine/control/first-person/prototype_first_person_controller.js +550 -119
  270. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +58 -0
  271. package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -0
  272. package/src/engine/control/first-person/sensors/FirstPersonSensors.js +77 -0
  273. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +80 -0
  274. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -0
  275. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +196 -0
  276. package/src/engine/control/first-person/test/buildTestPlayer.d.ts +20 -0
  277. package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -0
  278. package/src/engine/control/first-person/test/buildTestPlayer.js +28 -0
  279. package/src/engine/ecs/EntityManager.d.ts +2 -2
  280. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  281. package/src/engine/ecs/EntityManager.js +13 -8
  282. package/src/engine/ecs/System.d.ts.map +1 -1
  283. package/src/engine/ecs/System.js +2 -2
  284. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -2
  285. package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
  286. package/src/engine/graphics/ecs/light/Light.js +27 -0
  287. package/src/engine/graphics/ecs/light/LightSystem.js +1 -1
  288. package/src/engine/graphics/ecs/path/PathDisplaySystem.d.ts.map +1 -1
  289. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  290. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -2
  291. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  292. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +0 -2
  293. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  294. package/src/engine/navigation/grid/find_path_on_grid_astar.d.ts.map +1 -1
  295. package/src/engine/navigation/grid/find_path_on_grid_astar.js +11 -2
  296. package/src/engine/navigation/mesh/bt_mesh_face_find_path.d.ts.map +1 -1
  297. package/src/engine/navigation/mesh/bt_mesh_face_find_path.js +11 -1
  298. package/src/engine/physics/PLAN.md +236 -0
  299. package/src/engine/physics/body/BodyStorage.d.ts +187 -0
  300. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -0
  301. package/src/engine/physics/body/BodyStorage.js +427 -0
  302. package/src/engine/physics/broadphase/PairList.d.ts +62 -0
  303. package/src/engine/physics/broadphase/PairList.d.ts.map +1 -0
  304. package/src/engine/physics/broadphase/PairList.js +97 -0
  305. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts +30 -0
  306. package/src/engine/physics/broadphase/aabb_transform_oriented.d.ts.map +1 -0
  307. package/src/engine/physics/broadphase/aabb_transform_oriented.js +93 -0
  308. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +16 -0
  309. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -0
  310. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +61 -0
  311. package/src/engine/physics/broadphase/generate_pairs.d.ts +38 -0
  312. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -0
  313. package/src/engine/physics/broadphase/generate_pairs.js +101 -0
  314. package/src/engine/physics/contact/ManifoldStore.d.ts +226 -0
  315. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -0
  316. package/src/engine/physics/contact/ManifoldStore.js +499 -0
  317. package/src/engine/physics/ecs/BodyKind.d.ts +23 -0
  318. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -0
  319. package/src/engine/physics/ecs/BodyKind.js +24 -0
  320. package/src/engine/physics/ecs/Collider.d.ts +98 -0
  321. package/src/engine/physics/ecs/Collider.d.ts.map +1 -0
  322. package/src/engine/physics/ecs/Collider.js +136 -0
  323. package/src/engine/physics/ecs/ColliderFlags.d.ts +14 -0
  324. package/src/engine/physics/ecs/ColliderFlags.d.ts.map +1 -0
  325. package/src/engine/physics/ecs/ColliderFlags.js +15 -0
  326. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +58 -0
  327. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -0
  328. package/src/engine/physics/ecs/ColliderObserverSystem.js +103 -0
  329. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts +25 -0
  330. package/src/engine/physics/ecs/ColliderSerializationAdapter.d.ts.map +1 -0
  331. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +37 -0
  332. package/src/engine/physics/ecs/PhysicsEvents.d.ts +15 -0
  333. package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -0
  334. package/src/engine/physics/ecs/PhysicsEvents.js +16 -0
  335. package/src/engine/physics/ecs/PhysicsSystem.d.ts +520 -0
  336. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -0
  337. package/src/engine/physics/ecs/PhysicsSystem.js +1159 -0
  338. package/src/engine/physics/ecs/RigidBody.d.ts +197 -0
  339. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -0
  340. package/src/engine/physics/ecs/RigidBody.js +240 -0
  341. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +21 -0
  342. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -0
  343. package/src/engine/physics/ecs/RigidBodyFlags.js +22 -0
  344. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +28 -0
  345. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -0
  346. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +81 -0
  347. package/src/engine/physics/ecs/SleepState.d.ts +11 -0
  348. package/src/engine/physics/ecs/SleepState.d.ts.map +1 -0
  349. package/src/engine/physics/ecs/SleepState.js +12 -0
  350. package/src/engine/physics/events/ContactEventBuffer.d.ts +46 -0
  351. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -0
  352. package/src/engine/physics/events/ContactEventBuffer.js +83 -0
  353. package/src/engine/physics/events/diff_manifolds.d.ts +25 -0
  354. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -0
  355. package/src/engine/physics/events/diff_manifolds.js +50 -0
  356. package/src/engine/physics/fluid/FluidField.d.ts +294 -16
  357. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  358. package/src/engine/physics/fluid/FluidField.js +510 -66
  359. package/src/engine/physics/fluid/FluidSimulator.d.ts +188 -5
  360. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  361. package/src/engine/physics/fluid/FluidSimulator.js +455 -95
  362. package/src/engine/physics/fluid/SliceVisualiser.d.ts +29 -6
  363. package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
  364. package/src/engine/physics/fluid/SliceVisualiser.js +190 -165
  365. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +154 -0
  366. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -0
  367. package/src/engine/physics/fluid/ecs/FluidComponent.js +238 -0
  368. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +45 -0
  369. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts.map +1 -0
  370. package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +89 -0
  371. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +107 -0
  372. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -0
  373. package/src/engine/physics/fluid/ecs/FluidSystem.js +278 -0
  374. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +62 -1
  375. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
  376. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +81 -6
  377. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +17 -4
  378. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  379. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +105 -12
  380. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts +43 -0
  381. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -0
  382. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +210 -0
  383. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +62 -1
  384. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  385. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +302 -8
  386. package/src/engine/physics/fluid/prototype.js +102 -91
  387. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts +33 -0
  388. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +1 -0
  389. package/src/engine/physics/fluid/solver/optimal_sor_omega.js +41 -0
  390. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +20 -5
  391. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  392. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +60 -38
  393. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +25 -4
  394. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  395. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +93 -73
  396. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts +23 -0
  397. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.d.ts.map +1 -0
  398. package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +60 -0
  399. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts +23 -0
  400. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -0
  401. package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +68 -0
  402. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +30 -0
  403. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -0
  404. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +66 -0
  405. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts +26 -0
  406. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.d.ts.map +1 -0
  407. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_uniform.js +113 -0
  408. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts +30 -0
  409. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.d.ts.map +1 -0
  410. package/src/engine/physics/fluid/solver/v3_grid_shift_in_place.js +107 -0
  411. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +49 -0
  412. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -0
  413. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +126 -0
  414. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +93 -0
  415. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -0
  416. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +424 -0
  417. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts +20 -0
  418. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.d.ts.map +1 -0
  419. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_unmasked_legacy.js +83 -0
  420. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +26 -0
  421. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -0
  422. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +70 -0
  423. package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -1
  424. package/src/engine/physics/gjk/expanding_polytope_algorithm.js +8 -10
  425. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +29 -0
  426. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -0
  427. package/src/engine/physics/inertia/world_inverse_inertia.js +79 -0
  428. package/src/engine/physics/integration/integrate_position.d.ts +16 -0
  429. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -0
  430. package/src/engine/physics/integration/integrate_position.js +48 -0
  431. package/src/engine/physics/integration/integrate_velocity.d.ts +25 -0
  432. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -0
  433. package/src/engine/physics/integration/integrate_velocity.js +79 -0
  434. package/src/engine/physics/integration/quat_integrate.d.ts +27 -0
  435. package/src/engine/physics/integration/quat_integrate.d.ts.map +1 -0
  436. package/src/engine/physics/integration/quat_integrate.js +62 -0
  437. package/src/engine/physics/island/IslandBuilder.d.ts +167 -0
  438. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -0
  439. package/src/engine/physics/island/IslandBuilder.js +411 -0
  440. package/src/engine/physics/island/union_find.d.ts +51 -0
  441. package/src/engine/physics/island/union_find.d.ts.map +1 -0
  442. package/src/engine/physics/island/union_find.js +76 -0
  443. package/src/engine/physics/narrowphase/PosedShape.d.ts +59 -0
  444. package/src/engine/physics/narrowphase/PosedShape.d.ts.map +1 -0
  445. package/src/engine/physics/narrowphase/PosedShape.js +110 -0
  446. package/src/engine/physics/narrowphase/box_box_manifold.d.ts +32 -0
  447. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -0
  448. package/src/engine/physics/narrowphase/box_box_manifold.js +543 -0
  449. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +122 -0
  450. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -0
  451. package/src/engine/physics/narrowphase/capsule_contacts.js +508 -0
  452. package/src/engine/physics/narrowphase/narrowphase_step.d.ts +11 -0
  453. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -0
  454. package/src/engine/physics/narrowphase/narrowphase_step.js +382 -0
  455. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +38 -0
  456. package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -0
  457. package/src/engine/physics/narrowphase/sphere_box_contact.js +130 -0
  458. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +26 -0
  459. package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -0
  460. package/src/engine/physics/narrowphase/sphere_sphere_contact.js +51 -0
  461. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +83 -0
  462. package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -0
  463. package/src/engine/physics/queries/PhysicsSurfacePoint.js +100 -0
  464. package/src/engine/physics/queries/raycast.d.ts +20 -0
  465. package/src/engine/physics/queries/raycast.d.ts.map +1 -0
  466. package/src/engine/physics/queries/raycast.js +249 -0
  467. package/src/engine/physics/solver/friction_cone.d.ts +16 -0
  468. package/src/engine/physics/solver/friction_cone.d.ts.map +1 -0
  469. package/src/engine/physics/solver/friction_cone.js +37 -0
  470. package/src/engine/physics/solver/solve_contacts.d.ts +36 -0
  471. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -0
  472. package/src/engine/physics/solver/solve_contacts.js +598 -0
  473. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts +0 -34
  474. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.d.ts.map +0 -1
  475. package/src/core/geom/3d/topology/struct/binary/io/edge/OrderedEdge.js +0 -66
  476. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts +0 -2
  477. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.d.ts.map +0 -1
  478. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_calc_edges.js +0 -54
  479. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts +0 -2
  480. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.d.ts.map +0 -1
  481. package/src/core/geom/3d/topology/struct/binary/io/edge/get_or_create_edge_map.js +0 -26
  482. package/src/engine/ecs/components/Motion.d.ts +0 -21
  483. package/src/engine/ecs/components/Motion.d.ts.map +0 -1
  484. package/src/engine/ecs/components/Motion.js +0 -27
  485. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts +0 -20
  486. package/src/engine/ecs/components/MotionSerializationAdapter.d.ts.map +0 -1
  487. package/src/engine/ecs/components/MotionSerializationAdapter.js +0 -26
  488. package/src/engine/ecs/systems/MotionSystem.d.ts +0 -9
  489. package/src/engine/ecs/systems/MotionSystem.d.ts.map +0 -1
  490. package/src/engine/ecs/systems/MotionSystem.js +0 -29
  491. package/src/engine/physics/fluid/Fluid.d.ts +0 -26
  492. package/src/engine/physics/fluid/Fluid.d.ts.map +0 -1
  493. package/src/engine/physics/fluid/Fluid.js +0 -221
  494. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts +0 -7
  495. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.d.ts.map +0 -1
  496. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_reverse.js +0 -8
@@ -0,0 +1,319 @@
1
+ import { assert } from "../../assert.js";
2
+ import { is_typed_array_equals } from "../../collection/array/typed/is_typed_array_equals.js";
3
+ import { uint32_array_hash } from "../../collection/array/typed/uint32_array_hash.js";
4
+
5
+ /**
6
+ * Compressed Sparse Row representation of a weighted graph.
7
+ *
8
+ * The four parallel typed arrays — `edge_addresses`, `adjacency`,
9
+ * `edge_weights`, `vertex_weights` — share a single `ArrayBuffer` so that
10
+ * they are co-located in memory. This gives the allocator one allocation
11
+ * instead of four, the GC one reference to track, and the cache one
12
+ * contiguous region to prefetch when walking adjacency rows.
13
+ *
14
+ * Layout inside the buffer (all uint32, 4 bytes each):
15
+ * [0] edge_addresses, length vertex_count + 1
16
+ * [vertex_count + 1] adjacency, length adjacency_length
17
+ * [+adjacency_length] edge_weights, length adjacency_length
18
+ * [+adjacency_length] vertex_weights, length vertex_count
19
+ *
20
+ * Conventions match `mesh_to_metis_graph`:
21
+ * - `edge_addresses[v]` = start of vertex v's adjacency in `adjacency`
22
+ * - `edge_addresses[v + 1]` = end (exclusive)
23
+ * - `adjacency[k]` = neighbour vertex id
24
+ * - `edge_weights[k]` = weight of that edge
25
+ * - `vertex_weights[v]` = vertex weight (default 1)
26
+ *
27
+ * The class deliberately exposes the raw typed arrays as fields rather than
28
+ * via accessor methods. Hot loops in graph algorithms want
29
+ * `for (let k = xadj[v]; k < xadj[v+1]; k++) { ... adj[k] ... }` patterns; a
30
+ * callback-based iterator API would force a closure allocation per outer
31
+ * iteration and defeat V8's inlining.
32
+ *
33
+ * @author Alex Goldring
34
+ * @copyright Company Named Limited (c) 2026
35
+ */
36
+ export class CSRGraph {
37
+ /**
38
+ * @param {number} vertex_count
39
+ * @param {number} adjacency_length total length of the adjacency list
40
+ * (each undirected edge appears twice for symmetric graphs)
41
+ */
42
+ constructor(vertex_count, adjacency_length) {
43
+ assert.isNonNegativeInteger(vertex_count, 'vertex_count');
44
+ assert.isNonNegativeInteger(adjacency_length, 'adjacency_length');
45
+
46
+ /** @type {number} */
47
+ this.vertex_count = vertex_count;
48
+ /** @type {number} */
49
+ this.adjacency_length = adjacency_length;
50
+
51
+ // Total uint32 slots: (vertex_count + 1) for edge_addresses,
52
+ // adjacency_length × 2 for adjacency and edge_weights,
53
+ // vertex_count for vertex_weights.
54
+ const total_uint32_slots = (vertex_count + 1) + (adjacency_length * 2) + vertex_count;
55
+
56
+ /**
57
+ * Single backing buffer for all four arrays.
58
+ * @type {ArrayBuffer}
59
+ * @private
60
+ */
61
+ this.__data_buffer = new ArrayBuffer(total_uint32_slots * 4);
62
+
63
+ let byte_offset = 0;
64
+
65
+ /**
66
+ * CSR row pointers. Length = vertex_count + 1; the final entry equals
67
+ * adjacency_length.
68
+ * @type {Uint32Array}
69
+ */
70
+ this.edge_addresses = new Uint32Array(this.__data_buffer, byte_offset, vertex_count + 1);
71
+ byte_offset += (vertex_count + 1) * 4;
72
+
73
+ /**
74
+ * CSR column indices — neighbour vertex ids.
75
+ * @type {Uint32Array}
76
+ */
77
+ this.adjacency = new Uint32Array(this.__data_buffer, byte_offset, adjacency_length);
78
+ byte_offset += adjacency_length * 4;
79
+
80
+ /**
81
+ * Edge weights parallel to `adjacency`.
82
+ * @type {Uint32Array}
83
+ */
84
+ this.edge_weights = new Uint32Array(this.__data_buffer, byte_offset, adjacency_length);
85
+ byte_offset += adjacency_length * 4;
86
+
87
+ /**
88
+ * Per-vertex weight. Initialised to all-1s; overwrite via direct
89
+ * indexing or `vertex_weights.set(...)` if your domain needs non-uniform
90
+ * weights. Remember to call `refresh_total_vertex_weight()` after.
91
+ * @type {Uint32Array}
92
+ */
93
+ this.vertex_weights = new Uint32Array(this.__data_buffer, byte_offset, vertex_count);
94
+ this.vertex_weights.fill(1);
95
+
96
+ /**
97
+ * Cached `Σ vertex_weights[v]`. Kept in sync via `refresh_total_vertex_weight()`.
98
+ * @type {number}
99
+ */
100
+ this.total_vertex_weight = vertex_count;
101
+ }
102
+
103
+ /**
104
+ * The underlying shared buffer. Useful for fast bulk operations and for
105
+ * passing the graph between Web Workers via transfer.
106
+ * @returns {ArrayBuffer}
107
+ */
108
+ get arrayBuffer() {
109
+ return this.__data_buffer;
110
+ }
111
+
112
+ /**
113
+ * Degree of vertex `vertex` (number of outgoing edges in the CSR).
114
+ * @param {number} vertex
115
+ * @returns {number}
116
+ */
117
+ degree_of(vertex) {
118
+ return this.edge_addresses[vertex + 1] - this.edge_addresses[vertex];
119
+ }
120
+
121
+ /**
122
+ * Sum of all entries in `edge_weights[0..adjacency_length)`.
123
+ * Each undirected edge contributes twice for a symmetric graph.
124
+ * @returns {number}
125
+ */
126
+ sum_of_edge_weights() {
127
+ const edge_weights = this.edge_weights;
128
+ const n = this.adjacency_length;
129
+ let sum = 0;
130
+ for (let i = 0; i < n; i++) {
131
+ sum += edge_weights[i];
132
+ }
133
+ return sum;
134
+ }
135
+
136
+ /**
137
+ * Recompute and store `total_vertex_weight` from the current `vertex_weights`.
138
+ */
139
+ refresh_total_vertex_weight() {
140
+ const vertex_weights = this.vertex_weights;
141
+ const n = this.vertex_count;
142
+ let sum = 0;
143
+ for (let i = 0; i < n; i++) {
144
+ sum += vertex_weights[i];
145
+ }
146
+ this.total_vertex_weight = sum;
147
+ }
148
+
149
+ /**
150
+ * Shrink `adjacency` and `edge_weights` in place to `new_adjacency_length`.
151
+ *
152
+ * Use after a worst-case allocation has been partially filled (e.g. during
153
+ * coarse-graph contraction where the exact edge count is only known after
154
+ * the merge pass). Reallocates the shared buffer at the smaller size and
155
+ * recreates all four typed-array views; existing references to
156
+ * `this.adjacency` etc. are invalidated.
157
+ *
158
+ * Vertex-side data (`edge_addresses`, `vertex_weights`) and
159
+ * `total_vertex_weight` are preserved.
160
+ *
161
+ * No-op if `new_adjacency_length === adjacency_length`.
162
+ *
163
+ * @param {number} new_adjacency_length must be <= current `adjacency_length`
164
+ */
165
+ truncate_adjacency(new_adjacency_length) {
166
+ assert.isNonNegativeInteger(new_adjacency_length, 'new_adjacency_length');
167
+ assert.lessThanOrEqual(new_adjacency_length, this.adjacency_length, 'truncate_adjacency cannot grow');
168
+
169
+ if (new_adjacency_length === this.adjacency_length) {
170
+ return;
171
+ }
172
+
173
+ // Keep references to the OLD views — they remain valid because the old
174
+ // buffer stays alive until we drop the last reference to it (which
175
+ // happens implicitly when we reassign this.__data_buffer at the end).
176
+ // We can copy DIRECTLY from old views into new views with no
177
+ // intermediate snapshot, since the two buffers don't overlap.
178
+ const old_edge_addresses = this.edge_addresses;
179
+ const old_adjacency = this.adjacency;
180
+ const old_edge_weights = this.edge_weights;
181
+ const old_vertex_weights = this.vertex_weights;
182
+
183
+ const total_uint32_slots = (this.vertex_count + 1) + (new_adjacency_length * 2) + this.vertex_count;
184
+ const new_buffer = new ArrayBuffer(total_uint32_slots * 4);
185
+
186
+ let byte_offset = 0;
187
+ const new_edge_addresses = new Uint32Array(new_buffer, byte_offset, this.vertex_count + 1);
188
+ byte_offset += (this.vertex_count + 1) * 4;
189
+ const new_adjacency = new Uint32Array(new_buffer, byte_offset, new_adjacency_length);
190
+ byte_offset += new_adjacency_length * 4;
191
+ const new_edge_weights = new Uint32Array(new_buffer, byte_offset, new_adjacency_length);
192
+ byte_offset += new_adjacency_length * 4;
193
+ const new_vertex_weights = new Uint32Array(new_buffer, byte_offset, this.vertex_count);
194
+
195
+ // Direct old-view → new-view copies. `subarray` is a view, not a copy,
196
+ // so the only data movement is the underlying `.set()`.
197
+ new_edge_addresses.set(old_edge_addresses);
198
+ new_adjacency.set(old_adjacency.subarray(0, new_adjacency_length));
199
+ new_edge_weights.set(old_edge_weights.subarray(0, new_adjacency_length));
200
+ new_vertex_weights.set(old_vertex_weights);
201
+
202
+ this.__data_buffer = new_buffer;
203
+ this.edge_addresses = new_edge_addresses;
204
+ this.adjacency = new_adjacency;
205
+ this.edge_weights = new_edge_weights;
206
+ this.vertex_weights = new_vertex_weights;
207
+ this.adjacency_length = new_adjacency_length;
208
+ }
209
+
210
+ /**
211
+ * Copy the contents of `other` into `this`. Other must have matching
212
+ * `vertex_count` and `adjacency_length` (so the layouts align).
213
+ *
214
+ * Performed as a single bulk Uint32Array `.set()` thanks to the shared
215
+ * buffer layout — significantly faster than copying the four arrays
216
+ * individually.
217
+ *
218
+ * @param {CSRGraph} other
219
+ */
220
+ copy(other) {
221
+ assert.equal(other.isCSRGraph, true, 'other.isCSRGraph !== true');
222
+ assert.equal(this.vertex_count, other.vertex_count, 'vertex_count mismatch');
223
+ assert.equal(this.adjacency_length, other.adjacency_length, 'adjacency_length mismatch');
224
+
225
+ new Uint32Array(this.__data_buffer).set(new Uint32Array(other.__data_buffer));
226
+ this.total_vertex_weight = other.total_vertex_weight;
227
+ }
228
+
229
+ /**
230
+ * Deep copy. Returns a new `CSRGraph` with independent buffers.
231
+ * @returns {CSRGraph}
232
+ */
233
+ clone() {
234
+ const out = new CSRGraph(this.vertex_count, this.adjacency_length);
235
+ out.copy(this);
236
+ return out;
237
+ }
238
+
239
+ /**
240
+ * Structural equality — same shape and same buffer contents.
241
+ * @param {CSRGraph} other
242
+ * @returns {boolean}
243
+ */
244
+ equals(other) {
245
+ if (this === other) {
246
+ return true;
247
+ }
248
+ if (other === null || other === undefined || other.isCSRGraph !== true) {
249
+ return false;
250
+ }
251
+ if (this.vertex_count !== other.vertex_count) {
252
+ return false;
253
+ }
254
+ if (this.adjacency_length !== other.adjacency_length) {
255
+ return false;
256
+ }
257
+ if (this.total_vertex_weight !== other.total_vertex_weight) {
258
+ return false;
259
+ }
260
+ return is_typed_array_equals(
261
+ new Uint32Array(this.__data_buffer),
262
+ new Uint32Array(other.__data_buffer)
263
+ );
264
+ }
265
+
266
+ /**
267
+ * 32-bit hash mixing the metadata fields and the entire buffer contents.
268
+ * Uses meep's standard `(h*31 + element)` convention via `uint32_array_hash`.
269
+ *
270
+ * @returns {number}
271
+ */
272
+ hash() {
273
+ let h = this.vertex_count;
274
+ h = ((h << 5) - h) + this.adjacency_length;
275
+ h = ((h << 5) - h) + this.total_vertex_weight;
276
+ const buffer_view = new Uint32Array(this.__data_buffer);
277
+ const buffer_hash = uint32_array_hash(buffer_view, 0, buffer_view.length);
278
+ h = ((h << 5) - h) + buffer_hash;
279
+ return h | 0;
280
+ }
281
+
282
+ /**
283
+ * Construct a CSRGraph from existing arrays by COPYING into a new
284
+ * shared-buffer instance. The input arrays are not retained.
285
+ *
286
+ * `vertex_weights` is optional — if not provided, the new graph keeps the
287
+ * default all-1s vertex weights and `total_vertex_weight = vertex_count`.
288
+ *
289
+ * @param {number} vertex_count
290
+ * @param {ArrayLike<number>} edge_addresses length vertex_count + 1
291
+ * @param {ArrayLike<number>} adjacency length edge_addresses[vertex_count]
292
+ * @param {ArrayLike<number>} edge_weights parallel to adjacency
293
+ * @param {ArrayLike<number>} [vertex_weights] optional; length vertex_count
294
+ * @returns {CSRGraph}
295
+ */
296
+ static fromArrays(vertex_count, edge_addresses, adjacency, edge_weights, vertex_weights) {
297
+ const adjacency_length = edge_addresses[vertex_count];
298
+ const out = new CSRGraph(vertex_count, adjacency_length);
299
+
300
+ out.edge_addresses.set(edge_addresses);
301
+ out.adjacency.set(adjacency);
302
+ out.edge_weights.set(edge_weights);
303
+
304
+ if (vertex_weights !== undefined) {
305
+ out.vertex_weights.set(vertex_weights);
306
+ out.refresh_total_vertex_weight();
307
+ }
308
+
309
+ return out;
310
+ }
311
+ }
312
+
313
+ /**
314
+ * Type-check marker — avoids `instanceof` across module realms while still
315
+ * letting us assert "is a CSRGraph" cheaply.
316
+ * @readonly
317
+ * @type {boolean}
318
+ */
319
+ CSRGraph.prototype.isCSRGraph = true;
@@ -1,4 +1,16 @@
1
1
  /**
2
+ * @deprecated Delegates to the deprecated `metis_cluster_bs`, which uses the
3
+ * WASM-backed `Metis.INSTANCE`. Replace with the native equivalent:
4
+ *
5
+ * import { metis_partition_kway } from "./native/metis_partition_kway.js";
6
+ * import { mesh_to_metis_graph } from "./mesh_to_metis_graph.js";
7
+ *
8
+ * const csr = mesh_to_metis_graph(Array.from(mesh.getFaces()));
9
+ * const k = Math.ceil(face_count / patch_size);
10
+ * const partition = metis_partition_kway(face_count, k, csr.edge_addresses,
11
+ * csr.adjacency, csr.edge_weights, { seed: 0xCAFE });
12
+ *
13
+ * The native call is synchronous, so this becomes a non-async wrapper.
2
14
  *
3
15
  * @param {Uint32Array} result
4
16
  * @param {TopoMesh} mesh
@@ -1 +1 @@
1
- {"version":3,"file":"cluster_mesh_metis.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/metis/cluster_mesh_metis.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,2CALW,WAAW,8BAEX,MAAM,GACJ,MAAM,CAqBlB"}
1
+ {"version":3,"file":"cluster_mesh_metis.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/metis/cluster_mesh_metis.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CALW,WAAW,8BAEX,MAAM,GACJ,MAAM,CAqBlB"}
@@ -2,6 +2,18 @@ import { mesh_to_metis_graph } from "./mesh_to_metis_graph.js";
2
2
  import { metis_cluster_bs } from "./metis_cluster_bs.js";
3
3
 
4
4
  /**
5
+ * @deprecated Delegates to the deprecated `metis_cluster_bs`, which uses the
6
+ * WASM-backed `Metis.INSTANCE`. Replace with the native equivalent:
7
+ *
8
+ * import { metis_partition_kway } from "./native/metis_partition_kway.js";
9
+ * import { mesh_to_metis_graph } from "./mesh_to_metis_graph.js";
10
+ *
11
+ * const csr = mesh_to_metis_graph(Array.from(mesh.getFaces()));
12
+ * const k = Math.ceil(face_count / patch_size);
13
+ * const partition = metis_partition_kway(face_count, k, csr.edge_addresses,
14
+ * csr.adjacency, csr.edge_weights, { seed: 0xCAFE });
15
+ *
16
+ * The native call is synchronous, so this becomes a non-async wrapper.
5
17
  *
6
18
  * @param {Uint32Array} result
7
19
  * @param {TopoMesh} mesh
@@ -1,6 +1,25 @@
1
+ /**
2
+ * @deprecated Use the native JS implementation at
3
+ * `./native/metis_partition_kway.js` instead.
4
+ *
5
+ * This class wraps the WASM-compiled METIS via a worker. It depends on
6
+ * `libs/metis/metis.js` being served by the host app and on a `micron_partition`
7
+ * global being defined inside that script. The native equivalent has no such
8
+ * dependencies, is synchronous (no worker round-trip), and tracks the latest
9
+ * `KarypisLab/METIS` master rather than the 2013-era 5.1.0 release.
10
+ *
11
+ * Migration:
12
+ * - Was: `await Metis.INSTANCE.partition(nv, k, xadj, adj, ewgt, options)`
13
+ * - Now: `metis_partition_kway(nv, k, xadj, adj, ewgt, { seed, niter, ufactor })`
14
+ *
15
+ * The native function returns the partition array directly (synchronously);
16
+ * wrap in `Promise.resolve(...)` if you need a promise-returning surface.
17
+ */
1
18
  export class Metis {
2
19
  service: OnDemandWorkerManager;
3
20
  /**
21
+ * @deprecated Use `metis_partition_kway` from
22
+ * `./native/metis_partition_kway.js` instead.
4
23
  *
5
24
  * @param {number} n_vertices
6
25
  * @param {number} n_parts
@@ -1 +1 @@
1
- {"version":3,"file":"metis.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/metis/metis.js"],"names":[],"mappings":"AAIA;IAQQ,+BAAsB;IAG1B;;;;;;;;;OASG;IACH,sBARW,MAAM,WACN,MAAM,kBACN,WAAW,aACX,WAAW,gBACX,WAAW,2BAET,UAAU,CAkBtB;CACJ;;kBAKS,KAAK;;sCA/CuB,+CAA+C"}
1
+ {"version":3,"file":"metis.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/metis/metis.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AACH;IAQQ,+BAAsB;IAG1B;;;;;;;;;;;OAWG;IACH,sBARW,MAAM,WACN,MAAM,kBACN,WAAW,aACX,WAAW,gBACX,WAAW,2BAET,UAAU,CAkBtB;CACJ;;kBAMS,KAAK;;sCAnEuB,+CAA+C"}
@@ -2,6 +2,23 @@ import { OnDemandWorkerManager } from "../../process/worker/OnDemandWorkerManage
2
2
  import WorkerBuilder from "../../process/worker/WorkerBuilder.js";
3
3
 
4
4
 
5
+ /**
6
+ * @deprecated Use the native JS implementation at
7
+ * `./native/metis_partition_kway.js` instead.
8
+ *
9
+ * This class wraps the WASM-compiled METIS via a worker. It depends on
10
+ * `libs/metis/metis.js` being served by the host app and on a `micron_partition`
11
+ * global being defined inside that script. The native equivalent has no such
12
+ * dependencies, is synchronous (no worker round-trip), and tracks the latest
13
+ * `KarypisLab/METIS` master rather than the 2013-era 5.1.0 release.
14
+ *
15
+ * Migration:
16
+ * - Was: `await Metis.INSTANCE.partition(nv, k, xadj, adj, ewgt, options)`
17
+ * - Now: `metis_partition_kway(nv, k, xadj, adj, ewgt, { seed, niter, ufactor })`
18
+ *
19
+ * The native function returns the partition array directly (synchronously);
20
+ * wrap in `Promise.resolve(...)` if you need a promise-returning surface.
21
+ */
5
22
  export class Metis {
6
23
  constructor() {
7
24
  const wb = new WorkerBuilder();
@@ -14,6 +31,8 @@ export class Metis {
14
31
  }
15
32
 
16
33
  /**
34
+ * @deprecated Use `metis_partition_kway` from
35
+ * `./native/metis_partition_kway.js` instead.
17
36
  *
18
37
  * @param {number} n_vertices
19
38
  * @param {number} n_parts
@@ -44,6 +63,7 @@ export class Metis {
44
63
 
45
64
  /**
46
65
  * Singleton instance
66
+ * @deprecated Use the native implementation at `./native/metis_partition_kway.js`.
47
67
  * @readonly
48
68
  * @type {Metis}
49
69
  */
@@ -1,4 +1,15 @@
1
1
  /**
2
+ * @deprecated Calls the WASM-backed `Metis.INSTANCE`, which is deprecated. Build
3
+ * the equivalent on top of `metis_partition_kway` from
4
+ * `./native/metis_partition_kway.js` — the binary-search-on-k pattern here is
5
+ * independent of the partitioner, so the same loop body works against either
6
+ * backend.
7
+ *
8
+ * The native partitioner does roughly the same balance enforcement internally
9
+ * via FM with `ub_factor = 1.03`, so the binary search typically converges in
10
+ * 1-2 passes; for many use cases a single `metis_partition_kway` call with
11
+ * `k = Math.ceil(node_count / patch_size)` is sufficient and the BS wrapper is
12
+ * unnecessary.
2
13
  *
3
14
  * @param {Uint32Array} result
4
15
  * @param {number} node_count
@@ -1 +1 @@
1
- {"version":3,"file":"metis_cluster_bs.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/metis/metis_cluster_bs.js"],"names":[],"mappings":"AASA;;;;;;;;;GASG;AACH,yCARW,WAAW,cACX,MAAM,kBACN,WAAW,oBACX,WAAW,uBACX,WAAW,cACX,MAAM,GACJ,QAAQ,MAAM,CAAC,CA6G3B"}
1
+ {"version":3,"file":"metis_cluster_bs.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/metis/metis_cluster_bs.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,yCARW,WAAW,cACX,MAAM,kBACN,WAAW,oBACX,WAAW,uBACX,WAAW,cACX,MAAM,GACJ,QAAQ,MAAM,CAAC,CA6G3B"}
@@ -8,6 +8,17 @@ import { metis_options } from "./metis_options.js";
8
8
  const MAX_STEPS = 50;
9
9
 
10
10
  /**
11
+ * @deprecated Calls the WASM-backed `Metis.INSTANCE`, which is deprecated. Build
12
+ * the equivalent on top of `metis_partition_kway` from
13
+ * `./native/metis_partition_kway.js` — the binary-search-on-k pattern here is
14
+ * independent of the partitioner, so the same loop body works against either
15
+ * backend.
16
+ *
17
+ * The native partitioner does roughly the same balance enforcement internally
18
+ * via FM with `ub_factor = 1.03`, so the binary search typically converges in
19
+ * 1-2 passes; for many use cases a single `metis_partition_kway` call with
20
+ * `k = Math.ceil(node_count / patch_size)` is sufficient and the BS wrapper is
21
+ * unnecessary.
11
22
  *
12
23
  * @param {Uint32Array} result
13
24
  * @param {number} node_count
@@ -1,6 +1,21 @@
1
1
  /**
2
- * See metis.h for more details
3
- * -1 is the used to signal absence of value, in which case a default will be used
2
+ * @deprecated Used only by the deprecated WASM-backed `Metis` class. The
3
+ * native partitioner at `./native/metis_partition_kway.js` accepts a plain
4
+ * object literal instead:
5
+ *
6
+ * metis_partition_kway(nv, k, xadj, adj, ewgt, {
7
+ * seed: 0xCAFE, // integer; default 0
8
+ * niter: 10, // FM passes per level
9
+ * ufactor: 30, // imbalance per-mille
10
+ * initial_partition_strategy: 'recursive_bisection' // or 'bfs'
11
+ * });
12
+ *
13
+ * Most `metis.h` options (ctype, iptype, rtype, no2hop, minconn, contig,
14
+ * compress, ncuts, pfactor, etc.) are not exposed by the native impl because
15
+ * those code paths aren't implemented. If you need one, file a request.
16
+ *
17
+ * See metis.h for more details on the original fields.
18
+ * -1 is used to signal absence of value, in which case a default will be used.
4
19
  */
5
20
  export class metis_options {
6
21
  ptype: number;
@@ -1 +1 @@
1
- {"version":3,"file":"metis_options.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/metis/metis_options.js"],"names":[],"mappings":"AACA;;;GAGG;AACH;IACI,cAAW;IACX,gBAAa;IACb;;;;;OAKG;IACH,OAFU,MAAM,CAEL;IACX,eAAY;IACZ,cAAW;IACX,eAAY;IACZ,cAAW;IACX,cAAW;IACX;;;;OAIG;IACH,MAFU,MAAM,CAEN;IACV,eAAY;IACZ,gBAAa;IACb,eAAY;IACZ,gBAAa;IACb,gBAAa;IACb,cAAW;IACX,gBAAa;IACb,kBAAe;IACf,iBAAe;CAClB"}
1
+ {"version":3,"file":"metis_options.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/metis/metis_options.js"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;GAkBG;AACH;IACI,cAAW;IACX,gBAAa;IACb;;;;;OAKG;IACH,OAFU,MAAM,CAEL;IACX,eAAY;IACZ,cAAW;IACX,eAAY;IACZ,cAAW;IACX,cAAW;IACX;;;;OAIG;IACH,MAFU,MAAM,CAEN;IACV,eAAY;IACZ,gBAAa;IACb,eAAY;IACZ,gBAAa;IACb,gBAAa;IACb,cAAW;IACX,gBAAa;IACb,kBAAe;IACf,iBAAe;CAClB"}
@@ -1,7 +1,22 @@
1
1
 
2
2
  /**
3
- * See metis.h for more details
4
- * -1 is the used to signal absence of value, in which case a default will be used
3
+ * @deprecated Used only by the deprecated WASM-backed `Metis` class. The
4
+ * native partitioner at `./native/metis_partition_kway.js` accepts a plain
5
+ * object literal instead:
6
+ *
7
+ * metis_partition_kway(nv, k, xadj, adj, ewgt, {
8
+ * seed: 0xCAFE, // integer; default 0
9
+ * niter: 10, // FM passes per level
10
+ * ufactor: 30, // imbalance per-mille
11
+ * initial_partition_strategy: 'recursive_bisection' // or 'bfs'
12
+ * });
13
+ *
14
+ * Most `metis.h` options (ctype, iptype, rtype, no2hop, minconn, contig,
15
+ * compress, ncuts, pfactor, etc.) are not exposed by the native impl because
16
+ * those code paths aren't implemented. If you need one, file a request.
17
+ *
18
+ * See metis.h for more details on the original fields.
19
+ * -1 is used to signal absence of value, in which case a default will be used.
5
20
  */
6
21
  export class metis_options {
7
22
  ptype = -1;
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Holds one graph level of the METIS multilevel pipeline.
3
+ *
4
+ * Extends `CSRGraph` — the CSR adjacency (`edge_addresses`, `adjacency`,
5
+ * `edge_weights`, `vertex_weights`) lives in a single shared `ArrayBuffer`.
6
+ *
7
+ * Adds three groups of fields on top of CSR:
8
+ *
9
+ * - **Multilevel link**: `coarse_vertex_map`, `coarser_graph`, `finer_graph`.
10
+ * `coarse_vertex_map[v]` is the id of v's super-vertex one level coarser.
11
+ *
12
+ * - **Partition state**: `vertex_partition`, `partition_weights`, `current_cut`,
13
+ * plus the boundary list (`boundary_count` / `boundary_vertices` /
14
+ * `boundary_position_of_vertex`).
15
+ *
16
+ * - **K-way refinement bookkeeping**: parallel `internal_degree`,
17
+ * `external_degree`, `neighbor_partition_count`, `neighbor_partition_offset`
18
+ * arrays plus the shared `neighbor_partition_pool` of `(partition_id, edge_weight)`
19
+ * records.
20
+ *
21
+ * Partition / refinement arrays are allocated lazily by
22
+ * `allocate_partition_state(partition_count)` because their sizes depend on `k`,
23
+ * which isn't known at CSR construction time and isn't needed during the
24
+ * coarsening or initial-partitioning phases.
25
+ *
26
+ * Volume objective, multi-constraint balance, separator data, and the various
27
+ * minconn/contig auxiliary fields from libmetis `graph_t` are intentionally
28
+ * omitted — they're not on the path we currently use.
29
+ */
30
+ export class MetisGraph extends CSRGraph {
31
+ /**
32
+ * Coarsening map: `coarse_vertex_map[v]` is the id of v's super-vertex
33
+ * in `coarser_graph`. Null until coarsening runs at this level.
34
+ * @type {Uint32Array|null}
35
+ */
36
+ coarse_vertex_map: Uint32Array | null;
37
+ /** @type {MetisGraph|null} */
38
+ coarser_graph: MetisGraph | null;
39
+ /** @type {MetisGraph|null} */
40
+ finer_graph: MetisGraph | null;
41
+ /**
42
+ * Partition id per vertex, in [0, nparts).
43
+ * @type {Uint32Array|null}
44
+ */
45
+ vertex_partition: Uint32Array | null;
46
+ /**
47
+ * Per-partition total weight (sum of `vertex_weights` for vertices
48
+ * currently assigned to that partition).
49
+ * @type {Uint32Array|null}
50
+ */
51
+ partition_weights: Uint32Array | null;
52
+ /**
53
+ * Current edge cut: sum of weights of edges whose endpoints lie in
54
+ * different partitions. Tracked incrementally during refinement.
55
+ * @type {number}
56
+ */
57
+ current_cut: number;
58
+ /**
59
+ * Number of vertices currently on a partition boundary.
60
+ * @type {number}
61
+ */
62
+ boundary_count: number;
63
+ /**
64
+ * Boundary list: the first `boundary_count` entries are vertex ids on
65
+ * a partition boundary. Order is not meaningful (entries get swapped
66
+ * with the tail on removal).
67
+ * @type {Uint32Array|null}
68
+ */
69
+ boundary_vertices: Uint32Array | null;
70
+ /**
71
+ * Inverse of `boundary_vertices`: `boundary_position_of_vertex[v]` is
72
+ * the index of v inside `boundary_vertices`, or -1 if v is interior.
73
+ * Int32Array because of the -1 sentinel.
74
+ * @type {Int32Array|null}
75
+ */
76
+ boundary_position_of_vertex: Int32Array | null;
77
+ /**
78
+ * Internal degree: sum of edge weights from v to vertices in v's own
79
+ * partition. ("id" in METIS / FM literature.)
80
+ * @type {Uint32Array|null}
81
+ */
82
+ internal_degree: Uint32Array | null;
83
+ /**
84
+ * External degree: sum of edge weights from v to vertices in other
85
+ * partitions. ("ed" in METIS / FM literature.)
86
+ * @type {Uint32Array|null}
87
+ */
88
+ external_degree: Uint32Array | null;
89
+ /**
90
+ * Number of distinct neighbouring partitions reachable from v through
91
+ * its edges. ("nnbrs" in METIS.)
92
+ * @type {Uint32Array|null}
93
+ */
94
+ neighbor_partition_count: Uint32Array | null;
95
+ /**
96
+ * Offset (in record units) into `neighbor_partition_pool` for v's list
97
+ * of (partition_id, edge_weight) entries. -1 if v is interior and no
98
+ * pool slot has been allocated yet. ("inbr" in METIS.)
99
+ * @type {Int32Array|null}
100
+ */
101
+ neighbor_partition_offset: Int32Array | null;
102
+ /**
103
+ * Pool of per-(vertex, neighbour-partition) records. Each record is
104
+ * 8 bytes: two uint32 words holding `(partition_id, edge_weight)`.
105
+ * Access record `r` via:
106
+ * const word_base = neighbor_partition_pool.element_word(r);
107
+ * const partition_id = data_uint32[word_base + 2*k ];
108
+ * const edge_weight = data_uint32[word_base + 2*k + 1];
109
+ * where `k` is in `[0, neighbor_partition_count[v])`.
110
+ *
111
+ * ("cnbrpool" in METIS.)
112
+ *
113
+ * @type {BinaryElementPool|null}
114
+ */
115
+ neighbor_partition_pool: BinaryElementPool | null;
116
+ /**
117
+ * Allocate the k-way refinement bookkeeping arrays. Must be called before
118
+ * any of the refinement routines runs on this graph.
119
+ *
120
+ * **`vertex_partition` is preserved** if it's already set with the correct
121
+ * length. This matters when the initial-partition phase has already
122
+ * computed an assignment (e.g. recursive bisection leaves the result in
123
+ * `vertex_partition` as a buffer that's now owned by this graph) — we
124
+ * don't want to allocate a fresh array just to copy the existing one in.
125
+ * If `vertex_partition` is `null` or the wrong size, it gets allocated
126
+ * fresh and zero-filled.
127
+ *
128
+ * Everything else (`partition_weights`, `internal_degree`, etc.) is always
129
+ * allocated fresh because callers expect a clean refinement-state baseline.
130
+ *
131
+ * @param {number} partition_count
132
+ */
133
+ allocate_partition_state(partition_count: number): void;
134
+ /**
135
+ * Reset the partition / refinement bookkeeping in place, leaving the CSR
136
+ * adjacency and `coarse_vertex_map` untouched. Used between FM passes when
137
+ * we want to recompute from a fresh `vertex_partition`.
138
+ */
139
+ reset_refinement_state(): void;
140
+ isMetisGraph: boolean;
141
+ }
142
+ import { CSRGraph } from "../../csr/CSRGraph.js";
143
+ import { BinaryElementPool } from "../../../geom/3d/topology/struct/binary/BinaryElementPool.js";
144
+ //# sourceMappingURL=MetisGraph.d.ts.map