1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//! Rust library for forward time population
//! genetic simulation with tree sequence recording.
//!
//! # Overview
//!
//! This package is a port of many ideas from
//! [fwdpp](https://github.com/molpopgen/fwdpp) from C++ to rust.
//!
//! Currently, this should be viewed as **experimental**.
//!
//! # Differences from [tskit](https://tskit.readthedocs.io)
//!
//! The tables model differs from `tskit` in some important ways:
//!
//! 1. Time moves from the past to the present.
//!    Thus, child nodes have time values *greater than*
//!    those of their parents.
//! 2. The data layout is "array of structures" while
//!    `tskit` is a "structure of arrays".
//! 3. Metadata is not part of the tables.
//!    Often, what one thinks of as metadata is data
//!    used during the simulation.  Thus, it is not
//!    part of a [``TableCollection``] and is something
//!    that would only be useful to write when transfering
//!    final results to a [`tskit::TableCollection`].
//! 4. Mutation table data are different. See [``MutationRecord``].
//! 5. Time is measured as an integer (see [``Time``]),
//!    as are genomic locations (see [``Position``]).
//!    In `tskit`, both are C `double`, the equivalent of [``f64``].
//!
//! # Where to find examples
//!
//! In the `examples/` directory of the project repository.

// NOTE: uncomment the next line in order to find
// stuff that needs documenting:
// #![warn(missing_docs)]

mod error;
pub mod nested_forward_list;
mod segment;
mod simplification;
mod tables;
mod tsdef;

pub use error::ForrusttsError;
pub use segment::Segment;
pub use simplification::simplify_from_edge_buffer;
pub use simplification::EdgeBuffer;
pub use simplification::SamplesInfo;
pub use simplification::SimplificationBuffers;
pub use simplification::SimplificationFlags;
pub use simplification::SimplificationOutput;
pub use simplification::{simplify_tables, simplify_tables_without_state};
pub use tables::*;
pub use tsdef::*;

pub mod tskit_tools;

/// Get the forrustts version number.
pub fn version() -> &'static str {
    return env!("CARGO_PKG_VERSION");
}