[Python-checkins] CVS: python/dist/src/Lib pstats.py,1.21,1.22

Tim Peters tim_one@users.sourceforge.net
2001年10月07日 23:13:21 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv7871/python/Lib
Modified Files:
	pstats.py 
Log Message:
Widespread random code cleanup.
Most of this code was old enough to vote. Examples of cleanups:
+ Backslashes were used for line continuation even inside unclosed
 bracket structures, from back in the days that was still needed.
+ There was no use of % formats, and e.g. the old fpformat module was
 still used to format floats "by hand" in conjunction with rjust().
+ There was even use of a do-nothing .ignore() method to tack on to the
 end of a chain of method calls, else way back when Python would print
 the non-None result (as it does now in an interactive session -- it
 *used* to do that in batch mode too).
+ Perhaps controversial (although I can't imagine why for real <wink>),
 used augmented assignment where helpful. Stuff like
 self.total_calls = self.total_calls + other.total_calls
 is just plain harder to follow than
 self.total_calls += other.total_calls
Index: pstats.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/pstats.py,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** pstats.py	2001年08月13日 14:47:49	1.21
--- pstats.py	2001年10月08日 06:13:19	1.22
***************
*** 38,43 ****
 import re
 
- import fpformat
- 
 __all__ = ["Stats"]
 
--- 38,41 ----
***************
*** 79,83 ****
 args = args[1:]
 self.init(arg)
! apply(self.add, args).ignore()
 
 def init(self, arg):
--- 77,81 ----
 args = args[1:]
 self.init(arg)
! apply(self.add, args)
 
 def init(self, arg):
***************
*** 103,107 ****
 print
 
- 
 def load_stats(self, arg):
 if not arg: self.stats = {}
--- 101,104 ----
***************
*** 127,135 ****
 
 def get_top_level_stats(self):
! for func in self.stats.keys():
! cc, nc, tt, ct, callers = self.stats[func]
! self.total_calls = self.total_calls + nc
! self.prim_calls = self.prim_calls + cc
! self.total_tt = self.total_tt + tt
 if callers.has_key(("jprofile", 0, "profiler")):
 self.top_level[func] = None
--- 124,131 ----
 
 def get_top_level_stats(self):
! for func, (cc, nc, tt, ct, callers) in self.stats.items():
! self.total_calls += nc
! self.prim_calls += cc
! self.total_tt += tt
 if callers.has_key(("jprofile", 0, "profiler")):
 self.top_level[func] = None
***************
*** 141,151 ****
 if len(arg_list) > 1: apply(self.add, arg_list[1:])
 other = arg_list[0]
! if type(self) != type(other) or \
! self.__class__ != other.__class__:
 other = Stats(other)
! self.files = self.files + other.files
! self.total_calls = self.total_calls + other.total_calls
! self.prim_calls = self.prim_calls + other.prim_calls
! self.total_tt = self.total_tt + other.total_tt
 for func in other.top_level.keys():
 self.top_level[func] = None
--- 137,146 ----
 if len(arg_list) > 1: apply(self.add, arg_list[1:])
 other = arg_list[0]
! if type(self) != type(other) or self.__class__ != other.__class__:
 other = Stats(other)
! self.files += other.files
! self.total_calls += other.total_calls
! self.prim_calls += other.prim_calls
! self.total_tt += other.total_tt
 for func in other.top_level.keys():
 self.top_level[func] = None
***************
*** 161,183 ****
 else:
 old_func_stat = (0, 0, 0, 0, {},)
! self.stats[func] = add_func_stats(old_func_stat, \
! other.stats[func])
 return self
 
- 
- 
 # list the tuple indices and directions for sorting,
 # along with some printable description
! sort_arg_dict_default = {\
! "calls" : (((1,-1), ), "call count"),\
! "cumulative": (((3,-1), ), "cumulative time"),\
! "file" : (((4, 1), ), "file name"),\
! "line" : (((5, 1), ), "line number"),\
! "module" : (((4, 1), ), "file name"),\
! "name" : (((6, 1), ), "function name"),\
! "nfl" : (((6, 1),(4, 1),(5, 1),), "name/file/line"), \
! "pcalls" : (((0,-1), ), "call count"),\
! "stdname" : (((7, 1), ), "standard name"),\
! "time" : (((2,-1), ), "internal time"),\
 }
 
--- 156,175 ----
 else:
 old_func_stat = (0, 0, 0, 0, {},)
! self.stats[func] = add_func_stats(old_func_stat, other.stats[func])
 return self
 
 # list the tuple indices and directions for sorting,
 # along with some printable description
! sort_arg_dict_default = {
! "calls" : (((1,-1), ), "call count"),
! "cumulative": (((3,-1), ), "cumulative time"),
! "file" : (((4, 1), ), "file name"),
! "line" : (((5, 1), ), "line number"),
! "module" : (((4, 1), ), "file name"),
! "name" : (((6, 1), ), "function name"),
! "nfl" : (((6, 1),(4, 1),(5, 1),), "name/file/line"),
! "pcalls" : (((0,-1), ), "call count"),
! "stdname" : (((7, 1), ), "standard name"),
! "time" : (((2,-1), ), "internal time"),
 }
 
***************
*** 195,200 ****
 bad_list[fragment] = 0
 break
! dict[fragment] = self. \
! sort_arg_dict_default[word]
 fragment = fragment[:-1]
 for word in bad_list.keys():
--- 187,191 ----
 bad_list[fragment] = 0
 break
! dict[fragment] = self.sort_arg_dict_default[word]
 fragment = fragment[:-1]
 for word in bad_list.keys():
***************
*** 202,206 ****
 return self.sort_arg_dict
 
- 
 def sort_stats(self, *field):
 if not field:
--- 193,196 ----
***************
*** 209,215 ****
 if len(field) == 1 and type(field[0]) == type(1):
 # Be compatible with old profiler
! field = [ {-1: "stdname", \
! 0:"calls", \
! 1:"time", \
 2: "cumulative" } [ field[0] ] ]
 
--- 199,205 ----
 if len(field) == 1 and type(field[0]) == type(1):
 # Be compatible with old profiler
! field = [ {-1: "stdname",
! 0:"calls",
! 1:"time",
 2: "cumulative" } [ field[0] ] ]
 
***************
*** 220,225 ****
 for word in field:
 sort_tuple = sort_tuple + sort_arg_defs[word][0]
! self.sort_type = self.sort_type + connector + \
! sort_arg_defs[word][1]
 connector = ", "
 
--- 210,214 ----
 for word in field:
 sort_tuple = sort_tuple + sort_arg_defs[word][0]
! self.sort_type += connector + sort_arg_defs[word][1]
 connector = ", "
 
***************
*** 227,232 ****
 for func in self.stats.keys():
 cc, nc, tt, ct, callers = self.stats[func]
! stats_list.append((cc, nc, tt, ct) + func_split(func) \
! + (func_std_string(func), func,) )
 
 stats_list.sort(TupleComp(sort_tuple).compare)
--- 216,221 ----
 for func in self.stats.keys():
 cc, nc, tt, ct, callers = self.stats[func]
! stats_list.append((cc, nc, tt, ct) + func +
! (func_std_string(func), func))
 
 stats_list.sort(TupleComp(sort_tuple).compare)
***************
*** 237,243 ****
 return self
 
- 
 def reverse_order(self):
! if self.fcn_list: self.fcn_list.reverse()
 return self
 
--- 226,232 ----
 return self
 
 def reverse_order(self):
! if self.fcn_list:
! self.fcn_list.reverse()
 return self
 
***************
*** 253,263 ****
 newcallers = {}
 for func2 in callers.keys():
! newcallers[func_strip_path(func2)] = \
! callers[func2]
 
 if newstats.has_key(newfunc):
! newstats[newfunc] = add_func_stats( \
! newstats[newfunc],\
! (cc, nc, tt, ct, newcallers))
 else:
 newstats[newfunc] = (cc, nc, tt, ct, newcallers)
--- 242,251 ----
 newcallers = {}
 for func2 in callers.keys():
! newcallers[func_strip_path(func2)] = callers[func2]
 
 if newstats.has_key(newfunc):
! newstats[newfunc] = add_func_stats(
! newstats[newfunc],
! (cc, nc, tt, ct, newcallers))
 else:
 newstats[newfunc] = (cc, nc, tt, ct, newcallers)
***************
*** 273,278 ****
 return self
 
- 
- 
 def calc_callees(self):
 if self.all_callees: return
--- 261,264 ----
***************
*** 304,308 ****
 count = len(list)
 if type(sel) == type(1.0) and 0.0 <= sel < 1.0:
! count = int (count * sel + .5)
 new_list = list[:count]
 elif type(sel) == type(1) and 0 <= sel < count:
--- 290,294 ----
 count = len(list)
 if type(sel) == type(1.0) and 0.0 <= sel < 1.0:
! count = int(count * sel + .5)
 new_list = list[:count]
 elif type(sel) == type(1) and 0 <= sel < count:
***************
*** 316,321 ****
 return new_list, msg
 
- 
- 
 def get_print_list(self, sel_list):
 width = self.max_name_len
--- 302,305 ----
***************
*** 328,332 ****
 
 for selection in sel_list:
! list,msg = self.eval_print_amount(selection, list, msg)
 
 count = len(list)
--- 312,316 ----
 
 for selection in sel_list:
! list, msg = self.eval_print_amount(selection, list, msg)
 
 count = len(list)
***************
*** 346,357 ****
 print filename
 if self.files: print
! indent = " "
 for func in self.top_level.keys():
 print indent, func_get_function_name(func)
 
! print indent, self.total_calls, "function calls",
 if self.total_calls != self.prim_calls:
! print "(" + `self.prim_calls`, "primitive calls)",
! print "in", fpformat.fix(self.total_tt, 3), "CPU seconds"
 print
 width, list = self.get_print_list(amount)
--- 330,341 ----
 print filename
 if self.files: print
! indent = ' ' * 8
 for func in self.top_level.keys():
 print indent, func_get_function_name(func)
 
! print indent, self.total_calls, "function calls",
 if self.total_calls != self.prim_calls:
! print "(%d primitive calls)" % self.prim_calls,
! print "in %.3f CPU seconds" % self.total_tt
 print
 width, list = self.get_print_list(amount)
***************
*** 364,368 ****
 return self
 
- 
 def print_callees(self, *amount):
 width, list = self.get_print_list(amount)
--- 348,351 ----
***************
*** 373,378 ****
 for func in list:
 if self.all_callees.has_key(func):
! self.print_call_line(width, \
! func, self.all_callees[func])
 else:
 self.print_call_line(width, func, {})
--- 356,360 ----
 for func in list:
 if self.all_callees.has_key(func):
! self.print_call_line(width, func, self.all_callees[func])
 else:
 self.print_call_line(width, func, {})
***************
*** 395,399 ****
 print "Function ".ljust(name_size) + column_title
 
- 
 def print_call_line(self, name_size, source, call_dict):
 print func_std_string(source).ljust(name_size),
--- 377,380 ----
***************
*** 412,431 ****
 indent = " "
 
- 
- 
 def print_title(self):
! print 'ncalls'.rjust(9),
! print 'tottime'.rjust(8),
! print 'percall'.rjust(8),
! print 'cumtime'.rjust(8),
! print 'percall'.rjust(8),
! print 'filename:lineno(function)'
! 
 
 def print_line(self, func): # hack : should print percentages
 cc, nc, tt, ct, callers = self.stats[func]
! c = `nc`
 if nc != cc:
! c = c + '/' + `cc`
 print c.rjust(9),
 print f8(tt),
--- 393,405 ----
 indent = " "
 
 def print_title(self):
! print ' ncalls tottime percall cumtime percall', \
! 'filename:lineno(function)'
 
 def print_line(self, func): # hack : should print percentages
 cc, nc, tt, ct, callers = self.stats[func]
! c = str(nc)
 if nc != cc:
! c = c + '/' + str(cc)
 print c.rjust(9),
 print f8(tt),
***************
*** 441,449 ****
 print func_std_string(func)
 
- 
- def ignore(self):
- pass # has no return value, so use at end of line :-)
- 
- 
 class TupleComp:
 """This class provides a generic function for comparing any two tuples.
--- 415,418 ----
***************
*** 466,473 ****
 return direction
 return 0
- 
 
 
 #**************************************************************************
 
 def func_strip_path(func_name):
--- 435,445 ----
 return direction
 return 0
 
+ def ignore(self):
+ # Deprecated since 1.5.1 -- see the docs.
+ pass # has no return value, so use at end of line :-)
 
 #**************************************************************************
+ # func_name is a triple (file:string, line:int, name:string)
 
 def func_strip_path(func_name):
***************
*** 479,487 ****
 
 def func_std_string(func_name): # match what old profile produced
! file, line, name = func_name
! return file + ":" + `line` + "(" + name + ")"
! 
! def func_split(func_name):
! return func_name
 
 #**************************************************************************
--- 451,455 ----
 
 def func_std_string(func_name): # match what old profile produced
! return "%s:%d(%s)" % func_name
 
 #**************************************************************************
***************
*** 495,502 ****
 cc, nc, tt, ct, callers = source
 t_cc, t_nc, t_tt, t_ct, t_callers = target
! return (cc+t_cc, nc+t_nc, tt+t_tt, ct+t_ct, \
 add_callers(t_callers, callers))
 
- 
 def add_callers(target, source):
 """Combine two caller lists in a single list."""
--- 463,469 ----
 cc, nc, tt, ct, callers = source
 t_cc, t_nc, t_tt, t_ct, t_callers = target
! return (cc+t_cc, nc+t_nc, tt+t_tt, ct+t_ct,
 add_callers(t_callers, callers))
 
 def add_callers(target, source):
 """Combine two caller lists in a single list."""
***************
*** 515,519 ****
 nc = 0
 for func in callers.keys():
! nc = nc + callers[func]
 return nc
 
--- 482,486 ----
 nc = 0
 for func in callers.keys():
! nc += callers[func]
 return nc
 
***************
*** 523,527 ****
 
 def f8(x):
! return fpformat.fix(x, 3).rjust(8)
 
 #**************************************************************************
--- 490,494 ----
 
 def f8(x):
! return "%8.3f" % x
 
 #**************************************************************************

AltStyle によって変換されたページ (->オリジナル) /