def __init__(self, source=None, target=None, nsyn=None, delays=0, weights=None, delay_queue=None, metadata={}, **kwargs): self.source_gid_or_population = source self.target_gid_or_population = target # Used for jumping off point for making a matched nest simulation: self.original_weights = weights self.original_delays = delays self.nsyn = nsyn self.synaptic_weight_distribution = util.discretize_if_needed(weights) self.weights, self.probs = self.synaptic_weight_distribution.xk, self.synaptic_weight_distribution.pk self.delay_distribution = util.discretize_if_needed(delays) self.delay_vals, self.delay_probs = self.delay_distribution.xk, self.delay_distribution.pk self.delay_queue_initial_condition = delay_queue util.check_metadata(metadata) self.metadata = metadata # Defined at runtime: self.delay_queue = None self.delay_ind = None self.simulation = None for key in kwargs.keys(): assert key in ['class']
def __init__(self, source=None, target=None, nsyn=None, delays=0, weights=None, delay_queue=None, metadata={}, **kwargs): self.source_gid_or_population = source self.target_gid_or_population = target # Used for jumping off point for making a matched nest simulation: self.original_weights = weights self.original_delays = delays self.nsyn_input = nsyn self.synaptic_weight_distribution = util.discretize_if_needed(weights) self.weights, self.probs = self.synaptic_weight_distribution.xk, self.synaptic_weight_distribution.pk self.delay_distribution = util.discretize_if_needed(delays) self.delay_vals, self.delay_probs = self.delay_distribution.xk, self.delay_distribution.pk self.delay_queue_initial_condition = delay_queue util.check_metadata(metadata) self.metadata = metadata # Defined at runtime: self.delay_queue = None self.delay_ind = None self.simulation = None for key in kwargs.keys(): assert key in ['class']
def initialize_edges(self): '''Initialize self.edges and self.leak_flux_matrix attributes. This method initializes the self.edges attribute based on the v_min, v_max, and dv settings, and creates a corresponding leak flux matrix based on this voltage discretization. ''' # Voltage edges and leak matrix construction self.tau_m = util.discretize_if_needed(self.tau_m) if np.sum(self.tau_m.xk <= 0) > 0: raise Exception('Negative tau_m values detected: %s' % self.tau_m.xk) # pragma: no cover # Voltage edges and leak matrix construction self.edges = util.get_v_edges(self.v_min, self.v_max, self.dv) # Different leak matrices for different solvers: self.leak_flux_matrix_dict = {} self.leak_flux_matrix_dict['dense'] = util.leak_matrix(self.edges, self.tau_m) # Backward Euler sparse: lfm_csrbe = sps.eye(np.shape(self.leak_flux_matrix_dict['dense'])[0], format='csr') - self.simulation.dt*self.leak_flux_matrix_dict['dense'] M_I, M_J = np.where(np.array(lfm_csrbe) != 0) M_val = lfm_csrbe[M_I, M_J] self.leak_flux_matrix_dict['sparse'] = (M_I, M_J, M_val)
def initialize_edges(self): '''Initialize self.edges and self.leak_flux_matrix attributes. This method initializes the self.edges attribute based on the v_min, v_max, and dv settings, and creates a corresponding leak flux matrix based on this voltage discretization. ''' # Voltage edges and leak matrix construction self.tau_m = util.discretize_if_needed(self.tau_m) if np.sum(self.tau_m.xk <= 0) > 0: raise Exception('Negative tau_m values detected: %s' % self.tau_m.xk) # pragma: no cover # Voltage edges and leak matrix construction self.edges = util.get_v_edges(self.v_min, self.v_max, self.dv) # Different leak matrices for different solvers: self.leak_flux_matrix_dict = {} self.leak_flux_matrix_dict['dense'] = util.leak_matrix( self.edges, self.tau_m) # Backward Euler sparse: lfm_csrbe = sps.eye( np.shape(self.leak_flux_matrix_dict['dense'])[0], format='csr' ) - self.simulation.dt * self.leak_flux_matrix_dict['dense'] M_I, M_J = np.where(np.array(lfm_csrbe) != 0) M_val = lfm_csrbe[M_I, M_J] self.leak_flux_matrix_dict['sparse'] = (M_I, M_J, M_val)
def initialize_edges(self): '''Initialize self.edges and self.leak_flux_matrix attributes. This method initializes the self.edges attribute based on the v_min, v_max, and dv settings, and creates a corresponding leak flux matrix based on this voltage discretization. ''' # Voltage edges and leak matrix construction self.tau_m = util.discretize_if_needed(self.tau_m) if np.sum(self.tau_m.xk <= 0) > 0: raise Exception('Negative tau_m values detected: %s' % self.tau_m.xk) # pragma: no cover self.edges = util.get_v_edges(self.v_min, self.v_max, self.dv) self.leak_flux_matrix = util.leak_matrix(self.edges, self.tau_m)
def initialize_probability(self): '''Initialize self.pv to delta-distribution at v=0.''' self.p0 = util.discretize_if_needed(self.p0) self.pv = util.get_pv_from_p0(self.p0, self.edges) util.assert_probability_mass_conserved(self.pv, 1e-15)
def test_continuous_no_N(): discretize_if_needed(sps.norm(loc=2, scale=1.5))
def test_dist_json_delta(): discretize_if_needed(json.dumps({'distribution':'delta', 'loc':.5}))
def test_discrete_rv(): test_dist = discretize_if_needed(sps.rv_discrete(values=(.02, 1)))
def test_dist_xk_pk_off_by_one(): discretize_if_needed(((0,1,2,3),(.5,.25,.25)))
def test_dist_specified(): discretize_if_needed(((0,1,2,3),(.25,.25,.25,.25)))
def test_discrete_rv(): # sps.rv_discrete(values=([.02],[1]), ) discretize_if_needed(sps.rv_discrete(values=([.02],[1])))
def test_scalar(): discretize_if_needed(.02)
def test_continuous_N(): test_dist = discretize_if_needed((sps.norm(loc=2, scale=1.5), 25))
def test_dist_dict_delta(): discretize_if_needed({'distribution':'delta', 'loc':.5})
def test_scalar(): test_dist = discretize_if_needed(.02)