class_docstr: Simple Graph with GraphViz.
  
  Example: 
  
  .. code-block:: python
  
    import nnabla as nn
    import nnabla.functions as F
    import nnabla.parametric_functions as PF
  
    import nnabla.experimental.viewers as V
  
    # Model definition
    def network(image, test=False):
        h = image
        h /= 255.0
        h = PF.convolution(h, 16, kernel=(3, 3), pad=(1, 1), name="conv")
        h = PF.batch_normalization(h, name="bn", batch_stat=not test)
        h = F.relu(h)
        pred = PF.affine(h, 10, name='fc')
        return pred
  
    # Model
    image = nn.Variable([4, 3, 32, 32])
    pred = network(image, test=False)
  
    # Graph Viewer
    graph = V.SimpleGraph(verbose=False)
    graph.view(pred)
    graph.save(pred, "sample_grpah")
  
  
  If the parameters are module-scoped, for example, the ``pred`` comes from a
  module output, parameters should be obtained beforehand then passed to view():
  
  Example:
  
  .. code-block:: python
  
    import nnabla as nn
    import nnabla.functions as F
    from nnabla.core.modules import ConvBn
  
    import nnabla.experimental.viewers as V
  
    class TSTNetNormal(nn.Module):
        def __init__(self):
            self.conv_bn_1 = ConvBn(1)
            self.conv_bn_2 = ConvBn(1)
  
        def call(self, x1, x2):
            y1 = self.conv_bn_1(x1)
            y2 = self.conv_bn_2(x2)
            y = F.concatenate(y1, y2, axis=1)
            return y
  
    tnd = TSTNetNormal()
  
    v1 = nn.Variable((4, 3, 32, 32))
    v2 = nn.Variable((4, 3, 32, 32))
  
    ya = tnd(v1, v2)
  
    graph = V.SimpleGraph(verbose=False)
    graph.view(ya, params=tnd.get_parameters(grad_only=False))
docstr: Save the graph to a given file path.
  
  Args:
    vleaf (`nnabla.Variable`): End variable. All variables and functions which can be traversed from this variable are shown in the reuslt.
    fpath (`str`): The file path used to save. 
    cleanup (`bool`): Clean up the source file after rendering. Default is False.
    format (str):
        Force overwrite ``format`` (``'pdf', 'png', ...)``) configuration.
docstr_tok: ["Save","the","graph","to","a","given","file","path",".","Args",":","vleaf","(","`","nnabla.Variable","`",")",":","End","variable",".","All","variables","and","functions","which","can","be","traversed","from","this","variable","are","shown","in","the","reuslt",".","fpath","(","`","str","`",")",":","The","file","path","used","to","save",".","cleanup","(","`","bool","`",")",":","Clean","up","the","source","file","after","rendering",".","Default","is","False",".","format","(","str",")",":","Force","overwrite","``","format","``","(","``","'pdf","'",",","'png","'",",","...",")","``",")","configuration","."]
code: def save(self, vleaf, fpath, cleanup=False, format=None):
      """Save the graph to a given file path.
  
      Args:
        vleaf (`nnabla.Variable`): End variable. All variables and functions which can be traversed from this variable are shown in the reuslt.
        fpath (`str`): The file path used to save.
        cleanup (`bool`): Clean up the source file after rendering. Default is False.
        format (str):
            Force overwrite ``format`` (``'pdf', 'png', ...)``) configuration.
  
      """
      graph = self.create_graphviz_digraph(vleaf, format=format)
      graph.render(fpath, cleanup=cleanup)
  
file_path: nnabla/python/src/nnabla/experimental/viewers.py
imports: import json
  import os
  from collections import defaultdict
  import numpy
label_desc: Use image node_id 2 for calling the SimpleGraph obj's underlying member method code with example usage: obj.save(vleaf, fpath, cleanup, format) without return types