@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,153 @@
1
+ /**
2
+ * Random hyperbolic graphs (D. Krioukov, F. Papadopoulos, M. Kitsak, A. Vahdat and M. Boguna,
3
+ * "Hyperbolic geometry of complex networks", Phys. Rev. E 82, 036106, 2010,
4
+ * doi:10.1103/PhysRevE.82.036106): power-law degrees, high clustering and a native 2D embedding.
5
+ */
6
+ import { detExp } from "../random/exp.js";
7
+ import { detLog } from "../random/log.js";
8
+ import { RandomStream, resolveSeed } from "../random/stream.js";
9
+ import { detCosSinTurn } from "../random/trig.js";
10
+ import { checkInt, EdgeBuffer, toGraph } from "./util.js";
11
+ import { applyWeights } from "./weights.js";
12
+ /** The largest node count of the O(n^2) pair loop. */
13
+ const MAX_NODES = 20000;
14
+ /**
15
+ * cosh(x) from detExp.
16
+ * @param x - the argument
17
+ * @returns cosh x
18
+ */
19
+ function cosh(x) {
20
+ return (detExp(x) + detExp(-x)) / 2;
21
+ }
22
+ /**
23
+ * acosh(y) for y >= 1 from detLog.
24
+ * @param y - the argument
25
+ * @returns acosh y
26
+ */
27
+ function acosh(y) {
28
+ return detLog(y + Math.sqrt((y - 1) * (y + 1)));
29
+ }
30
+ /**
31
+ * Check the options, compute the disk radius and draw the points.
32
+ * @param options - the options
33
+ * @returns the plan
34
+ */
35
+ export function planHyperbolic(options) {
36
+ const { n, averageDegree, exponent } = options;
37
+ const temperature = options.temperature ?? 0;
38
+ checkInt("n", n, 0, MAX_NODES);
39
+ if (!(Number.isFinite(averageDegree) && averageDegree > 0)) {
40
+ throw new RangeError(`averageDegree must be a finite number > 0, got ${String(averageDegree)}`);
41
+ }
42
+ if (!(Number.isFinite(exponent) && exponent > 2)) {
43
+ throw new RangeError(`exponent must be a finite number > 2, got ${String(exponent)}`);
44
+ }
45
+ if (!(temperature >= 0 && temperature < 1)) {
46
+ throw new RangeError(`temperature must be in [0, 1), got ${String(temperature)}`);
47
+ }
48
+ const seed = resolveSeed(options.seed);
49
+ const alpha = (exponent - 1) / 2;
50
+ const xi = alpha / (alpha - 0.5);
51
+ let correction = 1;
52
+ if (temperature > 0) {
53
+ const cs = new Float64Array(2);
54
+ detCosSinTurn(temperature / 2, cs);
55
+ correction = (Math.PI * temperature) / cs[1];
56
+ }
57
+ const scale = ((2 * xi * xi * n) / (Math.PI * averageDegree)) * correction;
58
+ if (n >= 2 && !(scale > 1)) {
59
+ throw new RangeError(`averageDegree ${averageDegree} is too large for n = ${n}: the disk radius would be <= 0`);
60
+ }
61
+ const R = n >= 2 ? 2 * detLog(scale) : 0;
62
+ const coshAlphaR = cosh(alpha * R);
63
+ if (!Number.isFinite(coshAlphaR)) {
64
+ throw new RangeError(`exponent ${exponent} is too large: cosh(alpha R) overflows`);
65
+ }
66
+ const cosT = new Float64Array(n);
67
+ const sinT = new Float64Array(n);
68
+ const coshr = new Float64Array(n);
69
+ const sinhr = new Float64Array(n);
70
+ const x = new Float64Array(n);
71
+ const y = new Float64Array(n);
72
+ const radius = new Float64Array(n);
73
+ const cs = new Float64Array(2);
74
+ const stream = new RandomStream(seed, "hyperbolic-points", 0);
75
+ for (let i = 0; i < n; i++) {
76
+ stream.reset(i);
77
+ detCosSinTurn(stream.nextFloat(), cs);
78
+ const r = acosh(1 + (coshAlphaR - 1) * stream.nextFloat()) / alpha;
79
+ const er = detExp(r);
80
+ cosT[i] = cs[0];
81
+ sinT[i] = cs[1];
82
+ coshr[i] = (er + 1 / er) / 2;
83
+ sinhr[i] = (er - 1 / er) / 2;
84
+ radius[i] = r;
85
+ x[i] = r * cs[0];
86
+ y[i] = r * cs[1];
87
+ }
88
+ return { n, seed, temperature, R, coshR: cosh(R), cosT, sinT, coshr, sinhr, x, y, radius };
89
+ }
90
+ /**
91
+ * Rows [start, end) of the hyperbolic graph: row u holds the pairs (u, v), v = u + 1 .. n - 1 in
92
+ * ascending v, with cosh d = cosh r_u cosh r_v - sinh r_u sinh r_v cos(theta_u - theta_v) (the
93
+ * cosine of the angle difference expanded from the stored cosines and sines). At T = 0 the pair is
94
+ * an edge iff cosh d < cosh R (no draws). At T > 0 row u draws one nextFloat() t per pair from
95
+ * stream (seed, "hyperbolic", u) and the pair is an edge iff t < 1 / (1 + exp((d - R) / (2 T))),
96
+ * decided as acosh(cosh d) < R + 2 T ln((1 - t) / t) with no exp. Any split of [0, n) into
97
+ * consecutive ranges gives the whole graph.
98
+ * @param plan - the checked options and points
99
+ * @param start - the first row
100
+ * @param end - one past the last row
101
+ * @param out - receives the edges
102
+ */
103
+ export function hyperbolicRows(plan, start, end, out) {
104
+ const { n, R, coshR, temperature, cosT, sinT, coshr, sinhr } = plan;
105
+ const stream = new RandomStream(plan.seed, "hyperbolic", 0);
106
+ for (let u = start; u < end; u++) {
107
+ stream.reset(u);
108
+ for (let v = u + 1; v < n; v++) {
109
+ const coshD = coshr[u] * coshr[v] - sinhr[u] * sinhr[v] * (cosT[u] * cosT[v] + sinT[u] * sinT[v]);
110
+ if (temperature === 0) {
111
+ if (coshD < coshR) {
112
+ out.push(u, v);
113
+ }
114
+ continue;
115
+ }
116
+ const t = stream.nextFloat();
117
+ if (acosh(Math.max(1, coshD)) < R + 2 * temperature * detLog((1 - t) / t)) {
118
+ out.push(u, v);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ /**
124
+ * A random hyperbolic graph (Krioukov et al. 2010): n points in a hyperbolic disk of radius R,
125
+ * angles uniform and radii with density proportional to sinh(alpha r), alpha = (gamma - 1) / 2,
126
+ * so the degrees follow a power law with exponent gamma. At temperature 0 two nodes are joined iff
127
+ * their hyperbolic distance is below R; at T > 0 with probability 1 / (1 + exp((d - R) / (2 T))).
128
+ *
129
+ * R comes from the paper's approximation of the mean degree, R = 2 ln(2 xi^2 n / (pi k)) with
130
+ * xi = alpha / (alpha - 1/2), times (pi T / sin(pi T)) inside the logarithm for T > 0. It is an
131
+ * approximation, so the measured mean degree only lands near `averageDegree`: measured at n = 3000
132
+ * and 10000, within about 10% for exponent >= 2.5 and T <= 0.7, but about 0.6x at exponent 2.2 and
133
+ * about 0.5x at T = 0.9 (the approximation degrades as gamma approaches 2 and T approaches 1).
134
+ *
135
+ * Node i draws its angle theta = 2 pi u and then its radius r = acosh(1 + (cosh(alpha R) - 1) u') /
136
+ * alpha (inverse CDF) from stream (seed, "hyperbolic-points", i); the pairs are decided by
137
+ * {@link hyperbolicRows}. Edges are the pairs (u, v), u < v, ascending u then v. Node columns (all
138
+ * Float64Array): `x`, `y` (the native polar embedding r cos theta, r sin theta) and `radius` (r).
139
+ *
140
+ * Cost: O(n^2) pairs (and one draw per pair at T > 0), so n is capped at 20000.
141
+ * ponytail: naive pair loop, n <= 20000; the band algorithm of M. von Looz, H. Meyerhenke and
142
+ * R. Prutkin, "Generating random hyperbolic graphs in subquadratic time", ISAAC 2015,
143
+ * doi:10.1007/978-3-662-48971-0_40, is the upgrade path.
144
+ * @param options - n, averageDegree, exponent, temperature and seed
145
+ * @returns the undirected graph
146
+ */
147
+ export function hyperbolicGraph(options) {
148
+ const plan = planHyperbolic(options);
149
+ const out = new EdgeBuffer(Math.ceil(plan.n * options.averageDegree * 0.75) + 16);
150
+ hyperbolicRows(plan, 0, plan.n, out);
151
+ return applyWeights(toGraph(plan.n, out, false, { x: plan.x, y: plan.y, radius: plan.radius }), options);
152
+ }
153
+ //# sourceMappingURL=hyperbolic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperbolic.js","sourceRoot":"","sources":["../../../src/generators/hyperbolic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `@graphty/graph-samples/generators`: every graph generator. Each returns a {@link SampleGraph}
3
+ * (typed arrays that `fromEdgeArrays` of @graphty/graph-format loads directly). The random ones
4
+ * take an optional `seed` (default 0) and produce the same graph for the same options on every platform and
5
+ * every version of this package.
6
+ */
7
+ export { type SampleGraph } from "../types.js";
8
+ export { randomBipartiteGraph, type RandomBipartiteOptions } from "./bipartite.js";
9
+ export { plantedPartitionGraph, type PlantedPartitionOptions, stochasticBlockModelGraph, type StochasticBlockModelOptions, } from "./block-model.js";
10
+ export { balancedTreeGraph, barbellGraph, cavemanGraph, circularLadderGraph, completeBipartiteGraph, completeGraph, completeMultipartiteGraph, connectedCavemanGraph, cycleGraph, emptyGraph, hypercubeGraph, ladderGraph, lollipopGraph, mobiusLadderGraph, pathGraph, petersenGraph, ringOfCliquesGraph, starGraph, wheelGraph, } from "./classic.js";
11
+ export { bipartiteConfigurationModelGraph, type BipartiteConfigurationModelOptions, chungLuGraph, type ChungLuOptions, configurationModelGraph, type ConfigurationModelOptions, degreeCorrectedSbmGraph, type DegreeCorrectedSbmOptions, directedConfigurationModelGraph, type DirectedConfigurationModelOptions, type EdgePolicy, powerLawDegreeSequence, type PowerLawDegreeSequenceOptions, randomRegularGraph, type RandomRegularOptions, } from "./degree-sequence.js";
12
+ export { kroneckerGraph, type KroneckerOptions, priceGraph, type PriceOptions, randomOrderDagGraph, type RandomOrderDagOptions, rmatGraph, type RmatOptions, } from "./directed.js";
13
+ export { erdosRenyiGnmGraph, type ErdosRenyiGnmOptions, erdosRenyiGraph, type ErdosRenyiOptions, } from "./erdos-renyi.js";
14
+ export { akGraph, type AkOptions, type FlowNetwork, genrmfGraph, type GenrmfOptions, gridFlowNetwork, type GridFlowOptions, layeredFlowNetwork, type LayeredFlowOptions, } from "./flow.js";
15
+ export { knnGraph, type KnnOptions, randomGeometricGraph, type RandomGeometricOptions, waxmanGraph, type WaxmanOptions, } from "./geometric.js";
16
+ export { bianconiBarabasiGraph, type BianconiBarabasiOptions, duplicationDivergenceGraph, type DuplicationDivergenceOptions, forestFireGraph, type ForestFireOptions, newmanWattsGraph, type NewmanWattsOptions, randomApollonianGraph, type RandomApollonianOptions, randomRecursiveTreeGraph, type RandomRecursiveTreeOptions, wilsonMazeGraph, type WilsonMazeOptions, } from "./growth.js";
17
+ export { hyperbolicGraph, type HyperbolicOptions } from "./hyperbolic.js";
18
+ export { grid3dGraph, type Grid3dOptions, gridGraph, type GridOptions, hexagonalLatticeGraph, type PlanarLatticeOptions, triangularLatticeGraph, } from "./lattices.js";
19
+ export { lfrGraph, type LfrOptions } from "./lfr.js";
20
+ export { NAMED_GRAPH_NAMES, namedGraph, type NamedGraphName } from "./named.js";
21
+ export { barabasiAlbertGraph, type BarabasiAlbertOptions, wattsStrogatzGraph, type WattsStrogatzOptions, } from "./preferential-attachment.js";
22
+ export { randomDagGraph, type RandomDagOptions, randomTreeGraph, type RandomTreeOptions } from "./trees-and-dags.js";
23
+ export { addPathologicalEdges, EDGE_CASE_NAMES, edgeCaseGraph, type EdgeCaseName, type PathologicalEdgeOptions, randomMultigraph, type RandomMultigraphOptions, } from "./variants.js";
24
+ export { type ColumnCombine, type WeightOptions, type WeightSpec, withWeights } from "./weights.js";
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `@graphty/graph-samples/generators`: every graph generator. Each returns a {@link SampleGraph}
3
+ * (typed arrays that `fromEdgeArrays` of @graphty/graph-format loads directly). The random ones
4
+ * take an optional `seed` (default 0) and produce the same graph for the same options on every platform and
5
+ * every version of this package.
6
+ */
7
+ export { randomBipartiteGraph } from "./bipartite.js";
8
+ export { plantedPartitionGraph, stochasticBlockModelGraph, } from "./block-model.js";
9
+ export { balancedTreeGraph, barbellGraph, cavemanGraph, circularLadderGraph, completeBipartiteGraph, completeGraph, completeMultipartiteGraph, connectedCavemanGraph, cycleGraph, emptyGraph, hypercubeGraph, ladderGraph, lollipopGraph, mobiusLadderGraph, pathGraph, petersenGraph, ringOfCliquesGraph, starGraph, wheelGraph, } from "./classic.js";
10
+ export { bipartiteConfigurationModelGraph, chungLuGraph, configurationModelGraph, degreeCorrectedSbmGraph, directedConfigurationModelGraph, powerLawDegreeSequence, randomRegularGraph, } from "./degree-sequence.js";
11
+ export { kroneckerGraph, priceGraph, randomOrderDagGraph, rmatGraph, } from "./directed.js";
12
+ export { erdosRenyiGnmGraph, erdosRenyiGraph, } from "./erdos-renyi.js";
13
+ export { akGraph, genrmfGraph, gridFlowNetwork, layeredFlowNetwork, } from "./flow.js";
14
+ export { knnGraph, randomGeometricGraph, waxmanGraph, } from "./geometric.js";
15
+ export { bianconiBarabasiGraph, duplicationDivergenceGraph, forestFireGraph, newmanWattsGraph, randomApollonianGraph, randomRecursiveTreeGraph, wilsonMazeGraph, } from "./growth.js";
16
+ export { hyperbolicGraph } from "./hyperbolic.js";
17
+ export { grid3dGraph, gridGraph, hexagonalLatticeGraph, triangularLatticeGraph, } from "./lattices.js";
18
+ export { lfrGraph } from "./lfr.js";
19
+ export { NAMED_GRAPH_NAMES, namedGraph } from "./named.js";
20
+ export { barabasiAlbertGraph, wattsStrogatzGraph, } from "./preferential-attachment.js";
21
+ export { randomDagGraph, randomTreeGraph } from "./trees-and-dags.js";
22
+ export { addPathologicalEdges, EDGE_CASE_NAMES, edgeCaseGraph, randomMultigraph, } from "./variants.js";
23
+ export { withWeights } from "./weights.js";
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,oBAAoB,EAA+B,MAAM,gBAAgB,CAAC;AACnF,OAAO,EACH,qBAAqB,EAErB,yBAAyB,GAE5B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,UAAU,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,UAAU,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,gCAAgC,EAEhC,YAAY,EAEZ,uBAAuB,EAEvB,uBAAuB,EAEvB,+BAA+B,EAG/B,sBAAsB,EAEtB,kBAAkB,GAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,cAAc,EAEd,UAAU,EAEV,mBAAmB,EAEnB,SAAS,GAEZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,kBAAkB,EAElB,eAAe,GAElB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,OAAO,EAGP,WAAW,EAEX,eAAe,EAEf,kBAAkB,GAErB,MAAM,WAAW,CAAC;AACnB,OAAO,EACH,QAAQ,EAER,oBAAoB,EAEpB,WAAW,GAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,qBAAqB,EAErB,0BAA0B,EAE1B,eAAe,EAEf,gBAAgB,EAEhB,qBAAqB,EAErB,wBAAwB,EAExB,eAAe,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAA0B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EACH,WAAW,EAEX,SAAS,EAET,qBAAqB,EAErB,sBAAsB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAmB,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;AAChF,OAAO,EACH,mBAAmB,EAEnB,kBAAkB,GAErB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,cAAc,EAAyB,eAAe,EAA0B,MAAM,qBAAqB,CAAC;AACrH,OAAO,EACH,oBAAoB,EACpB,eAAe,EACf,aAAa,EAGb,gBAAgB,GAEnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAA2D,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Lattices: the square and cubic grids (with torus wrap-around, diagonal neighbours, forward-only
3
+ * arcs, random obstacles and position columns), the triangular lattice and the hexagonal
4
+ * (honeycomb) lattice. All deterministic except the obstacles, which draw from stream
5
+ * (seed, "grid-obstacles", node).
6
+ */
7
+ import { type SampleGraph } from "../types.js";
8
+ import { type WeightOptions } from "./weights.js";
9
+ /** Options of {@link grid3dGraph}. */
10
+ export interface Grid3dOptions extends WeightOptions {
11
+ /** The number of rows, >= 1. */
12
+ rows: number;
13
+ /** The number of columns, >= 1. */
14
+ cols: number;
15
+ /** The number of layers, >= 1. */
16
+ layers: number;
17
+ /**
18
+ * Wrap around (a torus): the last node of each row, column and layer is joined to the first.
19
+ * A dimension shorter than 3 does not wrap, so the graph stays simple.
20
+ */
21
+ periodic?: boolean | undefined;
22
+ /**
23
+ * Join diagonal neighbours too: the king's graph (8 neighbours) in 2D, the 26-neighbour lattice
24
+ * in 3D.
25
+ */
26
+ diagonals?: boolean | undefined;
27
+ /**
28
+ * Emit each edge once as an arc from the lower index to the higher: a DAG whose only source is
29
+ * node 0 and only sink node n - 1. Not with `periodic`.
30
+ */
31
+ directed?: boolean | undefined;
32
+ /**
33
+ * Block each node independently with this probability, in [0, 1): a blocked node keeps its
34
+ * index (and position) but has no edges, and the u8 node column `blocked` marks it (1).
35
+ */
36
+ obstacles?: number | undefined;
37
+ /** Emit Float64 node columns `x` (column), `y` (row) and, when layers > 1, `z` (layer). */
38
+ positions?: boolean | undefined;
39
+ }
40
+ /** Options of {@link gridGraph}: {@link Grid3dOptions} without layers. */
41
+ export type GridOptions = Omit<Grid3dOptions, "layers">;
42
+ /**
43
+ * The rows x cols x layers grid. Node (l, r, c) is index (l * rows + r) * cols + c. For each node
44
+ * in index order, the edge to each forward neighbour in the order of the offsets: +column, +row,
45
+ * +layer, then the diagonals. Without options this is the 6-neighbour lattice of phase 1, edge for
46
+ * edge. Obstacles draw one float per node from stream (seed, "grid-obstacles", node) -- node < p
47
+ * blocks it -- so the obstacle map does not depend on the other options.
48
+ * @param options - sizes and the lattice options
49
+ * @returns the graph
50
+ */
51
+ export declare function grid3dGraph(options: Grid3dOptions): SampleGraph;
52
+ /**
53
+ * The rows x cols grid: {@link grid3dGraph} with one layer. Node (r, c) is index r * cols + c; for
54
+ * each node in index order, the edge to its right neighbour, then the one below, then (with
55
+ * diagonals) below-left and below-right.
56
+ * @param options - sizes and the lattice options
57
+ * @returns the graph
58
+ */
59
+ export declare function gridGraph(options: GridOptions): SampleGraph;
60
+ /** Options of {@link triangularLatticeGraph} and {@link hexagonalLatticeGraph}. */
61
+ export interface PlanarLatticeOptions extends WeightOptions {
62
+ /** The number of rows, >= 1. */
63
+ rows: number;
64
+ /** The number of columns, >= 1. */
65
+ cols: number;
66
+ /** Emit Float64 node columns `x` and `y` placing every edge at unit length. */
67
+ positions?: boolean | undefined;
68
+ }
69
+ /**
70
+ * The triangular lattice as a triangulated rows x cols grid: node (r, c) is index r * cols + c and
71
+ * links to (r, c + 1), (r + 1, c) and (r + 1, c - 1), in that order, for each node in index order.
72
+ * Interior nodes have degree 6. Positions shear the grid into a parallelogram of equilateral
73
+ * triangles: x = c + r / 2, y = r sqrt(3) / 2.
74
+ * @param options - rows, cols, positions
75
+ * @returns the undirected graph
76
+ */
77
+ export declare function triangularLatticeGraph(options: PlanarLatticeOptions): SampleGraph;
78
+ /**
79
+ * The hexagonal (honeycomb) lattice in its brick-wall form: node (r, c) is index r * cols + c and
80
+ * links to (r, c + 1) always and to (r + 1, c) when r + c is even, in that order, for each node in
81
+ * index order. Interior nodes have degree 3; every face is a hexagon. Positions give unit edges:
82
+ * x = c sqrt(3) / 2, y = 1.5 r + (r + c even ? 0.5 : 0).
83
+ * @param options - rows, cols, positions
84
+ * @returns the undirected graph
85
+ */
86
+ export declare function hexagonalLatticeGraph(options: PlanarLatticeOptions): SampleGraph;
87
+ //# sourceMappingURL=lattices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lattices.d.ts","sourceRoot":"","sources":["../../../src/generators/lattices.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEhE,sCAAsC;AACtC,MAAM,WAAW,aAAc,SAAQ,aAAa;IAChD,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnC;AAED,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AA+BxD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAyF/D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAE3D;AAED,mFAAmF;AACnF,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACvD,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnC;AAkBD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,CA8BjF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,CA4BhF"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Lattices: the square and cubic grids (with torus wrap-around, diagonal neighbours, forward-only
3
+ * arcs, random obstacles and position columns), the triangular lattice and the hexagonal
4
+ * (honeycomb) lattice. All deterministic except the obstacles, which draw from stream
5
+ * (seed, "grid-obstacles", node).
6
+ */
7
+ import { RandomStream, resolveSeed } from "../random/stream.js";
8
+ import { checkEdgeCount, checkInt, checkProbability, EdgeBuffer, toGraph } from "./util.js";
9
+ import { applyWeights } from "./weights.js";
10
+ /**
11
+ * The neighbour offsets (dc, dr, dl) a node links forward to, in edge order: +column, +row,
12
+ * +layer, then (with diagonals) every other offset in {-1, 0, 1}^3 that is lexicographically
13
+ * positive in (dl, dr, dc), ordered by dl, then dr, then dc.
14
+ * @param diagonals - whether to include the diagonal offsets
15
+ * @returns the offsets
16
+ */
17
+ function forwardOffsets(diagonals) {
18
+ const offsets = [
19
+ [1, 0, 0],
20
+ [0, 1, 0],
21
+ [0, 0, 1],
22
+ ];
23
+ if (diagonals) {
24
+ for (let dl = 0; dl <= 1; dl++) {
25
+ for (let dr = -1; dr <= 1; dr++) {
26
+ for (let dc = -1; dc <= 1; dc++) {
27
+ const positive = dl > 0 || (dl === 0 && (dr > 0 || (dr === 0 && dc > 0)));
28
+ const axis = Math.abs(dc) + Math.abs(dr) + Math.abs(dl) === 1;
29
+ if (positive && !axis) {
30
+ offsets.push([dc, dr, dl]);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ return offsets;
37
+ }
38
+ /**
39
+ * The rows x cols x layers grid. Node (l, r, c) is index (l * rows + r) * cols + c. For each node
40
+ * in index order, the edge to each forward neighbour in the order of the offsets: +column, +row,
41
+ * +layer, then the diagonals. Without options this is the 6-neighbour lattice of phase 1, edge for
42
+ * edge. Obstacles draw one float per node from stream (seed, "grid-obstacles", node) -- node < p
43
+ * blocks it -- so the obstacle map does not depend on the other options.
44
+ * @param options - sizes and the lattice options
45
+ * @returns the graph
46
+ */
47
+ export function grid3dGraph(options) {
48
+ const { rows, cols, layers } = options;
49
+ checkInt("rows", rows, 1);
50
+ checkInt("cols", cols, 1);
51
+ checkInt("layers", layers, 1);
52
+ const n = rows * cols * layers;
53
+ checkInt("rows * cols * layers", n, 1);
54
+ const periodic = options.periodic === true;
55
+ const directed = options.directed === true;
56
+ if (periodic && directed) {
57
+ throw new RangeError("directed grids cannot be periodic: the wrap-around arcs would close cycles");
58
+ }
59
+ const offsets = forwardOffsets(options.diagonals === true);
60
+ checkEdgeCount(n * offsets.length);
61
+ let blocked = null;
62
+ if (options.obstacles !== undefined) {
63
+ const p = options.obstacles;
64
+ checkProbability("obstacles", p);
65
+ if (p >= 1) {
66
+ throw new RangeError("obstacles must be below 1");
67
+ }
68
+ blocked = new Uint8Array(n);
69
+ const stream = new RandomStream(resolveSeed(options.seed), "grid-obstacles", 0);
70
+ for (let i = 0; i < n; i++) {
71
+ stream.reset(i);
72
+ blocked[i] = stream.nextFloat() < p ? 1 : 0;
73
+ }
74
+ }
75
+ const sizes = [cols, rows, layers];
76
+ const wraps = sizes.map((size) => periodic && size >= 3);
77
+ const plane = rows * cols;
78
+ const out = new EdgeBuffer(n * Math.min(offsets.length, 3));
79
+ const at = [0, 0, 0];
80
+ for (let l = 0; l < layers; l++) {
81
+ for (let r = 0; r < rows; r++) {
82
+ for (let c = 0; c < cols; c++) {
83
+ const i = l * plane + r * cols + c;
84
+ if (blocked?.[i] === 1) {
85
+ continue;
86
+ }
87
+ const here = [c, r, l];
88
+ for (const offset of offsets) {
89
+ let inside = true;
90
+ for (let axis = 0; axis < 3; axis++) {
91
+ let x = here[axis] + offset[axis];
92
+ if (x < 0 || x >= sizes[axis]) {
93
+ if (!wraps[axis]) {
94
+ inside = false;
95
+ break;
96
+ }
97
+ x = (x + sizes[axis]) % sizes[axis];
98
+ }
99
+ at[axis] = x;
100
+ }
101
+ if (!inside) {
102
+ continue;
103
+ }
104
+ const j = at[2] * plane + at[1] * cols + at[0];
105
+ if (blocked?.[j] === 1) {
106
+ continue;
107
+ }
108
+ out.push(directed && j < i ? j : i, directed && j < i ? i : j);
109
+ }
110
+ }
111
+ }
112
+ }
113
+ const columns = {};
114
+ if (blocked !== null) {
115
+ columns.blocked = blocked;
116
+ }
117
+ if (options.positions === true) {
118
+ const x = new Float64Array(n);
119
+ const y = new Float64Array(n);
120
+ const z = layers > 1 ? new Float64Array(n) : null;
121
+ for (let i = 0; i < n; i++) {
122
+ x[i] = i % cols;
123
+ y[i] = Math.floor(i / cols) % rows;
124
+ if (z !== null) {
125
+ z[i] = Math.floor(i / plane);
126
+ }
127
+ }
128
+ columns.x = x;
129
+ columns.y = y;
130
+ if (z !== null) {
131
+ columns.z = z;
132
+ }
133
+ }
134
+ const graph = toGraph(n, out, directed, Object.keys(columns).length > 0 ? columns : undefined);
135
+ return applyWeights(graph, options);
136
+ }
137
+ /**
138
+ * The rows x cols grid: {@link grid3dGraph} with one layer. Node (r, c) is index r * cols + c; for
139
+ * each node in index order, the edge to its right neighbour, then the one below, then (with
140
+ * diagonals) below-left and below-right.
141
+ * @param options - sizes and the lattice options
142
+ * @returns the graph
143
+ */
144
+ export function gridGraph(options) {
145
+ return grid3dGraph({ ...options, layers: 1 });
146
+ }
147
+ const HALF_SQRT3 = 0.8660254037844386;
148
+ /**
149
+ * Check the sizes of a planar lattice.
150
+ * @param options - the options
151
+ * @returns the node count
152
+ */
153
+ function planarSize(options) {
154
+ checkInt("rows", options.rows, 1);
155
+ checkInt("cols", options.cols, 1);
156
+ const n = options.rows * options.cols;
157
+ checkInt("rows * cols", n, 1);
158
+ checkEdgeCount(3 * n);
159
+ return n;
160
+ }
161
+ /**
162
+ * The triangular lattice as a triangulated rows x cols grid: node (r, c) is index r * cols + c and
163
+ * links to (r, c + 1), (r + 1, c) and (r + 1, c - 1), in that order, for each node in index order.
164
+ * Interior nodes have degree 6. Positions shear the grid into a parallelogram of equilateral
165
+ * triangles: x = c + r / 2, y = r sqrt(3) / 2.
166
+ * @param options - rows, cols, positions
167
+ * @returns the undirected graph
168
+ */
169
+ export function triangularLatticeGraph(options) {
170
+ const n = planarSize(options);
171
+ const { rows, cols } = options;
172
+ const out = new EdgeBuffer(3 * n);
173
+ for (let r = 0; r < rows; r++) {
174
+ for (let c = 0; c < cols; c++) {
175
+ const i = r * cols + c;
176
+ if (c + 1 < cols) {
177
+ out.push(i, i + 1);
178
+ }
179
+ if (r + 1 < rows) {
180
+ out.push(i, i + cols);
181
+ if (c > 0) {
182
+ out.push(i, i + cols - 1);
183
+ }
184
+ }
185
+ }
186
+ }
187
+ let columns;
188
+ if (options.positions === true) {
189
+ const x = new Float64Array(n);
190
+ const y = new Float64Array(n);
191
+ for (let i = 0; i < n; i++) {
192
+ const r = Math.floor(i / cols);
193
+ x[i] = (i % cols) + r / 2;
194
+ y[i] = r * HALF_SQRT3;
195
+ }
196
+ columns = { x, y };
197
+ }
198
+ return applyWeights(toGraph(n, out, false, columns), options);
199
+ }
200
+ /**
201
+ * The hexagonal (honeycomb) lattice in its brick-wall form: node (r, c) is index r * cols + c and
202
+ * links to (r, c + 1) always and to (r + 1, c) when r + c is even, in that order, for each node in
203
+ * index order. Interior nodes have degree 3; every face is a hexagon. Positions give unit edges:
204
+ * x = c sqrt(3) / 2, y = 1.5 r + (r + c even ? 0.5 : 0).
205
+ * @param options - rows, cols, positions
206
+ * @returns the undirected graph
207
+ */
208
+ export function hexagonalLatticeGraph(options) {
209
+ const n = planarSize(options);
210
+ const { rows, cols } = options;
211
+ const out = new EdgeBuffer(2 * n);
212
+ for (let r = 0; r < rows; r++) {
213
+ for (let c = 0; c < cols; c++) {
214
+ const i = r * cols + c;
215
+ if (c + 1 < cols) {
216
+ out.push(i, i + 1);
217
+ }
218
+ if (r + 1 < rows && (r + c) % 2 === 0) {
219
+ out.push(i, i + cols);
220
+ }
221
+ }
222
+ }
223
+ let columns;
224
+ if (options.positions === true) {
225
+ const x = new Float64Array(n);
226
+ const y = new Float64Array(n);
227
+ for (let i = 0; i < n; i++) {
228
+ const r = Math.floor(i / cols);
229
+ const c = i % cols;
230
+ x[i] = c * HALF_SQRT3;
231
+ y[i] = 1.5 * r + ((r + c) % 2 === 0 ? 0.5 : 0);
232
+ }
233
+ columns = { x, y };
234
+ }
235
+ return applyWeights(toGraph(n, out, false, columns), options);
236
+ }
237
+ //# sourceMappingURL=lattices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lattices.js","sourceRoot":"","sources":["../../../src/generators/lattices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * The LFR community-detection benchmark: power-law degrees, power-law community sizes and a
3
+ * mixing parameter, with the planted communities as ground truth.
4
+ */
5
+ import { type SampleGraph } from "../types.js";
6
+ import { type WeightOptions } from "./weights.js";
7
+ /** Options of {@link lfrGraph}. */
8
+ export interface LfrOptions extends WeightOptions {
9
+ /** The node count, in [1, 1,000,000]. */
10
+ n: number;
11
+ /** The smallest degree, >= 1. */
12
+ minDegree: number;
13
+ /** The largest degree, in [minDegree, n - 1]. */
14
+ maxDegree: number;
15
+ /** The degree power-law exponent (tau1), a finite number >= 0, typically 2 to 3. */
16
+ degreeExponent: number;
17
+ /** The smallest community, >= 1. */
18
+ minCommunity: number;
19
+ /** The largest community, in [minCommunity, n]. */
20
+ maxCommunity: number;
21
+ /** The community-size power-law exponent (tau2), a finite number >= 0, typically 1 to 2. */
22
+ communityExponent: number;
23
+ /** The mixing parameter mu in [0, 1]: the share of each node's edges that leave its community. */
24
+ mixing: number;
25
+ /** The seed, an integer in [0, 2^53); default 0. */
26
+ seed?: number | undefined;
27
+ }
28
+ /**
29
+ * The LFR benchmark (A. Lancichinetti, S. Fortunato and F. Radicchi, "Benchmark graphs for testing
30
+ * community detection algorithms", Phys. Rev. E 78, 046110, 2008,
31
+ * doi:10.1103/PhysRevE.78.046110), built with configuration models:
32
+ *
33
+ * 1. Degrees: node i's degree is the i-th power-law draw on [minDegree, maxDegree] from stream
34
+ * (seed, "lfr-degrees", 0); an odd sum is fixed on the last node as in powerLawDegreeSequence.
35
+ * 2. Community sizes: power law on [minCommunity, maxCommunity] summing to exactly n (stream
36
+ * "lfr-sizes"); community ids are the draw order.
37
+ * 3. Internal degree round((1 - mu) d); assignment of nodes to communities larger than their
38
+ * internal degree (stream "lfr-assign"); a RangeError when none exists.
39
+ * 4. Inside each community c, ascending: when its internal degrees sum to an odd number the member
40
+ * with the largest (lowest index on ties) moves one stub to the outside; then a configuration
41
+ * model on the members' ascending stub list shuffled with stream (seed, "lfr-internal", c).
42
+ * 5. Outside: a configuration model on the remaining degrees d - internal, stream
43
+ * (seed, "lfr-external", 0).
44
+ *
45
+ * Self-loops and repeated pairs are erased, and so are external pairs that land inside one
46
+ * community, so degrees and the mixing come out approximate: the mean degree drops by up to about
47
+ * 10% (repeated pairs inside small communities), and the measured mixing lands within about 0.02 of
48
+ * mu for thousands of nodes. No edge switching repairs this. Edges: every community's internal
49
+ * edges (communities ascending, pair order), then the external edges. Node column `community` (u32).
50
+ * O(n log n + m); n at most 1,000,000.
51
+ * @param options - n, degree and community power laws, mixing and seed
52
+ * @returns the undirected graph
53
+ */
54
+ export declare function lfrGraph(options: LfrOptions): SampleGraph;
55
+ //# sourceMappingURL=lfr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lfr.d.ts","sourceRoot":"","sources":["../../../src/generators/lfr.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAKhE,mCAAmC;AACnC,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC7C,yCAAyC;IACzC,CAAC,EAAE,MAAM,CAAC;IACV,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,cAAc,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAqFD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,CAiFzD"}