Skip to content

Commit 4156f0a

Browse files
committed
feat: making full use of NumPy's RNG
1 parent cdf9209 commit 4156f0a

File tree

1 file changed

+22
-1
lines changed
  • src/igraph_ctypes/_internal

1 file changed

+22
-1
lines changed

src/igraph_ctypes/_internal/rng.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@ def __init__(self, generator: Generator):
4040
get_int=igraph_rng_type_t.TYPES["get_int"](self._rng_get_int),
4141
get_real=igraph_rng_type_t.TYPES["get_real"](self._rng_get_real),
4242
get_norm=igraph_rng_type_t.TYPES["get_norm"](self._rng_get_norm),
43-
# TODO(ntamas): get_geom, get_binom, get_exp, get_gamma, get_pois
43+
get_geom=igraph_rng_type_t.TYPES["get_geom"](self._rng_get_geom),
44+
get_binom=igraph_rng_type_t.TYPES["get_binom"](self._rng_get_binom),
45+
get_exp=igraph_rng_type_t.TYPES["get_exp"](self._rng_get_exp),
46+
get_gamma=igraph_rng_type_t.TYPES["get_gamma"](self._rng_get_gamma),
47+
get_pois=igraph_rng_type_t.TYPES["get_pois"](self._rng_get_pois),
4448
)
4549
self._rng = _RNG.create(pointer(self._rng_type))
4650
self._rng.unwrap().is_seeded = True
@@ -77,6 +81,23 @@ def _rng_get_real(self, _state):
7781
def _rng_get_norm(self, _state):
7882
return self._generator.normal()
7983

84+
def _rng_get_geom(self, _state, p):
85+
# NumPy uses 1-based return values, igraph assumes 0-based
86+
return self._generator.geometric(p) - 1
87+
88+
def _rng_get_binom(self, _state, n, p):
89+
return self._generator.binomial(n, p)
90+
91+
def _rng_get_exp(self, _state, rate):
92+
# NumPy uses the scale parameter, igraph supplies the rate parameter
93+
return self._generator.exponential(1 / rate)
94+
95+
def _rng_get_gamma(self, _state, shape, scale):
96+
return self._generator.gamma(shape, scale)
97+
98+
def _rng_get_pois(self, _state, rate):
99+
return self._generator.poisson(rate)
100+
80101
def attach(self) -> Callable[[], None]:
81102
"""Attaches this RNG instance as igraph's default RNG.
82103

0 commit comments

Comments
 (0)