class_docstr: Represents a framework-agnostic neural network layer in a directed graph.
class_docstr_tok: ["Represents","a","framework-agnostic","neural","network","layer","in","a","directed","graph","."]
docstr: uid: unique ID for the layer that doesn't repeat in the computation graph.
  name: Name to display
  op: Framework-agnostic operation name.
docstr_tok: ["uid",":","unique","ID","for","the","layer","that","does","n't","repeat","in","the","computation","graph",".","name",":","Name","to","display","op",":","Framework-agnostic","operation","name","."]
code: def __init__(
      self,
      uid,
      name,
      op,
      output_shape=None,
      params=None,
      combo_params=None,
  ):
      """
      uid: unique ID for the layer that doesn't repeat in the computation graph.
      name: Name to display
      op: Framework-agnostic operation name.
      """
      self.id = uid
      self.name = name  # TODO: clarify the use of op vs name vs title
      self.op = op
      self.repeat = 1
      if output_shape:
          assert isinstance(
              output_shape, (tuple, list)
          ), "output_shape must be a tuple or list but received {}".format(
              type(output_shape)
          )
      self.output_shape = output_shape
      self.params = params if params else {}
      self._caption = ""
      self.combo_params = combo_params
  
imports: from __future__ import absolute_import, division, print_function
  import os
  import re
  from random import getrandbits
  import inspect
  import numpy
  import html
label_desc: Use image node_id 1 to create a new Node object  with example: obj = Node(uid, name, op, output_shape, params, combo_params)