diff --git a/.gitignore b/.gitignore index 54b6326..67a94da 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ raw_list deps/ docs/_build/ docs/jupyter_execute -target/ \ No newline at end of file +target/ +*.so \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 6896c6a..6577bb0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,186 +2,30 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "anstream" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" - -[[package]] -name = "anstyle-parse" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" -dependencies = [ - "anstyle", - "once_cell", - "windows-sys", -] - [[package]] name = "autocfg" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "cc" -version = "1.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" -dependencies = [ - "shlex", -] - [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "clap" -version = "4.5.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acebd8ad879283633b343856142139f2da2317c96b05b4dd6181c61e2480184" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ba32cbda51c7e1dfd49acc1457ba1a7dec5b64fe360e828acb13ca8dc9c2f9" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" - -[[package]] -name = "colorchoice" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" - -[[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "indoc" version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" -[[package]] -name = "is-terminal" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - [[package]] name = "itoa" version = "1.0.14" @@ -194,22 +38,6 @@ version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" -[[package]] -name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if", - "winapi", -] - -[[package]] -name = "log" -version = "0.4.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" - [[package]] name = "memchr" version = "2.7.4" @@ -314,7 +142,6 @@ name = "qubed" version = "0.1.2" dependencies = [ "pyo3", - "rsfdb", "serde", "serde_json", ] @@ -328,58 +155,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "regex" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" - -[[package]] -name = "rsfdb" -version = "0.1.0" -dependencies = [ - "libc", - "libloading", - "once_cell", - "rsfindlibs", - "serde", - "serde_json", -] - -[[package]] -name = "rsfindlibs" -version = "0.1.1" -dependencies = [ - "cc", - "clap", - "env_logger", - "libloading", - "log", -] - [[package]] name = "ryu" version = "1.0.19" @@ -418,18 +193,6 @@ dependencies = [ "serde", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - [[package]] name = "syn" version = "2.0.98" @@ -447,15 +210,6 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" -[[package]] -name = "termcolor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" -dependencies = [ - "winapi-util", -] - [[package]] name = "unicode-ident" version = "1.0.16" @@ -467,113 +221,3 @@ name = "unindent" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[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-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys", -] - -[[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-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[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.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[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.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[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.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" diff --git a/src/python/qubed/rust.cpython-312-darwin.so b/src/python/qubed/rust.cpython-312-darwin.so deleted file mode 100755 index adeecf7..0000000 Binary files a/src/python/qubed/rust.cpython-312-darwin.so and /dev/null differ diff --git a/src/rust/lib.rs b/src/rust/lib.rs index 9d9ceef..ab2d34e 100644 --- a/src/rust/lib.rs +++ b/src/rust/lib.rs @@ -1,82 +1,82 @@ -#![allow(unused_imports)] -#![allow(dead_code)] -#![allow(unused_variables)] +// #![allow(unused_imports)] +// #![allow(dead_code)] +// #![allow(unused_variables)] -use rsfdb::listiterator::KeyValueLevel; -use rsfdb::request::Request; -use rsfdb::FDB; +// use rsfdb::listiterator::KeyValueLevel; +// use rsfdb::request::Request; +// use rsfdb::FDB; -use serde_json::{json, Value}; -use std::time::Instant; +// use serde_json::{json, Value}; +// use std::time::Instant; -use pyo3::prelude::*; -use pyo3::types::{PyDict, PyInt, PyList, PyString}; +// use pyo3::prelude::*; +// use pyo3::types::{PyDict, PyInt, PyList, PyString}; -use std::collections::HashMap; +// use std::collections::HashMap; -pub mod tree; -use std::sync::Arc; -use std::sync::Mutex; -use tree::TreeNode; +// pub mod tree; +// use std::sync::Arc; +// use std::sync::Mutex; +// use tree::TreeNode; -#[pyclass(unsendable)] -pub struct PyFDB { - pub fdb: FDB, -} +// #[pyclass(unsendable)] +// pub struct PyFDB { +// pub fdb: FDB, +// } -#[pymethods] -impl PyFDB { - #[new] - #[pyo3(signature = (fdb_config=None))] - pub fn new(fdb_config: Option<&str>) -> PyResult { - let fdb = FDB::new(fdb_config) - .map_err(|e| PyErr::new::(e.to_string()))?; - Ok(PyFDB { fdb }) - } +// #[pymethods] +// impl PyFDB { +// #[new] +// #[pyo3(signature = (fdb_config=None))] +// pub fn new(fdb_config: Option<&str>) -> PyResult { +// let fdb = FDB::new(fdb_config) +// .map_err(|e| PyErr::new::(e.to_string()))?; +// Ok(PyFDB { fdb }) +// } - /// Traverse the FDB with the given request. - pub fn traverse_fdb( - &self, - py: Python<'_>, - request: HashMap>, - ) -> PyResult { - let start_time = Instant::now(); +// /// Traverse the FDB with the given request. +// pub fn traverse_fdb( +// &self, +// py: Python<'_>, +// request: HashMap>, +// ) -> PyResult { +// let start_time = Instant::now(); - let list_request = Request::from_json(json!(request)) - .map_err(|e| PyErr::new::(e.to_string()))?; +// let list_request = Request::from_json(json!(request)) +// .map_err(|e| PyErr::new::(e.to_string()))?; - // Use `fdb_guard` instead of `self.fdb` - let list = self - .fdb - .list(&list_request, true, true) - .map_err(|e| PyErr::new::(e.to_string()))?; +// // Use `fdb_guard` instead of `self.fdb` +// let list = self +// .fdb +// .list(&list_request, true, true) +// .map_err(|e| PyErr::new::(e.to_string()))?; - let mut root = TreeNode::new(KeyValueLevel { - key: "root".to_string(), - value: "root".to_string(), - level: 0, - }); +// let mut root = TreeNode::new(KeyValueLevel { +// key: "root".to_string(), +// value: "root".to_string(), +// level: 0, +// }); - for item in list { - py.check_signals()?; +// for item in list { +// py.check_signals()?; - if let Some(request) = &item.request { - root.insert(&request); - } - } +// if let Some(request) = &item.request { +// root.insert(&request); +// } +// } - let duration = start_time.elapsed(); - println!("Total runtime: {:?}", duration); +// let duration = start_time.elapsed(); +// println!("Total runtime: {:?}", duration); - let py_dict = root.to_py_dict(py)?; - Ok(py_dict) - } -} +// let py_dict = root.to_py_dict(py)?; +// Ok(py_dict) +// } +// } -use pyo3::prelude::*; +// use pyo3::prelude::*; -#[pymodule] -fn rust(m: &Bound<'_, PyModule>) -> PyResult<()> { - m.add_class::()?; - Ok(()) -} +// #[pymodule] +// fn rust(m: &Bound<'_, PyModule>) -> PyResult<()> { +// m.add_class::()?; +// Ok(()) +// } diff --git a/src/rust/tree.rs b/src/rust/tree.rs index 59e6695..80af782 100644 --- a/src/rust/tree.rs +++ b/src/rust/tree.rs @@ -1,82 +1,82 @@ -use pyo3::prelude::*; -use pyo3::types::PyDict; -use rsfdb::listiterator::KeyValueLevel; -use serde_json::Value; +// use pyo3::prelude::*; +// use pyo3::types::PyDict; +// use rsfdb::listiterator::KeyValueLevel; +// use serde_json::Value; -#[derive(Debug)] -pub struct TreeNode { - pub key: KeyValueLevel, - pub children: Vec, -} +// #[derive(Debug)] +// pub struct TreeNode { +// pub key: KeyValueLevel, +// pub children: Vec, +// } -impl TreeNode { - pub fn new(key: KeyValueLevel) -> Self { - TreeNode { - key, - children: Vec::new(), - } - } +// impl TreeNode { +// pub fn new(key: KeyValueLevel) -> Self { +// TreeNode { +// key, +// children: Vec::new(), +// } +// } - pub fn insert(&mut self, path: &[KeyValueLevel]) { - if path.is_empty() { - return; - } +// pub fn insert(&mut self, path: &[KeyValueLevel]) { +// if path.is_empty() { +// return; +// } - let kvl = &path[0]; +// let kvl = &path[0]; - // Check if a child with the same key and value exists - if let Some(child) = self.children.iter_mut().find(|child| child.key == *kvl) { - // Insert the remaining path into the existing child - child.insert(&path[1..]); - } else { - // Create a new child node - let mut new_child = TreeNode::new(kvl.clone()); - new_child.insert(&path[1..]); - self.children.push(new_child); - } - } +// // Check if a child with the same key and value exists +// if let Some(child) = self.children.iter_mut().find(|child| child.key == *kvl) { +// // Insert the remaining path into the existing child +// child.insert(&path[1..]); +// } else { +// // Create a new child node +// let mut new_child = TreeNode::new(kvl.clone()); +// new_child.insert(&path[1..]); +// self.children.push(new_child); +// } +// } - pub fn traverse(&self, level: usize, callback: &F) - where - F: Fn(&TreeNode, usize), - { - callback(self, level); - for child in &self.children { - child.traverse(level + 1, callback); - } - } +// pub fn traverse(&self, level: usize, callback: &F) +// where +// F: Fn(&TreeNode, usize), +// { +// callback(self, level); +// for child in &self.children { +// child.traverse(level + 1, callback); +// } +// } - pub fn to_json(&self) -> Value { - let formatted_key = format!("{}={}", self.key.key, self.key.value); +// pub fn to_json(&self) -> Value { +// let formatted_key = format!("{}={}", self.key.key, self.key.value); - let children_json: Value = if self.children.is_empty() { - Value::Object(serde_json::Map::new()) - } else { - Value::Object( - self.children - .iter() - .map(|child| { - ( - format!("{}={}", child.key.key, child.key.value), - child.to_json(), - ) - }) - .collect(), - ) - }; +// let children_json: Value = if self.children.is_empty() { +// Value::Object(serde_json::Map::new()) +// } else { +// Value::Object( +// self.children +// .iter() +// .map(|child| { +// ( +// format!("{}={}", child.key.key, child.key.value), +// child.to_json(), +// ) +// }) +// .collect(), +// ) +// }; - // Combine the formatted key with children - serde_json::json!({ formatted_key: children_json }) - } +// // Combine the formatted key with children +// serde_json::json!({ formatted_key: children_json }) +// } - pub fn to_py_dict(&self, py: Python) -> PyResult { - let py_dict = PyDict::new(py); +// pub fn to_py_dict(&self, py: Python) -> PyResult { +// let py_dict = PyDict::new(py); - for child in &self.children { - let child_key = format!("{}={}", child.key.key, child.key.value); - py_dict.set_item(child_key, child.to_py_dict(py)?)?; - } +// for child in &self.children { +// let child_key = format!("{}={}", child.key.key, child.key.value); +// py_dict.set_item(child_key, child.to_py_dict(py)?)?; +// } - Ok(py_dict.to_object(py)) - } -} +// Ok(py_dict.to_object(py)) +// } +// }