/usr/lib64/python2.6/site-packages/numpy/distutils
NameSizeModeActions
command/-0755rm
fcompiler/-0755rm
mingw/-0755rm
tests/-0755rm
ccompiler.py223190644editdlrm
ccompiler.pyc199610644editdlrm
ccompiler.pyo199610644editdlrm
conv_template.py94910644editdlrm
conv_template.pyc95650644editdlrm
conv_template.pyo95650644editdlrm
core.py85240644editdlrm
core.pyc66270644editdlrm
core.pyo66270644editdlrm
cpuinfo.py225140644editdlrm
cpuinfo.pyc442410644editdlrm
cpuinfo.pyo442410644editdlrm
environment.py22680644editdlrm
environment.pyc33840644editdlrm
environment.pyo33840644editdlrm
exec_command.py185490644editdlrm
exec_command.pyc172630644editdlrm
exec_command.pyo158410644editdlrm
extension.py23850644editdlrm
extension.pyc21360644editdlrm
extension.pyo21360644editdlrm
from_template.py78030644editdlrm
from_template.pyc84740644editdlrm
from_template.pyo84740644editdlrm
info.py920644editdlrm
info.pyc2660644editdlrm
info.pyo2660644editdlrm
intelccompiler.py9910644editdlrm
intelccompiler.pyc14380644editdlrm
intelccompiler.pyo14380644editdlrm
interactive.py61450644editdlrm
interactive.pyc58480644editdlrm
interactive.pyo58480644editdlrm
lib2def.py34190644editdlrm
lib2def.pyc38890644editdlrm
lib2def.pyo38890644editdlrm
line_endings.py19690644editdlrm
line_endings.pyc27600644editdlrm
line_endings.pyo27600644editdlrm
log.py24380644editdlrm
log.pyc28720644editdlrm
log.pyo28720644editdlrm
mingw32ccompiler.py181050644editdlrm
mingw32ccompiler.pyc137470644editdlrm
mingw32ccompiler.pyo137470644editdlrm
misc_util.py798370644editdlrm
misc_util.pyc764140644editdlrm
misc_util.pyo758530644editdlrm
npy_pkg_config.py122830644editdlrm
npy_pkg_config.pyc145500644editdlrm
npy_pkg_config.pyo145500644editdlrm
numpy_distribution.py6340644editdlrm
numpy_distribution.pyc9810644editdlrm
numpy_distribution.pyo9810644editdlrm
setup.py5610644editdlrm
setup.pyc8640644editdlrm
setup.pyo8640644editdlrm
setupscons.py5570644editdlrm
setupscons.pyc9090644editdlrm
setupscons.pyo9090644editdlrm
system_info.py709270644editdlrm
system_info.pyc709820644editdlrm
system_info.pyo708440644editdlrm
unixccompiler.py34600644editdlrm
unixccompiler.pyc28930644editdlrm
unixccompiler.pyo28930644editdlrm
__config__.py14990644editdlrm
__config__.pyc16540644editdlrm
__config__.pyo16540644editdlrm
__init__.py4310644editdlrm
__init__.pyc6010644editdlrm
__init__.pyo6010644editdlrm
__version__.py850644editdlrm
__version__.pyc2860644editdlrm
__version__.pyo2860644editdlrm
Edit: /usr/lib64/python2.6/site-packages/numpy/distutils/conv_template.py (9491B)
#!/usr/bin/python """ takes templated file .xxx.src and produces .xxx file where .xxx is .i or .c or .h, using the following template rules /**begin repeat -- on a line by itself marks the start of a repeated code segment /**end repeat**/ -- on a line by itself marks it's end After the /**begin repeat and before the */, all the named templates are placed these should all have the same number of replacements Repeat blocks can be nested, with each nested block labeled with its depth, i.e. /**begin repeat1 *.... */ /**end repeat1**/ When using nested loops, you can optionally exlude particular combinations of the variables using (inside the comment portion of the inner loop): :exclude: var1=value1, var2=value2, ... This will exlude the pattern where var1 is value1 and var2 is value2 when the result is being generated. In the main body each replace will use one entry from the list of named replacements Note that all #..# forms in a block must have the same number of comma-separated entries. Example: An input file containing /**begin repeat * #a = 1,2,3# * #b = 1,2,3# */ /**begin repeat1 * #c = ted, jim# */ @a@, @b@, @c@ /**end repeat1**/ /**end repeat**/ produces line 1 "template.c.src" /* ********************************************************************* ** This file was autogenerated from a template DO NOT EDIT!!** ** Changes should be made to the original source (.src) file ** ********************************************************************* */ #line 9 1, 1, ted #line 9 1, 1, jim #line 9 2, 2, ted #line 9 2, 2, jim #line 9 3, 3, ted #line 9 3, 3, jim """ __all__ = ['process_str', 'process_file'] import os import sys import re # names for replacement that are already global. global_names = {} # header placed at the front of head processed file header =\ """ /* ***************************************************************************** ** This file was autogenerated from a template DO NOT EDIT!!!! ** ** Changes should be made to the original source (.src) file ** ***************************************************************************** */ """ # Parse string for repeat loops def parse_structure(astr, level): """ The returned line number is from the beginning of the string, starting at zero. Returns an empty list if no loops found. """ if level == 0 : loopbeg = "/**begin repeat" loopend = "/**end repeat**/" else : loopbeg = "/**begin repeat%d" % level loopend = "/**end repeat%d**/" % level ind = 0 line = 0 spanlist = [] while 1: start = astr.find(loopbeg, ind) if start == -1: break start2 = astr.find("*/",start) start2 = astr.find("\n",start2) fini1 = astr.find(loopend,start2) fini2 = astr.find("\n",fini1) line += astr.count("\n", ind, start2+1) spanlist.append((start, start2+1, fini1, fini2+1, line)) line += astr.count("\n", start2+1, fini2) ind = fini2 spanlist.sort() return spanlist def paren_repl(obj): torep = obj.group(1) numrep = obj.group(2) return ','.join([torep]*int(numrep)) parenrep = re.compile(r"[(]([^)]*)[)]\*(\d+)") plainrep = re.compile(r"([^*]+)\*(\d+)") def parse_values(astr): # replaces all occurrences of '(a,b,c)*4' in astr # with 'a,b,c,a,b,c,a,b,c,a,b,c'. Empty braces generate # empty values, i.e., ()*4 yields ',,,'. The result is # split at ',' and a list of values returned. astr = parenrep.sub(paren_repl, astr) # replaces occurences of xxx*3 with xxx, xxx, xxx astr = ','.join([plainrep.sub(paren_repl,x.strip()) for x in astr.split(',')]) return astr.split(',') stripast = re.compile(r"\n\s*\*?") named_re = re.compile(r"#\s*(\w*)\s*=([^#]*)#") exclude_vars_re = re.compile(r"(\w*)=(\w*)") exclude_re = re.compile(":exclude:") def parse_loop_header(loophead) : """Find all named replacements in the header Returns a list of dictionaries, one for each loop iteration, where each key is a name to be substituted and the corresponding value is the replacement string. Also return a list of exclusions. The exclusions are dictionaries of key value pairs. There can be more than one exclusion. [{'var1':'value1', 'var2', 'value2'[,...]}, ...] """ # Strip out '\n' and leading '*', if any, in continuation lines. # This should not effect code previous to this change as # continuation lines were not allowed. loophead = stripast.sub("", loophead) # parse out the names and lists of values names = [] reps = named_re.findall(loophead) nsub = None for rep in reps: name = rep[0] vals = parse_values(rep[1]) size = len(vals) if nsub is None : nsub = size elif nsub != size : msg = "Mismatch in number of values:\n%s = %s" % (name, vals) raise ValueError(msg) names.append((name,vals)) # Find any exclude variables excludes = [] for obj in exclude_re.finditer(loophead): span = obj.span() # find next newline endline = loophead.find('\n', span[1]) substr = loophead[span[1]:endline] ex_names = exclude_vars_re.findall(substr) excludes.append(dict(ex_names)) # generate list of dictionaries, one for each template iteration dlist = [] if nsub is None : raise ValueError("No substitution variables found") for i in range(nsub) : tmp = {} for name,vals in names : tmp[name] = vals[i] dlist.append(tmp) return dlist replace_re = re.compile(r"@([\w]+)@") def parse_string(astr, env, level, line) : lineno = "#line %d\n" % line # local function for string replacement, uses env def replace(match): name = match.group(1) try : val = env[name] except KeyError, e : msg = 'line %d: no definition of key "%s"'%(line, name) raise ValueError(msg) return val code = [lineno] struct = parse_structure(astr, level) if struct : # recurse over inner loops oldend = 0 newlevel = level + 1 for sub in struct: pref = astr[oldend:sub[0]] head = astr[sub[0]:sub[1]] text = astr[sub[1]:sub[2]] oldend = sub[3] newline = line + sub[4] code.append(replace_re.sub(replace, pref)) try : envlist = parse_loop_header(head) except ValueError, e : msg = "line %d: %s" % (newline, e) raise ValueError(msg) for newenv in envlist : newenv.update(env) newcode = parse_string(text, newenv, newlevel, newline) code.extend(newcode) suff = astr[oldend:] code.append(replace_re.sub(replace, suff)) else : # replace keys code.append(replace_re.sub(replace, astr)) code.append('\n') return ''.join(code) def process_str(astr): code = [header] code.extend(parse_string(astr, global_names, 0, 1)) return ''.join(code) include_src_re = re.compile(r"(\n|\A)#include\s*['\"]" r"(?P[\w\d./\\]+[.]src)['\"]", re.I) def resolve_includes(source): d = os.path.dirname(source) fid = open(source) lines = [] for line in fid.readlines(): m = include_src_re.match(line) if m: fn = m.group('name') if not os.path.isabs(fn): fn = os.path.join(d,fn) if os.path.isfile(fn): print 'Including file',fn lines.extend(resolve_includes(fn)) else: lines.append(line) else: lines.append(line) fid.close() return lines def process_file(source): lines = resolve_includes(source) sourcefile = os.path.normcase(source).replace("\\","\\\\") try: code = process_str(''.join(lines)) except ValueError, e: raise ValueError('In "%s" loop at %s' % (sourcefile, e)) return '#line 1 "%s"\n%s' % (sourcefile, code) def unique_key(adict): # this obtains a unique key given a dictionary # currently it works by appending together n of the letters of the # current keys and increasing n until a unique key is found # -- not particularly quick allkeys = adict.keys() done = False n = 1 while not done: newkey = "".join([x[:n] for x in allkeys]) if newkey in allkeys: n += 1 else: done = True return newkey if __name__ == "__main__": try: file = sys.argv[1] except IndexError: fid = sys.stdin outfile = sys.stdout else: fid = open(file,'r') (base, ext) = os.path.splitext(file) newname = base outfile = open(newname,'w') allstr = fid.read() try: writestr = process_str(allstr) except ValueError, e: raise ValueError("In %s loop at %s" % (file, e)) outfile.write(writestr)