From a57e9d5ea3a06b1402f9434695dca7ff192ed847 Mon Sep 17 00:00:00 2001 From: "Joshua E. Jodesty" Date: Wed, 3 Apr 2019 10:59:45 -0400 Subject: [PATCH] json udc working but not spec --- cadCAD/engine/simulation.py | 15 +------ cadCAD/utils/__init__.py | 16 ++------ simulations/validation/config_udc_json2.py | 48 ++++++++++++---------- 3 files changed, 31 insertions(+), 48 deletions(-) diff --git a/cadCAD/engine/simulation.py b/cadCAD/engine/simulation.py index d9b4823..73fc690 100644 --- a/cadCAD/engine/simulation.py +++ b/cadCAD/engine/simulation.py @@ -5,7 +5,7 @@ from copy import deepcopy from fn.op import foldr, call from cadCAD.engine.utils import engine_exception -from cadCAD.utils import flatten, UDC_Wrapper +from cadCAD.utils import flatten, UDC_Wrapper, objectview id_exception: Callable = engine_exception(KeyError, KeyError, None) @@ -70,7 +70,6 @@ class Executor: last_in_obj: Dict[str, Any] = deepcopy(sL[-1]) udc = var_dict[0]['udc'] - # last_in_obj: Dict[str, Any] = sL[-1] _input: Dict[str, Any] = self.policy_update_exception(self.get_policy_input(var_dict, sub_step, sL, last_in_obj, policy_funcs)) @@ -82,20 +81,10 @@ class Executor: if isinstance(v, dict) and hasattr(v, 'class_id'): del last_in_obj[k] - # def HydraObj(_g, step, sL, s, _input): - # y = 'hydra_obj' - # # x = s['hydra_obj'] - # x = namedtuple("Hydra", s['hydra_members'].keys())(*s['hydra_members'].values()) - # return (y, x) - new_last_in_obj = dict(list(last_in_obj.items()) + list(alt_udc_dict.items())) - # for f in state_funcs + [HydraObj]: for f in state_funcs: # ToDo: Create Named Tuple Here - y, x = f(var_dict, sub_step, sL, new_last_in_obj, _input) - # if isinstance(x, dict) and x['hydra_type'] == Dict and 'class_id' in x.keys(): - # x = namedtuple("Hydra", x.keys())(*x.values()) - yield self.state_update_exception((y, x)) + yield self.state_update_exception(f(var_dict, sub_step, sL, new_last_in_obj, _input)) udc_dict = { diff --git a/cadCAD/utils/__init__.py b/cadCAD/utils/__init__.py index 68aa4ef..5379e88 100644 --- a/cadCAD/utils/__init__.py +++ b/cadCAD/utils/__init__.py @@ -3,7 +3,7 @@ from collections import defaultdict from itertools import product import warnings from inspect import getmembers, ismethod -from copy import deepcopy +from copy import deepcopy, copy from collections import namedtuple @@ -15,18 +15,11 @@ class objectview(object): class UDC_Wrapper(object): def __init__(self, current, past, current_functions, past_functions=[]): current_funcs = dict(getmembers(current, ismethod)) - # current_funcs['object'] = current + filtered_current_funcs = {k: v for k, v in current_funcs.items() if k in current_functions} - # current_members = filtered_current_funcs.update(vars(current)) - # past_funcs = dict(getmembers(past, ismethod)) - # past_funcs['object'] = past - # filtered_past_funcs = {k: v for k, v in past_funcs.items() if k in past_functions} - # past_members = filtered_past_funcs.update(vars(past)) - - filtered_current_funcs['hydra_type'] = Dict filtered_current_funcs.update(vars(past)) - # print(filtered_current_funcs) + filtered_current_funcs['hydra_type'] = Dict filtered_current_funcs['current'] = current filtered_current_funcs['past'] = past @@ -38,9 +31,6 @@ class UDC_Wrapper(object): def get_namedtuple(self): return namedtuple("Hydra", self.hybrid_members.keys())(*self.hybrid_members.values()) - # def hybrid_members_values(self): - # return [v for k, v in self.hybrid_members.keys()] - def pipe(x): return x diff --git a/simulations/validation/config_udc_json2.py b/simulations/validation/config_udc_json2.py index 0169e26..1f34b4b 100644 --- a/simulations/validation/config_udc_json2.py +++ b/simulations/validation/config_udc_json2.py @@ -28,7 +28,7 @@ class MyClassA(object): # ToDo: id sensitive to lineage, rerepresent def __str__(self): # return str(self.x) - return f"{hex(id(self))} - {self.x}" + return f"{self.__class__.__name__} - {hex(id(self))} - {self.__dict__}" class MyClassB: @@ -75,10 +75,11 @@ g: Dict[str, List[MyClassA]] = {'udc': [MyClassA]} # genesis state udc = MyClassA(0) # namedtuple("Hydra", self.hybrid_members.keys())(*self.hybrid_members.values()) -udc_json = {'current': udc, 'past': udc} +# udc_json = {'current': udc, 'past': udc} hydra = UDC_Wrapper(udc, udc, current_functions=['update']) hydra_members = hydra.get_hybrid_members() -hydra_obj = namedtuple("Hydra", hydra_members.keys())(*hydra_members.values()) +# hydra_obj = namedtuple("Hydra", hydra_members.keys())(*hydra_members.values()) +hydra_view = objectview(hydra_members) state_dict = { @@ -86,11 +87,11 @@ state_dict = { 'b': 0, 'i': 0, 'j': 0, - 'k': 0, + # 'k': 0, # "hydra": hydra, "hydra_members": hydra_members, - "hydra_obj": hydra_obj, - 'hydra_view': objectview(hydra_members), + # "hydra_obj": hydra_obj, + # 'hydra_view': hydra_view, 'timestamp': '2019-01-01 00:00:00' } @@ -128,7 +129,8 @@ def HydraObj(_g, step, sL, s, _input): # new_hydra = dict(generate_var_deepcopy(hydra_nt)) # new_hydra_members = dict(generate_var_deepcopy(hydra_members)) - x = namedtuple("Hydra", s['hydra_members'].keys())(*s['hydra_members'].values()) + hm = copy(s['hydra_members']) + x = namedtuple("Hydra", hm.keys())(*hm.values()) # x = namedtuple("Hydra", new_hydra.keys())(*new_hydra.values()) # print(x.x) @@ -136,7 +138,8 @@ def HydraObj(_g, step, sL, s, _input): def HydraView(_g, step, sL, s, _input): y = 'hydra_view' - x = objectview(s['hydra_members']) + # x = objectview(s['hydra_members']) + x = s['hydra_view'].update() return (y, x) def A(_g, step, sL, s, _input): @@ -147,17 +150,17 @@ def A(_g, step, sL, s, _input): def B(_g, step, sL, s, _input): y = 'b' x = s['hydra_members']['x'] - # x = s['hydra_members'].x + # x = s['hydra_view'].x # x = s['hydra_obj'].x return (y, x) def I(_g, step, sL, s, _input): y = 'i' - # x = s['hydra_members']['update']() + x = s['hydra_members']['update']() # Either works - # x = s['hydra_members'].update() - x = s['hydra_obj'].update() + # x = s['hydra_obj'].update() + # x = s['hydra_view'].x return (y, x) def J(_g, step, sL, s, _input): @@ -165,13 +168,14 @@ def J(_g, step, sL, s, _input): x = s['hydra_members']['x'] # x = s['hydra_members'].x # x = s['hydra_obj'].x + # x = s['hydra_view'].x return (y, x) def K(_g, step, sL, s, _input): y = 'k' - # x = s['hydra_view'].x x = s['hydra_obj'].x + # x = s['hydra_view'].x return (y, x) @@ -185,11 +189,11 @@ partial_state_update_blocks = { 'b': B, # 'hydra': Hydra, 'hydra_members': HydraMembers, - 'hydra_obj': HydraObj, - 'hydra_view': HydraView, + # 'hydra_obj': HydraObj, + # 'hydra_view': HydraView, 'i': I, 'j': J, - 'k': K, + # 'k': K, 'timestamp': time_model, } }, @@ -202,11 +206,11 @@ partial_state_update_blocks = { 'b': B, # 'hydra': Hydra, 'hydra_members': HydraMembers, - 'hydra_obj': HydraObj, - 'hydra_view': HydraView, + # 'hydra_obj': HydraObj, + # 'hydra_view': HydraView, 'i': I, 'j': J, - 'k': K, + # 'k': K, } }, 'PSUB3': { @@ -217,11 +221,11 @@ partial_state_update_blocks = { 'b': B, # 'hydra': Hydra, 'hydra_members': HydraMembers, - 'hydra_obj': HydraObj, - 'hydra_view': HydraView, + # 'hydra_obj': HydraObj, + # 'hydra_view': HydraView, 'i': I, 'j': J, - 'k': K, + # 'k': K, } } }