@@ -36,7 +36,7 @@ def unquote(literal):
36
36
return literals [literal [1 :- 1 ]]
37
37
else :
38
38
return literal
39
-
39
+
40
40
return [unquote (item ) for item in s .split (delimiter )]
41
41
42
42
transitive_str = object ()
@@ -70,7 +70,7 @@ def line_iter(source):
70
70
start = end + 1
71
71
72
72
class DistutilsInfo (object ):
73
-
73
+
74
74
def __init__ (self , source = None , exn = None ):
75
75
self .values = {}
76
76
if source is not None :
@@ -97,7 +97,7 @@ def __init__(self, source=None, exn=None):
97
97
value = getattr (exn , key , None )
98
98
if value :
99
99
self .values [key ] = value
100
-
100
+
101
101
def merge (self , other ):
102
102
if other is None :
103
103
return self
@@ -114,7 +114,7 @@ def merge(self, other):
114
114
else :
115
115
self .values [key ] = value
116
116
return self
117
-
117
+
118
118
def subs (self , aliases ):
119
119
if aliases is None :
120
120
return self
@@ -140,9 +140,9 @@ def subs(self, aliases):
140
140
141
141
def strip_string_literals (code , prefix = '__Pyx_L' ):
142
142
"""
143
- Normalizes every string literal to be of the form '__Pyx_Lxxx',
143
+ Normalizes every string literal to be of the form '__Pyx_Lxxx',
144
144
returning the normalized code and a mapping of labels to
145
- string literals.
145
+ string literals.
146
146
"""
147
147
new_code = []
148
148
literals = {}
@@ -156,7 +156,7 @@ def strip_string_literals(code, prefix='__Pyx_L'):
156
156
double_q = code .find ('"' , q )
157
157
q = min (single_q , double_q )
158
158
if q == - 1 : q = max (single_q , double_q )
159
-
159
+
160
160
# We're done.
161
161
if q == - 1 and hash_mark == - 1 :
162
162
new_code .append (code [start :])
@@ -181,7 +181,7 @@ def strip_string_literals(code, prefix='__Pyx_L'):
181
181
start = q
182
182
else :
183
183
q += 1
184
-
184
+
185
185
# Process comment.
186
186
elif - 1 != hash_mark and (hash_mark < q or q == - 1 ):
187
187
end = code .find ('\n ' , hash_mark )
@@ -212,7 +212,7 @@ def strip_string_literals(code, prefix='__Pyx_L'):
212
212
new_code .append (code [start :end ])
213
213
start = q
214
214
q += len (in_quote )
215
-
215
+
216
216
return "" .join (new_code ), literals
217
217
218
218
@@ -245,16 +245,16 @@ def parse_dependencies(source_filename):
245
245
246
246
247
247
class DependencyTree (object ):
248
-
248
+
249
249
def __init__ (self , context ):
250
250
self .context = context
251
251
self ._transitive_cache = {}
252
-
252
+
253
253
#@cached_method
254
254
def parse_dependencies (self , source_filename ):
255
255
return parse_dependencies (source_filename )
256
256
parse_dependencies = cached_method (parse_dependencies )
257
-
257
+
258
258
#@cached_method
259
259
def cimports_and_externs (self , filename ):
260
260
cimports , includes , externs = self .parse_dependencies (filename )[:3 ]
@@ -272,10 +272,10 @@ def cimports_and_externs(self, filename):
272
272
print ("Unable to locate '%s' referenced from '%s'" % (filename , include ))
273
273
return tuple (cimports ), tuple (externs )
274
274
cimports_and_externs = cached_method (cimports_and_externs )
275
-
275
+
276
276
def cimports (self , filename ):
277
277
return self .cimports_and_externs (filename )[0 ]
278
-
278
+
279
279
#@cached_method
280
280
def package (self , filename ):
281
281
dir = os .path .dirname (filename )
@@ -284,13 +284,13 @@ def package(self, filename):
284
284
else :
285
285
return ()
286
286
package = cached_method (package )
287
-
287
+
288
288
#@cached_method
289
289
def fully_qualifeid_name (self , filename ):
290
290
module = os .path .splitext (os .path .basename (filename ))[0 ]
291
291
return '.' .join (self .package (filename ) + (module ,))
292
292
fully_qualifeid_name = cached_method (fully_qualifeid_name )
293
-
293
+
294
294
def find_pxd (self , module , filename = None ):
295
295
if module [0 ] == '.' :
296
296
raise NotImplementedError ("New relative imports." )
@@ -301,7 +301,7 @@ def find_pxd(self, module, filename=None):
301
301
return pxd
302
302
return self .context .find_pxd_file (module , None )
303
303
find_pxd = cached_method (find_pxd )
304
-
304
+
305
305
#@cached_method
306
306
def cimported_files (self , filename ):
307
307
if filename [- 4 :] == '.pyx' and os .path .exists (filename [:- 4 ] + '.pxd' ):
@@ -316,41 +316,41 @@ def cimported_files(self, filename):
316
316
print ("\n \t " .join (b ))
317
317
return tuple (self_pxd + filter (None , [self .find_pxd (m , filename ) for m in self .cimports (filename )]))
318
318
cimported_files = cached_method (cimported_files )
319
-
319
+
320
320
def immediate_dependencies (self , filename ):
321
321
all = list (self .cimported_files (filename ))
322
322
for extern in sum (self .cimports_and_externs (filename ), ()):
323
323
all .append (os .path .normpath (os .path .join (os .path .dirname (filename ), extern )))
324
324
return tuple (all )
325
-
325
+
326
326
#@cached_method
327
327
def timestamp (self , filename ):
328
328
return os .path .getmtime (filename )
329
329
timestamp = cached_method (timestamp )
330
-
330
+
331
331
def extract_timestamp (self , filename ):
332
332
# TODO: .h files from extern blocks
333
333
return self .timestamp (filename ), filename
334
-
334
+
335
335
def newest_dependency (self , filename ):
336
336
return self .transitive_merge (filename , self .extract_timestamp , max )
337
-
337
+
338
338
def distutils_info0 (self , filename ):
339
339
return self .parse_dependencies (filename )[3 ]
340
-
340
+
341
341
def distutils_info (self , filename , aliases = None , base = None ):
342
342
return (self .transitive_merge (filename , self .distutils_info0 , DistutilsInfo .merge )
343
343
.subs (aliases )
344
344
.merge (base ))
345
-
345
+
346
346
def transitive_merge (self , node , extract , merge ):
347
347
try :
348
348
seen = self ._transitive_cache [extract , merge ]
349
349
except KeyError :
350
350
seen = self ._transitive_cache [extract , merge ] = {}
351
351
return self .transitive_merge_helper (
352
352
node , extract , merge , seen , {}, self .cimported_files )[0 ]
353
-
353
+
354
354
def transitive_merge_helper (self , node , extract , merge , seen , stack , outgoing ):
355
355
if node in seen :
356
356
return seen [node ], None
0 commit comments