
    X-PhG                        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!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/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI ddlJmKZKmLZL ddlMmNZN g dZOdePd<   g dZQdePd<    G d de          ZR G d deNeR                   ZSd/d$ZTd0d(ZUd1d+ZVd2d-ZWd.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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TypeVarTypeUninhabitedType	UnionType
UnpackType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)rB   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__     Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/checkpattern.pyrG   rG   P   s0         JJJOOO$$$$$$rQ   rG   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<   dOdZdPdZdQdZdRdZdSdZ	dTd Z
dUd"ZdVd'ZdWd-ZdXd1ZdYd5ZdZd7Zd[d9Zd\d=Zd]d>Zd^d@Zd_dBZd`dDZdadGZdbdKZdcdLZdddMZdNS )e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)
rU   rV   rW   r[   generate_types_from_namesrD   r\   rE   r]   r^   )selfrU   rV   rW   r^   s        rR   __init__zPatternChecker.__init__r   s`      $ > >?T U U(,(F(F))
 )
% rQ   or   rG   c                    | j                             |           |                    |           }| j                                          |S rb   )r[   appendacceptpop)rd   rf   r[   results       rR   ri   zPatternChecker.accept   sB      ...$rQ   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[   patternri   r4   is_uninhabitednamerU   #conditional_types_with_intersectionget_type_rangerG   )rd   rf   current_typepattern_typetyprI   type_map_s           rR   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4rQ   r   c                z   | 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 ]9}t'                      }	|D ]\  }}t)          |	|          }	|	||d         d         <   :t+          |          }t-          |||          S )Nrn   r      c                2    h | ]\  }}t          |          S rP   )get_var).0exprrz   s      rR   	<setcomp>z2PatternChecker.visit_or_pattern.<locals>.<setcomp>   s"    OOOgdAGDMMOOOrQ   )r[   patternsri   rh   rr   rH   rI   r   listrK   itemsr   	enumeratekeysrV   failr   OR_PATTERN_ALTERNATIVE_NAMESvaluesr4   r   r&   rG   )rd   rf   rv   pattern_typesrq   rw   typescapture_typesr   rx   nodeivarsrK   capture_listrz   other
union_types                     rR   visit_or_patternzPatternChecker.visit_or_pattern   sd   (,
 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 e,,+.H\!_Q'((*511
:|X>>>rQ   r"   c                   | j         d         }| j        j                            |j                  }t          |          }| j                            |t          |          g|t          |                    \  }}t          t          |          t          t          f          s%t          |t          j        ||g          i           S t          ||i           S rm   )r[   rU   expr_checkerri   r   r%   rt   ru   r8   
isinstancer+   r4   rG   r5   
make_union)rd   rf   rv   rx   narrowed_typerI   s         rR   visit_value_patternz"PatternChecker.visit_value_pattern   s    (,h#**1622$$#'8#O#O>#../OC<P<P $P $
 $
 y /-88;:XYY 	d}i.BMS\C].^.^`bccc=)R888rQ   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[   valuer   boolrU   r   infer_literal_expr_typer,   rt   ru   rG   )rd   rf   rv   r   rx   r   rI   s          rR   visit_singleton_patternz&PatternChecker.visit_singleton_pattern   s    (,WeT"" 	('??WWCC]**CCL#'8#O#O>#../L $P $
 $
 y =)R888rQ   r   c                r
   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                  }n't=          d |D                       dk    r-t          d t+          ||          D             |j                  }nt          |t                    rEt          ||j                  }| j                            |t5          |          g||
          \  }}nt;                      }|D ]}t?          ||          }t          |t@                    r3| !                    |j        ||          } |                    |           }n| !                    |||          }tE          |||          S )Nrn   c                B    g | ]\  }}t          |t                    |S rP   )r   r!   )r   r   ps      rR   
<listcomp>z9PatternChecker.visit_sequence_pattern.<locals>.<listcomp>   s+    ___1A~A^A^_!___rQ   r}   r      Fz/Parser should prevent multiple starred patterns)r   builtins.objectro   c              3  6   K   | ]}t          |           V  d S rb   rr   r   rx   s     rR   	<genexpr>z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>=  s-      KKs~c***KKKKKKrQ   c              3  4   K   | ]}t          |          V  d S rb   r   r   s     rR   r   z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>B  s*      CC3>#&&CCCCCCrQ   c              3  6   K   | ]}t          |           V  d S rb   r   r   s     rR   r   z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>E  s-      II,,,IIIIIIrQ   c                :    g | ]\  }}t          |          r|n|S rP   r   )r   currrests      rR   r   z9PatternChecker.visit_sequence_pattern.<locals>.<listcomp>I  s=       &D$ !/t 4 4>$  rQ   )upper_bound)#r8   r[   can_match_sequenceearly_non_matchr   r   lenr   r.   r   r7   r6   rH   r2   r   rh   copy_modifiedget_sequence_typerU   
named_typecontract_starred_pattern_typeszipri   update_type_mapexpand_starred_pattern_typesrt   ru   allpartial_fallbackr4   sumr   r3   narrow_sequence_childrG   )!rd   rf   rv   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_typesrK   contracted_inner_typesr   trw   rx   r   ry   new_inner_typesrest_inner_typesrI   narrowed_inner_typesinner_rest_typesnew_inner_typenarrowed_inner_typeinner_rest_typenew_typenew_tuple_type	new_bounds!                                    rR   visit_sequence_patternz%PatternChecker.visit_sequence_pattern   s    '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.. -	W<3G#% !.1+.O.O 9 9*
NH@@"^N%C%C$DaQ[ A   7$o
 %++,?@@@ ''8888KK6JKKKKK -$%9<;XYY*,,CC2BCCCCC %&68UVV		II8HIIIIIQNN & *-k;K*L*L   !1 	 i00 	W '8UVVN"&("N"N!=!= >> #O # #Hii -..N& A A!+NC!@!@,44 W 66|7OQ_abcc	'55)5LL55lNTUVV8Y999rQ   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 rP   )r   )r   itemr   rd   s     rR   r   z4PatternChecker.get_sequence_type.<locals>.<listcomp>g  s)    OOOtT++D'::OOOrQ   c                    g | ]}||S rb   rP   )r   r   s     rR   r   z4PatternChecker.get_sequence_type.<locals>.<listcomp>h  s    IIIt8Hd8H8H8HrQ   )r8   r   r)   r1   from_another_anyr5   r   r&   rU   type_is_iterabler*   r.   r(   iterable_item_type)rd   r   r   r   not_none_itemss   ` `  rR   r   z PatternChecker.get_sequence_typeb  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':::4rQ   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.
        NrC   r}   r   c                \    g | ](}t          |t                    rt                    n|)S rP   )r   r6   )r   r   unpackeds     rR   r   zAPatternChecker.contract_starred_pattern_types.<locals>.<listcomp>  s6    ___TUz!Z/H/HOz(+++a___rQ   )r7   r   r6   r8   rH   r*   fullnamer   argsr9   tuplerh   r   r&   )rd   r   r   r   r   unpackmissing	new_typesprefixmiddlesuffix
new_middlemstar_lengthr   s                 @rR   r   z-PatternChecker.contract_starred_pattern_typesu  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rQ   	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].
        NrC   r}   )r   rh   r6   rU   named_generic_typer   )
rd   r   r   r   r   resr   r   r   r   s
             rR   r   z+PatternChecker.expand_starred_pattern_types  s     L 
	 C!%(( _ _1==JJqMMMMJJz$(*E*EFVYZX[*\*\]]^^^^J)8)$	#e**,q0eHo&44	U8a<>>**	rQ   
outer_typer   ctxc                    |                      ||          }t          ||          r0| j                            |t	          |          g||          \  }}n|}|S )Nro   )construct_sequence_childr$   rU   rt   ru   )rd   r   r   r   r   rz   s         rR   r   z$PatternChecker.narrow_sequence_child  sl    00ZHHh
++ 	"(FF^H556Z G  KHaa "HrQ   r!   c                    i }|j         1| j                            d| j        d         g          }|||j         <   t	          | j        d         t                      |          S )NrA   rn   )capturerU   r   r[   rG   r4   )rd   rf   rK   	list_types       rR   visit_starred_patternz$PatternChecker.visit_starred_pattern  s^    +-9 33OdFWXZF[E\]]I"+HQY4,R0/2C2CXNNNrQ   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 )Nrn   TFr   ztyping.Mappingr@   )r8   r[   r   r   r   get_mapping_item_typerU   r   ri   rr   rH   r   rK   r   r$   r   r*   r   lookup_typeinfor   r   r4   rG   )rd   rf   rv   	can_matchrK   keyr   r   rw   mappingmapping_instdict_typeinforI   object_typer   s                  rR   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<<<rQ   rq   mapping_typer  c                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   )
r8   r   r0   rV   filter_errorsrU   r   visit_typeddict_index_exprhas_new_errorsget_simple_mapping_item_type)rd   rq   r
  r  local_errorsrk   has_local_errorss          rR   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__)rU   r   check_method_call_by_namer   )rd   rq   r
  r  rk   rz   s         rR   r  z+PatternChecker.get_simple_mapping_item_type  s8     H)CC<#	7
 
	 rQ   r   c                v   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                     rt#          |          }nt          |t                    r|j        }nt          |t&                    r6|j        /t          t          |j                  t
                    r|j        }nt          |t&                    r'|j         |j                            | j                  }n|j        }| j                            t          j                            |          |           |                                 S | j                            |t9          |          g||          \  }}t;          |          r|                                 S t=          ||          }g }	t?                      }
i }tA          |j!                  dk    rx| "                    |          rtA          |j!                  dk    r%| j                            t          j#        |           | $                    |j!        d         |          }t;          |j                  s.t	          |j        tK          ||j&                  |j'                  S |j'        }n| j        (                                5 }tS          d||ddd|| j                  }|*                                }d d d            n# 1 swxY w Y   |rd| j                            t          j+                            |                    | j                            |           |                                 S t          |          }t          |tX                    rnt[          |          }tA          |j!                  tA          |          k    r9| j                            t          j#        |           |                                 S nd gtA          |j!                  z  }t]          ||j!                  D ]3\  }}|	/                    ||f           ||
0                    |           4t?                      }d}t]          |j1        |j2                  D ]\  }}|	/                    ||f           ||
v r;| j                            t          j3                            |          |           d}n>||v r:| j                            t          j4                            |          |           d}|0                    |           |r|                                 S d}|	D ]G\  }}d }| j        (                                5 }|tS          |||ddd|| j                  }nt          t          j                  }|*                                }d d d            n# 1 swxY w Y   |s|jt          t          j                  }| j                            t          j5                            |                    | j                  |          |           | $                    ||          \  }}}t;          |          rd} | 6                    ||           t;          |          s|}I|sto                      }t	          |||          S )	Nrn   ro   r   r}   __match_args__F)	is_lvalueis_superis_operatororiginal_typerU   T)8r8   r[   	class_refr   rG   r)   r1   
from_errorr   r   no_argsrV   r   r    CLASS_PATTERN_GENERIC_TYPE_ALIASr   r   r;   targetr   rH   str_with_optionsr^   rs   CLASS_PATTERN_TYPE_REQUIREDformatrU   rt   ru   rr   r   setr   positionalsshould_self_match&CLASS_PATTERN_TOO_MANY_POSITIONAL_ARGSri   r   rI   rK   r  r
   r  MISSING_MATCH_ARGSr.   get_match_arg_namesr   rh   addkeyword_keyskeyword_values(CLASS_PATTERN_KEYWORD_MATCHES_POSITIONAL'CLASS_PATTERN_DUPLICATE_KEYWORD_PATTERNCLASS_PATTERN_UNKNOWN_KEYWORDr   r4   )rd   rf   rv   	type_inforx   rs   r   rI   r   keyword_pairsmatch_arg_setrK   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   r   inner_capturess                                  rR   visit_class_patternz"PatternChecker.visit_class_pattern  s   &t'8'<==
 K$	wy';<<giFZ>[>[]_```i++ 	*I4E 	*HMM*KQOOO'')))i** 	*.y99CC	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%   =1M::M>M>2AYY	Y	rx   c                    t          |          }t          |t                    r|j        }t          |t                    r|j                            d          dS | j        D ]}t          ||          r dS dS )Nr  FT)	r8   r   r.   r   r*   rH   getr\   r$   )rd   rx   r   s      rR   r%  z PatternChecker.should_self_match  s    c""c9%% 	'&Cc8$$ 	6F)G)G)S 5* 	 	E#u%% tturQ   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 rb   )r   r8   )r   r   rd   s     rR   r   z4PatternChecker.can_match_sequence.<locals>.<genexpr>  s9      \\$t..t/D/DEE\\\\\\rQ   )ignore_promotionsFtyping.Sequence)	r   r)   r5   anyr   r]   r$   rU   r   )rd   rx   r   sequences   `   rR   r   z!PatternChecker.can_match_sequence  s    c7## 	4c9%% 	]\\\\RUR[\\\\\\2 	 	E #u=== uu8&&'899#x((EJx,E,EErQ   
type_names	list[str]c                    g }|D ]^}	 |                     | j                            |                     1# t          $ r!}|                    d          s|Y d }~Wd }~ww xY w|S )Nz	builtins.)rh   rU   r   KeyError
startswith)rd   rE  r   rs   es        rR   rc   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_maprJ   extra_type_mapc                   d |D             }|                                 D ]h\  }}t          |          |v rMt          |          }| j                            t
          j                            |j                  |           c|||<   id S )Nc                ,    h | ]}t          |          S rP   r   )r   r   s     rR   r   z1PatternChecker.update_type_map.<locals>.<setcomp>  s     MMM4L..MMMrQ   )	r   r   r   rV   r   r   MULTIPLE_ASSIGNMENTS_IN_PATTERNr"  rs   )rd   rK  rL  already_capturedr   rx   r   s          rR   r   zPatternChecker.update_type_map  s    
 NM;LMMM'--// 	. 	.ID#D!!%555t}}$DKKDIVVX\    +.!$''	. 	.rQ   c                ,    t          |          }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].
        c                    g | ]:}                     t          |                    $                    |          ;S rP   )r   r8   r   )r   r   r   rd   s     rR   r   z;PatternChecker.construct_sequence_child.<locals>.<listcomp>  sU       **?4+@+@AA--dJ??  rQ   rB  )r8   r   r)   r5   r   r&   rU   r   r$   r   r.   r(   r*   r:   rH   r   )rd   r   r   proper_typer   rD  
empty_typepartial_types   ` `     rR   r   z'PatternChecker.construct_sequence_child  s#    &j11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OrQ   c                R    t          t                      | j        d         i           S )Nrn   )rG   r4   r[   )rd   s    rR   r   zPatternChecker.early_non_match  s"    ?,,d.?.CRHHHrQ   N)
rU   r   rV   r   rW   r#   r^   r   r_   r`   )rf   r   r[   r/   r_   rG   )rf   r   r_   rG   )rf   r   r_   rG   )rf   r"   r_   rG   )rf   r    r_   rG   )rf   r   r_   rG   )r   r/   r   r   r_   r   )r   rZ   r   r   r   r   r_   rZ   )
r   rZ   r   r   r   r   r   r   r_   rZ   )r   r/   r   r/   r   r   r_   r/   )rf   r!   r_   rG   )rf   r   r_   rG   )rq   r   r
  r/   r  r   r_   r   )rq   r   r
  r/   r  r   r_   r/   )rf   r   r_   rG   rx   r/   r_   r   )rx   r-   r_   r   )rE  rF  r_   rZ   )rK  rJ   rL  rJ   r_   r`   )r   r/   r   r/   r_   r/   )r_   rG   )rL   rM   rN   __doc__rO   re   ri   r{   r   r   r   r   r   r   r   r   r   r	  r  r  r<  r%  r   rc   r   r   r   rP   rQ   rR   rT   rT   V   sc          NNN !    )(((      5 5 5 5"0? 0? 0? 0?d	9 	9 	9 	99 9 9 9|: |: |: |:|   &/ / / /b   8   O O O O"= "= "= "=H   .   ]: ]: ]: ]:~   F F F F	 	 	 	. . . .   BI I I I I IrQ   rT   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   rh   )rx   r   r   r   s       rR   r(  r(    sm    D	 # #3D99>S[[A--KKKKq	""""KrQ   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     rR   r   r     s<    
 dH%%%%%9DdC     KrQ   r/   r	   c                    t          |           } t          | t                    r-| j        r&t          | j        j        t
                    r| j        } t          | d          S )NF)is_upper_bound)r8   r   r*   last_known_valuer   r   r	   rx   s    rR   ru   ru   %  sc    
#

C3!!# # s+1488#
 "S////rQ   r   c                F    t          t          |           t                    S rb   )r   r8   r4   r_  s    rR   rr   rr   0  s    oc**O<<<rQ   N)rx   r.   r_   rY  )r   r   r_   r   )rx   r/   r_   r	   rW  )XrX  
__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   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   mypy.typevarsr:   r;   mypy.visitorr<   rD   rO   rE   rG   rT   r(  r   ru   rr   rP   rQ   rR   <module>rv     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            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       $ $ $ $ $ $                                                & @ ? ? ? ? ? ? ? ' ' ' ' ' '           (`'_'_  _ _ _ _% % % % %* % % %v
I v
I v
I v
I v
I^K0 v
I v
I v
Ir      0 0 0 0= = = = = =rQ   