code: def text(name, tensor, collections=None):
      """Summarizes textual data.
  
      Text data summarized via this plugin will be visible in the Text Dashboard
      in TensorBoard. The standard TensorBoard Text Dashboard will render markdown
      in the strings, and will automatically organize 1d and 2d tensors into tables.
      If a tensor with more than 2 dimensions is provided, a 2d subarray will be
      displayed along with a warning message. (Note that this behavior is not
      intrinsic to the text summary api, but rather to the default TensorBoard text
      plugin.)
  
      Args:
        name: A name for the generated node. Will also serve as a series name in
          TensorBoard.
        tensor: a string-type Tensor to summarize.
        collections: Optional list of ops.GraphKeys.  The collections to add the
          summary to.  Defaults to [_ops.GraphKeys.SUMMARIES]
  
      Returns:
        A TensorSummary op that is configured so that TensorBoard will recognize
        that it contains textual data. The TensorSummary is a scalar `Tensor` of
        type `string` which contains `Summary` protobufs.
  
      Raises:
        ValueError: If tensor has the wrong type.
  
      @compatibility(TF2)
      For compatibility purposes, when invoked in TF2 where the outermost context is
      eager mode, this API will check if there is a suitable TF2 summary writer
      context available, and if so will forward this call to that writer instead. A
      "suitable" writer context means that the writer is set as the default writer,
      and there is an associated non-empty value for `step` (see
      `tf.summary.SummaryWriter.as_default`, `tf.summary.experimental.set_step` or
      alternatively `tf.compat.v1.train.create_global_step`). For the forwarded
      call, the arguments here will be passed to the TF2 implementation of
      `tf.summary.text`, and the return value will be an empty bytestring tensor, to
      avoid duplicate summary writing. This forwarding is best-effort and not all
      arguments will be preserved.
  
      To migrate to TF2, please use `tf.summary.text` instead. Please check
      [Migrating tf.summary usage to
      TF 2.0](https://www.tensorflow.org/tensorboard/migrate#in_tf_1x) for concrete
      steps for migration.
  
      #### How to Map Arguments
  
      | TF1 Arg Name  | TF2 Arg Name    | Note                                   |
      | :------------ | :-------------- | :------------------------------------- |
      | `name`        | `name`          | -                                      |
      | `tensor`      | `data`          | -                                      |
      | -             | `step`          | Explicit int64-castable monotonic step |
      :               :                 : value. If omitted, this defaults to    :
      :               :                 : `tf.summary.experimental.get_step()`.  :
      | `collections` | Not Supported   | -                                      |
      | -             | `description`   | Optional long-form `str` description   |
      :               :                 : for the summary. Markdown is supported.:
      :               :                 : Defaults to empty.                     :
  
      @end_compatibility
      """
      if tensor.dtype != _dtypes.string:
          raise ValueError(
              "Expected tensor %s to have dtype string, got %s"
              % (tensor.name, tensor.dtype)
          )
  
      # Special case: invoke v2 op for TF2 users who have a v2 writer.
      if _should_invoke_v2_op():
          # `skip_summary` check for v1 op case is done in `tensor_summary`.
          if _distribute_summary_op_util.skip_summary():
              return _constant_op.constant("")
          # Defer the import to happen inside the symbol to prevent breakage due to
          # missing dependency.
          tb_summary.text(
              name=name, data=tensor, step=_get_step_for_v2()
          )
          # Return an empty Tensor, which will be acceptable as an input to the
          # `tf.compat.v1.summary.merge()` API.
          return _constant_op.constant(b"")
  
      # Fall back to legacy v1 text implementation.
      summary_metadata = _SummaryMetadata(
          plugin_data=_SummaryMetadata.PluginData(plugin_name="text")
      )
      t_summary = tensor_summary(
          name=name,
          tensor=tensor,
          summary_metadata=summary_metadata,
          collections=collections,
      )
      return t_summary
  
imports: import contextlib
  import warnings
  from google.protobuf import json_format
  from tensorflow.core.framework.summary_pb2 import Summary
  from tensorflow.core.framework.summary_pb2 import SummaryDescription
  from tensorflow.core.framework.summary_pb2 import SummaryMetadata
  from tensorflow.core.util.event_pb2 import Event
  from tensorflow.core.util.event_pb2 import SessionLog
  from tensorflow.core.util.event_pb2 import TaggedRunMetadata
  from tensorflow.python.distribute import summary_op_util
  from tensorflow.python.eager import context
  from tensorflow.python.framework import constant_op
  from tensorflow.python.framework import dtypes
  from tensorflow.python.framework import ops
  from tensorflow.python.ops import array_ops
  from tensorflow.python.ops import gen_logging_ops
  from tensorflow.python.ops import gen_summary_ops
  from tensorflow.python.ops import summary_op_util
  from tensorflow.python.ops import summary_ops_v2
  from tensorflow.python.summary import tb_summary
  from tensorflow.python.summary.writer.writer import FileWriter
  from tensorflow.python.summary.writer.writer_cache import FileWriterCache
  from tensorflow.python.training import training_util
  from tensorflow.python.util import compat
  from tensorflow.python.util.tf_export import tf_export
label_desc: Use image node_id 5 for calling a global function with example usage: text(name, tensor, collections) and returns: t_summary, _constant_op, _constant_op