13 个版本 (8 个重大更新)
0.9.0 | 2021年3月3日 |
---|---|
0.7.0 | 2021年1月24日 |
0.6.3 | 2020年10月2日 |
0.6.1 | 2020年7月8日 |
#572 in 开发工具
86 每月下载量
在 4 crates 中使用
170KB
5K SLoC
喵喵
Rust 中读取和写入 SMILES 语言的库。
用法
将以下内容添加到您的 Cargo.toml
[dependencies]
purr = "0.9"
示例
将乙酰胺解析为邻接表示
use purr::graph::{ Builder, Atom, Bond };
use purr::feature::{ AtomKind, BondKind, Aliphatic };
use purr::read::{ read, Error };
fn main() -> Result<(), Error> {
let mut builder = Builder::new();
read("CC(=O)N", &mut builder, None)?;
assert_eq!(builder.build(), Ok(vec![
Atom {
kind: AtomKind::Aliphatic(Aliphatic::C),
bonds: vec![
Bond::new(BondKind::Elided, 1)
]
},
Atom {
kind: AtomKind::Aliphatic(Aliphatic::C),
bonds: vec![
Bond::new(BondKind::Elided, 0),
Bond::new(BondKind::Double, 2),
Bond::new(BondKind::Elided, 3)
]
},
Atom {
kind: AtomKind::Aliphatic(Aliphatic::O),
bonds: vec![
Bond::new(BondKind::Double, 1)
]
},
Atom {
kind: AtomKind::Aliphatic(Aliphatic::N),
bonds: vec![
Bond::new(BondKind::Elided, 1)
]
}
]));
Ok(())
}
原子和其取代基的顺序反映了它们在相应的 SMILES 字符串中的隐含顺序。当原子配置(例如,@
,@@
)在原子处存在时,这一点非常重要。
可选的 Trace
类型将邻接功能映射到原始字符串中的光标位置。这对于传达语义错误(如超价)很有用。
use purr::graph::Builder;
use purr::read::{ read, Error, Trace };
fn main() -> Result<(), Error> {
let mut builder = Builder::new();
let mut trace = Trace::new();
// 012345678901234
read("C(C)C(C)(C)(C)C", &mut builder, Some(&mut trace))?;
// Texas carbon @ atom(2) with cursor range 4..5
assert_eq!(trace.atom(2), Some(4..5));
Ok(())
}
语法错误映射到它们发生的光标位置。
use purr::graph::Builder;
use purr::read::{ read, Error };
fn main() {
let mut builder = Builder::new();
assert_eq!(read("OCCXC", &mut builder, None), Err(Error::Character(3)));
}
可以使用 write
编写邻接。
use purr::graph::{ Builder, Atom, Bond };
use purr::feature::{ AtomKind, BondKind, Aliphatic };
use purr::read::{ read, Error };
use purr::write::Writer;
use purr::walk::walk;
fn main() -> Result<(), Error> {
let mut builder = Builder::new();
read("c1c([37Cl])cccc1", &mut builder, None)?;
let atoms = builder.build().expect("atoms");
let mut writer = Writer::new();
walk(atoms, &mut writer).expect("walk");
assert_eq!(writer.write(), "c(ccccc1[37Cl])1");
Ok(())
}
输出字符串与输入字符串不匹配,尽管它们都表示相同的分子(Cl-37 氯苯)。write
以深度优先顺序跟踪 atoms
,但邻接表示(atoms
)缺乏有关原始 SMILES 树如何切割的信息。
版本
喵喵尚不稳定。补丁版本不会引入破坏性更改,但次要/主要版本可能会。
许可
喵喵根据 MIT 许可证分发。有关详细信息,请参阅 LICENSE-MIT 和 COPYRIGHT。