Changeset dd16e07 in sasmodels
- Timestamp:
- Sep 25, 2018 7:15:47 PM (6 years ago)
- Branches:
- master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 284bdd4, da7b26b
- Parents:
- 2015f02 (diff), 91bd550 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - git-author:
- Paul Butler <butlerpd@…> (09/25/18 19:15:47)
- git-committer:
- GitHub <noreply@…> (09/25/18 19:15:47)
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/custom/__init__.py
r0f48f1e r91bd550 37 37 return module 38 38 39 _MODULE_CACHE = {} 40 _MODULE_DEPENDS = {} 41 _MODULE_DEPENDS_STACK = [] 39 42 def load_custom_kernel_module(path): 40 43 """load SAS kernel from *path* as *sasmodels.custom.modelname*""" 41 44 # Pull off the last .ext if it exists; there may be others 42 45 name = basename(splitext(path)[0]) 43 # Placing the model in the 'sasmodels.custom' name space. 44 kernel_module = load_module_from_path('sasmodels.custom.'+name, 45 os.path.expanduser(path)) 46 return kernel_module 46 path = os.path.expanduser(path) 47 48 # reload module if necessary 49 if need_reload(path): 50 # Push to the next dependency level 51 _MODULE_DEPENDS_STACK.append(path) 52 _MODULE_DEPENDS[path] = set([path]) 53 54 # Load module into the 'sasmodels.custom' name space. 55 # If this triggers any submodule loads then they will be added 56 # as dependencies below when _MODULE_DEPENDS_STACK is not empty. 57 module = load_module_from_path('sasmodels.custom.'+name, path) 58 59 # Pop the dependency level 60 _MODULE_DEPENDS_STACK.pop() 61 62 # TODO: include external C code in the dependencies 63 # If we had the model info structure we could do the following: 64 # _MODEL_DEPENDS[path].extend(generate.model_sources(info)) 65 # but at this point all we have is the module. Don't want to 66 # repeat the logic in modelinfo.make_model_info. 67 68 # Cache the module with the newest timestamp 69 timestamp = max(os.path.getmtime(f) for f in _MODULE_DEPENDS[path]) 70 _MODULE_CACHE[path] = module, timestamp 71 72 #print("loading", os.path.basename(path), _MODULE_CACHE[path][1], 73 # [os.path.basename(p) for p in _MODULE_DEPENDS[path]]) 74 75 if _MODULE_DEPENDS_STACK: 76 # Add child and all its dependence to the parent module 77 working_on = _MODULE_DEPENDS_STACK[-1] 78 _MODULE_DEPENDS[working_on].update(_MODULE_DEPENDS[path]) 79 80 return _MODULE_CACHE[path][0] 81 82 def need_reload(path): 83 # TODO: fails if a dependency has a modification time in the future 84 # If the newest dependency has a time stamp in the future, then this 85 # will be recorded as the cached time. When a second dependency 86 # is updated to the current time stamp, it will still be considered 87 # older than the current build and the reload will not be triggered. 88 # Could instead treat all future times as 0 here and in the code above 89 # which records the newest timestamp. This will force a reload when 90 # the future time is reached, but other than that should perform 91 # correctly. Probably not worth the extra code... 92 _, cache_time = _MODULE_CACHE.get(path, (None, -1)) 93 depends = _MODULE_DEPENDS.get(path, [path]) 94 return any(cache_time < os.path.getmtime(p) for p in depends) -
sasmodels/kernelpy.py
r108e70e r91bd550 37 37 self.info = model_info 38 38 self.dtype = np.dtype('d') 39 logger.info("load python model " + self.info.name)40 39 41 40 def make_kernel(self, q_vectors): -
sasmodels/sasview_model.py
rd533590 r839fd68 62 62 #: set of defined models (standard and custom) 63 63 MODELS = {} # type: Dict[str, SasviewModelType] 64 # TODO: remove unused MODEL_BY_PATH cache once sasview no longer references it 64 65 #: custom model {path: model} mapping so we can check timestamps 65 66 MODEL_BY_PATH = {} # type: Dict[str, SasviewModelType] … … 106 107 Load a custom model given the model path. 107 108 """ 108 model = MODEL_BY_PATH.get(path, None)109 if model is not None and model.timestamp == getmtime(path):110 #logger.info("Model already loaded %s", path)111 return model112 113 109 #logger.info("Loading model %s", path) 114 110 kernel_module = custom.load_custom_kernel_module(path) … … 127 123 model_info = modelinfo.make_model_info(kernel_module) 128 124 model = make_model_from_info(model_info) 129 model.timestamp = getmtime(path)130 125 131 126 # If a model name already exists and we are loading a different model, … … 144 139 145 140 MODELS[model.name] = model 146 MODEL_BY_PATH[path] = model147 141 return model 148 142 -
doc/guide/plugin.rst
rf796469 r2015f02 423 423 calculations, but instead rely on numerical integration to compute the 424 424 appropriately smeared pattern. 425 426 Each .py file also contains a function:: 427 428 def random(): 429 ... 430 431 This function provides a model-specific random parameter set which shows model 432 features in the USANS to SANS range. For example, core-shell sphere sets the 433 outer radius of the sphere logarithmically in `[20, 20,000]`, which sets the Q 434 value for the transition from flat to falling. It then uses a beta distribution 435 to set the percentage of the shape which is shell, giving a preference for very 436 thin or very thick shells (but never 0% or 100%). Using `-sets=10` in sascomp 437 should show a reasonable variety of curves over the default sascomp q range. 438 The parameter set is returned as a dictionary of `{parameter: value, ...}`. 439 Any model parameters not included in the dictionary will default according to 440 the code in the `_randomize_one()` function from sasmodels/compare.py. 425 441 426 442 Python Models
Note: See TracChangeset
for help on using the changeset viewer.