
    iƎ                    $   U d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddl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(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ ddlKmLZLmMZM ddlNmOZO g dZPdeQd<   g dZRdeQd<    G d de          ZS G d deOeS                   ZTd/d$ZUd0d(ZVd1d+ZWd2d-ZXd.S )3z?Pattern checker. This file is conceptually part of TypeChecker.    )annotations)defaultdict)Final
NamedTuple)message_registry)TypeCheckerSharedApi	TypeRange)analyze_member_access)expand_type_by_instance)
join_typesliteral_hash)map_instance_to_supertype)narrow_declared_type)MessageBuilder)ARG_POS
ExpressionNameExprTempNode	TypeAliasVar)Options)		AsPatternClassPatternMappingPattern	OrPatternPatternSequencePatternSingletonPatternStarredPatternValuePattern)Plugin)
is_subtype)coerce_to_literalmake_simplified_union"try_getting_str_literals_from_typetuple_fallback)AnyTypeFunctionLikeInstanceNoneType
ProperType	TupleTypeTypeTypedDictType	TypeOfAnyTypeTypeTypeVarTupleTypeTypeVarTypeUninhabitedType	UnionType
UnpackTypecallable_with_ellipsisfind_unpack_in_listget_proper_typesplit_with_prefix_and_suffix)fill_typevarsfill_typevars_with_any)PatternVisitor)builtins.boolbuiltins.bytearraybuiltins.bytesbuiltins.dictzbuiltins.floatzbuiltins.frozensetzbuiltins.intbuiltins.listzbuiltins.setbuiltins.strbuiltins.tupler   self_match_type_names)rC   r@   r?   non_sequence_match_type_namesc                  .    e Zd ZU ded<   ded<   ded<   dS )PatternTyper.   type	rest_typedict[Expression, Type]capturesN)__name__
__module____qualname____annotations__     P/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypy/checkpattern.pyrH   rH   R   s0         JJJOOO$$$$$$rR   rH   c                     e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   dKdZdLdZdMdZdNdZdOdZ	dPd Z
dQd"ZdRd(ZdSd,ZdTd.ZdUd0ZdVd5ZdWd6ZdXd8ZdYd;ZdZd<Zd[d>Zd\dAZd]dEZd^dHZd_dIZdJS )`PatternCheckerzPattern checker.

    This class checks if a pattern can match a type, what the type can be narrowed to, and what
    type capture patterns should be inferred as.
    r   chkr   msgr"   pluginr   subjectr.   subject_type
list[Type]type_contextself_match_typesnon_sequence_match_typesr   optionsreturnNonec                    || _         || _        || _        g | _        |                     t
                    | _        |                     t                    | _        || _	        d S N)
rV   rW   rX   r\   generate_types_from_namesrE   r]   rF   r^   r_   )selfrV   rW   rX   r_   s        rS   __init__zPatternChecker.__init__t   s`      $ > >?T U U(,(F(F))
 )
% rR   or   rH   c                    | j                             |           |                    |           }| j                                          |S rc   )r\   appendacceptpop)re   rg   r\   results       rS   rj   zPatternChecker.accept   sB      ...$rR   r   c                p   | j         d         }|j        "|                     |j        |          }|\  }}}n|t                      i }}}t	          |          sO|j        H| j                            |t          |          g||          \  }}t	          |          s
|||j        <   t          |||          S )Ndefault)
r\   patternrj   r4   is_uninhabitednamerV   #conditional_types_with_intersectionget_type_rangerH   )re   rg   current_typepattern_typetyprJ   type_map_s           rS   visit_as_patternzPatternChecker.visit_as_pattern   s    (,9 ;;qy,??L'3$CHH'3_5F5FHCc"" 	'qv'9XAA~c223Q B  FC "#&& '#& 3	8444rR   r   c                |   | j         d         }g }|j        D ]H}|                     ||          }|                    |           t	          |j                  s|j        }Ig }|D ]0}t	          |j                  s|                    |j                   1t          t                    }|d         j	        
                                D ]1\  }}	t          |          }
||
                             ||	f           2t          |dd                    D ]\  }}d |j	        
                                D             }|                                |k    r0| j                            t           j        |j        |                    |j	        
                                D ]1\  }}	t          |          }
||
                             ||	f           2i }|                                D ]:}t'                      }	|D ]\  }}t)          |	|g          }	|	||d         d         <   ;t)          |          }t+          |||          S )Nrn   r      c                2    h | ]\  }}t          |          S rQ   )get_var).0exprrz   s      rS   	<setcomp>z2PatternChecker.visit_or_pattern.<locals>.<setcomp>   s"    OOOgdAGDMMOOOrR   )r\   patternsrj   ri   rr   rI   rJ   r   listrL   itemsr   	enumeratekeysrW   failr   OR_PATTERN_ALTERNATIVE_NAMESvaluesr4   r%   rH   )re   rg   rv   pattern_typesrq   rw   typescapture_typesr   rx   nodeivarsrL   capture_listrz   other
union_types                     rS   visit_or_patternzPatternChecker.visit_or_pattern   sf   (,
 z 	6 	6G;;w==L  ...!,"344 6+5
 ) 	0 	0L!,"344 0\.///
 CNdBSBS&q)288:: 	4 	4ID#4==D$&&c{3333  )qrr):;; 	8 	8OA|OO1F1L1L1N1NOOOD!!##t++.KQZXY][[[)288:: 8 8	ct}}d#**D#;77778 ,.)0022 	/ 	/L!##C( : :5+S%L99+.H\!_Q'((*511
:|X>>>rR   r!   c                   | j         d         }| j        j                            |j                  }t          |          }t          |          }| j                            d|t          |          g||gddgdh          \  }}||                    ||          nt                      }||                    ||          nt                      }t          ||i           S )Nrn   z==r   r}   )r\   rV   expr_checkerrj   r   r$   r    narrow_type_by_identity_equalitygetr4   rH   )	re   rg   rv   rx   r   ok_maprest_mapok_typerJ   s	            rS   visit_value_patternz"PatternChecker.visit_value_pattern   s    (,h#**1622$$%%  8DD4#',)<q!fqc
 
 5;4F&**T<000OL]L]8@8LHLL|444RaRcRc	7Ir222rR   r   c                <   | j         d         }|j        }t          |t                    r!| j        j                            |d          }n|t                      }nJ | j                            |t          |          g||          \  }}t          ||i           S )Nrn   r>   Fro   )r\   value
isinstanceboolrV   r   infer_literal_expr_typer+   rt   ru   rH   )re   rg   rv   r   rx   narrowed_typerJ   s          rS   visit_singleton_patternz&PatternChecker.visit_singleton_pattern   s    (,WeT"" 	('??WWCC]**CCL#'8#O#O>#../L $P $
 $
 y =)R888rR   r   c                   t          | j        d                   }|                     |          s|                                 S d t	          |j                  D             }d }t          |          dk    r	|d         }nt          |          dk    r
J d            t          |j                  }||dz  }t          |t                    rmg }g }i }|,|j        |         }	t          |	t                    sJ |	j
        }
nd }
|j        D ]}|                     ||          \  }}}|                    |           |                    |           t          |          s|                                D ]~\  }}t          |          }||vrg ||<   ||
k    r@t          |t                    r+|j        j        dk    rt          |j        d                   rc||                             |           t'          t)          |          t)          |          d	 |                                D                       S d }t          |t*                    r|j        }t-          |          }|Jt          |          |z
  }|dk     r|                                 S |dk    r||                                 S ng }|D ]_}t          |t.                    r3t          |j        t0                    rt/          |j        j                  }|                    |           `|}|                    |
          }t          |          dz
  |k    r||                                 S nt          |t6                    r3t7          t8          j        |          }|gt          |j                  z  }nt          |t                    rN| j                            |          r4| j                             ||          }|gt          |j                  z  }n2| j        !                    d          }|gt          |j                  z  }g }g }i }| "                    |||          }tG          |j        |          D ]a\  }}|                     ||          }|\  }}}|                    |           |                    |           | $                    ||           b| %                    ||t          |          |d u          }| %                    ||t          |          |d u          } |}t          |t*                    r|tM          d |D                       rtO                      }!nt+          ||j(                  }!tS          d | D                       }"|"t          |           k    rtO                      }n"|"t          |           dz
  k    r-t+          d tG          ||           D             |j(                  }nt          |t*                    rEt+          ||j(                  }#| j        *                    |#tW          |          g||#          \  }!}ntO                      }$|D ]}tY          |$|          }$| -                    ||$          }!| j        *                    |tW          |!          g||          \  }!}%|t          |j                  dk    r|%}t'          |!||          S )Nrn   c                B    g | ]\  }}t          |t                    |S rQ   )r   r    )r   r   ps      rS   
<listcomp>z9PatternChecker.visit_sequence_pattern.<locals>.<listcomp>   s+    ___1A~A^A^_!___rR   r}   r      Fz/Parser should prevent multiple starred patternsrB   c                4    i | ]\  }}|t          |          S rQ   )r%   )r   r   r   s      rS   
<dictcomp>z9PatternChecker.visit_sequence_pattern.<locals>.<dictcomp>   s'    ]]]e,U33]]]rR   )r   builtins.objectc              3  4   K   | ]}t          |          V  d S rc   rr   r   rx   s     rS   	<genexpr>z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>e  s*      BB3>#&&BBBBBBrR   c              3  4   K   | ]}t          |          V  d S rc   r   r   s     rS   r   z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>j  s*      "S"S3>##6#6"S"S"S"S"S"SrR   c                :    g | ]\  }}t          |          r|n|S rQ   r   )r   currrests      rS   r   z9PatternChecker.visit_sequence_pattern.<locals>.<listcomp>r  s=       &D$ !/t 4 4>$  rR   ro   ).r9   r\   can_match_sequenceearly_non_matchr   r   lenr   r5   r    capturer   rj   ri   rr   r*   rI   fullnameargsrH   r%   r-   r8   r6   r2   upper_boundcopy_modifiedr(   r0   from_another_anyrV   type_is_iterableiterable_item_type
named_typecontract_starred_pattern_typeszipupdate_type_mapexpand_starred_pattern_typesanyr4   partial_fallbacksumrt   ru   r   construct_sequence_child)&re   rg   rv   star_positionsstar_positionrequired_patternsmatch_types
rest_typescaptures_liststar_pattern	star_exprt
match_typerJ   rL   r   rx   p_typunpack_indexinner_types	size_diffnormalized_inner_typesit
inner_typecontracted_new_inner_typescontracted_rest_inner_typescontracted_inner_typesr   rw   r   ry   new_inner_typesrest_inner_typesnew_typenum_always_matchnew_tuple_typenew_inner_typepossible_rest_types&                                         rS   visit_sequence_patternz%PatternChecker.visit_sequence_pattern   sm    't'8'<==&&|44 	*'')))__	!*(=(=___$(~!##*1-MM  A%%KKKKK
OO$"
 lI.. #	&(K%'J:<M( z-8!,?????(0		 	!' 8 826++a2C2C/
Ix"":...!!),,,%j11 8%-^^%5%5 8 8	c / 4 4}4424M$/ !I-- *5( ; ; . %
 3 F F .uz!} = = !G %%d+2237777%k22%j11]]}GZGZG\G\]]]   lI.. 	9&2&8K.{;;L#,,/@@	q==//111]]}'<//111)+&% 6 6B ""j11 =jJZ6[6[ ='(;<<*11"55554+99@V9WW{##a'*;;;@U//111g.. 	9 !;\JJJ%,QZ8KKh// 	9DH4M4Ml4[4[ 	944\1EEJ%,QZ8KK,,->??J%,QZ8K
 24"24#!%!D!D(9"
 "
 
$:;; 	5 	5DAq;;q!,,L".Cx&--c222'..t444  84444;;&s;7G7G]aIa
 
  <<'K8H8H,^bJb
 
 !	lI.. &	/<3GBB/BBBBB U*,,$_l6STT""S"SBR"S"S"SSS3'7#8#888+--		!S)9%:%:Q%>>> & *-k;K*L*L   !1 	 i00 	/ '8UVVN"&("N"N!=!= >> #O # #Hii -..N& A A!+NC!@!@44\>RRH+/8+W+W~h778!\ ,X , ,(H( (S__-A-A.	8Y999rR   r   star_pos
int | Nonenum_patternsintc                   t          |          }|T||         }t          |t                    sJ t          |j                  t          t
                    rj        j        dk    sJ |E|t          |          z
  dz   }|d|         }|j        d         g|z  z  }|||dz   d         z  }|S t          t          fd|D                       |||z
            \  }}	}
g }|	D ]M}t          |t                    r!|                    j        d                    8|                    |           Nt          |          t          |          gz   t          |
          z   S ||S |d|         }t          |          |z
  }|                    t          ||||z                                 ||||z   d         z  }|S )aj  
        Contracts a list of types in a sequence pattern depending on the position of a starred
        capture pattern.

        For example if the sequence pattern [a, *b, c] is matched against types [bool, int, str,
        bytes] the contracted types are [bool, Union[int, str], bytes].

        If star_pos in None the types are returned unchanged.
        NrD   r}   r   c                \    g | ](}t          |t                    rt                    n|)S rQ   )r   r6   )r   r   unpackeds     rS   r   zAPatternChecker.contract_starred_pattern_types.<locals>.<listcomp>  s6    ___TUz!Z/H/HOz(+++a___rR   )r8   r   r6   r9   rI   r*   r   r   r   r:   tupleri   r   r%   )re   r   r   r   r   unpackmissing	new_typesprefixmiddlesuffix
new_middlemstar_lengthr   s                 @rS   r   z-PatternChecker.contract_starred_pattern_types  s    +511#<(Ffj11111&v{33Hh11`hm6LP`6`6`6`6`&U3a7!-<-0	hmA./'99	U<!#3#5#566	  %A____Y^___``x'& &"FFF
 J ) ) a,, )%%hmA&67777%%a((((<<#8#D#D"EEVTTixi(Ie**|3K25H{DZ9Z3[\\]]]x+57788IrR   	num_typesoriginal_unpackr   c           	     p   ||S |rqg }t          |          D ]]\  }}||k    r|                    |           !|                    t          | j                            d|g                               ^|S |d|         }|t          |          z
  dz   }	|||         g|	z  z  }|||dz   d         z  }|S )zUndoes the contraction done by contract_starred_pattern_types.

        For example if the sequence pattern is [a, *b, c] and types [bool, int, str] are extended
        to length 4 the result is [bool, int, int, str].
        NrD   r}   )r   ri   r6   rV   named_generic_typer   )
re   r   r   r   r   resr   r   r   r   s
             rS   r   z+PatternChecker.expand_starred_pattern_types  s     L 
	 C!%(( _ _1==JJqMMMMJJz$(*E*EFVYZX[*\*\]]^^^^J)8)$	#e**,q0eHo&44	U8a<>>**	rR   r    c                    i }|j         1| j                            d| j        d         g          }|||j         <   t	          | j        d         t                      |          S )NrB   rn   )r   rV   r   r\   rH   r4   )re   rg   rL   	list_types       rS   visit_starred_patternz$PatternChecker.visit_starred_pattern  s^    +-9 33OdFWXZF[E\]]I"+HQY4,R0/2C2CXNNNrR   r   c                D   t          | j        d                   }d}i }t          |j        |j                  D ]\  }}|                     |||          }|d}| j                            d          }|                     ||          }t          |j
                  rd}g|                     ||j                   |j        | j                            d          }	t          ||	          rZt          |t                     rEt#          ||	j
                  }
| j                            d          }t!          ||
j                  }n7| j                            d          }| j                            d||g          }|||j        <   |}|rw| j        d         }|j        sb| j                            d          }	| j                            |t-          |	d          g||          \  }}t          |t.                    s|}nt1                      }t3          |||          S )	Nrn   TFr   ztyping.MappingrA   is_upper_boundro   )r9   r\   r   r   r   get_mapping_item_typerV   r   rj   rr   rI   r   rL   r   r#   r   r*   r   lookup_typeinfor   r   rt   r	   r(   r4   rH   )re   rg   rv   	can_matchrL   keyr   r   rw   mappingmapping_instdict_typeinforJ   object_type	else_typer   if_types                    rS   visit_mapping_patternz$PatternChecker.visit_mapping_pattern  s5   &t'8'<==	+-afah// 		F 		FJC33A|SIIJ!!	!X001BCC
;;uj99Ll/00 F!		$$X|/DEEEE6h))*:;;G,00 Zh5W5W 8w|TT $ 8 8 I I$]L4EFF		"h112CDD H77#k;%? 	  )HQV 	 	)(,H6 
'(--.>??%)X%Q%Q wu===>(	 &R & &" ",88 '&H&((H8Y999rR   rq   mapping_typer  Type | Nonec                v   t          |          }t          |t                    r| j                                        5 }| j        j                            ||          d         }|                                }d d d            n# 1 swxY w Y   |r^| j                                        5 }| 	                    |||          }|                                rd }d d d            n# 1 swxY w Y   nH| j                                        5  | 	                    |||          }d d d            n# 1 swxY w Y   |S )Nr   )
r9   r   r/   rW   filter_errorsrV   r   visit_typeddict_index_exprhas_new_errorsget_simple_mapping_item_type)re   rq   r  r  local_errorsrl   has_local_errorss          rS   r   z$PatternChecker.get_mapping_item_type  s    '|44lM22 	W'')) A\&*h&;&V&V #' '' $0#>#>#@#@ 	A A A A A A A A A A A A A A A   &X++-- &!>>wVYZZF#2244 &!%	& & & & & & & & & & & & & & & '')) W W::7LRUVVW W W W W W W W W W W W W W Ws5   ;BB	B	+.C%%C),C)
D..D25D2c                `    | j         j                            d||gt          g|          \  }}|S )N__getitem__)rV   r   check_method_call_by_namer   )re   rq   r  r  rl   rz   s         rS   r  z+PatternChecker.get_simple_mapping_item_type)  s8     H)CC<#	7
 
	 rR   r   c                   t          | j        d                   }|j        j        }t	          |t
                    r@|j        s9| j                            t          j
        |           |                                 S | j        j                            |j                  }|                     ||          }||                                 S t!          j        d |D                       }| j                            ||||          \  }}t'          |          r|                                 S t)          ||          }g }	t+                      }
i }t-          |j                  dk    rx|                     |          rt-          |j                  dk    r%| j                            t          j        |           |                     |j        d         |          }t'          |j                  s.t7          |j        t9          ||j                  |j                  S |j        }n| j                                        5 }tA          d||ddd|| j                  }|!                                }d d d            n# 1 swxY w Y   |rd| j                            t          j"        #                    |$                    | j%                            |           |                                 S t          |          }t	          |tL                    rntO          |          }t-          |j                  t-          |          k    r9| j                            t          j        |           |                                 S nd gt-          |j                  z  }tQ          ||j                  D ]3\  }}|	)                    ||f           ||
*                    |           4t+                      }d}tQ          |j+        |j,                  D ]\  }}|	)                    ||f           ||
v r;| j                            t          j-        #                    |          |           d	}n>||v r:| j                            t          j.        #                    |          |           d	}|*                    |           |r|                                 S d	}|	D ]r\  }}d }| j                                        5 }|tA          |||ddd|| j                  }nt_          t`          j1                  }|!                                }d d d            n# 1 swxY w Y   |s|t_          t`          j1                  }|r|j2        d
k    sR| j                            t          j3        #                    |$                    | j%                  |          |           n|| j        4                    ||          }|                     ||          \  }}}t'          |          rd}K| 5                    ||           t'          |          s|}t|stm                      }t7          |||          S )Nrn   c                    g | ]	}|j         
S rQ   )item)r   r   s     rS   r   z6PatternChecker.visit_class_pattern.<locals>.<listcomp>@  s    #@#@#@qAF#@#@#@rR   ro   r   r}   __match_args__F)	is_lvalueis_superis_operatororiginal_typerV   Tr   )7r9   r\   	class_refr   r   r   no_argsrW   r   r    CLASS_PATTERN_GENERIC_TYPE_ALIASr   rV   r   rj   get_class_pattern_type_rangesr5   
make_unionrt   rr   r   setr   positionalsshould_self_match&CLASS_PATTERN_TOO_MANY_POSITIONAL_ARGSrI   rH   r   rJ   rL   r  r
   r  MISSING_MATCH_ARGSformatstr_with_optionsr_   r-   get_match_arg_namesr   ri   addkeyword_keyskeyword_values(CLASS_PATTERN_KEYWORD_MATCHES_POSITIONAL'CLASS_PATTERN_DUPLICATE_KEYWORD_PATTERNr(   r0   
from_errorr   CLASS_PATTERN_UNKNOWN_KEYWORDadd_any_attribute_to_typer   r4   )re   rg   rv   	type_inforx   type_rangesr   rJ   r   keyword_pairsmatch_arg_setrL   rw   r  match_args_typer  proper_match_args_typematch_arg_namesarg_nameposkeyword_arg_sethas_duplicatesr  r   r  keywordrq   key_typer   inner_rest_typeinner_capturess                                  rS   visit_class_patternz"PatternChecker.visit_class_pattern1  s"   &t'8'<==
 K$	i++ 	*I4E 	*HMM*KQOOO'')))h#**1;7788a@@'')))"#@#@K#@#@#@AA"hJJ+q, K 
 
) (## 	*''))),\8DD
 ;="%%%+-q}""%%c** .4q}%%))HMM"2"Y[\]]]#{{1=+;]KK%l&788 &$)"9l.DEE$-  
 (0X++-- E&;("'!&$)&) H	' 	' 	'O (4'B'B'D'D$E E E E E E E E E E E E E E E $ 2HMM(;BB00>>  	    //111)8)I)I&4i@@ B&9:P&Q&QO1=))C,@,@@@&6&]_`aaa#33555 A (,fs1=/A/A&AO%(!-%H%H 4 4MHc!(((C999+%))(333
 %%ana.>?? 	% 	%JC  #u...m##$MTTUXYY[`   "&''$LSSTWXXZ_   "&$$$$ 	*'')))
 	 - #	- #	-GW$(H'')) A\&4%"'!&$)&. H	  	  	 HH  'y';<<H#/#>#>#@#@ A A A A A A A A A A A A A A A   
U8#3"9#788! Ui&8<M&M&MHMM(FMM00>>   	    (#xAA(GTTH:>++gx:X:X7Jj)) -!		$$X~>>>%o66 - ,I 	)&((H8Y999s%    1I==JJ5AUU	U	rx   list[TypeRange] | Nonec                   t          |          }t          |t                    r?g }|j        D ]/}|                     ||          }||                    |           0|sd S |S t          |t                    rG|                                r3t          |	                                          }t          |d          gS t          |j        j        t                    r}|j        j        j        l|j        j        j        dk    rW| j                            d          }t%          t&          j                  }t+          |||          }t          |d          gS t          |t,                    r|j        }t          |j        d          gS t          |t$                    rt          |d          gS | j                            t4          j                            |                    | j                            |           d S )NFr   ztyping.Callablezbuiltins.function)ret_typefallbackT)r9   r   r5   r   r"  extendr)   is_type_objr<   type_objectr	   r  r   r   rI   r   rV   r   r(   r0   unannotatedr7   r1   r  rW   r   r   CLASS_PATTERN_TYPE_REQUIREDr)  r*  r_   )	re   rx   rg   r   r5  r  
type_rangerG  any_types	            rS   r"  z,PatternChecker.get_class_pattern_type_ranges  s    $$eY'' 	K 3 3!??aHH
)&&z222 te\** 	:u/@/@/B/B 	:():):)<)<==Cc%88899q{'--		: %1 )->>> x**+>??Hy455H(HxXXXCc%88899eX&& 	@*Cej>>>??eW%% 	<eE:::;;8??$$T\22  		
 	
 	
 trR   c                &   t          |          }t          |t                    r|j        }t          |t                    rdS t          |t
                    r|j                            d          dS | j        D ]}t          ||          r dS dS )NFr  T)
r9   r   r-   r   r(   r*   rI   r   r]   r#   )re   rx   r   s      rS   r&  z PatternChecker.should_self_match  s    c""c9%% 	'&Cc7## 	5c8$$ 	6F)G)G)S 5* 	 	E#u%% tturR   r,   c                N    t          |t                    rdS t          |t                    r t           fd|j        D                       S  j        D ]}t          ||d          r dS  j                            d          }t          ||          pt          ||          S )NTc              3  \   K   | ]&}                     t          |                    V  'd S rc   )r   r9   )r   r  re   s     rS   r   z4PatternChecker.can_match_sequence.<locals>.<genexpr>  s9      \\$t..t/D/DEE\\\\\\rR   )ignore_promotionsFtyping.Sequence)	r   r(   r5   r   r   r^   r#   rV   r   )re   rx   r   sequences   `   rS   r   z!PatternChecker.can_match_sequence  s    c7## 	4c9%% 	]\\\\RUR[\\\\\\2 	 	E #u=== uu8&&'899#x((EJx,E,EErR   
type_names	list[str]c                    g }|D ]^}	 |                     | j                            |                     1# t          $ r!}|                    d          s|Y d }~Wd }~ww xY w|S )Nz	builtins.)ri   rV   r   KeyError
startswith)re   rU  r   rs   es        rS   rd   z(PatternChecker.generate_types_from_names  s     	 	DTX00667777   {33 G     s   -6
A! AA!original_type_maprK   extra_type_mapc                   d |D             }|                                 D ]h\  }}t          |          |v rMt          |          }| j                            t
          j                            |j                  |           c|||<   id S )Nc                ,    h | ]}t          |          S rQ   r   )r   r   s     rS   r   z1PatternChecker.update_type_map.<locals>.<setcomp>  s     MMM4L..MMMrR   )	r   r   r   rW   r   r   MULTIPLE_ASSIGNMENTS_IN_PATTERNr)  rs   )re   r[  r\  already_capturedr   rx   r   s          rS   r   zPatternChecker.update_type_map  s    
 NM;LMMM'--// 	. 	.ID#D!!%555t}}$DKKDIVVX\    +.!$''	. 	.rR   
outer_typer   c                    t          |          }t          |t                    r1                     |j                  }|                    |          S t          |t                    r|S t          |t                    r# fd|j        D             }t          |          S  j
                            dg          }t          | j
                            d                    rot          |t                    rt          |          }t          |t                     sJ t#          |j                  }t'          ||          }t'          ||          S |S )a  
        If outer_type is a child class of typing.Sequence returns a new instance of
        outer_type, that is a Sequence of inner_type. If outer_type is not a child class of
        typing.Sequence just returns a Sequence of inner_type

        For example:
        construct_sequence_child(List[int], str) = List[str]

        TODO: this doesn't make sense. For example if one has class S(Sequence[int], Generic[T])
        or class T(Sequence[Tuple[T, T]]), there is no way any of those can map to Sequence[str].
        )r   c                    g | ]:}                     t          |                    $                    |          ;S rQ   )r   r9   r   )r   r  r   re   s     rS   r   z;PatternChecker.construct_sequence_child.<locals>.<listcomp>8  sU       **?4+@+@AA--dJ??  rR   rS  )r9   r   r3   r   r   r   r(   r5   r   r%   rV   r   r#   r   r-   r'   r*   r;   rI   r   )	re   ra  r   proper_type	new_boundr   rT  
empty_typepartial_types	   ` `      rS   r   z'PatternChecker.construct_sequence_child%  se    &j11k;// 	D55k6MzZZI,,,CCCk7++ 	k9-- 	0    '-  E
 )///8../@:,OOj$("5"56G"H"HII 	+y11 :,[99k844444&{'788J2:xHHL*<EEEOrR   c                R    t          t                      | j        d         i           S )Nrn   )rH   r4   r\   )re   s    rS   r   zPatternChecker.early_non_matchI  s"    ?,,d.?.CRHHHrR   N)
rV   r   rW   r   rX   r"   r_   r   r`   ra   )rg   r   r\   r.   r`   rH   )rg   r   r`   rH   )rg   r   r`   rH   )rg   r!   r`   rH   )rg   r   r`   rH   )rg   r   r`   rH   )r   r[   r   r   r   r   r`   r[   )
r   r[   r   r   r   r   r   r   r`   r[   )rg   r    r`   rH   )rg   r   r`   rH   )rq   r   r  r.   r  r   r`   r  )rq   r   r  r.   r  r   r`   r.   )rg   r   r`   rH   )rx   r.   rg   r   r`   rD  rx   r.   r`   r   )rx   r,   r`   r   )rU  rV  r`   r[   )r[  rK   r\  rK   r`   ra   )ra  r.   r   r.   r`   r.   )r`   rH   )rM   rN   rO   __doc__rP   rf   rj   r{   r   r   r   r   r   r   r   r
  r   r  rC  r"  r&  r   rd   r   r   r   rQ   rR   rS   rU   rU   X   sP          NNN !    )(((      5 5 5 5"0? 0? 0? 0?d3 3 3 39 9 9 9c: c: c: c:J/ / / /b   8O O O O.: .: .: .:`   .   S: S: S: S:j& & & &P   F F F F	 	 	 	. . . ." " " "HI I I I I IrR   rU   rx   r-   r`   list[str | None]c                    g }| j         D ]W}t          |          }|t          |          dk    r|                    d            <|                    |d                    X|S )Nr}   r   )r   r&   r   ri   )rx   r   r  r   s       rS   r+  r+  M  sm    D	 # #3D99>S[[A--KKKKq	""""KrR   r   r   r   c                    t          | t                    s
J |             | j        }t          |t                    s
J |            |S )zx
    Warning: this in only true for expressions captured by a match statement.
    Don't call it from anywhere else
    )r   r   r   r   )r   r   s     rS   r   r   X  sL    
 dH%%++t+++9DdC  &&$&&&KrR   r.   r	   c                    t          |           } t          | t                    r-| j        r&t          | j        j        t
                    r| j        } t          | d          S )NFr   )r9   r   r*   last_known_valuer   r   r	   rx   s    rS   ru   ru   c  sc    
#

C3!!# # s+1488#
 "S////rR   r   c                F    t          t          |           t                    S rc   )r   r9   r4   rp  s    rS   rr   rr   n  s    oc**O<<<rR   N)rx   r-   r`   rk  )r   r   r`   r   )rx   r.   r`   r	   ri  )Yrj  
__future__r   collectionsr   typingr   r   mypyr   mypy.checker_sharedr   r	   mypy.checkmemberr
   mypy.expandtyper   	mypy.joinr   mypy.literalsr   mypy.maptyper   	mypy.meetr   mypy.messagesr   
mypy.nodesr   r   r   r   r   r   mypy.optionsr   mypy.patternsr   r   r   r   r   r   r   r    r!   mypy.pluginr"   mypy.subtypesr#   mypy.typeopsr$   r%   r&   r'   
mypy.typesr(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   mypy.typevarsr;   r<   mypy.visitorr=   rE   rP   rF   rH   rU   r+  r   ru   rr   rQ   rR   rS   <module>r     s   E E E " " " " " " # # # # # # $ $ $ $ $ $ $ $ ! ! ! ! ! ! ? ? ? ? ? ? ? ? 2 2 2 2 2 2 3 3 3 3 3 3             & & & & & & 2 2 2 2 2 2 * * * * * * ( ( ( ( ( ( N N N N N N N N N N N N N N N N            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       $ $ $ $ $ $                                                    * @ ? ? ? ? ? ? ? ' ' ' ' ' '           (`'_'_  _ _ _ _% % % % %* % % %rI rI rI rI rI^K0 rI rI rIj      0 0 0 0= = = = = =rR   