
    hp                         S SK JrJrJr  S SKJr   " S S\5      r " S S\5      r " S S\5      r " S	 S
\5      r	 " S S\5      r
 " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)   )NodeStatNode	ErrorNode)errorc                   ,    \ rS rSrSrSS/rS rS rSrg)		MatchNode	   z[
subject  ExprNode    The expression to be matched
cases    [MatchCaseNode]  list of cases
subjectcasesc                    S nU R                    H{  n[        U[        5      (       a  M  U(       a3  [        UR                  UR
                  R                  5        S35          g UR                  5       (       a  UnUR                  5         M}     g Nz% makes remaining patterns unreachable)	r   
isinstancer   r   pospatternirrefutable_messageis_irrefutablevalidate_irrefutable)selffound_irrefutable_casecases      X/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Compiler/MatchCaseNodes.pyr   MatchNode.validate_irrefutable   s}    !%JJD$	** %*..-55IIKLLqr ""$$)-&%%'     c                 2    [        U R                  S5        U $ )Nz/Structural pattern match is not yet implemented)r   r   )r   envs     r   analyse_expressionsMatchNode.analyse_expressions"   s    dhhIJr    N)	__name__
__module____qualname____firstlineno____doc__child_attrsr   r   __static_attributes__r   r   r   r   r   	   s    
 g&K("r   r   c                   2    \ rS rSrSr/ SQrS rS rS rSr	g)	MatchCaseNode'   zL
pattern    PatternNode
body       StatListNode
guard      ExprNode or None
)r   bodyguardc                     [        U R                  [        5      (       a  gU R                  R                  5       =(       a    U R                  (       + $ )NT)r   r   r   r   r*   r   s    r   r   MatchCaseNode.is_irrefutable0   s4    dllI..||**,?TZZ?r   c                 x    [        U R                  [        5      (       a  g U R                  R                  5         g N)r   r   r   get_targetsr,   s    r   validate_targetsMatchCaseNode.validate_targets5   s&    dllI..  "r   c                 x    [        U R                  [        5      (       a  g U R                  R                  5         g r/   )r   r   r   r   r,   s    r   r   "MatchCaseNode.validate_irrefutable:   s&    dllI..))+r   r   N)
r   r    r!   r"   r#   r$   r   r1   r   r%   r   r   r   r'   r'   '   s     /K@
#
,r   r'   c                   V   ^  \ rS rSrSrS/rU 4S jrS rS rS r	S r
S	 rS
 rSrU =r$ )PatternNode@   z
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                 F   > SU;  a  / US'   [         [        U ]
  " U40 UD6  g )Nr8   )superr6   __init__)r   r   kwds	__class__s      r   r;   PatternNode.__init__L   s)    t#!#Dk4)#66r   c                     g)NFr   r,   s    r   r   PatternNode.is_irrefutableQ   s    r   c                     U R                  5       nU R                   H  nU R                  XR                  5        M      U$ r/   )get_main_pattern_targetsr8   add_target_to_targetsnamer   targetstargets      r   r0   PatternNode.get_targetsT   s5    //1ooF&&w< &r   c                     UR                  U5       H  n[        U R                  SU S35        M     UR                  U5        g Nzmultiple assignments to name 'z' in pattern)intersectionr   r   update)r   rF   other_targetsrD   s       r   update_targets_with_targets'PatternNode.update_targets_with_targetsZ   s;    ((7D$((<TF,OP 8}%r   c                 d    X!;   a  [        U R                  SU S35        UR                  U5        g rJ   )r   r   addrE   s      r   rC   !PatternNode.add_target_to_targets_   s,    $((<VHLQRFr   c                     [         er/   )NotImplementedErrorr,   s    r   rB   $PatternNode.get_main_pattern_targetsd   s    !!r   c                     U R                    H:  n[        X5      nUc  M  [        U[        5      (       d  M*  UR	                  5         M<     g r/   )r$   getattrr   r6   r   )r   attrchilds      r   r    PatternNode.validate_irrefutableh   s:    $$DD'E Z{%C%C**, %r   r   )r   r    r!   r"   r#   r$   r;   r   r0   rN   rC   rB   r   r%   __classcell__r=   s   @r   r6   r6   @   s9      .K7
&

"- -r   r6   c                   B    \ rS rSrSr\R                  S/-   rSrS rSr	g)MatchValuePatternNodeo   ze
value   ExprNode        # todo be more specific
is_is_check   bool     Picks "is" or equality check
valueFc                     [        5       $ r/   )setr,   s    r   rB   .MatchValuePatternNode.get_main_pattern_targetsx   s	    ur   r   N)
r   r    r!   r"   r#   r6   r$   is_is_checkrB   r%   r   r   r   r^   r^   o   s%    
 ))WI5KKr   r^   c                   R    \ rS rSrSrSrSr\R                  S/-   r	S r
S rS rS	rg)
MatchAndAssignPatternNode|   zT
target   NameNode or None  the target to assign to (None = wildcard)
is_star  bool
NFrG   c                 $    U R                   (       + $ r/   )is_starr,   s    r   r   (MatchAndAssignPatternNode.is_irrefutable   s    <<r   c                 X    U R                   (       a  SU R                   R                  -  $ g)Nzname capture '%s'wildcard)rG   rD   r,   s    r   r   -MatchAndAssignPatternNode.irrefutable_message   s!    ;;&)9)999r   c                 f    U R                   (       a  U R                   R                  1$ [        5       $ r/   )rG   rD   rb   r,   s    r   rB   2MatchAndAssignPatternNode.get_main_pattern_targets   s#    ;;KK$$%%5Lr   r   )r   r    r!   r"   r#   rG   ri   r6   r$   
child_attsr   r   rB   r%   r   r   r   rf   rf   |   s4    
 FG((H:5J r   rf   c                   d   ^  \ rS rSrSr\R                  S/-   rS rS rS r	S r
U 4S jrS	rU =r$ )
OrPatternNode   z%
alternatives   list of PatternNodes
alternativesc                 \    U R                    H  nUR                  5       (       d  M  Us  $    g r/   )rt   r   )r   alternatives     r   get_first_irrefutable#OrPatternNode.get_first_irrefutable   s,    ,,K))++"" - r   c                 &    U R                  5       S L$ r/   )rw   r,   s    r   r   OrPatternNode.is_irrefutable   s    ))+477r   c                 >    U R                  5       R                  5       $ r/   )rw   r   r,   s    r   r   !OrPatternNode.irrefutable_message   s    ))+??AAr   c                     S nU R                    H3  nUR                  5       nUb  X:w  a  [        U R                  S5        UnM5     U$ )Nz)alternative patterns bind different names)rt   r0   r   r   )r   child_targetsrv   alternative_targetss       r   rB   &OrPatternNode.get_main_pattern_targets   sM    ,,K"-"9"9";(]-Qdhh KL/M	 -
 r   c                   > [         [        U ]  5         S nU R                   HZ  nU(       a)  [	        UR
                  UR                  5        S35          g UR                  5       (       a  UnUR                  5         M\     g r   )r:   rr   r   rt   r   r   r   r   )r   r   rv   r=   s      r   r   "OrPatternNode.validate_irrefutable   su    mT79!%,,K%*..-AACDDij ))++)4&,,. -r   r   )r   r    r!   r"   r#   r6   r$   rw   r   r   rB   r   r%   r[   r\   s   @r   rr   rr      s<     ))^,<<K8B/ /r   rr   c                   >    \ rS rSrSr\R                  S/-   rS rSrg)MatchSequencePatternNode   z!
patterns   list of PatternNodes
patternsc                 ~    [        5       nU R                   H"  nU R                  XR                  5       5        M$     U$ r/   )rb   r   rN   r0   r   rF   r   s      r   rB   1MatchSequencePatternNode.get_main_pattern_targets   s3    %}}G,,W6I6I6KL %r   r   N)	r   r    r!   r"   r#   r6   r$   rB   r%   r   r   r   r   r      s      ))ZL8Kr   r   c                   L    \ rS rSrSr/ r/ rSr\R                  / SQ-   r	S r
Srg)MatchMappingPatternNode   z
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                     [        5       nU R                   H"  nU R                  XR                  5       5        M$     U R                  (       a%  U R                  XR                  R                  5        U$ r/   )rb   r   rN   r0   r   rC   rD   r   s      r   rB   0MatchMappingPatternNode.get_main_pattern_targets   sX    %**G,,W6I6I6KL +**&&w0O0O0T0TUr   r   )r   r    r!   r"   r#   r   r   r   r6   r$   rB   r%   r   r   r   r   r      s3     DN!%)) - Kr   r   c                   P    \ rS rSrSrSr/ r/ r/ r\	R                  / SQ-   r
S rSrg)ClassPatternNode   z
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                     [        5       nU R                  U R                  -    H"  nU R                  XR	                  5       5        M$     U$ r/   )rb   r   r   rN   r0   r   s      r   rB   )ClassPatternNode.get_main_pattern_targets   sA    %//$2O2OOG,,W6I6I6KL Pr   r   )r   r    r!   r"   r#   r   r   r   r   r6   r$   rB   r%   r   r   r   r   r      s:     F!)) - Kr   r   N)Nodesr   r   r   Errorsr   r   r'   r6   r^   rf   rr   r   r   r   r   r   r   <module>r      s~   
 - ,  <,D ,2,-$ ,-^
K 
 6(/K (/V{ k 4{ r   