From f5e4153a49af4c9aff5e9a030388e0cd1705c892 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Wed, 20 Nov 2024 16:36:07 -0800 Subject: [PATCH 01/14] working skipmers, i think! --- Cargo.lock | 3 +- Cargo.toml | 3 +- .../sourmash_plugin_branchwater/__init__.py | 2 +- src/python/tests/test_sketch.py | 130 ++++++++++++++++++ src/utils/buildutils.rs | 25 +++- 5 files changed, 156 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e52949a0..1e643c6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1773,8 +1773,7 @@ checksum = "bceb57dc07c92cdae60f5b27b3fa92ecaaa42fe36c55e22dbfb0b44893e0b1f7" [[package]] name = "sourmash" version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e30f752d984b1d8456024973f8d89772b4ba248f592b77b57d59ad27a232a0" +source = "git+https://github.com/sourmash-bio/sourmash/?branch=try-skipmers#d4a620094ba90a86dcd18197732f2bb18f7266f5" dependencies = [ "az", "byteorder", diff --git a/Cargo.toml b/Cargo.toml index a1c9b1f8..81a923e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,8 @@ crate-type = ["cdylib"] pyo3 = { version = "0.23.1", features = ["extension-module", "anyhow"] } rayon = "1.10.0" serde = { version = "1.0.215", features = ["derive"] } -sourmash = { version = "0.17.2", features = ["branchwater"] } +#sourmash = { version = "0.17.2", features = ["branchwater"] } +sourmash = {git = "https://github.com/sourmash-bio/sourmash/", branch = "try-skipmers", features = ["branchwater"]} serde_json = "1.0.133" niffler = "2.4.0" log = "0.4.22" diff --git a/src/python/sourmash_plugin_branchwater/__init__.py b/src/python/sourmash_plugin_branchwater/__init__.py index 3de354aa..5eb8293b 100755 --- a/src/python/sourmash_plugin_branchwater/__init__.py +++ b/src/python/sourmash_plugin_branchwater/__init__.py @@ -618,7 +618,7 @@ def main(self, args): args.param_string = ["k=31,scaled=1000,dna"] # Check and append 'dna' if no moltype is found in a param string - moltypes = ["dna", "protein", "dayhoff", "hp"] + moltypes = ["dna", "protein", "dayhoff", "hp", "skipmer"] updated_param_strings = [] for param in args.param_string: diff --git a/src/python/tests/test_sketch.py b/src/python/tests/test_sketch.py index 86800008..13714565 100644 --- a/src/python/tests/test_sketch.py +++ b/src/python/tests/test_sketch.py @@ -1,5 +1,6 @@ import os import pytest +import csv import pandas import sourmash from sourmash import index @@ -1435,3 +1436,132 @@ def test_singlesketch_zip_output(runtmp): runtmp.sourmash("sketch", "dna", fa1, "-o", output2) sig2 = sourmash.load_one_signature(output2) assert sig.minhash.hashes == sig2.minhash.hashes + + +def test_manysketch_skipmer(runtmp, capfd): + fa_csv = runtmp.output("db-fa.csv") + + fa1 = get_test_data("short.fa") + fa2 = get_test_data("short2.fa") + fa3 = get_test_data("short3.fa") + protfa1 = get_test_data("short-protein.fa") + + make_assembly_csv(fa_csv, [fa1, fa2, fa3], [protfa1]) + + output = runtmp.output("db.zip") + + runtmp.sourmash( + "scripts", + "manysketch", + fa_csv, + "-o", + output, + "--param-str", + "dna,k=21,scaled=1", + "--param-str", + "skipmer,k=31,scaled=30", + ) + + assert os.path.exists(output) + assert not runtmp.last_result.out # stdout should be empty + captured = capfd.readouterr() + print(captured.err) + + idx = sourmash.load_file_as_index(output) + sigs = list(idx.signatures()) + print(sigs) + + assert len(sigs) == 3 # 3 dna, 3 skipmer. But sourmash can only read the DNA sigs!! + # check moltypes, etc! + dna_md5sums = { + "short": "1474578c5c46dd09da4c2df29cf86621", + "short2": "4efeebd26644278e36b9553e018a851a", + "short3": "f85747ac4f473c4a71c1740d009f512b", + } + for sig in sigs: + if sig.minhash.is_dna: + assert sig.minhash.ksize == 21 + assert sig.minhash.scaled == 1 + print("DNA: ", sig.name, sig.md5sum()) + assert sig.md5sum() == dna_md5sums[sig.name] + + # read the file with python and check sigs + import zipfile, gzip, json + + with zipfile.ZipFile(output, "r") as zf: + # Check the manifest exists + assert "SOURMASH-MANIFEST.csv" in zf.namelist() + + expected_signatures = [ + { + "name": "short", + "ksize": 31, + "scaled": 30, + "moltype": "skipmer", + "md5sum": "c7b5b8d98c6fde00e2a25769d5eb470a", + }, + { + "name": "short3", + "ksize": 31, + "scaled": 30, + "moltype": "skipmer", + "md5sum": "ed5bbe1b2a9a5cd83a6c8583e8122518", + }, + { + "name": "short2", + "ksize": 31, + "scaled": 30, + "moltype": "skipmer", + "md5sum": "13c456b9a346284d0acdf49b3e529da6", + }, + ] + expected_signatures_dict = {exp["md5sum"]: exp for exp in expected_signatures} + + # Read and parse the manifest + with zf.open("SOURMASH-MANIFEST.csv") as manifest_file: + manifest_data = manifest_file.read().decode("utf-8").splitlines() + manifest_data = [line for line in manifest_data if not line.startswith("#")] + manifest_reader = csv.DictReader(manifest_data) + + for row in manifest_reader: + if row["moltype"] == "skipmer": + print("Manifest Row:", row) + + # Validate row fields + md5sum = row["md5"] + assert ( + md5sum in expected_signatures_dict + ), f"Unexpected md5sum: {md5sum}" + expected = expected_signatures_dict[md5sum] + assert ( + row["name"] == expected["name"] + ), f"Name mismatch: {row['name']}" + assert ( + int(row["ksize"]) == expected["ksize"] + ), f"Ksize mismatch: {row['ksize']}" + assert ( + row["moltype"] == expected["moltype"] + ), f"Moltype mismatch: {row['moltype']}" + + sig_path = row["internal_location"] + assert sig_path.startswith("signatures/") + + # Extract and read the signature file + with zf.open(sig_path) as sig_gz: + with gzip.open(sig_gz, "rt") as sig_file: + sig_contents = json.load(sig_file) + print("Signature Contents:", sig_contents) + + # Validate signature contents + sig_data = sig_contents[0] + print(sig_data) + siginfo = sig_data["signatures"][0] + assert ( + siginfo["md5sum"] == md5sum + ), f"MD5 mismatch: {siginfo['md5sum']}" + assert ( + siginfo["ksize"] == expected["ksize"] + ), f"Ksize mismatch: {siginfo['ksize']}" + assert ( + siginfo["molecule"] == expected["moltype"] + ), f"Moltype mismatch: {siginfo['molecule']}" diff --git a/src/utils/buildutils.rs b/src/utils/buildutils.rs index 8d75391c..95e1b77e 100644 --- a/src/utils/buildutils.rs +++ b/src/utils/buildutils.rs @@ -49,7 +49,7 @@ impl MultiSelection { pub fn from_input_moltype(input_moltype: &str) -> Result { // currently we don't allow translation. Will need to change this when we do. // is there a better way to do this? - let mut moltypes = vec!["DNA"]; + let mut moltypes = vec!["DNA", "skipmer"]; // change so default is just dna? if input_moltype == "protein" { moltypes = vec!["protein", "dayhoff", "hp"]; } @@ -181,6 +181,15 @@ impl BuildRecord { } } + pub fn default_skipmer() -> Self { + Self { + moltype: "skipmer".to_string(), + ksize: 21, + scaled: 1000, + ..Self::default_dna() + } + } + pub fn moltype(&self) -> HashFunctions { self.moltype.as_str().try_into().unwrap() } @@ -420,6 +429,13 @@ impl BuildCollection { Ok(mf.records.len()) } + pub fn skipmer_size(&self) -> Result { + let multiselection = MultiSelection::from_moltypes(vec!["skipmer"])?; + let mut mf = self.manifest.clone(); // temporary mutable copy + mf.select(&multiselection)?; + Ok(mf.records.len()) + } + pub fn protein_size(&self) -> Result { let multiselection = MultiSelection::from_moltypes(vec!["protein"])?; let mut mf = self.manifest.clone(); // temporary mutable copy @@ -466,7 +482,7 @@ impl BuildCollection { pub fn parse_moltype(item: &str, current: &mut Option) -> Result { let new_moltype = match item { - "protein" | "dna" | "dayhoff" | "hp" => item.to_string(), + "protein" | "dna" | "dayhoff" | "hp" | "skipmer" => item.to_string(), _ => return Err(format!("unknown moltype '{}'", item)), }; @@ -531,7 +547,7 @@ impl BuildCollection { "abund" | "noabund" => { Self::parse_abundance(item, &mut track_abundance)?; } - "protein" | "dna" | "DNA" | "dayhoff" | "hp" => { + "protein" | "dna" | "DNA" | "dayhoff" | "hp" | "skipmer" => { Self::parse_moltype(item, &mut moltype)?; } _ if item.starts_with("num=") => { @@ -566,6 +582,7 @@ impl BuildCollection { "protein" => BuildRecord::default_protein(), "dayhoff" => BuildRecord::default_dayhoff(), "hp" => BuildRecord::default_hp(), + "skipmer" => BuildRecord::default_skipmer(), _ => { return Err(format!( "Error parsing params string '{}': Unsupported moltype '{}'", @@ -660,6 +677,7 @@ impl BuildCollection { .dna(record.moltype == "DNA") .dayhoff(record.moltype == "dayhoff") .hp(record.moltype == "hp") + .skipmer(record.moltype == "skipmer") .num_hashes(record.num) .track_abundance(record.with_abundance) .build(); @@ -748,6 +766,7 @@ impl BuildCollection { } } else if (input_moltype == "DNA" || input_moltype == "dna") && rec.moltype() == HashFunctions::Murmur64Dna + || rec.moltype() == HashFunctions::Murmur64Skipmer { sig.add_sequence(&record.seq(), true) .context("Failed to add sequence")?; From b1559a39b4d79a9ed251f0947025416340bfe394 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Wed, 20 Nov 2024 17:23:13 -0800 Subject: [PATCH 02/14] test singlesketch skipmers --- src/python/tests/test_sketch.py | 38 +++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/python/tests/test_sketch.py b/src/python/tests/test_sketch.py index 13714565..f69f993f 100644 --- a/src/python/tests/test_sketch.py +++ b/src/python/tests/test_sketch.py @@ -1565,3 +1565,41 @@ def test_manysketch_skipmer(runtmp, capfd): assert ( siginfo["molecule"] == expected["moltype"] ), f"Moltype mismatch: {siginfo['molecule']}" + + +def test_singlesketch_skipmer(runtmp): + """Test singlesketch with skipmers.""" + fa1 = get_test_data("short.fa") + output = runtmp.output("short.sig") + + # Run the singlesketch command + runtmp.sourmash("scripts", "singlesketch", fa1, "-p", "skipmer,k=31,scaled=100", "-o", output) + + # Check if the output exists and contains the expected data + assert os.path.exists(output) + # Load the output signature file + import json + with open(output, "r") as f: + data = json.load(f) + + # Extract the signature part from the JSON + signatures = data[0]["signatures"] + + # Expected signature fields + expected_signatures = [ + { + "name": "short.fa", + "ksize": 31, + "moltype": "skipmer", + "md5sum": "33025b8f1859b7836b99347c217b9dc4", + } + ] + + # Check if the signatures match the expected + assert len(signatures) == len(expected_signatures), "Number of signatures does not match." + + for sig, expected in zip(signatures, expected_signatures): + assert sig["ksize"] == expected["ksize"], f"Unexpected ksize: {sig['ksize']}" + assert sig["molecule"] == expected["moltype"], f"Unexpected moltype: {sig['molecule']}" + assert sig["md5sum"] == expected["md5sum"], f"Unexpected md5sum: {sig['md5sum']}" + assert data[0]["name"] == expected["name"], f"Unexpected name: {data[0]['name']}" From d4258e831f56f944da92d1560ec3a98dbcc3f0ec Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Thu, 21 Nov 2024 10:55:06 -0800 Subject: [PATCH 03/14] add skipmer as moltype option for other commands --- .../sourmash_plugin_branchwater/__init__.py | 24 +++++++++---------- src/utils/mod.rs | 1 + 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/python/sourmash_plugin_branchwater/__init__.py b/src/python/sourmash_plugin_branchwater/__init__.py index 5eb8293b..69249fba 100755 --- a/src/python/sourmash_plugin_branchwater/__init__.py +++ b/src/python/sourmash_plugin_branchwater/__init__.py @@ -78,8 +78,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp"], - help="molecule type (DNA, protein, dayhoff, or hp; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], + help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", ) p.add_argument( "-c", @@ -180,8 +180,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp"], - help="molecule type (DNA, protein, dayhoff, or hp; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], + help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", ) p.add_argument( "-c", @@ -257,8 +257,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp"], - help="molecule type (DNA, protein, dayhoff, or hp; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], + help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", ) p.add_argument( "-c", @@ -341,8 +341,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp"], - help="molecule type (DNA, protein, dayhoff, or hp; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], + help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", ) p.add_argument( "-c", @@ -443,8 +443,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp"], - help="molecule type (DNA, protein, dayhoff, or hp; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], + help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", ) p.add_argument( "-c", @@ -530,8 +530,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp"], - help="molecule type (DNA, protein, dayhoff, or hp; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], + help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", ) p.add_argument( "-c", diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 3f8ffc79..212d1d30 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -967,6 +967,7 @@ pub fn build_selection(ksize: u8, scaled: Option, moltype: &str) -> Selecti "protein" => HashFunctions::Murmur64Protein, "dayhoff" => HashFunctions::Murmur64Dayhoff, "hp" => HashFunctions::Murmur64Hp, + "skipmer" => HashFunctions::Murmur64Skipmer, _ => panic!("Unknown molecule type: {}", moltype), }; // let hash_function = HashFunctions::try_from(moltype) From 4dc1007e7d9496a8865723c4f9bc37ac75d97671 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Thu, 21 Nov 2024 10:56:35 -0800 Subject: [PATCH 04/14] black formatting --- src/python/tests/test_sketch.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/python/tests/test_sketch.py b/src/python/tests/test_sketch.py index f69f993f..d62c0cf0 100644 --- a/src/python/tests/test_sketch.py +++ b/src/python/tests/test_sketch.py @@ -1573,12 +1573,15 @@ def test_singlesketch_skipmer(runtmp): output = runtmp.output("short.sig") # Run the singlesketch command - runtmp.sourmash("scripts", "singlesketch", fa1, "-p", "skipmer,k=31,scaled=100", "-o", output) + runtmp.sourmash( + "scripts", "singlesketch", fa1, "-p", "skipmer,k=31,scaled=100", "-o", output + ) # Check if the output exists and contains the expected data assert os.path.exists(output) # Load the output signature file import json + with open(output, "r") as f: data = json.load(f) @@ -1596,10 +1599,18 @@ def test_singlesketch_skipmer(runtmp): ] # Check if the signatures match the expected - assert len(signatures) == len(expected_signatures), "Number of signatures does not match." + assert len(signatures) == len( + expected_signatures + ), "Number of signatures does not match." for sig, expected in zip(signatures, expected_signatures): assert sig["ksize"] == expected["ksize"], f"Unexpected ksize: {sig['ksize']}" - assert sig["molecule"] == expected["moltype"], f"Unexpected moltype: {sig['molecule']}" - assert sig["md5sum"] == expected["md5sum"], f"Unexpected md5sum: {sig['md5sum']}" - assert data[0]["name"] == expected["name"], f"Unexpected name: {data[0]['name']}" + assert ( + sig["molecule"] == expected["moltype"] + ), f"Unexpected moltype: {sig['molecule']}" + assert ( + sig["md5sum"] == expected["md5sum"] + ), f"Unexpected md5sum: {sig['md5sum']}" + assert ( + data[0]["name"] == expected["name"] + ), f"Unexpected name: {data[0]['name']}" From dece8f828a7e2f857ee4f4288cf76116aad1a50d Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Thu, 21 Nov 2024 12:45:50 -0800 Subject: [PATCH 05/14] add skipmer test sigs; add fastgather test --- .../tests/test-data/SRR606249.skipmer.zip | Bin 0 -> 26967 bytes src/python/tests/test-data/skipmer.zip | Bin 0 -> 25742 bytes src/python/tests/test_fastgather.py | 63 ++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 src/python/tests/test-data/SRR606249.skipmer.zip create mode 100644 src/python/tests/test-data/skipmer.zip diff --git a/src/python/tests/test-data/SRR606249.skipmer.zip b/src/python/tests/test-data/SRR606249.skipmer.zip new file mode 100644 index 0000000000000000000000000000000000000000..e5538212d8c2a986a19dd8f00583c44aff02cd18 GIT binary patch literal 26967 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 literal 0 HcmV?d00001 diff --git a/src/python/tests/test_fastgather.py b/src/python/tests/test_fastgather.py index e3ab4255..c0697d83 100644 --- a/src/python/tests/test_fastgather.py +++ b/src/python/tests/test_fastgather.py @@ -1362,3 +1362,66 @@ def test_equal_matches(runtmp): df = pandas.read_csv(runtmp.output("out.csv")) assert len(df) == 2 assert set(df["intersect_bp"]) == {1000} + + +def test_simple_skipmer( + runtmp, capfd, indexed_query, indexed_against, toggle_internal_storage +): + # test basic execution! + query = get_test_data("SRR606249.skipmer.zip") + against = get_test_data("skipmer.zip") # contains 2,47,63 + + if indexed_query: + query = index_siglist( + runtmp, query, runtmp.output("query"), scaled=100000, moltype="skipmer" + ) + + if indexed_against: + against = index_siglist( + runtmp, + against, + runtmp.output("db"), + moltype="skipmer", + toggle_internal_storage=toggle_internal_storage, + ) + + g_output = runtmp.output("gather.csv") + p_output = runtmp.output("prefetch.csv") + + runtmp.sourmash( + "scripts", + "fastgather", + "--moltype", + "skipmer", + query, + against, + "-o", + g_output, + "-s", + "100000", + ) + assert os.path.exists(g_output) + + captured = capfd.readouterr() + print(captured.err) + + df = pandas.read_csv(g_output) + assert len(df) == 3 + keys = set(df.keys()) + assert { + "query_filename", + "query_name", + "query_md5", + "match_name", + "match_md5", + "gather_result_rank", + "intersect_bp", + }.issubset(keys) + + # CTB note: we do not need to worry about this warning for query from a + # RocksDB, since there is only one. + if indexed_against: + print("indexed against:", indexed_against) + assert ( + "WARNING: loading all sketches from a RocksDB into memory!" in captured.err + ) From b28a1c7d45cf1e9873e3c69ffa547d23c9974c90 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Thu, 12 Dec 2024 16:10:31 -0800 Subject: [PATCH 06/14] upd --- Cargo.lock | 49 +++++++++--------- .../sourmash_plugin_branchwater/__init__.py | 26 +++++----- .../tests/test-data/SRR606249.skipmer.zip | Bin 26967 -> 51327 bytes src/python/tests/test-data/skipmer.zip | Bin 25742 -> 48240 bytes src/python/tests/test_fastgather.py | 12 ++--- src/python/tests/test_sketch.py | 28 +++++----- src/utils/buildutils.rs | 43 ++++++++++----- src/utils/mod.rs | 3 +- 8 files changed, 90 insertions(+), 71 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1e643c6f..f8304e63 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "adler" @@ -972,13 +972,12 @@ checksum = "a2983372caf4480544083767bf2d27defafe32af49ab4df3a0b7fc90793a3664" [[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", @@ -988,17 +987,6 @@ 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 2.0.87", -] - [[package]] name = "ndarray" version = "0.15.6" @@ -1029,9 +1017,9 @@ dependencies = [ [[package]] name = "needletail" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29a3c5015d6985f33318d154fa0c41315eb2e7df29432c844c74a83434bfe21" +checksum = "de3de09e373770238e3d30eb1a9f09f4754134d0ef354d0570bc1203d2517257" dependencies = [ "buffer-redux", "bytecount", @@ -1075,6 +1063,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" @@ -1110,6 +1108,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ + "num-bigint", "num-integer", "num-traits", ] @@ -1585,9 +1584,9 @@ dependencies = [ [[package]] name = "roaring" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f4b84ba6e838ceb47b41de5194a60244fac43d9fe03b71dbe8c5a201081d6d1" +checksum = "395b0c39c00f9296f3937624c1fa4e0ee44f8c0e4b2c49408179ef381c6c2e6e" dependencies = [ "bytemuck", "byteorder", @@ -1735,9 +1734,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simba" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" dependencies = [ "approx", "num-complex", @@ -1773,7 +1772,7 @@ checksum = "bceb57dc07c92cdae60f5b27b3fa92ecaaa42fe36c55e22dbfb0b44893e0b1f7" [[package]] name = "sourmash" version = "0.17.2" -source = "git+https://github.com/sourmash-bio/sourmash/?branch=try-skipmers#d4a620094ba90a86dcd18197732f2bb18f7266f5" +source = "git+https://github.com/sourmash-bio/sourmash/?branch=try-skipmers#43e069c7cb7217bb8c1c812ad70c4db301015c46" dependencies = [ "az", "byteorder", @@ -1793,7 +1792,7 @@ dependencies = [ "md5", "memmap2", "murmurhash3", - "needletail 0.6.0", + "needletail 0.6.1", "niffler", "nohash-hasher", "num-iter", @@ -1855,9 +1854,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[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", diff --git a/src/python/sourmash_plugin_branchwater/__init__.py b/src/python/sourmash_plugin_branchwater/__init__.py index 69249fba..97dc1880 100755 --- a/src/python/sourmash_plugin_branchwater/__init__.py +++ b/src/python/sourmash_plugin_branchwater/__init__.py @@ -78,8 +78,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], - help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipm1n3", "skipm2n3"], + help="molecule type: DNA, protein, dayhoff, hp, or skipmer (skipm1n3 or skipm2n3); default DNA", ) p.add_argument( "-c", @@ -180,8 +180,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], - help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipm1n3", "skipm2n3"], + help="molecule type: DNA, protein, dayhoff, hp, or skipmer (skipm1n3 or skipm2n3); default DNA", ) p.add_argument( "-c", @@ -257,8 +257,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], - help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipm1n3", "skipm2n3"], + help="molecule type: DNA, protein, dayhoff, hp, or skipmer (skipm1n3 or skipm2n3); default DNA", ) p.add_argument( "-c", @@ -341,8 +341,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], - help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipm1n3", "skipm2n3"], + help="molecule type: DNA, protein, dayhoff, hp, or skipmer (skipm1n3 or skipm2n3); default DNA", ) p.add_argument( "-c", @@ -443,8 +443,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], - help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipm1n3", "skipm2n3"], + help="molecule type: DNA, protein, dayhoff, hp, or skipmer (skipm1n3 or skipm2n3); default DNA", ) p.add_argument( "-c", @@ -530,8 +530,8 @@ def __init__(self, p): "-m", "--moltype", default="DNA", - choices=["DNA", "protein", "dayhoff", "hp", "skipmer"], - help="molecule type (DNA, protein, dayhoff, hp, or skipmer; default DNA)", + choices=["DNA", "protein", "dayhoff", "hp", "skipm1n3", "skipm2n3"], + help="molecule type: DNA, protein, dayhoff, hp, or skipmer (skipm1n3 or skipm2n3); default DNA", ) p.add_argument( "-c", @@ -618,7 +618,7 @@ def main(self, args): args.param_string = ["k=31,scaled=1000,dna"] # Check and append 'dna' if no moltype is found in a param string - moltypes = ["dna", "protein", "dayhoff", "hp", "skipmer"] + moltypes = ["dna", "protein", "dayhoff", "hp", "skipm1n3", "skipm2n3"] updated_param_strings = [] for param in args.param_string: diff --git a/src/python/tests/test-data/SRR606249.skipmer.zip b/src/python/tests/test-data/SRR606249.skipmer.zip index e5538212d8c2a986a19dd8f00583c44aff02cd18..6c829bb27ca010300520bc4d933a6a893374c899 100644 GIT binary patch literal 51327 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 A(*OVf literal 25742 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 diff --git a/src/python/tests/test_fastgather.py b/src/python/tests/test_fastgather.py index c0697d83..7442a645 100644 --- a/src/python/tests/test_fastgather.py +++ b/src/python/tests/test_fastgather.py @@ -1364,16 +1364,16 @@ def test_equal_matches(runtmp): assert set(df["intersect_bp"]) == {1000} -def test_simple_skipmer( +def test_simple_skipm2n3( runtmp, capfd, indexed_query, indexed_against, toggle_internal_storage ): # test basic execution! - query = get_test_data("SRR606249.skipmer.zip") - against = get_test_data("skipmer.zip") # contains 2,47,63 + query = get_test_data("SRR606249.skipm2n3.zip") + against = get_test_data("skipm2n3.zip") # contains 2,47,63 if indexed_query: query = index_siglist( - runtmp, query, runtmp.output("query"), scaled=100000, moltype="skipmer" + runtmp, query, runtmp.output("query"), scaled=100000, moltype="skipm2n3" ) if indexed_against: @@ -1381,7 +1381,7 @@ def test_simple_skipmer( runtmp, against, runtmp.output("db"), - moltype="skipmer", + moltype="skipm2n3", toggle_internal_storage=toggle_internal_storage, ) @@ -1392,7 +1392,7 @@ def test_simple_skipmer( "scripts", "fastgather", "--moltype", - "skipmer", + "skipm2n3", query, against, "-o", diff --git a/src/python/tests/test_sketch.py b/src/python/tests/test_sketch.py index d62c0cf0..bedd0226 100644 --- a/src/python/tests/test_sketch.py +++ b/src/python/tests/test_sketch.py @@ -1438,7 +1438,7 @@ def test_singlesketch_zip_output(runtmp): assert sig.minhash.hashes == sig2.minhash.hashes -def test_manysketch_skipmer(runtmp, capfd): +def test_manysketch_skipm2n3(runtmp, capfd): fa_csv = runtmp.output("db-fa.csv") fa1 = get_test_data("short.fa") @@ -1459,7 +1459,7 @@ def test_manysketch_skipmer(runtmp, capfd): "--param-str", "dna,k=21,scaled=1", "--param-str", - "skipmer,k=31,scaled=30", + "skipm2n3,k=31,scaled=30", ) assert os.path.exists(output) @@ -1497,22 +1497,22 @@ def test_manysketch_skipmer(runtmp, capfd): "name": "short", "ksize": 31, "scaled": 30, - "moltype": "skipmer", - "md5sum": "c7b5b8d98c6fde00e2a25769d5eb470a", + "moltype": "skipm2n3", + "md5sum": "0486fcae73545363da9cd5bfcf18d322", }, { "name": "short3", "ksize": 31, "scaled": 30, - "moltype": "skipmer", - "md5sum": "ed5bbe1b2a9a5cd83a6c8583e8122518", + "moltype": "skipm2n3", + "md5sum": "890557b39ae66d3177035296818de7c6", }, { "name": "short2", "ksize": 31, "scaled": 30, - "moltype": "skipmer", - "md5sum": "13c456b9a346284d0acdf49b3e529da6", + "moltype": "skipm2n3", + "md5sum": "ec6305f5d82e51659f3914d47fcc32ee", }, ] expected_signatures_dict = {exp["md5sum"]: exp for exp in expected_signatures} @@ -1524,7 +1524,7 @@ def test_manysketch_skipmer(runtmp, capfd): manifest_reader = csv.DictReader(manifest_data) for row in manifest_reader: - if row["moltype"] == "skipmer": + if row["moltype"] == "skipm2n3": print("Manifest Row:", row) # Validate row fields @@ -1567,14 +1567,14 @@ def test_manysketch_skipmer(runtmp, capfd): ), f"Moltype mismatch: {siginfo['molecule']}" -def test_singlesketch_skipmer(runtmp): - """Test singlesketch with skipmers.""" +def test_singlesketch_skipm2n3(runtmp): + """Test singlesketch with skipm2n3.""" fa1 = get_test_data("short.fa") output = runtmp.output("short.sig") # Run the singlesketch command runtmp.sourmash( - "scripts", "singlesketch", fa1, "-p", "skipmer,k=31,scaled=100", "-o", output + "scripts", "singlesketch", fa1, "-p", "skipm2n3,k=31,scaled=100", "-o", output ) # Check if the output exists and contains the expected data @@ -1593,8 +1593,8 @@ def test_singlesketch_skipmer(runtmp): { "name": "short.fa", "ksize": 31, - "moltype": "skipmer", - "md5sum": "33025b8f1859b7836b99347c217b9dc4", + "moltype": "skipm2n3", + "md5sum": "387d25c8e4b4878c78872efd13621491", } ] diff --git a/src/utils/buildutils.rs b/src/utils/buildutils.rs index 95e1b77e..b58ceaf4 100644 --- a/src/utils/buildutils.rs +++ b/src/utils/buildutils.rs @@ -49,7 +49,7 @@ impl MultiSelection { pub fn from_input_moltype(input_moltype: &str) -> Result { // currently we don't allow translation. Will need to change this when we do. // is there a better way to do this? - let mut moltypes = vec!["DNA", "skipmer"]; // change so default is just dna? + let mut moltypes = vec!["DNA", "skipm1n3", "skipm2n3"]; // change so default is just dna? if input_moltype == "protein" { moltypes = vec!["protein", "dayhoff", "hp"]; } @@ -181,9 +181,18 @@ impl BuildRecord { } } - pub fn default_skipmer() -> Self { + pub fn default_skipm1n3() -> Self { Self { - moltype: "skipmer".to_string(), + moltype: "skipm1n3".to_string(), + ksize: 21, + scaled: 1000, + ..Self::default_dna() + } + } + + pub fn default_skipm2n3() -> Self { + Self { + moltype: "skipm2n3".to_string(), ksize: 21, scaled: 1000, ..Self::default_dna() @@ -429,16 +438,23 @@ impl BuildCollection { Ok(mf.records.len()) } - pub fn skipmer_size(&self) -> Result { - let multiselection = MultiSelection::from_moltypes(vec!["skipmer"])?; - let mut mf = self.manifest.clone(); // temporary mutable copy + pub fn skipm1n3_size(&self) -> Result { + let multiselection = MultiSelection::from_moltypes(vec!["skipm1n3"])?; + let mut mf = self.manifest.clone(); + mf.select(&multiselection)?; + Ok(mf.records.len()) + } + + pub fn skipm2n3_size(&self) -> Result { + let multiselection = MultiSelection::from_moltypes(vec!["skipm2n3"])?; + let mut mf = self.manifest.clone(); mf.select(&multiselection)?; Ok(mf.records.len()) } pub fn protein_size(&self) -> Result { let multiselection = MultiSelection::from_moltypes(vec!["protein"])?; - let mut mf = self.manifest.clone(); // temporary mutable copy + let mut mf = self.manifest.clone(); mf.select(&multiselection)?; Ok(mf.records.len()) } @@ -482,7 +498,7 @@ impl BuildCollection { pub fn parse_moltype(item: &str, current: &mut Option) -> Result { let new_moltype = match item { - "protein" | "dna" | "dayhoff" | "hp" | "skipmer" => item.to_string(), + "protein" | "dna" | "dayhoff" | "hp" | "skipm1n3" | "skipm2n3" => item.to_string(), _ => return Err(format!("unknown moltype '{}'", item)), }; @@ -547,7 +563,7 @@ impl BuildCollection { "abund" | "noabund" => { Self::parse_abundance(item, &mut track_abundance)?; } - "protein" | "dna" | "DNA" | "dayhoff" | "hp" | "skipmer" => { + "protein" | "dna" | "DNA" | "dayhoff" | "hp" | "skipm1n3" | "skipm2n3" => { Self::parse_moltype(item, &mut moltype)?; } _ if item.starts_with("num=") => { @@ -582,7 +598,8 @@ impl BuildCollection { "protein" => BuildRecord::default_protein(), "dayhoff" => BuildRecord::default_dayhoff(), "hp" => BuildRecord::default_hp(), - "skipmer" => BuildRecord::default_skipmer(), + "skipm1n3" => BuildRecord::default_skipm1n3(), + "skipm2n3" => BuildRecord::default_skipm2n3(), _ => { return Err(format!( "Error parsing params string '{}': Unsupported moltype '{}'", @@ -677,7 +694,8 @@ impl BuildCollection { .dna(record.moltype == "DNA") .dayhoff(record.moltype == "dayhoff") .hp(record.moltype == "hp") - .skipmer(record.moltype == "skipmer") + .skipm1n3(record.moltype == "skipm1n3") + .skipm2n3(record.moltype == "skipm2n3") .num_hashes(record.num) .track_abundance(record.with_abundance) .build(); @@ -766,7 +784,8 @@ impl BuildCollection { } } else if (input_moltype == "DNA" || input_moltype == "dna") && rec.moltype() == HashFunctions::Murmur64Dna - || rec.moltype() == HashFunctions::Murmur64Skipmer + || rec.moltype() == HashFunctions::Murmur64Skipm1n3 + || rec.moltype() == HashFunctions::Murmur64Skipm2n3 { sig.add_sequence(&record.seq(), true) .context("Failed to add sequence")?; diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 212d1d30..b8335b83 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -967,7 +967,8 @@ pub fn build_selection(ksize: u8, scaled: Option, moltype: &str) -> Selecti "protein" => HashFunctions::Murmur64Protein, "dayhoff" => HashFunctions::Murmur64Dayhoff, "hp" => HashFunctions::Murmur64Hp, - "skipmer" => HashFunctions::Murmur64Skipmer, + "skipm1n3" => HashFunctions::Murmur64Skipm1n3, + "skipm2n3" => HashFunctions::Murmur64Skipm2n3, _ => panic!("Unknown molecule type: {}", moltype), }; // let hash_function = HashFunctions::try_from(moltype) From 703602fe0f596ee28b25fa85fba5d6288ca178b7 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Thu, 12 Dec 2024 16:10:52 -0800 Subject: [PATCH 07/14] upd test files --- ...SRR606249.skipmer.zip => SRR606249.skipm2n3.zip} | Bin .../tests/test-data/{skipmer.zip => skipm2n3.zip} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename src/python/tests/test-data/{SRR606249.skipmer.zip => SRR606249.skipm2n3.zip} (100%) rename src/python/tests/test-data/{skipmer.zip => skipm2n3.zip} (100%) diff --git a/src/python/tests/test-data/SRR606249.skipmer.zip b/src/python/tests/test-data/SRR606249.skipm2n3.zip similarity index 100% rename from src/python/tests/test-data/SRR606249.skipmer.zip rename to src/python/tests/test-data/SRR606249.skipm2n3.zip diff --git a/src/python/tests/test-data/skipmer.zip b/src/python/tests/test-data/skipm2n3.zip similarity index 100% rename from src/python/tests/test-data/skipmer.zip rename to src/python/tests/test-data/skipm2n3.zip From 8e09b49af843350522807582ff7babf9ad0edcbe Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Mon, 16 Dec 2024 13:18:29 -0800 Subject: [PATCH 08/14] upd --- Cargo.lock | 6 +++--- Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f8304e63..556aabdd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1584,9 +1584,9 @@ dependencies = [ [[package]] name = "roaring" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395b0c39c00f9296f3937624c1fa4e0ee44f8c0e4b2c49408179ef381c6c2e6e" +checksum = "41589aba99537475bf697f2118357cad1c31590c5a1b9f6d9fc4ad6d07503661" dependencies = [ "bytemuck", "byteorder", @@ -1772,7 +1772,7 @@ checksum = "bceb57dc07c92cdae60f5b27b3fa92ecaaa42fe36c55e22dbfb0b44893e0b1f7" [[package]] name = "sourmash" version = "0.17.2" -source = "git+https://github.com/sourmash-bio/sourmash/?branch=try-skipmers#43e069c7cb7217bb8c1c812ad70c4db301015c46" +source = "git+https://github.com/sourmash-bio/sourmash/?branch=try-skipmers#8a0600d79d41fe34e53a860dc62d89537087eac3" dependencies = [ "az", "byteorder", diff --git a/Cargo.toml b/Cargo.toml index 81a923e9..4b49ea94 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ log = "0.4.22" env_logger = { version = "0.11.5" } simple-error = "0.3.1" anyhow = "1.0.93" -zip = { version = "2.0", default-features = false } +zip = { version = "=2.0", default-features = false } tempfile = "3.14" needletail = "0.5.1" csv = "1.3.1" From 4cb57549560bbe02acfa96af2d1703ca12c8bf99 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Mon, 16 Dec 2024 13:37:22 -0800 Subject: [PATCH 09/14] fix --- Cargo.lock | 443 ++++++++++++++++++++++++----------------------------- 1 file changed, 204 insertions(+), 239 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d5b94069..8b0ddc6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,10 +3,10 @@ version = 4 [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" @@ -49,9 +49,9 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -70,9 +70,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -85,36 +85,36 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -134,9 +134,9 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" dependencies = [ "derive_arbitrary", ] @@ -171,9 +171,9 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "az" @@ -188,7 +188,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b48ee4c818e9d19bbdf75b56e1b2eb9682bb4fbd7ff8e7e7f2cc9956e1aefac7" dependencies = [ "flate2", - "thiserror 1.0.61", + "thiserror 1.0.69", ] [[package]] @@ -214,14 +214,14 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bitvec" @@ -237,9 +237,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" dependencies = [ "borsh-derive", "cfg_aliases", @@ -247,23 +247,22 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.1" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.87", - "syn_derive", + "syn 2.0.90", ] [[package]] name = "bstr" -version = "1.9.1" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" +checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" dependencies = [ "memchr", "regex-automata", @@ -272,9 +271,9 @@ dependencies = [ [[package]] name = "buffer-redux" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c9f8ddd22e0a12391d1e7ada69ec3b0da1914f1cec39c5cf977143c5b2854f5" +checksum = "4e8acf87c5b9f5897cd3ebb9a327f420e0cae9dd4e5c1d2e36f2c84c571a58f1" dependencies = [ "memchr", ] @@ -315,9 +314,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.16.3" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" [[package]] name = "byteorder" @@ -327,9 +326,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "bzip2" @@ -363,13 +362,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.99" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" dependencies = [ "jobserver", "libc", - "once_cell", + "shlex", ] [[package]] @@ -395,9 +394,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -429,15 +428,15 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "counter" @@ -459,9 +458,9 @@ dependencies = [ [[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", @@ -478,9 +477,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "csv" @@ -505,13 +504,13 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.3.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -528,7 +527,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -539,9 +538,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "enum_dispatch" @@ -552,14 +551,14 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "env_filter" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" dependencies = [ "log", "regex", @@ -586,19 +585,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "fastrand" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fixedbitset" @@ -608,9 +607,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", "miniz_oxide", @@ -653,7 +652,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -682,6 +681,12 @@ dependencies = [ "rayon", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + [[package]] name = "heck" version = "0.4.1" @@ -700,7 +705,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58cf6b99a250776d813cdf2f0b478a053a822d078e7a2baf5cb36afc88c41a7c" dependencies = [ - "thiserror 1.0.61", + "thiserror 1.0.69", ] [[package]] @@ -711,9 +716,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -734,12 +739,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "rayon", ] @@ -760,9 +765,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -793,33 +798,34 @@ 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 = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" 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 = "lazycell" @@ -829,15 +835,15 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.162" +version = "0.2.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" +checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" [[package]] name = "libloading" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets", @@ -845,9 +851,9 @@ 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 = "librocksdb-sys" @@ -867,9 +873,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.18" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "pkg-config", @@ -890,9 +896,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lz4-sys" -version = "1.9.5" +version = "1.11.1+lz4-1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9764018d143cc854c9f17f0b907de70f14393b1f502da6375dce70f00514eb3" +checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" dependencies = [ "cc", "libc", @@ -911,9 +917,9 @@ dependencies = [ [[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", @@ -957,11 +963,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -1036,7 +1042,7 @@ dependencies = [ "bzip2", "cfg-if", "flate2", - "thiserror 1.0.61", + "thiserror 1.0.69", "xz2", "zstd", ] @@ -1125,9 +1131,9 @@ dependencies = [ [[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 = "ouroboros" @@ -1151,7 +1157,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1183,26 +1189,29 @@ dependencies = [ "flate2", "log", "memchr", - "thiserror 1.0.61", + "thiserror 1.0.69", ] [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[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" @@ -1220,15 +1229,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" dependencies = [ "predicates-core", "termtree", @@ -1245,9 +1254,9 @@ dependencies = [ [[package]] name = "priority-queue" -version = "2.0.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70c501afe3a2e25c9bd219aa56ec1e04cdb3fcdd763055be268778c13fa82c1f" +checksum = "714c75db297bc88a63783ffc6ab9f830698a6705aa0201416931759ef4c8183d" dependencies = [ "autocfg", "equivalent", @@ -1263,29 +1272,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -1305,14 +1291,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -1325,7 +1311,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "version_check", "yansi", ] @@ -1352,9 +1338,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.23.2" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54b3d09cbdd1f8c20650b28e7b09e338881482f4aa908a5f61a00c98fba2690" +checksum = "e484fd2c8b4cb67ab05a318f1fd6fa8f199fcc30819f08f07d200809dba26c15" dependencies = [ "anyhow", "cfg-if", @@ -1371,9 +1357,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.23.2" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3015cf985888fe66cfb63ce0e321c603706cd541b7aec7ddd35c281390af45d8" +checksum = "dc0e0469a84f208e20044b98965e1561028180219e35352a2afaf2b942beff3b" dependencies = [ "once_cell", "target-lexicon", @@ -1381,9 +1367,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.23.2" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fca7cd8fd809b5ac4eefb89c1f98f7a7651d3739dfb341ca6980090f554c270" +checksum = "eb1547a7f9966f6f1a0f0227564a9945fe36b90da5a93b3933fc3dc03fae372d" dependencies = [ "libc", "pyo3-build-config", @@ -1391,34 +1377,34 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.23.2" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34e657fa5379a79151b6ff5328d9216a84f55dc93b17b08e7c3609a969b73aa0" +checksum = "fdb6da8ec6fa5cedd1626c886fc8749bdcbb09424a86461eb8cdf096b7c33257" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "pyo3-macros-backend" -version = "0.23.2" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "295548d5ffd95fd1981d2d3cf4458831b21d60af046b729b6fd143b0ba7aee2f" +checksum = "38a385202ff5a92791168b1136afae5059d3ac118457bb7bc304c197c2d33e7d" dependencies = [ "heck 0.5.0", "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -1517,9 +1503,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1529,9 +1515,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1540,9 +1526,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rend" @@ -1642,15 +1628,15 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.40" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -1711,7 +1697,7 @@ checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1808,7 +1794,7 @@ dependencies = [ "serde_json", "statrs", "streaming-stats", - "thiserror 2.0.3", + "thiserror 2.0.7", "twox-hash", "typed-builder", "vec-collections", @@ -1886,27 +1872,15 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.87", -] - [[package]] name = "tap" version = "1.0.1" @@ -1915,9 +1889,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.14" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" @@ -1929,7 +1903,7 @@ dependencies = [ "fastrand", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys", ] [[package]] @@ -1940,42 +1914,42 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl 1.0.61", + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "2.0.3" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +checksum = "93605438cbd668185516ab499d589afb7ee1859ea3d5fc8f6b0755e1c7443767" dependencies = [ - "thiserror-impl 2.0.3", + "thiserror-impl 2.0.7", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "thiserror-impl" -version = "2.0.3" +version = "2.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +checksum = "e1d8749b4531af2117677a5fcd12b1348a3fe2b81e36e61ffeac5c4aa3273e36" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2038,7 +2012,7 @@ checksum = "1f718dfaf347dcb5b983bfc87608144b0bad87970aebcbea5ce44d2a30c08e63" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2049,9 +2023,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unindent" @@ -2067,9 +2041,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" [[package]] name = "vcpkg" @@ -2094,9 +2068,9 @@ dependencies = [ [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wait-timeout" @@ -2115,9 +2089,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -2126,24 +2100,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2151,28 +2124,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -2180,9 +2153,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.24" +version = "0.7.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a040b111774ab63a19ef46bbc149398ab372b4ccdcfd719e9814dbd7dfd76c8" +checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" dependencies = [ "bytemuck", "safe_arch", @@ -2197,15 +2170,6 @@ dependencies = [ "windows-targets", ] -[[package]] -name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.59.0" @@ -2314,22 +2278,23 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "zerocopy" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.34" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2343,7 +2308,7 @@ dependencies = [ "crossbeam-utils", "displaydoc", "indexmap", - "thiserror 1.0.61", + "thiserror 1.0.69", ] [[package]] @@ -2367,9 +2332,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", From 7d9112bca02ee6607b51898040599c1df7469672 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Mon, 16 Dec 2024 13:52:22 -0800 Subject: [PATCH 10/14] fix2 --- Cargo.lock | 425 ++++++++++++++++++++++++++---------------------- environment.yml | 2 +- 2 files changed, 231 insertions(+), 196 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8b0ddc6f..94e14a12 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 = 4 +version = 3 [[package]] -name = "adler2" -version = "2.0.0" +name = "adler" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" @@ -49,9 +49,9 @@ checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" [[package]] name = "allocator-api2" -version = "0.2.21" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-tzdata" @@ -70,9 +70,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", @@ -85,36 +85,36 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.6" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -134,9 +134,9 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.4.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" dependencies = [ "derive_arbitrary", ] @@ -171,9 +171,9 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "autocfg" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "az" @@ -188,7 +188,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b48ee4c818e9d19bbdf75b56e1b2eb9682bb4fbd7ff8e7e7f2cc9956e1aefac7" dependencies = [ "flate2", - "thiserror 1.0.69", + "thiserror 1.0.61", ] [[package]] @@ -214,14 +214,14 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] name = "bitflags" -version = "2.6.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bitvec" @@ -237,9 +237,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.3" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" dependencies = [ "borsh-derive", "cfg_aliases", @@ -247,22 +247,23 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.5.3" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", + "syn_derive", ] [[package]] name = "bstr" -version = "1.11.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" dependencies = [ "memchr", "regex-automata", @@ -271,9 +272,9 @@ dependencies = [ [[package]] name = "buffer-redux" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e8acf87c5b9f5897cd3ebb9a327f420e0cae9dd4e5c1d2e36f2c84c571a58f1" +checksum = "4c9f8ddd22e0a12391d1e7ada69ec3b0da1914f1cec39c5cf977143c5b2854f5" dependencies = [ "memchr", ] @@ -314,9 +315,9 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytemuck" -version = "1.20.0" +version = "1.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" +checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" [[package]] name = "byteorder" @@ -326,9 +327,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "bzip2" @@ -362,13 +363,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.4" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" +checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" dependencies = [ "jobserver", "libc", - "shlex", + "once_cell", ] [[package]] @@ -394,9 +395,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", @@ -428,15 +429,15 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" [[package]] name = "core-foundation-sys" -version = "0.8.7" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "counter" @@ -458,9 +459,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -477,9 +478,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "csv" @@ -504,13 +505,13 @@ dependencies = [ [[package]] name = "derive_arbitrary" -version = "1.4.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -527,7 +528,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -538,9 +539,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "either" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "enum_dispatch" @@ -551,14 +552,14 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] name = "env_filter" -version = "0.1.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" dependencies = [ "log", "regex", @@ -585,19 +586,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] name = "fastrand" -version = "2.3.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fixedbitset" @@ -607,9 +608,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.35" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" dependencies = [ "crc32fast", "miniz_oxide", @@ -652,7 +653,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -681,12 +682,6 @@ dependencies = [ "rayon", ] -[[package]] -name = "hashbrown" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" - [[package]] name = "heck" version = "0.4.1" @@ -705,7 +700,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58cf6b99a250776d813cdf2f0b478a053a822d078e7a2baf5cb36afc88c41a7c" dependencies = [ - "thiserror 1.0.69", + "thiserror 1.0.61", ] [[package]] @@ -716,9 +711,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -739,12 +734,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown 0.14.5", "rayon", ] @@ -765,9 +760,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.1" +version = "1.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" [[package]] name = "itertools" @@ -798,34 +793,33 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ - "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.5.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "lazycell" @@ -835,15 +829,15 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.168" +version = "0.2.162" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" +checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", "windows-targets", @@ -851,9 +845,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.11" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "librocksdb-sys" @@ -873,9 +867,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.20" +version = "1.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e" dependencies = [ "cc", "pkg-config", @@ -896,9 +890,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lz4-sys" -version = "1.11.1+lz4-1.10.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bd8c0d6c6ed0cd30b3652886bb8711dc4bb01d637a68105a3d5158039b418e6" +checksum = "e9764018d143cc854c9f17f0b907de70f14393b1f502da6375dce70f00514eb3" dependencies = [ "cc", "libc", @@ -917,9 +911,9 @@ dependencies = [ [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" dependencies = [ "autocfg", "rawpointer", @@ -963,11 +957,11 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ - "adler2", + "adler", ] [[package]] @@ -1042,7 +1036,7 @@ dependencies = [ "bzip2", "cfg-if", "flate2", - "thiserror 1.0.69", + "thiserror 1.0.61", "xz2", "zstd", ] @@ -1131,9 +1125,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "ouroboros" @@ -1157,7 +1151,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -1189,29 +1183,26 @@ dependencies = [ "flate2", "log", "memchr", - "thiserror 1.0.69", + "thiserror 1.0.61", ] [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" -dependencies = [ - "zerocopy", -] +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "predicates" @@ -1229,15 +1220,15 @@ dependencies = [ [[package]] name = "predicates-core" -version = "1.0.8" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8177bee8e75d6846599c6b9ff679ed51e882816914eec639944d7c9aa11931" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.11" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41b740d195ed3166cd147c8047ec98db0e22ec019eb8eeb76d343b795304fb13" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -1254,9 +1245,9 @@ dependencies = [ [[package]] name = "priority-queue" -version = "2.1.1" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714c75db297bc88a63783ffc6ab9f830698a6705aa0201416931759ef4c8183d" +checksum = "70c501afe3a2e25c9bd219aa56ec1e04cdb3fcdd763055be268778c13fa82c1f" dependencies = [ "autocfg", "equivalent", @@ -1272,6 +1263,29 @@ dependencies = [ "toml_edit", ] +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -1291,14 +1305,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" dependencies = [ "unicode-ident", ] @@ -1311,7 +1325,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", "version_check", "yansi", ] @@ -1384,7 +1398,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -1397,14 +1411,14 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -1503,9 +1517,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.1" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", @@ -1515,9 +1529,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -1526,9 +1540,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "rend" @@ -1628,15 +1642,15 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.38.42" +version = "0.38.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" +checksum = "99e4ea3e1cdc4b559b8e5650f9c8e5998e3e5c1343b4eaf034565f32318d63c0" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1697,7 +1711,7 @@ checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -1794,7 +1808,7 @@ dependencies = [ "serde_json", "statrs", "streaming-stats", - "thiserror 2.0.7", + "thiserror 2.0.3", "twox-hash", "typed-builder", "vec-collections", @@ -1872,15 +1886,27 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.90" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "tap" version = "1.0.1" @@ -1889,9 +1915,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.16" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" [[package]] name = "tempfile" @@ -1903,7 +1929,7 @@ dependencies = [ "fastrand", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -1914,42 +1940,42 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.69" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ - "thiserror-impl 1.0.69", + "thiserror-impl 1.0.61", ] [[package]] name = "thiserror" -version = "2.0.7" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93605438cbd668185516ab499d589afb7ee1859ea3d5fc8f6b0755e1c7443767" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" dependencies = [ - "thiserror-impl 2.0.7", + "thiserror-impl 2.0.3", ] [[package]] name = "thiserror-impl" -version = "1.0.69" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] name = "thiserror-impl" -version = "2.0.7" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d8749b4531af2117677a5fcd12b1348a3fe2b81e36e61ffeac5c4aa3273e36" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -2012,7 +2038,7 @@ checksum = "1f718dfaf347dcb5b983bfc87608144b0bad87970aebcbea5ce44d2a30c08e63" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -2023,9 +2049,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.14" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unindent" @@ -2041,9 +2067,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.11.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" [[package]] name = "vcpkg" @@ -2068,9 +2094,9 @@ dependencies = [ [[package]] name = "version_check" -version = "0.9.5" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wait-timeout" @@ -2089,9 +2115,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -2100,23 +2126,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", + "once_cell", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2124,28 +2151,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -2153,9 +2180,9 @@ dependencies = [ [[package]] name = "wide" -version = "0.7.30" +version = "0.7.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" +checksum = "8a040b111774ab63a19ef46bbc149398ab372b4ccdcfd719e9814dbd7dfd76c8" dependencies = [ "bytemuck", "safe_arch", @@ -2170,6 +2197,15 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.59.0" @@ -2278,23 +2314,22 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ - "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.87", ] [[package]] @@ -2308,7 +2343,7 @@ dependencies = [ "crossbeam-utils", "displaydoc", "indexmap", - "thiserror 1.0.69", + "thiserror 1.0.61", ] [[package]] @@ -2332,9 +2367,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" +version = "2.0.11+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" dependencies = [ "cc", "pkg-config", diff --git a/environment.yml b/environment.yml index eb9f21a1..ca8743ce 100644 --- a/environment.yml +++ b/environment.yml @@ -6,7 +6,7 @@ channels: dependencies: - sourmash>=4.8.3,<5 - pip - - rust + - rust==1.75 - maturin>=1,<2 - pytest - pandas From 9d74febafcdfb2eb6c60d205eb3f0c3d5c95ca15 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Mon, 16 Dec 2024 15:04:30 -0800 Subject: [PATCH 11/14] try not pinning --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index ca8743ce..eb9f21a1 100644 --- a/environment.yml +++ b/environment.yml @@ -6,7 +6,7 @@ channels: dependencies: - sourmash>=4.8.3,<5 - pip - - rust==1.75 + - rust - maturin>=1,<2 - pytest - pandas From 7b934ee88d29f26280653e8863216746a21e1947 Mon Sep 17 00:00:00 2001 From: "C. Titus Brown" Date: Mon, 16 Dec 2024 16:07:02 -0800 Subject: [PATCH 12/14] MRG: switch to `importlib.metadata` from `pkg_resources` (#546) * switch from pkg_resources to importlib.metadata * black --- src/python/tests/sourmash_tst_utils.py | 45 +++++--------------------- 1 file changed, 8 insertions(+), 37 deletions(-) diff --git a/src/python/tests/sourmash_tst_utils.py b/src/python/tests/sourmash_tst_utils.py index 86c97c57..0bb30b14 100644 --- a/src/python/tests/sourmash_tst_utils.py +++ b/src/python/tests/sourmash_tst_utils.py @@ -7,8 +7,7 @@ import collections import pprint -import pkg_resources -from pkg_resources import Requirement, resource_filename, ResolutionError +import importlib.metadata import traceback from io import open # pylint: disable=redefined-builtin from io import StringIO @@ -61,46 +60,18 @@ def index_siglist( return db -def scriptpath(scriptname="sourmash"): - """Return the path to the scripts, in both dev and install situations.""" - # note - it doesn't matter what the scriptname is here, as long as - # it's some script present in this version of sourmash. - - path = os.path.join(os.path.dirname(__file__), "../") - if os.path.exists(os.path.join(path, scriptname)): - return path - - path = os.path.join(os.path.dirname(__file__), "../../EGG-INFO/") - if os.path.exists(os.path.join(path, scriptname)): - return path - - for path in os.environ["PATH"].split(":"): - if os.path.exists(os.path.join(path, scriptname)): - return path - - def _runscript(scriptname): """Find & run a script with exec (i.e. not via os.system or subprocess).""" namespace = {"__name__": "__main__"} namespace["sys"] = globals()["sys"] - try: - pkg_resources.load_entry_point("sourmash", "console_scripts", scriptname)() - return 0 - except pkg_resources.ResolutionError: - pass - - path = scriptpath() - - scriptfile = os.path.join(path, scriptname) - if os.path.isfile(scriptfile): - if os.path.isfile(scriptfile): - exec( # pylint: disable=exec-used - compile(open(scriptfile).read(), scriptfile, "exec"), namespace - ) - return 0 - - return -1 + entry_points = importlib.metadata.entry_points( + group="console_scripts", name="sourmash" + ) + assert len(entry_points) == 1 + smash_cli = tuple(entry_points)[0].load() + smash_cli() + return 0 ScriptResults = collections.namedtuple("ScriptResults", ["status", "out", "err"]) From c38819ff43b9912aa4abbbc7615521e3772d5550 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Tue, 17 Dec 2024 14:33:01 -0800 Subject: [PATCH 13/14] need parens for proper selection --- src/utils/buildutils.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/buildutils.rs b/src/utils/buildutils.rs index b58ceaf4..f3a87da0 100644 --- a/src/utils/buildutils.rs +++ b/src/utils/buildutils.rs @@ -783,9 +783,9 @@ impl BuildCollection { rec.sequence_added = true; } } else if (input_moltype == "DNA" || input_moltype == "dna") - && rec.moltype() == HashFunctions::Murmur64Dna + && (rec.moltype() == HashFunctions::Murmur64Dna || rec.moltype() == HashFunctions::Murmur64Skipm1n3 - || rec.moltype() == HashFunctions::Murmur64Skipm2n3 + || rec.moltype() == HashFunctions::Murmur64Skipm2n3) { sig.add_sequence(&record.seq(), true) .context("Failed to add sequence")?; From f96e6511ae77a57a1c718b3f6f1678372f6101c4 Mon Sep 17 00:00:00 2001 From: "N. Tessa Pierce-Ward" Date: Tue, 17 Dec 2024 14:35:21 -0800 Subject: [PATCH 14/14] add anydna_size --- src/utils/buildutils.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/utils/buildutils.rs b/src/utils/buildutils.rs index f3a87da0..b5bb9e0c 100644 --- a/src/utils/buildutils.rs +++ b/src/utils/buildutils.rs @@ -452,6 +452,13 @@ impl BuildCollection { Ok(mf.records.len()) } + pub fn anydna_size(&self) -> Result { + let multiselection = MultiSelection::from_moltypes(vec!["DNA", "skipm1n3", "skipm2n3"])?; + let mut mf = self.manifest.clone(); + mf.select(&multiselection)?; + Ok(mf.records.len()) + } + pub fn protein_size(&self) -> Result { let multiselection = MultiSelection::from_moltypes(vec!["protein"])?; let mut mf = self.manifest.clone();