538
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
1 from api0 import *
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
2 import threading, time, commands, os, sys, math, random, datetime
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
3
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
4 import psycopg2, psycopg2.extensions
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
5 from sqlalchemy import create_engine, desc
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
6 from sqlalchemy.orm import sessionmaker
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
7 from sqlalchemy import Table, Column, MetaData, ForeignKey
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
8 from sqlalchemy import Integer, String, Float, DateTime, Text, Binary
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
9 from sqlalchemy.orm import mapper, relation, backref, eagerload
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
10 from sqlalchemy.sql import operators, select
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
11
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
12 import unittest
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
13
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
14 class T(unittest.TestCase):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
15
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
16 def test_bad_dict_table(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
17 """Make sure our crude version of schema checking kinda works"""
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
18 engine = create_engine('sqlite:///:memory:', echo=False)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
19 Session = sessionmaker(bind=engine, autoflush=True, transactional=True)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
20
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
21 table_prefix='bergstrj_scratch_test_'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
22 metadata = MetaData()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
23 t_trial = Table(table_prefix+'trial', metadata,
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
24 Column('id', Integer, primary_key=True),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
25 Column('desc', String(256)), #comment: why running this trial?
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
26 Column('priority', Float(53)), #aka Double
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
27 Column('start', DateTime),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
28 Column('finish', DateTime),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
29 Column('host', String(256)))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
30 metadata.create_all(engine)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
31
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
32 try:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
33 h = DbHandle(None, t_trial, None, None)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
34 except ValueError, e:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
35 if e[0] == DbHandle.e_bad_table:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
36 return
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
37 self.fail()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
38
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
39
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
40 def go(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
41 """Create tables and session_maker"""
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
42 engine = create_engine('sqlite:///:memory:', echo=False)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
43 Session = sessionmaker(autoflush=True, transactional=True)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
44
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
45 table_prefix='bergstrj_scratch_test_'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
46 metadata = MetaData()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
47
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
48 t_trial = Table(table_prefix+'trial', metadata,
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
49 Column('id', Integer, primary_key=True),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
50 Column('create', DateTime),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
51 Column('write', DateTime),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
52 Column('read', DateTime))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
53
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
54 t_keyval = Table(table_prefix+'keyval', metadata,
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
55 Column('id', Integer, primary_key=True),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
56 Column('name', String(32), nullable=False), #name of attribute
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
57 Column('ntype', Integer),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
58 Column('fval', Float(53)), #aka Double
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
59 Column('sval', Text), #aka Double
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
60 Column('bval', Binary)) #TODO: store text (strings of unbounded length)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
61
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
62 t_trial_keyval = Table(table_prefix+'trial_keyval', metadata,
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
63 Column('dict_id', Integer, ForeignKey('%s.id' % t_trial),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
64 primary_key=True),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
65 Column('pair_id', Integer, ForeignKey('%s.id' % t_keyval),
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
66 primary_key=True))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
67
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
68 metadata.bind = engine
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
69 metadata.create_all() # does nothing when tables already exist
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
70
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
71 self.engine = engine
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
72 return Session, t_trial, t_keyval, t_trial_keyval
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
73
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
74
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
75 def test_insert_save(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
76
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
77 Session, t_dict, t_pair, t_link = self.go()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
78
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
79 db = DbHandle(*self.go())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
80
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
81 def jobs():
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
82 dvalid, dtest = 'dvalid', 'dtest file'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
83 desc = 'debugging'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
84 for lr in [0.001]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
85 for scale in [0.0001 * math.sqrt(10.0)**i for i in range(4)]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
86 for rng_seed in [4, 5, 6]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
87 for priority in [None, 1]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
88 yield dict(locals())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
89
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
90 jlist = list(jobs())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
91 assert len(jlist) == 1*4*3*2
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
92 for i, dct in enumerate(jobs()):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
93 t = db.insert(**dct)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
94
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
95 #make sure that they really got inserted into the db
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
96 orig_keycount = db._session.query(db._KeyVal).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
97 self.failUnless(orig_keycount > 0, orig_keycount)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
98
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
99 orig_dctcount = Session().query(db._Dict).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
100 self.failUnless(orig_dctcount ==len(jlist), orig_dctcount)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
101
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
102 orig_keycount = Session().query(db._KeyVal).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
103 self.failUnless(orig_keycount > 0, orig_keycount)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
104
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
105 #queries
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
106 q0list = list(db.query().all())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
107 q1list = list(db.query())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
108 q2list = list(db)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
109
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
110 self.failUnless(q0list == q1list, (q0list,q1list))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
111 self.failUnless(q0list == q2list, (q0list,q1list))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
112
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
113 self.failUnless(len(q0list) == len(jlist))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
114
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
115 for i, (j, q) in enumerate(zip(jlist, q0list)):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
116 jitems = list(j.items())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
117 qitems = list(q.items())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
118 jitems.sort()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
119 qitems.sort()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
120 if jitems != qitems:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
121 print i
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
122 print jitems
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
123 print qitems
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
124 self.failUnless(jitems == qitems, (jitems, qitems))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
125
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
126 def test_query_0(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
127 Session, t_dict, t_pair, t_link = self.go()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
128
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
129 db = DbHandle(*self.go())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
130
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
131 def jobs():
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
132 dvalid, dtest = 'dvalid', 'dtest file'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
133 desc = 'debugging'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
134 for lr in [0.001]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
135 for scale in [0.0001 * math.sqrt(10.0)**i for i in range(4)]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
136 for rng_seed in [4, 5, 6]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
137 for priority in [None, 1]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
138 yield dict(locals())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
139
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
140 jlist = list(jobs())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
141 assert len(jlist) == 1*4*3*2
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
142 for i, dct in enumerate(jobs()):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
143 t = db.insert(**dct)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
144
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
145 qlist = list(db.query(rng_seed=5))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
146 self.failUnless(len(qlist) == len(jlist)/3)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
147
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
148 jlist5 = [j for j in jlist if j['rng_seed'] == 5]
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
149
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
150 for i, (j, q) in enumerate(zip(jlist5, qlist)):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
151 jitems = list(j.items())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
152 qitems = list(q.items())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
153 jitems.sort()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
154 qitems.sort()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
155 if jitems != qitems:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
156 print i
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
157 print jitems
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
158 print qitems
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
159 self.failUnless(jitems == qitems, (jitems, qitems))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
160
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
161 def test_delete_keywise(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
162 Session, t_dict, t_pair, t_link = self.go()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
163
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
164 db = DbHandle(*self.go())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
165
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
166 def jobs():
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
167 dvalid, dtest = 'dvalid', 'dtest file'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
168 desc = 'debugging'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
169 for lr in [0.001]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
170 for scale in [0.0001 * math.sqrt(10.0)**i for i in range(4)]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
171 for rng_seed in [4, 5, 6]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
172 for priority in [None, 1]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
173 yield dict(locals())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
174
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
175 jlist = list(jobs())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
176 assert len(jlist) == 1*4*3*2
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
177 for i, dct in enumerate(jobs()):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
178 t = db.insert(**dct)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
179
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
180 orig_keycount = Session().query(db._KeyVal).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
181
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
182 del_count = Session().query(db._KeyVal).filter_by(name='rng_seed',
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
183 fval=5.0).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
184 self.failUnless(del_count == 8, del_count)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
185
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
186 #delete all the rng_seed = 5 entries
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
187 qlist_before = list(db.query(rng_seed=5))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
188 for q in qlist_before:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
189 del q['rng_seed']
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
190
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
191 #check that it's gone from our objects
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
192 for q in qlist_before:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
193 self.failUnless('rng_seed' not in q) #via __contains__
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
194 self.failUnless('rng_seed' not in q.keys()) #via keys()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
195 exc=None
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
196 try:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
197 r = q['rng_seed'] # via __getitem__
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
198 print 'r,', r
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
199 except KeyError, e:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
200 pass
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
201
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
202 #check that it's gone from dictionaries in the database
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
203 qlist_after = list(db.query(rng_seed=5))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
204 self.failUnless(qlist_after == [])
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
205
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
206 #check that exactly 8 keys were removed
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
207 new_keycount = Session().query(db._KeyVal).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
208 self.failUnless(orig_keycount == new_keycount + 8, (orig_keycount,
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
209 new_keycount))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
210
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
211 #check that no keys have rng_seed == 5
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
212 gone_count = Session().query(db._KeyVal).filter_by(name='rng_seed',
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
213 fval=5.0).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
214 self.failUnless(gone_count == 0, gone_count)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
215
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
216
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
217 def test_delete_dictwise(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
218 Session, t_dict, t_pair, t_link = self.go()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
219
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
220 db = DbHandle(*self.go())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
221
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
222 def jobs():
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
223 dvalid, dtest = 'dvalid', 'dtest file'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
224 desc = 'debugging'
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
225 for lr in [0.001]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
226 for scale in [0.0001 * math.sqrt(10.0)**i for i in range(4)]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
227 for rng_seed in [4, 5, 6]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
228 for priority in [None, 1]:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
229 yield dict(locals())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
230
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
231 jlist = list(jobs())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
232 assert len(jlist) == 1*4*3*2
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
233 for i, dct in enumerate(jobs()):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
234 t = db.insert(**dct)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
235
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
236 orig_keycount = Session().query(db._KeyVal).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
237 orig_dctcount = Session().query(db._Dict).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
238 self.failUnless(orig_dctcount == len(jlist))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
239
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
240 #delete all the rng_seed = 5 dictionaries
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
241 qlist_before = list(db.query(rng_seed=5))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
242 for q in qlist_before:
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
243 q.delete()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
244
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
245 #check that the right number has been removed
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
246 post_dctcount = Session().query(db._Dict).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
247 self.failUnless(post_dctcount == len(jlist)-8)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
248
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
249 #check that the remaining ones are correct
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
250 for a, b, in zip(
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
251 [j for j in jlist if j['rng_seed'] != 5],
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
252 Session().query(db._Dict).all()):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
253 self.failUnless(a == b)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
254
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
255 #check that the keys have all been removed
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
256 n_keys_per_dict = 8
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
257 new_keycount = Session().query(db._KeyVal).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
258 self.failUnless(orig_keycount - 8 * n_keys_per_dict == new_keycount, (orig_keycount,
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
259 new_keycount))
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
260
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
261
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
262 def test_setitem_0(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
263 Session, t_dict, t_pair, t_link = self.go()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
264
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
265 db = DbHandle(*self.go())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
266
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
267 b0 = 6.0
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
268 b1 = 9.0
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
269
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
270 job = dict(a=0, b=b0, c='hello')
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
271
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
272 dbjob = db.insert(**job)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
273
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
274 dbjob['b'] = b1
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
275
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
276 #check that the change is in db
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
277 qjob = Session().query(db._Dict).filter(db._Dict._attrs.any(name='b',
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
278 fval=b1)).first()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
279 self.failIf(qjob is dbjob)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
280 self.failUnless(qjob == dbjob)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
281
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
282 #check that the b:b0 key is gone
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
283 count = Session().query(db._KeyVal).filter_by(name='b', fval=b0).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
284 self.failUnless(count == 0, count)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
285
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
286 #check that the b:b1 key is there
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
287 count = Session().query(db._KeyVal).filter_by(name='b', fval=b1).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
288 self.failUnless(count == 1, count)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
289
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
290 def test_setitem_1(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
291 """replace with different sql type"""
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
292 Session, t_dict, t_pair, t_link = self.go()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
293
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
294 db = DbHandle(*self.go())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
295
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
296 b0 = 6.0
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
297 b1 = 'asdf' # a different dtype
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
298
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
299 job = dict(a=0, b=b0, c='hello')
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
300
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
301 dbjob = db.insert(**job)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
302
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
303 dbjob['b'] = b1
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
304
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
305 #check that the change is in db
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
306 qjob = Session().query(db._Dict).filter(db._Dict._attrs.any(name='b',
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
307 sval=b1)).first()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
308 self.failIf(qjob is dbjob)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
309 self.failUnless(qjob == dbjob)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
310
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
311 #check that the b:b0 key is gone
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
312 count = Session().query(db._KeyVal).filter_by(name='b', fval=b0).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
313 self.failUnless(count == 0, count)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
314
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
315 #check that the b:b1 key is there
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
316 count = Session().query(db._KeyVal).filter_by(name='b', sval=b1,
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
317 fval=None).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
318 self.failUnless(count == 1, count)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
319
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
320 def test_setitem_2(self):
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
321 """replace with different number type"""
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
322 Session, t_dict, t_pair, t_link = self.go()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
323
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
324 db = DbHandle(*self.go())
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
325
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
326 b0 = 6.0
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
327 b1 = 7
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
328
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
329 job = dict(a=0, b=b0, c='hello')
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
330
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
331 dbjob = db.insert(**job)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
332
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
333 dbjob['b'] = b1
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
334
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
335 #check that the change is in db
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
336 qjob = Session().query(db._Dict).filter(db._Dict._attrs.any(name='b',
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
337 fval=b1)).first()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
338 self.failIf(qjob is dbjob)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
339 self.failUnless(qjob == dbjob)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
340
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
341 #check that the b:b0 key is gone
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
342 count = Session().query(db._KeyVal).filter_by(name='b', fval=b0,ntype=1).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
343 self.failUnless(count == 0, count)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
344
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
345 #check that the b:b1 key is there
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
346 count = Session().query(db._KeyVal).filter_by(name='b', fval=b1,ntype=0).count()
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
347 self.failUnless(count == 1, count)
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
348
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
349
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
350 if __name__ == '__main__':
|
James Bergstra <bergstrj@iro.umontreal.ca>
parents:
diff
changeset
|
351 unittest.main()
|