B
    W0d%                 @  sJ   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd dee	Z
dS )	zj
frozen (immutable) data structures to support MultiIndexing

These are used for:

- .names (FrozenList)

    )annotations)Any)PandasObject)pprint_thingc                  s   e Zd ZdZd d fddZd dddZe ZZ fddZd	d
 Z	ddd fddZ
e
Z fddZeZdd Zdd Zdd ZddddZddddZe ZZe ZZe Z ZZe Z ZZ  ZS )
FrozenListz
    Container that doesn't allow setting item *but*
    because it's technically non-hashable, will be used
    for lookups, appropriately, etc.
    )returnc               s&   t |trt|}t| t |S )aF  
        Returns a FrozenList with other concatenated to the end of self.

        Parameters
        ----------
        other : array-like
            The array-like whose elements we are concatenating.

        Returns
        -------
        FrozenList
            The collection difference between self and other.
        )
isinstancetuplelisttypesuper__add__)selfother)	__class__ L/var/www/html/venv/lib/python3.7/site-packages/pandas/core/indexes/frozen.pyunion   s    
zFrozenList.unionc               s&   t    fdd| D }t| |S )aF  
        Returns a FrozenList with elements from other removed from self.

        Parameters
        ----------
        other : array-like
            The array-like whose elements we are removing self.

        Returns
        -------
        FrozenList
            The collection difference between self and other.
        c               s   g | ]}| kr|qS r   r   ).0x)r   r   r   
<listcomp>=   s    z)FrozenList.difference.<locals>.<listcomp>)setr   )r   r   tempr   )r   r   
difference.   s    zFrozenList.differencec               s*   t |trt| t |S t |S )N)r   slicer   r   __getitem__)r   n)r   r   r   r   C   s    
zFrozenList.__getitem__c             C  s&   t |trt|}t| |t|  S )N)r   r	   r
   r   )r   r   r   r   r   __radd__H   s    
zFrozenList.__radd__r   bool)r   r   c               s"   t |ttfrt|}t |S )N)r   r	   r   r
   r   __eq__)r   r   )r   r   r   r   M   s    zFrozenList.__eq__c               s   t | t |S )N)r   r   __mul__)r   r   )r   r   r   r    T   s    zFrozenList.__mul__c             C  s   t | t| ffS )N)r   r
   )r   r   r   r   
__reduce__Y   s    zFrozenList.__reduce__c             C  s   t t| S )N)hashr	   )r   r   r   r   __hash__\   s    zFrozenList.__hash__c             O  s   t dt| j ddS )zL
        This method will not function because object is immutable.
        'z&' does not support mutable operations.N)	TypeErrorr   __name__)r   argskwargsr   r   r   	_disabled_   s    zFrozenList._disabledstrc             C  s   t | dddS )NT)	
)Zquote_stringsZescape_chars)r   )r   r   r   r   __str__e   s    zFrozenList.__str__c             C  s   t | j dt|  dS )N())r   r&   r*   )r   r   r   r   __repr__h   s    zFrozenList.__repr__)r&   
__module____qualname____doc__r   r   r   __iadd__r   r   r   Z__req__r    __imul__r!   r#   r)   r.   r1   __setitem__Z__setslice____delitem__Z__delslice__popappendextendremovesortinsert__classcell__r   r   )r   r   r      s&   r   N)r4   
__future__r   typingr   Zpandas.core.baser   Zpandas.io.formats.printingr   r
   r   r   r   r   r   <module>   s
   