
    BVh*                        d Z ddlZddlmZmZ ddlZ G d de      Z G d de      Z G d d	e      Z	 G d
 dej                  j                        Z G d de      Z G d dej                  j                        Z G d de      Zy)z:Utilities for collecting objects based on "is" comparison.    N)AnySetc                   X    e Zd ZdZddgZd Zed        Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)_ObjectIdentityWrappera  Wraps an object, mapping __eq__ on wrapper to "is" on wrapped.

  Since __eq__ is based on object identity, it's safe to also define __hash__
  based on object ids. This lets us add unhashable types like trackable
  _ListWrapper objects to object-identity collections.
  _wrapped__weakref__c                     || _         y Nr   )selfwrappeds     ]/home/dcms/DCMS/lib/python3.12/site-packages/tensorflow/python/keras/utils/object_identity.py__init__z_ObjectIdentityWrapper.__init__!   s	    DM    c                     | j                   S r
   r   r   s    r   	unwrappedz _ObjectIdentityWrapper.unwrapped$   s    ==r   c                 :    t        |t              st        d      y )Nz3Cannot compare wrapped object with unwrapped object)
isinstancer   	TypeErrorr   others     r   _assert_typez#_ObjectIdentityWrapper._assert_type(   s    e34KLL 5r   c                 z    | j                  |       t        | j                        t        |j                        k  S r
   r   idr   r   s     r   __lt__z_ObjectIdentityWrapper.__lt__,   -    edmmr%..111r   c                 z    | j                  |       t        | j                        t        |j                        kD  S r
   r   r   s     r   __gt__z_ObjectIdentityWrapper.__gt__0   r   r   c                 Z    |y| j                  |       | j                  |j                  u S )NF)r   r   r   s     r   __eq__z_ObjectIdentityWrapper.__eq__4   s+    }e==ENN**r   c                 &    | j                  |       S r
   )r"   r   s     r   __ne__z_ObjectIdentityWrapper.__ne__:   s    {{5!!!r   c                 ,    t        | j                        S r
   )r   r   r   s    r   __hash__z_ObjectIdentityWrapper.__hash__=   s     dmmr   c                 `    dj                  t        |       j                  | j                        S )Nz<{} wrapping {!r}>)formattype__name__r   r   s    r   __repr__z_ObjectIdentityWrapper.__repr__C   s#    &&tDz':':DMMJJr   N)r*   
__module____qualname____doc__	__slots__r   propertyr   r   r   r    r"   r$   r&   r+    r   r   r   r      sQ     =))  M22+"Kr   r   c                   2     e Zd ZdZ fdZed        Z xZS )_WeakObjectIdentityWrapperr1   c                 R    t         t        |   t        j                  |             y r
   )superr3   r   weakrefref)r   r   	__class__s     r   r   z#_WeakObjectIdentityWrapper.__init__K   s    	
$d4W[[5IJr   c                 "    | j                         S r
   r   r   s    r   r   z$_WeakObjectIdentityWrapper.unwrappedN   s    ==?r   )r*   r,   r-   r/   r   r0   r   __classcell__)r8   s   @r   r3   r3   G   s"    )K  r   r3   c                   (    e Zd ZdZdZ e       Zd Zy)	ReferencezReference that refers an object.

  ```python
  x = [1]
  y = [1]

  x_ref1 = Reference(x)
  x_ref2 = Reference(x)
  y_ref2 = Reference(y)

  print(x_ref1 == x_ref2)
  ==> True

  print(x_ref1 == y)
  ==> False
  ```
  r1   c                     | j                   S )z~Returns the referenced object.

    ```python
    x_ref = Reference(x)
    print(x is x_ref.deref())
    ==> True
    ```
    r   r   s    r   derefzReference.derefk   s     ==r   N)r*   r,   r-   r.   r/   r0   r   r>   r1   r   r   r<   r<   S   s    $ ) j)	r   r<   c                   F    e Zd ZdZdgZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)ObjectIdentityDictionarya  A mutable mapping data structure which compares using "is".

  This is necessary because we have trackable objects (_ListWrapper) which
  have behavior identical to built-in Python lists (including being unhashable
  and comparing based on the equality of their contents by default).
  _storagec                     i | _         y r
   )rA   r   s    r   r   z!ObjectIdentityDictionary.__init__   s	    DMr   c                     t        |      S r
   r   r   keys     r   	_wrap_keyz"ObjectIdentityDictionary._wrap_key       !#&&r   c                 >    | j                   | j                  |         S r
   rA   rG   rE   s     r   __getitem__z$ObjectIdentityDictionary.__getitem__   s    ==,--r   c                 @    || j                   | j                  |      <   y r
   rJ   )r   rF   values      r   __setitem__z$ObjectIdentityDictionary.__setitem__   s    ).DMM$..%&r   c                 <    | j                   | j                  |      = y r
   rJ   rE   s     r   __delitem__z$ObjectIdentityDictionary.__delitem__   s    dnnS)*r   c                 ,    t        | j                        S r
   lenrA   r   s    r   __len__z ObjectIdentityDictionary.__len__       t}}r   c              #   J   K   | j                   D ]  }|j                    y wr
   )rA   r   rE   s     r   __iter__z!ObjectIdentityDictionary.__iter__   s#     }} MMs   !#c                 2    dt        | j                        z  S )NzObjectIdentityDictionary(%s))reprrA   r   s    r   r+   z!ObjectIdentityDictionary.__repr__   s    )D,???r   N)r*   r,   r-   r.   r/   r   rG   rK   rN   rP   rT   rW   r+   r1   r   r   r@   r@   w   s9     l)'./+@r   r@   c                   (    e Zd ZdZdgZd Zd Zd Zy)ObjectIdentityWeakKeyDictionaryz?Like weakref.WeakKeyDictionary, but compares objects with "is".r   c                     t        |      S r
   r3   rE   s     r   rG   z)ObjectIdentityWeakKeyDictionary._wrap_key       %c**r   c                 >    t        t        | j                              S r
   )rS   listrA   r   s    r   rT   z'ObjectIdentityWeakKeyDictionary.__len__   s    tDMM"##r   c              #   z   K   | j                   j                         }|D ]  }|j                  }|| |= |  y wr
   )rA   keysr   r   rb   rF   r   s       r   rW   z(ObjectIdentityWeakKeyDictionary.__iter__   sB     ==D --i		Is   9;Nr*   r,   r-   r.   r/   rG   rT   rW   r1   r   r   r[   r[      s    Go)+$r   r[   c                       e Zd ZdZddgZd Zdee   defdZ	dee   defdZ
ed	        Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)ObjectIdentitySetz6Like the built-in set, but compares objects with "is".rA   r   c                 D     t         fdt        | D               _        y )Nc              3   @   K   | ]  }j                  |        y wr
   )rG   ).0objr   s     r   	<genexpr>z-ObjectIdentitySet.__init__.<locals>.<genexpr>   s     Cs+Cs   )setr`   rA   )r   argss   ` r   r   zObjectIdentitySet.__init__   s    CtT{CCDMr   r   returnc                     t        |t              st        S t        |       t        |      kD  ry| j                  D ]  }||vs y yNFT)r   r   NotImplementedrS   rA   r   r   items      r   __le__zObjectIdentitySet.__le__   sH    eS!
4y3u: 	U	 r   c                 z    t        |t              st        S t        |       t        |      k  ry|D ]  }|| vs y yrp   )r   r   rq   rS   rr   s      r   __ge__zObjectIdentitySet.__ge__   sD    eS!
4y3u: 	T	 r   c                 (    t               }| |_        |S r
   )rf   rA   )storageresults     r   _from_storagezObjectIdentitySet._from_storage   s     FFOMr   c                     t        |      S r
   rD   rE   s     r   rG   zObjectIdentitySet._wrap_key   rH   r   c                 <    | j                  |      | j                  v S r
   )rG   rA   rE   s     r   __contains__zObjectIdentitySet.__contains__   s    >>#$--//r   c                 X    | j                   j                  | j                  |             y r
   )rA   discardrG   rE   s     r   r   zObjectIdentitySet.discard   s    MM$..-.r   c                 X    | j                   j                  | j                  |             y r
   )rA   addrG   rE   s     r   r   zObjectIdentitySet.add   s    MMdnnS)*r   c                 ~    | j                   j                  |D cg c]  }| j                  |       c}       y c c}w r
   )rA   updaterG   r   itemsrs   s      r   r   zObjectIdentitySet.update   s+    MM5A4$...ABAs   :c                 8    | j                   j                          y r
   )rA   clearr   s    r   r   zObjectIdentitySet.clear   s    MMr   c                 |    | j                   j                  |D cg c]  }| j                  |       c}      S c c}w r
   )rA   intersectionrG   r   s      r   r   zObjectIdentitySet.intersection   s.    ==%%&Nt~~d';&NOO&Ns   9c           
          t         j                  | j                  j                  |D cg c]  }| j	                  |       c}            S c c}w r
   )rf   rz   rA   
differencerG   r   s      r   r   zObjectIdentitySet.difference   s@    **  5!I4$.."6!IJL L!Is   Ac                 ,    t        | j                        S r
   rR   r   s    r   rT   zObjectIdentitySet.__len__   rU   r   c              #   `   K   t        | j                        }|D ]  }|j                    y wr
   )r`   rA   r   )r   rb   rF   s      r   rW   zObjectIdentitySet.__iter__   s-     D MMs   ,.N)r*   r,   r-   r.   r/   r   r   r   boolrt   rv   staticmethodrz   rG   r}   r   r   r   r   r   r   rT   rW   r1   r   r   rf   rf      s    >=))D#c( t #c( t   
'0/+CPLr   rf   c                   &    e Zd ZdZdZd Zd Zd Zy)ObjectIdentityWeakSetz5Like weakref.WeakSet, but compares objects with "is".r1   c                     t        |      S r
   r]   rE   s     r   rG   zObjectIdentityWeakSet._wrap_key   r^   r   c                 >    t        | D cg c]  }| c}      S c c}w r
   )rS   )r   _s     r   rT   zObjectIdentityWeakSet.__len__   s    4 a !! s   	c              #      K   t        | j                        }|D ]&  }|j                  }|| j                  |       #| ( y wr
   )r`   rA   r   r   rc   s       r   rW   zObjectIdentityWeakSet.__iter__  sC     D --i		Ss   AANrd   r1   r   r   r   r      s    =)+"r   r   )r.   collectionstypingr   r   r6   objectr   r3   r<   abcMutableMappingr@   r[   
MutableSetrf   r   r1   r   r   <module>r      s    @    -KV -K`	!7 	!& !H!@{== !@H&> ,A22 AH- r   