@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,157 @@
1
+ /**
2
+ * Growth models: Barabasi-Albert preferential attachment with the Holme-Kim triad-formation step,
3
+ * and the Watts-Strogatz small world.
4
+ */
5
+ import { RandomStream, resolveSeed } from "../random/stream.js";
6
+ import { checkEdgeCount, checkInt, checkProbability, EdgeBuffer, toGraph } from "./util.js";
7
+ import { applyWeights } from "./weights.js";
8
+ /**
9
+ * Barabasi-Albert preferential attachment (A.-L. Barabasi and R. Albert, "Emergence of scaling in
10
+ * random networks", Science 286, 509-512, 1999), optionally with triad formation (P. Holme and
11
+ * B. J. Kim, "Growing scale-free networks with tunable clustering", Phys. Rev. E 65, 026107, 2002),
12
+ * in O(n m) with the repeated-endpoint list of Batagelj and Brandes (2005).
13
+ *
14
+ * The algorithm is networkx's `powerlaw_cluster_graph`, which is `barabasi_albert_graph` when the
15
+ * triad probability is 0: start from m isolated nodes 0 .. m - 1 whose repeated list holds each
16
+ * once; each new node s = m .. n - 1 draws m distinct targets uniformly from the repeated list
17
+ * (in draw order), then adds m edges (s, t): the first to the first target; each further one, with
18
+ * probability `triadProbability`, to a uniformly chosen neighbour of the previous target that s is
19
+ * not yet joined to, otherwise to the next unused target. Every endpoint is appended to the
20
+ * repeated list, s itself m times. All draws come from the single stream (seed,
21
+ * "barabasi-albert", 0): the process is sequential. Edges are listed by new node, in the order
22
+ * added. (n - m) m edges, no self-loops, no repeats.
23
+ * @param options - n, m, triadProbability and seed
24
+ * @returns the undirected graph
25
+ */
26
+ export function barabasiAlbertGraph(options) {
27
+ const { n, m } = options;
28
+ const triad = options.triadProbability ?? 0;
29
+ checkInt("m", m, 1);
30
+ checkInt("n", n, m + 1);
31
+ checkProbability("triadProbability", triad);
32
+ const seed = resolveSeed(options.seed);
33
+ const edgeCount = (n - m) * m;
34
+ checkEdgeCount(edgeCount);
35
+ const stream = new RandomStream(seed, "barabasi-albert", 0);
36
+ const out = new EdgeBuffer(edgeCount);
37
+ const repeated = new Uint32Array(m + 2 * edgeCount);
38
+ let length = 0;
39
+ for (let i = 0; i < m; i++) {
40
+ repeated[length++] = i;
41
+ }
42
+ // neighbour lists, only for the triad step
43
+ // ponytail: number[][] per node; a CSR-like growable adjacency if HK at 1M+ nodes matters
44
+ const adjacency = triad > 0 ? Array.from({ length: n }, () => []) : null;
45
+ const targets = new Array(m);
46
+ const link = (s, t) => {
47
+ out.push(s, t);
48
+ repeated[length++] = t;
49
+ if (adjacency !== null) {
50
+ adjacency[s].push(t);
51
+ adjacency[t].push(s);
52
+ }
53
+ };
54
+ for (let s = m; s < n; s++) {
55
+ // m distinct targets from the repeated list, in draw order
56
+ let found = 0;
57
+ while (found < m) {
58
+ const t = repeated[stream.nextBelow(length)];
59
+ let fresh = true;
60
+ for (let i = 0; i < found; i++) {
61
+ fresh && (fresh = targets[i] !== t);
62
+ }
63
+ if (fresh) {
64
+ targets[found++] = t;
65
+ }
66
+ }
67
+ let next = 0;
68
+ let target = targets[next++];
69
+ link(s, target);
70
+ for (let count = 1; count < m; count++) {
71
+ if (adjacency !== null && stream.nextFloat() < triad) {
72
+ const mine = adjacency[s];
73
+ const candidates = adjacency[target].filter((x) => x !== s && !mine.includes(x));
74
+ if (candidates.length > 0) {
75
+ link(s, candidates[stream.nextBelow(candidates.length)]);
76
+ continue;
77
+ }
78
+ }
79
+ // the next unused target (a triad step may already have joined s to it)
80
+ do {
81
+ target = targets[next++];
82
+ } while (adjacency !== null && adjacency[s].includes(target) && next < m);
83
+ if (adjacency !== null && adjacency[s].includes(target)) {
84
+ // every planned target is taken: fall back to a fresh preferential draw
85
+ do {
86
+ target = repeated[stream.nextBelow(length)];
87
+ } while (target === s || adjacency[s].includes(target));
88
+ }
89
+ link(s, target);
90
+ }
91
+ for (let i = 0; i < m; i++) {
92
+ repeated[length++] = s;
93
+ }
94
+ }
95
+ return applyWeights(toGraph(n, out, false), options);
96
+ }
97
+ /**
98
+ * The Watts-Strogatz small world (D. J. Watts and S. H. Strogatz, "Collective dynamics of
99
+ * 'small-world' networks", Nature 393, 440-442, 1998), as networkx's `watts_strogatz_graph`
100
+ * builds it, in O(n k).
101
+ *
102
+ * Start from the ring lattice: edge slot u k/2 + (j - 1) holds (u, (u + j) mod n) for j = 1 .. k/2.
103
+ * Then for j = 1 .. k/2 and u = 0 .. n - 1 in that order: draw a float; if it is below beta and u is
104
+ * not already joined to every other node, redraw w = nextBelow(n) until w is neither u nor a
105
+ * neighbour of u, and rewire the slot to (u, w). All draws come from the single stream (seed,
106
+ * "watts-strogatz", 0). Edges are listed in slot order.
107
+ * @param options - n, k, beta and seed
108
+ * @returns the undirected graph
109
+ */
110
+ export function wattsStrogatzGraph(options) {
111
+ const { n, k, beta } = options;
112
+ checkInt("k", k, 2);
113
+ if (k % 2 !== 0) {
114
+ throw new RangeError(`k must be even, got ${k}`);
115
+ }
116
+ checkInt("n", n, k + 1);
117
+ checkProbability("beta", beta);
118
+ const seed = resolveSeed(options.seed);
119
+ const half = k / 2;
120
+ const m = n * half;
121
+ checkEdgeCount(m);
122
+ const src = new Uint32Array(m);
123
+ const dst = new Uint32Array(m);
124
+ const degree = new Uint32Array(n).fill(k);
125
+ // ponytail: a Set of u * n + v keys, fine to a few million edges; a hashed typed table beyond
126
+ const edges = new Set();
127
+ const key = (a, b) => (a < b ? a * n + b : b * n + a);
128
+ for (let u = 0; u < n; u++) {
129
+ for (let j = 1; j <= half; j++) {
130
+ const v = (u + j) % n;
131
+ src[u * half + j - 1] = u;
132
+ dst[u * half + j - 1] = v;
133
+ edges.add(key(u, v));
134
+ }
135
+ }
136
+ const stream = new RandomStream(seed, "watts-strogatz", 0);
137
+ for (let j = 1; j <= half; j++) {
138
+ for (let u = 0; u < n; u++) {
139
+ if (stream.nextFloat() >= beta || degree[u] >= n - 1) {
140
+ continue;
141
+ }
142
+ let w = stream.nextBelow(n);
143
+ while (w === u || edges.has(key(u, w))) {
144
+ w = stream.nextBelow(n);
145
+ }
146
+ const slot = u * half + j - 1;
147
+ const v = dst[slot];
148
+ edges.delete(key(u, v));
149
+ edges.add(key(u, w));
150
+ degree[v]--;
151
+ degree[w]++;
152
+ dst[slot] = w;
153
+ }
154
+ }
155
+ return applyWeights({ directed: false, nodeCount: n, src, dst }, options);
156
+ }
157
+ //# sourceMappingURL=preferential-attachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferential-attachment.js","sourceRoot":"","sources":["../../../src/generators/preferential-attachment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Random trees and random directed acyclic graphs.
3
+ */
4
+ import { type U32 } from "@graphty/graph-format";
5
+ import { type SampleGraph } from "../types.js";
6
+ import { EdgeBuffer } from "./util.js";
7
+ import { type WeightOptions } from "./weights.js";
8
+ /** Options of {@link randomTreeGraph}. */
9
+ export interface RandomTreeOptions extends WeightOptions {
10
+ /** The node count, >= 1. */
11
+ n: number;
12
+ /** The seed, an integer in [0, 2^53); default 0. */
13
+ seed?: number | undefined;
14
+ }
15
+ /**
16
+ * A uniformly random labelled tree: a uniformly random Pruefer sequence (H. Pruefer, Archiv der
17
+ * Mathematik und Physik 27, 142-144, 1918) of n - 2 draws nextBelow(n) from stream (seed,
18
+ * "prufer", 0), decoded in O(n). Edge k joins the k-th removed leaf to its neighbour; the last
19
+ * edge is (leaf, n - 1).
20
+ * @param options - n and seed
21
+ * @returns the undirected tree
22
+ */
23
+ export declare function randomTreeGraph(options: RandomTreeOptions): SampleGraph;
24
+ /** Options of {@link randomDagGraph}. */
25
+ export interface RandomDagOptions extends WeightOptions {
26
+ /** The width of every layer, top to bottom; layer i holds the next `layers[i]` node indices. */
27
+ layers: readonly number[];
28
+ /** The probability of each arc from a node to a node of the next layer. */
29
+ p: number;
30
+ /** The seed, an integer in [0, 2^53); default 0. */
31
+ seed?: number | undefined;
32
+ }
33
+ /**
34
+ * Rows [start, end) of the layered DAG: node u of layer i < L - 1 draws from stream (seed,
35
+ * "layered-dag", u) and holds the arcs to the chosen nodes of layer i + 1, ascending.
36
+ * @param starts - starts[i] = first node of layer i; starts[L] = n
37
+ * @param layerOf - the layer of every node
38
+ * @param p - the probability
39
+ * @param seed - the seed
40
+ * @param start - the first row
41
+ * @param end - one past the last row
42
+ * @param out - receives the arcs
43
+ */
44
+ export declare function dagRows(starts: readonly number[], layerOf: U32, p: number, seed: number, start: number, end: number, out: EdgeBuffer): void;
45
+ /**
46
+ * A random layered DAG: arcs only from layer i to layer i + 1, each independently with
47
+ * probability p, O(n + m). The standard input for layered (Sugiyama) drawing, topological sort
48
+ * and longest path. Arcs are listed by source node, targets ascending. Node column `layer` (u32).
49
+ * @param options - layers, p and seed
50
+ * @returns the directed graph
51
+ */
52
+ export declare function randomDagGraph(options: RandomDagOptions): SampleGraph;
53
+ //# sourceMappingURL=trees-and-dags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trees-and-dags.d.ts","sourceRoot":"","sources":["../../../src/generators/trees-and-dags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAIjD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgE,UAAU,EAAW,MAAM,WAAW,CAAC;AAC9G,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhE,0CAA0C;AAC1C,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACpD,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAoCvE;AAED,yCAAyC;AACzC,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACnD,gGAAgG;IAChG,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,2EAA2E;IAC3E,CAAC,EAAE,MAAM,CAAC;IACV,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CACnB,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE,GAAG,EACZ,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,UAAU,GAChB,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAuBrE"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Random trees and random directed acyclic graphs.
3
+ */
4
+ import { detLog } from "../random/log.js";
5
+ import { RandomStream, resolveSeed } from "../random/stream.js";
6
+ import { bernoulliSegment, binomialBuffer, checkInt, checkProbability, EdgeBuffer, toGraph } from "./util.js";
7
+ import { applyWeights } from "./weights.js";
8
+ /**
9
+ * A uniformly random labelled tree: a uniformly random Pruefer sequence (H. Pruefer, Archiv der
10
+ * Mathematik und Physik 27, 142-144, 1918) of n - 2 draws nextBelow(n) from stream (seed,
11
+ * "prufer", 0), decoded in O(n). Edge k joins the k-th removed leaf to its neighbour; the last
12
+ * edge is (leaf, n - 1).
13
+ * @param options - n and seed
14
+ * @returns the undirected tree
15
+ */
16
+ export function randomTreeGraph(options) {
17
+ const { n } = options;
18
+ checkInt("n", n, 1);
19
+ const seed = resolveSeed(options.seed);
20
+ const out = new EdgeBuffer(n);
21
+ if (n === 1) {
22
+ return applyWeights(toGraph(1, out, false), options);
23
+ }
24
+ const stream = new RandomStream(seed, "prufer", 0);
25
+ const code = new Uint32Array(n - 2);
26
+ const degree = new Uint32Array(n).fill(1);
27
+ for (let i = 0; i < n - 2; i++) {
28
+ code[i] = stream.nextBelow(n);
29
+ degree[code[i]]++;
30
+ }
31
+ let ptr = 0;
32
+ while (degree[ptr] !== 1) {
33
+ ptr++;
34
+ }
35
+ let leaf = ptr;
36
+ for (let i = 0; i < n - 2; i++) {
37
+ const v = code[i];
38
+ out.push(leaf, v);
39
+ degree[v]--;
40
+ if (degree[v] === 1 && v < ptr) {
41
+ leaf = v;
42
+ }
43
+ else {
44
+ ptr++;
45
+ while (degree[ptr] !== 1) {
46
+ ptr++;
47
+ }
48
+ leaf = ptr;
49
+ }
50
+ }
51
+ out.push(leaf, n - 1);
52
+ return applyWeights(toGraph(n, out, false), options);
53
+ }
54
+ /**
55
+ * Rows [start, end) of the layered DAG: node u of layer i < L - 1 draws from stream (seed,
56
+ * "layered-dag", u) and holds the arcs to the chosen nodes of layer i + 1, ascending.
57
+ * @param starts - starts[i] = first node of layer i; starts[L] = n
58
+ * @param layerOf - the layer of every node
59
+ * @param p - the probability
60
+ * @param seed - the seed
61
+ * @param start - the first row
62
+ * @param end - one past the last row
63
+ * @param out - receives the arcs
64
+ */
65
+ export function dagRows(starts, layerOf, p, seed, start, end, out) {
66
+ const logQ = detLog(1 - p);
67
+ const stream = new RandomStream(seed, "layered-dag", 0);
68
+ const last = starts.length - 2;
69
+ for (let u = start; u < end; u++) {
70
+ const layer = layerOf[u];
71
+ if (layer < last) {
72
+ stream.reset(u);
73
+ bernoulliSegment(stream, p, logQ, u, starts[layer + 1], starts[layer + 2], out);
74
+ }
75
+ }
76
+ }
77
+ /**
78
+ * A random layered DAG: arcs only from layer i to layer i + 1, each independently with
79
+ * probability p, O(n + m). The standard input for layered (Sugiyama) drawing, topological sort
80
+ * and longest path. Arcs are listed by source node, targets ascending. Node column `layer` (u32).
81
+ * @param options - layers, p and seed
82
+ * @returns the directed graph
83
+ */
84
+ export function randomDagGraph(options) {
85
+ const { layers, p } = options;
86
+ checkInt("layers.length", layers.length, 1);
87
+ checkProbability("p", p);
88
+ const seed = resolveSeed(options.seed);
89
+ const starts = [0];
90
+ let pairs = 0;
91
+ for (let i = 0; i < layers.length; i++) {
92
+ checkInt(`layers[${i}]`, layers[i], 0);
93
+ starts.push(starts[i] + layers[i]);
94
+ if (i > 0) {
95
+ pairs += layers[i - 1] * layers[i];
96
+ }
97
+ }
98
+ const n = starts[layers.length];
99
+ checkInt("the total size", n, 0);
100
+ const layerOf = new Uint32Array(n);
101
+ for (let i = 0; i < layers.length; i++) {
102
+ layerOf.fill(i, starts[i], starts[i + 1]);
103
+ }
104
+ const out = binomialBuffer(pairs, p);
105
+ dagRows(starts, layerOf, p, seed, 0, n, out);
106
+ return applyWeights(toGraph(n, out, true, { layer: layerOf }), options);
107
+ }
108
+ //# sourceMappingURL=trees-and-dags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trees-and-dags.js","sourceRoot":"","sources":["../../../src/generators/trees-and-dags.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Shared plumbing of the generators: argument checks, the growable edge buffer and the Bernoulli
3
+ * row sampler every G(n, p)-style generator is built on.
4
+ */
5
+ import { type U32 } from "@graphty/graph-format";
6
+ import { type RandomStream } from "../random/stream.js";
7
+ import { type SampleGraph } from "../types.js";
8
+ /**
9
+ * Throw unless `value` is an integer in [min, max].
10
+ * @param name - the option name, for the message
11
+ * @param value - the value
12
+ * @param min - the smallest allowed value
13
+ * @param max - the largest allowed value
14
+ */
15
+ export declare function checkInt(name: string, value: number, min: number, max?: number): void;
16
+ /**
17
+ * Throw unless `value` is a probability in [0, 1].
18
+ * @param name - the option name, for the message
19
+ * @param value - the value
20
+ */
21
+ export declare function checkProbability(name: string, value: number): void;
22
+ /**
23
+ * Throw unless `count` edges fit a graph-format snapshot.
24
+ * @param count - the edge count
25
+ */
26
+ export declare function checkEdgeCount(count: number): void;
27
+ /** A growable pair of Uint32Array edge endpoint arrays. */
28
+ export declare class EdgeBuffer {
29
+ src: U32;
30
+ dst: U32;
31
+ length: number;
32
+ /**
33
+ * An empty buffer.
34
+ * @param capacity - the initial capacity in edges
35
+ */
36
+ constructor(capacity: number);
37
+ /**
38
+ * Append one edge.
39
+ * @param u - the source index
40
+ * @param v - the target index
41
+ */
42
+ push(u: number, v: number): void;
43
+ /**
44
+ * The edges pushed so far as exactly sized arrays (copies when the buffer has slack).
45
+ * @returns the endpoint arrays
46
+ */
47
+ finish(): {
48
+ src: U32;
49
+ dst: U32;
50
+ };
51
+ private grow;
52
+ }
53
+ /**
54
+ * A buffer sized for a binomial number of edges: the mean plus six standard deviations, so it
55
+ * almost never grows.
56
+ * @param pairs - the number of candidate pairs
57
+ * @param p - the edge probability
58
+ * @returns the buffer
59
+ */
60
+ export declare function binomialBuffer(pairs: number, p: number): EdgeBuffer;
61
+ /**
62
+ * Append (row, c) for every column c in [lo, hi) chosen independently with probability p, in
63
+ * ascending c, by geometric skipping (V. Batagelj and U. Brandes, "Efficient generation of large
64
+ * random networks", Phys. Rev. E 71, 036113, 2005): O(1 + selected) draws instead of hi - lo.
65
+ * p = 0 and p = 1 draw nothing.
66
+ * @param stream - the row's stream
67
+ * @param p - the probability
68
+ * @param logQ - detLog(1 - p)
69
+ * @param row - the row node, written as the source
70
+ * @param lo - the first candidate column
71
+ * @param hi - one past the last candidate column
72
+ * @param out - the buffer
73
+ */
74
+ export declare function bernoulliSegment(stream: RandomStream, p: number, logQ: number, row: number, lo: number, hi: number, out: EdgeBuffer): void;
75
+ /**
76
+ * Assemble an undirected or directed SampleGraph from a buffer.
77
+ * @param nodeCount - the node count
78
+ * @param edges - the edges
79
+ * @param directed - whether the graph is directed
80
+ * @param nodeColumns - ground-truth columns, if any
81
+ * @returns the graph
82
+ */
83
+ export declare function toGraph(nodeCount: number, edges: EdgeBuffer, directed: boolean, nodeColumns?: SampleGraph["nodeColumns"]): SampleGraph;
84
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/generators/util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAa,KAAK,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAkB,GAAG,IAAI,CAIhG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED,2DAA2D;AAC3D,qBAAa,UAAU;IACnB,GAAG,EAAE,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,SAAK;IAEX;;;OAGG;gBACS,QAAQ,EAAE,MAAM;IAM5B;;;;OAIG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAShC;;;OAGG;IACH,MAAM,IAAI;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE;IAOhC,OAAO,CAAC,IAAI;CAUf;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAInE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE,YAAY,EACpB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,UAAU,GAChB,IAAI,CAeN;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,OAAO,EACjB,WAAW,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,GACzC,WAAW,CAKb"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Shared plumbing of the generators: argument checks, the growable edge buffer and the Bernoulli
3
+ * row sampler every G(n, p)-style generator is built on.
4
+ */
5
+ import { MAX_COUNT } from "@graphty/graph-format";
6
+ /**
7
+ * Throw unless `value` is an integer in [min, max].
8
+ * @param name - the option name, for the message
9
+ * @param value - the value
10
+ * @param min - the smallest allowed value
11
+ * @param max - the largest allowed value
12
+ */
13
+ export function checkInt(name, value, min, max = MAX_COUNT) {
14
+ if (!Number.isInteger(value) || value < min || value > max) {
15
+ throw new RangeError(`${name} must be an integer in [${min}, ${max}], got ${String(value)}`);
16
+ }
17
+ }
18
+ /**
19
+ * Throw unless `value` is a probability in [0, 1].
20
+ * @param name - the option name, for the message
21
+ * @param value - the value
22
+ */
23
+ export function checkProbability(name, value) {
24
+ if (!(value >= 0 && value <= 1)) {
25
+ throw new RangeError(`${name} must be a probability in [0, 1], got ${String(value)}`);
26
+ }
27
+ }
28
+ /**
29
+ * Throw unless `count` edges fit a graph-format snapshot.
30
+ * @param count - the edge count
31
+ */
32
+ export function checkEdgeCount(count) {
33
+ if (count > MAX_COUNT) {
34
+ throw new RangeError(`the graph would have ${count} edges, above the limit of ${MAX_COUNT}`);
35
+ }
36
+ }
37
+ /** A growable pair of Uint32Array edge endpoint arrays. */
38
+ export class EdgeBuffer {
39
+ /**
40
+ * An empty buffer.
41
+ * @param capacity - the initial capacity in edges
42
+ */
43
+ constructor(capacity) {
44
+ this.length = 0;
45
+ const size = Math.max(16, Math.min(capacity, MAX_COUNT));
46
+ this.src = new Uint32Array(size);
47
+ this.dst = new Uint32Array(size);
48
+ }
49
+ /**
50
+ * Append one edge.
51
+ * @param u - the source index
52
+ * @param v - the target index
53
+ */
54
+ push(u, v) {
55
+ if (this.length === this.src.length) {
56
+ this.grow();
57
+ }
58
+ this.src[this.length] = u;
59
+ this.dst[this.length] = v;
60
+ this.length++;
61
+ }
62
+ /**
63
+ * The edges pushed so far as exactly sized arrays (copies when the buffer has slack).
64
+ * @returns the endpoint arrays
65
+ */
66
+ finish() {
67
+ if (this.length === this.src.length) {
68
+ return { src: this.src, dst: this.dst };
69
+ }
70
+ return { src: this.src.slice(0, this.length), dst: this.dst.slice(0, this.length) };
71
+ }
72
+ grow() {
73
+ checkEdgeCount(this.length + 1);
74
+ const size = Math.min(this.src.length * 2, MAX_COUNT);
75
+ const src = new Uint32Array(size);
76
+ const dst = new Uint32Array(size);
77
+ src.set(this.src);
78
+ dst.set(this.dst);
79
+ this.src = src;
80
+ this.dst = dst;
81
+ }
82
+ }
83
+ /**
84
+ * A buffer sized for a binomial number of edges: the mean plus six standard deviations, so it
85
+ * almost never grows.
86
+ * @param pairs - the number of candidate pairs
87
+ * @param p - the edge probability
88
+ * @returns the buffer
89
+ */
90
+ export function binomialBuffer(pairs, p) {
91
+ const mean = pairs * p;
92
+ checkEdgeCount(mean);
93
+ return new EdgeBuffer(Math.ceil(mean + 6 * Math.sqrt(mean * (1 - p)) + 16));
94
+ }
95
+ /**
96
+ * Append (row, c) for every column c in [lo, hi) chosen independently with probability p, in
97
+ * ascending c, by geometric skipping (V. Batagelj and U. Brandes, "Efficient generation of large
98
+ * random networks", Phys. Rev. E 71, 036113, 2005): O(1 + selected) draws instead of hi - lo.
99
+ * p = 0 and p = 1 draw nothing.
100
+ * @param stream - the row's stream
101
+ * @param p - the probability
102
+ * @param logQ - detLog(1 - p)
103
+ * @param row - the row node, written as the source
104
+ * @param lo - the first candidate column
105
+ * @param hi - one past the last candidate column
106
+ * @param out - the buffer
107
+ */
108
+ export function bernoulliSegment(stream, p, logQ, row, lo, hi, out) {
109
+ if (p === 0 || lo >= hi) {
110
+ return;
111
+ }
112
+ if (p === 1) {
113
+ for (let c = lo; c < hi; c++) {
114
+ out.push(row, c);
115
+ }
116
+ return;
117
+ }
118
+ let c = lo + stream.nextSkip(logQ);
119
+ while (c < hi) {
120
+ out.push(row, c);
121
+ c += 1 + stream.nextSkip(logQ);
122
+ }
123
+ }
124
+ /**
125
+ * Assemble an undirected or directed SampleGraph from a buffer.
126
+ * @param nodeCount - the node count
127
+ * @param edges - the edges
128
+ * @param directed - whether the graph is directed
129
+ * @param nodeColumns - ground-truth columns, if any
130
+ * @returns the graph
131
+ */
132
+ export function toGraph(nodeCount, edges, directed, nodeColumns) {
133
+ const { src, dst } = edges.finish();
134
+ return nodeColumns === undefined
135
+ ? { directed, nodeCount, src, dst }
136
+ : { directed, nodeCount, src, dst, nodeColumns };
137
+ }
138
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/generators/util.ts"],"names":[],"mappings":"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"}