³ò
®d|Mc           @   s]   d  Z  d d k l Z d d k l Z d d d g Z d „  Z d „  Z d	 „  Z d
 „  Z	 d S(   s   Topological sorting algorithms.iÿÿÿÿ(   t   CircularDependencyError(   t   utilt   sortt   sort_as_subsetst   find_cyclesc      	   c   sÙ   t  i t ƒ } x% |  D] \ } } | | i | ƒ q Wt | ƒ } x | o‡ t ƒ  } x9 t | ƒ D]+ } | i | | ƒ p | i | ƒ qc qc W| p% t d t |  | ƒ t | ƒ ƒ ‚ n | i	 | ƒ | VqF Wd  S(   Ns   Circular dependency detected(
   R   t   defaultdictt   sett   addt   listt   intersectionR    R   t
   _gen_edgest   difference_update(   t   tuplest   allitemst   edgest   parentt   childt   todot   outputt   node(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/topological.pyR      s&      	 c         c   s4   x- t  |  | ƒ D] } x | D] } | Vq Wq Wd S(   ss   sort the given list of items by dependency.

    'tuples' is a list of tuples representing a partial ordering.
    N(   R   (   R   R   t   set_t   s(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/topological.pyR   '   s
      c         C   s  t  | ƒ } t i t  ƒ } x% |  D] \ } } | | i | ƒ q" Wt  ƒ  } xÅ | o½ | i ƒ  } | g } x¡ | o™ | d }	 xˆ | |	 D]p } | | j o1 | | i | ƒ }
 | i |
 ƒ | i |
 ƒ n | | j o | i | ƒ | i	 | ƒ PqŠ qŠ W| i ƒ  } qn WqO W| S(   Niÿÿÿÿ(
   R   R   R   R   t   popt   indexR   t   updatet   appendt   remove(   R   R   R   R   R   R   R   R   t   stackt   topt   cyc(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/topological.pyR   1   s2     	 	 
 	c         C   s<   t  g  } |  D]$ } |  | D] } | | | f q q ~ ƒ S(   N(   R   (   R   t   _[1]t   leftt   right(    (    ss   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/topological.pyR
   N   s    
N(
   t   __doc__t   sqlalchemy.excR    t
   sqlalchemyR   t   __all__R   R   R   R
   (    (    (    ss   /afs/athena.mit.edu/user/x/a/xavid/lib/python2.5/site-packages/SQLAlchemy-0.6.6-py2.5.egg/sqlalchemy/topological.pys   <module>   s   		
	