Changeset cd3dba0 in sasmodels for sasmodels/generate.py
- Timestamp:
- Nov 23, 2015 7:14:54 PM (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:
- 3a45c2c
- Parents:
- 0e9048f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/generate.py
r4eac427 rcd3dba0 99 99 The kernel module must set variables defining the kernel meta data: 100 100 101 *name* is the model name 101 *id* is an implicit variable formed from the filename. It will be 102 a valid python identifier, and will be used as the reference into 103 the html documentation, with '_' replaced by '-'. 104 105 *name* is the model name as displayed to the user. If it is missing, 106 it will be constructed from the id. 102 107 103 108 *title* is a short description of the model, suitable for a tool tip, … … 114 119 the kernel functions. 115 120 121 *category* is the default category for the model. Models in the 122 *structure-factor* category do not have *scale* and *background* 123 added. 124 116 125 *source* is the list of C-99 source files that must be joined to 117 126 create the OpenCL kernel functions. The files defining the functions … … 134 143 this step is significant. 135 144 136 An *info* dictionary is constructed from the kernel meta data and137 returned to the caller.138 139 Additional fields can be defined in the kernel definition file that140 are not needed for sas modelling.141 142 145 *demo* is a dictionary of parameter=value defining a set of 143 parameters to use by default when *compare* is called. 146 parameters to use by default when *compare* is called. Any 147 parameter not set in *demo* gets the initial value from the 148 parameter list. *demo* is mostly needed to set the default 149 polydispersity values for tests. 144 150 145 151 *oldname* is the name of the model in sasview before sasmodels … … 149 155 of the new model against the values of the old model before 150 156 you are ready to add the new model to sasmodels. 157 158 159 An *info* dictionary is constructed from the kernel meta data and 160 returned to the caller. 151 161 152 162 The model evaluator, function call sequence consists of q inputs and the return vector, … … 190 200 191 201 import sys 192 from os.path import abspath, dirname, join as joinpath, exists 202 from os.path import abspath, dirname, join as joinpath, exists, basename 193 203 import re 194 204 … … 233 243 # description and its parameter table. The remainder of the doc comes 234 244 # from the module docstring. 235 DOC_HEADER = """.. _%( name)s:236 237 %( label)s245 DOC_HEADER = """.. _%(id)s: 246 247 %(name)s 238 248 ======================================================= 239 249 … … 254 264 Generate the parameter table to include in the sphinx documentation. 255 265 """ 256 pars = COMMON_PARAMETERS + pars257 266 column_widths = [ 258 267 max(len(p[0]) for p in pars), … … 523 532 } 524 533 525 def make(kernel_module): 526 """ 527 Build an OpenCL/ctypes function from the definition in *kernel_module*. 528 529 The module can be loaded with a normal python import statement if you 530 know which module you need, or with __import__('sasmodels.model.'+name) 531 if the name is in a string. 532 """ 533 # TODO: allow Iq and Iqxy to be defined in python 534 def make_info(kernel_module): 535 """ 536 Interpret the model definition file, categorizing the parameters. 537 """ 534 538 #print kernelfile 539 category = getattr(kernel_module, 'category', None) 540 parameters = COMMON_PARAMETERS + kernel_module.parameters 541 # Default the demo parameters to the starting values for the individual 542 # parameters if an explicit demo parameter set has not been specified. 543 demo_parameters = getattr(kernel_module, 'demo', None) 544 if demo_parameters is None: 545 demo_parameters = dict((p[0],p[2]) for p in parameters) 546 filename = abspath(kernel_module.__file__) 547 kernel_id = basename(filename)[:-3] 548 name = getattr(kernel_module, 'name', None) 549 if name is None: 550 name = " ".join(w.capitalize() for w in kernel_id.split('_')) 535 551 info = dict( 552 id = kernel_id, # string used to load the kernel 536 553 filename=abspath(kernel_module.__file__), 537 name= kernel_module.name,554 name=name, 538 555 title=kernel_module.title, 539 556 description=kernel_module.description, 540 parameters=COMMON_PARAMETERS + kernel_module.parameters, 557 category=category, 558 parameters=parameters, 559 demo=demo_parameters, 541 560 source=getattr(kernel_module, 'source', []), 542 561 oldname=kernel_module.oldname, … … 550 569 info['partype'] = categorize_parameters(info['parameters']) 551 570 info['defaults'] = dict((p[0], p[2]) for p in info['parameters']) 552 571 return info 572 573 def make(kernel_module): 574 """ 575 Build an OpenCL/ctypes function from the definition in *kernel_module*. 576 577 The module can be loaded with a normal python import statement if you 578 know which module you need, or with __import__('sasmodels.model.'+name) 579 if the name is in a string. 580 """ 581 info = make_info(kernel_module) 553 582 # Assume if one part of the kernel is python then all parts are. 554 583 source = make_model(info) if not callable(info['Iq']) else None … … 559 588 Return the documentation for the model. 560 589 """ 561 subst = dict(name=kernel_module.name.replace('_', '-'), 562 label=" ".join(kernel_module.name.split('_')).capitalize(), 563 title=kernel_module.title, 564 parameters=make_partable(kernel_module.parameters), 590 info = make_info(kernel_module) 591 subst = dict(id=info['id'].replace('_', '-'), 592 name=info['name'], 593 title=info['title'], 594 parameters=make_partable(info['parameters']), 565 595 docs=kernel_module.__doc__) 566 596 return DOC_HEADER % subst
Note: See TracChangeset
for help on using the changeset viewer.