-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalter_code2.py
146 lines (123 loc) · 4.53 KB
/
alter_code2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
"""
This module converts code written for numpy.oldnumeric to work
with numpy
FIXME: Flesh this out.
Makes the following changes:
* Converts typecharacters '1swu' to 'bhHI' respectively
when used as typecodes
* Changes import statements
* Change typecode= to dtype=
* Eliminates savespace=xxx keyword arguments
* Removes it when keyword is not given as well
* replaces matrixmultiply with dot
* converts functions that don't give axis= keyword that have changed
* converts functions that don't give typecode= keyword that have changed
* converts use of capitalized type-names
* converts old function names in oldnumeric.linear_algebra,
oldnumeric.random_array, and oldnumeric.fft
"""
#__all__ = ['convertfile', 'convertall', 'converttree']
__all__ = []
import warnings
warnings.warn("numpy.oldnumeric.alter_code2 is not working yet.")
import sys
import os
import re
import glob
# To convert typecharacters we need to
# Not very safe. Disabled for now..
def replacetypechars(astr):
astr = astr.replace("'s'","'h'")
astr = astr.replace("'b'","'B'")
astr = astr.replace("'1'","'b'")
astr = astr.replace("'w'","'H'")
astr = astr.replace("'u'","'I'")
return astr
def changeimports(fstr, name, newname):
importstr = 'import %s' % name
importasstr = 'import %s as ' % name
fromstr = 'from %s import ' % name
fromall=0
fstr = fstr.replace(importasstr, 'import %s as ' % newname)
fstr = fstr.replace(importstr, 'import %s as %s' % (newname,name))
ind = 0
Nlen = len(fromstr)
Nlen2 = len("from %s import " % newname)
while 1:
found = fstr.find(fromstr,ind)
if (found < 0):
break
ind = found + Nlen
if fstr[ind] == '*':
continue
fstr = "%sfrom %s import %s" % (fstr[:found], newname, fstr[ind:])
ind += Nlen2 - Nlen
return fstr, fromall
def replaceattr(astr):
astr = astr.replace("matrixmultiply","dot")
return astr
def replaceother(astr):
astr = re.sub(r'typecode\s*=', 'dtype=', astr)
astr = astr.replace('ArrayType', 'ndarray')
astr = astr.replace('NewAxis', 'newaxis')
return astr
import datetime
def fromstr(filestr):
#filestr = replacetypechars(filestr)
filestr, fromall1 = changeimports(filestr, 'numpy.oldnumeric', 'numpy')
filestr, fromall1 = changeimports(filestr, 'numpy.core.multiarray', 'numpy')
filestr, fromall1 = changeimports(filestr, 'numpy.core.umath', 'numpy')
filestr, fromall3 = changeimports(filestr, 'LinearAlgebra',
'numpy.linalg.old')
filestr, fromall3 = changeimports(filestr, 'RNG', 'numpy.random.oldrng')
filestr, fromall3 = changeimports(filestr, 'RNG.Statistics', 'numpy.random.oldrngstats')
filestr, fromall3 = changeimports(filestr, 'RandomArray', 'numpy.random.oldrandomarray')
filestr, fromall3 = changeimports(filestr, 'FFT', 'numpy.fft.old')
filestr, fromall3 = changeimports(filestr, 'MA', 'numpy.core.ma')
fromall = fromall1 or fromall2 or fromall3
filestr = replaceattr(filestr)
filestr = replaceother(filestr)
today = datetime.date.today().strftime('%b %d, %Y')
name = os.path.split(sys.argv[0])[-1]
filestr = '## Automatically adapted for '\
'numpy %s by %s\n\n%s' % (today, name, filestr)
return filestr
def makenewfile(name, filestr):
fid = file(name, 'w')
fid.write(filestr)
fid.close()
def getandcopy(name):
fid = file(name)
filestr = fid.read()
fid.close()
base, ext = os.path.splitext(name)
makenewfile(base+'.orig', filestr)
return filestr
def convertfile(filename):
"""Convert the filename given from using Numeric to using NumPy
Copies the file to filename.orig and then over-writes the file
with the updated code
"""
filestr = getandcopy(filename)
filestr = fromstr(filestr)
makenewfile(filename, filestr)
def fromargs(args):
filename = args[1]
convertfile(filename)
def convertall(direc=os.path.curdir):
"""Convert all .py files to use NumPy (from Numeric) in the directory given
For each file, a backup of <usesnumeric>.py is made as
<usesnumeric>.py.orig. A new file named <usesnumeric>.py
is then written with the updated code.
"""
files = glob.glob(os.path.join(direc,'*.py'))
for afile in files:
convertfile(afile)
def _func(arg, dirname, fnames):
convertall(dirname)
def converttree(direc=os.path.curdir):
"""Convert all .py files in the tree given
"""
os.path.walk(direc, _func, None)
if __name__ == '__main__':
fromargs(sys.argv)