Changeset 303d8d6 in sasmodels for sasmodels/kerneldll.py
- Timestamp:
- Mar 21, 2016 2:49:21 AM (8 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:
- 4a72d1a, 3a45c2c
- Parents:
- 03cac08
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/kerneldll.py
r03cac08 r303d8d6 142 142 143 143 source = generate.convert_type(source, dtype) 144 source_files = generate.model_sources(model_info) + [model_info['filename']] 144 source_files = (generate.model_sources(model_info) 145 + [model_info['filename']] 146 + generate.model_templates()) 145 147 dll = dll_path(model_info, dtype) 146 148 newest = max(os.path.getmtime(f) for f in source_files) … … 172 174 return DllModel(filename, model_info, dtype=dtype) 173 175 174 175 IQ_ARGS = [c_void_p, c_void_p, c_int]176 IQXY_ARGS = [c_void_p, c_void_p, c_void_p, c_int]177 178 176 class DllModel(object): 179 177 """ … … 197 195 198 196 def _load_dll(self): 199 Nfixed1d = len(self.info['partype']['fixed-1d'])200 Nfixed2d = len(self.info['partype']['fixed-2d'])201 Npd1d = len(self.info['partype']['pd-1d'])202 Npd2d = len(self.info['partype']['pd-2d'])203 204 197 #print("dll", self.dllpath) 205 198 try: … … 212 205 else c_double if self.dtype == generate.F64 213 206 else c_longdouble) 214 pd_args_1d = [c_void_p, fp] + [c_int]*Npd1d if Npd1d else [] 215 pd_args_2d = [c_void_p, fp] + [c_int]*Npd2d if Npd2d else [] 207 208 # int, int, int, int*, double*, double*, double*, double*, double*, double 209 argtypes = [c_int]*3 + [c_void_p]*5 + [fp] 216 210 self.Iq = self.dll[generate.kernel_name(self.info, False)] 217 self.Iq.argtypes = IQ_ARGS + pd_args_1d + [fp]*Nfixed1d218 219 211 self.Iqxy = self.dll[generate.kernel_name(self.info, True)] 220 self.Iqxy.argtypes = IQXY_ARGS + pd_args_2d + [fp]*Nfixed2d 212 self.Iq.argtypes = argtypes 213 self.Iqxy.argtypes = argtypes 221 214 222 215 def __getstate__(self): … … 263 256 self.q_input = q_input 264 257 self.kernel = kernel 265 self.res = np.empty(q_input.nq , q_input.dtype)258 self.res = np.empty(q_input.nq+3, q_input.dtype) 266 259 dim = '2d' if q_input.is_2d else '1d' 267 self.fixed_pars = model_info['partype']['fixed-' + dim] 268 self.pd_pars = model_info['partype']['pd-' + dim] 260 self.parameters = model_info['par_type'][dim] 269 261 270 262 # In dll kernel, but not in opencl kernel 271 263 self.p_res = self.res.ctypes.data 272 264 273 def __call__(self, fixed_pars, pd_pars, cutoff):265 def __call__(self, details, values, weights, cutoff): 274 266 real = (np.float32 if self.q_input.dtype == generate.F32 275 267 else np.float64 if self.q_input.dtype == generate.F64 276 268 else np.float128) 277 278 nq = c_int(self.q_input.nq) 279 if pd_pars: 280 cutoff = real(cutoff) 281 loops_N = [np.uint32(len(p[0])) for p in pd_pars] 282 loops = np.hstack(pd_pars) 283 loops = np.ascontiguousarray(loops.T, self.q_input.dtype).flatten() 284 p_loops = loops.ctypes.data 285 dispersed = [p_loops, cutoff] + loops_N 286 else: 287 dispersed = [] 288 fixed = [real(p) for p in fixed_pars] 289 args = self.q_input.q_pointers + [self.p_res, nq] + dispersed + fixed 290 #print(pars) 269 args = [ 270 self.q_input.nq, # nq 271 0, # pd_start 272 1, # pd_stop 273 details.ctypes.data, # problem 274 weights.ctypes.data, # weights 275 values.ctypes.data, #pars 276 self.q_input.q_pointers[0], #q 277 self.p_res, # results 278 real(cutoff), # cutoff 279 ] 291 280 self.kernel(*args) 292 281 293 return self.res 282 return self.res[:-3] 294 283 295 284 def release(self):
Note: See TracChangeset
for help on using the changeset viewer.