stuff
This commit is contained in:
parent
06b9c0aef6
commit
1acc472a0d
147
Cargo.lock
generated
147
Cargo.lock
generated
@ -4,9 +4,9 @@ version = 3
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "adler"
|
name = "adler"
|
||||||
version = "0.2.3"
|
version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e"
|
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "adler32"
|
name = "adler32"
|
||||||
@ -78,9 +78,9 @@ checksum = "bed57e2090563b83ba8f83366628ce535a7584c9afa4c9fc0612a03925c6df58"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
version = "1.4.2"
|
version = "1.4.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b"
|
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cast"
|
name = "cast"
|
||||||
@ -91,12 +91,6 @@ dependencies = [
|
|||||||
"rustc_version",
|
"rustc_version",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cc"
|
|
||||||
version = "1.0.67"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
@ -135,9 +129,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "console"
|
name = "console"
|
||||||
version = "0.14.0"
|
version = "0.14.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7cc80946b3480f421c2f17ed1cb841753a371c7c5104f51d507e13f532c856aa"
|
checksum = "3993e6445baa160675931ec041a5e03ca84b9c6e32a056150d3aa2bdda0a1f45"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"encode_unicode",
|
"encode_unicode",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
@ -216,35 +210,33 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-epoch"
|
name = "crossbeam-epoch"
|
||||||
version = "0.9.2"
|
version = "0.9.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d60ab4a8dba064f2fbb5aa270c28da5cf4bbd0e72dae1140a6b0353a779dbe00"
|
checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"loom",
|
|
||||||
"memoffset",
|
"memoffset",
|
||||||
"scopeguard",
|
"scopeguard",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.2"
|
version = "0.8.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bae8f328835f8f5a6ceb6a7842a7f2d0c03692adb5c889347235d59194731fe3"
|
checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"loom",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "csv"
|
name = "csv"
|
||||||
version = "1.1.5"
|
version = "1.1.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f9d58633299b24b515ac72a3f869f8b91306a3cec616a602843a383acd6f9e97"
|
checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bstr",
|
"bstr",
|
||||||
"csv-core",
|
"csv-core",
|
||||||
@ -284,19 +276,6 @@ version = "0.3.6"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "generator"
|
|
||||||
version = "0.6.24"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a9fed24fd1e18827652b4d55652899a1e9da8e54d91624dc3437a5bc3a9f9a9c"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
"libc",
|
|
||||||
"log",
|
|
||||||
"rustversion",
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
@ -310,9 +289,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gif"
|
name = "gif"
|
||||||
version = "0.11.1"
|
version = "0.11.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "02efba560f227847cb41463a7395c514d127d4f74fff12ef0137fff1b84b96c4"
|
checksum = "5a668f699973d0f573d15749b7002a9ac9e1f9c6b220e7b165601334c173d8de"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"color_quant",
|
"color_quant",
|
||||||
"weezl",
|
"weezl",
|
||||||
@ -400,9 +379,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
version = "0.3.47"
|
version = "0.3.50"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65"
|
checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
@ -434,17 +413,6 @@ dependencies = [
|
|||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "loom"
|
|
||||||
version = "0.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d44c73b4636e497b4917eb21c33539efa3816741a2d3ff26c6316f1b529481a4"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"generator",
|
|
||||||
"scoped-tls",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.3.4"
|
version = "2.3.4"
|
||||||
@ -453,9 +421,9 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memoffset"
|
name = "memoffset"
|
||||||
version = "0.6.1"
|
version = "0.6.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
|
checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
@ -471,9 +439,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miniz_oxide"
|
name = "miniz_oxide"
|
||||||
version = "0.4.3"
|
version = "0.4.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d"
|
checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"adler",
|
"adler",
|
||||||
"autocfg",
|
"autocfg",
|
||||||
@ -746,9 +714,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.4.3"
|
version = "1.4.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a"
|
checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"regex-syntax",
|
"regex-syntax",
|
||||||
]
|
]
|
||||||
@ -764,9 +732,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.6.22"
|
version = "0.6.23"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581"
|
checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc_version"
|
name = "rustc_version"
|
||||||
@ -777,12 +745,6 @@ dependencies = [
|
|||||||
"semver",
|
"semver",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustversion"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cb5d2a036dc6d2d8fd16fde3498b04306e29bd193bf306a57427019b823d5acd"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.5"
|
version = "1.0.5"
|
||||||
@ -798,12 +760,6 @@ dependencies = [
|
|||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "scoped-tls"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scoped_threadpool"
|
name = "scoped_threadpool"
|
||||||
version = "0.1.9"
|
version = "0.1.9"
|
||||||
@ -849,9 +805,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.123"
|
version = "1.0.125"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9391c295d64fc0abb2c556bad848f33cb8296276b1ad2677d1ae1ace4f258f31"
|
checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -860,9 +816,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.63"
|
version = "1.0.64"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "43535db9747a4ba938c0ce0a98cc631a46ebf943c9e1d604e091df6007620bf6"
|
checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
@ -871,9 +827,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.60"
|
version = "1.0.67"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081"
|
checksum = "6498a9efc342871f91cc2d0d694c674368b4ceb40f62b65a7a08c3792935e702"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -906,25 +862,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437"
|
checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jpeg-decoder",
|
"jpeg-decoder",
|
||||||
"miniz_oxide 0.4.3",
|
"miniz_oxide 0.4.4",
|
||||||
"weezl",
|
"weezl",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.1.43"
|
version = "0.1.44"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
|
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
|
"wasi",
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinytemplate"
|
name = "tinytemplate"
|
||||||
version = "1.2.0"
|
version = "1.2.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a2ada8616fad06a2d0c455adc530de4ef57605a8120cc65da9653e0e9623ca74"
|
checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@ -944,9 +901,9 @@ checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "walkdir"
|
name = "walkdir"
|
||||||
version = "2.3.1"
|
version = "2.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
|
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"same-file",
|
"same-file",
|
||||||
"winapi",
|
"winapi",
|
||||||
@ -955,15 +912,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
version = "0.10.2+wasi-snapshot-preview1"
|
version = "0.10.0+wasi-snapshot-preview1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
|
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.70"
|
version = "0.2.73"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be"
|
checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"wasm-bindgen-macro",
|
"wasm-bindgen-macro",
|
||||||
@ -971,9 +928,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "wasm-bindgen-backend"
|
||||||
version = "0.2.70"
|
version = "0.2.73"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7"
|
checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
@ -986,9 +943,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.70"
|
version = "0.2.73"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c"
|
checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
@ -996,9 +953,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.70"
|
version = "0.2.73"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385"
|
checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -1009,15 +966,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.70"
|
version = "0.2.73"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64"
|
checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "web-sys"
|
name = "web-sys"
|
||||||
version = "0.3.47"
|
version = "0.3.50"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3"
|
checksum = "a905d57e488fec8861446d3393670fb50d27a262344013181c2cdf9fff5481be"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
|
|||||||
29
src/main.rs
29
src/main.rs
@ -5,7 +5,7 @@ use rand::Rng;
|
|||||||
use arrayfire as af;
|
use arrayfire as af;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let gpu_compute: bool = true;
|
let gpu_compute: bool = false;
|
||||||
if gpu_compute {
|
if gpu_compute {
|
||||||
backend_man();
|
backend_man();
|
||||||
// af::set_backend(af::Backend::CPU);
|
// af::set_backend(af::Backend::CPU);
|
||||||
@ -14,16 +14,16 @@ fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// let n_iterations = 16384;
|
// let n_iterations = 16384;
|
||||||
let n_iterations = 2048;
|
let n_iterations = 100;
|
||||||
// let n_iterations = 10;
|
// let n_iterations = 10;
|
||||||
|
|
||||||
// let (width, height) = (512, 512);
|
let (width, height) = (512, 512);
|
||||||
let (width, height) = (1024, 1024);
|
// let (width, height) = (1024, 1024);
|
||||||
// let (width, height) = (2048, 2048);
|
// let (width, height) = (2048, 2048);
|
||||||
|
|
||||||
// let n_particles = 1 << 22;
|
let n_particles = 1 << 22;
|
||||||
let n_particles = 1 << 24;
|
|
||||||
// let n_particles = 1 << 10;
|
// let n_particles = 1 << 10;
|
||||||
|
// let n_particles = 1 << 20;
|
||||||
// let n_particles = 100;
|
// let n_particles = 100;
|
||||||
println!("n_particles: {}", n_particles);
|
println!("n_particles: {}", n_particles);
|
||||||
let diffusivity = 1;
|
let diffusivity = 1;
|
||||||
@ -37,22 +37,9 @@ fn main() {
|
|||||||
model.print_configurations();
|
model.print_configurations();
|
||||||
|
|
||||||
if gpu_compute {
|
if gpu_compute {
|
||||||
model.step_cl(n_iterations);
|
model.run_cl(n_iterations);
|
||||||
} else {
|
} else {
|
||||||
let pb = ProgressBar::new(n_iterations as u64);
|
model.run(n_iterations);
|
||||||
pb.set_style(
|
|
||||||
ProgressStyle::default_bar()
|
|
||||||
.template(
|
|
||||||
"{spinner:.green} [{elapsed_precise}] [{bar:40.cyan/blue}] {pos}/{len} ({eta} {percent}%, {per_sec})",
|
|
||||||
)
|
|
||||||
.progress_chars("#>-"),
|
|
||||||
);
|
|
||||||
|
|
||||||
for i in 0..n_iterations {
|
|
||||||
model.step();
|
|
||||||
pb.set_position(i as u64);
|
|
||||||
}
|
|
||||||
pb.finish();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
245
src/model.rs
245
src/model.rs
@ -169,69 +169,10 @@ impl Model {
|
|||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Perform a single simulation step.
|
/// Simulates `steps` # of steps
|
||||||
pub fn step(&mut self) {
|
pub fn run(&mut self, steps: usize) {
|
||||||
// Combine grids
|
let debug: bool = true;
|
||||||
let grids = &mut self.grids;
|
|
||||||
combine(grids, &self.attraction_table);
|
|
||||||
|
|
||||||
// println!("Starting tick for all agents...");
|
|
||||||
// let agents_tick_time = Instant::now();
|
|
||||||
self.agents.par_iter_mut().for_each(|agent| {
|
|
||||||
let grid = &grids[agent.population_id];
|
|
||||||
let PopulationConfig {
|
|
||||||
sensor_distance,
|
|
||||||
sensor_angle,
|
|
||||||
rotation_angle,
|
|
||||||
step_distance,
|
|
||||||
..
|
|
||||||
} = grid.config;
|
|
||||||
let (width, height) = (grid.width, grid.height);
|
|
||||||
|
|
||||||
let xc = agent.x + agent.angle.cos() * sensor_distance;
|
|
||||||
let yc = agent.y + agent.angle.sin() * sensor_distance;
|
|
||||||
|
|
||||||
let agent_add_sens = agent.angle + sensor_angle;
|
|
||||||
let agent_sub_sens = agent.angle - sensor_angle;
|
|
||||||
|
|
||||||
let xl = agent.x + agent_sub_sens.cos() * sensor_distance;
|
|
||||||
let yl = agent.y + agent_sub_sens.sin() * sensor_distance;
|
|
||||||
let xr = agent.x + agent_add_sens.cos() * sensor_distance;
|
|
||||||
let yr = agent.y + agent_add_sens.sin() * sensor_distance;
|
|
||||||
|
|
||||||
// Sense. We sense from the buffer because this is where we previously combined data
|
|
||||||
// from all the grid.
|
|
||||||
let trail_c = grid.get_buf(xc, yc);
|
|
||||||
let trail_l = grid.get_buf(xl, yl);
|
|
||||||
let trail_r = grid.get_buf(xr, yr);
|
|
||||||
|
|
||||||
// Rotate and move
|
|
||||||
let mut rng = rand::thread_rng();
|
|
||||||
let direction = Model::pick_direction(trail_c, trail_l, trail_r, &mut rng);
|
|
||||||
agent.rotate_and_move(direction, rotation_angle, step_distance, width, height);
|
|
||||||
});
|
|
||||||
/*
|
|
||||||
let agents_tick_elapsed = agents_tick_time.elapsed().as_millis();
|
|
||||||
let ms_per_agent: f64 = (agents_tick_elapsed as f64) / (self.agents.len() as f64);
|
|
||||||
println!("Finished tick for all agents. took {}ms\nTime peragent: {}ms", agents_tick_time.elapsed().as_millis(), ms_per_agent);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Deposit
|
|
||||||
for agent in self.agents.iter() {
|
|
||||||
self.grids[agent.population_id].deposit(agent.x, agent.y);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Diffuse + Decay
|
|
||||||
let diffusivity = self.diffusivity;
|
|
||||||
self.grids.par_iter_mut().for_each(|grid| {
|
|
||||||
grid.diffuse(diffusivity);
|
|
||||||
});
|
|
||||||
|
|
||||||
self.save_image_data();
|
|
||||||
self.iteration += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn step_cl(&mut self, steps: usize) {
|
|
||||||
let pb = ProgressBar::new(steps as u64);
|
let pb = ProgressBar::new(steps as u64);
|
||||||
pb.set_style(
|
pb.set_style(
|
||||||
ProgressStyle::default_bar()
|
ProgressStyle::default_bar()
|
||||||
@ -241,38 +182,18 @@ impl Model {
|
|||||||
.progress_chars("#>-"),
|
.progress_chars("#>-"),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let agents_list = &*self.agents.clone();
|
|
||||||
|
|
||||||
|
|
||||||
let agent_num: usize = self.agents.len() as usize;
|
|
||||||
let dims = af::Dim4::new(&[self.agents.len() as u64, 1, 1, 1]);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
let mut sensor_distance_list: Vec<f32> = Vec::new();
|
|
||||||
let mut sensor_angle_list: Vec<f32> = Vec::new();
|
|
||||||
let mut rotation_angle_list: Vec<f32> = Vec::new();
|
|
||||||
let mut step_distance_list: Vec<f32> = Vec::new();
|
|
||||||
|
|
||||||
let mut agent_angles_list: Vec<f32> = Vec::new();
|
|
||||||
let mut agent_x_list: Vec<f32> = Vec::new();
|
|
||||||
let mut agent_y_list: Vec<f32> = Vec::new();
|
|
||||||
|
|
||||||
for i in 0..steps {
|
for i in 0..steps {
|
||||||
println!("Starting tick for all agents...");
|
if debug {println!("Starting tick for all agents..."));
|
||||||
let agents_tick_time = Instant::now();
|
|
||||||
// Combine grids
|
// Combine grids
|
||||||
let grids = &mut self.grids;
|
let grids = &mut self.grids;
|
||||||
combine(grids, &self.attraction_table);
|
combine(grids, &self.attraction_table);
|
||||||
agent_angles_list = agents_list.iter().map(|agent| agent.angle).collect();
|
let agents_tick_time = Instant::now();
|
||||||
agent_x_list = agents_list.iter().map(|agent| agent.x).collect();
|
self.agents.par_iter_mut().for_each(|agent| {
|
||||||
agent_y_list = agents_list.iter().map(|agent| agent.y).collect();
|
let i: usize = agent.i;
|
||||||
|
|
||||||
for agent in &*self.agents.clone() {
|
let grid = &grids[agent.population_id];
|
||||||
let grid = &grids.clone()[agent.population_id];
|
let (width, height) = (grid.width, grid.height);
|
||||||
let PopulationConfig {
|
let PopulationConfig {
|
||||||
sensor_distance,
|
sensor_distance,
|
||||||
sensor_angle,
|
sensor_angle,
|
||||||
@ -280,19 +201,121 @@ impl Model {
|
|||||||
step_distance,
|
step_distance,
|
||||||
..
|
..
|
||||||
} = grid.config;
|
} = grid.config;
|
||||||
sensor_distance_list.push(sensor_distance);
|
|
||||||
sensor_angle_list.push(sensor_angle);
|
let xc = agent.x + agent.angle.cos() * sensor_distance;
|
||||||
rotation_angle_list.push(rotation_angle);
|
let yc = agent.y + agent.angle.sin() * sensor_distance;
|
||||||
step_distance_list.push(step_distance);
|
|
||||||
|
let agent_add_sens = agent.angle + sensor_angle;
|
||||||
|
let agent_sub_sens = agent.angle - sensor_angle;
|
||||||
|
|
||||||
|
let xl = agent.x + agent_sub_sens.cos() * sensor_distance;
|
||||||
|
let yl = agent.y + agent_sub_sens.sin() * sensor_distance;
|
||||||
|
let xr = agent.x + agent_add_sens.cos() * sensor_distance;
|
||||||
|
let yr = agent.y + agent_add_sens.sin() * sensor_distance;
|
||||||
|
|
||||||
|
// Sense. We sense from the buffer because this is where we previously combined data
|
||||||
|
// from all the grid.
|
||||||
|
let trail_c = grid.get_buf(xc, yc);
|
||||||
|
let trail_l = grid.get_buf(xl, yl);
|
||||||
|
let trail_r = grid.get_buf(xr, yr);
|
||||||
|
|
||||||
|
// Rotate and move
|
||||||
|
let mut rng = rand::thread_rng();
|
||||||
|
let direction = Model::pick_direction(trail_c, trail_l, trail_r, &mut rng);
|
||||||
|
agent.rotate_and_move(direction, rotation_angle, step_distance, width, height);
|
||||||
|
});
|
||||||
|
|
||||||
|
if debug {
|
||||||
|
let agents_tick_elapsed = agents_tick_time.elapsed().as_millis();
|
||||||
|
let ms_per_agent: f64 = (agents_tick_elapsed as f64) / (self.agents.len() as f64);
|
||||||
|
println!("Finished tick for all agents. took {}ms\nTime per agent: {}ms\n", agents_tick_time.elapsed().as_millis(), ms_per_agent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Deposit
|
||||||
|
for agent in self.agents.iter() {
|
||||||
|
self.grids[agent.population_id].deposit(agent.x, agent.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
let sensor_distance = af::Array::new(&sensor_distance_list, dims);
|
// Diffuse + Decay
|
||||||
let sensor_angle = af::Array::new(&sensor_angle_list, dims);
|
let diffusivity = self.diffusivity;
|
||||||
|
self.grids.par_iter_mut().for_each(|grid| {
|
||||||
|
grid.diffuse(diffusivity);
|
||||||
|
});
|
||||||
|
|
||||||
|
self.save_image_data();
|
||||||
|
self.iteration += 1;
|
||||||
|
pb.set_position(i as u64);
|
||||||
|
}
|
||||||
|
pb.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Currently VERY poorly implemented (allocates memory each iteration)
|
||||||
|
// I need to learn more about gpu compute to tackle this one
|
||||||
|
pub fn run_cl(&mut self, steps: usize) {
|
||||||
|
let pb = ProgressBar::new(steps as u64);
|
||||||
|
pb.set_style(
|
||||||
|
ProgressStyle::default_bar()
|
||||||
|
.template(
|
||||||
|
"{spinner:.green} [{elapsed_precise}] [{bar:40.cyan/blue}] {pos}/{len} ({eta} {percent}%, {per_sec})",
|
||||||
|
)
|
||||||
|
.progress_chars("#>-"),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Combine grids
|
||||||
|
let grids = &mut self.grids;
|
||||||
|
combine(grids, &self.attraction_table);
|
||||||
|
|
||||||
|
let agents_list = &*self.agents.clone();
|
||||||
|
|
||||||
|
|
||||||
|
let agent_num: usize = agents_list.len() as usize;
|
||||||
|
let dims = af::Dim4::new(&[agent_num as u64, 1, 1, 1]);
|
||||||
|
|
||||||
|
|
||||||
|
let mut sensor_distance_list: Vec<f32> = Vec::new();
|
||||||
|
let mut sensor_angle_list: Vec<f32> = Vec::new();
|
||||||
|
let mut rotation_angle_list: Vec<f32> = Vec::new();
|
||||||
|
let mut step_distance_list: Vec<f32> = Vec::new();
|
||||||
|
|
||||||
|
// Need to fix, super slow
|
||||||
|
for agent in &*self.agents.clone() {
|
||||||
|
let PopulationConfig {
|
||||||
|
sensor_distance,
|
||||||
|
sensor_angle,
|
||||||
|
rotation_angle,
|
||||||
|
step_distance,
|
||||||
|
..
|
||||||
|
} = &grids.clone()[agent.population_id].config;
|
||||||
|
sensor_distance_list.push(*sensor_distance);
|
||||||
|
sensor_angle_list.push(*sensor_angle);
|
||||||
|
rotation_angle_list.push(*rotation_angle);
|
||||||
|
step_distance_list.push(*step_distance);
|
||||||
|
}
|
||||||
|
|
||||||
|
let sensor_distance = af::Array::new(&sensor_distance_list, dims);
|
||||||
|
let sensor_angle = af::Array::new(&sensor_angle_list, dims);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let mut agent_angles_list: Vec<f32> = Vec::new();
|
||||||
|
let mut agent_x_list: Vec<f32> = Vec::new();
|
||||||
|
let mut agent_y_list: Vec<f32> = Vec::new();
|
||||||
|
|
||||||
|
for i in 0..steps {
|
||||||
|
let grids = &mut self.grids;
|
||||||
|
combine(grids, &self.attraction_table);
|
||||||
|
|
||||||
|
println!("Starting tick for all agents...");
|
||||||
|
let agents_tick_time = Instant::now();
|
||||||
|
agent_angles_list = agents_list.iter().map(|agent| agent.angle).collect();
|
||||||
|
agent_x_list = agents_list.iter().map(|agent| agent.x).collect();
|
||||||
|
agent_y_list = agents_list.iter().map(|agent| agent.y).collect();
|
||||||
|
|
||||||
|
|
||||||
let agent_angles = af::Array::new(&agent_angles_list, dims);
|
|
||||||
let agent_x = af::Array::new(&agent_x_list, dims);
|
let agent_x = af::Array::new(&agent_x_list, dims);
|
||||||
let agent_y = af::Array::new(&agent_y_list, dims);
|
let agent_y = af::Array::new(&agent_y_list, dims);
|
||||||
|
let agent_angles = af::Array::new(&agent_angles_list, dims);
|
||||||
|
|
||||||
let cos_angles = af::cos(&agent_angles);
|
let cos_angles = af::cos(&agent_angles);
|
||||||
let sin_angles = af::sin(&agent_angles);
|
let sin_angles = af::sin(&agent_angles);
|
||||||
@ -300,19 +323,27 @@ impl Model {
|
|||||||
let cos_angle_dis = af::mul(&cos_angles, &sensor_distance, false);
|
let cos_angle_dis = af::mul(&cos_angles, &sensor_distance, false);
|
||||||
let sin_angle_dis = af::mul(&sin_angles, &sensor_distance, false);
|
let sin_angle_dis = af::mul(&sin_angles, &sensor_distance, false);
|
||||||
|
|
||||||
let xc = Self::to_vec(&af::add(&agent_x, &cos_angle_dis, false));
|
let xc_array = &af::add(&agent_x, &cos_angle_dis, false);
|
||||||
let yc = Self::to_vec(&af::add(&agent_y, &sin_angle_dis, false));
|
let yc_array = &af::add(&agent_y, &sin_angle_dis, false);
|
||||||
|
|
||||||
|
let xc = Self::to_vec(xc_array);
|
||||||
|
let yc = Self::to_vec(yc_array);
|
||||||
|
|
||||||
let agent_add_sens = &agent_angles + &sensor_angle;
|
let agent_add_sens = af::add(&agent_angles, &sensor_angle, false);
|
||||||
let agent_sub_sens = &agent_angles - &sensor_angle;
|
let agent_sub_sens = af::sub(&agent_angles, &sensor_angle, false);
|
||||||
|
|
||||||
let agent_add_sens_mul = af::mul(&agent_add_sens, &sensor_distance, false);
|
let agent_add_sens_mul = af::mul(&agent_add_sens, &sensor_distance, false);
|
||||||
let agent_sub_sens_mul = af::mul(&agent_sub_sens, &sensor_distance, false);
|
let agent_sub_sens_mul = af::mul(&agent_sub_sens, &sensor_distance, false);
|
||||||
|
|
||||||
let xl = Self::to_vec(&af::add(&agent_x, &af::sin(&agent_sub_sens_mul), false));
|
let xl_array = &af::add(&agent_x, &af::sin(&agent_sub_sens_mul), false);
|
||||||
let yl = Self::to_vec(&af::add(&agent_y, &af::sin(&agent_sub_sens_mul), false));
|
let yl_array = &af::add(&agent_y, &af::sin(&agent_sub_sens_mul), false);
|
||||||
let xr = Self::to_vec(&af::add(&agent_x, &af::sin(&agent_add_sens_mul), false));
|
let xr_array = &af::add(&agent_x, &af::sin(&agent_add_sens_mul), false);
|
||||||
let yr = Self::to_vec(&af::add(&agent_y, &af::sin(&agent_add_sens_mul), false));
|
let yr_array = &af::add(&agent_y, &af::sin(&agent_add_sens_mul), false);
|
||||||
|
|
||||||
|
let xl = Self::to_vec(xl_array);
|
||||||
|
let yl = Self::to_vec(yl_array);
|
||||||
|
let xr = Self::to_vec(xr_array);
|
||||||
|
let yr = Self::to_vec(yr_array);
|
||||||
|
|
||||||
|
|
||||||
self.agents.par_iter_mut().for_each(|agent| {
|
self.agents.par_iter_mut().for_each(|agent| {
|
||||||
@ -340,11 +371,9 @@ impl Model {
|
|||||||
agent.rotate_and_move(direction, rotation_angle, step_distance, width, height);
|
agent.rotate_and_move(direction, rotation_angle, step_distance, width, height);
|
||||||
});
|
});
|
||||||
|
|
||||||
// /*
|
|
||||||
let agents_tick_elapsed = agents_tick_time.elapsed().as_millis();
|
let agents_tick_elapsed = agents_tick_time.elapsed().as_millis();
|
||||||
let ms_per_agent: f64 = (agents_tick_elapsed as f64) / (self.agents.len() as f64);
|
let ms_per_agent: f64 = (agents_tick_elapsed as f64) / (self.agents.len() as f64);
|
||||||
println!("Finished tick for all agents. took {}ms\nTime peragent: {}ms", agents_tick_time.elapsed().as_millis(), ms_per_agent);
|
println!("Finished tick for all agents. took {}ms\nTime per agent: {}ms\n", agents_tick_time.elapsed().as_millis(), ms_per_agent);
|
||||||
// */
|
|
||||||
|
|
||||||
// Deposit
|
// Deposit
|
||||||
for agent in self.agents.iter() {
|
for agent in self.agents.iter() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user