Changeset 32c160a in sasmodels for sasmodels/gen.py
- Timestamp:
- Aug 25, 2014 12:55:08 AM (10 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:
- 13d86bc
- Parents:
- 1f21edf
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/gen.py
rce27e21 r32c160a 316 316 return "\n".join(lines) 317 317 318 def make_doc(kernelfile, info, doc): 319 doc = doc%{'parameters': make_partable(info)} 320 return doc 321 322 def make_model(kernelfile, info, source): 318 def _search(search_path, filename): 319 """ 320 Find *filename* in *search_path*. 321 322 Raises ValueError if file does not exist. 323 """ 324 for path in search_path: 325 target = os.path.join(path, filename) 326 if os.path.exists(target): 327 return target 328 raise ValueError("%r not found in %s"%(filename, search_path)) 329 330 def make_model(search_path, info): 323 331 kernel_Iq = make_kernel(info, is_2D=False) 324 332 kernel_Iqxy = make_kernel(info, is_2D=True) 325 path = os.path.dirname(kernelfile) 326 extra = [open("%s/%s"%(path,f)).read() for f in info['include']] 327 kernel = "\n\n".join([KERNEL_HEADER]+extra+[source, kernel_Iq, kernel_Iqxy]) 333 source = [open(_search(search_path, f)).read() for f in info['source']] 334 kernel = "\n\n".join([KERNEL_HEADER]+source+[kernel_Iq, kernel_Iqxy]) 328 335 return kernel 329 330 def parse_file(kernelfile):331 source = open(kernelfile).read()332 333 # select parameters out of the source file334 parts = source.split("PARAMETERS")335 if len(parts) != 3:336 raise ValueError("PARAMETERS block missing from %r"%kernelfile)337 info_source = parts[1].strip()338 try:339 info = relaxed_loads(info_source)340 except:341 print "in json text:"342 print "\n".join("%2d: %s"%(i+1,s)343 for i,s in enumerate(info_source.split('\n')))344 raise345 #raise ValueError("PARAMETERS block could not be parsed from %r"%kernelfile)346 347 # select documentation out of the source file348 parts = source.split("DOCUMENTATION")349 if len(parts) == 3:350 doc = make_doc(kernelfile, info, parts[1].strip())351 elif len(parts) == 1:352 raise ValueError("DOCUMENTATION block is missing from %r"%kernelfile)353 else:354 raise ValueError("DOCUMENTATION block incorrect from %r"%kernelfile)355 356 return source, info, doc357 336 358 337 def categorize_parameters(pars): … … 408 387 return partype 409 388 410 def make(kernel file):389 def make(kernel_module): 411 390 """ 412 391 Build an OpenCL function from the source in *kernelfile*. … … 415 394 will be a JSON definition containing 416 395 """ 396 # TODO: allow Iq and Iqxy to be defined in python 397 from os.path import abspath, dirname, join as joinpath 417 398 #print kernelfile 418 source, info, doc = parse_file(kernelfile) 419 info['filename'] = kernelfile 420 info['parameters'] = COMMON_PARAMETERS + info['parameters'] 399 info = dict( 400 filename = abspath(kernel_module.__file__), 401 name = kernel_module.name, 402 title = kernel_module.title, 403 source = kernel_module.source, 404 description = kernel_module.description, 405 parameters = COMMON_PARAMETERS + kernel_module.parameters, 406 ER = getattr(kernel_module, 'ER', None), 407 VR = getattr(kernel_module, 'VR', None), 408 ) 409 info['limits'] = dict((p[0],p[3]) for p in info['parameters']) 421 410 info['partype'] = categorize_parameters(info['parameters']) 422 info['limits'] = dict((p[0],p[3]) for p in info['parameters']) 423 doc = make_doc(kernelfile, info, doc) 424 model = make_model(kernelfile, info, source) 425 return model, info, doc 411 412 search_path = [ dirname(info['filename']), 413 abspath(joinpath(dirname(__file__),'models')) ] 414 source = make_model(search_path, info) 415 416 return source, info 426 417 427 418
Note: See TracChangeset
for help on using the changeset viewer.