def _gather_action_infos(self, exp_list):
        """
            Gathers corresponding action informations from partial trajectories
            Args:
                experience: (type: dictionary) subtrajectory information
            Returns:
                persistent_infos: list of batched FloatTensors
                onetime_infos: one batched FloatTensor
        """
        persistent_infos, onetime_infos = None, None

        exists_ones = (len(exp_list[0]['onetime_infos']) > 0)
        exists_pers = (len(exp_list[0]['persistent_infos'][0]) > 0)

        if exists_ones:
            onetime_infos = []
            for _ in range(len(exp_list[0]['onetime_infos'])):
                onetime_infos.append([])
        if exists_pers:
            persistent_infos = []
            for _ in range(len(exp_list[0]['persistent_infos'][0])):
                persistent_infos.append([])

        for exp in exp_list:
            if exists_ones:
                for i in range(len(onetime_infos)):
                    onetime_infos[i].append(exp['onetime_infos'][i])
            if exists_pers:
                for i in range(len(persistent_infos)):
                    one_exp_info = []
                    for info_list in exp['persistent_infos']:
                        one_exp_info.append(info_list[i])
                    persistent_infos[i].append(np.stack(one_exp_info))

        if exists_ones:
            onetime_infos = [np.stack(info) for info in onetime_infos]
        if exists_pers:
            persistent_infos = [np.asarray(infos) for infos in persistent_infos]

        return onetime_infos, persistent_infos

            Gathers corresponding action informations from partial trajectories
            Args:
                experience: (type: dictionary) subtrajectory information
            Returns:
                persistent_infos: list of batched FloatTensors
                onetime_infos: one batched FloatTensor
        
surreal/learner/aggregator.py