class_docstr: A scalable graph data structure. The SGraph data structure allows arbitrary
  dictionary attributes on vertices and edges, provides flexible vertex and
  edge query functions, and seamless transformation to and from
  :class:`~turicreate.SFrame`.
  
  There are several ways to create an SGraph. The simplest way is to make an
  empty SGraph then add vertices and edges with the :py:func:`add_vertices`
  and :py:func:`add_edges` methods. SGraphs can also be created from vertex
  and edge lists stored in :class:`~turicreate.SFrames`. Columns of these
  SFrames not used as vertex IDs are assumed to be vertex or edge attributes.
  
  Please see the `User Guide
  <https://apple.github.io/turicreate/docs/userguide/sgraph/sgraph.html>`_
  for a more detailed introduction to creating and working with SGraphs.
  
  Parameters
  ----------
  vertices : SFrame, optional
      Vertex data. Must include an ID column with the name specified by
      the `vid_field` parameter. Additional columns are treated as vertex
      attributes.
  
  edges : SFrame, optional
      Edge data. Must include source and destination ID columns as specified
      by `src_field` and `dst_field` parameters. Additional columns are treated
      as edge attributes.
  
  vid_field : str, optional
      The name of vertex ID column in the `vertices` SFrame.
  
  src_field : str, optional
      The name of source ID column in the `edges` SFrame.
  
  dst_field : str, optional
      The name of destination ID column in the `edges` SFrame.
  
  See Also
  --------
  SFrame
  
  Notes
  -----
  - SGraphs are *structurally immutable*. In the example below, the
    :func:`~add_vertices` and :func:`~add_edges` commands both return a new
    graph; the old graph gets garbage collected.
  
  Examples
  --------
  >>> from turicreate import SGraph, Vertex, Edge
  >>> g = SGraph()
  >>> verts = [Vertex(0, attr={'breed': 'labrador'}),
               Vertex(1, attr={'breed': 'labrador'}),
               Vertex(2, attr={'breed': 'vizsla'})]
  >>> g = g.add_vertices(verts)
  >>> g = g.add_edges(Edge(1, 2))
class_docstr_tok: ["A","scalable","graph","data","structure",".","The","SGraph","data","structure","allows","arbitrary","dictionary","attributes","on","vertices","and","edges",",","provides","flexible","vertex","and","edge","query","functions",",","and","seamless","transformation","to","and","from",":","class",":","`","~turicreate.SFrame","`",".","There","are","several","ways","to","create","an","SGraph",".","The","simplest","way","is","to","make","an","empty","SGraph","then","add","vertices","and","edges","with","the",":","py",":","func",":","`","add_vertices","`","and",":","py",":","func",":","`","add_edges","`","methods",".","SGraphs","can","also","be","created","from","vertex","and","edge","lists","stored","in",":","class",":","`","~turicreate.SFrames","`",".","Columns","of","these","SFrames","not","used","as","vertex","IDs","are","assumed","to","be","vertex","or","edge","attributes",".","Please","see","the","`","User","Guide","<","https",":","\/\/apple.github.io\/turicreate\/docs\/userguide\/sgraph\/sgraph.html",">","`","_","for","a","more","detailed","introduction","to","creating","and","working","with","SGraphs",".","Parameters","--","--","--","--","--","vertices",":","SFrame",",","optional","Vertex","data",".","Must","include","an","ID","column","with","the","name","specified","by","the","`","vid_field","`","parameter",".","Additional","columns","are","treated","as","vertex","attributes",".","edges",":","SFrame",",","optional","Edge","data",".","Must","include","source","and","destination","ID","columns","as","specified","by","`","src_field","`","and","`","dst_field","`","parameters",".","Additional","columns","are","treated","as","edge","attributes",".","vid_field",":","str",",","optional","The","name","of","vertex","ID","column","in","the","`","vertices","`","SFrame",".","src_field",":","str",",","optional","The","name","of","source","ID","column","in","the","`","edges","`","SFrame",".","dst_field",":","str",",","optional","The","name","of","destination","ID","column","in","the","`","edges","`","SFrame",".","See","Also","--","--","--","--","SFrame","Notes","--","--","-","-","SGraphs","are","*","structurally","immutable","*",".","In","the","example","below",",","the",":","func",":","`","~add_vertices","`","and",":","func",":","`","~add_edges","`","commands","both","return","a","new","graph",";","the","old","graph","gets","garbage","collected",".","Examples","--","--","--","--",">",">",">","from","turicreate","import","SGraph",",","Vertex",",","Edge",">",">",">","g","=","SGraph","(",")",">",">",">","verts","=","[","Vertex","(","0",",","attr=","{","'breed","'",":","'labrador","'","}",")",",","Vertex","(","1",",","attr=","{","'breed","'",":","'labrador","'","}",")",",","Vertex","(","2",",","attr=","{","'breed","'",":","'vizsla","'","}",")","]",">",">",">","g","=","g.add_vertices","(","verts",")",">",">",">","g","=","g.add_edges","(","Edge","(","1",",","2",")",")"]
docstr: Special vertex SFrame of the SGraph. Modifying the contents of this
  SFrame changes the vertex data of the SGraph. To preserve the graph
  structure, the ``__id`` column of this SFrame is read-only.
  
  See Also
  --------
  Edge
  
  Examples
  --------
  >>> from turicreate import SGraph, Vertex
  >>> g = SGraph().add_vertices([Vertex('cat', {'fluffy': 1}),
                                 Vertex('dog', {'fluffy': 1, 'woof': 1}),
                                 Vertex('hippo', {})])
  
  Copy the 'woof' vertex attribute into a new 'bark' vertex attribute:
  
  >>> g.vertices['bark'] = g.vertices['woof']
  
  Remove the 'woof' attribute:
  
  >>> del g.vertices['woof']
  
  Create a new field 'likes_fish':
  
  >>> g.vertices['likes_fish'] = g.vertices['__id'] == 'cat'
  +-------+--------+------+------------+
  |  __id | fluffy | bark | likes_fish |
  +-------+--------+------+------------+
  |  dog  |  1.0   | 1.0  |     0      |
  |  cat  |  1.0   | nan  |     1      |
  | hippo |  nan   | nan  |     0      |
  +-------+--------+------+------------+
  
  Replace missing values with zeros:
  
  >>> for col in g.vertices.column_names():
  ...     if col != '__id':
  ...         g.vertices.fillna(col, 0)
  +-------+--------+------+------------+
  |  __id | fluffy | bark | likes_fish |
  +-------+--------+------+------------+
  |  dog  |  1.0   | 1.0  |     0      |
  |  cat  |  1.0   | 0.0  |     1      |
  | hippo |  0.0   | 0.0  |     0      |
  +-------+--------+------+------------+
docstr_tok: ["Special","vertex","SFrame","of","the","SGraph",".","Modifying","the","contents","of","this","SFrame","changes","the","vertex","data","of","the","SGraph",".","To","preserve","the","graph","structure",",","the","``","__id","``","column","of","this","SFrame","is","read-only",".","See","Also","--","--","--","--","Edge","Examples","--","--","--","--",">",">",">","from","turicreate","import","SGraph",",","Vertex",">",">",">","g","=","SGraph","(",")",".add_vertices","(","[","Vertex","(","'cat","'",",","{","'fluffy","'",":","1","}",")",",","Vertex","(","'dog","'",",","{","'fluffy","'",":","1",",","'woof","'",":","1","}",")",",","Vertex","(","'hippo","'",",","{","}",")","]",")","Copy","the","'woof","'","vertex","attribute","into","a","new","'bark","'","vertex","attribute",":",">",">",">","g.vertices","[","'bark","'","]","=","g.vertices","[","'woof","'","]","Remove","the","'woof","'","attribute",":",">",">",">","del","g.vertices","[","'woof","'","]","Create","a","new","field","'likes_fish","'",":",">",">",">","g.vertices","[","'likes_fish","'","]","=","g.vertices","[","'__id","'","]","==","'cat'","+","--","--","--","-+","--","--","--","--","+","--","--","--","+","--","--","--","--","--","--","+","|","__id","|","fluffy","|","bark","|","likes_fish","|","+","--","--","--","-+","--","--","--","--","+","--","--","--","+","--","--","--","--","--","--","+","|","dog","|","1.0","|","1.0","|","0","|","|","cat","|","1.0","|","nan","|","1","|","|","hippo","|","nan","|","nan","|","0","|","+","--","--","--","-+","--","--","--","--","+","--","--","--","+","--","--","--","--","--","--","+","Replace","missing","values","with","zeros",":",">",">",">","for","col","in","g.vertices.column_names","(",")",":","...","if","col","!","=","'__id","'",":","...","g.vertices.fillna","(","col",",","0",")","+","--","--","--","-+","--","--","--","--","+","--","--","--","+","--","--","--","--","--","--","+","|","__id","|","fluffy","|","bark","|","likes_fish","|","+","--","--","--","-+","--","--","--","--","+","--","--","--","+","--","--","--","--","--","--","+","|","dog","|","1.0","|","1.0","|","0","|","|","cat","|","1.0","|","0.0","|","1","|","|","hippo","|","0.0","|","0.0","|","0","|","+","--","--","--","-+","--","--","--","--","+","--","--","--","+","--","--","--","--","--","--","+"]
code: def vertices(self):
      """
      Special vertex SFrame of the SGraph. Modifying the contents of this
      SFrame changes the vertex data of the SGraph. To preserve the graph
      structure, the ``__id`` column of this SFrame is read-only.
  
      See Also
      --------
      Edge
  
      Examples
      --------
      >>> from turicreate import SGraph, Vertex
      >>> g = SGraph().add_vertices([Vertex('cat', {'fluffy': 1}),
                                     Vertex('dog', {'fluffy': 1, 'woof': 1}),
                                     Vertex('hippo', {})])
  
      Copy the 'woof' vertex attribute into a new 'bark' vertex attribute:
  
      >>> g.vertices['bark'] = g.vertices['woof']
  
      Remove the 'woof' attribute:
  
      >>> del g.vertices['woof']
  
      Create a new field 'likes_fish':
  
      >>> g.vertices['likes_fish'] = g.vertices['__id'] == 'cat'
      +-------+--------+------+------------+
      |  __id | fluffy | bark | likes_fish |
      +-------+--------+------+------------+
      |  dog  |  1.0   | 1.0  |     0      |
      |  cat  |  1.0   | nan  |     1      |
      | hippo |  nan   | nan  |     0      |
      +-------+--------+------+------------+
  
      Replace missing values with zeros:
  
      >>> for col in g.vertices.column_names():
      ...     if col != '__id':
      ...         g.vertices.fillna(col, 0)
      +-------+--------+------+------------+
      |  __id | fluffy | bark | likes_fish |
      +-------+--------+------+------------+
      |  dog  |  1.0   | 1.0  |     0      |
      |  cat  |  1.0   | 0.0  |     1      |
      | hippo |  0.0   | 0.0  |     0      |
      +-------+--------+------+------------+
      """
  
      return self._vertices
  
imports: from __future__ import print_function
  from __future__ import division
  from __future__ import absolute_import
  from .._connect import main
  from .sframe import SFrame
  from .sarray import SArray
  from .gframe import GFrame, VERTEX_GFRAME, EDGE_GFRAME
  from .._cython.cy_graph import UnityGraphProxy
  from .._cython.context import debug_trace
  from ..util import _is_non_string_iterable, _make_internal_url
  from .._deps import pandas
  from .._deps import HAS_PANDAS
  import inspect
  import copy
  import sys
label_desc: Use image node_id 7 for calling the SGraph obj's underlying member method code with example usage: obj.vertices() and returns: self