tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/numpy
/random
/mtrand
/generate_mtrand_c.py
#!/usr/bin/env python | |
from __future__ import division, absolute_import, print_function | |
import sys | |
import re | |
import os | |
unused_internal_funcs = ['__Pyx_PrintItem', | |
'__Pyx_PrintNewline', | |
'__Pyx_ReRaise', | |
#'__Pyx_GetExcValue', | |
'__Pyx_ArgTypeTest', | |
'__Pyx_SetVtable', | |
'__Pyx_GetVtable', | |
'__Pyx_CreateClass'] | |
if __name__ == '__main__': | |
# Use cython here so that long docstrings are broken up. | |
# This is needed for some VC++ compilers. | |
os.system('cython mtrand.pyx') | |
mtrand_c = open('mtrand.c', 'r') | |
processed = open('mtrand_pp.c', 'w') | |
unused_funcs_str = '(' + '|'.join(unused_internal_funcs) + ')' | |
uifpat = re.compile(r'static \w+ \*?'+unused_funcs_str+r'.*/\*proto\*/') | |
linepat = re.compile(r'/\* ".*/mtrand.pyx":') | |
for linenum, line in enumerate(mtrand_c): | |
m = re.match(r'^(\s+arrayObject\w*\s*=\s*[(])[(]PyObject\s*[*][)]', | |
line) | |
if m: | |
line = '%s(PyArrayObject *)%s' % (m.group(1), line[m.end():]) | |
m = uifpat.match(line) | |
if m: | |
line = '' | |
m = re.search(unused_funcs_str, line) | |
if m: | |
print("%s was declared unused, but is used at line %d" % (m.group(), | |
linenum+1), file=sys.stderr) | |
line = linepat.sub(r'/* "mtrand.pyx":', line) | |
processed.write(line) | |
mtrand_c.close() | |
processed.close() | |
os.rename('mtrand_pp.c', 'mtrand.c') | |