From 28d88ee913f7d4773fd7ef9fc451f0d13da0cb9d Mon Sep 17 00:00:00 2001 From: Xavier Lange Date: Fri, 3 Nov 2023 14:15:39 -0400 Subject: [PATCH 1/4] it compiles --- ...ator.rs => tautomer_enumerator_example.rs} | 0 rdkit-sys/src/bridge/ro_mol.rs | 2 + rdkit-sys/src/bridge/scaffold_network.rs | 89 +++++++++++--- rdkit-sys/tests/test_scaffold_network.rs | 29 +++-- rdkit-sys/wrapper/include/ro_mol.h | 2 + rdkit-sys/wrapper/include/scaffold_network.h | 50 +++++--- rdkit-sys/wrapper/src/scaffold_network.cc | 48 ++++++-- src/lib.rs | 3 + src/scaffold_network/mod.rs | 5 + src/scaffold_network/scaffold_network.rs | 19 +++ .../scaffold_network_params.rs | 109 ++++++++++++++++++ tests/test_scaffold_network.rs | 7 ++ 12 files changed, 312 insertions(+), 51 deletions(-) rename examples/{tautomer_enumerator.rs => tautomer_enumerator_example.rs} (100%) create mode 100644 src/scaffold_network/mod.rs create mode 100644 src/scaffold_network/scaffold_network.rs create mode 100644 src/scaffold_network/scaffold_network_params.rs create mode 100644 tests/test_scaffold_network.rs diff --git a/examples/tautomer_enumerator.rs b/examples/tautomer_enumerator_example.rs similarity index 100% rename from examples/tautomer_enumerator.rs rename to examples/tautomer_enumerator_example.rs diff --git a/rdkit-sys/src/bridge/ro_mol.rs b/rdkit-sys/src/bridge/ro_mol.rs index f2fc328..27856e5 100644 --- a/rdkit-sys/src/bridge/ro_mol.rs +++ b/rdkit-sys/src/bridge/ro_mol.rs @@ -1,9 +1,11 @@ #[cxx::bridge(namespace = "RDKit")] pub mod ffi { + unsafe extern "C++" { include!("wrapper/include/ro_mol.h"); pub type ROMol; + pub type ExplicitBitVect = crate::fingerprint_ffi::ExplicitBitVect; pub type SmilesParserParams; pub type Atom; diff --git a/rdkit-sys/src/bridge/scaffold_network.rs b/rdkit-sys/src/bridge/scaffold_network.rs index 5ba705e..66f51b7 100644 --- a/rdkit-sys/src/bridge/scaffold_network.rs +++ b/rdkit-sys/src/bridge/scaffold_network.rs @@ -1,43 +1,96 @@ #[cxx::bridge(namespace = "RDKit")] pub mod ffi { + // Trick from https://github.com/dtolnay/cxx/issues/741 + // pub struct ROMolSharedPtr { + // ptr: SharedPtr, + // } + unsafe extern "C++" { include!("wrapper/include/scaffold_network.h"); - pub type ScaffoldNetworkParams; - // - // pub fn default_scaffold_network_params() -> SharedPtr; + pub type ScaffoldNetworkParamsLocal; + pub type ROMol = crate::ro_mol_ffi::ROMol; - pub fn default_scaffold_network_params() -> SharedPtr; + pub fn default_scaffold_network_params() -> SharedPtr; pub fn new_scaffold_network_params( bond_breaker_smarts: &Vec, - ) -> SharedPtr; + ) -> SharedPtr; pub fn set_include_generic_scaffolds( - params: &mut SharedPtr, + params: &mut SharedPtr, + input: bool, + ); + pub fn set_include_generic_bond_scaffolds( + params: &mut SharedPtr, + input: bool, + ); + pub fn set_include_scaffolds_without_attachments( + params: &mut SharedPtr, + input: bool, + ); + pub fn set_include_scaffolds_with_attachments( + params: &mut SharedPtr, input: bool, ); - pub fn include_generic_bond_scaffolds( - params: &mut SharedPtr, + pub fn set_keep_only_first_fragment( + params: &mut SharedPtr, input: bool, ); - pub fn include_scaffolds_without_attachments( - params: &mut SharedPtr, + pub fn set_prune_before_fragmenting( + params: &mut SharedPtr, input: bool, ); - pub fn include_scaffolds_with_attachments( - params: &mut SharedPtr, + pub fn set_flatten_isotopes( + params: &mut SharedPtr, input: bool, ); - pub fn keep_only_first_fragment(params: &mut SharedPtr, input: bool); - pub fn prune_before_fragmenting(params: &mut SharedPtr, input: bool); - pub fn flatten_isotopes(params: &mut SharedPtr, input: bool); - pub fn flatten_chirality(params: &mut SharedPtr, input: bool); - pub fn flatten_keep_largest(params: &mut SharedPtr, input: bool); - pub fn collect_mol_counts(params: &mut SharedPtr, input: bool); + pub fn set_flatten_chirality( + params: &mut SharedPtr, + input: bool, + ); + pub fn set_flatten_keep_largest( + params: &mut SharedPtr, + input: bool, + ); + pub fn set_collect_mol_counts( + params: &mut SharedPtr, + input: bool, + ); + + pub fn get_include_generic_scaffolds( + params: &SharedPtr, + ) -> bool; + pub fn get_include_generic_bond_scaffolds( + params: &SharedPtr, + ) -> bool; + pub fn get_include_scaffolds_without_attachments( + params: &SharedPtr, + ) -> bool; + pub fn get_include_scaffolds_with_attachments( + params: &SharedPtr, + ) -> bool; + pub fn get_keep_only_first_fragment(params: &SharedPtr) + -> bool; + pub fn get_prune_before_fragmenting(params: &SharedPtr) + -> bool; + pub fn get_flatten_isotopes(params: &SharedPtr) -> bool; + pub fn get_flatten_chirality(params: &SharedPtr) -> bool; + pub fn get_flatten_keep_largest(params: &SharedPtr) -> bool; + pub fn get_collect_mol_counts(params: &SharedPtr) -> bool; pub type ScaffoldNetworkClass; pub fn default_scaffold_network() -> SharedPtr; + // pub fn create_scaffold_network( + // mol: &CxxVector, + // scaffold_network_params: &SharedPtr, + // ) -> SharedPtr; + + // pub fn update_scaffold_network( + // scaffold_network: &mut SharedPtr, + // mol: &CxxVector, + // scaffold_network_params: &SharedPtr, + // ); } } diff --git a/rdkit-sys/tests/test_scaffold_network.rs b/rdkit-sys/tests/test_scaffold_network.rs index 9819a4d..aede0b7 100644 --- a/rdkit-sys/tests/test_scaffold_network.rs +++ b/rdkit-sys/tests/test_scaffold_network.rs @@ -6,15 +6,26 @@ fn test_scaffold_network() { let mut params = new_scaffold_network_params(&vec![]); set_include_generic_scaffolds(&mut params, true); - include_generic_bond_scaffolds(&mut params, true); - include_scaffolds_without_attachments(&mut params, true); - include_scaffolds_with_attachments(&mut params, true); - keep_only_first_fragment(&mut params, true); - prune_before_fragmenting(&mut params, true); - flatten_isotopes(&mut params, true); - flatten_chirality(&mut params, true); - flatten_keep_largest(&mut params, true); - collect_mol_counts(&mut params, true); + set_include_generic_bond_scaffolds(&mut params, true); + set_include_scaffolds_without_attachments(&mut params, true); + set_include_scaffolds_with_attachments(&mut params, true); + set_keep_only_first_fragment(&mut params, true); + set_prune_before_fragmenting(&mut params, true); + set_flatten_isotopes(&mut params, true); + set_flatten_chirality(&mut params, true); + set_flatten_keep_largest(&mut params, true); + set_collect_mol_counts(&mut params, true); + + get_include_generic_scaffolds(¶ms); + get_include_generic_bond_scaffolds(¶ms); + get_include_scaffolds_without_attachments(¶ms); + get_include_scaffolds_with_attachments(¶ms); + get_keep_only_first_fragment(¶ms); + get_prune_before_fragmenting(¶ms); + get_flatten_isotopes(¶ms); + get_flatten_chirality(¶ms); + get_flatten_keep_largest(¶ms); + get_collect_mol_counts(¶ms); let _scaffold_network = default_scaffold_network(); } diff --git a/rdkit-sys/wrapper/include/ro_mol.h b/rdkit-sys/wrapper/include/ro_mol.h index 95f8b96..0b788f9 100644 --- a/rdkit-sys/wrapper/include/ro_mol.h +++ b/rdkit-sys/wrapper/include/ro_mol.h @@ -9,6 +9,8 @@ #include namespace RDKit { + using ROMolSharedPtr = std::shared_ptr; + std::shared_ptr copy_mol(const std::shared_ptr &mol); std::shared_ptr smiles_to_mol(const std::string &smiles); rust::String mol_to_smiles(const std::shared_ptr &mol); diff --git a/rdkit-sys/wrapper/include/scaffold_network.h b/rdkit-sys/wrapper/include/scaffold_network.h index 68c51cc..bed0af5 100644 --- a/rdkit-sys/wrapper/include/scaffold_network.h +++ b/rdkit-sys/wrapper/include/scaffold_network.h @@ -5,23 +5,43 @@ #include namespace RDKit { - using ScaffoldNetworkParams = ScaffoldNetwork::ScaffoldNetworkParams; - - std::shared_ptr default_scaffold_network_params(); - std::shared_ptr new_scaffold_network_params(const rust::Vec &bondBreakersSmarts); - - void set_include_generic_scaffolds(std::shared_ptr ¶ms, bool input); - void include_generic_bond_scaffolds(std::shared_ptr ¶ms, bool input); - void include_scaffolds_without_attachments(std::shared_ptr ¶ms, bool input); - void include_scaffolds_with_attachments(std::shared_ptr ¶ms, bool input); - void keep_only_first_fragment(std::shared_ptr ¶ms, bool input); - void prune_before_fragmenting(std::shared_ptr ¶ms, bool input); - void flatten_isotopes(std::shared_ptr ¶ms, bool input); - void flatten_chirality(std::shared_ptr ¶ms, bool input); - void flatten_keep_largest(std::shared_ptr ¶ms, bool input); - void collect_mol_counts(std::shared_ptr ¶ms, bool input); + using ScaffoldNetworkParamsLocal = ScaffoldNetwork::ScaffoldNetworkParams; + + std::shared_ptr default_scaffold_network_params(); + std::shared_ptr new_scaffold_network_params(const rust::Vec &bondBreakersSmarts); + + void set_include_generic_scaffolds(std::shared_ptr ¶ms, bool input); + void set_include_generic_bond_scaffolds(std::shared_ptr ¶ms, bool input); + void set_include_scaffolds_without_attachments(std::shared_ptr ¶ms, bool input); + void set_include_scaffolds_with_attachments(std::shared_ptr ¶ms, bool input); + void set_keep_only_first_fragment(std::shared_ptr ¶ms, bool input); + void set_prune_before_fragmenting(std::shared_ptr ¶ms, bool input); + void set_flatten_isotopes(std::shared_ptr ¶ms, bool input); + void set_flatten_chirality(std::shared_ptr ¶ms, bool input); + void set_flatten_keep_largest(std::shared_ptr ¶ms, bool input); + void set_collect_mol_counts(std::shared_ptr ¶ms, bool input); + + bool get_include_generic_scaffolds(const std::shared_ptr ¶ms); + bool get_include_generic_bond_scaffolds(const std::shared_ptr ¶ms); + bool get_include_scaffolds_without_attachments(const std::shared_ptr ¶ms); + bool get_include_scaffolds_with_attachments(const std::shared_ptr ¶ms); + bool get_keep_only_first_fragment(const std::shared_ptr ¶ms); + bool get_prune_before_fragmenting(const std::shared_ptr ¶ms); + bool get_flatten_isotopes(const std::shared_ptr ¶ms); + bool get_flatten_chirality(const std::shared_ptr ¶ms); + bool get_flatten_keep_largest(const std::shared_ptr ¶ms); + bool get_collect_mol_counts(const std::shared_ptr ¶ms); using ScaffoldNetworkClass = ScaffoldNetwork::ScaffoldNetwork; std::shared_ptr default_scaffold_network(); + +// std::shared_ptr create_scaffold_network(const std::vector &mols, const std::shared_ptr &scaffold_network_params) { +// throw std::invalid_argument("sup"); +// } + +// pub fn create_scaffold_network( +// mol: &CxxVector, +// scaffold_network_params: &SharedPtr, +// ) -> SharedPtr; } \ No newline at end of file diff --git a/rdkit-sys/wrapper/src/scaffold_network.cc b/rdkit-sys/wrapper/src/scaffold_network.cc index 601e798..ab75d56 100644 --- a/rdkit-sys/wrapper/src/scaffold_network.cc +++ b/rdkit-sys/wrapper/src/scaffold_network.cc @@ -25,39 +25,39 @@ namespace RDKit { params->includeGenericScaffolds = input; } - void include_generic_bond_scaffolds(std::shared_ptr ¶ms, bool input) { + void set_include_generic_bond_scaffolds(std::shared_ptr ¶ms, bool input) { params->includeGenericBondScaffolds = input; } - void include_scaffolds_without_attachments(std::shared_ptr ¶ms, bool input) { + void set_include_scaffolds_without_attachments(std::shared_ptr ¶ms, bool input) { params->includeScaffoldsWithoutAttachments = input; } - void include_scaffolds_with_attachments(std::shared_ptr ¶ms, bool input) { + void set_include_scaffolds_with_attachments(std::shared_ptr ¶ms, bool input) { params->includeScaffoldsWithAttachments = input; } - void keep_only_first_fragment(std::shared_ptr ¶ms, bool input) { + void set_keep_only_first_fragment(std::shared_ptr ¶ms, bool input) { params->keepOnlyFirstFragment = input; } - void prune_before_fragmenting(std::shared_ptr ¶ms, bool input) { + void set_prune_before_fragmenting(std::shared_ptr ¶ms, bool input) { params->pruneBeforeFragmenting = input; } - void flatten_isotopes(std::shared_ptr ¶ms, bool input) { + void set_flatten_isotopes(std::shared_ptr ¶ms, bool input) { params->flattenIsotopes = input; } - void flatten_chirality(std::shared_ptr ¶ms, bool input) { + void set_flatten_chirality(std::shared_ptr ¶ms, bool input) { params->flattenChirality = input; } - void flatten_keep_largest(std::shared_ptr ¶ms, bool input) { + void set_flatten_keep_largest(std::shared_ptr ¶ms, bool input) { params->flattenKeepLargest = input; } - void collect_mol_counts(std::shared_ptr ¶ms, bool input) { + void set_collect_mol_counts(std::shared_ptr ¶ms, bool input) { params->collectMolCounts = input; } @@ -68,4 +68,34 @@ namespace RDKit { return std::shared_ptr(scaffold_network); } + bool get_include_generic_scaffolds(const std::shared_ptr ¶ms) { + return params->includeGenericScaffolds; + } + bool get_include_generic_bond_scaffolds(const std::shared_ptr ¶ms) { + return params->includeGenericBondScaffolds; + } + bool get_include_scaffolds_without_attachments(const std::shared_ptr ¶ms) { + return params->includeScaffoldsWithoutAttachments; + } + bool get_include_scaffolds_with_attachments(const std::shared_ptr ¶ms) { + return params->includeScaffoldsWithAttachments; + } + bool get_keep_only_first_fragment(const std::shared_ptr ¶ms) { + return params->keepOnlyFirstFragment; + } + bool get_prune_before_fragmenting(const std::shared_ptr ¶ms) { + return params->pruneBeforeFragmenting; + } + bool get_flatten_isotopes(const std::shared_ptr ¶ms) { + return params->flattenIsotopes; + } + bool get_flatten_chirality(const std::shared_ptr ¶ms) { + return params->flattenChirality; + } + bool get_flatten_keep_largest(const std::shared_ptr ¶ms) { + return params->flattenKeepLargest; + } + bool get_collect_mol_counts(const std::shared_ptr ¶ms) { + return params->collectMolCounts; + } } \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 01adaa4..afe9e4c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,9 @@ pub use mol_standardize::*; mod periodic_table; pub use periodic_table::*; +mod scaffold_network; +pub use scaffold_network::*; + mod substruct_match; pub use substruct_match::*; diff --git a/src/scaffold_network/mod.rs b/src/scaffold_network/mod.rs new file mode 100644 index 0000000..59cdbb3 --- /dev/null +++ b/src/scaffold_network/mod.rs @@ -0,0 +1,5 @@ +mod scaffold_network; +pub use scaffold_network::*; + +mod scaffold_network_params; +pub use scaffold_network_params::*; diff --git a/src/scaffold_network/scaffold_network.rs b/src/scaffold_network/scaffold_network.rs new file mode 100644 index 0000000..3d57a9d --- /dev/null +++ b/src/scaffold_network/scaffold_network.rs @@ -0,0 +1,19 @@ +use cxx::SharedPtr; + +pub struct ScaffoldNetwork { + ptr: SharedPtr, +} + +impl Default for ScaffoldNetwork { + fn default() -> Self { + Self { + ptr: rdkit_sys::scaffold_network_ffi::default_scaffold_network(), + } + } +} + +impl ScaffoldNetwork { + pub fn new() -> Self { + Self::default() + } +} diff --git a/src/scaffold_network/scaffold_network_params.rs b/src/scaffold_network/scaffold_network_params.rs new file mode 100644 index 0000000..59666c0 --- /dev/null +++ b/src/scaffold_network/scaffold_network_params.rs @@ -0,0 +1,109 @@ +use cxx::SharedPtr; + +pub struct ScaffoldNetworkParams { + ptr: SharedPtr, +} + +impl Default for ScaffoldNetworkParams { + fn default() -> Self { + let ptr = rdkit_sys::scaffold_network_ffi::default_scaffold_network_params(); + Self { ptr } + } +} + +impl ScaffoldNetworkParams { + pub fn new() -> Self { + Self::default() + } + + pub fn new_with_bond_breakers(bond_breaker_smarts: &Vec) -> Self { + let ptr = rdkit_sys::scaffold_network_ffi::new_scaffold_network_params(bond_breaker_smarts); + Self { ptr } + } + + pub fn set_include_generic_scaffolds(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_include_generic_scaffolds(&mut self.ptr, input); + } + + pub fn set_include_generic_bond_scaffolds(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_include_generic_bond_scaffolds(&mut self.ptr, input); + } + + pub fn set_include_scaffolds_without_attachments(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_include_scaffolds_without_attachments( + &mut self.ptr, + input, + ); + } + + pub fn set_include_scaffolds_with_attachments(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_include_scaffolds_with_attachments( + &mut self.ptr, + input, + ); + } + + pub fn set_keep_only_first_fragment(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_keep_only_first_fragment(&mut self.ptr, input); + } + + pub fn set_prune_before_fragmenting(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_prune_before_fragmenting(&mut self.ptr, input); + } + + pub fn set_flatten_isotopes(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_flatten_isotopes(&mut self.ptr, input); + } + + pub fn set_flatten_chirality(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_flatten_chirality(&mut self.ptr, input); + } + + pub fn set_flatten_keep_largest(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_flatten_keep_largest(&mut self.ptr, input); + } + + pub fn set_collect_mol_counts(&mut self, input: bool) { + rdkit_sys::scaffold_network_ffi::set_collect_mol_counts(&mut self.ptr, input); + } + + pub fn get_include_generic_scaffolds(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_include_generic_scaffolds(&self.ptr) + } + + pub fn get_include_generic_bond_scaffolds(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_include_generic_bond_scaffolds(&self.ptr) + } + + pub fn get_include_scaffolds_without_attachments(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_include_scaffolds_without_attachments(&self.ptr) + } + + pub fn get_include_scaffolds_with_attachments(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_include_scaffolds_with_attachments(&self.ptr) + } + + pub fn get_keep_only_first_fragment(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_keep_only_first_fragment(&self.ptr) + } + + pub fn get_prune_before_fragmenting(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_prune_before_fragmenting(&self.ptr) + } + + pub fn get_flatten_isotopes(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_flatten_isotopes(&self.ptr) + } + + pub fn get_flatten_chirality(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_flatten_chirality(&self.ptr) + } + + pub fn get_flatten_keep_largest(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_flatten_keep_largest(&self.ptr) + } + + pub fn get_collect_mol_counts(&self) -> bool { + rdkit_sys::scaffold_network_ffi::get_collect_mol_counts(&self.ptr) + } +} diff --git a/tests/test_scaffold_network.rs b/tests/test_scaffold_network.rs new file mode 100644 index 0000000..f0cce62 --- /dev/null +++ b/tests/test_scaffold_network.rs @@ -0,0 +1,7 @@ +use rdkit::{ScaffoldNetwork, ScaffoldNetworkParams}; + +#[test] +pub fn test_new_scaffold_network() { + let _scaffold_network_params = ScaffoldNetworkParams::new(); + let _scaffold_network = ScaffoldNetwork::new(); +} From b10545013b020f96b84465b83866e276760ab465 Mon Sep 17 00:00:00 2001 From: Xavier Lange Date: Fri, 3 Nov 2023 14:16:10 -0400 Subject: [PATCH 2/4] typo --- src/scaffold_network/scaffold_network_params.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scaffold_network/scaffold_network_params.rs b/src/scaffold_network/scaffold_network_params.rs index 59666c0..9d31c3a 100644 --- a/src/scaffold_network/scaffold_network_params.rs +++ b/src/scaffold_network/scaffold_network_params.rs @@ -1,7 +1,7 @@ use cxx::SharedPtr; pub struct ScaffoldNetworkParams { - ptr: SharedPtr, + ptr: SharedPtr, } impl Default for ScaffoldNetworkParams { From e183e9f7686f5b232fda6018c63282d00afebb20 Mon Sep 17 00:00:00 2001 From: Xavier Lange Date: Mon, 6 Nov 2023 14:12:14 -0500 Subject: [PATCH 3/4] scaffold network wip --- rdkit-sys/src/bridge/scaffold_network.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/rdkit-sys/src/bridge/scaffold_network.rs b/rdkit-sys/src/bridge/scaffold_network.rs index 66f51b7..09cea45 100644 --- a/rdkit-sys/src/bridge/scaffold_network.rs +++ b/rdkit-sys/src/bridge/scaffold_network.rs @@ -1,15 +1,21 @@ +use cxx::{ExternType, SharedPtr}; + +pub struct SharedROMol { + s: SharedPtr, +} + +unsafe impl ExternType for SharedROMol { + type Id = cxx::type_id!("SharedROMol"); + type Kind = cxx::kind::Opaque; +} + #[cxx::bridge(namespace = "RDKit")] pub mod ffi { - // Trick from https://github.com/dtolnay/cxx/issues/741 - // pub struct ROMolSharedPtr { - // ptr: SharedPtr, - // } unsafe extern "C++" { include!("wrapper/include/scaffold_network.h"); pub type ScaffoldNetworkParamsLocal; - pub type ROMol = crate::ro_mol_ffi::ROMol; pub fn default_scaffold_network_params() -> SharedPtr; @@ -82,10 +88,10 @@ pub mod ffi { pub type ScaffoldNetworkClass; pub fn default_scaffold_network() -> SharedPtr; - // pub fn create_scaffold_network( - // mol: &CxxVector, - // scaffold_network_params: &SharedPtr, - // ) -> SharedPtr; + pub fn create_scaffold_network( + mol: &CxxVector, + scaffold_network_params: &SharedPtr, + ) -> SharedPtr; // pub fn update_scaffold_network( // scaffold_network: &mut SharedPtr, From 940bab926344486cf0261cab15b1ed8f3e291640 Mon Sep 17 00:00:00 2001 From: Xavier Lange Date: Thu, 14 Dec 2023 16:39:31 -0500 Subject: [PATCH 4/4] further along on the update scaffold behavior --- rdkit-sys/src/bridge/scaffold_network.rs | 10 +++++----- rdkit-sys/tests/test_scaffold_network.rs | 7 ++++++- rdkit-sys/wrapper/include/scaffold_network.h | 11 +++++++---- rdkit-sys/wrapper/src/scaffold_network.cc | 7 +++++++ 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/rdkit-sys/src/bridge/scaffold_network.rs b/rdkit-sys/src/bridge/scaffold_network.rs index e72f60a..e72ac00 100644 --- a/rdkit-sys/src/bridge/scaffold_network.rs +++ b/rdkit-sys/src/bridge/scaffold_network.rs @@ -85,10 +85,10 @@ pub mod ffi { scaffold_network_params: &SharedPtr, ) -> SharedPtr; - // pub fn update_scaffold_network( - // scaffold_network: &mut SharedPtr, - // mol: &CxxVector, - // scaffold_network_params: &SharedPtr, - // ); + pub fn update_scaffold_network( + mol: &SharedPtr, + scaffold_network: &mut SharedPtr, + scaffold_network_params: &SharedPtr, + ); } } diff --git a/rdkit-sys/tests/test_scaffold_network.rs b/rdkit-sys/tests/test_scaffold_network.rs index aede0b7..4db8af8 100644 --- a/rdkit-sys/tests/test_scaffold_network.rs +++ b/rdkit-sys/tests/test_scaffold_network.rs @@ -1,3 +1,4 @@ +use cxx::let_cxx_string; use rdkit_sys::scaffold_network_ffi::*; #[test] @@ -27,5 +28,9 @@ fn test_scaffold_network() { get_flatten_keep_largest(¶ms); get_collect_mol_counts(¶ms); - let _scaffold_network = default_scaffold_network(); + let mut scaffold_network = default_scaffold_network(); + let_cxx_string!(smiles = "CCC"); + let mol = rdkit_sys::ro_mol_ffi::smiles_to_mol(&smiles).unwrap(); + + update_scaffold_network(&mol, &mut scaffold_network, ¶ms); } diff --git a/rdkit-sys/wrapper/include/scaffold_network.h b/rdkit-sys/wrapper/include/scaffold_network.h index 1395cb1..d754910 100644 --- a/rdkit-sys/wrapper/include/scaffold_network.h +++ b/rdkit-sys/wrapper/include/scaffold_network.h @@ -40,8 +40,11 @@ namespace RDKit { throw std::invalid_argument("sup"); } -// pub fn create_scaffold_network( -// mol: &CxxVector, -// scaffold_network_params: &SharedPtr, -// ) -> SharedPtr; + void update_scaffold_network(const std::shared_ptr &mol, std::shared_ptr &scaffold_network, const std::shared_ptr &scaffold_network_params); + +// pub fn update_scaffold_network( +// mol: &SharedPtr, +// scaffold_network: &mut SharedPtr, +// scaffold_network_params: &SharedPtr, +// ); } \ No newline at end of file diff --git a/rdkit-sys/wrapper/src/scaffold_network.cc b/rdkit-sys/wrapper/src/scaffold_network.cc index ab75d56..d1d24a2 100644 --- a/rdkit-sys/wrapper/src/scaffold_network.cc +++ b/rdkit-sys/wrapper/src/scaffold_network.cc @@ -98,4 +98,11 @@ namespace RDKit { bool get_collect_mol_counts(const std::shared_ptr ¶ms) { return params->collectMolCounts; } + + void update_scaffold_network(const std::shared_ptr &mol, std::shared_ptr &scaffold_network, const std::shared_ptr &scaffold_network_params) { + std::vector mols; + mols.push_back(*mol); + ScaffoldNetwork::updateScaffoldNetwork(&mols, *scaffold_network, *scaffold_network_params); + } + } \ No newline at end of file