Changeset 8224d24 in sasmodels for sasmodels/autoc.py


Ignore:
Timestamp:
Dec 18, 2017 11:17:26 AM (6 years ago)
Author:
Paul Kienzle <pkienzle@…>
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.
Message:

Merge branch 'master' of https://github.com/omereis/sasmodels

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/autoc.py

    r1ddb794 r8224d24  
    9292                    # not special: add function to translate stack 
    9393                    translate.append((name, obj)) 
    94             elif isinstance(obj, float): 
     94            elif isinstance(obj, (int, float, list, tuple, np.ndarray)): 
    9595                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)) 
    11399            elif isinstance(obj, special.Gauss): 
    114                 constants["GAUSS_N"] = obj.n 
    115                 constants["GAUSS_Z"] = obj.z 
    116                 constants["GAUSS_W"] = obj.w 
     100                #constants["GAUSS_N"] = obj.n 
     101                #constants["GAUSS_Z"] = obj.z 
     102                #constants["GAUSS_W"] = obj.w 
    117103                libs.append('lib/gauss%d.c'%obj.n) 
    118104                source = (source.replace(name+'.n', 'GAUSS_N') 
     
    142128    info.Iq = info.Iqxy = info.form_volume = None 
    143129 
     130def 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 
    144147 
    145148# Modified from the following: 
Note: See TracChangeset for help on using the changeset viewer.