diff --git a/Cargo.lock b/Cargo.lock index d14ce5c..d3f101b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,18 +1,18 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" -version = "0.8.6" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "getrandom", @@ -31,12 +31,24 @@ dependencies = [ ] [[package]] -name = "ansi_term" -version = "0.12.1" +name = "allocator-api2" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "winapi", + "libc", ] [[package]] @@ -74,7 +86,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -84,7 +96,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -108,26 +120,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c07dab4369547dbe5114677b33fbbf724971019f3818172d59a97a61c774ffd" -[[package]] -name = "atomic-polyfill" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28" -dependencies = [ - "critical-section", -] - -[[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.1.0" @@ -136,56 +128,36 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "autotools" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8da1805e028a172334c3b680f93e71126f2327622faef2ec3d893c0a4ad77" +checksum = "ef941527c41b0fc0dd48511a8154cd5fc7e29200a0ff8b7203c5d777dbc795cf" dependencies = [ "cc", ] [[package]] name = "bindgen" -version = "0.65.1" +version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.0", "cexpr", "clang-sys", + "itertools 0.10.5", "lazy_static", "lazycell", "log", - "peeking_take_while", "prettyplease 0.2.15", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", - "syn 2.0.37", + "syn 2.0.87", "which", ] -[[package]] -name = "bindgen" -version = "0.66.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" -dependencies = [ - "bitflags 2.4.0", - "cexpr", - "clang-sys", - "lazy_static", - "lazycell", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn 2.0.37", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -200,13 +172,20 @@ checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "build-probe-mpi" -version = "0.1.2" -source = "git+https://github.com/rsmpi/rsmpi?rev=1622101c9fc3a78620e9649f7f895616289d3558#1622101c9fc3a78620e9649f7f895616289d3558" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3234fa6de2f6e0e338c7183ba09ae68c8f2bd6919d8763362597627362b7f8fe" dependencies = [ "pkg-config", "shell-words", ] +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + [[package]] name = "byteorder" version = "1.5.0" @@ -221,10 +200,11 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cc" -version = "1.0.83" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "e9e8aabfac534be767c909e0690571677d49f41bd8465ae876fe043d52ba5292" dependencies = [ + "jobserver", "libc", ] @@ -243,6 +223,18 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.6", +] + [[package]] name = "clang-sys" version = "1.6.1" @@ -285,7 +277,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.87", ] [[package]] @@ -309,6 +301,12 @@ dependencies = [ "custom_derive", ] +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "crc32fast" version = "1.3.2" @@ -318,12 +316,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "critical-section" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" - [[package]] name = "crossbeam-channel" version = "0.5.8" @@ -334,6 +326,25 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-queue" version = "0.3.8" @@ -346,12 +357,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "custom_derive" @@ -359,26 +367,13 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.1", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "earcutr" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0812b44697951d35fde8fcb0da81c9de7e809e825a66bbf1ecb79d9829d4ca3d" dependencies = [ - "itertools", + "itertools 0.10.5", "num-traits", ] @@ -396,11 +391,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "erased-serde" -version = "0.3.31" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" dependencies = [ "serde", + "typeid", ] [[package]] @@ -411,7 +407,7 @@ checksum = "add4f07d43996f76ef320709726a556a9d4f965d9410d8d0271132d2f8293480" dependencies = [ "errno-dragonfly", "libc", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -438,9 +434,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.27" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide", @@ -448,21 +444,17 @@ dependencies = [ [[package]] name = "flexi_logger" -version = "0.22.6" +version = "0.29.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c76a80dd14a27fc3d8bc696502132cb52b3f227256fd8601166c3a35e45f409" +checksum = "d26948e37cfcb1f2c2cd38e0602d3a8ab6b9472c0c6eff4516fc8def9a3124d7" dependencies = [ - "ansi_term", - "atty", + "chrono", "crossbeam-channel", "crossbeam-queue", - "glob", - "lazy_static", "log", + "nu-ansi-term 0.50.1", "regex", - "rustversion", "thiserror", - "time", ] [[package]] @@ -550,25 +542,27 @@ dependencies = [ [[package]] name = "geo" -version = "0.26.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1645cf1d7fea7dac1a66f7357f3df2677ada708b8d9db8e9b043878930095a96" +checksum = "8798f09c0fb3625cf216569408e151a1884c3a028a0b533b7c223ae8f695c89a" dependencies = [ "earcutr", "float_next_after", "geo-types", "geographiclib-rs", + "i_overlay", "log", "num-traits", "robust", "rstar", + "spade", ] [[package]] name = "geo-types" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9705398c5c7b26132e74513f4ee7c1d7dafd786004991b375c172be2be0eecaa" +checksum = "9ff16065e5720f376fbced200a5ae0f47ace85fd70b7e54269790281353b6d61" dependencies = [ "approx", "num-traits", @@ -604,9 +598,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "hash32" -version = "0.2.1" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" dependencies = [ "byteorder", ] @@ -619,20 +613,21 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.1" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] [[package]] name = "heapless" -version = "0.7.16" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" dependencies = [ - "atomic-polyfill", "hash32", - "rustc_version", - "spin", "stable_deref_trait", ] @@ -643,21 +638,79 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "home" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" dependencies = [ - "libc", + "windows-sys 0.48.0", ] [[package]] -name = "home" -version = "0.5.5" +name = "i_float" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "b3123eb991f76125b7c1a9e789f41b8daf9176cf24f305a661f92ed997c4d296" dependencies = [ - "windows-sys", + "serde", +] + +[[package]] +name = "i_key_sort" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "347c253b4748a1a28baf94c9ce133b6b166f08573157e05afe718812bc599fcd" + +[[package]] +name = "i_overlay" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c4c8ebcefa2dc35059e35876d77aa9820aff3f3cfc38cc4be8316e458f62b23" +dependencies = [ + "i_float", + "i_key_sort", + "i_shape", + "i_tree", + "rayon", +] + +[[package]] +name = "i_shape" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be74a9b2c283db7cfd364aabd45b3db3d789d740cb6005f297736413d857f98" +dependencies = [ + "i_float", + "serde", +] + +[[package]] +name = "i_tree" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "155181bc97d770181cf9477da51218a19ee92a8e5be642e796661aee2b601139" + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", ] [[package]] @@ -677,7 +730,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" dependencies = [ "equivalent", - "hashbrown 0.14.1", + "hashbrown 0.14.5", ] [[package]] @@ -695,12 +748,39 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "keyed_priority_queue" version = "0.4.1" @@ -800,31 +880,22 @@ version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - [[package]] name = "metis" -version = "0.1.2" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62d65169fd55c134e5498444453fe968349421e7248e4d6547c6846e0082c397" +checksum = "3653658399c092e0912b25c591e9dc89bae5c1db377b85c52011991f8b628ceb" dependencies = [ "metis-sys", ] [[package]] name = "metis-sys" -version = "0.2.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc898b11f9da2e428afa54b5f092dac7edd3f87281084d789b9a9a15b6f81853" +checksum = "769ee6be814b21c52afcc631f07051f578487d642f3e89a45f2a086fd94fffa9" dependencies = [ - "bindgen 0.66.1", + "cc", ] [[package]] @@ -835,22 +906,22 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mpi" -version = "0.6.0" -source = "git+https://github.com/rsmpi/rsmpi?rev=1622101c9fc3a78620e9649f7f895616289d3558#1622101c9fc3a78620e9649f7f895616289d3558" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677762a4bde2c81158fc566a69b97d11b0c3358694e64f4f922ac5189be311cc" dependencies = [ "build-probe-mpi", "conv", "libffi", - "memoffset", "mpi-sys", "once_cell", "smallvec", @@ -859,10 +930,11 @@ dependencies = [ [[package]] name = "mpi-sys" -version = "0.2.0" -source = "git+https://github.com/rsmpi/rsmpi?rev=1622101c9fc3a78620e9649f7f895616289d3558#1622101c9fc3a78620e9649f7f895616289d3558" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f35fdd7bdb38959515f008d12598065631de9624f6d42c11caef19e8e0d10de" dependencies = [ - "bindgen 0.65.1", + "bindgen", "build-probe-mpi", "cc", ] @@ -899,6 +971,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "num-traits" version = "0.2.17" @@ -920,9 +1001,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "overload" @@ -950,15 +1031,9 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.48.5", ] -[[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" - [[package]] name = "petgraph" version = "0.6.4" @@ -983,9 +1058,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "ppv-lite86" @@ -1010,14 +1085,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.37", + "syn 2.0.87", ] [[package]] name = "proc-macro2" -version = "1.0.67" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -1029,7 +1104,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.11.9", +] + +[[package]] +name = "prost" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +dependencies = [ + "bytes", + "prost-derive 0.13.3", ] [[package]] @@ -1040,13 +1125,13 @@ checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" dependencies = [ "bytes", "heck", - "itertools", + "itertools 0.10.5", "lazy_static", "log", "multimap", "petgraph", "prettyplease 0.1.25", - "prost", + "prost 0.11.9", "prost-types", "regex", "syn 1.0.109", @@ -1061,19 +1146,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ "anyhow", - "itertools", + "itertools 0.10.5", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "prost-derive" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "prost-types" version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ - "prost", + "prost 0.11.9", ] [[package]] @@ -1097,9 +1195,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1144,6 +1242,26 @@ dependencies = [ "rand", ] +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "redox_syscall" version = "0.3.5" @@ -1190,9 +1308,9 @@ checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" [[package]] name = "rstar" -version = "0.11.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6" +checksum = "421400d13ccfd26dfa5858199c30a5d76f9c54e0dba7575273025b43c5175dbb" dependencies = [ "heapless", "num-traits", @@ -1210,13 +1328,13 @@ dependencies = [ "flate2", "flexi_logger", "geo", - "itertools", + "itertools 0.13.0", "keyed_priority_queue", "lz4_flex", "metis", "mpi", "nohash-hasher", - "prost", + "prost 0.13.3", "prost-build", "protobuf-src", "quick-xml", @@ -1241,15 +1359,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver", -] - [[package]] name = "rustix" version = "0.38.15" @@ -1260,21 +1369,24 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.48.0", ] -[[package]] -name = "rustversion" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" - [[package]] name = "ryu" version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +[[package]] +name = "scc" +version = "2.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8d25269dd3a12467afe2e510f69fb0b46b698e5afb296b59f2145259deaf8e8" +dependencies = [ + "sdd", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -1282,29 +1394,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] -name = "semver" -version = "1.0.20" +name = "sdd" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" [[package]] name = "serde" -version = "1.0.192" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.192" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.87", ] [[package]] @@ -1343,27 +1455,27 @@ dependencies = [ [[package]] name = "serial_test" -version = "2.0.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e56dd856803e253c8f298af3f4d7eb0ae5e23a737252cd90bb4f3b435033b2d" +checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" dependencies = [ - "dashmap", "futures", - "lazy_static", "log", + "once_cell", "parking_lot", + "scc", "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "2.0.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f" +checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.87", ] [[package]] @@ -1398,17 +1510,20 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] -name = "spin" -version = "0.9.8" +name = "spade" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "93f5ef1f863aca7d1d7dda7ccfc36a0a4279bd6d3c375176e5e0712e25cb4889" dependencies = [ - "lock_api", + "hashbrown 0.14.5", + "num-traits", + "robust", + "smallvec", ] [[package]] @@ -1442,9 +1557,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.37" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -1461,27 +1576,27 @@ dependencies = [ "fastrand", "redox_syscall", "rustix", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] name = "thiserror" -version = "1.0.49" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.49" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.87", ] [[package]] @@ -1503,15 +1618,8 @@ dependencies = [ "itoa", "libc", "num_threads", - "time-macros", ] -[[package]] -name = "time-macros" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" - [[package]] name = "tracing" version = "0.1.37" @@ -1543,7 +1651,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.87", ] [[package]] @@ -1583,7 +1691,7 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ - "nu-ansi-term", + "nu-ansi-term 0.46.0", "serde", "serde_json", "sharded-slab", @@ -1604,11 +1712,17 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typetag" -version = "0.2.13" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80960fd143d4c96275c0e60b08f14b81fbb468e79bc0ef8fbda69fb0afafae43" +checksum = "52ba3b6e86ffe0054b2c44f2d86407388b933b16cb0a70eea3929420db1d9bbe" dependencies = [ "erased-serde", "inventory", @@ -1619,13 +1733,13 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.2.13" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc13d450dc4a695200da3074dacf43d449b968baee95e341920e47f61a3b40f" +checksum = "70b20a22c42c8f1cd23ce5e34f165d4d37038f5b663ad20fb6adbdf029172483" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.87", ] [[package]] @@ -1673,6 +1787,61 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.87", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + [[package]] name = "which" version = "4.4.2" @@ -1707,13 +1876,31 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -1722,13 +1909,29 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -1737,42 +1940,90 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "xml" version = "0.8.10" @@ -1790,20 +2041,20 @@ checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" [[package]] name = "zerocopy" -version = "0.7.23" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e50cbb27c30666a6108abd6bc7577556265b44f243e2be89a8bc4e07a528c107" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.23" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a25f293fe55f0a48e7010d65552bb63704f6ceb55a1a385da10d41d8f78e4a3d" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.87", ] diff --git a/Cargo.toml b/Cargo.toml index 54796a8..ddaf082 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,35 +8,35 @@ edition = "2021" [dependencies] serde = { version = "1.0.137", features = ["derive"] } serde_json = "1.0.93" +# sticking with quick-xml 0.23.0 because the serialization API changed: https://github.com/tafia/quick-xml/issues/499 +# since the new API would need an adapter from std::fmt::Write to std::io::Write, we stick with the old API quick-xml = { version = "0.23.0", features = ["serialize"] } flate2 = { version = "1.0.24" } rand = "0.8.5" -metis = "0.1.2" -flexi_logger = { version = "0.22", features = ["async"] } +metis = "0.2.2" +flexi_logger = { version = "0.29.6", features = ["async"] } clap = { version = "4.0.29", features = ["derive"] } -# point to the github repo directly because we need a more recent version of bindgen. Otherwise the build fails -# due to some incompatibility starting with macOs 13.6 -mpi = { git = "https://github.com/rsmpi/rsmpi", rev = "1622101c9fc3a78620e9649f7f895616289d3558" } +mpi = "0.8.0" # dependencies for serialization with protobuf -prost = "0.11.5" +prost = "0.13.3" # bytes replaces the signature of std::io::Cursor to implemnt Buf somehow... bytes = "1.3.0" -serial_test = "2.0.0" +serial_test = "3.2.0" wait-timeout = "0.2.0" tracing = "0.1" tracing-subscriber = { version = "0.3.0", features = ["json", "fmt", "std", "registry"] } tracing-appender = "0.2" -itertools = "0.10.5" +itertools = "0.13.0" assert_approx_eq = "1.1.0" nohash-hasher = "0.2.0" rand_distr = "0.4.3" serde_path_to_error = "0.1.14" -geo = "0.26.0" +geo = "0.29.1" ahash = "0.8.6" keyed_priority_queue = "0.4.1" xml = "0.8.10" lz4_flex = "0.11.1" -typetag = "0.2.13" +typetag = "0.2.18" serde_yaml = "0.9.27" [build-dependencies] @@ -44,6 +44,7 @@ serde_yaml = "0.9.27" prost-build = "0.11" # provides the protoc compiler - this makes the build slow but one doesn't need to # install the protoc compiler as prerequisite. +# updating to 2.1.0 causes huge compile times (https://github.com/MaterializeInc/rust-protobuf-native/issues/24). Maybe we should switch to another crate. protobuf-src = "1.1.0" [profile.bench] diff --git a/README.md b/README.md index 43016a3..48fde70 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ The most recent release can be cited with the following reference [![DOI](https://zenodo.org/badge/498376436.svg)](https://zenodo.org/doi/10.5281/zenodo.13928119) The project is described in two conference papers, which were presented at ISPDC 24 in Chur, Switzerland, July 2024: + - [High-Performance Simulations for Urban Planning: Implementing Parallel Distributed Multi-Agent Systems in MATSim](https://doi.org/10.1109/ISPDC62236.2024.10705395) - [Real-Time Routing in Traffic Simulations: A Distributed Event Processing Approach](https://doi.org/10.1109/ISPDC62236.2024.10705399) @@ -16,8 +17,8 @@ The project is described in two conference papers, which were presented at ISPDC Install Rust for your operating system as described [here](https://www.rust-lang.org/tools/install). For WSL this would be -``` -$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +```shell +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` ## Set Up Prerequisites @@ -28,8 +29,8 @@ compiled with the project, but need to be present on the operating system. ### METIS The project uses the [metis](https://crates.io/crates/metis) crate as a dependency which -is a wrapper for the [METIS C Library](https://github.com/KarypisLab/METIS). The C-Library is -expected to be present on the machine. Also, the `metis` crate requires `libclang` on the machine +is a wrapper for the [METIS C Library](https://github.com/KarypisLab/METIS). The C-Library is +expected to be present on the machine. Also, the `metis` crate requires `libclang` on the machine this project is built on. ### MPI @@ -51,23 +52,24 @@ The dependencies named above need to be installed before the project can be buit Install dev versions of required packages because dev stuff is required during compilation -``` -$ sudo apt -y install libclang-dev llvm-dev libmetis-dev libopenmpi-dev +```shell +sudo apt -y install libclang-dev llvm-dev libmetis-dev libopenmpi-dev ``` #### MacOs The dependencies are available via [homebrew](https://brew.sh/) on macOS. -``` -$ brew install metis open-mpi +```shell +brew install metis open-mpi ``` The project contains a `config.toml` which tries to set the `CPATH` and the `RUSTFLAGS` environment variable. In case this doesn't work, they need to be set like the following: -``` -$ export CPATH=$HOMEBREW_PREFIX/include -$ export RUSTFLAGS="-L$HOMEBREW_PREFIX/lib" + +```shell +export CPATH=$HOMEBREW_PREFIX/include +export RUSTFLAGS="-L$HOMEBREW_PREFIX/lib" ``` Both variables are necessary to compile the METIS and MPI wrapper libraries. @@ -75,33 +77,68 @@ Both variables are necessary to compile the METIS and MPI wrapper libraries. #### Math Cluster The math cluster has all dependencies installed. They need to be enabled via the module system: + +```shell +module load metis-5.1 ompi/gcc/4.1.2 ``` -$ module load metis-5.1 ompi/gcc/4.1.2 -``` + #### HLRN -The HLRN cluster has all dependencies installed. They need to be enabled via the module system: +##### Setup conda + +Unfortunately, there is no `libclang` dependency installed. You need to install it yourself via `conda`. If you use it +for the first time, load the conda module and initialize it, such that it is available in your shell whenever you login: + +```shell +module load anaconda3/2023.09 +conda init bash +``` + +Then create your own environment and install `libclang`: + +```shell +conda create -n your_env_name +conda activate your_env_name +conda install libclang +``` + +##### Load dependencies + +The HLRN cluster has **some** dependencies installed. They need to be enabled via the module system: + +```shell +module load intel/2024.2 openmpi/gcc/5.0.3 ``` -$ module load gcc/9.3.0 llvm/9.0.0 openmpi/gcc.9/4.1.4 metis/5.1.0 + +So, before you run the project, you need to activate the environment: + +```shell +conda activate your_env_name ``` +The activation automatically updates the environment variables such that `libclang` files can be found by the compiler. + +Source: https://nhr-zib.atlassian.net/wiki/spaces/PUB/pages/430343/Anaconda+conda+and+Mamba + ## Run the project The project is built using cargo. -``` -$ cargo build --release +```shell +cargo build --release ``` Then a simulation can be started like the following: -``` -$ mpirun -np 2 ./target/release/mpi_qsim --config-path /path/to/config.yml + +```shell +mpirun -np 2 ./target/release/mpi_qsim --config-path /path/to/config.yml ``` It is also possible to execute a build before running by executing the following. This is way, one doesn't forget to re-compile before running. -``` -$ cargo mpirun --np 2 --release --bin mpi_qsim -- --config-path /path/to/config.yaml + +```shell +cargo mpirun --np 2 --release --bin mpi_qsim -- --config-path /path/to/config.yaml ``` We also have a @@ -109,3 +146,11 @@ We also have a ### Test Run `$ cargo test` to execute all tests. To have immediate output use `$ cargo test -- --nocapture` + +## Create input files + +You need to create protobuf files from the xml files. This can be done with the following command: + +```shell +cargo run --bin convert_to_binary --release -- --network network.xml --population population.xml --vehicles vehicles.xml --output-dir output --run-id run +``` \ No newline at end of file diff --git a/assets/adhoc_routing/with_updates/network.xml b/assets/adhoc_routing/with_updates/network.xml index a4c9dae..3c3a0f4 100644 --- a/assets/adhoc_routing/with_updates/network.xml +++ b/assets/adhoc_routing/with_updates/network.xml @@ -2,23 +2,86 @@ - - - - - - - + + + 1 + + + + + 1 + + + + + 1 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 1 + + - - - - - + + + 1 + + + + + 1 + + + + + 0 + + + + + 0 + + + + + 0 + + - - + + + 1 + + + + + 0 + + \ No newline at end of file diff --git a/assets/rvr-1pct.config.yml b/assets/rvr-1pct.config.yml new file mode 100644 index 0000000..a622b2b --- /dev/null +++ b/assets/rvr-1pct.config.yml @@ -0,0 +1,27 @@ +modules: + protofiles: + type: ProtoFiles + network: /Users/paulheinrich/Nextcloud/Shared/RustQSim/scenarios/rvr/input/rvr-1pct/rvr-1pct.network.binpb + population: /Users/paulheinrich/Nextcloud/Shared/RustQSim/scenarios/rvr/input/rvr-1pct/rvr-1pct.plans.binpb + vehicles: /Users/paulheinrich/Nextcloud/Shared/RustQSim/scenarios/rvr/input/rvr-1pct/rvr-1pct.vehicles.binpb + ids: /Users/paulheinrich/Nextcloud/Shared/RustQSim/scenarios/rvr/input/rvr-1pct/rvr-1pct.ids.binpb + partitioning: + type: Partitioning + num_parts: 0 + method: !Metis + vertex_weight: + - PreComputed + output: + type: Output + output_dir: ./assets/rvr-1pct/size + profiling: !CSV + level: INFO + routing: + type: Routing + mode: UsePlans + simulation: + type: Simulation + start_time: 0 + end_time: 129600 + sample_size: 0.01 + stuck_threshold: 30 \ No newline at end of file diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f4004e1..31578d3 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,2 @@ -# use nighly build because rust road router need experimental features. [toolchain] -# due to https://github.com/intellij-rust/intellij-rust/issues/10427 -#channel = "nightly-2023-05-01" channel = "stable" \ No newline at end of file diff --git a/src/simulation/controller.rs b/src/simulation/controller.rs index 6cefa2c..2e318cf 100644 --- a/src/simulation/controller.rs +++ b/src/simulation/controller.rs @@ -60,13 +60,16 @@ pub fn run_channel() { pub fn run_mpi() { let universe = mpi::initialize().unwrap(); let world = universe.world(); + let size = world.size(); + let rank = world.rank(); + let comm = MpiSimCommunicator { mpi_communicator: world, }; let mut args = CommandLineArgs::parse(); // override the num part argument, with the number of processes mpi has started. - args.num_parts = Some(world.size() as u32); + args.num_parts = Some(size as u32); let config = Config::from_file(&args); let _guards = logging::init_logging(&config, &args.config_path, comm.rank()); @@ -77,9 +80,9 @@ pub fn run_mpi() { ); execute_partition(comm, &args); - info!("#{} at barrier.", world.rank()); + info!("#{} at barrier.", rank); universe.world().barrier(); - info!("Process #{} finishing.", world.rank()); + info!("Process #{} finishing.", rank); } fn execute_partition(comm: C, args: &CommandLineArgs) { @@ -230,7 +233,7 @@ pub fn get_numbered_output_filename(output_dir: &Path, input_file: &Path, part: insert_number_in_proto_filename(&out, part) } -fn create_output_filename(output_dir: &Path, input_file: &Path) -> PathBuf { +pub fn create_output_filename(output_dir: &Path, input_file: &Path) -> PathBuf { let filename = input_file.file_name().unwrap(); output_dir.join(filename) } diff --git a/src/simulation/messaging/communication/communicators.rs b/src/simulation/messaging/communication/communicators.rs index 1f29cef..0aad7f4 100644 --- a/src/simulation/messaging/communication/communicators.rs +++ b/src/simulation/messaging/communication/communicators.rs @@ -5,7 +5,7 @@ use std::sync::{Arc, Barrier}; use mpi::collective::CommunicatorCollectives; use mpi::datatype::PartitionMut; use mpi::point_to_point::{Destination, Source}; -use mpi::topology::{Communicator, SystemCommunicator}; +use mpi::topology::{Communicator, SimpleCommunicator}; use mpi::{Count, Rank}; use tracing::{debug, info, instrument, span, Level}; @@ -193,7 +193,7 @@ impl SimCommunicator for ChannelSimCommunicator { } pub struct MpiSimCommunicator { - pub mpi_communicator: SystemCommunicator, + pub mpi_communicator: SimpleCommunicator, } impl SimCommunicator for MpiSimCommunicator { diff --git a/src/simulation/messaging/communication/message_broker.rs b/src/simulation/messaging/communication/message_broker.rs index 1dba0ba..af8ff79 100644 --- a/src/simulation/messaging/communication/message_broker.rs +++ b/src/simulation/messaging/communication/message_broker.rs @@ -1,5 +1,6 @@ use std::collections::{BinaryHeap, HashMap, HashSet}; use std::rc::Rc; +use tracing::info; use crate::simulation::messaging::communication::communicators::SimCommunicator; use crate::simulation::network::global_network::Network; @@ -101,6 +102,13 @@ where pub fn send_recv(&mut self, now: u32) -> Vec { let vehicles = self.prepare_send_recv_vehicles(now); + + for (_, m) in &vehicles { + if !m.vehicles.is_empty() { + info!("Rank {}, message {:?}", self.rank(), m); + } + } + let mut result: Vec = Vec::new(); let mut expected_vehicle_messages = self.neighbors.clone(); diff --git a/src/simulation/network/metis_partitioning.rs b/src/simulation/network/metis_partitioning.rs index f03b7f9..2fc3d98 100644 --- a/src/simulation/network/metis_partitioning.rs +++ b/src/simulation/network/metis_partitioning.rs @@ -47,6 +47,7 @@ pub fn partition(network: &Network, num_parts: u32, options: MetisOptions) -> Ve info!("Calling Metis Partitioning Library"); let mut graph = Graph::new(ncon, num_parts as Idx, &mut xadj, &mut adjncy) + .expect("Failed to create graph") .set_option(metis::option::UFactor(options.ufactor() as Idx)) .set_option(metis::option::Seed(4711)) .set_option(metis::option::Contig(options.contiguous)) diff --git a/src/simulation/replanning/teleported_router.rs b/src/simulation/replanning/teleported_router.rs index 02d87e9..66a6a1e 100644 --- a/src/simulation/replanning/teleported_router.rs +++ b/src/simulation/replanning/teleported_router.rs @@ -1,4 +1,4 @@ -use geo::{Closest, ClosestPoint, EuclideanDistance, Line, Point}; +use geo::{Closest, ClosestPoint, Distance, Euclidean, Line, Point}; use std::fmt::Debug; use crate::simulation::network::global_network::Network; @@ -46,7 +46,7 @@ impl BeeLineDistanceRouter { } fn query_points(speed: f32, p1: Point, p2: Point) -> Teleportation { - let distance = p1.euclidean_distance(&p2); + let distance = Euclidean::distance(p1, p2); let duration = (distance / speed as f64) as u32; Teleportation { distance, duration } } diff --git a/src/simulation/vehicles/mod.rs b/src/simulation/vehicles/mod.rs index 0e36b53..33e7900 100644 --- a/src/simulation/vehicles/mod.rs +++ b/src/simulation/vehicles/mod.rs @@ -1,3 +1,2 @@ pub mod garage; mod io; -mod vehicles; diff --git a/src/simulation/vehicles/vehicles.rs b/src/simulation/vehicles/vehicles.rs deleted file mode 100644 index 1135a53..0000000 --- a/src/simulation/vehicles/vehicles.rs +++ /dev/null @@ -1,13 +0,0 @@ -use crate::simulation::wire_types::vehicles::LevelOfDetail; - -impl TryFrom for LevelOfDetail { - type Error = (); - - fn try_from(value: i32) -> Result { - match value { - x if x == LevelOfDetail::Network as i32 => Ok(LevelOfDetail::Network), - x if x == LevelOfDetail::Teleported as i32 => Ok(LevelOfDetail::Teleported), - _ => Err(()), - } - } -} diff --git a/tests/resources/adhoc_routing/no_updates/config-1.yml b/tests/resources/adhoc_routing/no_updates/config-1.yml index f7b3cbf..41bb371 100644 --- a/tests/resources/adhoc_routing/no_updates/config-1.yml +++ b/tests/resources/adhoc_routing/no_updates/config-1.yml @@ -14,6 +14,7 @@ modules: output: type: Output output_dir: ./test_output/simulation/adhoc_routing/no_updates/one_part + logging: Info routing: type: Routing mode: AdHoc diff --git a/tests/resources/adhoc_routing/no_updates/config-2.yml b/tests/resources/adhoc_routing/no_updates/config-2.yml index 73bb2bf..d364a19 100644 --- a/tests/resources/adhoc_routing/no_updates/config-2.yml +++ b/tests/resources/adhoc_routing/no_updates/config-2.yml @@ -8,12 +8,11 @@ modules: partitioning: type: Partitioning num_parts: 2 - method: !Metis - vertex_weight: - - Constant + method: None output: type: Output output_dir: ./test_output/simulation/adhoc_routing/no_updates/two_parts + logging: Info routing: type: Routing mode: AdHoc diff --git a/tests/resources/adhoc_routing/with_updates/config-1.yml b/tests/resources/adhoc_routing/with_updates/config-1.yml index 57f382b..8ca97bd 100644 --- a/tests/resources/adhoc_routing/with_updates/config-1.yml +++ b/tests/resources/adhoc_routing/with_updates/config-1.yml @@ -14,6 +14,7 @@ modules: output: type: Output output_dir: ./test_output/simulation/adhoc_routing/with_updates/one_part + logging: Info routing: type: Routing mode: AdHoc diff --git a/tests/resources/adhoc_routing/with_updates/config-2.yml b/tests/resources/adhoc_routing/with_updates/config-2.yml index 04fc594..c140979 100644 --- a/tests/resources/adhoc_routing/with_updates/config-2.yml +++ b/tests/resources/adhoc_routing/with_updates/config-2.yml @@ -8,13 +8,12 @@ modules: partitioning: type: Partitioning num_parts: 2 - method: !Metis - vertex_weight: - - Constant + method: None output: type: Output output_dir: ./test_output/simulation/adhoc_routing/with_updates/two_parts profiling: !CSV + logging: Info routing: type: Routing mode: AdHoc diff --git a/tests/test_adhoc_routing.rs b/tests/test_adhoc_routing.rs index 8c70603..fbb1721 100644 --- a/tests/test_adhoc_routing.rs +++ b/tests/test_adhoc_routing.rs @@ -1,7 +1,9 @@ use std::path::PathBuf; -use rust_q_sim::simulation::config::CommandLineArgs; +use rust_q_sim::simulation::config::{CommandLineArgs, Config}; use rust_q_sim::simulation::id::store_to_file; +use rust_q_sim::simulation::logging; +use rust_q_sim::simulation::logging::init_std_out_logging; use rust_q_sim::simulation::messaging::communication::communicators::DummySimCommunicator; use rust_q_sim::simulation::network::global_network::Network; use rust_q_sim::simulation::population::population::Population; @@ -24,6 +26,8 @@ fn create_resources(in_dir: &PathBuf, out_dir: &PathBuf) { #[test] fn execute_adhoc_routing_one_part_no_updates() { + // init_std_out_logging(); + create_resources( &PathBuf::from("./assets/adhoc_routing/no_updates/"), &PathBuf::from("./test_output/simulation/adhoc_routing/no_updates/one_part/"), @@ -63,11 +67,13 @@ fn execute_adhoc_routing_two_parts_no_updates() { #[test] fn execute_adhoc_routing_one_part_with_updates() { + // init_std_out_logging(); + create_resources( &PathBuf::from("./assets/adhoc_routing/with_updates/"), &PathBuf::from("./test_output/simulation/adhoc_routing/with_updates/one_part/"), ); - let config_args = CommandLineArgs { + let args = CommandLineArgs { config_path: "./tests/resources/adhoc_routing/with_updates/config-1.yml".to_string(), num_parts: None, }; @@ -77,25 +83,27 @@ fn execute_adhoc_routing_one_part_with_updates() { Box::new(TestSubscriber::new_with_events_from_file( "./tests/resources/adhoc_routing/with_updates/expected_events.xml", )), - config_args, + args, ); } #[test] #[serial_test::serial] fn execute_adhoc_routing_two_parts_with_updates() { + init_std_out_logging(); + create_resources( &PathBuf::from("./assets/adhoc_routing/with_updates/"), &PathBuf::from("./test_output/simulation/adhoc_routing/with_updates/two_parts/"), ); - let config_args = CommandLineArgs { + let args = CommandLineArgs { config_path: "./tests/resources/adhoc_routing/with_updates/config-2.yml".to_string(), num_parts: None, }; execute_sim_with_channels( - config_args, + args, "./tests/resources/adhoc_routing/with_updates/expected_events.xml", ); } diff --git a/tests/test_simulation.rs b/tests/test_simulation.rs index 3da10a1..b6ae6ca 100644 --- a/tests/test_simulation.rs +++ b/tests/test_simulation.rs @@ -1,4 +1,6 @@ +use nohash_hasher::IntMap; use std::any::Any; +use std::collections::HashSet; use std::fs::File; use std::io::{BufRead, BufReader}; use std::path::PathBuf; @@ -6,12 +8,12 @@ use std::rc::Rc; use std::sync::mpsc::{channel, Receiver, Sender}; use std::thread::JoinHandle; use std::{fs, thread}; - -use nohash_hasher::IntMap; use tracing::info; -use rust_q_sim::simulation::config::{CommandLineArgs, Config, RoutingMode}; -use rust_q_sim::simulation::controller::{get_numbered_output_filename, partition_input}; +use rust_q_sim::simulation::config::{CommandLineArgs, Config, PartitionMethod, RoutingMode}; +use rust_q_sim::simulation::controller::{ + create_output_filename, get_numbered_output_filename, partition_input, +}; use rust_q_sim::simulation::id; use rust_q_sim::simulation::io::xml_events::XmlEventsWriter; use rust_q_sim::simulation::messaging::communication::communicators::{ @@ -69,11 +71,16 @@ pub fn execute_sim( let output_path = PathBuf::from(&config.output().output_dir); fs::create_dir_all(&output_path).expect("Failed to create output path"); - let temp_network_file = get_numbered_output_filename( - &output_path, - &PathBuf::from(config.proto_files().network), - config.partitioning().num_parts, - ); + let temp_network_file = match config.partitioning().method { + PartitionMethod::Metis(_) => get_numbered_output_filename( + &output_path, + &PathBuf::from(config.proto_files().network), + config.partitioning().num_parts, + ), + PartitionMethod::None => { + create_output_filename(&output_path, &PathBuf::from(config.proto_files().network)) + } + }; id::load_from_file(&PathBuf::from(config.proto_files().ids)); @@ -100,6 +107,16 @@ pub fn execute_sim( ); let sim_net = SimNetworkPartition::from_network(&network, rank, config.simulation()); + info!( + "Partitioning: Rank {rank}; Links {:?}; Nodes {:?}", + &sim_net.get_link_ids(), + &sim_net + .nodes + .iter() + .map(|(id, _)| *id) + .collect::>() + ); + let mut events = EventsPublisher::new(); events.add_subscriber(test_subscriber); events.add_subscriber(Box::new(TravelTimeCollector::new()));