Skip to content

Commit ca0188d

Browse files
committed
Finished refactoring of Rng not a subtrait of RngCore
1 parent 7545732 commit ca0188d

File tree

8 files changed

+55
-56
lines changed

8 files changed

+55
-56
lines changed

rustcoalescence/algorithms/gillespie/src/event_skipping/launch.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ use std::{hint::unreachable_unchecked, marker::PhantomData};
22

33
use necsim_core::{
44
cogs::{
5-
distribution::{Bernoulli, IndexUsize, UniformClosedOpenUnit},
6-
ActiveLineageSampler, GloballyCoherentLineageStore, MathsCore, Rng, Samples,
5+
ActiveLineageSampler, GloballyCoherentLineageStore, MathsCore, Rng,
76
SeparableDispersalSampler, SplittableRng,
87
},
98
reporter::Reporter,
@@ -21,6 +20,7 @@ use necsim_impls_no_std::{
2120
origin_sampler::{
2221
decomposition::DecompositionOriginSampler, pre_sampler::OriginPreSampler,
2322
},
23+
rng::simple::SimpleRng,
2424
},
2525
parallelisation::{self, Status},
2626
};
@@ -38,15 +38,12 @@ use crate::arguments::{
3838
pub fn initialise_and_simulate<
3939
'p,
4040
M: MathsCore,
41-
G: Rng<M, Generator: SplittableRng>
42-
+ Samples<M, IndexUsize>
43-
+ Samples<M, Bernoulli>
44-
+ Samples<M, UniformClosedOpenUnit>,
45-
O: Scenario<M, G>,
41+
G: SplittableRng,
42+
O: Scenario<M, SimpleRng<M, G>>,
4643
R: Reporter,
4744
P: LocalPartition<'p, R>,
4845
I: Iterator<Item = u64>,
49-
L: EventSkippingLineageStoreSampleInitialiser<M, G, O, Error>,
46+
L: EventSkippingLineageStoreSampleInitialiser<M, SimpleRng<M, G>, O, Error>,
5047
Error,
5148
>(
5249
args: GillespieArguments,
@@ -56,13 +53,15 @@ pub fn initialise_and_simulate<
5653
pause_before: Option<NonNegativeF64>,
5754
local_partition: &mut P,
5855
lineage_store_sampler_initialiser: L,
59-
) -> Result<SimulationOutcome<M, G>, Error>
56+
) -> Result<SimulationOutcome<G>, Error>
6057
where
6158
O::LineageStore<GillespieLineageStore<M, O::Habitat>>:
6259
GloballyCoherentLineageStore<M, O::Habitat>,
63-
O::DispersalSampler<InMemorySeparableAliasDispersalSampler<M, O::Habitat, G>>:
64-
SeparableDispersalSampler<M, O::Habitat, G>,
60+
O::DispersalSampler<InMemorySeparableAliasDispersalSampler<M, O::Habitat, SimpleRng<M, G>>>:
61+
SeparableDispersalSampler<M, O::Habitat, SimpleRng<M, G>>,
6562
{
63+
let rng = SimpleRng::from(rng);
64+
6665
match args.parallelism_mode {
6766
ParallelismMode::Monolithic => {
6867
let (
@@ -72,7 +71,8 @@ where
7271
speciation_probability,
7372
origin_sampler_auxiliary,
7473
_decomposition_auxiliary,
75-
) = scenario.build::<InMemorySeparableAliasDispersalSampler<M, O::Habitat, G>>();
74+
) = scenario
75+
.build::<InMemorySeparableAliasDispersalSampler<M, O::Habitat, SimpleRng<M, G>>>();
7676
let coalescence_sampler = ConditionalCoalescenceSampler::default();
7777

7878
let (lineage_store, dispersal_sampler, event_sampler, active_lineage_sampler): (
@@ -127,8 +127,7 @@ where
127127
)
128128
.cloned()
129129
.collect(),
130-
rng: simulation.rng_mut().clone(),
131-
marker: PhantomData::<M>,
130+
rng: simulation.rng_mut().clone().into(),
132131
}),
133132
}
134133
},
@@ -144,7 +143,8 @@ where
144143
speciation_probability,
145144
origin_sampler_auxiliary,
146145
decomposition_auxiliary,
147-
) = scenario.build::<InMemorySeparableAliasDispersalSampler<M, O::Habitat, G>>();
146+
) = scenario
147+
.build::<InMemorySeparableAliasDispersalSampler<M, O::Habitat, SimpleRng<M, G>>>();
148148
let coalescence_sampler = ConditionalCoalescenceSampler::default();
149149

150150
let decomposition = O::decompose(

rustcoalescence/algorithms/gillespie/src/event_skipping/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use necsim_core::{
2-
cogs::{GloballyCoherentLineageStore, MathsCore, SeparableDispersalSampler},
2+
cogs::{GloballyCoherentLineageStore, MathsCore, Rng, SeparableDispersalSampler},
33
lineage::Lineage,
44
reporter::Reporter,
55
};
@@ -64,12 +64,12 @@ where
6464

6565
fn initialise_and_simulate<I: Iterator<Item = u64>>(
6666
args: Self::Arguments,
67-
rng: Self::Rng,
67+
rng: <Self::Rng as Rng<M>>::Generator,
6868
scenario: O,
6969
pre_sampler: OriginPreSampler<M, I>,
7070
pause_before: Option<NonNegativeF64>,
7171
local_partition: &mut P,
72-
) -> Result<SimulationOutcome<M, Self::Rng>, Self::Error> {
72+
) -> Result<SimulationOutcome<<Self::Rng as Rng<M>>::Generator>, Self::Error> {
7373
launch::initialise_and_simulate(
7474
args,
7575
rng,
@@ -87,14 +87,14 @@ where
8787
/// simulation failed
8888
fn resume_and_simulate<I: Iterator<Item = u64>, L: ExactSizeIterator<Item = Lineage>>(
8989
args: Self::Arguments,
90-
rng: Self::Rng,
90+
rng: <Self::Rng as Rng<M>>::Generator,
9191
scenario: O,
9292
pre_sampler: OriginPreSampler<M, I>,
9393
lineages: L,
9494
resume_after: Option<NonNegativeF64>,
9595
pause_before: Option<NonNegativeF64>,
9696
local_partition: &mut P,
97-
) -> Result<SimulationOutcome<M, Self::Rng>, ResumeError<Self::Error>> {
97+
) -> Result<SimulationOutcome<<Self::Rng as Rng<M>>::Generator>, ResumeError<Self::Error>> {
9898
launch::initialise_and_simulate(
9999
args,
100100
rng,
@@ -115,14 +115,14 @@ where
115115
/// simulation (incl. running the algorithm) failed
116116
fn fixup_for_restart<I: Iterator<Item = u64>, L: ExactSizeIterator<Item = Lineage>>(
117117
args: Self::Arguments,
118-
rng: Self::Rng,
118+
rng: <Self::Rng as Rng<M>>::Generator,
119119
scenario: O,
120120
pre_sampler: OriginPreSampler<M, I>,
121121
lineages: L,
122122
restart_at: PositiveF64,
123123
fixup_strategy: RestartFixUpStrategy,
124124
local_partition: &mut P,
125-
) -> Result<SimulationOutcome<M, Self::Rng>, ResumeError<Self::Error>> {
125+
) -> Result<SimulationOutcome<<Self::Rng as Rng<M>>::Generator>, ResumeError<Self::Error>> {
126126
launch::initialise_and_simulate(
127127
args,
128128
rng,

rustcoalescence/algorithms/gillespie/src/gillespie/classical/launch.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ where
121121
)
122122
.cloned()
123123
.collect(),
124-
rng: simulation.rng_mut().clone(),
124+
rng: simulation.rng_mut().clone().into(),
125125
}),
126126
}
127127
},
@@ -137,7 +137,7 @@ where
137137
speciation_probability,
138138
origin_sampler_auxiliary,
139139
decomposition_auxiliary,
140-
) = scenario.build::<InMemoryAliasDispersalSampler<M, O::Habitat, G>>();
140+
) = scenario.build::<InMemoryAliasDispersalSampler<M, O::Habitat, SimpleRng<M, G>>>();
141141
let coalescence_sampler = UnconditionalCoalescenceSampler::default();
142142
let event_sampler = UnconditionalEventSampler::default();
143143

rustcoalescence/algorithms/gillespie/src/gillespie/turnover/launch.rs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
use std::{hint::unreachable_unchecked, marker::PhantomData};
22

33
use necsim_core::{
4-
cogs::{
5-
distribution::{Bernoulli, IndexUsize, UniformClosedOpenUnit},
6-
ActiveLineageSampler, LocallyCoherentLineageStore, MathsCore, Rng, Samples, SplittableRng,
7-
},
4+
cogs::{ActiveLineageSampler, LocallyCoherentLineageStore, MathsCore, Rng, SplittableRng},
85
reporter::Reporter,
96
simulation::SimulationBuilder,
107
};
@@ -21,6 +18,7 @@ use necsim_impls_no_std::{
2118
origin_sampler::{
2219
decomposition::DecompositionOriginSampler, pre_sampler::OriginPreSampler,
2320
},
21+
rng::simple::SimpleRng,
2422
},
2523
parallelisation::{self, Status},
2624
};
@@ -39,15 +37,12 @@ use super::initialiser::GillespieLineageStoreSampleInitialiser;
3937
pub fn initialise_and_simulate<
4038
'p,
4139
M: MathsCore,
42-
G: Rng<M, Generator: SplittableRng>
43-
+ Samples<M, IndexUsize>
44-
+ Samples<M, Bernoulli>
45-
+ Samples<M, UniformClosedOpenUnit>,
46-
O: Scenario<M, G>,
40+
G: SplittableRng,
41+
O: Scenario<M, SimpleRng<M, G>>,
4742
R: Reporter,
4843
P: LocalPartition<'p, R>,
4944
I: Iterator<Item = u64>,
50-
L: GillespieLineageStoreSampleInitialiser<M, G, O, Error>,
45+
L: GillespieLineageStoreSampleInitialiser<M, SimpleRng<M, G>, O, Error>,
5146
Error,
5247
>(
5348
args: GillespieArguments,
@@ -57,11 +52,13 @@ pub fn initialise_and_simulate<
5752
pause_before: Option<NonNegativeF64>,
5853
local_partition: &mut P,
5954
lineage_store_sampler_initialiser: L,
60-
) -> Result<SimulationOutcome<M, G>, Error>
55+
) -> Result<SimulationOutcome<G>, Error>
6156
where
6257
O::LineageStore<ClassicalLineageStore<M, O::Habitat>>:
6358
LocallyCoherentLineageStore<M, O::Habitat>,
6459
{
60+
let rng = SimpleRng::from(rng);
61+
6562
match args.parallelism_mode {
6663
ParallelismMode::Monolithic => {
6764
let (
@@ -71,7 +68,7 @@ where
7168
speciation_probability,
7269
origin_sampler_auxiliary,
7370
_decomposition_auxiliary,
74-
) = scenario.build::<InMemoryAliasDispersalSampler<M, O::Habitat, G>>();
71+
) = scenario.build::<InMemoryAliasDispersalSampler<M, O::Habitat, SimpleRng<M, G>>>();
7572
let coalescence_sampler = UnconditionalCoalescenceSampler::default();
7673
let event_sampler = UnconditionalEventSampler::default();
7774

@@ -124,8 +121,7 @@ where
124121
)
125122
.cloned()
126123
.collect(),
127-
rng: simulation.rng_mut().clone(),
128-
marker: PhantomData::<M>,
124+
rng: simulation.rng_mut().clone().into(),
129125
}),
130126
}
131127
},
@@ -141,7 +137,7 @@ where
141137
speciation_probability,
142138
origin_sampler_auxiliary,
143139
decomposition_auxiliary,
144-
) = scenario.build::<InMemoryAliasDispersalSampler<M, O::Habitat, G>>();
140+
) = scenario.build::<InMemoryAliasDispersalSampler<M, O::Habitat, SimpleRng<M, G>>>();
145141
let coalescence_sampler = UnconditionalCoalescenceSampler::default();
146142
let event_sampler = UnconditionalEventSampler::default();
147143

rustcoalescence/algorithms/gillespie/src/gillespie/turnover/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use necsim_core::{
2-
cogs::{LocallyCoherentLineageStore, MathsCore},
2+
cogs::{LocallyCoherentLineageStore, MathsCore, Rng},
33
lineage::Lineage,
44
reporter::Reporter,
55
};
@@ -52,12 +52,12 @@ where
5252
#[allow(clippy::shadow_unrelated, clippy::too_many_lines)]
5353
default fn initialise_and_simulate<I: Iterator<Item = u64>>(
5454
args: Self::Arguments,
55-
rng: Self::Rng,
55+
rng: <Self::Rng as Rng<M>>::Generator,
5656
scenario: O,
5757
pre_sampler: OriginPreSampler<M, I>,
5858
pause_before: Option<NonNegativeF64>,
5959
local_partition: &mut P,
60-
) -> Result<SimulationOutcome<M, Self::Rng>, Self::Error> {
60+
) -> Result<SimulationOutcome<<Self::Rng as Rng<M>>::Generator>, Self::Error> {
6161
launch::initialise_and_simulate(
6262
args,
6363
rng,
@@ -79,14 +79,14 @@ where
7979
L: ExactSizeIterator<Item = Lineage>,
8080
>(
8181
args: Self::Arguments,
82-
rng: Self::Rng,
82+
rng: <Self::Rng as Rng<M>>::Generator,
8383
scenario: O,
8484
pre_sampler: OriginPreSampler<M, I>,
8585
lineages: L,
8686
resume_after: Option<NonNegativeF64>,
8787
pause_before: Option<NonNegativeF64>,
8888
local_partition: &mut P,
89-
) -> Result<SimulationOutcome<M, Self::Rng>, ResumeError<Self::Error>> {
89+
) -> Result<SimulationOutcome<<Self::Rng as Rng<M>>::Generator>, ResumeError<Self::Error>> {
9090
launch::initialise_and_simulate(
9191
args,
9292
rng,
@@ -108,14 +108,14 @@ where
108108
#[allow(clippy::too_many_lines)]
109109
default fn fixup_for_restart<I: Iterator<Item = u64>, L: ExactSizeIterator<Item = Lineage>>(
110110
args: Self::Arguments,
111-
rng: Self::Rng,
111+
rng: <Self::Rng as Rng<M>>::Generator,
112112
scenario: O,
113113
pre_sampler: OriginPreSampler<M, I>,
114114
lineages: L,
115115
restart_at: PositiveF64,
116116
fixup_strategy: RestartFixUpStrategy,
117117
local_partition: &mut P,
118-
) -> Result<SimulationOutcome<M, Self::Rng>, ResumeError<Self::Error>> {
118+
) -> Result<SimulationOutcome<<Self::Rng as Rng<M>>::Generator>, ResumeError<Self::Error>> {
119119
launch::initialise_and_simulate(
120120
args,
121121
rng,

rustcoalescence/src/cli/simulate/dispatch/valid/info.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use anyhow::{Context, Result};
55
use rustcoalescence_algorithms::{result::SimulationOutcome, Algorithm};
66

77
use necsim_core::{
8-
cogs::MathsCore,
8+
cogs::{MathsCore, Rng},
99
reporter::{boolean::Boolean, Reporter},
1010
};
1111
use necsim_core_bond::NonNegativeF64;
@@ -31,17 +31,17 @@ pub(super) fn dispatch<
3131
P: LocalPartition<'p, R>,
3232
>(
3333
algorithm_args: A::Arguments,
34-
rng: A::Rng,
34+
rng: <A::Rng as Rng<M>>::Generator,
3535
scenario: O,
3636
sample: Sample,
3737
pause_before: Option<NonNegativeF64>,
3838
mut local_partition: P,
3939

4040
normalised_args: &BufferingSimulateArgsBuilder,
41-
) -> anyhow::Result<SimulationOutcome<M, A::Rng>>
41+
) -> anyhow::Result<SimulationOutcome<<A::Rng as Rng<M>>::Generator>>
4242
where
43-
Result<SimulationOutcome<M, A::Rng>, A::Error>:
44-
anyhow::Context<SimulationOutcome<M, A::Rng>, A::Error>,
43+
Result<SimulationOutcome<<A::Rng as Rng<M>>::Generator>, A::Error>:
44+
anyhow::Context<SimulationOutcome<<A::Rng as Rng<M>>::Generator>, A::Error>,
4545
{
4646
let config_str = normalised_args
4747
.build()

rustcoalescence/src/cli/simulate/dispatch/valid/launch.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ use anyhow::Context;
22

33
use rustcoalescence_algorithms::{result::SimulationOutcome, Algorithm};
44

5-
use necsim_core::{cogs::MathsCore, reporter::Reporter};
5+
use necsim_core::{
6+
cogs::{MathsCore, Rng},
7+
reporter::Reporter,
8+
};
69
use necsim_core_bond::{NonNegativeF64, PositiveF64};
710
use necsim_impls_no_std::cogs::origin_sampler::pre_sampler::OriginPreSampler;
811
use necsim_partitioning_core::LocalPartition;
@@ -20,12 +23,12 @@ pub(super) fn simulate<
2023
P: LocalPartition<'p, R>,
2124
>(
2225
algorithm_args: A::Arguments,
23-
rng: A::Rng,
26+
rng: <A::Rng as Rng<M>>::Generator,
2427
scenario: O,
2528
sample: Sample,
2629
pause_before: Option<NonNegativeF64>,
2730
local_partition: &mut P,
28-
) -> anyhow::Result<SimulationOutcome<M, A::Rng>> {
31+
) -> anyhow::Result<SimulationOutcome<<A::Rng as Rng<M>>::Generator>> {
2932
let lineages = match sample.origin {
3033
SampleOrigin::Habitat => {
3134
return A::initialise_and_simulate(

rustcoalescence/src/cli/simulate/dispatch/valid/rng.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ pub(super) fn dispatch<
4343
normalised_args: &mut BufferingSimulateArgsBuilder,
4444
) -> anyhow::Result<SimulationOutcome>
4545
where
46-
Result<AlgorithmOutcome<M, A::Rng>, A::Error>:
47-
anyhow::Context<AlgorithmOutcome<M, A::Rng>, A::Error>,
46+
Result<AlgorithmOutcome<<A::Rng as Rng<M>>::Generator>, A::Error>:
47+
anyhow::Context<AlgorithmOutcome<<A::Rng as Rng<M>>::Generator>, A::Error>,
4848
{
4949
let rng: <A::Rng as Rng<M>>::Generator = match parse::rng::parse_and_normalise(
5050
ron_args,

0 commit comments

Comments
 (0)