ó
2(Vc           @   s+   d  Z  d Z d   Z d   Z d   Z d S(   s7   Compute a resolution order for an object and its bases
t   restructuredtextc         C   sg   i  } g  } xT t  |   D]F } x= t  |  D]/ } | | k r, d | | <| j d |  q, q, Wq W| S(   sĄ  Merge multiple orderings so that within-ordering order is preserved

    Orderings are constrained in such a way that if an object appears
    in two or more orderings, then the suffix that begins with the
    object must be in both orderings.

    For example:

    >>> _mergeOrderings([
    ... ['x', 'y', 'z'],
    ... ['q', 'z'],
    ... [1, 3, 5],
    ... ['z']
    ... ])
    ['x', 'y', 'q', 1, 3, 5, 'z']

    i   i    (   t   reversedt   insert(   t	   orderingst   seent   resultt   orderingt   o(    (    s5   /usr/lib/python2.7/dist-packages/zope/interface/ro.pyt   _mergeOrderings   s    
c         C   sD   |  g } d } x. t  |  D]  }  | d 7} |  j | | | +q W| S(   Ni    i   (   t   itert	   __bases__(   t   obR   t   i(    (    s5   /usr/lib/python2.7/dist-packages/zope/interface/ro.pyt   _flatten/   s    	
c         C   s   t  t |   g  S(   s/   Compute a "resolution order" for an object
    (   R   R   (   t   object(    (    s5   /usr/lib/python2.7/dist-packages/zope/interface/ro.pyt   ro=   s    N(   t   __doc__t   __docformat__R   R   R   (    (    (    s5   /usr/lib/python2.7/dist-packages/zope/interface/ro.pyt   <module>   s   		