
    5 f.                     d   d dl mZ d dlmZmZmZmZ d dlmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZ d dlmZ d d	l m!Z! d d
l"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( d dl)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/ h dZ0 G d de          Z1dedeee2         ee	         ee         f         fdZ3dS )    )contextmanager)	GeneratorListOptionalTuple)	MatchStmtNameExprTypeInfo)		AsPatternClassPatternMappingPattern	OrPatternPatternSequencePatternSingletonPatternStarredPatternValuePattern)TraverserVisitor)Instance	TupleTypeget_proper_type)
BasicBlockValue)object_rprimitive)	IRBuilder)	dict_copydict_del_itemmapping_has_keysupports_mapping_protocol)generic_ssize_t_len_op)sequence_get_itemsequence_get_slicesupports_sequence_protocol)fast_isinstance_opslow_isinstance_op>   builtins.intbuiltins.setbuiltins.strbuiltins.boolbuiltins.dictbuiltins.listbuiltins.bytesbuiltins.floatbuiltins.tuplebuiltins.bytearraybuiltins.frozensetc                   L   e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   dZe	e
         ed<   ded	ed
dfdZded
dfdZded
dfdZded
dfdZded
dfdZded
dfdZde
d
dfdZded
dfdZded
dfdZded
dfdZddeded
dfdZeded
ed         fd            Z dS ) MatchVisitorbuilder
code_block
next_blockfinal_blocksubjectmatchN
as_pattern
match_nodereturnc                     || _         t                      | _        t                      | _        t                      | _        || _        |                    |j                  | _        d S N)r3   r   r4   r5   r6   r8   acceptr7   )selfr3   r:   s      I/var/www/equiseq/venv/lib/python3.11/site-packages/mypyc/irbuild/match.py__init__zMatchVisitor.__init__=   sL    $,,$,,%<<
~~j&899    indexc                    | j                             | j                   | j        j        |         }|rrt                      | _        | j                             |          }| j                             || j        | j                   | j                             | j                   | j                             | j        j	        |                    | j         
                    | j                   d S r=   )r3   activate_blockr4   r8   guardsr   r>   add_bool_branchr5   bodiesgotor6   )r?   rC   guardconds       r@   build_match_bodyzMatchVisitor.build_match_bodyG   s    ##DO444
!%( 	9(llDO<&&u--DL((tPPPL''888DJ-e4555$*+++++rB   mc                 V   t          |j                  D ]t\  }}t                      | _        t                      | _        |                    |            |                     |           | j                            | j                   u| j        	                    | j
                   d S r=   )	enumeratepatternsr   r4   r5   r>   rL   r3   rE   goto_and_activater6   )r?   rM   ipatterns       r@   visit_match_stmtzMatchVisitor.visit_match_stmtW   s    #AJ// 	9 	9JAw(llDO(llDONN4   !!!$$$L''8888&&t'788888rB   rS   c                    | j                             |j                  }| j                             | j        |d|j        j                  }|                     |           | j                             || j        | j	                   d S )N==)
r3   r>   expr	binary_opr7   linebind_as_patternrG   r4   r5   )r?   rS   valuerK   s       r@   visit_value_patternz MatchVisitor.visit_value_patternc   ss    ##GL11|%%dlE4ARSSU###$$T4?DOLLLLLrB   c                 D   | j         }t                      | _         |j        D ]W}| j        }|                    |            || _        | j                            | j                    t                      | _         X|| _         | j                            | j                    d S r=   )r5   r   rP   r9   r>   r3   rE   rI   )r?   rS   backup_blockpbackups        r@   visit_or_patternzMatchVisitor.visit_or_patternl   s    $,,! 	+ 	+A _FHHTNNN$DOL''888(llDOO&$/*****rB   c                    | j                             |j                  rt          nt          }| j                             || j        | j                             |j                  g|j                  }| j         	                    || j
        | j                   |                     | j        d           |j        r|j        j        t          v rT| j                             | j
                   t#                      | _
        |j        d                             |            d S |j        j        }t'          |t(                    sJ |j                            d          }|sJ t/          |j                  }t'          |t2                    sJ g }|j        D ]g}t/          |          }	t'          |	t6                    r|	j        sJ |	j        j        }
t'          |
t<                    sJ |                    |
           htA          |j                  D ]\  }}| j                             | j
                   t#                      | _
        | j         !                    | j        ||         |j                  }| "                    |          5  |                    |            d d d            n# 1 swxY w Y   tG          |j$        |j%                  D ]\  }}| j                             | j
                   t#                      | _
        | j         !                    | j        ||j                  }| "                    |          5  |                    |            d d d            n# 1 swxY w Y   d S )NT)	new_blockr   __match_args__)&r3   is_builtin_ref_expr	class_refr$   r%   call_cr7   r>   rY   rG   r4   r5   rZ   positionalsfullnameMATCHABLE_BUILTINSrE   r   node
isinstancer
   namesgetr   typer   itemsr   last_known_valuer[   strappendrO   py_get_attrenter_subpatternzipkeyword_keyskeyword_values)r?   rS   isinstance_oprK   rk   tymatch_args_type
match_argsitemproper_item	match_argrR   rW   
positionalkeyr[   attrs                    r@   visit_class_patternz MatchVisitor.visit_class_pattern}   s   
 |//0ABB$# 	 |""DL$,*=*=g>O*P*PQSZS_
 
 	$$T4?DOLLLT\T::: &	& )-???++DO<<<",,,#A&--d333$)DdH----- 011BII2-bg66Ooy99999$&J'- - --d33!+x88Y[=YYYY'8>	!)S11111!!),,,,$W%899 	& 	&4++DO<<<",,, "\55dlJqMSWS\]]
**:66 & &KK%%%& & & & & & & & & & & & & & & g2G4JKK 	# 	#JCL''888(llDO <++DL#uzJJD&&t,, # #T"""# # # # # # # # # # # # # # #	# 	#s$   J//J3	6J3	M))M-	0M-	c                 J   |j         r0| j        }|| _        |j                             |            || _        nL|j        rE| j                            |j                  }| j                            || j        |j                   | j        	                    | j
                   d S r=   )rS   r9   r>   namer3   get_assignment_targetassignr7   rY   rI   r4   )r?   rS   old_patterntargets       r@   visit_as_patternzMatchVisitor.visit_as_pattern   s    ? 		D/K%DOO""4((()DOO\ 	D\77EEFLglCCC$/*****rB   c                 Z   |j         | j                                        }n<|j         du r| j                                        }n| j                                        }| j                            | j        |d|j                  }| j                            || j	        | j
                   d S )NTis)r[   r3   none_objecttruefalserX   r7   rY   rG   r4   r5   )r?   rS   objrK   s       r@   visit_singleton_patternz$MatchVisitor.visit_singleton_pattern   s    = ,**,,CC]d"",##%%CC,$$&&C|%%dlCw|LL$$T4?DOLLLLLrB   c                    | j                             t          | j        g|j                  }| j                             || j        | j                   g }t          |j	        |j
                  D ]\\  }}| j                             | j                   t                      | _        | j                             |          }|                    |           | j                             t          | j        |g|j                  }| j                             || j        | j                   | j                             | j                   t                      | _        | j                             | j        d|gt"          |j                  }|                     |          5  |                    |            d d d            n# 1 swxY w Y   ^|j        r| j                             | j                   t                      | _        | j                             t(          | j        g|j        j                  }	| j                             |j                  }
| j                             |
|	|j        j                   t/          |          D ]8\  }}| j                             t0          |	|g|j	        |         j                   9| j                             | j                   d S d S )N__getitem__)r3   rg   r   r7   rY   rG   r4   r5   rv   keysvaluesrE   r   r>   rs   r   gen_method_callr   ru   restr   r   r   rO   r   rI   )r?   rS   is_dictr   r   r[   	key_valueexistsr}   r   r   rR   key_names                r@   visit_mapping_patternz"MatchVisitor.visit_mapping_pattern   s   ,%%&?$,QXQ]^^$$WdotOOOglGN;; 	# 	#JCL''888(llDO++C00IKK	"""\((4<:SU\UabbFL(($/RRRL''888(llDO<//mi[:KW\ D &&t,, # #T"""# # # # # # # # # # # # # # # < 	/L''888(llDO<&&y4<.',BSTTD\77EEFLgl.?@@@( [ [8##MD(3CW\RS_EYZZZZLdo.....	/ 	/s   G  G	G	seq_patternc                    t          |          \  }}}| j                            t          | j        g|j                  }| j                            || j        | j                   | j        	                    | j                   t                      | _        | j                            t          | j        g|j                  }t          |          }| j                            || j                            |          |dnd|j                  }| j                            || j        | j                   t          |          D ]\  }	}
| j        	                    | j                   t                      | _        |D|	|k    r>| j                            || j                            ||	z
            d|
j                  }n| j                            |	          }| j                            t           | j        |g|
j                  }|                     |          5  |
                    |            d d d            n# 1 swxY w Y   	|r|| j        	                    | j                   t                      | _        | j                            || j                            ||z
            d|j                  }| j                            t&          | j        | j                            |          |g|j                  }| j                            |          }| j                            |||j                   | j                            | j                   d S d S d S )NrV   z>=-)prep_sequence_patternr3   rg   r#   r7   rY   rG   r4   r5   rE   r   r    lenrX   load_intrO   r!   ru   r>   r"   r   r   rI   )r?   r   
star_indexcapturerP   is_list
actual_lenmin_lenis_long_enoughrR   rS   currentr}   capture_endr   r   s                   r@   visit_sequence_patternz#MatchVisitor.visit_sequence_pattern  sH   (=k(J(J%
GX,%%&@4<.R]Rbcc$$WdotOOO##DO444$,,\(()?$,Q\Qabb
h--//L!!'**&DDD	
 
 	$$^T_doVVV#H-- 	% 	%JAwL''888(llDO%!z//,00 5 5gk B BC 
 ,//22<&&'84<:QSZS_``D&&t,, % %t$$$% % % % % % % % % % % % % % %  	/z-L''888(llDO,00DL11'J2FGGgl K <&&"t|44Z@@+N D \77@@FLgl;;;Ldo.....#	/ 	/--s    II		I	Fr[   rc   c                    | j         r| j         j        r| j         j        r|r2| j                            | j                   t                      | _        | j                            | j         j                  }| j                            ||| j         j        j	                   d | _         |r'| j        
                    | j                   d S d S d S d S d S r=   )r9   rS   r   r3   rE   r4   r   r   r   rY   rI   )r?   r[   rc   r   s       r@   rZ   zMatchVisitor.bind_as_pattern>  s    ? 	3t6 	34?;O 	3 /++DO<<<",,,\778LMMFLt/F/KLLL"DO 3!!$/22222	3 	3 	3 	3 	3 	33 3rB   )NNNc              #   <   K   | j         }|| _         d V  || _         d S r=   )r7   )r?   r7   old_subjects      r@   ru   zMatchVisitor.enter_subpatternL  s(      l"rB   )F)!__name__
__module____qualname__r   __annotations__r   r   r   r9   r   r   rA   intrL   rT   r   r\   r   ra   r   r   r   r   r   r   r   r   r   boolrZ   r   r   ru    rB   r@   r2   r2   3   sC        NNN&*J#***:	 :y :T : : : :,c ,d , , , , 
9) 
9 
9 
9 
9 
9M< MD M M M M+	 +d + + + +"A#< A#D A# A# A# A#F+	 +d + + + +
M/? 
MD 
M 
M 
M 
M(/^ (/ (/ (/ (/ (/T8// 8/d 8/ 8/ 8/ 8/t3 3U 3t 3 3 3 3 3 # #)<L2M # # # ^# # #rB   r2   r   r;   c                     d }d }g }t          | j                  D ]9\  }}t          |t                    r
|}|j        }$|                    |           :|||fS r=   )rO   rP   rl   r   r   rs   )r   r   r   rP   rR   rS   s         r@   r   r   T  su     !%J"&G H 455 % %
7g~.. 	%JoGG OOG$$$$w((rB   N)4
contextlibr   typingr   r   r   r   
mypy.nodesr   r	   r
   mypy.patternsr   r   r   r   r   r   r   r   r   mypy.traverserr   
mypy.typesr   r   r   mypyc.ir.opsr   r   mypyc.ir.rtypesr   mypyc.irbuild.builderr   mypyc.primitives.dict_opsr   r   r   r   mypyc.primitives.generic_opsr    mypyc.primitives.list_opsr!   r"   r#   mypyc.primitives.misc_opsr$   r%   rj   r2   r   r   r   rB   r@   <module>r      s`   % % % % % % 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 , + + + + + ; ; ; ; ; ; ; ; ; ; * * * * * * * * - - - - - - + + + + + +            @ ? ? ? ? ?         
 M L L L L L L L   ^# ^# ^# ^# ^## ^# ^# ^#B	) )
8C=(8,d7m;<) ) ) ) ) )rB   