def to_jgif(graph):
    """Build a JGIF dictionary from a BEL graph.

    :param pybel.BELGraph graph: A BEL graph
    :return: A JGIF dictionary
    :rtype: dict

    .. warning::

        Untested! This format is not general purpose and is therefore time is not heavily invested. If you want to
        use Cytoscape.js, we suggest using :func:`pybel.to_cx` instead.

    Example:

    >>> import pybel, os, json
    >>> graph_url = 'https://arty.scai.fraunhofer.de/artifactory/bel/knowledge/selventa-small-corpus/selventa-small-corpus-20150611.bel'
    >>> graph = pybel.from_url(graph_url)
    >>> graph_jgif_json = pybel.to_jgif(graph)
    >>> with open(os.path.expanduser('~/Desktop/small_corpus.json'), 'w') as f:
    ...     json.dump(graph_jgif_json, f)
    """
    node_bel = {}
    u_v_r_bel = {}

    nodes_entry = []
    edges_entry = []

    for i, node in enumerate(sorted(graph, key=methodcaller('as_bel'))):
        node_bel[node] = bel = node.as_bel()

        nodes_entry.append({
            'id': bel,
            'label': bel,
            'nodeId': i,
            'bel_function_type': node[FUNCTION],
            'metadata': {}
        })

    for u, v in graph.edges():
        relation_evidences = defaultdict(list)

        for data in graph[u][v].values():

            if (u, v, data[RELATION]) not in u_v_r_bel:
                u_v_r_bel[u, v, data[RELATION]] = graph.edge_to_bel(u, v, edge_data=data)

            bel = u_v_r_bel[u, v, data[RELATION]]

            evidence_dict = {
                'bel_statement': bel,
            }

            if ANNOTATIONS in data:
                evidence_dict['experiment_context'] = data[ANNOTATIONS]

            if EVIDENCE in data:
                evidence_dict['summary_text'] = data[EVIDENCE]

            if CITATION in data:
                evidence_dict['citation'] = data[CITATION]

            relation_evidences[data[RELATION]].append(evidence_dict)

        for relation, evidences in relation_evidences.items():
            edges_entry.append({
                'source': node_bel[u],
                'target': node_bel[v],
                'relation': relation,
                'label': u_v_r_bel[u, v, relation],
                'metadata': {
                    'evidences': evidences
                }
            })

    return {
        'graph': {
            'metadata': graph.document,
            'nodes': nodes_entry,
            'edges': edges_entry
        }
    }
def to_jgif ( graph ) : node_bel = { } u_v_r_bel = { } nodes_entry = [ ] edges_entry = [ ] for i , node in enumerate ( sorted ( graph , key = methodcaller ( 'as_bel' ) ) ) : node_bel [ node ] = bel = node . as_bel ( ) nodes_entry . append ( { 'id' : bel , 'label' : bel , 'nodeId' : i , 'bel_function_type' : node [ FUNCTION ] , 'metadata' : { } } ) for u , v in graph . edges ( ) : relation_evidences = defaultdict ( list ) for data in graph [ u ] [ v ] . values ( ) : if ( u , v , data [ RELATION ] ) not in u_v_r_bel : u_v_r_bel [ u , v , data [ RELATION ] ] = graph . edge_to_bel ( u , v , edge_data = data ) bel = u_v_r_bel [ u , v , data [ RELATION ] ] evidence_dict = { 'bel_statement' : bel , } if ANNOTATIONS in data : evidence_dict [ 'experiment_context' ] = data [ ANNOTATIONS ] if EVIDENCE in data : evidence_dict [ 'summary_text' ] = data [ EVIDENCE ] if CITATION in data : evidence_dict [ 'citation' ] = data [ CITATION ] relation_evidences [ data [ RELATION ] ] . append ( evidence_dict ) for relation , evidences in relation_evidences . items ( ) : edges_entry . append ( { 'source' : node_bel [ u ] , 'target' : node_bel [ v ] , 'relation' : relation , 'label' : u_v_r_bel [ u , v , relation ] , 'metadata' : { 'evidences' : evidences } } ) return { 'graph' : { 'metadata' : graph . document , 'nodes' : nodes_entry , 'edges' : edges_entry } }
Build a JGIF dictionary from a BEL graph.

    :param pybel.BELGraph graph: A BEL graph
    :return: A JGIF dictionary
    :rtype: dict

    .. warning::

        Untested! This format is not general purpose and is therefore time is not heavily invested. If you want to
        use Cytoscape.js, we suggest using :func:`pybel.to_cx` instead.

    Example:

    >>> import pybel, os, json
    >>> graph_url = 'https://arty.scai.fraunhofer.de/artifactory/bel/knowledge/selventa-small-corpus/selventa-small-corpus-20150611.bel'
    >>> graph = pybel.from_url(graph_url)
    >>> graph_jgif_json = pybel.to_jgif(graph)
    >>> with open(os.path.expanduser('~/Desktop/small_corpus.json'), 'w') as f:
    ...     json.dump(graph_jgif_json, f)