提交 fc039b41 authored 作者: Frederic Bastien's avatar Frederic Bastien

print the toposort index number in debugprint.

上级 6a1a6e9b
...@@ -403,8 +403,9 @@ class InvalidValueError(DebugModeError): ...@@ -403,8 +403,9 @@ class InvalidValueError(DebugModeError):
######################## ########################
def debugprint(r, prefix='', depth=-1, done=None, print_type=False,
def debugprint(r, prefix='', depth=-1, done=None, print_type=False, file=sys.stdout, print_destroy_map=False, print_view_map=False): file=sys.stdout, print_destroy_map=False, print_view_map=False,
order=[]):
"""Print the graph leading to `r` to given depth. """Print the graph leading to `r` to given depth.
:param r: Variable instance :param r: Variable instance
...@@ -415,6 +416,7 @@ def debugprint(r, prefix='', depth=-1, done=None, print_type=False, file=sys.std ...@@ -415,6 +416,7 @@ def debugprint(r, prefix='', depth=-1, done=None, print_type=False, file=sys.std
:param file: file-like object to which to print :param file: file-like object to which to print
:param print_destroy_map: wether to print the op destroy_map after ofther info :param print_destroy_map: wether to print the op destroy_map after ofther info
:param print_view_map: wether to print the op view_map after ofther info :param print_view_map: wether to print the op view_map after ofther info
:param order: If not empty will print the index in the toposort.
""" """
if depth==0: if depth==0:
return return
...@@ -452,22 +454,28 @@ def debugprint(r, prefix='', depth=-1, done=None, print_type=False, file=sys.std ...@@ -452,22 +454,28 @@ def debugprint(r, prefix='', depth=-1, done=None, print_type=False, file=sys.std
if view_map_str and view_map_str!='{}': if view_map_str and view_map_str!='{}':
view_map_str='v='+view_map_str view_map_str='v='+view_map_str
o=''
if order:
o = str(order.index(r.owner))
if len(a.outputs) == 1: if len(a.outputs) == 1:
print >> file, '%s%s [@%i]%s \'%s\' %s %s' % (prefix, a.op, id(r), print >> file, '%s%s [@%i]%s \'%s\' %s %s %s' % (prefix, a.op, id(r),
type_str, r_name, type_str, r_name,
destroy_map_str, destroy_map_str,
view_map_str) view_map_str,
o)
else: else:
print >> file, '%s%s.%i [@%i]%s \'%s\' %s %s' % (prefix, a.op, print >> file, '%s%s.%i [@%i]%s \'%s\' %s %s %s' % (prefix, a.op,
a.outputs.index(r), a.outputs.index(r),
id(r), type_str, id(r), type_str,
r_name, r_name,
destroy_map_str, destroy_map_str,
view_map_str) view_map_str,
o)
if id(a) not in done: if id(a) not in done:
done.add(id(a)) done.add(id(a))
for i in a.inputs: for i in a.inputs:
debugprint(i, prefix+' |', depth=depth-1, done=done, print_type=print_type, file=file) debugprint(i, prefix+' |', depth=depth-1, done=done,
print_type=print_type, file=file, order=order)
else: else:
#this is a variable #this is a variable
print >> file, '%s%s [@%i]%s' % (prefix, r, id(r), type_str) print >> file, '%s%s [@%i]%s' % (prefix, r, id(r), type_str)
......
...@@ -47,18 +47,21 @@ def debugprint(obj, depth=-1, print_type=False, file=None): ...@@ -47,18 +47,21 @@ def debugprint(obj, depth=-1, print_type=False, file=None):
_file = file _file = file
done = set() done = set()
results_to_print = [] results_to_print = []
order = []
if isinstance(obj, gof.Variable): if isinstance(obj, gof.Variable):
results_to_print.append(obj) results_to_print.append(obj)
elif isinstance(obj, gof.Apply): elif isinstance(obj, gof.Apply):
results_to_print.extend(obj.outputs) results_to_print.extend(obj.outputs)
elif isinstance(obj, Function): elif isinstance(obj, Function):
results_to_print.extend(obj.maker.env.outputs) results_to_print.extend(obj.maker.env.outputs)
order = obj.maker.env.toposort()
elif isinstance(obj, (list, tuple)): elif isinstance(obj, (list, tuple)):
results_to_print.extend(obj) results_to_print.extend(obj)
else: else:
raise TypeError("debugprint cannot print an object of this type", obj) raise TypeError("debugprint cannot print an object of this type", obj)
for r in results_to_print: for r in results_to_print:
debugmode.debugprint(r, depth=depth, done=done, print_type=print_type, file=_file) debugmode.debugprint(r, depth=depth, done=done, print_type=print_type,
file=_file, order=order)
if file is _file: if file is _file:
return file return file
elif file=='str': elif file=='str':
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论