Skip to content

Commit 669d57f

Browse files
committed
utils: new method par_rebond for rebond all molecules in parallel
1 parent 2605f8f commit 669d57f

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

src/utils.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,26 @@ fn gaussview_selection_commands(selected: Vec<usize>) -> Result<()> {
5959
}
6060
// 4c0ea8d1 ends here
6161

62+
// [[file:../spdkit-python.note::22b53bc5][22b53bc5]]
63+
use super::PyMolecule;
64+
65+
#[pyfunction]
66+
/// Rebond all molecules in parallel
67+
fn par_rebond(mols: Vec<&PyCell<PyMolecule>>) -> Result<()> {
68+
use std::ops::DerefMut;
69+
70+
// workaround for limitation in &mut PyMolecule
71+
let mut mols: Vec<_> = mols.into_iter().map(|cell| cell.try_borrow_mut().unwrap()).collect();
72+
let mut mols: Vec<_> = mols.iter_mut().map(|refr| refr.deref_mut()).collect();
73+
74+
mols.as_mut_slice()
75+
.into_par_iter()
76+
.for_each(|mut mol| mol.rebond(false, None, None, None, None));
77+
78+
Ok(())
79+
}
80+
// 22b53bc5 ends here
81+
6282
// [[file:../spdkit-python.note::0853f16f][0853f16f]]
6383
pub fn new<'p>(py: Python<'p>, name: &str) -> PyResult<&'p PyModule> {
6484
let m = PyModule::new(py, name)?;
@@ -69,6 +89,7 @@ pub fn new<'p>(py: Python<'p>, name: &str) -> PyResult<&'p PyModule> {
6989
m.add_function(wrap_pyfunction!(jmol_selection_commands, m)?)?;
7090
m.add_function(wrap_pyfunction!(pymol_selection_commands, m)?)?;
7191
m.add_function(wrap_pyfunction!(gaussview_selection_commands, m)?)?;
92+
m.add_function(wrap_pyfunction!(par_rebond, m)?)?;
7293

7394
Ok(m)
7495
}

0 commit comments

Comments
 (0)