a
    (ñ»j7  ã                   @   sH  d dl mZmZmZ d dlmZ zd dlmZ W n eyN   d dl	mZ Y n0 d dl
mZmZ erxd dlm  mZ n<zd dlm  mZ W n$ ey²   d dlm  mZ Y n0 g d¢Zz,edƒZeeeƒsæedƒZeeeƒsæJ ‚W n eyþ   d	ZY n0 d
ZG dd„ deƒ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)ÚMapping)Ú	text_typeÚPY3N)Ú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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   sv   g }|D ]B\}}t |ttttfƒr<|D ]}| ||f¡ q&q| ||f¡ qt | |¡ t| ƒt|ƒkslJ ‚d | _	d S ©N)
Ú
isinstanceÚlistÚtupleÚ	frozensetÚsetÚappendÚdictÚ__init__ÚlenÚdefault)ÚselfÚitemsZ_dictEntriesÚnameÚvalueÚitemr   r   ú5E:\soccer\ml_env\Lib\site-packages\html5lib/_utils.pyr   9   s    zMethodDispatcher.__init__c                 C   s   t  | || j¡S r   )r   Úgetr   ©r   Úkeyr   r   r    Ú__getitem__E   s    zMethodDispatcher.__getitem__Nc                 C   s
   t || ƒS r   )ÚBoundMethodDispatcher)r   ÚinstanceÚownerr   r   r    Ú__get__H   s    zMethodDispatcher.__get__)r   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r$   r(   r   r   r   r    r
   ,   s   
r
   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )r%   zAWraps a MethodDispatcher, binding its return values to `instance`c                 C   s   || _ || _d S r   )r&   Ú
dispatcher)r   r&   r-   r   r   r    r   N   s    zBoundMethodDispatcher.__init__c                 C   s   | j |  | j¡S r   )r-   r(   r&   r"   r   r   r    r$   R   s    z!BoundMethodDispatcher.__getitem__c                 C   s   || j v r| | S |S d S r   ©r-   )r   r#   r   r   r   r    r!   W   s    
zBoundMethodDispatcher.getc                 C   s
   t | jƒS r   )Úiterr-   ©r   r   r   r    Ú__iter__]   s    zBoundMethodDispatcher.__iter__c                 C   s
   t | jƒS r   )r   r-   r0   r   r   r    Ú__len__`   s    zBoundMethodDispatcher.__len__c                 C   s
   || j v S r   r.   r"   r   r   r    Ú__contains__c   s    z"BoundMethodDispatcher.__contains__N)
r)   r*   r+   r,   r   r$   r!   r1   r2   r3   r   r   r   r    r%   L   s   r%   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ÿß  )r   Úord)Údatar   r   r    r   j   s    ÿÿþþr   c                 C   s,   dt | d ƒd d  t | d ƒd  }|S )Ni   r   r5   i   r6   r7   )r8   )r9   Zchar_valr   r   r    r   p   s    ÿr   c                    s   i ‰‡ ‡fdd„}|S )Nc                    sâ   t tjtdƒƒrd| j }n
d| j }t| ¡ ƒ}zˆ| | | W S  tyÜ   t|ƒ}ˆ | g|¢R i |¤Ž}|j |¡ dˆvrŒi ˆ|< dˆ| vr¤i ˆ| |< dˆ| | vrÄi ˆ| | |< |ˆ| | |< | Y S 0 d S )NÚ z_%s_factorys   _%s_factoryr   ÚargsÚkwargs)	r   r   r)   Útyper   r   ÚKeyErrorÚ__dict__Úupdate)Z
baseModuler;   r<   r   Zkwargs_tupleÚmodZobjs©ÚfactoryZmoduleCacher   r    ÚmoduleFactory|   s$    
z+moduleFactoryFactory.<locals>.moduleFactoryr   )rC   rD   r   rB   r    r   y   s    r   c                    s   i ‰ ‡ ‡fdd„}|S )Nc                     s6   t | ƒt | ¡ ƒf}|ˆ vr.ˆ| i |¤Žˆ |< ˆ | S r   )r   r   )r;   r<   r#   ©ÚcacheÚfuncr   r    Úwrapped™   s    zmemoize.<locals>.wrappedr   )rG   rH   r   rE   r    Úmemoize–   s    rI   ) Ú
__future__r   r   r   Útypesr   Úcollections.abcr   ÚImportErrorÚcollectionsÚsixr   r   Zxml.etree.ElementTreeÚetreeZElementTreer	   Zxml.etree.cElementTreeZcElementTreeÚ__all__ÚevalZ_xr   Ú	Exceptionr   r   r
   r%   r   r   r   rI   r   r   r   r    Ú<module>   s6   

 	