
    ,hi                       S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	K	J
r
  SS
K	Jr  SSK	Jr  SSK	Jr  SSK	Jr  SSKJr  \(       a$  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  S r " S S5      r " S S5      r " S S\5      r " S S5      r  " S S\\ 5      r! " S  S!\ 5      r" " S" S#\ 5      r# " S$ S%\ 5      r$ " S& S'\ 5      r% " S( S)\ 5      r& " S* S+\ 5      r'g,)-zThe internals for the unit of work system.

The session's flush() process passes objects to a contextual object
here, which assembles flush tasks based on mappers and their properties,
organizes them in order of dependency, and executes.

    )annotations)Any)Dict)Optional)Set)TYPE_CHECKING   
attributes)exc)util   )event)topological)DependencyProcessor)MapperProperty)Mapper)Session)SessionTransaction)InstanceStatec           	       ^ UR                   mU4S jnU4S jnU4S jn[        R                  " U SUSSS9  [        R                  " U SUSSSS9  [        R                  " U S	USSSS9  [        R                  " U S
USSSS9  g)zTEstablish event listeners on object attributes which handle
cascade-on-set/append.

c                  > Uc  g U R                   nU(       a  UR                  (       a  UR                  S5        U R                  R                  R
                  T   n[        R                  " U5      nUR                  R                  (       a7  TUR                  :X  a'  UR                  U5      (       d  UR                  U5        U$ )Nzcollection append)session_warn_on_events_flush_warningmanagermapper_propsr   instance_state_cascadesave_updatekey_contains_state_save_or_update_statestateitem	initiatorkwsessprop
item_stater"   s          Q/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.pyappend$track_cascade_events.<locals>.append2   s     <}}####$78==''..s3D#2248J ))IMM),,Z88**:6    c                @  > Uc  g U R                   nU R                  R                  R                  T   nU(       a5  UR                  (       a$  UR                  UR                  (       a  SOS5        Ub  U[        R                  La  U[        R                  La  UR                  R                  (       ag  [        R                  " U5      nUR                  R                  U5      (       a0  U(       a!  XdR                  ;   a  UR                  U5        g SUl        g g g g g g )Nzcollection removezrelated attribute deleteT)r   r   r   r   r   r   uselistr   	NEVER_SETPASSIVE_NO_RESULTr    delete_orphanr   
_is_orphan_newexpunge_orphaned_outside_of_sessionr%   s          r-   remove$track_cascade_events.<locals>.removeI   s    <}}}}##**3/D((<< $/ J000J888++ $2248J{{%%j11J))3LL& ?CJ; 2 , 9 1 r0   c                  > X!L a  U$ U R                   nU(       GaJ  UR                  (       a  UR                  S5        U R                  R                  R
                  T	   nUbh  [        R                  " U5      nUR                  R                  (       a7  T	UR                  :X  a'  UR                  U5      (       d  UR                  U5        Ub  U[        R                  La  U[        R                  Laq  UR                  R                  (       aV  [        R                  " U5      nXR                   ;   a1  UR                  R#                  U5      (       a  UR%                  U5        U$ )Nzrelated attribute set)r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r3   r4   r5   r7   r6   r8   )
r&   newvalueoldvaluer(   r)   r*   r+   newvalue_stateoldvalue_stater"   s
            r-   set_"track_cascade_events.<locals>.set_k   s    O}}####$;<==''..s3D#!+!:!:8!DMM--	- 00@@..~> $J$8$88J$@$@@MM// ",!:!:8!D!YY.4;;3I3I"4 4 LL*r0   append_wo_mutationT)rawinclude_keyr.   )rD   retvalrE   r:   setN)r"   r   listen)
descriptorr+   r.   r:   rA   r"   s        @r-   track_cascade_eventsrJ   +   s    
 ((C. CD"H 
LL(&d 
LLHf$t 
LLHf$t 
LLE4T$Dr0   c                  .   \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S
\S'   S S jr\S 5       rS rS r	S r
S r\R                  4S jrS rS r     S!             S"S jjrS rS r\R*                  S 5       rS rS rS rS#S jrS#S jrSrg)$UOWTransaction   r   r   r   transactionzDict[str, Any]r   z7util.defaultdict[Mapper[Any], Set[DependencyProcessor]]depsz6util.defaultdict[Mapper[Any], Set[InstanceState[Any]]]mappersc                   Xl         0 U l        [        R                  " [        5      U l        [        R                  " [        5      U l        0 U l        0 U l        [	        5       U l	        0 U l
        [        R                  " S 5      U l        g )Nc                 *    [        5       [        5       4$ N)rG    r0   r-   <lambda>)UOWTransaction.__init__.<locals>.<lambda>   s    CE35>r0   )r   r   r   defaultdictrG   rO   rP   presort_actionspostsort_actionsdependenciesstatespost_update_states)selfr   s     r-   __init__UOWTransaction.__init__   sw      $$S)	
 '',
  "
 !#  E
  #'"2"23I"Jr0   c                ,    [        U R                  5      $ rS   )boolr[   r]   s    r-   has_workUOWTransaction.has_work   s    DKK  r0   c                    UR                   (       a"   UR                  U[        R                  5        gg! [        R
                   a    U R                  R                  U/5         gf = f)zJReturn ``True`` if the given state is expired and was deleted
previously.
TF)expired_load_expiredr   PASSIVE_OFForm_excObjectDeletedErrorr   _remove_newly_deletedr]   r&   s     r-   was_already_deleted"UOWTransaction.was_already_deleted   sY     ==##E:+A+AB  -- 22E7;s    5 0A('A(c                P    XR                   ;   =(       a    U R                   U   S   $ )zSReturn ``True`` if the given state is marked as deleted
within this uowtransaction.r   r[   rl   s     r-   
is_deletedUOWTransaction.is_deleted   s$     #=E(:1(==r0   c                n    XR                   ;   a  U R                   U   $ U" 5       =U R                   U'   nU$ rS   r
   )r]   r"   	callable_rets       r-   memoUOWTransaction.memo   s5    //!??3'')24DOOC 3Jr0   c                J    U R                   U   S   nUS4U R                   U'   g)z;Remove pending actions for a state from the uowtransaction.r   TNrp   )r]   r&   isdeletes      r-   remove_state_actions#UOWTransaction.remove_state_actions   s*     ;;u%a(&-Er0   c                    SX4nX@R                   ;   a  U R                   U   u  pVnU[         R                  -  (       d  U[         R                  -  (       a  UR                  U   R                  nUR	                  UUR
                  [         R                  [         R                  -  [         R                  -  5      nU(       a"  UR                  (       a  UR                  5       nOUnXVU4U R                   U'   U$ UR                  U   R                  nUR	                  UUR
                  U[         R                  -  [         R                  -  5      nU(       a"  UR                  (       a  UR                  5       nOUnXVU4U R                   U'   U$ )zGFacade to attributes.get_state_history(), including
caching of results.history)r   SQL_OKr   implget_historydictrh   LOAD_AGAINST_COMMITTEDNO_RAISEuses_objectsas_state)	r]   r&   r"   passivehashkeyr}   state_historycached_passiver   s	            r-   get_attribute_history$UOWTransaction.get_attribute_history   sc    e) oo%59__W5M2GN
 #Z%6%66j///}}S)..**JJ** 778 ))* t00$+$4$4$6M$+M,3G+L($ ! ==%**D &&

334%%&G 4,, ' 0 0 2 '(/'HDOOG$r0   c                $    US4U R                   ;   $ )NT)rX   )r]   	processors     r-   has_depUOWTransaction.has_dep*  s    4 D$8$888r0   c                Z    X4nX0R                   ;  a  [        X5      U R                   U'   g g rS   )rX   
Preprocess)r]   r   
fromparentr"   s       r-   register_preprocessor$UOWTransaction.register_preprocessor-  s0    %***(29(ID  % +r0   Nc           	        U R                   R                  U5      (       dL  UR                  (       d:  Ub7  [        R                  " S[
        R                  " U5      < SU< SU< S35        gXR                  ;  ae  UR                  R                  nXpR                  ;  a  U R                  U5        U R                  U   R                  U5        X#4U R                  U'   gU(       d  U(       d  U(       a  US4U R                  U'   g)NzObject of type z not in session, z operation along 'z' will not proceedFT)r   r#   deletedr   warnorm_utilstate_class_strr[   r   r   rP   _per_mapper_flush_actionsadd)r]   r&   ry   listonlycancel_delete	operationr+   r   s           r-   register_objectUOWTransaction.register_object2  s     ||++E22 ==Y%:		  //6	4I
 #]]))F\\)..v6LL $$U+"*!5DKK  ]&.%6E"r0   c                    UR                   R                  R                  nU R                  U   u  pEUR	                  U5        UR                  U5        g rS   )r   r   base_mapperr\   r   update)r]   r&   post_update_colsr   r[   colss         r-   register_post_update#UOWTransaction.register_post_updateT  sB    %%11..v6

5$%r0   c                ^   [        XR                  5      n[        XR                  5      nU R                  R	                  X#45        UR
                   H  nUR                  U 5        M     UR                   H3  nUR                  (       a  M  UR                  nUR                  U 5        M5     g rS   )
SaveUpdateAllr   	DeleteAllrZ   r   _dependency_processorsper_property_preprocessorsrelationshipsviewonly_dependency_processor)r]   r   savesdeletesdepr+   s         r-   r   (UOWTransaction._per_mapper_flush_actionsZ  s    d$6$67D"4"45u./00C**40 1 ((D}},,C**40	 )r0   c                0    [         R                  " S 5      $ )zreturn a dynamic mapping of (Mapper, DependencyProcessor) to
True or False, indicating if the DependencyProcessor operates
on objects of that Mapper.

The result is stored in the dictionary persistently once
calculated.

c                v    U S   R                   R                  U S   R                  5      U S   R                  L $ )Nr   r	   )r   getr"   r+   )tups    r-   rU   0UOWTransaction._mapper_for_dep.<locals>.<lambda>s  s,    A))#a&**5QDr0   )r   PopulateDictrb   s    r-   _mapper_for_depUOWTransaction._mapper_for_deph  s       D
 	
r0   c                    U R                   nU Vs/ s H&  oCUR                  R                  U4   (       d  M$  UPM(     sn$ s  snf )z]Filter the given list of InstanceStates to those relevant to the
given DependencyProcessor.

)r   r   r   )r]   r   r[   mapper_for_depss        r-   filter_states_for_dep$UOWTransaction.filter_states_for_depv  s;    
 --!M6aQYY5E5Es4K%L6MMMs
   #AAc              #     #    X#4nUR                   R                   H2  nU R                  U    H  nU R                  U   U:X  d  M  Uv   M     M4     g 7frS   )r   self_and_descendantsrP   r[   )r]   r   ry   r   checktupr&   s         r-   states_for_mapper_hierarchy*UOWTransaction.states_for_mapper_hierarchy~  sL     '((==Ff-;;u%1K . >s   A AAc           	         Sn[        U R                  R                  5       5       H  nUR                  U 5      (       d  M  SnM     U(       d  OMP  [        R
                  " U R                  [        U R                  R                  5       5      5      =U l        nU(       GaP  U Vs0 s H  oD[        UR                  U 5      5      _M     nn[        U R                  5       GH  nSU;   d>  US   R                  (       d*  US   R                  (       d  UR                  U5      (       a  U R                  R                  U5        Me  US   U;   aJ  U R                  R                  U5        XVS       H"  nU R                  R                  XvS   45        M$     M  US   U;   d  M  U R                  R                  U5        XVS       H#  nU R                  R                  US   U45        M%     GM     U R                  R                  5        Vs1 s H  oR                  (       a  M  UiM     snR                  U5      $ s  snf s  snf )zmGenerate the full, unsorted collection of PostSortRecs as
well as dependency pairs for this UOWTransaction.

TFNr   r	   )listrX   valuesexecuter   find_cyclesrZ   rY   cyclesrG   per_state_flush_actionsdisabled
issupersetr:   r   
difference)	r]   ru   actionr   recconvertedger   as	            r-   _generate_actions UOWTransaction._generate_actions  s    Ct33::<=>>$''C >    +66tD$9$9$@$@$BC 
 	
f  HNGMS44T:;;v   T../DLAw''Aw''((..%%,,T2!W&%%,,T2&Aw/))--sGn=  0!W&%%,,T2&Aw/))--tAwn=  0 0$ ,,335
5!ZZA5

*V
	10
s   '$H?I'Ic                   U R                  5       n[        US S9nU R                  (       ag  [        R                  " U R
                  U5       HA  n[        U5      nU(       d  M  UR                  5       nUR                  X5        U(       a  M*  MC     g [        R                  " U R
                  U5       H  nUR                  U 5        M     g )Nc                    U R                   $ rS   )sort_key)r'   s    r-   rU   (UOWTransaction.execute.<locals>.<lambda>  s    T]]r0   )r"   )r   sortedr   r   sort_as_subsetsrZ   rG   popexecute_aggregatesortr   )r]   rY   subsetrA   nr   s         r-   r   UOWTransaction.execute  s    113!*
 ;;%55!!#3 6{d
A''3 d	 #''(9(9;KLD! Mr0   c                   U R                   (       d  g[        U R                   5      nU R                   R                  5        VVVs1 s H  u  nu  p4U(       d  M  UiM     nnnnUR                  U5      nU(       a  U R                  R                  U5        U(       a  U R                  R                  U5        ggs  snnnf )zMark processed objects as clean / deleted after a successful
flush().

This method is called within the flush() method after the
execute() method has succeeded and the transaction has been committed.

N)r[   rG   itemsr   r   rk   _register_persistent)r]   r[   r   ry   r   isdelothers          r-   finalize_flush_changes%UOWTransaction.finalize_flush_changes  s     {{T[[!/3{{/@/@/B
/B+1*xhA/B 	 
 !!%(LL..u5LL--e4 
s   B;B;)
r   r   rZ   rO   rP   r\   rY   rX   r   r[   )r   r   )FFFNN)r&   zInstanceState[Any]ry   ra   r   ra   r   ra   r   zOptional[str]r+   zOptional[MapperProperty]returnra   )r   None)__name__
__module____qualname____firstlineno____annotations__r^   propertyrc   rm   rq   rv   rz   r   PASSIVE_NO_INITIALIZEr   r   r   r   r   r   r   memoized_propertyr   r   r   r   r   r   __static_attributes__rT   r0   r-   rL   rL      s   ##
AACC+KZ ! !
>. #-"B"B3j9J ##')- !    	 
   !  '  
 D&1 

 
N 2h"65r0   rL   c                      \ rS rSrSrS rSrg)IterateMappersMixini  rT   c                   ^ ^ T R                   (       a4  [        U U4S jT R                  R                  R                   5       5      $ T R                  R
                  R                  $ )Nc              3  l   >#    U  H)  nTR                   UTR                  4   (       d  M%  Uv   M+     g 7frS   )r   dependency_processor).0mr]   uows     r-   	<genexpr>/IterateMappersMixin._mappers.<locals>.<genexpr>  s3      NA&&4+D+D'EF Ns   $4	4)r   iterr   parentr   r   r]   r   s   ``r-   _mappersIterateMappersMixin._mappers  sP    ?? 2299NN   ,,33HHHr0   N)r   r   r   r   	__slots__r  r   rT   r0   r-   r   r     s    IIr0   r   c                  $    \ rS rSrSrS rS rSrg)r   i  )r   r   	processedsetup_flush_actionsc                H    Xl         X l        [        5       U l        SU l        g NF)r   r   rG   r  r  )r]   r   r   s      r-   r^   Preprocess.__init__   s    $8!$#( r0   c                @   [        5       n[        5       nU R                  U5       Hw  nUR                  U   R                  U R                  5       HH  nUR
                  U   u  pgU(       a  M  U(       a  UR                  U5        M7  UR                  U5        MJ     My     U(       a6  U R                  R                  X5        U R                  R                  U5        U(       a6  U R                  R                  X5        U R                  R                  U5        U(       d  U(       av  U R                  (       dd  U R                  R                  XS5      (       d!  U R                  R                  XS5      (       a"  U R                  R                  U5        SU l        ggNTF)rG   r  rP   r   r  r[   r   r   presort_deletesr   presort_savesr  prop_has_changesper_property_flush_actions)r]   r   delete_statessave_statesr   r&   ry   r   s           r-   r   Preprocess.execute  s=   emmC(FV,77G'*zz%'8$x%))%0#. H ) %%55cINN!!-0%%33CENN!!+.K++))::  ,,==e  ))DDSI+/(r0   N)r   r   r   r   r  r^   r   r   rT   r0   r-   r   r     s    I)!r0   r   c                  $    \ rS rSrSrS rS rSrg)PostSortReci*  )r   c                    U 4U-   nX1R                   ;   a  UR                   U   $ [        R                  U 5      =UR                   U'   nSUl        U$ r	  )rY   object__new__r   )clsr   argsr"   ru   s        r-   r  PostSortRec.__new__-  sT    ftm&&&'',,.4nnS.AAC  % CLJr0   c                &    U R                  U5        g rS   )r   )r]   r   recss      r-   r   PostSortRec.execute_aggregate6  s    Sr0   rT   N)r   r   r   r   r  r  r   r   rT   r0   r-   r  r  *  s    Ir0   r  c                  6    \ rS rSrSrS rS rS rS rS r	Sr
g	)

ProcessAlli:  )r   ry   r   r   c                    X l         SU R                   R                  U4U l        X0l        X@l        UR                  UR
                  R                     R                  U5        g )Nr   )r   r   ry   r   rO   r   r   r   )r]   r   r   ry   r   s        r-   r^   ProcessAll.__init__=  sY    $8!%%..

 !$%,,889== 	
r0   c                    U R                  U5      nU R                  (       a  U R                  R                  X5        g U R                  R	                  X5        g rS   )	_elementsry   r   process_deletesprocess_saves)r]   r   r[   s      r-   r   ProcessAll.executeJ  s?    $==%%55cB%%33C@r0   c                    [        / 5      $ rS   )r   r  s     r-   r   "ProcessAll.per_state_flush_actionsQ  s    
 Bxr0   c                n    U R                   R                  < SU R                  < SU R                  < S3$ )N(z, isdelete=))	__class__r   r   ry   rb   s    r-   __repr__ProcessAll.__repr__X  s)    NN##%%MM
 	
r0   c              #     #    U R                  U5       HH  nUR                  U    H2  nUR                  U   u  pEX@R                  :X  d  M%  U(       a  M.  Uv   M4     MJ     g 7frS   )r  rP   r[   ry   )r]   r   r   r&   ry   r   s         r-   r$  ProcessAll._elements_  sO     mmC(FV,'*zz%'8$}},XXK - )s   AA!A!A!)r   r   ry   r   N)r   r   r   r   r  r^   r   r   r.  r$  r   rT   r0   r-   r   r   :  s!    LI
A
 r0   r   c                  N    \ rS rSrSrS r\R                  " S5      S 5       rSr	g)PostUpdateAllig  )r   ry   r   c                D    X l         X0l        SUR                  U4U l        g )Nr3  )r   ry   	_sort_keyr   )r]   r   r   ry   s       r-   r^   PostUpdateAll.__init__j  s      (&*:*:HEr0   sqlalchemy.orm.persistencec                   [         R                  R                  nUR                  U R                     u  p4U Vs/ s H&  oQR
                  U   S   U R                  :X  d  M$  UPM(     nnUR                  U R                  X1U5        g s  snf Nr   )r   	preloadedorm_persistencer\   r   r[   ry   post_update)r]   r   persistencer[   r   r   s         r-   r   PostUpdateAll.executeo  sm    nn44--dkk:#IVzz!}Q'74=='H!VIV$? Js   #B!B)ry   r   r   N)
r   r   r   r   r  r^   r   preload_moduler   r   rT   r0   r-   r3  r3  g  s/    0IF
 
56@ 7@r0   r3  c                  Z    \ rS rSrSrS r\R                  " S5      S 5       rS r	S r
Srg)	r   ix  r   r   c                V    X l         SUR                  4U l        X"R                  L d   eg )Nr   r   r5  r   r   r]   r   r   s      r-   r^   SaveUpdateAll.__init__{  s+    (&*:*:;+++++r0   r7  c                    [         R                  R                  R                  U R                  UR                  U R                  SS5      U5        g r	  )r   r:  r;  save_objr   r   r  s     r-   r   SaveUpdateAll.execute  s:    &&//KK++DKKF	
r0   c              #    #    [        UR                  U R                  SS5      5      nU R                  R                  n[	        X5      nU H.  n[        X5      nUR                  R                  Xd45        Uv   M0     UR                  U R                      H&  nUR                  Xr5      nUR                  XS5        M(     g 7fr	  )r   r   r   r   r   SaveUpdateStaterZ   r   rO   r   r   )	r]   r   r[   r   
delete_allr&   r   r   states_for_props	            r-   r   %SaveUpdateAll.per_state_flush_actions  s     ++DKKF
 kk--s0
E %S0F  &!56L  88DKK(C!77DO''eD )   C Cc                R    U R                   R                  < SU R                  < S3$ Nr+  r,  r-  r   r   rb   s    r-   r.  SaveUpdateAll.__repr__      >>22DKK@@r0   Nr   r   r   r   r  r^   r   r?  r   r   r.  r   rT   r0   r-   r   r   x  s8    &I,
 
56
 7
E"Ar0   r   c                  Z    \ rS rSrSrS r\R                  " S5      S 5       rS r	S r
Srg)	r   i  rA  c                V    X l         SUR                  4U l        X"R                  L d   eg )Nr   rC  rD  s      r-   r^   DeleteAll.__init__  s+    $f&6&67+++++r0   r7  c                    [         R                  R                  R                  U R                  UR                  U R                  SS5      U5        g r  )r   r:  r;  
delete_objr   r   r  s     r-   r   DeleteAll.execute  s:    &&11KK++DKKuE	
r0   c              #    #    [        UR                  U R                  SS5      5      nU R                  R                  n[	        X5      nU H.  n[        X5      nUR                  R                  XF45        Uv   M0     UR                  U R                      H&  nUR                  Xr5      nUR                  XS5        M(     g 7fr  )r   r   r   r   r   DeleteStaterZ   r   rO   r   r   )	r]   r   r[   r   save_allr&   r   r   rL  s	            r-   r   !DeleteAll.per_state_flush_actions  s     ++DKKuE
 kk-- 2E !,F  (!34L  88DKK(C!77DO''dC )rN  c                R    U R                   R                  < SU R                  < S3$ rP  rQ  rb   s    r-   r.  DeleteAll.__repr__  rS  r0   NrT  rT   r0   r-   r   r     s8    &I,
 
56
 7
D"Ar0   r   c                  *    \ rS rSrSrS rS rS rSrg)ProcessStatei  )r   ry   r&   r   c                N    X l         SUR                  4U l        X0l        X@l        g Nrb  )r   r   ry   r&   )r]   r   r   ry   r&   s        r-   r^   ProcessState.__init__  s%    $8!')=)F)FG 
r0   c                   U R                   nU R                  nU R                  nU Vs/ s H8  nUR                   UL d  M  UR                  UL d  M%  UR                  UL d  M6  UPM:     nnUR                  U5        U R                  /U Vs/ s H  ofR                  PM     sn-   nU(       a  UR                  X5        g UR                  X5        g s  snf s  snf rS   )r-  r   ry   difference_updater&   r%  r&  )	r]   r   r  cls_r   ry   rour_recsr[   s	            r-   r   ProcessState.execute_aggregate  s    ~~#88== 
{{d"  &&*>>  

h&	  	 
 	x(**( ;(Q( ;; 00= ..s;
 !<s   C CC"CCc                    U R                   R                  < SU R                  < S[        R                  " U R
                  5      < SU R                  < S3$ )Nr+  z, z	, delete=r,  )r-  r   r   r   	state_strr&   ry   rb   s    r-   r.  ProcessState.__repr__  s;    NN##%%tzz*MM	
 	
r0   )r   ry   r   r&   N)	r   r   r   r   r  r^   r   r.  r   rT   r0   r-   rb  rb    s    GI<$
r0   rb  c                  T    \ rS rSrSrS r\R                  " S5      S 5       rS r	Sr
g)	rJ  i  r&   r   r   c                    X l         UR                  R                  U l        SU R                  R                  4U l        g rd  r&   r   r   r5  r   r]   r   r&   s      r-   r^   SaveUpdateState.__init__  s.    
ll..')>)>?r0   r7  c                x   [         R                  R                  nU R                  nU R                  nU Vs/ s H&  ofR                  UL d  M  UR                  UL d  M$  UPM(     nnUR                  U5        UR                  XPR                  /U Vs/ s H  ofR                  PM     sn-   U5        g s  snf s  snf rS   )r   r:  r;  r-  r   rg  rG  r&   )r]   r   r  r=  rh  r   ri  rj  s           r-   r   !SaveUpdateState.execute_aggregate  s    nn44~~
!{{d2Aqxx67IAt 	 
 	x(ZZLX#>XGGX#>>	
	

 $?s   B2B2B2B7c                z    U R                   R                  < S[        R                  " U R                  5      < S3$ rP  r-  r   r   rm  r&   rb   s    r-   r.  SaveUpdateState.__repr__  +    NN##tzz*
 	
r0   r   r   r&   Nr   r   r   r   r  r^   r   r?  r   r.  r   rT   r0   r-   rJ  rJ    s2    -I@
 
56

 7


r0   rJ  c                  T    \ rS rSrSrS r\R                  " S5      S 5       rS r	Sr
g)	r\  i  rp  c                    X l         UR                  R                  U l        SU R                  R                  4U l        g )Nr\  rr  rs  s      r-   r^   DeleteState.__init__  s.    
ll..&(=(=>r0   r7  c                   [         R                  R                  nU R                  nU R                  nU Vs/ s H&  ofR                  UL d  M  UR                  UL d  M$  UPM(     nnUR                  U5        U R                  /U Vs/ s H  ofR                  PM     sn-   nUR                  XX V	s/ s H  oR                  U	   S   (       d  M  U	PM     sn	U5        g s  snf s  snf s  sn	f r9  )	r   r:  r;  r-  r   rg  r&   rY  r[   )
r]   r   r  r=  rh  r   ri  rj  r[   r   s
             r-   r   DeleteState.execute_aggregate
  s    nn44~~
!{{d2Aqxx67IAt 	 
 	x(**( ;(Q( ;;;1**Q-*:Q;S	

 !<;s#   CCCC"0C'
C'
c                z    U R                   R                  < S[        R                  " U R                  5      < S3$ rP  rx  rb   s    r-   r.  DeleteState.__repr__  rz  r0   r{  Nr|  rT   r0   r-   r\  r\    s1    -I?
 
56
 7

r0   r\  N)(__doc__
__future__r   typingr   r   r   r   r    r   r   ri   r   r   r   r   
dependencyr   
interfacesr   r   r   r   r   r   r&   r   rJ   rL   r   r   r  r   r3  r   r   rb  rJ  r\  rT   r0   r-   <module>r     s    #             /* +$odJ5 J5Z
I I/$ /d  * $k * Z@K @""AK "AJ"A "AJ!
; !
H
k 
8
+ 
r0   