demes_forward/lib.rs
1//! # Forward-time traversal of demes models.
2//!
3//! ## Re-exports
4//!
5//! This crate re-exports `demes`.
6//! Client code does not have to list `demes`
7//! as a cargo dependency, guaranteeing that
8//! a compatible version is available.
9//!
10//! ```rust
11//! use demes_forward::demes;
12//!
13//! let yaml = "
14//! time_units: generations
15//! demes:
16//! - name: a_deme
17//! epochs:
18//! - start_size: 100
19//! ";
20//! assert!(demes::loads(yaml).is_ok());
21//! ```
22
23#![warn(missing_docs)]
24#![deny(rustdoc::broken_intra_doc_links)]
25
26mod current_size;
27mod error;
28mod graph;
29mod iterators;
30mod square_matrix;
31mod time;
32
33#[cfg(test)]
34mod test_functions;
35
36pub use current_size::CurrentSize;
37pub use demes;
38pub use error::DemesForwardError;
39pub use graph::ForwardGraph;
40pub use time::ForwardTime;
41
42/// The size of a deme at a given time.
43#[derive(Copy, Clone, Debug, PartialEq, PartialOrd)]
44pub struct DemeSizeAt {
45 time: demes::Time,
46 forward_time: ForwardTime,
47 size: CurrentSize,
48}
49
50impl DemeSizeAt {
51 /// The current time (in the past)
52 pub fn time(&self) -> demes::Time {
53 self.time
54 }
55 /// The current time measured since the
56 /// start of the model, forwards in time
57 pub fn forward_time(&self) -> ForwardTime {
58 self.forward_time
59 }
60 /// The current size
61 pub fn size(&self) -> CurrentSize {
62 self.size
63 }
64}