77//! to others. Feel free to copy them!
88use crate :: simplify_from_edge_buffer:: simplify_from_edge_buffer;
99use crate :: simplify_tables:: * ;
10- use crate :: tables:: { validate_edge_table , TableCollection } ;
10+ use crate :: tables:: TableCollection ;
1111use crate :: tsdef:: * ;
1212use crate :: EdgeBuffer ;
1313use crate :: ForrusttsError ;
@@ -300,47 +300,31 @@ fn fill_samples(parents: &[Parent], samples: &mut SamplesInfo) {
300300
301301fn sort_and_simplify (
302302 flags : SimulationFlags ,
303+ simplification_flags : SimplificationFlags ,
303304 samples : & SamplesInfo ,
304305 state : & mut SimplificationBuffers ,
305306 pop : & mut PopulationState ,
306307 output : & mut SimplificationOutput ,
307308) {
308309 if !flags. contains ( SimulationFlags :: BUFFER_EDGES ) {
309310 pop. tables . sort_tables ( crate :: TableSortingFlags :: empty ( ) ) ;
310- debug_assert ! ( validate_edge_table(
311- pop. tables. genome_length( ) ,
312- pop. tables. edges( ) ,
313- pop. tables. nodes( )
314- )
315- . unwrap( ) ) ;
316311 if flags. contains ( SimulationFlags :: USE_STATE ) {
317312 simplify_tables (
318313 samples,
319- SimplificationFlags :: empty ( ) ,
314+ simplification_flags ,
320315 state,
321316 & mut pop. tables ,
322317 output,
323318 )
324319 . unwrap ( ) ;
325320 } else {
326- simplify_tables_without_state (
327- samples,
328- SimplificationFlags :: empty ( ) ,
329- & mut pop. tables ,
330- output,
331- )
332- . unwrap ( ) ;
321+ simplify_tables_without_state ( samples, simplification_flags, & mut pop. tables , output)
322+ . unwrap ( ) ;
333323 }
334- debug_assert ! ( validate_edge_table(
335- pop. tables. genome_length( ) ,
336- pop. tables. edges( ) ,
337- pop. tables. nodes( )
338- )
339- . unwrap( ) ) ;
340324 } else {
341325 simplify_from_edge_buffer (
342326 samples,
343- SimplificationFlags :: empty ( ) ,
327+ simplification_flags ,
344328 state,
345329 & mut pop. edge_buffer ,
346330 & mut pop. tables ,
@@ -352,13 +336,14 @@ fn sort_and_simplify(
352336
353337fn simplify_and_remap_nodes (
354338 flags : SimulationFlags ,
339+ simplification_flags : SimplificationFlags ,
355340 samples : & mut SamplesInfo ,
356341 state : & mut SimplificationBuffers ,
357342 pop : & mut PopulationState ,
358343 output : & mut SimplificationOutput ,
359344) {
360345 fill_samples ( & pop. parents , samples) ;
361- sort_and_simplify ( flags, samples, state, pop, output) ;
346+ sort_and_simplify ( flags, simplification_flags , samples, state, pop, output) ;
362347
363348 for p in & mut pop. parents {
364349 p. node0 = output. idmap [ p. node0 as usize ] ;
@@ -451,10 +436,14 @@ pub struct SimulationParams {
451436 /// Bitwise flag tweaking the behavior of the
452437 /// simplification algorithm.
453438 pub flags : SimulationFlags ,
439+ /// Flags to affect simplification behavior
440+ pub simplification_flags : SimplificationFlags ,
454441}
455442
456443impl SimulationParams {
457444 /// Create a new instance
445+ /// [``SimulationParams::simplification_flags``]
446+ /// is initialized to empty.
458447 pub fn new (
459448 simplification_interval : Option < Time > ,
460449 seed : usize ,
@@ -466,6 +455,7 @@ impl SimulationParams {
466455 seed,
467456 nsteps,
468457 flags,
458+ simplification_flags : SimplificationFlags :: empty ( ) ,
469459 }
470460 }
471461}
@@ -561,6 +551,7 @@ pub fn neutral_wf(
561551 {
562552 simplify_and_remap_nodes (
563553 params. flags ,
554+ params. simplification_flags ,
564555 & mut samples,
565556 & mut state,
566557 & mut pop,
@@ -575,6 +566,7 @@ pub fn neutral_wf(
575566 if !simplified && actual_simplification_interval != -1 {
576567 simplify_and_remap_nodes (
577568 params. flags ,
569+ params. simplification_flags ,
578570 & mut samples,
579571 & mut state,
580572 & mut pop,
0 commit comments