
    mie                    (   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@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZMmNZN ddlOmPZP g dZQdeRd<   g dZSdeRd<    G d de          ZT G d dePeT                   ZUd/d$ZVd0d(ZWd1d+ZXd2d-ZYd.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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LiteralType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)rD   rA   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__     i/var/www/html/bestrading.cuttalo.com/scripts/kaggle-env/lib/python3.11/site-packages/mypy/checkpattern.pyrI   rI   S   s0         JJJOOO$$$$$$rS   rI   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)
rW   rX   rY   r]   generate_types_from_namesrF   r^   rG   r_   r`   )selfrW   rX   rY   r`   s        rT   __init__zPatternChecker.__init__u   s`      $ > >?T U U(,(F(F))
 )
% rS   or   rI   c                    | j                             |           |                    |           }| j                                          |S rd   )r]   appendacceptpop)rf   rh   r]   results       rT   rk   zPatternChecker.accept   sB      ...$rS   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]   patternrk   r5   is_uninhabitednamerW   #conditional_types_with_intersectionget_type_rangerI   )rf   rh   current_typepattern_typetyprK   type_map_s           rT   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4rS   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 )Nrp   r      c                2    h | ]\  }}t          |          S rR   )get_var).0exprr|   s      rT   	<setcomp>z2PatternChecker.visit_or_pattern.<locals>.<setcomp>   s"    OOOgdAGDMMOOOrS   )r]   patternsrk   rj   rt   rJ   rK   r   listrM   itemsr   	enumeratekeysrX   failr   OR_PATTERN_ALTERNATIVE_NAMESvaluesr5   r%   rI   )rf   rh   rx   pattern_typesrs   ry   typescapture_typesr   rz   nodeivarsrM   capture_listr|   other
union_types                     rT   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>>>rS   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 ro   )r]   rW   expr_checkerrk   r   r$   rv   rw   r:   
isinstancer+   r5   rI   r6   
make_union)rf   rh   rx   rz   narrowed_typerK   s         rT   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8rS   r   c                <   | j         d         }|j        }t          |t                    r!| j        j                            |d          }n|t                      }nJ | j                            |t          |          g||          \  }}t          ||i           S )Nrp   r?   Frq   )r]   valuer   boolrW   r   infer_literal_expr_typer,   rv   rw   rI   )rf   rh   rx   r   rz   r   rK   s          rT   visit_singleton_patternz&PatternChecker.visit_singleton_pattern   s    (,WeT"" 	('??WWCC]**CCL#'8#O#O>#../L $P $
 $
 y =)R888rS   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 )Nrp   c                B    g | ]\  }}t          |t                    |S rR   )r   r    )r   r   ps      rT   
<listcomp>z9PatternChecker.visit_sequence_pattern.<locals>.<listcomp>   s+    ___1A~A^A^_!___rS   r   r      Fz/Parser should prevent multiple starred patterns)r   builtins.objectrq   c              3  6   K   | ]}t          |           V  d S rd   rt   r   rz   s     rT   	<genexpr>z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>@  s-      KKs~c***KKKKKKrS   c              3  4   K   | ]}t          |          V  d S rd   r   r   s     rT   r   z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>E  s*      CC3>#&&CCCCCCrS   c              3  6   K   | ]}t          |           V  d S rd   r   r   s     rT   r   z8PatternChecker.visit_sequence_pattern.<locals>.<genexpr>H  s-      II,,,IIIIIIrS   c                :    g | ]\  }}t          |          r|n|S rR   r   )r   currrests      rT   r   z9PatternChecker.visit_sequence_pattern.<locals>.<listcomp>L  s=       &D$ !/t 4 4>$  rS   )upper_bound)#r:   r]   can_match_sequenceearly_non_matchr   r   lenr   r.   r   r9   r7   rJ   r3   r   rj   copy_modifiedget_sequence_typerW   
named_typecontract_starred_pattern_typesziprk   update_type_mapexpand_starred_pattern_typesrv   rw   allpartial_fallbackr5   sumr   r4   narrow_sequence_childrI   )!rf   rh   rx   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_typesrM   contracted_inner_typesr   try   rz   r   r{   new_inner_typesrest_inner_typesrK   narrowed_inner_typesinner_rest_typesnew_inner_typenarrowed_inner_typeinner_rest_typenew_typenew_tuple_type	new_bounds!                                    rT   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9rS   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 rR   )r   )r   itemr   rf   s     rT   r   z4PatternChecker.get_sequence_type.<locals>.<listcomp>j  s)    OOOtT++D'::OOOrS   c                    g | ]}||S rd   rR   )r   r   s     rT   r   z4PatternChecker.get_sequence_type.<locals>.<listcomp>k  s    IIIt8Hd8H8H8HrS   )r:   r   r(   r1   from_another_anyr6   r   r%   rW   type_is_iterabler*   r.   r'   iterable_item_type)rf   r   r   r   not_none_itemss   ` `  rT   r   z PatternChecker.get_sequence_typee  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':::4rS   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.
        NrE   r   r   c                \    g | ](}t          |t                    rt                    n|)S rR   )r   r7   )r   r   unpackeds     rT   r   zAPatternChecker.contract_starred_pattern_types.<locals>.<listcomp>  s6    ___TUz!Z/H/HOz(+++a___rS   )r9   r   r7   r:   rJ   r*   fullnamer   argsr;   tuplerj   r   r%   )rf   r   r   r   r   unpackmissing	new_typesprefixmiddlesuffix
new_middlemstar_lengthr   s                 @rT   r   z-PatternChecker.contract_starred_pattern_typesx  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rS   	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].
        NrE   r   )r   rj   r7   rW   named_generic_typer   )
rf   r   r   r   r   resr   r   r   r   s
             rT   r   z+PatternChecker.expand_starred_pattern_types  s     L 
	 C!%(( _ _1==JJqMMMMJJz$(*E*EFVYZX[*\*\]]^^^^J)8)$	#e**,q0eHo&44	U8a<>>**	rS   
outer_typer   ctxc                    |                      ||          }t          ||          r0| j                            |t	          |          g||          \  }}n|}|S )Nrq   )construct_sequence_childr#   rW   rv   rw   )rf   r   r   r   r   r|   s         rT   r   z$PatternChecker.narrow_sequence_child  sl    00ZHHh
++ 	"(FF^H556Z G  KHaa "HrS   r    c                    i }|j         1| j                            d| j        d         g          }|||j         <   t	          | j        d         t                      |          S )NrC   rp   )capturerW   r   r]   rI   r5   )rf   rh   rM   	list_types       rT   visit_starred_patternz$PatternChecker.visit_starred_pattern  s^    +-9 33OdFWXZF[E\]]I"+HQY4,R0/2C2CXNNNrS   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 )Nrp   TFr   ztyping.MappingrB   )r:   r]   r   r   r   get_mapping_item_typerW   r   rk   rt   rJ   r   rM   r   r#   r   r*   r   lookup_typeinfor   r   r5   rI   )rf   rh   rx   	can_matchrM   keyr   r   ry   mappingmapping_instdict_typeinforK   object_typer   s                  rT   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<<<rS   rs   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   )
r:   r   r0   rX   filter_errorsrW   r   visit_typeddict_index_exprhas_new_errorsget_simple_mapping_item_type)rf   rs   r  r  local_errorsrm   has_local_errorss          rT   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__)rW   r   check_method_call_by_namer   )rf   rs   r  r  rm   r|   s         rT   r  z+PatternChecker.get_simple_mapping_item_type  s8     H)CC<#	7
 
	 rS   r   c                J   t          | j        d                   }|j        j        }| j        j                            |j                  }t          |          }t          |t                    r@|j	        s9| j
                            t          j        |           |                                 S t          |t                    r7|                                r#t#          |                                          }nt          |t&                    rX|j        Q|j        dk    rF| j                            d          }t/          t0          j                  }t5          |||          }nt          |t6                    r"t          |j        t:                    r|j        }nyt          |t.                    sd| j
                            t          j                            |                     | j!                            |           |                                 S | j        "                    |tG          |          g||          \  }}	tI          |          r|                                 S tK          ||          }
g }tM                      }i }tO          |j(                  dk    rx| )                    |          rtO          |j(                  dk    r%| j
                            t          j*        |           |                     |j(        d         |
          }tI          |j                  s.tW          |j        tY          |	|j-                  |j.                  S |j.        }n| j
        /                                5 }ta          d||d	d	d	|| 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\  }}|6                    ||f           ||7                    |           4tM                      }d	}tk          |j8        |j9                  D ]\  }}|6                    ||f           ||v r;| j
                            t          j:                            |          |           d}n>||v r:| j
                            t          j;                            |          |           d}|7                    |           |r|                                 S d}|D ]r\  }}d }| j
        /                                5 }|ta          ||
|d	d	d	|| j        
          }nt/          t0          j<                  }|1                                }d d d            n# 1 swxY w Y   |s|t/          t0          j<                  }|r|j        dk    sR| j
                            t          j=                            |                     | j!                  |          |           n|| j        >                    ||          }|                     ||          \  }}} tI          |          rd	}K| ?                    ||            tI          |          s|}	t|st                      }tW          ||	|          S )Nrp   ztyping.Callablezbuiltins.function)ret_typefallbackrq   r   r   __match_args__F)	is_lvalueis_superis_operatororiginal_typerW   Tr   )Ar:   r]   	class_refr   rW   r   rk   r   r   no_argsrX   r   r    CLASS_PATTERN_GENERIC_TYPE_ALIASr   r)   is_type_objr=   type_objectr   rJ   r   r   r(   r1   unannotatedr8   r2   r   r,   CLASS_PATTERN_TYPE_REQUIREDformatstr_with_optionsr`   rv   rw   rt   r   setr   positionalsshould_self_match&CLASS_PATTERN_TOO_MANY_POSITIONAL_ARGSrI   r   rK   rM   r  r
   r  MISSING_MATCH_ARGSr.   get_match_arg_namesr   rj   addkeyword_keyskeyword_values(CLASS_PATTERN_KEYWORD_MATCHES_POSITIONAL'CLASS_PATTERN_DUPLICATE_KEYWORD_PATTERN
from_errorCLASS_PATTERN_UNKNOWN_KEYWORDadd_any_attribute_to_typer   r5   )!rf   rh   rx   	type_inforz   p_typr  any_typer   rK   r   keyword_pairsmatch_arg_setrM   ry   r  match_args_typer  proper_match_args_typematch_arg_namesarg_nameposkeyword_arg_sethas_duplicatesr  r   r  keywordrs   key_typer   r   inner_capturess!                                    rT   visit_class_patternz"PatternChecker.visit_class_pattern  s/   &t'8'<==
 K$	h#**1;77$$i++ 	*I4E 	*HMM*KQOOO'')))|,, 	*1B1B1D1D 	*():):)<)<==CCy#&&	**"&777 x**+>??Hy455H(HxXXXCCx(( 		*Z
H-M-M 		**CCE7++ 	*HMM <CC((66  	   '')))"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   
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%   <1N99N= N=1AZ

Z	Z	rz   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)
r:   r   r.   r   r(   r*   rJ   getr^   r#   )rf   rz   r   s      rT   r*  z PatternChecker.should_self_match  s    c""c9%% 	'&Cc7## 	5c8$$ 	6F)G)G)S 5* 	 	E#u%% tturS   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 rd   )r   r:   )r   r   rf   s     rT   r   z4PatternChecker.can_match_sequence.<locals>.<genexpr>  s9      \\$t..t/D/DEE\\\\\\rS   )ignore_promotionsFtyping.Sequence)	r   r(   r6   anyr   r_   r#   rW   r   )rf   rz   r   sequences   `   rT   r   z!PatternChecker.can_match_sequence  s    c7## 	4c9%% 	]\\\\RUR[\\\\\\2 	 	E #u=== uu8&&'899#x((EJx,E,EErS   
type_names	list[str]c                    g }|D ]^}	 |                     | j                            |                     1# t          $ r!}|                    d          s|Y d }~Wd }~ww xY w|S )Nz	builtins.)rj   rW   r   KeyError
startswith)rf   rN  r   ru   es        rT   re   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_maprL   extra_type_mapc                   d |D             }|                                 D ]h\  }}t          |          |v rMt          |          }| j                            t
          j                            |j                  |           c|||<   id S )Nc                ,    h | ]}t          |          S rR   r   )r   r   s     rT   r   z1PatternChecker.update_type_map.<locals>.<setcomp>  s     MMM4L..MMMrS   )	r   r   r   rX   r   r   MULTIPLE_ASSIGNMENTS_IN_PATTERNr&  ru   )rf   rT  rU  already_capturedr   rz   r   s          rT   r   zPatternChecker.update_type_map  s    
 NM;LMMM'--// 	. 	.ID#D!!%555t}}$DKKDIVVX\    +.!$''	. 	.rS   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 rR   )r   r:   r   )r   r   r   rf   s     rT   r   z;PatternChecker.construct_sequence_child.<locals>.<listcomp>  sU       **?4+@+@AA--dJ??  rS   rK  )r:   r   r(   r6   r   r%   rW   r   r#   r   r.   r'   r*   r<   rJ   r   )rf   r   r   proper_typer   rM  
empty_typepartial_types   ` `     rT   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OrS   c                R    t          t                      | j        d         i           S )Nrp   )rI   r5   r]   )rf   s    rT   r   zPatternChecker.early_non_match  s"    ?,,d.?.CRHHHrS   N)
rW   r   rX   r   rY   r"   r`   r   ra   rb   )rh   r   r]   r/   ra   rI   )rh   r   ra   rI   )rh   r   ra   rI   )rh   r!   ra   rI   )rh   r   ra   rI   )rh   r   ra   rI   )r   r/   r   r   ra   r   )r   r\   r   r   r   r   ra   r\   )
r   r\   r   r   r   r   r   r   ra   r\   )r   r/   r   r/   r   r   ra   r/   )rh   r    ra   rI   )rh   r   ra   rI   )rs   r   r  r/   r  r   ra   r   )rs   r   r  r/   r  r   ra   r/   )rh   r   ra   rI   rz   r/   ra   r   )rz   r-   ra   r   )rN  rO  ra   r\   )rT  rL   rU  rL   ra   rb   )r   r/   r   r/   ra   r/   )ra   rI   )rN   rO   rP   __doc__rQ   rg   rk   r}   r   r   r   r   r   r   r   r   r  r  r  r  rE  r*  r   re   r   r   r   rR   rS   rT   rV   rV   Y   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   .   d: d: d: d:L   F F F F	 	 	 	. . . .   BI I I I I IrS   rV   rz   r.   ra   list[str | None]c                    g }| j         D ]W}t          |          }|t          |          dk    r|                    d            <|                    |d                    X|S )Nr   r   )r   r&   r   rj   )rz   r   r   r   s       rT   r-  r-    sm    D	 # #3D99>S[[A--KKKKq	""""KrS   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     rT   r   r   &  sL    
 dH%%++t+++9DdC  &&$&&&KrS   r/   r	   c                    t          |           } t          | t                    r-| j        r&t          | j        j        t
                    r| j        } t          | d          S )NF)is_upper_bound)r:   r   r*   last_known_valuer   r   r	   rz   s    rT   rw   rw   1  sc    
#

C3!!# # s+1488#
 "S////rS   r   c                F    t          t          |           t                    S rd   )r   r:   r5   rh  s    rT   rt   rt   <  s    oc**O<<<rS   N)rz   r.   ra   rb  )r   r   ra   r   )rz   r/   ra   r	   r`  )Zra  
__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:   r;   mypy.typevarsr<   r=   mypy.visitorr>   rF   rQ   rG   rI   rV   r-  r   rw   rt   rR   rS   rT   <module>r     s   E E E " " " " " " # # # # # # $ $ $ $ $ $ $ $ ! ! ! ! ! ! ? ? ? ? ? ? ? ? 2 2 2 2 2 2 3 3 3 3 3 3             & & & & & & 2 2 2 2 2 2 * * * * * * ( ( ( ( ( ( M M M M M M M M M M M M M M M M            
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       $ $ $ $ $ $                                                      , @ ? ? ? ? ? ? ? ' ' ' ' ' '           (`'_'_  _ _ _ _% % % % %* % % %
I 
I 
I 
I 
I^K0 
I 
I 
ID      0 0 0 0= = = = = =rS   