From e31855769ef1c7f6d1e68dadca1e74520f22d96a Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Sat, 9 Nov 2024 15:47:36 +0100 Subject: [PATCH 01/20] Upgrade GitHub Artifact Action to version 4. --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bbf4dbd..21b559d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -160,7 +160,7 @@ jobs: - name: Create artifact from binary if: (github.event_name == 'push' || github.event_name == 'pull-request' || github.event_name == 'workflow_dispatch' ) && github.event.ref == 'refs/heads/main' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ env.ASSET }} path: ${{ env.ASSET }} From 35a43d58f6664cc7c82cc78e1d29e4f33bf6f9f8 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 13 Nov 2024 20:24:06 +0100 Subject: [PATCH 02/20] Add new argument to external to choose the UMI destination. --- src/main.rs | 3 ++- src/read_editing.rs | 6 ++++++ src/umi_external.rs | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/read_editing.rs diff --git a/src/main.rs b/src/main.rs index 8b09ced..2f8d274 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,7 @@ mod auxiliary; mod file_io; mod umi_errors; mod umi_external; +mod read_editing; const LOGO: &str = r#" ░░░░░░░░░░░░░░░░░░░░░░░░░░░ SciLifeLab - National Genomics Infrastructure ░░░░░░░░░░░░░░░░░░░░░░░░░░░ @@ -25,7 +26,7 @@ https://github.com/SciLifeLab/umi-transfer #[derive(clap::Parser)] #[clap( - version = "1.5.0", + version = "1.6.0", author = "Written by Matthias Zepper, Judit Hohenthal & Johannes Alneberg", about = "A tool for transferring Unique Molecular Identifiers (UMIs).", long_about = "Most tools capable of using UMIs to increase the accuracy of quantitative DNA sequencing experiments expect the respective UMI sequence to be embedded into the reads' IDs. You can use `umi-transfer external` to retrieve UMIs from a separate FastQ file and embed them to the IDs of your paired FastQ files." diff --git a/src/read_editing.rs b/src/read_editing.rs new file mode 100644 index 0000000..3bcd684 --- /dev/null +++ b/src/read_editing.rs @@ -0,0 +1,6 @@ + +#[derive(clap::ValueEnum, Clone,Debug)] +pub enum UMIDestination { + Header, + Inline, +} \ No newline at end of file diff --git a/src/umi_external.rs b/src/umi_external.rs index fec0983..dab854b 100644 --- a/src/umi_external.rs +++ b/src/umi_external.rs @@ -5,9 +5,18 @@ use std::path::PathBuf; use super::file_io; use crate::auxiliary::{threads_available, threads_per_task}; +use crate::read_editing::UMIDestination; use crate::umi_errors::RuntimeErrors; #[derive(Debug, Parser)] pub struct OptsExternal { + #[clap( + short = 'p', + long = "position", + help = "Choose the target position for the UMI: 'header' or 'inline'. Defaults to 'header'. + \n ", + default_value = "header", + )] + target_position: UMIDestination, #[clap( short = 'c', long = "correct_numbers", @@ -15,6 +24,7 @@ pub struct OptsExternal { \n " )] edit_nr: bool, + #[clap( short = 'z', long = "gzip", From 67d646444fa504fd6d8a4fcc0f22b5b04e4a2fdd Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 13 Nov 2024 21:15:25 +0100 Subject: [PATCH 03/20] Allow variable UMI Destinations in umi_external.rs --- src/read_editing.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++ src/umi_external.rs | 37 ++++++++++---------------------- 2 files changed, 63 insertions(+), 26 deletions(-) diff --git a/src/read_editing.rs b/src/read_editing.rs index 3bcd684..fd2d6ca 100644 --- a/src/read_editing.rs +++ b/src/read_editing.rs @@ -1,6 +1,58 @@ +use anyhow::{Error}; + #[derive(clap::ValueEnum, Clone,Debug)] pub enum UMIDestination { Header, Inline, +} + + +// Updates the header and description of the reads accordingly +pub fn umi_to_record_header( + input: bio::io::fastq::Record, + umi: &[u8], + umi_sep: Option<&String>, + edit_nr: Option, +) -> Result { + let delim = umi_sep.as_ref().map(|s| s.as_str()).unwrap_or(":"); // the delimiter for the UMI + if let Some(number) = edit_nr { + let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); + let mut new_desc = String::from(input.desc().unwrap()); + new_desc.replace_range(0..1, &number.to_string()); + let desc: Option<&str> = Some(&new_desc); + let new_record = + bio::io::fastq::Record::with_attrs(new_id, desc, input.seq(), input.qual()); + Ok(new_record) + } else { + let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); + let new_record = + bio::io::fastq::Record::with_attrs(new_id, input.desc(), input.seq(), input.qual()); + Ok(new_record) + } +} + + +// Updates the header and description of the reads accordingly +pub fn umi_to_record_seq( + input: bio::io::fastq::Record, + umi: &[u8], + umi_sep: Option<&String>, + edit_nr: Option, +) -> Result { + let delim = umi_sep.as_ref().map(|s| s.as_str()).unwrap_or(":"); // the delimiter for the UMI + if let Some(number) = edit_nr { + let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); + let mut new_desc = String::from(input.desc().unwrap()); + new_desc.replace_range(0..1, &number.to_string()); + let desc: Option<&str> = Some(&new_desc); + let new_record = + bio::io::fastq::Record::with_attrs(new_id, desc, input.seq(), input.qual()); + Ok(new_record) + } else { + let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); + let new_record = + bio::io::fastq::Record::with_attrs(new_id, input.desc(), input.seq(), input.qual()); + Ok(new_record) + } } \ No newline at end of file diff --git a/src/umi_external.rs b/src/umi_external.rs index dab854b..e2a41b5 100644 --- a/src/umi_external.rs +++ b/src/umi_external.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; use super::file_io; use crate::auxiliary::{threads_available, threads_per_task}; -use crate::read_editing::UMIDestination; +use crate::read_editing::{umi_to_record_header,umi_to_record_seq,UMIDestination}; use crate::umi_errors::RuntimeErrors; #[derive(Debug, Parser)] pub struct OptsExternal { @@ -193,7 +193,11 @@ pub fn run(args: OptsExternal) -> Result { if r1_rec.id().eq(ru_rec.id()) { // Write to Output file let read_nr = if edit_nr { Some(1) } else { None }; - let r1_rec = update_record(r1_rec, ru_rec.seq(), args.delim.as_ref(), read_nr)?; + + let r1_rec = match args.target_position { + UMIDestination::Header => umi_to_record_header(r1_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), + UMIDestination::Inline => umi_to_record_seq(r1_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), + }?; write_output_r1.write_record(r1_rec)?; } else { @@ -203,7 +207,11 @@ pub fn run(args: OptsExternal) -> Result { if r2_rec.id().eq(ru_rec.id()) { // Write to Output file let read_nr = if edit_nr { Some(2) } else { None }; - let r2_rec = update_record(r2_rec, ru_rec.seq(), args.delim.as_ref(), read_nr)?; + + let r2_rec = match args.target_position { + UMIDestination::Header => umi_to_record_header(r2_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), + UMIDestination::Inline => umi_to_record_seq(r2_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), + }?; write_output_r2.write_record(r2_rec)?; } else { @@ -214,26 +222,3 @@ pub fn run(args: OptsExternal) -> Result { Ok(counter) } -// Updates the header and description of the reads accordingly -fn update_record( - input: bio::io::fastq::Record, - umi: &[u8], - umi_sep: Option<&String>, - edit_nr: Option, -) -> Result { - let delim = umi_sep.as_ref().map(|s| s.as_str()).unwrap_or(":"); // the delimiter for the UMI - if let Some(number) = edit_nr { - let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); - let mut new_desc = String::from(input.desc().unwrap()); - new_desc.replace_range(0..1, &number.to_string()); - let desc: Option<&str> = Some(&new_desc); - let new_record = - bio::io::fastq::Record::with_attrs(new_id, desc, input.seq(), input.qual()); - Ok(new_record) - } else { - let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); - let new_record = - bio::io::fastq::Record::with_attrs(new_id, input.desc(), input.seq(), input.qual()); - Ok(new_record) - } -} From c54f8b73d6e1ce83761ea5a6ad0cf941dd9a4b7e Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 13 Nov 2024 22:17:00 +0100 Subject: [PATCH 04/20] Ugly concat implementation for UMIs. --- src/read_editing.rs | 33 +++++++++++++++++++-------------- src/umi_external.rs | 6 +++--- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/read_editing.rs b/src/read_editing.rs index fd2d6ca..c85d4f3 100644 --- a/src/read_editing.rs +++ b/src/read_editing.rs @@ -1,10 +1,7 @@ -use anyhow::{Error}; - - #[derive(clap::ValueEnum, Clone,Debug)] pub enum UMIDestination { - Header, - Inline, + Header, + Inline, } @@ -16,8 +13,8 @@ pub fn umi_to_record_header( edit_nr: Option, ) -> Result { let delim = umi_sep.as_ref().map(|s| s.as_str()).unwrap_or(":"); // the delimiter for the UMI + let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); if let Some(number) = edit_nr { - let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); let mut new_desc = String::from(input.desc().unwrap()); new_desc.replace_range(0..1, &number.to_string()); let desc: Option<&str> = Some(&new_desc); @@ -25,7 +22,6 @@ pub fn umi_to_record_header( bio::io::fastq::Record::with_attrs(new_id, desc, input.seq(), input.qual()); Ok(new_record) } else { - let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); let new_record = bio::io::fastq::Record::with_attrs(new_id, input.desc(), input.seq(), input.qual()); Ok(new_record) @@ -37,22 +33,31 @@ pub fn umi_to_record_header( pub fn umi_to_record_seq( input: bio::io::fastq::Record, umi: &[u8], - umi_sep: Option<&String>, + umi_qual: &[u8], edit_nr: Option, ) -> Result { - let delim = umi_sep.as_ref().map(|s| s.as_str()).unwrap_or(":"); // the delimiter for the UMI + + let mut concatenated_seq = Vec::with_capacity(input.seq().len() + umi.len()); + concatenated_seq.extend_from_slice(umi); + concatenated_seq.extend_from_slice(input.seq()); + let concatenated_seq_str = String::from_utf8(concatenated_seq).unwrap(); + + let mut concatenated_qual = Vec::with_capacity(input.qual().len() + umi_qual.len()); + concatenated_qual.extend_from_slice(umi); + concatenated_qual.extend_from_slice(input.seq()); + let concatenated_qual_str = String::from_utf8(concatenated_qual).unwrap(); + if let Some(number) = edit_nr { - let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); let mut new_desc = String::from(input.desc().unwrap()); new_desc.replace_range(0..1, &number.to_string()); let desc: Option<&str> = Some(&new_desc); - let new_record = - bio::io::fastq::Record::with_attrs(new_id, desc, input.seq(), input.qual()); + // ToDo: unnecessary conversion to bytes and back to String, but Record::new() does not take arguments + let new_record = + bio::io::fastq::Record::with_attrs(input.id(), desc, concatenated_seq_str.as_bytes(), concatenated_qual_str.as_bytes()); Ok(new_record) } else { - let new_id = &[input.id(), delim, std::str::from_utf8(umi).unwrap()].concat(); let new_record = - bio::io::fastq::Record::with_attrs(new_id, input.desc(), input.seq(), input.qual()); + bio::io::fastq::Record::with_attrs(input.id(), input.desc(), concatenated_seq_str.as_bytes(), concatenated_qual_str.as_bytes()); Ok(new_record) } } \ No newline at end of file diff --git a/src/umi_external.rs b/src/umi_external.rs index e2a41b5..f298e48 100644 --- a/src/umi_external.rs +++ b/src/umi_external.rs @@ -196,7 +196,7 @@ pub fn run(args: OptsExternal) -> Result { let r1_rec = match args.target_position { UMIDestination::Header => umi_to_record_header(r1_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), - UMIDestination::Inline => umi_to_record_seq(r1_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), + UMIDestination::Inline => umi_to_record_seq(r1_rec, ru_rec.seq(), ru_rec.qual(), read_nr), }?; write_output_r1.write_record(r1_rec)?; @@ -207,10 +207,10 @@ pub fn run(args: OptsExternal) -> Result { if r2_rec.id().eq(ru_rec.id()) { // Write to Output file let read_nr = if edit_nr { Some(2) } else { None }; - + let r2_rec = match args.target_position { UMIDestination::Header => umi_to_record_header(r2_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), - UMIDestination::Inline => umi_to_record_seq(r2_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), + UMIDestination::Inline => umi_to_record_seq(r2_rec, ru_rec.seq(), ru_rec.qual() , read_nr), }?; write_output_r2.write_record(r2_rec)?; From 75ee4b343233172f9226fa05a2adf77af6af7331 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 13 Nov 2024 22:29:22 +0100 Subject: [PATCH 05/20] Bugfix for qualities in inline mode. --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/read_editing.rs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0d9af00..0e09f56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1426,7 +1426,7 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "umi-transfer" -version = "1.5.0" +version = "1.6.0-dev" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index 578272c..a4bfb0e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "umi-transfer" -version = "1.5.0" +version = "1.6.0-dev" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/read_editing.rs b/src/read_editing.rs index c85d4f3..d21cf91 100644 --- a/src/read_editing.rs +++ b/src/read_editing.rs @@ -43,8 +43,8 @@ pub fn umi_to_record_seq( let concatenated_seq_str = String::from_utf8(concatenated_seq).unwrap(); let mut concatenated_qual = Vec::with_capacity(input.qual().len() + umi_qual.len()); - concatenated_qual.extend_from_slice(umi); - concatenated_qual.extend_from_slice(input.seq()); + concatenated_qual.extend_from_slice(umi_qual); + concatenated_qual.extend_from_slice(input.qual()); let concatenated_qual_str = String::from_utf8(concatenated_qual).unwrap(); if let Some(number) = edit_nr { From bae41cf6e40bc73aa802924566016366b5923fd2 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Thu, 14 Nov 2024 10:58:02 +0100 Subject: [PATCH 06/20] Linting --- src/main.rs | 2 +- src/read_editing.rs | 23 ++++++++++++++--------- src/umi_external.rs | 21 ++++++++++++++------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2f8d274..0d1f296 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,9 +11,9 @@ use crate::umi_external::OptsExternal; ///use crate::umi_internal::OptsInternal; mod auxiliary; mod file_io; +mod read_editing; mod umi_errors; mod umi_external; -mod read_editing; const LOGO: &str = r#" ░░░░░░░░░░░░░░░░░░░░░░░░░░░ SciLifeLab - National Genomics Infrastructure ░░░░░░░░░░░░░░░░░░░░░░░░░░░ diff --git a/src/read_editing.rs b/src/read_editing.rs index d21cf91..b0128ad 100644 --- a/src/read_editing.rs +++ b/src/read_editing.rs @@ -1,10 +1,9 @@ -#[derive(clap::ValueEnum, Clone,Debug)] +#[derive(clap::ValueEnum, Clone, Debug)] pub enum UMIDestination { Header, Inline, } - // Updates the header and description of the reads accordingly pub fn umi_to_record_header( input: bio::io::fastq::Record, @@ -28,7 +27,6 @@ pub fn umi_to_record_header( } } - // Updates the header and description of the reads accordingly pub fn umi_to_record_seq( input: bio::io::fastq::Record, @@ -36,7 +34,6 @@ pub fn umi_to_record_seq( umi_qual: &[u8], edit_nr: Option, ) -> Result { - let mut concatenated_seq = Vec::with_capacity(input.seq().len() + umi.len()); concatenated_seq.extend_from_slice(umi); concatenated_seq.extend_from_slice(input.seq()); @@ -52,12 +49,20 @@ pub fn umi_to_record_seq( new_desc.replace_range(0..1, &number.to_string()); let desc: Option<&str> = Some(&new_desc); // ToDo: unnecessary conversion to bytes and back to String, but Record::new() does not take arguments - let new_record = - bio::io::fastq::Record::with_attrs(input.id(), desc, concatenated_seq_str.as_bytes(), concatenated_qual_str.as_bytes()); + let new_record = bio::io::fastq::Record::with_attrs( + input.id(), + desc, + concatenated_seq_str.as_bytes(), + concatenated_qual_str.as_bytes(), + ); Ok(new_record) } else { - let new_record = - bio::io::fastq::Record::with_attrs(input.id(), input.desc(), concatenated_seq_str.as_bytes(), concatenated_qual_str.as_bytes()); + let new_record = bio::io::fastq::Record::with_attrs( + input.id(), + input.desc(), + concatenated_seq_str.as_bytes(), + concatenated_qual_str.as_bytes(), + ); Ok(new_record) } -} \ No newline at end of file +} diff --git a/src/umi_external.rs b/src/umi_external.rs index f298e48..215792d 100644 --- a/src/umi_external.rs +++ b/src/umi_external.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; use super::file_io; use crate::auxiliary::{threads_available, threads_per_task}; -use crate::read_editing::{umi_to_record_header,umi_to_record_seq,UMIDestination}; +use crate::read_editing::{umi_to_record_header, umi_to_record_seq, UMIDestination}; use crate::umi_errors::RuntimeErrors; #[derive(Debug, Parser)] pub struct OptsExternal { @@ -14,7 +14,7 @@ pub struct OptsExternal { long = "position", help = "Choose the target position for the UMI: 'header' or 'inline'. Defaults to 'header'. \n ", - default_value = "header", + default_value = "header" )] target_position: UMIDestination, #[clap( @@ -195,8 +195,12 @@ pub fn run(args: OptsExternal) -> Result { let read_nr = if edit_nr { Some(1) } else { None }; let r1_rec = match args.target_position { - UMIDestination::Header => umi_to_record_header(r1_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), - UMIDestination::Inline => umi_to_record_seq(r1_rec, ru_rec.seq(), ru_rec.qual(), read_nr), + UMIDestination::Header => { + umi_to_record_header(r1_rec, ru_rec.seq(), args.delim.as_ref(), read_nr) + } + UMIDestination::Inline => { + umi_to_record_seq(r1_rec, ru_rec.seq(), ru_rec.qual(), read_nr) + } }?; write_output_r1.write_record(r1_rec)?; @@ -209,8 +213,12 @@ pub fn run(args: OptsExternal) -> Result { let read_nr = if edit_nr { Some(2) } else { None }; let r2_rec = match args.target_position { - UMIDestination::Header => umi_to_record_header(r2_rec, ru_rec.seq(), args.delim.as_ref(), read_nr), - UMIDestination::Inline => umi_to_record_seq(r2_rec, ru_rec.seq(), ru_rec.qual() , read_nr), + UMIDestination::Header => { + umi_to_record_header(r2_rec, ru_rec.seq(), args.delim.as_ref(), read_nr) + } + UMIDestination::Inline => { + umi_to_record_seq(r2_rec, ru_rec.seq(), ru_rec.qual(), read_nr) + } }?; write_output_r2.write_record(r2_rec)?; @@ -221,4 +229,3 @@ pub fn run(args: OptsExternal) -> Result { println!("Processed {:?} records", counter); Ok(counter) } - From 3f777992d6f8fc0961d46f497b36c7afad6721dd Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Tue, 10 Dec 2024 18:39:47 +0100 Subject: [PATCH 07/20] Add unit tests for new read_editing.rs file. --- src/read_editing.rs | 89 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/src/read_editing.rs b/src/read_editing.rs index b0128ad..0fe4915 100644 --- a/src/read_editing.rs +++ b/src/read_editing.rs @@ -48,7 +48,9 @@ pub fn umi_to_record_seq( let mut new_desc = String::from(input.desc().unwrap()); new_desc.replace_range(0..1, &number.to_string()); let desc: Option<&str> = Some(&new_desc); - // ToDo: unnecessary conversion to bytes and back to String, but Record::new() does not take arguments + // Unnecessary conversion to bytes and back to String, but Record::new() does + // not take arguments and the fields of struct `bio::io::fastq::Record` are private, + // so I can't implement another method to create a new record. let new_record = bio::io::fastq::Record::with_attrs( input.id(), desc, @@ -66,3 +68,88 @@ pub fn umi_to_record_seq( Ok(new_record) } } +#[cfg(test)] +mod tests { + + use super::*; + + #[test] + fn test_umi_to_record_header_with_edits() { + let input = bio::io::fastq::Record::with_attrs( + "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031", + Some("1:N:0:GCTTCAGGGT+AAGGTAGCGT"), + b"TCGTTTTCCGC", + b"FFFFFFFFFFF", + ); + let umi = b"ACCAGCTA"; + let umi_sep = "_".to_string(); + let edit_nr = Some(5); + + let result = umi_to_record_header(input, umi, Some(&umi_sep), edit_nr).unwrap(); + assert_eq!( + result.id(), + "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031_ACCAGCTA" + ); + assert_eq!(result.desc(), Some("5:N:0:GCTTCAGGGT+AAGGTAGCGT")); + assert_eq!(result.seq(), b"TCGTTTTCCGC"); + assert_eq!(result.qual(), b"FFFFFFFFFFF"); + } + + #[test] + fn test_umi_to_record_header_plain() { + let input = bio::io::fastq::Record::with_attrs( + "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031", + Some("1:N:0:GCTTCAGGGT+AAGGTAGCGT"), + b"TCGTTTTCCGC", + b"FFFFFFFFFFF", + ); + let umi = b"ACCAGCTA"; + let umi_sep = ":".to_string(); + + let result = umi_to_record_header(input, umi, Some(&umi_sep), None).unwrap(); + assert_eq!( + result.id(), + "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031:ACCAGCTA" + ); + assert_eq!(result.desc(), Some("1:N:0:GCTTCAGGGT+AAGGTAGCGT")); + assert_eq!(result.seq(), b"TCGTTTTCCGC"); + assert_eq!(result.qual(), b"FFFFFFFFFFF"); + } + + #[test] + fn test_umi_to_record_seq_with_edit_nr() { + let input = bio::io::fastq::Record::with_attrs( + "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031", + Some("1:N:0:GCTTCAGGGT+AAGGTAGCGT"), + b"TCGTTTTCCGC", + b"!!!!", + ); + let umi = b"ACCAGCTA"; + let umi_qual = b"########"; + let edit_nr = Some(5); + + let result = umi_to_record_seq(input, umi, umi_qual, edit_nr).unwrap(); + assert_eq!(result.id(), "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031"); + assert_eq!(result.desc(), Some("5:N:0:GCTTCAGGGT+AAGGTAGCGT")); + assert_eq!(result.seq(), b"ACCAGCTATCGTTTTCCGC"); + assert_eq!(result.qual(), b"########FFFFFFFFFFF"); + } + + #[test] + fn test_umi_to_record_seq_without_edit_nr() { + let input = bio::io::fastq::Record::with_attrs( + "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031", + Some("1:N:0:GCTTCAGGGT+AAGGTAGCGT"), + b"TCGTTTTCCGC", + b"FFFFFFFFFFF", + ); + let umi = b"ACCAGCTA"; + let umi_qual = b"########"; + + let result = umi_to_record_seq(input, umi, umi_qual, None).unwrap(); + assert_eq!(result.id(), "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031"); + assert_eq!(result.desc(), Some("1:N:0:GCTTCAGGGT+AAGGTAGCGT")); + assert_eq!(result.seq(), b"ACCAGCTATCGTTTTCCGC"); + assert_eq!(result.qual(), b"########FFFFFFFFFFF"); + } +} From 5dbb24e6199f34545aceaf726ff746054d4665a6 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Mon, 3 Feb 2025 20:56:30 +0100 Subject: [PATCH 08/20] Rename the integration test variables to include header, so the inline tests can be added later. --- tests/auxiliary.rs | 51 ++++++++++++------ ...integration_tests_external_filecontents.rs | 20 +++---- ...rrect_read1.fq => header_correct_read1.fq} | 0 ...read1.fq.gz => header_correct_read1.fq.gz} | Bin ....fq.gz => header_correct_read1_lvl9.fq.gz} | Bin ...rrect_read2.fq => header_correct_read2.fq} | 0 ...read2.fq.gz => header_correct_read2.fq.gz} | Bin ....fq.gz => header_correct_read2_lvl9.fq.gz} | Bin ...ted_read1.fq => header_corrected_read1.fq} | 0 ...ted_read2.fq => header_corrected_read2.fq} | 0 10 files changed, 45 insertions(+), 26 deletions(-) rename tests/results/{correct_read1.fq => header_correct_read1.fq} (100%) rename tests/results/{correct_read1.fq.gz => header_correct_read1.fq.gz} (100%) rename tests/results/{correct_read1_lvl9.fq.gz => header_correct_read1_lvl9.fq.gz} (100%) rename tests/results/{correct_read2.fq => header_correct_read2.fq} (100%) rename tests/results/{correct_read2.fq.gz => header_correct_read2.fq.gz} (100%) rename tests/results/{correct_read2_lvl9.fq.gz => header_correct_read2_lvl9.fq.gz} (100%) rename tests/results/{corrected_read1.fq => header_corrected_read1.fq} (100%) rename tests/results/{corrected_read2.fq => header_corrected_read2.fq} (100%) diff --git a/tests/auxiliary.rs b/tests/auxiliary.rs index 13ab695..05c7c22 100644 --- a/tests/auxiliary.rs +++ b/tests/auxiliary.rs @@ -30,18 +30,26 @@ pub struct TestFiles { #[allow(dead_code)] pub struct TestOutput { // Struct to hold the paths to validated output files. - pub correct_read1: PathBuf, - pub correct_read2: PathBuf, - pub compressed_correct_read1: PathBuf, - pub compressed_correct_read2: PathBuf, - pub more_compressed_correct_read1: PathBuf, - pub more_compressed_correct_read2: PathBuf, - pub corrected_read1: PathBuf, - pub corrected_read2: PathBuf, + pub header_read1: PathBuf, + pub header_read2: PathBuf, + pub header_compressed_read1: PathBuf, + pub header_compressed_read2: PathBuf, + pub header_more_compressed_read1: PathBuf, + pub header_more_compressed_read2: PathBuf, + pub header_corrected_read1: PathBuf, + pub header_corrected_read2: PathBuf, pub delim_underscore_read1: PathBuf, pub delim_underscore_read2: PathBuf, pub umi_read2_switch_read1: PathBuf, pub umi_read2_switch_read2: PathBuf, + pub inline_read1: PathBuf, + pub inline_read2: PathBuf, + pub inline_compressed_read1: PathBuf, + pub inline_compressed_read2: PathBuf, + pub inline_more_compressed_read1: PathBuf, + pub inline_more_compressed_read2: PathBuf, + pub inline_corrected_read1: PathBuf, + pub inline_corrected_read2: PathBuf, } #[allow(dead_code)] @@ -92,18 +100,29 @@ pub fn setup_integration_test( let test_output = if with_results { let temp = TestOutput { - correct_read1: temp_dir.path().join("correct_read1.fq"), - correct_read2: temp_dir.path().join("correct_read2.fq"), - compressed_correct_read1: temp_dir.path().join("correct_read1.fq.gz"), - compressed_correct_read2: temp_dir.path().join("correct_read2.fq.gz"), - more_compressed_correct_read1: temp_dir.path().join("correct_read1_lvl9.fq.gz"), - more_compressed_correct_read2: temp_dir.path().join("correct_read2_lvl9.fq.gz"), - corrected_read1: temp_dir.path().join("corrected_read1.fq"), - corrected_read2: temp_dir.path().join("corrected_read2.fq"), + // Header-based examples + header_read1: temp_dir.path().join("header_correct_read1.fq"), + header_read2: temp_dir.path().join("header_correct_read2.fq"), + header_compressed_read1: temp_dir.path().join("header_correct_read1.fq.gz"), + header_compressed_read2: temp_dir.path().join("header_correct_read2.fq.gz"), + header_more_compressed_read1: temp_dir.path().join("header_correct_read1_lvl9.fq.gz"), + header_more_compressed_read2: temp_dir.path().join("header_correct_read2_lvl9.fq.gz"), + header_corrected_read1: temp_dir.path().join("header_corrected_read1.fq"), + header_corrected_read2: temp_dir.path().join("header_corrected_read2.fq"), + // Special cases (unchanged) delim_underscore_read1: temp_dir.path().join("delim_underscore_read1.fq"), delim_underscore_read2: temp_dir.path().join("delim_underscore_read2.fq"), umi_read2_switch_read1: temp_dir.path().join("umi_read2_switch_read1.fq"), umi_read2_switch_read2: temp_dir.path().join("umi_read2_switch_read2.fq"), + // Inline examples + inline_read1: temp_dir.path().join("inline_correct_read1.fq"), + inline_read2: temp_dir.path().join("inline_correct_read2.fq"), + inline_compressed_read1: temp_dir.path().join("inline_correct_read1.fq.gz"), + inline_compressed_read2: temp_dir.path().join("inline_correct_read2.fq.gz"), + inline_more_compressed_read1: temp_dir.path().join("inline_correct_read1_lvl9.fq.gz"), + inline_more_compressed_read2: temp_dir.path().join("inline_correct_read2_lvl9.fq.gz"), + inline_corrected_read1: temp_dir.path().join("inline_corrected_read1.fq"), + inline_corrected_read2: temp_dir.path().join("inline_corrected_read2.fq"), }; Some(temp) } else { diff --git a/tests/integration_tests_external_filecontents.rs b/tests/integration_tests_external_filecontents.rs index eb32ad1..d7106e5 100644 --- a/tests/integration_tests_external_filecontents.rs +++ b/tests/integration_tests_external_filecontents.rs @@ -84,12 +84,12 @@ fn external_produces_correct_output() -> TestResult { verify_file_contents( &temp_dir.child("read1_with_UMIs.fq").to_path_buf(), - &reference.correct_read1, + &reference.header_read1, )?; verify_file_contents( &temp_dir.child("read2_with_UMIs.fq").to_path_buf(), - &reference.correct_read2, + &reference.header_read2, )?; temp_dir.close()?; @@ -122,12 +122,12 @@ fn external_corrects_read_numbers_in_output() -> TestResult { verify_file_contents( &temp_dir.child("read1_with_UMIs.fq").to_path_buf(), - &reference.corrected_read1, + &reference.header_corrected_read1, )?; verify_file_contents( &temp_dir.child("read2_with_UMIs.fq").to_path_buf(), - &reference.corrected_read2, + &reference.header_corrected_read2, )?; temp_dir.close()?; @@ -238,12 +238,12 @@ fn external_produces_correct_compressed_output() -> TestResult { verify_file_binary( &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), - &reference.compressed_correct_read1, + &reference.header_compressed_read1, )?; verify_file_binary( &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), - &reference.compressed_correct_read2, + &reference.header_compressed_read2, )?; temp_dir.close()?; @@ -278,12 +278,12 @@ fn external_produces_correct_compressed_output_mod_compression_level() -> TestRe verify_file_binary( &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), - &reference.more_compressed_correct_read1, + &reference.header_more_compressed_read1, )?; verify_file_binary( &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), - &reference.more_compressed_correct_read2, + &reference.header_more_compressed_read2, )?; temp_dir.close()?; @@ -318,12 +318,12 @@ fn external_produces_correct_compressed_output_thread_limit() -> TestResult { verify_file_binary( &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), - &reference.compressed_correct_read1, + &reference.header_compressed_read1, )?; verify_file_binary( &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), - &reference.compressed_correct_read2, + &reference.header_compressed_read2, )?; temp_dir.close()?; diff --git a/tests/results/correct_read1.fq b/tests/results/header_correct_read1.fq similarity index 100% rename from tests/results/correct_read1.fq rename to tests/results/header_correct_read1.fq diff --git a/tests/results/correct_read1.fq.gz b/tests/results/header_correct_read1.fq.gz similarity index 100% rename from tests/results/correct_read1.fq.gz rename to tests/results/header_correct_read1.fq.gz diff --git a/tests/results/correct_read1_lvl9.fq.gz b/tests/results/header_correct_read1_lvl9.fq.gz similarity index 100% rename from tests/results/correct_read1_lvl9.fq.gz rename to tests/results/header_correct_read1_lvl9.fq.gz diff --git a/tests/results/correct_read2.fq b/tests/results/header_correct_read2.fq similarity index 100% rename from tests/results/correct_read2.fq rename to tests/results/header_correct_read2.fq diff --git a/tests/results/correct_read2.fq.gz b/tests/results/header_correct_read2.fq.gz similarity index 100% rename from tests/results/correct_read2.fq.gz rename to tests/results/header_correct_read2.fq.gz diff --git a/tests/results/correct_read2_lvl9.fq.gz b/tests/results/header_correct_read2_lvl9.fq.gz similarity index 100% rename from tests/results/correct_read2_lvl9.fq.gz rename to tests/results/header_correct_read2_lvl9.fq.gz diff --git a/tests/results/corrected_read1.fq b/tests/results/header_corrected_read1.fq similarity index 100% rename from tests/results/corrected_read1.fq rename to tests/results/header_corrected_read1.fq diff --git a/tests/results/corrected_read2.fq b/tests/results/header_corrected_read2.fq similarity index 100% rename from tests/results/corrected_read2.fq rename to tests/results/header_corrected_read2.fq From ae9710789fcf789e818e2ba530075562e943798a Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Tue, 4 Feb 2025 11:42:35 +0100 Subject: [PATCH 09/20] Extend the tests for the new external inline functionality. --- src/read_editing.rs | 2 +- tests/auxiliary.rs | 6 +-- tests/results/inline_correct_read1.fq | 40 ++++++++++++++++++ tests/results/inline_correct_read1.fq.gz | Bin 0 -> 644 bytes tests/results/inline_correct_read1_lvl9.fq.gz | Bin 0 -> 649 bytes tests/results/inline_correct_read2.fq | 40 ++++++++++++++++++ tests/results/inline_correct_read2.fq.gz | Bin 0 -> 677 bytes tests/results/inline_correct_read2_lvl9.fq.gz | Bin 0 -> 670 bytes tests/results/inline_corrected_read1.fq | 40 ++++++++++++++++++ tests/results/inline_corrected_read2.fq | 40 ++++++++++++++++++ 10 files changed, 164 insertions(+), 4 deletions(-) create mode 100644 tests/results/inline_correct_read1.fq create mode 100644 tests/results/inline_correct_read1.fq.gz create mode 100644 tests/results/inline_correct_read1_lvl9.fq.gz create mode 100644 tests/results/inline_correct_read2.fq create mode 100644 tests/results/inline_correct_read2.fq.gz create mode 100644 tests/results/inline_correct_read2_lvl9.fq.gz create mode 100644 tests/results/inline_corrected_read1.fq create mode 100644 tests/results/inline_corrected_read2.fq diff --git a/src/read_editing.rs b/src/read_editing.rs index 0fe4915..a457131 100644 --- a/src/read_editing.rs +++ b/src/read_editing.rs @@ -122,7 +122,7 @@ mod tests { "@SCILIFELAB:500:NGISTLM:1:1101:2446:1031", Some("1:N:0:GCTTCAGGGT+AAGGTAGCGT"), b"TCGTTTTCCGC", - b"!!!!", + b"FFFFFFFFFFF", ); let umi = b"ACCAGCTA"; let umi_qual = b"########"; diff --git a/tests/auxiliary.rs b/tests/auxiliary.rs index 05c7c22..2bdf419 100644 --- a/tests/auxiliary.rs +++ b/tests/auxiliary.rs @@ -100,7 +100,7 @@ pub fn setup_integration_test( let test_output = if with_results { let temp = TestOutput { - // Header-based examples + // Header examples header_read1: temp_dir.path().join("header_correct_read1.fq"), header_read2: temp_dir.path().join("header_correct_read2.fq"), header_compressed_read1: temp_dir.path().join("header_correct_read1.fq.gz"), @@ -109,12 +109,12 @@ pub fn setup_integration_test( header_more_compressed_read2: temp_dir.path().join("header_correct_read2_lvl9.fq.gz"), header_corrected_read1: temp_dir.path().join("header_corrected_read1.fq"), header_corrected_read2: temp_dir.path().join("header_corrected_read2.fq"), - // Special cases (unchanged) + // Special cases delim_underscore_read1: temp_dir.path().join("delim_underscore_read1.fq"), delim_underscore_read2: temp_dir.path().join("delim_underscore_read2.fq"), umi_read2_switch_read1: temp_dir.path().join("umi_read2_switch_read1.fq"), umi_read2_switch_read2: temp_dir.path().join("umi_read2_switch_read2.fq"), - // Inline examples + // Analogous inline examples inline_read1: temp_dir.path().join("inline_correct_read1.fq"), inline_read2: temp_dir.path().join("inline_correct_read2.fq"), inline_compressed_read1: temp_dir.path().join("inline_correct_read1.fq.gz"), diff --git a/tests/results/inline_correct_read1.fq b/tests/results/inline_correct_read1.fq new file mode 100644 index 0000000..fc389af --- /dev/null +++ b/tests/results/inline_correct_read1.fq @@ -0,0 +1,40 @@ +@SCILIFELAB:500:NGISTLM:1:1101:19994:1016 1:N:0:GCTTCAGGGT+AAGGTAGCGT +CCTGAGACCAATCGCCGCCAGTTAAATAGCTTGCAAAATACGTGGCCTTATGGTTACAGTATGCCCATCGCAGTTCGCTACACGCAGGACGCTTTTTCACGTTCTGGTTGG ++ +FFFFFFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:25581:1016 1:N:0:GCTTCAGGGT+AAGGTAGCGT +AGACATGACTAAAGTGCACCGCATGGAAATGAAGACGGCCATTAGCTGTACCATACTCAGGCACACAAAAATACTGATAGCAGTCGGCGTGTGAATCATTAGCCTTGCGAC ++ +:FFFFFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:31006:1016 1:N:0:GCTTCAGGGT+AAGGTAGCGT +TGGACGCACGTCTTTCTCCATTGCGTCGTGGCCTTGCTATTGACTCTACTGTAGACATTTTTACTTTTTATGTCCCTCATCGTCACGTTTATGGTGAACAGTGGATTAAGT ++ +FFFFFFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:31620:1016 1:N:0:GCTTCAGGGT+AAGGTAGCGT +GCCTAAACGGGCGTTCAGCAGCCAGCTTGCGGCAAAACTGCGTAACCGTCTTCTCTTTCTCTAAAAACCATTTTTCGTCCCCTTCGGGGCGGTGGTCTATAGTGTTATTAA ++ +FFFFFFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:31693:1016 1:N:0:GCTTCAGGGT+AAGGTAGCGT +AATTGAAGTGCACCTGTTTTACAGACACCTAAAGCTACATCGTCAACGTTATATTTTGATAGTTTGACGGTTAATGCTGGTAATGGTGGTTTTCTTCATTGCATTCAGATG ++ +FFFFF:FFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFF:FFFFFFFF:FFFFF:FFFFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:32832:1016 1:N:0:GCTTCAGGGT+AAGGTAGCGT +AACAACAGATCCCCCAACTTGATATTAATAACACTATAGACCACCGCCCCGAAGGGGACGAAAAATGGTTTTTAGAGAACGAGAAGACGGTTACGCAGTTTTGCCGCAAGC ++ +FFFFFFF:FF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:2320:1031 1:N:0:GCTTCAGGGT+AAGGTAGCGT +TCACTTATTTGATTTGGTCATTGGTAAAATACTGACCAGCCGTTTGAGCTTGAGTAAGCATTTGGCGCATAATCTCGGAAACCTGCTGTTGCTTGGAAAGATTGGTGTTTT ++ +:F:FFFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:2446:1031 1:N:0:GCTTCAGGGT+AAGGTAGCGT +GATATGAGGTCGTTTTCCGCCTACTGCGACTAAAGAGATTCAGTACCTTAACGCTAAAGGTGCTTTGACTTATACCGATATTGCTGGCGACCCTGTTTTGTATGGCAACTT ++ +FFFFFFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:5249:1031 1:N:0:GCTTCAGGGT+AAGGTAGCGT +CTAAATTGGTGAATGGCAGATTTAATACCAGCATCACCCATGCCTACAGTATTGTTATCGGTAGCAAGCACATCACCTTGAATGCCACCGGAGGCGGCTTTTTGACCGCCT ++ +FFFFFFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFF +@SCILIFELAB:500:NGISTLM:1:1101:10438:1031 1:N:0:GCTTCAGGGT+AAGGTAGCGT +TACCAAGGATTAACCGTCAAACTATCAAAATATAACGTTGACGATGTAGCTTTAGGTGTCTGTAAAACAGGTGCCGAAGAAGCTGGAGTAACAGAAGTGAGAACCAGCTTA ++ +FFFFFFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFFFF diff --git a/tests/results/inline_correct_read1.fq.gz b/tests/results/inline_correct_read1.fq.gz new file mode 100644 index 0000000000000000000000000000000000000000..6c3cdd3cecca076b6619be888df2c6344dc11d79 GIT binary patch literal 644 zcmV-~0(<=*iwFP!00000|IL=cZsI@?MDPBJm2%|bu>rxH(%T9xBsQ1y|9{KsRRhr; zf>Cx^VF9tnGmiSXs(M~O{CGMZ-cI(jZ^p5|$MGXizk2Jfjjgx+e!uQ*Y}+5LzxT0+ zXSzj1uFN9R!XpRw3=4BNOAqH`k!fa3$P71~dt`)rre$!SS(f4MTE`j>XIxjopX6X5 z)3qvMSPh5k@p5?lF}&W!G;KD!wu}ixmSGN=fC{K!0i7`J!^cwCA|aaQdXz&2j2a1% zwMZ632CMVDP{6}{SPlIFnEJOd&21dF%b4H+7mwuadx{9RuKGbFDUzrKQbNmNr5MXd zchIq_^i#46lkOs*Wsy&(rnzmWaTyaJ%uo!MOyI*;u*!2TZidi+39tHP%d_(oC+T7R7OVJo+e?8Lwyj;XI?dItoOjJ(^D1q}Lpu)LRazHZ5cXyzMtXip5M3{ra^m{>f z&UQd?YC$%Amh%kRG|lqd+-^q`93&6YLoVUE++S_&%ledb>qMvJLRPeM_sx-z_OyGN-ri^1I z$Usj6kRO4@6aF8iejlYauIJqymeaQK+^yBd)Yd3lo|AYgrRn+dTuMmn7iCNys^~#@ e+F6w;Ax>jZU{&LMP@B79#o;%2x*`pO3jhFl?m(pg literal 0 HcmV?d00001 diff --git a/tests/results/inline_correct_read1_lvl9.fq.gz b/tests/results/inline_correct_read1_lvl9.fq.gz new file mode 100644 index 0000000000000000000000000000000000000000..5b93ec493af81fc9b698c5c9affe79e3dd4bcfad GIT binary patch literal 649 zcmV;40(Si$iwFP!00002|IL=oj@vK{gztWe0zK};rv--8Xk=ifdTe0H!y|~+|hCtx{m3LV+?NmUr)hX^5P$8 z6&2CFbmx!j`}y%#_j()CcsQJfeN04z?V6KJkP1V;uU>4@Ht9>7tQ^mY0=c zz!Pyq$Eeaz$qu9l4lkiX@xEtM(=;5%ejgJ-Kn)N;C^@7DCSHC2$~hM|qtFP`H=-#e z`O3`2isPZxNQZNhoQMt6pApkC-H~(>%9d{2P8pBsk%=h7DV0bjmZG8*)7@oOG%9kj zQjr$Y8|80$HAXf}?cXr9zyH(zeB8w}o~H30Os>2zDS`bWppA2+ z(5jhg%0Q_~j#hObYC++WgSW5dTzf#Fo9E*`CFv&k?3E=huktEO$~kRQ?C>?fGis;{Qr+qyN}Y)&(rCSl+&?tt=3*HEi+orlv$=NAJRdq3FYw>fHv5EN;k5P9ErPdkVGQC5ocP< zr4#&zT?=hOg9?a(YRMF!al!O)ptSaJ(0o|h)lIwHbuq2?^ZFi47)ZWh&q44w!L5XW z4Z!5HOk_nyi4k<{W}QFgYRnErRkv|VoweM(C2 zvW_k~@aouC@B)J(MF{DVP6m)l9chTK1Xfp$S87M;k$j_({s&NMi%RYr+@my&n|XhS z<@Bl*N)<W*bd zr%sEW=yKo-)WBO8spJEbod4z1!ZZzizqB#Mw(vWbltkeVZ)n6;F`Y6nR*c)GSW;Z^ zMMA(B>gXxP3JGB)t&329exoLNu(aeaFfC)>#)Mrb3V4jJqOm9@?2dlory&>8Lz_bK z94*z5kQqLwK50wK7d#jQ(R_^Q9;&8gopzWG2|_hM8=4%5$q9`Lqk||C`VDc$wbW`h z!Kj*Oz2wqFWN4;Lm7F(B9|wxa$3fFpl)SxUC#LZL&c2pp^6xrWGa?YIzJ|QNYXtpwuuk+kA$90B}$r6I|}(v6s`I?ZduG9AZxZBx=z2q^Kz122#L zQZE6Dhl(K5nob2kGIgjSrRtd8R#V$jkH|N4V*CM= Date: Tue, 4 Feb 2025 17:27:30 +0100 Subject: [PATCH 10/20] Duplicate the integration tests for ExternalHeader to ExternalInline. --- tests/integration_tests_external.rs | 30 ++ ...integration_tests_external_filecontents.rs | 274 ++++++++++++++---- 2 files changed, 254 insertions(+), 50 deletions(-) diff --git a/tests/integration_tests_external.rs b/tests/integration_tests_external.rs index ad36362..5ec0b69 100644 --- a/tests/integration_tests_external.rs +++ b/tests/integration_tests_external.rs @@ -52,6 +52,36 @@ fn external_with_minimal_arguments_plain() { temp_dir.close().unwrap(); } +#[test] +fn external_with_inline_position() { + let (mut cmd, temp_dir, test_files, _test_output) = auxiliary::setup_integration_test(false); + cmd.arg("external") + .arg("--in") + .arg(test_files.read1) + .arg("--in2") + .arg(test_files.read2) + .arg("--umi") + .arg(test_files.umi) + .arg("--position") + .arg("inline"); + + cmd.assert() + .success() + .stdout(predicate::str::contains("Transferring UMIs to records")) + .stdout(predicate::str::contains("Processed 10 records")) + .stdout(predicate::str::contains("umi-transfer finished after")); + + temp_dir + .child("read1_with_UMIs.fq") + .assert(predicate::path::exists()); + + temp_dir + .child("read2_with_UMIs.fq") + .assert(predicate::path::exists()); + + temp_dir.close().unwrap(); +} + #[test] fn external_with_minimal_arguments_compressed() { let (mut cmd, temp_dir, test_files, _test_output) = auxiliary::setup_integration_test(false); diff --git a/tests/integration_tests_external_filecontents.rs b/tests/integration_tests_external_filecontents.rs index d7106e5..b41dd97 100644 --- a/tests/integration_tests_external_filecontents.rs +++ b/tests/integration_tests_external_filecontents.rs @@ -60,7 +60,7 @@ fn testing_file_comparison_fails() { // Yep, verify_file_contents() does its job. Ready to rumble! #[test] -fn external_produces_correct_output() -> TestResult { +fn external_produces_correct_output_header() -> TestResult { let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); cmd.arg("external") .arg("--in") @@ -70,23 +70,20 @@ fn external_produces_correct_output() -> TestResult { .arg("--umi") .arg(test_files.umi); - cmd.assert().success(); //further assertions have been tested in other tests + cmd.assert().success(); temp_dir .child("read1_with_UMIs.fq") .assert(predicate::path::exists()); - temp_dir .child("read2_with_UMIs.fq") .assert(predicate::path::exists()); let reference = test_output.unwrap(); - verify_file_contents( &temp_dir.child("read1_with_UMIs.fq").to_path_buf(), &reference.header_read1, )?; - verify_file_contents( &temp_dir.child("read2_with_UMIs.fq").to_path_buf(), &reference.header_read2, @@ -97,7 +94,7 @@ fn external_produces_correct_output() -> TestResult { } #[test] -fn external_corrects_read_numbers_in_output() -> TestResult { +fn external_produces_correct_output_inline() -> TestResult { let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); cmd.arg("external") .arg("--in") @@ -106,28 +103,26 @@ fn external_corrects_read_numbers_in_output() -> TestResult { .arg(test_files.read2) .arg("--umi") .arg(test_files.umi) - .arg("--correct_numbers"); + .arg("--position") + .arg("inline"); - cmd.assert().success(); //further assertions have been tested in other tests + cmd.assert().success(); temp_dir .child("read1_with_UMIs.fq") .assert(predicate::path::exists()); - temp_dir .child("read2_with_UMIs.fq") .assert(predicate::path::exists()); let reference = test_output.unwrap(); - verify_file_contents( &temp_dir.child("read1_with_UMIs.fq").to_path_buf(), - &reference.header_corrected_read1, + &reference.inline_read1, )?; - verify_file_contents( &temp_dir.child("read2_with_UMIs.fq").to_path_buf(), - &reference.header_corrected_read2, + &reference.inline_read2, )?; temp_dir.close()?; @@ -135,7 +130,7 @@ fn external_corrects_read_numbers_in_output() -> TestResult { } #[test] -fn external_underscore_delimiter() -> TestResult { +fn external_corrects_read_numbers_in_output_header() -> TestResult { let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); cmd.arg("external") .arg("--in") @@ -144,68 +139,62 @@ fn external_underscore_delimiter() -> TestResult { .arg(test_files.read2) .arg("--umi") .arg(test_files.umi) - .arg("--delim") - .arg("_"); + .arg("--correct_numbers"); - cmd.assert().success(); //further assertions have been tested in other tests + cmd.assert().success(); temp_dir .child("read1_with_UMIs.fq") .assert(predicate::path::exists()); - temp_dir .child("read2_with_UMIs.fq") .assert(predicate::path::exists()); let reference = test_output.unwrap(); - verify_file_contents( &temp_dir.child("read1_with_UMIs.fq").to_path_buf(), - &reference.delim_underscore_read1, + &reference.header_corrected_read1, )?; - verify_file_contents( &temp_dir.child("read2_with_UMIs.fq").to_path_buf(), - &reference.delim_underscore_read2, + &reference.header_corrected_read2, )?; temp_dir.close()?; Ok(()) } -// Not really a serious test, but one can also integrate the read sequence into the UMI header if needed ;-) - #[test] -fn external_switch_umi_and_read2() -> TestResult { +fn external_corrects_read_numbers_in_output_inline() -> TestResult { let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); cmd.arg("external") .arg("--in") .arg(test_files.read1) .arg("--in2") - .arg(test_files.umi) + .arg(test_files.read2) .arg("--umi") - .arg(test_files.read2); + .arg(test_files.umi) + .arg("--correct_numbers") + .arg("--position") + .arg("inline"); - cmd.assert().success(); //further assertions have been tested in other tests + cmd.assert().success(); temp_dir .child("read1_with_UMIs.fq") .assert(predicate::path::exists()); - temp_dir - .child("umi_with_UMIs.fq") + .child("read2_with_UMIs.fq") .assert(predicate::path::exists()); let reference = test_output.unwrap(); - verify_file_contents( &temp_dir.child("read1_with_UMIs.fq").to_path_buf(), - &reference.umi_read2_switch_read1, + &reference.inline_corrected_read1, )?; - verify_file_contents( - &temp_dir.child("umi_with_UMIs.fq").to_path_buf(), - &reference.umi_read2_switch_read2, + &temp_dir.child("read2_with_UMIs.fq").to_path_buf(), + &reference.inline_corrected_read2, )?; temp_dir.close()?; @@ -213,7 +202,7 @@ fn external_switch_umi_and_read2() -> TestResult { } #[test] -fn external_produces_correct_compressed_output() -> TestResult { +fn external_produces_correct_compressed_output_header() -> TestResult { let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); cmd.arg("external") .arg("--in") @@ -224,23 +213,20 @@ fn external_produces_correct_compressed_output() -> TestResult { .arg(test_files.umi) .arg("--gzip"); - cmd.assert().success(); //further assertions have been tested in other tests + cmd.assert().success(); temp_dir .child("read1_with_UMIs.fq.gz") .assert(predicate::path::exists()); - temp_dir .child("read2_with_UMIs.fq.gz") .assert(predicate::path::exists()); let reference = test_output.unwrap(); - verify_file_binary( &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), &reference.header_compressed_read1, )?; - verify_file_binary( &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), &reference.header_compressed_read2, @@ -251,7 +237,44 @@ fn external_produces_correct_compressed_output() -> TestResult { } #[test] -fn external_produces_correct_compressed_output_mod_compression_level() -> TestResult { +fn external_produces_correct_compressed_output_inline() -> TestResult { + let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); + cmd.arg("external") + .arg("--in") + .arg(test_files.read1) + .arg("--in2") + .arg(test_files.read2) + .arg("--umi") + .arg(test_files.umi) + .arg("--gzip") + .arg("--position") + .arg("inline"); + + cmd.assert().success(); + + temp_dir + .child("read1_with_UMIs.fq.gz") + .assert(predicate::path::exists()); + temp_dir + .child("read2_with_UMIs.fq.gz") + .assert(predicate::path::exists()); + + let reference = test_output.unwrap(); + verify_file_binary( + &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), + &reference.inline_compressed_read1, + )?; + verify_file_binary( + &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), + &reference.inline_compressed_read2, + )?; + + temp_dir.close()?; + Ok(()) +} + +#[test] +fn external_produces_correct_compressed_output_mod_compression_level_header() -> TestResult { let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); cmd.arg("external") .arg("--in") @@ -264,23 +287,20 @@ fn external_produces_correct_compressed_output_mod_compression_level() -> TestRe .arg("9") .arg("--gzip"); - cmd.assert().success(); //further assertions have been tested in other tests + cmd.assert().success(); temp_dir .child("read1_with_UMIs.fq.gz") .assert(predicate::path::exists()); - temp_dir .child("read2_with_UMIs.fq.gz") .assert(predicate::path::exists()); let reference = test_output.unwrap(); - verify_file_binary( &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), &reference.header_more_compressed_read1, )?; - verify_file_binary( &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), &reference.header_more_compressed_read2, @@ -291,7 +311,46 @@ fn external_produces_correct_compressed_output_mod_compression_level() -> TestRe } #[test] -fn external_produces_correct_compressed_output_thread_limit() -> TestResult { +fn external_produces_correct_compressed_output_mod_compression_level_inline() -> TestResult { + let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); + cmd.arg("external") + .arg("--in") + .arg(test_files.read1) + .arg("--in2") + .arg(test_files.read2) + .arg("--umi") + .arg(test_files.umi) + .arg("--compression_level") + .arg("9") + .arg("--gzip") + .arg("--position") + .arg("inline"); + + cmd.assert().success(); + + temp_dir + .child("read1_with_UMIs.fq.gz") + .assert(predicate::path::exists()); + temp_dir + .child("read2_with_UMIs.fq.gz") + .assert(predicate::path::exists()); + + let reference = test_output.unwrap(); + verify_file_binary( + &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), + &reference.inline_more_compressed_read1, + )?; + verify_file_binary( + &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), + &reference.inline_more_compressed_read2, + )?; + + temp_dir.close()?; + Ok(()) +} + +#[test] +fn external_produces_correct_compressed_output_thread_limit_header() -> TestResult { let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); cmd.arg("external") .arg("--in") @@ -304,23 +363,20 @@ fn external_produces_correct_compressed_output_thread_limit() -> TestResult { .arg("3") .arg("--gzip"); - cmd.assert().success(); //further assertions have been tested in other tests + cmd.assert().success(); temp_dir .child("read1_with_UMIs.fq.gz") .assert(predicate::path::exists()); - temp_dir .child("read2_with_UMIs.fq.gz") .assert(predicate::path::exists()); let reference = test_output.unwrap(); - verify_file_binary( &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), &reference.header_compressed_read1, )?; - verify_file_binary( &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), &reference.header_compressed_read2, @@ -329,3 +385,121 @@ fn external_produces_correct_compressed_output_thread_limit() -> TestResult { temp_dir.close()?; Ok(()) } + +#[test] +fn external_produces_correct_compressed_output_thread_limit_inline() -> TestResult { + let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); + cmd.arg("external") + .arg("--in") + .arg(test_files.read1) + .arg("--in2") + .arg(test_files.read2) + .arg("--umi") + .arg(test_files.umi) + .arg("--threads") + .arg("3") + .arg("--gzip") + .arg("--position") + .arg("inline"); + + cmd.assert().success(); + + temp_dir + .child("read1_with_UMIs.fq.gz") + .assert(predicate::path::exists()); + temp_dir + .child("read2_with_UMIs.fq.gz") + .assert(predicate::path::exists()); + + let reference = test_output.unwrap(); + verify_file_binary( + &temp_dir.child("read1_with_UMIs.fq.gz").to_path_buf(), + &reference.inline_compressed_read1, + )?; + verify_file_binary( + &temp_dir.child("read2_with_UMIs.fq.gz").to_path_buf(), + &reference.inline_compressed_read2, + )?; + + temp_dir.close()?; + Ok(()) +} + +#[test] +fn external_underscore_delimiter() -> TestResult { + let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); + cmd.arg("external") + .arg("--in") + .arg(test_files.read1) + .arg("--in2") + .arg(test_files.read2) + .arg("--umi") + .arg(test_files.umi) + .arg("--delim") + .arg("_"); + + cmd.assert().success(); //further assertions have been tested in other tests + + temp_dir + .child("read1_with_UMIs.fq") + .assert(predicate::path::exists()); + + temp_dir + .child("read2_with_UMIs.fq") + .assert(predicate::path::exists()); + + let reference = test_output.unwrap(); + + verify_file_contents( + &temp_dir.child("read1_with_UMIs.fq").to_path_buf(), + &reference.delim_underscore_read1, + )?; + + verify_file_contents( + &temp_dir.child("read2_with_UMIs.fq").to_path_buf(), + &reference.delim_underscore_read2, + )?; + + temp_dir.close()?; + Ok(()) +} + +// Not really a serious test, but one can also integrate the read sequence into the UMI header if needed ;-) + +#[test] +fn external_switch_umi_and_read2() -> TestResult { + let (mut cmd, temp_dir, test_files, test_output) = auxiliary::setup_integration_test(true); + cmd.arg("external") + .arg("--in") + .arg(test_files.read1) + .arg("--in2") + .arg(test_files.umi) + .arg("--umi") + .arg(test_files.read2); + + cmd.assert().success(); //further assertions have been tested in other tests + + temp_dir + .child("read1_with_UMIs.fq") + .assert(predicate::path::exists()); + + temp_dir + .child("umi_with_UMIs.fq") + .assert(predicate::path::exists()); + + let reference = test_output.unwrap(); + + verify_file_contents( + &temp_dir.child("read1_with_UMIs.fq").to_path_buf(), + &reference.umi_read2_switch_read1, + )?; + + verify_file_contents( + &temp_dir.child("umi_with_UMIs.fq").to_path_buf(), + &reference.umi_read2_switch_read2, + )?; + + temp_dir.close()?; + Ok(()) +} + From 57b4bf405537187f023950985d9097934e833658 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Tue, 4 Feb 2025 18:35:01 +0100 Subject: [PATCH 11/20] Modify README to reflect the new inline capability. --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fe412f9..6a6e1da 100644 --- a/README.md +++ b/README.md @@ -96,12 +96,12 @@ That should create an executable `target/release/umi-transfer` that can be place ```shell ./target/release/umi-transfer --version -umi-transfer 1.5.0 +umi-transfer 1.6.0 ``` ## Usage -The tool requires three FastQ files as input. You can manually specify the names and location of the output files with `--out` and `--out2` or the tool will automatically append a `with_UMI` suffix to your input file names. It additionally accepts to choose a custom UMI delimiter with `--delim` and to set the flags `-f`, `-c` and `-z`. +The tool requires three FastQ files as input. You can manually specify the names and location of the output files with `--out` and `--out2` or the tool will automatically append a `with_UMI` suffix to your input file names. It additionally allows to choose a custom UMI delimiter with `--delim`, the position of the integrated UMI with`--position`, and to set the flags `-f`, `-c` and `-z`. `-c` is used to ensure the canonical `1` and `2` of paired files as read numbers in the output, regardless of the read numbers of the input reads. `-f` / `--force` will overwrite existing output files without prompting the user and `-z` enables the internal compression of the output files. Alternatively, you can also specify an output file name with `.gz` suffix to obtain compressed output. @@ -114,6 +114,10 @@ Integrate UMIs from a separate FastQ file Usage: umi-transfer external [OPTIONS] --in --in2 --umi Options: + -p, --position + Choose the target position for the UMI: 'header' or 'inline'. Defaults to 'header'. + + [default: header] [possible values: header, inline] -c, --correct_numbers Read numbers will be altered to ensure the canonical read numbers 1 and 2 in output file sequence headers. @@ -127,7 +131,7 @@ Options: -t, --threads - Number of threads to use for processing. Defaults to the number of logical cores available. + Maximum number of threads to use for processing. Preferably pick odd numbers, 9 or 11 recommended. Defaults to the maximum number of cores available. -f, --force @@ -181,7 +185,7 @@ umi-transfer external --in read1.fastq --in2 read1.fastq --umi read2.fastq --out ### Benchmarks and parameter recommendations -With the release of version 1.5, `umi-transfer` features internal multi-threaded output compression. As a result, `umi-transfer` 1.5 now runs approximately 25 times faster than version 1.0 when using internal compression and about twice as fast compared to using an external compression tool. This improvement is enabled by the outstanding [`gzp` crate](https://github.com/sstadick/gzp), which abstracts a lot of the underlying complexity away from the main software. +Since the release of version 1.5, `umi-transfer` features internal multi-threaded output compression. As a result, `umi-transfer` 1.5 now runs approximately 25 times faster than version 1.0 when using internal compression and about twice as fast compared to using an external compression tool. This improvement is enabled by the outstanding [`gzp` crate](https://github.com/sstadick/gzp), which abstracts a lot of the underlying complexity away from the main software. ![Benchmark of different tool versions](docs/img/benchmark_umi-transfer-version.svg) From 47b6740460989d21e201d1853c2552998dd42a7c Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Tue, 4 Feb 2025 18:37:59 +0100 Subject: [PATCH 12/20] Upgrade build dependencies. --- Cargo.lock | 690 +++++++++++++++++++++++++++++------------------------ Cargo.toml | 26 +- 2 files changed, 392 insertions(+), 324 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0e09f56..ddcd577 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,12 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aho-corasick" @@ -19,57 +19,59 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", + "once_cell", "windows-sys", ] [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "approx" @@ -82,13 +84,14 @@ dependencies = [ [[package]] name = "assert_cmd" -version = "2.0.14" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed72493ac66d5804837f480ab3766c72bdfab91a65e565fc54fa9e42db0073a8" +checksum = "dc1835b7f27878de8525dc71410b5a31cdcc5f230aed5ba5df968e09c201b23d" dependencies = [ "anstyle", "bstr", "doc-comment", + "libc", "predicates", "predicates-core", "predicates-tree", @@ -97,9 +100,9 @@ dependencies = [ [[package]] name = "assert_fs" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd762e110c8ed629b11b6cde59458cc1c71de78ebbcc30099fc8e0403a2a2ec" +checksum = "7efdb1fdb47602827a342857666feb372712cbc64b414172bd6b167a02927674" dependencies = [ "anstyle", "doc-comment", @@ -112,15 +115,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "bio" -version = "1.6.0" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a72cb93babf08c85b375c2938ac678cc637936b3ebb72266d433cec2577f6c2" +checksum = "d563b9298d39b3bdb5c45f6e91e0bdcb18d67e6d8fa034a733b7283f2db5ed29" dependencies = [ "anyhow", "approx", @@ -133,7 +136,7 @@ dependencies = [ "editdistancek", "enum-map", "fxhash", - "itertools 0.11.0", + "itertools 0.13.0", "itertools-num", "lazy_static", "multimap", @@ -157,9 +160,9 @@ dependencies = [ [[package]] name = "bio-types" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d45749b87f21808051025e9bf714d14ff4627f9d8ca967eade6946ea769aa4a" +checksum = "f4dcf54f8b7f51450207d54780bab09c05f30b8b0caa991545082842e466ad7e" dependencies = [ "derive-new", "lazy_static", @@ -170,36 +173,30 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.6.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bstr" -version = "1.9.1" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" dependencies = [ "memchr", "regex-automata", @@ -208,9 +205,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bv" @@ -230,9 +227,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.15.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" @@ -242,15 +239,18 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "cc" -version = "1.0.95" +version = "1.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" +checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -260,9 +260,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.4" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" dependencies = [ "clap_builder", "clap_derive", @@ -270,9 +270,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" dependencies = [ "anstream", "anstyle", @@ -282,36 +282,36 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "e24a03c8b52922d68a1589ad61032f2c1aa5a8158d2aa0d93c6e9534944bbad6" dependencies = [ "cc", ] [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "comma" @@ -321,13 +321,13 @@ checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335" [[package]] name = "console" -version = "0.15.8" +version = "0.15.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" dependencies = [ "encode_unicode", - "lazy_static", "libc", + "once_cell", "unicode-width", "windows-sys", ] @@ -345,18 +345,18 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -373,15 +373,15 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "csv" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" dependencies = [ "csv-core", "itoa", @@ -406,13 +406,13 @@ checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" [[package]] name = "derive-new" -version = "0.5.9" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" +checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -448,15 +448,15 @@ checksum = "3e02df23d5b1c6f9e69fa603b890378123b93073df998a21e6e33b9db0a32613" [[package]] name = "either" -version = "1.11.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" -version = "0.3.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" [[package]] name = "enum-map" @@ -475,7 +475,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -486,9 +486,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", "windows-sys", @@ -496,9 +496,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "feature-probe" @@ -508,9 +508,9 @@ checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" [[package]] name = "file-format" -version = "0.24.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba1b81b3c213cf1c071f8bf3b83531f310df99642e58c48247272eef006cae5" +checksum = "e7ef3d5e8ae27277c8285ac43ed153158178ef0f79567f32024ca8140a0c7cd8" [[package]] name = "fixedbitset" @@ -520,9 +520,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "libz-sys", @@ -531,9 +531,9 @@ dependencies = [ [[package]] name = "float-cmp" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" dependencies = [ "num-traits", ] @@ -553,15 +553,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "fxhash" @@ -574,22 +574,34 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", @@ -604,7 +616,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" dependencies = [ - "bitflags 2.5.0", + "bitflags", "ignore", "walkdir", ] @@ -628,15 +640,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "heck" -version = "0.4.1" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -650,11 +656,17 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + [[package]] name = "ignore" -version = "0.4.22" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" dependencies = [ "crossbeam-deque", "globset", @@ -668,9 +680,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown", @@ -678,11 +690,11 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.12" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" +checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" dependencies = [ - "hermit-abi", + "hermit-abi 0.4.0", "libc", "windows-sys", ] @@ -693,20 +705,26 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "itertools" -version = "0.12.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] @@ -722,30 +740,31 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "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 = "libc" -version = "0.2.153" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libdeflate-sys" @@ -767,15 +786,15 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.8" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" [[package]] name = "libz-sys" -version = "1.1.16" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9" +checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" dependencies = [ "cc", "cmake", @@ -786,9 +805,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "lock_api" @@ -802,15 +821,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "matrixmultiply" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" dependencies = [ "autocfg", "rawpointer", @@ -818,42 +837,33 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] name = "multimap" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1a5d38b9b352dbd913288736af36af41c48d61b1a8cd34bcecd727561b7d511" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" dependencies = [ "serde", ] [[package]] name = "nalgebra" -version = "0.29.0" +version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d506eb7e08d6329505faa8a3a00a5dcc6de9f76e0c77e4b75763ae3c770831ff" +checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" dependencies = [ "approx", "matrixmultiply", @@ -869,13 +879,13 @@ dependencies = [ [[package]] name = "nalgebra-macros" -version = "0.1.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" +checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -884,19 +894,21 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "ndarray" -version = "0.15.6" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" dependencies = [ "matrixmultiply", "num-complex", "num-integer", "num-traits", + "portable-atomic", + "portable-atomic-util", "rawpointer", ] @@ -911,16 +923,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.25.1" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "autocfg", - "bitflags 1.3.2", + "bitflags", "cfg-if", "libc", - "memoffset", - "pin-utils", ] [[package]] @@ -931,9 +940,9 @@ checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-complex" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -949,20 +958,19 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", "libm", @@ -974,45 +982,46 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "ordered-float" -version = "3.9.2" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" dependencies = [ "num-traits", ] [[package]] name = "owo-colors" -version = "4.0.0" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f" +checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" dependencies = [ - "supports-color", + "supports-color 2.1.0", + "supports-color 3.0.2", ] [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap", @@ -1020,47 +1029,59 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "pkg-config" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] -name = "pkg-config" -version = "0.3.30" +name = "portable-atomic" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] [[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 = "predicates" -version = "3.1.0" +version = "3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8" +checksum = "a5d19ee57562043d37e82899fade9a22ebab7be9cef5026b07fda9cdd4293573" dependencies = [ "anstyle", "difflib", @@ -1072,15 +1093,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "727e462b119fe9c93fd0eb1429a5f7647394014cf3c04ab2c0350eeb09095ffa" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "72dd2d6d381dfb73a193c7fca536518d7caee39fc8503f74e7dc0be0531b425c" dependencies = [ "predicates-core", "termtree", @@ -1088,18 +1109,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1131,7 +1152,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -1152,9 +1173,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "regex" -version = "1.10.4" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1164,9 +1185,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.6" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1175,15 +1196,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rexpect" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ff60778f96fb5a48adbe421d21bf6578ed58c0872d712e7e08593c195adff8" +checksum = "c020234fb542618dc3e3d43724e9d93f87e1db74040a76a8c4e830220fb9b20d" dependencies = [ "comma", "nix", @@ -1203,11 +1224,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.5.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -1216,21 +1237,21 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "safe_arch" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] @@ -1258,22 +1279,22 @@ checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac" [[package]] name = "serde" -version = "1.0.199" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.199" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -1282,11 +1303,17 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "simba" -version = "0.6.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b7840f121a46d63066ee7a99fc81dcabbc6105e437cae43528cea199b5a05f" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ "approx", "num-complex", @@ -1306,12 +1333,11 @@ dependencies = [ [[package]] name = "statrs" -version = "0.16.0" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d08e5e1748192713cc281da8b16924fb46be7b0c2431854eadc785823e5696e" +checksum = "f697a07e4606a0a25c044de247e583a330dbb1731d11bc7350b81f48ad567255" dependencies = [ "approx", - "lazy_static", "nalgebra", "num-traits", "rand", @@ -1325,21 +1351,21 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.25.0" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" [[package]] name = "strum_macros" -version = "0.25.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", "rustversion", - "syn 2.0.60", + "syn", ] [[package]] @@ -1353,21 +1379,19 @@ dependencies = [ ] [[package]] -name = "syn" -version = "1.0.109" +name = "supports-color" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "is_ci", ] [[package]] name = "syn" -version = "2.0.60" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -1376,40 +1400,42 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" dependencies = [ "cfg-if", "fastrand", + "getrandom 0.3.1", + "once_cell", "rustix", "windows-sys", ] [[package]] name = "termtree" -version = "0.4.1" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683" [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", ] [[package]] @@ -1426,7 +1452,7 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "umi-transfer" -version = "1.6.0-dev" +version = "1.6.0" dependencies = [ "anyhow", "assert_cmd", @@ -1437,7 +1463,7 @@ dependencies = [ "file-format", "flate2", "gzp", - "itertools 0.12.1", + "itertools 0.14.0", "owo-colors", "predicates", "regex", @@ -1446,21 +1472,21 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "vcpkg" @@ -1479,9 +1505,9 @@ dependencies = [ [[package]] name = "wait-timeout" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" dependencies = [ "libc", ] @@ -1502,36 +1528,45 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1539,28 +1574,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wide" -version = "0.7.16" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a1851a719f11d1d2fea40e15c72f6c00de8c142d7ac47c1441cc7e4d0d5bc6" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" dependencies = [ "bytemuck", "safe_arch", @@ -1584,9 +1622,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[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", ] @@ -1599,18 +1637,18 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +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", @@ -1624,54 +1662,84 @@ 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 = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml index a4bfb0e..be4d32a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,27 +1,27 @@ [package] name = "umi-transfer" -version = "1.6.0-dev" +version = "1.6.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = { version = "4.3.11", features = ["derive"] } -bio = "1.6.0" -flate2 = "1.0.24" -itertools = "0.12.1" -file-format = "0.24.0" -anyhow = "1.0.82" +clap = { version = "4.5.28", features = ["derive"] } +bio = "2.0.3" +flate2 = "1.0.35" +itertools = "0.14.0" +file-format = "0.26.0" +anyhow = "1.0.95" dialoguer = "0.11.0" -regex = "1.10.4" -owo-colors = { version = "4.0", features = ["supports-colors"] } +regex = "1.11.1" +owo-colors = { version = "4.1", features = ["supports-colors"] } gzp = "0.11.3" [dev-dependencies] -assert_cmd = "2.0.14" -assert_fs = "1.1.1" -predicates = "3.1.0" -rexpect = "0.5.0" +assert_cmd = "2.0.16" +assert_fs = "1.1.2" +predicates = "3.1.3" +rexpect = "0.6.0" [workspace.metadata.marker.lints] marker_lints = "0.5.0" From ad5088e39ea4e1ccf307465b78663c23362c17fa Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Tue, 4 Feb 2025 19:35:07 +0100 Subject: [PATCH 13/20] Lint the external filecontent integration tests. --- tests/integration_tests_external_filecontents.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration_tests_external_filecontents.rs b/tests/integration_tests_external_filecontents.rs index b41dd97..25fbb89 100644 --- a/tests/integration_tests_external_filecontents.rs +++ b/tests/integration_tests_external_filecontents.rs @@ -502,4 +502,3 @@ fn external_switch_umi_and_read2() -> TestResult { temp_dir.close()?; Ok(()) } - From 6dc257c4de1a68691b917786ca19b711a22e4252 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 5 Nov 2025 16:04:00 +0100 Subject: [PATCH 14/20] Remove Rust marker for linting (unmaintained). --- .github/workflows/testing.yml | 3 --- Cargo.toml | 2 -- 2 files changed, 5 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 04b3d46..5761d58 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -40,9 +40,6 @@ jobs: - name: Check style run: cargo fmt -- --check - - name: Lint with Rust Marker - uses: rust-marker/marker@v0.5 - test: runs-on: ubuntu-latest diff --git a/Cargo.toml b/Cargo.toml index be4d32a..db02619 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,5 +23,3 @@ assert_fs = "1.1.2" predicates = "3.1.3" rexpect = "0.6.0" -[workspace.metadata.marker.lints] -marker_lints = "0.5.0" From 32eb2fa888d2e21efb09daaac5a1fbb08a075227 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 5 Nov 2025 18:35:24 +0100 Subject: [PATCH 15/20] Bump dependencies. --- Cargo.lock | 851 ++++++++++++++++------------ Cargo.toml | 24 +- src/file_io.rs | 2 +- tests/auxiliary.rs | 2 +- tests/integration_tests_external.rs | 2 +- tests/integration_tests_main.rs | 4 +- 6 files changed, 495 insertions(+), 390 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ddcd577..babc785 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,24 +4,24 @@ version = 4 [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" dependencies = [ "anstyle", "anstyle-parse", @@ -34,44 +34,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", - "once_cell", - "windows-sys", + "once_cell_polyfill", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "approx" @@ -84,13 +84,12 @@ dependencies = [ [[package]] name = "assert_cmd" -version = "2.0.16" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1835b7f27878de8525dc71410b5a31cdcc5f230aed5ba5df968e09c201b23d" +checksum = "bcbb6924530aa9e0432442af08bbcafdad182db80d2e560da42a6d442535bf85" dependencies = [ "anstyle", "bstr", - "doc-comment", "libc", "predicates", "predicates-core", @@ -100,9 +99,9 @@ dependencies = [ [[package]] name = "assert_fs" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efdb1fdb47602827a342857666feb372712cbc64b414172bd6b167a02927674" +checksum = "a652f6cb1f516886fcfee5e7a5c078b9ade62cfcb889524efe5a64d682dd27a9" dependencies = [ "anstyle", "doc-comment", @@ -115,15 +114,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bio" -version = "2.0.3" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d563b9298d39b3bdb5c45f6e91e0bdcb18d67e6d8fa034a733b7283f2db5ed29" +checksum = "2169c40f17068bcf0563e5060ed6ccab694f68068133055f6e96bcdf987b3f32" dependencies = [ "anyhow", "approx", @@ -133,12 +132,13 @@ dependencies = [ "bytecount", "csv", "custom_derive", + "derefable", "editdistancek", "enum-map", "fxhash", - "itertools 0.13.0", + "getset", + "itertools", "itertools-num", - "lazy_static", "multimap", "ndarray", "newtype_derive", @@ -146,14 +146,13 @@ dependencies = [ "num-traits", "ordered-float", "petgraph", - "rand", "regex", "serde", "serde_derive", "statrs", "strum", "strum_macros", - "thiserror", + "thiserror 2.0.17", "triple_accel", "vec_map", ] @@ -168,7 +167,7 @@ dependencies = [ "lazy_static", "regex", "strum_macros", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -188,15 +187,15 @@ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bstr" -version = "1.11.3" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" +checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", "regex-automata", @@ -205,9 +204,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bv" @@ -221,15 +220,15 @@ dependencies = [ [[package]] name = "bytecount" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" +checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" [[package]] name = "byteorder" @@ -239,30 +238,37 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.12" +version = "1.2.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" +checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" dependencies = [ + "find-msvc-tools", "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "clap" -version = "4.5.28" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" +checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" dependencies = [ "clap_builder", "clap_derive", @@ -270,9 +276,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" dependencies = [ "anstream", "anstyle", @@ -282,36 +288,36 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.28" +version = "4.5.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" dependencies = [ "heck", - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", ] [[package]] name = "clap_lex" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" [[package]] name = "cmake" -version = "0.1.53" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24a03c8b52922d68a1589ad61032f2c1aa5a8158d2aa0d93c6e9534944bbad6" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ "cc", ] [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "comma" @@ -321,22 +327,22 @@ checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335" [[package]] name = "console" -version = "0.15.10" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" +checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" dependencies = [ "encode_unicode", "libc", "once_cell", "unicode-width", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] name = "core_affinity" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622892f5635ce1fc38c8f16dfc938553ed64af482edb5e150bf4caedbfcb2304" +checksum = "a034b3a7b624016c6e13f5df875747cc25f884156aad2abd12b6c46797971342" dependencies = [ "libc", "num_cpus", @@ -345,9 +351,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -379,21 +385,21 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.11" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] @@ -404,27 +410,37 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" +[[package]] +name = "derefable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e519abf1289075763071c981958e89948b079fc54962617a0e6413d9ce44cbe7" +dependencies = [ + "proc-macro2 0.4.30", + "quote 0.6.13", + "syn 0.15.44", +] + [[package]] name = "derive-new" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", ] [[package]] name = "dialoguer" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +checksum = "25f104b501bf2364e78d0d3974cbc774f738f5865306ed128e1e0d7499c0ad96" dependencies = [ "console", "shell-words", "tempfile", - "thiserror", "zeroize", ] @@ -436,9 +452,9 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" [[package]] name = "doc-comment" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +checksum = "780955b8b195a21ab8e4ac6b60dd1dbdcec1dc6c51c0617964b08c81785e12c9" [[package]] name = "editdistancek" @@ -448,9 +464,9 @@ checksum = "3e02df23d5b1c6f9e69fa603b890378123b93073df998a21e6e33b9db0a32613" [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "encode_unicode" @@ -473,25 +489,25 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", ] [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -508,24 +524,30 @@ checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" [[package]] name = "file-format" -version = "0.26.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ef3d5e8ae27277c8285ac43ed153158178ef0f79567f32024ca8140a0c7cd8" +checksum = "0eab8aa2fba5f39f494000a22f44bf3c755b7d7f8ffad3f36c6d507893074159" + +[[package]] +name = "find-msvc-tools" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fixedbitset" -version = "0.4.2" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", - "libz-sys", + "libz-ng-sys", "miniz_oxide", ] @@ -540,17 +562,22 @@ dependencies = [ [[package]] name = "flume" -version = "0.10.14" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", "nanorand", - "pin-project", "spin", ] +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "futures-core" version = "0.3.31" @@ -574,34 +601,46 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.1" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "wasi 0.13.3+wasi-0.2.2", - "windows-targets", + "r-efi", + "wasip2", +] + +[[package]] +name = "getset" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912" +dependencies = [ + "proc-macro-error2", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", ] [[package]] name = "globset" -version = "0.4.15" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" dependencies = [ "aho-corasick", "bstr", @@ -623,9 +662,9 @@ dependencies = [ [[package]] name = "gzp" -version = "0.11.3" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c65d1899521a11810501b50b898464d133e1afc96703cff57726964cfa7baf" +checksum = "c35009b254f25c2960a5655c79a97baa4b44c6a7e3bdfcf7aeaffe707ce345ff" dependencies = [ "byteorder", "bytes", @@ -633,40 +672,44 @@ dependencies = [ "flate2", "flume", "libdeflater", - "libz-sys", + "libz-ng-sys", + "log", "num_cpus", - "thiserror", + "thiserror 2.0.17", ] [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash", +] [[package]] -name = "heck" -version = "0.5.0" +name = "hashbrown" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] -name = "hermit-abi" -version = "0.3.9" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "ignore" -version = "0.4.23" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" +checksum = "d3d782a365a015e0f5c04902246139249abf769125006fbe7649e2ee88169b4a" dependencies = [ "crossbeam-deque", "globset", @@ -680,23 +723,23 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.16.0", ] [[package]] name = "is-terminal" -version = "0.4.15" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" +checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ - "hermit-abi 0.4.0", + "hermit-abi", "libc", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -707,18 +750,9 @@ checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" [[package]] name = "itertools" @@ -740,15 +774,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" dependencies = [ "once_cell", "wasm-bindgen", @@ -762,74 +796,70 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libdeflate-sys" -version = "0.12.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1f7b0817f85e2ba608892f30fbf4c9d03f3ebf9db0c952d1b7c8f7387b54785" +checksum = "23bd6304ebf75390d8a99b88bdf2a266f62647838140cb64af8e6702f6e3fddc" dependencies = [ "cc", ] [[package]] name = "libdeflater" -version = "0.12.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671e63282f642c7bcc7d292b212d5a4739fef02a77fe98429a75d308f96e7931" +checksum = "d5d4880e6d634d3d029d65fa016038e788cc728a17b782684726fb34ee140caf" dependencies = [ "libdeflate-sys", ] [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] -name = "libz-sys" -version = "1.1.21" +name = "libz-ng-sys" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9b68e50e6e0b26f672573834882eb57759f6db9b3be2ea3c35c91188bb4eaa" +checksum = "a7118c2c2a3c7b6edc279a8b19507672b9c4d716f95e671172dfa4e23f9fd824" dependencies = [ - "cc", "cmake", "libc", - "pkg-config", - "vcpkg", ] [[package]] name = "linux-raw-sys" -version = "0.4.15" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.25" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -837,37 +867,37 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", + "simd-adler32", ] [[package]] name = "multimap" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" dependencies = [ "serde", ] [[package]] name = "nalgebra" -version = "0.32.6" +version = "0.33.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ "approx", "matrixmultiply", - "nalgebra-macros", "num-complex", "num-rational", "num-traits", @@ -877,24 +907,13 @@ dependencies = [ "typenum", ] -[[package]] -name = "nalgebra-macros" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "nanorand" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -923,12 +942,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ "bitflags", "cfg-if", + "cfg_aliases", "libc", ] @@ -938,6 +958,16 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + [[package]] name = "num-complex" version = "0.4.6" @@ -962,6 +992,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ + "num-bigint", "num-integer", "num-traits", ] @@ -978,34 +1009,40 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "ordered-float" -version = "4.6.0" +version = "5.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" dependencies = [ "num-traits", ] [[package]] name = "owo-colors" -version = "4.1.0" +version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" +checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" dependencies = [ "supports-color 2.1.0", "supports-color 3.0.2", @@ -1019,45 +1056,21 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "petgraph" -version = "0.6.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", + "hashbrown 0.15.5", "indexmap", + "serde", ] -[[package]] -name = "pin-project" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pkg-config" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" - [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "portable-atomic-util" @@ -1070,9 +1083,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ "zerocopy", ] @@ -1107,24 +1120,70 @@ dependencies = [ "termtree", ] +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2 1.0.103", + "quote 1.0.41", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", +] + [[package]] name = "proc-macro2" -version = "1.0.93" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "proc-macro2" +version = "1.0.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.38" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" dependencies = [ - "proc-macro2", + "proc-macro2 0.4.30", ] +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2 1.0.103", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" version = "0.8.5" @@ -1152,7 +1211,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -1173,9 +1232,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "regex" -version = "1.11.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -1185,9 +1244,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -1196,21 +1255,21 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rexpect" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c020234fb542618dc3e3d43724e9d93f87e1db74040a76a8c4e830220fb9b20d" +checksum = "2c1bcd4ac488e9d2d726d147031cceff5cff6425011ff1914049739770fa4726" dependencies = [ "comma", "nix", "regex", "tempfile", - "thiserror", + "thiserror 2.0.17", ] [[package]] @@ -1224,28 +1283,28 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.44" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "ryu" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safe_arch" @@ -1279,22 +1338,32 @@ checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", ] [[package]] @@ -1311,9 +1380,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simba" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" dependencies = [ "approx", "num-complex", @@ -1322,6 +1391,12 @@ dependencies = [ "wide", ] +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "spin" version = "0.9.8" @@ -1333,9 +1408,9 @@ dependencies = [ [[package]] name = "statrs" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f697a07e4606a0a25c044de247e583a330dbb1731d11bc7350b81f48ad567255" +checksum = "2a3fe7c28c6512e766b0874335db33c94ad7b8f9054228ae1c2abd47ce7d335e" dependencies = [ "approx", "nalgebra", @@ -1362,10 +1437,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ "heck", - "proc-macro2", - "quote", + "proc-macro2 1.0.103", + "quote 1.0.41", "rustversion", - "syn", + "syn 2.0.108", ] [[package]] @@ -1389,27 +1464,37 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.98" +version = "0.15.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" dependencies = [ - "proc-macro2", - "quote", + "proc-macro2 0.4.30", + "quote 0.6.13", + "unicode-xid", +] + +[[package]] +name = "syn" +version = "2.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" +dependencies = [ + "proc-macro2 1.0.103", + "quote 1.0.41", "unicode-ident", ] [[package]] name = "tempfile" -version = "3.16.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ - "cfg-if", "fastrand", - "getrandom 0.3.1", + "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -1424,7 +1509,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" +dependencies = [ + "thiserror-impl 2.0.17", ] [[package]] @@ -1433,9 +1527,20 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" +dependencies = [ + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", ] [[package]] @@ -1446,9 +1551,9 @@ checksum = "22048bc95dfb2ffd05b1ff9a756290a009224b60b2f0e7525faeee7603851e63" [[package]] name = "typenum" -version = "1.17.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "umi-transfer" @@ -1463,7 +1568,7 @@ dependencies = [ "file-format", "flate2", "gzp", - "itertools 0.14.0", + "itertools", "owo-colors", "predicates", "regex", @@ -1472,27 +1577,27 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-width" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" [[package]] -name = "utf8parse" -version = "0.2.2" +name = "unicode-xid" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" [[package]] -name = "vcpkg" -version = "0.2.15" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "vec_map" @@ -1524,81 +1629,69 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasi" -version = "0.13.3+wasi-0.2.2" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" -dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", - "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" dependencies = [ - "quote", + "quote 1.0.41", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", + "bumpalo", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" dependencies = [ "unicode-ident", ] [[package]] name = "wide" -version = "0.7.32" +version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" dependencies = [ "bytemuck", "safe_arch", @@ -1622,11 +1715,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -1635,21 +1728,37 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ "windows-targets", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-targets" -version = "0.52.6" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ + "windows-link", "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", @@ -1662,84 +1771,80 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" -version = "0.52.6" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] -name = "wit-bindgen-rt" -version = "0.33.0" +name = "wit-bindgen" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" -dependencies = [ - "bitflags", -] +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ - "proc-macro2", - "quote", - "syn", + "proc-macro2 1.0.103", + "quote 1.0.41", + "syn 2.0.108", ] [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" diff --git a/Cargo.toml b/Cargo.toml index db02619..6447451 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,20 +6,20 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -clap = { version = "4.5.28", features = ["derive"] } -bio = "2.0.3" -flate2 = "1.0.35" +clap = { version = "4.5.51", features = ["derive"] } +bio = "3.0.0" +flate2 = "1.1.5" itertools = "0.14.0" -file-format = "0.26.0" -anyhow = "1.0.95" -dialoguer = "0.11.0" -regex = "1.11.1" -owo-colors = { version = "4.1", features = ["supports-colors"] } -gzp = "0.11.3" +file-format = "0.28.0" +anyhow = "1.0.100" +dialoguer = "0.12.0" +regex = "1.12.2" +owo-colors = { version = "4.2", features = ["supports-colors"] } +gzp = "2.0.0" [dev-dependencies] -assert_cmd = "2.0.16" -assert_fs = "1.1.2" +assert_cmd = "2.1.1" +assert_fs = "1.1.3" predicates = "3.1.3" -rexpect = "0.6.0" +rexpect = "0.6.2" diff --git a/src/file_io.rs b/src/file_io.rs index 1a528da..dac51be 100644 --- a/src/file_io.rs +++ b/src/file_io.rs @@ -56,7 +56,7 @@ pub fn read_fastq(path: &PathBuf) -> Result), - Compressed(FastqWriter>), + Compressed(FastqWriter>>), } impl OutputFile { diff --git a/tests/auxiliary.rs b/tests/auxiliary.rs index 2bdf419..7464958 100644 --- a/tests/auxiliary.rs +++ b/tests/auxiliary.rs @@ -57,7 +57,7 @@ pub fn setup_integration_test( with_results: bool, ) -> (Command, TempDir, TestFiles, Option) { // Get the name of the binary (umi-transfer) - let cmd = Command::cargo_bin(assert_cmd::crate_name!()) + let cmd = Command::cargo_bin(assert_cmd::pkg_name!()) .expect("Failed to pull binary name from Cargo.toml at compile time."); let temp_dir = assert_fs::TempDir::new().expect("Failed to create temporary directory"); diff --git a/tests/integration_tests_external.rs b/tests/integration_tests_external.rs index 5ec0b69..8380d1d 100644 --- a/tests/integration_tests_external.rs +++ b/tests/integration_tests_external.rs @@ -10,7 +10,7 @@ mod auxiliary; #[test] fn external_fails_without_arguments() { - let mut cmd = Command::cargo_bin(assert_cmd::crate_name!()).unwrap(); + let mut cmd = Command::cargo_bin(assert_cmd::pkg_name!()).unwrap(); cmd.arg("external"); diff --git a/tests/integration_tests_main.rs b/tests/integration_tests_main.rs index cbe1b98..53694a0 100644 --- a/tests/integration_tests_main.rs +++ b/tests/integration_tests_main.rs @@ -7,7 +7,7 @@ mod auxiliary; #[test] fn main_without_arguments_prints_help() { - let mut cmd = Command::cargo_bin(assert_cmd::crate_name!()).unwrap(); + let mut cmd = Command::cargo_bin(assert_cmd::pkg_name!()).unwrap(); // Clap prints help to stderr in this case, but to stdout with -h or --help. cmd.assert() .success() @@ -18,7 +18,7 @@ fn main_without_arguments_prints_help() { #[test] fn main_help_prints_help() { - let mut cmd = Command::cargo_bin(assert_cmd::crate_name!()).unwrap(); + let mut cmd = Command::cargo_bin(assert_cmd::pkg_name!()).unwrap(); // Clap prints help to stdout with -h or --help. for help in &["-h", "--help"] { From 67796ebf5ceb2318cb9a1480e29cc6b90e51d888 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 5 Nov 2025 19:20:45 +0100 Subject: [PATCH 16/20] Upgrade the assert_cmd crate and tests. --- tests/auxiliary.rs | 4 ++-- tests/integration_tests_external.rs | 7 +++---- tests/integration_tests_main.rs | 7 +++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/tests/auxiliary.rs b/tests/auxiliary.rs index 7464958..85f65dd 100644 --- a/tests/auxiliary.rs +++ b/tests/auxiliary.rs @@ -1,5 +1,6 @@ use anyhow::{anyhow, Result}; use assert_cmd::Command; +use assert_cmd::cargo::cargo_bin_cmd; use assert_fs::fixture::{NamedTempFile, TempDir}; use assert_fs::prelude::*; use predicates::prelude::*; @@ -57,8 +58,7 @@ pub fn setup_integration_test( with_results: bool, ) -> (Command, TempDir, TestFiles, Option) { // Get the name of the binary (umi-transfer) - let cmd = Command::cargo_bin(assert_cmd::pkg_name!()) - .expect("Failed to pull binary name from Cargo.toml at compile time."); + let cmd = cargo_bin_cmd!(); let temp_dir = assert_fs::TempDir::new().expect("Failed to create temporary directory"); diff --git a/tests/integration_tests_external.rs b/tests/integration_tests_external.rs index 8380d1d..82888a8 100644 --- a/tests/integration_tests_external.rs +++ b/tests/integration_tests_external.rs @@ -1,4 +1,4 @@ -use assert_cmd::Command; +use assert_cmd::cargo::cargo_bin_cmd; use assert_fs::prelude::*; use predicates::prelude::*; use std::process::Command as StdCommand; @@ -10,7 +10,7 @@ mod auxiliary; #[test] fn external_fails_without_arguments() { - let mut cmd = Command::cargo_bin(assert_cmd::pkg_name!()).unwrap(); + let mut cmd = cargo_bin_cmd!(); cmd.arg("external"); @@ -241,8 +241,7 @@ fn external_fails_with_existing_output_file_and_no_force() { // Therefore, we use rexpect to run the test in a session and must use // a different Command type: std::process::Command instead of assert_cmd::Command. - let bin_path = assert_cmd::cargo::cargo_bin("umi-transfer"); - let mut cmd = StdCommand::new(bin_path); + let mut cmd = StdCommand::new(assert_cmd::cargo::cargo_bin!()); cmd.arg("external") .arg("--in") .arg(test_files.read1_gz) diff --git a/tests/integration_tests_main.rs b/tests/integration_tests_main.rs index 53694a0..7eccb19 100644 --- a/tests/integration_tests_main.rs +++ b/tests/integration_tests_main.rs @@ -1,13 +1,12 @@ -use assert_cmd::prelude::*; +use assert_cmd::cargo::cargo_bin_cmd; use predicates::prelude::*; -use std::process::Command; #[path = "auxiliary.rs"] mod auxiliary; #[test] fn main_without_arguments_prints_help() { - let mut cmd = Command::cargo_bin(assert_cmd::pkg_name!()).unwrap(); + let mut cmd = cargo_bin_cmd!(); // Clap prints help to stderr in this case, but to stdout with -h or --help. cmd.assert() .success() @@ -18,7 +17,7 @@ fn main_without_arguments_prints_help() { #[test] fn main_help_prints_help() { - let mut cmd = Command::cargo_bin(assert_cmd::pkg_name!()).unwrap(); + let mut cmd = cargo_bin_cmd!(); // Clap prints help to stdout with -h or --help. for help in &["-h", "--help"] { From 0e125268b975c2da95d2c56bd7057a380ffe43b3 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 5 Nov 2025 19:33:58 +0100 Subject: [PATCH 17/20] Linting --- tests/auxiliary.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auxiliary.rs b/tests/auxiliary.rs index 85f65dd..75f21c3 100644 --- a/tests/auxiliary.rs +++ b/tests/auxiliary.rs @@ -1,6 +1,6 @@ use anyhow::{anyhow, Result}; -use assert_cmd::Command; use assert_cmd::cargo::cargo_bin_cmd; +use assert_cmd::Command; use assert_fs::fixture::{NamedTempFile, TempDir}; use assert_fs::prelude::*; use predicates::prelude::*; From cfa18d48fd04383bc6e234e287d5f494e864f5c4 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Wed, 5 Nov 2025 19:42:46 +0100 Subject: [PATCH 18/20] Update Docker base images from Debian Bookworm to Trixie. --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3f8a522..db21fac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:bookworm as buildenv +FROM rust:trixie as buildenv WORKDIR /usr/app/src COPY ./ /usr/app/src @@ -11,7 +11,7 @@ RUN --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=/rust/target \ cargo build --release -FROM debian:bookworm-slim as runner +FROM debian:trixie-slim as runner WORKDIR /root COPY --from=buildenv /usr/app/src/target/release/ /usr/local/bin/ RUN chmod 755 /usr/local/bin/umi-transfer From 6e1e049b0725f5c86d35c76c785a6d41f7647805 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Mon, 10 Nov 2025 17:08:22 +0100 Subject: [PATCH 19/20] README updates --- README.md | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 6a6e1da..78a151b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # umi-transfer

- A command line tool for transferring Unique Molecular Identifiers (UMIs) provided as separate FastQ file to the header of records in paired FastQ files. + A command line tool for transferring Unique Molecular Identifiers (UMIs) provided as a separate FastQ file to the header of records in paired FastQ files.


@@ -30,7 +30,7 @@ To increase the accuracy of quantitative DNA sequencing experiments, Unique Molecular Identifiers may be used. UMIs are short sequences used to uniquely tag each molecule in a sample library, enabling precise identification of read duplicates. They must be added during library preparation and prior to sequencing, therefore require appropriate arrangements with your sequencing provider. -Most tools capable of taking UMIs into consideration during an analysis workflow, expect the respective UMI sequence to be embedded into the read's ID. Please consult your tools' manuals regarding the exact specification. +Most tools capable of taking UMIs into consideration during an analysis workflow expect the respective UMI sequence to be embedded into the read's ID. Please consult your tools' manuals regarding the exact specification. For some library preparation kits and sequencing adapters, the UMI sequence needs to be read together with the index from the antisense strand. Consequently, it will be output as a separate FastQ file during the demultiplexing process. @@ -44,7 +44,7 @@ Binaries for `umi-transfer` are available for most platforms and can be obtained ### Bioconda - `umi-transfer` is also available on [BioConda](https://bioconda.github.io/). Please refer to the [Bioconda documentation](https://bioconda.github.io/recipes/umi-transfer/README.html#package-umi-transfer) for comprehensive installation instructions. If you are already familiar with conda and BioConda, here’s a quick reference: +`umi-transfer` is also available on [BioConda](https://bioconda.github.io/). Please refer to the [Bioconda documentation](https://bioconda.github.io/recipes/umi-transfer/README.html#package-umi-transfer) for comprehensive installation instructions. If you are already familiar with conda and BioConda, here's a quick reference: ```shell mamba install umi-transfer @@ -101,9 +101,9 @@ umi-transfer 1.6.0 ## Usage -The tool requires three FastQ files as input. You can manually specify the names and location of the output files with `--out` and `--out2` or the tool will automatically append a `with_UMI` suffix to your input file names. It additionally allows to choose a custom UMI delimiter with `--delim`, the position of the integrated UMI with`--position`, and to set the flags `-f`, `-c` and `-z`. +The tool requires three FastQ files as input. You can manually specify the names and location of the output files with `--out` and `--out2` or the tool will automatically append a `with_UMI` suffix to your input file names. It additionally allows you to choose a custom UMI delimiter with `--delim`, the position of the integrated UMI with `--position`, and to set the flags `-f`, `-c` and `-z`. -`-c` is used to ensure the canonical `1` and `2` of paired files as read numbers in the output, regardless of the read numbers of the input reads. `-f` / `--force` will overwrite existing output files without prompting the user and `-z` enables the internal compression of the output files. Alternatively, you can also specify an output file name with `.gz` suffix to obtain compressed output. +`-c` is used to ensure the canonical read numbers `1` and `2` in paired output files, regardless of the read numbers of the input reads. `-f` / `--force` will overwrite existing output files without prompting the user and `-z` enables the internal compression of the output files. Alternatively, you can also specify an output file name with `.gz` suffix to obtain compressed output. ```raw $ umi-transfer external --help @@ -184,13 +184,25 @@ umi-transfer external --in read1.fastq --in2 read1.fastq --umi read2.fastq --out ### Benchmarks and parameter recommendations +#### umi-transfer versions -Since the release of version 1.5, `umi-transfer` features internal multi-threaded output compression. As a result, `umi-transfer` 1.5 now runs approximately 25 times faster than version 1.0 when using internal compression and about twice as fast compared to using an external compression tool. This improvement is enabled by the outstanding [`gzp` crate](https://github.com/sstadick/gzp), which abstracts a lot of the underlying complexity away from the main software. +Since the release of version 1.5, `umi-transfer` features internal multi-threaded output compression. As a result, `umi-transfer` 1.5 now runs approximately 25 times faster than version 1.0 when using internal compression and about twice as fast compared to using an external compression tool. This improvement is enabled by the outstanding [`gzp` crate](https://github.com/sstadick/gzp), which abstracts a lot of the underlying complexity away from the main software. ![Benchmark of different tool versions](docs/img/benchmark_umi-transfer-version.svg) In our first benchmark using 17 threads, version 1.5 of `umi-transfer` processed approximately 550,000 paired records per second with the default gzip compression level of 3. At the highest compression level of 9, the rate dropped to just below 200,000 records per second. While the exact numbers may vary depending on your storage, file system, and processors, we expect the relative performance rates to remain approximately constant. +| Version | Command | `--position` | ~ reads / s | +|----------|----------|----------|----------| +| 1.0 | external | N/A | 30500 | +| 1.5 | external | N/A | 591200 | +| 1.6 | external | Header | 579500 | +| 1.6 | external | Inline | 567287 | + +*Due to the new `--position` parameter for choosing the UMI integration position, Version 1.6 is about 5% slower than its predecessor. If you do not require this option, there is no need to upgrade.* + +#### umi-transfer thread setting + ![Benchmark of thread numbers](docs/img/benchmark_umi-transfer-threads.svg) In a subsequent benchmark, we tested the effect of increasing the number of threads. For the default compression level, the maximum speed was achieved with 9 to 11 threads. Since umi-transfer writes two output files simultaneously, this configuration allows for 4 to 5 threads per file to handle the output compression. @@ -232,7 +244,7 @@ umi-transfer external --in read1.fastq --in2 read3.fastq --umi read2.fastq --out It's good practice to remove the FIFOs after the program has finished: ```shell -rm output1.fastq output2.fastq +rm output1 output2 ``` ## Contribution guide for developers From 3c894dd7565fe2e1727c1b72427f48eb873d5e10 Mon Sep 17 00:00:00 2001 From: Matthias Zepper Date: Mon, 10 Nov 2025 17:31:49 +0100 Subject: [PATCH 20/20] Replace Vec::with_capacity() with String::with_capacity() in read_editing.rs --- src/read_editing.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/read_editing.rs b/src/read_editing.rs index a457131..4b67ae4 100644 --- a/src/read_editing.rs +++ b/src/read_editing.rs @@ -34,15 +34,13 @@ pub fn umi_to_record_seq( umi_qual: &[u8], edit_nr: Option, ) -> Result { - let mut concatenated_seq = Vec::with_capacity(input.seq().len() + umi.len()); - concatenated_seq.extend_from_slice(umi); - concatenated_seq.extend_from_slice(input.seq()); - let concatenated_seq_str = String::from_utf8(concatenated_seq).unwrap(); + let mut concatenated_seq_str = String::with_capacity(umi.len() + input.seq().len()); + concatenated_seq_str.push_str(std::str::from_utf8(umi)?); + concatenated_seq_str.push_str(std::str::from_utf8(input.seq())?); - let mut concatenated_qual = Vec::with_capacity(input.qual().len() + umi_qual.len()); - concatenated_qual.extend_from_slice(umi_qual); - concatenated_qual.extend_from_slice(input.qual()); - let concatenated_qual_str = String::from_utf8(concatenated_qual).unwrap(); + let mut concatenated_qual_str = String::with_capacity(umi_qual.len() + input.qual().len()); + concatenated_qual_str.push_str(std::str::from_utf8(umi_qual)?); + concatenated_qual_str.push_str(std::str::from_utf8(input.qual())?); if let Some(number) = edit_nr { let mut new_desc = String::from(input.desc().unwrap());