Skip to content

Commit 5a0f6b7

Browse files
authored
Update rand crate to 0.9 and bump related dependencies (#1445)
* Update rand crates in rustworkx-core * Update rand crates in rustworkx for Python * Incorporate PR feedback
1 parent 50682ba commit 5a0f6b7

File tree

8 files changed

+96
-41
lines changed

8 files changed

+96
-41
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ num-traits = "0.2"
3333
petgraph = "0.8"
3434
hashbrown = { version = ">=0.13, <0.16", features = ["rayon"] }
3535
numpy = "0.24"
36-
rand = "0.8"
37-
rand_pcg = "0.3"
36+
rand = "0.9"
37+
rand_distr = "0.5"
38+
rand_pcg = "0.9"
3839
rayon = "1.10"
3940

4041
[lib]
@@ -55,6 +56,7 @@ numpy.workspace = true
5556
petgraph.workspace = true
5657
quick-xml = "0.37"
5758
rand.workspace = true
59+
rand_distr.workspace = true
5860
rand_pcg.workspace = true
5961
rayon.workspace = true
6062
serde = { version = "1.0", features = ["derive"] }

rustworkx-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ num-traits.workspace = true
2121
petgraph.workspace = true
2222
priority-queue = "2.1"
2323
rand.workspace = true
24+
rand_distr.workspace = true
2425
rand_pcg.workspace = true
2526
rayon.workspace = true
2627
rayon-cond = "0.4"

rustworkx-core/src/generators/random_graph.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ use petgraph::visit::{
2525
use petgraph::{Incoming, Outgoing};
2626

2727
use hashbrown::HashSet;
28-
use rand::distributions::{Distribution, Uniform};
2928
use rand::prelude::*;
29+
use rand_distr::{Distribution, Uniform};
3030
use rand_pcg::Pcg64;
3131

3232
use super::star_graph;
@@ -97,7 +97,7 @@ where
9797
}
9898
let mut rng: Pcg64 = match seed {
9999
Some(seed) => Pcg64::seed_from_u64(seed),
100-
None => Pcg64::from_entropy(),
100+
None => Pcg64::from_os_rng(),
101101
};
102102

103103
if (num_nodes * degree) % 2 != 0 {
@@ -262,7 +262,7 @@ where
262262
}
263263
let mut rng: Pcg64 = match seed {
264264
Some(seed) => Pcg64::seed_from_u64(seed),
265-
None => Pcg64::from_entropy(),
265+
None => Pcg64::from_os_rng(),
266266
};
267267
let mut graph = G::with_capacity(num_nodes, num_nodes);
268268
let directed = graph.is_directed();
@@ -293,7 +293,7 @@ where
293293
Err(_) => return Err(InvalidInputError {}),
294294
};
295295
let lp: f64 = (1.0 - probability).ln();
296-
let between = Uniform::new(0.0, 1.0);
296+
let between = Uniform::new(0.0, 1.0).unwrap();
297297

298298
// For directed, create inward edges to a v
299299
if directed {
@@ -432,7 +432,7 @@ where
432432

433433
let mut rng: Pcg64 = match seed {
434434
Some(seed) => Pcg64::seed_from_u64(seed),
435-
None => Pcg64::from_entropy(),
435+
None => Pcg64::from_os_rng(),
436436
};
437437
let mut graph = G::with_capacity(num_nodes, num_edges);
438438
let directed = graph.is_directed();
@@ -457,7 +457,7 @@ where
457457
}
458458
} else {
459459
let mut created_edges: usize = 0;
460-
let between = Uniform::new(0, num_nodes);
460+
let between = Uniform::new(0, num_nodes).unwrap();
461461
while created_edges < num_edges {
462462
let u = between.sample(&mut rng);
463463
let v = between.sample(&mut rng);
@@ -549,7 +549,7 @@ where
549549
}
550550
let mut rng: Pcg64 = match seed {
551551
Some(seed) => Pcg64::seed_from_u64(seed),
552-
None => Pcg64::from_entropy(),
552+
None => Pcg64::from_os_rng(),
553553
};
554554
let mut blocks = Vec::new();
555555
{
@@ -565,7 +565,7 @@ where
565565
}
566566
}
567567

568-
let between = Uniform::new(0.0, 1.0);
568+
let between = Uniform::new(0.0, 1.0).unwrap();
569569
for v in 0..(if directed || loops {
570570
num_nodes
571571
} else {
@@ -681,12 +681,12 @@ where
681681
}
682682
let mut rng: Pcg64 = match seed {
683683
Some(seed) => Pcg64::seed_from_u64(seed),
684-
None => Pcg64::from_entropy(),
684+
None => Pcg64::from_os_rng(),
685685
};
686686
let mut graph = G::with_capacity(num_nodes, num_nodes);
687687

688688
let radius_p = pnorm(radius, p);
689-
let dist = Uniform::new(0.0, 1.0);
689+
let dist = Uniform::new(0.0, 1.0).unwrap();
690690
let pos = pos.unwrap_or_else(|| {
691691
(0..num_nodes)
692692
.map(|_| (0..dim).map(|_| dist.sample(&mut rng)).collect())
@@ -784,7 +784,7 @@ where
784784
}
785785
let mut rng: Pcg64 = match seed {
786786
Some(seed) => Pcg64::seed_from_u64(seed),
787-
None => Pcg64::from_entropy(),
787+
None => Pcg64::from_os_rng(),
788788
};
789789
let mut graph = match initial_graph {
790790
Some(initial_graph) => initial_graph,
@@ -888,15 +888,15 @@ where
888888

889889
let mut rng: Pcg64 = match seed {
890890
Some(seed) => Pcg64::seed_from_u64(seed),
891-
None => Pcg64::from_entropy(),
891+
None => Pcg64::from_os_rng(),
892892
};
893893
let mut graph = G::with_capacity(num_l_nodes + num_r_nodes, num_l_nodes + num_r_nodes);
894894

895895
for _ in 0..num_l_nodes + num_r_nodes {
896896
graph.add_node(default_node_weight());
897897
}
898898

899-
let between = Uniform::new(0.0, 1.0);
899+
let between = Uniform::new(0.0, 1.0).unwrap();
900900
for v in 0..num_l_nodes {
901901
for w in 0..num_r_nodes {
902902
let random: f64 = between.sample(&mut rng);
@@ -990,7 +990,7 @@ where
990990

991991
let mut rng: Pcg64 = match seed {
992992
Some(seed) => Pcg64::seed_from_u64(seed),
993-
None => Pcg64::from_entropy(),
993+
None => Pcg64::from_os_rng(),
994994
};
995995
let mut graph = G::with_capacity(num_nodes, num_nodes);
996996
if graph.is_directed() {
@@ -1001,7 +1001,7 @@ where
10011001
graph.add_node(default_node_weight());
10021002
}
10031003

1004-
let between = Uniform::new(0.0, 1.0);
1004+
let between = Uniform::new(0.0, 1.0).unwrap();
10051005
for (v, p1) in pos.iter().enumerate().take(num_nodes - 1) {
10061006
for (w, p2) in pos.iter().enumerate().skip(v + 1) {
10071007
let dist = hyperbolic_distance(p1, p2);

rustworkx-core/src/token_swapper.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
// License for the specific language governing permissions and limitations
1111
// under the License.
1212

13-
use rand::distributions::{Standard, Uniform};
1413
use rand::prelude::*;
14+
use rand_distr::{StandardUniform, Uniform};
1515
use rand_pcg::Pcg64;
1616
use std::error::Error;
1717
use std::fmt;
@@ -161,10 +161,12 @@ where
161161
// into a Vec based on the given seed
162162
let outer_rng: Pcg64 = match self.seed {
163163
Some(rng_seed) => Pcg64::seed_from_u64(rng_seed),
164-
None => Pcg64::from_entropy(),
164+
None => Pcg64::from_os_rng(),
165165
};
166-
let trial_seeds_vec: Vec<u64> =
167-
outer_rng.sample_iter(&Standard).take(self.trials).collect();
166+
let trial_seeds_vec: Vec<u64> = outer_rng
167+
.sample_iter(&StandardUniform)
168+
.take(self.trials)
169+
.collect();
168170

169171
CondIterator::new(
170172
trial_seeds_vec,
@@ -260,7 +262,7 @@ where
260262
let mut rng_seed: Pcg64 = Pcg64::seed_from_u64(trial_seed);
261263
while !todo_nodes.is_empty() && steps <= 4 * digraph.node_count().pow(2) {
262264
// Choose a random todo_node
263-
let between = Uniform::new(0, todo_nodes.len());
265+
let between = Uniform::new(0, todo_nodes.len()).map_err(|_| MapNotPossible {})?;
264266
let random: usize = between.sample(&mut rng_seed);
265267
let todo_node = todo_nodes[random];
266268

src/layout/random.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ pub fn random_layout<Ty: EdgeType>(
2525
) -> Pos2DMapping {
2626
let mut rng: Pcg64 = match seed {
2727
Some(seed) => Pcg64::seed_from_u64(seed),
28-
None => Pcg64::from_entropy(),
28+
None => Pcg64::from_os_rng(),
2929
};
3030

3131
Pos2DMapping {
3232
pos_map: graph
3333
.node_indices()
3434
.map(|n| {
35-
let random_tuple: [f64; 2] = rng.gen();
35+
let random_tuple: [f64; 2] = rng.random();
3636
match center {
3737
Some(center) => (
3838
n.index(),

src/layout/spring.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ use std::iter::Iterator;
1717

1818
use hashbrown::{HashMap, HashSet};
1919

20-
use pyo3::exceptions::PyValueError;
20+
use pyo3::exceptions::{PyRuntimeError, PyValueError};
2121
use pyo3::prelude::*;
2222

2323
use petgraph::graph::NodeIndex;
2424
use petgraph::prelude::*;
2525
use petgraph::visit::{IntoEdgeReferences, NodeIndexable};
2626
use petgraph::EdgeType;
2727

28-
use rand::distributions::{Distribution, Uniform};
2928
use rand::prelude::*;
29+
use rand_distr::{Distribution, Uniform};
3030
use rand_pcg::Pcg64;
3131

3232
use crate::StablePyGraph;
@@ -322,10 +322,11 @@ where
322322

323323
let mut rng: Pcg64 = match seed {
324324
Some(seed) => Pcg64::seed_from_u64(seed),
325-
None => Pcg64::from_entropy(),
325+
None => Pcg64::from_os_rng(),
326326
};
327327

328-
let dist = Uniform::new(0.0, 1.0);
328+
let dist = Uniform::new(0.0, 1.0)
329+
.map_err(|_| PyRuntimeError::new_err("Error creating uniform distribution"))?;
329330

330331
let pos = pos.unwrap_or_default();
331332
let mut vpos: Vec<Point> = (0..graph.node_bound())

0 commit comments

Comments
 (0)