Comments (8)
from bctpy.
it's probably not desirable for most users if bctpy behaves deterministically by default
Agreed. I was thinking something like
import numpy as np
def randmio_dir(adj, itr, seed=None):
rng = np.random if seed is None else np.random.RandomState(seed)
# the rest of the function, using rng
The path of least resistance may be to use the patch
strategy above in a decorator:
from unittest import mock
from functools import wraps
def seedable(fn):
@wraps(fn)
def wrapped(*args, seed=None, **kwargs):
if seed is None:
return fn(*args, **kwargs)
else:
with mock.patch('numpy.random', np.random.RandomState(seed)):
return fn(*args, **kwargs)
@seedable
def randmio_dir(adj, itr):
"""decorated version now has a ``seed`` kwarg"""
# the rest of the function with no changes
It's worth noting that (annoyingly) RandomState
doesn't have exactly the same functions available as np.random
- it's notably missing the random
/ranf
/sample
aliases for random_sample
.
from bctpy.
from bctpy.
Not a problem! Just wanted to make sure it fit with your design goals before starting on it myself. For my own documentation, another approach to the decorator would be:
from functools import wraps
def seedable(fn):
@wraps(fn)
def wrapped(*args, seed=None, **kwargs):
if seed is None:
return fn(*args, **kwargs)
else:
state = np.random.get_state()
np.random.seed()
fn(*args, **kwargs)
np.random.set_state(state)
Feels less hacky because we're not patching over stuff, but would probably break in threaded contexts. Then again, so might the patch.
from bctpy.
Confirmed, the patch
approach also breaks threaded usage. Looks like the decorator is a no-go. Probably better for readability anyway.
from bctpy.
I think I've caught all of the cases where one randomising bct function calls another randomising bct function, and pass a deterministic seed through, but if any of them are calling out to other functions which use np.random under the hood I'm unlikely to have found them.
from bctpy.
Fixed in #70
from bctpy.
Thanks!
Since this was initially raised, numpy updates have deprecated this RandomState API in favour of the Generator API. Fortunately the design (i.e. the get_rng
function) should make it easy to drop in the new RNG in without much disruption. I'll raise another issue for that though.
from bctpy.
Related Issues (20)
- NBS incorrectly(?) lumps positive and negative effects together
- B symmetrization inside if statement in community_louvain
- IndexError: index 2278 is out of bounds for axis 0 with size 2278 HOT 3
- bug: findwalks's for loop index is wrong at it's onset HOT 1
- Wrong description in `kcoreness_centrality_bu` HOT 1
- Update `get_rng` to return Generator instances
- Different implementations to compute global efficiency using bct.charpath and bct.efficiency_wei unclear HOT 1
- Does bct.efficiency_wei also work for directed networks? HOT 1
- Improve generalizability of partition_distance()
- No fucntion get_components.py inside module .algorithms? HOT 1
- Autofix(): Indexing error
- Issue with weighted transitivity and clustering coefficient? HOT 1
- Problem to run bct.modularity_dir with latest numpy HOT 1
- bct.charpath does not exclude 'Infs' in the distance matrix as mentioned in the documentation HOT 1
- Permutation max = 0 at stringent t-thresholds
- Official `bctpy` on `conda-forge` HOT 7
- local_assortativity_wu_sign not separating signs properly
- NBS covariates
- NBS parallel
- Release 0.6.1 missing tar.gz on Pipy HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bctpy.