
    Ng                        d Z ddlmZ ddlZddlZddlZej        d         dk    reZne	Z ej
        d          j        Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZeeeeeedZdeiZd Zd Zd Zd ZdS )z
A simple XPath-like language for tree traversal.

This works by creating a filter chain of generator functions.  Each
function selects a part of the expression, e.g. a child node, a
specific descendant or a node that holds an attribute.
    )absolute_importN   zD('[^']*'|\"[^\"]*\"|//?|\(\)|==?|[/.*\[\]()@])|([^/\[\]()@=\s]+)|\s+c                 `    t          | |          }|t          |          t          u r|S |gS dS )N )getattrtypelist)node	attr_namechilds      T/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/TreePath.pyiterchildrenr      s9    D)$$E;;$L7Nr    c                     	 	 | j         } |            S # t          $ r t          |           cY S w xY w# t          $ r Y d S w xY wN)nextAttributeErrorStopIteration)it_nexts     r   _get_first_or_noner   *   sp    	GE 577N  	 	 	88OOO	    tts#    	3 03 03 
A Ac                 L    | j         j                            d          d         S )N.)	__class____name__split)r
   s    r   	type_namer   5   s     >"((--b11r   c                     |d         } |             }|d         dk    rt          d|z            t          | |          }||fS )N   r   (z%Expected '(' after function name '%s')
ValueErrorhandle_predicate)r   tokenname	predicates       r   
parse_funcr'   8   sP    8DDFFEQx3@4GHHH u--I?r   c                 8    t          | |          \  }fd}|S )z
    not(...)
    c              3   P   K   | D ]}t           |g                    |V   d S r   )r   )resultr
   r&   s     r   selectzhandle_func_not.<locals>.selectF   sD       	 	D!))TF"3"344<


	 	r   )r'   )r   r$   r%   r+   r&   s       @r   handle_func_notr,   @   s8     !u--OD)     Mr   c                 `    |d         t           v rt                   | |          S fd}|S )z)
    /NodeName/
    or
    func(...)
    r    c              3   ~   K   | D ]6}|j         D ],}t          ||          D ]}t          |          k    r|V  -7d S r   child_attrsr   r   )r*   r
   r   r   r%   s       r   r+   zhandle_name.<locals>.selectU   sr       	$ 	$D!- $ $	)$	:: $ $E ''4//#$$	$ 	$r   )	functions)r   r$   r+   r%   s      @r   handle_namer2   L   sM     8DytU+++$ $ $ $ $ Mr   c                     d }|S )z
    /*/
    c              3   V   K   | D ]#}|j         D ]}t          ||          D ]}|V  $d S r   r0   r   )r*   r
   r%   r   s       r   r+   zhandle_star.<locals>.selecta   s_       	  	 D(    )$55    EKKKK  	  	 r   r   r   r$   r+   s      r   handle_starr7   ]   s         
 Mr   c                     d }|S )z
    /./
    c                     | S r   r   )r*   s    r   r+   zhandle_dot.<locals>.selectl   s    r   r   r6   s      r   
handle_dotr:   h   s      Mr   c                      |             }|d         dk    rfdn&|d         s|d         fdnt          d          fd}|S )z
    //...
    r   *c              3   r   K   | j         D ]+}t          | |          D ]}|V   |          D ]}|V  ,d S r   r5   )r
   r%   r   citer_recursives       r   r?   z*handle_descendants.<locals>.iter_recursivev   ss      (    )$55    EKKK+^E22         r   r    c              3      K   | j         D ]>}t          | |          D ]+}t          |          k    r|V   |          D ]}|V  ,?d S r   r/   )r
   r%   r   r>   r?   	node_names       r   r?   z*handle_descendants.<locals>.iter_recursive~   s      (    )$55    E ''944#+^E22         r   zExpected node name after '//'c              3   :   K   | D ]} |          D ]}|V  d S r   r   )r*   r
   r   r?   s      r   r+   z"handle_descendants.<locals>.select   sI       	 	D'--  	 	r   )r"   )r   r$   r+   r?   rA   s      @@r   handle_descendantsrC   p   s     DFFEQx3	  	  	  	  	  	  1X 
:!H		  	  	  	  	  	  	  8999    
 Mr   c                     |             }|d         rt          d          |d         }d 	  |             }|d         dk    rt          |           n# t          $ r Y nw xY wt          j        |          fd}nfd}|S )Nr   zExpected attribute namer    =c              3   \   K   | D ]%}	  |          }n# t           $ r Y w xY w||V  &d S r   )r   )r*   r
   
attr_valuereadattrs      r   r+   z handle_attribute.<locals>.select   sg       % %!)$JJ%   H)$$$$% %   
""c              3      K   | D ]p}	  |          }n# t           $ r Y w xY w|k    r|V  *t          |t                    r1t          t                    r|                                k    r|V  qd S r   )r   
isinstancebytes_unicodeencode)r*   r
   rG   rH   values      r   r+   z handle_attribute.<locals>.select   s       
% 
%!)$JJ%   H&&$$$$$ U33 %
5(8S8S %"ellnn44$$$$
% 
%rI   )r"   parse_path_valuer   operator
attrgetter)r   r$   r%   r+   rH   rO   s       @@r   handle_attributerS      s    DFFEQx 423338DE+ 8s??$T**E	    
 "4((H}	% 	% 	% 	% 	% 	%	% 	% 	% 	% 	% 	% Ms   
A 
A"!A"c                     |             }|d         }|rF|d d         dk    s|d d         dk    r
|dd         S 	 t          |          S # t          $ r Y n]w xY w|d                                         rt          |d                   S |d                                         }|dk    rdS |dk    rd	S t          d
|z            )Nr   r    '"r   trueTfalseFz!Invalid attribute predicate: '%s')intr"   isdigitlower)r   r$   rO   r%   s       r   rP   rP      s    DFFE!HE !9uRaRyC//2;	u:: 	 	 	D		q				 58}}Qx~~6>>4W__5
85@
A
AAs   A 
AAc                     |             }g |d         dk    r                     t          |d                  | |                     	  |             }|d         dk    r
 |             }n# t          $ r Y nBw xY w|d         s*|d         dk    rt          t	          | |                    S |d         dk    fd}|S )Nr   ]/r    andc              3      K   | D ]7}t          |f          }D ]} ||          }t          |          }||V  8d S r   iterr   )r*   r
   	subresultr+   predicate_resultselectors        r   r+   z handle_predicate.<locals>.select   sk       	 	DdWI" . ."F9--		1)<<+


	 	r   )append
operationsr   logical_andr#   )r   r$   r+   re   s      @r   r#   r#      s    DFFEH
(c//E!H-dE::<<<	DFFE Qx3	  	 	 	E	 Qx 	HE!H--x)9$)F)FGGG (c//     Ms   

A+ +
A87A8c                       fd}|S )Nc              3      K   | D ]U}t          |f          }D ]} ||          }t          |          }t          |f          }| |          D ]}|V  Vd S r   ra   )r*   r
   rc   r+   rd   result_nodelhs_selects
rhs_selects         r   r+   zlogical_and.<locals>.select   s       	 	DdWI% . ."F9--		1)<<dWI+#-:i#8#8  KJJJJ	 	r   r   )rl   rm   r+   s   `` r   rh   rh      s)    	 	 	 	 	 	 Mr   )@ r<   r   z//[notc                    t          d t          |           D                       	 j        }n# t          $ r fd}Y nw xY w |            }g }	 	 |                    t          |d                  ||                     n# t          $ r t          d          w xY w	  |            }|d         dk    r
 |            }n# t          $ r Y nw xY w|S )Nc                 $    g | ]\  }}|s|	||fS r   r   ).0specialtexts      r   
<listcomp>z(_build_path_iterator.<locals>.<listcomp>  s=     ) ) )&)"&)WTN ) ) )r   c                  "    t                     S r   )r   )streams   r   r   z#_build_path_iterator.<locals>._next
  s    <<r   r    r   zinvalid pathr^   )rb   path_tokenizerr   r   rf   rg   r   r"   )pathr   r$   re   ry   s       @r   _build_path_iteratorr|     sD    ) )*8*>*>) ) ) * *F       	  	  	  	  	  	  	   EGGEH
	-OOJuQx0>>???? 	- 	- 	-^,,,	-	EGGEQx3 	 	 	E	
 Os-   1 AA/B B" C 
CCc                 d    t          |          }t          | f          }|D ]} ||          }|S r   )r|   rb   )r
   r{   selector_chainr*   r+   s        r   iterfindr     s?    )$//N4']]F     Mr   c                 <    t          t          | |                    S r   )r   r   r
   r{   s     r   
find_firstr   $  s    htT22333r   c                 <    t          t          | |                    S r   )r	   r   r   s     r   find_allr   '  s    t$$%%%r   ) __doc__
__future__r   rerQ   sysversion_infostrrM   unicodecompilefindallrz   r   r   r   r'   r,   r2   r7   r:   rC   rS   rP   r#   rh   rg   r1   r|   r   r   r   r   r   r   <module>r      s    ' & & & & & 				  



A!HHH	 	  	 	 		 	 	2 2 2  
 
 
  "	 	 	    @% % %PB B B(  4   




 
 
O	  8  4 4 4& & & & &r   