
    hO%                    6   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 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 d dlmZ d dlZddlmZ ddlmZ erddlmZ ddlmZ  ede      Z ede      Z G d d      Z G d de      ZddZy)    )annotations)Any)cast)Dict)Iterable)Iterator)List)NoReturn)Optional)Set)Tuple)TYPE_CHECKING)TypeVarN   )util   )exc)_IdentityKeyType)InstanceState_T)bound_Oc                      e Zd ZU ded<   ded<   ded<   ddZddZdd	Zdd
Zd dZd!dZ	d"dZ
	 d#	 	 	 	 	 d$dZ	 	 	 	 d%dZd&dZd'dZd(dZddZd!dZ	 	 	 	 	 	 d)dZd!dZd!dZd*dZd+dZd dZd,dZy)-IdentityMapzweakref.ref[IdentityMap]_wrz Dict[_IdentityKeyType[Any], Any]_dictSet[InstanceState[Any]]	_modifiedc                d    i | _         t               | _        t        j                  |       | _        y N)r   setr   weakrefrefr   selfs    @D:\EasyAligner\venv\Lib\site-packages\sqlalchemy/orm/identity.py__init__zIdentityMap.__init__+   s"    
;;t$    c                    t         | _        y r    )_killed_add_unpresentr$   s    r&   _killzIdentityMap._kill0   s
    %r(   c                    t               r    NotImplementedErrorr$   s    r&   
all_stateszIdentityMap.all_states3       !##r(   c                    t               r    r.   r%   states     r&   contains_statezIdentityMap.contains_state6   r1   r(   c                    t               r    r.   r%   keys     r&   __contains__zIdentityMap.__contains__9   r1   r(   c                    t               r    r.   r3   s     r&   safe_discardzIdentityMap.safe_discard<   r1   r(   c                    t               r    r.   r7   s     r&   __getitem__zIdentityMap.__getitem__?   r1   r(   Nc                    t               r    r.   )r%   r8   defaults      r&   getzIdentityMap.getB        "##r(   c                    t               r    r.   r7   s     r&   fast_get_statezIdentityMap.fast_get_stateG   rA   r(   c                6    | j                   j                         S r    )r   keysr$   s    r&   rE   zIdentityMap.keysL   s    zz  r(   c                    t               r    r.   r$   s    r&   valueszIdentityMap.valuesO   r1   r(   c                    t               r    r.   r3   s     r&   replacezIdentityMap.replaceR   r1   r(   c                    t               r    r.   r3   s     r&   addzIdentityMap.addU   r1   r(   c                    t               r    r.   r3   s     r&   _fast_discardzIdentityMap._fast_discardX   r1   r(   c                &    | j                  |       y)zUoptional inlined form of add() which can assume item isn't present
        in the mapN)rK   r%   r4   r8   s      r&   r+   zIdentityMap._add_unpresent[   s    
 	r(   c                v    | j                   |_        |j                  r| j                  j	                  |       y y r    )r   _instance_dictmodifiedr   rK   r3   s     r&   _manage_incoming_statez"IdentityMap._manage_incoming_stateb   s,    #xx>>NNu% r(   c                X    |` |j                  r| j                  j                  |       y y r    )rQ   rR   r   discardr3   s     r&   _manage_removed_statez!IdentityMap._manage_removed_stateh   s&     >>NN""5) r(   c                    | j                   S r    )r   r$   s    r&   _dirty_stateszIdentityMap._dirty_statesm   s    ~~r(   c                ,    t        | j                        S )z[return True if any InstanceStates present have been marked
        as 'modified'.

        )boolr   r$   s    r&   check_modifiedzIdentityMap.check_modifiedp   s    
 DNN##r(   c                
    || v S r     r7   s     r&   has_keyzIdentityMap.has_keyw   s    d{r(   c                ,    t        | j                        S r    )lenr   r$   s    r&   __len__zIdentityMap.__len__z   s    4::r(   )returnNonerb   zList[InstanceState[Any]]r4   InstanceState[Any]rb   rZ   r8   _IdentityKeyType[Any]rb   rZ   r4   rf   rb   rc   r8   _IdentityKeyType[_O]rb   r   r    r8   rk   r?   Optional[_O]rb   rm   r8   rk   rb   Optional[InstanceState[_O]])rb   zIterable[_IdentityKeyType[Any]])rb   zIterable[object])r4   InstanceState[_O]rb   ro   r4   rf   r8   rh   rb   rc   )rb   r   )rb   rZ   )rb   int)__name__
__module____qualname____annotations__r'   r,   r0   r5   r9   r;   r=   r@   rC   rE   rG   rI   rK   rM   r+   rS   rV   rX   r[   r^   ra   r]   r(   r&   r   r   %   s    	!!++&&%
&$$$$$ BF$'$2>$	$
$'$	$$
!$$$$'.C	&*
$r(   r   c                      e Zd ZU ded<   ddZddZddZ	 	 	 	 ddZddZ	 	 	 	 	 	 ddZ		 	 	 	 dd	Z
	 d	 	 	 	 	 ddZddZddZddZddZddZddZddZy
) WeakInstanceDictz/Dict[_IdentityKeyType[Any], InstanceState[Any]]r   c                r    t        d| j                  |         }|j                         }|t        |      |S Nrp   )r   r   objKeyErrorr%   r8   r4   os       r&   r=   zWeakInstanceDict.__getitem__   s6    ($**S/:IIK93-r(   c                    	 || j                   v r | j                   |   }|j                         }ny	 |d uS # t        $ r Y yw xY wNF)r   r{   r|   r}   s       r&   r9   zWeakInstanceDict.__contains__   sS    		!djj 

3IIK  D=   		s   .6 	AAc                    |j                   | j                  v r0t        r|j                   J 	 | j                  |j                      |u S y# t        $ r Y yw xY wr   )r8   r   r   r|   r3   s     r&   r5   zWeakInstanceDict.contains_state   s[    99

"yy,,,zz%)),55   s   A
 
	AAc                2   |j                   J |j                   | j                  v r3	 | j                  |j                      x}}||ur| j                  |       ny d }|| j                  |j                   <   | j	                  |       |S # t        $ r d }Y 9w xY wr    )r8   r   rV   r|   rS   )r%   r4   existingexisting_non_nones       r&   rI   zWeakInstanceDict.replace   s     yy$$$99

"	 /3zz%))/DD,
 %E1../@AH %

599##E*    s   B BBc                ^   |j                   }|J || j                  v r`	 | j                  |   }||urK|j                         }|:t        j                  dt        j                  |      d|j                   d      y|| j                  |<   | j                  |       y# t        $ r Y ,w xY w)NzCan't attach instance z; another instance with key z$ is already present in this session.FT)	r8   r   r{   sa_excInvalidRequestErrororm_util	state_strr|   rS   )r%   r4   r8   existing_stater~   s        r&   rK   zWeakInstanceDict.add   s    ii$**!!%C
 ".&**,A}$88  (11%8%))E  !

3##E*#  s   B   	B,+B,c                D    || j                   |<   | j                  |_        y r    )r   r   rQ   rO   s      r&   r+   zWeakInstanceDict._add_unpresent   s      

3#xxr(   c                8    | j                   j                  |      S r    )r   r@   r7   s     r&   rC   zWeakInstanceDict.fast_get_state   s     zz~~c""r(   Nc                    || j                   vr|S 	 t        d| j                   |         }|j                         }||S |S # t        $ r |cY S w xY wrz   )r   r   r{   r|   )r%   r8   r?   r4   r~   s        r&   r@   zWeakInstanceDict.get   sa     djj N		,djjo>E
 		AyH  	N	s   A AAc                    | j                         }g }|D ]8  }|j                         }|j                  }|J |&|j                  ||f       : |S r    )r0   r{   r8   append)r%   rG   resultr4   valuer8   s         r&   itemszWeakInstanceDict.items   sX    "EIIKE))C?"? sEl+  r(   c                    | j                         }g }|D ]&  }|j                         }||j                  |       ( |S r    )r0   r{   r   )r%   rG   r   r4   r   s        r&   rG   zWeakInstanceDict.values   sA    "EIIKE e$ 
 r(   c                4    t        | j                               S r    )iterrE   r$   s    r&   __iter__zWeakInstanceDict.__iter__   s    DIIK  r(   c                H    t        | j                  j                               S r    )listr   rG   r$   s    r&   r0   zWeakInstanceDict.all_states  s    DJJ%%'((r(   c                    |j                   }|J 	 | j                  |   }||u r| j                  j                  |d        y y # t        $ r Y y w xY wr    )r8   r   popr|   r%   r4   r8   sts       r&   rM   zWeakInstanceDict._fast_discard  s]     ii	*CB
 U{

sD) 	  		s   A 	AAc                &    | j                  |       y r    )r;   r3   s     r&   rU   zWeakInstanceDict.discard  s    % r(   c                    |j                   }|| j                  v rG|J 	 | j                  |   }||u r.| j                  j                  |d        | j                  |       y y y # t        $ r Y y w xY wr    )r8   r   r   rV   r|   r   s       r&   r;   zWeakInstanceDict.safe_discard  sz    ii$**?"?6ZZ_
 ;JJNN3-..u5    s   A# #	A/.A/rj   rg   re   )r4   rf   rb   zOptional[InstanceState[Any]]rq   rn   r    rl   )rb   z6List[Tuple[_IdentityKeyType[Any], InstanceState[Any]]])rb   zList[object])rb   zIterator[_IdentityKeyType[Any]]rd   ri   )rs   rt   ru   rv   r=   r9   r5   rI   rK   r+   rC   r@   r   rG   r   r0   rM   rU   r;   r]   r(   r&   rx   rx   ~   s    ::
!	'	%,4('(.C(	(#'#	$# BF'2>	 	!)*!6r(   rx   c                \    t        j                  dt        j                  |       z  d      )NzObject %s cannot be converted to 'persistent' state, as this identity map is no longer valid.  Has the owning Session been closed?lkrp)code)r   r   r   r   )r4   r8   s     r&   r*   r*   &  s4     
$
$	!++E2	3 	 r(   )r4   rf   r8   rh   rb   r
   )
__future__r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r"    r   r   r   r   _typingr   r4   r   r   objectr   r   rx   r*   r]   r(   r&   <module>r      s{    #                )$ TT V Vre6{ e6Pr(   