From d5a3d9191685cffef3efc727fae3ecc04a0470bd Mon Sep 17 00:00:00 2001 From: "J. Sebastian Paez" Date: Mon, 16 Sep 2024 18:36:32 -0700 Subject: [PATCH 1/3] chore(timsrust)!: (wip) updated timsrust versioncargo --- Cargo.lock | 1277 +------------------ Cargo.toml | 6 +- src/aggregation/dbscan/denseframe_dbscan.rs | 17 +- src/aggregation/ms_denoise.rs | 156 +-- src/aggregation/tracing.rs | 35 +- src/main.rs | 31 +- src/ms/frames/dense_frame_window.rs | 86 +- src/ms/frames/frame_slice.rs | 201 ++- src/ms/frames/frame_slice_rt_window.rs | 10 +- src/ms/frames/frames.rs | 72 +- src/ms/frames/mod.rs | 3 +- src/ms/mod.rs | 1 - src/ms/tdf.rs | 567 -------- src/scoring.rs | 16 +- 14 files changed, 497 insertions(+), 1981 deletions(-) delete mode 100644 src/ms/tdf.rs diff --git a/Cargo.lock b/Cargo.lock index 10ad791..697d2a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" -dependencies = [ - "gimli", -] - [[package]] name = "adler" version = "1.0.2" @@ -55,12 +46,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - [[package]] name = "android-tzdata" version = "0.1.1" @@ -112,7 +97,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -122,7 +107,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -213,22 +198,13 @@ dependencies = [ "num", ] -[[package]] -name = "atoi" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" -dependencies = [ - "num-traits", -] - [[package]] name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi 0.1.19", + "hermit-abi", "libc", "winapi", ] @@ -239,33 +215,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "backtrace" -version = "0.3.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" -dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "base64" version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - [[package]] name = "bitflags" version = "1.3.2" @@ -277,18 +232,6 @@ name = "bitflags" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" -dependencies = [ - "serde", -] - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] [[package]] name = "brotli" @@ -319,9 +262,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -361,7 +304,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -392,7 +335,7 @@ version = "4.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn 2.0.66", @@ -420,15 +363,9 @@ dependencies = [ "lazy_static", "libc", "unicode-width", - "windows-sys 0.52.0", + "windows-sys", ] -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - [[package]] name = "const-random" version = "0.1.18" @@ -449,46 +386,12 @@ dependencies = [ "tiny-keccak", ] -[[package]] -name = "core-foundation" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" version = "1.4.2" @@ -517,15 +420,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -538,16 +432,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "csv" version = "1.3.0" @@ -583,29 +467,6 @@ dependencies = [ "rayon", ] -[[package]] -name = "der" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" -dependencies = [ - "const-oid", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "const-oid", - "crypto-common", - "subtle", -] - [[package]] name = "displaydoc" version = "0.1.7" @@ -617,20 +478,11 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "dotenvy" -version = "0.15.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" - [[package]] name = "either" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" -dependencies = [ - "serde", -] [[package]] name = "encode_unicode" @@ -657,38 +509,11 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "errno" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "etcetera" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" -dependencies = [ - "cfg-if", - "home", - "windows-sys 0.48.0", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - [[package]] name = "fallible-iterator" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "fallible-streaming-iterator" @@ -696,12 +521,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" -[[package]] -name = "fastrand" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" - [[package]] name = "flatbuffers" version = "23.5.26" @@ -722,129 +541,12 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "flume" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" -dependencies = [ - "futures-core", - "futures-sink", - "spin 0.9.8", -] - [[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 = "form_urlencoded" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures-channel" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" - -[[package]] -name = "futures-executor" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-intrusive" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" -dependencies = [ - "futures-core", - "lock_api", - "parking_lot", -] - -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "getrandom" version = "0.2.15" @@ -856,12 +558,6 @@ dependencies = [ "wasi", ] -[[package]] -name = "gimli" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" - [[package]] name = "half" version = "2.4.1" @@ -880,27 +576,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", - "allocator-api2", ] [[package]] name = "hashlink" -version = "0.8.4" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ "hashbrown", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "heck" version = "0.5.0" @@ -916,45 +602,6 @@ dependencies = [ "libc", ] -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hkdf" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" -dependencies = [ - "hmac", -] - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "humantime" version = "1.3.0" @@ -987,16 +634,6 @@ dependencies = [ "cc", ] -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "indexmap" version = "2.2.6" @@ -1043,7 +680,6 @@ dependencies = [ "clap", "csv", "indicatif", - "libsqlite3-sys", "log", "num", "num-traits", @@ -1053,9 +689,7 @@ dependencies = [ "sage-core", "serde", "serde_json", - "sqlx", "timsrust", - "tokio", "toml", ] @@ -1103,9 +737,6 @@ name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -dependencies = [ - "spin 0.5.2", -] [[package]] name = "lexical-core" @@ -1185,9 +816,9 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libsqlite3-sys" -version = "0.26.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" +checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" dependencies = [ "cc", "pkg-config", @@ -1204,12 +835,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "lock_api" version = "0.4.12" @@ -1246,16 +871,6 @@ dependencies = [ "libc", ] -[[package]] -name = "md-5" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" -dependencies = [ - "cfg-if", - "digest", -] - [[package]] name = "memchr" version = "2.7.2" @@ -1263,10 +878,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "memmap2" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", +] [[package]] name = "miniz_oxide" @@ -1277,44 +895,6 @@ dependencies = [ "adler", ] -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.48.0", -] - -[[package]] -name = "native-tls" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "num" version = "0.4.3" @@ -1340,27 +920,10 @@ dependencies = [ ] [[package]] -name = "num-bigint-dig" -version = "0.8.4" +name = "num-complex" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" -dependencies = [ - "byteorder", - "lazy_static", - "libm", - "num-integer", - "num-iter", - "num-traits", - "rand", - "smallvec", - "zeroize", -] - -[[package]] -name = "num-complex" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -1406,81 +969,18 @@ dependencies = [ "libm", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.9", - "libc", -] - [[package]] name = "number_prefix" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" -[[package]] -name = "object" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "openssl" -version = "0.10.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" -dependencies = [ - "bitflags 2.5.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "openssl-probe" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "openssl-sys" -version = "0.9.103" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "ordered-float" version = "2.10.1" @@ -1490,16 +990,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - [[package]] name = "parking_lot_core" version = "0.9.10" @@ -1508,9 +998,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.1", + "redox_syscall", "smallvec", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -1541,7 +1031,7 @@ dependencies = [ "snap", "thrift", "twox-hash", - "zstd", + "zstd 0.12.4", ] [[package]] @@ -1550,54 +1040,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - -[[package]] -name = "percent-encoding" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" - -[[package]] -name = "pin-project-lite" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "pkcs1" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" -dependencies = [ - "der", - "pkcs8", - "spki", -] - -[[package]] -name = "pkcs8" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" -dependencies = [ - "der", - "spki", -] - [[package]] name = "pkg-config" version = "0.3.30" @@ -1700,15 +1142,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.1" @@ -1747,31 +1180,11 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" -[[package]] -name = "rsa" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" -dependencies = [ - "const-oid", - "digest", - "num-bigint-dig", - "num-integer", - "num-traits", - "pkcs1", - "pkcs8", - "rand_core", - "signature", - "spki", - "subtle", - "zeroize", -] - [[package]] name = "rusqlite" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2" +checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" dependencies = [ "bitflags 2.5.0", "fallible-iterator", @@ -1781,12 +1194,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "rustc-demangle" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - [[package]] name = "rustc_version" version = "0.4.0" @@ -1796,19 +1203,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.38.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" -dependencies = [ - "bitflags 2.5.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - [[package]] name = "ryu" version = "1.0.18" @@ -1829,44 +1223,12 @@ dependencies = [ "serde", ] -[[package]] -name = "schannel" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "security-framework" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" -dependencies = [ - "bitflags 2.5.0", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "semver" version = "1.0.23" @@ -1881,18 +1243,18 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", @@ -1901,11 +1263,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -1919,47 +1282,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "signature" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "digest", - "rand_core", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - [[package]] name = "smallvec" version = "1.13.2" @@ -1972,275 +1294,18 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" -[[package]] -name = "socket2" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", -] - -[[package]] -name = "sqlformat" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" -dependencies = [ - "nom", - "unicode_categories", -] - -[[package]] -name = "sqlx" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e50c216e3624ec8e7ecd14c6a6a6370aad6ee5d8cfc3ab30b5162eeeef2ed33" -dependencies = [ - "sqlx-core", - "sqlx-macros", - "sqlx-mysql", - "sqlx-postgres", - "sqlx-sqlite", -] - -[[package]] -name = "sqlx-core" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d6753e460c998bbd4cd8c6f0ed9a64346fcca0723d6e75e52fdc351c5d2169d" -dependencies = [ - "ahash", - "atoi", - "byteorder", - "bytes", - "crc", - "crossbeam-queue", - "dotenvy", - "either", - "event-listener", - "futures-channel", - "futures-core", - "futures-intrusive", - "futures-io", - "futures-util", - "hashlink", - "hex", - "indexmap", - "log", - "memchr", - "native-tls", - "once_cell", - "paste", - "percent-encoding", - "serde", - "serde_json", - "sha2", - "smallvec", - "sqlformat", - "thiserror", - "tokio", - "tokio-stream", - "tracing", - "url", -] - -[[package]] -name = "sqlx-macros" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a793bb3ba331ec8359c1853bd39eed32cdd7baaf22c35ccf5c92a7e8d1189ec" -dependencies = [ - "proc-macro2", - "quote", - "sqlx-core", - "sqlx-macros-core", - "syn 1.0.109", -] - -[[package]] -name = "sqlx-macros-core" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4ee1e104e00dedb6aa5ffdd1343107b0a4702e862a84320ee7cc74782d96fc" -dependencies = [ - "dotenvy", - "either", - "heck 0.4.1", - "hex", - "once_cell", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2", - "sqlx-core", - "sqlx-mysql", - "sqlx-sqlite", - "syn 1.0.109", - "tempfile", - "tokio", - "url", -] - -[[package]] -name = "sqlx-mysql" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864b869fdf56263f4c95c45483191ea0af340f9f3e3e7b4d57a61c7c87a970db" -dependencies = [ - "atoi", - "base64", - "bitflags 2.5.0", - "byteorder", - "bytes", - "crc", - "digest", - "dotenvy", - "either", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "generic-array", - "hex", - "hkdf", - "hmac", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "percent-encoding", - "rand", - "rsa", - "serde", - "sha1", - "sha2", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-postgres" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb7ae0e6a97fb3ba33b23ac2671a5ce6e3cabe003f451abd5a56e7951d975624" -dependencies = [ - "atoi", - "base64", - "bitflags 2.5.0", - "byteorder", - "crc", - "dotenvy", - "etcetera", - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "hex", - "hkdf", - "hmac", - "home", - "itoa", - "log", - "md-5", - "memchr", - "once_cell", - "rand", - "serde", - "serde_json", - "sha1", - "sha2", - "smallvec", - "sqlx-core", - "stringprep", - "thiserror", - "tracing", - "whoami", -] - -[[package]] -name = "sqlx-sqlite" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59dc83cf45d89c555a577694534fcd1b55c545a816c816ce51f20bbe56a4f3f" -dependencies = [ - "atoi", - "flume", - "futures-channel", - "futures-core", - "futures-executor", - "futures-intrusive", - "futures-util", - "libsqlite3-sys", - "log", - "percent-encoding", - "serde", - "sqlx-core", - "tracing", - "url", -] - [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "stringprep" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", - "unicode-properties", -] - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "subtle" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" - [[package]] name = "syn" version = "1.0.109" @@ -2263,18 +1328,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "tempfile" -version = "3.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" -dependencies = [ - "cfg-if", - "fastrand", - "rustix", - "windows-sys 0.52.0", -] - [[package]] name = "termcolor" version = "1.4.1" @@ -2317,18 +1370,20 @@ dependencies = [ [[package]] name = "timsrust" -version = "0.2.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0791ad8b3836b6a582b1bfb563c04d0e09acdaf85e45c16d3158a0bcb164b6" +checksum = "4e6cc90c026b287bcea09d4a68231ee81dc3ec773447894134ad226fff006a20" dependencies = [ "bytemuck", - "byteorder", "linreg", + "memmap2", "parquet", "rayon", "rusqlite", + "serde", + "serde_json", "thiserror", - "zstd", + "zstd 0.13.2", ] [[package]] @@ -2340,48 +1395,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" -dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "num_cpus", - "pin-project-lite", - "socket2", - "windows-sys 0.48.0", -] - -[[package]] -name = "tokio-stream" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" -dependencies = [ - "futures-core", - "pin-project-lite", - "tokio", -] - [[package]] name = "toml" version = "0.8.13" @@ -2416,38 +1429,6 @@ dependencies = [ "winnow", ] -[[package]] -name = "tracing" -version = "0.1.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.66", -] - -[[package]] -name = "tracing-core" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", -] - [[package]] name = "twox-hash" version = "1.6.3" @@ -2458,68 +1439,18 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" -[[package]] -name = "unicode-normalization" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-properties" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4259d9d4425d9f0661581b804cb85fe66a4c631cadd8f490d1c13a35d5d9291" - -[[package]] -name = "unicode-segmentation" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" - [[package]] name = "unicode-width" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - -[[package]] -name = "url" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - [[package]] name = "utf8parse" version = "0.2.2" @@ -2544,12 +1475,6 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasm-bindgen" version = "0.2.92" @@ -2604,16 +1529,6 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" -[[package]] -name = "whoami" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44ab49fad634e88f55bf8f9bb3abd2f27d7204172a112c7c9987e01c1c94ea9" -dependencies = [ - "redox_syscall 0.4.1", - "wasite", -] - [[package]] name = "winapi" version = "0.3.9" @@ -2636,7 +1551,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -2651,16 +1566,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -2669,22 +1575,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "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", + "windows-targets", ] [[package]] @@ -2693,46 +1584,28 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" -[[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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" -[[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.5" @@ -2745,48 +1618,24 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" -[[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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" -[[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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" -[[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.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" -[[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.5" @@ -2823,18 +1672,21 @@ dependencies = [ ] [[package]] -name = "zeroize" -version = "1.8.1" +name = "zstd" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe 6.0.6", +] [[package]] name = "zstd" -version = "0.12.4" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ - "zstd-safe", + "zstd-safe 7.2.1", ] [[package]] @@ -2847,6 +1699,15 @@ dependencies = [ "zstd-sys", ] +[[package]] +name = "zstd-safe" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] + [[package]] name = "zstd-sys" version = "2.0.10+zstd.1.5.6" diff --git a/Cargo.toml b/Cargo.toml index 5717454..0806300 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ license = "Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -timsrust = "= 0.2.2" +timsrust = "= 0.4.1" # Serialization serde = { version = "1.0.193", features = ["derive"] } @@ -22,10 +22,6 @@ clap = {version = "4.4.17", features = ["derive"]} csv = "1.3.0" rand = "0.8.5" -sqlx = { version = "0.7.2", features = ["runtime-tokio-native-tls", "sqlite"]} -libsqlite3-sys = "^0.26.0" -tokio = {version="1.38.0", features = ["rt", "rt-multi-thread"]} - # Sage sage-core = { git = "https://github.com/lazear/sage.git", rev = "9e870429889b341c4773df32b65e553283301a93" } toml = "0.8.8" diff --git a/src/aggregation/dbscan/denseframe_dbscan.rs b/src/aggregation/dbscan/denseframe_dbscan.rs index 87feca7..03b4268 100644 --- a/src/aggregation/dbscan/denseframe_dbscan.rs +++ b/src/aggregation/dbscan/denseframe_dbscan.rs @@ -1,3 +1,9 @@ +use timsrust::{ + AcquisitionType, + MSLevel, + QuadrupoleSettings, +}; + use crate::aggregation::aggregators::TimsPeakAggregator; use crate::aggregation::converters::{ BypassDenseFrameBackConverter, @@ -6,6 +12,7 @@ use crate::aggregation::converters::{ use crate::aggregation::dbscan::dbscan::dbscan_generic; use crate::ms::frames::{ DenseFrame, + SingleQuadrupoleSettings, TimsPeak, }; use crate::space::space_generics::{ @@ -25,9 +32,12 @@ pub fn dbscan_denseframe( min_n: usize, min_intensity: u64, ) -> DenseFrame { - let out_frame_type: timsrust::FrameType = denseframe.frame_type; + let out_acq_type: timsrust::AcquisitionType = denseframe.acquisition_type; let out_rt: f64 = denseframe.rt; let out_index: usize = denseframe.index; + let out_ms_level: MSLevel = denseframe.ms_level; + let out_window_group_id = denseframe.window_group_id; + let out_correction_factor = denseframe.intensity_correction_factor; let prefiltered_peaks = { denseframe.sort_by_mz(); @@ -72,8 +82,11 @@ pub fn dbscan_denseframe( raw_peaks: peak_vec, index: out_index, rt: out_rt, - frame_type: out_frame_type, + acquisition_type: out_acq_type, sorted: None, + ms_level: out_ms_level, + window_group_id: out_window_group_id, + intensity_correction_factor: out_correction_factor, } } diff --git a/src/aggregation/ms_denoise.rs b/src/aggregation/ms_denoise.rs index e41125f..31b3cb2 100644 --- a/src/aggregation/ms_denoise.rs +++ b/src/aggregation/ms_denoise.rs @@ -1,5 +1,6 @@ use core::fmt::Debug; use core::panic; +use std::path::Path; use indicatif::ParallelProgressIterator; use log::{ @@ -13,7 +14,17 @@ use serde::{ Deserialize, Serialize, }; -use timsrust::Frame; +use timsrust::converters::{ + Scan2ImConverter, + Tof2MzConverter, +}; +use timsrust::{ + AcquisitionType, + Frame, + MSLevel, + QuadrupoleSettings, + TimsRustError, +}; use super::aggregators::aggregate_clusters; use super::dbscan::runner::dbscan_label_clusters; @@ -28,11 +39,9 @@ use crate::ms::frames::{ DenseFrameWindow, ExpandedFrameSlice, FrameSlice, - MsMsFrameSliceWindowInfo, + SingleQuadrupoleSettings, TimsPeak, }; -use crate::ms::tdf; -use crate::ms::tdf::DIAFrameInfo; use crate::space::space_generics::{ AsNDPointsAtIndex, IntenseAtIndex, @@ -167,9 +176,8 @@ fn _denoise_denseframe( fn denoise_frame_slice_window( frameslice_window: &[ExpandedFrameSlice], - ims_converter: &timsrust::Scan2ImConverter, - mz_converter: &timsrust::Tof2MzConverter, - _dia_frame_info: &DIAFrameInfo, + ims_converter: &Scan2ImConverter, + mz_converter: &Tof2MzConverter, min_n: usize, min_intensity: u64, _mz_scaling: f64, @@ -224,23 +232,7 @@ fn denoise_frame_slice_window( ); let ref_frame = &frameslice_window[frameslice_window.len() / 2]; - if ref_frame.slice_window_info.is_none() { - panic!("No slice window info found"); - } - - let slice_info = ref_frame.slice_window_info.as_ref().unwrap(); - let quad_group_id = match slice_info { - MsMsFrameSliceWindowInfo::WindowGroup(x) => *x, - MsMsFrameSliceWindowInfo::SingleWindow(x) => x.global_quad_row_id, - }; - let min_mz = match slice_info { - MsMsFrameSliceWindowInfo::WindowGroup(_x) => 0.0, - MsMsFrameSliceWindowInfo::SingleWindow(x) => x.mz_start, - }; - let max_mz = match slice_info { - MsMsFrameSliceWindowInfo::WindowGroup(_x) => 0.0, - MsMsFrameSliceWindowInfo::SingleWindow(x) => x.mz_end, - }; + let quad_settings = ref_frame.quadrupole_settings.clone(); let mut raw_peaks: Vec = centroids .into_iter() @@ -266,15 +258,16 @@ fn denoise_frame_slice_window( raw_peaks, index: ref_frame.parent_frame_index, rt: ref_frame.rt, - frame_type: timsrust::FrameType::MS2(timsrust::AcquisitionType::DIAPASEF), + acquisition_type: ref_frame.acquisition_type, + ms_level: ref_frame.ms_level, sorted: None, + window_group_id: ref_frame.window_group_id, + intensity_correction_factor: ref_frame.intensity_correction_factor, }, ims_max: max_ims, ims_min: min_ims, - mz_start: min_mz as f64, - mz_end: max_mz as f64, - group_id: quad_group_id, - quad_group_id, + group_id: ref_frame.window_group_id.into(), + quadrupole_setting: quad_settings, }; maybe_save_json_if_debugging( &out, @@ -287,9 +280,8 @@ fn denoise_frame_slice_window( fn denoise_frame_slice( frame_window: &FrameSlice, - ims_converter: &timsrust::Scan2ImConverter, - mz_converter: &timsrust::Tof2MzConverter, - dia_frame_info: &DIAFrameInfo, + ims_converter: &Scan2ImConverter, + mz_converter: &Tof2MzConverter, min_n: usize, min_intensity: u64, mz_scaling: f64, @@ -297,12 +289,8 @@ fn denoise_frame_slice( ims_scaling: f32, max_ims_extension: f32, ) -> DenseFrameWindow { - let denseframe_window = DenseFrameWindow::from_frame_window( - frame_window, - ims_converter, - mz_converter, - dia_frame_info, - ); + let denseframe_window = + DenseFrameWindow::from_frame_window(frame_window, ims_converter, mz_converter); let denoised_frame = _denoise_denseframe( denseframe_window.frame, min_n, @@ -317,10 +305,8 @@ fn denoise_frame_slice( frame: denoised_frame, ims_min: denseframe_window.ims_min, ims_max: denseframe_window.ims_max, - mz_start: denseframe_window.mz_start, - mz_end: denseframe_window.mz_end, group_id: denseframe_window.group_id, - quad_group_id: denseframe_window.quad_group_id, + quadrupole_setting: denseframe_window.quadrupole_setting, } } @@ -365,8 +351,8 @@ struct FrameDenoiser { ims_scaling: f32, max_mz_extension: f64, max_ims_extension: f32, - ims_converter: timsrust::Scan2ImConverter, - mz_converter: timsrust::Tof2MzConverter, + ims_converter: Scan2ImConverter, + mz_converter: Tof2MzConverter, } impl<'a> Denoiser<'a, Frame, DenseFrame, Converters, Option> for FrameDenoiser { @@ -394,9 +380,8 @@ struct DIAFrameDenoiser { max_mz_extension: f64, ims_scaling: f32, max_ims_extension: f32, - dia_frame_info: DIAFrameInfo, - ims_converter: timsrust::Scan2ImConverter, - mz_converter: timsrust::Tof2MzConverter, + ims_converter: Scan2ImConverter, + mz_converter: Tof2MzConverter, } // impl DIAFrameDenoiser { @@ -433,7 +418,23 @@ impl<'a> Denoiser<'a, Frame, Vec, Converters, Option> { info!("Denoising (centroiding) {} frames", elems.len()); - let mut frame_window_slices = self.dia_frame_info.split_frame_windows(&elems); + let mut flat_windows: Vec> = elems + .par_iter() + .flat_map(|x: &Frame| FrameSlice::from_frame(x)) + .collect(); + + flat_windows.par_sort_unstable_by(|a, b| { + a.quadrupole_settings + .partial_cmp(&b.quadrupole_settings) + .unwrap() + }); + + let mut break_points = vec![0]; + for i in 1..flat_windows.len() { + if flat_windows[i].quadrupole_settings != flat_windows[i - 1].quadrupole_settings { + break_points.push(i); + } + } // If profiling and having the "IONMESH_PROFILE_NUM_WINDOWS" env variable set // then only process the first N slices of windows. @@ -441,7 +442,8 @@ impl<'a> Denoiser<'a, Frame, Vec, Converters, Option> if let Ok(num_windows) = std::env::var("IONMESH_PROFILE_NUM_WINDOWS") { let num_windows: usize = num_windows.parse().unwrap(); log::warn!("Profiling: Only processing {} windows", num_windows); - frame_window_slices.truncate(num_windows); + flat_windows.truncate(break_points[num_windows]); + break_points.truncate(num_windows); } // This warning reders to denoise_frame_slice_window. @@ -450,9 +452,12 @@ impl<'a> Denoiser<'a, Frame, Vec, Converters, Option> // by timsrust ... warn!("Using prototype function for denoising, scalings are hard-coded"); - let mut out = Vec::with_capacity(frame_window_slices.len()); - let num_windows = frame_window_slices.len(); - for (i, sv) in frame_window_slices.iter().enumerate() { + let num_windows = break_points.len() - 1; + let mut out = Vec::with_capacity(num_windows); + let frame_window_slices: Vec<(usize, &[FrameSlice])> = (0..num_windows) + .map(|i| (i, &flat_windows[break_points[i]..break_points[i + 1]])) + .collect(); + for (i, sv) in frame_window_slices.iter() { info!("Denoising window {}/{}", i + 1, num_windows); let start_tot_peaks = sv.iter().map(|x| x.num_ndpoints() as u64).sum::(); let progbar = indicatif::ProgressBar::new(sv.len() as u64); @@ -462,7 +467,6 @@ impl<'a> Denoiser<'a, Frame, Vec, Converters, Option> x, &self.ims_converter, &self.mz_converter, - &self.dia_frame_info, self.min_n, self.min_intensity, self.mz_scaling, @@ -481,7 +485,7 @@ impl<'a> Denoiser<'a, Frame, Vec, Converters, Option> .map(lambda_denoise) .collect::>() } else { - sv.into_par_iter() + sv.par_iter() .map(|x| ExpandedFrameSlice::from_frame_slice(x)) .collect::>() .par_windows(3) @@ -518,18 +522,22 @@ pub fn read_all_ms1_denoising( max_mz_extension: f64, ims_scaling: f32, max_ims_extension: f32, -) -> Vec { - let reader = timsrust::FileReader::new(path).unwrap(); +) -> Result, TimsRustError> { + let metadata_path = Path::new(&path.clone()).join("analysis.tdf"); + let reader = timsrust::readers::FrameReader::new(path).unwrap(); + let metadata = timsrust::readers::MetadataReader::new(metadata_path).unwrap(); let mut timer = utils::ContextTimer::new("Reading all MS1 frames", true, utils::LogLevel::INFO); - let mut frames = reader.read_all_ms1_frames(); + let frames: Result, _> = reader.get_all_ms1().into_iter().collect(); timer.stop(true); - let ims_converter = reader.get_scan_converter().unwrap(); - let mz_converter = reader.get_tof_converter().unwrap(); + let mut frames = frames?; + + let ims_converter = metadata.im_converter; + let mz_converter = metadata.mz_converter; - frames.retain(|frame| matches!(frame.frame_type, timsrust::FrameType::MS1)); + frames.retain(|frame| matches!(frame.ms_level, MSLevel::MS1)); // let min_intensity = 100u64; // let min_n: usize = 3; @@ -548,29 +556,32 @@ pub fn read_all_ms1_denoising( utils::ContextTimer::new("Denoising all MS1 frames", true, utils::LogLevel::INFO); let out = ms1_denoiser.par_denoise_slice(frames); timer.stop(true); - out + Ok(out) } // This could probably be a macro ... pub fn read_all_dia_denoising( path: String, config: DenoiseConfig, -) -> (Vec>, DIAFrameInfo) { +) -> Result<(Vec>, Vec), TimsRustError> { let mut timer = utils::ContextTimer::new("Reading all DIA frames", true, utils::LogLevel::INFO); - let reader = timsrust::FileReader::new(path.clone()).unwrap(); + let metadata_path = Path::new(&path.clone()).join("analysis.tdf"); + let reader = timsrust::readers::FrameReader::new(path)?; + let metadata = timsrust::readers::MetadataReader::new(metadata_path.clone())?; + let quad_settings = timsrust::readers::QuadrupoleSettingsReader::new(metadata_path)?; - let dia_info = tdf::read_dia_frame_info(path.clone()).unwrap(); - let mut frames = reader.read_all_ms2_frames(); + let frames: Result, _> = reader.get_all_ms2().into_iter().collect(); - let ims_converter = reader.get_scan_converter().unwrap(); - let mz_converter = reader.get_tof_converter().unwrap(); + let ims_converter = metadata.im_converter; + let mz_converter = metadata.mz_converter; timer.stop(true); - frames.retain(|frame| { - matches!( - frame.frame_type, - timsrust::FrameType::MS2(timsrust::AcquisitionType::DIAPASEF) - ) + let mut frames = frames?; + + frames.retain(|frame| match (frame.ms_level, frame.acquisition_type) { + (MSLevel::MS2, AcquisitionType::DIAPASEF) => true, + (MSLevel::MS2, AcquisitionType::DiagonalDIAPASEF) => true, + _ => false, }); let denoiser = DIAFrameDenoiser { @@ -580,7 +591,6 @@ pub fn read_all_dia_denoising( max_mz_extension: config.max_mz_expansion_ratio.into(), ims_scaling: config.ims_scaling, max_ims_extension: config.max_ims_expansion_ratio, - dia_frame_info: dia_info.clone(), ims_converter, mz_converter, }; @@ -589,5 +599,5 @@ pub fn read_all_dia_denoising( let split_frames = denoiser.par_denoise_slice(frames); timer.stop(true); - (split_frames, dia_info) + Ok((split_frames, quad_settings)) } diff --git a/src/aggregation/tracing.rs b/src/aggregation/tracing.rs index d0fd27f..199a149 100644 --- a/src/aggregation/tracing.rs +++ b/src/aggregation/tracing.rs @@ -227,10 +227,16 @@ impl TraceLike for BaseTrace { } } +pub fn calculate_cycle_time(frames: &[DenseFrameWindow]) -> f64 { + let rts = frames.iter().map(|x| x.frame.rt).collect::>(); + let rt_diffs = rts.windows(2).map(|x| x[1] - x[0]).collect::>(); + let cycle_time = rt_diffs.iter().sum::() / rt_diffs.len() as f64; + cycle_time +} + pub fn combine_traces( grouped_denseframe_windows: Vec>, config: TracingConfig, - rt_binsize: f32, ) -> Vec> { // mz_scaling: f64, // rt_scaling: f64, @@ -241,12 +247,18 @@ pub fn combine_traces( let mut timer = utils::ContextTimer::new("Tracing peaks in time", true, utils::LogLevel::INFO); - let grouped_windows: Vec> = grouped_denseframe_windows + // rt_binsize: f32, + + let grouped_windows: Vec<(f64, Vec)> = grouped_denseframe_windows .into_iter() - .map(_flatten_denseframe_vec) + .map(|x| { + let cycle_time = calculate_cycle_time(&x); + let o = _flatten_denseframe_vec(x); + (cycle_time, o) + }) .collect(); - let combine_lambda = |x: Vec| { + let combine_lambda = |cycle_time: f64, x: Vec| { combine_single_window_traces2( x, config.mz_scaling.into(), @@ -257,18 +269,21 @@ pub fn combine_traces( config.max_ims_expansion_ratio, config.min_n.into(), config.min_neighbor_intensity, - rt_binsize, + cycle_time as f32, ) }; // Combine the traces let out: Vec> = if cfg!(feature = "less_parallel") { warn!("Running in single-threaded mode"); - grouped_windows.into_iter().map(combine_lambda).collect() + grouped_windows + .into_iter() + .map(|x| combine_lambda(x.0, x.1)) + .collect() } else { grouped_windows .into_par_iter() - .map(combine_lambda) + .map(|x| combine_lambda(x.0, x.1)) .collect() }; @@ -381,12 +396,16 @@ fn _flatten_denseframe_vec(denseframe_windows: Vec) -> Vec Result<(), std::io::Error> { let args = Args::parse(); if args.write_template { @@ -90,7 +91,7 @@ fn main() { } else { std::fs::write(out_path.clone(), config_str).unwrap(); println!("Wrote default config to {}", out_path); - return; + return Ok(()); } } @@ -130,14 +131,22 @@ fn main() { .map(|path| out_path_dir.join(path).to_path_buf()); log::info!("Reading DIA data from: {}", path_use); - let (dia_frames, dia_info) = + let tmp = aggregation::ms_denoise::read_all_dia_denoising(path_use.clone(), config.denoise_config); - let cycle_time = dia_info.calculate_cycle_time(); + let (dia_frames, dia_info) = match tmp { + Ok(x) => x, + Err(e) => { + log::error!("Error reading DIA data: {:?}", e); + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + e.to_string(), + )); + }, + }; // TODO add here expansion limits - let mut traces = - aggregation::tracing::combine_traces(dia_frames, config.tracing_config, cycle_time); + let mut traces = aggregation::tracing::combine_traces(dia_frames, config.tracing_config); // let out = match out_traces_path { // Some(out_path) => aggregation::tracing::write_trace_csv(&traces, out_path), @@ -225,11 +234,7 @@ fn main() { config.sage_search_config, out_path_features.clone(), 1, - ); - match score_out { - Ok(_) => {}, - Err(e) => { - log::error!("Error scoring pseudospectra: {:?}", e); - }, - } + )?; + + Ok(()) } diff --git a/src/ms/frames/dense_frame_window.rs b/src/ms/frames/dense_frame_window.rs index 9e38787..2cfe89e 100644 --- a/src/ms/frames/dense_frame_window.rs +++ b/src/ms/frames/dense_frame_window.rs @@ -1,25 +1,26 @@ +use std::sync::Arc; + use log::info; use serde::Serialize; -use timsrust::{ - ConvertableIndex, - Frame, +use timsrust::converters::{ + ConvertableDomain, Scan2ImConverter, Tof2MzConverter, }; +use timsrust::{ + AcquisitionType, + Frame, +}; use super::frames::SortingOrder; use super::{ DenseFrame, FrameSlice, + SingleQuadrupoleSettings, TimsPeak, }; -use crate::ms::frames::MsMsFrameSliceWindowInfo; -use crate::ms::tdf::{ - DIAFrameInfo, - ScanRange, -}; -pub type Converters = (timsrust::Scan2ImConverter, timsrust::Tof2MzConverter); +pub type Converters = (Scan2ImConverter, Tof2MzConverter); fn check_peak_sanity(peak: &TimsPeak) { debug_assert!(peak.intensity > 0); debug_assert!(peak.mz > 0.); @@ -32,68 +33,51 @@ pub struct DenseFrameWindow { pub frame: DenseFrame, pub ims_min: f32, pub ims_max: f32, - pub mz_start: f64, - pub mz_end: f64, pub group_id: usize, - pub quad_group_id: usize, + pub quadrupole_setting: SingleQuadrupoleSettings, } + impl DenseFrameWindow { pub fn from_frame_window( frame_window: &FrameSlice, ims_converter: &Scan2ImConverter, mz_converter: &Tof2MzConverter, - dia_info: &DIAFrameInfo, ) -> DenseFrameWindow { - let (window_group_id, ww_quad_group_id, scan_start) = match frame_window.slice_window_info { - None => { - panic!("No window info") - // This branch points to an error in logic ... - // The window info should always be present in this context. - }, - Some(MsMsFrameSliceWindowInfo::WindowGroup(_)) => { + let window_group_id = frame_window.window_group_id; + let foo = match frame_window.acquisition_type { + AcquisitionType::DiagonalDIAPASEF => { // This branch should be easy to implement for things like synchro pasef... // Some details to iron out though ... panic!("Not implemented") }, - Some(MsMsFrameSliceWindowInfo::SingleWindow(ref x)) => { - let window_group_id = x.window_group_id; - let ww_quad_group_id = x.within_window_quad_group_id; - let scan_start = frame_window.scan_start; - (window_group_id, ww_quad_group_id, scan_start) + AcquisitionType::DIAPASEF => { + frame_window.quadrupole_settings.clone() + + // let window_group_id = frame_window.window_group_id; + // let ww_quad_group_id = x.within_window_quad_group_id; + // let scan_start = frame_window.scan_start; + // (window_group_id, ww_quad_group_id, scan_start) }, + _ => panic!("Not implemented"), }; // NOTE: I am swapping here the 'scan start' to be the `ims_end` because // the first scans have lower 1/k0 values. - let ims_max = ims_converter.convert(scan_start as u32) as f32; + let ims_max = ims_converter.convert(foo.scan_start as u32) as f32; let ims_min = - ims_converter.convert((frame_window.scan_offsets.len() + scan_start) as u32) as f32; + ims_converter.convert((frame_window.scan_offsets.len() + foo.scan_start) as u32) as f32; debug_assert!(ims_max <= ims_min); - let scan_range: Option<&ScanRange> = - dia_info.get_quad_windows(window_group_id, ww_quad_group_id); - let scan_range = match scan_range { - Some(x) => x, - None => { - panic!( - "No scan range for window_group_id: {}, within_window_quad_group_id: {}", - window_group_id, ww_quad_group_id - ); - }, - }; - let frame = DenseFrame::from_frame_window(frame_window, ims_converter, mz_converter); DenseFrameWindow { frame, ims_min, ims_max, - mz_start: scan_range.iso_low as f64, - mz_end: scan_range.iso_high as f64, - group_id: window_group_id, - quad_group_id: ww_quad_group_id, + group_id: window_group_id.into(), + quadrupole_setting: foo, } } } @@ -134,14 +118,18 @@ impl DenseFrame { let index = frame.index; let rt = frame.rt; - let frame_type = frame.frame_type; + let acquisition_type = frame.acquisition_type; + let ms_level = frame.ms_level; DenseFrame { raw_peaks: peaks, index, rt, - frame_type, + acquisition_type, + ms_level, sorted: None, + intensity_correction_factor: frame.intensity_correction_factor, + window_group_id: frame.window_group, } } @@ -189,14 +177,18 @@ impl DenseFrame { let index = frame_window.parent_frame_index; let rt = frame_window.rt; - let frame_type = frame_window.frame_type; + let acquisition_type = frame_window.acquisition_type; + let ms_level = frame_window.ms_level; DenseFrame { raw_peaks: peaks, index, rt, - frame_type, + acquisition_type, + ms_level, sorted: None, + intensity_correction_factor: frame_window.intensity_correction_factor, + window_group_id: frame_window.window_group_id, } } diff --git a/src/ms/frames/frame_slice.rs b/src/ms/frames/frame_slice.rs index 48ba993..c034708 100644 --- a/src/ms/frames/frame_slice.rs +++ b/src/ms/frames/frame_slice.rs @@ -1,12 +1,17 @@ use std::fmt; +use std::sync::Arc; use serde::Serialize; use timsrust::{ + AcquisitionType, Frame, - FrameType, + MSLevel, + QuadrupoleSettings, }; -use super::FrameMsMsWindowInfo; +use super::SingleQuadrupoleSettings; +use crate::aggregation::ms_denoise; +use crate::space::quad; use crate::space::space_generics::{ AsNDPointsAtIndex, IntenseAtIndex, @@ -94,26 +99,32 @@ impl fmt::Display for ScanOutOfBoundsError { /// /// Renamed from the frame: /// - parent_frame_index 34 // renamed from Frame.index for clarity. +/// - window_group_id 4 // renamed from Frame.window_group for clarity. /// /// Additions for FrameSlice: /// - scan_start 123 // The scan number of the first scan offset in the current window. -/// - slice_window_info Some(MsMsFrameSliceWindowInfo::SingleWindow(FrameMsMsWindow)) #[derive(Debug, Clone, Serialize)] pub struct FrameSlice<'a> { - // pub scan_offsets: &'a [usize], // Timsrust changed this later ... - pub scan_offsets: &'a [u64], + pub scan_offsets: &'a [usize], pub tof_indices: &'a [u32], pub intensities: &'a [u32], pub parent_frame_index: usize, pub rt: f64, + pub window_group_id: u8, + pub intensity_correction_factor: f64, #[serde(skip)] - pub frame_type: FrameType, + pub ms_level: MSLevel, + + #[serde(skip)] + pub acquisition_type: AcquisitionType, + + #[serde(skip)] + pub quadrupole_settings: SingleQuadrupoleSettings, // From this point on they are local implementations // Before they are used from the timsrust crate. pub scan_start: usize, - pub slice_window_info: Option, } #[derive(Debug, Clone, Serialize)] @@ -123,19 +134,43 @@ pub struct ExpandedFrameSlice { pub intensities: Vec, pub parent_frame_index: usize, pub rt: f64, - pub slice_window_info: Option, + pub window_group_id: u8, + pub intensity_correction_factor: f64, + + #[serde(skip)] + pub quadrupole_settings: SingleQuadrupoleSettings, + + #[serde(skip)] + pub acquisition_type: AcquisitionType, #[serde(skip)] - pub frame_type: FrameType, + pub ms_level: MSLevel, } impl<'a> FrameSlice<'a> { - pub fn slice_frame( + pub fn from_frame(frame: &'a Frame) -> Vec> { + let quad_settings = frame.quadrupole_settings.clone(); + if quad_settings.len() == 0 { + panic!("Runtime error, at this stage at least one quadrupole setting is required"); + } + + let out = (0..quad_settings.len()) + .map(|i| { + let quad_info = + SingleQuadrupoleSettings::from_quad_settings(quad_settings.clone(), i); + FrameSlice::slice_frame(frame, quad_info) + }) + .collect::>(); + + out + } + + fn slice_frame( frame: &'a Frame, - scan_start: usize, - scan_end: usize, - slice_window_info: Option, + quad_info: SingleQuadrupoleSettings, ) -> FrameSlice<'a> { + let scan_start = quad_info.scan_start; + let scan_end = quad_info.scan_end; let scan_offsets = &frame.scan_offsets[scan_start..=scan_end]; let indprt_start = scan_offsets[0] as usize; @@ -151,7 +186,7 @@ impl<'a> FrameSlice<'a> { for i in 1..(scan_offsets.len() - 1) { debug_assert!(scan_offsets[i] <= scan_offsets[i + 1]); debug_assert!( - (scan_offsets[i + 1] - init_offset) <= tof_indices.len() as u64, + (scan_offsets[i + 1] - init_offset) <= tof_indices.len(), "scan_offsets[i+1]: {}, init_offset: {}, tof_indices.len(): {}", scan_offsets[i + 1], init_offset, @@ -166,9 +201,12 @@ impl<'a> FrameSlice<'a> { intensities, parent_frame_index: frame.index, rt: frame.rt, - frame_type: frame.frame_type, + ms_level: frame.ms_level, + acquisition_type: frame.acquisition_type, scan_start, - slice_window_info, + quadrupole_settings: quad_info, + window_group_id: frame.window_group, + intensity_correction_factor: frame.intensity_correction_factor, } } @@ -183,7 +221,7 @@ impl<'a> FrameSlice<'a> { local_index: usize, ) -> usize { debug_assert!(local_index < self.tof_indices.len()); - let search_val = self.scan_offsets[0] + local_index as u64; + let search_val = self.scan_offsets[0] + local_index; let loc = self .scan_offsets .binary_search_by(|x| x.partial_cmp(&search_val).unwrap()); @@ -399,8 +437,9 @@ impl ExpandedFrameSlice { pub fn from_frame_slice(frame_slice: &FrameSlice) -> ExpandedFrameSlice { let parent_frame_index = frame_slice.parent_frame_index; let rt = frame_slice.rt; - let slice_window_info = frame_slice.slice_window_info.clone(); - let frame_type = frame_slice.frame_type; + let quadrupole_settings = frame_slice.quadrupole_settings.clone(); + let acquisition_type = frame_slice.acquisition_type; + let ms_level = frame_slice.ms_level; let scan_numbers = frame_slice.explode_scan_numbers(); // Sort all arrays on the tof indices. @@ -430,8 +469,11 @@ impl ExpandedFrameSlice { intensities, parent_frame_index, rt, - slice_window_info, - frame_type, + quadrupole_settings, + acquisition_type, + ms_level, + window_group_id: frame_slice.window_group_id.clone(), + intensity_correction_factor: frame_slice.intensity_correction_factor.clone(), } } } @@ -439,37 +481,77 @@ impl ExpandedFrameSlice { // Tests for the FrameSlice #[cfg(test)] mod tests { + use std::sync::Arc; + + use timsrust::{ + MSLevel, + QuadrupoleSettings, + }; + use super::*; fn sample_frame() -> Frame { + let ms1_quad_settings = QuadrupoleSettings { + index: 0, + scan_starts: vec![], + scan_ends: vec![], + isolation_mz: vec![], + isolation_width: vec![], + collision_energy: vec![], + }; + let arc_ms1_quad_settings = Arc::new(ms1_quad_settings); Frame { index: 0, scan_offsets: vec![0, 0, 0, 0, 0, 3, 5, 6], tof_indices: vec![100, 101, 102, 10, 20, 30], intensities: vec![123, 111, 12, 3, 4, 1], rt: 65.34, - frame_type: FrameType::MS1, + ms_level: MSLevel::MS1, + acquisition_type: AcquisitionType::DIAPASEF, + quadrupole_settings: arc_ms1_quad_settings, + window_group: 0, + intensity_correction_factor: 1., } } #[test] fn test_frame_slice() { let frame = sample_frame(); - let frame_slice = FrameSlice::slice_frame(&frame, 3, 5, None); + let quad_setting = SingleQuadrupoleSettings { + parent_index: 0, + scan_start: 3, + scan_end: 5, + isolation_mz: 100., + isolation_max: 100., + isolation_min: 100., + isolation_width: 25., + collision_energy: 10., + }; + let frame_slice = FrameSlice::slice_frame(&frame, quad_setting); assert_eq!(frame_slice.scan_offsets, &[0, 0, 3]); assert_eq!(frame_slice.tof_indices, &[100, 101, 102]); assert_eq!(frame_slice.intensities, &[123, 111, 12]); assert_eq!(frame_slice.parent_frame_index, 0); assert_eq!(frame_slice.rt, 65.34); - assert_eq!(frame_slice.frame_type, FrameType::MS1); + assert_eq!(frame_slice.ms_level, MSLevel::MS1); assert_eq!(frame_slice.scan_start, 3); } #[test] fn test_global_scan_at_index() { let frame = sample_frame(); - let frame_slice = FrameSlice::slice_frame(&frame, 3, 5, None); + let quad_setting = SingleQuadrupoleSettings { + parent_index: 0, + scan_start: 3, + scan_end: 5, + isolation_mz: 100., + isolation_max: 100., + isolation_min: 100., + isolation_width: 25., + collision_energy: 10., + }; + let frame_slice = FrameSlice::slice_frame(&frame, quad_setting); assert_eq!(frame_slice.tof_indices, &[100, 101, 102]); assert_eq!(frame_slice.global_scan_at_index(0), 4); @@ -482,7 +564,17 @@ mod tests { fn test_global_scan_at_index_oob_fails() { // these should fail ... test that it fails. let frame = sample_frame(); - let frame_slice = FrameSlice::slice_frame(&frame, 3, 5, None); + let quad_setting = SingleQuadrupoleSettings { + parent_index: 0, + scan_start: 3, + scan_end: 5, + isolation_mz: 100., + isolation_max: 100., + isolation_min: 100., + isolation_width: 25., + collision_energy: 10., + }; + let frame_slice = FrameSlice::slice_frame(&frame, quad_setting); assert_eq!(frame_slice.tof_indices, &[100, 101, 102]); frame_slice.global_scan_at_index(3); } @@ -490,7 +582,17 @@ mod tests { #[test] fn test_explode_scan_numbers() { let frame = sample_frame(); - let frame_slice = FrameSlice::slice_frame(&frame, 3, 5, None); + let quad_setting = SingleQuadrupoleSettings { + parent_index: 0, + scan_start: 3, + scan_end: 5, + isolation_mz: 100., + isolation_max: 100., + isolation_min: 100., + isolation_width: 25., + collision_energy: 10., + }; + let frame_slice = FrameSlice::slice_frame(&frame, quad_setting); assert_eq!(frame_slice.tof_indices, &[100, 101, 102]); assert_eq!(frame_slice.scan_offsets, &[0, 0, 3]); assert_eq!(frame_slice.explode_scan_numbers(), vec![4, 4, 4]); @@ -499,7 +601,17 @@ mod tests { #[test] fn test_tof_intensities_at_scan() { let frame = sample_frame(); - let frame_slice = FrameSlice::slice_frame(&frame, 3, 5, None); + let quad_setting = SingleQuadrupoleSettings { + parent_index: 0, + scan_start: 3, + scan_end: 5, + isolation_mz: 100., + isolation_max: 100., + isolation_min: 100., + isolation_width: 25., + collision_energy: 10., + }; + let frame_slice = FrameSlice::slice_frame(&frame, quad_setting); assert_eq!(frame_slice.tof_indices, &[100, 101, 102]); assert_eq!(frame_slice.scan_offsets, &[0, 0, 3]); @@ -547,7 +659,17 @@ mod tests { #[test] fn test_tof_range_in_tolerance_at_scan() { let frame = sample_frame(); - let frame_slice = FrameSlice::slice_frame(&frame, 3, 7, None); + let quad_setting = SingleQuadrupoleSettings { + parent_index: 0, + scan_start: 3, + scan_end: 7, + isolation_mz: 100., + isolation_max: 100., + isolation_min: 100., + isolation_width: 25., + collision_energy: 10., + }; + let frame_slice = FrameSlice::slice_frame(&frame, quad_setting); assert_eq!(frame_slice.tof_indices, &[100, 101, 102, 10, 20, 30]); assert_eq!(frame_slice.scan_offsets, &[0, 0, 3, 5, 6]); @@ -617,13 +739,26 @@ mod tests { } fn sample_ms2_frame() -> Frame { + let ms2_quad_settings = QuadrupoleSettings { + index: 0, + scan_starts: vec![2, 6], + scan_ends: vec![5, 9], + isolation_mz: vec![100., 101.], + isolation_width: vec![25., 25.], + collision_energy: vec![10., 10.], + }; + let arc_ms2_quad_settings = Arc::new(ms2_quad_settings); Frame { index: 0, scan_offsets: vec![0, 0, 3, 5, 6], tof_indices: vec![100, 101, 102, 10, 20, 30], intensities: vec![123, 111, 12, 3, 4, 1], rt: 65.34, - frame_type: FrameType::MS2(timsrust::AcquisitionType::DIAPASEF), + ms_level: MSLevel::MS2, + acquisition_type: AcquisitionType::DIAPASEF, + quadrupole_settings: arc_ms2_quad_settings, + window_group: 1, + intensity_correction_factor: 1., } } } @@ -912,9 +1047,3 @@ impl RangeSet { false } } - -#[derive(Debug, Clone, Serialize)] -pub enum MsMsFrameSliceWindowInfo { - WindowGroup(usize), - SingleWindow(FrameMsMsWindowInfo), -} diff --git a/src/ms/frames/frame_slice_rt_window.rs b/src/ms/frames/frame_slice_rt_window.rs index 825a81e..d123558 100644 --- a/src/ms/frames/frame_slice_rt_window.rs +++ b/src/ms/frames/frame_slice_rt_window.rs @@ -1,6 +1,10 @@ use log::trace; use serde::Serialize; -use timsrust::ConvertableIndex; +use timsrust::converters::{ + ConvertableDomain, + Scan2ImConverter, + Tof2MzConverter, +}; use super::{ ExpandedFrameSlice, @@ -225,8 +229,8 @@ pub struct RawScaleTimsPeak { impl RawScaleTimsPeak { pub fn to_timspeak( &self, - mz_converter: &timsrust::Tof2MzConverter, - ims_converter: &timsrust::Scan2ImConverter, + mz_converter: &Tof2MzConverter, + ims_converter: &Scan2ImConverter, ) -> TimsPeak { TimsPeak { intensity: self.intensity as u32, diff --git a/src/ms/frames/frames.rs b/src/ms/frames/frames.rs index 13d7851..fa6351a 100644 --- a/src/ms/frames/frames.rs +++ b/src/ms/frames/frames.rs @@ -1,5 +1,11 @@ +use std::sync::Arc; + use serde::Serialize; -pub use timsrust::FrameType; +pub use timsrust::{ + AcquisitionType, + MSLevel, + QuadrupoleSettings, +}; use crate::space::space_generics::HasIntensity; @@ -56,23 +62,63 @@ pub struct DenseFrame { pub raw_peaks: Vec, pub index: usize, pub rt: f64, + pub window_group_id: u8, + pub intensity_correction_factor: f64, + + #[serde(skip_serializing)] + pub acquisition_type: AcquisitionType, #[serde(skip_serializing)] - pub frame_type: FrameType, + pub ms_level: MSLevel, #[serde(skip_serializing)] pub sorted: Option, } -/// Information on the context of a window in a frame. -/// -/// This adds to a frame slice the context of the what isolation was used -/// to generate the frame slice. -#[derive(Debug, Clone, Serialize)] -pub struct FrameMsMsWindowInfo { - pub mz_start: f32, - pub mz_end: f32, - pub window_group_id: usize, - pub within_window_quad_group_id: usize, - pub global_quad_row_id: usize, +#[derive(Debug, Clone, Serialize, PartialEq)] +pub struct SingleQuadrupoleSettings { + pub parent_index: usize, + pub scan_start: usize, + pub scan_end: usize, + pub isolation_mz: f64, + pub isolation_max: f64, + pub isolation_min: f64, + pub isolation_width: f64, + pub collision_energy: f64, +} + +impl SingleQuadrupoleSettings { + pub fn from_quad_settings( + quad_settings: Arc, + index: usize, + ) -> Self { + let isolation_mz = quad_settings.isolation_mz[index]; + let isolation_width = quad_settings.isolation_width[index]; + let isolation_max = isolation_mz + (isolation_width / 2.); + let isolation_min = isolation_mz - (isolation_width / 2.); + let collision_energy = quad_settings.collision_energy[index]; + + Self { + parent_index: quad_settings.index, + scan_start: quad_settings.scan_starts[index], + scan_end: quad_settings.scan_ends[index], + isolation_mz, + isolation_max, + isolation_min, + isolation_width, + collision_energy, + } + } +} + +impl PartialOrd for SingleQuadrupoleSettings { + fn partial_cmp( + &self, + other: &Self, + ) -> Option { + match self.parent_index.partial_cmp(&other.parent_index) { + Some(std::cmp::Ordering::Equal) => self.scan_start.partial_cmp(&other.scan_start), + x => x, + } + } } diff --git a/src/ms/frames/mod.rs b/src/ms/frames/mod.rs index 64a8db0..0f36625 100644 --- a/src/ms/frames/mod.rs +++ b/src/ms/frames/mod.rs @@ -9,10 +9,9 @@ pub use dense_frame_window::{ pub use frame_slice::{ ExpandedFrameSlice, FrameSlice, - MsMsFrameSliceWindowInfo, }; pub use frames::{ DenseFrame, - FrameMsMsWindowInfo, + SingleQuadrupoleSettings, TimsPeak, }; diff --git a/src/ms/mod.rs b/src/ms/mod.rs index 1e9820a..5f89a78 100644 --- a/src/ms/mod.rs +++ b/src/ms/mod.rs @@ -1,3 +1,2 @@ pub mod frames; pub mod sorting; -pub mod tdf; diff --git a/src/ms/tdf.rs b/src/ms/tdf.rs deleted file mode 100644 index 6fbfea2..0000000 --- a/src/ms/tdf.rs +++ /dev/null @@ -1,567 +0,0 @@ -use std::path::Path; - -use log::{ - debug, - info, -}; -use sqlx::{ - FromRow, - Pool, - Sqlite, - SqlitePool, -}; -use timsrust::{ - ConvertableIndex, - Frame, -}; -use tokio; -use tokio::runtime::Runtime; - -use crate::ms::frames::{ - FrameMsMsWindowInfo, - FrameSlice, - MsMsFrameSliceWindowInfo, -}; - -// Diaframemsmsinfo = vec of frame_id -> windowgroup_id -// diaframemsmswindows = vec[(windowgroup_id, scanstart, scanend, iso_mz, iso_with, nce)] - -#[derive(Debug, Clone)] -pub struct ScanRange { - pub row_id: usize, - pub scan_start: usize, - pub scan_end: usize, - pub iso_mz: f32, - pub iso_width: f32, - pub nce: f32, - pub ims_start: f32, - pub ims_end: f32, - pub iso_low: f32, - pub iso_high: f32, - pub window_group_id: usize, - pub within_window_quad_group_id: usize, -} - -impl ScanRange { - pub fn new( - row_id: usize, - window_group_id: usize, - within_window_quad_group_id: usize, - scan_start: usize, - scan_end: usize, - iso_mz: f32, - iso_width: f32, - nce: f32, - scan_converter: &timsrust::Scan2ImConverter, - ) -> Self { - // Note that here I swap the start and end, - // because lower scan numbers are actually - // higher 1/k0 values. ... i think... - let ims_end = scan_converter.convert(scan_start as u32); - let ims_start = scan_converter.convert(scan_end as u32); - - debug_assert!(ims_start < ims_end); - let iso_low = iso_mz - iso_width / 2.0; - let iso_high = iso_mz + iso_width / 2.0; - - Self { - row_id, - scan_start, - scan_end, - iso_mz, - iso_width, - nce, - ims_start: ims_start as f32, - ims_end: ims_end as f32, - iso_low, - iso_high, - window_group_id, - within_window_quad_group_id, - } - } -} - -impl From for FrameMsMsWindowInfo { - fn from(val: ScanRange) -> Self { - FrameMsMsWindowInfo { - mz_start: val.iso_low, - mz_end: val.iso_high, - window_group_id: val.window_group_id, - within_window_quad_group_id: val.within_window_quad_group_id, - global_quad_row_id: val.row_id, - } - } -} - -#[derive(Debug, Clone)] -pub struct DIAWindowGroup { - pub window_group_id: usize, - pub scan_ranges: Vec, -} - -#[derive(Debug, Clone)] -pub enum GroupingLevel { - WindowGroup, // Technically this is the same as the frame level ... - QuadWindowGroup, -} - -#[derive(Debug, Clone)] -pub struct DIAFrameInfo { - pub groups: Vec>, - /// Frame Groups is a vec of length equal to the number of frames. - /// Each element is an Option that is the index of the group - /// that the frame belongs to. - pub frame_groups: Vec>, - pub retention_times: Vec>, - pub grouping_level: GroupingLevel, - pub number_of_groups: usize, - - /// The row to group is meant to map the `Isolation window row id` - /// to the grouping level it will have... for diaPASEF, since every - /// scan range has a different quand window, the number of distinct - /// groups is the number of scan ranges (window groups+scan range - /// combinations). For the case of diagonal PASEF, the number of - /// groups is the number of window groups, since the scan ranges - /// are not independent from each other. - pub row_to_group: Vec, -} - -// TODO rename or split this ... since it is becoming more -// of a splitter than a frame info reader. -// Maybe a builder -> splitter pattern? -impl DIAFrameInfo { - pub fn get_dia_frame_window_group( - &self, - frame_id: usize, - ) -> Option<&DIAWindowGroup> { - let group_id = self.frame_groups[frame_id]; - match group_id { - None => None, - Some(group_id) => self.groups[group_id].as_ref(), - } - } - - async fn rts_from_tdf_connection(conn: &Pool) -> Result>, sqlx::Error> { - // To calculate cycle time -> - // DiaFrameMsMsInfo -> Get the frames that match a specific id (one for each ...) - // Frames -> SELECT id, time FROM Frames -> make a Vec>, map the former - // framer id list (no value should be None). - // Scan diff the new vec! - let results: Vec<(i32, f32)> = sqlx::query_as("SELECT Id, Time FROM Frames") - .fetch_all(conn) - .await?; - let mut retention_times = Vec::new(); - for row in results.iter() { - let id: usize = row.0 as usize; - let time: f32 = row.1; - retention_times.resize(id + 1, None); - retention_times[id] = Some(time); - } - Ok(retention_times) - } - - pub fn calculate_cycle_time(&self) -> f32 { - let mut group_cycle_times = Vec::new(); - - for (i, group) in self.groups.iter().enumerate() { - if group.is_none() { - continue; - } - - let mapping_frames: Vec = self - .frame_groups - .iter() - .enumerate() - .filter(|(_, group_id)| { - if group_id.is_none() { - return false; - } - let group_id = group_id.unwrap(); - group_id == i - }) - .map(|(frame_id, _group_id)| frame_id) - .collect(); - - let local_times = mapping_frames - .iter() - .map(|frame_id| self.retention_times[*frame_id].unwrap()) - .scan(0.0, |acc, x| { - let out = x - *acc; - *acc = x; - Some(out) - }) - .collect::>(); - - let cycle_time = local_times.iter().sum::() / local_times.len() as f32; - group_cycle_times.push(cycle_time); - } - - debug!("Group cycle times: {:?}", group_cycle_times); - let avg_cycle_time = group_cycle_times.iter().sum::() / group_cycle_times.len() as f32; - avg_cycle_time - } - - pub fn split_frame<'a, 'b>( - &'b self, - frame: &'a Frame, - window_group: &DIAWindowGroup, - ) -> Result, &'static str> - where - 'a: 'b, - { - let mut out_frames = Vec::new(); - for scan_range in window_group.scan_ranges.iter() { - let slice_w_info: MsMsFrameSliceWindowInfo = - MsMsFrameSliceWindowInfo::SingleWindow(scan_range.clone().into()); - let frame_slice = FrameSlice::slice_frame( - frame, - scan_range.scan_start, - scan_range.scan_end, - Some(slice_w_info), - ); - out_frames.push(frame_slice); - } - - Ok(out_frames) - } - - pub fn split_frame_windows<'a>( - &'a self, - frames: &'a [Frame], - ) -> Vec> { - let mut out = Vec::new(); - - match self.grouping_level { - GroupingLevel::WindowGroup => { - for _ in 0..(self.groups.len() + 1) { - out.push(Vec::new()); - } - }, - GroupingLevel::QuadWindowGroup => { - for _ in 0..(self.row_to_group.len() + 1) { - out.push(Vec::new()); - } - }, - } - - for frame in frames { - let group = self - .get_dia_frame_window_group(frame.index) - .expect("Frame is not in MS2 frames"); - - match self.grouping_level { - GroupingLevel::WindowGroup => { - panic!("WindowGroup grouping level not implemented for splitting frames") - //out[group.id].push(frame_window); - }, - GroupingLevel::QuadWindowGroup => { - let frame_windows = self - .split_frame(frame, group) - .expect("Error splitting frame"); - for frame_window in frame_windows { - match &frame_window.slice_window_info { - None => { - panic!("Frame window has no slice window info") - }, - Some(MsMsFrameSliceWindowInfo::SingleWindow(scan_range)) => { - out[scan_range.global_quad_row_id].push(frame_window); - }, - Some(MsMsFrameSliceWindowInfo::WindowGroup(group)) => { - out[*group].push(frame_window); - }, - } - } - }, - } - } - - // Sort by ascending rt - for group in out.iter_mut() { - group.sort_by(|a, b| a.rt.partial_cmp(&b.rt).unwrap()); - } - out.retain(|x| !x.is_empty()); - - // Debug assert that the frames are sorted by rt - if cfg!(debug_assertions) { - for group in out.iter() { - for i in 0..(group.len() - 1) { - debug_assert!(group[i].rt <= group[i + 1].rt); - } - } - } - - out - } - - pub fn get_quad_windows( - &self, - scan_group_id: usize, - quad_group_id: usize, - ) -> Option<&ScanRange> { - let group = self.groups[scan_group_id].as_ref(); - let group = match group { - None => { - panic!( - "Group not found for scan group id: {}, in groups n={}", - scan_group_id, - self.groups.len() - ) - }, - Some(group) => group, - }; - - let quad_group = group.scan_ranges.get(quad_group_id); - let quad_group = match quad_group { - None => { - panic!( - "Quad group not found for quad group id: {}, in scan_ranges {:?}", - quad_group_id, group.scan_ranges - ) - }, - Some(quad_group) => quad_group, - }; - - Some(quad_group) - } -} - -// Reference for the tables: - -// CREATE TABLE DiaFrameMsMsInfo ( -// Frame INTEGER PRIMARY KEY, -// WindowGroup INTEGER NOT NULL, -// FOREIGN KEY (Frame) REFERENCES Frames (Id), -// FOREIGN KEY (WindowGroup) REFERENCES DiaFrameMsMsWindowGroups (Id) -// ) - -// CREATE TABLE DiaFrameMsMsWindows ( -// WindowGroup INTEGER NOT NULL, -// ScanNumBegin INTEGER NOT NULL, -// ScanNumEnd INTEGER NOT NULL, -// IsolationMz REAL NOT NULL, -// IsolationWidth REAL NOT NULL, -// CollisionEnergy REAL NOT NULL, -// PRIMARY KEY(WindowGroup, ScanNumBegin), -// FOREIGN KEY (WindowGroup) REFERENCES DiaFrameMsMsWindowGroups (Id) -// ) WITHOUT ROWID - -#[derive(Clone, FromRow, Debug)] -pub struct DiaFrameMsMsWindowInfo { - #[sqlx(rename = "WindowGroup")] - pub window_group: i32, - #[sqlx(rename = "ScanNumBegin")] - pub scan_num_begin: i32, - #[sqlx(rename = "ScanNumEnd")] - pub scan_num_end: i32, - #[sqlx(rename = "IsolationMz")] - pub isolation_mz: f32, - #[sqlx(rename = "IsolationWidth")] - pub isolation_width: f32, - #[sqlx(rename = "CollisionEnergy")] - pub collision_energy: f32, -} - -impl DiaFrameMsMsWindowInfo { - fn into_scan_range( - &self, - id: usize, - quad_id: usize, - scan_converter: &timsrust::Scan2ImConverter, - ) -> ScanRange { - ScanRange::new( - id, - self.window_group as usize, - quad_id, - self.scan_num_begin as usize, - self.scan_num_end as usize, - self.isolation_mz, - self.isolation_width, - self.collision_energy, - scan_converter, - ) - } -} - -#[derive(Debug)] -pub struct FrameInfoBuilder { - pub tdf_path: String, - pub scan_converter: timsrust::Scan2ImConverter, -} - -impl FrameInfoBuilder { - pub fn from_dotd_path(dotd_path: String) -> Self { - let reader = timsrust::FileReader::new(dotd_path.clone()).unwrap(); - let scan_converter = reader.get_scan_converter().unwrap(); - - // Find an 'analysis.tdf' file inside the dotd file (directory). - let tdf_path = Path::new(dotd_path.as_str()) - .join("analysis.tdf") - .into_os_string() - .into_string() - .unwrap(); - info!("tdf_path: {:?}", tdf_path); - Self { - tdf_path, - scan_converter, - } - } - - pub fn build(&self) -> Result { - let rt = Runtime::new().unwrap(); - - rt.block_on(async { self.build_async().await }) - } - - async fn build_async(&self) -> Result { - let db = SqlitePool::connect(&self.tdf_path).await?; - - // This vec maps frame_id -> window_group_id - let frame_info = self.get_frame_mapping(&db).await?; - - // This vec maps window_group_id -> Vec - // And also returns the grouping level. - let (group_mapping, grouping_level, row_to_group) = self.get_frame_windows(&db).await?; - let number_of_groups = row_to_group.iter().max().unwrap() + 1; - - debug!("Number of groups: {}", number_of_groups); - - let max_window_id = group_mapping.len() - 1; - - let mut groups_vec_o = (0..(max_window_id + 1)).map(|_| None).collect::>(); - for (i, scan_ranges) in group_mapping.into_iter().enumerate() { - let scan_ranges = match scan_ranges { - None => continue, - Some(scan_ranges) => scan_ranges, - }; - debug!("Scan ranges i={}: {:?}", i, scan_ranges); - if cfg!(debug_assertions) { - for scan_range in scan_ranges.iter() { - debug_assert!(scan_range.window_group_id == i) - } - }; - if scan_ranges.is_empty() { - continue; - } else { - groups_vec_o[i] = Some(DIAWindowGroup { - window_group_id: i, - scan_ranges, - }); - } - } - - let frame_info = DIAFrameInfo { - groups: groups_vec_o, - frame_groups: frame_info, - retention_times: DIAFrameInfo::rts_from_tdf_connection(&db).await?, - grouping_level, - number_of_groups, - row_to_group, - }; - - Ok(frame_info) - } - - async fn get_frame_mapping( - &self, - db: &Pool, - ) -> Result>, sqlx::Error> { - let result: Vec<(i32, i32)> = - sqlx::query_as("SELECT Frame, WindowGroup FROM DiaFrameMsMsInfo;") - .fetch_all(db) - .await?; - - let frame_info = result - .iter() - .map(|(id, group)| (*id as usize, *group as usize)) - .collect::>(); - - let max_id = frame_info.iter().map(|(id, _)| id).max().unwrap(); - let mut ids_map_vec = vec![None; max_id + 1]; - for (id, group) in frame_info { - ids_map_vec[id] = Some(group); - } - - Ok(ids_map_vec) - } - - async fn get_frame_windows( - &self, - db: &Pool, - ) -> Result<(Vec>>, GroupingLevel, Vec), sqlx::Error> { - let result: Vec = sqlx::query_as::<_, DiaFrameMsMsWindowInfo>( - "SELECT - WindowGroup, - ScanNumBegin, - ScanNumEnd, - IsolationMz, - IsolationWidth, - CollisionEnergy - FROM DiaFrameMsMsWindows", - ) - .fetch_all(db) - .await - .unwrap(); - - let grouping_level = if result.len() > 200 { - log::info!( - "More than 200 scan ranges, using WindowGroup grouping level. (diagonal PASEF?)" - ); - GroupingLevel::WindowGroup - } else { - log::info!( - "Less than 200 scan ranges detected, using QuadWindowGroup grouping level. \ - (diaPASEF?)" - ); - GroupingLevel::QuadWindowGroup - }; - - let max_window_id: usize = result - .iter() - .map(|window| window.window_group) - .max() - .unwrap() as usize; - - let mut group_map_vec: Vec>> = vec![None; max_window_id + 1]; - - let mut scangroup_id = 0; - let mut row_to_group = Vec::new(); - for window in result { - // TODO this is maybe a good place to make the trouping ... - // If its diapasef, the groups are quad+window groups. - // If its diagonal, the groups are only window groups. - let usize_wg = window.window_group as usize; - if group_map_vec[usize_wg].is_none() { - group_map_vec[usize_wg] = Some(Vec::new()); - } - - match &mut group_map_vec[usize_wg] { - None => continue, - Some(scan_ranges) => { - let quad_id = scan_ranges.len(); - scan_ranges.push(window.into_scan_range( - scangroup_id, - quad_id, - &self.scan_converter, - )); - scangroup_id += 1; - }, - } - - match grouping_level { - GroupingLevel::WindowGroup => { - row_to_group.push(usize_wg); - }, - GroupingLevel::QuadWindowGroup => { - row_to_group.push(scangroup_id); - }, - } - } - Ok((group_map_vec, grouping_level, row_to_group)) - } -} - -// TODO refactor this to make it a constructor method ... -pub fn read_dia_frame_info(dotd_file: String) -> Result { - let builder = FrameInfoBuilder::from_dotd_path(dotd_file); - builder.build() -} diff --git a/src/scoring.rs b/src/scoring.rs index 5d053f4..ebbc807 100644 --- a/src/scoring.rs +++ b/src/scoring.rs @@ -194,7 +194,7 @@ pub fn score_pseudospectra( config: SageSearchConfig, out_path_features: Option, num_report_psms: usize, -) -> Result, Box> { +) -> Result, std::io::Error> { // 1. Buid raw spectra from the pseudospectra let take_top_n = 250; @@ -256,8 +256,18 @@ pub fn score_pseudospectra( config.fasta_path.clone(), parameters.decoy_tag.clone(), parameters.generate_decoys, - ) - .expect("Error reading fasta"); + ); + + let sage_fasta = match sage_fasta { + Ok(x) => x, + Err(e) => { + log::error!("Error reading fasta: {:?}", e); + return Err(std::io::Error::new( + std::io::ErrorKind::Other, + e.to_string(), + )); + }, + }; let db = parameters.clone().build(sage_fasta); From 63c343cd6fa052e04924daee7c360c9998cf9405 Mon Sep 17 00:00:00 2001 From: "J. Sebastian Paez" Date: Thu, 26 Sep 2024 10:02:12 -0700 Subject: [PATCH 2/3] chore: cargo update and fmt --- Cargo.lock | 401 +++++++++++++--------------- Cargo.toml | 31 ++- deny.toml | 62 ++--- src/aggregation/tracing.rs | 6 +- src/ms/frames/dense_frame_window.rs | 1 - tests/test_window_parsing.rs | 69 ----- 6 files changed, 249 insertions(+), 321 deletions(-) delete mode 100644 tests/test_window_parsing.rs diff --git a/Cargo.lock b/Cargo.lock index 697d2a5..542b15f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,10 +3,10 @@ version = 3 [[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" @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -78,36 +78,36 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -198,17 +198,6 @@ dependencies = [ "num", ] -[[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.3.0" @@ -229,9 +218,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "brotli" @@ -274,19 +263,19 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cc" -version = "1.0.98" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -309,9 +298,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.7" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" +checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3" dependencies = [ "clap_builder", "clap_derive", @@ -319,9 +308,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.7" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" +checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b" dependencies = [ "anstream", "anstyle", @@ -331,27 +320,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.5" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.77", ] [[package]] name = "clap_lex" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "console" @@ -363,7 +352,7 @@ dependencies = [ "lazy_static", "libc", "unicode-width", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -388,9 +377,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crc32fast" @@ -480,9 +469,9 @@ dependencies = [ [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" @@ -492,12 +481,12 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "env_logger" -version = "0.7.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" dependencies = [ - "atty", "humantime", + "is-terminal", "log", "regex", "termcolor", @@ -533,9 +522,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", "miniz_oxide", @@ -595,27 +584,21 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "humantime" -version = "1.3.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error", -] +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -636,9 +619,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown", @@ -693,11 +676,22 @@ dependencies = [ "toml", ] +[[package]] +name = "is-terminal" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -716,27 +710,27 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lexical-core" @@ -804,9 +798,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libm" @@ -847,25 +841,24 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lz4" -version = "1.24.0" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +checksum = "4d1febb2b4a79ddd1980eede06a8f7902197960aa0383ffcfdd62fe723036725" dependencies = [ - "libc", "lz4-sys", ] [[package]] name = "lz4-sys" -version = "1.9.4" +version = "1.11.1+lz4-1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" dependencies = [ "cc", "libc", @@ -873,9 +866,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" @@ -888,11 +881,11 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -911,9 +904,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -1042,27 +1035,30 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "d30538d42559de6b034bc76fd6dd4c38961b1ee5c6c56e3808c50128fdbc22ce" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_env_logger" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" +checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" dependencies = [ "env_logger", "log", @@ -1070,24 +1066,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1144,18 +1134,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.1" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +checksum = "355ae415ccd3a04315d3f8246e86d67689ea74d88d915576e1589a351062a13b" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.10.4" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -1165,9 +1155,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -1176,9 +1166,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "rusqlite" @@ -1186,7 +1176,7 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -1196,9 +1186,9 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -1258,7 +1248,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.77", ] [[package]] @@ -1275,13 +1265,19 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "smallvec" version = "1.13.2" @@ -1319,9 +1315,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -1339,22 +1335,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.77", ] [[package]] @@ -1397,9 +1393,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.13" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", @@ -1409,18 +1405,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.13" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ "indexmap", "serde", @@ -1441,15 +1437,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "utf8parse" @@ -1465,9 +1461,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" @@ -1477,34 +1473,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1512,54 +1509,32 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" - -[[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" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys", + "windows-sys 0.59.0", ] -[[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 = "windows-core" version = "0.52.0" @@ -1578,11 +1553,20 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -1596,79 +1580,80 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.8" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52e9c97a68071b23e836c9380edae937f17b9c4667bd021973efc689f618d" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.77", ] [[package]] @@ -1710,9 +1695,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.10+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index 0806300..d3a6dee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,25 +10,34 @@ license = "Apache-2.0" timsrust = "= 0.4.1" # Serialization -serde = { version = "1.0.193", features = ["derive"] } -serde_json = "1.0.108" -rayon = "1.8.0" -indicatif = {version = "*", features = ["rayon"]} -log = "0.4" -pretty_env_logger = "0.4" -num = "0.4.1" -num-traits = "0.2.18" -clap = {version = "4.4.17", features = ["derive"]} +serde = { version = "1.0.210", features = ["derive"] } +serde_json = "1.0.128" +clap = { version = "4.4.17", features = ["derive"] } csv = "1.3.0" + +# Random ... rand = "0.8.5" +# Paralellization +rayon = "1.10.0" + +# Logging/ Messaging +indicatif = { version = "*", features = ["rayon"] } +log = "0.4.22" +pretty_env_logger = "0.5" + +# Q: Not sure if I still use this +num = "0.4.1" +num-traits = "0.2.19" + # Sage sage-core = { git = "https://github.com/lazear/sage.git", rev = "9e870429889b341c4773df32b65e553283301a93" } -toml = "0.8.8" +toml = "0.8.19" [features] par_dataprep = [] -less_parallel = [] # Mostly for profiling reasons ... looking at flamegraphs is hard with rayon... +less_parallel = [ +] # Mostly for profiling reasons ... looking at flamegraphs is hard with rayon... [profile.release] lto = "thin" diff --git a/deny.toml b/deny.toml index 51e81af..ee0e475 100644 --- a/deny.toml +++ b/deny.toml @@ -20,17 +20,17 @@ # dependencies not shared by any other crates, would be ignored, as the target # list here is effectively saying which targets you are building for. targets = [ - { triple = "aarch64-apple-darwin" }, - { triple = "x86_64-apple-darwin" }, - { triple = "i686-pc-windows-gnu" }, - { triple = "i686-pc-windows-msvc" }, - { triple = "x86_64-pc-windows-gnu" }, - { triple = "x86_64-pc-windows-msvc" }, - { triple = "i686-unknown-linux-gnu" }, - { triple = "x86_64-unknown-linux-gnu" }, - { triple = "x86_64-unknown-linux-musl" }, - # { triple = "wasm32-unknown-unknown" }, - # { triple = "x86_64-unknown-redox" }, + { triple = "aarch64-apple-darwin" }, + { triple = "x86_64-apple-darwin" }, + { triple = "i686-pc-windows-gnu" }, + { triple = "i686-pc-windows-msvc" }, + { triple = "x86_64-pc-windows-gnu" }, + { triple = "x86_64-pc-windows-msvc" }, + { triple = "i686-unknown-linux-gnu" }, + { triple = "x86_64-unknown-linux-gnu" }, + { triple = "x86_64-unknown-linux-musl" }, + # { triple = "wasm32-unknown-unknown" }, + # { triple = "x86_64-unknown-redox" }, ] # When creating the dependency graph used as the source of truth when checks are # executed, this field can be used to prune crates from the graph, removing them @@ -73,8 +73,8 @@ yanked = "warn" # A list of advisory IDs to ignore. Note that ignored advisories will still # output a note when they are encountered. ignore = [ - #"RUSTSEC-0000-0000", - "RUSTSEC-2021-0145", # atty... potential unaligner when using custom allocators. + #"RUSTSEC-0000-0000", + "RUSTSEC-2023-0086", # Lexical-core -> arrow issue, updated in main in Sept-2024, unreleased. ] # Threshold for security vulnerabilities, any vulnerability with a CVSS score # lower than the range specified will be ignored. Note that ignored advisories @@ -101,13 +101,13 @@ version = 2 # See https://spdx.org/licenses/ for list of possible licenses # [possible values: any SPDX 3.11 short identifier (+ optional exception)]. allow = [ - "MIT", - "Apache-2.0", - "Apache-2.0 WITH LLVM-exception", - "BSD-3-Clause", - "Unicode-DFS-2016", - "Zlib", - # Thank Jesus for rerun that compiled the following for me... + "MIT", + "Apache-2.0", + "Apache-2.0 WITH LLVM-exception", + "BSD-3-Clause", + "Unicode-DFS-2016", + "Zlib", + # Thank Jesus for rerun that compiled the following for me... ] # The confidence threshold for detecting a license from license text. @@ -146,8 +146,8 @@ license-files = [{ path = "LICENSE", hash = 0xbd0eed23 }] # and the crate will be checked normally, which may produce warnings or errors # depending on the rest of your configuration #license-files = [ - # Each entry is a crate relative path, and the (opaque) hash of its contents - #{ path = "LICENSE", hash = 0xbd0eed23 } +# Each entry is a crate relative path, and the (opaque) hash of its contents +#{ path = "LICENSE", hash = 0xbd0eed23 } #] [licenses.private] @@ -160,7 +160,7 @@ ignore = false # is only published to private registries, and ignore is true, the crate will # not have its license(s) checked registries = [ - #"https://sekretz.com/registry + #"https://sekretz.com/registry ] # This section is considered when running `cargo deny check bans`. @@ -187,17 +187,17 @@ workspace-default-features = "allow" external-default-features = "allow" # List of crates that are allowed. Use with care! allow = [ - #{ name = "ansi_term", version = "=0.11.0" }, + #{ name = "ansi_term", version = "=0.11.0" }, ] # List of crates to deny deny = [ - # Each entry the name of a crate and a version range. If version is - # not specified, all versions will be matched. - #{ name = "ansi_term", version = "=0.11.0" }, - # - # Wrapper crates can optionally be specified to allow the crate when it - # is a direct dependency of the otherwise banned crate - #{ name = "ansi_term", version = "=0.11.0", wrappers = [] }, + # Each entry the name of a crate and a version range. If version is + # not specified, all versions will be matched. + #{ name = "ansi_term", version = "=0.11.0" }, + # + # Wrapper crates can optionally be specified to allow the crate when it + # is a direct dependency of the otherwise banned crate + #{ name = "ansi_term", version = "=0.11.0", wrappers = [] }, ] # List of features to allow/deny diff --git a/src/aggregation/tracing.rs b/src/aggregation/tracing.rs index 199a149..5aa22d0 100644 --- a/src/aggregation/tracing.rs +++ b/src/aggregation/tracing.rs @@ -231,6 +231,9 @@ pub fn calculate_cycle_time(frames: &[DenseFrameWindow]) -> f64 { let rts = frames.iter().map(|x| x.frame.rt).collect::>(); let rt_diffs = rts.windows(2).map(|x| x[1] - x[0]).collect::>(); let cycle_time = rt_diffs.iter().sum::() / rt_diffs.len() as f64; + + assert!(cycle_time > 0.); + cycle_time } @@ -251,7 +254,8 @@ pub fn combine_traces( let grouped_windows: Vec<(f64, Vec)> = grouped_denseframe_windows .into_iter() - .map(|x| { + .map(|mut x| { + x.par_sort_unstable_by(|a, b| a.frame.rt.partial_cmp(&b.frame.rt).unwrap()); let cycle_time = calculate_cycle_time(&x); let o = _flatten_denseframe_vec(x); (cycle_time, o) diff --git a/src/ms/frames/dense_frame_window.rs b/src/ms/frames/dense_frame_window.rs index 2cfe89e..9b25e53 100644 --- a/src/ms/frames/dense_frame_window.rs +++ b/src/ms/frames/dense_frame_window.rs @@ -37,7 +37,6 @@ pub struct DenseFrameWindow { pub quadrupole_setting: SingleQuadrupoleSettings, } - impl DenseFrameWindow { pub fn from_frame_window( frame_window: &FrameSlice, diff --git a/tests/test_window_parsing.rs b/tests/test_window_parsing.rs deleted file mode 100644 index 9df5bda..0000000 --- a/tests/test_window_parsing.rs +++ /dev/null @@ -1,69 +0,0 @@ -use ionmesh::ms::tdf::{ - FrameInfoBuilder, - GroupingLevel, -}; - -#[test] -fn test_dia_pasef() { - let finfo_b = FrameInfoBuilder::from_dotd_path("tests/data/diapasef_tdf/data.d".into()); - let finfo = finfo_b.build(); - - assert!(finfo.is_ok()); - - let finfo = finfo.unwrap(); - - // The number of ids in `DiaFrameMsMsWindowGroups` + 1 bc 0 is not used - assert_eq!(finfo.groups.len(), 9); - - assert!(finfo.groups[0].is_none()); - for group in finfo.groups.iter().skip(1) { - assert!(group.is_some()); - } - - // Make sure the grouping is correctly assigned... for diaPASEF it should - // be `QuadWindowGroup` - match finfo.grouping_level { - GroupingLevel::QuadWindowGroup => {}, - GroupingLevel::WindowGroup => { - assert!(false); - }, - } - - // Make sure the grouping is correct. - // For this diapasef file is 8 * 2 (8 window groups, 2 isolation windows per group) - assert_eq!(finfo.row_to_group.iter().max().unwrap(), &(8 * 2)); - - // println!("{:?}", finfo); - // assert!(false) -} - -#[test] -fn test_synchro_dia_pasef() { - let finfo_b = FrameInfoBuilder::from_dotd_path("tests/data/synchropasef_tdf/data.d".into()); - let finfo = finfo_b.build(); - - assert!(finfo.is_ok()); - - let finfo = finfo.unwrap(); - - // The number of ids in `DiaFrameMsMsWindowGroups` + 1, bc 0 is not used - assert_eq!(finfo.groups.len(), 5); - assert!(finfo.groups[0].is_none()); - for group in finfo.groups.iter().skip(1) { - assert!(group.is_some()); - } - - // Make sure the grouping is correctly assigned... for diaPASEF it should - // be `QuadWindowGroup` - match finfo.grouping_level { - GroupingLevel::QuadWindowGroup => { - assert!(false); - }, - GroupingLevel::WindowGroup => {}, - } - - // Make sure the grouping is correct. - assert_eq!(finfo.row_to_group.iter().max().unwrap(), &4); - - // println!("{:?}", finfo); -} From 541a335dcafebafadc42272ca32e8ba03b649be3 Mon Sep 17 00:00:00 2001 From: "J. Sebastian Paez" Date: Thu, 26 Sep 2024 10:12:48 -0700 Subject: [PATCH 3/3] (chore) removed unused imports --- src/aggregation/dbscan/denseframe_dbscan.rs | 7 +------ src/aggregation/ms_denoise.rs | 1 - src/main.rs | 1 - src/ms/frames/dense_frame_window.rs | 2 -- src/ms/frames/frame_slice.rs | 4 ---- 5 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/aggregation/dbscan/denseframe_dbscan.rs b/src/aggregation/dbscan/denseframe_dbscan.rs index 03b4268..a0be7a6 100644 --- a/src/aggregation/dbscan/denseframe_dbscan.rs +++ b/src/aggregation/dbscan/denseframe_dbscan.rs @@ -1,8 +1,4 @@ -use timsrust::{ - AcquisitionType, - MSLevel, - QuadrupoleSettings, -}; +use timsrust::MSLevel; use crate::aggregation::aggregators::TimsPeakAggregator; use crate::aggregation::converters::{ @@ -12,7 +8,6 @@ use crate::aggregation::converters::{ use crate::aggregation::dbscan::dbscan::dbscan_generic; use crate::ms::frames::{ DenseFrame, - SingleQuadrupoleSettings, TimsPeak, }; use crate::space::space_generics::{ diff --git a/src/aggregation/ms_denoise.rs b/src/aggregation/ms_denoise.rs index 31b3cb2..e82465d 100644 --- a/src/aggregation/ms_denoise.rs +++ b/src/aggregation/ms_denoise.rs @@ -39,7 +39,6 @@ use crate::ms::frames::{ DenseFrameWindow, ExpandedFrameSlice, FrameSlice, - SingleQuadrupoleSettings, TimsPeak, }; use crate::space::space_generics::{ diff --git a/src/main.rs b/src/main.rs index 2a39caf..b0a12e4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,7 +18,6 @@ extern crate log; extern crate pretty_env_logger; use std::fs; -use std::io::Error; use std::path::Path; use clap::Parser; diff --git a/src/ms/frames/dense_frame_window.rs b/src/ms/frames/dense_frame_window.rs index 9b25e53..f49938e 100644 --- a/src/ms/frames/dense_frame_window.rs +++ b/src/ms/frames/dense_frame_window.rs @@ -1,5 +1,3 @@ -use std::sync::Arc; - use log::info; use serde::Serialize; use timsrust::converters::{ diff --git a/src/ms/frames/frame_slice.rs b/src/ms/frames/frame_slice.rs index c034708..0e2b828 100644 --- a/src/ms/frames/frame_slice.rs +++ b/src/ms/frames/frame_slice.rs @@ -1,17 +1,13 @@ use std::fmt; -use std::sync::Arc; use serde::Serialize; use timsrust::{ AcquisitionType, Frame, MSLevel, - QuadrupoleSettings, }; use super::SingleQuadrupoleSettings; -use crate::aggregation::ms_denoise; -use crate::space::quad; use crate::space::space_generics::{ AsNDPointsAtIndex, IntenseAtIndex,