- Timestamp:
- Oct 30, 2018 8:29:12 AM (5 years ago)
- Branches:
- master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- f64b154, bd91e8f, a4f1a73, 9d8a027, 2c4a190, c11d09f
- Parents:
- 275b07dc (diff), ce1eed5 (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 Kienzle <pkienzle@…> (10/30/18 08:29:12)
- git-committer:
- GitHub <noreply@…> (10/30/18 08:29:12)
- Location:
- sasmodels
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/kernelpy.py
r91bd550 r12eec1e 37 37 self.info = model_info 38 38 self.dtype = np.dtype('d') 39 logger.info("make python model " + self.info.name) 39 40 40 41 def make_kernel(self, q_vectors): -
sasmodels/model_test.py
r012cd34 r12eec1e 47 47 import sys 48 48 import unittest 49 import traceback 49 50 50 51 try: … … 74 75 # pylint: enable=unused-import 75 76 76 77 77 def make_suite(loaders, models): 78 78 # type: (List[str], List[str]) -> unittest.TestSuite … … 86 86 *models* is the list of models to test, or *["all"]* to test all models. 87 87 """ 88 ModelTestCase = _hide_model_case_from_nose()89 88 suite = unittest.TestSuite() 90 89 … … 95 94 skip = [] 96 95 for model_name in models: 97 if model_name in skip: 98 continue 99 model_info = load_model_info(model_name) 100 101 #print('------') 102 #print('found tests in', model_name) 103 #print('------') 104 105 # if ispy then use the dll loader to call pykernel 106 # don't try to call cl kernel since it will not be 107 # available in some environmentes. 108 is_py = callable(model_info.Iq) 109 110 # Some OpenCL drivers seem to be flaky, and are not producing the 111 # expected result. Since we don't have known test values yet for 112 # all of our models, we are instead going to compare the results 113 # for the 'smoke test' (that is, evaluation at q=0.1 for the default 114 # parameters just to see that the model runs to completion) between 115 # the OpenCL and the DLL. To do this, we define a 'stash' which is 116 # shared between OpenCL and DLL tests. This is just a list. If the 117 # list is empty (which it will be when DLL runs, if the DLL runs 118 # first), then the results are appended to the list. If the list 119 # is not empty (which it will be when OpenCL runs second), the results 120 # are compared to the results stored in the first element of the list. 121 # This is a horrible stateful hack which only makes sense because the 122 # test suite is thrown away after being run once. 123 stash = [] 124 125 if is_py: # kernel implemented in python 126 test_name = "%s-python"%model_name 127 test_method_name = "test_%s_python" % model_info.id 96 if model_name not in skip: 97 model_info = load_model_info(model_name) 98 _add_model_to_suite(loaders, suite, model_info) 99 100 return suite 101 102 def _add_model_to_suite(loaders, suite, model_info): 103 ModelTestCase = _hide_model_case_from_nose() 104 105 #print('------') 106 #print('found tests in', model_name) 107 #print('------') 108 109 # if ispy then use the dll loader to call pykernel 110 # don't try to call cl kernel since it will not be 111 # available in some environmentes. 112 is_py = callable(model_info.Iq) 113 114 # Some OpenCL drivers seem to be flaky, and are not producing the 115 # expected result. Since we don't have known test values yet for 116 # all of our models, we are instead going to compare the results 117 # for the 'smoke test' (that is, evaluation at q=0.1 for the default 118 # parameters just to see that the model runs to completion) between 119 # the OpenCL and the DLL. To do this, we define a 'stash' which is 120 # shared between OpenCL and DLL tests. This is just a list. If the 121 # list is empty (which it will be when DLL runs, if the DLL runs 122 # first), then the results are appended to the list. If the list 123 # is not empty (which it will be when OpenCL runs second), the results 124 # are compared to the results stored in the first element of the list. 125 # This is a horrible stateful hack which only makes sense because the 126 # test suite is thrown away after being run once. 127 stash = [] 128 129 if is_py: # kernel implemented in python 130 test_name = "%s-python"%model_info.name 131 test_method_name = "test_%s_python" % model_info.id 132 test = ModelTestCase(test_name, model_info, 133 test_method_name, 134 platform="dll", # so that 135 dtype="double", 136 stash=stash) 137 suite.addTest(test) 138 else: # kernel implemented in C 139 140 # test using dll if desired 141 if 'dll' in loaders or not use_opencl(): 142 test_name = "%s-dll"%model_info.name 143 test_method_name = "test_%s_dll" % model_info.id 128 144 test = ModelTestCase(test_name, model_info, 129 test_method_name,130 platform="dll", # so that131 dtype="double",132 stash=stash)145 test_method_name, 146 platform="dll", 147 dtype="double", 148 stash=stash) 133 149 suite.addTest(test) 134 else: # kernel implemented in C 135 136 # test using dll if desired 137 if 'dll' in loaders or not use_opencl(): 138 test_name = "%s-dll"%model_name 139 test_method_name = "test_%s_dll" % model_info.id 140 test = ModelTestCase(test_name, model_info, 141 test_method_name, 142 platform="dll", 143 dtype="double", 144 stash=stash) 145 suite.addTest(test) 146 147 # test using opencl if desired and available 148 if 'opencl' in loaders and use_opencl(): 149 test_name = "%s-opencl"%model_name 150 test_method_name = "test_%s_opencl" % model_info.id 151 # Using dtype=None so that the models that are only 152 # correct for double precision are not tested using 153 # single precision. The choice is determined by the 154 # presence of *single=False* in the model file. 155 test = ModelTestCase(test_name, model_info, 156 test_method_name, 157 platform="ocl", dtype=None, 158 stash=stash) 159 #print("defining", test_name) 160 suite.addTest(test) 161 162 return suite 150 151 # test using opencl if desired and available 152 if 'opencl' in loaders and use_opencl(): 153 test_name = "%s-opencl"%model_info.name 154 test_method_name = "test_%s_opencl" % model_info.id 155 # Using dtype=None so that the models that are only 156 # correct for double precision are not tested using 157 # single precision. The choice is determined by the 158 # presence of *single=False* in the model file. 159 test = ModelTestCase(test_name, model_info, 160 test_method_name, 161 platform="ocl", dtype=None, 162 stash=stash) 163 #print("defining", test_name) 164 suite.addTest(test) 165 163 166 164 167 def _hide_model_case_from_nose(): … … 348 351 return abs(target-actual)/shift < 1.5*10**-digits 349 352 350 def run_one(model): 351 # type: (str) -> str 352 """ 353 Run the tests for a single model, printing the results to stdout. 354 355 *model* can by a python file, which is handy for checking user defined 356 plugin models. 353 # CRUFT: old interface; should be deprecated and removed 354 def run_one(model_name): 355 # msg = "use check_model(model_info) rather than run_one(model_name)" 356 # warnings.warn(msg, category=DeprecationWarning, stacklevel=2) 357 try: 358 model_info = load_model_info(model_name) 359 except Exception: 360 output = traceback.format_exc() 361 return output 362 363 success, output = check_model(model_info) 364 return output 365 366 def check_model(model_info): 367 # type: (ModelInfo) -> str 368 """ 369 Run the tests for a single model, capturing the output. 370 371 Returns success status and the output string. 357 372 """ 358 373 # Note that running main() directly did not work from within the … … 369 384 # Build a test suite containing just the model 370 385 loaders = ['opencl'] if use_opencl() else ['dll'] 371 models = [model] 372 try: 373 suite = make_suite(loaders, models) 374 except Exception: 375 import traceback 376 stream.writeln(traceback.format_exc()) 377 return 386 suite = unittest.TestSuite() 387 _add_model_to_suite(loaders, suite, model_info) 378 388 379 389 # Warn if there are no user defined tests. … … 390 400 for test in suite: 391 401 if not test.info.tests: 392 stream.writeln("Note: %s has no user defined tests."%model )402 stream.writeln("Note: %s has no user defined tests."%model_info.name) 393 403 break 394 404 else: … … 406 416 output = stream.getvalue() 407 417 stream.close() 408 return output418 return result.wasSuccessful(), output 409 419 410 420 -
sasmodels/sasview_model.py
rbd547d0 rce1eed5 803 803 return value, [value], [1.0] 804 804 805 @classmethod 806 def runTests(cls): 807 """ 808 Run any tests built into the model and captures the test output. 809 810 Returns success flag and output 811 """ 812 from .model_test import check_model 813 return check_model(cls._model_info) 814 805 815 def test_cylinder(): 806 816 # type: () -> float -
sasmodels/models/spinodal.py
r475ff58 r93fe8a1 12 12 where $x=q/q_0$, $q_0$ is the peak position, $I_{max}$ is the intensity 13 13 at $q_0$ (parameterised as the $scale$ parameter), and $B$ is a flat 14 background. The spinodal wavelength is given by $2\pi/q_0$. 14 background. The spinodal wavelength, $\Lambda$, is given by $2\pi/q_0$. 15 16 The definition of $I_{max}$ in the literature varies. Hashimoto *et al* (1991) 17 define it as 18 19 .. math:: 20 I_{max} = \Lambda^3\Delta\rho^2 21 22 whereas Meier & Strobl (1987) give 23 24 .. math:: 25 I_{max} = V_z\Delta\rho^2 26 27 where $V_z$ is the volume per monomer unit. 15 28 16 29 The exponent $\gamma$ is equal to $d+1$ for off-critical concentration … … 28 41 29 42 H. Furukawa. Dynamics-scaling theory for phase-separating unmixing mixtures: 30 Growth rates of droplets and scaling properties of autocorrelation functions. 31 Physica A 123,497 (1984). 43 Growth rates of droplets and scaling properties of autocorrelation functions. 44 Physica A 123, 497 (1984). 45 46 H. Meier & G. Strobl. Small-Angle X-ray Scattering Study of Spinodal 47 Decomposition in Polystyrene/Poly(styrene-co-bromostyrene) Blends. 48 Macromolecules 20, 649-654 (1987). 49 50 T. Hashimoto, M. Takenaka & H. Jinnai. Scattering Studies of Self-Assembling 51 Processes of Polymer Blends in Spinodal Decomposition. 52 J. Appl. Cryst. 24, 457-466 (1991). 32 53 33 54 Revision History … … 35 56 36 57 * **Author:** Dirk Honecker **Date:** Oct 7, 2016 37 * **Revised:** Steve King **Date:** Sep 7, 201858 * **Revised:** Steve King **Date:** Oct 25, 2018 38 59 """ 39 60 -
sasmodels/special.py
rdf69efa rfba9ca0 113 113 The standard math function, tgamma(x) is unstable for $x < 1$ 114 114 on some platforms. 115 116 sas_gammaln(x): 117 log gamma function sas_gammaln\ $(x) = \log \Gamma(|x|)$. 118 119 The standard math function, lgamma(x), is incorrect for single 120 precision on some platforms. 121 122 sas_gammainc(a, x), sas_gammaincc(a, x): 123 Incomplete gamma function 124 sas_gammainc\ $(a, x) = \int_0^x t^{a-1}e^{-t}\,dt / \Gamma(a)$ 125 and complementary incomplete gamma function 126 sas_gammaincc\ $(a, x) = \int_x^\infty t^{a-1}e^{-t}\,dt / \Gamma(a)$ 115 127 116 128 sas_erf(x), sas_erfc(x): … … 207 219 from numpy import pi, nan, inf 208 220 from scipy.special import gamma as sas_gamma 221 from scipy.special import gammaln as sas_gammaln 222 from scipy.special import gammainc as sas_gammainc 223 from scipy.special import gammaincc as sas_gammaincc 209 224 from scipy.special import erf as sas_erf 210 225 from scipy.special import erfc as sas_erfc
Note: See TracChangeset
for help on using the changeset viewer.