o
    ïÅ[hÄ(  ã                   @   sl   d dl Z ddlmZ ddlmZ ddlmZ ddlmZ G dd„ deƒZG d	d
„ d
eƒZ	G dd„ deƒZ
dS )é    Né   )Ú
attributes)Úutilé   )Úexcc                   @   s¦   e Z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dd„ Zd(dd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ ZdS ))ÚIdentityMapc                 C   s   i | _ tƒ | _t | ¡| _d S ©N)Ú_dictÚsetÚ	_modifiedÚweakrefÚrefÚ_wr©Úself© r   ú~/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/sqlalchemy/orm/identity.pyÚ__init__   s   zIdentityMap.__init__c                 C   ó
   | j  ¡ S r   )r	   Úkeysr   r   r   r   r      ó   
zIdentityMap.keysc                 C   ó   t ƒ ‚r   ©ÚNotImplementedError©r   Ústater   r   r   Úreplace   ó   zIdentityMap.replacec                 C   r   r   r   r   r   r   r   Úadd   r   zIdentityMap.addc                 C   s   |   |¡ dS )zUoptional inlined form of add() which can assume item isn't present
        in the mapN)r   ©r   r   Úkeyr   r   r   Ú_add_unpresent   s   zIdentityMap._add_unpresentc                 C   ó   t dƒ‚©Nz%IdentityMap uses add() to insert datar   )r   Údict_r   r   r   Úupdate$   ó   zIdentityMap.updatec                 C   r"   ©Nz(IdentityMap uses remove() to remove datar   r   r   r   r   Úclear'   r&   zIdentityMap.clearc                 C   s"   | j |_|jr| j |¡ d S d S r   )r   Ú_instance_dictÚmodifiedr   r   r   r   r   r   Ú_manage_incoming_state*   s   ÿz"IdentityMap._manage_incoming_statec                 C   s   |` |jr| j |¡ d S d S r   )r)   r*   r   Údiscardr   r   r   r   Ú_manage_removed_state0   s   ÿz!IdentityMap._manage_removed_statec                 C   s   | j S r   )r   r   r   r   r   Ú_dirty_states5   r   zIdentityMap._dirty_statesc                 C   ó
   t | jƒS )z[return True if any InstanceStates present have been marked
        as 'modified'.

        )Úboolr   r   r   r   r   Úcheck_modified8   s   
zIdentityMap.check_modifiedc                 C   s   || v S r   r   ©r   r    r   r   r   Úhas_key?   r&   zIdentityMap.has_keyc                 C   r"   r'   r   r   r   r   r   ÚpopitemB   r&   zIdentityMap.popitemc                 G   r"   r'   r   )r   r    Úargsr   r   r   ÚpopE   r&   zIdentityMap.popNc                 C   r"   r#   r   ©r   r    Údefaultr   r   r   Ú
setdefaultH   r&   zIdentityMap.setdefaultc                 C   r/   r   )Úlenr	   r   r   r   r   Ú__len__K   r   zIdentityMap.__len__c                 C   r   r   r   r   r   r   r   ÚcopyN   r   zIdentityMap.copyc                 C   r"   r#   r   )r   r    Úvaluer   r   r   Ú__setitem__Q   r&   zIdentityMap.__setitem__c                 C   r"   r'   r   r2   r   r   r   Ú__delitem__T   r&   zIdentityMap.__delitem__r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r!   r%   r(   r+   r-   r.   r1   r3   r4   r6   r9   r;   r<   r>   r?   r   r   r   r   r      s(    
r   c                   @   sœ   e Z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ejr8dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ ZdS )%ÚWeakInstanceDictc                 C   s&   | j | }| ¡ }|d u rt|ƒ‚|S r   ©r	   ÚobjÚKeyError©r   r    r   Úor   r   r   Ú__getitem__Y   s
   
zWeakInstanceDict.__getitem__c                 C   sD   z|| j v r| j | }| ¡ }nW dS W |d uS  ty!   Y dS w ©NFrD   rG   r   r   r   Ú__contains__`   s   


þýÿzWeakInstanceDict.__contains__c                 C   s8   |j | jv rz	| j|j  |u W S  ty   Y dS w dS rJ   )r    r	   rF   r   r   r   r   Úcontains_statel   s   ÿzWeakInstanceDict.contains_statec                 C   sf   |j | jv r$z| j|j  }W n	 ty   Y nw ||ur"|  |¡ nd S d }|| j|j < |  |¡ |S r   )r    r	   rF   r-   r+   ©r   r   Úexistingr   r   r   r   u   s   þ
zWeakInstanceDict.replacec                 C   s‚   |j }|| jv r5z| j| }W n	 ty   Y nw ||ur3| ¡ }|d ur2t dt |¡|j f ¡‚ndS || j|< |  |¡ dS ©NzZCan't attach instance %s; another instance with key %s is already present in this session.FT)	r    r	   rF   rE   Úsa_excÚInvalidRequestErrorÚorm_utilÚ	state_strr+   )r   r   r    Zexisting_staterH   r   r   r   r   ˆ   s(   
þýÿÿ

zWeakInstanceDict.addc                 C   s   || j |< | j|_d S r   )r	   r   r)   r   r   r   r   r!   ¡   s   
zWeakInstanceDict._add_unpresentNc                 C   sL   || j vr|S z| j | }W n ty   | Y S w | ¡ }|d u r$|S |S r   )r	   rF   rE   )r   r    r8   r   rH   r   r   r   Úget¦   s   
þzWeakInstanceDict.getc                 C   s:   |   ¡ }g }|D ]}| ¡ }|d ur| |j|f¡ q|S r   )Ú
all_statesrE   Úappendr    ©r   ÚvaluesÚresultr   r=   r   r   r   Úitems´   s   €zWeakInstanceDict.itemsc                 C   s4   |   ¡ }g }|D ]}| ¡ }|d ur| |¡ q|S r   )rU   rE   rV   rW   r   r   r   rX   ½   s   
€zWeakInstanceDict.valuesc                 C   ó   t |  ¡ ƒS r   )Úiterr   r   r   r   r   Ú__iter__Ç   ó   zWeakInstanceDict.__iter__c                 C   r[   r   )r\   rZ   r   r   r   r   Ú	iteritemsÌ   r^   zWeakInstanceDict.iteritemsc                 C   r[   r   )r\   rX   r   r   r   r   Ú
itervaluesÏ   r^   zWeakInstanceDict.itervaluesc                 C   s   t jr| j ¡ S t| j ¡ ƒS r   )r   Úpy2kr	   rX   Úlistr   r   r   r   rU   Ò   s   
zWeakInstanceDict.all_statesc                 C   sF   z| j |j }W n
 ty   Y d S w ||u r!| j  |jd ¡ d S d S r   )r	   r    rF   r6   ©r   r   Ústr   r   r   Ú_fast_discardØ   s   þÿzWeakInstanceDict._fast_discardc                 C   ó   |   |¡ d S r   ©Úsafe_discardr   r   r   r   r,   ä   ó   zWeakInstanceDict.discardc                 C   s`   |j | jv r,z| j|j  }W n
 ty   Y d S w ||u r.| j |j d ¡ |  |¡ d S d S d S r   )r    r	   rF   r6   r-   rc   r   r   r   rh   ç   s   þ÷zWeakInstanceDict.safe_discardc                 C   s   dS )Nr   r   r   r   r   r   Úpruneó   s   zWeakInstanceDict.pruner   )r@   rA   rB   rI   rK   rL   r   r   r!   rT   rZ   rX   r]   r   ra   r_   r`   rU   re   r,   rh   rj   r   r   r   r   rC   X   s&    	
	
rC   c                   @   s    e Zd ZdZejr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S )&ÚStrongInstanceDicta&  A 'strong-referencing' version of the identity map.

    .. deprecated 1.1::
        The strong
        reference identity map is legacy.  See the
        recipe at :ref:`session_referencing_behavior` for
        an event-based approach to maintaining strong identity
        references.


    c                 C   r   r   )r	   r`   r   r   r   r   r`     r   zStrongInstanceDict.itervaluesc                 C   r   r   )r	   r_   r   r   r   r   r_   	  r   zStrongInstanceDict.iteritemsc                 C   r/   r   )r\   r$   r   r   r   r   r]     r   zStrongInstanceDict.__iter__c                 C   s
   | j | S r   ©r	   r2   r   r   r   rI     r   zStrongInstanceDict.__getitem__c                 C   s
   || j v S r   rl   r2   r   r   r   rK     r   zStrongInstanceDict.__contains__Nc                 C   s   | j  ||¡S r   )r	   rT   r7   r   r   r   rT     ri   zStrongInstanceDict.getc                 C   r   r   )r	   rX   r   r   r   r   rX     r   zStrongInstanceDict.valuesc                 C   r   r   )r	   rZ   r   r   r   r   rZ     r   zStrongInstanceDict.itemsc                 C   s   dd„ |   ¡ D ƒS )Nc                 S   s   g | ]}t  |¡‘qS r   )r   Úinstance_state)Ú.0rH   r   r   r   Ú
<listcomp>  s    z1StrongInstanceDict.all_states.<locals>.<listcomp>)rX   r   r   r   r   rU     s   zStrongInstanceDict.all_statesc                 C   s   |j | v ot | |j  ¡|u S r   )r    r   rm   r   r   r   r   rL   !  s   
þz!StrongInstanceDict.contains_statec                 C   s\   |j | jv r| j|j  }t |¡}||ur|  |¡ nd S d }| ¡ | j|j < |  |¡ |S r   )r    r	   r   rm   r-   rE   r+   rM   r   r   r   r   '  s   

zStrongInstanceDict.replacec                 C   s\   |j | v rt | j|j  ¡|urt dt |¡|j f ¡‚dS | ¡ | j|j < |  	|¡ dS rO   )
r    r   rm   r	   rP   rQ   rR   rS   rE   r+   r   r   r   r   r   6  s   
ýÿ
zStrongInstanceDict.addc                 C   s   |  ¡ | j|< | j|_d S r   )rE   r	   r   r)   r   r   r   r   r!   E  s   z!StrongInstanceDict._add_unpresentc                 C   sL   z| j |j }W n
 ty   Y d S w t |¡|u r$| j  |jd ¡ d S d S r   )r	   r    rF   r   rm   r6   )r   r   rE   r   r   r   re   J  s   þÿz StrongInstanceDict._fast_discardc                 C   rf   r   rg   r   r   r   r   r,   V  ri   zStrongInstanceDict.discardc                 C   sP   |j | jv r$| j|j  }t |¡}||u r&| j |j d ¡ |  |¡ d S d S d S r   )r    r	   r   rm   r6   r-   )r   r   rE   rd   r   r   r   rh   Y  s   
ûzStrongInstanceDict.safe_discardc                 C   sX   t | ƒ}dd„ |  ¡ D ƒ}t ¡ }| | ¡ | j ¡  | j |¡ t|ƒ| _|t | ƒ S )z%prune unreferenced, non-dirty states.c                 S   s   g | ]	}|j r| ¡ ‘qS r   )r*   rE   )rn   Úsr   r   r   ro   e  s    z,StrongInstanceDict.prune.<locals>.<listcomp>)	r:   rU   r   ÚWeakValueDictionaryr%   r	   r(   r0   r*   )r   Z	ref_countZdirtyZkeepersr   r   r   rj   a  s   


zStrongInstanceDict.pruner   )r@   rA   rB   Ú__doc__r   ra   r`   r_   r]   rI   rK   rT   rX   rZ   rU   rL   r   r   r!   re   r,   rh   rj   r   r   r   r   rk   ÷   s(    
rk   )r   Ú r   r   rR   r   rP   Úobjectr   rC   rk   r   r   r   r   Ú<module>   s   H  