Changeset 8224d24 in sasmodels for sasmodels/autoc.py
- Timestamp:
- Dec 18, 2017 11:17:26 AM (6 years ago)
- Children:
- 1941ec6
- Parents:
- 1ddb794 (diff), ddfdb16 (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/autoc.py
r1ddb794 r8224d24 92 92 # not special: add function to translate stack 93 93 translate.append((name, obj)) 94 elif isinstance(obj, float):94 elif isinstance(obj, (int, float, list, tuple, np.ndarray)): 95 95 constants[name] = obj 96 snippets.append('#line 1 "%s"' % escaped_filename) 97 snippets.append("const double %s = %.15g;"%(name, obj)) 98 elif isinstance(obj, int): 99 constants[name] = obj 100 snippets.append('#line 1 "%s"' % escaped_filename) 101 snippets.append("const int %s = %d;"%(name, obj)) 102 elif isinstance(obj, (list, tuple, np.ndarray)): 103 constants[name] = obj 104 # extend constant arrays to a multiple of 4; not sure if this 105 # is necessary, but some OpenCL targets broke if the number 106 # of parameters in the parameter table was not a multiple of 4, 107 # so do it for all constant arrays to be safe. 108 if len(obj)%4 != 0: 109 obj = list(obj) + [0.]*(4-len(obj)) 110 vals = ", ".join("%.15g"%v for v in obj) 111 snippets.append('#line 1 "%s"' % escaped_filename) 112 snippets.append("const double %s[] = {%s};" %(name, vals)) 96 # Claim all constants are declared on line 1 97 snippets.append('#line 1 "%s"'%escaped_filename) 98 snippets.append(define_constant(name, obj)) 113 99 elif isinstance(obj, special.Gauss): 114 constants["GAUSS_N"] = obj.n115 constants["GAUSS_Z"] = obj.z116 constants["GAUSS_W"] = obj.w100 #constants["GAUSS_N"] = obj.n 101 #constants["GAUSS_Z"] = obj.z 102 #constants["GAUSS_W"] = obj.w 117 103 libs.append('lib/gauss%d.c'%obj.n) 118 104 source = (source.replace(name+'.n', 'GAUSS_N') … … 142 128 info.Iq = info.Iqxy = info.form_volume = None 143 129 130 def define_constant(name, value): 131 if isinstance(value, int): 132 parts = ["int ", name, " = ", "%d"%value, ";"] 133 elif isinstance(value, float): 134 parts = ["double ", name, " = ", "%.15g"%value, ";"] 135 else: 136 # extend constant arrays to a multiple of 4; not sure if this 137 # is necessary, but some OpenCL targets broke if the number 138 # of parameters in the parameter table was not a multiple of 4, 139 # so do it for all constant arrays to be safe. 140 if len(value)%4 != 0: 141 value = list(value) + [0.]*(4 - len(value)%4) 142 elements = ["%.15g"%v for v in value] 143 parts = ["double ", name, "[]", " = ", 144 "{\n ", ", ".join(elements), "\n};"] 145 return "".join(parts) 146 144 147 145 148 # Modified from the following:
Note: See TracChangeset
for help on using the changeset viewer.