Skip to main content

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}