
    X-Ph/                    2   d dl mZ d dlmZ d dl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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dZ2ddZ3dS )    )annotations)	Generator)contextmanager)	MatchStmtNameExprTypeInfo)		AsPatternClassPatternMappingPattern	OrPatternPatternSequencePatternSingletonPatternStarredPatternValuePattern)TraverserVisitor)InstanceLiteralType	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                      e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   dZded<   d.dZd/dZd0dZd1dZd2dZ	d3dZ
d4dZd5d!Zd6d#Zd7d&Zd8d9d+Zed:d-            ZdS );MatchVisitorr   builderr   
code_block
next_blockfinal_blockr   subjectr   matchNzAsPattern | None
as_pattern
match_nodereturnNonec                    || _         t                      | _        t                      | _        t                      | _        || _        |                    |j                  | _        d S N)r2   r   r3   r4   r5   r7   acceptr6   )selfr2   r9   s      S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/irbuild/match.py__init__zMatchVisitor.__init__?   sL    $,,$,,%<<
~~j&899    indexintc                   | j                             | j                   | j        j        |         }|rrt                      | _        | j                             |          }| j                             || j        | j                   | j                             | j                   | j                             | j        j	        |                    | j         
                    | j                   d S r=   )r2   activate_blockr3   r7   guardsr   r>   add_bool_branchr4   bodiesgotor5   )r?   rC   guardconds       r@   build_match_bodyzMatchVisitor.build_match_bodyI   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   r3   r4   r>   rM   r2   rF   goto_and_activater5   )r?   rN   ipatterns       r@   visit_match_stmtzMatchVisitor.visit_match_stmtY   s    #AJ// 	9 	9JAw(llDO(llDONN4   !!!$$$L''8888&&t'788888rB   rT   r   c                   | j                             |j                  }| j                             | j        |d|j        j                  }|                     |           | j                             || j        | j	                   d S )N==)
r2   r>   expr	binary_opr6   linebind_as_patternrH   r3   r4   )r?   rT   valuerL   s       r@   visit_value_patternz MatchVisitor.visit_value_patterne   ss    ##GL11|%%dlE4ARSSU###$$T4?DOLLLLLrB   r   c                D   | j         }t                      | _         |j        D ]W}| j        }|                    |            || _        | j                            | j                    t                      | _         X|| _         | j                            | j                    d S r=   )r4   r   rQ   r8   r>   r2   rF   rJ   )r?   rT   backup_blockpbackups        r@   visit_or_patternzMatchVisitor.visit_or_patternn   s    $,,! 	+ 	+A _FHHTNNN$DOL''888(llDOO&$/*****rB   r
   c                   | j                             |j                  rt          nt          }| j                             || j        | j                             |j                  g|j                  }| j         	                    || j
        | j                   |                     | j        d           |j        rS|j        j        t          v rT| j                             | j
                   t#                      | _
        |j        d                             |            d S |j        j        }t'          |t(                    sJ t+          |          }t-          |j                  D ]\  }}| j                             | j
                   t#                      | _
        | j                             | j        ||         |j                  }|                     |          5  |                    |            d d d            n# 1 swxY w Y   t3          |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   )r2   is_builtin_ref_expr	class_refr#   r$   primitive_opr6   r>   rZ   rH   r3   r4   r[   positionalsfullnameMATCHABLE_BUILTINSrF   r   node
isinstancer   extract_dunder_match_args_namesrP   py_get_attrenter_subpatternzipkeyword_keyskeyword_values)r?   rT   isinstance_oprL   rk   
match_argsrS   rX   
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-----8>>J$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$   "HH	H	J>>K	K	r	   c                J   |j         r0| j        }|| _        |j                             |            || _        nL|j        rE| j                            |j                  }| j                            || j        |j                   | j        	                    | j
                   d S r=   )rT   r8   r>   namer2   get_assignment_targetassignr6   rZ   rJ   r3   )r?   rT   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   r   c                Z   |j         | j                                        }n<|j         du r| j                                        }n| j                                        }| j                            | j        |d|j                  }| j                            || j	        | j
                   d S )NTis)r\   r2   none_objecttruefalserY   r6   rZ   rH   r3   r4   )r?   rT   objrL   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   r   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                   t1          |          D ]8\  }}| j                             t2          |	|g|j	        |         j                   9| j                             | j                   d S d S )N__getitem__)r2   call_cr   r6   rZ   rH   r3   r4   rp   keysvaluesrF   r   r>   appendr   gen_method_callr   ro   restrg   r   r{   r|   rP   r   rJ   )r?   rT   is_dictr   rv   r\   	key_valueexistsitemr   r~   rS   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<,,YHYZZD\77EEFLgl.?@@@( [ [8##MD(3CW\RS_EYZZZZLdo.....	/ 	/s   G  G	G	seq_patternr   c                   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 )NrW   z>=-)prep_sequence_patternr2   r   r"   r6   rZ   rH   r3   r4   rF   r   r   lenrY   load_intrP   r    ro   r>   r!   r{   r|   rJ   )r?   r   
star_indexcapturerQ   is_list
actual_lenmin_lenis_long_enoughrS   rT   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\   rd   boolc                   | 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=   )r8   rT   rz   r2   rF   r3   r   r{   r|   rZ   rJ   )r?   r\   rd   r~   s       r@   r[   zMatchVisitor.bind_as_pattern0  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   Generator[None]c              #  <   K   | j         }|| _         d V  || _         d S r=   )r6   )r?   r6   old_subjects      r@   ro   zMatchVisitor.enter_subpattern>  s(      l"rB   )r2   r   r9   r   r:   r;   )rC   rD   r:   r;   )rN   r   r:   r;   )rT   r   r:   r;   )rT   r   r:   r;   )rT   r
   r:   r;   )rT   r	   r:   r;   )rT   r   r:   r;   )rT   r   r:   r;   )r   r   r:   r;   )F)r\   r   rd   r   r:   r;   )r6   r   r:   r   )__name__
__module____qualname____annotations__r8   rA   rM   rU   r]   rb   rx   r   r   r   r   r[   r   ro    rB   r@   r1   r1   5   sx        NNN#'J'''': : : :, , , , 
9 
9 
9 
9M M M M+ + + +"1# 1# 1# 1#f+ + + +
M 
M 
M 
M(/ (/ (/ (/T8/ 8/ 8/ 8/t3 3 3 3 3 # # # ^# # #rB   r1   r   r   r:   1tuple[int | None, NameExpr | None, list[Pattern]]c                    d }d }g }t          | j                  D ]9\  }}t          |t                    r
|}|j        }$|                    |           :|||fS r=   )rP   rQ   rl   r   r   r   )r   r   r   rQ   rS   rT   s         r@   r   r   F  su     "J#G H 455 % %
7g~.. 	%JoGG OOG$$$$w((rB   infor   	list[str]c                   | j                             d          }|sJ t          |j                  }t	          |t
                    sJ g }|j        D ]}t          |          }d }t	          |t                    r|j        r|j        j	        }nt	          |t                    r|j	        }t	          |t                    sJ d|             |                    |           |S )N__match_args__z"Unrecognized __match_args__ item: )namesgetr   typerl   r   itemsr   last_known_valuer\   r   strr   )r   tymatch_args_typert   r   proper_item	match_args          r@   rm   rm   X  s    	(	)	)BIII%bg..Ooy11111J% 
% 
%%d++	k8,, 	*1M 	*#4:II[11 	*#)I)S))VV+VPT+V+VVVV)$$$$rB   N)r   r   r:   r   )r   r   r:   r   )4
__future__r   collections.abcr   
contextlibr   
mypy.nodesr   r   r   mypy.patternsr	   r
   r   r   r   r   r   r   r   mypy.traverserr   
mypy.typesr   r   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   r1   r   rm   r   rB   r@   <module>r      sQ   " " " " " " % % % % % % % % % % % % 4 4 4 4 4 4 4 4 4 4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 , + + + + + H H H H H H H H H H H H * * * * * * * * - - - - - - + + + + + +            @ ? ? ? ? ?         
 M L L L L L L L   N# N# N# N# N## N# N# N#b) ) ) )$     rB   