def string_format(template, inputs, placeholder="{}", summarize=3, name=None): r"""Formats a string template using a list of tensors. Formats a string template using a list of tensors, abbreviating tensors by only printing the first and last `summarize` elements of each dimension (recursively). If formatting only one tensor into a template, the tensor does not have to be wrapped in a list. Example: Formatting a single-tensor template: >>> tensor = tf.range(5) >>> tf.strings.format("tensor: {}, suffix", tensor) <tf.Tensor: shape=(), dtype=string, numpy=b'tensor: [0 1 2 3 4], suffix'> Formatting a multi-tensor template: >>> tensor_a = tf.range(2) >>> tensor_b = tf.range(1, 4, 2) >>> tf.strings.format("a: {}, b: {}, suffix", (tensor_a, tensor_b)) <tf.Tensor: shape=(), dtype=string, numpy=b'a: [0 1], b: [1 3], suffix'> Args: template: A string template to format tensor values into. inputs: A list of `Tensor` objects, or a single Tensor. The list of tensors to format into the template string. If a solitary tensor is passed in, the input tensor will automatically be wrapped as a list. placeholder: An optional `string`. Defaults to `{}`. At each placeholder occurring in the template, a subsequent tensor will be inserted. summarize: An optional `int`. Defaults to `3`. When formatting the tensors, show the first and last `summarize` entries of each tensor dimension (recursively). If set to -1, all elements of the tensor will be shown. name: A name for the operation (optional). Returns: A scalar `Tensor` of type `string`. Raises: ValueError: if the number of placeholders does not match the number of inputs. """ # If there is only one tensor to format, we will automatically wrap it in a # list to simplify the user experience if tensor_util.is_tensor(inputs): inputs = [inputs] if template.count(placeholder) != len(inputs): raise ValueError( "%s placeholder(s) in template does not match %s tensor(s)" " provided as input" % (template.count(placeholder), len(inputs))) return gen_string_ops.string_format(inputs, template=template, placeholder=placeholder, summarize=summarize, name=name)
def string_format(template, inputs, placeholder="{}", summarize=3, name=None): r"""Formats a string template using a list of tensors. Formats a string template using a list of tensors, abbreviating tensors by only printing the first and last `summarize` elements of each dimension (recursively). If formatting only one tensor into a template, the tensor does not have to be wrapped in a list. Example: Formatting a single-tensor template: ```python sess = tf.Session() with sess.as_default(): tensor = tf.range(10) formatted = tf.strings.format("tensor: {}, suffix", tensor) out = sess.run(formatted) expected = "tensor: [0 1 2 ... 7 8 9], suffix" assert(out.decode() == expected) ``` Formatting a multi-tensor template: ```python sess = tf.Session() with sess.as_default(): tensor_one = tf.reshape(tf.range(100), [10, 10]) tensor_two = tf.range(10) formatted = tf.strings.format("first: {}, second: {}, suffix", (tensor_one, tensor_two)) out = sess.run(formatted) expected = ("first: [[0 1 2 ... 7 8 9]\n" " [10 11 12 ... 17 18 19]\n" " [20 21 22 ... 27 28 29]\n" " ...\n" " [70 71 72 ... 77 78 79]\n" " [80 81 82 ... 87 88 89]\n" " [90 91 92 ... 97 98 99]], second: [0 1 2 ... 7 8 9], suffix") assert(out.decode() == expected) ``` Args: template: A string template to format tensor values into. inputs: A list of `Tensor` objects, or a single Tensor. The list of tensors to format into the template string. If a solitary tensor is passed in, the input tensor will automatically be wrapped as a list. placeholder: An optional `string`. Defaults to `{}`. At each placeholder occurring in the template, a subsequent tensor will be inserted. summarize: An optional `int`. Defaults to `3`. When formatting the tensors, show the first and last `summarize` entries of each tensor dimension (recursively). If set to -1, all elements of the tensor will be shown. name: A name for the operation (optional). Returns: A scalar `Tensor` of type `string`. Raises: ValueError: if the number of placeholders does not match the number of inputs. """ # If there is only one tensor to format, we will automatically wrap it in a # list to simplify the user experience if tensor_util.is_tensor(inputs): inputs = [inputs] if template.count(placeholder) != len(inputs): raise ValueError("%s placeholder(s) in template does not match %s tensor(s)" " provided as input" % (template.count(placeholder), len(inputs))) return gen_string_ops.string_format(inputs, template=template, placeholder=placeholder, summarize=summarize, name=name)