+
    i:                    h   ^ RI Ht ^ RIt^ RIHt ^ RIHt ^ RIHtH	t	H
t
HtHt ^ RIHt ^ RIHtHt ]'       d$   ^ RIHt ]	! R	]R
7      t]].]3,          R,          t]
R]R,          ]R,          ]R3,          t]]],          ,          ]]R3,          ,          ],          R,          t ! R R4      tR# )    )annotationsN)defaultdict)Callable)TYPE_CHECKINGTypeVarUnioncastoverload)_invalidate_cache)SuccessfulInferenceResultTransformFn)nodes_SuccessfulInferenceResultT)boundnodes.NodeNG.c                      ] tR t^$tRtR R ltR R ltR R lt]R R	 l4       t	]R
 R l4       t	]R R l4       t	]R R l4       t	]R R l4       t	R R lt	RR R llt
RR R lltR R ltRtR# )TransformVisitora8  A visitor for handling transforms.

The standard approach of using it is to call
:meth:`~visit` with an *astroid* module and the class
will take care of the rest, walking the tree and running the
transforms for each encountered node.

Based on its usage in AstroidManager.brain, it should not be reinstantiated.
c                   V ^8  d   QhRR/# )   returnNone )formats   "4/usr/lib/python3/dist-packages/astroid/transforms.py__annotate__TransformVisitor.__annotate__/   s      $     c                	.    \        \        4      V n        R # N)r   list
transforms)selfs   &r   __init__TransformVisitor.__init__/   s      	r   c                    V ^8  d   QhRRRR/# )r   noder   r   r   )r   s   "r   r   r   <   s      8 =V r   c                    VP                   pV P                  V,           FE  w  r4Ve   V! V4      '       g   K  V! V4      pVe   \        4        TpVP                   V8w  g   KD   V# 	  V# )zTCall matching transforms for the given node if any and return the
transformed node.
)	__class__r!   r   )r"   r&   clstransform_func	predicaterets   &&    r   
_transformTransformVisitor._transform<   sk     nn)-)=)=%N IdOO$T* ?%'D==C' *> r   c                    V ^8  d   QhRRRR/# r   r&   r   r   r   r   )r   s   "r   r   r   O   s     	% 	%< 	%,E 	%r   c                	    VP                    FO  p\        W4      p\        '       d   \        \        V4      pV P                  V4      pWC8w  g   KC  \        WV4       KQ  	  V P                  V4      # r   )_astroid_fieldsgetattrr   r	   
_Vistables_visit_genericsetattrr-   )r"   r&   namevaluevisiteds   &&   r   _visitTransformVisitor._visitO   s^    ((DD'E}Z/))%0GG, ) t$$r   c                    V ^8  d   QhRRRR/# )r   r&   r   r   r   )r   s   "r   r   r   [   s    5545D5r   c                	    R # r   r   r"   r&   s   &&r   r5   TransformVisitor._visit_genericZ   s    25r   c                    V ^8  d   QhRRRR/# )r   r&   strr   r   )r   s   "r   r   r   ^   s    333333r   c                	    R # r   r   r>   s   &&r   r5   r?   ]   s    03r   c                    V ^8  d   QhRRRR/# )r   r&   zlist[nodes.NodeNG]r   zlist[SuccessfulInferenceResult]r   )r   s   "r   r   r   a   s     . .&.	(.r   c                	    R # r   r   r>   s   &&r   r5   r?   `   s     +.r   c                    V ^8  d   QhRRRR/# )r   r&   ztuple[nodes.NodeNG, ...]r   z%tuple[SuccessfulInferenceResult, ...]r   )r   s   "r   r   r   f   s     4 4,4	.4r   c                	    R # r   r   r>   s   &&r   r5   r?   e   s     14r   c                    V ^8  d   QhRRRR/# r0   r   )r   s   "r   r   r   k   s    RR<R4MRr   c                	    R # r   r   r>   s   &&r   r5   r?   j   s    ORr   c                    V ^8  d   QhRRRR/# )r   r&   r4   r   _VisitReturnsr   )r   s   "r   r   r   m   s      : - r   c                	  a  V'       g   V# \        V\        4      '       d"   V Uu. uF  pS P                  V4      NK  	  up# \        V\        4      '       d3   \        ;QJ d    . V 3R  lV 4       F  NK  	  5# ! V 3R  lV 4       4      # \        V\        4      '       d   V#  S P                  V4      # u upi   \         d'    \        P                  ! RT R2\        ^ R7       Tu # i ; i)c              3  F   <"   T F  pSP                  V4      x  K  	  R # 5ir   )r5   ).0childr"   s   & r   	<genexpr>2TransformVisitor._visit_generic.<locals>.<genexpr>s   s     F,,U33s   !z Astroid was unable to transform z.
Some functionality will be missing unless the system recursion limit is lifted.
From pylint, try: --init-hook='import sys; sys.setrecursionlimit(2000)' or higher.)
stacklevel)

isinstancer    r5   tuplerA   r:   RecursionErrorwarningswarnUserWarning)r"   r&   rN   s   f& r   r5   r?   m   s    KdD!!<@AD5D''.DAAdE""5FF5F5FFFFdC  K	;;t$$ B  		MM24& 9e e  K		s   B5$B: :.C+*C+Nc               (    V ^8  d   QhRRRRRRRR/# 	r   
node_classz!type[_SuccessfulInferenceResultT]	transformz(TransformFn[_SuccessfulInferenceResultT]r+   z._Predicate[_SuccessfulInferenceResultT] | Noner   r   r   )r   s   "r   r   r      s9     C C5C <C B	C
 
Cr   c                L    V P                   V,          P                  W#34       R# )a"  Register `transform(node)` function to be applied on the given node.

The transform will only be applied if `predicate` is None or returns true
when called with the node as argument.

The transform function may return a value which is then used to
substitute the original node in the tree.
N)r!   appendr"   rZ   r[   r+   s   &&&&r   register_transform#TransformVisitor.register_transform   s     	
#**I+ABr   c               (    V ^8  d   QhRRRRRRRR/# rY   r   )r   s   "r   r   r      s9     C C5C <C B	C
 
Cr   c                L    V P                   V,          P                  W#34       R# )zUnregister the given transform.N)r!   remover^   s   &&&&r   unregister_transform%TransformVisitor.unregister_transform   s     	
#**I+ABr   c                    V ^8  d   QhRRRR/# r0   r   )r   s   "r   r   r      s     ! !, !+D !r   c                $    V P                  V4      # )zWalk the given astroid *tree* and transform each encountered node.

Only the nodes which have transforms registered will actually
be replaced or changed.
)r:   r>   s   &&r   visitTransformVisitor.visit   s     {{4  r   )r!   r   )__name__
__module____qualname____firstlineno____doc__r#   r-   r:   r
   r5   r_   rd   rh   __static_attributes__r   r   r   r   r   $   s    &	% 5 53 3. . 4 4 R R.C C! !r   r   )r   .)
__future__r   rU   collectionsr   collections.abcr   typingr   r   r   r	   r
   astroid.contextr   astroid.typingr   r   astroidr   r   bool
_Predicater    rS   rA   r4   rJ   r   r   r   r   <module>ry      s   
 #  # $ @ @ - A")%-F# 67=>EJ D(%0C*Dc4O
 
$%&%s*+, 

 	 ! !r   