3
dK              &   @   s   d dl Zd dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ dZdZe
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeiZ dd Z!dd Z"dS )	    N)ProvDocument
ProvRecordProvElement
ProvEntityProvActivity	ProvAgentProvRelationPROV_ATTR_ENTITYPROV_ATTR_ACTIVITYPROV_ATTR_AGENTPROV_ATTR_TRIGGERPROV_ATTR_GENERATED_ENTITYPROV_ATTR_USED_ENTITYPROV_ATTR_DELEGATEPROV_ATTR_RESPONSIBLEPROV_ATTR_SPECIFIC_ENTITYPROV_ATTR_GENERAL_ENTITYPROV_ATTR_ALTERNATE1PROV_ATTR_ALTERNATE2PROV_ATTR_COLLECTIONPROV_ATTR_INFORMEDPROV_ATTR_INFORMANTPROV_ATTR_BUNDLEPROV_ATTR_PLANPROV_ATTR_ENDERPROV_ATTR_STARTER
ProvBundlezTrung Dong Huynhztrungdong@donggiang.comc       
      C   s   t j }| j }t }x&|jtD ]}|j| |||j< q"W x|jtD ]}|j	dd \}}|d |d  }}	|rJ|	rJy@||krt
|d  d|||< |	|krt
|d  d|	||	< W n tk
r   wJY nX |j|| ||	 |d qJW |S )aA  
    Convert a :class:`~prov.model.ProvDocument` to a `MultiDiGraph
    <https://networkx.github.io/documentation/stable/reference/classes/multidigraph.html>`_
    instance of the `NetworkX <https://networkx.github.io/>`_ library.

    :param prov_document: The :class:`~prov.model.ProvDocument` instance to convert.
    N      r   )relation)nxZMultiDiGraphunifieddictZget_recordsr   add_node
identifierr   Zformal_attributesINFERRED_ELEMENT_CLASSKeyErrorZadd_edge)
Zprov_documentgr!   Znode_mapelementr   Zattr_pair_1Zattr_pair_2Zqn1Zqn2 r)   */tmp/pip-build-7vycvbft/prov/prov/graph.pyprov_to_graph;   s&    
r+   c             C   s   t  }x.| j D ]"}t|tr|jdk	r|j| qW xP| jddD ]@\}}}y |d }t|trl|j| W qD tk
r   Y qDX qDW |S )a  
    Convert a `MultiDiGraph
    <https://networkx.github.io/documentation/stable/reference/classes/multidigraph.html>`_
    that was previously produced by :func:`prov_to_graph` back to a
    :class:`~prov.model.ProvDocument`.

    :param g: The graph instance to convert.
    NT)datar   )r   Znodes
isinstancer   ZbundleZ
add_recordedgesr&   )r'   Zprov_docn_Z	edge_datar   r)   r)   r*   graph_to_prov\   s    	

r1   )#Znetworkxr    Z
prov.modelr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
__author__	__email__r%   r+   r1   r)   r)   r)   r*   <module>   s0   t!