@graphty/graph-samples 0.0.1 → 0.1.2

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 (407) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +123 -0
  3. package/README.md +190 -1
  4. package/dist/chunks/build-DdCe60t3.js +47 -0
  5. package/dist/chunks/build-DdCe60t3.js.map +1 -0
  6. package/dist/chunks/meta-B6toBzaa.js +19 -0
  7. package/dist/chunks/meta-B6toBzaa.js.map +1 -0
  8. package/dist/chunks/meta-BM_YIhlA.js +28 -0
  9. package/dist/chunks/meta-BM_YIhlA.js.map +1 -0
  10. package/dist/chunks/meta-BMmtUpPx.js +30 -0
  11. package/dist/chunks/meta-BMmtUpPx.js.map +1 -0
  12. package/dist/chunks/meta-BXC7oi86.js +22 -0
  13. package/dist/chunks/meta-BXC7oi86.js.map +1 -0
  14. package/dist/chunks/meta-BaFPvhc1.js +19 -0
  15. package/dist/chunks/meta-BaFPvhc1.js.map +1 -0
  16. package/dist/chunks/meta-C58v1Oy0.js +28 -0
  17. package/dist/chunks/meta-C58v1Oy0.js.map +1 -0
  18. package/dist/chunks/meta-CQRXyexG.js +23 -0
  19. package/dist/chunks/meta-CQRXyexG.js.map +1 -0
  20. package/dist/chunks/meta-DrgM1eS0.js +23 -0
  21. package/dist/chunks/meta-DrgM1eS0.js.map +1 -0
  22. package/dist/chunks/meta-IhoaDXAV.js +19 -0
  23. package/dist/chunks/meta-IhoaDXAV.js.map +1 -0
  24. package/dist/chunks/meta-MQPbBUUB.js +29 -0
  25. package/dist/chunks/meta-MQPbBUUB.js.map +1 -0
  26. package/dist/chunks/meta-Qp4HNYAZ.js +24 -0
  27. package/dist/chunks/meta-Qp4HNYAZ.js.map +1 -0
  28. package/dist/chunks/meta-mns0uFIW.js +19 -0
  29. package/dist/chunks/meta-mns0uFIW.js.map +1 -0
  30. package/dist/datasets/celegans-neural.d.ts +1 -0
  31. package/dist/datasets/celegans-neural.js +7359 -0
  32. package/dist/datasets/celegans-neural.js.map +1 -0
  33. package/dist/datasets/contiguous-usa.d.ts +1 -0
  34. package/dist/datasets/contiguous-usa.js +501 -0
  35. package/dist/datasets/contiguous-usa.js.map +1 -0
  36. package/dist/datasets/davis-southern-women.d.ts +1 -0
  37. package/dist/datasets/davis-southern-women.js +235 -0
  38. package/dist/datasets/davis-southern-women.js.map +1 -0
  39. package/dist/datasets/dolphins.d.ts +1 -0
  40. package/dist/datasets/dolphins.js +406 -0
  41. package/dist/datasets/dolphins.js.map +1 -0
  42. package/dist/datasets/florentine-families.d.ts +1 -0
  43. package/dist/datasets/florentine-families.js +75 -0
  44. package/dist/datasets/florentine-families.js.map +1 -0
  45. package/dist/datasets/football.d.ts +1 -0
  46. package/dist/datasets/football.js +1508 -0
  47. package/dist/datasets/football.js.map +1 -0
  48. package/dist/datasets/karate.d.ts +1 -0
  49. package/dist/datasets/karate.js +295 -0
  50. package/dist/datasets/karate.js.map +1 -0
  51. package/dist/datasets/knuth-miles.d.ts +1 -0
  52. package/dist/datasets/knuth-miles.js +24933 -0
  53. package/dist/datasets/knuth-miles.js.map +1 -0
  54. package/dist/datasets/les-miserables.d.ts +1 -0
  55. package/dist/datasets/les-miserables.js +860 -0
  56. package/dist/datasets/les-miserables.js.map +1 -0
  57. package/dist/datasets/openflights.d.ts +1 -0
  58. package/dist/datasets/openflights.js +130277 -0
  59. package/dist/datasets/openflights.js.map +1 -0
  60. package/dist/datasets/political-blogs.d.ts +1 -0
  61. package/dist/datasets/political-blogs.js +42551 -0
  62. package/dist/datasets/political-blogs.js.map +1 -0
  63. package/dist/datasets/political-books.d.ts +1 -0
  64. package/dist/datasets/political-books.js +1124 -0
  65. package/dist/datasets/political-books.js.map +1 -0
  66. package/dist/generators.d.ts +1 -0
  67. package/dist/generators.js +4496 -0
  68. package/dist/generators.js.map +1 -0
  69. package/dist/graph-samples.d.ts +1 -0
  70. package/dist/graph-samples.js +142 -0
  71. package/dist/graph-samples.js.map +1 -0
  72. package/dist/src/datasets/build.d.ts +89 -0
  73. package/dist/src/datasets/build.d.ts.map +1 -0
  74. package/dist/src/datasets/build.js +53 -0
  75. package/dist/src/datasets/build.js.map +1 -0
  76. package/dist/src/datasets/catalog.d.ts +8 -0
  77. package/dist/src/datasets/catalog.d.ts.map +1 -0
  78. package/dist/src/datasets/catalog.js +34 -0
  79. package/dist/src/datasets/catalog.js.map +1 -0
  80. package/dist/src/datasets/celegans-neural/data.d.ts +3 -0
  81. package/dist/src/datasets/celegans-neural/data.d.ts.map +1 -0
  82. package/dist/src/datasets/celegans-neural/data.js +573 -0
  83. package/dist/src/datasets/celegans-neural/data.js.map +1 -0
  84. package/dist/src/datasets/celegans-neural/index.d.ts +11 -0
  85. package/dist/src/datasets/celegans-neural/index.d.ts.map +1 -0
  86. package/dist/src/datasets/celegans-neural/index.js +14 -0
  87. package/dist/src/datasets/celegans-neural/index.js.map +1 -0
  88. package/dist/src/datasets/celegans-neural/meta.d.ts +4 -0
  89. package/dist/src/datasets/celegans-neural/meta.d.ts.map +1 -0
  90. package/dist/src/datasets/celegans-neural/meta.js +21 -0
  91. package/dist/src/datasets/celegans-neural/meta.js.map +1 -0
  92. package/dist/src/datasets/contiguous-usa/data.d.ts +3 -0
  93. package/dist/src/datasets/contiguous-usa/data.d.ts.map +1 -0
  94. package/dist/src/datasets/contiguous-usa/data.js +162 -0
  95. package/dist/src/datasets/contiguous-usa/data.js.map +1 -0
  96. package/dist/src/datasets/contiguous-usa/index.d.ts +11 -0
  97. package/dist/src/datasets/contiguous-usa/index.d.ts.map +1 -0
  98. package/dist/src/datasets/contiguous-usa/index.js +14 -0
  99. package/dist/src/datasets/contiguous-usa/index.js.map +1 -0
  100. package/dist/src/datasets/contiguous-usa/meta.d.ts +4 -0
  101. package/dist/src/datasets/contiguous-usa/meta.d.ts.map +1 -0
  102. package/dist/src/datasets/contiguous-usa/meta.js +27 -0
  103. package/dist/src/datasets/contiguous-usa/meta.js.map +1 -0
  104. package/dist/src/datasets/davis-southern-women/data.d.ts +3 -0
  105. package/dist/src/datasets/davis-southern-women/data.d.ts.map +1 -0
  106. package/dist/src/datasets/davis-southern-women/data.js +57 -0
  107. package/dist/src/datasets/davis-southern-women/data.js.map +1 -0
  108. package/dist/src/datasets/davis-southern-women/index.d.ts +11 -0
  109. package/dist/src/datasets/davis-southern-women/index.d.ts.map +1 -0
  110. package/dist/src/datasets/davis-southern-women/index.js +14 -0
  111. package/dist/src/datasets/davis-southern-women/index.js.map +1 -0
  112. package/dist/src/datasets/davis-southern-women/meta.d.ts +4 -0
  113. package/dist/src/datasets/davis-southern-women/meta.d.ts.map +1 -0
  114. package/dist/src/datasets/davis-southern-women/meta.js +17 -0
  115. package/dist/src/datasets/davis-southern-women/meta.js.map +1 -0
  116. package/dist/src/datasets/dolphins/data.d.ts +3 -0
  117. package/dist/src/datasets/dolphins/data.d.ts.map +1 -0
  118. package/dist/src/datasets/dolphins/data.js +93 -0
  119. package/dist/src/datasets/dolphins/data.js.map +1 -0
  120. package/dist/src/datasets/dolphins/index.d.ts +11 -0
  121. package/dist/src/datasets/dolphins/index.d.ts.map +1 -0
  122. package/dist/src/datasets/dolphins/index.js +14 -0
  123. package/dist/src/datasets/dolphins/index.js.map +1 -0
  124. package/dist/src/datasets/dolphins/meta.d.ts +4 -0
  125. package/dist/src/datasets/dolphins/meta.d.ts.map +1 -0
  126. package/dist/src/datasets/dolphins/meta.js +17 -0
  127. package/dist/src/datasets/dolphins/meta.js.map +1 -0
  128. package/dist/src/datasets/florentine-families/data.d.ts +3 -0
  129. package/dist/src/datasets/florentine-families/data.d.ts.map +1 -0
  130. package/dist/src/datasets/florentine-families/data.js +31 -0
  131. package/dist/src/datasets/florentine-families/data.js.map +1 -0
  132. package/dist/src/datasets/florentine-families/index.d.ts +11 -0
  133. package/dist/src/datasets/florentine-families/index.d.ts.map +1 -0
  134. package/dist/src/datasets/florentine-families/index.js +14 -0
  135. package/dist/src/datasets/florentine-families/index.js.map +1 -0
  136. package/dist/src/datasets/florentine-families/meta.d.ts +4 -0
  137. package/dist/src/datasets/florentine-families/meta.d.ts.map +1 -0
  138. package/dist/src/datasets/florentine-families/meta.js +17 -0
  139. package/dist/src/datasets/florentine-families/meta.js.map +1 -0
  140. package/dist/src/datasets/football/data.d.ts +3 -0
  141. package/dist/src/datasets/football/data.d.ts.map +1 -0
  142. package/dist/src/datasets/football/data.js +210 -0
  143. package/dist/src/datasets/football/data.js.map +1 -0
  144. package/dist/src/datasets/football/index.d.ts +11 -0
  145. package/dist/src/datasets/football/index.d.ts.map +1 -0
  146. package/dist/src/datasets/football/index.js +14 -0
  147. package/dist/src/datasets/football/index.js.map +1 -0
  148. package/dist/src/datasets/football/meta.d.ts +4 -0
  149. package/dist/src/datasets/football/meta.d.ts.map +1 -0
  150. package/dist/src/datasets/football/meta.js +17 -0
  151. package/dist/src/datasets/football/meta.js.map +1 -0
  152. package/dist/src/datasets/hosted.d.ts +7 -0
  153. package/dist/src/datasets/hosted.d.ts.map +1 -0
  154. package/dist/src/datasets/hosted.js +80 -0
  155. package/dist/src/datasets/hosted.js.map +1 -0
  156. package/dist/src/datasets/karate/data.d.ts +3 -0
  157. package/dist/src/datasets/karate/data.d.ts.map +1 -0
  158. package/dist/src/datasets/karate/data.js +30 -0
  159. package/dist/src/datasets/karate/data.js.map +1 -0
  160. package/dist/src/datasets/karate/index.d.ts +11 -0
  161. package/dist/src/datasets/karate/index.d.ts.map +1 -0
  162. package/dist/src/datasets/karate/index.js +14 -0
  163. package/dist/src/datasets/karate/index.js.map +1 -0
  164. package/dist/src/datasets/karate/meta.d.ts +4 -0
  165. package/dist/src/datasets/karate/meta.d.ts.map +1 -0
  166. package/dist/src/datasets/karate/meta.js +22 -0
  167. package/dist/src/datasets/karate/meta.js.map +1 -0
  168. package/dist/src/datasets/knuth-miles/data.d.ts +3 -0
  169. package/dist/src/datasets/knuth-miles/data.d.ts.map +1 -0
  170. package/dist/src/datasets/knuth-miles/data.js +1203 -0
  171. package/dist/src/datasets/knuth-miles/data.js.map +1 -0
  172. package/dist/src/datasets/knuth-miles/index.d.ts +11 -0
  173. package/dist/src/datasets/knuth-miles/index.d.ts.map +1 -0
  174. package/dist/src/datasets/knuth-miles/index.js +14 -0
  175. package/dist/src/datasets/knuth-miles/index.js.map +1 -0
  176. package/dist/src/datasets/knuth-miles/meta.d.ts +4 -0
  177. package/dist/src/datasets/knuth-miles/meta.d.ts.map +1 -0
  178. package/dist/src/datasets/knuth-miles/meta.js +26 -0
  179. package/dist/src/datasets/knuth-miles/meta.js.map +1 -0
  180. package/dist/src/datasets/les-miserables/data.d.ts +3 -0
  181. package/dist/src/datasets/les-miserables/data.d.ts.map +1 -0
  182. package/dist/src/datasets/les-miserables/data.js +117 -0
  183. package/dist/src/datasets/les-miserables/data.js.map +1 -0
  184. package/dist/src/datasets/les-miserables/index.d.ts +11 -0
  185. package/dist/src/datasets/les-miserables/index.d.ts.map +1 -0
  186. package/dist/src/datasets/les-miserables/index.js +14 -0
  187. package/dist/src/datasets/les-miserables/index.js.map +1 -0
  188. package/dist/src/datasets/les-miserables/meta.d.ts +4 -0
  189. package/dist/src/datasets/les-miserables/meta.d.ts.map +1 -0
  190. package/dist/src/datasets/les-miserables/meta.js +21 -0
  191. package/dist/src/datasets/les-miserables/meta.js.map +1 -0
  192. package/dist/src/datasets/openflights/data.d.ts +3 -0
  193. package/dist/src/datasets/openflights/data.d.ts.map +1 -0
  194. package/dist/src/datasets/openflights/data.js +15457 -0
  195. package/dist/src/datasets/openflights/data.js.map +1 -0
  196. package/dist/src/datasets/openflights/index.d.ts +11 -0
  197. package/dist/src/datasets/openflights/index.d.ts.map +1 -0
  198. package/dist/src/datasets/openflights/index.js +14 -0
  199. package/dist/src/datasets/openflights/index.js.map +1 -0
  200. package/dist/src/datasets/openflights/meta.d.ts +4 -0
  201. package/dist/src/datasets/openflights/meta.d.ts.map +1 -0
  202. package/dist/src/datasets/openflights/meta.js +28 -0
  203. package/dist/src/datasets/openflights/meta.js.map +1 -0
  204. package/dist/src/datasets/political-blogs/data.d.ts +3 -0
  205. package/dist/src/datasets/political-blogs/data.d.ts.map +1 -0
  206. package/dist/src/datasets/political-blogs/data.js +4857 -0
  207. package/dist/src/datasets/political-blogs/data.js.map +1 -0
  208. package/dist/src/datasets/political-blogs/index.d.ts +11 -0
  209. package/dist/src/datasets/political-blogs/index.d.ts.map +1 -0
  210. package/dist/src/datasets/political-blogs/index.js +14 -0
  211. package/dist/src/datasets/political-blogs/index.js.map +1 -0
  212. package/dist/src/datasets/political-blogs/meta.d.ts +4 -0
  213. package/dist/src/datasets/political-blogs/meta.d.ts.map +1 -0
  214. package/dist/src/datasets/political-blogs/meta.js +26 -0
  215. package/dist/src/datasets/political-blogs/meta.js.map +1 -0
  216. package/dist/src/datasets/political-books/data.d.ts +3 -0
  217. package/dist/src/datasets/political-books/data.d.ts.map +1 -0
  218. package/dist/src/datasets/political-books/data.js +165 -0
  219. package/dist/src/datasets/political-books/data.js.map +1 -0
  220. package/dist/src/datasets/political-books/index.d.ts +11 -0
  221. package/dist/src/datasets/political-books/index.d.ts.map +1 -0
  222. package/dist/src/datasets/political-books/index.js +14 -0
  223. package/dist/src/datasets/political-books/index.js.map +1 -0
  224. package/dist/src/datasets/political-books/meta.d.ts +4 -0
  225. package/dist/src/datasets/political-books/meta.d.ts.map +1 -0
  226. package/dist/src/datasets/political-books/meta.js +20 -0
  227. package/dist/src/datasets/political-books/meta.js.map +1 -0
  228. package/dist/src/datasets/remote.d.ts +27 -0
  229. package/dist/src/datasets/remote.d.ts.map +1 -0
  230. package/dist/src/datasets/remote.js +30 -0
  231. package/dist/src/datasets/remote.js.map +1 -0
  232. package/dist/src/element.d.ts +20 -0
  233. package/dist/src/element.d.ts.map +1 -0
  234. package/dist/src/element.js +27 -0
  235. package/dist/src/element.js.map +1 -0
  236. package/dist/src/generators/bipartite.d.ts +51 -0
  237. package/dist/src/generators/bipartite.d.ts.map +1 -0
  238. package/dist/src/generators/bipartite.js +99 -0
  239. package/dist/src/generators/bipartite.js.map +1 -0
  240. package/dist/src/generators/block-model.d.ts +75 -0
  241. package/dist/src/generators/block-model.d.ts.map +1 -0
  242. package/dist/src/generators/block-model.js +116 -0
  243. package/dist/src/generators/block-model.js.map +1 -0
  244. package/dist/src/generators/classic.d.ts +208 -0
  245. package/dist/src/generators/classic.d.ts.map +1 -0
  246. package/dist/src/generators/classic.js +437 -0
  247. package/dist/src/generators/classic.js.map +1 -0
  248. package/dist/src/generators/degree-sequence.d.ts +273 -0
  249. package/dist/src/generators/degree-sequence.d.ts.map +1 -0
  250. package/dist/src/generators/degree-sequence.js +646 -0
  251. package/dist/src/generators/degree-sequence.js.map +1 -0
  252. package/dist/src/generators/directed.d.ts +141 -0
  253. package/dist/src/generators/directed.d.ts.map +1 -0
  254. package/dist/src/generators/directed.js +329 -0
  255. package/dist/src/generators/directed.js.map +1 -0
  256. package/dist/src/generators/erdos-renyi.d.ts +58 -0
  257. package/dist/src/generators/erdos-renyi.d.ts.map +1 -0
  258. package/dist/src/generators/erdos-renyi.js +154 -0
  259. package/dist/src/generators/erdos-renyi.js.map +1 -0
  260. package/dist/src/generators/flow.d.ts +153 -0
  261. package/dist/src/generators/flow.d.ts.map +1 -0
  262. package/dist/src/generators/flow.js +346 -0
  263. package/dist/src/generators/flow.js.map +1 -0
  264. package/dist/src/generators/geometric.d.ts +133 -0
  265. package/dist/src/generators/geometric.d.ts.map +1 -0
  266. package/dist/src/generators/geometric.js +495 -0
  267. package/dist/src/generators/geometric.js.map +1 -0
  268. package/dist/src/generators/growth.d.ts +187 -0
  269. package/dist/src/generators/growth.d.ts.map +1 -0
  270. package/dist/src/generators/growth.js +445 -0
  271. package/dist/src/generators/growth.js.map +1 -0
  272. package/dist/src/generators/hyperbolic.d.ts +84 -0
  273. package/dist/src/generators/hyperbolic.d.ts.map +1 -0
  274. package/dist/src/generators/hyperbolic.js +153 -0
  275. package/dist/src/generators/hyperbolic.js.map +1 -0
  276. package/dist/src/generators/index.d.ts +25 -0
  277. package/dist/src/generators/index.d.ts.map +1 -0
  278. package/dist/src/generators/index.js +24 -0
  279. package/dist/src/generators/index.js.map +1 -0
  280. package/dist/src/generators/lattices.d.ts +87 -0
  281. package/dist/src/generators/lattices.d.ts.map +1 -0
  282. package/dist/src/generators/lattices.js +237 -0
  283. package/dist/src/generators/lattices.js.map +1 -0
  284. package/dist/src/generators/lfr.d.ts +55 -0
  285. package/dist/src/generators/lfr.d.ts.map +1 -0
  286. package/dist/src/generators/lfr.js +178 -0
  287. package/dist/src/generators/lfr.js.map +1 -0
  288. package/dist/src/generators/named.d.ts +23 -0
  289. package/dist/src/generators/named.d.ts.map +1 -0
  290. package/dist/src/generators/named.js +191 -0
  291. package/dist/src/generators/named.js.map +1 -0
  292. package/dist/src/generators/preferential-attachment.d.ts +66 -0
  293. package/dist/src/generators/preferential-attachment.d.ts.map +1 -0
  294. package/dist/src/generators/preferential-attachment.js +157 -0
  295. package/dist/src/generators/preferential-attachment.js.map +1 -0
  296. package/dist/src/generators/trees-and-dags.d.ts +53 -0
  297. package/dist/src/generators/trees-and-dags.d.ts.map +1 -0
  298. package/dist/src/generators/trees-and-dags.js +108 -0
  299. package/dist/src/generators/trees-and-dags.js.map +1 -0
  300. package/dist/src/generators/util.d.ts +84 -0
  301. package/dist/src/generators/util.d.ts.map +1 -0
  302. package/dist/src/generators/util.js +138 -0
  303. package/dist/src/generators/util.js.map +1 -0
  304. package/dist/src/generators/variants.d.ts +85 -0
  305. package/dist/src/generators/variants.d.ts.map +1 -0
  306. package/dist/src/generators/variants.js +215 -0
  307. package/dist/src/generators/variants.js.map +1 -0
  308. package/dist/src/generators/weights.d.ts +65 -0
  309. package/dist/src/generators/weights.d.ts.map +1 -0
  310. package/dist/src/generators/weights.js +135 -0
  311. package/dist/src/generators/weights.js.map +1 -0
  312. package/dist/src/index.d.ts +12 -0
  313. package/dist/src/index.d.ts.map +1 -0
  314. package/dist/src/index.js +10 -0
  315. package/dist/src/index.js.map +1 -0
  316. package/dist/src/random/exp.d.ts +23 -0
  317. package/dist/src/random/exp.d.ts.map +1 -0
  318. package/dist/src/random/exp.js +101 -0
  319. package/dist/src/random/exp.js.map +1 -0
  320. package/dist/src/random/log.d.ts +19 -0
  321. package/dist/src/random/log.d.ts.map +1 -0
  322. package/dist/src/random/log.js +83 -0
  323. package/dist/src/random/log.js.map +1 -0
  324. package/dist/src/random/stream.d.ts +93 -0
  325. package/dist/src/random/stream.d.ts.map +1 -0
  326. package/dist/src/random/stream.js +154 -0
  327. package/dist/src/random/stream.js.map +1 -0
  328. package/dist/src/random/threefry.d.ts +19 -0
  329. package/dist/src/random/threefry.d.ts.map +1 -0
  330. package/dist/src/random/threefry.js +43 -0
  331. package/dist/src/random/threefry.js.map +1 -0
  332. package/dist/src/random/trig.d.ts +16 -0
  333. package/dist/src/random/trig.d.ts.map +1 -0
  334. package/dist/src/random/trig.js +78 -0
  335. package/dist/src/random/trig.js.map +1 -0
  336. package/dist/src/types.d.ts +28 -0
  337. package/dist/src/types.d.ts.map +1 -0
  338. package/dist/src/types.js +2 -0
  339. package/dist/src/types.js.map +1 -0
  340. package/package.json +102 -5
  341. package/src/datasets/build.ts +140 -0
  342. package/src/datasets/catalog.ts +35 -0
  343. package/src/datasets/celegans-neural/data.ts +575 -0
  344. package/src/datasets/celegans-neural/index.ts +17 -0
  345. package/src/datasets/celegans-neural/meta.ts +25 -0
  346. package/src/datasets/contiguous-usa/data.ts +164 -0
  347. package/src/datasets/contiguous-usa/index.ts +17 -0
  348. package/src/datasets/contiguous-usa/meta.ts +31 -0
  349. package/src/datasets/davis-southern-women/data.ts +59 -0
  350. package/src/datasets/davis-southern-women/index.ts +17 -0
  351. package/src/datasets/davis-southern-women/meta.ts +20 -0
  352. package/src/datasets/dolphins/data.ts +95 -0
  353. package/src/datasets/dolphins/index.ts +17 -0
  354. package/src/datasets/dolphins/meta.ts +21 -0
  355. package/src/datasets/florentine-families/data.ts +33 -0
  356. package/src/datasets/florentine-families/index.ts +17 -0
  357. package/src/datasets/florentine-families/meta.ts +20 -0
  358. package/src/datasets/football/data.ts +212 -0
  359. package/src/datasets/football/index.ts +17 -0
  360. package/src/datasets/football/meta.ts +20 -0
  361. package/src/datasets/hosted.ts +90 -0
  362. package/src/datasets/karate/data.ts +32 -0
  363. package/src/datasets/karate/index.ts +17 -0
  364. package/src/datasets/karate/meta.ts +25 -0
  365. package/src/datasets/knuth-miles/data.ts +1205 -0
  366. package/src/datasets/knuth-miles/index.ts +17 -0
  367. package/src/datasets/knuth-miles/meta.ts +29 -0
  368. package/src/datasets/les-miserables/data.ts +119 -0
  369. package/src/datasets/les-miserables/index.ts +17 -0
  370. package/src/datasets/les-miserables/meta.ts +24 -0
  371. package/src/datasets/openflights/data.ts +15459 -0
  372. package/src/datasets/openflights/index.ts +17 -0
  373. package/src/datasets/openflights/meta.ts +31 -0
  374. package/src/datasets/political-blogs/data.ts +4859 -0
  375. package/src/datasets/political-blogs/index.ts +17 -0
  376. package/src/datasets/political-blogs/meta.ts +30 -0
  377. package/src/datasets/political-books/data.ts +167 -0
  378. package/src/datasets/political-books/index.ts +17 -0
  379. package/src/datasets/political-books/meta.ts +23 -0
  380. package/src/datasets/remote.ts +42 -0
  381. package/src/element.ts +41 -0
  382. package/src/generators/bipartite.ts +127 -0
  383. package/src/generators/block-model.ts +160 -0
  384. package/src/generators/classic.ts +461 -0
  385. package/src/generators/degree-sequence.ts +807 -0
  386. package/src/generators/directed.ts +418 -0
  387. package/src/generators/erdos-renyi.ts +188 -0
  388. package/src/generators/flow.ts +443 -0
  389. package/src/generators/geometric.ts +591 -0
  390. package/src/generators/growth.ts +532 -0
  391. package/src/generators/hyperbolic.ts +193 -0
  392. package/src/generators/index.ts +133 -0
  393. package/src/generators/lattices.ts +290 -0
  394. package/src/generators/lfr.ts +227 -0
  395. package/src/generators/named.ts +198 -0
  396. package/src/generators/preferential-attachment.ts +188 -0
  397. package/src/generators/trees-and-dags.ts +139 -0
  398. package/src/generators/util.ts +167 -0
  399. package/src/generators/variants.ts +253 -0
  400. package/src/generators/weights.ts +177 -0
  401. package/src/index.ts +12 -0
  402. package/src/random/exp.ts +104 -0
  403. package/src/random/log.ts +86 -0
  404. package/src/random/stream.ts +169 -0
  405. package/src/random/threefry.ts +45 -0
  406. package/src/random/trig.ts +83 -0
  407. package/src/types.ts +28 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../src/generators/flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Geometric random graphs: nodes are random points, edges depend on the distance between them.
3
+ * Every generator emits its points as Float64Array node columns `x`, `y` (and `z` in 3D), so the
4
+ * `weights: { kind: "euclidean" }` option and a fixed layout can use them.
5
+ *
6
+ * Node i's point always comes from its own stream block i, so the points do not depend on n or on
7
+ * how the work is split. Edge decisions compare squared distances (no square root).
8
+ */
9
+ import { type SampleGraph } from "../types.js";
10
+ import { EdgeBuffer } from "./util.js";
11
+ import { type WeightOptions } from "./weights.js";
12
+ /** Options of {@link randomGeometricGraph}. */
13
+ export interface RandomGeometricOptions extends WeightOptions {
14
+ /** The node count, >= 0. */
15
+ n: number;
16
+ /** The connection radius, a finite number >= 0: u and v are joined iff their distance is <= radius. */
17
+ radius: number;
18
+ /** 2 (the unit square, default) or 3 (the unit cube). */
19
+ dimension?: 2 | 3 | undefined;
20
+ /** Measure distance on the torus (each axis wraps around), removing the boundary effect; default false. */
21
+ periodic?: boolean | undefined;
22
+ /** The seed, an integer in [0, 2^53); default 0. */
23
+ seed?: number | undefined;
24
+ }
25
+ /**
26
+ * The random geometric graph (E. N. Gilbert, "Random plane networks", J. SIAM 9(4), 533-543, 1961,
27
+ * doi:10.1137/0109045; M. Penrose, Random Geometric Graphs, Oxford University Press, 2003): n
28
+ * uniform points in the unit square or cube, u and v joined iff their Euclidean distance (torus
29
+ * distance when `periodic`) is at most `radius`.
30
+ *
31
+ * Node i's point is x, y (, z) = one nextFloat() per axis from stream (seed, "rgg-points", i). The
32
+ * points are bucketed into a uniform grid of cells of side >= radius (at most about n cells) and
33
+ * each node checks the 3^dimension cells around its own. Edges are the pairs (u, v), u < v,
34
+ * ascending u then ascending v. Expected cost O(n + m). Node columns `x`, `y` (, `z`): Float64Array
35
+ * in [0, 1). The mean degree is about n pi r^2 in 2D and n 4/3 pi r^3 in 3D (less near the border
36
+ * unless periodic); connectivity needs r above about sqrt(ln n / (pi n)) in 2D.
37
+ * @param options - n, radius, dimension, periodic and seed
38
+ * @returns the undirected graph
39
+ */
40
+ export declare function randomGeometricGraph(options: RandomGeometricOptions): SampleGraph;
41
+ /** Options of {@link waxmanGraph}. */
42
+ export interface WaxmanOptions extends WeightOptions {
43
+ /** The node count, >= 0; beta n^2 / 2 must stay below 5e8. */
44
+ n: number;
45
+ /** The distance scale, a finite number > 0: larger alpha makes long edges likelier. */
46
+ alpha: number;
47
+ /** The edge probability at distance 0, in [0, 1]. */
48
+ beta: number;
49
+ /** The seed, an integer in [0, 2^53); default 0. */
50
+ seed?: number | undefined;
51
+ }
52
+ /** The checked and precomputed form of {@link WaxmanOptions}. */
53
+ interface WaxmanPlan {
54
+ readonly n: number;
55
+ readonly seed: number;
56
+ readonly beta: number;
57
+ readonly logQ: number;
58
+ /** alpha L. */
59
+ readonly scale: number;
60
+ readonly x: Float64Array<ArrayBuffer>;
61
+ readonly y: Float64Array<ArrayBuffer>;
62
+ }
63
+ /**
64
+ * Check the Waxman options and draw the points.
65
+ * @param options - the options
66
+ * @returns the plan
67
+ */
68
+ export declare function planWaxman(options: WaxmanOptions): WaxmanPlan;
69
+ /**
70
+ * Rows [start, end) of the Waxman graph: row u draws from stream (seed, "waxman", u), walks the
71
+ * candidates v > u by geometric skipping at probability beta (one draw per skip), and keeps a
72
+ * candidate with a second draw t iff d^2 < (alpha L ln t)^2, which is t < exp(-d / (alpha L)) with
73
+ * no exp. Edges ascend in v. Any split of [0, n) into consecutive ranges gives the whole graph.
74
+ * @param plan - the checked options and points
75
+ * @param start - the first row
76
+ * @param end - one past the last row
77
+ * @param out - receives the edges
78
+ */
79
+ export declare function waxmanRows(plan: WaxmanPlan, start: number, end: number, out: EdgeBuffer): void;
80
+ /**
81
+ * The Waxman graph (B. M. Waxman, "Routing of multipoint connections", IEEE J. Selected Areas in
82
+ * Communications 6(9), 1617-1622, 1988): n uniform points in the unit square, each pair joined
83
+ * independently with probability beta exp(-d / (alpha L)).
84
+ *
85
+ * L is fixed at sqrt(2), the diagonal of the unit square (networkx uses the largest distance
86
+ * between the drawn points instead, so the two differ slightly). Node i's point is x, y = two
87
+ * nextFloat() draws from stream (seed, "waxman-points", i); the pairs are drawn by
88
+ * {@link waxmanRows}. Edges are the pairs (u, v), u < v, ascending u then v. Every pair has a
89
+ * non-zero probability, so the cost is O(n + beta n^2 / 2) draws; above 5e8 expected draws it
90
+ * throws a RangeError (n about 31,600 at beta 1). Node columns `x`, `y`: Float64Array in [0, 1).
91
+ * @param options - n, alpha, beta and seed
92
+ * @returns the undirected graph
93
+ */
94
+ export declare function waxmanGraph(options: WaxmanOptions): SampleGraph;
95
+ /** Options of {@link knnGraph}. */
96
+ export interface KnnOptions extends WeightOptions {
97
+ /** The node count, >= 0. */
98
+ n: number;
99
+ /** The neighbours per node, in [0, n - 1]. */
100
+ k: number;
101
+ /** 2 (default) or 3. */
102
+ dimension?: 2 | 3 | undefined;
103
+ /** Arcs u -> each of u's k nearest (default true), or with false the undirected union without duplicates. */
104
+ directed?: boolean | undefined;
105
+ /** Draw the points from a mixture of this many Gaussian clusters, >= 1; default uniform points. */
106
+ clusters?: number | undefined;
107
+ /** The standard deviation of every cluster on each axis, a finite number >= 0; default 0.05. Needs `clusters`. */
108
+ spread?: number | undefined;
109
+ /** The seed, an integer in [0, 2^53); default 0. */
110
+ seed?: number | undefined;
111
+ }
112
+ /**
113
+ * The k-nearest-neighbour graph of random points, the standard input of spectral clustering
114
+ * (U. von Luxburg, "A tutorial on spectral clustering", Statistics and Computing 17, 395-416, 2007,
115
+ * doi:10.1007/s11222-007-9033-z).
116
+ *
117
+ * Points: uniform in the unit square or cube (point i = nextFloat() per axis from stream
118
+ * (seed, "knn-points", i)), or with `clusters` a Gaussian mixture: cluster centres uniform in the
119
+ * unit cube from stream (seed, "knn-centres", c), point i picks its cluster uniformly and adds
120
+ * normal offsets of standard deviation `spread` (Marsaglia polar method) from stream
121
+ * (seed, "knn-points", i); mixture points may leave [0, 1). Each node's k nearest are exact,
122
+ * ties broken by the smaller index, found by an expanding ring search over a cell grid of about
123
+ * n / k cells: expected O(n k^2) for uniform points.
124
+ *
125
+ * Directed (default): the arcs u -> each of its k nearest, ascending u then ascending target.
126
+ * Undirected: the union of those pairs without duplicates as (u, v), u < v, ascending u then v.
127
+ * Node columns `x`, `y` (, `z`): Float64Array; with `clusters`, `community` (u32): the cluster.
128
+ * @param options - n, k, dimension, directed, clusters, spread and seed
129
+ * @returns the graph
130
+ */
131
+ export declare function knnGraph(options: KnnOptions): SampleGraph;
132
+ export {};
133
+ //# sourceMappingURL=geometric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geometric.d.ts","sourceRoot":"","sources":["../../../src/generators/geometric.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAA8C,UAAU,EAAW,MAAM,WAAW,CAAC;AAC5F,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAiIhE,+CAA+C;AAC/C,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IACzD,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,uGAAuG;IACvG,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,2GAA2G;IAC3G,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,sBAAsB,GAAG,WAAW,CA6DjF;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAc,SAAQ,aAAa;IAChD,8DAA8D;IAC9D,CAAC,EAAE,MAAM,CAAC;IACV,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,iEAAiE;AACjE,UAAU,UAAU;IAChB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,eAAe;IACf,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAa7D;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAkB9F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAK/D;AAED,mCAAmC;AACnC,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC7C,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,8CAA8C;IAC9C,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC9B,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,mGAAmG;IACnG,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,kHAAkH;IAClH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAmKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,CA+DzD"}
@@ -0,0 +1,495 @@
1
+ /**
2
+ * Geometric random graphs: nodes are random points, edges depend on the distance between them.
3
+ * Every generator emits its points as Float64Array node columns `x`, `y` (and `z` in 3D), so the
4
+ * `weights: { kind: "euclidean" }` option and a fixed layout can use them.
5
+ *
6
+ * Node i's point always comes from its own stream block i, so the points do not depend on n or on
7
+ * how the work is split. Edge decisions compare squared distances (no square root).
8
+ */
9
+ import { detLog } from "../random/log.js";
10
+ import { RandomStream, resolveSeed } from "../random/stream.js";
11
+ import { checkEdgeCount, checkInt, checkProbability, EdgeBuffer, toGraph } from "./util.js";
12
+ import { applyWeights } from "./weights.js";
13
+ /** L of the Waxman model: the diagonal of the unit square, the largest possible distance. */
14
+ const WAXMAN_L = Math.SQRT2;
15
+ /** The largest expected number of Waxman candidate draws, beta n^2 / 2. */
16
+ const WAXMAN_MAX_DRAWS = 5e8;
17
+ /**
18
+ * Throw unless `dimension` is 2 or 3.
19
+ * @param dimension - the option value
20
+ * @returns the dimension
21
+ */
22
+ function checkDimension(dimension) {
23
+ const d = dimension ?? 2;
24
+ if (d !== 2 && d !== 3) {
25
+ throw new RangeError(`dimension must be 2 or 3, got ${String(d)}`);
26
+ }
27
+ return d;
28
+ }
29
+ /**
30
+ * Throw unless `value` is a finite number >= 0 (or > 0 when `positive`).
31
+ * @param name - the option name
32
+ * @param value - the value
33
+ * @param positive - whether 0 is excluded
34
+ */
35
+ function checkNonNegative(name, value, positive = false) {
36
+ if (!(Number.isFinite(value) && (positive ? value > 0 : value >= 0))) {
37
+ throw new RangeError(`${name} must be a finite number ${positive ? ">" : ">="} 0, got ${String(value)}`);
38
+ }
39
+ }
40
+ /**
41
+ * Uniform points in [0, 1)^dimension: point i takes `dimension` nextFloat() draws (x, then y, then
42
+ * z) from stream (seed, domain, i).
43
+ * @param seed - the seed
44
+ * @param domain - the points' stream domain
45
+ * @param n - the point count
46
+ * @param dimension - 2 or 3
47
+ * @returns one column per axis
48
+ */
49
+ function uniformPoints(seed, domain, n, dimension) {
50
+ const axes = Array.from({ length: dimension }, () => new Float64Array(n));
51
+ const stream = new RandomStream(seed, domain, 0);
52
+ for (let i = 0; i < n; i++) {
53
+ stream.reset(i);
54
+ for (const axis of axes) {
55
+ axis[i] = stream.nextFloat();
56
+ }
57
+ }
58
+ return axes;
59
+ }
60
+ /**
61
+ * The position columns x, y (and z) of a graph.
62
+ * @param axes - the coordinate columns
63
+ * @returns the node columns
64
+ */
65
+ function positionColumns(axes) {
66
+ const names = ["x", "y", "z"];
67
+ return Object.fromEntries(axes.map((axis, a) => [names[a], axis]));
68
+ }
69
+ /**
70
+ * The largest g >= 1 with g^dimension <= target.
71
+ * @param target - the cell budget
72
+ * @param dimension - 2 or 3
73
+ * @returns cells per axis
74
+ */
75
+ function cellsPerAxis(target, dimension) {
76
+ let g = 1;
77
+ while ((g + 1) ** dimension <= target) {
78
+ g++;
79
+ }
80
+ return g;
81
+ }
82
+ /**
83
+ * Bucket points into a g^dimension grid spanning [lo, hi] on each axis.
84
+ * @param axes - the coordinate columns
85
+ * @param g - cells per axis
86
+ * @param lo - the low corner per axis
87
+ * @param hi - the high corner per axis
88
+ * @returns the grid
89
+ */
90
+ function buildGrid(axes, g, lo, hi) {
91
+ const n = axes[0].length;
92
+ const side = lo.map((l, a) => (hi[a] - l) / g || 1);
93
+ const cell = axes.map(() => new Uint32Array(n));
94
+ const flat = new Uint32Array(n);
95
+ const start = new Uint32Array(g ** axes.length + 1);
96
+ for (let i = 0; i < n; i++) {
97
+ let c = 0;
98
+ for (let a = 0; a < axes.length; a++) {
99
+ const k = Math.min(g - 1, Math.floor((axes[a][i] - lo[a]) / side[a]));
100
+ cell[a][i] = k;
101
+ c = c * g + k;
102
+ }
103
+ flat[i] = c;
104
+ start[c + 1]++;
105
+ }
106
+ for (let c = 0; c + 1 < start.length; c++) {
107
+ start[c + 1] += start[c];
108
+ }
109
+ const fill = start.slice(0, -1);
110
+ const items = new Uint32Array(n);
111
+ for (let i = 0; i < n; i++) {
112
+ items[fill[flat[i]]++] = i;
113
+ }
114
+ return { g, lo, side, start, items, cell };
115
+ }
116
+ /**
117
+ * The random geometric graph (E. N. Gilbert, "Random plane networks", J. SIAM 9(4), 533-543, 1961,
118
+ * doi:10.1137/0109045; M. Penrose, Random Geometric Graphs, Oxford University Press, 2003): n
119
+ * uniform points in the unit square or cube, u and v joined iff their Euclidean distance (torus
120
+ * distance when `periodic`) is at most `radius`.
121
+ *
122
+ * Node i's point is x, y (, z) = one nextFloat() per axis from stream (seed, "rgg-points", i). The
123
+ * points are bucketed into a uniform grid of cells of side >= radius (at most about n cells) and
124
+ * each node checks the 3^dimension cells around its own. Edges are the pairs (u, v), u < v,
125
+ * ascending u then ascending v. Expected cost O(n + m). Node columns `x`, `y` (, `z`): Float64Array
126
+ * in [0, 1). The mean degree is about n pi r^2 in 2D and n 4/3 pi r^3 in 3D (less near the border
127
+ * unless periodic); connectivity needs r above about sqrt(ln n / (pi n)) in 2D.
128
+ * @param options - n, radius, dimension, periodic and seed
129
+ * @returns the undirected graph
130
+ */
131
+ export function randomGeometricGraph(options) {
132
+ const { n, radius } = options;
133
+ checkInt("n", n, 0);
134
+ checkNonNegative("radius", radius);
135
+ const dimension = checkDimension(options.dimension);
136
+ const periodic = options.periodic ?? false;
137
+ const seed = resolveSeed(options.seed);
138
+ const axes = uniformPoints(seed, "rgg-points", n, dimension);
139
+ const r2 = radius * radius;
140
+ // cells a hair wider than the radius, so a point rounded into the next cell is still covered
141
+ const g = Math.max(1, Math.min(Math.floor((1 - 1e-9) / radius), cellsPerAxis(Math.max(1, n), dimension)));
142
+ const grid = buildGrid(axes, g, new Array(dimension).fill(0), new Array(dimension).fill(1));
143
+ const volume = dimension === 2 ? Math.PI * r2 : (4 / 3) * Math.PI * r2 * radius;
144
+ const pairs = (n * (n - 1)) / 2;
145
+ const out = new EdgeBuffer(Math.ceil(Math.min(pairs, pairs * volume * 1.1, 1 << 24) + 16));
146
+ // the distinct neighbouring cell coordinates of cell k on one axis
147
+ const around = Array.from({ length: g }, (_, k) => {
148
+ const list = periodic ? [(k + g - 1) % g, k, (k + 1) % g] : [k - 1, k, k + 1].filter((c) => c >= 0 && c < g);
149
+ return [...new Set(list)];
150
+ });
151
+ let found = new Uint32Array(16);
152
+ for (let u = 0; u < n; u++) {
153
+ let count = 0;
154
+ const zCells = dimension === 3 ? around[grid.cell[2][u]] : [0];
155
+ for (const cx of around[grid.cell[0][u]]) {
156
+ for (const cy of around[grid.cell[1][u]]) {
157
+ for (const cz of zCells) {
158
+ const c = dimension === 3 ? (cx * g + cy) * g + cz : cx * g + cy;
159
+ for (let t = grid.start[c]; t < grid.start[c + 1]; t++) {
160
+ const v = grid.items[t];
161
+ if (v <= u) {
162
+ continue;
163
+ }
164
+ let d2 = 0;
165
+ for (const axis of axes) {
166
+ let d = Math.abs(axis[u] - axis[v]);
167
+ if (periodic && d > 0.5) {
168
+ d = 1 - d;
169
+ }
170
+ d2 += d * d;
171
+ }
172
+ if (d2 <= r2) {
173
+ if (count === found.length) {
174
+ const grown = new Uint32Array(count * 2);
175
+ grown.set(found);
176
+ found = grown;
177
+ }
178
+ found[count++] = v;
179
+ }
180
+ }
181
+ }
182
+ }
183
+ }
184
+ const row = found.subarray(0, count).sort();
185
+ for (const v of row) {
186
+ out.push(u, v);
187
+ }
188
+ }
189
+ return applyWeights(toGraph(n, out, false, positionColumns(axes)), options);
190
+ }
191
+ /**
192
+ * Check the Waxman options and draw the points.
193
+ * @param options - the options
194
+ * @returns the plan
195
+ */
196
+ export function planWaxman(options) {
197
+ const { n, alpha, beta } = options;
198
+ checkInt("n", n, 0);
199
+ checkNonNegative("alpha", alpha, true);
200
+ checkProbability("beta", beta);
201
+ const seed = resolveSeed(options.seed);
202
+ if ((beta * n * n) / 2 > WAXMAN_MAX_DRAWS) {
203
+ throw new RangeError(`waxmanGraph: beta n^2 / 2 = ${(beta * n * n) / 2} candidate pairs, above the limit of ${WAXMAN_MAX_DRAWS}`);
204
+ }
205
+ const [x, y] = uniformPoints(seed, "waxman-points", n, 2);
206
+ return { n, seed, beta, logQ: detLog(1 - beta), scale: alpha * WAXMAN_L, x, y };
207
+ }
208
+ /**
209
+ * Rows [start, end) of the Waxman graph: row u draws from stream (seed, "waxman", u), walks the
210
+ * candidates v > u by geometric skipping at probability beta (one draw per skip), and keeps a
211
+ * candidate with a second draw t iff d^2 < (alpha L ln t)^2, which is t < exp(-d / (alpha L)) with
212
+ * no exp. Edges ascend in v. Any split of [0, n) into consecutive ranges gives the whole graph.
213
+ * @param plan - the checked options and points
214
+ * @param start - the first row
215
+ * @param end - one past the last row
216
+ * @param out - receives the edges
217
+ */
218
+ export function waxmanRows(plan, start, end, out) {
219
+ const { n, beta, logQ, scale, x, y } = plan;
220
+ if (beta === 0) {
221
+ return;
222
+ }
223
+ const stream = new RandomStream(plan.seed, "waxman", 0);
224
+ const skip = () => (beta === 1 ? 0 : stream.nextSkip(logQ));
225
+ for (let u = start; u < end; u++) {
226
+ stream.reset(u);
227
+ for (let v = u + 1 + skip(); v < n; v += 1 + skip()) {
228
+ const dx = x[u] - x[v];
229
+ const dy = y[u] - y[v];
230
+ const bound = scale * detLog(stream.nextFloat());
231
+ if (dx * dx + dy * dy < bound * bound) {
232
+ out.push(u, v);
233
+ }
234
+ }
235
+ }
236
+ }
237
+ /**
238
+ * The Waxman graph (B. M. Waxman, "Routing of multipoint connections", IEEE J. Selected Areas in
239
+ * Communications 6(9), 1617-1622, 1988): n uniform points in the unit square, each pair joined
240
+ * independently with probability beta exp(-d / (alpha L)).
241
+ *
242
+ * L is fixed at sqrt(2), the diagonal of the unit square (networkx uses the largest distance
243
+ * between the drawn points instead, so the two differ slightly). Node i's point is x, y = two
244
+ * nextFloat() draws from stream (seed, "waxman-points", i); the pairs are drawn by
245
+ * {@link waxmanRows}. Edges are the pairs (u, v), u < v, ascending u then v. Every pair has a
246
+ * non-zero probability, so the cost is O(n + beta n^2 / 2) draws; above 5e8 expected draws it
247
+ * throws a RangeError (n about 31,600 at beta 1). Node columns `x`, `y`: Float64Array in [0, 1).
248
+ * @param options - n, alpha, beta and seed
249
+ * @returns the undirected graph
250
+ */
251
+ export function waxmanGraph(options) {
252
+ const plan = planWaxman(options);
253
+ const out = new EdgeBuffer(Math.min(Math.ceil((plan.beta * plan.n * plan.n) / 8), 1 << 24) + 16);
254
+ waxmanRows(plan, 0, plan.n, out);
255
+ return applyWeights(toGraph(plan.n, out, false, positionColumns([plan.x, plan.y])), options);
256
+ }
257
+ /**
258
+ * Gaussian mixture points: cluster c's centre is `dimension` nextFloat() draws from stream
259
+ * (seed, "knn-centres", c); point i draws its cluster with nextBelow(clusters) and then standard
260
+ * normal offsets by the Marsaglia polar method (pairs u, v = 2 nextFloat() - 1 until
261
+ * 0 < s = u^2 + v^2 < 1, then u sqrt(-2 ln s / s) and v sqrt(-2 ln s / s)), all from stream
262
+ * (seed, "knn-points", i).
263
+ * @param seed - the seed
264
+ * @param n - the point count
265
+ * @param dimension - 2 or 3
266
+ * @param clusters - the cluster count
267
+ * @param spread - the standard deviation
268
+ * @returns the coordinate columns and the cluster of every point
269
+ */
270
+ function mixturePoints(seed, n, dimension, clusters, spread) {
271
+ const centres = uniformPoints(seed, "knn-centres", clusters, dimension);
272
+ const axes = Array.from({ length: dimension }, () => new Float64Array(n));
273
+ const community = new Uint32Array(n);
274
+ const stream = new RandomStream(seed, "knn-points", 0);
275
+ const normals = new Float64Array(4);
276
+ for (let i = 0; i < n; i++) {
277
+ stream.reset(i);
278
+ const c = stream.nextBelow(clusters);
279
+ community[i] = c;
280
+ for (let j = 0; j < dimension; j += 2) {
281
+ let u;
282
+ let v;
283
+ let s;
284
+ do {
285
+ u = 2 * stream.nextFloat() - 1;
286
+ v = 2 * stream.nextFloat() - 1;
287
+ s = u * u + v * v;
288
+ } while (s >= 1 || s === 0);
289
+ const m = Math.sqrt((-2 * detLog(s)) / s);
290
+ normals[j] = u * m;
291
+ normals[j + 1] = v * m;
292
+ }
293
+ for (let a = 0; a < dimension; a++) {
294
+ axes[a][i] = centres[a][c] + spread * normals[a];
295
+ }
296
+ }
297
+ return { axes, community };
298
+ }
299
+ /**
300
+ * The k nearest neighbours of every point, exact, by an expanding ring search over a cell grid.
301
+ * @param axes - the coordinate columns
302
+ * @param k - neighbours per point
303
+ * @returns row u's neighbours at [u k, (u + 1) k), ascending by index
304
+ */
305
+ function nearestNeighbours(axes, k) {
306
+ const n = axes[0].length;
307
+ const dimension = axes.length;
308
+ const result = new Uint32Array(n * k);
309
+ if (k === 0) {
310
+ return result;
311
+ }
312
+ const lo = axes.map((axis) => axis.reduce((a, b) => Math.min(a, b), Infinity));
313
+ const hi = axes.map((axis) => axis.reduce((a, b) => Math.max(a, b), -Infinity));
314
+ const g = cellsPerAxis(Math.max(1, n / k), dimension);
315
+ const grid = buildGrid(axes, g, lo, hi);
316
+ const bestD = new Float64Array(k);
317
+ const bestI = new Uint32Array(k);
318
+ // the absolute rounding slack of a cell assignment
319
+ const slack = 1e-12 * Math.max(1, ...lo.map(Math.abs), ...hi.map(Math.abs));
320
+ const cell = new Array(dimension).fill(0);
321
+ const offset = new Array(dimension).fill(0);
322
+ for (let u = 0; u < n; u++) {
323
+ let count = 0;
324
+ const consider = (v) => {
325
+ let d2 = 0;
326
+ for (const axis of axes) {
327
+ const d = Math.abs(axis[u] - axis[v]);
328
+ d2 += d * d;
329
+ }
330
+ // insert (d2, v) into the sorted best list when it beats the worst kept
331
+ if (count === k && (d2 > bestD[k - 1] || (d2 === bestD[k - 1] && v > bestI[k - 1]))) {
332
+ return;
333
+ }
334
+ let j = count < k ? count++ : k - 1;
335
+ while (j > 0 && (bestD[j - 1] > d2 || (bestD[j - 1] === d2 && bestI[j - 1] > v))) {
336
+ bestD[j] = bestD[j - 1];
337
+ bestI[j] = bestI[j - 1];
338
+ j--;
339
+ }
340
+ bestD[j] = d2;
341
+ bestI[j] = v;
342
+ };
343
+ for (let a = 0; a < dimension; a++) {
344
+ cell[a] = grid.cell[a][u];
345
+ }
346
+ // ponytail: ring r scans the whole (2r + 1)^dimension block and skips its inside, O(r^dimension)
347
+ // per ring; walk only the shell if large k or very uneven clusters make that measurable
348
+ for (let r = 0;; r++) {
349
+ let covered = true;
350
+ for (let a = 0; a < dimension; a++) {
351
+ offset[a] = -r;
352
+ if (cell[a] - r > 0 || cell[a] + r < g - 1) {
353
+ covered = false;
354
+ }
355
+ }
356
+ for (;;) {
357
+ let chebyshev = 0;
358
+ let inside = true;
359
+ let c = 0;
360
+ for (let a = 0; a < dimension; a++) {
361
+ const k2 = cell[a] + offset[a];
362
+ if (k2 < 0 || k2 >= g) {
363
+ inside = false;
364
+ }
365
+ chebyshev = Math.max(chebyshev, Math.abs(offset[a]));
366
+ c = c * g + k2;
367
+ }
368
+ if (inside && chebyshev === r) {
369
+ for (let t = grid.start[c]; t < grid.start[c + 1]; t++) {
370
+ const v = grid.items[t];
371
+ if (v !== u) {
372
+ consider(v);
373
+ }
374
+ }
375
+ }
376
+ let a = dimension - 1;
377
+ while (a >= 0 && offset[a] === r) {
378
+ offset[a] = -r;
379
+ a--;
380
+ }
381
+ if (a < 0) {
382
+ break;
383
+ }
384
+ offset[a]++;
385
+ }
386
+ if (covered) {
387
+ break;
388
+ }
389
+ if (count === k) {
390
+ // every point outside the searched block is at least `gap` away
391
+ let gap = Infinity;
392
+ for (let a = 0; a < dimension; a++) {
393
+ const p = axes[a][u] - grid.lo[a];
394
+ gap = Math.min(gap, p - (cell[a] - r) * grid.side[a], (cell[a] + r + 1) * grid.side[a] - p);
395
+ }
396
+ // the margins cover the rounding of the cell assignment and of the squared distances, so
397
+ // a point outside the block can never tie or beat the k-th best
398
+ gap -= slack;
399
+ if (gap > 0 && bestD[k - 1] < gap * gap * (1 - 1e-9)) {
400
+ break;
401
+ }
402
+ }
403
+ }
404
+ const row = result.subarray(u * k, (u + 1) * k);
405
+ row.set(bestI);
406
+ row.sort();
407
+ }
408
+ return result;
409
+ }
410
+ /**
411
+ * The k-nearest-neighbour graph of random points, the standard input of spectral clustering
412
+ * (U. von Luxburg, "A tutorial on spectral clustering", Statistics and Computing 17, 395-416, 2007,
413
+ * doi:10.1007/s11222-007-9033-z).
414
+ *
415
+ * Points: uniform in the unit square or cube (point i = nextFloat() per axis from stream
416
+ * (seed, "knn-points", i)), or with `clusters` a Gaussian mixture: cluster centres uniform in the
417
+ * unit cube from stream (seed, "knn-centres", c), point i picks its cluster uniformly and adds
418
+ * normal offsets of standard deviation `spread` (Marsaglia polar method) from stream
419
+ * (seed, "knn-points", i); mixture points may leave [0, 1). Each node's k nearest are exact,
420
+ * ties broken by the smaller index, found by an expanding ring search over a cell grid of about
421
+ * n / k cells: expected O(n k^2) for uniform points.
422
+ *
423
+ * Directed (default): the arcs u -> each of its k nearest, ascending u then ascending target.
424
+ * Undirected: the union of those pairs without duplicates as (u, v), u < v, ascending u then v.
425
+ * Node columns `x`, `y` (, `z`): Float64Array; with `clusters`, `community` (u32): the cluster.
426
+ * @param options - n, k, dimension, directed, clusters, spread and seed
427
+ * @returns the graph
428
+ */
429
+ export function knnGraph(options) {
430
+ const { n, k, clusters, spread } = options;
431
+ checkInt("n", n, 0);
432
+ checkInt("k", k, 0, Math.max(0, n - 1));
433
+ const dimension = checkDimension(options.dimension);
434
+ const directed = options.directed ?? true;
435
+ if (clusters === undefined && spread !== undefined) {
436
+ throw new RangeError("spread needs clusters");
437
+ }
438
+ const seed = resolveSeed(options.seed);
439
+ let axes;
440
+ const columns = {};
441
+ if (clusters === undefined) {
442
+ axes = uniformPoints(seed, "knn-points", n, dimension);
443
+ }
444
+ else {
445
+ checkInt("clusters", clusters, 1);
446
+ const sd = spread ?? 0.05;
447
+ checkNonNegative("spread", sd);
448
+ let community;
449
+ ({ axes, community } = mixturePoints(seed, n, dimension, clusters, sd));
450
+ columns.community = community;
451
+ }
452
+ Object.assign(columns, positionColumns(axes));
453
+ const neighbours = nearestNeighbours(axes, k);
454
+ checkEdgeCount(n * k);
455
+ let out;
456
+ if (directed) {
457
+ out = new EdgeBuffer(n * k);
458
+ for (let u = 0; u < n; u++) {
459
+ for (let j = u * k; j < (u + 1) * k; j++) {
460
+ out.push(u, neighbours[j]);
461
+ }
462
+ }
463
+ }
464
+ else {
465
+ // bucket the pairs (min, max) by their smaller end with a counting sort, then sort and dedupe each bucket
466
+ const start = new Uint32Array(n + 1);
467
+ for (let u = 0; u < n; u++) {
468
+ for (let j = u * k; j < (u + 1) * k; j++) {
469
+ start[Math.min(u, neighbours[j]) + 1]++;
470
+ }
471
+ }
472
+ for (let u = 0; u < n; u++) {
473
+ start[u + 1] += start[u];
474
+ }
475
+ const fill = start.slice(0, -1);
476
+ const other = new Uint32Array(n * k);
477
+ for (let u = 0; u < n; u++) {
478
+ for (let j = u * k; j < (u + 1) * k; j++) {
479
+ const v = neighbours[j];
480
+ other[fill[Math.min(u, v)]++] = Math.max(u, v);
481
+ }
482
+ }
483
+ out = new EdgeBuffer(n * k);
484
+ for (let u = 0; u < n; u++) {
485
+ const row = other.subarray(start[u], start[u + 1]).sort();
486
+ for (let j = 0; j < row.length; j++) {
487
+ if (j === 0 || row[j] !== row[j - 1]) {
488
+ out.push(u, row[j]);
489
+ }
490
+ }
491
+ }
492
+ }
493
+ return applyWeights(toGraph(n, out, directed, columns), options);
494
+ }
495
+ //# sourceMappingURL=geometric.js.map