
    *e                       U d Z ddlmZ ddlmZ ddlmZmZ ddl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 ddl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'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddlGmHZH ddlImJZJ g dZKdeLd<   g dZMdeLd<    G d de          ZN G d deJeN                   ZOd.d$ZPd/d(ZQd0d+ZRd1d-ZSdS )2z?Pattern checker. This file is conceptually part of TypeChecker.    )annotations)defaultdict)Final
NamedTupleN)message_registry)analyze_member_access)expand_type_by_instance)
join_typesliteral_hash)map_instance_to_supertype)narrow_declared_type)MessageBuilder)ARG_POSContext
ExpressionNameExpr	TypeAliasTypeInfo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InstanceLiteralTypeNoneType
ProperType	TupleTypeTypeTypedDictType	TypeOfAnyTypeVarTupleTypeUninhabitedType	UnionType
UnpackTypefind_unpack_in_listget_proper_typesplit_with_prefix_and_suffix)fill_typevars)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)r>   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__     1lib/python3.11/site-packages/mypy/checkpattern.pyrC   rC   O   s0         JJJOOO$$$$$$rM   rC   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<   dMdZdNdZdOdZdPdZdQdZ	dRd Z
dSd"ZdTd'ZdUd-ZdVd1ZdWd3ZdXd5ZdYd9ZdZd:Zd[d<Zd\d>Zd]d@Zd^dCZd_dGZd`dJZdadKZdLS )b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.
    mypy.checker.TypeChecker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)
rR   rS   rT   rX   generate_types_from_namesr@   rY   rA   rZ   r[   )selfrR   rS   rT   r[   s        rN   __init__zPatternChecker.__init__q   s`      $ > >?T U U(,(F(F))
 )
% rM   or   rC   c                    | j                             |           |                    |           }| j                                          |S r_   )rX   appendacceptpop)ra   rc   rX   results       rN   rf   zPatternChecker.accept   sB      ...$rM   r   c                p   | j         d         }|j        "|                     |j        |          }|\  }}}n|t                      i }}}t	          |          sO|j        H| j                            |t          |          g||          \  }}t	          |          s
|||j        <   t          |||          S Ndefault)
rX   patternrf   r1   is_uninhabitednamerR   #conditional_types_with_intersectionget_type_rangerC   )ra   rc   current_typepattern_typetyprE   type_map_s           rN   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4rM   r   c                X   | j         d         }g }|j        D ]4}|                     ||          }|                    |           |j        }5g }|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'          |	|          }	|	||d         d         <   =t)          |          }t+          |||          S )Nrk   r      c                2    h | ]\  }}t          |          S rL   )get_var).0exprrw   s      rN   	<setcomp>z2PatternChecker.visit_or_pattern.<locals>.<setcomp>   s"    OOOgdAGDMMOOOrM   )rX   patternsrf   re   rE   ro   rD   r   listrG   itemsr|   	enumeratekeysrS   failr   OR_PATTERN_ALTERNATIVE_NAMESr1   r
   r$   rC   )ra   rc   rs   pattern_typesrn   rt   typescapture_typesr~   ru   nodeivarsrG   varcapture_listrw   other
union_types                      rN   visit_or_patternzPatternChecker.visit_or_pattern   sW   (,
 z 	2 	2G;;w==L  ...'1LL
 ) 	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 ,.!.!4!4!6!6 	/ 	/C!##C( - -5 e,,+.H\!_Q'((*511
:|X>>>rM   r    c                   | j         d         }| j        j                            |j                  }t          |          }| j                            |t          |          g||          \  }}t          t          |          t          t          f          s%t          |t          j        ||g          i           S t          ||i           S rj   )rX   rR   expr_checkerrf   r~   r#   rq   rr   
isinstancer5   r)   r1   rC   r2   
make_union)ra   rc   rs   ru   narrowed_typerE   s         rN   visit_value_patternz"PatternChecker.visit_value_pattern   s    (,h#**1622$$#'8#O#O>#../L $P $
 $
 y /-88;:XYY 	d}i.BMS\C].^.^`bccc=)R888rM   r   c                <   | j         d         }|j        }t          |t                    r!| j        j                            |d          }n|t                      }nJ | j                            |t          |          g||          \  }}t          ||i           S )Nrk   r9   Frl   )rX   valuer   boolrR   r   infer_literal_expr_typer*   rq   rr   rC   )ra   rc   rs   r   ru   r   rE   s          rN   visit_singleton_patternz&PatternChecker.visit_singleton_pattern   s    (,WeT"" 	('??WWCC]**CCL#'8#O#O>#../L $P $
 $
 y =)R888rM   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  }d }t          |t                    r
|j	        }t          |          }|It          |          |z
  }|dk     r|                                 S |dk    r||                                 S ng }	|D ]_}
t          |
t                    r3t          |
j        t                    rt          |
j        j                  }
|	                    |
           `|	}|                    |	          }t          |          dz
  |k    r||                                 S nJ|                     ||          }|| j                            d	          }|gt          |j                  z  }g }g }i }|                     |||          }t+          |j        |          D ]a\  }}|                     ||          }|\  }}}|                    |           |                    |           |                     ||           b|                     ||t          |          |d u          }|                     ||t          |          |d u          }|}t          |t                    r|g }g }t+          ||          D ]^\  }}| j                            |t5          |          g||
          \  }}|                    |           |                    |           _t7          d |D                       rt          ||j                  }nt;                      }t7          d |D                       rt          ||j                  }nt          |t                    rEt          ||j                  }| j                            |t5          |          g||
          \  }}n{t;                      }|D ]}t=          ||          }|                     ||          }tA          ||          r0| j                            |t5          |          g||
          \  }} n|}tC          |||          S )Nrk   c                B    g | ]\  }}t          |t                    |S rL   )r   r   )r}   r   ps      rN   
<listcomp>z9PatternChecker.visit_sequence_pattern.<locals>.<listcomp>   s+    ___1A~A^A^_!___rM   rz   r      Fz/Parser should prevent multiple starred patterns)r   builtins.objectrl   c              3  6   K   | ]}t          |           V  d S r_   ro   r}   ru   s     rN   	<genexpr>z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr><  s-      KKs~c***KKKKKKrM   c              3  4   K   | ]}t          |          V  d S r_   r   r   s     rN   r   z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>A  s*      CC3>#&&CCCCCCrM   )"r5   rX   can_match_sequenceearly_non_matchr   r   lenr   r,   r   r4   r3   rD   r0   upper_boundre   copy_modifiedget_sequence_typerR   
named_typecontract_starred_pattern_typesziprf   update_type_mapexpand_starred_pattern_typesrq   rr   allpartial_fallbackr1   r
   construct_sequence_childr"   rC   )!ra   rc   rs   star_positionsstar_positionrequired_patternsunpack_indexinner_types	size_diffnormalized_inner_typesit
inner_typecontracted_new_inner_typescontracted_rest_inner_typesrG   contracted_inner_typesr   trt   ru   restrv   new_inner_typesrest_inner_typesrE   narrowed_inner_typesinner_rest_typesnew_inner_typenarrowed_inner_typeinner_rest_typenew_typenew_tuple_typerw   s!                                    rN   visit_sequence_patternz%PatternChecker.visit_sequence_pattern   sw    't'8'<==&&|44 	*'')))__	!*(=(=___$(~!##*1-MM  A%%KKKKK
OO$"
 lI.. 	9&,K.{;;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//a@@J!!X001BCC
%,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#% !.1+.O.O 9 9*
N H@@"^J%?%?$@!^ A  '# %++,?@@@ ''8888KK6JKKKKK -$%9<;XYY*,,CC2BCCCCC W%&68UVV	i00 	( '8UVVN"&("N"N!=!= >> #O # #Hii -..N& A A!+NC!@!@44\>RRH(L11 ("hJJ >(#;#;"<a K  !! (8Y999rM   r   contextr   Type | Nonec                     t          |          }t          |t                    rt          t          j        |          S t          |t
                    r3 fd|j        D             }d |D             }|rt          |          S d S  j        	                    |          r[t          |t          t          f          r?t          |t                    rt          |          } j                            |          S d S )Nc                <    g | ]}                     |          S rL   )r   )r}   itemr   ra   s     rN   r   z4PatternChecker.get_sequence_type.<locals>.<listcomp>^  s)    OOOtT++D'::OOOrM   c                    g | ]}||S r_   rL   )r}   r   s     rN   r   z4PatternChecker.get_sequence_type.<locals>.<listcomp>_  s    IIIt8Hd8H8H8HrM   )r5   r   r'   r/   from_another_anyr2   r   r$   rR   type_is_iterabler(   r,   r&   iterable_item_type)ra   r   r   r   not_none_itemss   ` `  rN   r   z PatternChecker.get_sequence_typeY  s    Aa!! 	:95q999a## 	OOOOOqwOOOEIIuIIIN ,^<<<t8$$Q'' 	Jq8Y:O,P,P 	!Y'' &"1%%8..q':::4rM   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.
        Nr?   rz   r   c                \    g | ](}t          |t                    rt                    n|)S rL   )r   r3   )r}   r   unpackeds     rN   r   zAPatternChecker.contract_starred_pattern_types.<locals>.<listcomp>  s6    ___TUz!Z/H/HOz(+++a___rM   )r4   r   r3   r5   rD   r(   fullnamer   argsr6   tuplere   r   r$   )ra   r   r   r   r   unpackmissing	new_typesprefixmiddlesuffix
new_middlemstar_lengthr   s                 @rN   r   z-PatternChecker.contract_starred_pattern_typesl  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rM   	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].
        Nr?   rz   )r   re   r3   rR   named_generic_typer   )
ra   r   r   r   r   resr   r   r   r   s
             rN   r   z+PatternChecker.expand_starred_pattern_types  s     L 
	 C!%(( _ _1==JJqMMMMJJz$(*E*EFVYZX[*\*\]]^^^^J)8)$	#e**,q0eHo&44	U8a<>>**	rM   r   c                    i }|j         1| j                            d| j        d         g          }|||j         <   t	          | j        d         t                      |          S )Nr=   rk   )capturerR   r   rX   rC   r1   )ra   rc   rG   	list_types       rN   visit_starred_patternz$PatternChecker.visit_starred_pattern  s^    +-9 33OdFWXZF[E\]]I"+HQY4,R0/2C2CXNNNrM   r   c                n   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        <   |r| j        d         }nt+                      }t-          |||          S )Nrk   TFr   ztyping.Mappingr<   )r5   rX   r   r   valuesget_mapping_item_typerR   r   rf   ro   rD   r   rG   r   r"   r   r(   r   lookup_typeinfor   r   r1   rC   )ra   rc   rs   	can_matchrG   keyr   r   rt   mappingmapping_instdict_typeinforE   object_typer   s                  rN   visit_mapping_patternz$PatternChecker.visit_mapping_pattern  s   &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 	)(,HH&((H8\8<<<rM   rn   mapping_typer   c                j   t          |          }t          |t                    r| j                                        5 }| j        j                            ||          }|                                }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 r_   )
r5   r   r.   rS   filter_errorsrR   r   visit_typeddict_index_exprhas_new_errorsget_simple_mapping_item_type)ra   rn   r   r   local_errorsrh   has_local_errorss          rN   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   5A??BB%.CC#&C#D((D,/D,c                `    | j         j                            d||gt          g|          \  }}|S )N__getitem__)rR   r   check_method_call_by_namer   )ra   rn   r   r   rh   rw   s         rN   r  z+PatternChecker.get_simple_mapping_item_type  s8     H)CC<#	7
 
	 rM   r   c                   t          | j        d                   }|j        j        }|?t	          t          t          j                  t          t          j                  i           S t          |t                    r@|j
        s9| j                            t          j        |           |                                 S t          |t                     rt          t          j                  }g }|j        j        D ]i}t          |t(                    r=|                    t-          | j                            d|g                               T|                    |           jt3          ||          }nt          |t                    r|j        }nt          |t6                    r6|j        /t          t          |j                  t
                    r|j        }nt          |t6                    r'|j         |j                            | j                  }n|j        }| j                            t          j         !                    |          |           |                                 S | j        "                    |tG          |          g||          \  }	}
tI          |	          r|                                 S tK          ||	          }g }tM                      }i }tO          |j(                  dk    r~| )                    |          rtO          |j(                  dk    r%| j                            t          j*        |           | +                    |j(        d         |          }tI          |j                  s.t	          |j        tY          |
|j-                  |j.                  S |j.        }n| j        /                                5 }ta          d||ddd| j        || j        	  	        }|1                                }d d d            n# 1 swxY w Y   |rd| j                            t          j2        !                    |                    | j                            |           |                                 S t          |          }t          |tf                    rnti          |          }tO          |j(                  tO          |          k    r9| j                            t          j*        |           |                                 S nd gtO          |j(                  z  }tk          ||j(                  D ]3\  }}|                    ||f           ||6                    |           4tM                      }d}tk          |j7        |j8                  D ]\  }}|                    ||f           ||v r;| j                            t          j9        !                    |          |           d	}n>||v r:| j                            t          j:        !                    |          |           d	}|6                    |           |r|                                 S d	}|D ]M\  }}d }| j        /                                5 }|#ta          |||ddd| j        |	| j        	  	        }nt          t          j                  }|1                                }d d d            n# 1 swxY w Y   |s|jt          t          j                  }| j                            t          j;        !                    |                    | j                  |          |           | +                    ||          \  }} }!tI          |          rd}&| <                    ||!           tI          |           s|}
O|st{                      }	t	          |	|
|          S )
Nrk   r?   rl   r   rz   __match_args__F)original_typerR   T)>r5   rX   	class_refr   rC   r'   r/   
from_errorr   r   no_argsrS   r   r    CLASS_PATTERN_GENERIC_TYPE_ALIASr   r   implementation_artifactdefn	type_varsr0   re   r3   rR   r   r(   targetr   rD   str_with_optionsr[   rp   CLASS_PATTERN_TYPE_REQUIREDformatrq   rr   ro   r   setr   positionalsshould_self_match&CLASS_PATTERN_TOO_MANY_POSITIONAL_ARGSrf   r
   rE   rG   r  r   r  MISSING_MATCH_ARGSr,   get_match_arg_namesr   addkeyword_keyskeyword_values(CLASS_PATTERN_KEYWORD_MATCHES_POSITIONAL'CLASS_PATTERN_DUPLICATE_KEYWORD_PATTERNCLASS_PATTERN_UNKNOWN_KEYWORDr   r1   )"ra   rc   rs   	type_infoany_typer   tvru   rp   r   rE   r   keyword_pairsmatch_arg_setrG   rt   r  match_args_typer  proper_match_args_typematch_arg_namesarg_nameposkeyword_arg_sethas_duplicatesr   r   r   keywordrn   key_typer   r   inner_capturess"                                     rN   visit_class_patternz"PatternChecker.visit_class_pattern  sJ   &t'8'<==
 K$	wy';<<giFZ>[>[]_```i++ 	*I4E 	*HMM*KQOOO'')))i** 	*y@AAH!Dn. * *b"233 *KK"48#>#>?ORZQ[#\#\]]    KK)))) D11CC	9-- 	*"CCy#&&	**?9>::GDD + .CC)S)) &in.H ~66t|DD ~HMM*FMMdSSUVWWW'')))"hJJ>#../L 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    8#3"9#788$BII,,T\::G  	   ;?++gx:X:X7Jj)) -!		$$X~>>>%o66 - ,I 	)&((H8Y999s%   7PPP
A[))[-	0[-	ru   c                    t          |          }t          |t                    r|j        j        rdS | j        D ]}t          ||          r dS dS )NFT)r5   r   r(   rD   is_named_tuplerY   r"   )ra   ru   r   s      rN   r  z PatternChecker.should_self_match  sg    c""c8$$ 	)@ 	5* 	 	E#u%% tturM   r+   c                     t          |t                    r t           fd|j        D                       S  j        D ]}t          ||d          r dS  j                            d          }t          ||          pt          ||          S )Nc              3  \   K   | ]&}                     t          |                    V  'd S r_   )r   r5   )r}   r   ra   s     rN   r   z4PatternChecker.can_match_sequence.<locals>.<genexpr>  s9      \\$t..t/D/DEE\\\\\\rM   T)ignore_promotionsFtyping.Sequence)r   r2   anyr   rZ   r"   rR   r   )ra   ru   r   sequences   `   rN   r   z!PatternChecker.can_match_sequence  s    c9%% 	]\\\\RUR[\\\\\\2 	 	E #u=== uu8&&'899#x((EJx,E,EErM   
type_names	list[str]c                    g }|D ]^}	 |                     | j                            |                     1# t          $ r!}|                    d          s|Y d }~Wd }~ww xY w|S )Nz	builtins.)re   rR   r   KeyError
startswith)ra   r<  r   rp   es        rN   r`   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_maprF   extra_type_mapc                   d |D             }|                                 D ]h\  }}t          |          |v rMt          |          }| j                            t
          j                            |j                  |           c|||<   id S )Nc                ,    h | ]}t          |          S rL   r   )r}   r~   s     rN   r   z1PatternChecker.update_type_map.<locals>.<setcomp>  s     MMM4L..MMMrM   )	r   r   r|   rS   r   r   MULTIPLE_ASSIGNMENTS_IN_PATTERNr  rp   )ra   rB  rC  already_capturedr~   ru   r   s          rN   r   zPatternChecker.update_type_map  s    
 NM;LMMM'--// 	. 	.ID#D!!%555t}}$DKKDIVVX\    +.!$''	. 	.rM   
outer_typer   c                    t          |          }t          |t                    r# fd|j        D             }t	          |          S  j                            dg          }t          | j                            d                    r~t          |          }t          |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].
        c                    g | ]:}                     t          |                    $                    |          ;S rL   )r   r5   r   )r}   r   r   ra   s     rN   r   z;PatternChecker.construct_sequence_child.<locals>.<listcomp>  sU       **?4+@+@AA--dJ??  rM   r9  )r5   r   r2   r   r$   rR   r   r"   r   r,   r&   r(   r7   rD   r	   )ra   rH  r   proper_typer   r;  
empty_typepartial_types   ` `     rN   r   z'PatternChecker.construct_sequence_child  s    &j11k9-- 	0    '-  E
 )///8../@:,OOj$("5"56G"H"HII 		)*55K+y11 :,[99k844444&{'788J2:xHHL*<EEEOrM   c                R    t          t                      | j        d         i           S )Nrk   )rC   r1   rX   )ra   s    rN   r   zPatternChecker.early_non_match  s"    ?,,d.?.CRHHHrM   N)
rR   rQ   rS   r   rT   r!   r[   r   r\   r]   )rc   r   rX   r-   r\   rC   )rc   r   r\   rC   )rc   r   r\   rC   )rc   r    r\   rC   )rc   r   r\   rC   )rc   r   r\   rC   )r   r-   r   r   r\   r   )r   rW   r   r   r   r   r\   rW   )
r   rW   r   r   r   r   r   r   r\   rW   )rc   r   r\   rC   )rc   r   r\   rC   )rn   r   r   r-   r   r   r\   r   )rn   r   r   r-   r   r   r\   r-   )rc   r   r\   rC   ru   r-   r\   r   )ru   r+   r\   r   )r<  r=  r\   rW   )rB  rF   rC  rF   r\   r]   )rH  r-   r   r-   r\   r-   )r\   rC   )rH   rI   rJ   __doc__rK   rb   rf   rx   r   r   r   r   r   r   r   r   r   r   r  r3  r  r   r`   r   r   r   rL   rM   rN   rP   rP   U   sO          "!!!NNN !    )(((      5 5 5 5"/? /? /? /?b	9 	9 	9 	99 9 9 9u: u: u: u:n   &/ / / /b   8O O O O"= "= "= "=H   .   h: h: h: h:T   
F 
F 
F 
F	 	 	 	. . . .   @I I I I I IrM   rP   ru   r,   r\   list[str | None]c                    g }| j         D ]W}t          |          }|t          |          dk    r|                    d            <|                    |d                    X|S )Nrz   r   )r   r%   r   re   )ru   r   r   r   s       rN   r  r     sm    D	 # #3D99>S[[A--KKKKq	""""KrM   r~   r   r   c                p    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     rN   r|   r|     s<    
 dH%%%%%9DdC     KrM   r-   mypy.checker.TypeRangec                    t          |           } t          | t                    r-| j        r&t          | j        j        t
                    r| j        } t          j                            | d          S )NF)is_upper_bound)	r5   r   r(   last_known_valuer   r   mypychecker	TypeRangeru   s    rN   rr   rr     sk    
#

C3!!# # s+1488#
 "<!!#e!<<<rM   r   c                F    t          t          |           t                    S r_   )r   r5   r1   r[  s    rN   ro   ro   !  s    oc**O<<<rM   )ru   r,   r\   rQ  )r~   r   r\   r   )ru   r-   r\   rT  rO  )TrP  
__future__r   collectionsr   typingr   r   mypy.checkerrX  r   mypy.checkmemberr   mypy.expandtyper	   	mypy.joinr
   mypy.literalsr   mypy.maptyper   	mypy.meetr   mypy.messagesr   
mypy.nodesr   r   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.   r/   r0   r1   r2   r3   r4   r5   r6   mypy.typevarsr7   mypy.visitorr8   r@   rK   rA   rC   rP   r  r|   rr   ro   rL   rM   rN   <module>rq     s   E E E " " " " " " # # # # # # $ $ $ $ $ $ $ $     ! ! ! ! ! ! 2 2 2 2 2 2 3 3 3 3 3 3             & & & & & & 2 2 2 2 2 2 * * * * * * ( ( ( ( ( ( W W W W W W W W W W W W W W W W W W            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       $ $ $ $ $ $                                              $ ( ' ' ' ' ' ' ' ' ' ' '           (`'_'_  _ _ _ _% % % % %* % % %h
I h
I h
I h
I h
I^K0 h
I h
I h
IV      = = = == = = = = =rM   