
    /h;)                     $   d dl ZddlmZ ddlmZ ej        rd dlZdZ	dZ
dZdZ	 dd	ej        ej                 d
ej        d         ddfdZ	 ddej        d
ej        d         ddfdZ G d d          Z G d de          Z G d de          ZdS )    N   )nodes)NodeVisitorparamresolvealias	undefinedr   parent_symbolsSymbolsreturnc                 x    t          |          }t          |          }| D ]}|                    |           |S N)parent)r   FrameSymbolVisitorvisit)r   r
   symvisitornodes        D/var/www/html/venv/lib/python3.11/site-packages/jinja2/idtracking.pyfind_symbolsr      sJ     
(
(
(C %%G  dJ    r   c                 P    t          |          }|                    |            |S r   )r   analyze_node)r   r
   r   s      r   symbols_for_noder      s-     
(
(
(CTJr   c            	          e Zd Z	 ddej        d          dej        e         ddfdZdej        dej	        ddfdZ
	 dd	ed
ej        ej        eej        e         f                  defdZdedej        ej	                 fdZd	edej        e         fdZd	edefdZddZd	eddfdZd	edefdZd	eddfdZdej        d          ddfdZdej        eef         fdZdej        e         fdZdS )r   Nr   levelr   c                     ||d}n
|j         dz   }|| _         || _        i | _        i | _        t	                      | _        d S )Nr   r   )r   r   refsloadssetstores)selfr   r   s      r   __init__zSymbols.__init__"   sL     =~q(
&(	)+
"%%%r   r   kwargsc                 @    t          |           } |j        |fi | d S N)RootVisitorr   )r"   r   r$   r   s       r   r   zSymbols.analyze_node1   s/    d##d%%f%%%%%r   nameloadc                 L    d| j          d| }|| j        |<   |
|| j        |<   |S )Nl__)r   r   r   )r"   r(   r)   idents       r   _define_refzSymbols._define_ref5   s=     )TZ(($((	$ $DJur   targetc                 t    || j         v r| j         |         S | j        | j                            |          S d S r&   )r   r   	find_load)r"   r/   s     r   r1   zSymbols.find_load>   s?    TZ:f%%;";((000tr   c                 t    || j         v r| j         |         S | j        | j                            |          S d S r&   )r   r   find_refr"   r(   s     r   r3   zSymbols.find_refG   s>    499T?";";''---tr   c                 Z    |                      |          }|t          d|d          |S )NzFTried to resolve a name to a reference that was unknown to the frame ())r3   AssertionError)r"   r(   rvs      r   refzSymbols.refP   sH    ]]4  : 4*.4 4 4   	r   te.Selfc                 6   t                               | j                  }|j                            | j                   | j                                        |_        | j                                        |_        | j                                        |_        |S r&   )	object__new__	__class____dict__updater   copyr   r!   )r"   r8   s     r   rA   zSymbols.copyY   sm    ^^DN++
4=)))).."":??$$K$$&&		r   c                    | j                             |           || j        vrc| j        <| j                            |          }| |                     |t          |f           d S |                     |t          d f           d S d S N)r)   )r!   addr   r   r3   r.   VAR_LOAD_ALIASVAR_LOAD_UNDEFINED)r"   r(   	outer_refs      r   storezSymbols.storea   s     ty   {& K0066	($$T0K$LLLF T);T(BCCCCC ! r   c                 r    | j                             |           |                     |t          d f          S rC   )r!   rD   r.   VAR_LOAD_PARAMETERr4   s     r   declare_parameterzSymbols.declare_parameters   s5    ,>+EFFFr   c                 p    |                      |           |                     |t          |f           d S d S rC   )r3   r.   VAR_LOAD_RESOLVEr4   s     r   r)   zSymbols.loadw   sA    ==&T)94(@AAAAA '&r   branch_symbolsc                 0   t                      }|D ]}|                    |j                   |                    | j                   |D ]_}| j                            |j                   | j                            |j                   | j                            |j                   `|D ]i}|                     |          }|
J d            | j        .| j                            |          }|t          |f| j        |<   Xt          |f| j        |<   jd S )Nzshould not happen)
r    r@   r!   difference_updater   r   r3   r   rE   rM   )r"   rN   r!   branchr   r(   r/   outer_targets           r   branch_updatezSymbols.branch_update{   s+    UU$ 	) 	)FMM&-((((  ---! 	+ 	+CISX&&&Jci(((Ksz**** 		: 		:D]]4((F%%':%%%{&#{33D99+*8,)GDJv&"2D!9DJv		: 		:r   c                     i }| }|<t          |j                  D ]}||vr|                     |          ||<   |j        }|<|S r&   )sortedr!   r3   r   )r"   r8   r   r(   s       r   dump_storeszSymbols.dump_stores   s`    !$(t{++ 3 3r>>#}}T22BtH;D  	r   c                     t                      }| }|K| j                                        D ](\  }\  }}|t          k    r|                    |           )|j        }|K|S r&   )r    r   itemsrJ   rD   r   )r"   r8   r   r/   instrr,   s         r   dump_param_targetszSymbols.dump_param_targets   sn    UU$(&*j&6&6&8&8 # #"
...FF6NNN;D  	r   )NNr&   )r   r:   )__name__
__module____qualname__tOptionalintr#   r   NodeAnyr   strTupler.   r1   r3   r9   rA   rH   rK   r)   SequencerS   DictrV   SetrZ    r   r   r   r   !   sD       MQ( (j+(;<:c?(	( ( ( (& &qu & & & & &
 LP  z!'#qz#2F*GH	    
15(9    S QZ_            D# D$ D D D D$Gc Gc G G G GB B B B B B:AJy,A :d : : : :0QVCH-    AE#J      r   c            	       `   e Zd ZddZdej        dej        ddfdZeZ	eZ
eZeZeZeZeZdej        dej        ddfd	Zdej        dej        ddfd
Zdej        dej        ddfdZ	 ddej        dedej        ddfdZdej        dej        ddfdZdej        dej        dej        ddfdZdS )r'   symbolsr   r   Nc                 .    t          |          | _        d S r&   )r   sym_visitorr"   rj   s     r   r#   zRootVisitor.__init__   s    -g66r   r   r$   c                 h    |                                 D ]}| j                            |           d S r&   iter_child_nodesrl   r   r"   r   r$   childs       r   _simple_visitzRootVisitor._simple_visit   sA    **,, 	* 	*E""5))))	* 	*r   c                 N    |j         D ]}| j                            |           d S r&   bodyrl   r   rq   s       r   visit_AssignBlockzRootVisitor.visit_AssignBlock   7    Y 	* 	*E""5))))	* 	*r   c                 l    |                     d          D ]}| j                            |           d S )N)call)excludero   rq   s       r   visit_CallBlockzRootVisitor.visit_CallBlock   sF    **9*== 	* 	*E""5))))	* 	*r   c                 N    |j         D ]}| j                            |           d S r&   ru   rq   s       r   visit_OverlayScopezRootVisitor.visit_OverlayScope   rx   r   rv   
for_branchc                    |dk    r)| j                             |j        d           |j        }nl|dk    r|j        }n^|dk    rI| j                             |j        d           |j        | j                             |j                   d S t          d          |r|D ]}| j                             |           d S d S )Nrv   T)store_as_paramelsetestzUnknown for branch)rl   r   r/   rv   else_r   RuntimeError)r"   r   r   r$   rQ   items         r   	visit_ForzRootVisitor.visit_For   s     ""4;t"DDDYFF6!!ZFF6!!""4;t"DDDy$ &&ty111F3444 	- - - &&t,,,,	- 	-- -r   c                     |j         D ]}| j                            |           |j        D ]}| j                            |           d S r&   )targetsrl   r   rv   )r"   r   r$   r/   rr   s        r   
visit_WithzRootVisitor.visit_With   sb    l 	+ 	+F""6****Y 	* 	*E""5))))	* 	*r   argsc                 J    t          dt          |          j                  )NzCannot find symbols for )NotImplementedErrortyper[   )r"   r   r   r$   s       r   generic_visitzRootVisitor.generic_visit   s"    !"TT$ZZ=P"T"TUUUr   rj   r   r   N)rv   )r[   r\   r]   r#   r   ra   r^   rb   rs   visit_Templatevisit_Blockvisit_Macrovisit_FilterBlockvisit_Scopevisit_Ifvisit_ScopedEvalContextModifierAssignBlockrw   	CallBlockr|   OverlayScoper~   Forrc   r   Withr   r   rh   r   r   r'   r'      s       7 7 7 7*%* * *$ * * * * #NKK%KH&3#*e&7 *15 *T * * * **EO *qu * * * * **u'9 *QU *t * * * *
 28- -I-+.-CD5-	- - - -(*uz *QU *t * * * *V%* VQU Vae VPT V V V V V Vr   r'   c            	       z   e Zd ZdZddZ	 ddej        d	ed
ej	        ddfdZ
dej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZdej        d
ej	        ddfdZ dej!        d
ej	        ddfdZ"dej#        d
ej	        ddfdZ$dej%        d
ej	        ddfdZ&dS )r   zA visitor for `Frame.inspect`.rj   r   r   Nc                     || _         d S r&   )rj   rm   s     r   r#   zFrameSymbolVisitor.__init__   s    r   Fr   r   r$   c                    |s|j         dk    r!| j                            |j                   dS |j         dk    r!| j                            |j                   dS |j         dk    r!| j                            |j                   dS dS )z2All assignments to names go through this function.r   rH   r)   N)ctxrj   rK   r(   rH   r)   )r"   r   r   r$   s       r   
visit_NamezFrameSymbolVisitor.visit_Name   s      	)TX00L**4955555X  Lty)))))XLdi(((((  r   c                 D    | j                             |j                   d S r&   )rj   r)   r(   r"   r   r$   s      r   visit_NSRefzFrameSymbolVisitor.visit_NSRef   s     $)$$$$$r   c                 *      j         |j        fi   j        dt          j        t
          j                 ddf fd} ||j                  } ||j                  } ||j	        pd          } j        
                    |||g           d S )Nr   r   r   c                 r                                     x_        }| D ]} j        |fi  _        |S r&   )rA   rj   r   )r   r8   subnoder$   original_symbolsr"   s      r   inner_visitz0FrameSymbolVisitor.visit_If.<locals>.inner_visit   sS     0 5 5 7 77DL2  . .
7--f----+DLIr   rh   )r   r   rj   r^   Iterabler   ra   rv   elif_r   rS   )r"   r   r$   r   body_symbolselif_symbolselse_symbolsr   s   ` `    @r   r   zFrameSymbolVisitor.visit_If   s    
49'''''<	qz%*5 	) 	 	 	 	 	 	 	 	 #{49--"{4:.."{4:#344""L,#MNNNNNr   c                 D    | j                             |j                   d S r&   )rj   rH   r(   r   s      r   r   zFrameSymbolVisitor.visit_Macro  s     49%%%%%r   c                 `     | j         |fi | | j                            |j                   d S r&   )r   rj   rH   r/   r   s      r   visit_ImportzFrameSymbolVisitor.visit_Import  s;    4**6***4;'''''r   c                      | j         |fi | |j        D ]R}t          |t                    r!| j                            |d                    8| j                            |           Sd S )Nr   )r   names
isinstancetuplerj   rH   )r"   r   r$   r(   s       r   visit_FromImportz#FrameSymbolVisitor.visit_FromImport  s    4**6***J 	) 	)D$&& )""47++++""4((((		) 	)r   c                 R     | j         |j        fi |  | j         |j        fi | dS )z'Visit assignments in the correct order.N)r   r   r/   r   s      r   visit_AssignzFrameSymbolVisitor.visit_Assign  s@    
49'''''
4;))&)))))r   c                 ,     | j         |j        fi | dS )zqVisiting stops at for blocks.  However the block sequence
        is visited as part of the outer scope.
        N)r   iterr   s      r   r   zFrameSymbolVisitor.visit_For#  s&     	
49'''''''r   c                 ,     | j         |j        fi | d S r&   )r   rz   r   s      r   r|   z"FrameSymbolVisitor.visit_CallBlock)  s$    
49'''''''r   c                 ,     | j         |j        fi | d S r&   )r   filterr   s      r   r   z$FrameSymbolVisitor.visit_FilterBlock,  s$    
4;))&)))))r   c                 D    |j         D ]}|                     |           d S r&   )valuesr   )r"   r   r$   r/   s       r   r   zFrameSymbolVisitor.visit_With/  s2    k 	 	FJJv	 	r   c                 ,     | j         |j        fi | dS )zStop visiting at block assigns.N)r   r/   r   s      r   rw   z$FrameSymbolVisitor.visit_AssignBlock3  s$    
4;))&)))))r   c                     dS )zStop visiting at scopes.Nrh   r   s      r   r   zFrameSymbolVisitor.visit_Scope7        r   c                     dS )zStop visiting at blocks.Nrh   r   s      r   r   zFrameSymbolVisitor.visit_Block:  r   r   c                     dS )z!Do not visit into overlay scopes.Nrh   r   s      r   r~   z%FrameSymbolVisitor.visit_OverlayScope=  r   r   r   )F)'r[   r\   r]   __doc__r#   r   Nameboolr^   rb   r   NSRefr   Ifr   Macror   Importr   
FromImportr   Assignr   r   r   r   r|   FilterBlockr   r   r   r   rw   Scoper   Blockr   r   r~   rh   r   r   r   r      s       ((    8=	) 	)J	)04	)HI	)		) 	) 	) 	)% %qu % % % % %OUX O O4 O O O O$& &qu & & & & &( ( (4 ( ( ( ()U%5 ) )4 ) ) ) )* * *4 * * * *
(ei (15 (T ( ( ( ((EO (qu ( ( ( ( (*e&7 *15 *T * * * *uz QU t    *e&7 *15 *T * * * *' 'qu ' ' ' ' '' 'qu ' ' ' ' '0u'9 0QU 0t 0 0 0 0 0 0r   r   r&   )typingr^    r   r   r   TYPE_CHECKINGtyping_extensionsterJ   rM   rE   rF   r   ra   r_   r   r   r   r'   r   rh   r   r   <module>r      s                        ? #""""     LP :ej!34:i3H    ?C 
*&'j&;   J J J J J J J JZ7V 7V 7V 7V 7V+ 7V 7V 7VtV0 V0 V0 V0 V0 V0 V0 V0 V0 V0r   