
    ڏDjG                          d Z ddlZddl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eeeeeedZde
iZ G d d      Zd Zd Zd Zd Zy)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.
    NzH(b?'[^']*'|b?\"[^\"]*\"|//?|\(\)|==?|[/.*\[\]()@])|([^/\[\]()@=\s]+)|\s+c                 L    t        | |      }|t        |      t        u r|S |gS y)N )getattrtypelist)node	attr_namechilds      \C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/TreePath.pyiterchildrenr      s/    D)$E;$L7N    c                 8    	 t        |       S # t        $ r Y y w xY wN)nextStopIteration)its    r   _get_first_or_noner   #   s"    Bx s   
 	c                 R    | j                   j                  j                  d      d   S )N.)	__class____name__split)r   s    r   	type_namer   )   s"    >>""((-b11r   c                 f    |d   } |        }|d   dk7  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#   ,   sD    8DFEQx3@4GHH u-I?r   c                 0    t        | |      \  }fd}|S )z
    not(...)
    c              3   J   K   | D ]  }t         |g            |  y wr   )r   )resultr   r"   s     r   selectzhandle_func_not.<locals>.select:   s-      	D!)TF"34<
	s   ##)r#   )r   r    r!   r'   r"   s       @r   handle_func_notr(   4   s!     !u-OD) Mr   c                 J    |d   t         v rt           | |      S fd}|S )z)
    /NodeName/
    or
    func(...)
    r   c              3      K   | D ]7  }|j                   D ]&  }t        ||      D ]  }t        |      k(  s|  ( 9 y wr   child_attrsr   r   )r&   r   r	   r
   r!   s       r   r'   zhandle_name.<locals>.selectI   sS      	$D!-- $	)$	: $E '4/#$$	$s
   2AA)	functions)r   r    r'   r!   s      @r   handle_namer.   @   s3     8DytU++$ Mr   c                     d }|S )z
    /*/
    c              3   h   K   | D ]'  }|j                   D ]  }t        ||      E d {     ) y 7 	wr   r,   r   )r&   r   r!   s      r   r'   zhandle_star.<locals>.selectU   s=      	4D(( 4'd3334	43s   $20
2r   r   r    r'   s      r   handle_starr3   Q   s    4 Mr   c                     d }|S )z
    /./
    c                     | S r   r   )r&   s    r   r'   zhandle_dot.<locals>.select_   s    r   r   r2   s      r   
handle_dotr6   [   s    Mr   c                 v     |        }|d   dk(  rfdn|d   s|d   fdnt        d      fd}|S )z
    //...
    r   *c              3   ~   K   | j                   D ]'  }t        | |      D ]  }|  |      E d {     ) y 7 	wr   r1   )r   r!   r
   iter_recursives      r   r:   z*handle_descendants.<locals>.iter_recursivei   sJ     (( 5)$5 5EK-e44455 5s   .=;
=r   c              3      K   | j                   D ]5  }t        | |      D ]$  }t        |      k(  r|  |      E d {    & 7 y 7 	wr   r+   )r   r!   r
   r:   	node_names      r   r:   z*handle_descendants.<locals>.iter_recursivep   sW     (( 5)$5 5E '94#-e44455 5s   <AA	 
AzExpected node name after '//'c              3   @   K   | D ]  } |      E d {     y 7 wr   r   )r&   r   r:   s     r   r'   z"handle_descendants.<locals>.selecty   s'      	,D%d+++	,+s   )r   )r   r    r'   r:   r<   s      @@r   handle_descendantsr>   c   sM     FEQx3	5
 1X!H		5 899, Mr   c                      |        }|d   rt        d      |d   }d | j                         }|d   dk(  r |         t        |       t        j                  |      fd}|S fd}|S )Nr   zExpected attribute namer   =c              3   Z   K   | D ]  }	  |      }||  y # t         $ r Y !w xY wwr   )AttributeError)r&   r   
attr_valuereadattrs      r   r'   z handle_attribute.<locals>.select   sE      %!)$J )$$% & s    +++	(+(+c              3      K   | D ]O  }	  |      }|k(  r| t        |t              s't        t              s8|j	                         k(  sL| Q y # t         $ r Y ^w xY wwr   )rB   
isinstancebytesstrencode)r&   r   rC   rD   values      r   r'   z handle_attribute.<locals>.select   sn      
%!)$J &$$ U3
5#8N"elln4$$
% & s7   A(AA(A(A(A(	A%"A($A%%A()r   peekparse_path_valueoperator
attrgetter)r   r    r!   r'   rD   rJ   s       @@r   handle_attributerO      s}    FEQx2338DEIIKEQx3 &""4(H}	%, M	% Mr   c                     |        }|d   }|r_|d d dk(  s|d d dk(  r|d   |d   k(  sJ |dd S |d d dk(  s|d d dk(  r!|d   |d   k(  sJ |dd j                  d	      S 	 t        |      S |d   j                         rt        |d         S |d   j	                         }|d
k(  ry|dk(  ryt        d| d      # t        $ r Y w xY w)Nr   r   '"r      zb'zb"zUTF-8trueTfalseFzInvalid attribute predicate: ')rI   intr   isdigitlower)r   r    rJ   r!   s       r   rL   rL      s   FE!HE!9uRayC/9a((2;!9bq	T 19a((2;%%g..	u: 
q			58}Qx~~6>W_
5eWA>
??  		s   #
B= =	C	C	c                     |        }g g}|g|d   dvr|d   j                  t        |d      | |             	  |        }|d   dk(  r |        }	 |d   sD|d   dk(  r|j                  g         |        }n#|d   dk(  rg g}j                  |        |        }|d   dvr|d   st        d      fd	}|S # t        $ r Y "w xY w)
Nr   )])r   /r   andorzIncomplete predicatec              3      K   | D ]A  }|f}D ]7  }|D ]+  }t        |      }|D ]
  } ||      } t        |      }|+ 2 |  A C y wr   )iterr   )	r&   r   	node_baseand_conditions	condition	subresultr'   predicate_resultor_conditionss	           r   r'   z handle_predicate.<locals>.select   s{      	DI"/ !/ I $YI"+ 6$*9$5	6'9)'D$'/ J	s
   :AA)append
operationsr   r   )r   r    rb   r'   rf   s       @r   r   r      s    FETN#$M
(*
$r!!:eAh#7e#DF	FE Qx3QxQx5 %%b)qT!"$$$^4# (*
$& "/00" MG  		s   B: :	CC)@ r8   r   z//[notc                        e Zd Zd ZddZd Zy)_LookAheadTokenizerc                     t        |      D cg c]  \  }}|s|r||f c}}| _        | j                  j                          y c c}}w r   )path_tokenizer_tokensreverse)selfpathspecialtexts       r   __init__z_LookAheadTokenizer.__init__   sG     $2$#7
$$ dO

 	
s   Ac                 <    | j                   r| j                   d   S |S )Nr   )rq   )rs   defaults     r   rK   z_LookAheadTokenizer.peek  s    #'<<t||B<W<r   c                 `    	 | j                   j                         S # t        $ r t        d w xY wr   )rq   pop
IndexErrorr   )rs   s    r   __call__z_LookAheadTokenizer.__call__	  s1    	*<<##%% 	*T)	*s    -N))NN)r   
__module____qualname__rw   rK   r}   r   r   r   rn   rn      s    =*r   rn   c                     t        |       } |       }g }	 	 |j                  t        |d      ||             	  |       }|d   dk(  r |       }:# t        $ r t	        d      w xY w# t        $ r Y |S w xY w)Nr   zinvalid pathr\   )rn   rg   rh   r   r   )rt   _nextr    selectors       r   _build_path_iteratorr     s    %EGEH
	-OOJuQx0>?	GEQx3   	-^,,	-  	O	s   !A A( A%(	A54A5c                 R    t        |      }t        | f      }|D ]
  } ||      } |S r   )r   r`   )r   rt   selector_chainr&   r'   s        r   iterfindr   $  s4    )$/N4']F    Mr   c                 ,    t        t        | |            S r   )r   r   r   rt   s     r   
find_firstr   +  s    htT233r   c                 ,    t        t        | |            S r   )r   r   r   s     r   find_allr   .  s    t$%%r   )__doc__rerM   compilefindallrp   r   r   r   r#   r(   r.   r3   r6   r>   rO   rL   r   rh   r-   rn   r   r   r   r   r   r   r   <module>r      s    
 	 g 	2
":#L@2-b 





 
O	
* *&(4&r   