File tree 2 files changed +43
-0
lines changed
2 files changed +43
-0
lines changed Original file line number Diff line number Diff line change 12
12
import nengo_gui
13
13
import nengo_gui .user_action
14
14
import nengo_gui .config
15
+ import nengo_gui .seed_generation
15
16
16
17
17
18
class PageSettings (object ):
@@ -434,6 +435,12 @@ def build(self):
434
435
with self .lock :
435
436
self .building = True
436
437
438
+ # set all the seeds so that creating components doesn't affect
439
+ # the neural model itself
440
+ seeds = nengo_gui .seed_generation .define_all_seeds (self .model )
441
+ for obj , s in seeds .items ():
442
+ obj .seed = s
443
+
437
444
# modify the model for the various Components
438
445
for c in self .components :
439
446
c .add_nengo_objects (self )
@@ -456,6 +463,10 @@ def build(self):
456
463
line = nengo_gui .exec_env .determine_line_number ()
457
464
self .error = dict (trace = traceback .format_exc (), line = line )
458
465
466
+ # set the defined seeds back to None
467
+ for obj in seeds :
468
+ obj .seed = None
469
+
459
470
self .stdout += exec_env .stdout .getvalue ()
460
471
461
472
if self .sim is not None :
Original file line number Diff line number Diff line change
1
+ import nengo
2
+ import nengo .utils .numpy as npext
3
+ import numpy as np
4
+
5
+
6
+ def define_all_seeds (net , seeds = None ):
7
+ if seeds is None :
8
+ seeds = {}
9
+
10
+ if net .seed is None :
11
+ if net not in seeds :
12
+ # this only happens at the very top level
13
+ seeds [net ] = np .random .randint (npext .maxint )
14
+ rng = np .random .RandomState (seed = seeds [net ])
15
+ else :
16
+ rng = np .random .RandomState (seed = net .seed )
17
+
18
+ # let's use the same algorithm as the builder, just to be consistent
19
+ sorted_types = sorted (net .objects , key = lambda t : t .__name__ )
20
+ for obj_type in sorted_types :
21
+ for obj in net .objects [obj_type ]:
22
+ # generate a seed for each item, so that manually setting a seed
23
+ # for a particular item doesn't change the generated seed for
24
+ # other items
25
+ generated_seed = rng .randint (npext .maxint )
26
+ if obj .seed is None :
27
+ seeds [obj ] = generated_seed
28
+
29
+ for subnet in net .networks :
30
+ define_all_seeds (subnet , seeds )
31
+
32
+ return seeds
You can’t perform that action at this time.
0 commit comments