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

    Monitors certain attribute types and places matching
    objects into user provided tracking collections.

    Also passively tracks certain mutable collections
    (e.g. dict and list) ensuring that items added after
    initialization are still tracked. This is done by wrapping
    these collections in tracking-aware proxy objects.

    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                     || _         | j                   j                         D ci c]  }|t                c}| _        d| _        d | _        |xs i | _        y c c}w NF)configkeysset
stored_idslocked_lock_violation_msg
exclusions)r   r)   r/   names       r   __init__zTracker.__init__@   sO    37;;3C3C3EF44;F#' $* Gs   Ac                    t               s|S | j                  j                         D ]r  \  }\  }} ||      s|| j                  v r,| j                  |   D ]  }| j	                  ||      s|c c S  | j	                  ||      s| j                  ||       |c S  t        |t              rZt        |d      rNi }|j                         j                         D ]  \  }}| j                  |      ||<     |j                  di |S t        |t              r:g }|D ]"  }|j                  | j                  |             $ |j                  |      S t        |t              rt        ||       S t        |t              rt!        ||       S t        |t"              rt%        ||       S t        |t&              rt)        ||       S |S )N_fieldsr   )r   r)   itemsr/   is_in_storeadd_to_store
isinstancetuplehasattr_asdicttrack	__class__appendlistTrackedListr   TrackedOrderedDictdictTrackedDictr+   
TrackedSet)	r   attr
store_nameis_attr_type_exclwrapped_attrr0   es	            r   r;   zTracker.trackG   s   "$K-1[[->->-@ 	)J)qD!0 $
 ; (++D$7#'K( ''
D9%%j$7	 dE"wtY'?L<<>//1 3a%)ZZ]T"3!4>>1L11dE"L 3##DJJqM23>>,//d#tT**k*%dD11d#tT**c"dD))r   c                    | j                   j                         D ]j  }t        |      | j                   |   v s| j                   |   j                  t        |             t	        j
                  | j                  |   d   |       l y N   )r,   r*   idremover
   remove_by_idr)   )r   valuerE   s      r   untrackzTracker.untracki   sn    //..0 	MJ%yDOOJ77
+222e9=))$++j*A!*DeL	Mr   c                 &    d| _         ||| _        y y )NT)r-   r.   )r   msgs     r   lockzTracker.locko   s    ?'*D$ r   c                     d| _         y r(   )r-   r   s    r   unlockzTracker.unlockt   s	    r   c                     | j                   rt        | j                        | j                  |   d   j	                  |       | j
                  |   j                  t        |             y rL   )r-   
ValueErrorr.   r)   r=   r,   addrN   r   rE   rQ   s      r   r6   zTracker.add_to_storew   sQ    ;;T5566J"))%0
#''5	2r   c                 6    t        |      | j                  |   v S r!   )rN   r,   r[   s      r   r5   zTracker.is_in_store}   s    %yDOOJ777r   c                 0   | j                  ||      st        d|       | j                  |   d   }|j                  |      }|||<   | j                  |   j                  t        |             | j                  |   j                  t        |             y )NzUnknown value: rM   )r5   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yk:;;[[,Q/
  +%
5
#**2i=9
#''96r   r!   )r   r   r   __doc__r1   r;   rR   rU   rW   r6   r5   rb   r   r   r   r&   r&       s1    >+ DM+
38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d Zed        Zd Z xZS )r?   c                     || _         |r |r|D cg c]  }|j                  |       }}t        |   |xs g        y c c}w r!   trackerr;   superr1   r   valuesrg   vr<   s       r   r1   zTrackedList.__init__   A    v0671gmmA&7F72& 8   ?c                 r    | j                   r| j                   j                  |       t        |   |       y r!   )rg   r;   rh   r=   r   rQ   r<   s     r   r=   zTrackedList.append   s(    <<LLu%ur   c                 t    | j                   r| j                   j                  |       t        |   ||       y r!   )rg   r;   rh   insertr   r^   rQ   r<   s      r   rq   zTrackedList.insert   s*    <<LLu%ue$r   c                     | j                   r(|D cg c]  }| j                   j                  |       }}t        |   |       y c c}w r!   )rg   r;   rh   extendr   rj   rk   r<   s      r   rt   zTrackedList.extend   =    <<5;<dll((+<F<v =   "Ac                     | j                   r| j                   j                  |       	 t        |   |       y # t        $ r t        j                  | |       Y y w xY wr!   )rg   rR   rh   rO   rY   r
   rP   ro   s     r   rO   zTrackedList.remove   sL    <<LL  '	3GN5! 	3%%dE2	3s   : AAc                     | j                   r/| |   }| j                   j                  |       t        |   |      S t        |   |      S r!   )rg   rR   rh   poprr   s      r   rz   zTrackedList.pop   sC    <<KELL  '7;u%%7;u%%r   c                 ~    | j                   r"| D ]  }| j                   j                  |        t        |           y r!   rg   rR   rh   clearro   s     r   r}   zTrackedList.clear   4    << ,$$U+,r   c                 ~    | |   }t         |   |       | j                  r| j                  j                  |       y y r!   )rh   __delitem__rg   rR   rr   s      r   r   zTrackedList.__delitem__   s7    UE"<<LL  ' 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        8}r   c                 
    | d fS r!   r   r   s    r   torchtree_flattenzTrackedList.torchtree_flatten        d|r   c                      | |      S r!   r   r   r   r   s      r   torchtree_unflattenzTrackedList.torchtree_unflatten        8}r   c                     ddl m} | j                         \  }}t        |      D cg c]  \  }}|j	                  |      |f c}}|fS c c}}w Nr   )_pytreetorch.utilsr   r   	enumerateSequenceKeyr   
torch_treerj   contextirk   s         r   torchtree_flatten_with_keysz'TrackedList.torchtree_flatten_with_keys   W     	60027@7H
/3q!Z##A&*
 	 
   ANN))r   r   r   r1   r=   rq   rt   rO   rz   r}   r   r   classmethodr   r   r   r   __classcell__r<   s   @r   r?   r?      sb    '
%

3&(  
  
r   r?   c                        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d	 Ze
d
        Zd Z xZS )rB   c                     || _         |rE|rCt        |d      r|j                         }n|}|D ci c]  \  }}||j                  |       }}}t        |   |xs i        y c c}}w )Nr4   )rg   r9   r4   r;   rh   r1   )r   rj   rg   
items_iterkrk   r<   s         r   r1   zTrackedDict.__init__   sg    v vw'#\\^
#
6@Adaaq))AFA2& Bs   A$c                 t    | j                   r| j                   j                  |       t        |   ||       y r!   rg   r;   rh   __setitem__r   keyrQ   r<   s      r   r   zTrackedDict.__setitem__   +    <<LLu%C'r   c                     | j                   r<|j                         D ci c]!  \  }}|| j                   j                  |      # }}}t        |   |       y c c}}w r!   )rg   r4   r;   rh   update)r   mappingr   rk   r<   s       r   r   zTrackedDict.update   sM    <<<CMMOLDAqq$,,,,Q//LGLw Ms   &Ac                    t        |      dkD  rt        ddt        |      z          | j                  st        |   |g| S 	 t        |   |      }| j                  j                  |       |S # t        $ r |r|d   cY S  w xY wNrM   z&pop expected at most 2 arguments, got r   len	TypeErrorrg   rh   rz   rR   KeyErrorr   r   r   rQ   r<   s       r   rz   zTrackedDict.pop   s    t9q=8SYH  ||7;s*T**	GK$ELL  'L 	Aw	   +A3 3BBc                 |    t         |          \  }}| j                  r| j                  j                  |       ||fS r!   rh   popitemrg   rR   r   s      r   r   zTrackedDict.popitem  s6    W_&
U<<LL  'Ezr   c                     | j                   r0| j                         D ]  }| j                   j                  |        t        |           y r!   rg   rj   rR   rh   r}   ro   s     r   r}   zTrackedDict.clear  :    << ,$$U+,r   c                 ~    t        t        | j                                     }|D cg c]  }| |   	 }}|||fS c c}w r!   sortedr>   r*   r   r*   r   rj   s       r   r   zTrackedDict.tree_flatten  s@    d499;'(#'(a$q'((tT!! )s   :c                 &     | t        ||            S r!   zipr   r*   rj   s      r   r   zTrackedDict.tree_unflatten  s     3tV$%%r   c                 |    t        t        | j                                     }|D cg c]  }| |   	 }}||fS c c}w r!   r   r   s       r   r   zTrackedDict.torchtree_flatten  s?     d499;'(#'(a$q'((t| )s   9c                 &     | t        ||            S r!   r   r   rj   r*   s      r   r   zTrackedDict.torchtree_unflatten%  s     3tV$%%r   c                     ddl m} | j                         \  }}t        ||      D cg c]  \  }}|j	                  |      |f c}}|fS c c}}w r   r   r   r   r   
MappingKeyr   r   rj   r   r   rk   s         r   r   z'TrackedDict.torchtree_flatten_with_keys+  sY     	600269'66J
.2aZ""1%q)
 	 
   Ar   r   r   r   r1   r   r   rz   r   r}   r   r   r   r   r   r   r   r   s   @r   rB   rB      sX    '(
 
$" & & & &
r   rB   c                        e Zd Zd fd	Z fdZ fdZ fdZd fd	Z fdZd Z	e
d        Zd	 Ze
d
        Zd Z xZS )r@   c                     | _         rL|rJt        |d      r|j                         }nt        |      j                         }t	        fd|D              }t
        |   |xs
 t	                      y )Nr4   c              3   J   K   | ]  \  }}|j                  |      f  y wr!   )r;   ).0r   rk   rg   s      r   	<genexpr>z.TrackedOrderedDict.__init__.<locals>.<genexpr>?  s#      N41a!W]]1%5!6 Ns    #)rg   r9   r4   rA   r   rh   r1   )r   rj   rg   r   r<   s     ` r   r1   zTrackedOrderedDict.__init__8  sZ    vvw'#\\^
!&\//1
  N: NNF0;=1r   c                 t    | j                   r| j                   j                  |       t        |   ||       y r!   r   r   s      r   r   zTrackedOrderedDict.__setitem__B  r   r   c                       j                   r"t         fd|j                         D              }t           |       y )Nc              3   ^   K   | ]$  \  }}|j                   j                  |      f & y wr!   )rg   r;   )r   r   rk   r   s      r   r   z,TrackedOrderedDict.update.<locals>.<genexpr>I  s.      "/3q!DLL&&q)*"s   *-)rg   r   r4   rh   r   )r   r   r<   s   ` r   r   zTrackedOrderedDict.updateG  s5    <<! "7>}}" G 	wr   c                    t        |      dkD  rt        ddt        |      z          | j                  st        |   |g| S 	 t        |   |      }| j                  j                  |       |S # t        $ r |r|d   cY S  w xY wr   r   r   s       r   rz   zTrackedOrderedDict.popN  s    t9q=8SYH  ||7;s*T**	GK$ELL  'L 	Aw	r   c                     t         |   |      \  }}| j                  r| j                  j                  |       ||fS )N)lastr   )r   r   r   rQ   r<   s       r   r   zTrackedOrderedDict.popitem^  s:    W_$_/
U<<LL  'Ezr   c                     | j                   r0| j                         D ]  }| j                   j                  |        t        |           y r!   r   ro   s     r   r}   zTrackedOrderedDict.cleard  r   r   c                 l    t        | j                               }|D cg c]  }| |   	 }}|||fS c c}w r!   r>   r*   r   s       r   r   zTrackedOrderedDict.tree_flattenj  s;    DIIK #'(a$q'((tT!! )s   1c                 &     | t        ||            S r!   r   r   s      r   r   z!TrackedOrderedDict.tree_unflatteno      3tV$%%r   c                 j    t        | j                               }|D cg c]  }| |   	 }}||fS c c}w r!   r   r   s       r   r   z$TrackedOrderedDict.torchtree_flattens  s8    DIIK #'(a$q'((t| )s   0c                 &     | t        ||            S r!   r   r   s      r   r   z&TrackedOrderedDict.torchtree_unflattenx  r   r   c                     ddl m} | j                         \  }}t        ||      D cg c]  \  }}|j	                  |      |f c}}|fS c c}}w r   r   r   s         r   r   z.TrackedOrderedDict.torchtree_flatten_with_keys|  sW    500269'66J
.2aZ""1%q)
 	 
r   r   )Tr   r   s   @r   r@   r@   6  sX    2(
  "
 & &
 & &r   r@   c                        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d	 Ze
d
        Zd Z xZS )rC   c                     || _         |r |r|D ch c]  }|j                  |       }}t        |   |xs g        y c c}w r!   rf   ri   s       r   r1   zTrackedSet.__init__  rl   rm   c                 r    | j                   r| j                   j                  |       t        |   |       y r!   )rg   r;   rh   rZ   ro   s     r   rZ   zTrackedSet.add  s(    <<LLu%Er   c                     | j                   r(|D cg c]  }| j                   j                  |       }}t        |   |       y c c}w r!   )rg   r;   rh   r   ru   s      r   r   zTrackedSet.update  rv   rw   c                 r    | j                   r| j                   j                  |       t        |   |       y r!   )rg   rR   rh   rO   ro   s     r   rO   zTrackedSet.remove  s(    <<LL  'ur   c                 r    t         |          }| j                  r| j                  j                  |       |S r!   )rh   rz   rg   rR   ro   s     r   rz   zTrackedSet.pop  s,    <<LL  'r   c                 ~    | j                   r"| D ]  }| j                   j                  |        t        |           y r!   r|   ro   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   c                 
    | d fS r!   r   r   s    r   r   zTrackedSet.torchtree_flatten  r   r   c                      | |      S r!   r   r   s      r   r   zTrackedSet.torchtree_unflatten  r   r   c                     ddl m} | j                         \  }}t        |      D cg c]  \  }}|j	                  |      |f c}}|fS c c}}w r   r   r   s         r   r   z&TrackedSet.torchtree_flatten_with_keys  r   r   r   )r   r   r   r1   rZ   r   rO   rz   r}   r   r   r   r   r   r   r   r   s   @r   rC   rC     sX    '


  
  
r   rC   N)collectionsr   	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@   r+   rC   r   r   r   <module>r      s    #   F F (A A5g7 g7T N$ N Nb V$ V Vr K K K\ > > >r   