From 2b43c07f947e1321a2b4c9f276f78454eeace18b Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 8 Aug 2021 16:20:55 +0200 Subject: [PATCH 01/44] Implemented GUI for snake --- Cargo.lock | 2793 +++++++++++++++++++-- Cargo.toml | 1 + examples/snake-cli/game.rs | 58 +- examples/snake-cli/snake.rs | 33 +- examples/snake-cli/training_simulation.rs | 11 +- 5 files changed, 2650 insertions(+), 246 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7e7d66a..07a90ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,452 +3,2545 @@ version = 3 [[package]] -name = "async-trait" -version = "0.1.50" +name = "ab_glyph" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" +checksum = "af0ac006645f86f20f6c6fa4dcaef920bf803df819123626f9440e35835e7d80" dependencies = [ - "proc-macro2", - "quote", - "syn", + "ab_glyph_rasterizer", + "owned_ttf_parser 0.12.1", ] [[package]] -name = "autocfg" -version = "1.0.1" +name = "ab_glyph_rasterizer" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff" [[package]] -name = "bumpalo" -version = "3.4.0" +name = "adler" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] -name = "cfg-if" -version = "0.1.10" +name = "adler32" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] -name = "cfg-if" -version = "1.0.0" +name = "alsa" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "75c4da790adcb2ce5e758c064b4f3ec17a30349f9961d3e5e6c9688b052a9e18" +dependencies = [ + "alsa-sys", + "bitflags", + "libc", + "nix 0.20.0", +] [[package]] -name = "const_fn" -version = "0.4.4" +name = "alsa-sys" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd51eab21ab4fd6a3bf889e2d0958c0a6e3a61ad04260325e919e652a2a62826" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] [[package]] -name = "crossbeam-channel" -version = "0.5.0" +name = "andrew" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", + "bitflags", + "rusttype", + "walkdir", + "xdg", + "xml-rs", ] [[package]] -name = "crossbeam-deque" -version = "0.8.0" +name = "android_glue" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch", - "crossbeam-utils", -] +checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" [[package]] -name = "crossbeam-epoch" -version = "0.9.1" +name = "approx" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" +checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e" dependencies = [ - "cfg-if 1.0.0", - "const_fn", - "crossbeam-utils", - "lazy_static", - "memoffset", - "scopeguard", + "num-traits", ] [[package]] -name = "crossbeam-utils" -version = "0.8.1" +name = "arrayvec" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "async-trait" +version = "0.1.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "lazy_static", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "either" -version = "1.6.1" +name = "autocfg" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] -name = "getrandom" -version = "0.2.1" +name = "base-x" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4060f4657be78b8e766215b02b18a2e862d83745545de804638e2b545e81aee6" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] +checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" [[package]] -name = "hermit-abi" -version = "0.1.17" +name = "bindgen" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239" dependencies = [ - "libc", + "bitflags", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", ] [[package]] -name = "itertools" -version = "0.10.0" +name = "bitflags" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319" -dependencies = [ - "either", -] +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] -name = "itoa" -version = "0.4.6" +name = "block" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] -name = "js-sys" -version = "0.3.46" +name = "bumpalo" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175" -dependencies = [ - "wasm-bindgen", -] +checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" [[package]] -name = "lazy_static" -version = "1.4.0" +name = "bytecount" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e" [[package]] -name = "libc" -version = "0.2.98" +name = "bytemuck" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" +checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b" [[package]] -name = "libm" -version = "0.2.1" +name = "byteorder" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] -name = "log" -version = "0.4.11" +name = "bytes" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" -dependencies = [ - "cfg-if 0.1.10", -] +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" [[package]] -name = "memoffset" -version = "0.6.1" +name = "bzip2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" dependencies = [ - "autocfg", + "bzip2-sys", + "libc", ] [[package]] -name = "neat-gru" -version = "0.6.5" +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" dependencies = [ - "async-trait", - "getrandom", - "itertools", - "num", - "numeric_literals", - "rand", - "rand_distr", - "rayon", - "serde", - "serde_json", + "cc", + "libc", + "pkg-config", ] [[package]] -name = "num" -version = "0.4.0" +name = "calloop" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c" dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", + "log", + "nix 0.18.0", ] [[package]] -name = "num-bigint" -version = "0.4.0" +name = "cargo-platform" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "serde", ] [[package]] -name = "num-complex" -version = "0.4.0" +name = "cargo_metadata" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f" dependencies = [ - "num-traits", + "cargo-platform", + "semver 0.11.0", + "semver-parser 0.10.2", + "serde", + "serde_json", ] [[package]] -name = "num-integer" -version = "0.1.44" +name = "cc" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" dependencies = [ - "autocfg", - "num-traits", + "jobserver", ] [[package]] -name = "num-iter" -version = "0.1.42" +name = "cesu8" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] -name = "num-rational" +name = "cexpr" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", + "nom 5.1.2", ] [[package]] -name = "num-traits" -version = "0.2.14" +name = "cfg-if" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", - "libm", -] +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] -name = "num_cpus" -version = "1.13.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" dependencies = [ - "hermit-abi", "libc", ] [[package]] -name = "numeric_literals" -version = "0.2.0" +name = "clang-sys" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "095aa67b0b9f2081746998f4f17106bdb51d56dc8c211afca5531b92b83bf98a" +checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" dependencies = [ - "quote", - "syn", + "glob", + "libc", + "libloading 0.7.0", ] [[package]] -name = "ppv-lite86" -version = "0.2.10" +name = "claxon" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "4bfbf56724aa9eca8afa4fcfadeb479e722935bb2a0900c2d37e0cc477af0688" [[package]] -name = "proc-macro2" -version = "1.0.26" +name = "cocoa" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" +checksum = "c54201c07dcf3a5ca33fececb8042aed767ee4bfd5a0235a8ceabcda956044b2" dependencies = [ - "unicode-xid", + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.1", + "core-graphics 0.22.2", + "foreign-types", + "libc", + "objc", ] [[package]] -name = "quote" -version = "1.0.7" +name = "cocoa" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" dependencies = [ - "proc-macro2", + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.1", + "core-graphics 0.22.2", + "foreign-types", + "libc", + "objc", ] [[package]] -name = "rand" -version = "0.8.1" +name = "cocoa-foundation" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c24fcd450d3fa2b592732565aa4f17a27a61c65ece4726353e000939b0edee34" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" dependencies = [ + "bitflags", + "block", + "core-foundation 0.9.1", + "core-graphics-types", + "foreign-types", "libc", - "rand_chacha", - "rand_core", - "rand_hc", + "objc", ] [[package]] -name = "rand_chacha" -version = "0.3.0" +name = "color_quant" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2d47c1b11006b87e492b53b313bb699ce60e16613c4dddaa91f8f7c220ab2fa" dependencies = [ - "ppv-lite86", - "rand_core", + "bytes", + "memchr", ] [[package]] -name = "rand_core" -version = "0.6.0" +name = "const_fn" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8b34ba8cfb21243bd8df91854c830ff0d785fff2e82ebd4434c2644cb9ada18" +checksum = "cd51eab21ab4fd6a3bf889e2d0958c0a6e3a61ad04260325e919e652a2a62826" + +[[package]] +name = "core-foundation" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" dependencies = [ - "getrandom", + "core-foundation-sys 0.6.2", + "libc", ] [[package]] -name = "rand_distr" -version = "0.4.0" +name = "core-foundation" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9e8f32ad24fb80d07d2323a9a2ce8b30d68a62b8cb4df88119ff49a698f038" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" dependencies = [ - "num-traits", - "rand", + "core-foundation-sys 0.7.0", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +dependencies = [ + "core-foundation-sys 0.8.2", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" + +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "core-foundation-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" + +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86" +dependencies = [ + "bitflags", + "core-foundation 0.9.1", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation 0.9.1", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11894b20ebfe1ff903cbdc52259693389eea03b94918a2def2c30c3bf227ad88" +dependencies = [ + "bitflags", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b7e3347be6a09b46aba228d6608386739fb70beff4f61e07422da87b0bb31fa" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8351ddf2aaa3c583fa388029f8b3d26f3c7035a20911fdd5f2e2ed7ab57dad25" +dependencies = [ + "alsa", + "core-foundation-sys 0.6.2", + "coreaudio-rs", + "jni", + "js-sys", + "lazy_static", + "libc", + "mach 0.3.2", + "ndk 0.3.0", + "ndk-glue 0.3.0", + "nix 0.20.0", + "oboe", + "parking_lot", + "stdweb 0.1.3", + "thiserror", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" +dependencies = [ + "cfg-if 1.0.0", + "const_fn", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "lazy_static", +] + +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "deflate" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +dependencies = [ + "adler32", + "byteorder", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "directories" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76" +dependencies = [ + "libloading 0.6.7", +] + +[[package]] +name = "dlib" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" +dependencies = [ + "libloading 0.7.0", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "draw_state" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cf9537e2d06891448799b96d5a8c8083e0e90522a7fdabe6ebf4f41d79d651" +dependencies = [ + "bitflags", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + +[[package]] +name = "euclid" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da96828553a086d7b18dcebfc579bd9628b016f86590d7453c115e490fa74b80" +dependencies = [ + "num-traits", +] + +[[package]] +name = "float_next_after" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc612c5837986b7104a87a0df74a5460931f1c5274be12f8d0f40aa2f30d632" +dependencies = [ + "num-traits", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + +[[package]] +name = "getrandom" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4060f4657be78b8e766215b02b18a2e862d83745545de804638e2b545e81aee6" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gfx" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01de46f9508a5c259aef105f0bff760ceddca832ea9c87ce03d1923e22ee155b" +dependencies = [ + "draw_state", + "gfx_core", + "log", +] + +[[package]] +name = "gfx_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75fbddaef2e12b4995900539d7209d947b988a3d87ee8737484d049b526e5441" +dependencies = [ + "bitflags", + "draw_state", + "log", +] + +[[package]] +name = "gfx_device_gl" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c385fa380c18888633aa27d1e16cbae518469702a2f69dcb5f52d5378bebc" +dependencies = [ + "gfx_core", + "gfx_gl", + "log", +] + +[[package]] +name = "gfx_gl" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d38164670920cfb7491bc0cf6f49f0554bd1c44cdbedc6c78d2bf91691ff5e" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "ggez" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18df9699a5244b0287c497de988393d381e49cf48996f8fcd10b80c9086cee65" +dependencies = [ + "approx", + "bitflags", + "bytemuck", + "directories", + "gfx", + "gfx_core", + "gfx_device_gl", + "gilrs", + "glam", + "glutin", + "glyph_brush", + "image", + "log", + "lyon", + "mint", + "old_school_gfx_glutin_ext", + "rodio", + "serde", + "serde_derive", + "skeptic", + "smart-default", + "toml", + "winit", + "zip", +] + +[[package]] +name = "gif" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a668f699973d0f573d15749b7002a9ac9e1f9c6b220e7b165601334c173d8de" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gilrs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e986f911d937f4395dfc2a39618dcef452773d32dcdbe0828c623f76588f749" +dependencies = [ + "fnv", + "gilrs-core", + "log", + "uuid", + "vec_map", +] + +[[package]] +name = "gilrs-core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a5e5bb97bf9a0d9519a28cf38839cf1d6d9bb572b48e3c67202271fec2ed5e7" +dependencies = [ + "core-foundation 0.6.4", + "io-kit-sys", + "libc", + "libudev-sys", + "log", + "nix 0.20.0", + "rusty-xinput", + "stdweb 0.4.20", + "uuid", + "vec_map", + "winapi 0.3.9", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glam" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" +dependencies = [ + "mint", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "glutin" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ae1cbb9176b9151c4ce03f012e3cd1c6c18c4be79edeaeb3d99f5d8085c5fa3" +dependencies = [ + "android_glue", + "cgl", + "cocoa 0.23.0", + "core-foundation 0.9.1", + "glutin_egl_sys", + "glutin_emscripten_sys", + "glutin_gles2_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "lazy_static", + "libloading 0.6.7", + "log", + "objc", + "osmesa-sys", + "parking_lot", + "wayland-client", + "wayland-egl", + "winapi 0.3.9", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" +dependencies = [ + "gl_generator", + "winapi 0.3.9", +] + +[[package]] +name = "glutin_emscripten_sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" + +[[package]] +name = "glutin_gles2_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" +dependencies = [ + "gl_generator", + "objc", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "glyph_brush" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e3f00b8574a76fb6c50890c48da03946ca50e4372a2778737922666a2238221" +dependencies = [ + "glyph_brush_draw_cache", + "glyph_brush_layout", + "log", + "ordered-float", + "rustc-hash", + "twox-hash", +] + +[[package]] +name = "glyph_brush_draw_cache" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac2c82074cafb68b9e459c50c655f7eedcb92d6ee7166813802934bc6fc29fa3" +dependencies = [ + "ab_glyph", + "crossbeam-channel", + "crossbeam-deque", + "linked-hash-map", + "rayon", + "rustc-hash", +] + +[[package]] +name = "glyph_brush_layout" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" +dependencies = [ + "ab_glyph", + "approx", + "xi-unicode", +] + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", +] + +[[package]] +name = "hound" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "image" +version = "0.23.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "gif", + "num-iter", + "num-rational 0.3.2", + "num-traits", + "png", + "tiff", +] + +[[package]] +name = "instant" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "io-kit-sys" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f21dcc74995dd4cd090b147e79789f8d65959cbfb5f0b118002db869ea3bd0a0" +dependencies = [ + "core-foundation-sys 0.6.2", + "mach 0.2.3", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "itertools" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d572918e350e82412fe766d24b15e6682fb2ed2bbe018280caa810397cb319" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "jni" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24967112a1e4301ca5342ea339763613a37592b8a6ce6cf2e4494537c7a42faf" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ca711fd837261e14ec9e674f092cbb931d3fa1482b017ae59328ddc6f3212b" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" + +[[package]] +name = "js-sys" +version = "0.3.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + +[[package]] +name = "libc" +version = "0.2.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" + +[[package]] +name = "libloading" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libloading" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" + +[[package]] +name = "lock_api" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] +name = "lyon" +version = "0.17.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a146a460c58fb5361fc7faf8d7a68b274f11969ee1f6856875c162d679d0306" +dependencies = [ + "lyon_algorithms", + "lyon_tessellation", +] + +[[package]] +name = "lyon_algorithms" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6931fa85f0e649e8d781a31ffc9fa42aee5074b965a0bad7d05f84aaef2e8933" +dependencies = [ + "lyon_path", + "sid", +] + +[[package]] +name = "lyon_geom" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e79ed83352715656b6e73bd9c1b54736f22d0c6ad9b1809ad20d585b943f4a" +dependencies = [ + "arrayvec", + "euclid", + "num-traits", +] + +[[package]] +name = "lyon_path" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19c56b500e0b03ed3cea146557c701a28f7f83633610c1b8cff2c7251412f72" +dependencies = [ + "lyon_geom", +] + +[[package]] +name = "lyon_tessellation" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c76c657e6eadab8fc258b0570226d88f186d2a462105a62dc015471f56fe761" +dependencies = [ + "arrayvec", + "float_next_after", + "lyon_path", + "sid", +] + +[[package]] +name = "mach" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" +dependencies = [ + "libc", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" + +[[package]] +name = "memmap2" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimp3" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985438f75febf74c392071a975a29641b420dd84431135a6e6db721de4b74372" +dependencies = [ + "minimp3-sys", + "slice-deque", + "thiserror", +] + +[[package]] +name = "minimp3-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e21c73734c69dc95696c9ed8926a2b393171d98b3f5f5935686a26a487ab9b90" +dependencies = [ + "cc", +] + +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "mint" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519df8d6856dcd4b40519947737b408f81be051fc032590659cae5d77d664185" + +[[package]] +name = "mio" +version = "0.6.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +dependencies = [ + "cfg-if 0.1.10", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow", + "net2", + "slab", + "winapi 0.2.8", +] + +[[package]] +name = "mio-extras" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" +dependencies = [ + "lazycell", + "log", + "mio", + "slab", +] + +[[package]] +name = "miow" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + +[[package]] +name = "ndk" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" +dependencies = [ + "jni-sys", + "ndk-sys", + "num_enum 0.4.3", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8794322172319b972f528bf90c6b467be0079f1fa82780ffb431088e741a73ab" +dependencies = [ + "jni-sys", + "ndk-sys", + "num_enum 0.5.3", + "thiserror", +] + +[[package]] +name = "ndk-glue" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.2.1", + "ndk-macro", + "ndk-sys", +] + +[[package]] +name = "ndk-glue" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5caf0c24d51ac1c905c27d4eda4fa0635bbe0de596b8f79235e0b17a4d29385" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.3.0", + "ndk-macro", + "ndk-sys", +] + +[[package]] +name = "ndk-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" +dependencies = [ + "darling", + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" + +[[package]] +name = "neat-gru" +version = "0.6.5" +dependencies = [ + "async-trait", + "getrandom", + "ggez", + "itertools", + "num", + "numeric_literals", + "rand", + "rand_distr", + "rayon", + "serde", + "serde_json", +] + +[[package]] +name = "net2" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "nix" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" +dependencies = [ + "bitflags", + "cc", + "cfg-if 0.1.10", + "libc", +] + +[[package]] +name = "nix" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", +] + +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "memchr", + "version_check", +] + +[[package]] +name = "nom" +version = "6.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" +dependencies = [ + "memchr", + "version_check", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational 0.4.0", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" +dependencies = [ + "derivative", + "num_enum_derive 0.4.3", +] + +[[package]] +name = "num_enum" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2c8fd66061a707503d515639b8af10fd3807a5b5ee6959f7ff1bd303634bd5" +dependencies = [ + "derivative", + "num_enum_derive 0.5.3", +] + +[[package]] +name = "num_enum_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" +dependencies = [ + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "474fd1d096da3ad17084694eebed40ba09c4a36c5255cd772bd8b98859cc562e" +dependencies = [ + "proc-macro-crate 1.0.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "numeric_literals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "095aa67b0b9f2081746998f4f17106bdb51d56dc8c211afca5531b92b83bf98a" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "oboe" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa187b38ae20374617b7ad418034ed3dc90ac980181d211518bd03537ae8f8d" +dependencies = [ + "jni", + "ndk 0.3.0", + "ndk-glue 0.3.0", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88e64835aa3f579c08d182526dc34e3907343d5b97e87b71a40ba5bca7aca9e" +dependencies = [ + "cc", +] + +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "old_school_gfx_glutin_ext" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "450a2a0e6805771787b965af9a552581c9dfc588dc33761c1be690117cd792e1" +dependencies = [ + "gfx_core", + "gfx_device_gl", + "glutin", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "ordered-float" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f02eb0f69271f26abe3202189275d7aa2258b903cb0281b5de710a2570ff3" +dependencies = [ + "num-traits", +] + +[[package]] +name = "osmesa-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" +dependencies = [ + "shared_library", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f923fb806c46266c02ab4a5b239735c144bdeda724a50ed058e5226f594cde3" +dependencies = [ + "ttf-parser 0.6.2", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60ac8dda2e5cc09bf6480e3b3feff9783db251710c922ae9369a429c51efdeb0" +dependencies = [ + "ttf-parser 0.12.3", +] + +[[package]] +name = "parking_lot" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi 0.3.9", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "png" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" +dependencies = [ + "bitflags", + "crc32fast", + "deflate", + "miniz_oxide 0.3.7", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[package]] +name = "proc-macro-crate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "pulldown-cmark" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" +dependencies = [ + "bitflags", + "memchr", + "unicase", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24fcd450d3fa2b592732565aa4f17a27a61c65ece4726353e000939b0edee34" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8b34ba8cfb21243bd8df91854c830ff0d785fff2e82ebd4434c2644cb9ada18" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_distr" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9e8f32ad24fb80d07d2323a9a2ce8b30d68a62b8cb4df88119ff49a698f038" +dependencies = [ + "num-traits", + "rand", ] [[package]] name = "rand_hc" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +dependencies = [ + "rand_core", +] + +[[package]] +name = "raw-window-handle" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" +dependencies = [ + "libc", +] + +[[package]] +name = "rayon" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +dependencies = [ + "getrandom", + "redox_syscall", +] + +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "rodio" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d98f5e557b61525057e2bc142c8cd7f0e70d75dc32852309bec440e6e046bf9" +dependencies = [ + "claxon", + "cpal", + "hound", + "lewton", + "minimp3", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rusttype" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc7c727aded0be18c5b80c1640eae0ac8e396abf6fa8477d96cb37d18ee5ec59" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser 0.6.0", +] + +[[package]] +name = "rusty-xinput" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2aa654bc32eb9ca14cce1a084abc9dfe43949a4547c35269a094c39272db3bb" +dependencies = [ + "lazy_static", + "log", + "winapi 0.3.9", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.2", + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + +[[package]] +name = "shared_library" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" +dependencies = [ + "lazy_static", + "libc", +] + +[[package]] +name = "shlex" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" + +[[package]] +name = "sid" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd5ac56c121948b4879bba9e519852c211bcdd8f014efff766441deff0b91bdb" +dependencies = [ + "num-traits", +] + +[[package]] +name = "skeptic" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "188b810342d98f23f0bb875045299f34187b559370b041eb11520c905370a888" +dependencies = [ + "bytecount", + "cargo_metadata", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] + +[[package]] +name = "slab" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" + +[[package]] +name = "slice-deque" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ef6ee280cdefba6d2d0b4b78a84a1c1a3f3a4cec98c2d4231c8bc225de0f25" dependencies = [ - "rand_core", + "libc", + "mach 0.3.2", + "winapi 0.3.9", ] [[package]] -name = "rayon" -version = "1.5.0" +name = "smallvec" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + +[[package]] +name = "smart-default" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" dependencies = [ - "autocfg", - "crossbeam-deque", - "either", - "rayon-core", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "rayon-core" -version = "1.9.0" +name = "smithay-client-toolkit" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" +checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80" dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", + "andrew", + "bitflags", + "calloop", + "dlib 0.4.2", "lazy_static", - "num_cpus", + "log", + "memmap2", + "nix 0.18.0", + "wayland-client", + "wayland-cursor", + "wayland-protocols", ] [[package]] -name = "ryu" -version = "1.0.5" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "scopeguard" -version = "1.1.0" +name = "stdweb" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" [[package]] -name = "serde" -version = "1.0.118" +name = "stdweb" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" dependencies = [ - "serde_derive", + "discard", + "rustc_version", + "serde", + "serde_json", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", ] [[package]] -name = "serde_derive" -version = "1.0.118" +name = "stdweb-derive" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" dependencies = [ "proc-macro2", "quote", + "serde", + "serde_derive", "syn", ] [[package]] -name = "serde_json" -version = "1.0.60" +name = "stdweb-internal-macros" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" dependencies = [ - "itoa", - "ryu", + "base-x", + "proc-macro2", + "quote", "serde", + "serde_derive", + "serde_json", + "sha1", + "syn", ] +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + [[package]] name = "syn" -version = "1.0.72" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82" +checksum = "f3a1d708c221c5a612956ef9f75b37e454e88d1f7b899fbd3a18d4252012d663" dependencies = [ "proc-macro2", "quote", "unicode-xid", ] +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "rand", + "redox_syscall", + "remove_dir_all", + "winapi 0.3.9", +] + +[[package]] +name = "thiserror" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tiff" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" +dependencies = [ + "jpeg-decoder", + "miniz_oxide 0.4.4", + "weezl", +] + +[[package]] +name = "tinyvec" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] +name = "ttf-parser" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc" + +[[package]] +name = "ttf-parser" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6" + +[[package]] +name = "twox-hash" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f559b464de2e2bdabcac6a210d12e9b5a5973c251e102c44c585c71d51bd78e" +dependencies = [ + "cfg-if 1.0.0", + "rand", + "static_assertions", +] + +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-xid" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" @@ -508,3 +2601,237 @@ name = "wasm-bindgen-shared" version = "0.2.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158" + +[[package]] +name = "wayland-client" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355" +dependencies = [ + "bitflags", + "downcast-rs", + "libc", + "nix 0.20.0", + "scoped-tls", + "wayland-commons", + "wayland-scanner", + "wayland-sys", +] + +[[package]] +name = "wayland-commons" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda" +dependencies = [ + "nix 0.20.0", + "once_cell", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-cursor" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a" +dependencies = [ + "nix 0.20.0", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-egl" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ba1ab1e18756b23982d36f08856d521d7df45015f404a2d7c4f0b2d2f66956" +dependencies = [ + "wayland-client", + "wayland-sys", +] + +[[package]] +name = "wayland-protocols" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f" +dependencies = [ + "bitflags", + "wayland-client", + "wayland-commons", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "wayland-sys" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8" +dependencies = [ + "dlib 0.5.0", + "lazy_static", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222b1ef9334f92a21d3fb53dc3fd80f30836959a90f9274a626d7e06315ba3c3" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winit" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597" +dependencies = [ + "bitflags", + "cocoa 0.24.0", + "core-foundation 0.9.1", + "core-graphics 0.22.2", + "core-video-sys", + "dispatch", + "instant", + "lazy_static", + "libc", + "log", + "mio", + "mio-extras", + "ndk 0.2.1", + "ndk-glue 0.2.1", + "ndk-sys", + "objc", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "smithay-client-toolkit", + "wayland-client", + "winapi 0.3.9", + "x11-dl", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "x11-dl" +version = "2.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8" +dependencies = [ + "lazy_static", + "libc", + "maybe-uninit", + "pkg-config", +] + +[[package]] +name = "xcursor" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08" +dependencies = [ + "nom 6.1.2", +] + +[[package]] +name = "xdg" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" + +[[package]] +name = "xi-unicode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" + +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" + +[[package]] +name = "zip" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +dependencies = [ + "byteorder", + "bzip2", + "crc32fast", + "thiserror", +] diff --git a/Cargo.toml b/Cargo.toml index b633eb9..f3e51b4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ numeric_literals = "0.2.0" rayon = "1.5.0" itertools = "0.10.0" async-trait = "0.1.50" +ggez = "0.6.0" [target.'cfg(target_arch = "wasm32")'.dependencies] diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index ba99a4a..5133f74 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -5,6 +5,10 @@ use crate::{ snake::Snake, utils::{distance_to_apple_x, distance_to_apple_y, distance_to_wall_x, distance_to_wall_y}, }; +use ggez::event::EventHandler; +use ggez::graphics::Color; +use ggez::{graphics, graphics::DrawMode, GameResult}; +use ggez::{timer, Context}; #[derive(Debug)] pub struct Game { @@ -34,13 +38,6 @@ impl Game { } } - /// Runs the game and if it finishes returns the game at the end - pub fn run_game(&mut self) { - while !self.game_over() { - self.update(); - } - } - /// Make the snakes make their decision pub fn make_decision(&mut self) { let mut inputs: [f64; 5] = [0., 0., 0., 0., 0.]; @@ -57,7 +54,7 @@ impl Game { } /// Updates the game. Should be called every tick - pub fn update(&mut self) { + pub fn tick(&mut self) { let apple_coordinate = self.apple.get_coordinate(); self.remove_if_dead(); // And then update it @@ -86,4 +83,49 @@ impl Game { } self.snakes.retain(|s| !s.is_colliding()); } + /// Draws the apple + fn draw_apple(&self, ctx: &mut Context) -> GameResult { + let apple_cords = self.apple.get_coordinate(); + let apple = graphics::Mesh::new_circle( + ctx, + DrawMode::Fill(Default::default()), + ggez::mint::Point2 { + x: (apple_cords.x * 10) as f32, + y: (apple_cords.y * 10) as f32, + }, + 5.0, + 0.1, + Color::RED, + )?; + graphics::draw(ctx, &apple, graphics::DrawParam::default())?; + Ok(()) + } + + fn render(&self, ctx: &mut Context) -> GameResult { + self.snakes + .iter() + .for_each(|snake| snake.render(ctx).unwrap()); + self.draw_apple(ctx)?; + Ok(()) + } +} + +const TARGET_FPS: u32 = 10; +impl EventHandler for Game { + fn update(&mut self, ctx: &mut Context) -> GameResult<()> { + while timer::check_update_time(ctx, TARGET_FPS) { + if !self.game_over() { + self.tick(); + } else { + println!("Game Ended"); + } + } + Ok(()) + } + + fn draw(&mut self, ctx: &mut Context) -> GameResult<()> { + graphics::clear(ctx, Color::BLACK); + self.render(ctx)?; + graphics::present(ctx) + } } diff --git a/examples/snake-cli/snake.rs b/examples/snake-cli/snake.rs index 168719a..abc5c51 100644 --- a/examples/snake-cli/snake.rs +++ b/examples/snake-cli/snake.rs @@ -3,13 +3,20 @@ use std::collections::LinkedList; use crate::coordinate::Coordinate; use crate::defs::RESOLUTION; use crate::direction::Direction; +use ggez::{graphics, GameResult}; +use ggez::{graphics::*, Context}; use neat_gru::neural_network::nn::NeuralNetwork; + #[derive(Clone, Copy, Debug, PartialEq)] pub struct Block { cord: Coordinate, } -impl Block {} +impl Block { + fn get_coordinate(&self) -> Coordinate { + self.cord + } +} #[derive(Clone, PartialEq, Debug)] pub struct Snake { blocks: LinkedList, @@ -31,6 +38,25 @@ impl Snake { net: Some(net), } } + pub fn render(&self, ctx: &mut Context) -> GameResult { + self.blocks.iter().for_each(|block| { + let mesh = ggez::graphics::Mesh::new_rounded_rectangle( + ctx, + DrawMode::Fill(Default::default()), + graphics::Rect::new_i32( + (block.cord.x * 10) as i32, + (block.cord.y * 10) as i32, + 10, + 10, + ), + 3., + Color::GREEN, + ) + .unwrap(); + graphics::draw(ctx, &mesh, graphics::DrawParam::default()).unwrap(); + }); + Ok(()) + } /// Returns the size of the snake pub fn size(&self) -> usize { @@ -65,11 +91,10 @@ impl Snake { /// Updates the snake. Eating determines whether the snake is eating and returns /// whether it crashed and whether it ate an apple pub fn update(&mut self, apple: Coordinate) -> bool { - let mut eating = false; + let eating = self.is_eating(apple); // If the snake is eating it gets longer - if !self.is_eating(apple) { + if !eating { self.blocks.pop_back(); - eating = true; } // Move the body if self.move_body() { diff --git a/examples/snake-cli/training_simulation.rs b/examples/snake-cli/training_simulation.rs index e52fed5..0744f8b 100644 --- a/examples/snake-cli/training_simulation.rs +++ b/examples/snake-cli/training_simulation.rs @@ -1,6 +1,7 @@ use std::fs::File; use std::io::Write; +use crate::defs::RESOLUTION; use crate::game::Game; use neat_gru::neural_network::nn::NeuralNetwork; @@ -22,10 +23,18 @@ impl TrainingSimulation { impl neat_gru::game::Game for TrainingSimulation { fn run_generation(&mut self) -> Vec { + let (ctx, events_loop) = ggez::ContextBuilder::new("Snake", "Nereuxofficial") + .window_setup(ggez::conf::WindowSetup::default().title("Snake")) + .window_mode( + ggez::conf::WindowMode::default() + .dimensions((RESOLUTION * 10) as f32, (RESOLUTION * 10) as f32), + ) + .build() + .unwrap(); self.generation += 1; let networks = self.networks.take().unwrap(); let mut game = Game::new(networks); - game.run_game(); + ggez::event::run(ctx, events_loop, game); game.get_scores() } From 7de0a2990e814da36c0592758cbc874ac902c89e Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Wed, 18 Aug 2021 16:19:32 +0200 Subject: [PATCH 02/44] Removed GUI & Increased Generations & the number of snakes --- Cargo.lock | 2798 +++++++++++++++++++-- examples/snake-cli/defs.rs | 2 +- examples/snake-cli/game.rs | 10 +- examples/snake-cli/main.rs | 6 +- examples/snake-cli/snake.rs | 6 +- examples/snake-cli/training_simulation.rs | 14 +- 6 files changed, 2595 insertions(+), 241 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4523d55..55750dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,421 +3,2399 @@ version = 3 [[package]] -name = "async-trait" -version = "0.1.51" +name = "ab_glyph" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" +checksum = "af0ac006645f86f20f6c6fa4dcaef920bf803df819123626f9440e35835e7d80" dependencies = [ - "proc-macro2", - "quote", - "syn", + "ab_glyph_rasterizer", + "owned_ttf_parser 0.12.1", ] [[package]] -name = "autocfg" -version = "1.0.1" +name = "ab_glyph_rasterizer" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff" [[package]] -name = "bumpalo" -version = "3.7.0" +name = "adler" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] -name = "cfg-if" -version = "1.0.0" +name = "adler32" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" [[package]] -name = "crossbeam-channel" -version = "0.5.1" +name = "alsa" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +checksum = "75c4da790adcb2ce5e758c064b4f3ec17a30349f9961d3e5e6c9688b052a9e18" dependencies = [ - "cfg-if", - "crossbeam-utils", + "alsa-sys", + "bitflags", + "libc", + "nix 0.20.1", ] [[package]] -name = "crossbeam-deque" -version = "0.8.1" +name = "alsa-sys" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", + "libc", + "pkg-config", ] [[package]] -name = "crossbeam-epoch" -version = "0.9.5" +name = "andrew" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf" dependencies = [ - "cfg-if", - "crossbeam-utils", - "lazy_static", - "memoffset", - "scopeguard", + "bitflags", + "rusttype", + "walkdir", + "xdg", + "xml-rs", ] [[package]] -name = "crossbeam-utils" -version = "0.8.5" +name = "android_glue" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" + +[[package]] +name = "approx" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e" dependencies = [ - "cfg-if", - "lazy_static", + "num-traits", ] [[package]] -name = "either" -version = "1.6.1" +name = "arrayvec" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] -name = "getrandom" -version = "0.2.3" +name = "async-trait" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" dependencies = [ - "cfg-if", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "autocfg" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] -name = "itertools" -version = "0.10.1" +name = "base-x" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" +checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" + +[[package]] +name = "bindgen" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239" dependencies = [ - "either", + "bitflags", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", ] [[package]] -name = "itoa" -version = "0.4.7" +name = "bitflags" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] -name = "js-sys" -version = "0.3.52" +name = "block" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce791b7ca6638aae45be056e068fc756d871eb3b3b10b8efa62d1c9cec616752" -dependencies = [ - "wasm-bindgen", -] +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] -name = "lazy_static" -version = "1.4.0" +name = "bumpalo" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" [[package]] -name = "libc" -version = "0.2.99" +name = "bytecount" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765" +checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e" [[package]] -name = "libm" -version = "0.2.1" +name = "bytemuck" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" +checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b" [[package]] -name = "log" -version = "0.4.14" +name = "byteorder" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] -name = "memoffset" -version = "0.6.4" +name = "bytes" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" -dependencies = [ - "autocfg", -] +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" [[package]] -name = "neat-gru" -version = "1.0.0" +name = "bzip2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" dependencies = [ - "async-trait", - "getrandom", - "itertools", - "num", - "numeric_literals", - "rand", - "rand_distr", - "rayon", - "serde", - "serde_json", + "bzip2-sys", + "libc", ] [[package]] -name = "num" -version = "0.4.0" +name = "bzip2-sys" +version = "0.1.11+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", + "cc", + "libc", + "pkg-config", ] [[package]] -name = "num-bigint" -version = "0.4.0" +name = "calloop" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "log", + "nix 0.18.0", ] [[package]] -name = "num-complex" -version = "0.4.0" +name = "cargo-platform" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" dependencies = [ - "num-traits", + "serde", ] [[package]] -name = "num-integer" -version = "0.1.44" +name = "cargo_metadata" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f" dependencies = [ - "autocfg", - "num-traits", + "cargo-platform", + "semver 0.11.0", + "semver-parser 0.10.2", + "serde", + "serde_json", ] [[package]] -name = "num-iter" -version = "0.1.42" +name = "cc" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" dependencies = [ - "autocfg", - "num-integer", - "num-traits", + "jobserver", ] [[package]] -name = "num-rational" +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", + "nom 5.1.2", ] [[package]] -name = "num-traits" -version = "0.2.14" +name = "cfg-if" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", - "libm", -] +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] -name = "num_cpus" -version = "1.13.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" dependencies = [ - "hermit-abi", "libc", ] [[package]] -name = "numeric_literals" -version = "0.2.0" +name = "clang-sys" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "095aa67b0b9f2081746998f4f17106bdb51d56dc8c211afca5531b92b83bf98a" +checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" dependencies = [ - "quote", - "syn", + "glob", + "libc", + "libloading 0.7.0", ] [[package]] -name = "ppv-lite86" -version = "0.2.10" +name = "claxon" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "4bfbf56724aa9eca8afa4fcfadeb479e722935bb2a0900c2d37e0cc477af0688" [[package]] -name = "proc-macro2" -version = "1.0.28" +name = "cocoa" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" +checksum = "c54201c07dcf3a5ca33fececb8042aed767ee4bfd5a0235a8ceabcda956044b2" dependencies = [ - "unicode-xid", + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.1", + "core-graphics 0.22.2", + "foreign-types", + "libc", + "objc", ] [[package]] -name = "quote" -version = "1.0.9" +name = "cocoa" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" dependencies = [ - "proc-macro2", + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.1", + "core-graphics 0.22.2", + "foreign-types", + "libc", + "objc", ] [[package]] -name = "rand" -version = "0.8.4" +name = "cocoa-foundation" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" dependencies = [ + "bitflags", + "block", + "core-foundation 0.9.1", + "core-graphics-types", + "foreign-types", "libc", - "rand_chacha", - "rand_core", - "rand_hc", + "objc", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "color_quant" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] -name = "rand_core" -version = "0.6.3" +name = "combine" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "a2d47c1b11006b87e492b53b313bb699ce60e16613c4dddaa91f8f7c220ab2fa" dependencies = [ - "getrandom", + "bytes", + "memchr", ] [[package]] -name = "rand_distr" -version = "0.4.1" +name = "core-foundation" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "051b398806e42b9cd04ad9ec8f81e355d0a382c543ac6672c62f5a5b452ef142" +checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" dependencies = [ - "num-traits", - "rand", + "core-foundation-sys 0.6.2", + "libc", ] [[package]] -name = "rand_hc" -version = "0.3.1" +name = "core-foundation" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" dependencies = [ - "rand_core", + "core-foundation-sys 0.7.0", + "libc", ] [[package]] -name = "rayon" -version = "1.5.1" +name = "core-foundation" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" dependencies = [ - "autocfg", - "crossbeam-deque", - "either", - "rayon-core", + "core-foundation-sys 0.8.2", + "libc", ] [[package]] -name = "rayon-core" -version = "1.9.1" +name = "core-foundation-sys" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "lazy_static", - "num_cpus", -] +checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" [[package]] -name = "ryu" +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "core-foundation-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" + +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86" +dependencies = [ + "bitflags", + "core-foundation 0.9.1", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation 0.9.1", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11894b20ebfe1ff903cbdc52259693389eea03b94918a2def2c30c3bf227ad88" +dependencies = [ + "bitflags", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b7e3347be6a09b46aba228d6608386739fb70beff4f61e07422da87b0bb31fa" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98f45f0a21f617cd2c788889ef710b63f075c949259593ea09c826f1e47a2418" +dependencies = [ + "alsa", + "core-foundation-sys 0.8.2", + "coreaudio-rs", + "jni 0.19.0", + "js-sys", + "lazy_static", + "libc", + "mach 0.3.2", + "ndk 0.3.0", + "ndk-glue 0.3.0", + "nix 0.20.1", + "oboe", + "parking_lot", + "stdweb 0.1.3", + "thiserror", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +dependencies = [ + "cfg-if 1.0.0", + "lazy_static", +] + +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "deflate" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +dependencies = [ + "adler32", + "byteorder", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "directories" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.9", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dlib" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76" +dependencies = [ + "libloading 0.6.7", +] + +[[package]] +name = "dlib" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" +dependencies = [ + "libloading 0.7.0", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "draw_state" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cf9537e2d06891448799b96d5a8c8083e0e90522a7fdabe6ebf4f41d79d651" +dependencies = [ + "bitflags", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "version_check", +] + +[[package]] +name = "euclid" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da96828553a086d7b18dcebfc579bd9628b016f86590d7453c115e490fa74b80" +dependencies = [ + "num-traits", +] + +[[package]] +name = "float_next_after" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc612c5837986b7104a87a0df74a5460931f1c5274be12f8d0f40aa2f30d632" +dependencies = [ + "num-traits", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + +[[package]] +name = "getrandom" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gfx" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01de46f9508a5c259aef105f0bff760ceddca832ea9c87ce03d1923e22ee155b" +dependencies = [ + "draw_state", + "gfx_core", + "log", +] + +[[package]] +name = "gfx_core" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75fbddaef2e12b4995900539d7209d947b988a3d87ee8737484d049b526e5441" +dependencies = [ + "bitflags", + "draw_state", + "log", +] + +[[package]] +name = "gfx_device_gl" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c385fa380c18888633aa27d1e16cbae518469702a2f69dcb5f52d5378bebc" +dependencies = [ + "gfx_core", + "gfx_gl", + "log", +] + +[[package]] +name = "gfx_gl" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d38164670920cfb7491bc0cf6f49f0554bd1c44cdbedc6c78d2bf91691ff5e" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "ggez" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18df9699a5244b0287c497de988393d381e49cf48996f8fcd10b80c9086cee65" +dependencies = [ + "approx", + "bitflags", + "bytemuck", + "directories", + "gfx", + "gfx_core", + "gfx_device_gl", + "gilrs", + "glam", + "glutin", + "glyph_brush", + "image", + "log", + "lyon", + "mint", + "old_school_gfx_glutin_ext", + "rodio", + "serde", + "serde_derive", + "skeptic", + "smart-default", + "toml", + "winit", + "zip", +] + +[[package]] +name = "gif" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a668f699973d0f573d15749b7002a9ac9e1f9c6b220e7b165601334c173d8de" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gilrs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e986f911d937f4395dfc2a39618dcef452773d32dcdbe0828c623f76588f749" +dependencies = [ + "fnv", + "gilrs-core", + "log", + "uuid", + "vec_map", +] + +[[package]] +name = "gilrs-core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a5e5bb97bf9a0d9519a28cf38839cf1d6d9bb572b48e3c67202271fec2ed5e7" +dependencies = [ + "core-foundation 0.6.4", + "io-kit-sys", + "libc", + "libudev-sys", + "log", + "nix 0.20.1", + "rusty-xinput", + "stdweb 0.4.20", + "uuid", + "vec_map", + "winapi 0.3.9", +] + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glam" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" +dependencies = [ + "mint", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "glutin" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ae1cbb9176b9151c4ce03f012e3cd1c6c18c4be79edeaeb3d99f5d8085c5fa3" +dependencies = [ + "android_glue", + "cgl", + "cocoa 0.23.0", + "core-foundation 0.9.1", + "glutin_egl_sys", + "glutin_emscripten_sys", + "glutin_gles2_sys", + "glutin_glx_sys", + "glutin_wgl_sys", + "lazy_static", + "libloading 0.6.7", + "log", + "objc", + "osmesa-sys", + "parking_lot", + "wayland-client", + "wayland-egl", + "winapi 0.3.9", + "winit", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" +dependencies = [ + "gl_generator", + "winapi 0.3.9", +] + +[[package]] +name = "glutin_emscripten_sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" + +[[package]] +name = "glutin_gles2_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" +dependencies = [ + "gl_generator", + "objc", +] + +[[package]] +name = "glutin_glx_sys" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" +dependencies = [ + "gl_generator", + "x11-dl", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "glyph_brush" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e3f00b8574a76fb6c50890c48da03946ca50e4372a2778737922666a2238221" +dependencies = [ + "glyph_brush_draw_cache", + "glyph_brush_layout", + "log", + "ordered-float", + "rustc-hash", + "twox-hash", +] + +[[package]] +name = "glyph_brush_draw_cache" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac2c82074cafb68b9e459c50c655f7eedcb92d6ee7166813802934bc6fc29fa3" +dependencies = [ + "ab_glyph", + "crossbeam-channel", + "crossbeam-deque", + "linked-hash-map", + "rayon", + "rustc-hash", +] + +[[package]] +name = "glyph_brush_layout" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" +dependencies = [ + "ab_glyph", + "approx", + "xi-unicode", +] + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hound" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "image" +version = "0.23.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "gif", + "num-iter", + "num-rational 0.3.2", + "num-traits", + "png", + "tiff", +] + +[[package]] +name = "instant" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "io-kit-sys" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f21dcc74995dd4cd090b147e79789f8d65959cbfb5f0b118002db869ea3bd0a0" +dependencies = [ + "core-foundation-sys 0.6.2", + "mach 0.2.3", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "itertools" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" + +[[package]] +name = "jni" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24967112a1e4301ca5342ea339763613a37592b8a6ce6cf2e4494537c7a42faf" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5ca711fd837261e14ec9e674f092cbb931d3fa1482b017ae59328ddc6f3212b" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" + +[[package]] +name = "js-sys" +version = "0.3.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce791b7ca6638aae45be056e068fc756d871eb3b3b10b8efa62d1c9cec616752" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + +[[package]] +name = "libc" +version = "0.2.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765" + +[[package]] +name = "libloading" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libloading" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" + +[[package]] +name = "lock_api" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "lyon" +version = "0.17.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a146a460c58fb5361fc7faf8d7a68b274f11969ee1f6856875c162d679d0306" +dependencies = [ + "lyon_algorithms", + "lyon_tessellation", +] + +[[package]] +name = "lyon_algorithms" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6931fa85f0e649e8d781a31ffc9fa42aee5074b965a0bad7d05f84aaef2e8933" +dependencies = [ + "lyon_path", + "sid", +] + +[[package]] +name = "lyon_geom" +version = "0.17.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e79ed83352715656b6e73bd9c1b54736f22d0c6ad9b1809ad20d585b943f4a" +dependencies = [ + "arrayvec", + "euclid", + "num-traits", +] + +[[package]] +name = "lyon_path" +version = "0.17.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ef7433accd4515fc98f59bb3cdf565a9615f0c666f50bfcb96134bbd91ccc04" +dependencies = [ + "lyon_geom", +] + +[[package]] +name = "lyon_tessellation" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c76c657e6eadab8fc258b0570226d88f186d2a462105a62dc015471f56fe761" +dependencies = [ + "arrayvec", + "float_next_after", + "lyon_path", + "sid", +] + +[[package]] +name = "mach" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" +dependencies = [ + "libc", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" + +[[package]] +name = "memmap2" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimp3" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985438f75febf74c392071a975a29641b420dd84431135a6e6db721de4b74372" +dependencies = [ + "minimp3-sys", + "slice-deque", + "thiserror", +] + +[[package]] +name = "minimp3-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e21c73734c69dc95696c9ed8926a2b393171d98b3f5f5935686a26a487ab9b90" +dependencies = [ + "cc", +] + +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "mint" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519df8d6856dcd4b40519947737b408f81be051fc032590659cae5d77d664185" + +[[package]] +name = "mio" +version = "0.6.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +dependencies = [ + "cfg-if 0.1.10", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow", + "net2", + "slab", + "winapi 0.2.8", +] + +[[package]] +name = "mio-extras" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" +dependencies = [ + "lazycell", + "log", + "mio", + "slab", +] + +[[package]] +name = "miow" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + +[[package]] +name = "ndk" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" +dependencies = [ + "jni-sys", + "ndk-sys", + "num_enum 0.4.3", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8794322172319b972f528bf90c6b467be0079f1fa82780ffb431088e741a73ab" +dependencies = [ + "jni-sys", + "ndk-sys", + "num_enum 0.5.3", + "thiserror", +] + +[[package]] +name = "ndk-glue" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.2.1", + "ndk-macro", + "ndk-sys", +] + +[[package]] +name = "ndk-glue" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5caf0c24d51ac1c905c27d4eda4fa0635bbe0de596b8f79235e0b17a4d29385" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.3.0", + "ndk-macro", + "ndk-sys", +] + +[[package]] +name = "ndk-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" +dependencies = [ + "darling", + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" + +[[package]] +name = "neat-gru" +version = "1.0.0" +dependencies = [ + "async-trait", + "getrandom", + "ggez", + "itertools", + "num", + "numeric_literals", + "rand", + "rand_distr", + "rayon", + "serde", + "serde_json", +] + +[[package]] +name = "net2" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "nix" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" +dependencies = [ + "bitflags", + "cc", + "cfg-if 0.1.10", + "libc", +] + +[[package]] +name = "nix" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8e5e343312e7fbeb2a52139114e9e702991ef9c2aea6817ff2440b35647d56" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "memchr", + "version_check", +] + +[[package]] +name = "nom" +version = "6.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" +dependencies = [ + "memchr", + "version_check", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational 0.4.0", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" +dependencies = [ + "derivative", + "num_enum_derive 0.4.3", +] + +[[package]] +name = "num_enum" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2c8fd66061a707503d515639b8af10fd3807a5b5ee6959f7ff1bd303634bd5" +dependencies = [ + "derivative", + "num_enum_derive 0.5.3", +] + +[[package]] +name = "num_enum_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" +dependencies = [ + "proc-macro-crate 0.1.5", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "474fd1d096da3ad17084694eebed40ba09c4a36c5255cd772bd8b98859cc562e" +dependencies = [ + "proc-macro-crate 1.0.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "numeric_literals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "095aa67b0b9f2081746998f4f17106bdb51d56dc8c211afca5531b92b83bf98a" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "oboe" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa187b38ae20374617b7ad418034ed3dc90ac980181d211518bd03537ae8f8d" +dependencies = [ + "jni 0.18.0", + "ndk 0.3.0", + "ndk-glue 0.3.0", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88e64835aa3f579c08d182526dc34e3907343d5b97e87b71a40ba5bca7aca9e" +dependencies = [ + "cc", +] + +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "old_school_gfx_glutin_ext" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "450a2a0e6805771787b965af9a552581c9dfc588dc33761c1be690117cd792e1" +dependencies = [ + "gfx_core", + "gfx_device_gl", + "glutin", +] + +[[package]] +name = "once_cell" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" + +[[package]] +name = "ordered-float" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f02eb0f69271f26abe3202189275d7aa2258b903cb0281b5de710a2570ff3" +dependencies = [ + "num-traits", +] + +[[package]] +name = "osmesa-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" +dependencies = [ + "shared_library", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f923fb806c46266c02ab4a5b239735c144bdeda724a50ed058e5226f594cde3" +dependencies = [ + "ttf-parser 0.6.2", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60ac8dda2e5cc09bf6480e3b3feff9783db251710c922ae9369a429c51efdeb0" +dependencies = [ + "ttf-parser 0.12.3", +] + +[[package]] +name = "parking_lot" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi 0.3.9", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "png" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" +dependencies = [ + "bitflags", + "crc32fast", + "deflate", + "miniz_oxide 0.3.7", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[package]] +name = "proc-macro-crate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" +dependencies = [ + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "pulldown-cmark" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" +dependencies = [ + "bitflags", + "memchr", + "unicase", +] + +[[package]] +name = "quote" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_distr" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "051b398806e42b9cd04ad9ec8f81e355d0a382c543ac6672c62f5a5b452ef142" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "rand_hc" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +dependencies = [ + "rand_core", +] + +[[package]] +name = "raw-window-handle" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" +dependencies = [ + "libc", +] + +[[package]] +name = "rayon" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +dependencies = [ + "getrandom", + "redox_syscall", +] + +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "rodio" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d98f5e557b61525057e2bc142c8cd7f0e70d75dc32852309bec440e6e046bf9" +dependencies = [ + "claxon", + "cpal", + "hound", + "lewton", + "minimp3", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rusttype" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc7c727aded0be18c5b80c1640eae0ac8e396abf6fa8477d96cb37d18ee5ec59" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser 0.6.0", +] + +[[package]] +name = "rusty-xinput" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2aa654bc32eb9ca14cce1a084abc9dfe43949a4547c35269a094c39272db3bb" +dependencies = [ + "lazy_static", + "log", + "winapi 0.3.9", +] + +[[package]] +name = "ryu" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.2", + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + +[[package]] +name = "serde" +version = "1.0.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + +[[package]] +name = "shared_library" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" +dependencies = [ + "lazy_static", + "libc", +] + +[[package]] +name = "shlex" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" + +[[package]] +name = "sid" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd5ac56c121948b4879bba9e519852c211bcdd8f014efff766441deff0b91bdb" +dependencies = [ + "num-traits", +] + +[[package]] +name = "skeptic" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "188b810342d98f23f0bb875045299f34187b559370b041eb11520c905370a888" +dependencies = [ + "bytecount", + "cargo_metadata", + "error-chain", + "glob", + "pulldown-cmark", + "tempfile", + "walkdir", +] [[package]] -name = "scopeguard" +name = "slab" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" + +[[package]] +name = "slice-deque" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ef6ee280cdefba6d2d0b4b78a84a1c1a3f3a4cec98c2d4231c8bc225de0f25" +dependencies = [ + "libc", + "mach 0.3.2", + "winapi 0.3.9", +] + +[[package]] +name = "smallvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + +[[package]] +name = "smart-default" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80" +dependencies = [ + "andrew", + "bitflags", + "calloop", + "dlib 0.4.2", + "lazy_static", + "log", + "memmap2", + "nix 0.18.0", + "wayland-client", + "wayland-cursor", + "wayland-protocols", +] + +[[package]] +name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] -name = "serde" -version = "1.0.127" +name = "stdweb" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" +checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" + +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" dependencies = [ - "serde_derive", + "discard", + "rustc_version", + "serde", + "serde_json", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", ] [[package]] -name = "serde_derive" -version = "1.0.127" +name = "stdweb-derive" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" dependencies = [ "proc-macro2", "quote", + "serde", + "serde_derive", "syn", ] [[package]] -name = "serde_json" -version = "1.0.66" +name = "stdweb-internal-macros" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" dependencies = [ - "itoa", - "ryu", + "base-x", + "proc-macro2", + "quote", "serde", + "serde_derive", + "serde_json", + "sha1", + "syn", ] +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + [[package]] name = "syn" version = "1.0.74" @@ -429,12 +2407,148 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "rand", + "redox_syscall", + "remove_dir_all", + "winapi 0.3.9", +] + +[[package]] +name = "thiserror" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tiff" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" +dependencies = [ + "jpeg-decoder", + "miniz_oxide 0.4.4", + "weezl", +] + +[[package]] +name = "tinyvec" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] +name = "ttf-parser" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc" + +[[package]] +name = "ttf-parser" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6" + +[[package]] +name = "twox-hash" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f559b464de2e2bdabcac6a210d12e9b5a5973c251e102c44c585c71d51bd78e" +dependencies = [ + "cfg-if 1.0.0", + "rand", + "static_assertions", +] + +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-xid" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -447,7 +2561,7 @@ version = "0.2.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b608ecc8f4198fe8680e2ed18eccab5f0cd4caaf3d83516fa5fb2e927fda2586" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "wasm-bindgen-macro", ] @@ -494,3 +2608,237 @@ name = "wasm-bindgen-shared" version = "0.2.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e0c4a743a309662d45f4ede961d7afa4ba4131a59a639f29b0069c3798bbcc2" + +[[package]] +name = "wayland-client" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355" +dependencies = [ + "bitflags", + "downcast-rs", + "libc", + "nix 0.20.1", + "scoped-tls", + "wayland-commons", + "wayland-scanner", + "wayland-sys", +] + +[[package]] +name = "wayland-commons" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda" +dependencies = [ + "nix 0.20.1", + "once_cell", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-cursor" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a" +dependencies = [ + "nix 0.20.1", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-egl" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ba1ab1e18756b23982d36f08856d521d7df45015f404a2d7c4f0b2d2f66956" +dependencies = [ + "wayland-client", + "wayland-sys", +] + +[[package]] +name = "wayland-protocols" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f" +dependencies = [ + "bitflags", + "wayland-client", + "wayland-commons", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "wayland-sys" +version = "0.28.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8" +dependencies = [ + "dlib 0.5.0", + "lazy_static", + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c70a82d842c9979078c772d4a1344685045f1a5628f677c2b2eab4dd7d2696" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winit" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597" +dependencies = [ + "bitflags", + "cocoa 0.24.0", + "core-foundation 0.9.1", + "core-graphics 0.22.2", + "core-video-sys", + "dispatch", + "instant", + "lazy_static", + "libc", + "log", + "mio", + "mio-extras", + "ndk 0.2.1", + "ndk-glue 0.2.1", + "ndk-sys", + "objc", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "smithay-client-toolkit", + "wayland-client", + "winapi 0.3.9", + "x11-dl", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "x11-dl" +version = "2.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8" +dependencies = [ + "lazy_static", + "libc", + "maybe-uninit", + "pkg-config", +] + +[[package]] +name = "xcursor" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08" +dependencies = [ + "nom 6.1.2", +] + +[[package]] +name = "xdg" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" + +[[package]] +name = "xi-unicode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" + +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" + +[[package]] +name = "zip" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" +dependencies = [ + "byteorder", + "bzip2", + "crc32fast", + "thiserror", +] diff --git a/examples/snake-cli/defs.rs b/examples/snake-cli/defs.rs index f748579..c967d4d 100644 --- a/examples/snake-cli/defs.rs +++ b/examples/snake-cli/defs.rs @@ -1,4 +1,4 @@ pub const RESOLUTION: usize = 100; pub const OUTPUTS: usize = 4; -pub const SNAKE_COUNT: usize = 50; +pub const SNAKE_COUNT: usize = 200; pub const GUI: bool = true; diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index 5133f74..60f2862 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -38,9 +38,15 @@ impl Game { } } + pub fn run_game(&mut self) { + while !self.game_over() { + self.tick(); + } + } + /// Make the snakes make their decision pub fn make_decision(&mut self) { - let mut inputs: [f64; 5] = [0., 0., 0., 0., 0.]; + let mut inputs: [f64; 4] = [0., 0., 0., 0.]; let cloned_apple = self.apple.clone(); // Let each snake make a decision self.snakes.iter_mut().for_each(|s| { @@ -78,7 +84,7 @@ impl Game { fn remove_if_dead(&mut self) { for idx in 0..self.snakes.len() { if self.snakes[idx].is_colliding() { - self.scores[idx] = self.snakes[idx].size() as f64 + (self.tick as f64 * 0.001); + self.scores[idx] = self.snakes[idx].size() as f64 + (self.tick as f64 * 0.005); } } self.snakes.retain(|s| !s.is_colliding()); diff --git a/examples/snake-cli/main.rs b/examples/snake-cli/main.rs index 3a270b7..3beafe8 100644 --- a/examples/snake-cli/main.rs +++ b/examples/snake-cli/main.rs @@ -20,12 +20,12 @@ fn run_training() { let mut sim = TrainingSimulation::new(); let mut runner: Train = Train::new(&mut sim); runner - .inputs(5) + .inputs(4) .outputs(OUTPUTS) - .iterations(60) + .iterations(200) .delta_threshold(2.) .formula(0.8, 0.8, 0.3) - .max_layers(10) + .max_layers(5) .max_individuals(SNAKE_COUNT) .access_train_object(Box::new(|train| { let species_count = train.species_count(); diff --git a/examples/snake-cli/snake.rs b/examples/snake-cli/snake.rs index abc5c51..df7ed74 100644 --- a/examples/snake-cli/snake.rs +++ b/examples/snake-cli/snake.rs @@ -65,9 +65,13 @@ impl Snake { /// Changes the direction of the snake if it hasn't already been changed this tick pub fn change_direction(&mut self, dir: Direction) { // We don't want to change the direction multiple times per tick and also don't want to move into the snakes body - if !self.dir_changed && dir.opposite() != self.moving_direction { + if !self.dir_changed + && dir.opposite() != self.moving_direction + && self.moving_direction != dir + { self.moving_direction = dir; self.dir_changed = true; + //println!("Dir changed to {:?}", dir); } } fn is_eating(&self, apple: Coordinate) -> bool { diff --git a/examples/snake-cli/training_simulation.rs b/examples/snake-cli/training_simulation.rs index 0744f8b..94d3bde 100644 --- a/examples/snake-cli/training_simulation.rs +++ b/examples/snake-cli/training_simulation.rs @@ -3,6 +3,7 @@ use std::io::Write; use crate::defs::RESOLUTION; use crate::game::Game; +use itertools::Itertools; use neat_gru::neural_network::nn::NeuralNetwork; pub struct TrainingSimulation { @@ -23,19 +24,14 @@ impl TrainingSimulation { impl neat_gru::game::Game for TrainingSimulation { fn run_generation(&mut self) -> Vec { - let (ctx, events_loop) = ggez::ContextBuilder::new("Snake", "Nereuxofficial") - .window_setup(ggez::conf::WindowSetup::default().title("Snake")) - .window_mode( - ggez::conf::WindowMode::default() - .dimensions((RESOLUTION * 10) as f32, (RESOLUTION * 10) as f32), - ) - .build() - .unwrap(); self.generation += 1; let networks = self.networks.take().unwrap(); let mut game = Game::new(networks); - ggez::event::run(ctx, events_loop, game); + game.run_game(); game.get_scores() + .iter_mut() + .map(|score| *score + self.generation as f64) + .collect_vec() } fn reset_players(&mut self, nets: Vec>) { From 73a003953c2f9f275619a1120f7116b82d0bcbae Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Wed, 18 Aug 2021 16:59:02 +0200 Subject: [PATCH 03/44] Snakes can no longer rotate forever --- README.md | 6 ++++++ examples/snake-cli/game.rs | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ff4ff07..15c338e 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,12 @@ ## Examples [XOR](examples/example.rs) +:warning: BETA + + +[Snake](examples/snake-cli) + + Right now this is the only working example. You can run it via: ``` cargo run --example example diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index 60f2862..f5d08cd 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -16,6 +16,7 @@ pub struct Game { apple: Apple, scores: Vec, tick: usize, + ticks_since_eaten: usize, } impl Game { @@ -35,6 +36,7 @@ impl Game { apple: Apple::generate_apple(), scores, tick: 0, + ticks_since_eaten: 0, } } @@ -72,13 +74,16 @@ impl Game { self.tick += 1; if replace_apple { self.apple = Apple::generate_apple(); + self.ticks_since_eaten = 0; + } else { + self.ticks_since_eaten += 1; } // Let each snake make a decision self.make_decision(); } fn game_over(&self) -> bool { - self.snakes.is_empty() + self.snakes.is_empty() || self.ticks_since_eaten >= 100 } fn remove_if_dead(&mut self) { From 1e652d429d047e810cee193431f479e41d6875a5 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Wed, 18 Aug 2021 17:09:08 +0200 Subject: [PATCH 04/44] Removed unnecessary dependency --- Cargo.lock | 2800 ++------------------- Cargo.toml | 1 - examples/snake-cli/game.rs | 49 - examples/snake-cli/snake.rs | 21 - examples/snake-cli/training_simulation.rs | 1 - src/topology/mutation_probabilities.rs | 2 +- 6 files changed, 227 insertions(+), 2647 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 55750dd..4523d55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,2399 +3,421 @@ version = 3 [[package]] -name = "ab_glyph" -version = "0.2.11" +name = "async-trait" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af0ac006645f86f20f6c6fa4dcaef920bf803df819123626f9440e35835e7d80" +checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser 0.12.1", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "ab_glyph_rasterizer" -version = "0.1.4" +name = "autocfg" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] -name = "adler" -version = "1.0.2" +name = "bumpalo" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" [[package]] -name = "adler32" -version = "1.2.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "alsa" -version = "0.5.0" +name = "crossbeam-channel" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c4da790adcb2ce5e758c064b4f3ec17a30349f9961d3e5e6c9688b052a9e18" +checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ - "alsa-sys", - "bitflags", - "libc", - "nix 0.20.1", + "cfg-if", + "crossbeam-utils", ] [[package]] -name = "alsa-sys" -version = "0.3.1" +name = "crossbeam-deque" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" dependencies = [ - "libc", - "pkg-config", + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", ] [[package]] -name = "andrew" -version = "0.3.1" +name = "crossbeam-epoch" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" dependencies = [ - "bitflags", - "rusttype", - "walkdir", - "xdg", - "xml-rs", + "cfg-if", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", ] [[package]] -name = "android_glue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" - -[[package]] -name = "approx" -version = "0.5.0" +name = "crossbeam-utils" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "072df7202e63b127ab55acfe16ce97013d5b97bf160489336d3f1840fd78e99e" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" dependencies = [ - "num-traits", + "cfg-if", + "lazy_static", ] [[package]] -name = "arrayvec" -version = "0.5.2" +name = "either" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" [[package]] -name = "async-trait" -version = "0.1.51" +name = "getrandom" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e" +checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ - "proc-macro2", - "quote", - "syn", + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", ] [[package]] -name = "autocfg" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" - -[[package]] -name = "base-x" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" - -[[package]] -name = "bindgen" -version = "0.56.0" +name = "hermit-abi" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", + "libc", ] [[package]] -name = "bitflags" -version = "1.2.1" +name = "itertools" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" +dependencies = [ + "either", +] [[package]] -name = "block" -version = "0.1.6" +name = "itoa" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] -name = "bumpalo" -version = "3.7.0" +name = "js-sys" +version = "0.3.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" +checksum = "ce791b7ca6638aae45be056e068fc756d871eb3b3b10b8efa62d1c9cec616752" +dependencies = [ + "wasm-bindgen", +] [[package]] -name = "bytecount" -version = "0.6.2" +name = "lazy_static" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72feb31ffc86498dacdbd0fcebb56138e7177a8cc5cea4516031d15ae85a742e" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] -name = "bytemuck" -version = "1.7.2" +name = "libc" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b" +checksum = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765" [[package]] -name = "byteorder" -version = "1.4.3" +name = "libm" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] -name = "bytes" -version = "1.0.1" +name = "log" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if", +] [[package]] -name = "bzip2" -version = "0.4.3" +name = "memoffset" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0" +checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" dependencies = [ - "bzip2-sys", - "libc", + "autocfg", ] [[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +name = "neat-gru" +version = "1.0.0" dependencies = [ - "cc", - "libc", - "pkg-config", + "async-trait", + "getrandom", + "itertools", + "num", + "numeric_literals", + "rand", + "rand_distr", + "rayon", + "serde", + "serde_json", ] [[package]] -name = "calloop" -version = "0.6.5" +name = "num" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" dependencies = [ - "log", - "nix 0.18.0", + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", ] [[package]] -name = "cargo-platform" -version = "0.1.2" +name = "num-bigint" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" dependencies = [ - "serde", + "autocfg", + "num-integer", + "num-traits", ] [[package]] -name = "cargo_metadata" -version = "0.12.3" +name = "num-complex" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f" +checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" dependencies = [ - "cargo-platform", - "semver 0.11.0", - "semver-parser 0.10.2", - "serde", - "serde_json", + "num-traits", ] [[package]] -name = "cc" -version = "1.0.69" +name = "num-integer" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" dependencies = [ - "jobserver", + "autocfg", + "num-traits", ] [[package]] -name = "cesu8" -version = "1.1.0" +name = "num-iter" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] [[package]] -name = "cexpr" +name = "num-rational" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" dependencies = [ - "nom 5.1.2", + "autocfg", + "num-bigint", + "num-integer", + "num-traits", ] [[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -version = "1.0.0" +name = "num-traits" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", + "libm", +] [[package]] -name = "cgl" -version = "0.3.2" +name = "num_cpus" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" dependencies = [ + "hermit-abi", "libc", ] [[package]] -name = "clang-sys" -version = "1.2.0" +name = "numeric_literals" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "853eda514c284c2287f4bf20ae614f8781f40a81d32ecda6e91449304dfe077c" +checksum = "095aa67b0b9f2081746998f4f17106bdb51d56dc8c211afca5531b92b83bf98a" dependencies = [ - "glob", - "libc", - "libloading 0.7.0", + "quote", + "syn", ] [[package]] -name = "claxon" -version = "0.4.3" +name = "ppv-lite86" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bfbf56724aa9eca8afa4fcfadeb479e722935bb2a0900c2d37e0cc477af0688" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] -name = "cocoa" -version = "0.23.0" +name = "proc-macro2" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54201c07dcf3a5ca33fececb8042aed767ee4bfd5a0235a8ceabcda956044b2" +checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation 0.9.1", - "core-graphics 0.22.2", - "foreign-types", - "libc", - "objc", + "unicode-xid", ] [[package]] -name = "cocoa" -version = "0.24.0" +name = "quote" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation 0.9.1", - "core-graphics 0.22.2", - "foreign-types", - "libc", - "objc", + "proc-macro2", ] [[package]] -name = "cocoa-foundation" -version = "0.1.0" +name = "rand" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ - "bitflags", - "block", - "core-foundation 0.9.1", - "core-graphics-types", - "foreign-types", "libc", - "objc", + "rand_chacha", + "rand_core", + "rand_hc", ] [[package]] -name = "color_quant" -version = "1.1.0" +name = "rand_chacha" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] [[package]] -name = "combine" -version = "4.6.0" +name = "rand_core" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2d47c1b11006b87e492b53b313bb699ce60e16613c4dddaa91f8f7c220ab2fa" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "bytes", - "memchr", + "getrandom", ] [[package]] -name = "core-foundation" -version = "0.6.4" +name = "rand_distr" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" +checksum = "051b398806e42b9cd04ad9ec8f81e355d0a382c543ac6672c62f5a5b452ef142" dependencies = [ - "core-foundation-sys 0.6.2", - "libc", + "num-traits", + "rand", ] [[package]] -name = "core-foundation" -version = "0.7.0" +name = "rand_hc" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" dependencies = [ - "core-foundation-sys 0.7.0", - "libc", + "rand_core", ] [[package]] -name = "core-foundation" -version = "0.9.1" +name = "rayon" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" dependencies = [ - "core-foundation-sys 0.8.2", - "libc", + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", ] [[package]] -name = "core-foundation-sys" -version = "0.6.2" +name = "rayon-core" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" +checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] [[package]] -name = "core-foundation-sys" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" - -[[package]] -name = "core-foundation-sys" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" - -[[package]] -name = "core-graphics" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" -dependencies = [ - "bitflags", - "core-foundation 0.7.0", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.22.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269f35f69b542b80e736a20a89a05215c0ce80c2c03c514abb2e318b78379d86" -dependencies = [ - "bitflags", - "core-foundation 0.9.1", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation 0.9.1", - "foreign-types", - "libc", -] - -[[package]] -name = "core-video-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" -dependencies = [ - "cfg-if 0.1.10", - "core-foundation-sys 0.7.0", - "core-graphics 0.19.2", - "libc", - "objc", -] - -[[package]] -name = "coreaudio-rs" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11894b20ebfe1ff903cbdc52259693389eea03b94918a2def2c30c3bf227ad88" -dependencies = [ - "bitflags", - "coreaudio-sys", -] - -[[package]] -name = "coreaudio-sys" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b7e3347be6a09b46aba228d6608386739fb70beff4f61e07422da87b0bb31fa" -dependencies = [ - "bindgen", -] - -[[package]] -name = "cpal" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98f45f0a21f617cd2c788889ef710b63f075c949259593ea09c826f1e47a2418" -dependencies = [ - "alsa", - "core-foundation-sys 0.8.2", - "coreaudio-rs", - "jni 0.19.0", - "js-sys", - "lazy_static", - "libc", - "mach 0.3.2", - "ndk 0.3.0", - "ndk-glue 0.3.0", - "nix 0.20.1", - "oboe", - "parking_lot", - "stdweb 0.1.3", - "thiserror", - "web-sys", - "winapi 0.3.9", -] - -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", - "lazy_static", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" -dependencies = [ - "cfg-if 1.0.0", - "lazy_static", -] - -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "deflate" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" -dependencies = [ - "adler32", - "byteorder", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "directories" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e69600ff1703123957937708eb27f7a564e48885c537782722ed0ba3189ce1d7" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780" -dependencies = [ - "libc", - "redox_users", - "winapi 0.3.9", -] - -[[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dlib" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76" -dependencies = [ - "libloading 0.6.7", -] - -[[package]] -name = "dlib" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" -dependencies = [ - "libloading 0.7.0", -] - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "draw_state" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33cf9537e2d06891448799b96d5a8c8083e0e90522a7fdabe6ebf4f41d79d651" -dependencies = [ - "bitflags", -] - -[[package]] -name = "either" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" - -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check", -] - -[[package]] -name = "euclid" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da96828553a086d7b18dcebfc579bd9628b016f86590d7453c115e490fa74b80" -dependencies = [ - "num-traits", -] - -[[package]] -name = "float_next_after" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc612c5837986b7104a87a0df74a5460931f1c5274be12f8d0f40aa2f30d632" -dependencies = [ - "num-traits", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - -[[package]] -name = "getrandom" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "gfx" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01de46f9508a5c259aef105f0bff760ceddca832ea9c87ce03d1923e22ee155b" -dependencies = [ - "draw_state", - "gfx_core", - "log", -] - -[[package]] -name = "gfx_core" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75fbddaef2e12b4995900539d7209d947b988a3d87ee8737484d049b526e5441" -dependencies = [ - "bitflags", - "draw_state", - "log", -] - -[[package]] -name = "gfx_device_gl" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c385fa380c18888633aa27d1e16cbae518469702a2f69dcb5f52d5378bebc" -dependencies = [ - "gfx_core", - "gfx_gl", - "log", -] - -[[package]] -name = "gfx_gl" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d38164670920cfb7491bc0cf6f49f0554bd1c44cdbedc6c78d2bf91691ff5e" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "ggez" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18df9699a5244b0287c497de988393d381e49cf48996f8fcd10b80c9086cee65" -dependencies = [ - "approx", - "bitflags", - "bytemuck", - "directories", - "gfx", - "gfx_core", - "gfx_device_gl", - "gilrs", - "glam", - "glutin", - "glyph_brush", - "image", - "log", - "lyon", - "mint", - "old_school_gfx_glutin_ext", - "rodio", - "serde", - "serde_derive", - "skeptic", - "smart-default", - "toml", - "winit", - "zip", -] - -[[package]] -name = "gif" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a668f699973d0f573d15749b7002a9ac9e1f9c6b220e7b165601334c173d8de" -dependencies = [ - "color_quant", - "weezl", -] - -[[package]] -name = "gilrs" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e986f911d937f4395dfc2a39618dcef452773d32dcdbe0828c623f76588f749" -dependencies = [ - "fnv", - "gilrs-core", - "log", - "uuid", - "vec_map", -] - -[[package]] -name = "gilrs-core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5e5bb97bf9a0d9519a28cf38839cf1d6d9bb572b48e3c67202271fec2ed5e7" -dependencies = [ - "core-foundation 0.6.4", - "io-kit-sys", - "libc", - "libudev-sys", - "log", - "nix 0.20.1", - "rusty-xinput", - "stdweb 0.4.20", - "uuid", - "vec_map", - "winapi 0.3.9", -] - -[[package]] -name = "gl_generator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" -dependencies = [ - "khronos_api", - "log", - "xml-rs", -] - -[[package]] -name = "glam" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" -dependencies = [ - "mint", -] - -[[package]] -name = "glob" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" - -[[package]] -name = "glutin" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae1cbb9176b9151c4ce03f012e3cd1c6c18c4be79edeaeb3d99f5d8085c5fa3" -dependencies = [ - "android_glue", - "cgl", - "cocoa 0.23.0", - "core-foundation 0.9.1", - "glutin_egl_sys", - "glutin_emscripten_sys", - "glutin_gles2_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "lazy_static", - "libloading 0.6.7", - "log", - "objc", - "osmesa-sys", - "parking_lot", - "wayland-client", - "wayland-egl", - "winapi 0.3.9", - "winit", -] - -[[package]] -name = "glutin_egl_sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2abb6aa55523480c4adc5a56bbaa249992e2dddb2fc63dc96e04a3355364c211" -dependencies = [ - "gl_generator", - "winapi 0.3.9", -] - -[[package]] -name = "glutin_emscripten_sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" - -[[package]] -name = "glutin_gles2_sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094e708b730a7c8a1954f4f8a31880af00eb8a1c5b5bf85d28a0a3c6d69103" -dependencies = [ - "gl_generator", - "objc", -] - -[[package]] -name = "glutin_glx_sys" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e393c8fc02b807459410429150e9c4faffdb312d59b8c038566173c81991351" -dependencies = [ - "gl_generator", - "x11-dl", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da5951a1569dbab865c6f2a863efafff193a93caf05538d193e9e3816d21696" -dependencies = [ - "gl_generator", -] - -[[package]] -name = "glyph_brush" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e3f00b8574a76fb6c50890c48da03946ca50e4372a2778737922666a2238221" -dependencies = [ - "glyph_brush_draw_cache", - "glyph_brush_layout", - "log", - "ordered-float", - "rustc-hash", - "twox-hash", -] - -[[package]] -name = "glyph_brush_draw_cache" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac2c82074cafb68b9e459c50c655f7eedcb92d6ee7166813802934bc6fc29fa3" -dependencies = [ - "ab_glyph", - "crossbeam-channel", - "crossbeam-deque", - "linked-hash-map", - "rayon", - "rustc-hash", -] - -[[package]] -name = "glyph_brush_layout" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" -dependencies = [ - "ab_glyph", - "approx", - "xi-unicode", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hound" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549" - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "image" -version = "0.23.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "gif", - "num-iter", - "num-rational 0.3.2", - "num-traits", - "png", - "tiff", -] - -[[package]] -name = "instant" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "io-kit-sys" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f21dcc74995dd4cd090b147e79789f8d65959cbfb5f0b118002db869ea3bd0a0" -dependencies = [ - "core-foundation-sys 0.6.2", - "mach 0.2.3", -] - -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - -[[package]] -name = "itertools" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" - -[[package]] -name = "jni" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24967112a1e4301ca5342ea339763613a37592b8a6ce6cf2e4494537c7a42faf" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror", - "walkdir", -] - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "jobserver" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5ca711fd837261e14ec9e674f092cbb931d3fa1482b017ae59328ddc6f3212b" -dependencies = [ - "libc", -] - -[[package]] -name = "jpeg-decoder" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" - -[[package]] -name = "js-sys" -version = "0.3.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce791b7ca6638aae45be056e068fc756d871eb3b3b10b8efa62d1c9cec616752" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "khronos_api" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - -[[package]] -name = "lewton" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" -dependencies = [ - "byteorder", - "ogg", - "tinyvec", -] - -[[package]] -name = "libc" -version = "0.2.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f823d141fe0a24df1e23b4af4e3c7ba9e5966ec514ea068c93024aa7deb765" - -[[package]] -name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "libloading" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - -[[package]] -name = "libm" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" - -[[package]] -name = "libudev-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" -dependencies = [ - "libc", - "pkg-config", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" - -[[package]] -name = "lock_api" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0382880606dff6d15c9476c416d18690b72742aa7b605bb6dd6ec9030fbf07eb" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "lyon" -version = "0.17.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a146a460c58fb5361fc7faf8d7a68b274f11969ee1f6856875c162d679d0306" -dependencies = [ - "lyon_algorithms", - "lyon_tessellation", -] - -[[package]] -name = "lyon_algorithms" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6931fa85f0e649e8d781a31ffc9fa42aee5074b965a0bad7d05f84aaef2e8933" -dependencies = [ - "lyon_path", - "sid", -] - -[[package]] -name = "lyon_geom" -version = "0.17.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e79ed83352715656b6e73bd9c1b54736f22d0c6ad9b1809ad20d585b943f4a" -dependencies = [ - "arrayvec", - "euclid", - "num-traits", -] - -[[package]] -name = "lyon_path" -version = "0.17.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ef7433accd4515fc98f59bb3cdf565a9615f0c666f50bfcb96134bbd91ccc04" -dependencies = [ - "lyon_geom", -] - -[[package]] -name = "lyon_tessellation" -version = "0.17.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c76c657e6eadab8fc258b0570226d88f186d2a462105a62dc015471f56fe761" -dependencies = [ - "arrayvec", - "float_next_after", - "lyon_path", - "sid", -] - -[[package]] -name = "mach" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" -dependencies = [ - "libc", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "malloc_buf" -version = "0.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" -dependencies = [ - "libc", -] - -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - -[[package]] -name = "memchr" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" - -[[package]] -name = "memmap2" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" -dependencies = [ - "autocfg", -] - -[[package]] -name = "minimp3" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985438f75febf74c392071a975a29641b420dd84431135a6e6db721de4b74372" -dependencies = [ - "minimp3-sys", - "slice-deque", - "thiserror", -] - -[[package]] -name = "minimp3-sys" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e21c73734c69dc95696c9ed8926a2b393171d98b3f5f5935686a26a487ab9b90" -dependencies = [ - "cc", -] - -[[package]] -name = "miniz_oxide" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" -dependencies = [ - "adler32", -] - -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - -[[package]] -name = "mint" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "519df8d6856dcd4b40519947737b408f81be051fc032590659cae5d77d664185" - -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow", - "net2", - "slab", - "winapi 0.2.8", -] - -[[package]] -name = "mio-extras" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -dependencies = [ - "lazycell", - "log", - "mio", - "slab", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - -[[package]] -name = "ndk" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" -dependencies = [ - "jni-sys", - "ndk-sys", - "num_enum 0.4.3", - "thiserror", -] - -[[package]] -name = "ndk" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8794322172319b972f528bf90c6b467be0079f1fa82780ffb431088e741a73ab" -dependencies = [ - "jni-sys", - "ndk-sys", - "num_enum 0.5.3", - "thiserror", -] - -[[package]] -name = "ndk-glue" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk 0.2.1", - "ndk-macro", - "ndk-sys", -] - -[[package]] -name = "ndk-glue" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5caf0c24d51ac1c905c27d4eda4fa0635bbe0de596b8f79235e0b17a4d29385" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk 0.3.0", - "ndk-macro", - "ndk-sys", -] - -[[package]] -name = "ndk-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" -dependencies = [ - "darling", - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ndk-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" - -[[package]] -name = "neat-gru" -version = "1.0.0" -dependencies = [ - "async-trait", - "getrandom", - "ggez", - "itertools", - "num", - "numeric_literals", - "rand", - "rand_distr", - "rayon", - "serde", - "serde_json", -] - -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "nix" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" -dependencies = [ - "bitflags", - "cc", - "cfg-if 0.1.10", - "libc", -] - -[[package]] -name = "nix" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8e5e343312e7fbeb2a52139114e9e702991ef9c2aea6817ff2440b35647d56" -dependencies = [ - "bitflags", - "cc", - "cfg-if 1.0.0", - "libc", - "memoffset", -] - -[[package]] -name = "nom" -version = "5.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" -dependencies = [ - "memchr", - "version_check", -] - -[[package]] -name = "nom" -version = "6.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" -dependencies = [ - "memchr", - "version_check", -] - -[[package]] -name = "num" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" -dependencies = [ - "num-bigint", - "num-complex", - "num-integer", - "num-iter", - "num-rational 0.4.0", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-complex" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" -dependencies = [ - "num-traits", -] - -[[package]] -name = "num-derive" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-iter" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" -dependencies = [ - "autocfg", - "num-bigint", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" -dependencies = [ - "autocfg", - "libm", -] - -[[package]] -name = "num_cpus" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" -dependencies = [ - "derivative", - "num_enum_derive 0.4.3", -] - -[[package]] -name = "num_enum" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2c8fd66061a707503d515639b8af10fd3807a5b5ee6959f7ff1bd303634bd5" -dependencies = [ - "derivative", - "num_enum_derive 0.5.3", -] - -[[package]] -name = "num_enum_derive" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" -dependencies = [ - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "474fd1d096da3ad17084694eebed40ba09c4a36c5255cd772bd8b98859cc562e" -dependencies = [ - "proc-macro-crate 1.0.0", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "numeric_literals" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "095aa67b0b9f2081746998f4f17106bdb51d56dc8c211afca5531b92b83bf98a" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "objc" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" -dependencies = [ - "malloc_buf", -] - -[[package]] -name = "oboe" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa187b38ae20374617b7ad418034ed3dc90ac980181d211518bd03537ae8f8d" -dependencies = [ - "jni 0.18.0", - "ndk 0.3.0", - "ndk-glue 0.3.0", - "num-derive", - "num-traits", - "oboe-sys", -] - -[[package]] -name = "oboe-sys" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88e64835aa3f579c08d182526dc34e3907343d5b97e87b71a40ba5bca7aca9e" -dependencies = [ - "cc", -] - -[[package]] -name = "ogg" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" -dependencies = [ - "byteorder", -] - -[[package]] -name = "old_school_gfx_glutin_ext" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "450a2a0e6805771787b965af9a552581c9dfc588dc33761c1be690117cd792e1" -dependencies = [ - "gfx_core", - "gfx_device_gl", - "glutin", -] - -[[package]] -name = "once_cell" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" - -[[package]] -name = "ordered-float" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039f02eb0f69271f26abe3202189275d7aa2258b903cb0281b5de710a2570ff3" -dependencies = [ - "num-traits", -] - -[[package]] -name = "osmesa-sys" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88cfece6e95d2e717e0872a7f53a8684712ad13822a7979bc760b9c77ec0013b" -dependencies = [ - "shared_library", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f923fb806c46266c02ab4a5b239735c144bdeda724a50ed058e5226f594cde3" -dependencies = [ - "ttf-parser 0.6.2", -] - -[[package]] -name = "owned_ttf_parser" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60ac8dda2e5cc09bf6480e3b3feff9783db251710c922ae9369a429c51efdeb0" -dependencies = [ - "ttf-parser 0.12.3", -] - -[[package]] -name = "parking_lot" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi 0.3.9", -] - -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pest" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" -dependencies = [ - "ucd-trie", -] - -[[package]] -name = "pkg-config" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" - -[[package]] -name = "png" -version = "0.16.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" -dependencies = [ - "bitflags", - "crc32fast", - "deflate", - "miniz_oxide 0.3.7", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro-crate" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" -dependencies = [ - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro2" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "pulldown-cmark" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" -dependencies = [ - "bitflags", - "memchr", - "unicase", -] - -[[package]] -name = "quote" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", - "rand_hc", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rand_distr" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "051b398806e42b9cd04ad9ec8f81e355d0a382c543ac6672c62f5a5b452ef142" -dependencies = [ - "num-traits", - "rand", -] - -[[package]] -name = "rand_hc" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" -dependencies = [ - "rand_core", -] - -[[package]] -name = "raw-window-handle" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" -dependencies = [ - "libc", -] - -[[package]] -name = "rayon" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" -dependencies = [ - "autocfg", - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "lazy_static", - "num_cpus", -] - -[[package]] -name = "redox_syscall" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" -dependencies = [ - "getrandom", - "redox_syscall", -] - -[[package]] -name = "regex" -version = "1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "rodio" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d98f5e557b61525057e2bc142c8cd7f0e70d75dc32852309bec440e6e046bf9" -dependencies = [ - "claxon", - "cpal", - "hound", - "lewton", - "minimp3", -] - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rusttype" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc7c727aded0be18c5b80c1640eae0ac8e396abf6fa8477d96cb37d18ee5ec59" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser 0.6.0", -] - -[[package]] -name = "rusty-xinput" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2aa654bc32eb9ca14cce1a084abc9dfe43949a4547c35269a094c39272db3bb" -dependencies = [ - "lazy_static", - "log", - "winapi 0.3.9", -] - -[[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser 0.7.0", -] - -[[package]] -name = "semver" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" -dependencies = [ - "semver-parser 0.10.2", - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "semver-parser" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" -dependencies = [ - "pest", -] - -[[package]] -name = "serde" -version = "1.0.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.127" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sha1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" - -[[package]] -name = "shared_library" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11" -dependencies = [ - "lazy_static", - "libc", -] - -[[package]] -name = "shlex" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" - -[[package]] -name = "sid" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd5ac56c121948b4879bba9e519852c211bcdd8f014efff766441deff0b91bdb" -dependencies = [ - "num-traits", -] - -[[package]] -name = "skeptic" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "188b810342d98f23f0bb875045299f34187b559370b041eb11520c905370a888" -dependencies = [ - "bytecount", - "cargo_metadata", - "error-chain", - "glob", - "pulldown-cmark", - "tempfile", - "walkdir", -] - -[[package]] -name = "slab" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" - -[[package]] -name = "slice-deque" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31ef6ee280cdefba6d2d0b4b78a84a1c1a3f3a4cec98c2d4231c8bc225de0f25" -dependencies = [ - "libc", - "mach 0.3.2", - "winapi 0.3.9", -] - -[[package]] -name = "smallvec" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" - -[[package]] -name = "smart-default" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "smithay-client-toolkit" -version = "0.12.3" +name = "ryu" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80" -dependencies = [ - "andrew", - "bitflags", - "calloop", - "dlib 0.4.2", - "lazy_static", - "log", - "memmap2", - "nix 0.18.0", - "wayland-client", - "wayland-cursor", - "wayland-protocols", -] +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" [[package]] -name = "static_assertions" +name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "stdweb" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] -name = "stdweb" -version = "0.4.20" +name = "serde" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" dependencies = [ - "discard", - "rustc_version", - "serde", - "serde_json", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", + "serde_derive", ] [[package]] -name = "stdweb-derive" -version = "0.5.3" +name = "serde_derive" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" dependencies = [ "proc-macro2", "quote", - "serde", - "serde_derive", "syn", ] [[package]] -name = "stdweb-internal-macros" -version = "0.2.9" +name = "serde_json" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" dependencies = [ - "base-x", - "proc-macro2", - "quote", + "itoa", + "ryu", "serde", - "serde_derive", - "serde_json", - "sha1", - "syn", ] -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - [[package]] name = "syn" version = "1.0.74" @@ -2407,148 +429,12 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "tempfile" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "rand", - "redox_syscall", - "remove_dir_all", - "winapi 0.3.9", -] - -[[package]] -name = "thiserror" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tiff" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" -dependencies = [ - "jpeg-decoder", - "miniz_oxide 0.4.4", - "weezl", -] - -[[package]] -name = "tinyvec" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "toml" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" -dependencies = [ - "serde", -] - -[[package]] -name = "ttf-parser" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5d7cd7ab3e47dda6e56542f4bbf3824c15234958c6e1bd6aaa347e93499fdc" - -[[package]] -name = "ttf-parser" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6" - -[[package]] -name = "twox-hash" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f559b464de2e2bdabcac6a210d12e9b5a5973c251e102c44c585c71d51bd78e" -dependencies = [ - "cfg-if 1.0.0", - "rand", - "static_assertions", -] - -[[package]] -name = "ucd-trie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-xid" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" -[[package]] -name = "uuid" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - -[[package]] -name = "version_check" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi 0.3.9", - "winapi-util", -] - [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -2561,7 +447,7 @@ version = "0.2.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b608ecc8f4198fe8680e2ed18eccab5f0cd4caaf3d83516fa5fb2e927fda2586" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -2608,237 +494,3 @@ name = "wasm-bindgen-shared" version = "0.2.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e0c4a743a309662d45f4ede961d7afa4ba4131a59a639f29b0069c3798bbcc2" - -[[package]] -name = "wayland-client" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355" -dependencies = [ - "bitflags", - "downcast-rs", - "libc", - "nix 0.20.1", - "scoped-tls", - "wayland-commons", - "wayland-scanner", - "wayland-sys", -] - -[[package]] -name = "wayland-commons" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda" -dependencies = [ - "nix 0.20.1", - "once_cell", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-cursor" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a" -dependencies = [ - "nix 0.20.1", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-egl" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ba1ab1e18756b23982d36f08856d521d7df45015f404a2d7c4f0b2d2f66956" -dependencies = [ - "wayland-client", - "wayland-sys", -] - -[[package]] -name = "wayland-protocols" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f" -dependencies = [ - "bitflags", - "wayland-client", - "wayland-commons", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1" -dependencies = [ - "proc-macro2", - "quote", - "xml-rs", -] - -[[package]] -name = "wayland-sys" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8" -dependencies = [ - "dlib 0.5.0", - "lazy_static", - "pkg-config", -] - -[[package]] -name = "web-sys" -version = "0.3.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c70a82d842c9979078c772d4a1344685045f1a5628f677c2b2eab4dd7d2696" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "weezl" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e" - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "winit" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597" -dependencies = [ - "bitflags", - "cocoa 0.24.0", - "core-foundation 0.9.1", - "core-graphics 0.22.2", - "core-video-sys", - "dispatch", - "instant", - "lazy_static", - "libc", - "log", - "mio", - "mio-extras", - "ndk 0.2.1", - "ndk-glue 0.2.1", - "ndk-sys", - "objc", - "parking_lot", - "percent-encoding", - "raw-window-handle", - "smithay-client-toolkit", - "wayland-client", - "winapi 0.3.9", - "x11-dl", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "x11-dl" -version = "2.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8" -dependencies = [ - "lazy_static", - "libc", - "maybe-uninit", - "pkg-config", -] - -[[package]] -name = "xcursor" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a9a231574ae78801646617cefd13bfe94be907c0e4fa979cfd8b770aa3c5d08" -dependencies = [ - "nom 6.1.2", -] - -[[package]] -name = "xdg" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" - -[[package]] -name = "xi-unicode" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" - -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" - -[[package]] -name = "zip" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815" -dependencies = [ - "byteorder", - "bzip2", - "crc32fast", - "thiserror", -] diff --git a/Cargo.toml b/Cargo.toml index 0e1828e..d7b0c10 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,6 @@ numeric_literals = "0.2.0" rayon = "1.5.0" itertools = "0.10.0" async-trait = "0.1.50" -ggez = "0.6.0" [target.'cfg(target_arch = "wasm32")'.dependencies] diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index f5d08cd..b6baf0f 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -5,10 +5,6 @@ use crate::{ snake::Snake, utils::{distance_to_apple_x, distance_to_apple_y, distance_to_wall_x, distance_to_wall_y}, }; -use ggez::event::EventHandler; -use ggez::graphics::Color; -use ggez::{graphics, graphics::DrawMode, GameResult}; -use ggez::{timer, Context}; #[derive(Debug)] pub struct Game { @@ -94,49 +90,4 @@ impl Game { } self.snakes.retain(|s| !s.is_colliding()); } - /// Draws the apple - fn draw_apple(&self, ctx: &mut Context) -> GameResult { - let apple_cords = self.apple.get_coordinate(); - let apple = graphics::Mesh::new_circle( - ctx, - DrawMode::Fill(Default::default()), - ggez::mint::Point2 { - x: (apple_cords.x * 10) as f32, - y: (apple_cords.y * 10) as f32, - }, - 5.0, - 0.1, - Color::RED, - )?; - graphics::draw(ctx, &apple, graphics::DrawParam::default())?; - Ok(()) - } - - fn render(&self, ctx: &mut Context) -> GameResult { - self.snakes - .iter() - .for_each(|snake| snake.render(ctx).unwrap()); - self.draw_apple(ctx)?; - Ok(()) - } -} - -const TARGET_FPS: u32 = 10; -impl EventHandler for Game { - fn update(&mut self, ctx: &mut Context) -> GameResult<()> { - while timer::check_update_time(ctx, TARGET_FPS) { - if !self.game_over() { - self.tick(); - } else { - println!("Game Ended"); - } - } - Ok(()) - } - - fn draw(&mut self, ctx: &mut Context) -> GameResult<()> { - graphics::clear(ctx, Color::BLACK); - self.render(ctx)?; - graphics::present(ctx) - } } diff --git a/examples/snake-cli/snake.rs b/examples/snake-cli/snake.rs index df7ed74..734590f 100644 --- a/examples/snake-cli/snake.rs +++ b/examples/snake-cli/snake.rs @@ -3,8 +3,6 @@ use std::collections::LinkedList; use crate::coordinate::Coordinate; use crate::defs::RESOLUTION; use crate::direction::Direction; -use ggez::{graphics, GameResult}; -use ggez::{graphics::*, Context}; use neat_gru::neural_network::nn::NeuralNetwork; #[derive(Clone, Copy, Debug, PartialEq)] @@ -38,25 +36,6 @@ impl Snake { net: Some(net), } } - pub fn render(&self, ctx: &mut Context) -> GameResult { - self.blocks.iter().for_each(|block| { - let mesh = ggez::graphics::Mesh::new_rounded_rectangle( - ctx, - DrawMode::Fill(Default::default()), - graphics::Rect::new_i32( - (block.cord.x * 10) as i32, - (block.cord.y * 10) as i32, - 10, - 10, - ), - 3., - Color::GREEN, - ) - .unwrap(); - graphics::draw(ctx, &mesh, graphics::DrawParam::default()).unwrap(); - }); - Ok(()) - } /// Returns the size of the snake pub fn size(&self) -> usize { diff --git a/examples/snake-cli/training_simulation.rs b/examples/snake-cli/training_simulation.rs index 94d3bde..8aae445 100644 --- a/examples/snake-cli/training_simulation.rs +++ b/examples/snake-cli/training_simulation.rs @@ -1,7 +1,6 @@ use std::fs::File; use std::io::Write; -use crate::defs::RESOLUTION; use crate::game::Game; use itertools::Itertools; use neat_gru::neural_network::nn::NeuralNetwork; diff --git a/src/topology/mutation_probabilities.rs b/src/topology/mutation_probabilities.rs index 1fc1b56..00cd8b0 100644 --- a/src/topology/mutation_probabilities.rs +++ b/src/topology/mutation_probabilities.rs @@ -37,7 +37,7 @@ impl MutationProbabilities { ) -> Result { let range = 0.0..1.0; if !range.contains(&guaranteed_new_neuron) || !range.contains(&change_weights) { - return Err(ProbabilitiesError {}); + Err(ProbabilitiesError {}) } else { Ok(MutationProbabilities { change_weights, From 0d4e38ef3f3d3f50c22cf3dd43e500e7b4f52c80 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Thu, 19 Aug 2021 21:42:58 +0200 Subject: [PATCH 05/44] Simplified Snake example --- .gitignore | 2 +- examples/snake-cli/defs.rs | 2 +- examples/snake-cli/game.rs | 2 +- examples/snake-cli/main.rs | 7 +++---- examples/snake-cli/training_simulation.rs | 3 --- 5 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 7f8538b..99f1256 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ pkg/ .vscode snakes.json -XOR.json \ No newline at end of file +XOR \ No newline at end of file diff --git a/examples/snake-cli/defs.rs b/examples/snake-cli/defs.rs index c967d4d..4add713 100644 --- a/examples/snake-cli/defs.rs +++ b/examples/snake-cli/defs.rs @@ -1,4 +1,4 @@ pub const RESOLUTION: usize = 100; pub const OUTPUTS: usize = 4; -pub const SNAKE_COUNT: usize = 200; +pub const SNAKE_COUNT: usize = 1000; pub const GUI: bool = true; diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index b6baf0f..9eefbe8 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -85,7 +85,7 @@ impl Game { fn remove_if_dead(&mut self) { for idx in 0..self.snakes.len() { if self.snakes[idx].is_colliding() { - self.scores[idx] = self.snakes[idx].size() as f64 + (self.tick as f64 * 0.005); + self.scores[idx] = self.snakes[idx].size() as f64 + (self.tick as f64 * 0.001); } } self.snakes.retain(|s| !s.is_colliding()); diff --git a/examples/snake-cli/main.rs b/examples/snake-cli/main.rs index 3beafe8..a11bc26 100644 --- a/examples/snake-cli/main.rs +++ b/examples/snake-cli/main.rs @@ -22,10 +22,9 @@ fn run_training() { runner .inputs(4) .outputs(OUTPUTS) - .iterations(200) - .delta_threshold(2.) - .formula(0.8, 0.8, 0.3) - .max_layers(5) + .iterations(600) + .max_layers(15) + .delta_threshold(0.5) .max_individuals(SNAKE_COUNT) .access_train_object(Box::new(|train| { let species_count = train.species_count(); diff --git a/examples/snake-cli/training_simulation.rs b/examples/snake-cli/training_simulation.rs index 8aae445..b9ab3d0 100644 --- a/examples/snake-cli/training_simulation.rs +++ b/examples/snake-cli/training_simulation.rs @@ -28,9 +28,6 @@ impl neat_gru::game::Game for TrainingSimulation { let mut game = Game::new(networks); game.run_game(); game.get_scores() - .iter_mut() - .map(|score| *score + self.generation as f64) - .collect_vec() } fn reset_players(&mut self, nets: Vec>) { From 833252289ac9b6596a8a1fcebbd2b30502468b4a Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Fri, 20 Aug 2021 20:39:48 +0200 Subject: [PATCH 06/44] Added Benchmark library --- Cargo.lock | 310 ++++++++++++++++++++++++++++++++++-- Cargo.toml | 6 + README.md | 3 - benches/benchmark.rs | 4 + examples/snake-cli/game.rs | 5 +- examples/snake-cli/utils.rs | 6 + 6 files changed, 318 insertions(+), 16 deletions(-) create mode 100644 benches/benchmark.rs diff --git a/Cargo.lock b/Cargo.lock index 4523d55..aee6b25 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,24 +13,109 @@ dependencies = [ "syn", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bstr" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", + "serde", +] + [[package]] name = "bumpalo" version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" +[[package]] +name = "cast" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" +dependencies = [ + "rustc_version", +] + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "bitflags", + "textwrap", + "unicode-width", +] + +[[package]] +name = "criterion" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10" +dependencies = [ + "atty", + "cast", + "clap", + "criterion-plot", + "csv", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" +dependencies = [ + "cast", + "itertools", +] + [[package]] name = "crossbeam-channel" version = "0.5.1" @@ -75,6 +160,28 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "csv" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +dependencies = [ + "bstr", + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + [[package]] name = "either" version = "1.6.1" @@ -94,6 +201,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "half" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62aca2aba2d62b4a7f5b33f3712cb1b0692779a56fb510499d5c0aa594daeaf3" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -120,9 +233,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "js-sys" -version = "0.3.52" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce791b7ca6638aae45be056e068fc756d871eb3b3b10b8efa62d1c9cec616752" +checksum = "e4bf49d50e2961077d9c99f4b7997d770a1114f087c3c2e0069b36c13fc2979d" dependencies = [ "wasm-bindgen", ] @@ -154,6 +267,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + [[package]] name = "memoffset" version = "0.6.4" @@ -168,6 +287,7 @@ name = "neat-gru" version = "1.0.0" dependencies = [ "async-trait", + "criterion", "getrandom", "itertools", "num", @@ -276,6 +396,40 @@ dependencies = [ "syn", ] +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "plotters" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c" + +[[package]] +name = "plotters-svg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9" +dependencies = [ + "plotters-backend", +] + [[package]] name = "ppv-lite86" version = "0.2.10" @@ -375,18 +529,63 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "ryu" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "semver" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" + [[package]] name = "serde" version = "1.0.127" @@ -396,6 +595,16 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] + [[package]] name = "serde_derive" version = "1.0.127" @@ -429,12 +638,48 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + [[package]] name = "unicode-xid" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" @@ -443,9 +688,9 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-bindgen" -version = "0.2.75" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b608ecc8f4198fe8680e2ed18eccab5f0cd4caaf3d83516fa5fb2e927fda2586" +checksum = "8ce9b1b516211d33767048e5d47fa2a381ed8b76fc48d2ce4aa39877f9f183e0" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -453,9 +698,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.75" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580aa3a91a63d23aac5b6b267e2d13cb4f363e31dce6c352fca4752ae12e479f" +checksum = "cfe8dc78e2326ba5f845f4b5bf548401604fa20b1dd1d365fb73b6c1d6364041" dependencies = [ "bumpalo", "lazy_static", @@ -468,9 +713,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.75" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171ebf0ed9e1458810dfcb31f2e766ad6b3a89dbda42d8901f2b268277e5f09c" +checksum = "44468aa53335841d9d6b6c023eaab07c0cd4bddbcfdee3e2bb1e8d2cb8069fef" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -478,9 +723,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.75" +version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2657dd393f03aa2a659c25c6ae18a13a4048cebd220e147933ea837efc589f" +checksum = "0195807922713af1e67dc66132c7328206ed9766af3858164fb583eedc25fbad" dependencies = [ "proc-macro2", "quote", @@ -491,6 +736,47 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.75" +version = "0.2.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdb075a845574a1fa5f09fd77e43f7747599301ea3417a9fbffdeedfc1f4a29" + +[[package]] +name = "web-sys" +version = "0.3.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224b2f6b67919060055ef1a67807367c2066ed520c3862cc013d26cf893a783c" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0c4a743a309662d45f4ede961d7afa4ba4131a59a639f29b0069c3798bbcc2" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml index d7b0c10..9fab979 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,12 @@ rayon = "1.5.0" itertools = "0.10.0" async-trait = "0.1.50" +[dev-dependencies] +criterion = "0.3" + +[[bench]] +name = "benchmark" +harness = false [target.'cfg(target_arch = "wasm32")'.dependencies] getrandom = { version = "0.2.1", features = ["js"] } diff --git a/README.md b/README.md index 15c338e..fbb69b2 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,6 @@ ## Examples [XOR](examples/example.rs) -:warning: BETA - - [Snake](examples/snake-cli) diff --git a/benches/benchmark.rs b/benches/benchmark.rs new file mode 100644 index 0000000..0bc8283 --- /dev/null +++ b/benches/benchmark.rs @@ -0,0 +1,4 @@ +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +extern crate neat_gru; + +fn benchmark(c: &mut Criterion) {} diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index 9eefbe8..3b8cc62 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -1,5 +1,6 @@ use neat_gru::neural_network::nn::NeuralNetwork; +use crate::utils::distance_to_apple; use crate::{ apple::Apple, snake::Snake, @@ -85,9 +86,11 @@ impl Game { fn remove_if_dead(&mut self) { for idx in 0..self.snakes.len() { if self.snakes[idx].is_colliding() { - self.scores[idx] = self.snakes[idx].size() as f64 + (self.tick as f64 * 0.001); + self.scores[idx] = self.snakes[idx].size() as f64 + - 0.1 * (distance_to_apple(&self.snakes[idx], self.apple)); } } + self.snakes.retain(|s| !s.is_colliding()); } } diff --git a/examples/snake-cli/utils.rs b/examples/snake-cli/utils.rs index 5ff2ebc..8409986 100644 --- a/examples/snake-cli/utils.rs +++ b/examples/snake-cli/utils.rs @@ -1,3 +1,4 @@ +use crate::coordinate::Coordinate; use crate::{apple::Apple, defs::RESOLUTION, snake::Snake}; pub fn distance_to_apple_x(snake: &Snake, apple: Apple) -> f64 { @@ -12,6 +13,11 @@ pub fn distance_to_apple_y(snake: &Snake, apple: Apple) -> f64 { (snake_coordinate - apple_coordinate) / RESOLUTION as f64 } +pub fn distance_to_apple(snake: &Snake, apple: Apple) -> f64 { + // In this case we can directly add the distances since the snake can't go diagonally + distance_to_apple_x(snake, apple) + distance_to_apple_y(snake, apple) +} + pub fn distance_to_wall_x(snake: &Snake) -> f64 { let pos = snake.get_head_position(); let distance = (RESOLUTION - pos.x) as f64; From 86f38b36be41fb805b7c7cbad9fab17f70ddf5c5 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Fri, 20 Aug 2021 20:42:43 +0200 Subject: [PATCH 07/44] Remove unused imports --- examples/snake-cli/snake.rs | 5 ----- examples/snake-cli/training_simulation.rs | 1 - examples/snake-cli/utils.rs | 1 - 3 files changed, 7 deletions(-) diff --git a/examples/snake-cli/snake.rs b/examples/snake-cli/snake.rs index 734590f..b7913b4 100644 --- a/examples/snake-cli/snake.rs +++ b/examples/snake-cli/snake.rs @@ -10,11 +10,6 @@ pub struct Block { cord: Coordinate, } -impl Block { - fn get_coordinate(&self) -> Coordinate { - self.cord - } -} #[derive(Clone, PartialEq, Debug)] pub struct Snake { blocks: LinkedList, diff --git a/examples/snake-cli/training_simulation.rs b/examples/snake-cli/training_simulation.rs index b9ab3d0..e52fed5 100644 --- a/examples/snake-cli/training_simulation.rs +++ b/examples/snake-cli/training_simulation.rs @@ -2,7 +2,6 @@ use std::fs::File; use std::io::Write; use crate::game::Game; -use itertools::Itertools; use neat_gru::neural_network::nn::NeuralNetwork; pub struct TrainingSimulation { diff --git a/examples/snake-cli/utils.rs b/examples/snake-cli/utils.rs index 8409986..1b29c82 100644 --- a/examples/snake-cli/utils.rs +++ b/examples/snake-cli/utils.rs @@ -1,4 +1,3 @@ -use crate::coordinate::Coordinate; use crate::{apple::Apple, defs::RESOLUTION, snake::Snake}; pub fn distance_to_apple_x(snake: &Snake, apple: Apple) -> f64 { From 00f0316364d0bd430fb714e2f9ecffcad4e1ea52 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Fri, 20 Aug 2021 21:08:32 +0200 Subject: [PATCH 08/44] Cleanups --- src/topology/gene.rs | 24 +++--------------------- src/topology/topology.rs | 13 +++++++++---- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/topology/gene.rs b/src/topology/gene.rs index f4865c8..71b62d3 100644 --- a/src/topology/gene.rs +++ b/src/topology/gene.rs @@ -9,7 +9,7 @@ use rand::Rng; use serde::{Deserialize, Serialize}; use std::hash::{Hash, Hasher}; -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +#[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq)] pub struct Point { pub layer: u8, pub index: u8, @@ -21,22 +21,6 @@ impl Point { } } -impl Hash for Point { - fn hash(&self, state: &mut H) { - self.layer.hash(state); - self.index.hash(state) - } - - fn hash_slice(data: &[Point], state: &mut H) - where - Self: Sized, - { - for point in data.iter() { - point.hash(state); - } - } -} - #[derive(Clone, PartialEq, Eq)] pub struct Coordinate { input: Point, @@ -51,10 +35,8 @@ impl Coordinate { impl Hash for Coordinate { fn hash(&self, state: &mut H) { - self.input.layer.hash(state); - self.input.index.hash(state); - self.output.layer.hash(state); - self.output.index.hash(state) + self.input.hash(state); + self.output.hash(state); } fn hash_slice(data: &[Coordinate], state: &mut H) diff --git a/src/topology/topology.rs b/src/topology/topology.rs index e36177a..dcd4415 100644 --- a/src/topology/topology.rs +++ b/src/topology/topology.rs @@ -12,7 +12,7 @@ use rand_distr::{Distribution, Normal}; use serde::{Deserialize, Serialize}; use std::cell::RefCell; use std::collections::HashMap; -use std::fmt::Display; +use std::fmt::{Display, Formatter}; use std::rc::Rc; use std::sync::{Arc, Mutex}; @@ -708,7 +708,7 @@ where if let Some(final_gene) = new_topology.genes_ev_number.get(ev_number) { let final_cell = &**final_gene; let final_gene = &mut *final_cell.borrow_mut(); - final_gene.average_weights(&worst_gene); + final_gene.average_weights(worst_gene); } else { // If gene only exists in the worst topology, try to add it only if the neuron // exists in the best topology @@ -731,8 +731,13 @@ where } Arc::new(Mutex::new(new_topology)) } +} - pub fn to_string(&self) -> String { +impl<'a, T> Display for Topology +where + T: Float + std::ops::AddAssign + Display, +{ + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { let mut biases: Vec = self .genes_point .iter() @@ -775,7 +780,7 @@ where .flatten() .collect(); let serialization = SerializationTopology::new(biases, genes); - serde_json::to_string(&serialization).unwrap() + write!(f, "{}", serde_json::to_string(&serialization).unwrap()) } } From ee9861bc763c5ea7d740610a9676313b19ee1644 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Fri, 20 Aug 2021 21:09:33 +0200 Subject: [PATCH 09/44] Derive Hash instead of implementing it --- src/topology/gene.rs | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/topology/gene.rs b/src/topology/gene.rs index 71b62d3..c757c32 100644 --- a/src/topology/gene.rs +++ b/src/topology/gene.rs @@ -21,7 +21,7 @@ impl Point { } } -#[derive(Clone, PartialEq, Eq)] +#[derive(Clone, PartialEq, Hash, Eq)] pub struct Coordinate { input: Point, output: Point, @@ -33,22 +33,6 @@ impl Coordinate { } } -impl Hash for Coordinate { - fn hash(&self, state: &mut H) { - self.input.hash(state); - self.output.hash(state); - } - - fn hash_slice(data: &[Coordinate], state: &mut H) - where - Self: Sized, - { - for coordinate in data.iter() { - coordinate.hash(state); - } - } -} - #[derive(Clone, Deserialize, Serialize, Debug)] pub struct Gene where From 04a9a224d3923a36902d7db29eb389123a768399 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Fri, 20 Aug 2021 21:14:23 +0200 Subject: [PATCH 10/44] Cleanups --- src/topology/gene.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/topology/gene.rs b/src/topology/gene.rs index c757c32..4d8e4dc 100644 --- a/src/topology/gene.rs +++ b/src/topology/gene.rs @@ -7,7 +7,7 @@ use rand::distributions::{Distribution, Uniform}; use rand::prelude::ThreadRng; use rand::Rng; use serde::{Deserialize, Serialize}; -use std::hash::{Hash, Hasher}; +use std::hash::Hash; #[derive(Clone, Debug, Serialize, Deserialize, Hash, PartialEq, Eq)] pub struct Point { @@ -203,10 +203,6 @@ where fn eq(&self, other: &Self) -> bool { self.output.layer == other.output.layer && self.output.index == other.output.index } - - fn ne(&self, other: &Self) -> bool { - self.output.layer != other.output.layer || self.output.index != other.output.index - } } impl Eq for Gene where T: Float {} From e559d99886a4db1c03767125a6a3db530786da8e Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 21 Aug 2021 13:53:20 +0200 Subject: [PATCH 11/44] Further Cleanups & Refactoring --- src/train/train.rs | 72 ++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/src/train/train.rs b/src/train/train.rs index 52d0505..c61b5ae 100644 --- a/src/train/train.rs +++ b/src/train/train.rs @@ -400,18 +400,19 @@ where fn natural_selection(&mut self) { self.species_ .retain(|spec| spec.lock().unwrap().stagnation_counter < 20); - if self.species_.len() == 1 { - let first_spec = &mut *self.species_[0].lock().unwrap(); - first_spec.max_topologies = self.max_individuals_; - self.ev_number_.reset(); - let ev_number = self.ev_number_.clone(); - first_spec.natural_selection(ev_number, self.proba.clone()); - return; - } - if self.species_.is_empty() { - return; - } - self.species_.iter_mut().for_each(|spec| { + match self.species_.len() { + 0 => return, + 1 => { + let first_spec = &mut *self.species_[0].lock().unwrap(); + first_spec.max_topologies = self.max_individuals_; + self.ev_number_.reset(); + let ev_number = self.ev_number_.clone(); + first_spec.natural_selection(ev_number, self.proba.clone()); + return; + } + _ => {} + }; + cond_iter_mut!(self.species_).for_each(|spec| { spec.get_mut().unwrap().compute_adjusted_fitness(); }); let mean = cond_iter!(self.species_) @@ -419,7 +420,7 @@ where .map(|spec| spec.lock().unwrap().adjusted_fitness) .sum::() / F::from(self.species_.len()).unwrap(); - let variance = cond_iter!(self.species_) + let variance: F = cond_iter!(self.species_) .clone() .map(|spec| (spec.lock().unwrap().adjusted_fitness - mean).powf(F::from(2.).unwrap())) .sum::() @@ -433,29 +434,11 @@ where .powf((spec.adjusted_fitness - mean) / volatility); }); } else { - self.species_.iter_mut().for_each(|spec| { + cond_iter_mut!(self.species_).for_each(|spec| { spec.get_mut().unwrap().adjusted_fitness = F::one(); }); } - self.species_.sort_by(|spec1, spec2| { - let spec1 = &*spec1.lock().unwrap(); - let spec2 = &*spec2.lock().unwrap(); - if spec1.adjusted_fitness == spec2.adjusted_fitness { - spec1 - .topologies - .len() - .partial_cmp(&spec2.topologies.len()) - .unwrap() - } else { - spec1 - .adjusted_fitness - .partial_cmp(&spec2.adjusted_fitness) - .expect(&*format!( - "First: {}, second: {}, variance {}", - spec1.adjusted_fitness, spec2.adjusted_fitness, variance - )) - } - }); + self.sort_species(variance); let sum: F = cond_iter!(self.species_) .map(|spec| spec.lock().unwrap().adjusted_fitness) .sum(); @@ -492,7 +475,7 @@ where { self.species_.par_iter_mut().for_each(|species| { species - .lock() + .get_mut() .unwrap() .natural_selection(ev_number.clone(), proba.clone()); }); @@ -561,6 +544,27 @@ where } } + fn sort_species(&mut self, variance: F) { + self.species_.sort_by(|spec1, spec2| { + let spec1 = &*spec1.lock().unwrap(); + let spec2 = &*spec2.lock().unwrap(); + if spec1.adjusted_fitness == spec2.adjusted_fitness { + spec1 + .topologies + .len() + .partial_cmp(&spec2.topologies.len()) + .unwrap() + } else { + spec1 + .adjusted_fitness + .partial_cmp(&spec2.adjusted_fitness) + .expect(&*format!( + "First: {}, second: {}, variance {}", + spec1.adjusted_fitness, spec2.adjusted_fitness, variance + )) + } + }); + } fn reset_species(&mut self) { self.collect_topologies(); cond_iter_mut!(self.species_).for_each(|spec| { From 5ceaf25c5123a3d12493d49b2f711dfa2e4a02ca Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 21 Aug 2021 13:55:56 +0200 Subject: [PATCH 12/44] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fbb69b2..6f6ee02 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ cargo run --example example In `Cargo.toml`: ``` [dependencies] -neat-gru = "0.6.5" +neat-gru = 1.0.0" ``` Create a struct that implements the `Game` trait ```rust From 70d905c7ba3b43252c938112c8b46cb4a92fee56 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 21 Aug 2021 14:11:15 +0200 Subject: [PATCH 13/44] Refactoring & Docs --- src/train/train.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/train/train.rs b/src/train/train.rs index c61b5ae..8be8a5c 100644 --- a/src/train/train.rs +++ b/src/train/train.rs @@ -544,6 +544,7 @@ where } } + /// Sorts the species according to fitness fn sort_species(&mut self, variance: F) { self.species_.sort_by(|spec1, spec2| { let spec1 = &*spec1.lock().unwrap(); @@ -565,6 +566,7 @@ where } }); } + fn reset_species(&mut self) { self.collect_topologies(); cond_iter_mut!(self.species_).for_each(|spec| { @@ -607,11 +609,15 @@ where self.species_ = species; self.species_ .retain(|spec| !spec.lock().unwrap().topologies.is_empty()); - let biggest_species = cond_iter!(self.species_) + println!("BIGGEST SPECIES: {}", self.get_biggest_species()); + } + + /// Gets the length of the biggest species + fn get_biggest_species(&self) -> usize { + cond_iter!(self.species_) .map(|spec| spec.lock().unwrap().topologies.len()) .max() - .unwrap_or(0); - println!("BIGGEST SPECIES: {}", biggest_species); + .unwrap_or(0) } } From 81ef41c0249f8cfb32a89294a7c9e839e4c71b27 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 21 Aug 2021 15:53:44 +0200 Subject: [PATCH 14/44] Better function name --- src/train/train.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/train/train.rs b/src/train/train.rs index 8be8a5c..63c7963 100644 --- a/src/train/train.rs +++ b/src/train/train.rs @@ -609,11 +609,11 @@ where self.species_ = species; self.species_ .retain(|spec| !spec.lock().unwrap().topologies.is_empty()); - println!("BIGGEST SPECIES: {}", self.get_biggest_species()); + println!("BIGGEST SPECIES: {}", self.get_biggest_species_len()); } /// Gets the length of the biggest species - fn get_biggest_species(&self) -> usize { + fn get_biggest_species_len(&self) -> usize { cond_iter!(self.species_) .map(|spec| spec.lock().unwrap().topologies.len()) .max() From 39c9bcd48966cd4ee797af5368f354e017bc763d Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 22 Aug 2021 14:53:10 +0200 Subject: [PATCH 15/44] Cleanups --- examples/example.rs | 8 ++------ examples/snake-cli/coordinate.rs | 4 ++-- examples/snake-cli/game.rs | 4 ++-- src/tests.rs | 4 ++-- src/train/species.rs | 3 --- 5 files changed, 8 insertions(+), 15 deletions(-) diff --git a/examples/example.rs b/examples/example.rs index b3a7966..0a7fae0 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -55,7 +55,7 @@ fn compute_score(inputs: &[f64], output: f64) -> f64 { // https://en.wikipedia.org/wiki/XOR_gate // Returns 1.0 for a wrong output and 0.0 for a right output. Should be used as a score // We first need to round the numbers to booleans - let inputs: Vec = inputs.into_iter().map(|f| round(*f)).collect(); + let inputs: Vec = inputs.iter().map(|f| round(*f)).collect(); let output = round(output); if inputs[0] ^ inputs[1] == output { return 1.0; @@ -65,11 +65,7 @@ fn compute_score(inputs: &[f64], output: f64) -> f64 { /// Rounds a float to a bool fn round(float: f64) -> bool { - if float < 0.1 { - false - } else { - true - } + !(float < 0.1) } impl Game for Simulation { diff --git a/examples/snake-cli/coordinate.rs b/examples/snake-cli/coordinate.rs index 5eb72ee..cf58279 100644 --- a/examples/snake-cli/coordinate.rs +++ b/examples/snake-cli/coordinate.rs @@ -42,10 +42,10 @@ impl Coordinate { ) -> Result { let mut clone = coordinate; let overflow = clone.transform(direction, step); - return match overflow { + match overflow { Ok(_) => Ok(clone), Err(e) => Err(e), - }; + } } } impl From<(usize, usize)> for Coordinate { diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index 3b8cc62..01acd8e 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -46,7 +46,7 @@ impl Game { /// Make the snakes make their decision pub fn make_decision(&mut self) { let mut inputs: [f64; 4] = [0., 0., 0., 0.]; - let cloned_apple = self.apple.clone(); + let cloned_apple = self.apple; // Let each snake make a decision self.snakes.iter_mut().for_each(|s| { // First inputs are the distance to the apple from -1 to 1 @@ -80,7 +80,7 @@ impl Game { } fn game_over(&self) -> bool { - self.snakes.is_empty() || self.ticks_since_eaten >= 100 + self.snakes.is_empty() || self.ticks_since_eaten >= 150 } fn remove_if_dead(&mut self) { diff --git a/src/tests.rs b/src/tests.rs index ed3247f..f1a38aa 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -109,7 +109,7 @@ impl Game for TestGame { assert_eq!(*top, top_cp); let as_str = top.to_string(); - let network = unsafe { NeuralNetwork::new(&top) }; + let network = unsafe { NeuralNetwork::new(top) }; let top2 = Topology::from_string(&*as_str); let network_from_string: NeuralNetwork = unsafe { NeuralNetwork::new(&top2) }; if network != network_from_string { @@ -197,7 +197,7 @@ impl Game for MemoryCount { let top_cp = top.clone(); assert_eq!(*top, top_cp); let as_str = top.to_string(); - let network = unsafe { NeuralNetwork::new(&top) }; + let network = unsafe { NeuralNetwork::new(top) }; let top2 = Topology::from_string(&*as_str); let network_from_string: NeuralNetwork = unsafe { NeuralNetwork::new(&top2) }; if network != network_from_string { diff --git a/src/train/species.rs b/src/train/species.rs index 3a4e797..7afa19e 100644 --- a/src/train/species.rs +++ b/src/train/species.rs @@ -197,9 +197,6 @@ where } pub fn compute_adjusted_fitness(&mut self) { - /* - self.adjusted_fitness = self.best_topology.borrow().get_last_result(); - }*/ let top_len = T::from(self.topologies.len()).unwrap(); if top_len == T::zero() { self.adjusted_fitness = T::zero(); From a3f2428e2fc416f4a4e2d6fb66813bcdcb9a4095 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 22 Aug 2021 17:08:43 +0200 Subject: [PATCH 16/44] Added comments --- examples/snake-cli/game.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index 01acd8e..00e8380 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -37,6 +37,7 @@ impl Game { } } + /// Runs the game until every snake is dead pub fn run_game(&mut self) { while !self.game_over() { self.tick(); @@ -80,6 +81,7 @@ impl Game { } fn game_over(&self) -> bool { + // When the snakes don't eat the obviously starve, seriously where is the realism... self.snakes.is_empty() || self.ticks_since_eaten >= 150 } @@ -91,6 +93,7 @@ impl Game { } } + // Snakes that are idiots get the bonk self.snakes.retain(|s| !s.is_colliding()); } } From 0e2c83d5f6ac9b7e76561cf176403e6de6b05e9c Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 22 Aug 2021 18:45:58 +0200 Subject: [PATCH 17/44] Reworded comments --- examples/snake-cli/game.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index 00e8380..3f8c3eb 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -81,7 +81,7 @@ impl Game { } fn game_over(&self) -> bool { - // When the snakes don't eat the obviously starve, seriously where is the realism... + // When the snakes don't eat obviously starve self.snakes.is_empty() || self.ticks_since_eaten >= 150 } @@ -93,7 +93,7 @@ impl Game { } } - // Snakes that are idiots get the bonk + // Snakes that are idiots get removed self.snakes.retain(|s| !s.is_colliding()); } } From 459c4a35e67ad14ea71a44d1d0d114efc6c86a37 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 22 Aug 2021 18:51:48 +0200 Subject: [PATCH 18/44] Removed unnecessary .gitignore --- examples/snake-cli/.gitignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 examples/snake-cli/.gitignore diff --git a/examples/snake-cli/.gitignore b/examples/snake-cli/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/snake-cli/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target From 9f5555acf40851805ec3e66fbccc54aa55b8191f Mon Sep 17 00:00:00 2001 From: Nereuxofficial <37740907+Nereuxofficial@users.noreply.github.com> Date: Mon, 23 Aug 2021 22:35:00 +0200 Subject: [PATCH 19/44] Fancier Badges --- README.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6f6ee02..6d4d89e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,22 @@ # neat-gru-rust [![CICD](https://github.com/Nereuxofficial/neat-gru-rust/actions/workflows/test.yml/badge.svg)](https://github.com/Nereuxofficial/neat-gru-rust/actions/workflows/test.yml) -![Crates.io](https://img.shields.io/crates/v/neat-gru) -![Downloads](https://img.shields.io/crates/d/neat-gru) -![License](https://img.shields.io/github/license/sakex/neat-gru-rust) +![Crates.io](https://img.shields.io/crates/v/neat-gru?style=for-the-badge) +![Downloads](https://img.shields.io/crates/d/neat-gru?style=for-the-badge) +![License](https://img.shields.io/github/license/sakex/neat-gru-rust?style=for-the-badge + | ^^^^^^^^^^^^^ `Position` cannot be formatted using `{:?}` + | + = help: the trait `Debug` is not implemented for `Position` + = note: add `#[derive(Debug)]` or manually implement `Debug` + = note: required because of the requirements on the impl of `Debug` for `&Position` + = note: required for the cast to the object type `dyn Debug` + = note: this error originates in th + | ^^^^^^^^^^^^^ `Position` cannot be formatted using `{:?}` + | + = help: the trait `Debug` is not implemented for `Position` + = note: add `#[derive(Debug)]` or manually implement `Debug` + = note: required because of the requirements on the impl of `Debug` for `&Position` + = note: required for the cast to the object type `dyn Debug` + = note: this error originates in th) ## Documentation [Crates.io doc](https://docs.rs/neat-gru/) From 2b68ac6cb8758db0113f727ea3246af8320a4367 Mon Sep 17 00:00:00 2001 From: Nereuxofficial <37740907+Nereuxofficial@users.noreply.github.com> Date: Mon, 23 Aug 2021 22:35:59 +0200 Subject: [PATCH 20/44] Fixed accidental Crtl+V --- README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/README.md b/README.md index 6d4d89e..e079463 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,6 @@ ![Crates.io](https://img.shields.io/crates/v/neat-gru?style=for-the-badge) ![Downloads](https://img.shields.io/crates/d/neat-gru?style=for-the-badge) ![License](https://img.shields.io/github/license/sakex/neat-gru-rust?style=for-the-badge - | ^^^^^^^^^^^^^ `Position` cannot be formatted using `{:?}` - | - = help: the trait `Debug` is not implemented for `Position` - = note: add `#[derive(Debug)]` or manually implement `Debug` - = note: required because of the requirements on the impl of `Debug` for `&Position` - = note: required for the cast to the object type `dyn Debug` - = note: this error originates in th | ^^^^^^^^^^^^^ `Position` cannot be formatted using `{:?}` | = help: the trait `Debug` is not implemented for `Position` From 144bb775f108f669eaa2942e9d55df885206cb5d Mon Sep 17 00:00:00 2001 From: Nereuxofficial <37740907+Nereuxofficial@users.noreply.github.com> Date: Mon, 23 Aug 2021 22:36:54 +0200 Subject: [PATCH 21/44] Fixed accidental Paste --- README.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/README.md b/README.md index e079463..fddee36 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,7 @@ [![CICD](https://github.com/Nereuxofficial/neat-gru-rust/actions/workflows/test.yml/badge.svg)](https://github.com/Nereuxofficial/neat-gru-rust/actions/workflows/test.yml) ![Crates.io](https://img.shields.io/crates/v/neat-gru?style=for-the-badge) ![Downloads](https://img.shields.io/crates/d/neat-gru?style=for-the-badge) -![License](https://img.shields.io/github/license/sakex/neat-gru-rust?style=for-the-badge - | ^^^^^^^^^^^^^ `Position` cannot be formatted using `{:?}` - | - = help: the trait `Debug` is not implemented for `Position` - = note: add `#[derive(Debug)]` or manually implement `Debug` - = note: required because of the requirements on the impl of `Debug` for `&Position` - = note: required for the cast to the object type `dyn Debug` - = note: this error originates in th) +![License](https://img.shields.io/github/license/sakex/neat-gru-rust?style=for-the-badge) ## Documentation [Crates.io doc](https://docs.rs/neat-gru/) From 7208831904fa13b3ab51803b52a88cbf73970efb Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Wed, 25 Aug 2021 15:41:37 +0200 Subject: [PATCH 22/44] Split Github Workflows --- .github/workflows/benchmarks.yml | 22 ++++++++++++++++++++++ .github/workflows/examples.yml | 24 ++++++++++++++++++++++++ .github/workflows/test.yml | 4 ---- benches/benchmark.rs | 14 +++++++++++++- examples/example.rs | 2 ++ 5 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/benchmarks.yml create mode 100644 .github/workflows/examples.yml diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml new file mode 100644 index 0000000..2bdef3d --- /dev/null +++ b/.github/workflows/benchmarks.yml @@ -0,0 +1,22 @@ +name: Benchmarks + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Build + run: cargo build --verbose + - name: Benchmarks + run: cargo bench diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml new file mode 100644 index 0000000..00d0adc --- /dev/null +++ b/.github/workflows/examples.yml @@ -0,0 +1,24 @@ +name: Examples + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Build + run: cargo build --verbose + - name: Snake example + run: cargo run --example snake-cli + - name: Example + run: cargo run --example example diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1ddc0b6..7ae98f3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,7 +20,3 @@ jobs: run: cargo build --verbose - name: Run tests run: cargo test --verbose - - name: Snake example - run: cargo run --example snake-cli - - name: Example - run: cargo run --example example diff --git a/benches/benchmark.rs b/benches/benchmark.rs index 0bc8283..0a44c4f 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -1,4 +1,16 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; extern crate neat_gru; +use std::fs::File; +use neat_gru::neural_network::nn; +use std::io::Read; -fn benchmark(c: &mut Criterion) {} +fn benchmark(c: &mut Criterion) { + let mut file = File::open("XOR").expect("Can't open XOR file. Run 'Example' first."); + let mut file_string = &mut "".to_string(); + file.read_to_string(file_string); + let mut network = unsafe { nn::NeuralNetwork::from_string(file_string) }; + + c.bench_function("nn::compute", |b| b.iter(|| network.compute(black_box(&[0.0, 0.0])))); +} +criterion_group!(benches, benchmark); +criterion_main!(benches); \ No newline at end of file diff --git a/examples/example.rs b/examples/example.rs index 0a7fae0..6376b5e 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -13,6 +13,8 @@ struct Player { impl Player { pub fn new(net: NeuralNetwork) -> Player { + File::create("ExampleNN").unwrap(); + Player { net } } /// Runs all the inputs and calculates the outputs From b30052e83565616c1f702e8c92199f8505a85b6e Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Wed, 25 Aug 2021 15:52:26 +0200 Subject: [PATCH 23/44] Removed unnecessary code --- benches/benchmark.rs | 10 ++++++---- examples/example.rs | 2 -- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benches/benchmark.rs b/benches/benchmark.rs index 0a44c4f..5140de9 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -1,16 +1,18 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; extern crate neat_gru; -use std::fs::File; use neat_gru::neural_network::nn; +use std::fs::File; use std::io::Read; fn benchmark(c: &mut Criterion) { let mut file = File::open("XOR").expect("Can't open XOR file. Run 'Example' first."); let mut file_string = &mut "".to_string(); file.read_to_string(file_string); - let mut network = unsafe { nn::NeuralNetwork::from_string(file_string) }; + let mut network = unsafe { nn::NeuralNetwork::from_string(file_string) }; - c.bench_function("nn::compute", |b| b.iter(|| network.compute(black_box(&[0.0, 0.0])))); + c.bench_function("nn::compute", |b| { + b.iter(|| network.compute(black_box(&[0.0, 0.0]))) + }); } criterion_group!(benches, benchmark); -criterion_main!(benches); \ No newline at end of file +criterion_main!(benches); diff --git a/examples/example.rs b/examples/example.rs index 6376b5e..0a7fae0 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -13,8 +13,6 @@ struct Player { impl Player { pub fn new(net: NeuralNetwork) -> Player { - File::create("ExampleNN").unwrap(); - Player { net } } /// Runs all the inputs and calculates the outputs From b7541d4159323a498cb5f1ba50ad0b71220612e5 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 28 Aug 2021 18:29:46 +0200 Subject: [PATCH 24/44] WIP: Fixing serialization --- benches/benchmark.rs | 10 ++++++---- examples/example.rs | 2 +- src/topology/topology.rs | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/benches/benchmark.rs b/benches/benchmark.rs index 5140de9..a871efc 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -1,15 +1,17 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; extern crate neat_gru; use neat_gru::neural_network::nn; +use neat_gru::neural_network::nn::NeuralNetwork; +use neat_gru::topology::topology::Topology; use std::fs::File; use std::io::Read; fn benchmark(c: &mut Criterion) { let mut file = File::open("XOR").expect("Can't open XOR file. Run 'Example' first."); - let mut file_string = &mut "".to_string(); - file.read_to_string(file_string); - let mut network = unsafe { nn::NeuralNetwork::from_string(file_string) }; - + let file_string = &mut "".to_string(); + file.read_to_string(file_string).unwrap(); + let topology = Topology::from_serde_string(file_string); + let mut network = unsafe { NeuralNetwork::new(&topology) }; c.bench_function("nn::compute", |b| { b.iter(|| network.compute(black_box(&[0.0, 0.0]))) }); diff --git a/examples/example.rs b/examples/example.rs index 0a7fae0..4e274cc 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -85,7 +85,7 @@ impl Game for Simulation { // Iter on best topologies and upload the best one let best = history.last().unwrap(); let mut output = File::create("XOR").expect("Could not create output file"); - write!(output, "{:?}", best).unwrap(); + write!(output, "{:?}", best.to_serde_string()).unwrap(); } } diff --git a/src/topology/topology.rs b/src/topology/topology.rs index dcd4415..965551b 100644 --- a/src/topology/topology.rs +++ b/src/topology/topology.rs @@ -854,7 +854,7 @@ where new_top } - pub fn to_serde_string(&self) -> String { - serde_json::to_string(&self).unwrap() + pub fn to_serde_string(&self) -> Vec { + serde_json::to_vec_pretty(&self).unwrap() } } From 4946362bb7a9ffcf8970ef9f610b4bca1bab4f2f Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 28 Aug 2021 20:33:18 +0200 Subject: [PATCH 25/44] Revert changes to Topology::to_serde_string --- examples/example.rs | 2 +- src/topology/topology.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/example.rs b/examples/example.rs index 4e274cc..7601e79 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -85,7 +85,7 @@ impl Game for Simulation { // Iter on best topologies and upload the best one let best = history.last().unwrap(); let mut output = File::create("XOR").expect("Could not create output file"); - write!(output, "{:?}", best.to_serde_string()).unwrap(); + write!(output, "{}", best.to_serde_string()).unwrap(); } } diff --git a/src/topology/topology.rs b/src/topology/topology.rs index 965551b..dcd4415 100644 --- a/src/topology/topology.rs +++ b/src/topology/topology.rs @@ -854,7 +854,7 @@ where new_top } - pub fn to_serde_string(&self) -> Vec { - serde_json::to_vec_pretty(&self).unwrap() + pub fn to_serde_string(&self) -> String { + serde_json::to_string(&self).unwrap() } } From f9bf105513d2af42468e57c4091c4f97657beaab Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 28 Aug 2021 20:59:49 +0200 Subject: [PATCH 26/44] Fixed Serialization and Benchmarks --- benches/benchmark.rs | 4 ++-- examples/example.rs | 2 +- examples/snake-cli/training_simulation.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/benches/benchmark.rs b/benches/benchmark.rs index a871efc..ef747c7 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -7,10 +7,10 @@ use std::fs::File; use std::io::Read; fn benchmark(c: &mut Criterion) { - let mut file = File::open("XOR").expect("Can't open XOR file. Run 'Example' first."); + let mut file = File::open("snakes.json").expect("Can't open XOR file. Run 'Example' first."); let file_string = &mut "".to_string(); file.read_to_string(file_string).unwrap(); - let topology = Topology::from_serde_string(file_string); + let topology = Topology::from_string(file_string); let mut network = unsafe { NeuralNetwork::new(&topology) }; c.bench_function("nn::compute", |b| { b.iter(|| network.compute(black_box(&[0.0, 0.0]))) diff --git a/examples/example.rs b/examples/example.rs index 7601e79..b84fe9e 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -85,7 +85,7 @@ impl Game for Simulation { // Iter on best topologies and upload the best one let best = history.last().unwrap(); let mut output = File::create("XOR").expect("Could not create output file"); - write!(output, "{}", best.to_serde_string()).unwrap(); + write!(output, "{}", best).unwrap(); } } diff --git a/examples/snake-cli/training_simulation.rs b/examples/snake-cli/training_simulation.rs index e52fed5..03365c1 100644 --- a/examples/snake-cli/training_simulation.rs +++ b/examples/snake-cli/training_simulation.rs @@ -36,6 +36,6 @@ impl neat_gru::game::Game for TrainingSimulation { fn post_training(&mut self, history: &[neat_gru::topology::topology::Topology]) { let history: Vec = history.iter().map(|t| t.to_string()).collect(); let mut output = File::create("snakes.json").expect("Could not create output file"); - write!(output, "{}", history.join(" ")).unwrap(); + write!(output, "{}", history.last().unwrap()).unwrap(); } } From d7566822ce20147088dd0e03a508917839771d27 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 28 Aug 2021 21:08:04 +0200 Subject: [PATCH 27/44] Fixed Benchmark and included snakes.json --- .gitignore | 1 - benches/benchmark.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 99f1256..c530c4b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ .idea/ pkg/ .vscode -snakes.json XOR \ No newline at end of file diff --git a/benches/benchmark.rs b/benches/benchmark.rs index ef747c7..c1fd009 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -7,7 +7,7 @@ use std::fs::File; use std::io::Read; fn benchmark(c: &mut Criterion) { - let mut file = File::open("snakes.json").expect("Can't open XOR file. Run 'Example' first."); + let mut file = File::open("snakes.json").expect("Can't open snakes.json"); let file_string = &mut "".to_string(); file.read_to_string(file_string).unwrap(); let topology = Topology::from_string(file_string); From 47f6733e42d712666ff0ad0622c5007661da3d0f Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 28 Aug 2021 21:27:38 +0200 Subject: [PATCH 28/44] Topology::to_string(&self) now uses to_string_pretty --- benches/benchmark.rs | 1 - snakes.json | 596 +++++++++++++++++++++++++++++++++++++++ src/topology/topology.rs | 6 +- 3 files changed, 601 insertions(+), 2 deletions(-) create mode 100644 snakes.json diff --git a/benches/benchmark.rs b/benches/benchmark.rs index c1fd009..36ec841 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -1,6 +1,5 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; extern crate neat_gru; -use neat_gru::neural_network::nn; use neat_gru::neural_network::nn::NeuralNetwork; use neat_gru::topology::topology::Topology; use std::fs::File; diff --git a/snakes.json b/snakes.json new file mode 100644 index 0000000..2b62c46 --- /dev/null +++ b/snakes.json @@ -0,0 +1,596 @@ +{ + "biases": [ + { + "neuron": [ + 3, + 2 + ], + "bias": { + "bias_input": -0.12197825442105006, + "bias_update": -0.3512783961110883, + "bias_reset": 0.03732893413991594 + } + }, + { + "neuron": [ + 5, + 0 + ], + "bias": { + "bias_input": -0.6546992853663908, + "bias_update": -0.4141320241793256, + "bias_reset": -0.5633738626623466 + } + }, + { + "neuron": [ + 0, + 2 + ], + "bias": { + "bias_input": -0.5488180362509959, + "bias_update": -0.1806297156401049, + "bias_reset": -0.05725004085267177 + } + }, + { + "neuron": [ + 2, + 0 + ], + "bias": { + "bias_input": 0.32081128621624855, + "bias_update": 0.2011243194554006, + "bias_reset": -0.2920839057693987 + } + }, + { + "neuron": [ + 3, + 1 + ], + "bias": { + "bias_input": -0.1623161199643319, + "bias_update": 0.28890798880629287, + "bias_reset": -0.31314158971819767 + } + }, + { + "neuron": [ + 3, + 3 + ], + "bias": { + "bias_input": 0.7231893838556656, + "bias_update": -0.46285176796547123, + "bias_reset": -0.7884127207021288 + } + }, + { + "neuron": [ + 0, + 3 + ], + "bias": { + "bias_input": 0.26366231744884067, + "bias_update": 0.25148671800329914, + "bias_reset": -1.233430536524573 + } + }, + { + "neuron": [ + 0, + 0 + ], + "bias": { + "bias_input": -0.2821297073980792, + "bias_update": 0.6850320489123115, + "bias_reset": 0.6601393928613262 + } + }, + { + "neuron": [ + 4, + 0 + ], + "bias": { + "bias_input": -0.14494070012366483, + "bias_update": -0.010953307751109672, + "bias_reset": -0.06251158965598189 + } + }, + { + "neuron": [ + 0, + 1 + ], + "bias": { + "bias_input": 0.08921003095987093, + "bias_update": -0.25535417621557344, + "bias_reset": -0.09956754064732123 + } + }, + { + "neuron": [ + 1, + 0 + ], + "bias": { + "bias_input": 0.6742833308143651, + "bias_update": 0.5493149832292287, + "bias_reset": -0.5612200420492762 + } + }, + { + "neuron": [ + 3, + 0 + ], + "bias": { + "bias_input": -0.008026181636048516, + "bias_update": 0.1666437758808091, + "bias_reset": -0.5676672321901474 + } + }, + { + "neuron": [ + 6, + 0 + ], + "bias": { + "bias_input": 0.5804218127983782, + "bias_update": 0.3274411060860364, + "bias_reset": -0.7071156018446664 + } + }, + { + "neuron": [ + 6, + 1 + ], + "bias": { + "bias_input": 0.03911333992868528, + "bias_update": 0.5434913502217243, + "bias_reset": -0.3354076229108049 + } + }, + { + "neuron": [ + 6, + 2 + ], + "bias": { + "bias_input": 0.20759609209784013, + "bias_update": 0.2021111102981616, + "bias_reset": -0.27214464589135345 + } + }, + { + "neuron": [ + 6, + 3 + ], + "bias": { + "bias_input": 0.1147987269869073, + "bias_update": -0.011115670525246668, + "bias_reset": -0.15631755743233267 + } + } + ], + "genes": [ + { + "connection_type": 1, + "disabled": false, + "input": [ + 3, + 2 + ], + "input_weight": 0.6386978501315573, + "memory_weight": 0.8668885999141718, + "output": [ + 6, + 0 + ], + "reset_input_weight": 0.13688495638185044, + "reset_memory_weight": 0.6365507692665415, + "update_input_weight": 0.8282072490050422, + "update_memory_weight": -0.13905559039768536 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 3, + 2 + ], + "input_weight": 0.7198076175396841, + "memory_weight": 0.6029255083491911, + "output": [ + 6, + 3 + ], + "reset_input_weight": 0.6658427582839018, + "reset_memory_weight": 0.6443965904549056, + "update_input_weight": 0.49533825775801316, + "update_memory_weight": 0.7291810769489155 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 5, + 0 + ], + "input_weight": 0.03087736653576338, + "memory_weight": 0.1050045940847244, + "output": [ + 6, + 2 + ], + "reset_input_weight": -0.1763479266191611, + "reset_memory_weight": -0.592628196020016, + "update_input_weight": 0.054420726333605896, + "update_memory_weight": -0.1007327271283747 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 5, + 0 + ], + "input_weight": 1.0495957857653628, + "memory_weight": 1.0660899770203531, + "output": [ + 6, + 0 + ], + "reset_input_weight": 1.0371042574702707, + "reset_memory_weight": 1.026578314091005, + "update_input_weight": 0.8625220871481992, + "update_memory_weight": 1.029127330535889 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 0, + 2 + ], + "input_weight": 0.4018387408140178, + "memory_weight": 0.6202672190485321, + "output": [ + 6, + 2 + ], + "reset_input_weight": 0.3815129035610941, + "reset_memory_weight": 0.5020930346282222, + "update_input_weight": 0.5778170720971538, + "update_memory_weight": 0.34683839331225436 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 0, + 2 + ], + "input_weight": 0.18898247335451546, + "memory_weight": 0.4217345665230764, + "output": [ + 1, + 0 + ], + "reset_input_weight": 0.0848941646047306, + "reset_memory_weight": 0.7960488542410544, + "update_input_weight": 0.8061864459775152, + "update_memory_weight": 0.1676953975782164 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 2, + 0 + ], + "input_weight": 0.6493954055482594, + "memory_weight": 0.6226289996014658, + "output": [ + 3, + 2 + ], + "reset_input_weight": 0.34172267782706134, + "reset_memory_weight": 0.6060880883094367, + "update_input_weight": 0.8238939071654371, + "update_memory_weight": 0.7365572622366421 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 2, + 0 + ], + "input_weight": 0.6779440248671462, + "memory_weight": -0.7208646099545, + "output": [ + 3, + 3 + ], + "reset_input_weight": 0.8453488068715538, + "reset_memory_weight": -0.4609409149647961, + "update_input_weight": 0.3982254718381156, + "update_memory_weight": -0.41152976475885655 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 2, + 0 + ], + "input_weight": 0.961802651281088, + "memory_weight": 1.005648567991713, + "output": [ + 3, + 0 + ], + "reset_input_weight": 0.7259700624399228, + "reset_memory_weight": 0.8682150640953608, + "update_input_weight": 1.138226918102283, + "update_memory_weight": 1.0141648992830419 + }, + { + "connection_type": 0, + "disabled": false, + "input": [ + 3, + 1 + ], + "input_weight": -0.30723875050148797, + "memory_weight": 0.04797324185855254, + "output": [ + 6, + 0 + ], + "reset_input_weight": -0.45968749834116834, + "reset_memory_weight": 0.3941987301747495, + "update_input_weight": -0.3810309071302042, + "update_memory_weight": -0.49975517035902906 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 3, + 1 + ], + "input_weight": -0.6012488373209863, + "memory_weight": 0.42106019670799366, + "output": [ + 6, + 3 + ], + "reset_input_weight": 0.6289403073912458, + "reset_memory_weight": -0.2693453368970082, + "update_input_weight": 0.21769666497159199, + "update_memory_weight": -0.040448087326662274 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 3, + 1 + ], + "input_weight": 0.9691571887572908, + "memory_weight": -0.5959216458917461, + "output": [ + 6, + 2 + ], + "reset_input_weight": -0.6530633410258838, + "reset_memory_weight": -0.644510218424454, + "update_input_weight": -0.7941962901320494, + "update_memory_weight": -0.42066403417891146 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 3, + 3 + ], + "input_weight": 0.9528220176851441, + "memory_weight": 0.9167394419678561, + "output": [ + 4, + 0 + ], + "reset_input_weight": 1.0705388640526055, + "reset_memory_weight": 0.956052593960707, + "update_input_weight": 0.898223500270279, + "update_memory_weight": 0.9988949168163517 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 0, + 3 + ], + "input_weight": 0.970202146496217, + "memory_weight": 0.92429787685623, + "output": [ + 1, + 0 + ], + "reset_input_weight": 0.9230488538372961, + "reset_memory_weight": 1.0595015804264185, + "update_input_weight": 0.9756920859710281, + "update_memory_weight": 0.9881861566447755 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 0, + 0 + ], + "input_weight": 1.0699536914606036, + "memory_weight": 1.0375576487472074, + "output": [ + 1, + 0 + ], + "reset_input_weight": 0.897624764929014, + "reset_memory_weight": 1.021655739367869, + "update_input_weight": 0.9873325459273112, + "update_memory_weight": 0.9468094656177555 + }, + { + "connection_type": 0, + "disabled": false, + "input": [ + 4, + 0 + ], + "input_weight": 0.8185869488180935, + "memory_weight": -0.6396563912726455, + "output": [ + 6, + 3 + ], + "reset_input_weight": -0.5353294707023177, + "reset_memory_weight": -0.6204752261667463, + "update_input_weight": -0.36035357589314987, + "update_memory_weight": -1.030649318689755 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 4, + 0 + ], + "input_weight": 1.0089446460762515, + "memory_weight": 0.9596993819129611, + "output": [ + 5, + 0 + ], + "reset_input_weight": 0.9244523608775992, + "reset_memory_weight": 1.0481216551240313, + "update_input_weight": 0.9707656957591784, + "update_memory_weight": 1.0093816309597397 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 0, + 1 + ], + "input_weight": 0.6624151438121612, + "memory_weight": 0.42458190022989084, + "output": [ + 6, + 2 + ], + "reset_input_weight": -0.7185368671724097, + "reset_memory_weight": -0.4438329004274527, + "update_input_weight": 0.50006818251439, + "update_memory_weight": -0.12849306445853598 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 0, + 1 + ], + "input_weight": 0.01527395057481823, + "memory_weight": 0.04356234338486187, + "output": [ + 1, + 0 + ], + "reset_input_weight": 0.14184472679927973, + "reset_memory_weight": 0.3149534104472975, + "update_input_weight": 0.6316508636132993, + "update_memory_weight": -0.00595547314203132 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 1, + 0 + ], + "input_weight": 0.8096866457668834, + "memory_weight": -0.42350746619088114, + "output": [ + 3, + 1 + ], + "reset_input_weight": 0.4071195957601003, + "reset_memory_weight": -0.172097504784938, + "update_input_weight": 0.21878526360028755, + "update_memory_weight": -0.21318642064403492 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 1, + 0 + ], + "input_weight": 0.9908135596619445, + "memory_weight": 0.9499628764159571, + "output": [ + 2, + 0 + ], + "reset_input_weight": 0.9695650523915453, + "reset_memory_weight": 0.9531296772870813, + "update_input_weight": 1.0508021987088179, + "update_memory_weight": 0.9602172430977385 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 3, + 0 + ], + "input_weight": 0.8074479114148789, + "memory_weight": 1.0196448943431844, + "output": [ + 6, + 1 + ], + "reset_input_weight": 0.7116257088977129, + "reset_memory_weight": 0.6580370166514686, + "update_input_weight": 0.5356814174174317, + "update_memory_weight": 0.6483388962350225 + }, + { + "connection_type": 1, + "disabled": false, + "input": [ + 3, + 0 + ], + "input_weight": 1.1461613541261133, + "memory_weight": 0.9984884418621701, + "output": [ + 4, + 0 + ], + "reset_input_weight": 1.0036868531838785, + "reset_memory_weight": 1.0438788564735437, + "update_input_weight": 1.0194775784764043, + "update_memory_weight": 0.8646128639920583 + } + ] +} \ No newline at end of file diff --git a/src/topology/topology.rs b/src/topology/topology.rs index dcd4415..61b289b 100644 --- a/src/topology/topology.rs +++ b/src/topology/topology.rs @@ -780,7 +780,11 @@ where .flatten() .collect(); let serialization = SerializationTopology::new(biases, genes); - write!(f, "{}", serde_json::to_string(&serialization).unwrap()) + write!( + f, + "{}", + serde_json::to_string_pretty(&serialization).unwrap() + ) } } From b0f54b0968b7fdf775617c2e1c69131b204b8d93 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 28 Aug 2021 23:31:15 +0200 Subject: [PATCH 29/44] Removed duplicate functions & Created separate json for benchmarking --- .gitignore | 1 + benches/benchmark.rs | 2 +- snakes.json => snakes_benchmark.json | 0 src/topology/topology.rs | 14 -------------- 4 files changed, 2 insertions(+), 15 deletions(-) rename snakes.json => snakes_benchmark.json (100%) diff --git a/.gitignore b/.gitignore index c530c4b..99f1256 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ .idea/ pkg/ .vscode +snakes.json XOR \ No newline at end of file diff --git a/benches/benchmark.rs b/benches/benchmark.rs index 36ec841..29b6e2b 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -6,7 +6,7 @@ use std::fs::File; use std::io::Read; fn benchmark(c: &mut Criterion) { - let mut file = File::open("snakes.json").expect("Can't open snakes.json"); + let mut file = File::open("snakes_benchmark.json").expect("Can't open snakes_benchmark.json"); let file_string = &mut "".to_string(); file.read_to_string(file_string).unwrap(); let topology = Topology::from_string(file_string); diff --git a/snakes.json b/snakes_benchmark.json similarity index 100% rename from snakes.json rename to snakes_benchmark.json diff --git a/src/topology/topology.rs b/src/topology/topology.rs index 61b289b..c1937e6 100644 --- a/src/topology/topology.rs +++ b/src/topology/topology.rs @@ -848,17 +848,3 @@ where true } } - -impl<'a, T> Topology -where - T: Float + std::ops::AddAssign + Deserialize<'a> + Serialize + Display, -{ - pub fn from_serde_string(serialized: &'a str) -> Topology { - let new_top: Topology = serde_json::from_str(serialized).unwrap(); - new_top - } - - pub fn to_serde_string(&self) -> String { - serde_json::to_string(&self).unwrap() - } -} From f4a9a2ed9ff56729fc77931ed495617d0c43d2a2 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 28 Aug 2021 23:47:02 +0200 Subject: [PATCH 30/44] Restructured some Snake code --- examples/snake-cli/game.rs | 11 ++++++++--- examples/snake-cli/snake.rs | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index 3f8c3eb..06bae1e 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -62,13 +62,20 @@ impl Game { /// Updates the game. Should be called every tick pub fn tick(&mut self) { let apple_coordinate = self.apple.get_coordinate(); + + // Let each snake make a decision + self.make_decision(); + + // Remove the dead snake so that they can't produce invalid coordinates self.remove_if_dead(); - // And then update it + + // Update every snake let replace_apple = self .snakes .iter_mut() .map(|s| -> bool { s.update(apple_coordinate) }) .any(|b| b); + // Increase all ticks and increase ticks_since_eaten if no apple was replaced self.tick += 1; if replace_apple { self.apple = Apple::generate_apple(); @@ -76,8 +83,6 @@ impl Game { } else { self.ticks_since_eaten += 1; } - // Let each snake make a decision - self.make_decision(); } fn game_over(&self) -> bool { diff --git a/examples/snake-cli/snake.rs b/examples/snake-cli/snake.rs index b7913b4..dc49fd4 100644 --- a/examples/snake-cli/snake.rs +++ b/examples/snake-cli/snake.rs @@ -102,7 +102,7 @@ impl Snake { let head_position = self.get_head_position(); match self.moving_direction { Direction::Up => { - if head_position.y <= 0 { + if head_position.y < 1 { return true; } } @@ -117,7 +117,7 @@ impl Snake { } } Direction::Left => { - if head_position.x <= 0 { + if head_position.x < 1 { return true; } } From 157395efb1cbdc24651f52d32829937bf8690e5b Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 29 Aug 2021 14:37:45 +0200 Subject: [PATCH 31/44] Snake Example simplified and with par_iter --- examples/snake-cli/defs.rs | 2 +- examples/snake-cli/game.rs | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/examples/snake-cli/defs.rs b/examples/snake-cli/defs.rs index 4add713..a6ef15f 100644 --- a/examples/snake-cli/defs.rs +++ b/examples/snake-cli/defs.rs @@ -1,4 +1,4 @@ -pub const RESOLUTION: usize = 100; +pub const RESOLUTION: usize = 20; pub const OUTPUTS: usize = 4; pub const SNAKE_COUNT: usize = 1000; pub const GUI: bool = true; diff --git a/examples/snake-cli/game.rs b/examples/snake-cli/game.rs index 06bae1e..c8eaba9 100644 --- a/examples/snake-cli/game.rs +++ b/examples/snake-cli/game.rs @@ -6,6 +6,8 @@ use crate::{ snake::Snake, utils::{distance_to_apple_x, distance_to_apple_y, distance_to_wall_x, distance_to_wall_y}, }; +use rayon::iter::ParallelIterator; +use rayon::prelude::IntoParallelRefMutIterator; #[derive(Debug)] pub struct Game { @@ -46,16 +48,17 @@ impl Game { /// Make the snakes make their decision pub fn make_decision(&mut self) { - let mut inputs: [f64; 4] = [0., 0., 0., 0.]; let cloned_apple = self.apple; // Let each snake make a decision - self.snakes.iter_mut().for_each(|s| { - // First inputs are the distance to the apple from -1 to 1 - inputs[0] = distance_to_apple_x(s, cloned_apple); - inputs[1] = distance_to_apple_y(s, cloned_apple); - inputs[2] = distance_to_wall_x(s); - inputs[3] = distance_to_wall_y(s); - s.make_decision(&inputs) + self.snakes.par_iter_mut().for_each(|s| { + s.make_decision(&[ + // First inputs are the distance to the apple from -1 to 1 + distance_to_apple_x(s, cloned_apple), + distance_to_apple_y(s, cloned_apple), + // The other inputs are the position in the game from -1 to 1 + distance_to_wall_x(s), + distance_to_wall_y(s), + ]) }); } @@ -72,7 +75,7 @@ impl Game { // Update every snake let replace_apple = self .snakes - .iter_mut() + .par_iter_mut() .map(|s| -> bool { s.update(apple_coordinate) }) .any(|b| b); // Increase all ticks and increase ticks_since_eaten if no apple was replaced From b041c176f984ee93e00c2519307cd2ddb43cbe55 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 29 Aug 2021 14:49:31 +0200 Subject: [PATCH 32/44] Updated dependencies --- Cargo.lock | 12 ++++++------ Cargo.toml | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aee6b25..91a0152 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -588,9 +588,9 @@ checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" [[package]] name = "serde" -version = "1.0.127" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f03b9878abf6d14e6779d3f24f07b2cfa90352cfec4acc5aab8f1ac7f146fae8" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] @@ -607,9 +607,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.127" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a024926d3432516606328597e0f224a51355a493b49fdd67e9209187cbe55ecc" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2", "quote", @@ -618,9 +618,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.66" +version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127" +checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950" dependencies = [ "itoa", "ryu", diff --git a/Cargo.toml b/Cargo.toml index 9fab979..1ae9d59 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,15 +14,15 @@ keywords = ["neat", "ai", "machine-learning", "genetic", "algorithm"] crate-type = ["cdylib", "rlib"] [dependencies] -serde = { version = "1.0.118", features = ["derive", "rc"] } -serde_json = "1.0.60" +serde = { version = "1.0.130", features = ["derive", "rc"] } +serde_json = "1.0.67" num = "0.4.0" -rand = "0.8.0" -rand_distr = "0.4.0" +rand = "0.8.4" +rand_distr = "0.4.1" numeric_literals = "0.2.0" -rayon = "1.5.0" -itertools = "0.10.0" -async-trait = "0.1.50" +rayon = "1.5.1" +itertools = "0.10.1" +async-trait = "0.1.51" [dev-dependencies] criterion = "0.3" From 7b8e69a3a33afaec0912f3dd5438b9ee59103bf5 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 29 Aug 2021 15:45:27 +0200 Subject: [PATCH 33/44] Refactoring --- Cargo.toml | 2 +- examples/example.rs | 2 +- src/train/train.rs | 57 ++++++++++++++++++++++----------------------- 3 files changed, 30 insertions(+), 31 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1ae9d59..b69fe6b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ itertools = "0.10.1" async-trait = "0.1.51" [dev-dependencies] -criterion = "0.3" +criterion = "0.3.5" [[bench]] name = "benchmark" diff --git a/examples/example.rs b/examples/example.rs index b84fe9e..f35a2fc 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -65,7 +65,7 @@ fn compute_score(inputs: &[f64], output: f64) -> f64 { /// Rounds a float to a bool fn round(float: f64) -> bool { - !(float < 0.1) + float >= 0.1 } impl Game for Simulation { diff --git a/src/train/train.rs b/src/train/train.rs index 63c7963..711aa4b 100644 --- a/src/train/train.rs +++ b/src/train/train.rs @@ -397,6 +397,23 @@ where }) } + /// Calculates the mean + fn calculate_mean(&self) -> F { + cond_iter!(self.species_) + .clone() + .map(|spec| spec.lock().unwrap().adjusted_fitness) + .sum::() + / F::from(self.species_.len()).unwrap() + } + + /// Calculates the variance + fn calculate_variance(&self, mean: F) -> F { + cond_iter!(self.species_) + .clone() + .map(|spec| (spec.lock().unwrap().adjusted_fitness - mean).powf(F::from(2.).unwrap())) + .sum::() + / F::from(self.species_.len() - 1).unwrap() + } fn natural_selection(&mut self) { self.species_ .retain(|spec| spec.lock().unwrap().stagnation_counter < 20); @@ -415,16 +432,10 @@ where cond_iter_mut!(self.species_).for_each(|spec| { spec.get_mut().unwrap().compute_adjusted_fitness(); }); - let mean = cond_iter!(self.species_) - .clone() - .map(|spec| spec.lock().unwrap().adjusted_fitness) - .sum::() - / F::from(self.species_.len()).unwrap(); - let variance: F = cond_iter!(self.species_) - .clone() - .map(|spec| (spec.lock().unwrap().adjusted_fitness - mean).powf(F::from(2.).unwrap())) - .sum::() - / F::from(self.species_.len() - 1).unwrap(); + + let mean = self.calculate_mean(); + let variance: F = self.calculate_variance(mean); + if variance >= F::from(0.00001).unwrap() { let volatility = variance.sqrt(); self.species_.iter_mut().for_each(|spec| { @@ -434,7 +445,7 @@ where .powf((spec.adjusted_fitness - mean) / volatility); }); } else { - cond_iter_mut!(self.species_).for_each(|spec| { + self.species_.iter_mut().for_each(|spec| { spec.get_mut().unwrap().adjusted_fitness = F::one(); }); } @@ -462,24 +473,12 @@ where self.ev_number_.reset(); let ev_number = self.ev_number_.clone(); let proba = self.proba.clone(); - #[cfg(any(debug_assertions, target_arch = "wasm32"))] - { - self.species_.iter_mut().for_each(|species| { - species - .get_mut() - .unwrap() - .natural_selection(ev_number.clone(), proba.clone()); - }); - } - #[cfg(all(not(debug_assertions), not(target_arch = "wasm32")))] - { - self.species_.par_iter_mut().for_each(|species| { - species - .get_mut() - .unwrap() - .natural_selection(ev_number.clone(), proba.clone()); - }); - } + cond_iter_mut!(self.species_).for_each(|species| { + species + .get_mut() + .unwrap() + .natural_selection(ev_number.clone(), proba.clone()); + }); let mut species_sizes_vec: Vec<(usize, usize)> = Vec::new(); let mut current_count: (usize, usize) = (0, 0); From 72252be1897db2450c732a2a4eaa635e0aab05ef Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 29 Aug 2021 17:05:28 +0200 Subject: [PATCH 34/44] Refactoring --- src/train/train.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/train/train.rs b/src/train/train.rs index 711aa4b..6d4cc3f 100644 --- a/src/train/train.rs +++ b/src/train/train.rs @@ -414,6 +414,15 @@ where .sum::() / F::from(self.species_.len() - 1).unwrap() } + + /// Gets the species lengths as a string + fn get_species_lengths(&self, species_sizes_vec: Vec<(usize, usize)>) -> String { + species_sizes_vec + .iter() + .map(|(value, count)| format!("{} x {}", count, value)) + .join(" | ") + } + fn natural_selection(&mut self) { self.species_ .retain(|spec| spec.lock().unwrap().stagnation_counter < 20); @@ -494,11 +503,10 @@ where } } species_sizes_vec.push(current_count); - let lengths_str = species_sizes_vec - .iter() - .map(|(value, count)| format!("{} x {}", count, value)) - .join(" | "); - println!("SPECIES LENGTHS: {}", lengths_str); + println!( + "SPECIES LENGTHS: {}", + self.get_species_lengths(species_sizes_vec) + ); } fn push_to_history(&mut self) { From 64d8cf84124d3691f121ce5896caf1a14f1ca7b3 Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 29 Aug 2021 17:12:08 +0200 Subject: [PATCH 35/44] Added wasm32 build to Tests --- .github/workflows/test.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7ae98f3..8e0ba6a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: Rust +name: Tests on: push: @@ -20,3 +20,5 @@ jobs: run: cargo build --verbose - name: Run tests run: cargo test --verbose + - name: Build wasm32 + run: cargo build --target=wasm32-unknown-unknown From 0ef3e2c064d3f4431c28f91e25c8ff7f1f60033c Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 29 Aug 2021 19:34:35 +0200 Subject: [PATCH 36/44] Added wasm32 build to Tests --- .github/workflows/test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8e0ba6a..0e36065 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,6 +16,8 @@ jobs: steps: - uses: actions/checkout@v2 + - name: rust-toolchain + uses: actions-rs/toolchain@v1.0.6 - name: Build run: cargo build --verbose - name: Run tests From 89114e9fd1c263ba4a013ef9660512bab61022dd Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sun, 29 Aug 2021 19:38:41 +0200 Subject: [PATCH 37/44] Fix Github Actions wasm32 build --- .github/workflows/test.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0e36065..6dc12e8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,8 +16,12 @@ jobs: steps: - uses: actions/checkout@v2 - - name: rust-toolchain - uses: actions-rs/toolchain@v1.0.6 + - uses: actions-rs/toolchain@v1.0.6 + with: + toolchain: stable + target: wasm32-unknown-unknown + override: true + profile: minimal - name: Build run: cargo build --verbose - name: Run tests From f834f577e91dbc1c6bb0b6dcde3647d4cac5ef2c Mon Sep 17 00:00:00 2001 From: Nereuxofficial Date: Sat, 11 Sep 2021 13:26:25 +0200 Subject: [PATCH 38/44] Added benchmarks for math functions. --- Cargo.lock | 32 ++++++++++----------- Cargo.toml | 4 +++ benches/benchmark.rs | 1 + benches/math_functions.rs | 58 +++++++++++++++++++++++++++++++++++++++ src/neural_network/mod.rs | 2 +- 5 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 benches/math_functions.rs diff --git a/Cargo.lock b/Cargo.lock index 91a0152..8d82e15 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -233,9 +233,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" [[package]] name = "js-sys" -version = "0.3.53" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4bf49d50e2961077d9c99f4b7997d770a1114f087c3c2e0069b36c13fc2979d" +checksum = "1866b355d9c878e5e607473cbe3f63282c0b7aad2db1dbebf55076c686918254" dependencies = [ "wasm-bindgen", ] @@ -315,9 +315,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +checksum = "74e768dff5fb39a41b3bcd30bb25cf989706c90d028d1ad71971987aa309d535" dependencies = [ "autocfg", "num-integer", @@ -688,9 +688,9 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-bindgen" -version = "0.2.76" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce9b1b516211d33767048e5d47fa2a381ed8b76fc48d2ce4aa39877f9f183e0" +checksum = "5e68338db6becec24d3c7977b5bf8a48be992c934b5d07177e3931f5dc9b076c" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -698,9 +698,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.76" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfe8dc78e2326ba5f845f4b5bf548401604fa20b1dd1d365fb73b6c1d6364041" +checksum = "f34c405b4f0658583dba0c1c7c9b694f3cac32655db463b56c254a1c75269523" dependencies = [ "bumpalo", "lazy_static", @@ -713,9 +713,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.76" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44468aa53335841d9d6b6c023eaab07c0cd4bddbcfdee3e2bb1e8d2cb8069fef" +checksum = "b9d5a6580be83b19dc570a8f9c324251687ab2184e57086f71625feb57ec77c8" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -723,9 +723,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.76" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0195807922713af1e67dc66132c7328206ed9766af3858164fb583eedc25fbad" +checksum = "e3775a030dc6f5a0afd8a84981a21cc92a781eb429acef9ecce476d0c9113e92" dependencies = [ "proc-macro2", "quote", @@ -736,15 +736,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.76" +version = "0.2.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdb075a845574a1fa5f09fd77e43f7747599301ea3417a9fbffdeedfc1f4a29" +checksum = "c279e376c7a8e8752a8f1eaa35b7b0bee6bb9fb0cdacfa97cc3f1f289c87e2b4" [[package]] name = "web-sys" -version = "0.3.53" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224b2f6b67919060055ef1a67807367c2066ed520c3862cc013d26cf893a783c" +checksum = "0a84d70d1ec7d2da2d26a5bd78f4bca1b8c3254805363ce743b7a05bc30d195a" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index b69fe6b..8470940 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,10 @@ criterion = "0.3.5" name = "benchmark" harness = false +[[bench]] +name="math_functions" +harness=false + [target.'cfg(target_arch = "wasm32")'.dependencies] getrandom = { version = "0.2.1", features = ["js"] } diff --git a/benches/benchmark.rs b/benches/benchmark.rs index 29b6e2b..5bb860e 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -15,5 +15,6 @@ fn benchmark(c: &mut Criterion) { b.iter(|| network.compute(black_box(&[0.0, 0.0]))) }); } + criterion_group!(benches, benchmark); criterion_main!(benches); diff --git a/benches/math_functions.rs b/benches/math_functions.rs new file mode 100644 index 0000000..10b3be9 --- /dev/null +++ b/benches/math_functions.rs @@ -0,0 +1,58 @@ +//! Contains benchmarks of the functions stored in neural_network::functions. +use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion, Throughput}; +use neat_gru::neural_network::functions::*; + +extern crate neat_gru; + +fn bench_sigmoid(c: &mut Criterion) { + let size: f32 = 0.3518392; + let mut group = c.benchmark_group("Sigmoid Function"); + for size in [ + size * 0.0, + size, + size * 2.0, + size * 4.0, + size * 6.0, + size * 8.0, + size * 10.0, + size * 12.0, + size * 14.0, + ] + .iter() + { + group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, size| { + b.iter(|| fast_sigmoid(*size)) + }); + } + group.finish(); +} + +fn bench_tanh(c: &mut Criterion) { + let size: f32 = 0.3518392; + let mut group = c.benchmark_group("tanh Function"); + for size in [ + size * 0.0, + size, + size * 2.0, + size * 4.0, + size * 6.0, + size * 8.0, + size * 10.0, + size * 12.0, + size * 14.0, + ] + .iter() + { + group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, size| { + b.iter(|| fast_tanh(*size)) + }); + } + group.finish(); +} + +criterion_group! { + name = benches; + config = Criterion::default(); + targets = bench_tanh, bench_sigmoid, +} +criterion_main!(benches); diff --git a/src/neural_network/mod.rs b/src/neural_network/mod.rs index d03e104..ef26cd3 100644 --- a/src/neural_network/mod.rs +++ b/src/neural_network/mod.rs @@ -1,5 +1,5 @@ mod connection_gru; mod connection_sigmoid; -mod functions; +pub mod functions; mod neuron; pub mod nn; From cf0ab0c79e3dcf4e6762c91ea8bd0eaff67b6262 Mon Sep 17 00:00:00 2001 From: Nereuxofficial <37740907+Nereuxofficial@users.noreply.github.com> Date: Sun, 3 Oct 2021 18:36:08 +0200 Subject: [PATCH 39/44] WIP: Trying out the relu function --- benches/math_functions.rs | 23 +++++++++++++++++++++++ src/neural_network/functions.rs | 5 +++++ src/neural_network/neuron.rs | 10 +++++----- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/benches/math_functions.rs b/benches/math_functions.rs index a162983..1f8d00e 100644 --- a/benches/math_functions.rs +++ b/benches/math_functions.rs @@ -50,6 +50,29 @@ fn bench_tanh(c: &mut Criterion) { group.finish(); } +fn bench_relu(c: &mut Criterion) { + let size: f32 = 0.3518392; + let mut group = c.benchmark_group("relu Function"); + for size in [ + size * 0.0, + size, + size * 2.0, + size * 4.0, + size * 6.0, + size * 8.0, + size * 10.0, + size * 12.0, + size * 14.0, + ] + .iter() + { + group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, size| { + b.iter(|| re_lu(*size)) + }); + } + group.finish(); +} + criterion_group! { name = benches; config = Criterion::default(); diff --git a/src/neural_network/functions.rs b/src/neural_network/functions.rs index 00aa9ba..77660ec 100644 --- a/src/neural_network/functions.rs +++ b/src/neural_network/functions.rs @@ -19,3 +19,8 @@ pub fn fast_tanh(x: T) -> T { let b = 135135 + x2 * (62370 + x2 * (3150 + x2 * 28)); a / b } + +#[inline] +pub fn re_lu(x: T) -> T{ + x.max(T::zero()) +} \ No newline at end of file diff --git a/src/neural_network/neuron.rs b/src/neural_network/neuron.rs index 731d229..bc96948 100644 --- a/src/neural_network/neuron.rs +++ b/src/neural_network/neuron.rs @@ -1,6 +1,6 @@ use crate::neural_network::connection_gru::ConnectionGru; use crate::neural_network::connection_sigmoid::ConnectionSigmoid; -use crate::neural_network::functions::{fast_sigmoid, fast_tanh}; +use crate::neural_network::functions::{fast_sigmoid, fast_tanh, re_lu}; use crate::topology::bias::Bias; use crate::utils::floats_almost_equal; use num::Float; @@ -79,8 +79,8 @@ where #[replace_numeric_literals(T::from(literal).unwrap())] #[inline] pub fn get_value(&mut self) -> T { - let update_gate = fast_sigmoid(self.update); - let reset_gate = fast_sigmoid(self.reset); + let update_gate = re_lu(self.update); + let reset_gate = re_lu(self.reset); let current_memory = fast_tanh(self.input + self.memory * reset_gate); let value = update_gate * self.memory + (1 - update_gate) * current_memory; @@ -91,8 +91,8 @@ where #[replace_numeric_literals(T::from(literal).unwrap())] #[inline] pub fn feed_forward(&mut self) { - let update_gate = fast_sigmoid(self.update); - let reset_gate = fast_sigmoid(self.reset); + let update_gate = re_lu(self.update); + let reset_gate = re_lu(self.reset); let current_memory = self.input + self.memory * reset_gate; let value = update_gate * self.memory + (1 - update_gate) * current_memory; for connection in self.connections_gru.iter_mut() { From db104fd3a95ce9213924ce9731b3caf19c4de77c Mon Sep 17 00:00:00 2001 From: Nereuxofficial <37740907+Nereuxofficial@users.noreply.github.com> Date: Sun, 3 Oct 2021 20:53:36 +0200 Subject: [PATCH 40/44] Extended benchmarks --- benches/math_functions.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/benches/math_functions.rs b/benches/math_functions.rs index 1f8d00e..64e730b 100644 --- a/benches/math_functions.rs +++ b/benches/math_functions.rs @@ -73,9 +73,33 @@ fn bench_relu(c: &mut Criterion) { group.finish(); } +fn comparison(c: &mut Criterion) { + let size: f32 = 0.3518392; + let mut group = c.benchmark_group("relu vs sigmoid"); + for size in [ + size * 0.0, + size, + size * 2.0, + size * 4.0, + size * 6.0, + size * 8.0, + size * 10.0, + size * 12.0, + size * 14.0, + ] + .iter() + { + group.bench_with_input(BenchmarkId::new("Sigmoid", size), size, + |b, size| b.iter(|| fast_sigmoid(*size))); + group.bench_with_input(BenchmarkId::new("Relu", size), size, + |b, size| b.iter(|| fast_sigmoid(*size))); + } + group.finish(); +} + criterion_group! { name = benches; config = Criterion::default(); - targets = bench_tanh, bench_sigmoid, + targets = bench_tanh, bench_sigmoid, bench_relu, comparison } criterion_main!(benches); From 65d97449a20b559186a0952783816cb4030421d4 Mon Sep 17 00:00:00 2001 From: Bene <37740907+Nereuxofficial@users.noreply.github.com> Date: Tue, 22 Nov 2022 11:34:57 +0100 Subject: [PATCH 41/44] Added relu as a feature to the crate --- Cargo.lock | 370 +++++++++++++++++---------- Cargo.toml | 24 +- benches/benchmark.rs | 1 + benches/math_functions.rs | 4 +- examples/example.rs | 9 +- src/neural_network/connection_gru.rs | 4 +- src/neural_network/functions.rs | 15 +- src/neural_network/mod.rs | 3 +- src/neural_network/neuron.rs | 14 +- src/neural_network/nn_trait.rs | 24 ++ src/tests.rs | 5 +- src/topology/topology_struct.rs | 8 +- src/train/training.rs | 10 +- 13 files changed, 319 insertions(+), 172 deletions(-) create mode 100644 src/neural_network/nn_trait.rs diff --git a/Cargo.lock b/Cargo.lock index 5e6cbe2..c34adca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,11 +2,17 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" dependencies = [ "proc-macro2", "quote", @@ -26,9 +32,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "bitflags" @@ -36,18 +42,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] - [[package]] name = "bumpalo" version = "3.8.0" @@ -56,12 +50,9 @@ checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" [[package]] name = "cast" -version = "0.2.7" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" -dependencies = [ - "rustc_version", -] +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cfg-if" @@ -69,28 +60,66 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "ciborium" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" + +[[package]] +name = "ciborium-ll" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +dependencies = [ + "ciborium-io", + "half", +] + [[package]] name = "clap" -version = "2.34.0" +version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ "bitflags", + "clap_lex", + "indexmap", "textwrap", - "unicode-width", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", ] [[package]] name = "criterion" -version = "0.3.5" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" dependencies = [ + "anes", "atty", "cast", + "ciborium", "clap", "criterion-plot", - "csv", "itertools", "lazy_static", "num-traits", @@ -99,7 +128,6 @@ dependencies = [ "rayon", "regex", "serde", - "serde_cbor", "serde_derive", "serde_json", "tinytemplate", @@ -108,9 +136,9 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.4.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", "itertools", @@ -161,38 +189,105 @@ dependencies = [ ] [[package]] -name = "csv" -version = "1.1.6" +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "futures" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" dependencies = [ - "bstr", - "csv-core", - "itoa 0.4.8", - "ryu", - "serde", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "csv-core" -version = "0.1.10" +name = "futures-channel" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" dependencies = [ - "memchr", + "futures-core", + "futures-sink", ] [[package]] -name = "either" -version = "1.6.1" +name = "futures-core" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" + +[[package]] +name = "futures-executor" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" + +[[package]] +name = "futures-macro" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" + +[[package]] +name = "futures-task" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" + +[[package]] +name = "futures-util" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "js-sys", @@ -207,6 +302,12 @@ version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -216,6 +317,16 @@ dependencies = [ "libc", ] +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "itertools" version = "0.10.3" @@ -225,12 +336,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.1" @@ -254,9 +359,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.112" +version = "0.2.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" +checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" [[package]] name = "libm" @@ -290,10 +395,11 @@ dependencies = [ [[package]] name = "neat-gru" -version = "1.1.0" +version = "1.1.1" dependencies = [ "async-trait", "criterion", + "futures", "getrandom", "itertools", "num", @@ -303,6 +409,7 @@ dependencies = [ "rayon", "serde", "serde_json", + "tokio", ] [[package]] @@ -408,6 +515,24 @@ version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +[[package]] +name = "os_str_bytes" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "plotters" version = "0.3.1" @@ -444,11 +569,11 @@ checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" [[package]] name = "proc-macro2" -version = "1.0.34" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f84e92c0f7c9d58328b85a78557813e4bd845130db68d7184635344399423b1" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -462,14 +587,13 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", - "rand_hc", ] [[package]] @@ -493,30 +617,20 @@ dependencies = [ [[package]] name = "rand_distr" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964d548f8e7d12e102ef183a0de7e98180c9f8729f555897a857b96e48122d2f" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", "rand", ] -[[package]] -name = "rand_hc" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" -dependencies = [ - "rand_core", -] - [[package]] name = "rayon" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b" dependencies = [ - "autocfg", "crossbeam-deque", "either", "rayon-core", @@ -524,14 +638,13 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.1" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", "num_cpus", ] @@ -544,27 +657,12 @@ dependencies = [ "regex-syntax", ] -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" - [[package]] name = "regex-syntax" version = "0.6.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - [[package]] name = "ryu" version = "1.0.9" @@ -586,36 +684,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "semver" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" - [[package]] name = "serde" -version = "1.0.132" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9875c23cf305cd1fd7eb77234cbb705f21ea6a72c637a5c6db5fe4b8e7f008" +checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" dependencies = [ "serde_derive", ] -[[package]] -name = "serde_cbor" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" -dependencies = [ - "half", - "serde", -] - [[package]] name = "serde_derive" -version = "1.0.132" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc0db5cb2556c0e558887d9bbdcf6ac4471e83ff66cf696e5419024d1606276" +checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" dependencies = [ "proc-macro2", "quote", @@ -624,34 +706,40 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.73" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcbd0344bc6533bc7ec56df11d42fb70f1b912351c0825ccb7211b59d8af7cf5" +checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" dependencies = [ - "itoa 1.0.1", + "itoa", "ryu", "serde", ] +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + [[package]] name = "syn" -version = "1.0.83" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1dfb999630e338648c83e91c59a4e9fb7620f520c3194b6b89e276f2f1959" +checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] name = "textwrap" -version = "0.11.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "tinytemplate" @@ -664,16 +752,32 @@ dependencies = [ ] [[package]] -name = "unicode-width" -version = "0.1.9" +name = "tokio" +version = "1.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3" +dependencies = [ + "autocfg", + "pin-project-lite", + "tokio-macros", +] + +[[package]] +name = "tokio-macros" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "unicode-xid" -version = "0.2.2" +name = "unicode-ident" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "walkdir" @@ -688,9 +792,9 @@ dependencies = [ [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" diff --git a/Cargo.toml b/Cargo.toml index 1f883f8..b77462f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "neat-gru" -version = "1.1.0" +version = "1.1.1" authors = ["sakex "] edition = "2018" description = "NEAT algorithm with GRU gates" @@ -9,23 +9,29 @@ repository = "https://github.com/sakex/neat-gru-rust" categories = ["science", "wasm"] keywords = ["neat", "ai", "machine-learning", "genetic", "algorithm"] +[features] +default = [] +snn = ["tokio", "futures"] +relu = [] [lib] crate-type = ["cdylib", "rlib"] [dependencies] -serde = { version = "1.0.130", features = ["derive", "rc"] } -serde_json = "1.0.67" +serde = { version = "1.0.143", features = ["derive", "rc"] } +serde_json = "1.0.83" num = "0.4.0" -rand = "0.8.4" -rand_distr = "0.4.1" +rand = "0.8.5" +rand_distr = "0.4.3" numeric_literals = "0.2.0" -rayon = "1.5.1" +rayon = "1.5.3" itertools = "0.10.1" -async-trait = "0.1.51" +async-trait = "0.1.57" +futures = { version = "0.3.23", optional = true } +tokio = { version = "1.20", optional = true, features = ["sync", "rt", "macros", "time"] } [dev-dependencies] -criterion = "0.3.5" +criterion = "0.4.0" [[bench]] name = "benchmark" @@ -36,7 +42,7 @@ name="math_functions" harness=false [target.'cfg(target_arch = "wasm32")'.dependencies] -getrandom = { version = "0.2.1", features = ["js"] } +getrandom = { version = "0.2.7", features = ["js"] } [profile.release] # Link time optimisation, possibly even with C++, equivalent to G++'s -flto diff --git a/benches/benchmark.rs b/benches/benchmark.rs index ec74837..f169bd4 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -1,6 +1,7 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; extern crate neat_gru; use neat_gru::neural_network::nn::NeuralNetwork; +use neat_gru::neural_network::nn_trait::NN; use neat_gru::topology::Topology; use std::fs::File; use std::io::Read; diff --git a/benches/math_functions.rs b/benches/math_functions.rs index 64e730b..540d44a 100644 --- a/benches/math_functions.rs +++ b/benches/math_functions.rs @@ -92,7 +92,9 @@ fn comparison(c: &mut Criterion) { group.bench_with_input(BenchmarkId::new("Sigmoid", size), size, |b, size| b.iter(|| fast_sigmoid(*size))); group.bench_with_input(BenchmarkId::new("Relu", size), size, - |b, size| b.iter(|| fast_sigmoid(*size))); + |b, size| b.iter(|| re_lu(*size))); + group.bench_with_input(BenchmarkId::new("Tanh", size), size, + |b, size| b.iter(|| fast_tanh(*size))); } group.finish(); } diff --git a/examples/example.rs b/examples/example.rs index 645f293..91b8a06 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -21,10 +21,11 @@ impl Player { let inputs = XOR::get_inputs(); // Calculate a score for every input let outputs: Vec = inputs.iter().map(|i| self.net.compute(i)[0]).collect(); - let mut scores: Vec = vec![]; - for (input, output) in inputs.iter().zip(outputs.iter()) { - scores.push(compute_score(input, *output)); - } + let scores = inputs + .iter() + .zip(outputs.iter()) + .map(|(input, output)| compute_score(input, *output)) + .collect::>(); // And return the sum of the scores scores.iter().sum() } diff --git a/src/neural_network/connection_gru.rs b/src/neural_network/connection_gru.rs index bdfe047..9b4a365 100644 --- a/src/neural_network/connection_gru.rs +++ b/src/neural_network/connection_gru.rs @@ -1,4 +1,4 @@ -use crate::neural_network::functions::fast_tanh; +use crate::neural_network::functions::activate; use crate::neural_network::neuron::Neuron; use crate::utils::floats_almost_equal; use num::Float; @@ -70,7 +70,7 @@ where #[inline] pub(crate) fn activate(&mut self, value: T) { let prev_reset = unsafe { (*self.output).prev_reset }; - self.memory = fast_tanh( + self.memory = activate( self.prev_input * self.input_weight + self.memory_weight * prev_reset * self.memory, ); self.prev_input = value; diff --git a/src/neural_network/functions.rs b/src/neural_network/functions.rs index 77660ec..2ead6f9 100644 --- a/src/neural_network/functions.rs +++ b/src/neural_network/functions.rs @@ -1,14 +1,23 @@ use num::Float; use numeric_literals::replace_numeric_literals; +#[inline(always)] +#[cfg(feature = "relu")] +pub fn activate(value: T) -> T { + re_lu(value) +} +#[cfg(not(feature = "relu"))] +pub fn activate(value: T) -> T { + fast_tanh(value) +} +#[inline(always)] #[replace_numeric_literals(T::from(literal).unwrap())] -#[inline] pub fn fast_sigmoid(value: T) -> T { value / (1 + value.abs()) } +#[inline(always)] #[replace_numeric_literals(T::from(literal).unwrap())] -#[inline] pub fn fast_tanh(x: T) -> T { if x.abs() >= 4.97 { let values = [-1, 1]; @@ -20,7 +29,7 @@ pub fn fast_tanh(x: T) -> T { a / b } -#[inline] +#[inline(always)] pub fn re_lu(x: T) -> T{ x.max(T::zero()) } \ No newline at end of file diff --git a/src/neural_network/mod.rs b/src/neural_network/mod.rs index 8e37ba2..35adce0 100644 --- a/src/neural_network/mod.rs +++ b/src/neural_network/mod.rs @@ -3,6 +3,7 @@ mod connection_relu; mod connection_sigmoid; pub mod functions; mod neuron; -mod nn; +pub mod nn; +pub mod nn_trait; pub use nn::*; diff --git a/src/neural_network/neuron.rs b/src/neural_network/neuron.rs index 64480f7..3ac6d91 100644 --- a/src/neural_network/neuron.rs +++ b/src/neural_network/neuron.rs @@ -1,7 +1,7 @@ use crate::neural_network::connection_gru::ConnectionGru; use crate::neural_network::connection_relu::ConnectionRelu; use crate::neural_network::connection_sigmoid::ConnectionSigmoid; -use crate::neural_network::functions::{fast_sigmoid, fast_tanh, re_lu}; +use crate::neural_network::functions::activate; use crate::topology::bias::Bias; use crate::utils::floats_almost_equal; use num::Float; @@ -95,20 +95,20 @@ where #[replace_numeric_literals(T::from(literal).unwrap())] #[inline] pub fn get_value(&mut self) -> T { - let update_gate = re_lu(self.update); - let reset_gate = re_lu(self.reset); - let current_memory = fast_tanh(self.input + self.memory * reset_gate); + let update_gate = activate(self.update); + let reset_gate = activate(self.reset); + let current_memory = activate(self.input + self.memory * reset_gate); let value = update_gate * self.memory + (1 - update_gate) * current_memory; self.prev_reset = reset_gate; - fast_tanh(value) + activate(value) } #[replace_numeric_literals(T::from(literal).unwrap())] #[inline] pub fn feed_forward(&mut self) { - let update_gate = re_lu(self.update); - let reset_gate = re_lu(self.reset); + let update_gate = activate(self.update); + let reset_gate = activate(self.reset); let current_memory = self.input + self.memory * reset_gate; let value = update_gate * self.memory + (1 - update_gate) * current_memory; for connection in self.connections_gru.iter_mut() { diff --git a/src/neural_network/nn_trait.rs b/src/neural_network/nn_trait.rs new file mode 100644 index 0000000..5e8e322 --- /dev/null +++ b/src/neural_network/nn_trait.rs @@ -0,0 +1,24 @@ +use std::fmt::Display; + +use num::Float; + +use crate::topology::Topology; + +pub trait NN: Sized +where + T: Float + std::ops::AddAssign + Display + Send, +{ + /// Instantiates a new Neural Network from a `Topology` + /// + /// # Safety + /// + /// If the Topology is ill-formed, it will result in pointer overflow. + /// Topologies generated by this crate are guaranteed to be safe. + unsafe fn from_topology(topology: &Topology) -> Self; + + /// Deserializes a serde serialized Topology into a neural network + fn from_string(serialized: &str) -> Self { + let top = Topology::from_string(serialized); + unsafe { Self::from_topology(&top) } + } +} diff --git a/src/tests.rs b/src/tests.rs index 9eb0b41..bec927e 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,3 +1,4 @@ +use crate::neural_network::nn_trait::NN; use crate::neural_network::NeuralNetwork; use crate::topology::mutation_probabilities::MutationProbabilities; use crate::topology::Topology; @@ -116,7 +117,7 @@ impl Game for TestGame { println!("{:?}, {:?}", top.layers_sizes, top2.layers_sizes); println!("{}", as_str); section!(); - println!("{}", top2.to_string()); + println!("{}", top2); panic!("Network != Network from string"); } self.nets = vec![network, network_from_string]; @@ -203,7 +204,7 @@ impl Game for MemoryCount { if network != network_from_string { println!("{}", as_str); section!(); - println!("{}", top2.to_string()); + println!("{}", top2); panic!("Network != Network from string"); } self.nets = vec![network, network_from_string]; diff --git a/src/topology/topology_struct.rs b/src/topology/topology_struct.rs index 84b105d..d3f0616 100644 --- a/src/topology/topology_struct.rs +++ b/src/topology/topology_struct.rs @@ -41,7 +41,7 @@ unsafe impl Send for Topology where T: Float + std::ops::AddAssign + Displ unsafe impl Sync for Topology where T: Float + std::ops::AddAssign + Display + Send {} -impl<'a, T> Clone for Topology +impl Clone for Topology where T: Float + std::ops::AddAssign + Display + Send, { @@ -98,7 +98,7 @@ where } } -impl<'a, T> Topology +impl Topology where T: Float + std::ops::AddAssign + Display + Send, { @@ -729,7 +729,7 @@ where } } -impl<'a, T> Display for Topology +impl Display for Topology where T: Float + std::ops::AddAssign + Display + Send, { @@ -783,7 +783,7 @@ where } } -impl<'a, T> PartialEq for Topology +impl PartialEq for Topology where T: Float + std::ops::AddAssign + Display + Send, { diff --git a/src/train/training.rs b/src/train/training.rs index ff410fd..0169d7d 100644 --- a/src/train/training.rs +++ b/src/train/training.rs @@ -370,7 +370,7 @@ where self.run_iterations(); section!(); println!("POST TRAINING"); - self.simulation.post_training(&*self.history_); + self.simulation.post_training(&self.history_); Ok(()) } @@ -585,10 +585,8 @@ where spec1 .adjusted_fitness .partial_cmp(&spec2.adjusted_fitness) - .expect(&*format!( - "First: {}, second: {}, variance {}", - spec1.adjusted_fitness, spec2.adjusted_fitness, variance - )) + .unwrap_or_else(|| panic!("First: {}, second: {}, variance {}", + spec1.adjusted_fitness, spec2.adjusted_fitness, variance)) } }); } @@ -693,7 +691,7 @@ where } } println!("POST TRAINING"); - self.simulation.post_training(&*self.history_); + self.simulation.post_training(&self.history_); Ok(()) } } From 04c52e8499ac516b64418ba4b0977f33bc338128 Mon Sep 17 00:00:00 2001 From: Bene <37740907+Nereuxofficial@users.noreply.github.com> Date: Tue, 22 Nov 2022 11:49:24 +0100 Subject: [PATCH 42/44] Fixed merge conflicts --- Cargo.lock | 300 ++++++++++++++------------------------------------- Cargo.toml | 1 - src/tests.rs | 1 - 3 files changed, 78 insertions(+), 224 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8a33bcd..25712b5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -44,9 +44,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bumpalo" -version = "3.8.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" +checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" [[package]] name = "cast" @@ -146,9 +146,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.1" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", "crossbeam-utils", @@ -156,9 +156,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -167,121 +167,31 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.5" +version = "0.9.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" +checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" dependencies = [ + "autocfg", "cfg-if", "crossbeam-utils", - "lazy_static", "memoffset", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.5" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" dependencies = [ "cfg-if", - "lazy_static", ] [[package]] name = "either" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" - -[[package]] -name = "futures" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" - -[[package]] -name = "futures-executor" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" - -[[package]] -name = "futures-macro" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" - -[[package]] -name = "futures-task" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" - -[[package]] -name = "futures-util" -version = "0.3.25" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "fuchsia-cprng" @@ -335,24 +245,24 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" [[package]] name = "js-sys" -version = "0.3.55" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] @@ -371,9 +281,9 @@ checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" [[package]] name = "libm" -version = "0.2.1" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "log" @@ -384,34 +294,27 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "memchr" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - [[package]] name = "memoffset" -version = "0.6.5" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ "autocfg", ] [[package]] name = "neat-gru" -version = "1.1.1" +version = "1.4.0" dependencies = [ "async-trait", "criterion", - "futures", "getrandom", "itertools", "log", "num", "numeric_literals", - "rand 0.8.4", + "rand 0.8.5", "rand_distr", "rayon", "serde", @@ -446,18 +349,18 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26873667bbbb7c5182d4a37c1add32cdf09f841af72da53318fdb81543c15085" +checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" dependencies = [ "num-traits", ] [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -465,9 +368,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg", "num-integer", @@ -476,9 +379,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", "num-bigint", @@ -488,9 +391,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", "libm", @@ -498,9 +401,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" dependencies = [ "hermit-abi", "libc", @@ -516,6 +419,12 @@ dependencies = [ "syn", ] +[[package]] +name = "once_cell" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" + [[package]] name = "oorandom" version = "11.1.3" @@ -528,23 +437,11 @@ version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "plotters" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a" +checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" dependencies = [ "num-traits", "plotters-backend", @@ -555,24 +452,24 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c" +checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" [[package]] name = "plotters-svg" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" dependencies = [ "plotters-backend", ] [[package]] name = "ppv-lite86" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" @@ -585,9 +482,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.10" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -607,14 +504,13 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", - "rand_core 0.6.3", - "rand_hc", + "rand_core 0.6.4", ] [[package]] @@ -624,7 +520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", + "rand_core 0.6.4", ] [[package]] @@ -644,9 +540,9 @@ checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] @@ -658,7 +554,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" dependencies = [ "num-traits", - "rand 0.8.4", + "rand 0.8.5", ] [[package]] @@ -695,18 +591,18 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.4" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" dependencies = [ "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "remove_dir_all" @@ -717,20 +613,11 @@ dependencies = [ "winapi", ] -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" [[package]] name = "same-file" @@ -778,15 +665,6 @@ dependencies = [ "serde", ] -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - [[package]] name = "syn" version = "1.0.103" @@ -824,28 +702,6 @@ dependencies = [ "serde_json", ] -[[package]] -name = "tokio" -version = "1.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3" -dependencies = [ - "autocfg", - "pin-project-lite", - "tokio-macros", -] - -[[package]] -name = "tokio-macros" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "unicode-ident" version = "1.0.5" @@ -871,9 +727,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -881,13 +737,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -896,9 +752,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -906,9 +762,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -919,15 +775,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.78" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "web-sys" -version = "0.3.55" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index 70fc9e5..fd23514 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,6 @@ keywords = ["neat", "ai", "machine-learning", "genetic", "algorithm"] [features] default = [] -snn = ["tokio", "futures"] relu = [] [lib] diff --git a/src/tests.rs b/src/tests.rs index 9afebe5..3d4004f 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,4 +1,3 @@ -use crate::neural_network::nn_trait::NN; use crate::neural_network::NeuralNetwork; use crate::topology::mutation_probabilities::MutationProbabilities; use crate::topology::Topology; From 6625c8e0927265c686c65fcf7358c59164a3176f Mon Sep 17 00:00:00 2001 From: Bene <37740907+Nereuxofficial@users.noreply.github.com> Date: Thu, 1 Dec 2022 16:56:37 +0100 Subject: [PATCH 43/44] PR Changes --- Cargo.toml | 4 +- benches/benchmark.rs | 1 - benches/math_functions.rs | 98 +++++++++------------------------ examples/example.rs | 7 +-- src/neural_network/functions.rs | 9 ++- src/neural_network/mod.rs | 2 +- 6 files changed, 40 insertions(+), 81 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index fd23514..30a366c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,8 +10,10 @@ categories = ["science", "wasm"] keywords = ["neat", "ai", "machine-learning", "genetic", "algorithm"] [features] -default = [] +default = ["tanh"] relu = [] +sigmoid = [] +tanh = [] [lib] crate-type = ["cdylib", "rlib"] diff --git a/benches/benchmark.rs b/benches/benchmark.rs index f169bd4..ec74837 100644 --- a/benches/benchmark.rs +++ b/benches/benchmark.rs @@ -1,7 +1,6 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; extern crate neat_gru; use neat_gru::neural_network::nn::NeuralNetwork; -use neat_gru::neural_network::nn_trait::NN; use neat_gru::topology::Topology; use std::fs::File; use std::io::Read; diff --git a/benches/math_functions.rs b/benches/math_functions.rs index 540d44a..9e11598 100644 --- a/benches/math_functions.rs +++ b/benches/math_functions.rs @@ -3,99 +3,51 @@ use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; use neat_gru::neural_network::functions::*; extern crate neat_gru; - -fn bench_sigmoid(c: &mut Criterion) { +fn input_data() -> impl IntoIterator{ let size: f32 = 0.3518392; + (0..20).map(move |i| size * i as f32) +} +fn bench_sigmoid(c: &mut Criterion) { let mut group = c.benchmark_group("Sigmoid Function"); - for size in [ - size * 0.0, - size, - size * 2.0, - size * 4.0, - size * 6.0, - size * 8.0, - size * 10.0, - size * 12.0, - size * 14.0, - ] - .iter() - { - group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, size| { + input_data().into_iter().for_each(|s|{ + group.bench_with_input(BenchmarkId::from_parameter(s), &s, |b, size| { b.iter(|| fast_sigmoid(*size)) }); - } + }); group.finish(); } fn bench_tanh(c: &mut Criterion) { - let size: f32 = 0.3518392; - let mut group = c.benchmark_group("tanh Function"); - for size in [ - size * 0.0, - size, - size * 2.0, - size * 4.0, - size * 6.0, - size * 8.0, - size * 10.0, - size * 12.0, - size * 14.0, - ] - .iter() - { - group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, size| { - b.iter(|| fast_tanh(*size)) + let mut group = c.benchmark_group("Tanh Function"); + input_data().into_iter().for_each(|s|{ + group.bench_with_input(BenchmarkId::from_parameter(s), &s, |b, s| { + b.iter(|| fast_tanh(*s)) }); - } + }); group.finish(); } fn bench_relu(c: &mut Criterion) { - let size: f32 = 0.3518392; - let mut group = c.benchmark_group("relu Function"); - for size in [ - size * 0.0, - size, - size * 2.0, - size * 4.0, - size * 6.0, - size * 8.0, - size * 10.0, - size * 12.0, - size * 14.0, - ] - .iter() - { - group.bench_with_input(BenchmarkId::from_parameter(size), size, |b, size| { - b.iter(|| re_lu(*size)) + let mut group = c.benchmark_group("Relu Function"); + input_data().into_iter().for_each(|s|{ + group.bench_with_input(BenchmarkId::from_parameter(s), &s, |b, s| { + b.iter(|| re_lu(*s)) }); - } + }); group.finish(); } fn comparison(c: &mut Criterion) { - let size: f32 = 0.3518392; - let mut group = c.benchmark_group("relu vs sigmoid"); - for size in [ - size * 0.0, - size, - size * 2.0, - size * 4.0, - size * 6.0, - size * 8.0, - size * 10.0, - size * 12.0, - size * 14.0, - ] - .iter() + let mut group = c.benchmark_group("Relu vs Sigmoid"); + input_data().into_iter().for_each(|s| { - group.bench_with_input(BenchmarkId::new("Sigmoid", size), size, + group.bench_with_input(BenchmarkId::new("Sigmoid", s), &s, |b, size| b.iter(|| fast_sigmoid(*size))); - group.bench_with_input(BenchmarkId::new("Relu", size), size, - |b, size| b.iter(|| re_lu(*size))); - group.bench_with_input(BenchmarkId::new("Tanh", size), size, - |b, size| b.iter(|| fast_tanh(*size))); - } + group.bench_with_input(BenchmarkId::new("Relu", s), &s, + |b, s| b.iter(|| re_lu(*s))); + group.bench_with_input(BenchmarkId::new("Tanh", s), &s, + |b, s| b.iter(|| fast_tanh(*s))); + }); group.finish(); } diff --git a/examples/example.rs b/examples/example.rs index f6923b8..ee1a801 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -20,13 +20,12 @@ impl Player { let inputs = Xor::get_inputs(); // Calculate a score for every input let outputs: Vec = inputs.iter().map(|i| self.net.compute(i)[0]).collect(); - let scores = inputs + // Return the sum of the scores + inputs .iter() .zip(outputs.iter()) .map(|(input, output)| compute_score(input, *output)) - .collect::>(); - // And return the sum of the scores - scores.iter().sum() + .sum() } } diff --git a/src/neural_network/functions.rs b/src/neural_network/functions.rs index 2ead6f9..48d4389 100644 --- a/src/neural_network/functions.rs +++ b/src/neural_network/functions.rs @@ -1,14 +1,21 @@ use num::Float; use numeric_literals::replace_numeric_literals; + #[inline(always)] #[cfg(feature = "relu")] pub fn activate(value: T) -> T { re_lu(value) } -#[cfg(not(feature = "relu"))] +#[cfg((feature = "tanh"))] +#[inline(always)] pub fn activate(value: T) -> T { fast_tanh(value) } +#[cfg((feature = "sigmoid"))] +#[inline(always)] +pub fn activate(value: T) -> T { + fast_sigmoid(value) +} #[inline(always)] #[replace_numeric_literals(T::from(literal).unwrap())] diff --git a/src/neural_network/mod.rs b/src/neural_network/mod.rs index 35adce0..d4ccae6 100644 --- a/src/neural_network/mod.rs +++ b/src/neural_network/mod.rs @@ -1,7 +1,7 @@ mod connection_gru; mod connection_relu; mod connection_sigmoid; -pub mod functions; +pub(crate) mod functions; mod neuron; pub mod nn; pub mod nn_trait; From a2fe01e8a133f66fe382a1a3065de4db29a46129 Mon Sep 17 00:00:00 2001 From: Bene <37740907+Nereuxofficial@users.noreply.github.com> Date: Sun, 11 Dec 2022 12:02:52 +0100 Subject: [PATCH 44/44] Fixed build errors --- src/neural_network/functions.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/neural_network/functions.rs b/src/neural_network/functions.rs index 48d4389..c077ed1 100644 --- a/src/neural_network/functions.rs +++ b/src/neural_network/functions.rs @@ -6,12 +6,12 @@ use numeric_literals::replace_numeric_literals; pub fn activate(value: T) -> T { re_lu(value) } -#[cfg((feature = "tanh"))] +#[cfg(feature = "tanh")] #[inline(always)] pub fn activate(value: T) -> T { fast_tanh(value) } -#[cfg((feature = "sigmoid"))] +#[cfg(feature = "sigmoid")] #[inline(always)] pub fn activate(value: T) -> T { fast_sigmoid(value) @@ -37,6 +37,6 @@ pub fn fast_tanh(x: T) -> T { } #[inline(always)] -pub fn re_lu(x: T) -> T{ +pub fn re_lu(x: T) -> T { x.max(T::zero()) -} \ No newline at end of file +}