pub struct ProvenanceSet<P: Ord> { /* private fields */ }Expand description
Deterministic provenance tokens attached to one stored fact.
ProvenanceSet<P> is the user-visible witness for a fact in this first G3
slice. It is an exact BTreeSet-backed set of tokens or labels, not a
derivation DAG.
§Examples
use relmath::provenance::{ProvenanceRelation, ProvenanceSet};
let empty = ProvenanceSet::<&str>::default();
assert!(empty.is_empty());
let evidence = ProvenanceRelation::from_facts([
(("BRCA1", "BreastCancer"), "paper_12"),
(("BRCA1", "BreastCancer"), "curated_panel"),
]);
let witness = evidence
.why(&("BRCA1", "BreastCancer"))
.expect("expected explanation");
assert_eq!(witness.len(), 2);
assert!(witness.contains(&"paper_12"));
assert!(witness.contains_token(&"curated_panel"));
assert_eq!(
witness.iter().copied().collect::<Vec<_>>(),
vec!["curated_panel", "paper_12"]
);
assert_eq!(witness.to_vec(), vec!["curated_panel", "paper_12"]);Implementations§
Source§impl<P: Ord> ProvenanceSet<P>
impl<P: Ord> ProvenanceSet<P>
Sourcepub fn contains_token(&self, token: &P) -> bool
pub fn contains_token(&self, token: &P) -> bool
Returns true when the set contains the given provenance token.
Examples found in repository?
examples/provenance.rs (line 29)
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}Sourcepub fn iter(&self) -> impl Iterator<Item = &P>
pub fn iter(&self) -> impl Iterator<Item = &P>
Returns an iterator over provenance tokens in deterministic order.
Sourcepub fn to_vec(&self) -> Vec<P>where
P: Clone,
pub fn to_vec(&self) -> Vec<P>where
P: Clone,
Converts the provenance set into a sorted vector of tokens.
Examples found in repository?
examples/provenance.rs (line 28)
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}Trait Implementations§
Source§impl<P: Clone + Ord> Clone for ProvenanceSet<P>
impl<P: Clone + Ord> Clone for ProvenanceSet<P>
Source§fn clone(&self) -> ProvenanceSet<P>
fn clone(&self) -> ProvenanceSet<P>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<P: Ord> Default for ProvenanceSet<P>
impl<P: Ord> Default for ProvenanceSet<P>
impl<P: Eq + Ord> Eq for ProvenanceSet<P>
impl<P: Ord> StructuralPartialEq for ProvenanceSet<P>
Auto Trait Implementations§
impl<P> Freeze for ProvenanceSet<P>
impl<P> RefUnwindSafe for ProvenanceSet<P>where
P: RefUnwindSafe,
impl<P> Send for ProvenanceSet<P>where
P: Send,
impl<P> Sync for ProvenanceSet<P>where
P: Sync,
impl<P> Unpin for ProvenanceSet<P>
impl<P> UnsafeUnpin for ProvenanceSet<P>
impl<P> UnwindSafe for ProvenanceSet<P>where
P: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more