o
    * i                     @  sT   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 dee	 Z
dS )    )annotations)TYPE_CHECKINGGenericTypeVar)IterableIteratorTc                   @  s   e Zd ZU dZded< d3d4ddZd5ddZd6ddZd7ddZd6ddZ	d7ddZ
d6ddZd7ddZd6ddZd7ddZd8d!d"Zd8d#d$Zd9d&d'Zd:d)d*Zd;d+d,Zd<d.d/Zd=d1d2ZdS )>
OrderedSetz6
    A set that preserves the order of insertion.
    zdict[T, None]_dataNitemsIterable[T] | Nonec                 C  s"   |durt || _dS i | _dS )z
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> s
            OrderedSet(1, 2, 3)
            >>> s = OrderedSet()
            >>> s
            OrderedSet()
        N)dictfromkeysr
   )selfr    r   \/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/jit/utils.py__init__    s   "
zOrderedSet.__init__returnIterator[T]c                 C  
   t | jS )z
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> for item in s:
            ...     print(item)
            1
            2
            3
        )iterr
   r   r   r   r   __iter__,      

zOrderedSet.__iter__otherOrderedSet[T]c                 C  s   t t| t| 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   r   r   r   __or__8   s   zOrderedSet.__or__c                 C  s   | 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   r   r   r   __ior__J   s   zOrderedSet.__ior__c                      t  fd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                   s   g | ]}| v r|qS r   r   .0itemr   r   r   
<listcomp>k       z&OrderedSet.__and__.<locals>.<listcomp>r	   r   r   r%   r   __and__[      zOrderedSet.__and__c                       fd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                   s   i | ]	}| v r|d qS Nr   r"   r%   r   r   
<dictcomp>{       z'OrderedSet.__iand__.<locals>.<dictcomp>r
   r   r   r%   r   __iand__m      zOrderedSet.__iand__c                   r!   )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r|qS r   r   r"   r%   r   r   r&      r'   z&OrderedSet.__sub__.<locals>.<listcomp>r(   r   r   r%   r   __sub__~   r*   zOrderedSet.__sub__c                   r+   )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r|d qS r,   r   r"   r%   r   r   r-      r.   z'OrderedSet.__isub__.<locals>.<dictcomp>r/   r   r   r%   r   __isub__   r1   zOrderedSet.__isub__c                   s,   t  fddD t fdd D B 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                   r2   r   r   r"   r%   r   r   r&      r'   z&OrderedSet.__xor__.<locals>.<listcomp>c                   r2   r   r   r"   r   r   r   r&      r'   r(   r   r   r   r   r   __xor__   s
   zOrderedSet.__xor__c                   s.   i  fddD fd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                   r4   r,   r   r"   r%   r   r   r-      r.   z'OrderedSet.__ixor__.<locals>.<dictcomp>c                   r4   r,   r   r"   r   r   r   r-      r.   r/   r   r   r6   r   __ixor__   s   zOrderedSet.__ixor__r$   r   c                 C  s   | 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$   r   r   r   add   s   zOrderedSet.addc                 C  s   | 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)
        Nr/   r:   r   r   r   remove   s   zOrderedSet.removeboolc                 C  s
   || j v S )z
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> 1 in s
            True
            >>> 4 in s
            False
        r/   r:   r   r   r   __contains__   s   
	zOrderedSet.__contains__intc                 C  r   )zj
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> len(s)
            3
        )lenr
   r   r   r   r   __len__   s   
zOrderedSet.__len__c                 C  r   )z
        Examples:
            >>> s = OrderedSet([1, 2, 3])
            >>> bool(s)
            True
            >>> s = OrderedSet()
            >>> bool(s)
            False
        )r=   r
   r   r   r   r   __bool__   r   zOrderedSet.__bool__objectc                 C  s   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   r   r   r   __eq__  s   
zOrderedSet.__eq__strc                 C  s   d tt| j}d| dS )Nz, zOrderedSet())joinmapreprr
   )r   Z	data_reprr   r   r   __repr__  s   zOrderedSet.__repr__r,   )r   r   )r   r   )r   r   r   r   )r   r   )r$   r   )r$   r   r   r=   )r   r?   )r   r=   )r   rC   r   r=   )r   rG   )__name__
__module____qualname____doc____annotations__r   r   r   r    r)   r0   r3   r5   r7   r8   r;   r<   r>   rA   rB   rF   rL   r   r   r   r   r	      s(   
 













	
r	   N)
__future__r   typingr   r   r   collections.abcr   r   r   r	   r   r   r   r   <module>   s   