Changeset 3c56da87 in sasmodels for sasmodels/model_test.py
- Timestamp:
- Mar 5, 2015 12:55:38 AM (9 years ago)
- Branches:
- master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 3a45c2c
- Parents:
- b89f519
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/model_test.py
rd6adfbe r3c56da87 5 5 Usage:: 6 6 7 8 9 7 python -m sasmodels.model_test [opencl|dll|opencl_and_dll] model1 model2 ... 8 9 if model1 is 'all', then all except the remaining models will be tested 10 10 11 11 Each model is tested using the default parameters at q=0.1, (qx,qy)=(0.1,0.1), … … 60 60 Example:: 61 61 >>> D = {} 62 >>> try: 62 >>> try: 63 63 ... print D['hello'] 64 ... except Exception,exc: 64 ... except Exception,exc: 65 65 ... annotate_exception(exc, "while accessing 'D'") 66 66 ... raise … … 78 78 except: 79 79 exc.args = (" ".join((str(exc),msg)),) 80 81 def suite(loaders, models):80 81 def make_suite(loaders, models): 82 82 83 83 ModelTestCase = _hide_model_case_from_nosetests() … … 100 100 ] 101 101 tests = smoke_tests + getattr(model_definition, 'tests', []) 102 102 103 103 if tests: # in case there are no smoke tests... 104 104 #print '------' … … 143 143 model = self.loader(self.definition) 144 144 for test in self.tests: 145 pars, Q, I = test 146 147 if not isinstance(I, list): 148 I = [I] 149 if not isinstance(Q, list): 150 Q = [Q] 151 152 self.assertEqual(len(I), len(Q)) 153 154 if Q[0] == 'ER': 155 Iq = [call_ER(kernel, pars)] 156 elif Q[0] == 'VR': 157 Iq = [call_VR(kernel, pars)] 158 elif isinstance(Q[0], tuple): 159 Qx,Qy = zip(*Q) 160 Q_vectors = [np.array(Qx), np.array(Qy)] 161 kernel = make_kernel(model, Q_vectors) 162 Iq = call_kernel(kernel, pars) 163 else: 164 Q_vectors = [np.array(Q)] 165 kernel = make_kernel(model, Q_vectors) 166 Iq = call_kernel(kernel, pars) 167 168 self.assertGreater(len(Iq), 0) 169 self.assertEqual(len(I), len(Iq)) 170 171 for q, i, iq in zip(Q, I, Iq): 172 if i is None: 173 # smoke test --- make sure it runs and produces a value 174 self.assertTrue(np.isfinite(iq), 'q:%s; not finite; actual:%s' % (q, iq)) 175 else: 176 err = abs(i - iq) 177 nrm = abs(i) 178 self.assertLess(err * 10**5, nrm, 'q:%s; expected:%s; actual:%s' % (q, i, iq)) 145 self._run_one_test(model, test) 179 146 180 147 except Exception,exc: … … 182 149 raise 183 150 151 def _run_one_test(self, model, test): 152 pars, x, y = test 153 154 if not isinstance(y, list): 155 y = [y] 156 if not isinstance(x, list): 157 x = [x] 158 159 self.assertEqual(len(y), len(x)) 160 161 if x[0] == 'ER': 162 actual = [call_ER(model.info, pars)] 163 elif x[0] == 'VR': 164 actual = [call_VR(model.info, pars)] 165 elif isinstance(x[0], tuple): 166 Qx,Qy = zip(*x) 167 q_vectors = [np.array(Qx), np.array(Qy)] 168 kernel = make_kernel(model, q_vectors) 169 actual = call_kernel(kernel, pars) 170 else: 171 q_vectors = [np.array(x)] 172 kernel = make_kernel(model, q_vectors) 173 actual = call_kernel(kernel, pars) 174 175 self.assertGreater(len(actual), 0) 176 self.assertEqual(len(y), len(actual)) 177 178 for xi, yi, actual_yi in zip(x, y, actual): 179 if yi is None: 180 # smoke test --- make sure it runs and produces a value 181 self.assertTrue(np.isfinite(actual_yi), 182 'invalid f(%s): %s' % (xi, actual_yi)) 183 else: 184 err = abs(yi - actual_yi) 185 nrm = abs(yi) 186 self.assertLess(err * 10**5, nrm, 187 'f(%s); expected:%s; actual:%s' % (xi, yi, actual_yi)) 188 184 189 return ModelTestCase 185 190 … … 187 192 # let nosetests sniff out the tests 188 193 def model_tests(): 189 tests = suite(['opencl','dll'],['all'])194 tests = make_suite(['opencl','dll'],['all']) 190 195 for test_i in tests: 191 196 yield test_i.runTest … … 218 223 #run_tests(loaders, models) 219 224 runner = unittest.TextTestRunner() 220 result = runner.run( suite(loaders, models))225 result = runner.run(make_suite(loaders, models)) 221 226 return 1 if result.failures or result.errors else 0 222 227
Note: See TracChangeset
for help on using the changeset viewer.