예제 #1
0
 def test_run(self):
     wc = WilsonCowanNetwork(self.SC,
                             self.DELAYS,
                             exc_seed=SEED,
                             inh_seed=SEED)
     all_results = []
     for backend, noise_func in BACKENDS_TO_TEST.items():
         result = wc.run(
             DURATION,
             DT,
             noise_func(ZeroInput(DURATION, DT, wc.num_noise_variables)),
             backend=backend,
         )
         self.assertTrue(isinstance(result, xr.Dataset))
         self.assertEqual(len(result),
                          wc.num_state_variables / wc.num_nodes)
         self.assertTrue(
             all(result[result_].shape == (int(DURATION / DT), wc.num_nodes)
                 for result_ in result))
         all_results.append(result)
     # test results are the same from different backends
     for state_var in all_results[0]:
         corr_mat = np.corrcoef(
             np.vstack([
                 result[state_var].values.flatten().astype(float)
                 for result in all_results
             ]))
         self.assertTrue(np.greater(corr_mat, CORR_THRESHOLD).all())
예제 #2
0
 def test_compare_w_neurolib_native_model(self):
     """
     Compare with neurolib's native Wilson-Cowan model.
     """
     wc_multi = WilsonCowanNetwork(self.SC, self.DELAYS)
     multi_result = wc_multi.run(DURATION,
                                 DT,
                                 ZeroInput(DURATION, DT).as_array(),
                                 backend="numba")
     # run neurolib's model
     wc_neurolib = WCModel(Cmat=self.SC, Dmat=self.DELAYS, seed=SEED)
     wc_neurolib.params["duration"] = DURATION
     wc_neurolib.params["dt"] = DT
     # there is no "global coupling" parameter in MultiModel
     wc_neurolib.params["K_gl"] = 1.0
     # delays <-> length matrix
     wc_neurolib.params["signalV"] = 1.0
     wc_neurolib.params["sigma_ou"] = 0.0
     # match initial state
     wc_neurolib.params["exc_init"] = wc_multi.initial_state[::2][:, np.
                                                                  newaxis]
     wc_neurolib.params["inh_init"] = wc_multi.initial_state[1::2][:, np.
                                                                   newaxis]
     wc_neurolib.run()
     for (var_multi, var_neurolib) in NEUROLIB_VARIABLES_TO_TEST:
         for node_idx in range(len(wc_multi)):
             corr_mat = np.corrcoef(
                 wc_neurolib[var_neurolib][node_idx, :],
                 multi_result[var_multi].values.T[node_idx, :])
             self.assertTrue(np.greater(corr_mat, CORR_THRESHOLD).all())
예제 #3
0
 def test_init(self):
     wc = WilsonCowanNetwork(self.SC, self.DELAYS)
     self.assertTrue(isinstance(wc, WilsonCowanNetwork))
     self.assertEqual(len(wc), self.SC.shape[0])
     self.assertEqual(wc.initial_state.shape[0], wc.num_state_variables)
     self.assertEqual(wc.default_output, f"q_mean_{EXC}")