Skip to content

Commit cd99522

Browse files
authored
Bump rand crates to 0.10.x releases (#16051)
* Bump rand crates to 0.10.x releases This commit bumps the rand crates used in Qiskit to the current latest releases. There is constellation of crates for rand, including the core library, specific generators, and distributions. These all have to be upgraded in lockstep for compatibility. We had put off doing this likely because dependabot isn't able to reason about this and these upgrades often have breaking api changes. This release is no different as the way to instantiate a random number generator from system entropy has change yet again (this is the second or third such change I can remember). This updates all the usage of rand crates in qiskit to be compatible with the new releases. Closes #16009 * Use prelude instead of explicit traits * Run cargo fmt
1 parent 16c8088 commit cd99522

12 files changed

Lines changed: 65 additions & 36 deletions

File tree

Cargo.lock

Lines changed: 38 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ rayon = "1.12"
3535
nom = "8.0"
3636
nom-unicode = "0.4"
3737
nom-language = "0.1"
38-
rand = "0.9"
39-
rand_pcg = "0.9"
40-
rand_distr = "0.5"
38+
rand = "0.10"
39+
rand_pcg = "0.10"
40+
rand_distr = "0.6"
4141
num-traits = "0.2"
4242
uuid = { version = "1.23", features = ["v4", "fast-rng"], default-features = false }
4343
anyhow = "1.0"

crates/accelerate/src/twirling.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ use qiskit_circuit::{BlocksMode, NoBlocks, VarsMode};
3434
use qiskit_transpiler::passes::run_optimize_1q_gates_decomposition;
3535
use qiskit_transpiler::target::Target;
3636
use rand::prelude::*;
37+
use rand::rngs::SysRng;
3738
use rand_pcg::Pcg64Mcg;
3839

3940
static ECR_TWIRL_SET: [([StandardGate; 4], f64); 16] = [
@@ -316,7 +317,7 @@ pub(crate) fn twirl_circuit(
316317
) -> PyResult<Vec<PyCircuitData>> {
317318
let mut rng = match seed {
318319
Some(seed) => Pcg64Mcg::seed_from_u64(seed),
319-
None => Pcg64Mcg::from_os_rng(),
320+
None => Pcg64Mcg::try_from_rng(&mut SysRng).unwrap(),
320321
};
321322
let twirling_mask: u8 = match twirled_gate {
322323
Some(gates) => {

crates/cext/src/transpiler/passes/sabre_layout.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
// that they have been altered from the originals.
1212

1313
use crate::pointers::{const_ptr_as_ref, mut_ptr_as_ref};
14-
use rand::{Rng, SeedableRng};
14+
use rand::prelude::*;
15+
use rand::rngs::SysRng;
1516
use rand_pcg::Pcg64Mcg;
1617

1718
use qiskit_circuit::circuit_data::CircuitData;
@@ -52,7 +53,7 @@ pub extern "C" fn qk_sabre_layout_options_default() -> SabreLayoutOptions {
5253
max_iterations: 4,
5354
num_swap_trials: 20,
5455
num_random_trials: 20,
55-
seed: Pcg64Mcg::from_os_rng().random(),
56+
seed: Pcg64Mcg::try_from_rng(&mut SysRng).unwrap().random(),
5657
}
5758
}
5859

crates/circuit_library/src/iqp.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ use qiskit_circuit::{
2020
circuit_data::{CircuitData, PyCircuitData},
2121
operations::{Param, StandardGate},
2222
};
23-
use rand::{Rng, SeedableRng};
23+
use rand::prelude::*;
24+
use rand::rngs::SysRng;
2425
use rand_pcg::Pcg64Mcg;
2526
use smallvec::{SmallVec, smallvec};
2627

@@ -80,7 +81,7 @@ fn generate_random_interactions(num_qubits: u32, seed: Option<u64>) -> Array2<i6
8081
let num_qubits = num_qubits as usize;
8182
let mut rng = match seed {
8283
Some(seed) => Pcg64Mcg::seed_from_u64(seed),
83-
None => Pcg64Mcg::from_os_rng(),
84+
None => Pcg64Mcg::try_from_rng(&mut SysRng).unwrap(),
8485
};
8586

8687
let mut mat = Array2::zeros((num_qubits, num_qubits));

crates/circuit_library/src/quantum_volume.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use pyo3::prelude::*;
1515
use nalgebra::Matrix4;
1616
use num_complex::{Complex64, ComplexFloat};
1717
use rand::prelude::*;
18+
use rand::rngs::SysRng;
1819
use rand_distr::StandardNormal;
1920
use rand_pcg::Pcg64Mcg;
2021
use rayon::prelude::*;
@@ -116,7 +117,7 @@ pub fn quantum_volume(num_qubits: u32, depth: usize, seed: Option<u64>) -> PyRes
116117
}
117118
let mut outer_rng = match seed {
118119
Some(seed) => Pcg64Mcg::seed_from_u64(seed),
119-
None => Pcg64Mcg::from_os_rng(),
120+
None => Pcg64Mcg::try_from_rng(&mut SysRng).unwrap(),
120121
};
121122
let seed_vec: Vec<u64> = rand::distr::StandardUniform
122123
.sample_iter(&mut outer_rng)

crates/quantum_info/src/pauli_lindblad_map/pauli_lindblad_map_class.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use std::{
2525
};
2626

2727
use rand::prelude::*;
28+
use rand::rngs::SysRng;
2829
use rand_distr::Bernoulli;
2930
use rand_pcg::Pcg64Mcg;
3031

@@ -394,7 +395,7 @@ impl PauliLindbladMap {
394395
) -> (Vec<bool>, QubitSparsePauliList) {
395396
let mut rng = match seed {
396397
Some(seed) => Pcg64Mcg::seed_from_u64(seed),
397-
None => Pcg64Mcg::from_os_rng(),
398+
None => Pcg64Mcg::try_from_rng(&mut SysRng).unwrap(),
398399
};
399400
let modified_probabilities;
400401
let modified_non_negative_rates;

crates/synthesis/src/clifford/random_clifford.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ use crate::linear::utils::{
1414
binary_matmul_inner, calc_inverse_matrix_inner, replace_row_inner, swap_rows_inner,
1515
};
1616
use ndarray::{Array1, Array2, ArrayView2, ArrayViewMut2, Axis, concatenate, s};
17-
use rand::{Rng, SeedableRng};
17+
use rand::prelude::*;
18+
use rand::rngs::SysRng;
1819
use rand_pcg::Pcg64Mcg;
1920

2021
/// Sample from the quantum Mallows distribution.
@@ -67,7 +68,7 @@ fn inverse_tril(mat: ArrayView2<bool>) -> Array2<bool> {
6768
pub fn random_clifford_tableau_inner(num_qubits: usize, seed: Option<u64>) -> Array2<bool> {
6869
let mut rng = match seed {
6970
Some(seed) => Pcg64Mcg::seed_from_u64(seed),
70-
None => Pcg64Mcg::from_os_rng(),
71+
None => Pcg64Mcg::try_from_rng(&mut SysRng).unwrap(),
7172
};
7273

7374
let (had, perm) = sample_qmallows(num_qubits, &mut rng);

crates/synthesis/src/linear/utils.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
use ndarray::{
1414
Array1, Array2, ArrayView1, ArrayView2, ArrayViewMut2, Axis, Zip, azip, concatenate, s,
1515
};
16-
use rand::{Rng, SeedableRng};
16+
use rand::prelude::*;
17+
use rand::rngs::SysRng;
1718
use rand_pcg::Pcg64Mcg;
1819
use rayon::iter::{IndexedParallelIterator, ParallelIterator};
1920
use rayon::prelude::IntoParallelIterator;
@@ -221,7 +222,7 @@ pub fn _row_sum(row_1: ArrayView1<bool>, row_2: ArrayView1<bool>) -> Result<Arra
221222
pub fn random_invertible_binary_matrix_inner(num_qubits: usize, seed: Option<u64>) -> Array2<bool> {
222223
let mut rng = match seed {
223224
Some(seed) => Pcg64Mcg::seed_from_u64(seed),
224-
None => Pcg64Mcg::from_os_rng(),
225+
None => Pcg64Mcg::try_from_rng(&mut SysRng).unwrap(),
225226
};
226227

227228
let mut matrix = Array2::from_elem((num_qubits, num_qubits), false);

crates/transpiler/src/passes/sabre/layout.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use pyo3::prelude::*;
1616
use hashbrown::HashSet;
1717
use ndarray::aview2;
1818
use rand::prelude::*;
19+
use rand::rngs::SysRng;
1920
use rand_pcg::Pcg64Mcg;
2021
use rayon_cond::CondIterator;
2122
use rustworkx_core::petgraph::graph::NodeIndex;
@@ -85,7 +86,7 @@ pub fn sabre_layout_and_routing(
8586
let seeds = |count| {
8687
match seed {
8788
Some(seed) => Pcg64Mcg::seed_from_u64(seed),
88-
None => Pcg64Mcg::from_os_rng(),
89+
None => Pcg64Mcg::try_from_rng(&mut SysRng).unwrap(),
8990
}
9091
.sample_iter(&rand::distr::StandardUniform)
9192
.take(count)

0 commit comments

Comments
 (0)