def test3_input_populations_coupled_to_bistable_population(self):
     # define network drive
     drive_1 = 10*[0] + 20*[10] + 200*[0]
     drive_2 = 15*[0] + 20*[10] + 195*[0]
     drive_12 = len(drive_1) * [0]
     drives = np.transpose([drive_1, drive_2, drive_12])
     
     # define network parameters
     taus = [10, 10, 10]
     v_rests = [0, 0, 0]
     v_ths = [4, 4, 4]
     gs = [2.5, 2.5, 2.5]
     noise_level = 2
     
     nodes = [{'tau': t, 'v_rest': v_rest, 'threshold': th, 'steepness': g}
             for t, v_rest, th, g in zip(taus, v_rests, v_ths, gs)]
     weights = np.array([
             [0, 0, 0],
             [0, 0, 0],
             [2, 2, 5.5]
         ])
     
     # make network
     ntwk = RateBasedModel(nodes, weights)
     ntwk.store_voltages = True
     ntwk.noise_level = noise_level
     
     # initialize and run network
     np.random.seed(1)
     ntwk.vs = np.array(v_rests)
     for drive in drives:
         ntwk.step(drive)
         
     fig, axs = plt.subplots(3, 1, figsize=(14, 8), sharex=True)
     axs[0].plot(ntwk.vs_history, lw=2)
     axs[1].plot(ntwk.rs_history, lw=2)
     axs[2].plot(drives, lw=2)
     
     axs[1].set_ylim(-.1, 1.1)
     axs[2].set_ylim(-1, 11)
     
     axs[0].set_ylabel('voltage')
     axs[1].set_ylabel('firing rate')
     axs[2].set_ylabel('drive')
     axs[2].set_xlabel('t')
     
     axs[0].set_title('Input populations coupled to bistable population')
     
     for ax in axs:
         axis_tools.set_fontsize(ax, 20)
 def test2_upstate_timecourse_with_self_connections_depends_on_noise(self):
     # define network drive
     drives = 10*[np.array([0, 0, 0])] + 40*[4*np.array([1, 1, 1])] + \
              140*[np.array([0, 0, 0])]
     # define network parameters
     taus = [10, 10, 10]
     v_rests = [0, 0, 0]
     v_ths = [4, 4, 4]
     gs = [2.5, 2.5, 2.5]
     w_selfs = [5.3, 5.3, 5.3]
     noise_level = np.array([1, 2, 3])
     
     nodes = [{'tau': t, 'v_rest': v_rest, 'threshold': th, 'steepness': g}
             for t, v_rest, th, g in zip(taus, v_rests, v_ths, gs)]
     weights = np.diag(w_selfs)
     
     # make network
     ntwk = RateBasedModel(nodes, weights)
     ntwk.store_voltages = True
     ntwk.noise_level = noise_level
     
     # initialize and run network
     np.random.seed(seed=4)
     ntwk.vs = np.array(v_rests)
     for drive in drives:
         ntwk.step(drive)
         
     # make plots
     fig, axs = plt.subplots(3, 1, figsize=(14, 8), sharex=True)
     axs[0].plot(ntwk.vs_history, lw=2)
     axs[1].plot(ntwk.rs_history, lw=2)
     axs[2].plot(drives, lw=2, c='k')
     
     axs[1].set_ylim(-.1, 1.1)
     axs[2].set_ylim(-1, 5)
     
     axs[0].set_ylabel('voltage')
     axs[1].set_ylabel('firing rate')
     axs[2].set_ylabel('drive')
     axs[2].set_xlabel('t')
     
     axs[0].set_title('Self-Connected Populations With Noise')
     
     for ax in axs:
         axis_tools.set_fontsize(ax, 20)