@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,101 @@
1
+ /**
2
+ * An exponential and the power functions built on it, returning the same bits on every JavaScript
3
+ * engine: a port of fdlibm's `__ieee754_exp` (e_exp.c, Sun Microsystems 1993), for the same reason
4
+ * and with the same technique as `detLog` in log.ts -- the exponent is read and written through a
5
+ * little-endian DataView and everything else is IEEE-754 double addition, subtraction,
6
+ * multiplication and division, which ECMAScript requires to be correctly rounded. Error below 1 ulp.
7
+ */
8
+ import { detLog } from "./log.js";
9
+ const O_THRESHOLD = 7.09782712893383973096e2;
10
+ const U_THRESHOLD = -7.45133219101941108420e2;
11
+ const LN2_HI = 6.93147180369123816490e-1;
12
+ const LN2_LO = 1.90821492927058770002e-10;
13
+ const INV_LN2 = 1.44269504088896338700;
14
+ const TWOM1000 = 9.33263618503218878990e-302;
15
+ const P1 = 1.66666666666666019037e-1;
16
+ const P2 = -2.77777777770155933842e-3;
17
+ const P3 = 6.61375632143793436117e-5;
18
+ const P4 = -1.65339022054652515390e-6;
19
+ const P5 = 4.13813679705723846039e-8;
20
+ const view = new DataView(new ArrayBuffer(8));
21
+ /**
22
+ * `y * 2^k` for a y in [0.5, 2) and k >= -1021, by adding k to the exponent field.
23
+ * @param y - the mantissa part
24
+ * @param k - the power of two
25
+ * @returns the scaled value
26
+ */
27
+ function scale(y, k) {
28
+ view.setFloat64(0, y, true);
29
+ view.setInt32(4, view.getInt32(4, true) + (k << 20), true);
30
+ return view.getFloat64(0, true);
31
+ }
32
+ /**
33
+ * e^x, bit-identical across engines.
34
+ * @param x - the argument
35
+ * @returns e^x; +Infinity above about 709.78, 0 below about -745.13, NaN for NaN
36
+ */
37
+ export function detExp(x) {
38
+ view.setFloat64(0, x, true);
39
+ const high = view.getInt32(4, true);
40
+ const negative = high < 0 ? 1 : 0;
41
+ const hx = high & 0x7fffffff;
42
+ if (hx >= 0x40862e42) {
43
+ if (hx >= 0x7ff00000) {
44
+ // NaN stays NaN, +Infinity stays, -Infinity gives 0
45
+ return negative === 0 || Number.isNaN(x) ? x + x : 0;
46
+ }
47
+ if (x > O_THRESHOLD) {
48
+ return Infinity;
49
+ }
50
+ if (x < U_THRESHOLD) {
51
+ return 0;
52
+ }
53
+ }
54
+ let hi = 0;
55
+ let lo = 0;
56
+ let k = 0;
57
+ let r = x;
58
+ if (hx > 0x3fd62e42) {
59
+ // |x| > 0.5 ln 2: reduce to r = x - k ln 2
60
+ if (hx < 0x3ff0a2b2) {
61
+ hi = negative === 0 ? x - LN2_HI : x + LN2_HI;
62
+ lo = negative === 0 ? LN2_LO : -LN2_LO;
63
+ k = 1 - negative - negative;
64
+ }
65
+ else {
66
+ k = Math.trunc(INV_LN2 * x + (negative === 0 ? 0.5 : -0.5));
67
+ hi = x - k * LN2_HI;
68
+ lo = k * LN2_LO;
69
+ }
70
+ r = hi - lo;
71
+ }
72
+ else if (hx < 0x3e300000) {
73
+ // |x| < 2^-28
74
+ return 1 + x;
75
+ }
76
+ const t = r * r;
77
+ const c = r - t * (P1 + t * (P2 + t * (P3 + t * (P4 + t * P5))));
78
+ if (k === 0) {
79
+ return 1 - ((r * c) / (c - 2.0) - r);
80
+ }
81
+ const y = 1 - (lo - (r * c) / (2.0 - c) - hi);
82
+ return k >= -1021 ? scale(y, k) : scale(y, k + 1000) * TWOM1000;
83
+ }
84
+ /**
85
+ * x^y as `detExp(y * detLog(x))` for x > 0: deterministic, not correctly rounded (the relative
86
+ * error grows with |y ln x|, about 1e-13 for the magnitudes the generators use). 0^y is 0 for
87
+ * y > 0.
88
+ * @param x - the base, >= 0
89
+ * @param y - the exponent
90
+ * @returns x^y
91
+ */
92
+ export function detPow(x, y) {
93
+ if (x === 0) {
94
+ if (y === 0) {
95
+ return 1;
96
+ }
97
+ return y > 0 ? 0 : Infinity;
98
+ }
99
+ return detExp(y * detLog(x));
100
+ }
101
+ //# sourceMappingURL=exp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exp.js","sourceRoot":"","sources":["../../../src/random/exp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * A natural logarithm that returns the same bits on every JavaScript engine.
3
+ *
4
+ * ECMAScript leaves `Math.log` "implementation-approximated", so two engines may differ in the
5
+ * last bit, and a geometric skip `floor(log(u) / log(1 - p))` that lands on an integer boundary
6
+ * would then pick a different edge. This is a port of fdlibm's `__ieee754_log` (e_log.c, Sun
7
+ * Microsystems 1993, the code V8 and SpiderMonkey themselves use): it reads the exponent and
8
+ * mantissa through a little-endian DataView and otherwise uses only IEEE-754 double addition,
9
+ * subtraction, multiplication and division, which ECMAScript requires to be correctly rounded
10
+ * (and forbids from being fused). So the result is a pure function of the input bits.
11
+ * Error below 1 ulp.
12
+ */
13
+ /**
14
+ * The natural logarithm of `x`, bit-identical across engines.
15
+ * @param input - the argument
16
+ * @returns ln(input); -Infinity for 0, NaN for negative input or NaN
17
+ */
18
+ export declare function detLog(input: number): number;
19
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/random/log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsD5C"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * A natural logarithm that returns the same bits on every JavaScript engine.
3
+ *
4
+ * ECMAScript leaves `Math.log` "implementation-approximated", so two engines may differ in the
5
+ * last bit, and a geometric skip `floor(log(u) / log(1 - p))` that lands on an integer boundary
6
+ * would then pick a different edge. This is a port of fdlibm's `__ieee754_log` (e_log.c, Sun
7
+ * Microsystems 1993, the code V8 and SpiderMonkey themselves use): it reads the exponent and
8
+ * mantissa through a little-endian DataView and otherwise uses only IEEE-754 double addition,
9
+ * subtraction, multiplication and division, which ECMAScript requires to be correctly rounded
10
+ * (and forbids from being fused). So the result is a pure function of the input bits.
11
+ * Error below 1 ulp.
12
+ */
13
+ const LN2_HI = 6.9314718036912381649e-1; // 3fe62e42 fee00000
14
+ const LN2_LO = 1.90821492927058770002e-10; // 3dea39ef 35793c76
15
+ const TWO54 = 1.8014398509481984e16; // 43500000 00000000
16
+ const LG1 = 6.66666666666673513e-1; // 3FE55555 55555593
17
+ const LG2 = 3.999999999940941908e-1; // 3FD99999 9997FA04
18
+ const LG3 = 2.857142874366239149e-1; // 3FD24924 94229359
19
+ const LG4 = 2.222219843214978396e-1; // 3FCC71C5 1D8E78AF
20
+ const LG5 = 1.818357216161805012e-1; // 3FC74664 96CB03DE
21
+ const LG6 = 1.531383769920937332e-1; // 3FC39A09 D078C69F
22
+ const LG7 = 1.479819860511658591e-1; // 3FC2F112 DF3E5244
23
+ const view = new DataView(new ArrayBuffer(8));
24
+ /**
25
+ * The natural logarithm of `x`, bit-identical across engines.
26
+ * @param input - the argument
27
+ * @returns ln(input); -Infinity for 0, NaN for negative input or NaN
28
+ */
29
+ export function detLog(input) {
30
+ let x = input;
31
+ view.setFloat64(0, x, true);
32
+ let hx = view.getInt32(4, true);
33
+ const lx = view.getUint32(0, true);
34
+ let k = 0;
35
+ if (hx < 0x00100000) {
36
+ if (((hx & 0x7fffffff) | lx) === 0) {
37
+ return -Infinity;
38
+ }
39
+ if (hx < 0) {
40
+ return NaN;
41
+ }
42
+ // subnormal: scale up
43
+ k -= 54;
44
+ x *= TWO54;
45
+ view.setFloat64(0, x, true);
46
+ hx = view.getInt32(4, true);
47
+ }
48
+ if (hx >= 0x7ff00000) {
49
+ return x + x;
50
+ }
51
+ k += (hx >> 20) - 1023;
52
+ hx &= 0x000fffff;
53
+ const i0 = (hx + 0x95f64) & 0x100000;
54
+ // normalize x or x/2
55
+ view.setInt32(4, hx | (i0 ^ 0x3ff00000), true);
56
+ x = view.getFloat64(0, true);
57
+ k += i0 >> 20;
58
+ const f = x - 1.0;
59
+ if ((0x000fffff & (2 + hx)) < 3) {
60
+ // |f| < 2**-20
61
+ if (f === 0) {
62
+ return k === 0 ? 0 : k * LN2_HI + k * LN2_LO;
63
+ }
64
+ const r = f * f * (0.5 - 0.3333333333333333 * f);
65
+ return k === 0 ? f - r : k * LN2_HI - (r - k * LN2_LO - f);
66
+ }
67
+ const s = f / (2.0 + f);
68
+ const dk = k;
69
+ const z = s * s;
70
+ let i = hx - 0x6147a;
71
+ const w = z * z;
72
+ const j = 0x6b851 - hx;
73
+ const t1 = w * (LG2 + w * (LG4 + w * LG6));
74
+ const t2 = z * (LG1 + w * (LG3 + w * (LG5 + w * LG7)));
75
+ i |= j;
76
+ const R = t2 + t1;
77
+ if (i > 0) {
78
+ const hfsq = 0.5 * f * f;
79
+ return k === 0 ? f - (hfsq - s * (hfsq + R)) : dk * LN2_HI - (hfsq - (s * (hfsq + R) + dk * LN2_LO) - f);
80
+ }
81
+ return k === 0 ? f - s * (f - R) : dk * LN2_HI - (s * (f - R) - dk * LN2_LO - f);
82
+ }
83
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/random/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * The one random number source of @graphty/graph-samples, and its determinism contract.
3
+ *
4
+ * A stream is named by `(seed, domain, block)`:
5
+ *
6
+ * - `seed` is the caller's seed, any safe integer in [0, 2^53).
7
+ * - `domain` is a fixed ASCII name per generator and purpose ("gnp", "sbm", ...). It is hashed
8
+ * with 32-bit FNV-1a to `domainId`.
9
+ * - `block` is a unit of work the ALGORITHM defines (a row of the adjacency matrix, a node), an
10
+ * integer in [0, 2^32). It never depends on how many workers or chunks run the generator.
11
+ *
12
+ * The stream's key is `Threefry2x32-20(key = (seed mod 2^32, floor(seed / 2^32)),
13
+ * counter = (domainId, block))`, and its words are `Threefry2x32-20(key = streamKey,
14
+ * counter = (i mod 2^32, floor(i / 2^32)))` for i = 0, 1, 2, ..., two words per counter, word 0
15
+ * first. Every draw below is defined in terms of those words with integer-exact arithmetic, so the
16
+ * same `(seed, domain, block)` yields the same values on every engine, platform and version.
17
+ * `test/random/stream.test.ts` freezes it with golden values: changing anything here changes every
18
+ * seeded graph, which is a breaking change of the package.
19
+ */
20
+ /**
21
+ * 32-bit FNV-1a over the UTF-16 code units of `name` (the names are ASCII, so this is the bytes).
22
+ * @param name - the domain name
23
+ * @returns the unsigned 32-bit hash
24
+ */
25
+ export declare function domainId(name: string): number;
26
+ /**
27
+ * The seed every random generator uses when the caller gives none: 0. A fixed default, never the
28
+ * clock, so an unseeded call is as reproducible as a seeded one. Frozen with the rest of the
29
+ * contract: changing it changes every unseeded graph.
30
+ */
31
+ export declare const DEFAULT_SEED = 0;
32
+ /**
33
+ * The caller's seed, or {@link DEFAULT_SEED} when it is undefined; throws on an invalid seed.
34
+ * @param seed - the seed option
35
+ * @returns the seed to use
36
+ */
37
+ export declare function resolveSeed(seed: number | undefined): number;
38
+ /**
39
+ * Throw unless `seed` is a safe non-negative integer.
40
+ * @param seed - the seed
41
+ */
42
+ export declare function checkSeed(seed: number): void;
43
+ /** A deterministic stream of random words keyed by (seed, domain, block). */
44
+ export declare class RandomStream {
45
+ private readonly seedLo;
46
+ private readonly seedHi;
47
+ private readonly domain;
48
+ private readonly key;
49
+ private readonly out;
50
+ private counter;
51
+ private spare;
52
+ /**
53
+ * The stream of one block.
54
+ * @param seed - the caller's seed, an integer in [0, 2^53)
55
+ * @param domain - the generator's fixed domain name
56
+ * @param block - the first block, an integer in [0, 2^32)
57
+ */
58
+ constructor(seed: number, domain: string, block: number);
59
+ /**
60
+ * Restart the stream at the first word of another block of the same seed and domain.
61
+ * @param block - the block, an integer in [0, 2^32)
62
+ */
63
+ reset(block: number): void;
64
+ /**
65
+ * The next word.
66
+ * @returns an unsigned 32-bit integer
67
+ */
68
+ nextU32(): number;
69
+ /**
70
+ * A uniform double in [0, 1) with 53 random bits: (a >>> 5) * 2^26 + (b >>> 6), over 2^53,
71
+ * for the next two words a and b. Exact: every step is an integer below 2^53.
72
+ * @returns the double
73
+ */
74
+ nextFloat(): number;
75
+ /**
76
+ * A uniform integer in [0, n) by masked rejection: draw a word, keep its low
77
+ * ceil(log2 n) bits, retry while the result is >= n. Exact and unbiased; fewer than two
78
+ * words per call on average. For n above 2^32 the high bits come from one extra word drawn
79
+ * first.
80
+ * @param n - the bound, an integer in [1, 2^53]
81
+ * @returns the integer
82
+ */
83
+ nextBelow(n: number): number;
84
+ /**
85
+ * The number of failures before the next success of a Bernoulli(p) sequence, given
86
+ * `logQ = detLog(1 - p)` for 0 < p < 1: floor(detLog(1 - u) / logQ) for u = nextFloat().
87
+ * The caller handles p = 0 and p = 1 without drawing.
88
+ * @param logQ - detLog(1 - p), negative and finite
89
+ * @returns a non-negative integer (possibly above 2^53 for tiny p)
90
+ */
91
+ nextSkip(logQ: number): number;
92
+ }
93
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/random/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO7C;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI5D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI5C;AAED,6EAA6E;AAC7E,qBAAa,YAAY;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAsB;IAC1C,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,KAAK,CAAM;IAEnB;;;;;OAKG;gBACS,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAQvD;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1B;;;OAGG;IACH,OAAO,IAAI,MAAM;IAYjB;;;;OAIG;IACH,SAAS,IAAI,MAAM;IAMnB;;;;;;;OAOG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAqB5B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGjC"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * The one random number source of @graphty/graph-samples, and its determinism contract.
3
+ *
4
+ * A stream is named by `(seed, domain, block)`:
5
+ *
6
+ * - `seed` is the caller's seed, any safe integer in [0, 2^53).
7
+ * - `domain` is a fixed ASCII name per generator and purpose ("gnp", "sbm", ...). It is hashed
8
+ * with 32-bit FNV-1a to `domainId`.
9
+ * - `block` is a unit of work the ALGORITHM defines (a row of the adjacency matrix, a node), an
10
+ * integer in [0, 2^32). It never depends on how many workers or chunks run the generator.
11
+ *
12
+ * The stream's key is `Threefry2x32-20(key = (seed mod 2^32, floor(seed / 2^32)),
13
+ * counter = (domainId, block))`, and its words are `Threefry2x32-20(key = streamKey,
14
+ * counter = (i mod 2^32, floor(i / 2^32)))` for i = 0, 1, 2, ..., two words per counter, word 0
15
+ * first. Every draw below is defined in terms of those words with integer-exact arithmetic, so the
16
+ * same `(seed, domain, block)` yields the same values on every engine, platform and version.
17
+ * `test/random/stream.test.ts` freezes it with golden values: changing anything here changes every
18
+ * seeded graph, which is a breaking change of the package.
19
+ */
20
+ import { detLog } from "./log.js";
21
+ import { threefry2x32 } from "./threefry.js";
22
+ const TWO_32 = 4294967296;
23
+ const TWO_53 = 9007199254740992;
24
+ /**
25
+ * 32-bit FNV-1a over the UTF-16 code units of `name` (the names are ASCII, so this is the bytes).
26
+ * @param name - the domain name
27
+ * @returns the unsigned 32-bit hash
28
+ */
29
+ export function domainId(name) {
30
+ let h = 0x811c9dc5;
31
+ for (let i = 0; i < name.length; i++) {
32
+ h ^= name.charCodeAt(i);
33
+ h = Math.imul(h, 0x01000193);
34
+ }
35
+ return h >>> 0;
36
+ }
37
+ /**
38
+ * The seed every random generator uses when the caller gives none: 0. A fixed default, never the
39
+ * clock, so an unseeded call is as reproducible as a seeded one. Frozen with the rest of the
40
+ * contract: changing it changes every unseeded graph.
41
+ */
42
+ export const DEFAULT_SEED = 0;
43
+ /**
44
+ * The caller's seed, or {@link DEFAULT_SEED} when it is undefined; throws on an invalid seed.
45
+ * @param seed - the seed option
46
+ * @returns the seed to use
47
+ */
48
+ export function resolveSeed(seed) {
49
+ const resolved = seed ?? DEFAULT_SEED;
50
+ checkSeed(resolved);
51
+ return resolved;
52
+ }
53
+ /**
54
+ * Throw unless `seed` is a safe non-negative integer.
55
+ * @param seed - the seed
56
+ */
57
+ export function checkSeed(seed) {
58
+ if (!Number.isSafeInteger(seed) || seed < 0) {
59
+ throw new RangeError(`seed must be an integer in [0, 2^53), got ${String(seed)}`);
60
+ }
61
+ }
62
+ /** A deterministic stream of random words keyed by (seed, domain, block). */
63
+ export class RandomStream {
64
+ /**
65
+ * The stream of one block.
66
+ * @param seed - the caller's seed, an integer in [0, 2^53)
67
+ * @param domain - the generator's fixed domain name
68
+ * @param block - the first block, an integer in [0, 2^32)
69
+ */
70
+ constructor(seed, domain, block) {
71
+ this.key = new Uint32Array(2);
72
+ this.out = new Uint32Array(2);
73
+ this.counter = 0;
74
+ this.spare = -1;
75
+ checkSeed(seed);
76
+ this.seedLo = seed >>> 0;
77
+ this.seedHi = Math.floor(seed / TWO_32);
78
+ this.domain = domainId(domain);
79
+ this.reset(block);
80
+ }
81
+ /**
82
+ * Restart the stream at the first word of another block of the same seed and domain.
83
+ * @param block - the block, an integer in [0, 2^32)
84
+ */
85
+ reset(block) {
86
+ threefry2x32(this.seedLo, this.seedHi, this.domain, block >>> 0, this.key);
87
+ this.counter = 0;
88
+ this.spare = -1;
89
+ }
90
+ /**
91
+ * The next word.
92
+ * @returns an unsigned 32-bit integer
93
+ */
94
+ nextU32() {
95
+ if (this.spare >= 0) {
96
+ const word = this.spare;
97
+ this.spare = -1;
98
+ return word;
99
+ }
100
+ const c = this.counter++;
101
+ threefry2x32(this.key[0], this.key[1], c >>> 0, Math.floor(c / TWO_32), this.out);
102
+ this.spare = this.out[1];
103
+ return this.out[0];
104
+ }
105
+ /**
106
+ * A uniform double in [0, 1) with 53 random bits: (a >>> 5) * 2^26 + (b >>> 6), over 2^53,
107
+ * for the next two words a and b. Exact: every step is an integer below 2^53.
108
+ * @returns the double
109
+ */
110
+ nextFloat() {
111
+ const a = this.nextU32() >>> 5;
112
+ const b = this.nextU32() >>> 6;
113
+ return (a * 67108864 + b) / TWO_53;
114
+ }
115
+ /**
116
+ * A uniform integer in [0, n) by masked rejection: draw a word, keep its low
117
+ * ceil(log2 n) bits, retry while the result is >= n. Exact and unbiased; fewer than two
118
+ * words per call on average. For n above 2^32 the high bits come from one extra word drawn
119
+ * first.
120
+ * @param n - the bound, an integer in [1, 2^53]
121
+ * @returns the integer
122
+ */
123
+ nextBelow(n) {
124
+ if (n <= TWO_32) {
125
+ const mask = n === 1 ? 0 : 0xffffffff >>> Math.clz32(n - 1);
126
+ for (;;) {
127
+ const x = (this.nextU32() & mask) >>> 0;
128
+ if (x < n) {
129
+ return x;
130
+ }
131
+ }
132
+ }
133
+ const hiBound = Math.ceil(n / TWO_32);
134
+ const hiMask = 0xffffffff >>> Math.clz32(hiBound - 1);
135
+ for (;;) {
136
+ const hi = (this.nextU32() & hiMask) >>> 0;
137
+ const x = hi * TWO_32 + this.nextU32();
138
+ if (x < n) {
139
+ return x;
140
+ }
141
+ }
142
+ }
143
+ /**
144
+ * The number of failures before the next success of a Bernoulli(p) sequence, given
145
+ * `logQ = detLog(1 - p)` for 0 < p < 1: floor(detLog(1 - u) / logQ) for u = nextFloat().
146
+ * The caller handles p = 0 and p = 1 without drawing.
147
+ * @param logQ - detLog(1 - p), negative and finite
148
+ * @returns a non-negative integer (possibly above 2^53 for tiny p)
149
+ */
150
+ nextSkip(logQ) {
151
+ return Math.floor(detLog(1 - this.nextFloat()) / logQ);
152
+ }
153
+ }
154
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/random/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACjC,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAwB;IAChD,MAAM,QAAQ,GAAG,IAAI,IAAI,YAAY,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpB,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IAClC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,UAAU,CAAC,6CAA6C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;AACL,CAAC;AAED,6EAA6E;AAC7E,MAAM,OAAO,YAAY;IASrB;;;;;OAKG;IACH,YAAY,IAAY,EAAE,MAAc,EAAE,KAAa;QAXtC,QAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACzB,QAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,YAAO,GAAG,CAAC,CAAC;QACZ,UAAK,GAAG,CAAC,CAAC,CAAC;QASf,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAa;QACf,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,OAAO;QACH,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,SAAS;QACL,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;IACvC,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,CAAS;QACf,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,SAAS,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACR,OAAO,CAAC,CAAC;gBACb,CAAC;YACL,CAAC;QACL,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACtD,SAAS,CAAC;YACN,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACR,OAAO,CAAC,CAAC;YACb,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,CAAC;CACJ"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Threefry-2x32 with 20 rounds: the counter-based block function of J. K. Salmon, M. A. Moraes,
3
+ * R. O. Dror and D. E. Shaw, "Parallel random numbers: as easy as 1, 2, 3", SC11 (2011),
4
+ * doi:10.1145/2063384.2063405, as specified by the Random123 library and used by JAX.
5
+ *
6
+ * It maps a 64-bit key and a 64-bit counter to 64 random bits using only 32-bit addition,
7
+ * rotation and xor, so JavaScript computes it exactly on every engine: no floating point, no
8
+ * 64-bit multiply, no BigInt. It passes BigCrush with 13 rounds; 20 is Random123's default.
9
+ */
10
+ /**
11
+ * Encrypt one 64-bit counter under one 64-bit key.
12
+ * @param k0 - key word 0 (unsigned 32-bit)
13
+ * @param k1 - key word 1 (unsigned 32-bit)
14
+ * @param c0 - counter word 0 (unsigned 32-bit)
15
+ * @param c1 - counter word 1 (unsigned 32-bit)
16
+ * @param out - receives the two output words
17
+ */
18
+ export declare function threefry2x32(k0: number, k1: number, c0: number, c1: number, out: Uint32Array): void;
19
+ //# sourceMappingURL=threefry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threefry.d.ts","sourceRoot":"","sources":["../../../src/random/threefry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAoBnG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Threefry-2x32 with 20 rounds: the counter-based block function of J. K. Salmon, M. A. Moraes,
3
+ * R. O. Dror and D. E. Shaw, "Parallel random numbers: as easy as 1, 2, 3", SC11 (2011),
4
+ * doi:10.1145/2063384.2063405, as specified by the Random123 library and used by JAX.
5
+ *
6
+ * It maps a 64-bit key and a 64-bit counter to 64 random bits using only 32-bit addition,
7
+ * rotation and xor, so JavaScript computes it exactly on every engine: no floating point, no
8
+ * 64-bit multiply, no BigInt. It passes BigCrush with 13 rounds; 20 is Random123's default.
9
+ */
10
+ /** Rotation constants R_32x2 of Threefry-2x32 (Random123 threefry.h). */
11
+ const ROTATIONS = [13, 15, 26, 6, 17, 29, 16, 24];
12
+ /** The Skein key-schedule parity constant for 32-bit words. */
13
+ const KS_PARITY = 0x1bd11bda;
14
+ /**
15
+ * Encrypt one 64-bit counter under one 64-bit key.
16
+ * @param k0 - key word 0 (unsigned 32-bit)
17
+ * @param k1 - key word 1 (unsigned 32-bit)
18
+ * @param c0 - counter word 0 (unsigned 32-bit)
19
+ * @param c1 - counter word 1 (unsigned 32-bit)
20
+ * @param out - receives the two output words
21
+ */
22
+ export function threefry2x32(k0, k1, c0, c1, out) {
23
+ const ks0 = k0 >>> 0;
24
+ const ks1 = k1 >>> 0;
25
+ const ks2 = (KS_PARITY ^ ks0 ^ ks1) >>> 0;
26
+ const ks = [ks0, ks1, ks2];
27
+ let x0 = (c0 + ks0) | 0;
28
+ let x1 = (c1 + ks1) | 0;
29
+ for (let round = 0; round < 20; round++) {
30
+ x0 = (x0 + x1) | 0;
31
+ const r = ROTATIONS[round & 7];
32
+ x1 = (x1 << r) | (x1 >>> (32 - r));
33
+ x1 ^= x0;
34
+ if ((round & 3) === 3) {
35
+ const s = (round + 1) >>> 2;
36
+ x0 = (x0 + ks[s % 3]) | 0;
37
+ x1 = (x1 + ks[(s + 1) % 3] + s) | 0;
38
+ }
39
+ }
40
+ out[0] = x0;
41
+ out[1] = x1;
42
+ }
43
+ //# sourceMappingURL=threefry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threefry.js","sourceRoot":"","sources":["../../../src/random/threefry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,yEAAyE;AACzE,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAE3D,+DAA+D;AAC/D,MAAM,SAAS,GAAG,UAAU,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,GAAgB;IACzF,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;IACrB,MAAM,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3B,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/B,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,EAAE,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC5B,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IACD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACZ,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The cosine and sine of a uniformly drawn angle, the same bits on every engine.
3
+ *
4
+ * The angle is given as a turn fraction u in [0, 1) (angle 2 pi u), so the argument reduction is
5
+ * exact: 8u splits into an octant k and a fraction f without rounding, and only f * pi / 4 rounds
6
+ * once. On [0, pi / 4] the polynomials are fdlibm's `__kernel_sin` and `__kernel_cos` (FreeBSD
7
+ * k_sin.c and k_cos.c, Sun Microsystems 1993) with a zero tail, evaluated with the four basic
8
+ * operations only. Error a few ulp; bit-identical everywhere.
9
+ */
10
+ /**
11
+ * cos(2 pi u) and sin(2 pi u).
12
+ * @param u - the turn fraction, in [0, 1)
13
+ * @param out - receives [cos, sin]
14
+ */
15
+ export declare function detCosSinTurn(u: number, out: Float64Array): void;
16
+ //# sourceMappingURL=trig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trig.d.ts","sourceRoot":"","sources":["../../../src/random/trig.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2CH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CA0BhE"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * The cosine and sine of a uniformly drawn angle, the same bits on every engine.
3
+ *
4
+ * The angle is given as a turn fraction u in [0, 1) (angle 2 pi u), so the argument reduction is
5
+ * exact: 8u splits into an octant k and a fraction f without rounding, and only f * pi / 4 rounds
6
+ * once. On [0, pi / 4] the polynomials are fdlibm's `__kernel_sin` and `__kernel_cos` (FreeBSD
7
+ * k_sin.c and k_cos.c, Sun Microsystems 1993) with a zero tail, evaluated with the four basic
8
+ * operations only. Error a few ulp; bit-identical everywhere.
9
+ */
10
+ const PIO4 = 7.85398163397448278999e-1;
11
+ const S1 = -1.66666666666666324348e-1;
12
+ const S2 = 8.33333333332248946124e-3;
13
+ const S3 = -1.98412698298579493134e-4;
14
+ const S4 = 2.75573137070700676789e-6;
15
+ const S5 = -2.50507602534068634195e-8;
16
+ const S6 = 1.58969099521155010221e-10;
17
+ const C1 = 4.16666666666666019037e-2;
18
+ const C2 = -1.38888888888741095749e-3;
19
+ const C3 = 2.48015872894767294178e-5;
20
+ const C4 = -2.75573143513906633035e-7;
21
+ const C5 = 2.08757232129817482790e-9;
22
+ const C6 = -1.13596475577881948265e-11;
23
+ /**
24
+ * sin(x) for |x| <= pi / 4.
25
+ * @param x - the argument
26
+ * @returns the sine
27
+ */
28
+ function kernelSin(x) {
29
+ const z = x * x;
30
+ const r = S2 + z * (S3 + z * (S4 + z * (S5 + z * S6)));
31
+ return x + z * x * (S1 + z * r);
32
+ }
33
+ /**
34
+ * cos(x) for |x| <= pi / 4.
35
+ * @param x - the argument
36
+ * @returns the cosine
37
+ */
38
+ function kernelCos(x) {
39
+ const z = x * x;
40
+ const w = z * z;
41
+ const r = z * (C1 + z * (C2 + z * C3)) + w * w * (C4 + z * (C5 + z * C6));
42
+ const hz = 0.5 * z;
43
+ const v = 1.0 - hz;
44
+ return v + (1.0 - v - hz + z * r);
45
+ }
46
+ /**
47
+ * cos(2 pi u) and sin(2 pi u).
48
+ * @param u - the turn fraction, in [0, 1)
49
+ * @param out - receives [cos, sin]
50
+ */
51
+ export function detCosSinTurn(u, out) {
52
+ const t = u * 8;
53
+ const octant = Math.floor(t);
54
+ const x = (t - octant) * PIO4;
55
+ // the octant's angle is (octant >> 1) quarter turns plus x (even octant) or pi/2 - (pi/4 - x)
56
+ const odd = (octant & 1) === 1;
57
+ const z = odd ? PIO4 - x : x;
58
+ const c = odd ? kernelSin(z) : kernelCos(z);
59
+ const s = odd ? kernelCos(z) : kernelSin(z);
60
+ switch ((octant >> 1) & 3) {
61
+ case 0:
62
+ out[0] = c;
63
+ out[1] = s;
64
+ break;
65
+ case 1:
66
+ out[0] = -s;
67
+ out[1] = c;
68
+ break;
69
+ case 2:
70
+ out[0] = -c;
71
+ out[1] = -s;
72
+ break;
73
+ default:
74
+ out[0] = s;
75
+ out[1] = -c;
76
+ }
77
+ }
78
+ //# sourceMappingURL=trig.js.map