提交 d19e66d9 authored 作者: Frédéric Bastien's avatar Frédéric Bastien

Merge pull request #1981 from daemonmaker/function_name

Used traceback module to set name of theano.function to file_name:line_number.
...@@ -6,6 +6,9 @@ import cPickle ...@@ -6,6 +6,9 @@ import cPickle
import logging import logging
_logger = logging.getLogger('theano.compile.function') _logger = logging.getLogger('theano.compile.function')
import traceback as tb
import re
from theano.compile.io import In from theano.compile.io import In
from theano.compile.function_module import orig_function from theano.compile.function_module import orig_function
from theano.compile.pfunc import pfunc from theano.compile.pfunc import pfunc
...@@ -181,6 +184,19 @@ def function(inputs, outputs=None, mode=None, updates=None, givens=None, ...@@ -181,6 +184,19 @@ def function(inputs, outputs=None, mode=None, updates=None, givens=None,
""" """
if name is None:
# Determine possible file names
source_file = re.sub('\.pyc?', '.py', __file__)
compiled_file = source_file + 'c'
stack = tb.extract_stack()
idx = len(stack) - 1
last_frame = stack[idx]
if (last_frame[0] == source_file or last_frame[0] == compiled_file):
func_frame = stack[idx - 1]
name = func_frame[0] + ':' + str(func_frame[1])
if updates is None: if updates is None:
updates = [] updates = []
......
import unittest
import os
import re
import theano
from theano import tensor
class FunctionName(unittest.TestCase):
def test_function_name(self):
x = tensor.vector('x')
func = theano.function([x], x + 1.)
regex = re.compile(os.path.basename('.*test_function_name.pyc?:13'))
assert(regex.match(func.name) is not None)
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论