Cours 7
This commit is contained in:
38
cours/inverted-pendulum/node_wrapping.py
Normal file
38
cours/inverted-pendulum/node_wrapping.py
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
from sys import modules
|
||||
from inspect import getmembers, isfunction, isclass
|
||||
|
||||
# This should probably be done using MetaClasses.
|
||||
|
||||
def create_node_wrapper_class(name):
|
||||
table = dict([ (n, o) for n, o in getmembers(modules[__name__]) \
|
||||
if isfunction(o) or isclass(o) ])
|
||||
out_class = table[name + "_out"]
|
||||
mem_class = table[name + "_mem"]
|
||||
step_fun = table[name + "_step"]
|
||||
reset_fun = table[name + "_reset"]
|
||||
|
||||
def wrapper_init(self):
|
||||
self.mem = mem_class()
|
||||
reset_fun(self.mem)
|
||||
|
||||
def wrapper_reset(self):
|
||||
reset_fun(self.mem)
|
||||
|
||||
def wrapper_step(self, *args):
|
||||
out = out_class()
|
||||
step_fun(*args, out, self.mem)
|
||||
return out
|
||||
|
||||
return type(name.capitalize(), (), {
|
||||
'__init__': wrapper_init,
|
||||
'step': wrapper_step,
|
||||
'reset': wrapper_reset,
|
||||
})
|
||||
|
||||
# For now, we only create wrappers for nodes that have memory.
|
||||
|
||||
for node_mem in [ n for n, o in getmembers(modules[__name__]) \
|
||||
if isclass(o) and n.endswith("_mem") ]:
|
||||
node = node_mem.replace("_mem", "")
|
||||
globals()[node.capitalize()] = create_node_wrapper_class(node)
|
||||
Reference in New Issue
Block a user