a
    If3                     @   s   d dl Z e dZ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eee	ee
edZi ZG dd dZd#ddZd$ddZd%ddZd&d d!ZdS )'    Nz\('[^']*'|\"[^\"]*\"|::|//?|\.\.|\(\)|[/.*:\[\]\(\)@=])|((?:\{[^}]+\})?[^/\[\]\(\)@=\s]+)|\s+c           	   	   c   s   |r| dnd }d}t| D ]}|\}}|r|d dkrd|v r|dd\}}z"|s^t|d|| |f fV  W q ty   td| d Y q0 n"|r|s|d||f fV  n|V  d}q |V  |d	k}q d S )
N Fr   {:   z{%s}%sz!prefix %r not found in prefix map@)getxpath_tokenizer_refindallsplitKeyErrorSyntaxError)	pattern
namespacesZdefault_namespaceZparsing_attributetokenZttypetagprefixZuri r   &lib/python3.9/xml/etree/ElementPath.pyxpath_tokenizerI   s&    r   c                 C   s>   | j }|d u r:i  | _ }| j D ]}|D ]}|||< q*q"|S N)
parent_maprootiter)contextr   per   r   r   get_parent_mapa   s    
r   c                 C   s    | d d dkp| dd  dkS )N   {*}}*r   r   r   r   r   _is_wildcard_tagk   s    r"   c                    s   t t  dkr" fdd}ndkr: fdd}nd d dkrdd  tt d dd   fd	d}nLd
d  dkrƈd d td t fdd}ntd |S )Nz{*}*c                 3   s    |D ]} |j r|V  qd S r   r!   r   resultelem_isinstance_strr   r   selectu   s    z_prepare_tag.<locals>.selectz{}*c                 3   s0   |D ]&}|j } |r|d dkr|V  qd S )Nr   r   r!   r   r$   r%   Zel_tagr&   r   r   r)   {   s    r   r      c                 3   s8   |D ].}|j }|ks, |r| kr|V  qd S r   r!   r*   )r'   r(   no_nssuffixr   r   r   r)      s    r   r    c                 3   s0   |D ]&}|j } |r| kr|V  qd S r   r!   r*   )r'   r(   nsns_onlyr   r   r)      s    zinternal parser error, got )
isinstancestrslicelenRuntimeError)r   r)   r   )r'   r(   r,   r/   r0   r-   r   r   _prepare_tago   s     
r6   c                    sR   |d t r&t  fdd}n(d d dkrBdd  fdd}|S )Nr   c                    s   dd } | ||S )Nc                 s   s   | D ]}|E d H  qd S r   r   )r$   r%   r   r   r   select_child   s    z3prepare_child.<locals>.select.<locals>.select_childr   r   r$   r7   
select_tagr   r   r)      s    zprepare_child.<locals>.selectr+   {}c                 3   s(   |D ]}|D ]}|j  kr|V  qqd S r   r!   r   r$   r%   r   r!   r   r   r)      s    
)r"   r6   nextr   r)   r   r:   r   r   prepare_child   s    r@   c                 C   s   dd }|S )Nc                 s   s   |D ]}|E d H  qd S r   r   r#   r   r   r   r)      s    zprepare_star.<locals>.selectr   r=   r   r   r   prepare_star   s    rA   c                 C   s   dd }|S )Nc                 s   s   |E d H  d S r   r   )r   r$   r   r   r   r)      s    zprepare_self.<locals>.selectr   r=   r   r   r   prepare_self   s    rB   c                    s   z
|  }W n t y   Y d S 0 |d dkr2dn|d sD|d ntdtrjt  fdd}n(d d dkrdd  fd	d}|S )
Nr   *r   zinvalid descendantc                    s   dd } | ||S )Nc                 s   s*   | D ] }|  D ]}||ur|V  qqd S r   r   )r$   r%   r   r   r   r   r7      s    z8prepare_descendant.<locals>.select.<locals>.select_childr   r8   r9   r   r   r)      s    z"prepare_descendant.<locals>.selectr+   r;   c                 3   s,   |D ]"}|  D ]}||ur|V  qqd S r   rD   r<   r!   r   r   r)      s    )StopIterationr   r"   r6   r=   r   r?   r   prepare_descendant   s     

rF   c                 C   s   dd }|S )Nc                 s   s@   t | }i }|D ]*}||v r|| }||vrd ||< |V  qd S r   )r   )r   r$   r   Z
result_mapr%   parentr   r   r   r)      s    zprepare_parent.<locals>.selectr   r=   r   r   r   prepare_parent   s    
rH   c                    sH  g }g }z
|  }W n t y&   Y d S 0 |d dkr6q|dkr@q|d rp|d d d dv rpd|d dd f}||d p~d ||d  qd	|}|d
kr|d fdd}|S |dkr|d |d fdd}|S |dkrtd|d s|d fdd}|S |dks@|dkrvtd|d sv|d |d rffdd}nfdd}|S |dks|dks|dkr<|dkrt|d d   dk r,tdnj|d dkrtd|dkr(zt|d d  W n ty   tdY n0  dkr,tdnd  fdd}|S tdd S ) Nr   ])r   r   r   z'"'r.   -r   z@-c                 3   s"   |D ]}|  d ur|V  qd S r   r   r#   )keyr   r   r)      s    z!prepare_predicate.<locals>.selectz@-='c                 3   s"   |D ]}|  kr|V  qd S r   rL   r#   )rM   valuer   r   r)     s    z\-?\d+$c                 3   s"   |D ]}|  d ur|V  qd S r   )findr#   r!   r   r   r)     s    z.='z-='c                 3   s:   |D ]0}|  D ] }d| kr|V   qqqd S Nr   )r	   joinitertextr<   )r   rN   r   r   r)     s
    c                 3   s&   |D ]}d |  kr|V  qd S rP   )rQ   rR   r#   )rN   r   r   r)     s    z-()z-()-zXPath position >= 1 expectedZlastzunsupported functionr+   zunsupported expressionr   z)XPath offset from last() must be negativec              
   3   s\   t | }|D ]J}z.|| }t||j}|  |u r<|V  W q ttfyT   Y q0 qd S r   )r   listr	   r   
IndexErrorr   )r   r$   r   r%   rG   Zelems)indexr   r   r)   4  s    
zinvalid predicate)rE   appendrQ   rematchintr   
ValueError)r>   r   Z	signatureZ	predicater)   r   )rU   rM   r   rN   r   prepare_predicate   sj    

&





r[   )r   rC   .z..z//[c                   @   s   e Zd ZdZdd ZdS )_SelectorContextNc                 C   s
   || _ d S r   )r   )selfr   r   r   r   __init__O  s    z_SelectorContext.__init__)__name__
__module____qualname__r   r`   r   r   r   r   r^   M  s   r^   c           
      C   s`  |dd  dkr|d }|f}|r6|t t| 7 }zt| }W n ty6   ttdkrft  |d d dkr~tdtt	||j
}z
| }W n ty   Y Y d S 0 g }z|t|d  || W n ty   tdd Y n0 z| }|d dkr
| }W q ty&   Y q*Y q0 q|t|< Y n0 | g}t| }|D ]}	|	||}qJ|S )	Nr.   /rC   d   r   z#cannot use absolute path on elementr   zinvalid path)tuplesorteditems_cacher   r4   clearr   r   r   __next__rE   rV   opsr^   )
r%   pathr   Z	cache_keyZselectorr>   r   r$   r   r)   r   r   r   iterfindW  sD    


rn   c                 C   s   t t| ||d S r   )r>   rn   r%   rm   r   r   r   r   rO     s    rO   c                 C   s   t t| ||S r   )rS   rn   ro   r   r   r   r	     s    r	   c                 C   s8   zt t| ||} | jpdW S  ty2   | Y S 0 d S rP   )r>   rn   textrE   )r%   rm   defaultr   r   r   r   findtext  s
    rr   )N)N)N)N)NN)rW   compiler   r   r   r"   r6   r@   rA   rB   rF   rH   r[   rl   ri   r^   rn   rO   r	   rr   r   r   r   r   <module>;   s4   

)a	

,

