@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,445 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sequential growth models: the random recursive tree, forest fire, duplication-divergence,
|
|
3
|
+
* Newman-Watts, Bianconi-Barabasi fitness, the random Apollonian network and Wilson's uniform
|
|
4
|
+
* spanning tree of a grid (a perfect maze). Each draws from one stream (seed, domain, 0): the
|
|
5
|
+
* processes are sequential, so there is no row-parallel form.
|
|
6
|
+
*/
|
|
7
|
+
import { detLog } from "../random/log.js";
|
|
8
|
+
import { RandomStream, resolveSeed } from "../random/stream.js";
|
|
9
|
+
import { checkEdgeCount, checkInt, checkProbability, EdgeBuffer, toGraph } from "./util.js";
|
|
10
|
+
import { applyWeights } from "./weights.js";
|
|
11
|
+
/**
|
|
12
|
+
* The random recursive tree (R. T. Smythe and H. M. Mahmoud, "A survey of recursive trees",
|
|
13
|
+
* Theory Probab. Math. Statist. 51, 1-27, 1995): node t = 1 .. n - 1 attaches to a uniform earlier
|
|
14
|
+
* node, drawn as nextBelow(t) from the stream (seed, "recursive-tree", 0). Edge t - 1 is
|
|
15
|
+
* (parent, t), in t order. O(n). Depth about ln n, root degree about ln n.
|
|
16
|
+
* @param options - n and seed
|
|
17
|
+
* @returns the undirected tree
|
|
18
|
+
*/
|
|
19
|
+
export function randomRecursiveTreeGraph(options) {
|
|
20
|
+
const { n } = options;
|
|
21
|
+
checkInt("n", n, 1);
|
|
22
|
+
const stream = new RandomStream(resolveSeed(options.seed), "recursive-tree", 0);
|
|
23
|
+
const src = new Uint32Array(n - 1);
|
|
24
|
+
const dst = new Uint32Array(n - 1);
|
|
25
|
+
for (let t = 1; t < n; t++) {
|
|
26
|
+
src[t - 1] = stream.nextBelow(t);
|
|
27
|
+
dst[t - 1] = t;
|
|
28
|
+
}
|
|
29
|
+
return applyWeights({ directed: false, nodeCount: n, src, dst }, options);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Pick `count` of `candidates` uniformly without replacement (a partial Fisher-Yates shuffle in
|
|
33
|
+
* place): the picks are candidates[0 .. count).
|
|
34
|
+
* @param stream - the stream
|
|
35
|
+
* @param candidates - the candidates, reordered in place
|
|
36
|
+
* @param count - how many to pick, <= candidates.length
|
|
37
|
+
*/
|
|
38
|
+
function pickPrefix(stream, candidates, count) {
|
|
39
|
+
for (let i = 0; i < count; i++) {
|
|
40
|
+
const j = i + stream.nextBelow(candidates.length - i);
|
|
41
|
+
const t = candidates[i];
|
|
42
|
+
candidates[i] = candidates[j];
|
|
43
|
+
candidates[j] = t;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The forest fire model (J. Leskovec, J. Kleinberg and C. Faloutsos, "Graphs over time:
|
|
48
|
+
* densification laws, shrinking diameters and possible explanations", KDD 2005,
|
|
49
|
+
* doi:10.1145/1081870.1081893). Directed; heavy-tailed degrees, densification, community locality.
|
|
50
|
+
*
|
|
51
|
+
* Node 0 starts alone. Each new node v = 1 .. n - 1 draws an ambassador w = nextBelow(v) and burns
|
|
52
|
+
* breadth-first from it: for each burning node x in burn order, draw x_out = floor(ln(1 - u) / ln p)
|
|
53
|
+
* (geometric, P(x_out >= k) = p^k, mean p / (1 - p)) and then x_in the same way with r p; then pick
|
|
54
|
+
* x_out of x's out-neighbours and then x_in of its in-neighbours uniformly among those not yet
|
|
55
|
+
* burned (adjacency order, partial Fisher-Yates; all of them when there are fewer), and burn them.
|
|
56
|
+
* Burning stops at `maxBurn` nodes. v then links to every burned node: arcs (v, t) in burn order.
|
|
57
|
+
* Edges are listed by v. All draws come from the stream (seed, "forest-fire", 0).
|
|
58
|
+
*
|
|
59
|
+
* Cost: O(sum over burning nodes of their degree), since each burning node's lists are scanned;
|
|
60
|
+
* the edge count explodes for p above about 0.37, which `maxBurn` bounds at n maxBurn arcs.
|
|
61
|
+
* @param options - n, forward, backward, maxBurn and seed
|
|
62
|
+
* @returns the directed graph
|
|
63
|
+
*/
|
|
64
|
+
export function forestFireGraph(options) {
|
|
65
|
+
const { n, forward: p, backward: r } = options;
|
|
66
|
+
const maxBurn = options.maxBurn ?? 1000;
|
|
67
|
+
checkInt("n", n, 1);
|
|
68
|
+
if (!(p >= 0 && p < 1)) {
|
|
69
|
+
throw new RangeError(`forward must be a probability in [0, 1), got ${String(p)}`);
|
|
70
|
+
}
|
|
71
|
+
if (!(r >= 0 && r * p < 1)) {
|
|
72
|
+
throw new RangeError(`backward must be >= 0 with backward * forward < 1, got ${String(r)}`);
|
|
73
|
+
}
|
|
74
|
+
checkInt("maxBurn", maxBurn, 1);
|
|
75
|
+
const stream = new RandomStream(resolveSeed(options.seed), "forest-fire", 0);
|
|
76
|
+
const pb = r * p;
|
|
77
|
+
const logForward = detLog(p);
|
|
78
|
+
const logBackward = detLog(pb);
|
|
79
|
+
// ponytail: number[][] adjacency, fine to a few million arcs; a growable CSR beyond
|
|
80
|
+
const out = Array.from({ length: n }, () => []);
|
|
81
|
+
const inn = Array.from({ length: n }, () => []);
|
|
82
|
+
const stamp = new Uint32Array(n);
|
|
83
|
+
const edges = new EdgeBuffer(4 * n);
|
|
84
|
+
const burned = [];
|
|
85
|
+
const burn = (v, list, count) => {
|
|
86
|
+
const candidates = list.filter((t) => stamp[t] !== v);
|
|
87
|
+
const take = Math.min(count, candidates.length, maxBurn - burned.length);
|
|
88
|
+
pickPrefix(stream, candidates, take);
|
|
89
|
+
for (let i = 0; i < take; i++) {
|
|
90
|
+
stamp[candidates[i]] = v;
|
|
91
|
+
burned.push(candidates[i]);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
for (let v = 1; v < n; v++) {
|
|
95
|
+
burned.length = 0;
|
|
96
|
+
const w = stream.nextBelow(v);
|
|
97
|
+
stamp[w] = v;
|
|
98
|
+
burned.push(w);
|
|
99
|
+
for (let head = 0; head < burned.length && burned.length < maxBurn; head++) {
|
|
100
|
+
const x = burned[head];
|
|
101
|
+
const xOut = p === 0 ? 0 : stream.nextSkip(logForward);
|
|
102
|
+
const xIn = pb === 0 ? 0 : stream.nextSkip(logBackward);
|
|
103
|
+
burn(v, out[x], xOut);
|
|
104
|
+
burn(v, inn[x], xIn);
|
|
105
|
+
}
|
|
106
|
+
for (const t of burned) {
|
|
107
|
+
edges.push(v, t);
|
|
108
|
+
out[v].push(t);
|
|
109
|
+
inn[t].push(v);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return applyWeights(toGraph(n, edges, true), options);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The duplication-divergence model (I. Ispolatov, P. L. Krapivsky and A. Yuryev,
|
|
116
|
+
* "Duplication-divergence model of protein interaction network", Phys. Rev. E 71, 061911, 2005,
|
|
117
|
+
* doi:10.1103/PhysRevE.71.061911), as networkx's `duplication_divergence_graph`: protein-network
|
|
118
|
+
* like, with many nodes sharing neighbours.
|
|
119
|
+
*
|
|
120
|
+
* Start with the edge (0, 1). While there are fewer than n nodes, draw a node x = nextBelow(i) for
|
|
121
|
+
* the next index i, then one float per neighbour of x (in the order they were joined to x): below
|
|
122
|
+
* `retention`, the edge (i, neighbour). If i got at least one edge it is kept, otherwise the attempt
|
|
123
|
+
* is discarded. All draws come from the stream (seed, "duplication-divergence", 0). Edges are
|
|
124
|
+
* listed by new node. Simple and connected.
|
|
125
|
+
*
|
|
126
|
+
* Cost: O(sum of the copied nodes' degrees). Each attempt succeeds with probability at least
|
|
127
|
+
* `retention`; after 1000 n attempts in total it throws a RangeError rather than loop on.
|
|
128
|
+
* @param options - n, retention and seed
|
|
129
|
+
* @returns the undirected graph
|
|
130
|
+
*/
|
|
131
|
+
export function duplicationDivergenceGraph(options) {
|
|
132
|
+
const { n, retention } = options;
|
|
133
|
+
checkInt("n", n, 2);
|
|
134
|
+
if (!(retention > 0 && retention <= 1)) {
|
|
135
|
+
throw new RangeError(`retention must be a probability in (0, 1], got ${String(retention)}`);
|
|
136
|
+
}
|
|
137
|
+
const stream = new RandomStream(resolveSeed(options.seed), "duplication-divergence", 0);
|
|
138
|
+
// ponytail: number[][] adjacency, fine to a few million edges; a growable CSR beyond
|
|
139
|
+
const adj = Array.from({ length: n }, () => []);
|
|
140
|
+
const edges = new EdgeBuffer(4 * n);
|
|
141
|
+
edges.push(0, 1);
|
|
142
|
+
adj[0].push(1);
|
|
143
|
+
adj[1].push(0);
|
|
144
|
+
const maxAttempts = 1000 * n;
|
|
145
|
+
let attempts = 0;
|
|
146
|
+
for (let i = 2; i < n;) {
|
|
147
|
+
if (++attempts > maxAttempts) {
|
|
148
|
+
throw new RangeError(`duplicationDivergenceGraph gave up after ${maxAttempts} attempts at ${i} of ${n} nodes: retention ${retention} is too small`);
|
|
149
|
+
}
|
|
150
|
+
const copied = adj[stream.nextBelow(i)];
|
|
151
|
+
for (const t of copied) {
|
|
152
|
+
if (stream.nextFloat() < retention) {
|
|
153
|
+
edges.push(i, t);
|
|
154
|
+
adj[i].push(t);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
for (const t of adj[i]) {
|
|
158
|
+
adj[t].push(i);
|
|
159
|
+
}
|
|
160
|
+
if (adj[i].length > 0) {
|
|
161
|
+
i++;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return applyWeights(toGraph(n, edges, false), options);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* The Newman-Watts small world (M. E. J. Newman and D. J. Watts, "Renormalization group analysis
|
|
168
|
+
* of the small-world network model", Phys. Lett. A 263, 341-346, 1999,
|
|
169
|
+
* doi:10.1016/S0375-9601(99)00757-4): Watts-Strogatz with shortcuts added instead of rewired, so
|
|
170
|
+
* the graph stays connected.
|
|
171
|
+
*
|
|
172
|
+
* The ring lattice of `wattsStrogatzGraph` comes first: edge slot u k/2 + (j - 1) is
|
|
173
|
+
* (u, (u + j) mod n). Then for each slot in order, with source u: draw a float; if it is below p and
|
|
174
|
+
* u is not joined to every other node, redraw w = nextBelow(n) until w is neither u nor a
|
|
175
|
+
* neighbour of u, and append the shortcut (u, w). All draws come from the stream (seed,
|
|
176
|
+
* "newman-watts", 0). O(n k) expected.
|
|
177
|
+
* @param options - n, k, p and seed
|
|
178
|
+
* @returns the undirected graph
|
|
179
|
+
*/
|
|
180
|
+
export function newmanWattsGraph(options) {
|
|
181
|
+
const { n, k, p } = options;
|
|
182
|
+
checkInt("k", k, 2);
|
|
183
|
+
if (k % 2 !== 0) {
|
|
184
|
+
throw new RangeError(`k must be even, got ${k}`);
|
|
185
|
+
}
|
|
186
|
+
checkInt("n", n, k + 1);
|
|
187
|
+
checkProbability("p", p);
|
|
188
|
+
const half = k / 2;
|
|
189
|
+
const ring = n * half;
|
|
190
|
+
checkEdgeCount(2 * ring);
|
|
191
|
+
const edges = new EdgeBuffer(ring + Math.ceil(ring * p + 6 * Math.sqrt(ring) + 16));
|
|
192
|
+
const degree = new Uint32Array(n).fill(k);
|
|
193
|
+
// ponytail: a Set of u * n + v keys, like wattsStrogatzGraph; a hashed typed table beyond millions
|
|
194
|
+
const present = new Set();
|
|
195
|
+
const key = (a, b) => (a < b ? a * n + b : b * n + a);
|
|
196
|
+
for (let u = 0; u < n; u++) {
|
|
197
|
+
for (let j = 1; j <= half; j++) {
|
|
198
|
+
const v = (u + j) % n;
|
|
199
|
+
edges.push(u, v);
|
|
200
|
+
present.add(key(u, v));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const stream = new RandomStream(resolveSeed(options.seed), "newman-watts", 0);
|
|
204
|
+
for (let slot = 0; slot < ring; slot++) {
|
|
205
|
+
const u = edges.src[slot];
|
|
206
|
+
if (stream.nextFloat() >= p || degree[u] >= n - 1) {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
let w = stream.nextBelow(n);
|
|
210
|
+
while (w === u || present.has(key(u, w))) {
|
|
211
|
+
w = stream.nextBelow(n);
|
|
212
|
+
}
|
|
213
|
+
edges.push(u, w);
|
|
214
|
+
present.add(key(u, w));
|
|
215
|
+
degree[u]++;
|
|
216
|
+
degree[w]++;
|
|
217
|
+
}
|
|
218
|
+
return applyWeights(toGraph(n, edges, false), options);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* The Bianconi-Barabasi fitness model (G. Bianconi and A.-L. Barabasi, "Competition and
|
|
222
|
+
* multiscaling in evolving networks", Europhys. Lett. 54, 436-442, 2001,
|
|
223
|
+
* doi:10.1209/epl/i2001-00260-6): preferential attachment weighted by fitness, so a fit latecomer
|
|
224
|
+
* can overtake older hubs ("fit get richer").
|
|
225
|
+
*
|
|
226
|
+
* Start from the clique on nodes 0 .. m, edges (a, b) for a < b in lexicographic order. Each new
|
|
227
|
+
* node s = m + 1 .. n - 1 picks m distinct existing nodes, one at a time, with probability
|
|
228
|
+
* proportional to fitness_i * degree_i among those not yet picked: x = nextFloat() * total, then a
|
|
229
|
+
* descent of a Fenwick tree over the Float64 weights. Edges (s, t) follow in pick order. Draws
|
|
230
|
+
* come from the stream (seed, "bianconi-barabasi", 0). O(n m log n). Emits the Float64 node column
|
|
231
|
+
* `fitness`.
|
|
232
|
+
* @param options - n, m, fitness and seed
|
|
233
|
+
* @returns the undirected graph
|
|
234
|
+
*/
|
|
235
|
+
export function bianconiBarabasiGraph(options) {
|
|
236
|
+
const { n, m } = options;
|
|
237
|
+
checkInt("m", m, 1);
|
|
238
|
+
checkInt("n", n, m + 1);
|
|
239
|
+
const seed = resolveSeed(options.seed);
|
|
240
|
+
checkEdgeCount((m * (m + 1)) / 2 + (n - m - 1) * m);
|
|
241
|
+
const fitness = new Float64Array(n);
|
|
242
|
+
if (options.fitness === undefined) {
|
|
243
|
+
const draw = new RandomStream(seed, "fitness", 0);
|
|
244
|
+
for (let i = 0; i < n; i++) {
|
|
245
|
+
draw.reset(i);
|
|
246
|
+
fitness[i] = 1 - draw.nextFloat();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
if (options.fitness.length !== n) {
|
|
251
|
+
throw new RangeError(`fitness must have n = ${n} values, got ${options.fitness.length}`);
|
|
252
|
+
}
|
|
253
|
+
for (let i = 0; i < n; i++) {
|
|
254
|
+
const f = options.fitness[i];
|
|
255
|
+
if (!(f > 0 && Number.isFinite(f))) {
|
|
256
|
+
throw new RangeError(`fitness[${i}] must be finite and positive, got ${String(f)}`);
|
|
257
|
+
}
|
|
258
|
+
fitness[i] = f;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const edges = new EdgeBuffer((m * (m + 1)) / 2 + (n - m - 1) * m);
|
|
262
|
+
const degree = new Uint32Array(n);
|
|
263
|
+
for (let a = 0; a <= m; a++) {
|
|
264
|
+
for (let b = a + 1; b <= m; b++) {
|
|
265
|
+
edges.push(a, b);
|
|
266
|
+
}
|
|
267
|
+
degree[a] = m;
|
|
268
|
+
}
|
|
269
|
+
// Fenwick tree over weight[i] = fitness[i] * degree[i] (1-based internally)
|
|
270
|
+
const weight = new Float64Array(n);
|
|
271
|
+
const tree = new Float64Array(n + 1);
|
|
272
|
+
const add = (i, delta) => {
|
|
273
|
+
weight[i] += delta;
|
|
274
|
+
for (let j = i + 1; j <= n; j += j & -j) {
|
|
275
|
+
tree[j] += delta;
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
let top = 1;
|
|
279
|
+
while (top * 2 <= n) {
|
|
280
|
+
top *= 2;
|
|
281
|
+
}
|
|
282
|
+
const find = (x, limit) => {
|
|
283
|
+
let pos = 0;
|
|
284
|
+
let rest = x;
|
|
285
|
+
for (let step = top; step >= 1; step = Math.floor(step / 2)) {
|
|
286
|
+
if (pos + step <= n && tree[pos + step] <= rest) {
|
|
287
|
+
pos += step;
|
|
288
|
+
rest -= tree[pos];
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// rounding guard: land on a node with weight, below the newcomer
|
|
292
|
+
pos = Math.min(pos, limit - 1);
|
|
293
|
+
while (weight[pos] === 0) {
|
|
294
|
+
pos--;
|
|
295
|
+
}
|
|
296
|
+
return pos;
|
|
297
|
+
};
|
|
298
|
+
let total = 0;
|
|
299
|
+
for (let i = 0; i <= m; i++) {
|
|
300
|
+
add(i, fitness[i] * m);
|
|
301
|
+
total += fitness[i] * m;
|
|
302
|
+
}
|
|
303
|
+
const stream = new RandomStream(seed, "bianconi-barabasi", 0);
|
|
304
|
+
const picked = new Uint32Array(m);
|
|
305
|
+
for (let s = m + 1; s < n; s++) {
|
|
306
|
+
let remaining = total;
|
|
307
|
+
for (let i = 0; i < m; i++) {
|
|
308
|
+
const t = find(stream.nextFloat() * remaining, s);
|
|
309
|
+
picked[i] = t;
|
|
310
|
+
remaining -= weight[t];
|
|
311
|
+
add(t, -weight[t]);
|
|
312
|
+
}
|
|
313
|
+
for (let i = 0; i < m; i++) {
|
|
314
|
+
const t = picked[i];
|
|
315
|
+
edges.push(s, t);
|
|
316
|
+
degree[t]++;
|
|
317
|
+
add(t, fitness[t] * degree[t]);
|
|
318
|
+
}
|
|
319
|
+
degree[s] = m;
|
|
320
|
+
add(s, fitness[s] * m);
|
|
321
|
+
total = 0;
|
|
322
|
+
// recompute the total from the tree's roots so it never drifts from the tree
|
|
323
|
+
for (let j = n; j > 0; j -= j & -j) {
|
|
324
|
+
total += tree[j];
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return applyWeights(toGraph(n, edges, false, { fitness }), options);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* The random Apollonian network (T. Zhou, G. Yan and B.-H. Wang, "Maximal planar networks with
|
|
331
|
+
* large clustering coefficient and power-law degree distribution", Phys. Rev. E 71, 046141, 2005,
|
|
332
|
+
* doi:10.1103/PhysRevE.71.046141; the deterministic one is J. S. Andrade et al., Phys. Rev. Lett. 94,
|
|
333
|
+
* 018702, 2005): maximal planar, power-law degrees, high clustering.
|
|
334
|
+
*
|
|
335
|
+
* Start from the triangle 0, 1, 2 (edges (0, 1), (0, 2), (1, 2)) whose inner face is face 0; the
|
|
336
|
+
* outer face is never split. Each new node v = 3 .. n - 1 picks face f = nextBelow(faceCount) =
|
|
337
|
+
* (a, b, c), adds the edges (v, a), (v, b), (v, c), and splits f: face f becomes (a, b, v), and
|
|
338
|
+
* (b, c, v) and (a, c, v) are appended. Draws come from the stream (seed, "apollonian", 0).
|
|
339
|
+
* 3n - 6 edges. O(n).
|
|
340
|
+
* @param options - n and seed
|
|
341
|
+
* @returns the undirected graph
|
|
342
|
+
*/
|
|
343
|
+
export function randomApollonianGraph(options) {
|
|
344
|
+
const { n } = options;
|
|
345
|
+
checkInt("n", n, 3);
|
|
346
|
+
const m = 3 * n - 6;
|
|
347
|
+
checkEdgeCount(m);
|
|
348
|
+
const stream = new RandomStream(resolveSeed(options.seed), "apollonian", 0);
|
|
349
|
+
const faces = 2 * n - 5;
|
|
350
|
+
const fa = new Uint32Array(faces);
|
|
351
|
+
const fb = new Uint32Array(faces);
|
|
352
|
+
const fc = new Uint32Array(faces);
|
|
353
|
+
fa[0] = 0;
|
|
354
|
+
fb[0] = 1;
|
|
355
|
+
fc[0] = 2;
|
|
356
|
+
let faceCount = 1;
|
|
357
|
+
const src = new Uint32Array(m);
|
|
358
|
+
const dst = new Uint32Array(m);
|
|
359
|
+
src.set([0, 0, 1]);
|
|
360
|
+
dst.set([1, 2, 2]);
|
|
361
|
+
let e = 3;
|
|
362
|
+
for (let v = 3; v < n; v++) {
|
|
363
|
+
const f = stream.nextBelow(faceCount);
|
|
364
|
+
const a = fa[f];
|
|
365
|
+
const b = fb[f];
|
|
366
|
+
const c = fc[f];
|
|
367
|
+
src.fill(v, e, e + 3);
|
|
368
|
+
dst[e++] = a;
|
|
369
|
+
dst[e++] = b;
|
|
370
|
+
dst[e++] = c;
|
|
371
|
+
fc[f] = v;
|
|
372
|
+
fa[faceCount] = b;
|
|
373
|
+
fb[faceCount] = c;
|
|
374
|
+
fc[faceCount++] = v;
|
|
375
|
+
fa[faceCount] = a;
|
|
376
|
+
fb[faceCount] = c;
|
|
377
|
+
fc[faceCount++] = v;
|
|
378
|
+
}
|
|
379
|
+
return applyWeights({ directed: false, nodeCount: n, src, dst }, options);
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* A uniform spanning tree of the rows x cols grid, a perfect maze, by Wilson's algorithm
|
|
383
|
+
* (D. B. Wilson, "Generating random spanning trees more quickly than the cover time", STOC 1996,
|
|
384
|
+
* doi:10.1145/237814.237880): loop-erased random walks.
|
|
385
|
+
*
|
|
386
|
+
* Node (r, c) is index r cols + c. The root is node 0. For each start node in index order that is
|
|
387
|
+
* not yet in the tree, walk until the tree is hit, each step to a uniform grid neighbour
|
|
388
|
+
* (candidates in the order left, right, up, down; nextBelow(count)), remembering only the last exit
|
|
389
|
+
* from each node (which erases the loops); then add the path: edges (u, next(u)) from the start to
|
|
390
|
+
* the tree, in that order. Draws come from the stream (seed, "wilson", 0). rows cols - 1 edges.
|
|
391
|
+
* Float64 node columns `x` = column and `y` = row. Expected cost is the mean hitting time of the
|
|
392
|
+
* root, about O(n log n) on a grid.
|
|
393
|
+
* @param options - rows, cols and seed
|
|
394
|
+
* @returns the undirected tree
|
|
395
|
+
*/
|
|
396
|
+
export function wilsonMazeGraph(options) {
|
|
397
|
+
const { rows, cols } = options;
|
|
398
|
+
checkInt("rows", rows, 1);
|
|
399
|
+
checkInt("cols", cols, 1);
|
|
400
|
+
const n = rows * cols;
|
|
401
|
+
checkInt("rows * cols", n, 1);
|
|
402
|
+
const stream = new RandomStream(resolveSeed(options.seed), "wilson", 0);
|
|
403
|
+
const inTree = new Uint8Array(n);
|
|
404
|
+
const next = new Uint32Array(n);
|
|
405
|
+
const src = new Uint32Array(n - 1);
|
|
406
|
+
const dst = new Uint32Array(n - 1);
|
|
407
|
+
const options4 = new Uint32Array(4);
|
|
408
|
+
inTree[0] = 1;
|
|
409
|
+
let e = 0;
|
|
410
|
+
for (let start = 1; start < n; start++) {
|
|
411
|
+
let u = start;
|
|
412
|
+
while (inTree[u] === 0) {
|
|
413
|
+
const r = Math.floor(u / cols);
|
|
414
|
+
const c = u - r * cols;
|
|
415
|
+
let count = 0;
|
|
416
|
+
if (c > 0) {
|
|
417
|
+
options4[count++] = u - 1;
|
|
418
|
+
}
|
|
419
|
+
if (c + 1 < cols) {
|
|
420
|
+
options4[count++] = u + 1;
|
|
421
|
+
}
|
|
422
|
+
if (r > 0) {
|
|
423
|
+
options4[count++] = u - cols;
|
|
424
|
+
}
|
|
425
|
+
if (r + 1 < rows) {
|
|
426
|
+
options4[count++] = u + cols;
|
|
427
|
+
}
|
|
428
|
+
next[u] = options4[stream.nextBelow(count)];
|
|
429
|
+
u = next[u];
|
|
430
|
+
}
|
|
431
|
+
for (u = start; inTree[u] === 0; u = next[u]) {
|
|
432
|
+
inTree[u] = 1;
|
|
433
|
+
src[e] = u;
|
|
434
|
+
dst[e++] = next[u];
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
const x = new Float64Array(n);
|
|
438
|
+
const y = new Float64Array(n);
|
|
439
|
+
for (let i = 0; i < n; i++) {
|
|
440
|
+
y[i] = Math.floor(i / cols);
|
|
441
|
+
x[i] = i - y[i] * cols;
|
|
442
|
+
}
|
|
443
|
+
return applyWeights({ directed: false, nodeCount: n, src, dst, nodeColumns: { x, y } }, options);
|
|
444
|
+
}
|
|
445
|
+
//# sourceMappingURL=growth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"growth.js","sourceRoot":"","sources":["../../../src/generators/growth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Random hyperbolic graphs (D. Krioukov, F. Papadopoulos, M. Kitsak, A. Vahdat and M. Boguna,
|
|
3
|
+
* "Hyperbolic geometry of complex networks", Phys. Rev. E 82, 036106, 2010,
|
|
4
|
+
* doi:10.1103/PhysRevE.82.036106): power-law degrees, high clustering and a native 2D embedding.
|
|
5
|
+
*/
|
|
6
|
+
import { type SampleGraph } from "../types.js";
|
|
7
|
+
import { EdgeBuffer } from "./util.js";
|
|
8
|
+
import { type WeightOptions } from "./weights.js";
|
|
9
|
+
/** Options of {@link hyperbolicGraph}. */
|
|
10
|
+
export interface HyperbolicOptions extends WeightOptions {
|
|
11
|
+
/** The node count, in [0, 20000]. */
|
|
12
|
+
n: number;
|
|
13
|
+
/** The target mean degree, a finite number > 0 (approximate: see {@link hyperbolicGraph}). */
|
|
14
|
+
averageDegree: number;
|
|
15
|
+
/** The power-law exponent gamma of the degree distribution, a finite number > 2. */
|
|
16
|
+
exponent: number;
|
|
17
|
+
/** The temperature T in [0, 1); 0 (default) is the threshold model, higher T lowers clustering. */
|
|
18
|
+
temperature?: number | undefined;
|
|
19
|
+
/** The seed, an integer in [0, 2^53); default 0. */
|
|
20
|
+
seed?: number | undefined;
|
|
21
|
+
}
|
|
22
|
+
/** The checked options, the disk radius and the points. */
|
|
23
|
+
interface HyperbolicPlan {
|
|
24
|
+
readonly n: number;
|
|
25
|
+
readonly seed: number;
|
|
26
|
+
readonly temperature: number;
|
|
27
|
+
/** The disk radius R. */
|
|
28
|
+
readonly R: number;
|
|
29
|
+
readonly coshR: number;
|
|
30
|
+
readonly cosT: Float64Array<ArrayBuffer>;
|
|
31
|
+
readonly sinT: Float64Array<ArrayBuffer>;
|
|
32
|
+
readonly coshr: Float64Array<ArrayBuffer>;
|
|
33
|
+
readonly sinhr: Float64Array<ArrayBuffer>;
|
|
34
|
+
readonly x: Float64Array<ArrayBuffer>;
|
|
35
|
+
readonly y: Float64Array<ArrayBuffer>;
|
|
36
|
+
readonly radius: Float64Array<ArrayBuffer>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check the options, compute the disk radius and draw the points.
|
|
40
|
+
* @param options - the options
|
|
41
|
+
* @returns the plan
|
|
42
|
+
*/
|
|
43
|
+
export declare function planHyperbolic(options: HyperbolicOptions): HyperbolicPlan;
|
|
44
|
+
/**
|
|
45
|
+
* Rows [start, end) of the hyperbolic graph: row u holds the pairs (u, v), v = u + 1 .. n - 1 in
|
|
46
|
+
* ascending v, with cosh d = cosh r_u cosh r_v - sinh r_u sinh r_v cos(theta_u - theta_v) (the
|
|
47
|
+
* cosine of the angle difference expanded from the stored cosines and sines). At T = 0 the pair is
|
|
48
|
+
* an edge iff cosh d < cosh R (no draws). At T > 0 row u draws one nextFloat() t per pair from
|
|
49
|
+
* stream (seed, "hyperbolic", u) and the pair is an edge iff t < 1 / (1 + exp((d - R) / (2 T))),
|
|
50
|
+
* decided as acosh(cosh d) < R + 2 T ln((1 - t) / t) with no exp. Any split of [0, n) into
|
|
51
|
+
* consecutive ranges gives the whole graph.
|
|
52
|
+
* @param plan - the checked options and points
|
|
53
|
+
* @param start - the first row
|
|
54
|
+
* @param end - one past the last row
|
|
55
|
+
* @param out - receives the edges
|
|
56
|
+
*/
|
|
57
|
+
export declare function hyperbolicRows(plan: HyperbolicPlan, start: number, end: number, out: EdgeBuffer): void;
|
|
58
|
+
/**
|
|
59
|
+
* A random hyperbolic graph (Krioukov et al. 2010): n points in a hyperbolic disk of radius R,
|
|
60
|
+
* angles uniform and radii with density proportional to sinh(alpha r), alpha = (gamma - 1) / 2,
|
|
61
|
+
* so the degrees follow a power law with exponent gamma. At temperature 0 two nodes are joined iff
|
|
62
|
+
* their hyperbolic distance is below R; at T > 0 with probability 1 / (1 + exp((d - R) / (2 T))).
|
|
63
|
+
*
|
|
64
|
+
* R comes from the paper's approximation of the mean degree, R = 2 ln(2 xi^2 n / (pi k)) with
|
|
65
|
+
* xi = alpha / (alpha - 1/2), times (pi T / sin(pi T)) inside the logarithm for T > 0. It is an
|
|
66
|
+
* approximation, so the measured mean degree only lands near `averageDegree`: measured at n = 3000
|
|
67
|
+
* and 10000, within about 10% for exponent >= 2.5 and T <= 0.7, but about 0.6x at exponent 2.2 and
|
|
68
|
+
* about 0.5x at T = 0.9 (the approximation degrades as gamma approaches 2 and T approaches 1).
|
|
69
|
+
*
|
|
70
|
+
* Node i draws its angle theta = 2 pi u and then its radius r = acosh(1 + (cosh(alpha R) - 1) u') /
|
|
71
|
+
* alpha (inverse CDF) from stream (seed, "hyperbolic-points", i); the pairs are decided by
|
|
72
|
+
* {@link hyperbolicRows}. Edges are the pairs (u, v), u < v, ascending u then v. Node columns (all
|
|
73
|
+
* Float64Array): `x`, `y` (the native polar embedding r cos theta, r sin theta) and `radius` (r).
|
|
74
|
+
*
|
|
75
|
+
* Cost: O(n^2) pairs (and one draw per pair at T > 0), so n is capped at 20000.
|
|
76
|
+
* ponytail: naive pair loop, n <= 20000; the band algorithm of M. von Looz, H. Meyerhenke and
|
|
77
|
+
* R. Prutkin, "Generating random hyperbolic graphs in subquadratic time", ISAAC 2015,
|
|
78
|
+
* doi:10.1007/978-3-662-48971-0_40, is the upgrade path.
|
|
79
|
+
* @param options - n, averageDegree, exponent, temperature and seed
|
|
80
|
+
* @returns the undirected graph
|
|
81
|
+
*/
|
|
82
|
+
export declare function hyperbolicGraph(options: HyperbolicOptions): SampleGraph;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=hyperbolic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyperbolic.d.ts","sourceRoot":"","sources":["../../../src/generators/hyperbolic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAY,UAAU,EAAW,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAKhE,0CAA0C;AAC1C,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACpD,qCAAqC;IACrC,CAAC,EAAE,MAAM,CAAC;IACV,8FAA8F;IAC9F,aAAa,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;IACjB,mGAAmG;IACnG,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,2DAA2D;AAC3D,UAAU,cAAc;IACpB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yBAAyB;IACzB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC1C,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;CAC9C;AAoBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAwDzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAmBtG;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAKvE"}
|