
gbc           @   sV   d  d l  m Z m Z d  d l m Z d e f d     YZ d e f d     YZ d S(   i(   t   UndirectedGrapht   Node(   t   componentCountt   Forestc           B   s5   e  Z d d d   Z d d d d d  Z d   Z RS(   c         C   s1   | d  k r$ |  j j | t  } n  t | |   S(   N(   t   Nonet   _indext   getIndext   Truet   TreeNode(   t   selft   nodet   index(    (    s2   lib/python2.7/site-packages/obitools/graph/tree.pyt   getNode   s    c         K   s   |  j  | |  } |  j  | |  } t d   |  j d |  j   D  } | |  j | k sw | | k sw t d   t j |  d | d | | | | f S(   Nc         s   s   |  ] } | j  Vq d  S(   N(   R   (   t   .0t   n(    (    s2   lib/python2.7/site-packages/obitools/graph/tree.pys	   <genexpr>   s    R   s;   No more than one path is alloed between two nodes in a treet   index1t   index2(   t   addNodet   setR   t   componentIteratort   _nodet   AssertionErrorR    t   addEdge(   R	   t   node1t   node2R   R   t   datat   cc(    (    s2   lib/python2.7/site-packages/obitools/graph/tree.pyR      s    ("	c         C   s   t  |   d k S(   Ni   (   R   (   R	   (    (    s2   lib/python2.7/site-packages/obitools/graph/tree.pyt   isASingleTree   s    N(   t   __name__t
   __module__R   R   R   R   (    (    (    s2   lib/python2.7/site-packages/obitools/graph/tree.pyR      s   R   c           B   s   e  Z d    Z RS(   c         c   s0   x) |  D]! } | Vx | D] } | Vq Wq Wd  S(   N(    (   R	   t   cR   (    (    s2   lib/python2.7/site-packages/obitools/graph/tree.pyR      s    (   R   R   R   (    (    (    s2   lib/python2.7/site-packages/obitools/graph/tree.pyR      s   N(   t   obitools.graphR    R   t#   obitools.graph.algorithms.componentR   R   R   (    (    (    s2   lib/python2.7/site-packages/obitools/graph/tree.pyt   <module>   s   