1use relmath::{UnaryRelation, provenance::ProvenanceRelation};
4
5fn main() {
6 let gene_disease = ProvenanceRelation::from_facts([
7 (("BRCA1", "BreastCancer"), "curated_panel"),
8 (("BRCA1", "BreastCancer"), "paper_12"),
9 (("TP53", "BreastCancer"), "paper_77"),
10 ]);
11
12 let disease_drug = relmath::BinaryRelation::from_pairs([
13 ("BreastCancer", "Olaparib"),
14 ("BreastCancer", "Tamoxifen"),
15 ]);
16
17 let supported_gene_disease = gene_disease.to_binary_relation();
18 let gene_drug = supported_gene_disease.compose(&disease_drug);
19 let brca1 = UnaryRelation::singleton("BRCA1");
20 let brca1_witness = gene_disease
21 .why(&("BRCA1", "BreastCancer"))
22 .expect("expected explanation");
23
24 assert_eq!(
25 gene_drug.image(&brca1).to_vec(),
26 vec!["Olaparib", "Tamoxifen"]
27 );
28 assert_eq!(brca1_witness.to_vec(), vec!["curated_panel", "paper_12"]);
29 assert!(brca1_witness.contains_token(&"paper_12"));
30 assert_eq!(
31 gene_disease
32 .provenance_of(&("BRCA1", "BreastCancer"))
33 .expect("expected explanation")
34 .to_vec(),
35 brca1_witness.to_vec()
36 );
37 assert_eq!(
38 gene_disease.support().to_vec(),
39 vec![("BRCA1", "BreastCancer"), ("TP53", "BreastCancer")]
40 );
41 assert!(gene_disease.why(&("BRCA1", "Olaparib")).is_none());
42
43 println!(
44 "why BRCA1 links to BreastCancer in the base evidence: {:?}",
45 brca1_witness.to_vec()
46 );
47}