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