import pylab
import nest
import nest.topology as topo
import numpy as np
import random
pylab.ion()

msd = 0
n_threads = 4
N_vp=4*n_threads
#python seed
pyrngs = [np.random.RandomState(s) for s in range(msd, msd+N_vp)]
nest.SetKernelStatus({"resolution"  : .1,
                      "rng_seeds"   : N_vp *[msd+N_vp+1],
                      "grng_seed"   :  msd+N_vp, #global NEST rng
                      "total_num_virtual_procs": N_vp,
                      'local_num_threads': n_threads,
                      "print_time": True
                   })


# create two test layers
inp = topo.CreateLayer({'columns': 10, 'rows': 10,
                      'elements': 'parrot_neuron', 'edge_wrap': True})
modules =[]
m1_count=random.randint(500,600)
pos_m1 = [[random.uniform(-0.5,0.5), random.uniform(-0.5,0.5)]
               for j in range(m1_count)]

m1= topo.CreateLayer({'positions': list(pos_m1),
           'elements': 'parrot_neuron','label':'m1'})
modules.append(m1)

spike_det=nest.Create('spike_detector',1)
pgen=nest.Create('poisson_generator',1,params={'rate' : 1000.,
                               'start': 0.,
                               'stop' : 100. })

# comment to reproduce erroe
# print(nest.GetNodes(inp)[0])
# nest.Connect(pgen,nest.GetNodes(inp)[0])
# nest.Connect(nest.GetNodes(inp)[0],spike_det)
# Uncomment to reproduce ERROR

nest.Connect(pgen,nest.GetNodes(m1)[0])
nest.Connect(nest.GetNodes(m1)[0],spike_det)
nest.Simulate(100.)
print(nest.GetStatus([spike_det[0]])[0]['n_events'])
