use relmath::{UnaryRelation, provenance::ProvenanceRelation};
fn main() {
let gene_disease = ProvenanceRelation::from_facts([
(("BRCA1", "BreastCancer"), "curated_panel"),
(("BRCA1", "BreastCancer"), "paper_12"),
(("TP53", "BreastCancer"), "paper_77"),
]);
let disease_drug = relmath::BinaryRelation::from_pairs([
("BreastCancer", "Olaparib"),
("BreastCancer", "Tamoxifen"),
]);
let supported_gene_disease = gene_disease.to_binary_relation();
let gene_drug = supported_gene_disease.compose(&disease_drug);
let brca1 = UnaryRelation::singleton("BRCA1");
let brca1_witness = gene_disease
.why(&("BRCA1", "BreastCancer"))
.expect("expected explanation");
assert_eq!(
gene_drug.image(&brca1).to_vec(),
vec!["Olaparib", "Tamoxifen"]
);
assert_eq!(brca1_witness.to_vec(), vec!["curated_panel", "paper_12"]);
assert!(brca1_witness.contains_token(&"paper_12"));
assert_eq!(
gene_disease
.provenance_of(&("BRCA1", "BreastCancer"))
.expect("expected explanation")
.to_vec(),
brca1_witness.to_vec()
);
assert_eq!(
gene_disease.support().to_vec(),
vec![("BRCA1", "BreastCancer"), ("TP53", "BreastCancer")]
);
assert!(gene_disease.why(&("BRCA1", "Olaparib")).is_none());
println!(
"why BRCA1 links to BreastCancer in the base evidence: {:?}",
brca1_witness.to_vec()
);
}