def create_tensor_field(self, partial_state_updates, exo_proc, keys=['policies', 'variables']): partial_state_updates = sanitize_partial_state_updates( partial_state_updates) # Temporary dfs = [ self.config_proc.create_matrix_field(partial_state_updates, k) for k in keys ] df = pd.concat(dfs, axis=1) for es, i in zip(exo_proc, range(len(exo_proc))): df['es' + str(i + 1)] = es df['m'] = df.index + 1 return df
def generate_config( self, initial_state, partial_state_updates, exo_proc) -> List[Tuple[List[Callable], List[Callable]]]: def no_update_handler(bdf, sdf): if (bdf.empty == False) and (sdf.empty == True): bdf_values = bdf.values.tolist() sdf_values = [[self.no_state_identity] * len(bdf_values) for m in range(len(partial_state_updates))] return sdf_values, bdf_values elif (bdf.empty == True) and (sdf.empty == False): sdf_values = sdf.values.tolist() bdf_values = [[self.p_identity] * len(sdf_values) for m in range(len(partial_state_updates))] return sdf_values, bdf_values else: sdf_values = sdf.values.tolist() bdf_values = bdf.values.tolist() return sdf_values, bdf_values def only_ep_handler(state_dict): sdf_functions = [ lambda var_dict, sub_step, sL, s, _input, **kwargs: (k, v) for k, v in zip(state_dict.keys(), state_dict.values()) ] sdf_values = [sdf_functions] bdf_values = [[self.p_identity] * len(sdf_values)] return sdf_values, bdf_values if len(partial_state_updates) != 0: # backwards compatibility # partial_state_updates = sanitize_partial_state_updates( partial_state_updates) bdf = self.create_matrix_field(partial_state_updates, 'policies') sdf = self.create_matrix_field(partial_state_updates, 'variables') sdf_values, bdf_values = no_update_handler(bdf, sdf) zipped_list = list(zip(sdf_values, bdf_values)) else: sdf_values, bdf_values = only_ep_handler(initial_state) zipped_list = list(zip(sdf_values, bdf_values)) return list(map(lambda x: (x[0] + exo_proc, x[1]), zipped_list))