from tensorflow.contrib.autograph.converters import converter_test_base
from tensorflow.python.framework import constant_op
from tensorflow.python.ops import array_ops
-from tensorflow.python.ops import logging_ops
-from tensorflow.python.ops import script_ops
from tensorflow.python.platform import test
self.assertEqual(3, result.test_fn([0, 0, 0]))
- def test_print_with_op(self):
+ def test_print(self):
def test_fn(a):
print(a)
node = self.parse_and_analyze(test_fn, {'print': print})
node = builtin_functions.transform(node, self.ctx)
- # Note: it's relevant not to include script_ops.py_func here, to verify
- # that tf.Print is used.
- with self.compiled(node, logging_ops.Print) as result:
+ with self.compiled(node) as result:
with self.test_session() as sess:
try:
out_capturer = six.StringIO()
sys.stdout = out_capturer
- result.test_fn('a')
+ result.test_fn(constant_op.constant('a'))
sess.run(sess.graph.get_operations())
self.assertEqual(out_capturer.getvalue(), 'a\n')
finally:
def test_print_with_op_multiple_values(self):
- def test_fn(a, b):
- print(a, b)
-
- node = self.parse_and_analyze(test_fn, {'print': print})
- node = builtin_functions.transform(node, self.ctx)
-
- # Note: it's relevant not to include script_ops.py_func here, to verify
- # that tf.Print is used.
- with self.compiled(node, logging_ops.Print) as result:
- with self.test_session() as sess:
- try:
- out_capturer = six.StringIO()
- sys.stdout = out_capturer
- result.test_fn('a', 1)
- sess.run(sess.graph.get_operations())
- self.assertEqual(out_capturer.getvalue(), 'a 1\n')
- finally:
- sys.stdout = sys.__stdout__
-
- def test_print_with_py_func(self):
-
def test_fn(a, b, c):
print(a, b, c)
node = self.parse_and_analyze(test_fn, {'print': print})
node = builtin_functions.transform(node, self.ctx)
- # Note: it's relevant not to include logging_ops.Print here, to verify
- # that py_func is used.
- with self.compiled(node, script_ops.py_func) as result:
+ with self.compiled(node) as result:
with self.test_session() as sess:
try:
out_capturer = six.StringIO()
sys.stdout = out_capturer
- result.test_fn('a', 1, [2, 3])
+ result.test_fn(
+ constant_op.constant('a'), constant_op.constant(1), [2, 3])
sess.run(sess.graph.get_operations())
self.assertEqual(out_capturer.getvalue(), 'a 1 [2, 3]\n')
finally:
if all(map(is_tf_print_compatible, values)):
return logging_ops.Print(1, values)
- def flushed_print(*vals):
+ def print_wrapper(*vals):
+ if six.PY3:
+ # TensorFlow doesn't seem to generate Unicode when passing strings to
+ # py_func. This causes the print to add a "b'" wrapper to the output,
+ # which is probably never what you want.
+ vals = tuple(v.decode() if isinstance(v, bytes) else v for v in vals)
print(*vals)
+ # The flush helps avoid garbled output in IPython.
sys.stdout.flush()
return py_func.wrap_py_func(
- flushed_print, None, values, use_dummy_return=True)
+ print_wrapper, None, values, use_dummy_return=True)