json udc working but not spec

This commit is contained in:
Joshua E. Jodesty 2019-04-03 10:59:45 -04:00
parent d56d60d7a3
commit a57e9d5ea3
3 changed files with 31 additions and 48 deletions

View File

@ -5,7 +5,7 @@ from copy import deepcopy
from fn.op import foldr, call from fn.op import foldr, call
from cadCAD.engine.utils import engine_exception 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) id_exception: Callable = engine_exception(KeyError, KeyError, None)
@ -70,7 +70,6 @@ class Executor:
last_in_obj: Dict[str, Any] = deepcopy(sL[-1]) last_in_obj: Dict[str, Any] = deepcopy(sL[-1])
udc = var_dict[0]['udc'] 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)) _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'): if isinstance(v, dict) and hasattr(v, 'class_id'):
del last_in_obj[k] 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())) 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: for f in state_funcs:
# ToDo: Create Named Tuple Here # ToDo: Create Named Tuple Here
y, x = f(var_dict, sub_step, sL, new_last_in_obj, _input) yield self.state_update_exception(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))
udc_dict = { udc_dict = {

View File

@ -3,7 +3,7 @@ from collections import defaultdict
from itertools import product from itertools import product
import warnings import warnings
from inspect import getmembers, ismethod from inspect import getmembers, ismethod
from copy import deepcopy from copy import deepcopy, copy
from collections import namedtuple from collections import namedtuple
@ -15,18 +15,11 @@ class objectview(object):
class UDC_Wrapper(object): class UDC_Wrapper(object):
def __init__(self, current, past, current_functions, past_functions=[]): def __init__(self, current, past, current_functions, past_functions=[]):
current_funcs = dict(getmembers(current, ismethod)) 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} 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)) filtered_current_funcs.update(vars(past))
# print(filtered_current_funcs) filtered_current_funcs['hydra_type'] = Dict
filtered_current_funcs['current'] = current filtered_current_funcs['current'] = current
filtered_current_funcs['past'] = past filtered_current_funcs['past'] = past
@ -38,9 +31,6 @@ class UDC_Wrapper(object):
def get_namedtuple(self): def get_namedtuple(self):
return namedtuple("Hydra", self.hybrid_members.keys())(*self.hybrid_members.values()) 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): def pipe(x):
return x return x

View File

@ -28,7 +28,7 @@ class MyClassA(object):
# ToDo: id sensitive to lineage, rerepresent # ToDo: id sensitive to lineage, rerepresent
def __str__(self): def __str__(self):
# return str(self.x) # return str(self.x)
return f"{hex(id(self))} - {self.x}" return f"{self.__class__.__name__} - {hex(id(self))} - {self.__dict__}"
class MyClassB: class MyClassB:
@ -75,10 +75,11 @@ g: Dict[str, List[MyClassA]] = {'udc': [MyClassA]}
# genesis state # genesis state
udc = MyClassA(0) udc = MyClassA(0)
# namedtuple("Hydra", self.hybrid_members.keys())(*self.hybrid_members.values()) # 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 = UDC_Wrapper(udc, udc, current_functions=['update'])
hydra_members = hydra.get_hybrid_members() 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 = { state_dict = {
@ -86,11 +87,11 @@ state_dict = {
'b': 0, 'b': 0,
'i': 0, 'i': 0,
'j': 0, 'j': 0,
'k': 0, # 'k': 0,
# "hydra": hydra, # "hydra": hydra,
"hydra_members": hydra_members, "hydra_members": hydra_members,
"hydra_obj": hydra_obj, # "hydra_obj": hydra_obj,
'hydra_view': objectview(hydra_members), # 'hydra_view': hydra_view,
'timestamp': '2019-01-01 00:00:00' '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 = dict(generate_var_deepcopy(hydra_nt))
# new_hydra_members = dict(generate_var_deepcopy(hydra_members)) # 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()) # x = namedtuple("Hydra", new_hydra.keys())(*new_hydra.values())
# print(x.x) # print(x.x)
@ -136,7 +138,8 @@ def HydraObj(_g, step, sL, s, _input):
def HydraView(_g, step, sL, s, _input): def HydraView(_g, step, sL, s, _input):
y = 'hydra_view' y = 'hydra_view'
x = objectview(s['hydra_members']) # x = objectview(s['hydra_members'])
x = s['hydra_view'].update()
return (y, x) return (y, x)
def A(_g, step, sL, s, _input): 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): def B(_g, step, sL, s, _input):
y = 'b' y = 'b'
x = s['hydra_members']['x'] x = s['hydra_members']['x']
# x = s['hydra_members'].x # x = s['hydra_view'].x
# x = s['hydra_obj'].x # x = s['hydra_obj'].x
return (y, x) return (y, x)
def I(_g, step, sL, s, _input): def I(_g, step, sL, s, _input):
y = 'i' y = 'i'
# x = s['hydra_members']['update']() x = s['hydra_members']['update']()
# Either works # 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) return (y, x)
def J(_g, step, sL, s, _input): 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_members'].x # x = s['hydra_members'].x
# x = s['hydra_obj'].x # x = s['hydra_obj'].x
# x = s['hydra_view'].x
return (y, x) return (y, x)
def K(_g, step, sL, s, _input): def K(_g, step, sL, s, _input):
y = 'k' y = 'k'
# x = s['hydra_view'].x
x = s['hydra_obj'].x x = s['hydra_obj'].x
# x = s['hydra_view'].x
return (y, x) return (y, x)
@ -185,11 +189,11 @@ partial_state_update_blocks = {
'b': B, 'b': B,
# 'hydra': Hydra, # 'hydra': Hydra,
'hydra_members': HydraMembers, 'hydra_members': HydraMembers,
'hydra_obj': HydraObj, # 'hydra_obj': HydraObj,
'hydra_view': HydraView, # 'hydra_view': HydraView,
'i': I, 'i': I,
'j': J, 'j': J,
'k': K, # 'k': K,
'timestamp': time_model, 'timestamp': time_model,
} }
}, },
@ -202,11 +206,11 @@ partial_state_update_blocks = {
'b': B, 'b': B,
# 'hydra': Hydra, # 'hydra': Hydra,
'hydra_members': HydraMembers, 'hydra_members': HydraMembers,
'hydra_obj': HydraObj, # 'hydra_obj': HydraObj,
'hydra_view': HydraView, # 'hydra_view': HydraView,
'i': I, 'i': I,
'j': J, 'j': J,
'k': K, # 'k': K,
} }
}, },
'PSUB3': { 'PSUB3': {
@ -217,11 +221,11 @@ partial_state_update_blocks = {
'b': B, 'b': B,
# 'hydra': Hydra, # 'hydra': Hydra,
'hydra_members': HydraMembers, 'hydra_members': HydraMembers,
'hydra_obj': HydraObj, # 'hydra_obj': HydraObj,
'hydra_view': HydraView, # 'hydra_view': HydraView,
'i': I, 'i': I,
'j': J, 'j': J,
'k': K, # 'k': K,
} }
} }
} }