From 6f86c6b8ab211e702b58b866f6143df17c2b1f68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Wieiw=C3=B3rka?= Date: Sun, 1 Dec 2024 22:52:56 +0100 Subject: [PATCH] Build with datafusion-python ans sequila-native --- .github/workflows/publish_to_pypi.yml | 8 + .gitignore | 4 +- Cargo.lock | 4537 +++++++++++++++++++++---- Cargo.toml | 8 +- benchmark/run_bench.ipynb | 876 ++--- polars_bio/__init__.py | 11 - src/expressions.rs | 15 - src/lib.rs | 13 - tests/test_pig_latinnify.py | 18 +- 9 files changed, 4126 insertions(+), 1364 deletions(-) diff --git a/.github/workflows/publish_to_pypi.yml b/.github/workflows/publish_to_pypi.yml index 7273984..aea7720 100644 --- a/.github/workflows/publish_to_pypi.yml +++ b/.github/workflows/publish_to_pypi.yml @@ -65,11 +65,14 @@ jobs: args: --release --out dist --find-interpreter sccache: 'true' manylinux: auto + - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: dist + env: + RUSTFLAGS: "-Ctarget-cpu=native" windows: runs-on: windows-latest @@ -92,11 +95,14 @@ jobs: args: --release --out dist --find-interpreter sccache: 'true' + - name: Upload wheels uses: actions/upload-artifact@v3 with: name: wheels path: dist + env: + RUSTFLAGS: "-Ctarget-cpu=native" macos: runs-on: macos-latest @@ -121,6 +127,8 @@ jobs: with: name: wheels path: dist + env: + RUSTFLAGS: "-Clink-arg=-undefined -Clink-arg=dynamic_lookup -Ctarget-cpu=native" sdist: runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 8e40731..ed9539f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,6 @@ venv *.dll *.pyd -.idea \ No newline at end of file +.idea +sandbox/ +.DS_Store \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 6fc0d5f..cb41cb7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,27 @@ # It is not intended for manual editing. version = 4 +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + [[package]] name = "ahash" version = "0.8.11" @@ -9,6 +30,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "const-random", "getrandom", "once_cell", "version_check", @@ -25,1203 +47,4085 @@ dependencies = [ ] [[package]] -name = "allocator-api2" -version = "0.2.20" +name = "alloc-no-stdlib" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] -name = "argminmax" -version = "0.6.2" +name = "alloc-stdlib" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52424b59d69d69d5056d508b260553afd91c57e21849579cd1f50ee8b8b88eaa" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ - "num-traits", + "alloc-no-stdlib", ] [[package]] -name = "array-init-cursor" -version = "0.2.0" +name = "allocator-api2" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7d0a018de4f6aa429b9d33d69edf69072b1c5b1cb8d3e4a5f7ef898fc3eb76" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] -name = "atoi_simd" -version = "0.15.6" +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae037714f313c1353189ead58ef9eec30a8e8dc101b2622d461418fd59e28a9" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] -name = "autocfg" -version = "1.4.0" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] [[package]] -name = "base64" -version = "0.22.1" +name = "anyhow" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] -name = "bitflags" -version = "2.6.0" +name = "apache-avro" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "ceb7c683b2f8f40970b70e39ff8be514c95b96fcb9c4af87e1ed2cb2e10801a0" +dependencies = [ + "bzip2", + "crc32fast", + "digest", + "lazy_static", + "libflate", + "log", + "num-bigint", + "quad-rand", + "rand", + "regex-lite", + "serde", + "serde_json", + "snap", + "strum 0.25.0", + "strum_macros 0.25.3", + "thiserror 1.0.69", + "typed-builder", + "uuid", + "xz2", + "zstd 0.12.4", +] [[package]] -name = "bumpalo" -version = "3.16.0" +name = "approx" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] [[package]] -name = "bytemuck" -version = "1.20.0" +name = "arrayref" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "arrow" +version = "53.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91839b07e474b3995035fd8ac33ee54f9c9ccbbb1ea33d9909c71bffdf1259d" dependencies = [ - "bytemuck_derive", + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-csv", + "arrow-data", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", + "pyo3", ] [[package]] -name = "bytemuck_derive" -version = "1.8.0" +name = "arrow-arith" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" +checksum = "855c57c4efd26722b044dcd3e348252560e3e0333087fb9f6479dc0bf744054f" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "num", ] [[package]] -name = "byteorder" -version = "1.5.0" +name = "arrow-array" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +checksum = "bd03279cea46569acf9295f6224fbc370c5df184b4d2ecfe97ccb131d5615a7f" +dependencies = [ + "ahash", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "chrono-tz", + "half", + "hashbrown 0.15.2", + "num", +] [[package]] -name = "bytes" -version = "1.8.0" +name = "arrow-buffer" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "9e4a9b9b1d6d7117f6138e13bc4dd5daa7f94e671b70e8c9c4dc37b4f5ecfc16" +dependencies = [ + "bytes", + "half", + "num", +] [[package]] -name = "castaway" -version = "0.2.3" +name = "arrow-cast" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" +checksum = "bc70e39916e60c5b7af7a8e2719e3ae589326039e1e863675a008bee5ffe90fd" dependencies = [ - "rustversion", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "atoi", + "base64", + "chrono", + "comfy-table", + "half", + "lexical-core", + "num", + "ryu", ] [[package]] -name = "cc" -version = "1.2.1" +name = "arrow-csv" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +checksum = "789b2af43c1049b03a8d088ff6b2257cdcea1756cd76b174b1f2600356771b97" dependencies = [ - "shlex", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", ] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "arrow-data" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "e4e75edf21ffd53744a9b8e3ed11101f610e7ceb1a29860432824f1834a1f623" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num", +] [[package]] -name = "chrono" -version = "0.4.38" +name = "arrow-ipc" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "d186a909dece9160bf8312f5124d797884f608ef5435a36d9d608e0b2a9bcbf8" dependencies = [ - "num-traits", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", + "lz4_flex", ] [[package]] -name = "compact_str" -version = "0.8.0" +name = "arrow-json" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6050c3a16ddab2e412160b31f2c871015704239bca62f72f6e5f0be631d3f644" +checksum = "b66ff2fedc1222942d0bd2fd391cb14a85baa3857be95c9373179bd616753b85" dependencies = [ - "castaway", - "cfg-if", - "itoa", - "rustversion", - "ryu", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "indexmap", + "lexical-core", + "num", "serde", - "static_assertions", + "serde_json", ] [[package]] -name = "crossbeam-deque" -version = "0.8.5" +name = "arrow-ord" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "ece7b5bc1180e6d82d1a60e1688c199829e8842e38497563c3ab6ea813e527fd" dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half", + "num", ] [[package]] -name = "crossbeam-epoch" -version = "0.9.18" +name = "arrow-row" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +checksum = "745c114c8f0e8ce211c83389270de6fbe96a9088a7b32c2a041258a443fe83ff" dependencies = [ - "crossbeam-utils", + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", ] [[package]] -name = "crossbeam-utils" -version = "0.8.20" +name = "arrow-schema" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "b95513080e728e4cec37f1ff5af4f12c9688d47795d17cda80b6ec2cf74d4678" +dependencies = [ + "bitflags 2.6.0", +] [[package]] -name = "dyn-clone" -version = "1.0.17" +name = "arrow-select" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "8e415279094ea70323c032c6e739c48ad8d80e78a09bef7117b8718ad5bf3722" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] [[package]] -name = "either" -version = "1.13.0" +name = "arrow-string" +version = "53.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "11d956cae7002eb8d83a27dbd34daaea1cf5b75852f0b84deb4d93a276e92bbf" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num", + "regex", + "regex-syntax", +] [[package]] -name = "equivalent" -version = "1.0.1" +name = "async-compression" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +dependencies = [ + "bzip2", + "flate2", + "futures-core", + "futures-io", + "memchr", + "pin-project-lite", + "tokio", + "xz2", + "zstd 0.13.2", + "zstd-safe 7.2.1", +] [[package]] -name = "ethnum" -version = "1.5.0" +name = "async-trait" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" +name = "atoi" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] [[package]] -name = "fast-float" -version = "0.2.0" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95765f67b4b18863968b4a1bd5bb576f732b29a4a28c7cd84c09fa3e2875f33c" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "foldhash" -version = "0.1.3" +name = "autocfg" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] -name = "getrandom" -version = "0.2.15" +name = "backtrace" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ + "addr2line", "cfg-if", - "js-sys", "libc", - "wasi", - "wasm-bindgen", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", ] [[package]] -name = "glob" -version = "0.3.1" +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "hashbrown" -version = "0.14.5" +name = "bio" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "d563b9298d39b3bdb5c45f6e91e0bdcb18d67e6d8fa034a733b7283f2db5ed29" dependencies = [ - "ahash", - "allocator-api2", - "rayon", + "anyhow", + "approx", + "bio-types", + "bit-set", + "bv", + "bytecount", + "csv", + "custom_derive", + "editdistancek", + "enum-map", + "fxhash", + "itertools", + "itertools-num", + "lazy_static", + "multimap", + "ndarray", + "newtype_derive", + "num-integer", + "num-traits", + "ordered-float 4.5.0", + "petgraph", + "rand", + "regex", "serde", + "serde_derive", + "statrs", + "strum 0.26.3", + "strum_macros 0.26.4", + "thiserror 1.0.69", + "triple_accel", + "vec_map", ] [[package]] -name = "hashbrown" -version = "0.15.2" +name = "bio-types" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "f4dcf54f8b7f51450207d54780bab09c05f30b8b0caa991545082842e466ad7e" dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", - "rayon", - "serde", + "derive-new", + "lazy_static", + "regex", + "strum_macros 0.26.4", + "thiserror 1.0.69", ] [[package]] -name = "heck" -version = "0.4.1" +name = "bit-set" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] [[package]] -name = "heck" -version = "0.5.0" +name = "bit-vec" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" [[package]] -name = "home" -version = "0.5.9" +name = "bitflags" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "indexmap" +name = "bitflags" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" -dependencies = [ - "equivalent", - "hashbrown 0.15.2", - "serde", -] +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] -name = "indoc" -version = "2.0.5" +name = "blake2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] [[package]] -name = "iter-read" -version = "1.1.0" +name = "blake3" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071ed4cc1afd86650602c7b11aa2e1ce30762a1c27193201cb5cee9c6ebb1294" +checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] [[package]] -name = "itoa" -version = "1.0.14" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] [[package]] -name = "js-sys" -version = "0.3.72" +name = "brotli" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" dependencies = [ - "wasm-bindgen", + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", ] [[package]] -name = "libc" -version = "0.2.165" +name = "brotli-decompressor" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb4d3d38eab6c5239a362fa8bae48c03baf980a6e7079f063942d563ef3533e" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] [[package]] -name = "libm" -version = "0.2.11" +name = "bumpalo" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] -name = "lock_api" -version = "0.4.12" +name = "bv" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" dependencies = [ - "autocfg", - "scopeguard", + "feature-probe", + "serde", ] [[package]] -name = "log" -version = "0.4.22" +name = "bytecount" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] -name = "memchr" -version = "2.7.4" +name = "bytemuck" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" [[package]] -name = "memmap2" -version = "0.7.1" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6" -dependencies = [ - "libc", -] +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "memoffset" -version = "0.9.1" +name = "bytes" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] -name = "multiversion" -version = "0.7.4" +name = "bzip2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4851161a11d3ad0bf9402d90ffc3967bf231768bfd7aeb61755ad06dbf1a142" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ - "multiversion-macros", - "target-features", + "bzip2-sys", + "libc", ] [[package]] -name = "multiversion-macros" -version = "0.7.4" +name = "bzip2-sys" +version = "0.1.11+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79a74ddee9e0c27d2578323c13905793e91622148f138ba29738f9dddb835e90" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "target-features", + "cc", + "libc", + "pkg-config", ] [[package]] -name = "num-bigint" -version = "0.4.6" +name = "cc" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" dependencies = [ - "num-integer", - "num-traits", + "jobserver", + "libc", + "shlex", ] [[package]] -name = "num-integer" -version = "0.1.46" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ + "android-tzdata", + "iana-time-zone", "num-traits", + "serde", + "windows-targets", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "chrono-tz" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "cd6dd8046d00723a59a2f8c5f295c515b9bb9a331ee4f8f3d4dd49e428acd3b6" dependencies = [ - "autocfg", - "libm", + "chrono", + "chrono-tz-build", + "phf", ] [[package]] -name = "once_cell" -version = "1.20.2" +name = "chrono-tz-build" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "e94fea34d77a245229e7746bd2beb786cd2a896f306ff491fb8cecb3074b10a7" +dependencies = [ + "parse-zoneinfo", + "phf_codegen", +] [[package]] -name = "parking_lot" -version = "0.12.3" +name = "coitrees" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "240f9610db0e586042f50260506972820ef10d5eb9a0e867a00f8cfe0a238be3" + +[[package]] +name = "comfy-table" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f165e7b643266ea80cb858aed492ad9280e3e05ce24d4a99d7d7b889b6a4d9" dependencies = [ - "lock_api", - "parking_lot_core", + "strum 0.26.3", + "strum_macros 0.26.4", + "unicode-width", ] [[package]] -name = "parking_lot_core" -version = "0.9.10" +name = "const-random" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets", + "const-random-macro", ] [[package]] -name = "percent-encoding" -version = "2.3.1" +name = "const-random-macro" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] [[package]] -name = "planus" +name = "constant_time_eq" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc1691dd09e82f428ce8d6310bd6d5da2557c82ff17694d2a32cad7242aea89f" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" dependencies = [ - "array-init-cursor", + "core-foundation-sys", + "libc", ] [[package]] -name = "polars" -version = "0.44.2" +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f65c6aa86d991a64c95416a61202f7952da2f8cccefa448f9a23c1b8f2301ecc" +checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" dependencies = [ - "getrandom", - "polars-arrow", - "polars-core", - "polars-error", - "polars-parquet", - "polars-utils", - "version_check", + "memchr", ] [[package]] -name = "polars-arrow" -version = "0.44.2" +name = "cpufeatures" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dbb24d29ddea5abb73d7954df8b8d3d4bb7f02a3e5c96d1519cdad9e816a3d" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "csv" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "custom_derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" + +[[package]] +name = "dary_heap" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728" + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "datafusion" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae5f2abc725737d6e87b6d348a5aa2d0a77e4cf873045f004546da946e6e619" dependencies = [ "ahash", - "atoi_simd", - "bytemuck", + "apache-avro", + "arrow", + "arrow-array", + "arrow-ipc", + "arrow-schema", + "async-compression", + "async-trait", + "bytes", + "bzip2", "chrono", - "dyn-clone", - "either", - "ethnum", - "fast-float", - "getrandom", - "hashbrown 0.15.2", - "itoa", - "multiversion", + "dashmap", + "datafusion-catalog 42.2.0", + "datafusion-common 42.2.0", + "datafusion-common-runtime 42.2.0", + "datafusion-execution 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-functions 42.2.0", + "datafusion-functions-aggregate 42.2.0", + "datafusion-functions-nested", + "datafusion-functions-window 42.2.0", + "datafusion-optimizer 42.2.0", + "datafusion-physical-expr 42.2.0", + "datafusion-physical-expr-common 42.2.0", + "datafusion-physical-optimizer 42.2.0", + "datafusion-physical-plan 42.2.0", + "datafusion-sql 42.2.0", + "flate2", + "futures", + "glob", + "half", + "hashbrown 0.14.5", + "indexmap", + "itertools", + "log", "num-traits", + "num_cpus", + "object_store", "parking_lot", - "polars-arrow-format", - "polars-error", - "polars-schema", - "polars-utils", - "ryu", - "simdutf8", - "streaming-iterator", - "strength_reduce", - "strum_macros", - "version_check", + "parquet", + "paste", + "pin-project-lite", + "rand", + "sqlparser 0.50.0", + "tempfile", + "tokio", + "tokio-util", + "url", + "uuid", + "xz2", + "zstd 0.13.2", ] [[package]] -name = "polars-arrow-format" -version = "0.1.0" +name = "datafusion" +version = "43.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b0ef2474af9396b19025b189d96e992311e6a47f90c53cd998b36c4c64b84c" +checksum = "cbba0799cf6913b456ed07a94f0f3b6e12c62a5d88b10809e2284a0f2b915c05" dependencies = [ - "planus", - "serde", + "ahash", + "arrow", + "arrow-array", + "arrow-ipc", + "arrow-schema", + "async-trait", + "bytes", + "chrono", + "dashmap", + "datafusion-catalog 43.0.0", + "datafusion-common 43.0.0", + "datafusion-common-runtime 43.0.0", + "datafusion-execution 43.0.0", + "datafusion-expr 43.0.0", + "datafusion-functions 43.0.0", + "datafusion-functions-aggregate 43.0.0", + "datafusion-functions-window 43.0.0", + "datafusion-optimizer 43.0.0", + "datafusion-physical-expr 43.0.0", + "datafusion-physical-expr-common 43.0.0", + "datafusion-physical-optimizer 43.0.0", + "datafusion-physical-plan 43.0.0", + "datafusion-sql 43.0.0", + "futures", + "glob", + "half", + "hashbrown 0.14.5", + "indexmap", + "itertools", + "log", + "num_cpus", + "object_store", + "parking_lot", + "paste", + "pin-project-lite", + "rand", + "sqlparser 0.51.0", + "tempfile", + "tokio", + "url", + "uuid", ] [[package]] -name = "polars-bio" -version = "0.1.0" +name = "datafusion-catalog" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "998761705551f11ffa4ee692cc285b44eb1def6e0d28c4eaf5041b9e2810dc1e" dependencies = [ - "polars", - "pyo3", - "pyo3-polars", - "serde", + "arrow-schema", + "async-trait", + "datafusion-common 42.2.0", + "datafusion-execution 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-physical-plan 42.2.0", + "parking_lot", ] [[package]] -name = "polars-compute" -version = "0.44.2" +name = "datafusion-catalog" +version = "43.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb1071147452a4c4b25560f23d2fbaffef255b04757291131b22fc2c0d35b2" +checksum = "7493c5c2d40eec435b13d92e5703554f4efc7059451fcb8d3a79580ff0e45560" dependencies = [ - "bytemuck", - "either", - "num-traits", - "polars-arrow", - "polars-error", - "polars-utils", - "strength_reduce", - "version_check", + "arrow-schema", + "async-trait", + "datafusion-common 43.0.0", + "datafusion-execution 43.0.0", + "datafusion-expr 43.0.0", + "datafusion-physical-plan 43.0.0", + "parking_lot", ] [[package]] -name = "polars-core" -version = "0.44.2" +name = "datafusion-common" +version = "42.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd5df9b55e614088a3270b06f8649dce76537c268d6b1ca4d9c37008b2be5949" +checksum = "11986f191e88d950f10a5cc512a598afba27d92e04a0201215ad60785005115a" dependencies = [ "ahash", - "bitflags", - "bytemuck", - "either", + "apache-avro", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.14.5", + "instant", + "libc", + "num_cpus", + "object_store", + "parquet", + "paste", + "pyo3", + "sqlparser 0.50.0", + "tokio", +] + +[[package]] +name = "datafusion-common" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24953049ebbd6f8964f91f60aa3514e121b5e81e068e33b60e77815ab369b25c" +dependencies = [ + "ahash", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-schema", + "chrono", + "half", "hashbrown 0.14.5", - "hashbrown 0.15.2", "indexmap", - "num-traits", - "once_cell", - "polars-arrow", - "polars-compute", - "polars-error", - "polars-row", - "polars-schema", - "polars-utils", + "instant", + "libc", + "num_cpus", + "object_store", + "paste", + "sqlparser 0.51.0", + "tokio", +] + +[[package]] +name = "datafusion-common-runtime" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "694c9d7ea1b82f95768215c4cb5c2d5c613690624e832a7ee64be563139d582f" +dependencies = [ + "log", + "tokio", +] + +[[package]] +name = "datafusion-common-runtime" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f06df4ef76872e11c924d3c814fd2a8dd09905ed2e2195f71c857d78abd19685" +dependencies = [ + "log", + "tokio", +] + +[[package]] +name = "datafusion-execution" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b4cedcd98151e0a297f34021b6b232ff0ebc0f2f18ea5e7446b5ebda99b1a1" +dependencies = [ + "arrow", + "chrono", + "dashmap", + "datafusion-common 42.2.0", + "datafusion-expr 42.2.0", + "futures", + "hashbrown 0.14.5", + "log", + "object_store", + "parking_lot", "rand", - "rand_distr", - "rayon", - "strum_macros", - "thiserror", - "version_check", - "xxhash-rust", + "tempfile", + "url", +] + +[[package]] +name = "datafusion-execution" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bbdcb628d690f3ce5fea7de81642b514486d58ff9779a51f180a69a4eadb361" +dependencies = [ + "arrow", + "chrono", + "dashmap", + "datafusion-common 43.0.0", + "datafusion-expr 43.0.0", + "futures", + "hashbrown 0.14.5", + "log", + "object_store", + "parking_lot", + "rand", + "tempfile", + "url", +] + +[[package]] +name = "datafusion-expr" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8dd114dc0296cacaee98ad3165724529fcca9a65b2875abcd447b9cc02b2b74" +dependencies = [ + "ahash", + "arrow", + "arrow-array", + "arrow-buffer", + "chrono", + "datafusion-common 42.2.0", + "datafusion-expr-common 42.2.0", + "datafusion-functions-aggregate-common 42.2.0", + "datafusion-physical-expr-common 42.2.0", + "paste", + "serde_json", + "sqlparser 0.50.0", + "strum 0.26.3", + "strum_macros 0.26.4", +] + +[[package]] +name = "datafusion-expr" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8036495980e3131f706b7d33ab00b4492d73dc714e3cb74d11b50f9602a73246" +dependencies = [ + "ahash", + "arrow", + "arrow-array", + "arrow-buffer", + "chrono", + "datafusion-common 43.0.0", + "datafusion-expr-common 43.0.0", + "datafusion-functions-aggregate-common 43.0.0", + "datafusion-functions-window-common", + "datafusion-physical-expr-common 43.0.0", + "indexmap", + "paste", + "serde_json", + "sqlparser 0.51.0", + "strum 0.26.3", + "strum_macros 0.26.4", +] + +[[package]] +name = "datafusion-expr-common" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d1ba2bb018218d9260bbd7de6a46a20f61b93d4911dba8aa07735625004c4fb" +dependencies = [ + "arrow", + "datafusion-common 42.2.0", + "paste", +] + +[[package]] +name = "datafusion-expr-common" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da0f3cb4669f9523b403d6b5a0ec85023e0ab3bf0183afd1517475b3e64fdd2" +dependencies = [ + "arrow", + "datafusion-common 43.0.0", + "itertools", + "paste", +] + +[[package]] +name = "datafusion-functions" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "547cb780a4ac51fd8e52c0fb9188bc16cea4e35aebf6c454bda0b82a7a417304" +dependencies = [ + "arrow", + "arrow-buffer", + "base64", + "blake2", + "blake3", + "chrono", + "datafusion-common 42.2.0", + "datafusion-execution 42.2.0", + "datafusion-expr 42.2.0", + "hashbrown 0.14.5", + "hex", + "itertools", + "log", + "md-5", + "rand", + "regex", + "sha2", + "unicode-segmentation", + "uuid", +] + +[[package]] +name = "datafusion-functions" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52c4012648b34853e40a2c6bcaa8772f837831019b68aca384fb38436dba162" +dependencies = [ + "arrow", + "arrow-buffer", + "base64", + "blake2", + "blake3", + "chrono", + "datafusion-common 43.0.0", + "datafusion-execution 43.0.0", + "datafusion-expr 43.0.0", + "hashbrown 0.14.5", + "hex", + "itertools", + "log", + "md-5", + "rand", + "regex", + "sha2", + "unicode-segmentation", + "uuid", +] + +[[package]] +name = "datafusion-functions-aggregate" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e68cf5aa7ebcac08bd04bb709a9a6d4963eafd227da62b628133bc509c40f5a0" +dependencies = [ + "ahash", + "arrow", + "arrow-schema", + "datafusion-common 42.2.0", + "datafusion-execution 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-functions-aggregate-common 42.2.0", + "datafusion-physical-expr 42.2.0", + "datafusion-physical-expr-common 42.2.0", + "half", + "log", + "paste", + "sqlparser 0.50.0", +] + +[[package]] +name = "datafusion-functions-aggregate" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5b8bb624597ba28ed7446df4a9bd7c7a7bde7c578b6b527da3f47371d5f6741" +dependencies = [ + "ahash", + "arrow", + "arrow-schema", + "datafusion-common 43.0.0", + "datafusion-execution 43.0.0", + "datafusion-expr 43.0.0", + "datafusion-functions-aggregate-common 43.0.0", + "datafusion-physical-expr 43.0.0", + "datafusion-physical-expr-common 43.0.0", + "half", + "indexmap", + "log", + "paste", +] + +[[package]] +name = "datafusion-functions-aggregate-common" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2285d080dfecdfb8605b0ab2f1a41e2473208dc8e9bd6f5d1dbcfe97f517e6f" +dependencies = [ + "ahash", + "arrow", + "datafusion-common 42.2.0", + "datafusion-expr-common 42.2.0", + "datafusion-physical-expr-common 42.2.0", + "rand", +] + +[[package]] +name = "datafusion-functions-aggregate-common" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb06208fc470bc8cf1ce2d9a1159d42db591f2c7264a8c1776b53ad8f675143" +dependencies = [ + "ahash", + "arrow", + "datafusion-common 43.0.0", + "datafusion-expr-common 43.0.0", + "datafusion-physical-expr-common 43.0.0", + "rand", +] + +[[package]] +name = "datafusion-functions-nested" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b6ffbbb7cf7bf0c0e05eb6207023fef341cac83a593a5365a6fc83803c572a9" +dependencies = [ + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "datafusion-common 42.2.0", + "datafusion-execution 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-functions 42.2.0", + "datafusion-functions-aggregate 42.2.0", + "datafusion-physical-expr-common 42.2.0", + "itertools", + "log", + "paste", + "rand", +] + +[[package]] +name = "datafusion-functions-window" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e78d30ebd6e9f74d4aeddec32744f5a18b5f9584591bc586fb5259c4848bac5" +dependencies = [ + "datafusion-common 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-physical-expr-common 42.2.0", + "log", +] + +[[package]] +name = "datafusion-functions-window" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ae23356c634e54c59f7c51acb7a5b9f6240ffb2cf997049a1a24a8a88598dbe" +dependencies = [ + "datafusion-common 43.0.0", + "datafusion-expr 43.0.0", + "datafusion-functions-window-common", + "datafusion-physical-expr 43.0.0", + "datafusion-physical-expr-common 43.0.0", + "log", + "paste", +] + +[[package]] +name = "datafusion-functions-window-common" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b3d6ff7794acea026de36007077a06b18b89e4f9c3fea7f2215f9f7dd9059b" +dependencies = [ + "datafusion-common 43.0.0", + "datafusion-physical-expr-common 43.0.0", +] + +[[package]] +name = "datafusion-optimizer" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be172c44bf344df707e0c041fa3f41e6dc5fb0976f539c68bc442bca150ee58c" +dependencies = [ + "arrow", + "async-trait", + "chrono", + "datafusion-common 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-physical-expr 42.2.0", + "hashbrown 0.14.5", + "indexmap", + "itertools", + "log", + "paste", + "regex-syntax", +] + +[[package]] +name = "datafusion-optimizer" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec6241eb80c595fa0e1a8a6b69686b5cf3bd5fdacb8319582a0943b0bd788aa" +dependencies = [ + "arrow", + "async-trait", + "chrono", + "datafusion-common 43.0.0", + "datafusion-expr 43.0.0", + "datafusion-physical-expr 43.0.0", + "hashbrown 0.14.5", + "indexmap", + "itertools", + "log", + "paste", + "regex-syntax", +] + +[[package]] +name = "datafusion-physical-expr" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b86b7fa0b8161c49b0f005b0df193fc6d9b65ceec675f155422cda5d1583ca" +dependencies = [ + "ahash", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "arrow-string", + "base64", + "chrono", + "datafusion-common 42.2.0", + "datafusion-execution 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-expr-common 42.2.0", + "datafusion-functions-aggregate-common 42.2.0", + "datafusion-physical-expr-common 42.2.0", + "half", + "hashbrown 0.14.5", + "hex", + "indexmap", + "itertools", + "log", + "paste", + "petgraph", + "regex", +] + +[[package]] +name = "datafusion-physical-expr" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3370357b8fc75ec38577700644e5d1b0bc78f38babab99c0b8bd26bafb3e4335" +dependencies = [ + "ahash", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "arrow-string", + "chrono", + "datafusion-common 43.0.0", + "datafusion-expr 43.0.0", + "datafusion-expr-common 43.0.0", + "datafusion-functions-aggregate-common 43.0.0", + "datafusion-physical-expr-common 43.0.0", + "half", + "hashbrown 0.14.5", + "indexmap", + "itertools", + "log", + "paste", + "petgraph", +] + +[[package]] +name = "datafusion-physical-expr-common" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "242ba8a26351d9ca16295814c46743b0d1b00ec372174bdfbba991d0953dd596" +dependencies = [ + "ahash", + "arrow", + "datafusion-common 42.2.0", + "datafusion-expr-common 42.2.0", + "hashbrown 0.14.5", + "rand", +] + +[[package]] +name = "datafusion-physical-expr-common" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b7734d94bf2fa6f6e570935b0ddddd8421179ce200065be97874e13d46a47b" +dependencies = [ + "ahash", + "arrow", + "datafusion-common 43.0.0", + "datafusion-expr-common 43.0.0", + "hashbrown 0.14.5", + "rand", +] + +[[package]] +name = "datafusion-physical-optimizer" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ca088eb904bf1cfc9c5e5653110c70a6eaba43164085a9d180b35b77ce3b8b" +dependencies = [ + "arrow-schema", + "datafusion-common 42.2.0", + "datafusion-execution 42.2.0", + "datafusion-physical-expr 42.2.0", + "datafusion-physical-plan 42.2.0", + "itertools", +] + +[[package]] +name = "datafusion-physical-optimizer" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eee8c479522df21d7b395640dff88c5ed05361852dce6544d7c98e9dbcebffe" +dependencies = [ + "arrow", + "arrow-schema", + "datafusion-common 43.0.0", + "datafusion-execution 43.0.0", + "datafusion-expr-common 43.0.0", + "datafusion-physical-expr 43.0.0", + "datafusion-physical-plan 43.0.0", + "itertools", +] + +[[package]] +name = "datafusion-physical-plan" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4989a53b824abc759685eb643f4d604c2fc2fea4e2c309ac3473bea263ecbbeb" +dependencies = [ + "ahash", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "async-trait", + "chrono", + "datafusion-common 42.2.0", + "datafusion-common-runtime 42.2.0", + "datafusion-execution 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-functions-aggregate 42.2.0", + "datafusion-functions-aggregate-common 42.2.0", + "datafusion-physical-expr 42.2.0", + "datafusion-physical-expr-common 42.2.0", + "futures", + "half", + "hashbrown 0.14.5", + "indexmap", + "itertools", + "log", + "once_cell", + "parking_lot", + "pin-project-lite", + "rand", + "tokio", +] + +[[package]] +name = "datafusion-physical-plan" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17e1fc2e2c239d14e8556f2622b19a726bf6bc6962cc00c71fc52626274bee24" +dependencies = [ + "ahash", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "async-trait", + "chrono", + "datafusion-common 43.0.0", + "datafusion-common-runtime 43.0.0", + "datafusion-execution 43.0.0", + "datafusion-expr 43.0.0", + "datafusion-functions-aggregate-common 43.0.0", + "datafusion-functions-window-common", + "datafusion-physical-expr 43.0.0", + "datafusion-physical-expr-common 43.0.0", + "futures", + "half", + "hashbrown 0.14.5", + "indexmap", + "itertools", + "log", + "once_cell", + "parking_lot", + "pin-project-lite", + "rand", + "tokio", +] + +[[package]] +name = "datafusion-proto" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90d63ae29e224f99e309670d35a8a03dbbc398decf4edd6c43051c653903427a" +dependencies = [ + "arrow", + "chrono", + "datafusion 42.2.0", + "datafusion-common 42.2.0", + "datafusion-expr 42.2.0", + "datafusion-proto-common", + "object_store", + "prost", +] + +[[package]] +name = "datafusion-proto-common" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee6c8f96a2ca9da3ee375ad289eb68c9f50b62e8d229ce2e9575aa421a57890" +dependencies = [ + "arrow", + "chrono", + "datafusion-common 42.2.0", + "object_store", + "prost", +] + +[[package]] +name = "datafusion-python" +version = "42.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9eb959ace9ade4b53da7105a1ea7fcbed192ecd17b2e02f4ad1cd8cd1525ba" +dependencies = [ + "arrow", + "async-trait", + "datafusion 42.2.0", + "datafusion-proto", + "futures", + "mimalloc", + "object_store", + "prost", + "prost-types", + "pyo3", + "pyo3-build-config", + "tokio", + "url", + "uuid", +] + +[[package]] +name = "datafusion-sql" +version = "42.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b9b75b9da10ed656073ac0553708f17eb8fa5a7b065ef9848914c93150ab9e" +dependencies = [ + "arrow", + "arrow-array", + "arrow-schema", + "datafusion-common 42.2.0", + "datafusion-expr 42.2.0", + "log", + "regex", + "sqlparser 0.50.0", + "strum 0.26.3", +] + +[[package]] +name = "datafusion-sql" +version = "43.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e3a4ed41dbee20a5d947a59ca035c225d67dc9cbe869c10f66dcdf25e7ce51" +dependencies = [ + "arrow", + "arrow-array", + "arrow-schema", + "datafusion-common 43.0.0", + "datafusion-expr 43.0.0", + "indexmap", + "log", + "regex", + "sqlparser 0.51.0", + "strum 0.26.3", +] + +[[package]] +name = "derive-new" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "editdistancek" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e02df23d5b1c6f9e69fa603b890378123b93073df998a21e6e33b9db0a32613" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "emojis" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e1f1df1f181f2539bac8bf027d31ca5ffbf9e559e3f2d09413b9107b5c02f4" +dependencies = [ + "phf", +] + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "fastrand" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" + +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flatbuffers" +version = "24.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f" +dependencies = [ + "bitflags 1.3.2", + "rustc_version 0.4.1", +] + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", + "num-traits", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "ipnet" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools-num" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a872a22f9e6f7521ca557660adb96dd830e54f0f490fa115bb55dd69d38b27e7" +dependencies = [ + "num-traits", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lexical-core" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0431c65b318a590c1de6b8fd6e72798c92291d27762d94c9e6c37ed7a73d8458" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb17a4bdb9b418051aa59d41d65b1c9be5affab314a872e5ad7f06231fb3b4e0" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df98f4a4ab53bf8b175b363a34c7af608fe31f93cc1fb1bf07130622ca4ef61" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85314db53332e5c192b6bca611fb10c114a80d1b831ddac0af1e9be1b9232ca0" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7c3ad4e37db81c1cbe7cf34610340adc09c322871972f74877a712abc6c809" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb89e9f6958b83258afa3deed90b5de9ef68eef090ad5086c791cd2345610162" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.167" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" + +[[package]] +name = "libflate" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45d9dfdc14ea4ef0900c1cddbc8dcd553fbaacd8a4a282cf4018ae9dd04fb21e" +dependencies = [ + "adler32", + "core2", + "crc32fast", + "dary_heap", + "libflate_lz77", +] + +[[package]] +name = "libflate_lz77" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e0d73b369f386f1c44abd9c570d5318f55ccde816ff4b562fa452e5182863d" +dependencies = [ + "core2", + "hashbrown 0.14.5", + "rle-decode-fast", +] + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libmimalloc-sys" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23aa6811d3bd4deb8a84dde645f943476d13b248d818edcf8ce0b2f37f036b44" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "lz4_flex" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" +dependencies = [ + "twox-hash", +] + +[[package]] +name = "lzma-sys" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mimalloc" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68914350ae34959d83f732418d51e2427a794055d0b9529f48259ac07af65633" +dependencies = [ + "libmimalloc-sys", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "multimap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" +dependencies = [ + "serde", +] + +[[package]] +name = "nalgebra" +version = "0.32.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "rand", + "rand_distr", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndarray" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "portable-atomic", + "portable-atomic-util", + "rawpointer", +] + +[[package]] +name = "newtype_derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac8cd24d9f185bb7223958d8c1ff7a961b74b1953fd05dba7cc568a63b3861ec" +dependencies = [ + "rustc_version 0.1.7", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "object_store" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eb4c22c6154a1e759d7099f9ffad7cc5ef8245f9efbab4a41b92623079c82f3" +dependencies = [ + "async-trait", + "base64", + "bytes", + "chrono", + "futures", + "humantime", + "hyper", + "itertools", + "md-5", + "parking_lot", + "percent-encoding", + "quick-xml", + "rand", + "reqwest", + "ring", + "rustls-pemfile", + "serde", + "serde_json", + "snafu", + "tokio", + "tracing", + "url", + "walkdir", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ordered-float" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c65ee1f9701bf938026630b455d5315f490640234259037edb259798b3bcf85e" +dependencies = [ + "num-traits", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "parquet" +version = "53.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b449890367085eb65d7d3321540abc3d7babbd179ce31df0016e90719114191" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-schema", + "arrow-select", + "base64", + "brotli", + "bytes", + "chrono", + "flate2", + "futures", + "half", + "hashbrown 0.15.2", + "lz4_flex", + "num", + "num-bigint", + "object_store", + "paste", + "seq-macro", + "snap", + "thrift", + "tokio", + "twox-hash", + "zstd 0.13.2", + "zstd-sys", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "polars-bio" +version = "0.1.0" +dependencies = [ + "datafusion-python", + "sequila-core", +] + +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" +dependencies = [ + "prost", +] + +[[package]] +name = "pyo3" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "once_cell", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "quad-rand" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a651516ddc9168ebd67b24afd085a718be02f8858fe406591b013d101ce2f40" + +[[package]] +name = "quick-xml" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.3", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.3", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a626c6807713b15cac82a6acaccd6043c9a5408c24baae07611fec3f243da" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "reqwest" +version = "0.12.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +dependencies = [ + "base64", + "bytes", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "windows-registry", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rle-decode-fast" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" + +[[package]] +name = "rustc_version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f5376ea5e30ce23c03eb77cbe4962b988deead10910c372b226388b594c084" +dependencies = [ + "semver 0.1.20", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rustix" +version = "0.38.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.23.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "safe_arch" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3460605018fdc9612bce72735cba0d27efbcd9904780d44c7e3a9948f96148a" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scailist" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26f80fcbd0b37d7a21dc505dacc82bc74a125f90467121c23472414abb50151b" + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "security-framework" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1415a607e92bec364ea2cf9264646dcce0f91e6d65281bd6f2819cca3bf39c8" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4f410fedcf71af0345d7607d246e7ad15faaadd49d240ee3b24e5dc21a820ac" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "seq-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" + +[[package]] +name = "sequila-core" +version = "0.1.0" +source = "git+ssh://git@github.com/biodatageeks/sequila-native.git?rev=5975b5435035f20e8515412d3394b7272a3c1dcc#5975b5435035f20e8515412d3394b7272a3c1dcc" +dependencies = [ + "ahash", + "async-trait", + "bio", + "coitrees", + "datafusion 43.0.0", + "emojis", + "fnv", + "futures", + "hashbrown 0.14.5", + "log", + "parking_lot", + "scailist", + "tokio", ] [[package]] -name = "polars-error" -version = "0.44.2" +name = "serde" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4643898a644f30c83737db85f942f8c8956b0c11190b39afec745218eae1746b" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ - "polars-arrow-format", - "simdutf8", - "thiserror", + "serde_derive", ] [[package]] -name = "polars-ffi" -version = "0.44.2" +name = "serde_derive" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11f38ddf675f605d8b5228c3e282b630112d7431c884120be10d606c705c4989" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ - "polars-arrow", - "polars-core", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "polars-io" -version = "0.44.2" +name = "serde_json" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2fab2c016635cb416b49461fd6419b0208c6c13a4fd065bd65e4a87dbb66314" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ - "ahash", - "atoi_simd", - "bytes", - "fast-float", - "glob", - "hashbrown 0.15.2", - "home", "itoa", "memchr", - "memmap2", - "num-traits", - "once_cell", - "percent-encoding", - "polars-arrow", - "polars-core", - "polars-error", - "polars-schema", - "polars-utils", - "rayon", - "regex", "ryu", - "simdutf8", + "serde", ] [[package]] -name = "polars-ops" -version = "0.44.2" +name = "serde_urlencoded" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035c800fbe5bbd820afeb8313713ed345853bb014e0f821a4025d40cf0d60e1a" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ - "ahash", - "argminmax", - "bytemuck", - "either", - "hashbrown 0.15.2", - "indexmap", - "memchr", - "num-traits", - "polars-arrow", - "polars-compute", - "polars-core", - "polars-error", - "polars-schema", - "polars-utils", - "rayon", - "regex", - "regex-syntax", - "strum_macros", - "version_check", + "form_urlencoded", + "itoa", + "ryu", + "serde", ] [[package]] -name = "polars-parquet" -version = "0.44.2" +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91dcf1d9f048079376949eaf2e24e240b313ff4a102fb83b57c9a5f807cdca52" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "ahash", - "base64", - "bytemuck", - "ethnum", - "hashbrown 0.15.2", - "num-traits", - "polars-arrow", - "polars-compute", - "polars-error", - "polars-parquet-format", - "polars-utils", - "simdutf8", - "streaming-decompression", + "cfg-if", + "cpufeatures", + "digest", ] [[package]] -name = "polars-parquet-format" -version = "0.1.0" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c025243dcfe8dbc57e94d9f82eb3bef10b565ab180d5b99bed87fd8aea319ce1" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "polars-plan" -version = "0.44.2" +name = "simba" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23de436f33f4d1134c58f24e7059a221b957ec20730807e0ef0c80c8e4b3d06a" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" dependencies = [ - "ahash", - "bitflags", - "bytemuck", - "bytes", - "either", - "hashbrown 0.15.2", - "memmap2", + "approx", + "num-complex", "num-traits", - "once_cell", - "percent-encoding", - "polars-arrow", - "polars-core", - "polars-io", - "polars-ops", - "polars-utils", - "rayon", - "recursive", - "strum_macros", - "version_check", + "paste", + "wide", ] [[package]] -name = "polars-row" -version = "0.44.2" +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3823d3de3e614509bba6929798f1f3d5ae05c1cdfc4eb7029d2ec6ad77201da2" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ - "bytemuck", - "polars-arrow", - "polars-error", - "polars-utils", + "autocfg", ] [[package]] -name = "polars-schema" -version = "0.44.2" +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "snafu" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d88667f770291cefa2e8cd366a54f29dc6fe362e9a263914c903db411a58ac1d" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" dependencies = [ - "indexmap", - "polars-error", - "polars-utils", - "version_check", + "snafu-derive", ] [[package]] -name = "polars-utils" -version = "0.44.2" +name = "snafu-derive" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96186b70bda00c90b5027bf2f69193c5c40571e80d3e8ec505c22cdc8e3e39aa" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" dependencies = [ - "ahash", - "bytemuck", - "bytes", - "compact_str", - "hashbrown 0.15.2", - "indexmap", - "libc", - "memmap2", - "num-traits", - "once_cell", - "polars-error", - "raw-cpuid", - "rayon", - "stacker", - "version_check", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "portable-atomic" -version = "1.10.0" +name = "snap" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] -name = "ppv-lite86" -version = "0.2.20" +name = "socket2" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ - "zerocopy", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "proc-macro2" -version = "1.0.92" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" -dependencies = [ - "unicode-ident", -] +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] -name = "psm" -version = "0.1.24" +name = "sqlparser" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +checksum = "b2e5b515a2bd5168426033e9efbfd05500114833916f1d5c268f938b4ee130ac" dependencies = [ - "cc", + "log", + "sqlparser_derive", ] [[package]] -name = "pyo3" -version = "0.21.2" +name = "sqlparser" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" +checksum = "5fe11944a61da0da3f592e19a45ebe5ab92dc14a779907ff1f08fbb797bfefc7" dependencies = [ - "cfg-if", - "indoc", - "libc", - "memoffset", - "parking_lot", - "portable-atomic", - "pyo3-build-config", - "pyo3-ffi", - "pyo3-macros", - "unindent", + "log", + "sqlparser_derive", ] [[package]] -name = "pyo3-build-config" -version = "0.21.2" +name = "sqlparser_derive" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" +checksum = "01b2e185515564f15375f593fb966b5718bc624ba77fe49fa4616ad619690554" dependencies = [ - "once_cell", - "target-lexicon", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "pyo3-ffi" -version = "0.21.2" +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "statrs" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" +checksum = "f697a07e4606a0a25c044de247e583a330dbb1731d11bc7350b81f48ad567255" dependencies = [ - "libc", - "pyo3-build-config", + "approx", + "nalgebra", + "num-traits", + "rand", ] [[package]] -name = "pyo3-macros" -version = "0.21.2" +name = "strum" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" dependencies = [ - "proc-macro2", - "pyo3-macros-backend", - "quote", - "syn 2.0.89", + "strum_macros 0.26.4", ] [[package]] -name = "pyo3-macros-backend" -version = "0.21.2" +name = "strum_macros" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" dependencies = [ "heck 0.4.1", "proc-macro2", - "pyo3-build-config", "quote", - "syn 2.0.89", + "rustversion", + "syn", ] [[package]] -name = "pyo3-polars" -version = "0.18.0" +name = "strum_macros" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d315add0412858cb21d45f0a48d68974d32f5f93f92fd9cedc95102ea011d1" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "libc", - "once_cell", - "polars", - "polars-core", - "polars-ffi", - "polars-plan", - "pyo3", - "pyo3-polars-derive", - "serde", - "serde-pickle", - "thiserror", + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn", ] [[package]] -name = "pyo3-polars-derive" -version = "0.12.0" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecaf05e8162950078d88e1ab4ffaf865723389c252a8c4f0c3f405ca1d88439f" -dependencies = [ - "polars-core", - "polars-ffi", - "polars-plan", - "proc-macro2", - "quote", - "syn 2.0.89", -] +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] -name = "quote" -version = "1.0.37" +name = "syn" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "rand" -version = "0.8.5" +name = "sync_wrapper" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ - "libc", - "rand_chacha", - "rand_core", + "futures-core", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "synstructure" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ - "ppv-lite86", - "rand_core", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "rand_core" -version = "0.6.4" +name = "target-lexicon" +version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] -name = "rand_distr" -version = "0.4.3" +name = "tempfile" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ - "num-traits", - "rand", + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] -name = "raw-cpuid" -version = "11.2.0" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "bitflags", + "thiserror-impl 1.0.69", ] [[package]] -name = "rayon" -version = "1.10.0" +name = "thiserror" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" dependencies = [ - "either", - "rayon-core", + "thiserror-impl 2.0.3", ] [[package]] -name = "rayon-core" -version = "1.12.1" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "crossbeam-deque", - "crossbeam-utils", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "recursive" -version = "0.1.1" +name = "thiserror-impl" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0786a43debb760f491b1bc0269fe5e84155353c67482b9e60d0cfb596054b43e" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" dependencies = [ - "recursive-proc-macro-impl", - "stacker", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "recursive-proc-macro-impl" -version = "0.1.1" +name = "thrift" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" dependencies = [ - "quote", - "syn 2.0.89", + "byteorder", + "integer-encoding", + "ordered-float 2.10.1", ] [[package]] -name = "redox_syscall" -version = "0.5.7" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ - "bitflags", + "crunchy", ] [[package]] -name = "regex" -version = "1.11.1" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", + "displaydoc", + "zerovec", ] [[package]] -name = "regex-automata" -version = "0.4.9" +name = "tinyvec" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", + "tinyvec_macros", ] [[package]] -name = "regex-syntax" -version = "0.8.5" +name = "tinyvec_macros" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] -name = "rustversion" -version = "1.0.18" +name = "tokio" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] [[package]] -name = "ryu" -version = "1.0.18" +name = "tokio-macros" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "scopeguard" -version = "1.2.0" +name = "tokio-rustls" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] [[package]] -name = "serde" -version = "1.0.215" +name = "tokio-util" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ - "serde_derive", + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", ] [[package]] -name = "serde-pickle" -version = "1.2.0" +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b641fdc8bcf2781ee78b30c599700d64ad4f412976143e4c5d0b9df906bb4843" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "byteorder", - "iter-read", - "num-bigint", - "num-traits", - "serde", + "pin-project-lite", + "tracing-attributes", + "tracing-core", ] [[package]] -name = "serde_derive" -version = "1.0.215" +name = "tracing-attributes" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn", ] [[package]] -name = "shlex" -version = "1.3.0" +name = "tracing-core" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", +] [[package]] -name = "simdutf8" -version = "0.1.5" +name = "triple_accel" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +checksum = "22048bc95dfb2ffd05b1ff9a756290a009224b60b2f0e7525faeee7603851e63" [[package]] -name = "smallvec" -version = "1.13.2" +name = "try-lock" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] -name = "stacker" -version = "0.1.17" +name = "twox-hash" +version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cc", "cfg-if", - "libc", - "psm", - "windows-sys 0.59.0", + "static_assertions", ] [[package]] -name = "static_assertions" -version = "1.1.0" +name = "typed-builder" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "34085c17941e36627a879208083e25d357243812c30e7d7387c3b954f30ade16" +dependencies = [ + "typed-builder-macro", +] [[package]] -name = "streaming-decompression" -version = "0.1.2" +name = "typed-builder-macro" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf6cc3b19bfb128a8ad11026086e31d3ce9ad23f8ea37354b31383a187c44cf3" +checksum = "f03ca4cb38206e2bef0700092660bb74d696f808514dae47fa1467cbfe26e96e" dependencies = [ - "fallible-streaming-iterator", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "streaming-iterator" -version = "0.1.9" +name = "typenum" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] -name = "strength_reduce" -version = "0.2.4" +name = "unicode-ident" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] -name = "strum_macros" -version = "0.26.4" +name = "unicode-segmentation" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" -dependencies = [ - "heck 0.5.0", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.89", -] +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] -name = "syn" -version = "1.0.109" +name = "unicode-width" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" [[package]] -name = "syn" -version = "2.0.89" +name = "unindent" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "form_urlencoded", + "idna", + "percent-encoding", ] [[package]] -name = "target-features" -version = "0.1.6" +name = "utf16_iter" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1bbb9f3c5c463a01705937a24fdabc5047929ac764b2d5b9cf681c1f5041ed5" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" [[package]] -name = "target-lexicon" -version = "0.12.16" +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "thiserror" -version = "1.0.69" +name = "uuid" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ - "thiserror-impl", + "getrandom", + "serde", ] [[package]] -name = "thiserror-impl" -version = "1.0.69" +name = "vec_map" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.89", + "serde", ] [[package]] -name = "unicode-ident" -version = "1.0.14" +name = "version_check" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] -name = "unindent" -version = "0.2.3" +name = "walkdir" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] [[package]] -name = "version_check" -version = "0.9.5" +name = "want" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] [[package]] name = "wasi" @@ -1231,9 +4135,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" dependencies = [ "cfg-if", "once_cell", @@ -1242,24 +4146,37 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.89", + "syn", "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dfaf8f50e5f293737ee323940c7d8b08a66a95a419223d9f41610ca08b0833d" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1267,22 +4184,113 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wide" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets", +] + +[[package]] +name = "windows-result" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets", +] [[package]] name = "windows-sys" @@ -1367,10 +4375,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "xxhash-rust" -version = "0.8.12" +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "xz2" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" +dependencies = [ + "lzma-sys", +] + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] [[package]] name = "zerocopy" @@ -1390,5 +4437,101 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.89", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zstd" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" +dependencies = [ + "zstd-safe 6.0.6", +] + +[[package]] +name = "zstd" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +dependencies = [ + "zstd-safe 7.2.1", +] + +[[package]] +name = "zstd-safe" +version = "6.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", ] diff --git a/Cargo.toml b/Cargo.toml index 32069c3..f2751d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,8 +8,8 @@ name = "polars_bio" crate-type= ["cdylib"] [dependencies] -pyo3 = { version = "0.21.2", features = ["extension-module", "abi3-py38"] } -pyo3-polars = { version = "0.18.0", features = ["derive"] } -serde = { version = "1", features = ["derive"] } -polars = { version = "0.44.2", default-features = false } +datafusion-python = { version = "42.0.0"} +sequila-core = { git = "https://github.com/biodatageeks/sequila-native.git", rev = "5975b5435035f20e8515412d3394b7272a3c1dcc" } + + diff --git a/benchmark/run_bench.ipynb b/benchmark/run_bench.ipynb index 946d075..5b50ee5 100644 --- a/benchmark/run_bench.ipynb +++ b/benchmark/run_bench.ipynb @@ -8,241 +8,16 @@ }, { "metadata": { - "collapsed": true, - "ExecuteTime": { - "end_time": "2024-12-01T16:52:27.461042Z", - "start_time": "2024-12-01T16:52:13.376657Z" - } + "collapsed": true }, "cell_type": "code", - "source": "!pip install --force-reinstall bioframe==0.7.2 pyarrow fastparquet pyranges", - "id": "initial_id", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001B[33mDEPRECATION: Loading egg at /Users/mwiewior/.pyenv/versions/miniconda3-latest/lib/python3.12/site-packages/six-1.16.0-py3.12.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001B[0m\u001B[33m\r\n", - "\u001B[0m\u001B[33mDEPRECATION: Loading egg at /Users/mwiewior/.pyenv/versions/miniconda3-latest/lib/python3.12/site-packages/bllipparser-2021.11.7-py3.12-macosx-11.1-arm64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001B[0m\u001B[33m\r\n", - "\u001B[0m\u001B[33mDEPRECATION: Loading egg at /Users/mwiewior/.pyenv/versions/miniconda3-latest/lib/python3.12/site-packages/owl2vec_star-0.2.1-py3.12.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. Discussion can be found at https://github.com/pypa/pip/issues/12330\u001B[0m\u001B[33m\r\n", - "\u001B[0mCollecting bioframe==0.7.2\r\n", - " Using cached bioframe-0.7.2-py2.py3-none-any.whl.metadata (7.3 kB)\r\n", - "Collecting pyarrow\r\n", - " Using cached pyarrow-18.1.0-cp312-cp312-macosx_12_0_arm64.whl.metadata (3.3 kB)\r\n", - "Collecting fastparquet\r\n", - " Using cached fastparquet-2024.11.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (4.2 kB)\r\n", - "Collecting pyranges\r\n", - " Using cached pyranges-0.1.2-py3-none-any.whl.metadata (3.6 kB)\r\n", - "Collecting matplotlib (from bioframe==0.7.2)\r\n", - " Using cached matplotlib-3.9.3-cp312-cp312-macosx_11_0_arm64.whl.metadata (11 kB)\r\n", - "Collecting numpy<2,>=1.10 (from bioframe==0.7.2)\r\n", - " Using cached numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl.metadata (61 kB)\r\n", - "Collecting pandas>=1.3 (from bioframe==0.7.2)\r\n", - " Using cached pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl.metadata (89 kB)\r\n", - "Collecting pyyaml (from bioframe==0.7.2)\r\n", - " Using cached PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl.metadata (2.1 kB)\r\n", - "Collecting requests (from bioframe==0.7.2)\r\n", - " Using cached requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)\r\n", - "Collecting cramjam>=2.3 (from fastparquet)\r\n", - " Using cached cramjam-2.9.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (4.9 kB)\r\n", - "Collecting fsspec (from fastparquet)\r\n", - " Using cached fsspec-2024.10.0-py3-none-any.whl.metadata (11 kB)\r\n", - "Collecting packaging (from fastparquet)\r\n", - " Using cached packaging-24.2-py3-none-any.whl.metadata (3.2 kB)\r\n", - "Collecting ncls>=0.0.63 (from pyranges)\r\n", - " Using cached ncls-0.0.68-cp312-cp312-macosx_11_0_arm64.whl\r\n", - "Collecting tabulate (from pyranges)\r\n", - " Using cached tabulate-0.9.0-py3-none-any.whl.metadata (34 kB)\r\n", - "Collecting sorted-nearest>=0.0.33 (from pyranges)\r\n", - " Using cached sorted_nearest-0.0.39-cp312-cp312-macosx_11_0_arm64.whl\r\n", - "Collecting natsort (from pyranges)\r\n", - " Using cached natsort-8.4.0-py3-none-any.whl.metadata (21 kB)\r\n", - "Collecting python-dateutil>=2.8.2 (from pandas>=1.3->bioframe==0.7.2)\r\n", - " Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)\r\n", - "Collecting pytz>=2020.1 (from pandas>=1.3->bioframe==0.7.2)\r\n", - " Using cached pytz-2024.2-py2.py3-none-any.whl.metadata (22 kB)\r\n", - "Collecting tzdata>=2022.7 (from pandas>=1.3->bioframe==0.7.2)\r\n", - " Using cached tzdata-2024.2-py2.py3-none-any.whl.metadata (1.4 kB)\r\n", - "Collecting contourpy>=1.0.1 (from matplotlib->bioframe==0.7.2)\r\n", - " Using cached contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl.metadata (5.4 kB)\r\n", - "Collecting cycler>=0.10 (from matplotlib->bioframe==0.7.2)\r\n", - " Using cached cycler-0.12.1-py3-none-any.whl.metadata (3.8 kB)\r\n", - "Collecting fonttools>=4.22.0 (from matplotlib->bioframe==0.7.2)\r\n", - " Using cached fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl.metadata (164 kB)\r\n", - "Collecting kiwisolver>=1.3.1 (from matplotlib->bioframe==0.7.2)\r\n", - " Using cached kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl.metadata (6.3 kB)\r\n", - "Collecting pillow>=8 (from matplotlib->bioframe==0.7.2)\r\n", - " Using cached pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (9.1 kB)\r\n", - "Collecting pyparsing>=2.3.1 (from matplotlib->bioframe==0.7.2)\r\n", - " Using cached pyparsing-3.2.0-py3-none-any.whl.metadata (5.0 kB)\r\n", - "Collecting charset-normalizer<4,>=2 (from requests->bioframe==0.7.2)\r\n", - " Using cached charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (34 kB)\r\n", - "Collecting idna<4,>=2.5 (from requests->bioframe==0.7.2)\r\n", - " Using cached idna-3.10-py3-none-any.whl.metadata (10 kB)\r\n", - "Collecting urllib3<3,>=1.21.1 (from requests->bioframe==0.7.2)\r\n", - " Using cached urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)\r\n", - "Collecting certifi>=2017.4.17 (from requests->bioframe==0.7.2)\r\n", - " Using cached certifi-2024.8.30-py3-none-any.whl.metadata (2.2 kB)\r\n", - "Collecting six>=1.5 (from python-dateutil>=2.8.2->pandas>=1.3->bioframe==0.7.2)\r\n", - " Using cached six-1.16.0-py2.py3-none-any.whl.metadata (1.8 kB)\r\n", - "Using cached bioframe-0.7.2-py2.py3-none-any.whl (151 kB)\r\n", - "Using cached pyarrow-18.1.0-cp312-cp312-macosx_12_0_arm64.whl (29.5 MB)\r\n", - "Using cached fastparquet-2024.11.0-cp312-cp312-macosx_11_0_arm64.whl (685 kB)\r\n", - "Using cached pyranges-0.1.2-py3-none-any.whl (1.5 MB)\r\n", - "Using cached cramjam-2.9.0-cp312-cp312-macosx_11_0_arm64.whl (1.9 MB)\r\n", - "Using cached numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl (13.7 MB)\r\n", - "Using cached pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl (11.4 MB)\r\n", - "Using cached fsspec-2024.10.0-py3-none-any.whl (179 kB)\r\n", - "Using cached matplotlib-3.9.3-cp312-cp312-macosx_11_0_arm64.whl (7.8 MB)\r\n", - "Using cached packaging-24.2-py3-none-any.whl (65 kB)\r\n", - "Using cached natsort-8.4.0-py3-none-any.whl (38 kB)\r\n", - "Using cached PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl (173 kB)\r\n", - "Using cached requests-2.32.3-py3-none-any.whl (64 kB)\r\n", - "Using cached tabulate-0.9.0-py3-none-any.whl (35 kB)\r\n", - "Using cached certifi-2024.8.30-py3-none-any.whl (167 kB)\r\n", - "Using cached charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl (119 kB)\r\n", - "Using cached contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl (255 kB)\r\n", - "Using cached cycler-0.12.1-py3-none-any.whl (8.3 kB)\r\n", - "Using cached fonttools-4.55.0-cp312-cp312-macosx_10_13_universal2.whl (2.8 MB)\r\n", - "Using cached idna-3.10-py3-none-any.whl (70 kB)\r\n", - "Using cached kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl (63 kB)\r\n", - "Using cached pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl (3.0 MB)\r\n", - "Using cached pyparsing-3.2.0-py3-none-any.whl (106 kB)\r\n", - "Using cached python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)\r\n", - "Using cached pytz-2024.2-py2.py3-none-any.whl (508 kB)\r\n", - "Using cached tzdata-2024.2-py2.py3-none-any.whl (346 kB)\r\n", - "Using cached urllib3-2.2.3-py3-none-any.whl (126 kB)\r\n", - "Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\r\n", - "Installing collected packages: pytz, urllib3, tzdata, tabulate, six, pyyaml, pyparsing, pyarrow, pillow, packaging, numpy, natsort, kiwisolver, idna, fsspec, fonttools, cycler, cramjam, charset-normalizer, certifi, sorted-nearest, requests, python-dateutil, ncls, contourpy, pandas, matplotlib, pyranges, fastparquet, bioframe\r\n", - " Attempting uninstall: pytz\r\n", - " Found existing installation: pytz 2024.1\r\n", - " Uninstalling pytz-2024.1:\r\n", - " Successfully uninstalled pytz-2024.1\r\n", - " Attempting uninstall: urllib3\r\n", - " Found existing installation: urllib3 2.2.2\r\n", - " Uninstalling urllib3-2.2.2:\r\n", - " Successfully uninstalled urllib3-2.2.2\r\n", - " Attempting uninstall: tzdata\r\n", - " Found existing installation: tzdata 2024.1\r\n", - " Uninstalling tzdata-2024.1:\r\n", - " Successfully uninstalled tzdata-2024.1\r\n", - " Attempting uninstall: tabulate\r\n", - " Found existing installation: tabulate 0.9.0\r\n", - " Uninstalling tabulate-0.9.0:\r\n", - " Successfully uninstalled tabulate-0.9.0\r\n", - " Attempting uninstall: six\r\n", - " Found existing installation: six 1.16.0\r\n", - " Uninstalling six-1.16.0:\r\n", - " Successfully uninstalled six-1.16.0\r\n", - " Attempting uninstall: pyyaml\r\n", - " Found existing installation: PyYAML 6.0.2\r\n", - " Uninstalling PyYAML-6.0.2:\r\n", - " Successfully uninstalled PyYAML-6.0.2\r\n", - " Attempting uninstall: pyparsing\r\n", - " Found existing installation: pyparsing 2.4.7\r\n", - " Uninstalling pyparsing-2.4.7:\r\n", - " Successfully uninstalled pyparsing-2.4.7\r\n", - " Attempting uninstall: pyarrow\r\n", - " Found existing installation: pyarrow 17.0.0\r\n", - " Uninstalling pyarrow-17.0.0:\r\n", - " Successfully uninstalled pyarrow-17.0.0\r\n", - " Attempting uninstall: pillow\r\n", - " Found existing installation: pillow 10.4.0\r\n", - " Uninstalling pillow-10.4.0:\r\n", - " Successfully uninstalled pillow-10.4.0\r\n", - " Attempting uninstall: packaging\r\n", - " Found existing installation: packaging 23.2\r\n", - " Uninstalling packaging-23.2:\r\n", - " Successfully uninstalled packaging-23.2\r\n", - " Attempting uninstall: numpy\r\n", - " Found existing installation: numpy 1.26.4\r\n", - " Uninstalling numpy-1.26.4:\r\n", - " Successfully uninstalled numpy-1.26.4\r\n", - " Attempting uninstall: natsort\r\n", - " Found existing installation: natsort 8.4.0\r\n", - " Uninstalling natsort-8.4.0:\r\n", - " Successfully uninstalled natsort-8.4.0\r\n", - " Attempting uninstall: kiwisolver\r\n", - " Found existing installation: kiwisolver 1.4.5\r\n", - " Uninstalling kiwisolver-1.4.5:\r\n", - " Successfully uninstalled kiwisolver-1.4.5\r\n", - " Attempting uninstall: idna\r\n", - " Found existing installation: idna 3.7\r\n", - " Uninstalling idna-3.7:\r\n", - " Successfully uninstalled idna-3.7\r\n", - " Attempting uninstall: fsspec\r\n", - " Found existing installation: fsspec 2024.6.1\r\n", - " Uninstalling fsspec-2024.6.1:\r\n", - " Successfully uninstalled fsspec-2024.6.1\r\n", - " Attempting uninstall: fonttools\r\n", - " Found existing installation: fonttools 4.53.1\r\n", - " Uninstalling fonttools-4.53.1:\r\n", - " Successfully uninstalled fonttools-4.53.1\r\n", - " Attempting uninstall: cycler\r\n", - " Found existing installation: cycler 0.12.1\r\n", - " Uninstalling cycler-0.12.1:\r\n", - " Successfully uninstalled cycler-0.12.1\r\n", - " Attempting uninstall: cramjam\r\n", - " Found existing installation: cramjam 2.9.0\r\n", - " Uninstalling cramjam-2.9.0:\r\n", - " Successfully uninstalled cramjam-2.9.0\r\n", - " Attempting uninstall: charset-normalizer\r\n", - " Found existing installation: charset-normalizer 2.0.4\r\n", - " Uninstalling charset-normalizer-2.0.4:\r\n", - " Successfully uninstalled charset-normalizer-2.0.4\r\n", - " Attempting uninstall: certifi\r\n", - " Found existing installation: certifi 2024.7.4\r\n", - " Uninstalling certifi-2024.7.4:\r\n", - " Successfully uninstalled certifi-2024.7.4\r\n", - " Attempting uninstall: sorted-nearest\r\n", - " Found existing installation: sorted_nearest 0.0.39\r\n", - " Uninstalling sorted_nearest-0.0.39:\r\n", - " Successfully uninstalled sorted_nearest-0.0.39\r\n", - " Attempting uninstall: requests\r\n", - " Found existing installation: requests 2.32.2\r\n", - " Uninstalling requests-2.32.2:\r\n", - " Successfully uninstalled requests-2.32.2\r\n", - " Attempting uninstall: python-dateutil\r\n", - " Found existing installation: python-dateutil 2.9.0.post0\r\n", - " Uninstalling python-dateutil-2.9.0.post0:\r\n", - " Successfully uninstalled python-dateutil-2.9.0.post0\r\n", - " Attempting uninstall: ncls\r\n", - " Found existing installation: ncls 0.0.68\r\n", - " Uninstalling ncls-0.0.68:\r\n", - " Successfully uninstalled ncls-0.0.68\r\n", - " Attempting uninstall: contourpy\r\n", - " Found existing installation: contourpy 1.3.0\r\n", - " Uninstalling contourpy-1.3.0:\r\n", - " Successfully uninstalled contourpy-1.3.0\r\n", - " Attempting uninstall: pandas\r\n", - " Found existing installation: pandas 2.2.2\r\n", - " Uninstalling pandas-2.2.2:\r\n", - " Successfully uninstalled pandas-2.2.2\r\n", - " Attempting uninstall: matplotlib\r\n", - " Found existing installation: matplotlib 3.9.2\r\n", - " Uninstalling matplotlib-3.9.2:\r\n", - " Successfully uninstalled matplotlib-3.9.2\r\n", - " Attempting uninstall: pyranges\r\n", - " Found existing installation: pyranges 0.1.2\r\n", - " Uninstalling pyranges-0.1.2:\r\n", - " Successfully uninstalled pyranges-0.1.2\r\n", - " Attempting uninstall: fastparquet\r\n", - " Found existing installation: fastparquet 2024.11.0\r\n", - " Uninstalling fastparquet-2024.11.0:\r\n", - " Successfully uninstalled fastparquet-2024.11.0\r\n", - " Attempting uninstall: bioframe\r\n", - " Found existing installation: bioframe 0.7.2\r\n", - " Uninstalling bioframe-0.7.2:\r\n", - " Successfully uninstalled bioframe-0.7.2\r\n", - "\u001B[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\r\n", - "datasets 3.0.1 requires fsspec[http]<=2024.6.1,>=2023.1.0, but you have fsspec 2024.10.0 which is incompatible.\r\n", - "owl2vec-star 0.2.1 requires pyparsing==2.4.7, but you have pyparsing 3.2.0 which is incompatible.\r\n", - "owl2vec-star 0.2.1 requires scikit-learn~=0.24.2, but you have scikit-learn 1.5.1 which is incompatible.\u001B[0m\u001B[31m\r\n", - "\u001B[0mSuccessfully installed bioframe-0.7.2 certifi-2024.8.30 charset-normalizer-3.4.0 contourpy-1.3.1 cramjam-2.9.0 cycler-0.12.1 fastparquet-2024.11.0 fonttools-4.55.0 fsspec-2024.10.0 idna-3.10 kiwisolver-1.4.7 matplotlib-3.9.3 natsort-8.4.0 ncls-0.0.68 numpy-1.26.4 packaging-24.2 pandas-2.2.3 pillow-11.0.0 pyarrow-18.1.0 pyparsing-3.2.0 pyranges-0.1.2 python-dateutil-2.9.0.post0 pytz-2024.2 pyyaml-6.0.2 requests-2.32.3 six-1.16.0 sorted-nearest-0.0.39 tabulate-0.9.0 tzdata-2024.2 urllib3-2.2.3\r\n" - ] - } + "source": [ + "from polars.dependencies import numpy\n", + "!pip install --force-reinstall bioframe==0.7.2 pyarrow fastparquet pyranges==0.1.2 pybedtools==0.10.0 git+https://gitlab.com/gtamazian/pygenomics.git" ], - "execution_count": 46 + "id": "initial_id", + "outputs": [], + "execution_count": null }, { "metadata": {}, @@ -253,8 +28,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T16:20:47.293135Z", - "start_time": "2024-12-01T16:20:47.289714Z" + "end_time": "2024-12-01T19:36:25.140258Z", + "start_time": "2024-12-01T19:36:25.136977Z" } }, "cell_type": "code", @@ -273,13 +48,13 @@ ] } ], - "execution_count": 27 + "execution_count": 1 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T15:42:25.440415Z", - "start_time": "2024-12-01T15:42:25.438809Z" + "end_time": "2024-12-01T19:36:26.035756Z", + "start_time": "2024-12-01T19:36:26.033482Z" } }, "cell_type": "code", @@ -294,8 +69,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T15:42:26.753404Z", - "start_time": "2024-12-01T15:42:26.577607Z" + "end_time": "2024-12-01T19:36:27.144648Z", + "start_time": "2024-12-01T19:36:26.752052Z" } }, "cell_type": "code", @@ -307,8 +82,8 @@ { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T15:58:49.667869Z", - "start_time": "2024-12-01T15:58:49.397528Z" + "end_time": "2024-12-01T19:36:27.511120Z", + "start_time": "2024-12-01T19:36:27.247825Z" } }, "cell_type": "code", @@ -321,15 +96,10 @@ ], "id": "3621a226d6b36e61", "outputs": [], - "execution_count": 23 + "execution_count": 4 }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T15:52:31.708904Z", - "start_time": "2024-12-01T15:52:31.149515Z" - } - }, + "metadata": {}, "cell_type": "code", "source": [ "import bioframe as bf\n", @@ -337,331 +107,85 @@ "bf.overlap(df_0, df_1,cols1=('contig','pos_start','pos_end'), cols2=('contig','pos_start','pos_end'), how=\"inner\").count()" ], "id": "90831b206d78970a", - "outputs": [ - { - "data": { - "text/plain": [ - "contig 320955\n", - "pos_start 320955\n", - "pos_end 320955\n", - "contig_ 320955\n", - "pos_start_ 320955\n", - "pos_end_ 320955\n", - "dtype: int64" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 19 + "outputs": [], + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T16:49:06.590676Z", - "start_time": "2024-12-01T16:49:06.446532Z" - } - }, + "metadata": {}, "cell_type": "code", "source": [ "%%bash\n", "$SEQUILA_CLI --file queries/0-1.sql" ], "id": "7a7e25a918672b12", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.001 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.001 seconds.\n", - "\n", - "+-----------------+\n", - "| count(Int64(1)) |\n", - "+-----------------+\n", - "| 320955 |\n", - "+-----------------+\n", - "1 row(s) fetched. \n", - "Elapsed 0.114 seconds.\n", - "\n" - ] - } - ], - "execution_count": 43 + "outputs": [], + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T15:55:51.536915Z", - "start_time": "2024-12-01T15:52:35.481548Z" - } - }, + "metadata": {}, "cell_type": "code", "source": "bf.overlap(df_0, df_3,cols1=('contig','pos_start','pos_end'), cols2=('contig','pos_start','pos_end'), how=\"inner\").count()", "id": "fcb27a787b8b7c97", - "outputs": [ - { - "data": { - "text/plain": [ - "contig 1086692495\n", - "pos_start 1086692495\n", - "pos_end 1086692495\n", - "contig_ 1086692495\n", - "pos_start_ 1086692495\n", - "pos_end_ 1086692495\n", - "dtype: int64" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 20 + "outputs": [], + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T17:13:28.628992Z", - "start_time": "2024-12-01T17:13:19.203685Z" - } - }, + "metadata": {}, "cell_type": "code", "source": [ "%%bash\n", "$SEQUILA_CLI --file queries/0-3.sql" ], "id": "186b1e6fca447dc7", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.001 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "+-----------------+\n", - "| count(Int64(1)) |\n", - "+-----------------+\n", - "| 1086692495 |\n", - "+-----------------+\n", - "1 row(s) fetched. \n", - "Elapsed 9.343 seconds.\n", - "\n" - ] - } - ], - "execution_count": 71 + "outputs": [], + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T15:57:26.436465Z", - "start_time": "2024-12-01T15:57:05.248641Z" - } - }, + "metadata": {}, "cell_type": "code", "source": "bf.overlap(df_0, df_8,cols1=('contig','pos_start','pos_end'), cols2=('contig','pos_start','pos_end'), how=\"inner\").count()", "id": "74d31db9ac48f44f", - "outputs": [ - { - "data": { - "text/plain": [ - "contig 164196784\n", - "pos_start 164196784\n", - "pos_end 164196784\n", - "contig_ 164196784\n", - "pos_start_ 164196784\n", - "pos_end_ 164196784\n", - "dtype: int64" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 22 + "outputs": [], + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T16:47:42.059401Z", - "start_time": "2024-12-01T16:47:38.684800Z" - } - }, + "metadata": {}, "cell_type": "code", "source": [ "%%bash\n", "$SEQUILA_CLI --file queries/0-8.sql" ], "id": "bd5a331edde24cb1", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 row(s) fetched. \n", - "Elapsed 0.001 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.001 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.001 seconds.\n", - "\n", - "+-----------------+\n", - "| count(Int64(1)) |\n", - "+-----------------+\n", - "| 164196784 |\n", - "+-----------------+\n", - "1 row(s) fetched. \n", - "Elapsed 3.341 seconds.\n", - "\n" - ] - } - ], - "execution_count": 40 + "outputs": [], + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T15:59:53.795182Z", - "start_time": "2024-12-01T15:59:12.692053Z" - } - }, + "metadata": {}, "cell_type": "code", "source": "bf.overlap(df_7, df_8,cols1=('contig','pos_start','pos_end'), cols2=('contig','pos_start','pos_end'), how=\"inner\").count()", "id": "d35eb67e7a3a3822", - "outputs": [ - { - "data": { - "text/plain": [ - "contig 307184634\n", - "pos_start 307184634\n", - "pos_end 307184634\n", - "contig_ 307184634\n", - "pos_start_ 307184634\n", - "pos_end_ 307184634\n", - "dtype: int64" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 24 + "outputs": [], + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T16:48:25.877832Z", - "start_time": "2024-12-01T16:48:21.120932Z" - } - }, + "metadata": {}, "cell_type": "code", "source": [ "%%bash\n", "$SEQUILA_CLI --file queries/7-8.sql" ], "id": "d480fbb838b5a255", - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 row(s) fetched. \n", - "Elapsed 0.001 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.000 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.002 seconds.\n", - "\n", - "0 row(s) fetched. \n", - "Elapsed 0.001 seconds.\n", - "\n", - "+-----------------+\n", - "| count(Int64(1)) |\n", - "+-----------------+\n", - "| 307184634 |\n", - "+-----------------+\n", - "1 row(s) fetched. \n", - "Elapsed 4.722 seconds.\n", - "\n" - ] - } - ], - "execution_count": 41 + "outputs": [], + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T16:59:31.404985Z", - "start_time": "2024-12-01T16:59:31.402508Z" - } - }, + "metadata": {}, + "cell_type": "markdown", + "source": "### pyranges", + "id": "958f97c5c7016f52" + }, + { + "metadata": {}, "cell_type": "code", "source": [ "import pyranges as pr\n", @@ -675,15 +199,10 @@ ], "id": "ab270537110baba2", "outputs": [], - "execution_count": 49 + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T17:02:11.281611Z", - "start_time": "2024-12-01T17:02:09.871708Z" - } - }, + "metadata": {}, "cell_type": "code", "source": [ "df_0_pr = df2pr(df_0)\n", @@ -694,109 +213,258 @@ ], "id": "920fc6c0e98b23d4", "outputs": [], - "execution_count": 54 + "execution_count": null }, { - "metadata": { - "ExecuteTime": { - "end_time": "2024-12-01T17:02:29.542683Z", - "start_time": "2024-12-01T17:02:29.407336Z" - } - }, + "metadata": {}, "cell_type": "code", "source": "len(df_0_pr.join(df_1_pr))", "id": "f57a68d0ca3e6894", - "outputs": [ - { - "data": { - "text/plain": [ - "320955" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 55 + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "len(df_0_pr.join(df_3_pr))", + "id": "61d44780f5eed493", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "len(df_0_pr.join(df_8_pr))", + "id": "3bad2681af94f295", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "len(df_7_pr.join(df_8_pr))", + "id": "673b2468c4418264", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "### pybedtools", + "id": "1eb620562954f9c3" }, { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T17:04:13.763919Z", - "start_time": "2024-12-01T17:02:41.109483Z" + "end_time": "2024-12-01T19:36:34.606108Z", + "start_time": "2024-12-01T19:36:34.317211Z" } }, "cell_type": "code", - "source": "len(df_0_pr.join(df_3_pr))", - "id": "61d44780f5eed493", - "outputs": [ - { - "data": { - "text/plain": [ - "1086692495" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "execution_count": 56 + "source": "import pybedtools\n", + "id": "8838e8e4ff90fc0f", + "outputs": [], + "execution_count": 5 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T17:05:23.183830Z", - "start_time": "2024-12-01T17:05:12.554010Z" + "end_time": "2024-12-01T19:36:47.130212Z", + "start_time": "2024-12-01T19:36:36.119438Z" } }, "cell_type": "code", - "source": "len(df_0_pr.join(df_8_pr))", - "id": "3bad2681af94f295", - "outputs": [ - { - "data": { - "text/plain": [ - "164196784" - ] - }, - "execution_count": 57, - "metadata": {}, - "output_type": "execute_result" - } + "source": [ + "df_0_bed = pybedtools.BedTool.from_dataframe(df_0)\n", + "df_1_bed = pybedtools.BedTool.from_dataframe(df_1)\n", + "df_3_bed = pybedtools.BedTool.from_dataframe(df_3)\n", + "df_7_bed = pybedtools.BedTool.from_dataframe(df_7)\n", + "df_8_bed = pybedtools.BedTool.from_dataframe(df_8)" ], - "execution_count": 57 + "id": "998842945f3e529a", + "outputs": [], + "execution_count": 6 + }, + { + "metadata": {}, + "cell_type": "code", + "source": "df_0_bed.intersect(df_1_bed).count()", + "id": "78ca9b3a2e476162", + "outputs": [], + "execution_count": null }, { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T17:06:05.677588Z", - "start_time": "2024-12-01T17:05:46.216382Z" + "end_time": "2024-12-01T20:11:03.821412Z", + "start_time": "2024-12-01T19:37:14.786173Z" } }, "cell_type": "code", - "source": "len(df_7_pr.join(df_8_pr))", - "id": "673b2468c4418264", + "source": "df_0_bed.intersect(df_3_bed).count()", + "id": "45f3fa54c1ac185d", "outputs": [ { "data": { "text/plain": [ - "307184634" + "1086692495" ] }, - "execution_count": 58, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 58 + "execution_count": 7 + }, + { + "metadata": {}, + "cell_type": "code", + "source": "df_0_bed.intersect(df_8_bed).count()", + "id": "e04aee9aa177d52c", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "df_7_bed.intersect(df_8_bed).count()", + "id": "af842070d00c48db", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "### pygenomics", + "id": "7808a7e53de88910" + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "from pygenomics.interval import GenomicBase, GenomicInterval\n", + "import itertools\n" + ], + "id": "3438785aa2066da2", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "df_0_pg = GenomicBase([(r.contig, r.pos_start, r.pos_end) for r in df_0.itertuples()])", + "id": "23807573c7e55fc1", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "df_1_pg = GenomicBase([(r.contig, r.pos_start, r.pos_end) for r in df_1.itertuples()])", + "id": "d7fe544b1190fbd", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "df_7_pg = GenomicBase([(r.contig, r.pos_start, r.pos_end) for r in df_7.itertuples()])", + "id": "3401359170ce0752", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "df_1_a = df_1.values.tolist()\n", + "df_3_a = df_3.values.tolist()\n", + "df_8_a = df_8.values.tolist()\n", + "\n" + ], + "id": "787ca4a4c8162110", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "df_1_a[1]", + "id": "7dc826a7e22d234c", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "len(list(itertools.chain.from_iterable([df_0_pg.find_all((r[0], r[1], r[2])) for r in df_1_a])))", + "id": "22d742fe4f7a5581", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": [ + "#slower than array\n", + "#len(list(itertools.chain.from_iterable([df_0_pg.find_all((r.contig, r.pos_start, r.pos_end)) for r in df_3.itertuples()])))\n" + ], + "id": "6b776729965815f2", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "len(list(itertools.chain.from_iterable([df_0_pg.find_all((r[0], r[1], r[2])) for r in df_3_a])))", + "id": "2c1e2dd48f2406e1", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "len(list(itertools.chain.from_iterable([df_0_pg.find_all((r[0], r[1], r[2])) for r in df_8_a])))", + "id": "5f1194dc906f8944", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "len(list(itertools.chain.from_iterable([df_7_pg.find_all((r.contig, r.pos_start, r.pos_end)) for r in df_8.itertuples()])))", + "id": "79a036041cdbc3b3", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "len(list(itertools.chain.from_iterable([df_7_pg.find_all((r[0], r[1], r[2])) for r in df_8_a ])))", + "id": "37203b78de5f8e3b", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "code", + "source": "", + "id": "9d637ac58bcbc60e", + "outputs": [], + "execution_count": null + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "", + "id": "2d7c7ab26897912" }, { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T17:28:46.978407Z", - "start_time": "2024-12-01T17:28:46.975437Z" + "end_time": "2024-12-01T20:13:07.969482Z", + "start_time": "2024-12-01T20:13:07.701477Z" } }, "cell_type": "code", @@ -827,21 +495,25 @@ ], "id": "f77062ce640cc526", "outputs": [], - "execution_count": 84 + "execution_count": 1 }, { "metadata": { "ExecuteTime": { - "end_time": "2024-12-01T17:30:56.258695Z", - "start_time": "2024-12-01T17:30:56.198545Z" + "end_time": "2024-12-01T20:13:10.068037Z", + "start_time": "2024-12-01T20:13:09.981828Z" } }, "cell_type": "code", "source": [ + "#pygenomic uses ge/lte for comparison - results differ\n", + "\n", "metrics = {\n", " \"Sequila-native\": {\"0-1\": 0.144, \"0-3\": 9.425, \"0-8\": 3.374, \"7-8\": 4.756},\n", " \"Bioframe\": {\"0-1\": 0.559, \"0-3\": 196.0, \"0-8\": 21.128, \"7-8\": 41.103},\n", " \"PyRanges\": {\"0-1\": 0.135, \"0-3\": 92.0, \"0-8\": 10.629, \"7-8\": 19.461},\n", + " \"PyBedTools\": {\"0-1\": 1.512, \"0-3\": 2029.0, \"0-8\": 350.0, \"7-8\": 611.0},\n", + " \"PyGenomics\": {\"0-1\": 1.579, \"0-3\": 487.0, \"0-8\": 153.0, \"7-8\": 193},\n", "}\n", "plot_metrics(\n", " metrics, [\"0-1\", \"0-3\", \"0-8\",\"7-8\"], \"Overlap performance comparison\"\n", @@ -854,21 +526,13 @@ "text/plain": [ "
" ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAHeCAYAAACRyzqNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAABW40lEQVR4nO3deVxUdf///+eAMIAsioqAIm65lftClKnknpl7uVRUZptaSrZ45YZZmpV2pVbaZWill5WpdVmZuLegpWW2mvrVqETNFQEFlPfvD3/MxwlUTg7MII/77cbt5jnnPe/zOofzZubpWcZmjDECAAAAABSZl7sLAAAAAIDShiAFAAAAABYRpAAAAADAIoIUAAAAAFhEkAIAAAAAiwhSAAAAAGARQQoAAAAALCJIAQAAAIBFBCkAAAAAsIggBQAeYMGCBbLZbNq3b5+7Syl2u3btUpcuXRQSEiKbzaYVK1a4uySUQvv27ZPNZtOCBQvcXQqAMoogBaBM+fHHH3X77berWrVqstvtioyM1JAhQ/Tjjz+6u7QyIz4+Xt9//72eeeYZvfXWW2rVqpW7SwIAwLJy7i4AAErKsmXLNGjQIIWGhmro0KGqVauW9u3bp/nz52vp0qVasmSJ+vTp4+4yr2inTp1SSkqKnnrqKY0YMcLd5aAUi46O1qlTp+Tj4+PuUgCUUQQpAGXCnj17dMcdd6h27dratGmTqlSp4lj2yCOP6IYbbtAdd9yhHTt2qHbt2iVWV2ZmpsqXL19i63OX06dPy9fXV3/99ZckqUKFCi7ru6zsQ5xz5swZ5eXlydfXV35+fu4uB0AZxqV9AMqE559/XllZWZo3b55TiJKkypUra+7cucrMzNT06dMlSUuXLpXNZtPGjRsL9DV37lzZbDb98MMPjnm//PKL+vfvr9DQUPn5+alVq1b68MMPnV6Xfx/Uxo0b9dBDDyksLEzVq1e/YM0ffPCBevToocjISNntdtWpU0dPP/20zp4969SuQ4cOuuaaa7Rt2zZdd9118vf3V61atfTaa68Vad/YbDaNGDFCixYtUv369eXn56eWLVtq06ZNBdr++eefuueee1S1alXZ7XZdffXVeuONN5zabNiwQTabTUuWLNG4ceNUrVo1BQQEKCEhQdHR0ZKkxx57TDabTTVr1nS87ttvv1X37t0VHByswMBAdezYUZs3by7yPszfDzt27FD79u0VEBCgunXraunSpZKkjRs3KiYmRv7+/qpfv77WrFnj1Pdvv/2mhx56SPXr15e/v78qVaqkAQMGFLhvLb+GL774QgkJCapSpYrKly+vPn36OILi+T755BO1b99eQUFBCg4OVuvWrbV48WKnNlu2bFG3bt0UEhKigIAAtW/fXl988cVFfmv/5/Tp05o0aZLq1asnPz8/RUREqG/fvtqzZ4+jTWZmph599FFFRUXJbrerfv36euGFF2SMceor/1h477331KhRI/n7+ys2Nlbff/+9pHPHft26deXn56cOHToU2DdFPRZzcnI0YcIEtWzZUiEhISpfvrxuuOEGrV+/3qld/n1QL7zwgl566SXVqVNHdrtdP/30U6H3SB04cEB33323qlevLrvdroiICPXq1atAna+88oquvvpqx+W9w4cP1/Hjxwvdlp9++klxcXEKCAhQtWrVHH8jAEAGAMqAyMhIU7NmzYu2qVmzpqlevboxxpisrCwTGBhoHnrooQLt4uLizNVXX+2Y/uGHH0xISIhp1KiRee6558zs2bNNu3btjM1mM8uWLXO0S0pKMpJMo0aNTPv27c2sWbPMtGnTnJbt3bvX0b53797m1ltvNc8//7x59dVXzYABA4wkM2bMGKd62rdvbyIjI01YWJgZMWKEefnll03btm2NJDN//vxL7htJ5pprrjGVK1c2kydPNs8995yJjo42/v7+5vvvv3e0O3DggKlevbqJiooykydPNq+++qq55ZZbjCQzc+ZMR7v169c7trNZs2ZmxowZZurUqea7774zM2fONJLMoEGDzFtvvWWWL1/u2Ifly5c3ERER5umnnzbTpk0ztWrVMna73WzevLlI+zB/P0RFRZnHHnvMzJo1yzRq1Mh4e3ubJUuWmPDwcDNp0iTz0ksvmWrVqpmQkBCTnp7u6Pu9994zTZs2NRMmTDDz5s0z//rXv0zFihVNdHS0yczMLFBD8+bNzY033mhmzZplHn30UePt7W1uvfVWp32blJRkbDabueaaa8wzzzxj5syZY+69915zxx13ONqsXbvW+Pr6mtjYWPPiiy+amTNnmiZNmhhfX1+zZcuWi/7uzpw5Yzp27GgkmYEDB5rZs2ebqVOnmhtvvNGsWLHCGGNMXl6eufHGG43NZjP33nuvmT17tunZs6eRZEaNGlXgWGjS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gYFF7s8VLmcfFtXbb7+tu+66S71799Zjjz2msLAweXt7a+rUqU4PychX1GNp1KhR6tmzp1asWKFPP/1U48eP19SpU7Vu3To1b97ccp2u3GYAVx6CFIAy4eabb9brr7+uzz//XG3bti2w/LPPPtO+ffucLkmSzl3et3DhQq1du1Y///yzjDGOy/okOS5F8/HxUadOnVxW74YNG3TkyBEtW7ZM7dq1c8zfu3dvoe33799f4DHgv/76qyQ5XaZ1IflnRs7366+/KiAgwHFJVVBQkM6ePevS7ZSkKlWqKCAgQDt37iyw7JdffpGXl1eBsyHFYenSpYqPj9eLL77omHf69OkCT3Mrqjp16kiSfvjhhwJh+u9tgoOD/9F+rVOnjrZs2aLc3NwLfp9SdHS01qxZo5MnTzqdlcq/PDT/SYquUpRjcenSpapdu7aWLVvmdMYn/yzu5ahTp44effRRPfroo9q1a5eaNWumF198UW+//bZjW3fu3Ol0GWlOTo727t3r8mMbwJWNS/sAlAmPPfaY/P39df/99+vIkSNOy44ePaoHHnhAAQEBeuyxx5yWderUSaGhoXrnnXf0zjvvqE2bNk6XGYWFhalDhw6aO3eu0tLSCqy3sMdhF0X+/4Sf/z/fOTk5euWVVwptf+bMGc2dO9ep7dy5c1WlShWne58uJCUlxenelN9//10ffPCBunTpIm9vb3l7e6tfv356//33nR77nu+fbqd0blu7dOmiDz74wOnSr4MHD2rx4sVq27at4yxhcfL29i5wpmHWrFkFHjdfVF26dFFQUJCmTp2q06dPOy3LX0/Lli1Vp04dvfDCC8rIyCjQx6X2a79+/XT48GHNnj27wLL8ddx00006e/ZsgTYzZ86UzWZT9+7dLW3XpRTlWCzs+N6yZYtSUlL+8XqzsrIK7Oc6deooKChI2dnZks6NZ19fX7388stO654/f75OnDihHj16/OP1Ayh7OCMFoEy46qqrtHDhQg0ZMkSNGzfW0KFDVatWLe3bt0/z58/X4cOH9d///tdxhiCfj4+P+vbtqyVLligzM1MvvPBCgb7nzJmjtm3bqnHjxho2bJhq166tgwcPKiUlRX/88Ye+++47y/Ved911qlixouLj4/Xwww/LZrPprbfeuuAlRZGRkXruuee0b98+1atXT++88462b9+uefPmXfBMxfmuueYade3aVQ8//LDsdrsjsCUmJjraTJs2TevXr1dMTIyGDRumRo0a6ejRo/rmm2+0Zs0aHT161PJ25psyZYqSk5PVtm1bPfTQQypXrpzmzp2r7OzsEvvenptvvllvvfWWQkJC1KhRI6WkpGjNmjWqVKnSP+ovODhYM2fO1L333qvWrVtr8ODBqlixor777jtlZWVp4cKF8vLy0n/+8x91795dV199te6++25Vq1ZNf/75p9avX6/g4GD973//u+A67rzzTr355ptKSEjQV199pRtuuEGZmZlas2aNHnroIfXq1Us9e/ZUXFycnnrqKe3bt09NmzbV6tWr9cEHH2jUqFEFjvnLVZRj8eabb9ayZcvUp08f9ejRQ3v37tVrr72mRo0aFRooi+LXX39Vx44ddeutt6pRo0YqV66cli9froMHDzoeQFKlShWNHTtWiYmJ6tatm2655Rbt3LlTr7zyilq3bu30YAkAuKSSf1AgALjPjh07zKBBg0xERITx8fEx4eHhZtCgQU7fl/R3ycnJRpKx2Wzm999/L7TNnj17zJ133mnCw8ONj4+PqVatmrn55pvN0qVLHW3yH5v99ddfF3h9YY8//+KLL8y1115r/P39TWRkpHn88ccdj+1ev369o1379u3N1VdfbbZu3WpiY2ONn5+fiY6ONrNnzy7SPpFkhg8fbt5++21z1VVXGbvdbpo3b+60jnwHDx40w4cPN1FRUY7917FjRzNv3jxHm/zHn7/33nsFXn+hx58bY8w333xjunbtagIDA01AQICJi4szX375ZaH7qbB9mL8f/i46Otr06NHjgtud79ixY+buu+82lStXNoGBgaZr167ml19+MdHR0SY+Pv6SNeRv99/324cffmiuu+464+/vb4KDg02bNm3Mf//7X6c23377renbt6+pVKmSsdvtJjo62tx6661m7dq1Ber+u6ysLPPUU0+ZWrVqOX4n/fv3d3qU/MmTJ83o0aNNZGSk8fHxMVdddZV5/vnnnR65Xtg+MebCv7PCfs9FPRbz8vLMs88+a6Kjox3H28qVK018fLyJjo6+5LrPX5b/+PPDhw+b4cOHmwYNGpjy5cubkJAQExMTY959990Cr509e7Zp0KCB8fHxMVWrVjUPPvigOXbsmFObCx1Pf68RQNllM4Y7JgGgNOvQoYMOHz5c6CV3RWGz2TR8+PBCLw8D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mWratKnmzJlT6PLp06fr5Zdf1muvvaYtW7aofPny6tq1q06fPu1oM2TIEP34449KTk7WypUrtWnTJt13331WNwsAAAAAiszywyYkKSQkRE899dRlr7x79+7q3r17ocuMMXrppZc0btw49erVS5L05ptvqmrVqlqxYoUGDhyon3/+WatWrdLXX3+tVq1aSZJmzZqlm266SS+88IIiIyMvu0YAAAAA+Lt/FKROnz6tHTt26NChQ8rLy3Nadsstt7iksL179+rAgQPq1KmTY15ISIhiYmKUkpKigQMHKiUlRRUqVHCEKEnq1KmTvLy8tGXLFvXp06fQvrOzs5Wdne2YTk9PlyTl5uYqNzfXJfWXhPxaS1PNgCezPKa8/IqjCNf3CbgR71WAazGmil9R963lILVq1SrdeeedOnz4cIFlNptNZ8+etdploQ4cOCBJqlq1qtP8qlWrOpYdOHBAYWFhTsvLlSun0NBQR5vCTJ06VYmJiQXmr169utAnEnq65ORkd5cAXFGKPKaaznP9yj/+2PV9Ah6A9yrAtRhTxScrK6tI7SwHqZEjR2rAgAGaMGFCgZBTWowdO1YJCQmO6fT0dEVFRalLly4KDg52Y2XW5ObmKjk5WZ07d5aPj4+7ywFKPctjamr1S7exauwfru8TcCPeqwDXYkwVv/yr1S7FcpA6ePCgEhISij1EhYeHO9YXERHhtP5mzZo52hw6dMjpdWfOnNHRo0cdry+M3W4v9DuvfHx8SuUBWVrrBjxVkcdU3ulLt7G+ctf3CXgA3qsA12JMFZ+i7lfLT+3r37+/NmzYYPVlltWqVUvh4eFau3atY156erq2bNmi2NhYSVJsbKyOHz+ubdu2OdqsW7dOeXl5iomJKfYaAQAAAJRNls9IzZ49WwMGDNBnn32mxo0bF0hsDz/8cJH7ysjI0O7dux3Te/fu1fbt2xUaGqoaNWpo1KhRmjJliq666irVqlVL48ePV2RkpHr37i1Jatiwobp166Zhw4bptddeU25urkaMGKGBAwfyxD4AAAAAxcZykPrvf/+r1atXy8/PTxs2bJDNZnMss9lsloLU1q1bFRcX55jOv28pPj5eCxYs0OOPP67MzEzdd999On78uNq2batVq1bJz+//npS1aNEijRgxQh07dpSXl5f69eunl19+2epmAQAAAECRWQ5STz31lBITE/Xk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e6QAAAAAwCLukQIAAAAAiwhSAAAAAGARQQoAAAAALOKpfcAV7MyZM8rJyXF3GQCAK5Svr+8lnywHXKk48oErkDFGqampOnz4sLtLAQBc4SpXrqwaNWrIZrO5uxSgRBGkgCtQfoiqVq2aAgMDC3xRHwAAlysvL08ZGRn6888/ZYxRzZo13V0SUKIIUsAV5syZM44QFR4e7u5yAABXsMDAQEnSn3/+qW+//Vbt27dXaGiom6sCSgb/TQ1cYfLvicp/cwMAoDjlv9/88ccf+uijj3Ts2DE3VwSUDIIUcIXicj4AQEnIf78JDw9Xamqqdu3a5eaKgJLBJy0AAABcNi8vL3l7e+vkyZPuLgUoEQQpAPibmjVr6qWXXnJM22w2rVixwm31XEqHDh00atQod5dRZu3bt082m03bt28v8muMMbrvvvsUGhpq+bWAp8vLy3N3CUCJ4GETQBlS88mPSmxd+6b1sPyav/76SxMmTNBHH32kgwcPqmLFimratKkmTJig66+/vhiqLNzXX3+t8uXLl9j6imrDhg2Ki4vTsWPHVKFCBcf8ZcuWycfHx32FXa5JISW8vhOWmt91111auHChYzo0NFStW7fW9OnT1aRJE0VFRSktLU2VK1cucp+rVq3SggULtGHDBtWuXdvSa69UjRc2LtH1fR//vaX25x8HPj4+qlGjhu68807961//KtL3KJ3/aPCgoCDVr19f48aNU69evawVDsBjcEYKgMfo16+fvv32Wy1cuFC//vqrPvzwQ3Xo0EFHjhwp0TqqVKmigICAEl3n5QgNDVVQUJC7y7iidevWTWlpaUpLS9PatWtVrlw53XzzzZIkb29vhYeHW/pS0j179igiIkLXXXfdBV/Ll2l7nvzjYNeuXXr00Uc1adIkPf/880V+fVJSktLS0rR161Zdf/316t+/v77/3lqgA+A5CFIAPMLx48f12Wef6bnnnlNcXJyio6PVpk0bjR07Vrfccoujzb333qsqVaooODhYN954o7777junfqZNm6aqVasqKChIQ4cO1ZNPPqlmzZo5lhd2GVzv3r111113Oab/fmnf3z3xxBOqV6+eAgICVLt2bY0fP165ubkX3b677rpLvXv31gsvvKCIiAhVqlRJw4cPd3rdW2+9pVatWikoKEjh4eEaPHiwDh06JOnc5WNxcXGSpIoVK8pmszlqPn+b/vWvfykmJqbA+ps2barJkyc7pv/zn/+oYcOG8vPzU4MGDfTKK69ctP6yzm63Kzw8XOHh4WrWrJmefPJJ/f777/rrr78KvbRv48aNatOmjex2uyIiIvTkk0/qzJkzks4dCyNHjlRqaqpsNpvju3c6dOigESNGaNSoUapcubK6du0qSZoxY4YaN26s8uXLKyoqSg899JAyMjIc61qwYIEqVKiglStXqn79+goICFD//v2VlZWlhQsXqmbNmqpYsaIefvhhnT171vG67OxsjRkzRtWqVVP58uUVExOjDRs2FPu+LM3yj4Po6Gg9+OCD6tSpk959910FBwdr6dKlTm1XrFih8uXLO90vVKFCBYWHh6tevXp6+umndebMGa1fv96xfNWqVWrbtq0qVKigSpUq6eabb9aePXscy/OPtWXLlikuLk4BAQFq2rSpUlJSnNb9+uuvKyoqSgEBAerTp49mzJjhdBZbkj744AO1aNFCfn5+ql27thITEx3HqDFGkyZNUo0aNWS32xUZGamHH37YVbsRuGIQpAB4hMDAQAUGBmrFihXKzs4utM2AAQN06NAhffLJJ9q2bZtatGihjh076ujRo5Kkd999V5MmTdKzzz6rrVu3KiIiolgCQlBQkBYsWKCffvpJ//73v/X6669r5syZl3zd+vXrtWfPHq1fv14LFy7UggULtGDBAsfy3NxcPf300/ruu++0YsUK7du3zxGWoqKi9P7770uSdu7cqbS0NP373/8usI4hQ4boq6++cvrw9eOPP2rHjh0aPHiwJGnRokWaMGGCnnnmGf3888969tlnNX78eKfL13BhGRkZevvtt1W3bl1VqlSpwPI///xTN910k1q3bq3vvvtOr776qubPn68pU6ZIkv79739r8uTJql69utLS0vT11187Xrtw4UL5+vrqiy++0GuvvSbp3A38L7/8sn788UctXLhQ69at0+OPP+60zqysLL388stasmSJVq1apQ0bNqhPnz76+OOP9fHHH+utt97S3LlznT7sjxgxQikpKVqyZIl27NihAQMGqFu3bjxxzQJ/f395eXlp4MCBSkpKclqWlJSk/v37F3q2+MyZM5o/f74kydfX1zE/MzNTCQkJ2rp1q9auXSsvLy/16dOnwD1HTz31lMaMGaPt27erXr16GjRokCMEffHFF3rggQf0yCOPaPv27ercubOeeeYZp9d/9tlnuvPOO/XII4/op59+0ty5c7VgwQJHu/fff18zZ87U3LlztWvXLq1YsUKNG5fspZdAacA9UgA8Qrly5bRgwQINGzZMr732mlq0aKH27dtr4MCBatKkiT7//HN99dVXOnTokOx2uyTphRde0IoVK7R06VLdd999eumllzR06FANHTpUkjRlyhStWbNGp0+fdmmt48aNc/y7Zs2aGjNmjJYsWVLgw+3fVaxYUbNnz5a3t7caNGigHj16aO3atRo2bJgk6Z577nG0rV27tl5++WW1bt1aGRkZCgwMdHzJZVhYWIH/Xc539dVXq2nTplq8eLHGjx8v6VxwiomJUd26dSVJEydO1Isvvqi+fftKkmrVquX4MBUfH//PdsoVbuXKlY7vysnMzFRERIRWrlxZ6NcMvPLKK4qKitLs2bNls9nUoEED7d+/X0888YQmTJigkJAQBQUFOS4JPN9VV12l6dOnO807/wxqzZo1NWXKFD3wwANO/0mQm5urV199VXXq1JEk9e/fX2+99ZYOHjyowMBANWrUSHFxcVq/fr1uu+02paamKikpSampqYqMjJQkjRkzRqtWrVJSUpKeffZZl+y3K5UxRmvXrtWnn36qkSNHasCAAbruuuuUlpamiIgIHTp0SB9//LHWrFnj9LpBgwbJ29tbp06dUl5enmrWrKlbb73Vsbxfv35O7d944w1VqVJFP/30k6655hrH/DFjxqhHj3P3oSYmJurqq6/W7t271aBBA82aNUvdu3fXmDFjJEn16tXTl19+qZUrVzpen5iYqCeffNIx3mvXrq2nn35ajz/+uCZOnKjU1FSFh4erU6dOjvvB2rRp49qdCFwBOCMFwGP069dP+/fv14cffqhu3bppw4YNatGihRYsWKDvvvtOGRkZqlSpkuPsVWBgoPbu3es4+/Lzzz8XuKwtNjbW5XW+8847uv766xUeHq7AwECNGzdOqampkqTU1FSn+s7/QHr11VfL29vbMZ3/gSvftm3b1LNnT9WoUUNBQUFq3769o08rhgwZosWLF0s694Hvv//9r4YMGSLpXAjYs2ePhg4d6lTnlClTnM5iwVlcXJy2b9+u7du366uvvlLXrl3VvXt3/fbbbwXa/vzzz4qNjXV6uMD111+vjIwM/fHHHxddT8uWLQvMW7NmjTp27Khq1aopKChId9xxh44cOaKsrCxHm4CAAEeIkqSqVauqZs2aTl/MXbVqVcfx9v333+vs2bOqV6+e03GwceNGjoOLyA/Ufn5+6t69u2677TZNmjRJbdq00dVXX+04q/v2228rOjpa7dq1c3r9zJkztX37dn3yySdq1KiR/vOf/zj+g0SSdu3apUGDBql27doKDg52XPb5978BTZo0cfw7IiJCkhy/2507dxYIPX+f/u677zR58mSn3/2wYcOUlpamrKwsDRgwQKdOnVLt2rU1bNgwLV++3HHGC8D/4YwUAI/i5+enzp07q3Pnzho/frzuvfdeTZw4UQ899JAiIiIKvYfjQmdnCuPl5SVjjNO8S93fdL6UlBQNGTJEiYmJ6tq1q0JCQrRkyRK9+OKLkqTIyEine2XO/5D09yfr2Ww2xyU7mZmZ6tq1q7p27apFixapSpUqSk1NVdeuXS0/dGDQoEF64okn9M033+jUqVP6/fffddttt0mS496a119/vUDoPD/kwVn58uUdZ/Skc/eYhYSE6PXXX9e9997r0vWcb9++fbr55pv14IMP6plnnlFoaKg+//xzDR06VDk5OY6HohR2bF3seMvIyJC3t7e2bdtW4Pd+fviCs7i4OL366qvy9fVVZGSk00NC7r33Xs2ZM0dPPvmkkpKSdPfddzuFaencF9bWrVtXdevWVVJSkm666Sb99NNPCgsLkyT17NlT0dHRev311xUZGam8vDxdc801Bf4GnP+7zV+HlUeOZ2RkKDEx0XFW+nx+fn6KiorSzp07tWbNGiUnJ+uhhx7S888/r40bN5buJ4QCLkaQAuDRGjVqpBUrVqhFixY6cOCAypUr5/hf2r9r2LChtmzZojvvvNMxb/PmzU5tqlSporS0NMf02bNn9cMPPzge5HApX375paKjo/XUU0855p1/VqJcuXJOH7iL6pdfftGRI0c0bdo0RUVFSZK2bt3q1Cb/XorzHxhQmOrVq6t9+/ZatGiRTp06pc6dOzs+qFWtWlWRkZH6f//v/znOUsE6m80mLy8vnTp1qsCyhg0b6v3335cxxvEh94svvlBQUJCqV69uaT3btm1TXl6eXnzxRcdlhO++++5l19+8eXOdPXtWhw4d0g033HDZ/ZUVfw/U57v99tv1+OOP6+WXX9ZPP/10yctk27Rpo5YtW+qZZ57Rv//9bx05ckQ7d+7U66+/7vidfP7555ZrrF+/vtN9d5IKTLdo0UI7d+686N8qf39/9ezZUz179tTw4cPVoEEDff/992rRooXlmoArFUEKgEc4cuSIBgwYoHvuuUdNmjRRUFCQtm7dqunTp6tXr17q1KmTYmNj1bt3b02fPl316tXT/v379dFHH6lPnz5q1aqVHnnkEd11111q1aqVrr/+ei1atEg//vijateu7VjPjTfeqISEBH300UeqU6eOZsyYoePHjxe5zquuukqpqalasmSJWrdurY8++kjLly+/7O2vUaOGfH19NWvWLD3wwAP64Ycf9PTTTzu1iY6Ols1m08qVK3XTTTfJ39//gmcPhgwZookTJyonJ6fAgzASExP18MMPKyQkRN26dVN2dra2bt2qY8eOKSEh4bK35UqUnZ2tAwcOSJKOHTum2bNnKyMjQz179izQ9qGHHtJLL72kkSNHasSIEdq5c6cmTpyohISEQu+pupi6desqNzdXs2bNUs+ePZ0eQnE56tWrpyFDhujOO+/Uiy++qObNm+uvv/7S2rVr1aRJE8f9Nyi6ihUrqm/fvnrsscfUpUuXIoXmUaNGqU+fPnr88ccdT/OcN2+eIiIilJqaqieffNJyHSNHjlS7du00Y8YM9ezZU+vWrdMnn3zidHZswoQJuvnmm1WjRg31799fXl5e+u677/TDDz9oypQpWrBggc6ePauYmBgFBATo7bfflr+/v6Kjoy3XA1zRDIArSmZmptm6davJzMx0dymWnD592jz55JOmRYsWJiQkxAQEBJj69eubcePGmaysLGOMMenp6WbkyJEmMjLS+Pj4mKioKDNkyBCTmprq6OeZZ54xlStXNoGBgSY+Pt48/vjjpmnTpo7lOTk55sEHHzShoaEmLCzMTJ061fTq1cvEx8c72kRHR5uZM2c6piWZ5cuXO6Yfe+wxU6lSJRMYGGhuu+02M3PmTBMSEnLR7YuPjze9evVymvfII4+Y9u3bO6YXL15satasaex2u4mNjTUffvihkWS+/fZbR5vJkyeb8PBwY7PZHDW3b9/ePPLII059Hzt2zNjtdhMQEGBOnjxZoJ5FixaZZs2aGV9fX1OxYkXTrl07s2zZsotuQ1kVHx9vJDl+goKCTOvWrc3SpUuNMcbs3bu3wO9pw4YNpnXr1sbX19eEh4ebJ554wuTm5jqWz5w500RHRzutp7DfozHGzJgxw0RERBh/f3/TtWtX8+abbxpJ5tixY8YYY5KSkgocfxMnTnQ67vO34/xjMCcnx0yYMMHUrFnT+Pj4mIiICNOnTx+zY8cOq7uoTChsDP/d2rVrjSTz7rvvFlj2978jxhiTl5dnGjRoYB588EFjjDHJycmmYcOGxm63myZNmpgNGzY4va6wY+3YsWNGklm/fr1j3rx580y1atWMv7+/6d27t5kyZYoJDw93WveqVavMddddZ/z9/U1wcLBp06aNmTdvnjHGmOXLl5uYmBgTHBxsypcvb6699lqzZs2aC253/vvO0qVLzdSpU83q1asvup+AK4XNmL/dLACgVMvKytLPP/+shg0blqovlS0ukyZN0ooVK5zuWwKA4vDWW29p9OjR2r9/v9Njzd1t2LBh+uWXX/TZZ58VS//57zv79u3Trl271LJlS3Xu3LlY1gV4Ei7tAwAAuAxZWVlKS0vTtGnTdP/997s9RL3wwgvq3Lmzypcvr08++UQLFy7kS7eBYsDjzwEAAC7D9OnT1aBBA4WHh2vs2LHuLkdfffWVOnfurMaNG+u1117Tyy+/7NKnSwI4h0v7gCsMl/YBAEoSl/ahrOKMFAAAAABYRJACrlBWvpwRAIB/ivcblFUEKeAKk3+Tc0ZGhpsrAQCUBfnvN7m5uW6uBChZPLUPuMKUK1dOlStX1p9//ilJCgwMtPwloAAAXEpeXp4yMjL0559/6vjx45yZQplDkAKuQDVq1JAkR5gCAKC4HD9+XAcPHpQkGWPk5+fn5oqAkkGQAq5ANptN0dHR+uuvv7R582YFBwcrICBANpvN3aUBAK4gubm5ysvLkzFGR48ela+vr6pUqeLusoASQZACrmDNmzdXZmamtm7dqpycHIIUAKDY+Pn5qUOHDqpfv767SwFKBN8jBVzhzp49q/379ysjI4Pr1wEAxcLb21vBwcGKiIjgP+1QZhCkAAAAAMAiHuUFAAAAABYRpAAAAADAIoIUAAAAAFhEkAIAAAAAiwhSAAAAAGDR/weUebhmzTv5GAAAAABJRU5ErkJggg==" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAHzCAYAAADW7AevAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/GU6VOAAAACXBIWXMAAA9hAAAPYQGoP6dpAABo00lEQVR4nO3dd1xW9f//8ecFMkQBRWUlIi4cuSflHqCpZWrlKLUcpWgpZWaZqZWas1yVDbXSjzbMSk3FbYazyJyZOSoBy4WCMs/vD39cX69ABb0OCDzutxu3G9c57/M+r3Ou8waenHFZDMMwBAAAAACwK4e8LgAAAAAACiLCFgAAAACYgLAFAAAAACYgbAEAAACACQhbAAAAAGACwhYAAAAAmICwBQAAAAAmIGwBAAAAgAkIWwAAAABgAsIWAOQDCxculMVi0YkTJ/K6FNMdPXpUoaGh8vT0lMVi0YoVK/K6JORDJ06ckMVi0cKFC/O6FACFGGELAK5z4MABPf7447rnnnvk4uIif39/9e7dWwcOHMjr0gqNvn376tdff9Wbb76pTz/9VA0aNMjrkgAAuC1F8roAALhbLF++XD179pSXl5f69++voKAgnThxQh999JG+/PJLLV26VA8//HBel1mgXblyRVFRUXrllVc0dOjQvC4H+VhgYKCuXLkiJyenvC4FQCFG2AIASceOHdMTTzyhChUqaOvWrSpTpox13nPPPadmzZrpiSee0L59+1ShQoVcqyshIUHFihXLtfXllatXr8rZ2Vn//POPJKlEiRJ267uw7ENck5qaqvT0dDk7O8vV1TWvywFQyHEZIQBImjp1qhITEzV//nyboCVJpUuX1vvvv6+EhARNmTJFkvTll1/KYrFoy5Ytmfp6//33ZbFYtH//fuu0w4cPq3v37vLy8pKrq6saNGigb7/91ma5jPuytmzZoiFDhsjb21tly5a9Yc3ffPONOnbsKH9/f7m4uKhixYp6/fXXlZaWZtOuZcuWuvfee7V3717dd999Klq0qIKCgvTee+9la99YLBYNHTpUixcvVnBwsFxdXVW/fn1t3bo1U9u///5bTz31lHx8fOTi4qIaNWro448/tmmzefNmWSwWLV26VGPGjNE999wjNzc3RUREKDAwUJI0cuRIWSwWlS9f3rrczz//rA4dOsjDw0PFixdXmzZttGPHjmzvw4z9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mzerUaNGKlasmEqUKKH7779fJ0+evOP3AXmPsAWYrHjx4ipevLhWrFihpKSkLNs88sgjOnPmjL7//nvt3btX9erVU5s2bXTu3DlJ0ueff65x48Zp4sSJ2rNnj/z8/EwJEe7u7lq4cKEOHjyod955Rx988IFmzpx5y+U2bdqkY8eOadOmTVq0aJEWLlyohQsXWuenpKTo9ddf1y+//KIVK1boxIkT1kAVEBCgr776StK1x9jGxMTonXfeybSO3r17a9euXTZ/qB84cED79u1Tr169JEmLFy/W2LFj9eabb+rQoUOaOHGiXn31VevlLLi1okWLysHBQT169LD5w0G6draie/fuWZ5tTE1N1UcffSRJcnZ2tk5PSEhQRESE9uzZow0bNsjBwUEPP/yw0tPTbZZ/5ZVX9MILLyg6OlpVqlRRz549rX94b9++Xc8884yee+45RUdHq127dnrzzTdtlt+2bZv69Omj5557TgcPHtT777+vhQsXWtt99dVXmjlzpt5//30dPXpUK1asUM2auXeZZ353u8eFJP3222/auHGjzT9LbvV+paenq2vXrnJ2dtbOnTv13nvvadSoUdmqNT09XQ899JDOnTunLVu2KDIyUn/88Ycee+wxa5uvv/5azz33nJ5//nnt379fTz/9tJ588kmbfxRcb9asWfr222/1+eef68iRI1q8eHGBvETRTNk9hr766iulpKToxRdfzLKf6y9TPXbsmNq3b69u3bpp3759WrZsmX744QcNHTrUZpnp06erQYMG+vnnnzVkyBANHjxYR44ckXTtZ1RYWJhKliyp3bt364svvtD69esz9bFx40adPn1aW7du1YwZM/Taa6+pU6dOKlmypHbu3KlnnnlGTz/9tP76668s6/7777/VvHlzubi4aOPGjdq7d6+eeuoppaamKjU1VV26dFGLFi20b98+RUVFadCgQTx9uYDg3CZgsiJFimjhwoUaOHCg3nvvPdWrV08tWrRQjx49VKtWLf3www/atWuXzpw5Y72fYdq0aVqxYoW+/PJLDRo0SG+//bb69++v/v37S5LeeOMNrV+/XlevXrVrrWPGjLF+X758eb3wwgtaunTpDX/pZShZsqTmzJkjR0dHVa1aVR07dtSGDRs0cOBASdJTTz1lbVuhQgXNmjVLDRs21OXLl1W8eHF5eXlJkry9vTOdrchQ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" }, "metadata": {}, "output_type": "display_data" } ], - "execution_count": 86 - }, - { - "metadata": {}, - "cell_type": "code", - "outputs": [], - "execution_count": null, - "source": "", - "id": "a68d62f399e4f74b" + "execution_count": 2 } ], "metadata": { diff --git a/polars_bio/__init__.py b/polars_bio/__init__.py index 0217846..0af2666 100644 --- a/polars_bio/__init__.py +++ b/polars_bio/__init__.py @@ -3,8 +3,6 @@ from pathlib import Path from typing import TYPE_CHECKING -import polars as pl -from polars.plugins import register_plugin_function from polars_bio._internal import __version__ as __version__ @@ -13,12 +11,3 @@ LIB = Path(__file__).parent - -def pig_latinnify(expr: IntoExprColumn) -> pl.Expr: - return register_plugin_function( - args=[expr], - plugin_path=LIB, - function_name="pig_latinnify", - is_elementwise=True, - ) - diff --git a/src/expressions.rs b/src/expressions.rs index 113e727..e69de29 100644 --- a/src/expressions.rs +++ b/src/expressions.rs @@ -1,15 +0,0 @@ -#![allow(clippy::unused_unit)] -use polars::prelude::*; -use pyo3_polars::derive::polars_expr; -use std::fmt::Write; - -#[polars_expr(output_type=String)] -fn pig_latinnify(inputs: &[Series]) -> PolarsResult { - let ca: &StringChunked = inputs[0].str()?; - let out: StringChunked = ca.apply_into_string_amortized(|value: &str, output: &mut String| { - if let Some(first_char) = value.chars().next() { - write!(output, "{}{}ay", &value[1..], first_char).unwrap() - } - }); - Ok(out.into_series()) -} diff --git a/src/lib.rs b/src/lib.rs index 452ff16..4d524bc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,14 +1 @@ mod expressions; -use pyo3::types::{PyModule}; -use pyo3::{pymodule, Bound, PyResult}; -use pyo3_polars::PolarsAllocator; - -#[pymodule] -fn _internal(m: &Bound<'_, PyModule>) -> PyResult<()> { - m.add("__version__", env!("CARGO_PKG_VERSION"))?; - Ok(()) -} - -#[global_allocator] -static ALLOC: PolarsAllocator = PolarsAllocator::new(); - diff --git a/tests/test_pig_latinnify.py b/tests/test_pig_latinnify.py index 0ada228..4fab46c 100644 --- a/tests/test_pig_latinnify.py +++ b/tests/test_pig_latinnify.py @@ -1,20 +1,4 @@ -import polars as pl -from polars_bio import pig_latinnify - def test_piglatinnify(): - df = pl.DataFrame( - { - "english": ["this", "is", "not", "pig", "latin"], - } - ) - result = df.with_columns(pig_latin=pig_latinnify("english")) - - expected_df = pl.DataFrame( - { - "english": ["this", "is", "not", "pig", "latin"], - "pig_latin": ["histay", "siay", "otnay", "igpay", "atinlay"], - } - ) + pass - assert result.equals(expected_df)