Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions rdkit-sys/src/bridge/ro_mol.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ pub mod ffi {
include!("wrapper/include/ro_mol.h");

pub type ROMol;

pub type ExplicitBitVect = crate::fingerprint_ffi::ExplicitBitVect;
pub type SmilesParserParams;
pub type Atom;
Expand Down
87 changes: 69 additions & 18 deletions rdkit-sys/src/bridge/scaffold_network.rs
Original file line number Diff line number Diff line change
@@ -1,43 +1,94 @@
use cxx::{ExternType, SharedPtr};

#[cxx::bridge(namespace = "RDKit")]
pub mod ffi {

unsafe extern "C++" {
include!("wrapper/include/scaffold_network.h");

pub type ScaffoldNetworkParams;
//
// pub fn default_scaffold_network_params() -> SharedPtr<ScaffoldNetworkParams>;
pub type ROMol = crate::ro_mol_ffi::ROMol;
pub type ScaffoldNetworkParamsLocal;

pub fn default_scaffold_network_params() -> SharedPtr<ScaffoldNetworkParams>;
pub fn default_scaffold_network_params() -> SharedPtr<ScaffoldNetworkParamsLocal>;

pub fn new_scaffold_network_params(
bond_breaker_smarts: &Vec<String>,
) -> SharedPtr<ScaffoldNetworkParams>;
) -> SharedPtr<ScaffoldNetworkParamsLocal>;

pub fn set_include_generic_scaffolds(
params: &mut SharedPtr<ScaffoldNetworkParams>,
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn include_generic_bond_scaffolds(
params: &mut SharedPtr<ScaffoldNetworkParams>,
pub fn set_include_generic_bond_scaffolds(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn include_scaffolds_without_attachments(
params: &mut SharedPtr<ScaffoldNetworkParams>,
pub fn set_include_scaffolds_without_attachments(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn include_scaffolds_with_attachments(
params: &mut SharedPtr<ScaffoldNetworkParams>,
pub fn set_include_scaffolds_with_attachments(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn keep_only_first_fragment(params: &mut SharedPtr<ScaffoldNetworkParams>, input: bool);
pub fn prune_before_fragmenting(params: &mut SharedPtr<ScaffoldNetworkParams>, input: bool);
pub fn flatten_isotopes(params: &mut SharedPtr<ScaffoldNetworkParams>, input: bool);
pub fn flatten_chirality(params: &mut SharedPtr<ScaffoldNetworkParams>, input: bool);
pub fn flatten_keep_largest(params: &mut SharedPtr<ScaffoldNetworkParams>, input: bool);
pub fn collect_mol_counts(params: &mut SharedPtr<ScaffoldNetworkParams>, input: bool);
pub fn set_keep_only_first_fragment(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn set_prune_before_fragmenting(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn set_flatten_isotopes(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn set_flatten_chirality(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn set_flatten_keep_largest(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);
pub fn set_collect_mol_counts(
params: &mut SharedPtr<ScaffoldNetworkParamsLocal>,
input: bool,
);

pub fn get_include_generic_scaffolds(
params: &SharedPtr<ScaffoldNetworkParamsLocal>,
) -> bool;
pub fn get_include_generic_bond_scaffolds(
params: &SharedPtr<ScaffoldNetworkParamsLocal>,
) -> bool;
pub fn get_include_scaffolds_without_attachments(
params: &SharedPtr<ScaffoldNetworkParamsLocal>,
) -> bool;
pub fn get_include_scaffolds_with_attachments(
params: &SharedPtr<ScaffoldNetworkParamsLocal>,
) -> bool;
pub fn get_keep_only_first_fragment(params: &SharedPtr<ScaffoldNetworkParamsLocal>)
-> bool;
pub fn get_prune_before_fragmenting(params: &SharedPtr<ScaffoldNetworkParamsLocal>)
-> bool;
pub fn get_flatten_isotopes(params: &SharedPtr<ScaffoldNetworkParamsLocal>) -> bool;
pub fn get_flatten_chirality(params: &SharedPtr<ScaffoldNetworkParamsLocal>) -> bool;
pub fn get_flatten_keep_largest(params: &SharedPtr<ScaffoldNetworkParamsLocal>) -> bool;
pub fn get_collect_mol_counts(params: &SharedPtr<ScaffoldNetworkParamsLocal>) -> bool;

pub type ScaffoldNetworkClass;
pub fn default_scaffold_network() -> SharedPtr<ScaffoldNetworkClass>;

pub fn create_scaffold_network(
mol: &SharedPtr<ROMol>,
scaffold_network_params: &SharedPtr<ScaffoldNetworkParamsLocal>,
) -> SharedPtr<ScaffoldNetworkClass>;

pub fn update_scaffold_network(
mol: &SharedPtr<ROMol>,
scaffold_network: &mut SharedPtr<ScaffoldNetworkClass>,
scaffold_network_params: &SharedPtr<ScaffoldNetworkParamsLocal>,
);
}
}
2 changes: 1 addition & 1 deletion rdkit-sys/tests/test_atoms.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#[test]
fn test_atoms() {
cxx::let_cxx_string!(smiles = "c1ccccc1CCCCCCCC");
let romol = rdkit_sys::ro_mol_ffi::smiles_to_mol(&smiles).unwrap();
let mut romol = rdkit_sys::ro_mol_ffi::smiles_to_mol(&smiles).unwrap();

let num_atoms = rdkit_sys::ro_mol_ffi::get_num_atoms(&romol, true);

Expand Down
36 changes: 26 additions & 10 deletions rdkit-sys/tests/test_scaffold_network.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use cxx::let_cxx_string;
use rdkit_sys::scaffold_network_ffi::*;

#[test]
Expand All @@ -6,15 +7,30 @@ 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);

let _scaffold_network = default_scaffold_network();
get_include_generic_scaffolds(&params);
get_include_generic_bond_scaffolds(&params);
get_include_scaffolds_without_attachments(&params);
get_include_scaffolds_with_attachments(&params);
get_keep_only_first_fragment(&params);
get_prune_before_fragmenting(&params);
get_flatten_isotopes(&params);
get_flatten_chirality(&params);
get_flatten_keep_largest(&params);
get_collect_mol_counts(&params);

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, &params);
}
2 changes: 2 additions & 0 deletions rdkit-sys/wrapper/include/ro_mol.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include <GraphMol/MolStandardize/Tautomer.h>

namespace RDKit {
using ROMolSharedPtr = std::shared_ptr<ROMol>;

std::shared_ptr<ROMol> copy_mol(const std::shared_ptr<ROMol> &mol);
std::shared_ptr<ROMol> smiles_to_mol(const std::string &smiles);
rust::String mol_to_smiles(const std::shared_ptr<ROMol> &mol);
Expand Down
53 changes: 38 additions & 15 deletions rdkit-sys/wrapper/include/scaffold_network.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,46 @@
#include <GraphMol/ScaffoldNetwork/ScaffoldNetwork.h>

namespace RDKit {
using ScaffoldNetworkParams = ScaffoldNetwork::ScaffoldNetworkParams;

std::shared_ptr<ScaffoldNetworkParams> default_scaffold_network_params();
std::shared_ptr<ScaffoldNetworkParams> new_scaffold_network_params(const rust::Vec<rust::String> &bondBreakersSmarts);

void set_include_generic_scaffolds(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void include_generic_bond_scaffolds(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void include_scaffolds_without_attachments(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void include_scaffolds_with_attachments(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void keep_only_first_fragment(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void prune_before_fragmenting(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void flatten_isotopes(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void flatten_chirality(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void flatten_keep_largest(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
void collect_mol_counts(std::shared_ptr<ScaffoldNetworkParams> &params, bool input);
using ScaffoldNetworkParamsLocal = ScaffoldNetwork::ScaffoldNetworkParams;

std::shared_ptr<ScaffoldNetworkParamsLocal> default_scaffold_network_params();
std::shared_ptr<ScaffoldNetworkParamsLocal> new_scaffold_network_params(const rust::Vec<rust::String> &bondBreakersSmarts);

void set_include_generic_scaffolds(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_include_generic_bond_scaffolds(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_include_scaffolds_without_attachments(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_include_scaffolds_with_attachments(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_keep_only_first_fragment(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_prune_before_fragmenting(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_flatten_isotopes(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_flatten_chirality(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_flatten_keep_largest(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);
void set_collect_mol_counts(std::shared_ptr<ScaffoldNetworkParamsLocal> &params, bool input);

bool get_include_generic_scaffolds(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_include_generic_bond_scaffolds(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_include_scaffolds_without_attachments(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_include_scaffolds_with_attachments(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_keep_only_first_fragment(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_prune_before_fragmenting(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_flatten_isotopes(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_flatten_chirality(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_flatten_keep_largest(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);
bool get_collect_mol_counts(const std::shared_ptr<ScaffoldNetworkParamsLocal> &params);

using ScaffoldNetworkClass = ScaffoldNetwork::ScaffoldNetwork;

std::shared_ptr<ScaffoldNetworkClass> default_scaffold_network();

std::shared_ptr<ScaffoldNetworkClass> create_scaffold_network(const std::shared_ptr<ROMol> &mol, const std::shared_ptr<ScaffoldNetworkParamsLocal> &scaffold_network_params) {
throw std::invalid_argument("sup");
}

void update_scaffold_network(const std::shared_ptr<ROMol> &mol, std::shared_ptr<ScaffoldNetworkClass> &scaffold_network, const std::shared_ptr<ScaffoldNetworkParamsLocal> &scaffold_network_params);

// pub fn update_scaffold_network(
// mol: &SharedPtr<ROMol>,
// scaffold_network: &mut SharedPtr<ScaffoldNetworkClass>,
// scaffold_network_params: &SharedPtr<ScaffoldNetworkParamsLocal>,
// );
}
55 changes: 46 additions & 9 deletions rdkit-sys/wrapper/src/scaffold_network.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,39 +25,39 @@ namespace RDKit {
params->includeGenericScaffolds = input;
}

void include_generic_bond_scaffolds(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_include_generic_bond_scaffolds(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->includeGenericBondScaffolds = input;
}

void include_scaffolds_without_attachments(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_include_scaffolds_without_attachments(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->includeScaffoldsWithoutAttachments = input;
}

void include_scaffolds_with_attachments(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_include_scaffolds_with_attachments(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->includeScaffoldsWithAttachments = input;
}

void keep_only_first_fragment(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_keep_only_first_fragment(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->keepOnlyFirstFragment = input;
}

void prune_before_fragmenting(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_prune_before_fragmenting(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->pruneBeforeFragmenting = input;
}

void flatten_isotopes(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_flatten_isotopes(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->flattenIsotopes = input;
}

void flatten_chirality(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_flatten_chirality(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->flattenChirality = input;
}

void flatten_keep_largest(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_flatten_keep_largest(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->flattenKeepLargest = input;
}

void collect_mol_counts(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
void set_collect_mol_counts(std::shared_ptr<ScaffoldNetworkParams> &params, bool input) {
params->collectMolCounts = input;
}

Expand All @@ -68,4 +68,41 @@ namespace RDKit {
return std::shared_ptr<ScaffoldNetworkClass>(scaffold_network);
}

bool get_include_generic_scaffolds(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->includeGenericScaffolds;
}
bool get_include_generic_bond_scaffolds(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->includeGenericBondScaffolds;
}
bool get_include_scaffolds_without_attachments(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->includeScaffoldsWithoutAttachments;
}
bool get_include_scaffolds_with_attachments(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->includeScaffoldsWithAttachments;
}
bool get_keep_only_first_fragment(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->keepOnlyFirstFragment;
}
bool get_prune_before_fragmenting(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->pruneBeforeFragmenting;
}
bool get_flatten_isotopes(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->flattenIsotopes;
}
bool get_flatten_chirality(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->flattenChirality;
}
bool get_flatten_keep_largest(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->flattenKeepLargest;
}
bool get_collect_mol_counts(const std::shared_ptr<ScaffoldNetworkParams> &params) {
return params->collectMolCounts;
}

void update_scaffold_network(const std::shared_ptr<ROMol> &mol, std::shared_ptr<ScaffoldNetworkClass> &scaffold_network, const std::shared_ptr<ScaffoldNetworkParams> &scaffold_network_params) {
std::vector<ROMol> mols;
mols.push_back(*mol);
ScaffoldNetwork::updateScaffoldNetwork(&mols, *scaffold_network, *scaffold_network_params);
}

}
3 changes: 3 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;

Expand Down
5 changes: 5 additions & 0 deletions src/scaffold_network/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
mod scaffold_network;
pub use scaffold_network::*;

mod scaffold_network_params;
pub use scaffold_network_params::*;
19 changes: 19 additions & 0 deletions src/scaffold_network/scaffold_network.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
use cxx::SharedPtr;

pub struct ScaffoldNetwork {
ptr: SharedPtr<rdkit_sys::scaffold_network_ffi::ScaffoldNetworkClass>,
}

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()
}
}
Loading