提交 796a8d8b authored 作者: Frederic Bastien's avatar Frederic Bastien

-allow dictionary of Component and of Results as a Module element.

-updated test to reflect this.
上级 f1d27e59
...@@ -799,7 +799,19 @@ register_wrapper(lambda x: isinstance(x, (list, tuple)) and all(isinstance(r, Co ...@@ -799,7 +799,19 @@ register_wrapper(lambda x: isinstance(x, (list, tuple)) and all(isinstance(r, Co
register_wrapper(lambda x: isinstance(x, (list, tuple)) \ register_wrapper(lambda x: isinstance(x, (list, tuple)) \
and all(isinstance(r, gof.Result) and not r.owner for r in x), and all(isinstance(r, gof.Result) and not r.owner for r in x),
lambda x: ComponentList(*map(Member, x))) lambda x: ComponentList(*map(Member, x)))
#{ "name1":Result1,...} -> ComponentDict(Member(Result1),...)
def dict_member(d):
nd={}
for k,v in d.iteritems():
nd[k]=Member(v)
return nd
register_wrapper(lambda x: isinstance(x, dict) \
and all(isinstance(r,gof.Result) \
and not r.owner for r in x.itervalues()),
lambda x: ComponentDict(dict_member(x)))
register_wrapper(lambda x: isinstance(x, dict) \
and all(isinstance(r,Component) for r in x.itervalues()),
lambda x: ComponentDict(x))
class Curry: class Curry:
def __init__(self, obj, name, arg): def __init__(self, obj, name, arg):
......
...@@ -72,19 +72,19 @@ class T_test_module(unittest.TestCase): ...@@ -72,19 +72,19 @@ class T_test_module(unittest.TestCase):
inst=m1.make() inst=m1.make()
assert inst.lx assert inst.lx
assert inst.ly assert inst.ly
assert inst.tx
assert inst.ty
inst.y # we don't assert just make the look up as with T.dscalar it return None
# but it don't return None for value and constant
self.assertRaises(AttributeError, inst.__getattr__, "x")
assert inst.dx
assert inst.dy
assert inst.llx assert inst.llx
assert inst.lly assert inst.lly
assert inst.ltx assert inst.ltx
assert inst.lty assert inst.lty
assert inst.tx
assert inst.ty
assert inst.ttx assert inst.ttx
assert inst.tty assert inst.tty
inst.y # we don't assert just make the look up as with T.dscalar it return None
# but it don't return None for value and constant
self.assertRaises(AttributeError, inst.__getattr__, "x")
self.assertRaises(AttributeError, inst.__getattr__, "dx")
self.assertRaises(AttributeError, inst.__getattr__, "dy")
local_test(T.dscalar(),Member(T.dscalar())) local_test(T.dscalar(),Member(T.dscalar()))
local_test(T.value(1),Member(T.value(2))) local_test(T.value(1),Member(T.value(2)))
...@@ -103,10 +103,12 @@ class T_test_module(unittest.TestCase): ...@@ -103,10 +103,12 @@ class T_test_module(unittest.TestCase):
m1.z=Method([],m1.x*2) m1.z=Method([],m1.x*2)
m1.ly=[Method(x,x*2)] m1.ly=[Method(x,x*2)]
m1.lz=[Method([],m1.x*2)] m1.lz=[Method([],m1.x*2)]
m1.lly=[[Method(x,x*2)]]
m1.llz=[[Method([],m1.x*2)]]
m1.ty=(Method(x,x*2),) m1.ty=(Method(x,x*2),)
m1.tz=(Method([],m1.x*2),) m1.tz=(Method([],m1.x*2),)
m1.dy={'y':Method(x,x*2)}
m1.dz={'z':Method([],m1.x*2)}
m1.lly=[[Method(x,x*2)]]
m1.llz=[[Method([],m1.x*2)]]
m1.tty=((Method(x,x*2),),) m1.tty=((Method(x,x*2),),)
m1.ttz=((Method([],m1.x*2),),) m1.ttz=((Method([],m1.x*2),),)
...@@ -116,23 +118,25 @@ class T_test_module(unittest.TestCase): ...@@ -116,23 +118,25 @@ class T_test_module(unittest.TestCase):
assert inst.z()==2 assert inst.z()==2
assert inst.ly[0](2)==4 assert inst.ly[0](2)==4
assert inst.lz[0]()==2 assert inst.lz[0]()==2
assert inst.lly[0][0](2)==4#BUG: we don't support list of list of Method...
assert inst.llz[0][0]()==2
assert inst.ty[0](2)==4 assert inst.ty[0](2)==4
assert inst.tz[0]()==2 assert inst.tz[0]()==2
assert inst.tty[0][0](2)==4 assert inst.dy['y'](2)==4
assert inst.ttz[0][0]()==2 assert inst.dz['z']()==2
assert isinstance(inst.z,theano.compile.function_module.Function) assert isinstance(inst.z,theano.compile.function_module.Function)
assert isinstance(inst.lz[0],theano.compile.function_module.Function) assert isinstance(inst.lz[0],theano.compile.function_module.Function)
assert isinstance(inst.llz[0][0],theano.compile.function_module.Function)
assert isinstance(inst.tz[0],theano.compile.function_module.Function) assert isinstance(inst.tz[0],theano.compile.function_module.Function)
assert isinstance(inst.ttz[0][0],theano.compile.function_module.Function)
assert isinstance(inst.y,theano.compile.function_module.Function) assert isinstance(inst.y,theano.compile.function_module.Function)
assert isinstance(inst.ly[0],theano.compile.function_module.Function) assert isinstance(inst.ly[0],theano.compile.function_module.Function)
assert isinstance(inst.lly[0][0],theano.compile.function_module.Function)
assert isinstance(inst.ty[0],theano.compile.function_module.Function) assert isinstance(inst.ty[0],theano.compile.function_module.Function)
assert isinstance(inst.tty[0][0],theano.compile.function_module.Function)
assert inst.lly[0][0](2)==4#BUG: we don't support list of list of Method...
assert inst.llz[0][0]()==2
assert inst.tty[0][0](2)==4
assert inst.ttz[0][0]()==2
assert isinstance(inst.llz[0][0],theano.compile.function_module.Function)
assert isinstance(inst.ttz[0][0],theano.compile.function_module.Function)
assert isinstance(inst.lly[0][0],theano.compile.function_module.Function)
assert isinstance(inst.tty[0][0],theano.compile.function_module.Function)
def test_shared_members(self): def test_shared_members(self):
"""Test that under a variety of tricky conditions, the shared-ness of Results and Members """Test that under a variety of tricky conditions, the shared-ness of Results and Members
...@@ -155,6 +159,8 @@ class T_test_module(unittest.TestCase): ...@@ -155,6 +159,8 @@ class T_test_module(unittest.TestCase):
m2.ttx=((Member(x),),) m2.ttx=((Member(x),),)
m1.tlx=([Member(x)],) m1.tlx=([Member(x)],)
m2.tlx=([Member(x)],) m2.tlx=([Member(x)],)
m1.dx={'x':Member(x)}
m2.dx={'x':Member(x)}
#m1.x and m2.x should not be shared as their is no hierarchi link between them. #m1.x and m2.x should not be shared as their is no hierarchi link between them.
inst1=m1.make() inst1=m1.make()
...@@ -165,18 +171,20 @@ class T_test_module(unittest.TestCase): ...@@ -165,18 +171,20 @@ class T_test_module(unittest.TestCase):
assert inst2.x==2 assert inst2.x==2
assert inst1.lx[0]==1 assert inst1.lx[0]==1
assert inst2.lx[0]==2 assert inst2.lx[0]==2
assert inst1.ltx[0][0]==1#BUG: list of tuple don't work
assert inst2.ltx[0][0]==2#BUG: list of tuple don't work
assert inst1.llx[0][0]==1#BUG: list of list don't work
assert inst2.llx[0][0]==2#BUG: list of list don't work
assert inst1.llx[1][0]==1#BUG: list of list don't work
assert inst2.llx[1][0]==2#BUG: list of list don't work
assert inst1.tx[0]==1 assert inst1.tx[0]==1
assert inst2.tx[0]==2 assert inst2.tx[0]==2
assert inst1.ttx[0][0]==1#BUG: tuple of list don't work assert inst1.dx['x']==1
assert inst2.ttx[0][0]==2#BUG: tuple of list don't work assert inst2.dx['x']==2
assert inst1.tlx[0][0]==1#BUG: tuple of list don't work # assert inst1.ltx[0][0]==1#BUG: list of tuple don't work
assert inst2.tlx[0][0]==2#BUG: tuple of list don't work # assert inst2.ltx[0][0]==2#BUG: list of tuple don't work
# assert inst1.llx[0][0]==1#BUG: list of list don't work
# assert inst2.llx[0][0]==2#BUG: list of list don't work
# assert inst1.llx[1][0]==1#BUG: list of list don't work
# assert inst2.llx[1][0]==2#BUG: list of list don't work
# assert inst1.ttx[0][0]==1#BUG: tuple of list don't work
# assert inst2.ttx[0][0]==2#BUG: tuple of list don't work
# assert inst1.tlx[0][0]==1#BUG: tuple of list don't work
# assert inst2.tlx[0][0]==2#BUG: tuple of list don't work
#m1.x and m2.x should be shared as their is a hierarchi link between them. #m1.x and m2.x should be shared as their is a hierarchi link between them.
m1.m2=m2 m1.m2=m2
...@@ -186,18 +194,20 @@ class T_test_module(unittest.TestCase): ...@@ -186,18 +194,20 @@ class T_test_module(unittest.TestCase):
assert inst.m2.x==1 assert inst.m2.x==1
assert inst.lx[0]==1 assert inst.lx[0]==1
assert inst.m2.lx[0]==1 assert inst.m2.lx[0]==1
assert inst.llx[0][0]==1#BUG: list of list don't work
assert inst.m2.llx[0][0]==1#BUG: list of list don't work
assert inst.llx[1][0]==1#BUG: list of list don't work
assert inst.m2.llx[1][0]==1#BUG: list of list don't work
assert inst.ltx[0][0]==1#BUG: list of list don't work
assert inst.m2.ltx[0][0]==1#BUG: list of list don't work
assert inst.tx[0]==1 assert inst.tx[0]==1
assert inst.m2.tx[0]==1 assert inst.m2.tx[0]==1
assert inst.ttx[0][0]==1#BUG: list of list don't work assert inst.dx['x']==1
assert inst.m2.ttx[0][0]==1#BUG: list of list don't work assert inst.m2.dx['x']==1
assert inst.tlx[0][0]==1#BUG: list of list don't work # assert inst.llx[0][0]==1#BUG: list of list don't work
assert inst.m2.tlx[0][0]==1#BUG: list of list don't work # assert inst.m2.llx[0][0]==1#BUG: list of list don't work
# assert inst.llx[1][0]==1#BUG: list of list don't work
# assert inst.m2.llx[1][0]==1#BUG: list of list don't work
# assert inst.ltx[0][0]==1#BUG: list of list don't work
# assert inst.m2.ltx[0][0]==1#BUG: list of list don't work
# assert inst.ttx[0][0]==1#BUG: list of list don't work
# assert inst.m2.ttx[0][0]==1#BUG: list of list don't work
# assert inst.tlx[0][0]==1#BUG: list of list don't work
# assert inst.m2.tlx[0][0]==1#BUG: list of list don't work
inst.m2.x=2 inst.m2.x=2
assert inst.x==2 assert inst.x==2
assert inst.m2.x==2 assert inst.m2.x==2
...@@ -205,6 +215,18 @@ class T_test_module(unittest.TestCase): ...@@ -205,6 +215,18 @@ class T_test_module(unittest.TestCase):
assert inst.m2.lx[0]==2 assert inst.m2.lx[0]==2
assert inst.tx[0]==2 assert inst.tx[0]==2
assert inst.m2.tx[0]==2 assert inst.m2.tx[0]==2
assert inst.dx['x']==2
assert inst.m2.dx['x']==2
assert inst.llx[0][0]==2#BUG: list of list don't work
assert inst.m2.llx[0][0]==2#BUG: list of list don't work
assert inst.llx[1][0]==2#BUG: list of list don't work
assert inst.m2.llx[1][0]==2#BUG: list of list don't work
assert inst.ltx[0][0]==2#BUG: list of list don't work
assert inst.m2.ltx[0][0]==2#BUG: list of list don't work
assert inst.ttx[0][0]==2#BUG: list of list don't work
assert inst.m2.ttx[0][0]==2#BUG: list of list don't work
assert inst.tlx[0][0]==2#BUG: list of list don't work
assert inst.m2.tlx[0][0]==2#BUG: list of list don't work
#put them in subModules, sub-sub-Modules, shared between a list and a dict, shared between #put them in subModules, sub-sub-Modules, shared between a list and a dict, shared between
...@@ -238,6 +260,8 @@ class T_test_module(unittest.TestCase): ...@@ -238,6 +260,8 @@ class T_test_module(unittest.TestCase):
m1.tz=(fz,) m1.tz=(fz,)
m1.tty=((fy,),) m1.tty=((fy,),)
m1.ttz=((fz,),) m1.ttz=((fz,),)
m1.dy={'y':fy}
m1.dz={'z':fz}
inst=m1.make() inst=m1.make()
inst.x=1 inst.x=1
...@@ -245,21 +269,25 @@ class T_test_module(unittest.TestCase): ...@@ -245,21 +269,25 @@ class T_test_module(unittest.TestCase):
assert inst.z()==2 assert inst.z()==2
assert inst.ly[0](2)==4 assert inst.ly[0](2)==4
assert inst.lz[0]()==2 assert inst.lz[0]()==2
# assert inst.lly[0][0](2)==4#BUG: we don't support list of list of Method...
# assert inst.llz[0][0]()==2
assert inst.ty[0](2)==4 assert inst.ty[0](2)==4
assert inst.tz[0]()==2 assert inst.tz[0]()==2
assert inst.dy['y'](2)==4
assert inst.dz['z']()==2
# assert inst.lly[0][0](2)==4#BUG: we don't support list of list of Method...
# assert inst.llz[0][0]()==2
# assert inst.tty[0][0](2)==4 # assert inst.tty[0][0](2)==4
# assert inst.ttz[0][0]()==2 # assert inst.ttz[0][0]()==2
assert isinstance(inst.z,theano.compile.function_module.Function) assert isinstance(inst.z,theano.compile.function_module.Function)
assert isinstance(inst.lz[0],theano.compile.function_module.Function) assert isinstance(inst.lz[0],theano.compile.function_module.Function)
# assert isinstance(inst.llz[0][0],theano.compile.function_module.Function) # assert isinstance(inst.llz[0][0],theano.compile.function_module.Function)
assert isinstance(inst.tz[0],theano.compile.function_module.Function) assert isinstance(inst.tz[0],theano.compile.function_module.Function)
assert isinstance(inst.dz['z'],theano.compile.function_module.Function)
# assert isinstance(inst.ttz[0][0],theano.compile.function_module.Function) # assert isinstance(inst.ttz[0][0],theano.compile.function_module.Function)
assert isinstance(inst.y,theano.compile.function_module.Function) assert isinstance(inst.y,theano.compile.function_module.Function)
assert isinstance(inst.ly[0],theano.compile.function_module.Function) assert isinstance(inst.ly[0],theano.compile.function_module.Function)
# assert isinstance(inst.lly[0][0],theano.compile.function_module.Function) # assert isinstance(inst.lly[0][0],theano.compile.function_module.Function)
assert isinstance(inst.ty[0],theano.compile.function_module.Function) assert isinstance(inst.ty[0],theano.compile.function_module.Function)
assert isinstance(inst.dy['y'],theano.compile.function_module.Function)
# assert isinstance(inst.tty[0][0],theano.compile.function_module.Function) # assert isinstance(inst.tty[0][0],theano.compile.function_module.Function)
print >> sys.stderr, "WARNING MODULE TEST NOT IMPLEMENTED" print >> sys.stderr, "WARNING MODULE TEST NOT IMPLEMENTED"
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论