
    &Vf#                     $   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  G d d          Z	d Z
d	 Z G d
 d          Zej         G d de                      Zej         G d de                      Zej         G d de                      ZdS )    wraps)treeget_global_attribute)set_global_attribute)python_utilsc                       e Zd Zd Zd ZdS )DotNotTrackScopec                 L    t                      | _        t          dd           d S )Ntracking_onF)is_tracking_enabledoriginal_valuer   selfs    U/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/utils/tracking.py	__enter__zDotNotTrackScope.__enter__
   s&    133]E22222    c                 0    t          d| j                   d S )Nr   )r   r   )r   argskwargss      r   __exit__zDotNotTrackScope.__exit__   s    ]D,?@@@@@r   N)__name__
__module____qualname__r   r    r   r   r   r   	   s7        3 3 3A A A A Ar   r   c                  "    t          dd          S )Nr   Tr   r   r   r   r   r      s    t444r   c                 <     t                      fd            }|S )Nc                  d    t                      5   | i |cd d d            S # 1 swxY w Y   d S N)r   )r   r   fns     r   wrapperz1no_automatic_dependency_tracking.<locals>.wrapper   s     	' 	'2t&v&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   %))r   )r!   r"   s   ` r    no_automatic_dependency_trackingr#      s3    
2YY' ' ' ' Y' Nr   c                   F    e Zd ZdZddZd Zd ZddZd Zd Z	d	 Z
d
 ZdS )Trackera  Attribute tracker, used for e.g. Variable tracking.

    Monitors certain attribute types
    and put them in appropriate lists in case of a match.

    Also passively tracks certain mutable collections
    (dict, list) so that items added to them later
    still get tracked. This is done by wrapping these
    collections into an equivalent, tracking-aware object.

    Example:

    ```python
    def __init__(self):
        self.tracker = Tracker(
            # Format: `name: (test_fn, store)`
            {
                "variables":
                    (lambda x: isinstance(x, Variable), self._variables),
                "metrics": (lambda x: isinstance(x, Metric), self._metrics),
                "layers": (lambda x: isinstance(x, Layer), self._layers),
            }
        )

    def __setattr__(self, name, value):
        if hasattr(self, "_tracker"):
            value = self._tracker.track(value)
        return super().__setattr__(name, value)
    ```
    Nc                     || _         d | j                                         D             | _        d| _        d | _        |pi | _        d S )Nc                 ,    i | ]}|t                      S r   )set).0names     r   
<dictcomp>z$Tracker.__init__.<locals>.<dictcomp>A   s    FFF44FFFr   F)configkeys
stored_idslocked_lock_violation_msg
exclusions)r   r,   r1   s      r   __init__zTracker.__init__?   sK    FF4;3C3C3E3EFFF#' $*r   c                    t                      s|S | j                                        D ]x\  }\  }} ||          re|| j        v r,| j        |         D ]}|                     ||          r|c c S |                     ||          s|                     ||           |c S yt          |t                    rct          |d          rSi }|	                                                                D ]\  }}| 
                    |          ||<    |j        di |S t          |t                    rDg }|D ]*}|                    | 
                    |                     +|                    |          S t          |t                    rt          ||           S t          |t                    rt!          ||           S t          |t"                    rt%          ||           S |S )N_fieldsr   )r   r,   itemsr1   is_in_storeadd_to_store
isinstancetuplehasattr_asdicttrack	__class__appendlistTrackedListdictTrackedDictr(   
TrackedSet)	r   attr
store_nameis_attr_type_exclwrapped_attrr*   es	            r   r<   zTracker.trackF   s   "$$ 	K-1[->->-@-@ 	 	)J)q|D!! 00 $
 ; ( (++D$77 (#'KKKKK(''
D99 8%%j$777 dE"" 	2wtY'?'? 	2L<<>>//11 3 3a%)ZZ]]T""!4>11L111dE"" 	*L 3 3##DJJqMM2222>>,///d## 	*tT***d## 	*tT***c"" 	*dD)))r   c                    | j                                         D ]q}t          |          | j         |         v rS| j         |                             t          |                     t	          j        | j        |         d         |           rd S N   )r.   r-   idremover	   remove_by_idr,   )r   valuerE   s      r   untrackzTracker.untrackg   s    /..00 	M 	MJ%yyDOJ777
+222e99===)$+j*A!*DeLLL	M 	Mr   c                 *    d| _         |	|| _        d S d S )NT)r/   r0   )r   msgs     r   lockzTracker.lockm   s#    ?'*D$$$ ?r   c                     d| _         d S )NF)r/   r   s    r   unlockzTracker.unlockr   s    r   c                     | j         rt          | j                  | j        |         d                             |           | j        |                             t          |                     d S rL   )r/   
ValueErrorr0   r,   r>   r.   addrN   r   rE   rQ   s      r   r7   zTracker.add_to_storeu   sd    ; 	7T5666J"))%000
#''5		22222r   c                 :    t          |          | j        |         v S r    )rN   r.   r[   s      r   r6   zTracker.is_in_store{   s    %yyDOJ777r   c                 d   |                      ||          st          d|           | j        |         d         }|                    |          }|||<   | j        |                             t          |                     | j        |                             t          |                     d S )NzUnknown value: rM   )r6   rY   r,   indexr.   rO   rN   rZ   )r   rE   	old_value	new_value
store_listr^   s         r   replace_tracked_valuezTracker.replace_tracked_value~   s    
I66 	<:y::;;;[,Q/
  ++%
5
#**2i==999
#''966666r   r    )r   r   r   __doc__r2   r<   rR   rU   rW   r7   r6   rb   r   r   r   r%   r%      s         >+ + + +  BM M M+ + + +
  3 3 38 8 87 7 7 7 7r   r%   c                        e Zd Zd fd	Z fdZ fdZ fdZ fdZd fd	Z fd	Z	 fd
Z
d Zed             Z xZS )r@   Nc                     | _         r|rfd|D             }t                                          |pg            d S )Nc                 :    g | ]}                     |          S r   r<   r)   vtrackers     r   
<listcomp>z(TrackedList.__init__.<locals>.<listcomp>   %    7771gmmA&&777r   rj   superr2   r   valuesrj   r=   s     `r   r2   zTrackedList.__init__   U     	8v 	87777777F2&&&&&r   c                     | j         r| j                             |           t                                          |           d S r    )rj   r<   rn   r>   r   rQ   r=   s     r   r>   zTrackedList.append   s?    < 	&Lu%%%ur   c                     | j         r| j                             |           t                                          ||           d S r    )rj   r<   rn   insertr   r^   rQ   r=   s      r   ru   zTrackedList.insert   sA    < 	&Lu%%%ue$$$$$r   c                 v      j         r fd|D             }t                                          |           d S )Nc                 D    g | ]}j                             |          S r   rj   r<   r)   ri   r   s     r   rk   z&TrackedList.extend.<locals>.<listcomp>   )    <<<dl((++<<<r   )rj   rn   extendr   rp   r=   s   ` r   r|   zTrackedList.extend   C    < 	=<<<<V<<<Fvr   c                     | j         r| j                             |           	 t                                          |           d S # t          $ r t          j        | |           Y d S w xY wr    )rj   rR   rn   rO   rY   r	   rP   rs   s     r   rO   zTrackedList.remove   s{    < 	(L  '''	3GGNN5!!!!! 	3 	3 	3%dE222222	3s   !A A*)A*c                     | j         rC| |         }| j                             |           t                                          |          S t                                          |          S r    )rj   rR   rn   poprv   s      r   r   zTrackedList.pop   sX    < 	&KEL  '''77;;u%%%77;;u%%%r   c                     | j         r| D ]}| j                             |           t                                                       d S r    rj   rR   rn   clearrs   s     r   r   zTrackedList.clear   J    < 	, , ,$$U++++r   c                     | |         }t                                          |           | j        r| j                            |           d S d S r    )rn   __delitem__rj   rR   rv   s      r   r   zTrackedList.__delitem__   sT    UE"""< 	(L  '''''	( 	(r   c                 
    | d fS r    r   r   s    r   tree_flattenzTrackedList.tree_flatten       d|r   c                      | |          S r    r   clsmetadatachildrens      r   tree_unflattenzTrackedList.tree_unflatten        s8}}r   NN)r   )r   r   r   r2   r>   ru   r|   rO   r   r   r   r   classmethodr   __classcell__r=   s   @r   r@   r@      s       ' ' ' ' ' '    
% % % % %
    
3 3 3 3 3& & & & & &    ( ( ( ( (     [    r   r@   c                   p     e Zd Zd
 fd	Z fdZ fdZd fd	Z fdZ fdZd Z	e
d	             Z xZS )rB   Nc                     | _         r"|r fd|                                D             }t                                          |pg            d S )Nc                 B    i | ]\  }}|                     |          S r   rg   )r)   kri   rj   s      r   r+   z(TrackedDict.__init__.<locals>.<dictcomp>   s+    EEEdaaq))EEEr   )rj   r5   rn   r2   ro   s     `r   r2   zTrackedDict.__init__   s_     	Fv 	FEEEEfllnnEEEF2&&&&&r   c                     | j         r| j                             |           t                                          ||           d S r    )rj   r<   rn   __setitem__r   keyrQ   r=   s      r   r   zTrackedDict.__setitem__   sC    < 	&Lu%%%C'''''r   c                       j         r  fd|                                D             }t                                          |           d S )Nc                 L    i | ] \  }}|j                             |          !S r   ry   )r)   r   ri   r   s      r   r+   z&TrackedDict.update.<locals>.<dictcomp>   s/    LLLDAqq$,,,Q//LLLr   )rj   r5   rn   update)r   mappingr=   s   ` r   r   zTrackedDict.update   sL    < 	MLLLLGMMOOLLLGwr   c                     | j         rBt                                          ||          }||ur| j                             |           |S t                                          ||          S r    )rj   rn   r   rR   )r   r   defaultrQ   r=   s       r   r   zTrackedDict.pop   sb    < 	-GGKKW--EG##$$U+++L77;;sG,,,r   c                     t                                                      \  }}| j        r| j                            |           ||fS r    )rn   popitemrj   rR   r   s      r   r   zTrackedDict.popitem   sD    WW__&&
U< 	(L  '''Ezr   c                     | j         r1|                                 D ]}| j                             |           t                                                       d S r    )rj   rp   rR   rn   r   rs   s     r   r   zTrackedDict.clear   sR    < 	, , ,$$U++++r   c                     ddl m} |j                            |j                            |                                 d                     \  }}|t          |          |fS )Nr   optreec                     | d         S )Nr   r   )kvs    r   <lambda>z*TrackedDict.tree_flatten.<locals>.<lambda>   s
    A r   )r   )keras.src.utils.module_utilsr   utilsunzip2total_order_sortedr5   r?   )r   r   r-   rp   s       r   r   zTrackedDict.tree_flatten   sj    777777 |**L++DJJLL>N>N+OO
 
f tDzz4''r   c                 V    ddl m}  | |j                            ||                    S )Nr   r   )r   r   r   safe_zip)r   r-   rp   r   s       r   r   zTrackedDict.tree_unflatten   s8    777777 s6<((v66777r   r   r    )r   r   r   r2   r   r   r   r   r   r   r   r   r   r   s   @r   rB   rB      s        ' ' ' ' ' '( ( ( ( (
         
- - - - - -        ( ( ( 8 8 [8 8 8 8 8r   rB   c                   n     e Zd Zd
 fd	Z fdZ fdZ fdZ fdZ fdZd Z	e
d	             Z xZS )rC   Nc                     | _         r|rfd|D             }t                                          |pg            d S )Nc                 :    h | ]}                     |          S r   rg   rh   s     r   	<setcomp>z&TrackedSet.__init__.<locals>.<setcomp>  rl   r   rm   ro   s     `r   r2   zTrackedSet.__init__   rq   r   c                     | j         r| j                             |           t                                          |           d S r    )rj   r<   rn   rZ   rs   s     r   rZ   zTrackedSet.add  s?    < 	&Lu%%%Er   c                 v      j         r fd|D             }t                                          |           d S )Nc                 D    g | ]}j                             |          S r   ry   rz   s     r   rk   z%TrackedSet.update.<locals>.<listcomp>  r{   r   )rj   rn   r   r}   s   ` r   r   zTrackedSet.update
  r~   r   c                     | j         r| j                             |           t                                          |           d S r    )rj   rR   rn   rO   rs   s     r   rO   zTrackedSet.remove  s?    < 	(L  '''ur   c                     t                                                      }| j        r| j                            |           |S r    )rn   r   rj   rR   rs   s     r   r   zTrackedSet.pop  s9    < 	(L  '''r   c                     | j         r| D ]}| j                             |           t                                                       d S r    r   rs   s     r   r   zTrackedSet.clear  r   r   c                 
    | d fS r    r   r   s    r   r   zTrackedSet.tree_flatten   r   r   c                      | |          S r    r   r   s      r   r   zTrackedSet.tree_unflatten$  r   r   r   )r   r   r   r2   rZ   r   rO   r   r   r   r   r   r   r   s   @r   rC   rC      s        ' ' ' ' ' '    
    
    
             [    r   rC   N)	functoolsr   	keras.srcr   %keras.src.backend.common.global_stater   r   keras.src.utilsr	   r   r   r#   r%   register_tree_node_classr?   r@   rA   rB   r(   rC   r   r   r   <module>r      s               F F F F F F F F F F F F ( ( ( ( ( (A A A A A A A A5 5 5  f7 f7 f7 f7 f7 f7 f7 f7R 9 9 9 9 9$ 9 9 9x 48 48 48 48 48$ 48 48 48n ) ) ) ) ) ) ) ) ) )r   