Changeset 32c160a in sasmodels for sasmodels/gen.py


Ignore:
Timestamp:
Aug 25, 2014 12:55:08 AM (10 years ago)
Author:
Paul Kienzle <pkienzle@…>
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
Message:

support ER/VR python kernels; move metadata to python

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/gen.py

    rce27e21 r32c160a  
    316316    return "\n".join(lines) 
    317317 
    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): 
     318def _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 
     330def make_model(search_path, info): 
    323331    kernel_Iq = make_kernel(info, is_2D=False) 
    324332    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]) 
    328335    return kernel 
    329  
    330 def parse_file(kernelfile): 
    331     source = open(kernelfile).read() 
    332  
    333     # select parameters out of the source file 
    334     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         raise 
    345         #raise ValueError("PARAMETERS block could not be parsed from %r"%kernelfile) 
    346  
    347     # select documentation out of the source file 
    348     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, doc 
    357336 
    358337def categorize_parameters(pars): 
     
    408387    return partype 
    409388 
    410 def make(kernelfile): 
     389def make(kernel_module): 
    411390    """ 
    412391    Build an OpenCL function from the source in *kernelfile*. 
     
    415394    will be a JSON definition containing 
    416395    """ 
     396    # TODO: allow Iq and Iqxy to be defined in python 
     397    from os.path import abspath, dirname, join as joinpath 
    417398    #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']) 
    421410    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 
    426417 
    427418 
Note: See TracChangeset for help on using the changeset viewer.