Struct demes::GraphBuilder
source · pub struct GraphBuilder { /* private fields */ }
Expand description
Implementations§
source§impl GraphBuilder
impl GraphBuilder
sourcepub fn new(
time_units: TimeUnits,
generation_time: Option<InputGenerationTime>,
defaults: Option<GraphDefaults>
) -> Self
pub fn new( time_units: TimeUnits, generation_time: Option<InputGenerationTime>, defaults: Option<GraphDefaults> ) -> Self
sourcepub fn new_generations(defaults: Option<GraphDefaults>) -> Self
pub fn new_generations(defaults: Option<GraphDefaults>) -> Self
Construct a builder with time units in generations.
This function works by calling GraphBuilder::new
.
sourcepub fn add_deme<I: IntoIterator<Item = UnresolvedEpoch>>(
&mut self,
name: &str,
epochs: I,
history: UnresolvedDemeHistory,
description: Option<&str>
)
pub fn add_deme<I: IntoIterator<Item = UnresolvedEpoch>>( &mut self, name: &str, epochs: I, history: UnresolvedDemeHistory, description: Option<&str> )
Add a Deme
to the graph.
Examples
let start_size = demes::InputDemeSize::from(100.);
let epoch = demes::UnresolvedEpoch{start_size: Some(start_size), ..Default::default()};
let history = demes::UnresolvedDemeHistory::default();
let mut b = demes::GraphBuilder::new_generations(None);
b.add_deme("A", vec![epoch], history, Some("this is deme A"));
b.resolve().unwrap();
Notes
sourcepub fn add_migration(&mut self, migration: UnresolvedMigration)
pub fn add_migration(&mut self, migration: UnresolvedMigration)
Add a migration to the graph.
Examples
Adding an asymmetric migration
See UnresolvedMigration
.
let start_size = demes::InputDemeSize::from(100.);
let epoch = demes::UnresolvedEpoch{start_size: Some(start_size), ..Default::default()};
let history = demes::UnresolvedDemeHistory::default();
let mut b = demes::GraphBuilder::new_generations(None);
b.add_deme("A", vec![epoch], history.clone(), Some("this is deme A"));
b.add_deme("B", vec![epoch], history, Some("this is deme B"));
let migration = demes::UnresolvedMigration::default().set_source("A").set_dest("B").set_rate(1e-4);
b.add_migration(migration);
b.resolve().unwrap();
Adding a symmetric migration
See UnresolvedMigration
.
let start_size = demes::InputDemeSize::from(100.);
let epoch = demes::UnresolvedEpoch{start_size: Some(start_size), ..Default::default()};
let history = demes::UnresolvedDemeHistory::default();
let mut b = demes::GraphBuilder::new_generations(None);
b.add_deme("A", vec![epoch], history.clone(), Some("this is deme A"));
b.add_deme("B", vec![epoch], history, Some("this is deme B"));
let migration = demes::UnresolvedMigration::default().set_demes(["A","B"].as_slice()).set_rate(1e-4);
b.add_migration(migration);
b.resolve().unwrap();
We can also use a Vec
instead of an array:
let migration = demes::UnresolvedMigration::default().set_demes(vec!["A","B"]).set_rate(1e-4);
b.add_migration(migration);
sourcepub fn add_pulse<T: Into<InputTime>, P: Into<InputProportion>, I: IntoIterator<Item = P>>(
&mut self,
sources: Option<&[&str]>,
dest: Option<&str>,
time: Option<T>,
proportions: Option<I>
)
pub fn add_pulse<T: Into<InputTime>, P: Into<InputProportion>, I: IntoIterator<Item = P>>( &mut self, sources: Option<&[&str]>, dest: Option<&str>, time: Option<T>, proportions: Option<I> )
Add an UnresolvedPulse
to the graph.
Examples
let start_size = demes::InputDemeSize::from(100.);
let epoch = demes::UnresolvedEpoch{start_size: Some(start_size), ..Default::default()};
let history = demes::UnresolvedDemeHistory::default();
let mut b = demes::GraphBuilder::new_generations(None);
b.add_deme("A", vec![epoch], history.clone(), Some("this is deme A"));
b.add_deme("B", vec![epoch], history, Some("this is deme B"));
b.add_pulse(Some(&["A"]),
Some("B"),
Some(50.0),
Some([0.5].as_slice()));
b.resolve().unwrap();
sourcepub fn resolve(self) -> Result<Graph, DemesError>
pub fn resolve(self) -> Result<Graph, DemesError>
sourcepub fn set_toplevel_metadata<T: Serialize>(
&mut self,
metadata: &T
) -> Result<(), BuilderError>
pub fn set_toplevel_metadata<T: Serialize>( &mut self, metadata: &T ) -> Result<(), BuilderError>
Set top-level metadata
Parameters
metadata
: the metadata type
Note
Repeated calls will overwrite existing metadata.
Errors
BuilderError
if serialization to YAML fails.
Example
#[derive(serde::Serialize, serde::Deserialize)]
struct MyMetaData {
foo: i32,
bar: String
}
builder.set_toplevel_metadata(&MyMetaData{foo: 3, bar: "string".to_owned()}).unwrap();
Auto Trait Implementations§
impl RefUnwindSafe for GraphBuilder
impl Send for GraphBuilder
impl Sync for GraphBuilder
impl Unpin for GraphBuilder
impl UnwindSafe for GraphBuilder
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