def test_ready4delay(self): sess_dates = ['2020-09-03', '2020-09-02', '2020-08-31'] trials, task_protocol = self._get_trials(sess_dates=sess_dates) assert (np.all(np.array(task_protocol) == 'biased')) status, info = train.get_training_status( trials, task_protocol, ephys_sess_dates=['2020-09-03'], n_delay=0) assert (status == 'ready4delay')
def test_trained_1b(self): trials, task_protocol = self._get_trials( sess_dates=['2020-08-27', '2020-08-26', '2020-08-25']) assert (np.all(np.array(task_protocol) == 'training')) status, info = train.get_training_status(trials, task_protocol, ephys_sess_dates=[], n_delay=0) assert(status == 'trained 1b')
def test_ready4recording(self): sess_dates = ['2020-09-01', '2020-08-31', '2020-08-28'] trials, task_protocol = self._get_trials(sess_dates=sess_dates) assert (np.all(np.array(task_protocol) == 'biased')) status, info = train.get_training_status(trials, task_protocol, ephys_sess_dates=sess_dates, n_delay=1) assert (status == 'ready4recording')
def test_training_to_bias(self): trials, task_protocol = self._get_trials( sess_dates=['2020-08-31', '2020-08-28', '2020-08-27']) assert (~np.all(np.array(task_protocol) == 'training') and np.any(np.array(task_protocol) == 'training')) status, info = train.get_training_status(trials, task_protocol, ephys_sess_dates=[], n_delay=0) assert (status == 'trained 1b')
def test_ready4delay(self): sess_dates = ['2020-09-03', '2020-09-02', '2020-08-31'] trials_copy = copy.deepcopy(self.trial_data) trials = Bunch(zip(sess_dates, [trials_copy[k] for k in sess_dates])) task_protocol = [trials[k].pop('task_protocol') for k in trials.keys()] assert (np.all(np.array(task_protocol) == 'biased')) status, info = train.get_training_status( trials, task_protocol, ephys_sess_dates=['2020-09-03'], n_delay=0) assert (status == 'ready4delay')
def test_trained_1b(self): sess_dates = ['2020-08-27', '2020-08-26', '2020-08-25'] trials_copy = copy.deepcopy(self.trial_data) trials = Bunch(zip(sess_dates, [trials_copy[k] for k in sess_dates])) task_protocol = [trials[k].pop('task_protocol') for k in trials.keys()] assert (np.all(np.array(task_protocol) == 'training')) status, info = train.get_training_status(trials, task_protocol, ephys_sess_dates=[], n_delay=0) assert (status == 'trained 1b')
def compute_training_status(df, compute_date, one): """ Compute the training status for compute date based on training from that session and two previous days :param df: training dataframe :param compute_date: date to compute training on :param one: ONE instance :return: """ # compute_date = str(one.path2ref(session_path)['date']) df_temp = df[df['date'] <= compute_date] df_temp = df_temp.drop_duplicates('session_path') df_temp.sort_values('date') dates = df_temp.date.values n_dates = np.min([3, len(dates)]).astype(int) compute_dates = dates[(-1 * n_dates):] assert compute_dates[-1] == compute_date df_temp_group = df_temp.groupby('date') trials = {} n_delay = 0 ephys_sessions = [] protocol = [] status = [] for date in compute_dates: df_date = df_temp_group.get_group(date) # If habituation skip if df_date.iloc[-1]['task_protocol'] == 'habituation': continue trials[df_date.iloc[-1]['date']] = load_combined_trials( df_date.session_path.values, one) protocol.append(df_date.iloc[-1]['task_protocol']) status.append(df_date.iloc[-1]['training_status']) if df_date.iloc[-1]['combined_n_delay'] >= 900: # delay of 15 mins n_delay += 1 if df_date.iloc[-1]['location'] == 'ephys_rig': ephys_sessions.append(df_date.iloc[-1]['date']) n_status = np.max([-2, -1 * len(status)]) training_status, _ = training.get_training_status(trials, protocol, ephys_sessions, n_delay) training_status = pass_through_training_hierachy(training_status, status[n_status]) df.loc[df['date'] == compute_date, 'training_status'] = training_status return df
def test_in_training(self): sess_dates = ['2020-08-25', '2020-08-24', '2020-08-21'] trials_copy = copy.deepcopy(self.trial_data) trials = Bunch(zip(sess_dates, [trials_copy[k] for k in sess_dates])) task_protocol = [trials[k].pop('task_protocol') for k in trials.keys()] assert (np.all(np.array(task_protocol) == 'training')) status, info = train.get_training_status(trials, task_protocol, ephys_sess_dates=[], n_delay=0) assert (status == 'in training') # also test the computations in the first test np.testing.assert_allclose(info.perf_easy, [0.91489362, 0.9, 0.90853659]) np.testing.assert_array_equal(info.n_trials, [617, 532, 719]) np.testing.assert_allclose( info.psych, [4.04487042, 21.6293942, 1.91451396e-02, 1.72669957e-01], rtol=1e-5) assert (np.isclose(info.rt, 0.83655))