From e01596fab40a7cf73d5c0eca662ce6348b50e4dc Mon Sep 17 00:00:00 2001
From: "a.stevan" <antoine.stevan@isae-supaero.fr>
Date: Thu, 30 May 2024 13:13:46 +0200
Subject: [PATCH 1/2] clone the RNG inside `measure_inbreeding`

---
 bins/inbreeding/src/main.rs | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/bins/inbreeding/src/main.rs b/bins/inbreeding/src/main.rs
index 47ace20f..e6d48d68 100644
--- a/bins/inbreeding/src/main.rs
+++ b/bins/inbreeding/src/main.rs
@@ -38,15 +38,20 @@ fn measure_inbreeding<F: PrimeField>(
     nb_measurements: usize,
     mp: &MultiProgress,
     sty: &ProgressStyle,
-    rng: &mut impl RngCore,
+    rng: &(impl RngCore + 'static),
 ) -> f64 {
+    let mut rng: StdRng = (rng as &dyn std::any::Any)
+        .downcast_ref::<StdRng>()
+        .unwrap()
+        .clone();
+
     let mut count = 0;
 
     let pb = mp.add(ProgressBar::new(nb_measurements as u64));
     pb.set_style(sty.clone());
     pb.set_message("measure");
     for _ in 0..nb_measurements {
-        if fec::decode(draw_unique_elements(shards, k, rng)).is_ok() {
+        if fec::decode(draw_unique_elements(shards, k, &mut rng)).is_ok() {
             count += 1;
         }
         pb.inc(1);
@@ -62,7 +67,7 @@ fn end_to_end<F, Fun>(
     max_t: usize,
     nb_measurements: usize,
     measurement_schedule: Fun,
-    rng: &mut impl RngCore,
+    rng: &mut (impl RngCore + 'static),
 ) -> Result<(), KomodoError>
 where
     F: PrimeField,
@@ -109,7 +114,7 @@ fn recoding<F, Fun>(
     env: Environment,
     nb_measurements: usize,
     measurement_schedule: Fun,
-    rng: &mut impl RngCore,
+    rng: &mut (impl RngCore + 'static),
 ) -> Result<(), KomodoError>
 where
     F: PrimeField,
-- 
GitLab


From 73c1e5956f402d0f83a29f3b86b152daa2db2301 Mon Sep 17 00:00:00 2001
From: "a.stevan" <antoine.stevan@isae-supaero.fr>
Date: Fri, 31 May 2024 09:19:31 +0200
Subject: [PATCH 2/2] add Clone to `rng`

---
 bins/inbreeding/src/main.rs | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/bins/inbreeding/src/main.rs b/bins/inbreeding/src/main.rs
index 7ffc4265..e9f02c32 100644
--- a/bins/inbreeding/src/main.rs
+++ b/bins/inbreeding/src/main.rs
@@ -38,12 +38,9 @@ fn measure_inbreeding<F: PrimeField>(
     nb_measurements: usize,
     mp: &MultiProgress,
     sty: &ProgressStyle,
-    rng: &(impl RngCore + 'static),
+    rng: &(impl RngCore + Clone),
 ) -> f64 {
-    let mut rng: StdRng = (rng as &dyn std::any::Any)
-        .downcast_ref::<StdRng>()
-        .unwrap()
-        .clone();
+    let mut rng = rng.clone();
 
     let mut count = 0;
 
@@ -67,7 +64,7 @@ fn end_to_end<F, Fun>(
     max_t: usize,
     nb_measurements: usize,
     measurement_schedule: Fun,
-    rng: &mut (impl RngCore + 'static),
+    rng: &mut (impl RngCore + Clone),
 ) -> Result<(), KomodoError>
 where
     F: PrimeField,
@@ -114,7 +111,7 @@ fn recoding<F, Fun>(
     env: Environment,
     nb_measurements: usize,
     measurement_schedule: Fun,
-    rng: &mut (impl RngCore + 'static),
+    rng: &mut (impl RngCore + Clone),
 ) -> Result<(), KomodoError>
 where
     F: PrimeField,
-- 
GitLab