use crate::{Fingerprint, FingerprintError, Molecule};
#[derive(Debug, Clone, PartialEq)]
pub struct AvalonFingerprintParams {
pub min_path: u32,
pub max_path: u32,
pub n_bits: usize,
pub n_bits_per_hash: u32,
pub use_bond_order: bool,
pub use_hs: bool,
pub tautomeric_fingerprint: bool,
pub from_atoms: Option<Vec<usize>>,
}
impl Default for AvalonFingerprintParams {
fn default() -> Self {
Self {
min_path: 1,
max_path: 7,
n_bits: 2048,
n_bits_per_hash: 1,
use_bond_order: true,
use_hs: false,
tautomeric_fingerprint: false,
from_atoms: None,
}
}
}
pub fn avalon_fingerprint(
_molecule: &Molecule,
_params: &AvalonFingerprintParams,
) -> Result<Fingerprint, FingerprintError> {
Err(FingerprintError::UnsupportedOption {
option: "avalon_fingerprint",
reason: "RDKit Avalon exact-bit source port is not implemented",
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn avalon_fingerprint_fails_closed_until_exact_port_exists() {
let err = avalon_fingerprint(&Molecule::new(), &AvalonFingerprintParams::default())
.expect_err("unfinished Avalon fingerprint must not return approximate bits");
assert!(matches!(
err,
FingerprintError::UnsupportedOption {
option: "avalon_fingerprint",
..
}
));
}
}