
    -Php                     "   d dl mZmZmZ d dlmZ  G d de          Z G d de          Z G d de          Z G d	 d
e          Z	 G d de          Z
 G d de          Z G d de          Z G d de          Z G d de          ZdS )   )NodeStatNode	ErrorNode)errorc                   &    e Zd ZdZddgZd Zd ZdS )	MatchNodezg
    subject  ExprNode    The expression to be matched
    cases    [MatchCaseNode]  list of cases
    subjectcasesc                    d }| j         D ]v}t          |t                    r|r2t          |j        |j                                         d            d S |                                r|}|                                 wd S Nz% makes remaining patterns unreachable)	r
   
isinstancer   r   pospatternirrefutable_messageis_irrefutablevalidate_irrefutable)selffound_irrefutable_casecases      ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/MatchCaseNodes.pyr   zMatchNode.validate_irrefutable   s    !%J 	( 	(D$	**  % *.-5IIKKrrr   ""$$ .)-&%%''''	( 	(    c                 0    t          | j        d           | S )Nz/Structural pattern match is not yet implemented)r   r   )r   envs     r   analyse_expressionszMatchNode.analyse_expressions"   s    dhIJJJr   N)__name__
__module____qualname____doc__child_attrsr   r    r   r   r   r   	   sH         
 g&K( ( ("    r   r   c                   ,    e Zd ZdZg dZd Zd Zd ZdS )MatchCaseNodez\
    pattern    PatternNode
    body       StatListNode
    guard      ExprNode or None
    )r   bodyguardc                 |    t          | j        t                    rdS | j                                        o| j         S )NT)r   r   r   r   r$   r   s    r   r   zMatchCaseNode.is_irrefutable0   s8    dlI.. 	4|**,,?TZ?r   c                 p    t          | j        t                    rd S | j                                         d S N)r   r   r   get_targetsr&   s    r   validate_targetszMatchCaseNode.validate_targets5   s5    dlI.. 	F  """""r   c                 p    t          | j        t                    rd S | j                                         d S r(   )r   r   r   r   r&   s    r   r   z"MatchCaseNode.validate_irrefutable:   s5    dlI.. 	F))+++++r   N)r   r   r   r   r   r   r*   r   r    r   r   r"   r"   '   s[          /..K@ @ @
# # #
, , , , ,r   r"   c                   L     e Zd ZdZdgZ fdZd Zd Zd Zd Z	d Z
d	 Z xZS )
PatternNodez
    PatternNode is not an expression because
    it does several things (evaluating a boolean expression,
    assignment of targets), and they need to be done at different
    times.

    as_targets   [NameNode]    any target assign by "as"
    
as_targetsc                 \    d|vrg |d<    t          t          |           j        |fi | d S )Nr.   )superr-   __init__)r   r   kwds	__class__s      r   r1   zPatternNode.__init__L   sC    t##!#D)k4  )#6666666r   c                     dS )NFr    r&   s    r   r   zPatternNode.is_irrefutableQ   s    ur   c                 x    |                                  }| j        D ]}|                     ||j                   |S r(   )get_main_pattern_targetsr.   add_target_to_targetsnamer   targetstargets      r   r)   zPatternNode.get_targetsT   sD    //11o 	= 	=F&&w<<<<r   c                     |                     |          D ]}t          | j        d| d           |                    |           d S Nzmultiple assignments to name 'z' in pattern)intersectionr   r   update)r   r:   other_targetsr8   s       r   update_targets_with_targetsz'PatternNode.update_targets_with_targetsZ   sZ    ((77 	Q 	QD$(OTOOOPPPP}%%%%%r   c                 j    ||v rt          | j        d| d           |                    |           d S r=   )r   r   addr9   s      r   r7   z!PatternNode.add_target_to_targets_   sC    W$(QVQQQRRRFr   c                     t           r(   )NotImplementedErrorr&   s    r   r6   z$PatternNode.get_main_pattern_targetsd   s    !!r   c                     | j         D ]=}t          | |          }|)t          |t                    r|                                 >d S r(   )r   getattrr   r-   r   )r   attrchilds      r   r   z PatternNode.validate_irrefutableh   sU    $ 	- 	-DD$''E Z{%C%C **,,,	- 	-r   )r   r   r   r   r   r1   r   r)   rA   r7   r6   r   __classcell__r3   s   @r   r-   r-   @   s           .K7 7 7 7 7
    & & &
  
" " "- - - - - - -r   r-   c                   2    e Zd ZdZej        dgz   ZdZd ZdS )MatchValuePatternNodezq
    value   ExprNode        # todo be more specific
    is_is_check   bool     Picks "is" or equality check
    valueFc                     t                      S r(   )setr&   s    r   r6   z.MatchValuePatternNode.get_main_pattern_targetsx   s    uur   N)r   r   r   r   r-   r   is_is_checkr6   r    r   r   rM   rM   o   sC         
 )WI5KK    r   rM   c                   B    e Zd ZdZdZdZej        dgz   Zd Z	d Z
d ZdS )MatchAndAssignPatternNodez`
    target   NameNode or None  the target to assign to (None = wildcard)
    is_star  bool
    NFr;   c                     | j          S r(   )is_starr&   s    r   r   z(MatchAndAssignPatternNode.is_irrefutable   s    <r   c                 2    | j         rd| j         j        z  S dS )Nzname capture '%s'wildcard)r;   r8   r&   s    r   r   z-MatchAndAssignPatternNode.irrefutable_message   s!    ; 	&)999:r   c                 F    | j         r| j         j        hS t                      S r(   )r;   r8   rP   r&   s    r   r6   z2MatchAndAssignPatternNode.get_main_pattern_targets   s#    ; 	K$%%55Lr   )r   r   r   r   r;   rU   r-   r   
child_attsr   r   r6   r    r   r   rS   rS   |   sf         
 FG(H:5J           r   rS   c                   P     e Zd ZdZej        dgz   Zd Zd Zd Zd Z	 fdZ
 xZS )OrPatternNodez-
    alternatives   list of PatternNodes
    alternativesc                 J    | j         D ]}|                                r|c S d S r(   )r\   r   )r   alternatives     r   get_first_irrefutablez#OrPatternNode.get_first_irrefutable   s>    , 	# 	#K))++ #""""#tr   c                 .    |                                  d uS r(   )r_   r&   s    r   r   zOrPatternNode.is_irrefutable   s    ))++477r   c                 N    |                                                                  S r(   )r_   r   r&   s    r   r   z!OrPatternNode.irrefutable_message   s     ))++??AAAr   c                     d }| j         D ]5}|                                }|||k    rt          | j        d           |}6|S )Nz)alternative patterns bind different names)r\   r)   r   r   )r   child_targetsr^   alternative_targetss       r   r6   z&OrPatternNode.get_main_pattern_targets   s\    , 	0 	0K"-"9"9";";(]>Q-Q-Qdh KLLL/MMr   c                     t          t          |                                            d }| j        D ][}|r-t	          |j        |                                 d            d S |                                r|}|                                 \d S r   )r0   r[   r   r\   r   r   r   r   )r   r   r^   r3   s      r   r   z"OrPatternNode.validate_irrefutable   s    mT""77999!%, 		/ 		/K% *.-AACCjjj   ))++ 5)4&,,....		/ 		/r   )r   r   r   r   r-   r   r_   r   r   r6   r   rJ   rK   s   @r   r[   r[      s          )^,<<K  8 8 8B B B  / / / / / / / / /r   r[   c                   .    e Zd ZdZej        dgz   Zd ZdS )MatchSequencePatternNodez)
    patterns   list of PatternNodes
    patternsc                     t                      }| j        D ]*}|                     ||                                           +|S r(   )rP   rh   rA   r)   r   r:   r   s      r   r6   z1MatchSequencePatternNode.get_main_pattern_targets   sH    %%} 	M 	MG,,Wg6I6I6K6KLLLLr   N)r   r   r   r   r-   r   r6   r    r   r   rg   rg      s>          )ZL8K    r   rg   c                   <    e Zd ZdZg Zg ZdZej        g dz   Zd Z	dS )MatchMappingPatternNodez
    keys   list of NameNodes
    value_patterns  list of PatternNodes of equal length to keys
    double_star_capture_target  NameNode or None
    N)keysvalue_patternsdouble_star_capture_targetc                     t                      }| j        D ]*}|                     ||                                           +| j        r |                     || j        j                   |S r(   )rP   rn   rA   r)   ro   r7   r8   rj   s      r   r6   z0MatchMappingPatternNode.get_main_pattern_targets   sq    %%* 	M 	MG,,Wg6I6I6K6KLLLL* 	V&&w0O0TUUUr   )
r   r   r   r   rm   rn   ro   r-   r   r6   r    r   r   rl   rl      s[          DN!%) - - - K    r   rl   c                   @    e Zd ZdZdZg Zg Zg Zej	        g dz   Z	d Z
dS )ClassPatternNodea  
    class_  NameNode or AttributeNode
    positional_patterns  list of PatternNodes
    keyword_pattern_names    list of NameNodes
    keyword_pattern_patterns    list of PatternNodes
                                (same length as keyword_pattern_names)
    N)class_positional_patternskeyword_pattern_nameskeyword_pattern_patternsc                     t                      }| j        | j        z   D ]*}|                     ||                                           +|S r(   )rP   rt   rv   rA   r)   rj   s      r   r6   z)ClassPatternNode.get_main_pattern_targets   sQ    %%/$2OO 	M 	MG,,Wg6I6I6K6KLLLLr   )r   r   r   r   rs   rt   ru   rv   r-   r   r6   r    r   r   rr   rr      sb          F!) - - - K    r   rr   N)Nodesr   r   r   Errorsr   r   r"   r-   rM   rS   r[   rg   rl   rr   r    r   r   <module>rz      s  
 - , , , , , , , , ,             <, , , , ,D , , ,2,- ,- ,- ,- ,-$ ,- ,- ,-^
 
 
 
 
K 
 
 
       6(/ (/ (/ (/ (/K (/ (/ (/V    {       k   4    {     r   