Exemple #1
0
 def testRSetNative2(self):
     """Population.rset(): with native rng."""
     rd1 = random.RandomDistribution(rng=random.NativeRNG(seed=98765),
                                     distribution='uniform',
                                     parameters=[0.9, 1.1])
     rd2 = random.RandomDistribution(rng=random.NativeRNG(seed=98765),
                                     distribution='uniform',
                                     parameters=[0.9, 1.1])
     self.net.rset('cm', rd1)
     output_values_1 = numpy.zeros((3, 3), numpy.float)
     output_values_2 = numpy.zeros((3, 3), numpy.float)
     hoc_net = getattr(h, self.net.label)
     print hoc_net.count()
     for i in 0, 1, 2:
         for j in 0, 1, 2:
             id = 3 * i + j
             if id in self.net.gidlist:
                 list_index = self.net.gidlist.index(id)
                 output_values_1[i, j] = hoc_net.object(list_index).cell(
                     0.5).cm
     self.net.rset('cm', rd2)
     for i in 0, 1, 2:
         for j in 0, 1, 2:
             id = 3 * i + j
             if id in self.net.gidlist:
                 list_index = self.net.gidlist.index(id)
                 output_values_2[i, j] = hoc_net.object(list_index).cell(
                     0.5).cm
     output_values_1 = output_values_1.reshape((9, ))
     output_values_2 = output_values_2.reshape((9, ))
     for i in range(9):
         self.assertAlmostEqual(output_values_1[i],
                                output_values_2[i],
                                places=5)
Exemple #2
0
 def setUp(self):
     setup()
     self.target   = Population((3,3),IF_curr_alpha)
     self.target   = Population((3,3),IF_curr_alpha)
     self.source   = Population((3,3),SpikeSourcePoisson,{'rate': 100})
     self.distrib_Numpy = random.RandomDistribution('uniform',(0,1),random.NumpyRNG(12345)) 
     self.distrib_Native= random.RandomDistribution('Uniform',(0,1),NativeRNG(12345)) 
Exemple #3
0
 def test_boundaries(self):
     rd = random.RandomDistribution(distribution='uniform',
                                    parameters=[-1.0, 1.0],
                                    rng=self.rnglist[0],
                                    boundaries=[0.0, 1.0],
                                    constrain="clip")
     vals = rd.next(1000)
     assert vals.min() == 0
     assert vals.max() < 1.0
     assert abs(vals.mean() - 0.25) < 0.05
     rd = random.RandomDistribution(distribution='uniform',
                                    parameters=[-1.0, 1.0],
                                    rng=self.rnglist[0],
                                    boundaries=[0.0, 1.0],
                                    constrain="redraw")
     vals = rd.next(1000)
     assert vals.min() >= 0
     assert vals.max() < 1.0
     assert abs(vals.mean() - 0.5) < 0.05, vals.mean()
     val = rd.next(1)
     rd = random.RandomDistribution(distribution='uniform',
                                    parameters=[-1.0, 1.0],
                                    rng=self.rnglist[0],
                                    boundaries=[0.0, 1.0],
                                    constrain=None)
     self.assertRaises(Exception, rd.next)
Exemple #4
0
def test_columnwise_iteration_with_random_array_parallel_safe_with_mask():
    orig_get_mpi_config = random.get_mpi_config

    mask = np.array([False, False, True])

    # first, with a single MPI node
    random.get_mpi_config = lambda: (0, 2)
    input = random.RandomDistribution('uniform', (0, 1),
                                      rng=MockRNG(parallel_safe=True))
    m = LazyArray(input, shape=(4, 3))
    cols_np1 = [col for col in m.by_column(mask=mask)]

    # now, on one node of two
    random.get_mpi_config = lambda: (0, 2)
    input = random.RandomDistribution('uniform', (0, 1),
                                      rng=MockRNG(parallel_safe=True))
    m = LazyArray(input, shape=(4, 3))
    cols_np2_0 = [col for col in m.by_column(mask=mask)]

    # now, on the other node of two
    random.get_mpi_config = lambda: (1, 2)
    input = random.RandomDistribution('uniform', (0, 1),
                                      rng=MockRNG(parallel_safe=True))
    m = LazyArray(input, shape=(4, 3))
    cols_np2_1 = [col for col in m.by_column(mask=mask)]

    assert_equal(len(cols_np1), 1)
    assert_equal(len(cols_np2_0), 1)
    assert_equal(len(cols_np2_1), 1)
    assert_array_equal(cols_np1[0], cols_np2_0[0])

    random.get_mpi_config = orig_get_mpi_config
Exemple #5
0
 def testRSetNumpy(self):
     """Population.rset(): with numpy rng."""
     rd1 = random.RandomDistribution(rng=random.NumpyRNG(seed=98765),
                                     distribution='uniform',
                                     parameters=[0.9, 1.1])
     rd2 = random.RandomDistribution(rng=random.NumpyRNG(seed=98765),
                                     distribution='uniform',
                                     parameters=[0.9, 1.1])
     self.net.rset('cm', rd1)
     output_values = numpy.zeros((3, 3), numpy.float)
     hoc_net = getattr(h, self.net.label)
     for i in 0, 1, 2:
         for j in 0, 1, 2:
             id = 3 * i + j
             if id in self.net.gidlist:
                 list_index = self.net.gidlist.index(id)
                 output_values[i,
                               j] = hoc_net.object(list_index).cell(0.5).cm
     input_values = rd2.next(9)
     output_values = output_values.reshape((9, ))
     for i in range(9):
         if i in self.net.gidlist:
             self.assertAlmostEqual(input_values[i],
                                    output_values[i],
                                    places=5)
Exemple #6
0
 def testDistantDependentProbability(self):
     """For all connections created with "distanceDependentProbability" ..."""
     # Test should be improved..."
     distrib_Numpy = random.RandomDistribution('uniform',(0,1),random.NumpyRNG(12345)) 
     distrib_Native= random.RandomDistribution('Uniform',(0,1),NativeRNG(12345)) 
     prj1 = Projection(self.source33, self.target33, DistanceDependentProbabilityConnector([ 0.1, 2]), distrib_Numpy)
     prj2 = Projection(self.source33, self.target33, DistanceDependentProbabilityConnector([ 0.1, 3]), distrib_Native)
     assert (0 < len(prj1) < len(self.source33)*len(self.target33)) and (0 < len(prj2) < len(self.source33)*len(self.target33))
Exemple #7
0
def test_columnwise_iteration_with_random_array_parallel_safe_no_mask():
    random.mpi_rank = 0
    random.num_processes = 2
    input = random.RandomDistribution(rng=MockRNG(parallel_safe=True))
    copy_input = random.RandomDistribution(rng=MockRNG(parallel_safe=True))
    m = LazyArray(input, shape=(4, 3))
    cols = [col for col in m.by_column()]
    assert_array_equal(cols[0], copy_input.next(4, mask_local=False))
    assert_array_equal(cols[1], copy_input.next(4, mask_local=False))
    assert_array_equal(cols[2], copy_input.next(4, mask_local=False))
Exemple #8
0
def test_columnwise_iteration_with_random_array_parallel_safe_with_mask():
    random.mpi_rank = 0
    random.num_processes = 2
    input = random.RandomDistribution(rng=MockRNG(parallel_safe=True))
    copy_input = random.RandomDistribution(rng=MockRNG(parallel_safe=True))
    m = LazyArray(input, shape=(4, 3))
    mask = np.array([False, False, True])
    cols = [col for col in m.by_column(mask=mask)]
    assert_equal(len(cols), 1)
    assert_array_almost_equal(cols[0],
                              copy_input.next(12, mask_local=False)[8:], 15)
Exemple #9
0
def test_columnwise_iteration_with_random_array_parallel_safe_no_mask():
    orig_get_mpi_config = random.get_mpi_config
    random.get_mpi_config = lambda: (0, 2)
    input = random.RandomDistribution(rng=MockRNG(parallel_safe=True))
    copy_input = random.RandomDistribution(rng=MockRNG(parallel_safe=True))
    m = LazyArray(input, shape=(4, 3))
    cols = [col for col in m.by_column()]
    assert_array_equal(cols[0], copy_input.next(4, mask_local=False))
    assert_array_equal(cols[1], copy_input.next(4, mask_local=False))
    assert_array_equal(cols[2], copy_input.next(4, mask_local=False))
    random.get_mpi_config = orig_get_mpi_config
def test_columnwise_iteration_with_random_array_parallel_safe_with_mask():
    orig_get_mpi_config = random.get_mpi_config
    random.get_mpi_config = lambda: (0, 2)
    input = random.RandomDistribution('uniform', (0, 1), rng=MockRNG(parallel_safe=True))
    copy_input = random.RandomDistribution('gamma', (2, 3), rng=MockRNG(parallel_safe=True))
    m = LazyArray(input, shape=(4, 3))
    mask = np.array([False, False, True])
    cols = [col for col in m.by_column(mask=mask)]
    assert_equal(len(cols), 1)
    assert_array_almost_equal(cols[0], copy_input.next(12, mask_local=False)[8:], 15)
    random.get_mpi_config = orig_get_mpi_config
Exemple #11
0
 def testRSetNumpy(self):
     """Population.rset(): with numpy rng."""
     rd1 = random.RandomDistribution(rng=random.NumpyRNG(seed=98765),
                                      distribution='uniform',
                                      parameters=[0.9,1.1])
     rd2 = random.RandomDistribution(rng=random.NumpyRNG(seed=98765),
                                      distribution='uniform',
                                      parameters=[0.9,1.1])
     self.net.rset('cm', rd1)
     output_values = self.net.get('cm', as_array=True)
     input_values = rd2.next(9).reshape(self.net.dim)
     assert numpy.equal(input_values, output_values).all()
Exemple #12
0
 def testRSetNumpy(self):
     """Population.rset(): with numpy rng."""
     rd1 = random.RandomDistribution(rng=random.NumpyRNG(seed=98765),
                                     distribution='uniform',
                                     parameters=[0.9, 1.1])
     rd2 = random.RandomDistribution(rng=random.NumpyRNG(seed=98765),
                                     distribution='uniform',
                                     parameters=[0.9, 1.1])
     self.net.rset('cm', rd1)
     output_values = self.net.get('cm', as_array=True)
     input_values = rd2.next(9)
     for i in range(9):
         self.assertAlmostEqual(input_values[i], output_values[i], places=5)
Exemple #13
0
 def test_uniform(self):
     rd = random.RandomDistribution(distribution='uniform', parameters=[-1.0, 3.0], rng=self.rnglist[0]) 
     vals = rd.next(100)
     assert vals.min() >= -1.0
     assert vals.max() < 3.0
     assert abs(vals.mean() - 1.0) < 0.2
     if random.have_gsl:
         # GSL uniform is always between 0 and 1
         rd = random.RandomDistribution(distribution='uniform', parameters=[], rng=self.rnglist[1])
         vals = rd.next(100)
         assert vals.min() >= 0.0
         assert vals.max() < 1.0
         assert abs(vals.mean() - 0.5) < 0.05
Exemple #14
0
 def test_gaussian(self):
     mean = 1.0
     std = 1.0
     rd1 = random.RandomDistribution(distribution='normal', parameters=[mean, std], rng=self.rnglist[0])
     vals_list = [rd1.next(100)]
     if random.have_gsl:
         # GSL gaussian is always centred on zero
         rd2 = random.RandomDistribution(distribution='gaussian', parameters=[std], rng=self.rnglist[1])
         vals_list.append(mean + rd2.next(100))
     for vals in vals_list:
         assert vals.min() > mean-4*std
         assert vals.min() < mean+4*std
         assert abs(vals.mean() - mean) < 0.2, abs(vals.mean() - mean)
Exemple #15
0
 def test_boundaries(self):
     rd = random.RandomDistribution('normal_clipped_to_boundary',
                                    mu=0, sigma=1, low=-0.5, high=0.5,
                                    rng=self.rnglist[0])
     vals = rd.next(1000)
     assert vals.min() == -0.5
     assert vals.max() == 0.5
     assert abs(vals.mean()) < 0.05, vals.mean()
     rd = random.RandomDistribution(distribution='normal_clipped',
                                    mu=0, sigma=1, low=0, high=1,
                                    rng=self.rnglist[0])
     vals = rd.next(1000)
     assert vals.min() >= 0
     assert vals.max() < 1.0
Exemple #16
0
 def test_connect_with_random_weights_parallel_safe(self):
     rd_w = random.RandomDistribution(rng=MockRNG(delta=1.0, parallel_safe=True))
     rd_d = random.RandomDistribution(rng=MockRNG(start=1.0, delta=0.1, parallel_safe=True))
     syn = sim.StaticSynapse(weight=rd_w, delay=rd_d)
     connections = numpy.array([
             [0, 1, 1, 0],
             [1, 1, 0, 1],
             [0, 0, 1, 0],
         ])
     C = connectors.ArrayConnector(connections, safe=False)
     prj = sim.Projection(self.p1, self.p2, C, syn)
     self.assertEqual(prj.get(["weight", "delay"], format='list', gather=False),  # use gather False because we are faking the MPI
                      [(1, 0, 0.0, 1.0),
                       (0, 2, 3.0, 1.3),
                       (2, 2, 4.0, 1.4000000000000001)])  # better to do an "almost-equal" check
 def test_connect_with_random_weights_parallel_safe(self, sim=sim):
     rd = random.RandomDistribution(
         'uniform', (0, 1), rng=MockRNG(delta=1.0, parallel_safe=True))
     syn = sim.StaticSynapse(weight=rd, delay=0.5)
     C = connectors.AllToAllConnector(safe=False)
     prj = sim.Projection(self.p1, self.p2, C, syn)
     # note that the outer loop is over the post-synaptic cells, the inner loop over the pre-synaptic
     self.assertEqual(prj.get(["weight", "delay"], format='list'),
                      [(0, 0, 0.0, 0.5),
                       (1, 0, 1.0, 0.5),
                       (2, 0, 2.0, 0.5),
                       (3, 0, 3.0, 0.5),
                       (0, 1, 4.0, 0.5),
                       (1, 1, 5.0, 0.5),
                       (2, 1, 6.0, 0.5),
                       (3, 1, 7.0, 0.5),
                       (0, 2, 8.0, 0.5),
                       (1, 2, 9.0, 0.5),
                       (2, 2, 10.0, 0.5),
                       (3, 2, 11.0, 0.5),
                       (0, 3, 12.0, 0.5),
                       (1, 3, 13.0, 0.5),
                       (2, 3, 14.0, 0.5),
                       (3, 3, 15.0, 0.5),
                       (0, 4, 16.0, 0.5),
                       (1, 4, 17.0, 0.5),
                       (2, 4, 18.0, 0.5),
                       (3, 4, 19.0, 0.5)])
     assert_array_almost_equal(prj.get('weight', format='array'),
                               np.array([[0., 4.,  8., 12., 16.],
                                            [1., 5.,  9., 13., 17.],
                                            [2., 6., 10., 14., 18.],
                                            [3., 7., 11., 15., 19.]]),
                               9)
Exemple #18
0
 def test_positional_args(self):
     for rng in self.rnglist:
         rd1 = random.RandomDistribution('normal', (0.5, 0.2), rng)
         self.assertEqual(rd1.parameters, {'mu': 0.5, 'sigma': 0.2})
         self.assertEqual(rd1.rng, rng)
     self.assertRaises(ValueError, random.RandomDistribution, 'normal', (0.5,))
     self.assertRaises(ValueError, random.RandomDistribution, 'normal', (0.5, 0.2), mu=0.5, sigma=0.2)
Exemple #19
0
 def testRSetNative(self):
     self.popul1.rset('tau_m',
                   random.RandomDistribution(rng=NativeRNG(),
                                             distribution='Uniform',
                                             parameters=[10.0, 30.0]))
     self.assertNotEqual(simulator.net.object(self.popul1.getObjectID(3)).taum,
                         simulator.net.object(self.popul1.getObjectID(6)).taum)
Exemple #20
0
    def __init__(self,
                 projection,
                 weights=0.0,
                 delays=None,
                 allow_self_connections=True,
                 space=Space(),
                 safe=True):

        Connector.__init__(self, weights, delays, space, safe)
        if isinstance(projection.rng, random.NativeRNG):
            raise Exception("Use of NativeRNG not implemented.")
        else:
            self.rng = projection.rng

        self.N = projection.pre.size
        idx = numpy.arange(self.N * rank(), self.N * (rank() + 1))
        self.M = num_processes() * self.N
        self.local = numpy.ones(self.N, bool)
        self.local_long = numpy.zeros(self.M, bool)
        self.local_long[idx] = True
        self.weights_generator = WeightGenerator(weights, self.local_long,
                                                 projection, safe)
        self.delays_generator = DelayGenerator(delays, self.local_long, safe)
        self.probas_generator = ProbaGenerator(
            random.RandomDistribution('uniform', (0, 1), rng=self.rng),
            self.local_long)
        self.distance_matrix = DistanceMatrix(projection.pre.positions,
                                              self.space, self.local)
        self.projection = projection
        self.candidates = projection.pre.all_cells
        self.allow_self_connections = allow_self_connections
 def test_rset(self):
     p = sim.Population(17, sim.EIF_cond_exp_isfa_ista())
     pv = p[::4]
     pv.set = Mock()
     v_rest = random.RandomDistribution('uniform', low=-70.0, high=-60.0)
     pv.rset("v_rest", v_rest)
     pv.set.assert_called_with(v_rest=v_rest)
Exemple #22
0
 def test_rset(self):
     p = sim.Population(17, sim.IF_cond_alpha())
     pv = p[::4]
     pv.set = Mock()
     v_rest = random.RandomDistribution('uniform', [-70.0, -60.0])
     pv.rset("v_rest", v_rest)
     pv.set.assert_called_with(v_rest=v_rest)
Exemple #23
0
 def test_get_plasticity_attribute_as_list(self, sim=sim):
     U_distr = random.RandomDistribution('uniform',
                                         low=0.4,
                                         high=0.6,
                                         rng=MockRNG(start=0.5,
                                                     delta=0.001))
     depressing = sim.TsodyksMarkramSynapse(U=U_distr,
                                            tau_rec=lambda d: 80.0 + d,
                                            tau_facil=0.0)
     prj = sim.Projection(self.p1,
                          self.p2,
                          connector=self.all2all,
                          synapse_type=depressing)
     U = prj.get("U", format="list")
     U = _sort_by_column(U, 1)[:5]
     U_target = numpy.array([
         (0, 0, 0.5),
         (1, 0, 0.501),
         (2, 0, 0.502),
         (3, 0, 0.503),
         (4, 0, 0.504),
     ])
     assert_array_equal(U, U_target)
     tau_rec = prj.get("tau_rec", format="list")
     tau_rec = _sort_by_column(tau_rec, 1)[:5]
     tau_rec_target = numpy.array([
         (0, 0, 80),
         (1, 0, 81),
         (2, 0, 82),
         (3, 0, 83),
         (4, 0, 84),
     ])
     assert_array_equal(tau_rec, tau_rec_target)
Exemple #24
0
 def testRSetNative2(self):
     """Population.rset(): with native rng."""
     rd1 = random.RandomDistribution(rng=random.NativeRNG(seed=98765),
                                      distribution='uniform',
                                      parameters=[0.9,1.1])
     rd2 = random.RandomDistribution(rng=random.NativeRNG(seed=98765),
                                      distribution='uniform',
                                      parameters=[0.9,1.1])
     self.net.rset('cm', rd1)
     output_values_1 = numpy.zeros((3,3), numpy.float)
     for i in 0,1,2:
         for j in 0,1,2:
             id = self.net[i,j]
             output_values_1[i, j] = id._cell(0.5).cm
     self.net.rset('cm', rd2)
     output_values_2 = self.net.get('cm', as_array=True)
     assert numpy.equal(output_values_1, output_values_2).all()
Exemple #25
0
 def test_connect_with_random_weights(self):
     rd = random.RandomDistribution(rng=MockRNG(delta=1.0))
     syn = sim.StaticSynapse(weight=rd, delay=0.5)
     C = connectors.OneToOneConnector(safe=False)
     prj = sim.Projection(self.p1, self.p2, C, syn)
     self.assertEqual(prj.get(["weight", "delay"], format='list', gather=False),  # use gather False because we are faking the MPI
                      [(1, 1, 1.0, 0.5),
                       (3, 3, 3.0, 0.5)])
Exemple #26
0
 def test_set(self):
     p = sim.Population(4, sim.IF_cond_exp, {'tau_m': 12.3, 'cm': 0.987, 'i_offset': -0.21})
     rng = MockRNG(start=1.21, delta=0.01, parallel_safe=True)
     p.set(cm=random.RandomDistribution('uniform', rng=rng), tau_m=9.87)
     tau_m, cm, i_offset = p.get(('tau_m', 'cm', 'i_offset'), gather=True)
     assert_array_equal(cm, numpy.array([1.21, 1.22, 1.23, 1.24]))
     assert_array_equal(tau_m, 9.87*numpy.ones((4,)))
     assert_array_equal(i_offset, -0.21*numpy.ones((4,)))
Exemple #27
0
 def test_parameter_StaticSynapse_random_distribution(self, sim=sim):
     weight = random.RandomDistribution('uniform',
                                        low=0.005,
                                        high=0.015,
                                        rng=MockRNG(start=0.01,
                                                    delta=0.001))
     syn = sim.StaticSynapse(weight=weight)
     self.assertEqual(weight.next(), 0.01)
Exemple #28
0
 def test_gamma(self):
     a = 2.0
     b = 0.5
     for rng in self.rnglist:
         rd = random.RandomDistribution('gamma', k=a, theta=1 / b, rng=rng)
         vals = rd.next(100)
         # need to check vals are as expected
         str(rd)  # should be in a separate test
Exemple #29
0
 def test_set(self):
     p = sim.Population(4, IF_cond_exp, {'tau_m': 14.0, 'v_reset': -50., 'tau_syn_E': 1.0})
     rng = MockRNG(start=12.31, delta=0.01, parallel_safe=True)
     p.set(tau_m=random.RandomDistribution('uniform', (0.5, 1.5), rng=rng), v_reset=-60)
     tau_m, v_reset, tau_syn_E = p.get(('tau_m', 'v_reset', 'tau_syn_E'), gather=True)
     assert_array_equal(tau_m, numpy.array([12.31, 12.32, 12.33, 12.34]))
     assert_array_equal(v_reset, -60.0**numpy.ones((4,)))
     assert_array_equal(tau_syn_E, 1.0 * numpy.ones((4,)))
Exemple #30
0
 def testRSetNumpy(self):
      """Population.rset(): with numpy rng."""
      rd1 = random.RandomDistribution(rng=random.NumpyRNG(seed=98765),
                                       distribution='uniform',
                                       parameters=[0.9,1.1])
      rd2 = random.RandomDistribution(rng=random.NumpyRNG(seed=98765),
                                       distribution='uniform',
                                       parameters=[0.9,1.1])
      self.popul1.rset('cm',rd1)
      output_values = numpy.zeros((3,3),numpy.float)
      for i in 0,1,2:
          for j in 0,1,2:    
              output_values[i,j] = 1e9*simulator.net.object(self.popul1.getObjectID(self.popul1[i,j])).Cm
      input_values = rd2.next(9)
      output_values = output_values.reshape((9,))
      for i in range(9):
          self.assertAlmostEqual(input_values[i],output_values[i],places=5)