
    zj                    x    d dl mZ d dlmZmZmZ erd dlmZmZ  ed          Z	 G d dee	                   Z
dS )    )annotations)TYPE_CHECKINGGenericTypeVar)IterableIteratorTc                      e Zd ZU dZded<   d"d#dZd$d
Zd%dZd&dZd%dZ	d&dZ
d%dZd&dZd%dZd&dZd'dZd'dZd(dZd)dZd*dZd+dZd,d!ZdS )-
OrderedSetz6
    A set that preserves the order of insertion.
    zdict[T, None]_dataNitemsIterable[T] | Nonec                L    |t                               |          ni | _        dS )z
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> s
            OrderedSet(1, 2, 3)
            >>> s = OrderedSet()
            >>> s
            OrderedSet()
        N)dictfromkeysr   )selfr   s     `/lsinfo/ai/hellotax_ai/data_center/backend/venv/lib/python3.11/site-packages/paddle/jit/utils.py__init__zOrderedSet.__init__    s%     .3->T]]5)))B


    returnIterator[T]c                *    t          | j                  S )z
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> for item in s:
            ...     print(item)
            1
            2
            3
        )iterr   r   s    r   __iter__zOrderedSet.__iter__,        DJr   otherOrderedSet[T]c                Z    t          t          |           t          |          z             S )a7  
        Union two sets.

        Args:
            other: Another set to be unioned.

        Returns:
            The union of two sets.

        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([2, 3, 4])
            >>> s1 | s2
            OrderedSet(1, 2, 3, 4)
        )r   listr   r   s     r   __or__zOrderedSet.__or__8   s#      $t**tE{{2333r   c                j    | j                             t                              |                     | S )a  
        Union two sets in place.

        Args:
            other: Another set to be unioned.

        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([2, 3, 4])
            >>> s1 |= s2
            >>> s1
            OrderedSet(1, 2, 3, 4)
        )r   updater   r   r!   s     r   __ior__zOrderedSet.__ior__J   s+     	
$--..///r   c                :    t          fd| D                       S )a@  
        Intersect two sets.

        Args:
            other: Another set to be intersected.

        Returns:
            The intersection of two sets.

        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([2, 3, 4])
            >>> s1 & s2
            OrderedSet(2, 3)
        c                    g | ]}|v |	S  r(   .0itemr   s     r   
<listcomp>z&OrderedSet.__and__.<locals>.<listcomp>k   s    BBBDDEMM4MMMr   r   r!   s    `r   __and__zOrderedSet.__and__[   s(      BBBBDBBBCCCr   c                .    fd| D             | _         | S )a!  
        Intersect two sets in place.

        Args:
            other: Another set to be intersected.

        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([2, 3, 4])
            >>> s1 &= s2
            >>> s1
            OrderedSet(2, 3)
        c                    i | ]	}|v |d 
S Nr(   r)   s     r   
<dictcomp>z'OrderedSet.__iand__.<locals>.<dictcomp>{   s     CCCTTU]]dD]]]r   r   r!   s    `r   __iand__zOrderedSet.__iand__m   s&     DCCCTCCC
r   c                :    t          fd| D                       S )a:  
        Subtract two sets.

        Args:
            other: Another set to be subtracted.

        Returns:
            The subtraction of two sets.

        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([2, 3, 4])
            >>> s1 - s2
            OrderedSet(1)
        c                    g | ]}|v|	S r(   r(   r)   s     r   r,   z&OrderedSet.__sub__.<locals>.<listcomp>   s#    FFFDD4E4E44E4E4Er   r-   r!   s    `r   __sub__zOrderedSet.__sub__~   s(      FFFFDFFFGGGr   c                .    fd| D             | _         | S )a  
        Subtract two sets in place.

        Args:
            other: Another set to be subtracted.

        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([2, 3, 4])
            >>> s1 -= s2
            >>> s1
            OrderedSet(1)
        c                    i | ]	}|v|d 
S r1   r(   r)   s     r   r2   z'OrderedSet.__isub__.<locals>.<dictcomp>   s%    GGGTT5F5FdD5F5F5Fr   r3   r!   s    `r   __isub__zOrderedSet.__isub__   s&     HGGGTGGG
r   c                t     t          fd D                       t           fdD                       z  S )aQ  
        Symmetric difference of two sets.

        Args:
            other: Another set to be xor'ed.

        Returns:
            The symmetric difference of two sets.

        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([2, 3, 4])
            >>> s1 ^ s2
            OrderedSet(1, 4)
        c                    g | ]}|v|	S r(   r(   r)   s     r   r,   z&OrderedSet.__xor__.<locals>.<listcomp>   s#    888dd%&7&7T&7&7&7r   c                    g | ]}|v|	S r(   r(   r*   r+   r   s     r   r,   z&OrderedSet.__xor__.<locals>.<listcomp>   s#    CCC$d2B2B2B2B2Br   r-   r!   s   ``r   __xor__zOrderedSet.__xor__   sV      8888d888
 
CCCCCCCDDE 	Er   c                P     i fd D              fdD              _          S )a*  
        Symmetric difference of two sets in place.

        Args:
            other: Another set to be xor'ed.

        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([2, 3, 4])
            >>> s1 ^= s2
            >>> s1
            OrderedSet(1, 4)
        c                    i | ]	}|v|d 
S r1   r(   r)   s     r   r2   z'OrderedSet.__ixor__.<locals>.<dictcomp>   s%    @@@dd%.?.?tT.?.?.?r   c                    i | ]	}|v|d 
S r1   r(   r>   s     r   r2   z'OrderedSet.__ixor__.<locals>.<dictcomp>   s%    @@@dt4/?/?tT/?/?/?r   r3   r!   s   ``r   __ixor__zOrderedSet.__ixor__   sL    
@@@@d@@@
@@@@e@@@

 r   r+   r	   c                :    | j                             |           dS )z
        Add an item to the set.

        Args:
            item: The item to be added.

        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> s.add(4)
            >>> s
            OrderedSet(1, 2, 3, 4)
        N)r   
setdefaultr   r+   s     r   addzOrderedSet.add   s      	
d#####r   c                    | j         |= dS )z
        Remove an item from the set.

        Args:
            item: The item to be removed.

        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> s.remove(2)
            >>> s
            OrderedSet(1, 3)
        Nr3   rF   s     r   removezOrderedSet.remove   s     Jtr   boolc                    || j         v S )z
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> 1 in s
            True
            >>> 4 in s
            False
        r3   rF   s     r   __contains__zOrderedSet.__contains__   s     tz!!r   intc                *    t          | j                  S )zj
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> len(s)
            3
        )lenr   r   s    r   __len__zOrderedSet.__len__   s     4:r   c                *    t          | j                  S )z
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> bool(s)
            True
            >>> s = OrderedSet()
            >>> bool(s)
            False
        )rJ   r   r   s    r   __bool__zOrderedSet.__bool__   r   r   objectc                z    t          |t                    st          S t          |           t          |          k    S )z
        Examples:
            >>> s1 = OrderedSet([1, 2, 3])
            >>> s2 = OrderedSet([1, 2, 3])
            >>> s1 == s2
            True
            >>> s3 = OrderedSet([3, 2, 1])
            >>> s1 == s3
            False
        )
isinstancer   NotImplementedr    r!   s     r   __eq__zOrderedSet.__eq__  s3     %,, 	"!!DzzT%[[((r   strc                h    d                     t          t          | j                            }d| dS )Nz, zOrderedSet())joinmapreprr   )r   	data_reprs     r   __repr__zOrderedSet.__repr__  s0    IIc$
3344	)Y))))r   r1   )r   r   )r   r   )r   r   r   r   )r   r   )r+   r	   )r+   r	   r   rJ   )r   rM   )r   rJ   )r   rS   r   rJ   )r   rX   )__name__
__module____qualname____doc____annotations__r   r   r"   r%   r.   r4   r7   r:   r?   rC   rG   rI   rL   rP   rR   rW   r_   r(   r   r   r   r      s          
G 
G 
G 
G 
G
  
  
  
 4 4 4 4$   "D D D D$   "H H H H$   "E E E E(   ($ $ $ $   	" 	" 	" 	"   
  
  
  
 ) ) ) )* * * * * *r   r   N)
__future__r   typingr   r   r   collections.abcr   r   r	   r   r(   r   r   <module>rh      s    # " " " " " 2 2 2 2 2 2 2 2 2 2 322222222GCLL* * * * * * * * * *r   