From 7efc2be2f1a02a810b3442b06a9cbec78de56ba2 Mon Sep 17 00:00:00 2001 From: "Joshua E. Jodesty" Date: Tue, 4 Dec 2018 16:39:53 -0500 Subject: [PATCH] Correctly print tensor field --- SimCAD/configuration/__init__.py | 7 ++++--- SimCAD/configuration/utils/__init__.py | 2 +- SimCAD/engine/__init__.py | 13 +++++++------ simulations/sim_test.py | 15 +++++++++++---- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/SimCAD/configuration/__init__.py b/SimCAD/configuration/__init__.py index 3c28e79..b9befca 100644 --- a/SimCAD/configuration/__init__.py +++ b/SimCAD/configuration/__init__.py @@ -5,7 +5,7 @@ import pandas as pd from SimCAD.utils import key_filter from SimCAD.configuration.utils.behaviorAggregation import dict_elemwise_sum -#Configuration(sim_config, state_dict, seed, exogenous_states, env_processes, mechanisms) + class Configuration: def __init__(self, sim_config, state_dict, seed, exogenous_states, env_processes, mechanisms, behavior_ops=[foldr(dict_elemwise_sum())]): self.sim_config = sim_config @@ -16,6 +16,7 @@ class Configuration: self.behavior_ops = behavior_ops self.mechanisms = mechanisms + class Identity: def __init__(self, behavior_id={'indentity': 0}): self.beh_id_return_val = behavior_id @@ -48,11 +49,11 @@ class Processor: self.state_identity = id.state_identity self.apply_identity_funcs = id.apply_identity_funcs - # Make returntype chosen by user. Must Classify Configs + # Make returntype chosen by user. def create_matrix_field(self, mechanisms, key): if key == 'states': identity = self.state_identity - else: + elif key == 'behaviors': identity = self.behavior_identity df = pd.DataFrame(key_filter(mechanisms, key)) col_list = self.apply_identity_funcs(identity, df, list(df.columns)) diff --git a/SimCAD/configuration/utils/__init__.py b/SimCAD/configuration/utils/__init__.py index f975791..5364566 100644 --- a/SimCAD/configuration/utils/__init__.py +++ b/SimCAD/configuration/utils/__init__.py @@ -8,7 +8,7 @@ class TensorFieldReport: def __init__(self, config_proc): self.config_proc = config_proc - # dont for-loop to apply exo_procs, use exo_proc struct + # ??? dont for-loop to apply exo_procs, use exo_proc struct def create_tensor_field(self, mechanisms, exo_proc, keys=['behaviors', 'states']): dfs = [self.config_proc.create_matrix_field(mechanisms, k) for k in keys] df = pd.concat(dfs, axis=1) diff --git a/SimCAD/engine/__init__.py b/SimCAD/engine/__init__.py index d7a3b4e..f5d93bc 100644 --- a/SimCAD/engine/__init__.py +++ b/SimCAD/engine/__init__.py @@ -69,13 +69,14 @@ class Executor: # Dimensions: N x r x mechs - if self.exec_context == ExecutionMode.multi_proc: + if self.exec_context == ExecutionMode.single_proc: + tensor_field = create_tensor_field(mechanisms.pop(), eps.pop()) + result = self.exec_method(simulation_execs, states_lists, configs_structs, env_processes_list, Ts, Ns) + return (result, tensor_field) + elif self.exec_context == ExecutionMode.multi_proc: if len(self.configs) > 1: simulations = self.exec_method(simulation_execs, states_lists, configs_structs, env_processes_list, Ts, Ns) results = [] for result, mechanism, ep in list(zip(simulations, mechanisms, eps)): - print(tabulate(create_tensor_field(mechanism, ep), headers='keys', tablefmt='psql')) - results.append(flatten(result)) - return results - else: - return self.exec_method(simulation_execs, states_lists, configs_structs, env_processes_list, Ts, Ns) \ No newline at end of file + results.append((flatten(result), create_tensor_field(mechanism, ep))) + return results \ No newline at end of file diff --git a/simulations/sim_test.py b/simulations/sim_test.py index bd76f72..7002687 100644 --- a/simulations/sim_test.py +++ b/simulations/sim_test.py @@ -20,9 +20,13 @@ print() first_config = [configs[0]] # from config1 single_proc_ctx = ExecutionContext(context=exec_mode.single_proc) run1 = Executor(exec_context=single_proc_ctx, configs=first_config) -run1_raw_result = run1.main() +run1_raw_result, tensor_field = run1.main() result = pd.DataFrame(run1_raw_result) # result.to_csv('~/Projects/DiffyQ-SimCAD/results/config4.csv', sep=',') +print() +print("Tensor Field:") +print(tabulate(tensor_field, headers='keys', tablefmt='psql')) +print("Output:") print(tabulate(result, headers='keys', tablefmt='psql')) print() @@ -30,8 +34,11 @@ print("Simulation Execution 2: Pairwise Execution") print() multi_proc_ctx = ExecutionContext(context=exec_mode.multi_proc) run2 = Executor(exec_context=multi_proc_ctx, configs=configs) -run2_raw_results = run2.main() -for raw_result in run2_raw_results: +for raw_result, tensor_field in run2.main(): result = pd.DataFrame(raw_result) + print() + print("Tensor Field:") + print(tabulate(tensor_field, headers='keys', tablefmt='psql')) + print("Output:") print(tabulate(result, headers='keys', tablefmt='psql')) -print() \ No newline at end of file + print() \ No newline at end of file