
    Ǆg>+                        d dl mZ d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ eZg dZ G d d	ej                        Z G d
 dej                        Z G d de      ZeZ G d d      Zy)    )annotationsN)ref)_IterationGuard)MutableMappingMapping)Tensor)TensorWeakRef	WeakIdRefWeakIdKeyDictionaryWeakTensorKeyDictionaryc                  <     e Zd ZdgZd fd	Z fdZd Zd Z xZS )r
   _idc                F    t        |      | _        t        |   ||       y N)idr   super__init__selfkeycallback	__class__s      X/home/mcse/projects/flask_80/flask-venv/lib/python3.12/site-packages/torch/utils/weak.pyr   zWeakIdRef.__init__.   s     c7h'    c                \    t         |          }t        |d      r|j                          |S N_fix_weakrefr   __call__hasattrr   r   rr   s     r   r   zWeakIdRef.__call__7   )    G1n%NNr   c                    | j                   S r   r   r   s    r   __hash__zWeakIdRef.__hash__>       xxr   c                6     |        } |       }||||u S | |u S r    r   otherabs       r   __eq__zWeakIdRef.__eq__A   s.     FG=Q]6Mu}r   r   	__name__
__module____qualname__	__slots__r   r   r'   r/   __classcell__r   s   @r   r
   r
   +   s    I(r   r
   c                  <     e Zd ZdgZd fd	Z fdZd Zd Z xZS )_WeakHashRefr   c                F    t        |      | _        t        |   ||       y r   )hashr   r   r   r   s      r   r   z_WeakHashRef.__init__Y   s     9h'r   c                \    t         |          }t        |d      r|j                          |S r   r   r!   s     r   r   z_WeakHashRef.__call__b   r#   r   c                    | j                   S r   r%   r&   s    r   r'   z_WeakHashRef.__hash__i   r(   r   c                \     |        } |       }||t        |      t        |      k(  S | |u S r   )r:   r+   s       r   r/   z_WeakHashRef.__eq__l   s8     FG=Q]7d1g%%u}r   r   r0   r6   s   @r   r8   r8   V   s    I(r   r8   c                      e Zd ZdefdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZeZd ZddZd Zd Zd ZeZd Zd Zd Zd ZddZddZd Zd Zd Zd Zy)r   Nc                    i | _         || _        t        |       fd}|| _        g | _        t               | _        d| _        || j                  |       y y )Nc                     |       }|7|j                   r|j                  j                  |        y 	 |j                  | = y y # t        $ r Y y w xY wr   )
_iterating_pending_removalsappenddataKeyError)kselfrefr   s      r   removez,WeakIdKeyDictionary.__init__.<locals>.remove}   sS    9D??**11!4 IIaL   $ s   A 	AAF)	rD   ref_typer   _removerB   setrA   
_dirty_lenupdate)r   dictrI   rH   s       r   r   zWeakIdKeyDictionary.__init__x   sT    	 !$i 		 !#%KK r   c                    | j                   j                  }| j                  }	 	  |       }	 ||= # t        $ r Y y w xY w# t        $ r Y w xY wr   )rB   poprD   
IndexErrorrE   )r   rP   dr   s       r   _commit_removalsz$WeakIdKeyDictionary._commit_removals   se    
 $$((IIecF   
  s   1 A  	== 	AAc                |    | j                   }| j                  D cg c]	  }||v s| c}| _        d| _        y c c}w NF)rD   rB   rL   )r   rR   rF   s      r   _scrub_removalsz#WeakIdKeyDictionary._scrub_removals   s7    II-1-C-C!NqAv!!N "Os   	99c                J    d| _         | j                  | j                  |      = y NT)rL   rD   rI   r   r   s     r   __delitem__zWeakIdKeyDictionary.__delitem__   s    IIdmmC()r   c                >    | j                   | j                  |         S r   )rD   rI   rY   s     r   __getitem__zWeakIdKeyDictionary.__getitem__   s    yys+,,r   c                    | j                   r| j                  r| j                          t        | j                        t        | j                        z
  S r   )rL   rB   rV   lenrD   r&   s    r   __len__zWeakIdKeyDictionary.__len__   s=    ??t55   "499~D$:$: ;;;r   c                P    d| j                   j                   dt        |       ddS )N<z at z#x>)r   r1   r   r&   s    r   __repr__zWeakIdKeyDictionary.__repr__   s(    4>>**+44}A>>r   c                V    || j                   | j                  || j                        <   y r   )rD   rI   rJ   )r   r   values      r   __setitem__zWeakIdKeyDictionary.__setitem__   s    6;		$--T\\23r   c                    t               }t        |       5  | j                  j                         D ]  \  }} |       }||||<    	 d d d        |S # 1 sw Y   |S xY wr   )r   r   rD   items)r   newr   re   os        r   copyzWeakIdKeyDictionary.copy   sc    !#T" 	#"iioo/ #
UE="CF#	#
 
	#
 
s   *AAAc                    ddl m} | j                         }t        |       5  | j                  j                         D ]  \  }} |       }| |||      ||<    	 d d d        |S # 1 sw Y   |S xY w)Nr   )deepcopy)rk   rm   r   r   rD   rh   )r   memorm   ri   r   re   rj   s          r   __deepcopy__z WeakIdKeyDictionary.__deepcopy__   sq    !nnT" 	3"iioo/ 3
UE=%eT2CF3	3
 
	3
 
s   *A&A&&A0c                X    | j                   j                  | j                  |      |      S r   )rD   getrI   r   r   defaults      r   rq   zWeakIdKeyDictionary.get   s     yy}}T]]3/99r   c                `    	 | j                  |      }|| j                  v S # t        $ r Y yw xY wrU   )rI   	TypeErrorrD   )r   r   wrs      r   __contains__z WeakIdKeyDictionary.__contains__   s9    	s#B TYY  		s   ! 	--c              #     K   t        |       5  | j                  j                         D ]  \  }} |       }|||f  	 d d d        y # 1 sw Y   y xY wwr   r   rD   rh   )r   rv   re   r   s       r   rh   zWeakIdKeyDictionary.items   sV     T" 	%!YY__. %	Ed?u*$%	% 	% 	%s!   A*AA	AAAc              #     K   t        |       5  | j                  D ]  } |       }||  	 d d d        y # 1 sw Y   y xY wwr   )r   rD   )r   rv   objs      r   keyszWeakIdKeyDictionary.keys   sF     T" 	ii d?I	 	 	s   A88	AAAc              #     K   t        |       5  | j                  j                         D ]  \  }} |       |  	 d d d        y # 1 sw Y   y xY wwr   ry   )r   rv   re   s      r   valueszWeakIdKeyDictionary.values   sM     T" 	 !YY__.  	E4#K 	  	  	 s    A(AA	AAAc                ,    t        | j                        S )az  Return a list of weak references to the keys.

        The references are not guaranteed to be 'live' at the time
        they are used, so the result of calling the references needs
        to be checked before being used.  This can be used to avoid
        creating references that will cause the garbage collector to
        keep the keys around longer than needed.

        )listrD   r&   s    r   keyrefszWeakIdKeyDictionary.keyrefs   s     DIIr   c                h    d| _         	 | j                  j                         \  }} |       }|||fS +rX   )rL   rD   popitem)r   r   re   rj   s       r   r   zWeakIdKeyDictionary.popitem   s<    **,JCA}%x	 r   c                h    d| _          | j                  j                  | j                  |      g| S rX   )rL   rD   rP   rI   )r   r   argss      r   rP   zWeakIdKeyDictionary.pop  s,    tyy}}T]]3/7$77r   c                n    | j                   j                  | j                  || j                        |      S r   )rD   
setdefaultrI   rJ   rr   s      r   r   zWeakIdKeyDictionary.setdefault  s(    yy##DMM#t||$DgNNr   c                   | j                   }|Tt        |d      s t        i       |      }|j                         D ]$  \  }}||| j	                  || j
                        <   & t        |      r| j                  |       y y )Nrh   )rD   r    typerh   rI   rJ   r^   rM   )r   rN   kwargsrR   r   re   s         r   rM   zWeakIdKeyDictionary.update
  st    II4)tBx~"jjl <
U6;$--T\\23<v;KK r   c                (    | j                  |       | S r   )rM   )r   r,   s     r   __ior__zWeakIdKeyDictionary.__ior__  s    Er   c                    t        |t        j                        r#| j                         }|j	                  |       |S t
        S r   )
isinstance_collections_abcr   rk   rM   NotImplementedr   r,   cs      r   __or__zWeakIdKeyDictionary.__or__  s4    e-556		AHHUOHr   c                    t        |t        j                        r4| j                         }|j	                  |       |j	                  |        |S t
        S r   )r   r   r   r   rM   r   r   s      r   __ror__zWeakIdKeyDictionary.__ror__  s@    e-556 AHHUOHHTNHr   c                    t        |t              st        S | j                         D ci c]  \  }}t	        |      | c}}|j                         D ci c]  \  }}t	        |      | c}}k(  S c c}}w c c}}w r   )r   r   r   rh   r   )r   r,   rF   vs       r   r/   zWeakIdKeyDictionary.__eq__)  s]    %)!!%)ZZ\2TQ1q2EKKM6ZDAqr!uax6ZZZ26Zs   A2A8r   )r1   r2   r3   r
   r   rS   rV   rZ   r\   r_   rc   rf   rk   __copy__ro   rq   rw   rh   r|   __iter__r~   r   r   rP   r   rM   r   r   r   r/   r*   r   r   r   r   w   s     9 .$ 
*-<?< H:% H 
 8O [r   r   c                  *    e Zd ZU dZded<   ddZd Zy)r	   zuWrapper around a weak ref of a Tensor that handles the _fix_weakref() call required when unwrapping a Tensor weakref.zWeakRef[Tensor]r   c                \    t        |t              sJ t        j                  |      | _        y r   )r   r   weakrefr   )r   tensors     r   r   zTensorWeakRef.__init__7  s"    &&)));;v&r   c                r    | j                         }||S t        |t              sJ |j                          |S r   )r   r   r   r   )r   outs     r   r   zTensorWeakRef.__call__;  s8    hhj;J#v&&&
r   N)r   r   )r1   r2   r3   __doc____annotations__r   r   r*   r   r   r	   r	   2  s    	'r   r	   )
__future__r   r   r   _weakrefsetr   collections.abcr   r   torchr   abcr   WeakRef__all__r
   r8   r   r   r	   r*   r   r   <module>r      sn    "   ' 3  *  [8' 'V7;; Bu[. u[p .  r   