B
    Kkd¯  ã               @   sð   d dl mZmZmZ d dlmZ d dlmZ yd dlm	  m
Z W n& ek
rh   d dlm	  mZ Y nX ddddd	d
gZy,edƒZeeeƒs¤edƒZeeeƒs¤t‚W n   dZY nX dZG dd„ deƒZdd„ Zdd„ Zdd	„ Zdd„ ZdS )é    )Úabsolute_importÚdivisionÚunicode_literals)Ú
ModuleType)Ú	text_typeNÚdefault_etreeÚMethodDispatcherÚisSurrogatePairÚsurrogatePairToCodepointÚmoduleFactoryFactoryÚsupports_lone_surrogatesz"\uD800"z	u"\uD800"FTc               @   s"   e Zd ZdZddd„Zdd„ ZdS )	r   ap  Dict with 2 special properties:

    On initiation, keys that are lists, sets or tuples are converted to
    multiple keys so accessing any one of the items in the original
    list-like object returns the matching value

    md = MethodDispatcher({("foo", "bar"):"baz"})
    md["foo"] == "baz"

    A default value which can be set through the default attribute.
    © c             C   s~   g }xN|D ]F\}}t |ttttfƒrBx*|D ]}| ||f¡ q*W q
| ||f¡ q
W t | |¡ t| ƒt|ƒkstt	‚d | _
d S )N)Ú
isinstanceÚlistÚtupleÚ	frozensetÚsetÚappendÚdictÚ__init__ÚlenÚAssertionErrorÚdefault)ÚselfÚitemsÚ_dictEntriesÚnameÚvalueÚitemr   r   ú</tmp/pip-install-gxxfd9b7/pip/pip/_vendor/html5lib/_utils.pyr   1   s    
zMethodDispatcher.__init__c             C   s   t  | || j¡S )N)r   Úgetr   )r   Úkeyr   r   r   Ú__getitem__@   s    zMethodDispatcher.__getitem__N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r   r   r   r   r   $   s   
c             C   sL   t | ƒdkoJt| d ƒdkoJt| d ƒdkoJt| d ƒdkoJt| d ƒdkS )Né   r   i Ø  iÿÛ  é   i Ü  iÿß  )r   Úord)Údatar   r   r   r	   G   s     c             C   s,   dt | d ƒd d  t | d ƒd  }|S )Ni   r   i Ø  i   r(   i Ü  )r)   )r*   Úchar_valr   r   r   r
   M   s    c                s   i ‰‡ ‡fdd„}|S )Nc                sØ   t tjtdƒƒrd| j }n
d| j }t| ¡ ƒ}yˆ| | | S  tk
rÒ   t|ƒ}ˆ | f|ž|Ž}|j |¡ dˆkr†i ˆ|< dˆ| krži ˆ| |< dˆ| | kr¾i ˆ| | |< |ˆ| | |< |S X d S )NÚ z_%s_factorys   _%s_factoryr   ÚargsÚkwargs)	r   r   r#   Útyper   r   ÚKeyErrorÚ__dict__Úupdate)Ú
baseModuler-   r.   r   Úkwargs_tupleÚmodÚobjs)ÚfactoryÚmoduleCacher   r   ÚmoduleFactoryY   s$    
z+moduleFactoryFactory.<locals>.moduleFactoryr   )r7   r9   r   )r7   r8   r   r   V   s    c                s   i ‰ ‡ ‡fdd„}|S )Nc                 s2   t | ƒt | ¡ ƒf}|ˆ kr*ˆ| |Žˆ |< ˆ | S )N)r   r   )r-   r.   r!   )ÚcacheÚfuncr   r   Úwrappedv   s    zmemoize.<locals>.wrappedr   )r;   r<   r   )r:   r;   r   Úmemoizes   s    r=   )Ú
__future__r   r   r   Útypesr   Úpip._vendor.sixr   Úxml.etree.cElementTreeÚetreeÚcElementTreer   ÚImportErrorÚxml.etree.ElementTreeÚElementTreeÚ__all__ÚevalÚ_xr   r   r   r   r   r	   r
   r   r=   r   r   r   r   Ú<module>   s,   	

#	