From 30d4e35a39877c8a50de941f6d1bf73e4622b639 Mon Sep 17 00:00:00 2001 From: Hennzau Date: Wed, 14 Aug 2024 17:35:30 +0200 Subject: [PATCH 1/7] Arrow Data instead of Union + arrow is now working. Next: ViewArrow --- Cargo.lock | 165 +-------------- Cargo.toml | 2 +- examples/dummy-opencv-capture/main.rs | 2 +- src/arrow.rs | 280 +++++++++++++------------ src/bbox.rs | 104 +++++----- src/bbox/arrow.rs | 237 ++++++++++++---------- src/bbox/xywh.rs | 22 +- src/bbox/xyxy.rs | 22 +- src/image.rs | 15 +- src/image/arrow.rs | 282 ++++++++++++++------------ src/image/bgr8.rs | 6 +- src/image/container.rs | 36 ---- src/image/data.rs | 109 ++++++++++ src/image/gray8.rs | 6 +- src/image/rgb8.rs | 6 +- src/lib.rs | 6 +- 16 files changed, 655 insertions(+), 645 deletions(-) delete mode 100644 src/image/container.rs create mode 100644 src/image/data.rs diff --git a/Cargo.lock b/Cargo.lock index e3c7a07..2cba840 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -281,12 +281,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" - [[package]] name = "bumpalo" version = "3.16.0" @@ -399,7 +393,6 @@ dependencies = [ "arrow", "eyre", "ndarray", - "pyo3", ] [[package]] @@ -408,7 +401,7 @@ version = "24.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f" dependencies = [ - "bitflags 1.3.2", + "bitflags", "rustc_version", ] @@ -440,12 +433,6 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "iana-time-zone" version = "0.1.60" @@ -485,12 +472,6 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "indoc" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" - [[package]] name = "itoa" version = "1.0.11" @@ -588,16 +569,6 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" -[[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" @@ -620,15 +591,6 @@ 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 = "ndarray" version = "0.15.6" @@ -722,35 +684,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[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 = "portable-atomic" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" - [[package]] name = "proc-macro2" version = "1.0.86" @@ -760,69 +693,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "pyo3" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" -dependencies = [ - "cfg-if", - "indoc", - "libc", - "memoffset", - "parking_lot", - "portable-atomic", - "pyo3-build-config", - "pyo3-ffi", - "pyo3-macros", - "unindent", -] - -[[package]] -name = "pyo3-build-config" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" -dependencies = [ - "once_cell", - "target-lexicon", -] - -[[package]] -name = "pyo3-ffi" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" -dependencies = [ - "libc", - "pyo3-build-config", -] - -[[package]] -name = "pyo3-macros" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" -dependencies = [ - "proc-macro2", - "pyo3-macros-backend", - "quote", - "syn", -] - -[[package]] -name = "pyo3-macros-backend" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" -dependencies = [ - "heck", - "proc-macro2", - "pyo3-build-config", - "quote", - "syn", -] - [[package]] name = "quote" version = "1.0.36" @@ -838,15 +708,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" -[[package]] -name = "redox_syscall" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" -dependencies = [ - "bitflags 2.6.0", -] - [[package]] name = "regex" version = "1.10.6" @@ -891,12 +752,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "semver" version = "1.0.23" @@ -935,12 +790,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smallvec" -version = "1.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" - [[package]] name = "static_assertions" version = "1.1.0" @@ -958,12 +807,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "target-lexicon" -version = "0.12.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" - [[package]] name = "tiny-keccak" version = "2.0.2" @@ -979,12 +822,6 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" -[[package]] -name = "unindent" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" - [[package]] name = "version_check" version = "0.9.5" diff --git a/Cargo.toml b/Cargo.toml index fbf00ca..7967c85 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ name = "fastformat" crate-type = ["cdylib", "lib"] [dependencies] -pyo3 = "0.21.1" +# pyo3 = "0.21.1" ndarray = "0.15.4" arrow = "52.1.0" eyre = "0.6.12" diff --git a/examples/dummy-opencv-capture/main.rs b/examples/dummy-opencv-capture/main.rs index 369e2f1..f069c9e 100644 --- a/examples/dummy-opencv-capture/main.rs +++ b/examples/dummy-opencv-capture/main.rs @@ -22,7 +22,7 @@ fn image_show(frame: ndarray::ArrayView) { println!("{:?}", frame); } -fn send_output(arrow_array: arrow::array::UnionArray) { +fn send_output(arrow_array: arrow::array::ArrayData) { // Dummy send output let image = Image::from_arrow(arrow_array).unwrap(); diff --git a/src/arrow.rs b/src/arrow.rs index 2f1f980..a2452af 100644 --- a/src/arrow.rs +++ b/src/arrow.rs @@ -1,28 +1,12 @@ +use arrow::array::Array; +use eyre::{Context, OptionExt, Report, Result}; use std::collections::HashMap; -use eyre::{Context, OptionExt, Report, Result}; +pub fn array_data_to_map( + array_data: arrow::array::ArrayData, +) -> Result> { + let array = arrow::array::UnionArray::from(array_data); -/// Converts an Arrow `UnionArray` into a `HashMap`. -/// -/// This function takes an Arrow `UnionArray` and converts it into a `HashMap` where the keys -/// are the names of the fields and the values are the corresponding `ArrayRef` objects. -/// -/// # Arguments -/// -/// * `array` - An `arrow::array::UnionArray` containing the data to be converted. -/// -/// # Returns -/// -/// A `Result` containing the constructed `HashMap` if successful, -/// or an error otherwise. -/// -/// # Errors -/// -/// Returns an error if the union array field index is invalid or if there are issues -/// in accessing the children of the union array. -pub fn arrow_union_into_map( - array: arrow::array::UnionArray, -) -> Result> { let mut result = HashMap::new(); let (union_fields, _, _, children) = array.into_parts(); @@ -31,9 +15,13 @@ pub fn arrow_union_into_map( let child = children .get(a as usize) .ok_or_eyre(Report::msg( - "Invalid union array field index. Must be >= 0 and correspond to children index in the array.", + format!( + "Invalid union array field {}'s index (= {}). Must be >= 0 and correspond to children index in the array", + b, a + ), ))? - .clone(); + .clone() + .into_data(); result.insert(b.name().to_string(), child); } @@ -41,122 +29,164 @@ pub fn arrow_union_into_map( Ok(result) } -/// Extracts a primitive array from a `HashMap` and converts it to a `Vec`. -/// -/// This function takes a `HashMap` containing `ArrayRef` objects, extracts the array corresponding -/// to the specified field, and converts it into a `Vec` of the primitive type `T`. -/// -/// # Arguments -/// -/// * `field` - A string slice representing the key in the `HashMap`. -/// * `map` - A mutable reference to the `HashMap`. -/// -/// # Returns -/// -/// A `Result` containing the constructed `Vec` if successful, or an error otherwise. -/// -/// # Type Parameters -/// -/// * `T` - The native primitive type to be extracted. -/// * `G` - The Arrow primitive type that corresponds to `T`. -/// -/// # Errors -/// -/// Returns an error if the specified field is not present in the `HashMap`, or if the type -/// conversion fails. -/// -/// # Example -/// -/// ``` -/// use std::collections::HashMap; -/// use arrow::array::{Int32Array, ArrayRef}; -/// use std::sync::Arc; -/// -/// use fastformat::arrow::get_primitive_array_from_map; -/// -/// let mut map = HashMap::new(); -/// map.insert("field".to_string(), Arc::new(Int32Array::from(vec![1, 2, 3])) as ArrayRef); -/// -/// let result: Vec = get_primitive_array_from_map::("field", &mut map).unwrap(); -/// ``` -pub fn get_primitive_array_from_map< - T: arrow::datatypes::ArrowNativeType, - G: arrow::datatypes::ArrowPrimitiveType, ->( +pub fn primitive_buffer_from_map( field: &str, - map: &mut HashMap, -) -> Result> { - use arrow::array::Array; + map: &mut HashMap, +) -> Result<( + arrow::buffer::Buffer, + Option>, +)> { + let array_data = map.remove(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let array = arrow::array::PrimitiveArray::::from(array_data); + let (_, buffer, _) = array.into_parts(); + + Ok((buffer.into_inner(), None)) +} - let array_data = map - .remove(field) - .ok_or_eyre(Report::msg("Invalid field for this map."))? - .into_data(); +pub fn utf8_buffer_from_map( + field: &str, + map: &mut HashMap, +) -> Result<( + arrow::buffer::Buffer, + Option>, +)> { + let array_data = map.remove(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; - let array = arrow::array::PrimitiveArray::::from(array_data); - let (_, buffer, _) = array.into_parts(); - let buffer = buffer.into_inner(); + let array = arrow::array::StringArray::from(array_data); + let (offset, buffer, _) = array.into_parts(); - match buffer.into_vec::() { + Ok((buffer, Some(offset))) +} + +pub fn primitive_singleton_from_raw_parts( + field: &str, + raw_parts: &HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, +) -> Result { + let (buffer, _) = raw_parts.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let slice = buffer.typed_data::(); + + slice + .first() + .cloned() + .ok_or_eyre(Report::msg(format!("Field {} is empty", field))) +} + +pub fn utf8_singleton_from_raw_parts( + field: &str, + raw_parts: &HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, +) -> Result { + let (buffer, offset_buffer) = raw_parts.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let offset = offset_buffer.clone().ok_or_eyre(Report::msg(format!( + "No offset associated with field {}", + field + )))?; + + let slice = buffer.as_slice(); + let mut iterator = offset.iter(); + iterator.next(); + + let last_offset = iterator.next().cloned().ok_or_eyre(Report::msg(format!( + "No offset associated with field {}", + field + )))? as usize; + + let slice = &slice[0..last_offset]; + + String::from_utf8(slice.to_vec()).wrap_err(Report::msg("Invalid UTF-8 string")) +} + +pub fn primitive_array_from_raw_parts( + field: &str, + raw_parts: &mut HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, +) -> Result> { + let (buffer, _) = raw_parts.remove(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map.", + field + )))?; + + match buffer.into_vec::() { Ok(vec) => Ok(vec), - Err(e) => Err(Report::msg(format!( - "T is not a valid type for this buffer. Must have the same layout as the buffer (it usually occurs when type is incorrect or when an other reference exists). Error: {:?}", e - ))), + Err(_) => Err(Report::msg("Invalid type for this buffer")), } } -/// Extracts a UTF-8 encoded string array from a `HashMap` and converts it to a `Vec`. -/// -/// This function takes a `HashMap` containing `ArrayRef` objects, extracts the UTF-8 encoded -/// string array corresponding to the specified field, and converts it into a `Vec`. -/// -/// # Arguments -/// -/// * `field` - A string slice representing the key in the `HashMap`. -/// * `map` - A mutable reference to the `HashMap`. -/// -/// # Returns -/// -/// A `Result` containing the constructed `Vec` if successful, or an error otherwise. -/// -/// # Errors -/// -/// Returns an error if the specified field is not present in the `HashMap`, or if the array -/// is not UTF-8 encoded. -/// -/// # Example -/// -/// ``` -/// use std::collections::HashMap; -/// use arrow::array::{StringArray, ArrayRef}; -/// use std::sync::Arc; -/// -/// use fastformat::arrow::get_utf8_array_from_map; -/// -/// let mut map = HashMap::new(); -/// map.insert("field".to_string(), Arc::new(StringArray::from(vec!["a", "b", "c"])) as ArrayRef); -/// -/// let result = get_utf8_array_from_map("field", &mut map).unwrap(); -/// ``` -pub fn get_utf8_array_from_map( +pub fn primitive_array_view_from_raw_parts<'a, T: arrow::datatypes::ArrowPrimitiveType>( field: &str, - map: &mut HashMap, -) -> Result> { - use arrow::array::Array; + raw_parts: &'a HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, +) -> Result<&'a [T::Native]> { + let (buffer, _) = raw_parts.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map.", + field + )))?; + + Ok(buffer.typed_data::()) +} - let array_data = map - .remove(field) - .ok_or_eyre(Report::msg("Invalid field for this map."))? - .into_data(); +pub fn utf8_array_from_raw_parts( + field: &str, + raw_parts: &mut HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, +) -> Result> { + let (buffer, offset_buffer) = raw_parts.remove(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; - let array = arrow::array::StringArray::from(array_data); - let (offsets, buffer, _) = array.into_parts(); + let offset = offset_buffer.ok_or_eyre(Report::msg(format!( + "No offset associated with field {}", + field + )))?; let slice = buffer.as_slice(); - let mut last_offset = 0; - let mut iterator = offsets.iter(); + let mut iterator = offset.iter(); iterator.next(); + let mut last_offset = 0; + iterator .map(|&offset| { let offset = offset as usize; diff --git a/src/bbox.rs b/src/bbox.rs index f15f48b..086d442 100644 --- a/src/bbox.rs +++ b/src/bbox.rs @@ -2,6 +2,8 @@ use eyre::{ContextCompat, Result}; use encoding::Encoding; +use std::borrow::Cow; + mod xywh; mod xyxy; @@ -9,9 +11,9 @@ mod arrow; mod encoding; -pub struct BBox { - pub data: Vec, - pub confidence: Vec, +pub struct BBox<'a> { + pub data: Cow<'a, [f32]>, + pub confidence: Cow<'a, [f32]>, pub label: Vec, pub encoding: Encoding, } @@ -34,32 +36,35 @@ type BBoxArrayViewMutResult<'a> = ( ndarray::ArrayViewMut<'a, String, ndarray::Ix1>, ); -impl BBox { +impl BBox<'_> { pub fn into_xyxy(self) -> Result { match self.encoding { Encoding::XYWH => { let mut data = self.data; - - for i in 0..self.confidence.len() { - let x = data - .get(i * 4) - .wrap_err("Not enough data matching 4 values per box!") - .cloned()?; - let y = data - .get(i * 4 + 1) - .wrap_err("Not enough data matching 4 values per box!") - .cloned()?; - let w = data - .get(i * 4 + 2) - .wrap_err("Not enough data matching 4 values per box!") - .cloned()?; - let h = data - .get(i * 4 + 3) - .wrap_err("Not enough data matching 4 values per box!") - .cloned()?; - - data[i * 4 + 2] = x + w; - data[i * 4 + 3] = y + h; + { + let data = data.to_mut(); + + for i in 0..self.confidence.len() { + let x = data + .get(i * 4) + .wrap_err("Not enough data matching 4 values per box!") + .cloned()?; + let y = data + .get(i * 4 + 1) + .wrap_err("Not enough data matching 4 values per box!") + .cloned()?; + let w = data + .get(i * 4 + 2) + .wrap_err("Not enough data matching 4 values per box!") + .cloned()?; + let h = data + .get(i * 4 + 3) + .wrap_err("Not enough data matching 4 values per box!") + .cloned()?; + + data[i * 4 + 2] = x + w; + data[i * 4 + 3] = y + h; + } } Ok(Self { @@ -77,27 +82,30 @@ impl BBox { match self.encoding { Encoding::XYXY => { let mut data = self.data; - - for i in 0..self.confidence.len() { - let x1 = data - .get(i * 4) - .wrap_err("Not enough data matching 4 values per box!") - .cloned()?; - let y1 = data - .get(i * 4 + 1) - .wrap_err("Not enough data matching 4 values per box!") - .cloned()?; - let x2 = data - .get(i * 4 + 2) - .wrap_err("Not enough data matching 4 values per box!") - .cloned()?; - let y2 = data - .get(i * 4 + 3) - .wrap_err("Not enough data matching 4 values per box!") - .cloned()?; - - data[i * 4 + 2] = x2 - x1; - data[i * 4 + 3] = y2 - y1; + { + let data = data.to_mut(); + + for i in 0..self.confidence.len() { + let x1 = data + .get(i * 4) + .wrap_err("Not enough data matching 4 values per box!") + .cloned()?; + let y1 = data + .get(i * 4 + 1) + .wrap_err("Not enough data matching 4 values per box!") + .cloned()?; + let x2 = data + .get(i * 4 + 2) + .wrap_err("Not enough data matching 4 values per box!") + .cloned()?; + let y2 = data + .get(i * 4 + 3) + .wrap_err("Not enough data matching 4 values per box!") + .cloned()?; + + data[i * 4 + 2] = x2 - x1; + data[i * 4 + 3] = y2 - y1; + } } Ok(Self { @@ -127,7 +135,7 @@ mod tests { let expected_bbox = vec![1.0, 1.0, 1.0, 1.0]; - assert_eq!(expected_bbox, final_bbox_data); + assert_eq!(expected_bbox, final_bbox_data.into_owned()); } #[test] @@ -144,6 +152,6 @@ mod tests { let expected_bbox = vec![1.0, 1.0, 2.0, 2.0]; - assert_eq!(expected_bbox, final_bbox_data); + assert_eq!(expected_bbox, final_bbox_data.into_owned()); } } diff --git a/src/bbox/arrow.rs b/src/bbox/arrow.rs index b6a432b..1cdc022 100644 --- a/src/bbox/arrow.rs +++ b/src/bbox/arrow.rs @@ -1,52 +1,140 @@ -use crate::arrow::{arrow_union_into_map, get_primitive_array_from_map, get_utf8_array_from_map}; - use super::{encoding::Encoding, BBox}; +use crate::arrow::{ + array_data_to_map, primitive_array_from_raw_parts, primitive_array_view_from_raw_parts, + primitive_buffer_from_map, primitive_singleton_from_raw_parts, utf8_array_from_raw_parts, + utf8_buffer_from_map, utf8_singleton_from_raw_parts, +}; + use eyre::{Context, ContextCompat, Report, Result}; -use std::sync::Arc; +use std::borrow::Cow; +use std::{collections::HashMap, sync::Arc}; + +impl<'a> BBox<'a> { + pub fn raw_parts( + array_data: arrow::array::ArrayData, + ) -> Result< + HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, + > { + let mut map = array_data_to_map(array_data)?; + + let mut result = HashMap::new(); + + result.insert( + "data".to_string(), + primitive_buffer_from_map::("data", &mut map)?, + ); + + result.insert( + "confidence".to_string(), + primitive_buffer_from_map::("confidence", &mut map)?, + ); + + result.insert( + "label".to_string(), + utf8_buffer_from_map("label", &mut map)?, + ); + + result.insert( + "encoding".to_string(), + utf8_buffer_from_map("encoding", &mut map)?, + ); + + Ok(result) + } + + pub fn from_raw_parts( + mut raw_parts: HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, + ) -> Result { + let data = primitive_array_from_raw_parts::( + "data", + &mut raw_parts, + )?; + + let confidence = primitive_array_from_raw_parts::( + "confidence", + &mut raw_parts, + )?; + + let label = utf8_array_from_raw_parts("label", &mut raw_parts)?; + + let encoding = + Encoding::from_string(utf8_singleton_from_raw_parts("encoding", &raw_parts)?)?; + + Ok(Self { + data: Cow::from(data), + confidence: Cow::from(confidence), + label, + encoding, + }) + } + + pub fn view_from_raw_parts( + raw_parts: &'a mut HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, + ) -> Result { + let label = utf8_array_from_raw_parts("label", raw_parts)?; + + let data = primitive_array_view_from_raw_parts::( + "data", raw_parts, + )?; + + let confidence = primitive_array_view_from_raw_parts::( + "confidence", + raw_parts, + )?; + + let encoding = + Encoding::from_string(utf8_singleton_from_raw_parts("encoding", raw_parts)?)?; + + Ok(Self { + data: Cow::from(data), + confidence: Cow::from(confidence), + label, + encoding, + }) + } + + pub fn from_arrow(array_data: arrow::array::ArrayData) -> Result { + Self::from_raw_parts(Self::raw_parts(array_data)?) + } + + pub fn into_arrow(self) -> Result { + use arrow::array::Array; + + let data: arrow::array::ArrayRef = + Arc::new(arrow::array::Float32Array::from(self.data.into_owned())); + + let confidence: arrow::array::ArrayRef = Arc::new(arrow::array::Float32Array::from( + self.confidence.into_owned(), + )); -impl BBox { - fn convert_bbox_details_into_arrow(bbox: BBox) -> Result>> { - let data = Arc::new(arrow::array::Float32Array::from(bbox.data)); - let confidence = Arc::new(arrow::array::Float32Array::from(bbox.confidence)); - let label = Arc::new(arrow::array::StringArray::from(bbox.label)); - let encoding = Arc::new(arrow::array::StringArray::from(vec![ - bbox.encoding + let label: arrow::array::ArrayRef = Arc::new(arrow::array::StringArray::from(self.label)); + let encoding: arrow::array::ArrayRef = Arc::new(arrow::array::StringArray::from(vec![ + self.encoding .to_string(); 1 ])); - Ok(vec![data, confidence, label, encoding]) - } + let children = vec![data, confidence, label, encoding]; - /// Converts a `BBox` instance into an Arrow `UnionArray`. - /// - /// This function takes a `BBox` and converts it into an Arrow `UnionArray`, which contains - /// the fields `data`, `confidence`, `label`, and `encoding` as different children arrays - /// within the union. - /// - /// # Returns - /// - /// A `Result` containing the constructed `arrow::array::UnionArray` if successful, or an error otherwise. - /// - /// # Errors - /// - /// Returns an error if the `UnionArray` construction fails due to any issue with the `BBox` fields - /// or the conversion process. - /// - /// # Example - /// - /// ``` - /// use fastformat::bbox::BBox; - /// - /// let flat_bbox = vec![1.0, 1.0, 2.0, 2.0]; - /// let confidence = vec![0.98]; - /// let label = vec!["cat".to_string()]; - /// let xyxy_bbox = BBox::new_xyxy(flat_bbox, confidence, label).unwrap(); - /// - /// let arrow_union = xyxy_bbox.into_arrow().unwrap(); - /// ``` - pub fn into_arrow(self) -> Result { let type_ids = [].into_iter().collect::>(); let offsets = [].into_iter().collect::>(); @@ -62,7 +150,7 @@ impl BBox { ) } - let union_fields = [ + let union_fields = vec![ union_field(0, "data", arrow::datatypes::DataType::Float32, false), union_field(1, "confidence", arrow::datatypes::DataType::Float32, false), union_field(2, "label", arrow::datatypes::DataType::Utf8, false), @@ -71,68 +159,11 @@ impl BBox { .into_iter() .collect::(); - let children = Self::convert_bbox_details_into_arrow(self)?; - - arrow::array::UnionArray::try_new(union_fields, type_ids, Some(offsets), children) - .wrap_err("Failed to create UnionArray with BBox data.") - } - - /// Creates a `BBox` instance from an Arrow `UnionArray`. - /// - /// This function takes an Arrow `UnionArray`, extracts the `BBox` fields (`data`, `confidence`, - /// `label`, and `encoding`), and uses them to create a new `BBox` instance. - /// - /// # Arguments - /// - /// * `array` - An `arrow::array::UnionArray` containing the `BBox` data. - /// - /// # Returns - /// - /// A `Result` containing the constructed `BBox` if successful, or an error otherwise. - /// - /// # Errors - /// - /// Returns an error if any field is missing or if there is an issue during the conversion. - /// - /// # Example - /// - /// ``` - /// use fastformat::bbox::BBox; - /// - /// let flat_bbox = vec![1.0, 1.0, 2.0, 2.0]; - /// let confidence = vec![0.98]; - /// let label = vec!["cat".to_string()]; - /// let xyxy_bbox = BBox::new_xyxy(flat_bbox, confidence, label).unwrap(); - /// - /// let arrow_union = xyxy_bbox.into_arrow().unwrap(); - /// - /// let new_bbox = BBox::from_arrow(arrow_union).unwrap(); - /// ``` - pub fn from_arrow(array: arrow::array::UnionArray) -> Result { - let mut map = arrow_union_into_map(array)?; - - let data = - get_primitive_array_from_map::("data", &mut map)?; - let confidence = get_primitive_array_from_map::( - "confidence", - &mut map, - )?; - let label = get_utf8_array_from_map("label", &mut map)?; - let encoding = Encoding::from_string( - get_utf8_array_from_map("encoding", &mut map)? - .first() - .cloned() - .wrap_err(Report::msg( - "encoding field must contains at least 1 value!", - ))?, - )?; - - Ok(BBox { - data, - confidence, - label, - encoding, - }) + Ok( + arrow::array::UnionArray::try_new(union_fields, type_ids, Some(offsets), children) + .wrap_err("Failed to create UnionArray with Image data.")? + .into_data(), + ) } } diff --git a/src/bbox/xywh.rs b/src/bbox/xywh.rs index 7e771a8..12f1aa6 100644 --- a/src/bbox/xywh.rs +++ b/src/bbox/xywh.rs @@ -1,9 +1,11 @@ +use std::borrow::Cow; + use super::{ encoding::Encoding, BBox, BBoxArrayResult, BBoxArrayViewMutResult, BBoxArrayViewResult, }; use eyre::{Context, Report, Result}; -impl BBox { +impl BBox<'_> { pub fn new_xywh(data: Vec, confidence: Vec, label: Vec) -> Result { if confidence.len() != label.len() || confidence.len() * 4 != data.len() @@ -15,8 +17,8 @@ impl BBox { } Ok(BBox { - data, - confidence, + data: Cow::from(data), + confidence: Cow::from(confidence), label, encoding: Encoding::XYWH, }) @@ -37,8 +39,8 @@ impl BBox { pub fn xywh_into_ndarray(self) -> Result { match self.encoding { Encoding::XYWH => Ok(( - ndarray::Array::from_vec(self.data), - ndarray::Array::from_vec(self.confidence), + ndarray::Array::from_vec(self.data.into_owned()), + ndarray::Array::from_vec(self.confidence.into_owned()), ndarray::Array::from_vec(self.label), )), _ => Err(Report::msg("BBox is not in XYWH format")), @@ -65,11 +67,13 @@ impl BBox { pub fn xywh_into_ndarray_view_mut(&mut self) -> Result { match self.encoding { Encoding::XYWH => { - let data = ndarray::ArrayViewMut::from_shape(self.data.len(), &mut self.data) + let data = ndarray::ArrayViewMut::from_shape(self.data.len(), self.data.to_mut()) .wrap_err("Failed to reshape data into ndarray")?; - let confidence = - ndarray::ArrayViewMut::from_shape(self.confidence.len(), &mut self.confidence) - .wrap_err("Failed to reshape data into ndarray")?; + let confidence = ndarray::ArrayViewMut::from_shape( + self.confidence.len(), + self.confidence.to_mut(), + ) + .wrap_err("Failed to reshape data into ndarray")?; let label = ndarray::ArrayViewMut::from_shape(self.label.len(), &mut self.label) .wrap_err("Failed to reshape data into ndarray")?; diff --git a/src/bbox/xyxy.rs b/src/bbox/xyxy.rs index 08d8726..0edce27 100644 --- a/src/bbox/xyxy.rs +++ b/src/bbox/xyxy.rs @@ -1,9 +1,11 @@ +use std::borrow::Cow; + use super::{ encoding::Encoding, BBox, BBoxArrayResult, BBoxArrayViewMutResult, BBoxArrayViewResult, }; use eyre::{Context, Report, Result}; -impl BBox { +impl BBox<'_> { pub fn new_xyxy(data: Vec, confidence: Vec, label: Vec) -> Result { if confidence.len() != label.len() || confidence.len() * 4 != data.len() { return Err(Report::msg( @@ -12,8 +14,8 @@ impl BBox { } Ok(BBox { - data, - confidence, + data: Cow::from(data), + confidence: Cow::from(confidence), label, encoding: Encoding::XYXY, }) @@ -34,8 +36,8 @@ impl BBox { pub fn xyxy_into_ndarray(self) -> Result { match self.encoding { Encoding::XYXY => Ok(( - ndarray::Array::from_vec(self.data), - ndarray::Array::from_vec(self.confidence), + ndarray::Array::from_vec(self.data.into_owned()), + ndarray::Array::from_vec(self.confidence.into_owned()), ndarray::Array::from_vec(self.label), )), _ => Err(Report::msg("BBox is not in XYXY format")), @@ -62,11 +64,13 @@ impl BBox { pub fn xyxy_into_ndarray_view_mut(&mut self) -> Result { match self.encoding { Encoding::XYXY => { - let data = ndarray::ArrayViewMut::from_shape(self.data.len(), &mut self.data) + let data = ndarray::ArrayViewMut::from_shape(self.data.len(), self.data.to_mut()) .wrap_err("Failed to reshape data into ndarray")?; - let confidence = - ndarray::ArrayViewMut::from_shape(self.confidence.len(), &mut self.confidence) - .wrap_err("Failed to reshape data into ndarray")?; + let confidence = ndarray::ArrayViewMut::from_shape( + self.confidence.len(), + self.confidence.to_mut(), + ) + .wrap_err("Failed to reshape data into ndarray")?; let label = ndarray::ArrayViewMut::from_shape(self.label.len(), &mut self.label) .wrap_err("Failed to reshape data into ndarray")?; diff --git a/src/image.rs b/src/image.rs index 23e4422..1a594bb 100644 --- a/src/image.rs +++ b/src/image.rs @@ -1,6 +1,6 @@ use eyre::{Report, Result}; -use container::DataContainer; +use data::ImageData; use encoding::Encoding; mod bgr8; @@ -8,12 +8,12 @@ mod gray8; mod rgb8; mod arrow; -mod container; +mod data; mod encoding; #[derive(Debug)] -pub struct Image { - pub data: DataContainer, +pub struct Image<'a> { + pub data: ImageData<'a>, pub width: u32, pub height: u32, @@ -23,7 +23,7 @@ pub struct Image { pub name: Option, } -impl Image { +impl Image<'_> { pub fn as_ptr(&self) -> *const u8 { self.data.as_ptr() } @@ -36,9 +36,8 @@ impl Image { for i in (0..data.len()).step_by(3) { data.swap(i, i + 2); } - Ok(Image { - data: DataContainer::from_u8(data), + data: ImageData::from_vec_u8(data), width: self.width, height: self.height, encoding: Encoding::RGB8, @@ -60,7 +59,7 @@ impl Image { } Ok(Image { - data: DataContainer::from_u8(data), + data: ImageData::from_vec_u8(data), width: self.width, height: self.height, encoding: Encoding::BGR8, diff --git a/src/image/arrow.rs b/src/image/arrow.rs index 34915f9..9d293d1 100644 --- a/src/image/arrow.rs +++ b/src/image/arrow.rs @@ -1,102 +1,107 @@ -use crate::arrow::{arrow_union_into_map, get_primitive_array_from_map, get_utf8_array_from_map}; - -use super::{container::DataContainer, encoding::Encoding, Image}; +use super::{data::ImageData, encoding::Encoding, Image}; +use arrow::array::Array; use eyre::{Context, ContextCompat, Report, Result}; +use std::collections::HashMap; + use std::sync::Arc; -impl Image { - /// Constructs an `Image` from an Arrow `UnionArray`. - /// - /// This function takes an Arrow `UnionArray` and extracts the necessary fields to construct - /// an `Image` object. It validates the data type of the `UnionArray`, builds a lookup table for - /// the fields, retrieves the image properties (width, height, encoding, name), and decodes the - /// pixel data based on the encoding. - /// - /// # Arguments - /// - /// * `array` - A reference to an `arrow::array::UnionArray` that contains the image data. - /// - /// # Returns - /// - /// A `Result` containing the constructed `Image` if successful, or an error otherwise. - /// - /// # Errors - /// - /// Returns an error if the `UnionArray` has an invalid data type, if required fields are missing, - /// or if the pixel data cannot be downcasted to the expected type based on the encoding. - /// - /// # Example - /// - /// ``` - /// use fastformat::image::Image; - /// - /// let data = vec![0; 27]; // 3x3 image with 3 bytes per pixel - /// let image = Image::new_bgr8(data, 3, 3, None).unwrap(); - /// let array = image.into_arrow().unwrap(); - /// - /// let image = Image::from_arrow(array).unwrap(); - /// ``` - pub fn from_arrow(array: arrow::array::UnionArray) -> Result { - let mut map = arrow_union_into_map(array)?; - - let width = - get_primitive_array_from_map::("width", &mut map)? - .first() - .cloned() - .wrap_err(Report::msg("width field must contains at least 1 value!"))?; - - let height = - get_primitive_array_from_map::("height", &mut map)? - .first() - .cloned() - .wrap_err(Report::msg("height field must contains at least 1 value!"))?; - - let encoding = Encoding::from_string( - get_utf8_array_from_map("encoding", &mut map)? - .first() - .cloned() - .wrap_err(Report::msg( - "encoding field must contains at least 1 value!", - ))?, - )?; +use crate::arrow::{ + array_data_to_map, primitive_array_from_raw_parts, primitive_array_view_from_raw_parts, + primitive_buffer_from_map, primitive_singleton_from_raw_parts, utf8_buffer_from_map, + utf8_singleton_from_raw_parts, +}; + +impl<'a> Image<'a> { + pub fn raw_parts( + array_data: arrow::array::ArrayData, + ) -> Result< + HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, + > { + let mut map = array_data_to_map(array_data)?; - let name = get_utf8_array_from_map("name", &mut map)? - .first() - .cloned() - .wrap_err(Report::msg("name field must contains at least 1 value!"))?; + let mut result = HashMap::new(); - let name = match name.as_str() { - "" => None, - _ => Some(name), - }; + result.insert( + "width".to_string(), + primitive_buffer_from_map::("width", &mut map)?, + ); + + result.insert( + "height".to_string(), + primitive_buffer_from_map::("height", &mut map)?, + ); + result.insert( + "encoding".to_string(), + utf8_buffer_from_map("encoding", &mut map)?, + ); + + result.insert("name".to_string(), utf8_buffer_from_map("name", &mut map)?); + + let encoding = Encoding::from_string(utf8_singleton_from_raw_parts("encoding", &result)?)?; let data = match encoding { Encoding::RGB8 => { - let data = get_primitive_array_from_map::( - "data", &mut map, - )?; - - DataContainer::from_u8(data) + primitive_buffer_from_map::("data", &mut map)? } Encoding::BGR8 => { - let data = get_primitive_array_from_map::( - "data", &mut map, - )?; - - DataContainer::from_u8(data) + primitive_buffer_from_map::("data", &mut map)? } Encoding::GRAY8 => { - let data = get_primitive_array_from_map::( - "data", &mut map, - )?; - - DataContainer::from_u8(data) + primitive_buffer_from_map::("data", &mut map)? } }; - Ok(Image { - data, + result.insert("data".to_string(), data); + + Ok(result) + } + + pub fn from_raw_parts( + mut raw_parts: HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, + ) -> Result { + let width = primitive_singleton_from_raw_parts::( + "width", &raw_parts, + )?; + + let height = primitive_singleton_from_raw_parts::( + "height", &raw_parts, + )?; + + let encoding = + Encoding::from_string(utf8_singleton_from_raw_parts("encoding", &raw_parts)?)?; + + let name = Some(utf8_singleton_from_raw_parts("name", &raw_parts)?); + + let data = match encoding { + Encoding::RGB8 => primitive_array_from_raw_parts::( + "data", + &mut raw_parts, + )?, + Encoding::BGR8 => primitive_array_from_raw_parts::( + "data", + &mut raw_parts, + )?, + Encoding::GRAY8 => primitive_array_from_raw_parts::( + "data", + &mut raw_parts, + )?, + }; + + Ok(Self { + data: ImageData::from_vec_u8(data), width, height, encoding, @@ -104,58 +109,72 @@ impl Image { }) } - fn convert_image_details_into_arrow(image: Image) -> Result>> { - let width = Arc::new(arrow::array::UInt32Array::from(vec![image.width; 1])); - let height = Arc::new(arrow::array::UInt32Array::from(vec![image.height; 1])); + pub fn view_from_raw_parts( + raw_parts: &'a mut HashMap< + String, + ( + arrow::buffer::Buffer, + Option>, + ), + >, + ) -> Result { + let width = primitive_singleton_from_raw_parts::( + "width", &raw_parts, + )?; + + let height = primitive_singleton_from_raw_parts::( + "height", &raw_parts, + )?; + + let encoding = + Encoding::from_string(utf8_singleton_from_raw_parts("encoding", &raw_parts)?)?; + + let name = Some(utf8_singleton_from_raw_parts("name", &raw_parts)?); + + let data = match encoding { + Encoding::RGB8 => primitive_array_view_from_raw_parts::( + "data", raw_parts, + )?, + Encoding::BGR8 => primitive_array_view_from_raw_parts::( + "data", raw_parts, + )?, + Encoding::GRAY8 => primitive_array_view_from_raw_parts::( + "data", raw_parts, + )?, + }; + + Ok(Self { + data: ImageData::from_slice_u8(data), + width, + height, + encoding, + name, + }) + } + + pub fn from_arrow(array_data: arrow::array::ArrayData) -> Result { + Self::from_raw_parts(Self::raw_parts(array_data)?) + } + + pub fn into_arrow(self) -> Result { + let width = Arc::new(arrow::array::UInt32Array::from(vec![self.width; 1])); + let height = Arc::new(arrow::array::UInt32Array::from(vec![self.height; 1])); let encoding = Arc::new(arrow::array::StringArray::from(vec![ - image - .encoding + self.encoding .to_string(); 1 ])); - let name = Arc::new(arrow::array::StringArray::from(vec![image.name.clone(); 1])); + let name = Arc::new(arrow::array::StringArray::from(vec![self.name.clone(); 1])); - let data: Arc = match image.encoding { - Encoding::RGB8 => Arc::new(arrow::array::UInt8Array::from(image.data.into_u8()?)), - Encoding::BGR8 => Arc::new(arrow::array::UInt8Array::from(image.data.into_u8()?)), - Encoding::GRAY8 => Arc::new(arrow::array::UInt8Array::from(image.data.into_u8()?)), + let data: Arc = match self.encoding { + Encoding::RGB8 => Arc::new(arrow::array::UInt8Array::from(self.data.into_u8()?)), + Encoding::BGR8 => Arc::new(arrow::array::UInt8Array::from(self.data.into_u8()?)), + Encoding::GRAY8 => Arc::new(arrow::array::UInt8Array::from(self.data.into_u8()?)), }; - Ok(vec![data, width, height, encoding, name]) - } - - /// Converts an `Image` into an Arrow `UnionArray`. - /// - /// This function takes an `Image` object and converts it into an Arrow `UnionArray` - /// that contains the image properties and pixel data. The conversion handles different - /// image encodings (BGR8, RGB8, GRAY8) and ensures that the resulting `UnionArray` - /// contains all necessary fields. - /// - /// # Arguments - /// - /// * `self` - The `Image` object to be converted. - /// - /// # Returns - /// - /// A `Result` containing the constructed `arrow::array::UnionArray` if successful, or an error otherwise. - /// - /// # Errors - /// - /// Returns an error if the `UnionArray` cannot be created due to issues with the provided data. - /// - /// # Example - /// - /// ``` - /// use fastformat::image::Image; - /// - /// let data = vec![0; 640 * 480 * 3]; - /// let image = Image::new_bgr8(data, 640, 480, None).unwrap(); - /// - /// let arrow_array = image.into_arrow().unwrap(); - /// ``` - pub fn into_arrow(self) -> Result { + let children = vec![data, width, height, encoding, name]; let type_ids = [].into_iter().collect::>(); let offsets = [].into_iter().collect::>(); @@ -187,10 +206,11 @@ impl Image { .into_iter() .collect::(); - let children = Self::convert_image_details_into_arrow(self)?; - - arrow::array::UnionArray::try_new(union_fields, type_ids, Some(offsets), children) - .wrap_err("Failed to create UnionArray with Image data.") + Ok( + arrow::array::UnionArray::try_new(union_fields, type_ids, Some(offsets), children) + .wrap_err("Failed to create UnionArray with Image data.")? + .into_data(), + ) } } @@ -207,6 +227,8 @@ mod tests { let arrow_image = bgr8_image.into_arrow().unwrap(); + println!("{:?}", arrow_image); + let new_image = Image::from_arrow(arrow_image).unwrap(); let final_image_buffer = new_image.as_ptr(); diff --git a/src/image/bgr8.rs b/src/image/bgr8.rs index 2c1720b..ed00087 100644 --- a/src/image/bgr8.rs +++ b/src/image/bgr8.rs @@ -1,7 +1,7 @@ -use super::{container::DataContainer, encoding::Encoding, Image}; +use super::{data::ImageData, encoding::Encoding, Image}; use eyre::{Context, Report, Result}; -impl Image { +impl Image<'_> { /// Creates a new `Image` in BGR8 format. /// /// This function constructs a new `Image` object with the given pixel data, width, height, @@ -40,7 +40,7 @@ impl Image { } Ok(Image { - data: DataContainer::from_u8(data), + data: ImageData::from_vec_u8(data), width, height, encoding: Encoding::BGR8, diff --git a/src/image/container.rs b/src/image/container.rs deleted file mode 100644 index d05dd91..0000000 --- a/src/image/container.rs +++ /dev/null @@ -1,36 +0,0 @@ -use eyre::Result; - -#[derive(Debug)] -pub enum DataContainer { - U8Data(Vec), -} - -impl DataContainer { - pub fn as_ptr(&self) -> *const u8 { - match self { - Self::U8Data(data) => data.as_ptr(), - } - } - - pub fn into_u8(self) -> Result> { - match self { - Self::U8Data(data) => Ok(data), - } - } - - pub fn as_u8(&self) -> Result<&Vec> { - match self { - Self::U8Data(data) => Ok(data), - } - } - - pub fn as_mut_u8(&mut self) -> Result<&mut Vec> { - match self { - Self::U8Data(data) => Ok(data), - } - } - - pub fn from_u8(data: Vec) -> Self { - Self::U8Data(data) - } -} diff --git a/src/image/data.rs b/src/image/data.rs new file mode 100644 index 0000000..2aebb8c --- /dev/null +++ b/src/image/data.rs @@ -0,0 +1,109 @@ +use eyre::Result; + +use std::borrow::Cow; + +#[derive(Debug)] +pub enum ImageData<'a> { + U8Data(Cow<'a, [u8]>), + U16Data(Cow<'a, [u16]>), + F32Data(Cow<'a, [f32]>), +} + +impl ImageData<'_> { + pub fn as_ptr(&self) -> *const u8 { + match self { + Self::U8Data(data) => data.as_ptr() as *const u8, + Self::U16Data(data) => data.as_ptr() as *const u8, + Self::F32Data(data) => data.as_ptr() as *const u8, + } + } + + pub fn into_u8(self) -> Result> { + match self { + Self::U8Data(data) => Ok(data.into_owned()), + _ => Err(eyre::Report::msg("Can't convert data to u8")), + } + } + + pub fn into_u16(self) -> Result> { + match self { + Self::U16Data(data) => Ok(data.into_owned()), + _ => Err(eyre::Report::msg("Can't convert data to u16")), + } + } + + pub fn into_f32(self) -> Result> { + match self { + Self::F32Data(data) => Ok(data.into_owned()), + _ => Err(eyre::Report::msg("Can't convert data to f32")), + } + } + + pub fn as_u8(&self) -> Result<&[u8]> { + match self { + Self::U8Data(data) => Ok(data), + _ => Err(eyre::Report::msg("Can't convert data to u8")), + } + } + + pub fn as_u16(&self) -> Result<&[u16]> { + match self { + Self::U16Data(data) => Ok(data), + _ => Err(eyre::Report::msg("Can't convert data to u16")), + } + } + + pub fn as_f32(&self) -> Result<&[f32]> { + match self { + Self::F32Data(data) => Ok(data), + _ => Err(eyre::Report::msg("Can't convert data to f32")), + } + } + + pub fn as_mut_u8(&mut self) -> Result<&mut Vec> { + match self { + Self::U8Data(data) => Ok(data.to_mut()), + _ => Err(eyre::Report::msg("Can't convert data to u8")), + } + } + + pub fn as_mut_u16(&mut self) -> Result<&mut Vec> { + match self { + Self::U16Data(data) => Ok(data.to_mut()), + _ => Err(eyre::Report::msg("Can't convert data to 16")), + } + } + + pub fn as_mut_f32(&mut self) -> Result<&mut Vec> { + match self { + Self::F32Data(data) => Ok(data.to_mut()), + _ => Err(eyre::Report::msg("Can't convert data to f32")), + } + } + + pub fn from_vec_u8(data: Vec) -> Self { + Self::U8Data(Cow::from(data)) + } + + pub fn from_vec_u16(data: Vec) -> Self { + Self::U16Data(Cow::from(data)) + } + + pub fn from_vec_f32(data: Vec) -> Self { + Self::F32Data(Cow::from(data)) + } +} + +impl<'a> ImageData<'a> { + pub fn from_slice_u8(data: &'a [u8]) -> Self { + Self::U8Data(Cow::from(data)) + } + + pub fn from_slice_u16(data: &'a [u16]) -> Self { + Self::U16Data(Cow::from(data)) + } + + pub fn from_slice_f32(data: &'a [f32]) -> Self { + Self::F32Data(Cow::from(data)) + } +} diff --git a/src/image/gray8.rs b/src/image/gray8.rs index 0574caf..0ac1966 100644 --- a/src/image/gray8.rs +++ b/src/image/gray8.rs @@ -1,7 +1,7 @@ -use super::{container::DataContainer, encoding::Encoding, Image}; +use super::{data::ImageData, encoding::Encoding, Image}; use eyre::{Context, Report, Result}; -impl Image { +impl Image<'_> { /// Creates a new `Image` in Gray8 format. /// /// This function constructs a new `Image` object with the given pixel data, width, height, @@ -38,7 +38,7 @@ impl Image { } Ok(Image { - data: DataContainer::from_u8(data), + data: ImageData::from_vec_u8(data), width, height, encoding: Encoding::GRAY8, diff --git a/src/image/rgb8.rs b/src/image/rgb8.rs index 0da032d..5a07d80 100644 --- a/src/image/rgb8.rs +++ b/src/image/rgb8.rs @@ -1,7 +1,7 @@ -use super::{container::DataContainer, encoding::Encoding, Image}; +use super::{data::ImageData, encoding::Encoding, Image}; use eyre::{Context, Report, Result}; -impl Image { +impl Image<'_> { /// Creates a new `Image` in RGB8 format. /// /// This function constructs a new `Image` object with the given pixel data, width, height, @@ -38,7 +38,7 @@ impl Image { } Ok(Image { - data: DataContainer::from_u8(data), + data: ImageData::from_vec_u8(data), width, height, encoding: Encoding::RGB8, diff --git a/src/lib.rs b/src/lib.rs index 0f471c1..28d508b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,11 @@ -use pyo3::prelude::*; +// use pyo3::prelude::*; -pub mod arrow; +mod arrow; pub mod bbox; pub mod image; +/* /// Formats the sum of two numbers as string. #[pyfunction] fn sum_as_string(a: usize, b: usize) -> PyResult { @@ -17,3 +18,4 @@ fn fastformat(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_function(wrap_pyfunction!(sum_as_string, m)?)?; Ok(()) } +*/ From 083455c1ff17f9964231b0fd0847ec6842f5c9ca Mon Sep 17 00:00:00 2001 From: Hennzau Date: Wed, 14 Aug 2024 22:54:55 +0200 Subject: [PATCH 2/7] it works and it looks good --- Cargo.lock | 165 +++++++- Cargo.toml | 2 +- examples/dummy-opencv-capture/main.rs | 2 +- src/arrow.rs | 557 +++++++++++++++++--------- src/bbox/arrow.rs | 200 +++------ src/image.rs | 4 - src/image/arrow.rs | 293 ++++++-------- src/image/bgr8.rs | 8 +- src/image/data.rs | 12 +- src/image/gray8.rs | 8 +- src/image/rgb8.rs | 8 +- src/lib.rs | 4 +- 12 files changed, 740 insertions(+), 523 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2cba840..e3c7a07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -281,6 +281,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + [[package]] name = "bumpalo" version = "3.16.0" @@ -393,6 +399,7 @@ dependencies = [ "arrow", "eyre", "ndarray", + "pyo3", ] [[package]] @@ -401,7 +408,7 @@ version = "24.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f" dependencies = [ - "bitflags", + "bitflags 1.3.2", "rustc_version", ] @@ -433,6 +440,12 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -472,6 +485,12 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + [[package]] name = "itoa" version = "1.0.11" @@ -569,6 +588,16 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +[[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" @@ -591,6 +620,15 @@ 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 = "ndarray" version = "0.15.6" @@ -684,6 +722,35 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[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 = "portable-atomic" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + [[package]] name = "proc-macro2" version = "1.0.86" @@ -693,6 +760,69 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pyo3" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "parking_lot", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + [[package]] name = "quote" version = "1.0.36" @@ -708,6 +838,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "regex" version = "1.10.6" @@ -752,6 +891,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "semver" version = "1.0.23" @@ -790,6 +935,12 @@ dependencies = [ "serde", ] +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + [[package]] name = "static_assertions" version = "1.1.0" @@ -807,6 +958,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -822,6 +979,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unindent" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" + [[package]] name = "version_check" version = "0.9.5" diff --git a/Cargo.toml b/Cargo.toml index 7967c85..fbf00ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ name = "fastformat" crate-type = ["cdylib", "lib"] [dependencies] -# pyo3 = "0.21.1" +pyo3 = "0.21.1" ndarray = "0.15.4" arrow = "52.1.0" eyre = "0.6.12" diff --git a/examples/dummy-opencv-capture/main.rs b/examples/dummy-opencv-capture/main.rs index f069c9e..fc55b8a 100644 --- a/examples/dummy-opencv-capture/main.rs +++ b/examples/dummy-opencv-capture/main.rs @@ -29,7 +29,7 @@ fn send_output(arrow_array: arrow::array::ArrayData) { println!( "Sending an image to dataflow. Image address is: {:?}", - image.as_ptr() + image.data.as_ptr() ); } diff --git a/src/arrow.rs b/src/arrow.rs index a2452af..a8bf0d6 100644 --- a/src/arrow.rs +++ b/src/arrow.rs @@ -1,199 +1,396 @@ use arrow::array::Array; use eyre::{Context, OptionExt, Report, Result}; -use std::collections::HashMap; +use std::{collections::HashMap, sync::Arc}; -pub fn array_data_to_map( - array_data: arrow::array::ArrayData, -) -> Result> { - let array = arrow::array::UnionArray::from(array_data); +pub struct RawData { + buffers: HashMap, + offset_buffers: HashMap>, - let mut result = HashMap::new(); + array_data: HashMap, +} + +pub struct UnionBuilder { + union_children: Vec, + union_fields: Vec<(i8, arrow::datatypes::FieldRef)>, +} + +impl RawData { + pub fn new(array_data: arrow::array::ArrayData) -> Result { + let array = arrow::array::UnionArray::from(array_data); + + let mut result = HashMap::new(); + + let (union_fields, _, _, children) = array.into_parts(); - let (union_fields, _, _, children) = array.into_parts(); + for (a, b) in union_fields.iter() { + let child = children + .get(a as usize) + .ok_or_eyre(Report::msg( + format!( + "Invalid union array field {}'s index (= {}). Must be >= 0 and correspond to children index in the array", + b, a + ), + ))? + .clone() + .into_data(); - for (a, b) in union_fields.iter() { - let child = children - .get(a as usize) - .ok_or_eyre(Report::msg( - format!( - "Invalid union array field {}'s index (= {}). Must be >= 0 and correspond to children index in the array", - b, a - ), - ))? - .clone() - .into_data(); + result.insert(b.name().to_string(), child); + } - result.insert(b.name().to_string(), child); + Ok(Self { + buffers: HashMap::new(), + offset_buffers: HashMap::new(), + array_data: result, + }) } - Ok(result) -} + pub fn load_primitive( + self, + field: &str, + ) -> Result { + let mut array_data = self.array_data; + let mut buffers = self.buffers; + let offset_buffers = self.offset_buffers; -pub fn primitive_buffer_from_map( - field: &str, - map: &mut HashMap, -) -> Result<( - arrow::buffer::Buffer, - Option>, -)> { - let array_data = map.remove(field).ok_or_eyre(Report::msg(format!( - "Invalid field {} for this map of data", - field - )))?; - - let array = arrow::array::PrimitiveArray::::from(array_data); - let (_, buffer, _) = array.into_parts(); - - Ok((buffer.into_inner(), None)) -} + let data = array_data.remove(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; -pub fn utf8_buffer_from_map( - field: &str, - map: &mut HashMap, -) -> Result<( - arrow::buffer::Buffer, - Option>, -)> { - let array_data = map.remove(field).ok_or_eyre(Report::msg(format!( - "Invalid field {} for this map of data", - field - )))?; - - let array = arrow::array::StringArray::from(array_data); - let (offset, buffer, _) = array.into_parts(); - - Ok((buffer, Some(offset))) -} + let array = arrow::array::PrimitiveArray::::from(data); + let (_, buffer, _) = array.into_parts(); -pub fn primitive_singleton_from_raw_parts( - field: &str, - raw_parts: &HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, -) -> Result { - let (buffer, _) = raw_parts.get(field).ok_or_eyre(Report::msg(format!( - "Invalid field {} for this map of data", - field - )))?; - - let slice = buffer.typed_data::(); - - slice - .first() - .cloned() - .ok_or_eyre(Report::msg(format!("Field {} is empty", field))) -} + buffers.insert(field.to_string(), buffer.into_inner()); -pub fn utf8_singleton_from_raw_parts( - field: &str, - raw_parts: &HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, -) -> Result { - let (buffer, offset_buffer) = raw_parts.get(field).ok_or_eyre(Report::msg(format!( - "Invalid field {} for this map of data", - field - )))?; - - let offset = offset_buffer.clone().ok_or_eyre(Report::msg(format!( - "No offset associated with field {}", - field - )))?; - - let slice = buffer.as_slice(); - let mut iterator = offset.iter(); - iterator.next(); - - let last_offset = iterator.next().cloned().ok_or_eyre(Report::msg(format!( - "No offset associated with field {}", - field - )))? as usize; - - let slice = &slice[0..last_offset]; - - String::from_utf8(slice.to_vec()).wrap_err(Report::msg("Invalid UTF-8 string")) -} + Ok(Self { + buffers, + offset_buffers, + array_data, + }) + } + + pub fn load_utf(self, field: &str) -> Result { + let mut array_data = self.array_data; + let mut buffers = self.buffers; + let mut offset_buffers = self.offset_buffers; + + let data = array_data.remove(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let array = arrow::array::StringArray::from(data); + let (offset_buffer, buffer, _) = array.into_parts(); + + buffers.insert(field.to_string(), buffer); + offset_buffers.insert(field.to_string(), offset_buffer); -pub fn primitive_array_from_raw_parts( - field: &str, - raw_parts: &mut HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, -) -> Result> { - let (buffer, _) = raw_parts.remove(field).ok_or_eyre(Report::msg(format!( - "Invalid field {} for this map.", - field - )))?; - - match buffer.into_vec::() { - Ok(vec) => Ok(vec), - Err(_) => Err(Report::msg("Invalid type for this buffer")), + Ok(Self { + buffers, + offset_buffers, + array_data, + }) + } + + pub fn utf8_singleton(&self, field: &str) -> Result { + let buffer = self.buffers.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let offset_buffer = self + .offset_buffers + .get(field) + .ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let slice = buffer.as_slice(); + let mut iterator = offset_buffer.iter(); + iterator.next(); + + let last_offset = iterator.next().cloned().ok_or_eyre(Report::msg(format!( + "No offset associated with field {}", + field + )))? as usize; + + let slice = &slice[0..last_offset]; + + String::from_utf8(slice.to_vec()).wrap_err(Report::msg("Invalid UTF-8 string")) + } + + pub fn utf16_singleton(&self, field: &str) -> Result { + let buffer = self.buffers.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let offset_buffer = self + .offset_buffers + .get(field) + .ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let slice = buffer.typed_data::(); + let mut iterator = offset_buffer.iter(); + iterator.next(); + + let last_offset = iterator.next().cloned().ok_or_eyre(Report::msg(format!( + "No offset associated with field {}", + field + )))? as usize; + + let slice = &slice[0..last_offset]; + + String::from_utf16(slice).wrap_err(Report::msg("Invalid UTF-16 string")) + } + + pub fn primitive_singleton( + &self, + field: &str, + ) -> Result { + let buffer = self.buffers.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let slice = buffer.typed_data::(); + + Ok(slice[0]) + } + + pub fn utf8_array(&self, field: &str) -> Result> { + let buffer = self.buffers.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let offset_buffer = self + .offset_buffers + .get(field) + .ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let slice = buffer.as_slice(); + let mut iterator = offset_buffer.iter(); + iterator.next(); + + let mut last_offset = 0; + + iterator + .map(|&offset| { + let offset = offset as usize; + let slice = &slice[last_offset..offset]; + last_offset = offset; + + String::from_utf8(slice.to_vec()) + .wrap_err(Report::msg("Array is not UTF-8 encoded.")) + }) + .collect::>>() } -} -pub fn primitive_array_view_from_raw_parts<'a, T: arrow::datatypes::ArrowPrimitiveType>( - field: &str, - raw_parts: &'a HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, -) -> Result<&'a [T::Native]> { - let (buffer, _) = raw_parts.get(field).ok_or_eyre(Report::msg(format!( - "Invalid field {} for this map.", - field - )))?; - - Ok(buffer.typed_data::()) + pub fn utf16_array(&self, field: &str) -> Result> { + let buffer = self.buffers.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let offset_buffer = self + .offset_buffers + .get(field) + .ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let slice = buffer.typed_data::(); + let mut iterator = offset_buffer.iter(); + iterator.next(); + + let mut last_offset = 0; + + iterator + .map(|&offset| { + let offset = offset as usize; + let slice = &slice[last_offset..offset]; + last_offset = offset; + + String::from_utf16(slice).wrap_err(Report::msg("Array is not UTF-16 encoded.")) + }) + .collect::>>() + } + + pub fn primitive_array_view<'a, T: arrow::datatypes::ArrowPrimitiveType>( + &'a self, + field: &str, + ) -> Result<&'a [T::Native]> { + let buffer = self.buffers.get(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + let slice = buffer.typed_data::(); + + Ok(slice) + } + + pub fn primitive_array( + &mut self, + field: &str, + ) -> Result> { + let buffer = self.buffers.remove(field).ok_or_eyre(Report::msg(format!( + "Invalid field {} for this map of data", + field + )))?; + + match buffer.into_vec::() { + Ok(vec) => Ok(vec), + Err(buffer) => { + self.buffers.insert(field.to_string(), buffer); + + Err(Report::msg("Invalid primitive array type. Or the buffer is shared. If you're not sure that the buffer is owned, use primitive_array_view instead.")) + } + } + } } -pub fn utf8_array_from_raw_parts( - field: &str, - raw_parts: &mut HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, -) -> Result> { - let (buffer, offset_buffer) = raw_parts.remove(field).ok_or_eyre(Report::msg(format!( - "Invalid field {} for this map of data", - field - )))?; - - let offset = offset_buffer.ok_or_eyre(Report::msg(format!( - "No offset associated with field {}", - field - )))?; - - let slice = buffer.as_slice(); - let mut iterator = offset.iter(); - iterator.next(); - - let mut last_offset = 0; - - iterator - .map(|&offset| { - let offset = offset as usize; - let slice = &slice[last_offset..offset]; - last_offset = offset; - - String::from_utf8(slice.to_vec()).wrap_err(Report::msg("Array is not UTF-8 encoded.")) - }) - .collect::>>() +impl UnionBuilder { + pub fn new() -> Self { + Self { + union_children: Vec::new(), + union_fields: Vec::new(), + } + } + + pub fn push_primitive_singleton( + self, + field: &str, + value: T::Native, + data_type: arrow::datatypes::DataType, + nullable: bool, + ) -> Self { + let mut union_children = self.union_children; + let mut union_fields = self.union_fields; + + let index = union_children.len(); + + let data = Arc::new(arrow::array::PrimitiveArray::::from_value(value, 1)); + union_children.push(data); + + let field = ( + index as i8, + Arc::new(arrow::datatypes::Field::new(field, data_type, nullable)), + ); + union_fields.push(field); + + Self { + union_children, + union_fields, + } + } + + pub fn push_primitive_array( + self, + field: &str, + value: Vec, + data_type: arrow::datatypes::DataType, + nullable: bool, + ) -> Self { + let mut union_children = self.union_children; + let mut union_fields = self.union_fields; + + let index = union_children.len(); + + let data = Arc::new(arrow::array::PrimitiveArray::::from_iter_values(value)); + union_children.push(data); + + let field = ( + index as i8, + Arc::new(arrow::datatypes::Field::new(field, data_type, nullable)), + ); + union_fields.push(field); + + Self { + union_children, + union_fields, + } + } + + pub fn push_utf_singleton( + self, + field: &str, + value: String, + data_type: arrow::datatypes::DataType, + nullable: bool, + ) -> Self { + let mut union_children = self.union_children; + let mut union_fields = self.union_fields; + + let index = union_children.len(); + + let data = Arc::new(arrow::array::StringArray::from(vec![value])); + union_children.push(data); + + let field = ( + index as i8, + Arc::new(arrow::datatypes::Field::new(field, data_type, nullable)), + ); + union_fields.push(field); + + Self { + union_children, + union_fields, + } + } + + pub fn push_utf_array( + self, + field: &str, + value: Vec, + data_type: arrow::datatypes::DataType, + nullable: bool, + ) -> Self { + let mut union_children = self.union_children; + let mut union_fields = self.union_fields; + + let index = union_children.len(); + + let data = Arc::new(arrow::array::StringArray::from(value)); + union_children.push(data); + + let field = ( + index as i8, + Arc::new(arrow::datatypes::Field::new(field, data_type, nullable)), + ); + union_fields.push(field); + + Self { + union_children, + union_fields, + } + } + + pub fn into_arrow(self) -> Result { + let type_ids = [].into_iter().collect::>(); + let offsets = [].into_iter().collect::>(); + + let union_fields = self + .union_fields + .into_iter() + .collect::(); + + Ok(arrow::array::UnionArray::try_new( + union_fields, + type_ids, + Some(offsets), + self.union_children, + ) + .wrap_err("Failed to create UnionArray with Image data.")? + .into_data()) + } } diff --git a/src/bbox/arrow.rs b/src/bbox/arrow.rs index 1cdc022..9111de9 100644 --- a/src/bbox/arrow.rs +++ b/src/bbox/arrow.rs @@ -1,169 +1,77 @@ +use std::borrow::Cow; + use super::{encoding::Encoding, BBox}; -use crate::arrow::{ - array_data_to_map, primitive_array_from_raw_parts, primitive_array_view_from_raw_parts, - primitive_buffer_from_map, primitive_singleton_from_raw_parts, utf8_array_from_raw_parts, - utf8_buffer_from_map, utf8_singleton_from_raw_parts, -}; +use crate::arrow::{RawData, UnionBuilder}; -use eyre::{Context, ContextCompat, Report, Result}; - -use std::borrow::Cow; -use std::{collections::HashMap, sync::Arc}; +use eyre::Result; impl<'a> BBox<'a> { - pub fn raw_parts( - array_data: arrow::array::ArrayData, - ) -> Result< - HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, - > { - let mut map = array_data_to_map(array_data)?; - - let mut result = HashMap::new(); - - result.insert( - "data".to_string(), - primitive_buffer_from_map::("data", &mut map)?, - ); - - result.insert( - "confidence".to_string(), - primitive_buffer_from_map::("confidence", &mut map)?, - ); - - result.insert( - "label".to_string(), - utf8_buffer_from_map("label", &mut map)?, - ); - - result.insert( - "encoding".to_string(), - utf8_buffer_from_map("encoding", &mut map)?, - ); - - Ok(result) + pub fn raw_data(array_data: arrow::array::ArrayData) -> Result { + use arrow::datatypes::Float32Type; + + let raw_data = RawData::new(array_data)? + .load_primitive::("data")? + .load_primitive::("confidence")? + .load_utf("label")? + .load_utf("encoding")?; + + Ok(raw_data) } - pub fn from_raw_parts( - mut raw_parts: HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, - ) -> Result { - let data = primitive_array_from_raw_parts::( - "data", - &mut raw_parts, - )?; - - let confidence = primitive_array_from_raw_parts::( - "confidence", - &mut raw_parts, - )?; - - let label = utf8_array_from_raw_parts("label", &mut raw_parts)?; - - let encoding = - Encoding::from_string(utf8_singleton_from_raw_parts("encoding", &raw_parts)?)?; + pub fn from_raw_data(mut raw_data: RawData) -> Result { + use arrow::datatypes::Float32Type; + + let data = raw_data.primitive_array::("data")?; + let confidence = raw_data.primitive_array::("confidence")?; + let label = raw_data.utf8_array("label")?; + let encoding = Encoding::from_string(raw_data.utf8_singleton("encoding")?)?; Ok(Self { - data: Cow::from(data), - confidence: Cow::from(confidence), + data: Cow::Owned(data), + confidence: Cow::Owned(confidence), label, encoding, }) } - pub fn view_from_raw_parts( - raw_parts: &'a mut HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, - ) -> Result { - let label = utf8_array_from_raw_parts("label", raw_parts)?; - - let data = primitive_array_view_from_raw_parts::( - "data", raw_parts, - )?; - - let confidence = primitive_array_view_from_raw_parts::( - "confidence", - raw_parts, - )?; - - let encoding = - Encoding::from_string(utf8_singleton_from_raw_parts("encoding", raw_parts)?)?; + pub fn view_from_raw_data(raw_data: &'a RawData) -> Result { + use arrow::datatypes::Float32Type; + + let data = raw_data.primitive_array_view::("data")?; + let confidence = raw_data.primitive_array_view::("confidence")?; + let label = raw_data.utf8_array("label")?; + let encoding = Encoding::from_string(raw_data.utf8_singleton("encoding")?)?; Ok(Self { - data: Cow::from(data), - confidence: Cow::from(confidence), + data: Cow::Borrowed(data), + confidence: Cow::Borrowed(confidence), label, encoding, }) } pub fn from_arrow(array_data: arrow::array::ArrayData) -> Result { - Self::from_raw_parts(Self::raw_parts(array_data)?) + Self::from_raw_data(Self::raw_data(array_data)?) } pub fn into_arrow(self) -> Result { - use arrow::array::Array; - - let data: arrow::array::ArrayRef = - Arc::new(arrow::array::Float32Array::from(self.data.into_owned())); - - let confidence: arrow::array::ArrayRef = Arc::new(arrow::array::Float32Array::from( - self.confidence.into_owned(), - )); - - let label: arrow::array::ArrayRef = Arc::new(arrow::array::StringArray::from(self.label)); - let encoding: arrow::array::ArrayRef = Arc::new(arrow::array::StringArray::from(vec![ - self.encoding - .to_string(); - 1 - ])); - - let children = vec![data, confidence, label, encoding]; - - let type_ids = [].into_iter().collect::>(); - let offsets = [].into_iter().collect::>(); - - fn union_field( - index: i8, - name: &str, - data_type: arrow::datatypes::DataType, - nullable: bool, - ) -> (i8, Arc) { - ( - index, - Arc::new(arrow::datatypes::Field::new(name, data_type, nullable)), + use arrow::datatypes::{ + DataType::{Float32, Utf8}, + Float32Type, + }; + + let raw_data = UnionBuilder::new() + .push_primitive_array::("data", self.data.into_owned(), Float32, false) + .push_primitive_array::( + "confidence", + self.confidence.into_owned(), + Float32, + false, ) - } - - let union_fields = vec![ - union_field(0, "data", arrow::datatypes::DataType::Float32, false), - union_field(1, "confidence", arrow::datatypes::DataType::Float32, false), - union_field(2, "label", arrow::datatypes::DataType::Utf8, false), - union_field(3, "encoding", arrow::datatypes::DataType::Utf8, false), - ] - .into_iter() - .collect::(); - - Ok( - arrow::array::UnionArray::try_new(union_fields, type_ids, Some(offsets), children) - .wrap_err("Failed to create UnionArray with Image data.")? - .into_data(), - ) + .push_utf_array("label", self.label, Utf8, false) + .push_utf_singleton("encoding", self.encoding.to_string(), Utf8, false); + + raw_data.into_arrow() } } @@ -183,10 +91,14 @@ mod tests { let arrow_bbox = xyxy_bbox.into_arrow().unwrap(); - let new_bbox = BBox::from_arrow(arrow_bbox).unwrap(); - let final_bbox_buffer = new_bbox.data.as_ptr(); + let xyxy_bbox = BBox::from_arrow(arrow_bbox).unwrap(); + let xyxy_bbox_buffer = xyxy_bbox.data.as_ptr(); + + let xywh_bbox = xyxy_bbox.into_xywh().unwrap(); + let xywh_bbox_buffer = xywh_bbox.data.as_ptr(); assert_eq!(original_buffer_address, bbox_buffer_address); - assert_eq!(bbox_buffer_address, final_bbox_buffer); + assert_eq!(bbox_buffer_address, xyxy_bbox_buffer); + assert_eq!(xyxy_bbox_buffer, xywh_bbox_buffer); } } diff --git a/src/image.rs b/src/image.rs index 1a594bb..30e9d4c 100644 --- a/src/image.rs +++ b/src/image.rs @@ -24,10 +24,6 @@ pub struct Image<'a> { } impl Image<'_> { - pub fn as_ptr(&self) -> *const u8 { - self.data.as_ptr() - } - pub fn into_rgb8(self) -> Result { match self.encoding { Encoding::BGR8 => { diff --git a/src/image/arrow.rs b/src/image/arrow.rs index 9d293d1..3add9fb 100644 --- a/src/image/arrow.rs +++ b/src/image/arrow.rs @@ -1,103 +1,41 @@ use super::{data::ImageData, encoding::Encoding, Image}; -use arrow::array::Array; -use eyre::{Context, ContextCompat, Report, Result}; -use std::collections::HashMap; +use eyre::Result; -use std::sync::Arc; - -use crate::arrow::{ - array_data_to_map, primitive_array_from_raw_parts, primitive_array_view_from_raw_parts, - primitive_buffer_from_map, primitive_singleton_from_raw_parts, utf8_buffer_from_map, - utf8_singleton_from_raw_parts, -}; +use crate::arrow::{RawData, UnionBuilder}; impl<'a> Image<'a> { - pub fn raw_parts( - array_data: arrow::array::ArrayData, - ) -> Result< - HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, - > { - let mut map = array_data_to_map(array_data)?; - - let mut result = HashMap::new(); - - result.insert( - "width".to_string(), - primitive_buffer_from_map::("width", &mut map)?, - ); - - result.insert( - "height".to_string(), - primitive_buffer_from_map::("height", &mut map)?, - ); - - result.insert( - "encoding".to_string(), - utf8_buffer_from_map("encoding", &mut map)?, - ); - - result.insert("name".to_string(), utf8_buffer_from_map("name", &mut map)?); - - let encoding = Encoding::from_string(utf8_singleton_from_raw_parts("encoding", &result)?)?; - let data = match encoding { - Encoding::RGB8 => { - primitive_buffer_from_map::("data", &mut map)? - } - Encoding::BGR8 => { - primitive_buffer_from_map::("data", &mut map)? - } - Encoding::GRAY8 => { - primitive_buffer_from_map::("data", &mut map)? - } + pub fn raw_data(array_data: arrow::array::ArrayData) -> Result { + use arrow::datatypes::{UInt32Type, UInt8Type}; + + let raw_data = RawData::new(array_data)? + .load_primitive::("width")? + .load_primitive::("height")? + .load_utf("encoding")? + .load_utf("name")?; + + let encoding = Encoding::from_string(raw_data.utf8_singleton("encoding")?)?; + let raw_data = match encoding { + Encoding::RGB8 => raw_data.load_primitive::("data")?, + Encoding::BGR8 => raw_data.load_primitive::("data")?, + Encoding::GRAY8 => raw_data.load_primitive::("data")?, }; - result.insert("data".to_string(), data); - - Ok(result) + Ok(raw_data) } - pub fn from_raw_parts( - mut raw_parts: HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, - ) -> Result { - let width = primitive_singleton_from_raw_parts::( - "width", &raw_parts, - )?; + pub fn from_raw_data(mut raw_data: RawData) -> Result { + use arrow::datatypes::{UInt32Type, UInt8Type}; - let height = primitive_singleton_from_raw_parts::( - "height", &raw_parts, - )?; - - let encoding = - Encoding::from_string(utf8_singleton_from_raw_parts("encoding", &raw_parts)?)?; - - let name = Some(utf8_singleton_from_raw_parts("name", &raw_parts)?); + let width = raw_data.primitive_singleton::("width")?; + let height = raw_data.primitive_singleton::("height")?; + let encoding = Encoding::from_string(raw_data.utf8_singleton("encoding")?)?; + let name = Some(raw_data.utf8_singleton("name")?).filter(|s| !s.is_empty()); let data = match encoding { - Encoding::RGB8 => primitive_array_from_raw_parts::( - "data", - &mut raw_parts, - )?, - Encoding::BGR8 => primitive_array_from_raw_parts::( - "data", - &mut raw_parts, - )?, - Encoding::GRAY8 => primitive_array_from_raw_parts::( - "data", - &mut raw_parts, - )?, + Encoding::RGB8 => raw_data.primitive_array::("data")?, + Encoding::BGR8 => raw_data.primitive_array::("data")?, + Encoding::GRAY8 => raw_data.primitive_array::("data")?, }; Ok(Self { @@ -109,38 +47,18 @@ impl<'a> Image<'a> { }) } - pub fn view_from_raw_parts( - raw_parts: &'a mut HashMap< - String, - ( - arrow::buffer::Buffer, - Option>, - ), - >, - ) -> Result { - let width = primitive_singleton_from_raw_parts::( - "width", &raw_parts, - )?; - - let height = primitive_singleton_from_raw_parts::( - "height", &raw_parts, - )?; + pub fn view_from_raw_data(raw_data: &'a RawData) -> Result { + use arrow::datatypes::{UInt32Type, UInt8Type}; - let encoding = - Encoding::from_string(utf8_singleton_from_raw_parts("encoding", &raw_parts)?)?; - - let name = Some(utf8_singleton_from_raw_parts("name", &raw_parts)?); + let width = raw_data.primitive_singleton::("width")?; + let height = raw_data.primitive_singleton::("height")?; + let encoding = Encoding::from_string(raw_data.utf8_singleton("encoding")?)?; + let name = Some(raw_data.utf8_singleton("name")?).filter(|s| !s.is_empty()); let data = match encoding { - Encoding::RGB8 => primitive_array_view_from_raw_parts::( - "data", raw_parts, - )?, - Encoding::BGR8 => primitive_array_view_from_raw_parts::( - "data", raw_parts, - )?, - Encoding::GRAY8 => primitive_array_view_from_raw_parts::( - "data", raw_parts, - )?, + Encoding::RGB8 => raw_data.primitive_array_view::("data")?, + Encoding::BGR8 => raw_data.primitive_array_view::("data")?, + Encoding::GRAY8 => raw_data.primitive_array_view::("data")?, }; Ok(Self { @@ -153,64 +71,48 @@ impl<'a> Image<'a> { } pub fn from_arrow(array_data: arrow::array::ArrayData) -> Result { - Self::from_raw_parts(Self::raw_parts(array_data)?) + Self::from_raw_data(Self::raw_data(array_data)?) } pub fn into_arrow(self) -> Result { - let width = Arc::new(arrow::array::UInt32Array::from(vec![self.width; 1])); - let height = Arc::new(arrow::array::UInt32Array::from(vec![self.height; 1])); - - let encoding = Arc::new(arrow::array::StringArray::from(vec![ - self.encoding - .to_string(); - 1 - ])); - - let name = Arc::new(arrow::array::StringArray::from(vec![self.name.clone(); 1])); - - let data: Arc = match self.encoding { - Encoding::RGB8 => Arc::new(arrow::array::UInt8Array::from(self.data.into_u8()?)), - Encoding::BGR8 => Arc::new(arrow::array::UInt8Array::from(self.data.into_u8()?)), - Encoding::GRAY8 => Arc::new(arrow::array::UInt8Array::from(self.data.into_u8()?)), + use arrow::datatypes::{ + DataType::{UInt32, UInt8, Utf8}, + UInt32Type, UInt8Type, }; - let children = vec![data, width, height, encoding, name]; - let type_ids = [].into_iter().collect::>(); - let offsets = [].into_iter().collect::>(); - - fn union_field( - index: i8, - name: &str, - data_type: arrow::datatypes::DataType, - nullable: bool, - ) -> (i8, Arc) { - ( - index, - Arc::new(arrow::datatypes::Field::new(name, data_type, nullable)), - ) - } - - let datatype = match self.encoding { - Encoding::RGB8 => arrow::datatypes::DataType::UInt8, - Encoding::BGR8 => arrow::datatypes::DataType::UInt8, - Encoding::GRAY8 => arrow::datatypes::DataType::UInt8, + let raw_data = UnionBuilder::new() + .push_primitive_singleton::("width", self.width, UInt32, false) + .push_primitive_singleton::("height", self.height, UInt32, false) + .push_utf_singleton("encoding", self.encoding.to_string(), Utf8, false) + .push_utf_singleton( + "name", + self.name.map_or_else(|| "".to_string(), |s| s), + Utf8, + false, + ); + + let raw_data = match self.encoding { + Encoding::RGB8 => raw_data.push_primitive_array::( + "data", + self.data.into_u8()?, + UInt8, + false, + ), + Encoding::BGR8 => raw_data.push_primitive_array::( + "data", + self.data.into_u8()?, + UInt8, + false, + ), + Encoding::GRAY8 => raw_data.push_primitive_array::( + "data", + self.data.into_u8()?, + UInt8, + false, + ), }; - let union_fields = [ - union_field(0, "data", datatype, false), - union_field(1, "width", arrow::datatypes::DataType::UInt32, false), - union_field(2, "height", arrow::datatypes::DataType::UInt32, false), - union_field(3, "encoding", arrow::datatypes::DataType::Utf8, false), - union_field(4, "name", arrow::datatypes::DataType::Utf8, true), - ] - .into_iter() - .collect::(); - - Ok( - arrow::array::UnionArray::try_new(union_fields, type_ids, Some(offsets), children) - .wrap_err("Failed to create UnionArray with Image data.")? - .into_data(), - ) + raw_data.into_arrow() } } @@ -220,19 +122,64 @@ mod tests { use crate::image::Image; let flat_image = vec![0; 27]; - let original_buffer_address = flat_image.as_ptr(); + let original_buffer_address = flat_image.as_ptr() as *const u64; let bgr8_image = Image::new_bgr8(flat_image, 3, 3, None).unwrap(); - let image_buffer_address = bgr8_image.as_ptr(); + let image_buffer_address = bgr8_image.data.as_ptr(); let arrow_image = bgr8_image.into_arrow().unwrap(); - println!("{:?}", arrow_image); + let bgr8_image = Image::from_arrow(arrow_image).unwrap(); + let bgr8_image_buffer = bgr8_image.data.as_ptr(); - let new_image = Image::from_arrow(arrow_image).unwrap(); - let final_image_buffer = new_image.as_ptr(); + let rgb8_image = bgr8_image.into_rgb8().unwrap(); + let rgb8_image_buffer = rgb8_image.data.as_ptr(); + + assert_eq!(original_buffer_address, image_buffer_address); + assert_eq!(image_buffer_address, bgr8_image_buffer); + assert_eq!(bgr8_image_buffer, rgb8_image_buffer); + } + + #[test] + fn test_arrow_zero_copy_read_only() { + use crate::image::Image; + + let flat_image = vec![0; 27]; + let original_buffer_address = flat_image.as_ptr() as *const u64; + + let bgr8_image = Image::new_bgr8(flat_image, 3, 3, None).unwrap(); + let image_buffer_address = bgr8_image.data.as_ptr(); + + let arrow_image = bgr8_image.into_arrow().unwrap(); + + let raw_data = Image::raw_data(arrow_image).unwrap(); + let new_image = Image::view_from_raw_data(&raw_data).unwrap(); + + let final_image_buffer = new_image.data.as_ptr(); assert_eq!(original_buffer_address, image_buffer_address); assert_eq!(image_buffer_address, final_image_buffer); } + + #[test] + fn test_arrow_zero_copy_copy_on_write() { + use crate::image::Image; + + let flat_image = vec![0; 27]; + let original_buffer_address = flat_image.as_ptr() as *const u64; + + let bgr8_image = Image::new_bgr8(flat_image, 3, 3, None).unwrap(); + let image_buffer_address = bgr8_image.data.as_ptr(); + + let arrow_image = bgr8_image.into_arrow().unwrap(); + + let raw_data = Image::raw_data(arrow_image).unwrap(); + let bgr8_image = Image::view_from_raw_data(&raw_data).unwrap(); + let rgb8_image = bgr8_image.into_rgb8().unwrap(); + + let final_image_buffer = rgb8_image.data.as_ptr(); + + assert_eq!(original_buffer_address, image_buffer_address); + assert_ne!(image_buffer_address, final_image_buffer); + } } diff --git a/src/image/bgr8.rs b/src/image/bgr8.rs index ed00087..fbf2bf0 100644 --- a/src/image/bgr8.rs +++ b/src/image/bgr8.rs @@ -266,16 +266,16 @@ mod tests { use crate::image::Image; let flat_image = vec![0; 27]; - let original_buffer_address = flat_image.as_ptr(); + let original_buffer_address = flat_image.as_ptr() as *const u64; let bgr8_image = Image::new_bgr8(flat_image, 3, 3, None).unwrap(); - let image_buffer_address = bgr8_image.as_ptr(); + let image_buffer_address = bgr8_image.data.as_ptr(); let bgr8_ndarray = bgr8_image.bgr8_into_ndarray().unwrap(); - let ndarray_buffer_address = bgr8_ndarray.as_ptr(); + let ndarray_buffer_address = bgr8_ndarray.as_ptr() as *const u64; let final_image = Image::bgr8_from_ndarray(bgr8_ndarray, None).unwrap(); - let final_image_buffer_address = final_image.as_ptr(); + let final_image_buffer_address = final_image.data.as_ptr(); assert_eq!(original_buffer_address, image_buffer_address); assert_eq!(image_buffer_address, ndarray_buffer_address); diff --git a/src/image/data.rs b/src/image/data.rs index 2aebb8c..3f80adb 100644 --- a/src/image/data.rs +++ b/src/image/data.rs @@ -10,11 +10,11 @@ pub enum ImageData<'a> { } impl ImageData<'_> { - pub fn as_ptr(&self) -> *const u8 { + pub fn as_ptr(&self) -> *const u64 { match self { - Self::U8Data(data) => data.as_ptr() as *const u8, - Self::U16Data(data) => data.as_ptr() as *const u8, - Self::F32Data(data) => data.as_ptr() as *const u8, + Self::U8Data(data) => data.as_ptr() as *const u64, + Self::U16Data(data) => data.as_ptr() as *const u64, + Self::F32Data(data) => data.as_ptr() as *const u64, } } @@ -95,6 +95,10 @@ impl ImageData<'_> { } impl<'a> ImageData<'a> { + pub fn from_u8(data: Cow<'a, [u8]>) -> Self { + Self::U8Data(data) + } + pub fn from_slice_u8(data: &'a [u8]) -> Self { Self::U8Data(Cow::from(data)) } diff --git a/src/image/gray8.rs b/src/image/gray8.rs index 0ac1966..16c3e18 100644 --- a/src/image/gray8.rs +++ b/src/image/gray8.rs @@ -264,16 +264,16 @@ mod test { use crate::image::Image; let flat_image = (1..10).collect::>(); - let original_buffer_address = flat_image.as_ptr(); + let original_buffer_address = flat_image.as_ptr() as *const u64; let gray8_image = Image::new_gray8(flat_image, 3, 3, None).unwrap(); - let image_buffer_address = gray8_image.as_ptr(); + let image_buffer_address = gray8_image.data.as_ptr(); let gray8_ndarray = gray8_image.gray8_into_ndarray().unwrap(); - let ndarray_buffer_address = gray8_ndarray.as_ptr(); + let ndarray_buffer_address = gray8_ndarray.as_ptr() as *const u64; let final_image = Image::gray8_from_ndarray(gray8_ndarray, None).unwrap(); - let final_image_buffer_address = final_image.as_ptr(); + let final_image_buffer_address = final_image.data.as_ptr(); assert_eq!(original_buffer_address, image_buffer_address); assert_eq!(image_buffer_address, ndarray_buffer_address); diff --git a/src/image/rgb8.rs b/src/image/rgb8.rs index 5a07d80..6600525 100644 --- a/src/image/rgb8.rs +++ b/src/image/rgb8.rs @@ -264,16 +264,16 @@ mod tests { use crate::image::Image; let flat_image = vec![0; 27]; - let original_buffer_address = flat_image.as_ptr(); + let original_buffer_address = flat_image.as_ptr() as *const u64; let rgb8_image = Image::new_rgb8(flat_image, 3, 3, None).unwrap(); - let image_buffer_address = rgb8_image.as_ptr(); + let image_buffer_address = rgb8_image.data.as_ptr(); let rgb8_ndarray = rgb8_image.rgb8_into_ndarray().unwrap(); - let ndarray_buffer_address = rgb8_ndarray.as_ptr(); + let ndarray_buffer_address = rgb8_ndarray.as_ptr() as *const u64; let final_image = Image::rgb8_from_ndarray(rgb8_ndarray, None).unwrap(); - let final_image_buffer_address = final_image.as_ptr(); + let final_image_buffer_address = final_image.data.as_ptr(); assert_eq!(original_buffer_address, image_buffer_address); assert_eq!(image_buffer_address, ndarray_buffer_address); diff --git a/src/lib.rs b/src/lib.rs index 28d508b..054f1f4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,11 +1,10 @@ -// use pyo3::prelude::*; +use pyo3::prelude::*; mod arrow; pub mod bbox; pub mod image; -/* /// Formats the sum of two numbers as string. #[pyfunction] fn sum_as_string(a: usize, b: usize) -> PyResult { @@ -18,4 +17,3 @@ fn fastformat(m: &Bound<'_, PyModule>) -> PyResult<()> { m.add_function(wrap_pyfunction!(sum_as_string, m)?)?; Ok(()) } -*/ From 502adee02621d10a25991ad5a697bbbbf6b35f3b Mon Sep 17 00:00:00 2001 From: Hennzau Date: Thu, 15 Aug 2024 14:25:36 +0200 Subject: [PATCH 3/7] naming --- src/arrow.rs | 13 ++++++---- src/bbox/arrow.rs | 60 +++++++++++++++++++++++++++++++++++++++++----- src/image/arrow.rs | 12 +++++----- src/image/data.rs | 46 ++++++++++++++++------------------- 4 files changed, 89 insertions(+), 42 deletions(-) diff --git a/src/arrow.rs b/src/arrow.rs index a8bf0d6..89b0ed4 100644 --- a/src/arrow.rs +++ b/src/arrow.rs @@ -1,21 +1,22 @@ -use arrow::array::Array; use eyre::{Context, OptionExt, Report, Result}; use std::{collections::HashMap, sync::Arc}; -pub struct RawData { +pub struct FastFormatArrowRawData { buffers: HashMap, offset_buffers: HashMap>, array_data: HashMap, } -pub struct UnionBuilder { +pub struct FastFormatArrowBuilder { union_children: Vec, union_fields: Vec<(i8, arrow::datatypes::FieldRef)>, } -impl RawData { +impl FastFormatArrowRawData { pub fn new(array_data: arrow::array::ArrayData) -> Result { + use arrow::array::Array; + let array = arrow::array::UnionArray::from(array_data); let mut result = HashMap::new(); @@ -259,7 +260,7 @@ impl RawData { } } -impl UnionBuilder { +impl FastFormatArrowBuilder { pub fn new() -> Self { Self { union_children: Vec::new(), @@ -376,6 +377,8 @@ impl UnionBuilder { } pub fn into_arrow(self) -> Result { + use arrow::array::Array; + let type_ids = [].into_iter().collect::>(); let offsets = [].into_iter().collect::>(); diff --git a/src/bbox/arrow.rs b/src/bbox/arrow.rs index 9111de9..0474a37 100644 --- a/src/bbox/arrow.rs +++ b/src/bbox/arrow.rs @@ -1,15 +1,15 @@ use std::borrow::Cow; use super::{encoding::Encoding, BBox}; -use crate::arrow::{RawData, UnionBuilder}; +use crate::arrow::{FastFormatArrowBuilder, FastFormatArrowRawData}; use eyre::Result; impl<'a> BBox<'a> { - pub fn raw_data(array_data: arrow::array::ArrayData) -> Result { + pub fn raw_data(array_data: arrow::array::ArrayData) -> Result { use arrow::datatypes::Float32Type; - let raw_data = RawData::new(array_data)? + let raw_data = FastFormatArrowRawData::new(array_data)? .load_primitive::("data")? .load_primitive::("confidence")? .load_utf("label")? @@ -18,7 +18,7 @@ impl<'a> BBox<'a> { Ok(raw_data) } - pub fn from_raw_data(mut raw_data: RawData) -> Result { + pub fn from_raw_data(mut raw_data: FastFormatArrowRawData) -> Result { use arrow::datatypes::Float32Type; let data = raw_data.primitive_array::("data")?; @@ -34,7 +34,7 @@ impl<'a> BBox<'a> { }) } - pub fn view_from_raw_data(raw_data: &'a RawData) -> Result { + pub fn view_from_raw_data(raw_data: &'a FastFormatArrowRawData) -> Result { use arrow::datatypes::Float32Type; let data = raw_data.primitive_array_view::("data")?; @@ -60,7 +60,7 @@ impl<'a> BBox<'a> { Float32Type, }; - let raw_data = UnionBuilder::new() + let raw_data = FastFormatArrowBuilder::new() .push_primitive_array::("data", self.data.into_owned(), Float32, false) .push_primitive_array::( "confidence", @@ -101,4 +101,52 @@ mod tests { assert_eq!(bbox_buffer_address, xyxy_bbox_buffer); assert_eq!(xyxy_bbox_buffer, xywh_bbox_buffer); } + + #[test] + fn test_arrow_zero_copy_read_only() { + use crate::bbox::BBox; + + let flat_bbox = vec![1.0, 1.0, 2.0, 2.0]; + let original_buffer_address = flat_bbox.as_ptr(); + + let confidence = vec![0.98]; + let label = vec!["cat".to_string()]; + + let xyxy_bbox = BBox::new_xyxy(flat_bbox, confidence, label).unwrap(); + let bbox_buffer_address = xyxy_bbox.data.as_ptr(); + + let arrow_bbox = xyxy_bbox.into_arrow().unwrap(); + + let raw_data = BBox::raw_data(arrow_bbox).unwrap(); + let xyxy_bbox = BBox::view_from_raw_data(&raw_data).unwrap(); + let xyxy_bbox_buffer = xyxy_bbox.data.as_ptr(); + + assert_eq!(original_buffer_address, bbox_buffer_address); + assert_eq!(bbox_buffer_address, xyxy_bbox_buffer); + } + + #[test] + fn test_arrow_zero_copy_copy_on_write() { + use crate::bbox::BBox; + + let flat_bbox = vec![1.0, 1.0, 2.0, 2.0]; + let original_buffer_address = flat_bbox.as_ptr(); + + let confidence = vec![0.98]; + let label = vec!["cat".to_string()]; + + let xyxy_bbox = BBox::new_xyxy(flat_bbox, confidence, label).unwrap(); + let bbox_buffer_address = xyxy_bbox.data.as_ptr(); + + let arrow_bbox = xyxy_bbox.into_arrow().unwrap(); + + let raw_data = BBox::raw_data(arrow_bbox).unwrap(); + let xyxy_bbox = BBox::view_from_raw_data(&raw_data).unwrap(); + let xywh_bbox = xyxy_bbox.into_xywh().unwrap(); + + let final_bbox_buffer = xywh_bbox.data.as_ptr(); + + assert_eq!(original_buffer_address, bbox_buffer_address); + assert_ne!(bbox_buffer_address, final_bbox_buffer); + } } diff --git a/src/image/arrow.rs b/src/image/arrow.rs index 3add9fb..55c0d66 100644 --- a/src/image/arrow.rs +++ b/src/image/arrow.rs @@ -2,13 +2,13 @@ use super::{data::ImageData, encoding::Encoding, Image}; use eyre::Result; -use crate::arrow::{RawData, UnionBuilder}; +use crate::arrow::{FastFormatArrowBuilder, FastFormatArrowRawData}; impl<'a> Image<'a> { - pub fn raw_data(array_data: arrow::array::ArrayData) -> Result { + pub fn raw_data(array_data: arrow::array::ArrayData) -> Result { use arrow::datatypes::{UInt32Type, UInt8Type}; - let raw_data = RawData::new(array_data)? + let raw_data = FastFormatArrowRawData::new(array_data)? .load_primitive::("width")? .load_primitive::("height")? .load_utf("encoding")? @@ -24,7 +24,7 @@ impl<'a> Image<'a> { Ok(raw_data) } - pub fn from_raw_data(mut raw_data: RawData) -> Result { + pub fn from_raw_data(mut raw_data: FastFormatArrowRawData) -> Result { use arrow::datatypes::{UInt32Type, UInt8Type}; let width = raw_data.primitive_singleton::("width")?; @@ -47,7 +47,7 @@ impl<'a> Image<'a> { }) } - pub fn view_from_raw_data(raw_data: &'a RawData) -> Result { + pub fn view_from_raw_data(raw_data: &'a FastFormatArrowRawData) -> Result { use arrow::datatypes::{UInt32Type, UInt8Type}; let width = raw_data.primitive_singleton::("width")?; @@ -80,7 +80,7 @@ impl<'a> Image<'a> { UInt32Type, UInt8Type, }; - let raw_data = UnionBuilder::new() + let raw_data = FastFormatArrowBuilder::new() .push_primitive_singleton::("width", self.width, UInt32, false) .push_primitive_singleton::("height", self.height, UInt32, false) .push_utf_singleton("encoding", self.encoding.to_string(), Utf8, false) diff --git a/src/image/data.rs b/src/image/data.rs index 3f80adb..e737fbe 100644 --- a/src/image/data.rs +++ b/src/image/data.rs @@ -4,110 +4,106 @@ use std::borrow::Cow; #[derive(Debug)] pub enum ImageData<'a> { - U8Data(Cow<'a, [u8]>), - U16Data(Cow<'a, [u16]>), - F32Data(Cow<'a, [f32]>), + U8(Cow<'a, [u8]>), + U16(Cow<'a, [u16]>), + F32(Cow<'a, [f32]>), } impl ImageData<'_> { pub fn as_ptr(&self) -> *const u64 { match self { - Self::U8Data(data) => data.as_ptr() as *const u64, - Self::U16Data(data) => data.as_ptr() as *const u64, - Self::F32Data(data) => data.as_ptr() as *const u64, + Self::U8(data) => data.as_ptr() as *const u64, + Self::U16(data) => data.as_ptr() as *const u64, + Self::F32(data) => data.as_ptr() as *const u64, } } pub fn into_u8(self) -> Result> { match self { - Self::U8Data(data) => Ok(data.into_owned()), + Self::U8(data) => Ok(data.into_owned()), _ => Err(eyre::Report::msg("Can't convert data to u8")), } } pub fn into_u16(self) -> Result> { match self { - Self::U16Data(data) => Ok(data.into_owned()), + Self::U16(data) => Ok(data.into_owned()), _ => Err(eyre::Report::msg("Can't convert data to u16")), } } pub fn into_f32(self) -> Result> { match self { - Self::F32Data(data) => Ok(data.into_owned()), + Self::F32(data) => Ok(data.into_owned()), _ => Err(eyre::Report::msg("Can't convert data to f32")), } } pub fn as_u8(&self) -> Result<&[u8]> { match self { - Self::U8Data(data) => Ok(data), + Self::U8(data) => Ok(data), _ => Err(eyre::Report::msg("Can't convert data to u8")), } } pub fn as_u16(&self) -> Result<&[u16]> { match self { - Self::U16Data(data) => Ok(data), + Self::U16(data) => Ok(data), _ => Err(eyre::Report::msg("Can't convert data to u16")), } } pub fn as_f32(&self) -> Result<&[f32]> { match self { - Self::F32Data(data) => Ok(data), + Self::F32(data) => Ok(data), _ => Err(eyre::Report::msg("Can't convert data to f32")), } } pub fn as_mut_u8(&mut self) -> Result<&mut Vec> { match self { - Self::U8Data(data) => Ok(data.to_mut()), + Self::U8(data) => Ok(data.to_mut()), _ => Err(eyre::Report::msg("Can't convert data to u8")), } } pub fn as_mut_u16(&mut self) -> Result<&mut Vec> { match self { - Self::U16Data(data) => Ok(data.to_mut()), + Self::U16(data) => Ok(data.to_mut()), _ => Err(eyre::Report::msg("Can't convert data to 16")), } } pub fn as_mut_f32(&mut self) -> Result<&mut Vec> { match self { - Self::F32Data(data) => Ok(data.to_mut()), + Self::F32(data) => Ok(data.to_mut()), _ => Err(eyre::Report::msg("Can't convert data to f32")), } } pub fn from_vec_u8(data: Vec) -> Self { - Self::U8Data(Cow::from(data)) + Self::U8(Cow::from(data)) } pub fn from_vec_u16(data: Vec) -> Self { - Self::U16Data(Cow::from(data)) + Self::U16(Cow::from(data)) } pub fn from_vec_f32(data: Vec) -> Self { - Self::F32Data(Cow::from(data)) + Self::F32(Cow::from(data)) } } impl<'a> ImageData<'a> { - pub fn from_u8(data: Cow<'a, [u8]>) -> Self { - Self::U8Data(data) - } - pub fn from_slice_u8(data: &'a [u8]) -> Self { - Self::U8Data(Cow::from(data)) + Self::U8(Cow::from(data)) } pub fn from_slice_u16(data: &'a [u16]) -> Self { - Self::U16Data(Cow::from(data)) + Self::U16(Cow::from(data)) } pub fn from_slice_f32(data: &'a [f32]) -> Self { - Self::F32Data(Cow::from(data)) + Self::F32(Cow::from(data)) } } From a928f226948787c011f194b224b31b32e611a491 Mon Sep 17 00:00:00 2001 From: Hennzau Date: Thu, 15 Aug 2024 17:09:09 +0200 Subject: [PATCH 4/7] benchmark pure arrow --- examples/dora-benchmark/.gitignore | 72 + examples/dora-benchmark/dataflow.yml | 14 + examples/dora-benchmark/main.rs | 88 + examples/dora-benchmark/receiver/.gitignore | 72 + examples/dora-benchmark/receiver/Cargo.lock | 2599 +++++++++++++++++ examples/dora-benchmark/receiver/Cargo.toml | 9 + examples/dora-benchmark/receiver/src/main.rs | 83 + examples/dora-benchmark/sender/.gitignore | 72 + examples/dora-benchmark/sender/Cargo.lock | 2600 ++++++++++++++++++ examples/dora-benchmark/sender/Cargo.toml | 10 + examples/dora-benchmark/sender/src/main.rs | 58 + 11 files changed, 5677 insertions(+) create mode 100644 examples/dora-benchmark/.gitignore create mode 100644 examples/dora-benchmark/dataflow.yml create mode 100644 examples/dora-benchmark/main.rs create mode 100644 examples/dora-benchmark/receiver/.gitignore create mode 100644 examples/dora-benchmark/receiver/Cargo.lock create mode 100644 examples/dora-benchmark/receiver/Cargo.toml create mode 100644 examples/dora-benchmark/receiver/src/main.rs create mode 100644 examples/dora-benchmark/sender/.gitignore create mode 100644 examples/dora-benchmark/sender/Cargo.lock create mode 100644 examples/dora-benchmark/sender/Cargo.toml create mode 100644 examples/dora-benchmark/sender/src/main.rs diff --git a/examples/dora-benchmark/.gitignore b/examples/dora-benchmark/.gitignore new file mode 100644 index 0000000..c8f0442 --- /dev/null +++ b/examples/dora-benchmark/.gitignore @@ -0,0 +1,72 @@ +/target + +# Byte-compiled / optimized / DLL files +__pycache__/ +.pytest_cache/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +.venv/ +env/ +bin/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +include/ +man/ +venv/ +*.egg-info/ +.installed.cfg +*.egg + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt +pip-selfcheck.json + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# Rope +.ropeproject + +# Django stuff: +*.log +*.pot + +.DS_Store + +# Sphinx documentation +docs/_build/ + +# PyCharm +.idea/ + +# VSCode +.vscode/ + +# Pyenv +.python-version diff --git a/examples/dora-benchmark/dataflow.yml b/examples/dora-benchmark/dataflow.yml new file mode 100644 index 0000000..821dbc7 --- /dev/null +++ b/examples/dora-benchmark/dataflow.yml @@ -0,0 +1,14 @@ +nodes: + - id: sender + build: cargo build --manifest-path ./sender/Cargo.toml --release + path: ./sender/target/release/dora-benchmark-sender + outputs: + - latency + - throughput + + - id: receiver + build: cargo build --manifest-path ./receiver/Cargo.toml --release + path: ./receiver/target/release/dora-benchmark-receiver + inputs: + latency: sender/latency + throughput: sender/throughput diff --git a/examples/dora-benchmark/main.rs b/examples/dora-benchmark/main.rs new file mode 100644 index 0000000..6e10c69 --- /dev/null +++ b/examples/dora-benchmark/main.rs @@ -0,0 +1,88 @@ +use std::path::Path; + +use eyre::{Context, Result}; + +fn main() -> Result<()> { + let root = Path::new(env!("CARGO_MANIFEST_DIR")); + std::env::set_current_dir(root.join(file!()).parent().unwrap()) + .wrap_err("failed to set working dir")?; + + let dataflow = Path::new("dataflow.yml"); + + destroy_dora()?; + spawn_dora()?; + build_dataflow(dataflow)?; + start_dataflow(dataflow)?; + + Ok(()) +} + +fn destroy_dora() -> eyre::Result<()> { + let cargo = std::env::var("CARGO_HOME").unwrap(); + let dora = Path::new(&cargo).join("bin").join("dora"); + + let mut cmd = std::process::Command::new(&dora); + + cmd.arg("destroy"); + + if cmd.status().wrap_err("failed to destroy dora")?.success() { + println!("dora destroyed successfully"); + } else { + println!("dora destroy failed"); + } + + Ok(()) +} + +fn spawn_dora() -> eyre::Result<()> { + let cargo = std::env::var("CARGO_HOME").unwrap(); + let dora = Path::new(&cargo).join("bin").join("dora"); + + let mut cmd = std::process::Command::new(&dora); + + cmd.arg("up"); + + if cmd.status().wrap_err("failed to spawn dora")?.success() { + println!("dora spawned successfully"); + } else { + println!("dora spawn failed"); + } + + Ok(()) +} + +fn build_dataflow(dataflow: &Path) -> eyre::Result<()> { + let cargo = std::env::var("CARGO_HOME").unwrap(); + let dora = Path::new(&cargo).join("bin").join("dora"); + + let mut cmd = std::process::Command::new(&dora); + + cmd.arg("build"); + cmd.arg("--").arg(dataflow); + + if cmd.status().wrap_err("failed to build dataflow")?.success() { + println!("dataflow built successfully"); + } else { + println!("dataflow build failed"); + } + + Ok(()) +} + +fn start_dataflow(dataflow: &Path) -> eyre::Result<()> { + let cargo = std::env::var("CARGO_HOME").unwrap(); + let dora = Path::new(&cargo).join("bin").join("dora"); + + let mut cmd = std::process::Command::new(&dora); + + cmd.arg("start"); + cmd.arg("--").arg(dataflow); + + if cmd.status().wrap_err("failed to start dataflow")?.success() { + println!("dataflow executed successfully"); + } else { + println!("dataflow failed"); + } + + Ok(()) +} diff --git a/examples/dora-benchmark/receiver/.gitignore b/examples/dora-benchmark/receiver/.gitignore new file mode 100644 index 0000000..c8f0442 --- /dev/null +++ b/examples/dora-benchmark/receiver/.gitignore @@ -0,0 +1,72 @@ +/target + +# Byte-compiled / optimized / DLL files +__pycache__/ +.pytest_cache/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +.venv/ +env/ +bin/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +include/ +man/ +venv/ +*.egg-info/ +.installed.cfg +*.egg + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt +pip-selfcheck.json + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# Rope +.ropeproject + +# Django stuff: +*.log +*.pot + +.DS_Store + +# Sphinx documentation +docs/_build/ + +# PyCharm +.idea/ + +# VSCode +.vscode/ + +# Pyenv +.python-version diff --git a/examples/dora-benchmark/receiver/Cargo.lock b/examples/dora-benchmark/receiver/Cargo.lock new file mode 100644 index 0000000..c86f06f --- /dev/null +++ b/examples/dora-benchmark/receiver/Cargo.lock @@ -0,0 +1,2599 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" +dependencies = [ + "serde", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "arrow" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05048a8932648b63f21c37d88b552ccc8a65afb6dfe9fc9f30ce79174c2e7a85" +dependencies = [ + "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", +] + +[[package]] +name = "arrow-arith" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8a57966e43bfe9a3277984a14c24ec617ad874e4c0e1d2a1b083a39cfbf22c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "num", +] + +[[package]] +name = "arrow-array" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f4a9468c882dc66862cef4e1fd8423d47e67972377d85d80e022786427768c" +dependencies = [ + "ahash", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.14.5", + "num", +] + +[[package]] +name = "arrow-buffer" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c975484888fc95ec4a632cdc98be39c085b1bb518531b0c80c5d462063e5daa1" +dependencies = [ + "bytes", + "half", + "num", +] + +[[package]] +name = "arrow-cast" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da26719e76b81d8bc3faad1d4dbdc1bcc10d14704e63dc17fc9f3e7e1e567c8e" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "atoi", + "base64", + "chrono", + "half", + "lexical-core", + "num", + "ryu", +] + +[[package]] +name = "arrow-csv" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13c36dc5ddf8c128df19bab27898eea64bf9da2b555ec1cd17a8ff57fba9ec2" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", +] + +[[package]] +name = "arrow-data" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd9d6f18c65ef7a2573ab498c374d8ae364b4a4edf67105357491c031f716ca5" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num", +] + +[[package]] +name = "arrow-ipc" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e786e1cdd952205d9a8afc69397b317cfbb6e0095e445c69cda7e8da5c1eeb0f" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb22284c5a2a01d73cebfd88a33511a3234ab45d66086b2ca2d1228c3498e445" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "indexmap 2.4.0", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42745f86b1ab99ef96d1c0bcf49180848a64fe2c7a7a0d945bc64fa2b21ba9bc" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half", + "num", +] + +[[package]] +name = "arrow-row" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd09a518c602a55bd406bcc291a967b284cfa7a63edfbf8b897ea4748aad23c" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", +] + +[[package]] +name = "arrow-schema" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e972cd1ff4a4ccd22f86d3e53e835c2ed92e0eea6a3e8eadb72b4f1ac802cf8" +dependencies = [ + "serde", +] + +[[package]] +name = "arrow-select" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600bae05d43483d216fb3494f8c32fdbefd8aa4e1de237e790dbb3d9f44690a3" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] + +[[package]] +name = "arrow-string" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc1985b67cb45f6606a248ac2b4a288849f196bab8c657ea5589f47cdd55e6" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num", + "regex", + "regex-syntax 0.8.4", +] + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" + +[[package]] +name = "cc" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68064e60dbf1f17005c2fde4d07c16d8baa506fd7ffed8ccab702d93617975c7" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.6", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[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 = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +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 = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "diatomic-waker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92a510eb4dc7fa435297888c00e0f999aa2ee3e920a357221c35ab615a80bbcf" +dependencies = [ + "loom", + "waker-fn", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dora-arrow-convert" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c924a392b436e3a8a6e508e604eff47dfea0f1a96f0f0a39692c22ef041f5d1" +dependencies = [ + "arrow", + "eyre", +] + +[[package]] +name = "dora-benchmark-receiver" +version = "0.1.0" +dependencies = [ + "arrow", + "dora-node-api", + "fastformat", +] + +[[package]] +name = "dora-core" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be4d038f9ec95fa38a207d67f93c02860d3f52838bb063f8c4fedbb1de437d6" +dependencies = [ + "aligned-vec", + "dora-message", + "eyre", + "log", + "once_cell", + "schemars", + "serde", + "serde-with-expand-env", + "serde_json", + "serde_yaml 0.9.34+deprecated", + "tokio", + "tracing", + "uuid", + "which", +] + +[[package]] +name = "dora-message" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f7dd7598edfe42370222f8c6446fe90a5b01c40da5ae30e755cdfff71569c7" +dependencies = [ + "arrow-data", + "arrow-schema", + "eyre", + "serde", + "uhlc", +] + +[[package]] +name = "dora-node-api" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e81424629878132deeb51ccb13a06d537db4bbc79a6dcdaa8c399963babd9c4a" +dependencies = [ + "aligned-vec", + "arrow", + "bincode", + "dora-arrow-convert", + "dora-core", + "dora-tracing", + "eyre", + "flume", + "futures", + "futures-concurrency", + "futures-timer", + "serde_json", + "serde_yaml 0.8.26", + "shared-memory-server", + "shared_memory_extended", + "tracing", +] + +[[package]] +name = "dora-tracing" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50813996d0f48fc41663f46904d25d890a66fd0b7f5f9df24f8c2a66a8cc464" +dependencies = [ + "eyre", + "opentelemetry", + "opentelemetry-jaeger", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", +] + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastformat" +version = "0.1.0" +dependencies = [ + "arrow", + "eyre", + "ndarray", + "pyo3", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[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", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-buffered" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fa130f3777d0d4b0993653c20bc433026d3290627693c4ed1b18dd237357ab" +dependencies = [ + "diatomic-waker", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-concurrency" +version = "7.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b14ac911e85d57c5ea6eef76d7b4d4a3177ecd15f4bea2e61927e9e3823e19f" +dependencies = [ + "bitvec", + "futures-buffered", + "futures-core", + "futures-lite", + "pin-project", + "slab", + "smallvec", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[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.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[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.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[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 = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +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 = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[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", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "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 = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +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" +dependencies = [ + "serde", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", +] + +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e785d273968748578931e4dc3b4f5ec86b26e09d9e0d66b55adda7fce742f7a" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "once_cell", + "opentelemetry", + "opentelemetry-semantic-conventions", + "thiserror", + "thrift", + "tokio", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b02e0230abb0ab6636d18e2ba8fa02903ea63772281340ccac18e0af3ec9eeb" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "ordered-float" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[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 0.52.6", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "portable-atomic" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + +[[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.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset 0.9.1", + "parking_lot", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[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 = "raw_sync_2" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f067b45fa17e31d15636789c2638bd562da5496d498876cf0495df78f7e4fdcb" +dependencies = [ + "cfg-if", + "libc", + "nix 0.23.2", + "rand", + "winapi", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-with-expand-env" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888d884a3be3a209308d0b66f1918ff18f60e93db837259e53ea7d8dd14e7e98" +dependencies = [ + "serde", + "shellexpand", +] + +[[package]] +name = "serde_derive" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.4.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared-memory-server" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9554cb9e96e2e1984580a6b98d845db97c5e94c84bbe629ec92f82cd4764d06" +dependencies = [ + "bincode", + "eyre", + "raw_sync_2", + "serde", + "shared_memory_extended", + "tracing", +] + +[[package]] +name = "shared_memory_extended" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "004d7ece9a3be64f85471d50967710b0a146144225bed5f0abd0514a3bed086f" +dependencies = [ + "cfg-if", + "libc", + "nix 0.26.4", + "rand", + "win-sys", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "syn" +version = "2.0.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09678c4cdbb4eed72e18b7c2af1329c69825ed16fcbac62d083fc3e2b0590ff0" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tokio" +version = "1.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ebb87a95ea13271332df069020513ab70bdb5637ca42d6e492dc3bbbad48de" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "uhlc" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d291a7454d390b753ef68df8145da18367e32883ec2fa863959f0aefb915cdb" +dependencies = [ + "hex", + "humantime", + "lazy_static", + "log", + "serde", + "spin", + "uuid", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unindent" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "which" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "win-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b7b128a98c1cfa201b09eb49ba285887deb3cbe7466a98850eb1adabb452be5" +dependencies = [ + "windows 0.34.0", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" +dependencies = [ + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/examples/dora-benchmark/receiver/Cargo.toml b/examples/dora-benchmark/receiver/Cargo.toml new file mode 100644 index 0000000..acde7fa --- /dev/null +++ b/examples/dora-benchmark/receiver/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "dora-benchmark-receiver" +version = "0.1.0" +edition = "2021" + +[dependencies] +dora-node-api = "0.3.5" +arrow = "52.1.0" +fastformat = { path = "../../../../fastformat" } diff --git a/examples/dora-benchmark/receiver/src/main.rs b/examples/dora-benchmark/receiver/src/main.rs new file mode 100644 index 0000000..8364293 --- /dev/null +++ b/examples/dora-benchmark/receiver/src/main.rs @@ -0,0 +1,83 @@ +use dora_node_api::{self, DoraNode, Event}; +use std::time::{Duration, Instant}; + +fn main() -> Result<(), Box> { + let (_node, mut events) = DoraNode::init_from_env()?; + + // latency is tested first + let mut latency = true; + + let mut current_size = 0; + let mut n = 0; + let mut start = Instant::now(); + let mut latencies = Vec::new(); + + println!("Latency:"); + + while let Some(event) = events.recv() { + match event { + Event::Input { id, metadata, data } => { + // check if new size bracket + let data_len = data.len(); + if data_len != current_size { + if n > 0 { + record_results(start, current_size, n, latencies, latency); + } + current_size = data_len; + n = 0; + start = Instant::now(); + latencies = Vec::new(); + } + + match id.as_str() { + "latency" if latency => {} + "throughput" if latency => { + latency = false; + println!("Throughput:"); + } + "throughput" => {} + other => { + eprintln!("Ignoring unexpected input `{other}`"); + continue; + } + } + + n += 1; + latencies.push( + metadata + .timestamp() + .get_time() + .to_system_time() + .elapsed() + .unwrap_or_default(), + ); + } + Event::InputClosed { id } => { + println!("Input `{id}` was closed"); + } + other => eprintln!("Received unexpected input: {other:?}"), + } + } + + record_results(start, current_size, n, latencies, latency); + + Ok(()) +} + +fn record_results( + start: Instant, + current_size: usize, + n: u32, + latencies: Vec, + latency: bool, +) { + let msg = if latency { + let avg_latency = latencies.iter().sum::() / n; + format!("size {current_size:<#8x}: {avg_latency:?}") + } else { + let duration = start.elapsed(); + let msg_per_sec = n as f64 / duration.as_secs_f64(); + format!("size {current_size:<#8x}: {msg_per_sec:.0} messages per second") + }; + println!("{msg}"); +} diff --git a/examples/dora-benchmark/sender/.gitignore b/examples/dora-benchmark/sender/.gitignore new file mode 100644 index 0000000..c8f0442 --- /dev/null +++ b/examples/dora-benchmark/sender/.gitignore @@ -0,0 +1,72 @@ +/target + +# Byte-compiled / optimized / DLL files +__pycache__/ +.pytest_cache/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +.venv/ +env/ +bin/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +include/ +man/ +venv/ +*.egg-info/ +.installed.cfg +*.egg + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt +pip-selfcheck.json + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# Rope +.ropeproject + +# Django stuff: +*.log +*.pot + +.DS_Store + +# Sphinx documentation +docs/_build/ + +# PyCharm +.idea/ + +# VSCode +.vscode/ + +# Pyenv +.python-version diff --git a/examples/dora-benchmark/sender/Cargo.lock b/examples/dora-benchmark/sender/Cargo.lock new file mode 100644 index 0000000..c9fc5b1 --- /dev/null +++ b/examples/dora-benchmark/sender/Cargo.lock @@ -0,0 +1,2600 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" +dependencies = [ + "serde", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "arrow" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05048a8932648b63f21c37d88b552ccc8a65afb6dfe9fc9f30ce79174c2e7a85" +dependencies = [ + "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", +] + +[[package]] +name = "arrow-arith" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8a57966e43bfe9a3277984a14c24ec617ad874e4c0e1d2a1b083a39cfbf22c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "num", +] + +[[package]] +name = "arrow-array" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f4a9468c882dc66862cef4e1fd8423d47e67972377d85d80e022786427768c" +dependencies = [ + "ahash", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.14.5", + "num", +] + +[[package]] +name = "arrow-buffer" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c975484888fc95ec4a632cdc98be39c085b1bb518531b0c80c5d462063e5daa1" +dependencies = [ + "bytes", + "half", + "num", +] + +[[package]] +name = "arrow-cast" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da26719e76b81d8bc3faad1d4dbdc1bcc10d14704e63dc17fc9f3e7e1e567c8e" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "atoi", + "base64", + "chrono", + "half", + "lexical-core", + "num", + "ryu", +] + +[[package]] +name = "arrow-csv" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13c36dc5ddf8c128df19bab27898eea64bf9da2b555ec1cd17a8ff57fba9ec2" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", +] + +[[package]] +name = "arrow-data" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd9d6f18c65ef7a2573ab498c374d8ae364b4a4edf67105357491c031f716ca5" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num", +] + +[[package]] +name = "arrow-ipc" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e786e1cdd952205d9a8afc69397b317cfbb6e0095e445c69cda7e8da5c1eeb0f" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb22284c5a2a01d73cebfd88a33511a3234ab45d66086b2ca2d1228c3498e445" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "indexmap 2.4.0", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42745f86b1ab99ef96d1c0bcf49180848a64fe2c7a7a0d945bc64fa2b21ba9bc" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half", + "num", +] + +[[package]] +name = "arrow-row" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd09a518c602a55bd406bcc291a967b284cfa7a63edfbf8b897ea4748aad23c" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", +] + +[[package]] +name = "arrow-schema" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e972cd1ff4a4ccd22f86d3e53e835c2ed92e0eea6a3e8eadb72b4f1ac802cf8" +dependencies = [ + "serde", +] + +[[package]] +name = "arrow-select" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600bae05d43483d216fb3494f8c32fdbefd8aa4e1de237e790dbb3d9f44690a3" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] + +[[package]] +name = "arrow-string" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc1985b67cb45f6606a248ac2b4a288849f196bab8c657ea5589f47cdd55e6" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num", + "regex", + "regex-syntax 0.8.4", +] + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" + +[[package]] +name = "cc" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68064e60dbf1f17005c2fde4d07c16d8baa506fd7ffed8ccab702d93617975c7" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.6", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[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 = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +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 = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "diatomic-waker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92a510eb4dc7fa435297888c00e0f999aa2ee3e920a357221c35ab615a80bbcf" +dependencies = [ + "loom", + "waker-fn", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dora-arrow-convert" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c924a392b436e3a8a6e508e604eff47dfea0f1a96f0f0a39692c22ef041f5d1" +dependencies = [ + "arrow", + "eyre", +] + +[[package]] +name = "dora-benchmark-sender" +version = "0.1.0" +dependencies = [ + "arrow", + "dora-node-api", + "fastformat", + "rand", +] + +[[package]] +name = "dora-core" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be4d038f9ec95fa38a207d67f93c02860d3f52838bb063f8c4fedbb1de437d6" +dependencies = [ + "aligned-vec", + "dora-message", + "eyre", + "log", + "once_cell", + "schemars", + "serde", + "serde-with-expand-env", + "serde_json", + "serde_yaml 0.9.34+deprecated", + "tokio", + "tracing", + "uuid", + "which", +] + +[[package]] +name = "dora-message" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f7dd7598edfe42370222f8c6446fe90a5b01c40da5ae30e755cdfff71569c7" +dependencies = [ + "arrow-data", + "arrow-schema", + "eyre", + "serde", + "uhlc", +] + +[[package]] +name = "dora-node-api" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e81424629878132deeb51ccb13a06d537db4bbc79a6dcdaa8c399963babd9c4a" +dependencies = [ + "aligned-vec", + "arrow", + "bincode", + "dora-arrow-convert", + "dora-core", + "dora-tracing", + "eyre", + "flume", + "futures", + "futures-concurrency", + "futures-timer", + "serde_json", + "serde_yaml 0.8.26", + "shared-memory-server", + "shared_memory_extended", + "tracing", +] + +[[package]] +name = "dora-tracing" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50813996d0f48fc41663f46904d25d890a66fd0b7f5f9df24f8c2a66a8cc464" +dependencies = [ + "eyre", + "opentelemetry", + "opentelemetry-jaeger", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", +] + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastformat" +version = "0.1.0" +dependencies = [ + "arrow", + "eyre", + "ndarray", + "pyo3", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[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", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-buffered" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fa130f3777d0d4b0993653c20bc433026d3290627693c4ed1b18dd237357ab" +dependencies = [ + "diatomic-waker", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-concurrency" +version = "7.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b14ac911e85d57c5ea6eef76d7b4d4a3177ecd15f4bea2e61927e9e3823e19f" +dependencies = [ + "bitvec", + "futures-buffered", + "futures-core", + "futures-lite", + "pin-project", + "slab", + "smallvec", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[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.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[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.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[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 = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +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 = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[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", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "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 = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +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" +dependencies = [ + "serde", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", +] + +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e785d273968748578931e4dc3b4f5ec86b26e09d9e0d66b55adda7fce742f7a" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "once_cell", + "opentelemetry", + "opentelemetry-semantic-conventions", + "thiserror", + "thrift", + "tokio", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b02e0230abb0ab6636d18e2ba8fa02903ea63772281340ccac18e0af3ec9eeb" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "ordered-float" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[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 0.52.6", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "portable-atomic" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + +[[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.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset 0.9.1", + "parking_lot", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[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 = "raw_sync_2" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f067b45fa17e31d15636789c2638bd562da5496d498876cf0495df78f7e4fdcb" +dependencies = [ + "cfg-if", + "libc", + "nix 0.23.2", + "rand", + "winapi", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-with-expand-env" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888d884a3be3a209308d0b66f1918ff18f60e93db837259e53ea7d8dd14e7e98" +dependencies = [ + "serde", + "shellexpand", +] + +[[package]] +name = "serde_derive" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.4.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared-memory-server" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9554cb9e96e2e1984580a6b98d845db97c5e94c84bbe629ec92f82cd4764d06" +dependencies = [ + "bincode", + "eyre", + "raw_sync_2", + "serde", + "shared_memory_extended", + "tracing", +] + +[[package]] +name = "shared_memory_extended" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "004d7ece9a3be64f85471d50967710b0a146144225bed5f0abd0514a3bed086f" +dependencies = [ + "cfg-if", + "libc", + "nix 0.26.4", + "rand", + "win-sys", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "syn" +version = "2.0.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09678c4cdbb4eed72e18b7c2af1329c69825ed16fcbac62d083fc3e2b0590ff0" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tokio" +version = "1.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ebb87a95ea13271332df069020513ab70bdb5637ca42d6e492dc3bbbad48de" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "uhlc" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d291a7454d390b753ef68df8145da18367e32883ec2fa863959f0aefb915cdb" +dependencies = [ + "hex", + "humantime", + "lazy_static", + "log", + "serde", + "spin", + "uuid", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unindent" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "which" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "win-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b7b128a98c1cfa201b09eb49ba285887deb3cbe7466a98850eb1adabb452be5" +dependencies = [ + "windows 0.34.0", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" +dependencies = [ + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/examples/dora-benchmark/sender/Cargo.toml b/examples/dora-benchmark/sender/Cargo.toml new file mode 100644 index 0000000..7909bc2 --- /dev/null +++ b/examples/dora-benchmark/sender/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "dora-benchmark-sender" +version = "0.1.0" +edition = "2021" + +[dependencies] +dora-node-api = "0.3.5" +arrow = "52.1.0" +fastformat = { path = "../../../../fastformat" } +rand = "0.8.5" diff --git a/examples/dora-benchmark/sender/src/main.rs b/examples/dora-benchmark/sender/src/main.rs new file mode 100644 index 0000000..2748142 --- /dev/null +++ b/examples/dora-benchmark/sender/src/main.rs @@ -0,0 +1,58 @@ +use dora_node_api::{dora_core::config::DataId, DoraNode}; +use rand::Rng; + +use std::collections::HashMap; +use std::time::Duration; + +fn main() -> Result<(), Box> { + let latency = DataId::from("latency".to_owned()); + let throughput = DataId::from("throughput".to_owned()); + + let (mut node, _events) = DoraNode::init_from_env()?; + let sizes = [ + 720 * 480 * 3, + 1280 * 720 * 3, + 1920 * 1080 * 3, + 3840 * 2160 * 3, + ]; + + let mut data = HashMap::new(); + for size in sizes { + let vec: Vec = rand::thread_rng() + .sample_iter(rand::distributions::Standard) + .take(size) + .collect(); + + data.insert(size, vec); + } + + // test latency first + for size in sizes { + for _ in 0..100 { + let data = data.get(&size).unwrap(); + + node.send_output_raw(latency.clone(), Default::default(), data.len(), |out| { + out.copy_from_slice(&data); + })?; + + // sleep a bit to avoid queue buildup + std::thread::sleep(Duration::from_millis(10)); + } + } + + // wait a bit to ensure that all throughput messages reached their target + std::thread::sleep(Duration::from_secs(2)); + + // then throughput with full speed + for size in sizes { + for _ in 0..100 { + let data = data.get(&size).unwrap(); + + node.send_output_raw(throughput.clone(), Default::default(), data.len(), |out| { + out.copy_from_slice(&data); + })?; + } + } + + Ok(()) +} From f96be82c6412da5fe68fb8648cea8861e2f1fae0 Mon Sep 17 00:00:00 2001 From: Hennzau Date: Thu, 15 Aug 2024 17:10:56 +0200 Subject: [PATCH 5/7] benchmark pure arrow logs --- .../out/benchmark-pure-arrow/log_receiver.txt | 12 ++++++++++++ .../out/benchmark-pure-arrow/log_sender.txt | 0 2 files changed, 12 insertions(+) create mode 100644 examples/dora-benchmark/out/benchmark-pure-arrow/log_receiver.txt create mode 100644 examples/dora-benchmark/out/benchmark-pure-arrow/log_sender.txt diff --git a/examples/dora-benchmark/out/benchmark-pure-arrow/log_receiver.txt b/examples/dora-benchmark/out/benchmark-pure-arrow/log_receiver.txt new file mode 100644 index 0000000..7a7847f --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-pure-arrow/log_receiver.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 573.198µs +size 0x2a3000: 612.761µs +size 0x5eec00: 603.831µs +size 0x17bb000: 531.035µs +Throughput: +size 0xfd200 : 3710 messages per second +size 0x2a3000: 1018 messages per second +size 0x5eec00: 498 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 127 messages per second diff --git a/examples/dora-benchmark/out/benchmark-pure-arrow/log_sender.txt b/examples/dora-benchmark/out/benchmark-pure-arrow/log_sender.txt new file mode 100644 index 0000000..e69de29 From e6f04ed4c4788c0acb4a91b7cf5fe03de35e0cae Mon Sep 17 00:00:00 2001 From: Hennzau Date: Thu, 15 Aug 2024 18:54:13 +0200 Subject: [PATCH 6/7] Benchmark fastformat --- examples/dora-benchmark/.gitignore | 1 + .../dora-benchmark/dataflow-fastformat.yml | 14 + examples/dora-benchmark/dataflow-raw.yml | 14 + examples/dora-benchmark/dataflow.yml | 14 - examples/dora-benchmark/main.rs | 2 +- .../out/benchmark-fastformat/log_receiver.txt | 12 + .../out/benchmark-fastformat/log_sender.txt | 0 .../.gitignore | 0 .../receiver-fastformat/Cargo.lock | 2599 ++++++++++++++++ .../receiver-fastformat/Cargo.toml | 9 + .../receiver-fastformat/src/main.rs | 90 + .../{sender => receiver-raw}/.gitignore | 0 .../{receiver => receiver-raw}/Cargo.lock | 2 +- .../{receiver => receiver-raw}/Cargo.toml | 2 +- .../{receiver => receiver-raw}/src/main.rs | 0 .../sender-fastformat/.gitignore | 72 + .../sender-fastformat/Cargo.lock | 2600 +++++++++++++++++ .../sender-fastformat/Cargo.toml | 10 + .../sender-fastformat/src/main.rs | 83 + examples/dora-benchmark/sender-raw/.gitignore | 72 + .../{sender => sender-raw}/Cargo.lock | 2 +- .../{sender => sender-raw}/Cargo.toml | 2 +- .../{sender => sender-raw}/src/main.rs | 0 src/image/data.rs | 8 + 24 files changed, 5589 insertions(+), 19 deletions(-) create mode 100644 examples/dora-benchmark/dataflow-fastformat.yml create mode 100644 examples/dora-benchmark/dataflow-raw.yml delete mode 100644 examples/dora-benchmark/dataflow.yml create mode 100644 examples/dora-benchmark/out/benchmark-fastformat/log_receiver.txt create mode 100644 examples/dora-benchmark/out/benchmark-fastformat/log_sender.txt rename examples/dora-benchmark/{receiver => receiver-fastformat}/.gitignore (100%) create mode 100644 examples/dora-benchmark/receiver-fastformat/Cargo.lock create mode 100644 examples/dora-benchmark/receiver-fastformat/Cargo.toml create mode 100644 examples/dora-benchmark/receiver-fastformat/src/main.rs rename examples/dora-benchmark/{sender => receiver-raw}/.gitignore (100%) rename examples/dora-benchmark/{receiver => receiver-raw}/Cargo.lock (99%) rename examples/dora-benchmark/{receiver => receiver-raw}/Cargo.toml (80%) rename examples/dora-benchmark/{receiver => receiver-raw}/src/main.rs (100%) create mode 100644 examples/dora-benchmark/sender-fastformat/.gitignore create mode 100644 examples/dora-benchmark/sender-fastformat/Cargo.lock create mode 100644 examples/dora-benchmark/sender-fastformat/Cargo.toml create mode 100644 examples/dora-benchmark/sender-fastformat/src/main.rs create mode 100644 examples/dora-benchmark/sender-raw/.gitignore rename examples/dora-benchmark/{sender => sender-raw}/Cargo.lock (99%) rename examples/dora-benchmark/{sender => sender-raw}/Cargo.toml (82%) rename examples/dora-benchmark/{sender => sender-raw}/src/main.rs (100%) diff --git a/examples/dora-benchmark/.gitignore b/examples/dora-benchmark/.gitignore index c8f0442..b8e11ac 100644 --- a/examples/dora-benchmark/.gitignore +++ b/examples/dora-benchmark/.gitignore @@ -1,4 +1,5 @@ /target +/out # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/examples/dora-benchmark/dataflow-fastformat.yml b/examples/dora-benchmark/dataflow-fastformat.yml new file mode 100644 index 0000000..b82954d --- /dev/null +++ b/examples/dora-benchmark/dataflow-fastformat.yml @@ -0,0 +1,14 @@ +nodes: + - id: sender + build: cargo build --manifest-path ./sender-fastformat/Cargo.toml --release + path: ./sender-fastformat/target/release/dora-benchmark-sender-fastformat + outputs: + - latency + - throughput + + - id: receiver + build: cargo build --manifest-path ./receiver-fastformat/Cargo.toml --release + path: ./receiver-fastformat/target/release/dora-benchmark-receiver-fastformat + inputs: + latency: sender/latency + throughput: sender/throughput diff --git a/examples/dora-benchmark/dataflow-raw.yml b/examples/dora-benchmark/dataflow-raw.yml new file mode 100644 index 0000000..f73db3a --- /dev/null +++ b/examples/dora-benchmark/dataflow-raw.yml @@ -0,0 +1,14 @@ +nodes: + - id: sender + build: cargo build --manifest-path ./sender-raw/Cargo.toml --release + path: ./sender-raw/target/release/dora-benchmark-sender-raw + outputs: + - latency + - throughput + + - id: receiver + build: cargo build --manifest-path ./receiver-raw/Cargo.toml --release + path: ./receiver-raw/target/release/dora-benchmark-receiver-raw + inputs: + latency: sender/latency + throughput: sender/throughput diff --git a/examples/dora-benchmark/dataflow.yml b/examples/dora-benchmark/dataflow.yml deleted file mode 100644 index 821dbc7..0000000 --- a/examples/dora-benchmark/dataflow.yml +++ /dev/null @@ -1,14 +0,0 @@ -nodes: - - id: sender - build: cargo build --manifest-path ./sender/Cargo.toml --release - path: ./sender/target/release/dora-benchmark-sender - outputs: - - latency - - throughput - - - id: receiver - build: cargo build --manifest-path ./receiver/Cargo.toml --release - path: ./receiver/target/release/dora-benchmark-receiver - inputs: - latency: sender/latency - throughput: sender/throughput diff --git a/examples/dora-benchmark/main.rs b/examples/dora-benchmark/main.rs index 6e10c69..81317ea 100644 --- a/examples/dora-benchmark/main.rs +++ b/examples/dora-benchmark/main.rs @@ -7,7 +7,7 @@ fn main() -> Result<()> { std::env::set_current_dir(root.join(file!()).parent().unwrap()) .wrap_err("failed to set working dir")?; - let dataflow = Path::new("dataflow.yml"); + let dataflow = Path::new("dataflow-fastformat.yml"); destroy_dora()?; spawn_dora()?; diff --git a/examples/dora-benchmark/out/benchmark-fastformat/log_receiver.txt b/examples/dora-benchmark/out/benchmark-fastformat/log_receiver.txt new file mode 100644 index 0000000..32ec4b7 --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-fastformat/log_receiver.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 788.686µs +size 0x2a3000: 741.927µs +size 0x5eec00: 671.337µs +size 0x17bb000: 560.786µs +Throughput: +size 0xfd200 : 1941 messages per second +size 0x2a3000: 858 messages per second +size 0x5eec00: 454 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 134 messages per second diff --git a/examples/dora-benchmark/out/benchmark-fastformat/log_sender.txt b/examples/dora-benchmark/out/benchmark-fastformat/log_sender.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/dora-benchmark/receiver/.gitignore b/examples/dora-benchmark/receiver-fastformat/.gitignore similarity index 100% rename from examples/dora-benchmark/receiver/.gitignore rename to examples/dora-benchmark/receiver-fastformat/.gitignore diff --git a/examples/dora-benchmark/receiver-fastformat/Cargo.lock b/examples/dora-benchmark/receiver-fastformat/Cargo.lock new file mode 100644 index 0000000..0fb1274 --- /dev/null +++ b/examples/dora-benchmark/receiver-fastformat/Cargo.lock @@ -0,0 +1,2599 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" +dependencies = [ + "serde", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "arrow" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05048a8932648b63f21c37d88b552ccc8a65afb6dfe9fc9f30ce79174c2e7a85" +dependencies = [ + "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", +] + +[[package]] +name = "arrow-arith" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8a57966e43bfe9a3277984a14c24ec617ad874e4c0e1d2a1b083a39cfbf22c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "num", +] + +[[package]] +name = "arrow-array" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f4a9468c882dc66862cef4e1fd8423d47e67972377d85d80e022786427768c" +dependencies = [ + "ahash", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.14.5", + "num", +] + +[[package]] +name = "arrow-buffer" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c975484888fc95ec4a632cdc98be39c085b1bb518531b0c80c5d462063e5daa1" +dependencies = [ + "bytes", + "half", + "num", +] + +[[package]] +name = "arrow-cast" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da26719e76b81d8bc3faad1d4dbdc1bcc10d14704e63dc17fc9f3e7e1e567c8e" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "atoi", + "base64", + "chrono", + "half", + "lexical-core", + "num", + "ryu", +] + +[[package]] +name = "arrow-csv" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13c36dc5ddf8c128df19bab27898eea64bf9da2b555ec1cd17a8ff57fba9ec2" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", +] + +[[package]] +name = "arrow-data" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd9d6f18c65ef7a2573ab498c374d8ae364b4a4edf67105357491c031f716ca5" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num", +] + +[[package]] +name = "arrow-ipc" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e786e1cdd952205d9a8afc69397b317cfbb6e0095e445c69cda7e8da5c1eeb0f" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb22284c5a2a01d73cebfd88a33511a3234ab45d66086b2ca2d1228c3498e445" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "indexmap 2.4.0", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42745f86b1ab99ef96d1c0bcf49180848a64fe2c7a7a0d945bc64fa2b21ba9bc" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half", + "num", +] + +[[package]] +name = "arrow-row" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd09a518c602a55bd406bcc291a967b284cfa7a63edfbf8b897ea4748aad23c" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", +] + +[[package]] +name = "arrow-schema" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e972cd1ff4a4ccd22f86d3e53e835c2ed92e0eea6a3e8eadb72b4f1ac802cf8" +dependencies = [ + "serde", +] + +[[package]] +name = "arrow-select" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600bae05d43483d216fb3494f8c32fdbefd8aa4e1de237e790dbb3d9f44690a3" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] + +[[package]] +name = "arrow-string" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc1985b67cb45f6606a248ac2b4a288849f196bab8c657ea5589f47cdd55e6" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num", + "regex", + "regex-syntax 0.8.4", +] + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" + +[[package]] +name = "cc" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68064e60dbf1f17005c2fde4d07c16d8baa506fd7ffed8ccab702d93617975c7" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.6", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[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 = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +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 = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "diatomic-waker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92a510eb4dc7fa435297888c00e0f999aa2ee3e920a357221c35ab615a80bbcf" +dependencies = [ + "loom", + "waker-fn", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dora-arrow-convert" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c924a392b436e3a8a6e508e604eff47dfea0f1a96f0f0a39692c22ef041f5d1" +dependencies = [ + "arrow", + "eyre", +] + +[[package]] +name = "dora-benchmark-receiver-fastformat" +version = "0.1.0" +dependencies = [ + "arrow", + "dora-node-api", + "fastformat", +] + +[[package]] +name = "dora-core" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be4d038f9ec95fa38a207d67f93c02860d3f52838bb063f8c4fedbb1de437d6" +dependencies = [ + "aligned-vec", + "dora-message", + "eyre", + "log", + "once_cell", + "schemars", + "serde", + "serde-with-expand-env", + "serde_json", + "serde_yaml 0.9.34+deprecated", + "tokio", + "tracing", + "uuid", + "which", +] + +[[package]] +name = "dora-message" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f7dd7598edfe42370222f8c6446fe90a5b01c40da5ae30e755cdfff71569c7" +dependencies = [ + "arrow-data", + "arrow-schema", + "eyre", + "serde", + "uhlc", +] + +[[package]] +name = "dora-node-api" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e81424629878132deeb51ccb13a06d537db4bbc79a6dcdaa8c399963babd9c4a" +dependencies = [ + "aligned-vec", + "arrow", + "bincode", + "dora-arrow-convert", + "dora-core", + "dora-tracing", + "eyre", + "flume", + "futures", + "futures-concurrency", + "futures-timer", + "serde_json", + "serde_yaml 0.8.26", + "shared-memory-server", + "shared_memory_extended", + "tracing", +] + +[[package]] +name = "dora-tracing" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50813996d0f48fc41663f46904d25d890a66fd0b7f5f9df24f8c2a66a8cc464" +dependencies = [ + "eyre", + "opentelemetry", + "opentelemetry-jaeger", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", +] + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastformat" +version = "0.1.0" +dependencies = [ + "arrow", + "eyre", + "ndarray", + "pyo3", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[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", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-buffered" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fa130f3777d0d4b0993653c20bc433026d3290627693c4ed1b18dd237357ab" +dependencies = [ + "diatomic-waker", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-concurrency" +version = "7.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b14ac911e85d57c5ea6eef76d7b4d4a3177ecd15f4bea2e61927e9e3823e19f" +dependencies = [ + "bitvec", + "futures-buffered", + "futures-core", + "futures-lite", + "pin-project", + "slab", + "smallvec", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[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.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[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.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[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 = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +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 = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[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", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "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 = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +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" +dependencies = [ + "serde", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", +] + +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e785d273968748578931e4dc3b4f5ec86b26e09d9e0d66b55adda7fce742f7a" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "once_cell", + "opentelemetry", + "opentelemetry-semantic-conventions", + "thiserror", + "thrift", + "tokio", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b02e0230abb0ab6636d18e2ba8fa02903ea63772281340ccac18e0af3ec9eeb" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "ordered-float" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[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 0.52.6", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "portable-atomic" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + +[[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.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset 0.9.1", + "parking_lot", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[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 = "raw_sync_2" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f067b45fa17e31d15636789c2638bd562da5496d498876cf0495df78f7e4fdcb" +dependencies = [ + "cfg-if", + "libc", + "nix 0.23.2", + "rand", + "winapi", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-with-expand-env" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888d884a3be3a209308d0b66f1918ff18f60e93db837259e53ea7d8dd14e7e98" +dependencies = [ + "serde", + "shellexpand", +] + +[[package]] +name = "serde_derive" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.4.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared-memory-server" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9554cb9e96e2e1984580a6b98d845db97c5e94c84bbe629ec92f82cd4764d06" +dependencies = [ + "bincode", + "eyre", + "raw_sync_2", + "serde", + "shared_memory_extended", + "tracing", +] + +[[package]] +name = "shared_memory_extended" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "004d7ece9a3be64f85471d50967710b0a146144225bed5f0abd0514a3bed086f" +dependencies = [ + "cfg-if", + "libc", + "nix 0.26.4", + "rand", + "win-sys", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "syn" +version = "2.0.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09678c4cdbb4eed72e18b7c2af1329c69825ed16fcbac62d083fc3e2b0590ff0" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tokio" +version = "1.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ebb87a95ea13271332df069020513ab70bdb5637ca42d6e492dc3bbbad48de" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "uhlc" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d291a7454d390b753ef68df8145da18367e32883ec2fa863959f0aefb915cdb" +dependencies = [ + "hex", + "humantime", + "lazy_static", + "log", + "serde", + "spin", + "uuid", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unindent" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "which" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "win-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b7b128a98c1cfa201b09eb49ba285887deb3cbe7466a98850eb1adabb452be5" +dependencies = [ + "windows 0.34.0", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" +dependencies = [ + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/examples/dora-benchmark/receiver-fastformat/Cargo.toml b/examples/dora-benchmark/receiver-fastformat/Cargo.toml new file mode 100644 index 0000000..47cf747 --- /dev/null +++ b/examples/dora-benchmark/receiver-fastformat/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "dora-benchmark-receiver-fastformat" +version = "0.1.0" +edition = "2021" + +[dependencies] +dora-node-api = "0.3.5" +arrow = "52.1.0" +fastformat = { path = "../../../../fastformat" } diff --git a/examples/dora-benchmark/receiver-fastformat/src/main.rs b/examples/dora-benchmark/receiver-fastformat/src/main.rs new file mode 100644 index 0000000..3b7c884 --- /dev/null +++ b/examples/dora-benchmark/receiver-fastformat/src/main.rs @@ -0,0 +1,90 @@ +use dora_node_api::{self, DoraNode, Event}; +use std::time::{Duration, Instant}; + +use fastformat::image::Image; + +fn main() -> Result<(), Box> { + let (_node, mut events) = DoraNode::init_from_env()?; + + // latency is tested first + let mut latency = true; + + let mut current_size = 0; + let mut n = 0; + let mut start = Instant::now(); + let mut latencies = Vec::new(); + + println!("Latency:"); + + while let Some(event) = events.recv() { + match event { + Event::Input { id, metadata, data } => { + use arrow::array::Array; + + let image_raw = Image::raw_data(data.0.into_data())?; + let image = Image::view_from_raw_data(&image_raw)?; + + // check if new size bracket + let data_len = image.data.len(); + if data_len != current_size { + if n > 0 { + record_results(start, current_size, n, latencies, latency); + } + current_size = data_len; + n = 0; + start = Instant::now(); + latencies = Vec::new(); + } + + match id.as_str() { + "latency" if latency => {} + "throughput" if latency => { + latency = false; + println!("Throughput:"); + } + "throughput" => {} + other => { + eprintln!("Ignoring unexpected input `{other}`"); + continue; + } + } + + n += 1; + latencies.push( + metadata + .timestamp() + .get_time() + .to_system_time() + .elapsed() + .unwrap_or_default(), + ); + } + Event::InputClosed { id } => { + println!("Input `{id}` was closed"); + } + other => eprintln!("Received unexpected input: {other:?}"), + } + } + + record_results(start, current_size, n, latencies, latency); + + Ok(()) +} + +fn record_results( + start: Instant, + current_size: usize, + n: u32, + latencies: Vec, + latency: bool, +) { + let msg = if latency { + let avg_latency = latencies.iter().sum::() / n; + format!("size {current_size:<#8x}: {avg_latency:?}") + } else { + let duration = start.elapsed(); + let msg_per_sec = n as f64 / duration.as_secs_f64(); + format!("size {current_size:<#8x}: {msg_per_sec:.0} messages per second") + }; + println!("{msg}"); +} diff --git a/examples/dora-benchmark/sender/.gitignore b/examples/dora-benchmark/receiver-raw/.gitignore similarity index 100% rename from examples/dora-benchmark/sender/.gitignore rename to examples/dora-benchmark/receiver-raw/.gitignore diff --git a/examples/dora-benchmark/receiver/Cargo.lock b/examples/dora-benchmark/receiver-raw/Cargo.lock similarity index 99% rename from examples/dora-benchmark/receiver/Cargo.lock rename to examples/dora-benchmark/receiver-raw/Cargo.lock index c86f06f..9f706a3 100644 --- a/examples/dora-benchmark/receiver/Cargo.lock +++ b/examples/dora-benchmark/receiver-raw/Cargo.lock @@ -528,7 +528,7 @@ dependencies = [ ] [[package]] -name = "dora-benchmark-receiver" +name = "dora-benchmark-receiver-raw" version = "0.1.0" dependencies = [ "arrow", diff --git a/examples/dora-benchmark/receiver/Cargo.toml b/examples/dora-benchmark/receiver-raw/Cargo.toml similarity index 80% rename from examples/dora-benchmark/receiver/Cargo.toml rename to examples/dora-benchmark/receiver-raw/Cargo.toml index acde7fa..4485b85 100644 --- a/examples/dora-benchmark/receiver/Cargo.toml +++ b/examples/dora-benchmark/receiver-raw/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "dora-benchmark-receiver" +name = "dora-benchmark-receiver-raw" version = "0.1.0" edition = "2021" diff --git a/examples/dora-benchmark/receiver/src/main.rs b/examples/dora-benchmark/receiver-raw/src/main.rs similarity index 100% rename from examples/dora-benchmark/receiver/src/main.rs rename to examples/dora-benchmark/receiver-raw/src/main.rs diff --git a/examples/dora-benchmark/sender-fastformat/.gitignore b/examples/dora-benchmark/sender-fastformat/.gitignore new file mode 100644 index 0000000..c8f0442 --- /dev/null +++ b/examples/dora-benchmark/sender-fastformat/.gitignore @@ -0,0 +1,72 @@ +/target + +# Byte-compiled / optimized / DLL files +__pycache__/ +.pytest_cache/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +.venv/ +env/ +bin/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +include/ +man/ +venv/ +*.egg-info/ +.installed.cfg +*.egg + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt +pip-selfcheck.json + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# Rope +.ropeproject + +# Django stuff: +*.log +*.pot + +.DS_Store + +# Sphinx documentation +docs/_build/ + +# PyCharm +.idea/ + +# VSCode +.vscode/ + +# Pyenv +.python-version diff --git a/examples/dora-benchmark/sender-fastformat/Cargo.lock b/examples/dora-benchmark/sender-fastformat/Cargo.lock new file mode 100644 index 0000000..bee1340 --- /dev/null +++ b/examples/dora-benchmark/sender-fastformat/Cargo.lock @@ -0,0 +1,2600 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aligned-vec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" +dependencies = [ + "serde", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "arrow" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05048a8932648b63f21c37d88b552ccc8a65afb6dfe9fc9f30ce79174c2e7a85" +dependencies = [ + "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", +] + +[[package]] +name = "arrow-arith" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8a57966e43bfe9a3277984a14c24ec617ad874e4c0e1d2a1b083a39cfbf22c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "num", +] + +[[package]] +name = "arrow-array" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f4a9468c882dc66862cef4e1fd8423d47e67972377d85d80e022786427768c" +dependencies = [ + "ahash", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.14.5", + "num", +] + +[[package]] +name = "arrow-buffer" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c975484888fc95ec4a632cdc98be39c085b1bb518531b0c80c5d462063e5daa1" +dependencies = [ + "bytes", + "half", + "num", +] + +[[package]] +name = "arrow-cast" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da26719e76b81d8bc3faad1d4dbdc1bcc10d14704e63dc17fc9f3e7e1e567c8e" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "atoi", + "base64", + "chrono", + "half", + "lexical-core", + "num", + "ryu", +] + +[[package]] +name = "arrow-csv" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13c36dc5ddf8c128df19bab27898eea64bf9da2b555ec1cd17a8ff57fba9ec2" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", +] + +[[package]] +name = "arrow-data" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd9d6f18c65ef7a2573ab498c374d8ae364b4a4edf67105357491c031f716ca5" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num", +] + +[[package]] +name = "arrow-ipc" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e786e1cdd952205d9a8afc69397b317cfbb6e0095e445c69cda7e8da5c1eeb0f" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", +] + +[[package]] +name = "arrow-json" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb22284c5a2a01d73cebfd88a33511a3234ab45d66086b2ca2d1228c3498e445" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "indexmap 2.4.0", + "lexical-core", + "num", + "serde", + "serde_json", +] + +[[package]] +name = "arrow-ord" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42745f86b1ab99ef96d1c0bcf49180848a64fe2c7a7a0d945bc64fa2b21ba9bc" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half", + "num", +] + +[[package]] +name = "arrow-row" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd09a518c602a55bd406bcc291a967b284cfa7a63edfbf8b897ea4748aad23c" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", +] + +[[package]] +name = "arrow-schema" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e972cd1ff4a4ccd22f86d3e53e835c2ed92e0eea6a3e8eadb72b4f1ac802cf8" +dependencies = [ + "serde", +] + +[[package]] +name = "arrow-select" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "600bae05d43483d216fb3494f8c32fdbefd8aa4e1de237e790dbb3d9f44690a3" +dependencies = [ + "ahash", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] + +[[package]] +name = "arrow-string" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dc1985b67cb45f6606a248ac2b4a288849f196bab8c657ea5589f47cdd55e6" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num", + "regex", + "regex-syntax 0.8.4", +] + +[[package]] +name = "async-trait" +version = "0.1.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" + +[[package]] +name = "cc" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68064e60dbf1f17005c2fde4d07c16d8baa506fd7ffed8ccab702d93617975c7" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "windows-targets 0.52.6", +] + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[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 = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +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 = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "diatomic-waker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92a510eb4dc7fa435297888c00e0f999aa2ee3e920a357221c35ab615a80bbcf" +dependencies = [ + "loom", + "waker-fn", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dora-arrow-convert" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c924a392b436e3a8a6e508e604eff47dfea0f1a96f0f0a39692c22ef041f5d1" +dependencies = [ + "arrow", + "eyre", +] + +[[package]] +name = "dora-benchmark-sender-fastformat" +version = "0.1.0" +dependencies = [ + "arrow", + "dora-node-api", + "fastformat", + "rand", +] + +[[package]] +name = "dora-core" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be4d038f9ec95fa38a207d67f93c02860d3f52838bb063f8c4fedbb1de437d6" +dependencies = [ + "aligned-vec", + "dora-message", + "eyre", + "log", + "once_cell", + "schemars", + "serde", + "serde-with-expand-env", + "serde_json", + "serde_yaml 0.9.34+deprecated", + "tokio", + "tracing", + "uuid", + "which", +] + +[[package]] +name = "dora-message" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f7dd7598edfe42370222f8c6446fe90a5b01c40da5ae30e755cdfff71569c7" +dependencies = [ + "arrow-data", + "arrow-schema", + "eyre", + "serde", + "uhlc", +] + +[[package]] +name = "dora-node-api" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e81424629878132deeb51ccb13a06d537db4bbc79a6dcdaa8c399963babd9c4a" +dependencies = [ + "aligned-vec", + "arrow", + "bincode", + "dora-arrow-convert", + "dora-core", + "dora-tracing", + "eyre", + "flume", + "futures", + "futures-concurrency", + "futures-timer", + "serde_json", + "serde_yaml 0.8.26", + "shared-memory-server", + "shared_memory_extended", + "tracing", +] + +[[package]] +name = "dora-tracing" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50813996d0f48fc41663f46904d25d890a66fd0b7f5f9df24f8c2a66a8cc464" +dependencies = [ + "eyre", + "opentelemetry", + "opentelemetry-jaeger", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", +] + +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastformat" +version = "0.1.0" +dependencies = [ + "arrow", + "eyre", + "ndarray", + "pyo3", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[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", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-buffered" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fa130f3777d0d4b0993653c20bc433026d3290627693c4ed1b18dd237357ab" +dependencies = [ + "diatomic-waker", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-concurrency" +version = "7.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b14ac911e85d57c5ea6eef76d7b4d4a3177ecd15f4bea2e61927e9e3823e19f" +dependencies = [ + "bitvec", + "futures-buffered", + "futures-core", + "futures-lite", + "pin-project", + "slab", + "smallvec", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generator" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" +dependencies = [ + "cc", + "libc", + "log", + "rustversion", + "windows 0.48.0", +] + +[[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.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[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.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[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 = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +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 = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +dependencies = [ + "equivalent", + "hashbrown 0.14.5", +] + +[[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", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "js-sys" +version = "0.3.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +dependencies = [ + "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 = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +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" +dependencies = [ + "serde", +] + +[[package]] +name = "loom" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", +] + +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e785d273968748578931e4dc3b4f5ec86b26e09d9e0d66b55adda7fce742f7a" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "once_cell", + "opentelemetry", + "opentelemetry-semantic-conventions", + "thiserror", + "thrift", + "tokio", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b02e0230abb0ab6636d18e2ba8fa02903ea63772281340ccac18e0af3ec9eeb" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand", + "thiserror", + "tokio", + "tokio-stream", +] + +[[package]] +name = "ordered-float" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[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 0.52.6", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "portable-atomic" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + +[[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.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset 0.9.1", + "parking_lot", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.21.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[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 = "raw_sync_2" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f067b45fa17e31d15636789c2638bd562da5496d498876cf0495df78f7e4fdcb" +dependencies = [ + "cfg-if", + "libc", + "nix 0.23.2", + "rand", + "winapi", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-with-expand-env" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888d884a3be3a209308d0b66f1918ff18f60e93db837259e53ea7d8dd14e7e98" +dependencies = [ + "serde", + "shellexpand", +] + +[[package]] +name = "serde_derive" +version = "1.0.207" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.125" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.4.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared-memory-server" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9554cb9e96e2e1984580a6b98d845db97c5e94c84bbe629ec92f82cd4764d06" +dependencies = [ + "bincode", + "eyre", + "raw_sync_2", + "serde", + "shared_memory_extended", + "tracing", +] + +[[package]] +name = "shared_memory_extended" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "004d7ece9a3be64f85471d50967710b0a146144225bed5f0abd0514a3bed086f" +dependencies = [ + "cfg-if", + "libc", + "nix 0.26.4", + "rand", + "win-sys", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "syn" +version = "2.0.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "thrift" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09678c4cdbb4eed72e18b7c2af1329c69825ed16fcbac62d083fc3e2b0590ff0" +dependencies = [ + "byteorder", + "integer-encoding", + "log", + "ordered-float", + "threadpool", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tokio" +version = "1.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-stream" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21ebb87a95ea13271332df069020513ab70bdb5637ca42d6e492dc3bbbad48de" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", +] + +[[package]] +name = "uhlc" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d291a7454d390b753ef68df8145da18367e32883ec2fa863959f0aefb915cdb" +dependencies = [ + "hex", + "humantime", + "lazy_static", + "log", + "serde", + "spin", + "uuid", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unindent" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" + +[[package]] +name = "which" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "win-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b7b128a98c1cfa201b09eb49ba285887deb3cbe7466a98850eb1adabb452be5" +dependencies = [ + "windows 0.34.0", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" +dependencies = [ + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/examples/dora-benchmark/sender-fastformat/Cargo.toml b/examples/dora-benchmark/sender-fastformat/Cargo.toml new file mode 100644 index 0000000..aaa8f1a --- /dev/null +++ b/examples/dora-benchmark/sender-fastformat/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "dora-benchmark-sender-fastformat" +version = "0.1.0" +edition = "2021" + +[dependencies] +dora-node-api = "0.3.5" +arrow = "52.1.0" +fastformat = { path = "../../../../fastformat" } +rand = "0.8.5" diff --git a/examples/dora-benchmark/sender-fastformat/src/main.rs b/examples/dora-benchmark/sender-fastformat/src/main.rs new file mode 100644 index 0000000..f350424 --- /dev/null +++ b/examples/dora-benchmark/sender-fastformat/src/main.rs @@ -0,0 +1,83 @@ +use dora_node_api::{dora_core::config::DataId, DoraNode}; +use rand::Rng; + +use std::collections::HashMap; +use std::time::Duration; + +use fastformat::image::Image; + +fn main() -> Result<(), Box> { + let latency = DataId::from("latency".to_owned()); + let throughput = DataId::from("throughput".to_owned()); + + let (mut node, _events) = DoraNode::init_from_env()?; + + let sizes: [(u32, u32, u32); 4] = [ + (720, 480, 3), + (1280, 720, 3), + (1920, 1080, 3), + (3840, 2160, 3), + ]; + + let mut data = HashMap::new(); + for (width, height, c) in &sizes { + let size = (width * height * c) as usize; + let vec: Vec = rand::thread_rng() + .sample_iter(rand::distributions::Standard) + .take(size) + .collect(); + + data.insert(size, vec); + } + + // test latency first + for (width, height, c) in &sizes { + let (width, height, c) = (width.clone(), height.clone(), c.clone()); + let size = (width * height * c) as usize; + for _ in 0..100 { + let data = data.get(&size).unwrap(); + let image = Image::new_bgr8(data.clone(), width, height, None)?; + + node.send_output( + latency.clone(), + Default::default(), + arrow::array::UnionArray::from(image.into_arrow()?), + )?; + /* + node.send_output_raw(latency.clone(), Default::default(), data.len(), |out| { + out.copy_from_slice(&data); + })?; + */ + + // sleep a bit to avoid queue buildup + std::thread::sleep(Duration::from_millis(10)); + } + } + + // wait a bit to ensure that all throughput messages reached their target + std::thread::sleep(Duration::from_secs(2)); + + // then throughput with full speed + for (width, height, c) in &sizes { + let (width, height, c) = (width.clone(), height.clone(), c.clone()); + let size = (width * height * c) as usize; + for _ in 0..100 { + let data = data.get(&size).unwrap(); + let image = Image::new_bgr8(data.clone(), width, height, None)?; + + node.send_output( + throughput.clone(), + Default::default(), + arrow::array::UnionArray::from(image.into_arrow()?), + )?; + + /* + node.send_output_raw(throughput.clone(), Default::default(), data.len(), |out| { + out.copy_from_slice(&data); + })?; + */ + } + } + + Ok(()) +} diff --git a/examples/dora-benchmark/sender-raw/.gitignore b/examples/dora-benchmark/sender-raw/.gitignore new file mode 100644 index 0000000..c8f0442 --- /dev/null +++ b/examples/dora-benchmark/sender-raw/.gitignore @@ -0,0 +1,72 @@ +/target + +# Byte-compiled / optimized / DLL files +__pycache__/ +.pytest_cache/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +.venv/ +env/ +bin/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +include/ +man/ +venv/ +*.egg-info/ +.installed.cfg +*.egg + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt +pip-selfcheck.json + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# Rope +.ropeproject + +# Django stuff: +*.log +*.pot + +.DS_Store + +# Sphinx documentation +docs/_build/ + +# PyCharm +.idea/ + +# VSCode +.vscode/ + +# Pyenv +.python-version diff --git a/examples/dora-benchmark/sender/Cargo.lock b/examples/dora-benchmark/sender-raw/Cargo.lock similarity index 99% rename from examples/dora-benchmark/sender/Cargo.lock rename to examples/dora-benchmark/sender-raw/Cargo.lock index c9fc5b1..e8d8b9a 100644 --- a/examples/dora-benchmark/sender/Cargo.lock +++ b/examples/dora-benchmark/sender-raw/Cargo.lock @@ -528,7 +528,7 @@ dependencies = [ ] [[package]] -name = "dora-benchmark-sender" +name = "dora-benchmark-sender-raw" version = "0.1.0" dependencies = [ "arrow", diff --git a/examples/dora-benchmark/sender/Cargo.toml b/examples/dora-benchmark/sender-raw/Cargo.toml similarity index 82% rename from examples/dora-benchmark/sender/Cargo.toml rename to examples/dora-benchmark/sender-raw/Cargo.toml index 7909bc2..6e82a73 100644 --- a/examples/dora-benchmark/sender/Cargo.toml +++ b/examples/dora-benchmark/sender-raw/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "dora-benchmark-sender" +name = "dora-benchmark-sender-raw" version = "0.1.0" edition = "2021" diff --git a/examples/dora-benchmark/sender/src/main.rs b/examples/dora-benchmark/sender-raw/src/main.rs similarity index 100% rename from examples/dora-benchmark/sender/src/main.rs rename to examples/dora-benchmark/sender-raw/src/main.rs diff --git a/src/image/data.rs b/src/image/data.rs index e737fbe..18e4567 100644 --- a/src/image/data.rs +++ b/src/image/data.rs @@ -10,6 +10,14 @@ pub enum ImageData<'a> { } impl ImageData<'_> { + pub fn len(&self) -> usize { + match self { + Self::U8(data) => data.len(), + Self::U16(data) => data.len(), + Self::F32(data) => data.len(), + } + } + pub fn as_ptr(&self) -> *const u64 { match self { Self::U8(data) => data.as_ptr() as *const u64, From be3fae2f105f02a3fe5627452b720578134fff3f Mon Sep 17 00:00:00 2001 From: Hennzau Date: Thu, 15 Aug 2024 23:12:18 +0200 Subject: [PATCH 7/7] Benchmark FastFormat vs Raw --- .../dora-benchmark/dataflow-fastformat.yml | 8 +++--- examples/dora-benchmark/dataflow-raw.yml | 8 +++--- examples/dora-benchmark/dataflow.yml | 28 +++++++++++++++++++ examples/dora-benchmark/main.rs | 2 +- .../log_receiver-fastformat.txt | 12 ++++++++ .../out/benchmark-all1/log_receiver-raw.txt | 12 ++++++++ .../log_sender-fastformat.txt} | 0 .../log_sender-raw.txt} | 0 .../log_receiver-fastformat.txt | 12 ++++++++ .../out/benchmark-all2/log_receiver-raw.txt | 12 ++++++++ .../benchmark-all2/log_sender-fastformat.txt | 0 .../out/benchmark-all2/log_sender-raw.txt | 0 .../out/benchmark-fastformat/log_receiver.txt | 12 -------- .../benchmark-ff1/log_receiver-fastformat.txt | 12 ++++++++ .../benchmark-ff1/log_sender-fastformat.txt | 0 .../benchmark-ff2/log_receiver-fastformat.txt | 12 ++++++++ .../benchmark-ff2/log_sender-fastformat.txt | 0 .../out/benchmark-pure-arrow/log_receiver.txt | 12 -------- .../out/benchmark-raw1/log_receiver-raw.txt | 12 ++++++++ .../out/benchmark-raw1/log_sender-raw.txt | 0 .../out/benchmark-raw2/log_receiver-raw.txt | 12 ++++++++ .../out/benchmark-raw2/log_sender-raw.txt | 0 .../sender-fastformat/src/main.rs | 4 +-- .../dora-benchmark/sender-raw/src/main.rs | 28 ++++++++++++------- 24 files changed, 153 insertions(+), 45 deletions(-) create mode 100644 examples/dora-benchmark/dataflow.yml create mode 100644 examples/dora-benchmark/out/benchmark-all1/log_receiver-fastformat.txt create mode 100644 examples/dora-benchmark/out/benchmark-all1/log_receiver-raw.txt rename examples/dora-benchmark/out/{benchmark-fastformat/log_sender.txt => benchmark-all1/log_sender-fastformat.txt} (100%) rename examples/dora-benchmark/out/{benchmark-pure-arrow/log_sender.txt => benchmark-all1/log_sender-raw.txt} (100%) create mode 100644 examples/dora-benchmark/out/benchmark-all2/log_receiver-fastformat.txt create mode 100644 examples/dora-benchmark/out/benchmark-all2/log_receiver-raw.txt create mode 100644 examples/dora-benchmark/out/benchmark-all2/log_sender-fastformat.txt create mode 100644 examples/dora-benchmark/out/benchmark-all2/log_sender-raw.txt delete mode 100644 examples/dora-benchmark/out/benchmark-fastformat/log_receiver.txt create mode 100644 examples/dora-benchmark/out/benchmark-ff1/log_receiver-fastformat.txt create mode 100644 examples/dora-benchmark/out/benchmark-ff1/log_sender-fastformat.txt create mode 100644 examples/dora-benchmark/out/benchmark-ff2/log_receiver-fastformat.txt create mode 100644 examples/dora-benchmark/out/benchmark-ff2/log_sender-fastformat.txt delete mode 100644 examples/dora-benchmark/out/benchmark-pure-arrow/log_receiver.txt create mode 100644 examples/dora-benchmark/out/benchmark-raw1/log_receiver-raw.txt create mode 100644 examples/dora-benchmark/out/benchmark-raw1/log_sender-raw.txt create mode 100644 examples/dora-benchmark/out/benchmark-raw2/log_receiver-raw.txt create mode 100644 examples/dora-benchmark/out/benchmark-raw2/log_sender-raw.txt diff --git a/examples/dora-benchmark/dataflow-fastformat.yml b/examples/dora-benchmark/dataflow-fastformat.yml index b82954d..2ab49a0 100644 --- a/examples/dora-benchmark/dataflow-fastformat.yml +++ b/examples/dora-benchmark/dataflow-fastformat.yml @@ -1,14 +1,14 @@ nodes: - - id: sender + - id: sender-fastformat build: cargo build --manifest-path ./sender-fastformat/Cargo.toml --release path: ./sender-fastformat/target/release/dora-benchmark-sender-fastformat outputs: - latency - throughput - - id: receiver + - id: receiver-fastformat build: cargo build --manifest-path ./receiver-fastformat/Cargo.toml --release path: ./receiver-fastformat/target/release/dora-benchmark-receiver-fastformat inputs: - latency: sender/latency - throughput: sender/throughput + latency: sender-fastformat/latency + throughput: sender-fastformat/throughput diff --git a/examples/dora-benchmark/dataflow-raw.yml b/examples/dora-benchmark/dataflow-raw.yml index f73db3a..a5db710 100644 --- a/examples/dora-benchmark/dataflow-raw.yml +++ b/examples/dora-benchmark/dataflow-raw.yml @@ -1,14 +1,14 @@ nodes: - - id: sender + - id: sender-raw build: cargo build --manifest-path ./sender-raw/Cargo.toml --release path: ./sender-raw/target/release/dora-benchmark-sender-raw outputs: - latency - throughput - - id: receiver + - id: receiver-raw build: cargo build --manifest-path ./receiver-raw/Cargo.toml --release path: ./receiver-raw/target/release/dora-benchmark-receiver-raw inputs: - latency: sender/latency - throughput: sender/throughput + latency: sender-raw/latency + throughput: sender-raw/throughput diff --git a/examples/dora-benchmark/dataflow.yml b/examples/dora-benchmark/dataflow.yml new file mode 100644 index 0000000..5187fd4 --- /dev/null +++ b/examples/dora-benchmark/dataflow.yml @@ -0,0 +1,28 @@ +nodes: + - id: sender-raw + build: cargo build --manifest-path ./sender-raw/Cargo.toml --release + path: ./sender-raw/target/release/dora-benchmark-sender-raw + outputs: + - latency + - throughput + + - id: receiver-raw + build: cargo build --manifest-path ./receiver-raw/Cargo.toml --release + path: ./receiver-raw/target/release/dora-benchmark-receiver-raw + inputs: + latency: sender-raw/latency + throughput: sender-raw/throughput + + - id: sender-fastformat + build: cargo build --manifest-path ./sender-fastformat/Cargo.toml --release + path: ./sender-fastformat/target/release/dora-benchmark-sender-fastformat + outputs: + - latency + - throughput + + - id: receiver-fastformat + build: cargo build --manifest-path ./receiver-fastformat/Cargo.toml --release + path: ./receiver-fastformat/target/release/dora-benchmark-receiver-fastformat + inputs: + latency: sender-fastformat/latency + throughput: sender-fastformat/throughput diff --git a/examples/dora-benchmark/main.rs b/examples/dora-benchmark/main.rs index 81317ea..6e10c69 100644 --- a/examples/dora-benchmark/main.rs +++ b/examples/dora-benchmark/main.rs @@ -7,7 +7,7 @@ fn main() -> Result<()> { std::env::set_current_dir(root.join(file!()).parent().unwrap()) .wrap_err("failed to set working dir")?; - let dataflow = Path::new("dataflow-fastformat.yml"); + let dataflow = Path::new("dataflow.yml"); destroy_dora()?; spawn_dora()?; diff --git a/examples/dora-benchmark/out/benchmark-all1/log_receiver-fastformat.txt b/examples/dora-benchmark/out/benchmark-all1/log_receiver-fastformat.txt new file mode 100644 index 0000000..ecff627 --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-all1/log_receiver-fastformat.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 631.22µs +size 0x2a3000: 734.287µs +size 0x5eec00: 1.119144ms +size 0x17bb000: 2.084592ms +Throughput: +size 0xfd200 : 179 messages per second +size 0x2a3000: 1858 messages per second +size 0x5eec00: 608 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 155 messages per second diff --git a/examples/dora-benchmark/out/benchmark-all1/log_receiver-raw.txt b/examples/dora-benchmark/out/benchmark-all1/log_receiver-raw.txt new file mode 100644 index 0000000..d1f9fe3 --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-all1/log_receiver-raw.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 510.034µs +size 0x2a3000: 632.592µs +size 0x5eec00: 796.755µs +size 0x17bb000: 1.776238ms +Throughput: +size 0xfd200 : 1817 messages per second +size 0x2a3000: 698 messages per second +size 0x5eec00: 586 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 160 messages per second diff --git a/examples/dora-benchmark/out/benchmark-fastformat/log_sender.txt b/examples/dora-benchmark/out/benchmark-all1/log_sender-fastformat.txt similarity index 100% rename from examples/dora-benchmark/out/benchmark-fastformat/log_sender.txt rename to examples/dora-benchmark/out/benchmark-all1/log_sender-fastformat.txt diff --git a/examples/dora-benchmark/out/benchmark-pure-arrow/log_sender.txt b/examples/dora-benchmark/out/benchmark-all1/log_sender-raw.txt similarity index 100% rename from examples/dora-benchmark/out/benchmark-pure-arrow/log_sender.txt rename to examples/dora-benchmark/out/benchmark-all1/log_sender-raw.txt diff --git a/examples/dora-benchmark/out/benchmark-all2/log_receiver-fastformat.txt b/examples/dora-benchmark/out/benchmark-all2/log_receiver-fastformat.txt new file mode 100644 index 0000000..80829ef --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-all2/log_receiver-fastformat.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 668.844µs +size 0x2a3000: 784.455µs +size 0x5eec00: 1.186606ms +size 0x17bb000: 2.030822ms +Throughput: +size 0xfd200 : 176 messages per second +size 0x2a3000: 1876 messages per second +size 0x5eec00: 603 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 155 messages per second diff --git a/examples/dora-benchmark/out/benchmark-all2/log_receiver-raw.txt b/examples/dora-benchmark/out/benchmark-all2/log_receiver-raw.txt new file mode 100644 index 0000000..3b0d5a1 --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-all2/log_receiver-raw.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 554.816µs +size 0x2a3000: 663.627µs +size 0x5eec00: 856.833µs +size 0x17bb000: 1.715494ms +Throughput: +size 0xfd200 : 1972 messages per second +size 0x2a3000: 662 messages per second +size 0x5eec00: 535 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 157 messages per second diff --git a/examples/dora-benchmark/out/benchmark-all2/log_sender-fastformat.txt b/examples/dora-benchmark/out/benchmark-all2/log_sender-fastformat.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/dora-benchmark/out/benchmark-all2/log_sender-raw.txt b/examples/dora-benchmark/out/benchmark-all2/log_sender-raw.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/dora-benchmark/out/benchmark-fastformat/log_receiver.txt b/examples/dora-benchmark/out/benchmark-fastformat/log_receiver.txt deleted file mode 100644 index 32ec4b7..0000000 --- a/examples/dora-benchmark/out/benchmark-fastformat/log_receiver.txt +++ /dev/null @@ -1,12 +0,0 @@ -Latency: -size 0xfd200 : 788.686µs -size 0x2a3000: 741.927µs -size 0x5eec00: 671.337µs -size 0x17bb000: 560.786µs -Throughput: -size 0xfd200 : 1941 messages per second -size 0x2a3000: 858 messages per second -size 0x5eec00: 454 messages per second -Input `latency` was closed -Input `throughput` was closed -size 0x17bb000: 134 messages per second diff --git a/examples/dora-benchmark/out/benchmark-ff1/log_receiver-fastformat.txt b/examples/dora-benchmark/out/benchmark-ff1/log_receiver-fastformat.txt new file mode 100644 index 0000000..ff7e5bd --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-ff1/log_receiver-fastformat.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 871.699µs +size 0x2a3000: 710.012µs +size 0x5eec00: 725.182µs +size 0x17bb000: 678.061µs +Throughput: +size 0xfd200 : 2349 messages per second +size 0x2a3000: 548 messages per second +size 0x5eec00: 508 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 152 messages per second diff --git a/examples/dora-benchmark/out/benchmark-ff1/log_sender-fastformat.txt b/examples/dora-benchmark/out/benchmark-ff1/log_sender-fastformat.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/dora-benchmark/out/benchmark-ff2/log_receiver-fastformat.txt b/examples/dora-benchmark/out/benchmark-ff2/log_receiver-fastformat.txt new file mode 100644 index 0000000..d9929eb --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-ff2/log_receiver-fastformat.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 842.827µs +size 0x2a3000: 745.078µs +size 0x5eec00: 754.759µs +size 0x17bb000: 731.324µs +Throughput: +size 0xfd200 : 1973 messages per second +size 0x2a3000: 549 messages per second +size 0x5eec00: 529 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 149 messages per second diff --git a/examples/dora-benchmark/out/benchmark-ff2/log_sender-fastformat.txt b/examples/dora-benchmark/out/benchmark-ff2/log_sender-fastformat.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/dora-benchmark/out/benchmark-pure-arrow/log_receiver.txt b/examples/dora-benchmark/out/benchmark-pure-arrow/log_receiver.txt deleted file mode 100644 index 7a7847f..0000000 --- a/examples/dora-benchmark/out/benchmark-pure-arrow/log_receiver.txt +++ /dev/null @@ -1,12 +0,0 @@ -Latency: -size 0xfd200 : 573.198µs -size 0x2a3000: 612.761µs -size 0x5eec00: 603.831µs -size 0x17bb000: 531.035µs -Throughput: -size 0xfd200 : 3710 messages per second -size 0x2a3000: 1018 messages per second -size 0x5eec00: 498 messages per second -Input `latency` was closed -Input `throughput` was closed -size 0x17bb000: 127 messages per second diff --git a/examples/dora-benchmark/out/benchmark-raw1/log_receiver-raw.txt b/examples/dora-benchmark/out/benchmark-raw1/log_receiver-raw.txt new file mode 100644 index 0000000..9b2e37d --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-raw1/log_receiver-raw.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 604.005µs +size 0x2a3000: 638.604µs +size 0x5eec00: 670.105µs +size 0x17bb000: 663.552µs +Throughput: +size 0xfd200 : 2500 messages per second +size 0x2a3000: 730 messages per second +size 0x5eec00: 505 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 155 messages per second diff --git a/examples/dora-benchmark/out/benchmark-raw1/log_sender-raw.txt b/examples/dora-benchmark/out/benchmark-raw1/log_sender-raw.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/dora-benchmark/out/benchmark-raw2/log_receiver-raw.txt b/examples/dora-benchmark/out/benchmark-raw2/log_receiver-raw.txt new file mode 100644 index 0000000..a521199 --- /dev/null +++ b/examples/dora-benchmark/out/benchmark-raw2/log_receiver-raw.txt @@ -0,0 +1,12 @@ +Latency: +size 0xfd200 : 757.939µs +size 0x2a3000: 620.078µs +size 0x5eec00: 656.879µs +size 0x17bb000: 660.14µs +Throughput: +size 0xfd200 : 1937 messages per second +size 0x2a3000: 700 messages per second +size 0x5eec00: 522 messages per second +Input `latency` was closed +Input `throughput` was closed +size 0x17bb000: 153 messages per second diff --git a/examples/dora-benchmark/out/benchmark-raw2/log_sender-raw.txt b/examples/dora-benchmark/out/benchmark-raw2/log_sender-raw.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/dora-benchmark/sender-fastformat/src/main.rs b/examples/dora-benchmark/sender-fastformat/src/main.rs index f350424..764c586 100644 --- a/examples/dora-benchmark/sender-fastformat/src/main.rs +++ b/examples/dora-benchmark/sender-fastformat/src/main.rs @@ -34,7 +34,7 @@ fn main() -> Result<(), Box> { for (width, height, c) in &sizes { let (width, height, c) = (width.clone(), height.clone(), c.clone()); let size = (width * height * c) as usize; - for _ in 0..100 { + for _ in 0..1000 { let data = data.get(&size).unwrap(); let image = Image::new_bgr8(data.clone(), width, height, None)?; @@ -61,7 +61,7 @@ fn main() -> Result<(), Box> { for (width, height, c) in &sizes { let (width, height, c) = (width.clone(), height.clone(), c.clone()); let size = (width * height * c) as usize; - for _ in 0..100 { + for _ in 0..1000 { let data = data.get(&size).unwrap(); let image = Image::new_bgr8(data.clone(), width, height, None)?; diff --git a/examples/dora-benchmark/sender-raw/src/main.rs b/examples/dora-benchmark/sender-raw/src/main.rs index 2748142..297db95 100644 --- a/examples/dora-benchmark/sender-raw/src/main.rs +++ b/examples/dora-benchmark/sender-raw/src/main.rs @@ -4,20 +4,24 @@ use rand::Rng; use std::collections::HashMap; use std::time::Duration; +use fastformat::image::Image; + fn main() -> Result<(), Box> { let latency = DataId::from("latency".to_owned()); let throughput = DataId::from("throughput".to_owned()); let (mut node, _events) = DoraNode::init_from_env()?; - let sizes = [ - 720 * 480 * 3, - 1280 * 720 * 3, - 1920 * 1080 * 3, - 3840 * 2160 * 3, + + let sizes: [(u32, u32, u32); 4] = [ + (720, 480, 3), + (1280, 720, 3), + (1920, 1080, 3), + (3840, 2160, 3), ]; let mut data = HashMap::new(); - for size in sizes { + for (width, height, c) in &sizes { + let size = (width * height * c) as usize; let vec: Vec = rand::thread_rng() .sample_iter(rand::distributions::Standard) .take(size) @@ -27,8 +31,10 @@ fn main() -> Result<(), Box> { } // test latency first - for size in sizes { - for _ in 0..100 { + for (width, height, c) in &sizes { + let (width, height, c) = (width.clone(), height.clone(), c.clone()); + let size = (width * height * c) as usize; + for _ in 0..1000 { let data = data.get(&size).unwrap(); node.send_output_raw(latency.clone(), Default::default(), data.len(), |out| { @@ -44,8 +50,10 @@ fn main() -> Result<(), Box> { std::thread::sleep(Duration::from_secs(2)); // then throughput with full speed - for size in sizes { - for _ in 0..100 { + for (width, height, c) in &sizes { + let (width, height, c) = (width.clone(), height.clone(), c.clone()); + let size = (width * height * c) as usize; + for _ in 0..1000 { let data = data.get(&size).unwrap(); node.send_output_raw(throughput.clone(), Default::default(), data.len(), |out| {