
    [hi                       d 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 er$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 Z G d d          Z G d d          Z G d de          Z G d d          Z  G d dee           Z! G d  d!e           Z" G d" d#e           Z# G d$ d%e           Z$ G d& d'e           Z% G d( d)e           Z& G d* d+e           Z'd,S )-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                   |j         fd}fd}fd}t          j        | d|dd           t          j        | d|ddd           t          j        | d	|ddd           t          j        | d
|ddd           dS )z\Establish event listeners on object attributes which handle
    cascade-on-set/append.

    c                2   |d S | j         }|r|j        r|                    d           | j        j        j                 }t          j        |          }|j        j	        r5|j
        k    r*|                    |          s|                    |           |S )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          h/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/orm/unitofwork.pyappendz$track_cascade_events.<locals>.append2   s     <F} 	7# 9##$7888='.s3D#2488J )7IM)),,Z88 * **:666    c                   |d S | j         }| j        j        j                 }|r%|j        r|                    |j        rdnd           ||t          j        uru|t          j	        uri|j
        j        r_t          j        |          }|j                            |          r3|r ||j        v r|                    |           d S d|_        d S d S d S d S d S d S )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-   removez$track_cascade_events.<locals>.removeI   s#   <F}}#*3/ 	D( 	<0##/   J000J888+ 9 $2488J{%%j11 C CJ$)33LL&&&&& ?CJ;;;! 008888C Cr/   c                (   ||u r|S | j         }|r |j        r|                    d           | j        j        j        	         }|Ut          j        |          }|j        j	        r5	|j
        k    r*|                    |          s|                    |           |t|t          j        urf|t          j        urX|j        j        rLt          j        |          }||j        v r/|j                            |          r|                    |           |S )Nzrelated attribute set)r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r2   r3   r4   r6   r5   r7   )
r&   newvalueoldvaluer(   r)   r*   r+   newvalue_stateoldvalue_stater"   s
            r-   set_z"track_cascade_events.<locals>.set_k   s6    xO} 	+# =##$;<<<='.s3D#!+!:8!D!DM-?	-- 00@@ . ..~>>> $J$888J$@@@M/ A ",!:8!D!D!TY..4;3I3I"4 4. LL***r/   append_wo_mutationT)rawinclude_keyr.   )rA   retvalrB   r9   setN)r"   r   listen)
descriptorr+   r.   r9   r?   r"   s        @r-   track_cascade_eventsrG   +   s   
 (C    . C  C  C  C  CD" " " " "H 
L(&d    
LHf$t    
LHf$t    
LE4T$D     r/   c                      e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   d+dZed             Zd Zd Zd Z	d Z
ej        fdZd Zd Z	 	 	 	 	 d,d-d!Zd" Zd# Zej        d$             Zd% Zd& Zd' Zd.d)Zd.d*ZdS )/UOWTransactionr   r   r   transactionzDict[str, Any]r   z7util.defaultdict[Mapper[Any], Set[DependencyProcessor]]depsz6util.defaultdict[Mapper[Any], Set[InstanceState[Any]]]mappersc                   || _         i | _        t          j        t                    | _        t          j        t                    | _        i | _        i | _        t	                      | _	        i | _
        t          j        d           | _        d S )Nc                 :    t                      t                      fS N)rD    r/   r-   <lambda>z)UOWTransaction.__init__.<locals>.<lambda>   s    CEE355> r/   )r   r   r   defaultdictrD   rK   rL   presort_actionspostsort_actionsdependenciesstatespost_update_states)selfr   s     r-   __init__zUOWTransaction.__init__   s      $S))	
 ',,
  "
 !#  EE
  #'"23I3I"J"Jr/   c                *    t          | j                  S rO   )boolrV   rX   s    r-   has_workzUOWTransaction.has_work   s    DK   r/   c                    |j         rS	 |                    |t          j                   n1# t          j        $ r | j                            |g           Y dS w xY wdS )zZReturn ``True`` if the given state is expired and was deleted
        previously.
        TF)expired_load_expiredr   PASSIVE_OFForm_excObjectDeletedErrorr   _remove_newly_deletedrX   r&   s     r-   was_already_deletedz"UOWTransaction.was_already_deleted   ss     = 	##E:+ABBBB-   22E7;;;tt us    * *AAc                :    || j         v o| j         |         d         S )z[Return ``True`` if the given state is marked as deleted
        within this uowtransaction.r   rV   re   s     r-   
is_deletedzUOWTransaction.is_deleted   s"     #=E(:1(==r/   c                Z    || j         v r| j         |         S  |            x| j         |<   }|S rO   r
   )rX   r"   	callable_rets       r-   memozUOWTransaction.memo   s8    $/!!?3'')24DOC 3Jr/   c                D    | j         |         d         }|df| j         |<   dS )z;Remove pending actions for a state from the uowtransaction.r   TNrh   )rX   r&   isdeletes      r-   remove_state_actionsz#UOWTransaction.remove_state_actions   s,     ;u%a(&-Er/   c                j   d||f}|| j         v r| j         |         \  }}}|t           j        z  s|t           j        z  r|j        |         j        }|                    ||j        t           j        t           j        z  t           j        z            }|r|j	        r|
                                }n|}|||f| j         |<   nu|j        |         j        }|                    ||j        |t           j        z  t           j        z            }|r|j	        r|
                                }n|}|||f| j         |<   |S )zOFacade to attributes.get_state_history(), including
        caching of results.history)r   SQL_OKr   implget_historydictra   LOAD_AGAINST_COMMITTEDNO_RAISEuses_objectsas_state)	rX   r&   r"   passivehashkeyrr   state_historycached_passivert   s	            r-   get_attribute_historyz$UOWTransaction.get_attribute_history   sl    eS) do%%59_W5M2G]N
 #Z%66Mj//M }S).**J* 78 )*   ,t0 ,$+$4$4$6$6MM$+M,3]G+L(=%*D &&
34%& G  (4, ( ' 0 0 2 2 '(/'HDOG$r/   c                    |df| j         v S )NT)rS   )rX   	processors     r-   has_depzUOWTransaction.has_dep*  s    4 D$888r/   c                T    ||f}|| j         vrt          ||          | j         |<   d S d S rO   )rS   
Preprocess)rX   r   
fromparentr"   s       r-   register_preprocessorz$UOWTransaction.register_preprocessor-  s?    *%d***(29j(I(ID %%% +*r/   FNr&   InstanceState[Any]ro   r[   listonlycancel_delete	operationOptional[str]r+   Optional[MapperProperty]returnc           	        | j                             |          s;|j        s2|0t          j        dt          j        |          d|d|d           dS || j        vrW|j        j	        }|| j
        vr|                     |           | j
        |                             |           ||f| j        |<   n|s|s|r|df| j        |<   dS )NzObject of type z not in session, z operation along 'z' will not proceedFT)r   r#   deletedr   warnorm_utilstate_class_strrV   r   r   rL   _per_mapper_flush_actionsadd)rX   r&   ro   r   r   r   r+   r   s           r-   register_objectzUOWTransaction.register_object2  s    |++E22 
	 = Y%:		  /6666			444I  
 5##])FT\))..v666L $$U+++"*H!5DK 7 7] 7&.%6E"tr/   c                    |j         j        j        }| j        |         \  }}|                    |           |                    |           d S rO   )r   r   base_mapperrW   r   update)rX   r&   post_update_colsr   rV   colss         r-   register_post_updatez#UOWTransaction.register_post_updateT  sK    %1.v6

5$%%%%%r/   c                ,   t          | |j                  }t          | |j                  }| j                            ||f           |j        D ]}|                    |            |j        D ]&}|j        r
|j	        }|                    |            'd S rO   )
SaveUpdateAllr   	DeleteAllrU   r   _dependency_processorsper_property_preprocessorsrelationshipsviewonly_dependency_processor)rX   r   savesdeletesdepr+   s         r-   r   z(UOWTransaction._per_mapper_flush_actionsZ  s    dF$677D&"455ug.///0 	1 	1C**40000( 	1 	1D} ,C**40000		1 	1r/   c                ,    t          j        d           S )a  return 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                r    | d         j                             | d         j                  | d         j        u S )Nr   r	   )r   getr"   r+   )tups    r-   rQ   z0UOWTransaction._mapper_for_dep.<locals>.<lambda>s  s+    A))#a&*55QD r/   )r   PopulateDictr\   s    r-   _mapper_for_depzUOWTransaction._mapper_for_deph  s      DD
 
 	
r/   c                2    | j         fd|D             S )zmFilter the given list of InstanceStates to those relevant to the
        given DependencyProcessor.

        c                <    g | ]}|j         j        f         |S rP   )r   r   ).0sr   mapper_for_deps     r-   
<listcomp>z8UOWTransaction.filter_states_for_dep.<locals>.<listcomp>|  s-    MMMa^QY5Es4K%LMMMMr/   )r   )rX   r   rV   r   s    ` @r-   filter_states_for_depz$UOWTransaction.filter_states_for_depv  s+    
 -MMMMM6MMMMr/   c              #  z   K   ||f}|j         j        D ]'}| j        |         D ]}| j        |         |k    r|V  (d S rO   )r   self_and_descendantsrL   rV   )rX   r   ro   r   checktupr&   s         r-   states_for_mapper_hierarchyz*UOWTransaction.states_for_mapper_hierarchy~  sf      h'(= 	  	 Ff-    ;u%11KKK 	  	 r/   c                    	 d}t           j                                                  D ]}|                               rd}|snFt	          j         j        t           j                                                            x _        }|r$ fd|D             }t           j                  D ] }d|v s/|d         j	        s"|d         j	        s|
                    |          r j                            |           Q|d         |v rN j                            |           ||d                  D ]$} j                            ||d         f           %|d         |v rM j                            |           ||d                  D ]$} j                            |d         |f           %d  j                                        D                                 |          S )z}Generate the full, unsorted collection of PostSortRecs as
        well as dependency pairs for this UOWTransaction.

        TFc                V    i | ]%}|t          |                                        &S rP   )rD   per_state_flush_actions)r   recrX   s     r-   
<dictcomp>z4UOWTransaction._generate_actions.<locals>.<dictcomp>  s>       @CS44T::;;  r/   Nr   r	   c                     h | ]}|j         	|S rP   disabled)r   as     r-   	<setcomp>z3UOWTransaction._generate_actions.<locals>.<setcomp>  s/     
 
 
QZ

 
 
r/   )listrS   valuesexecuter   find_cyclesrU   rT   cyclesr   
issupersetr9   r   
difference)rX   rl   actionr   convertedger   s   `      r-   _generate_actionsz UOWTransaction._generate_actions  sE   	Ct3::<<==  >>$'' C 	  +6tD$9$@$@$B$BCC 
  
 	
f  	>   GM  G T.// > >DLLAw' !Aw' ! ((.. !
 %,,T2222!W&&%,,T222&tAw/ > >)--sDGn====>!W&&%,,T222&tAw/ > >)--tAwn====
 
,3355
 
 

*V

	r/   Nonec                |   |                                  }t          |d           }| j        r\t          j        | j        |          D ]?}t          |          }|r,|                                }|                    | |           |,@d S t          j	        | j        |          D ]}|
                    |            d S )Nc                    | j         S rO   )sort_key)r'   s    r-   rQ   z(UOWTransaction.execute.<locals>.<lambda>  s    T] r/   )r"   )r   sortedr   r   sort_as_subsetsrU   rD   popexecute_aggregatesortr   )rX   rT   subsetr?   nr   s         r-   r   zUOWTransaction.execute  s    1133!**
 
 
 ; 
	"%5!#3  4 4 6{{ 4

A''d333  4	4 4 #'(9;KLL " "D!!!!" "r/   c                $   | j         sdS t          | j                   }d | j                                         D             }|                    |          }|r| j                            |           |r| j                            |           dS dS )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.

        Nc                "    h | ]\  }\  }}|
|S rP   rP   )r   r   ro   r   s       r-   r   z8UOWTransaction.finalize_flush_changes.<locals>.<setcomp>  s6     
 
 
+1*xh

 
 
r/   )rV   rD   itemsr   r   rd   _register_persistent)rX   rV   isdelothers       r-   finalize_flush_changesz%UOWTransaction.finalize_flush_changes  s     { 	FT[!!
 
/3{/@/@/B/B
 
 
 !!%(( 	6L..u555 	5L--e44444	5 	5r/   )r   r   )FFFNN)r&   r   ro   r[   r   r[   r   r[   r   r   r+   r   r   r[   )r   r   )__name__
__module____qualname____annotations__rY   propertyr]   rf   ri   rm   rp   r   PASSIVE_NO_INITIALIZEr   r   r   r   r   r   r   memoized_propertyr   r   r   r   r   r   rP   r/   r-   rI   rI      s        ####AAAACCCC+K +K +K +KZ ! ! X!
 
 
> > >  . . . #-"B3 3 3 3j9 9 9J J J ##')-         D& & &1 1 1 

 
 
N N N     2 2 2h" " " "65 5 5 5 5 5r/   rI   c                      e Zd ZdZd ZdS )IterateMappersMixinrP   c                      j         r+t           fd j        j        j        D                       S  j        j        j        S )Nc              3  D   K   | ]}j         |j        f         |V  d S rO   )r   dependency_processor)r   mrX   uows     r-   	<genexpr>z/IterateMappersMixin._mappers.<locals>.<genexpr>  sM        &4+D'EF     r/   )r   iterr   parentr   r   rX   r   s   ``r-   _mapperszIterateMappersMixin._mappers  sf    ? 	I     29N      ,3HHr/   N)r   r   r   	__slots__r   rP   r/   r-   r   r     s-        II I I I Ir/   r   c                      e Zd ZdZd Zd ZdS )r   )r   r   	processedsetup_flush_actionsc                V    || _         || _        t                      | _        d| _        d S NF)r   r   rD   r   r   )rX   r   r   s      r-   rY   zPreprocess.__init__   s*    $8!$#(   r/   c                   t                      }t                      }|                     |          D ]i}|j        |                             | j                  D ]A}|j        |         \  }}|s-|r|                    |           ,|                    |           Bj|r5| j                            ||           | j        	                    |           |r5| j        
                    ||           | j        	                    |           |s|rb| j        sY| j                            ||d          s| j                            ||d          r!| j                            |           d| _        dS dS NTF)rD   r   rL   r   r   rV   r   r   presort_deletesr   presort_savesr   prop_has_changesper_property_flush_actions)rX   r   delete_statessave_statesr   r&   ro   r   s           r-   r   zPreprocess.execute  s   eemmC(( 	/ 	/FV,77GG / /'*z%'8$8 / /%))%0000#.../  	1%55c=IIIN!!-000 	/%33CEEEN!!+... 	K 	+ 	0):: 	0 ,==e 		0 )DDSIII+/(45r/   N)r   r   r   r   rY   r   rP   r/   r-   r   r     s9        I) ) )! ! ! ! !r/   r   c                      e Zd ZdZd Zd ZdS )PostSortRecr   c                    | f|z   }||j         v r|j         |         S t                              |           x|j         |<   }d|_        |S r   )rT   object__new__r   )clsr   argsr"   rl   s        r-   r  zPostSortRec.__new__-  sS    ftm#&&&',,.4nnS.A.AAC % CLJr/   c                0    |                      |           d S rO   )r   )rX   r   recss      r-   r   zPostSortRec.execute_aggregate6  s    Sr/   N)r   r   r   r   r  r   rP   r/   r-   r  r  *  s7        I      r/   r  c                  0    e Zd ZdZd Zd Zd Zd Zd ZdS )
ProcessAll)r   ro   r   r   c                    || _         d| j         j        |f| _        || _        || _        |j        |j        j                                     |           d S )Nr
  )r   r   ro   r   rK   r   r   r   )rX   r   r   ro   r   s        r-   rY   zProcessAll.__init__=  se    $8!%.

 !$%,89== 	
 	
 	
 	
 	
r/   c                    |                      |          }| j        r| j                            ||           d S | j                            ||           d S rO   )	_elementsro   r   process_deletesprocess_saves)rX   r   rV   s      r-   r   zProcessAll.executeJ  s\    $$= 	A%55c6BBBBB%33C@@@@@r/   c                     t          g           S rO   )r   r   s     r-   r   z"ProcessAll.per_state_flush_actionsQ  s    
 Bxxr/   c                @    | j         j        d| j        d| j        dS )N(z, isdelete=))	__class__r   r   ro   r\   s    r-   __repr__zProcessAll.__repr__X  s/    N###%%%MMM
 	
r/   c              #     K   |                      |          D ]3}|j        |         D ]#}|j        |         \  }}|| j        k    r|s|V  $4d S rO   )r   rL   rV   ro   )rX   r   r   r&   ro   r   s         r-   r  zProcessAll._elements_  ss      mmC(( 	  	 FV,    '*z%'8$8t},,X,KKK 	  	 r/   N)	r   r   r   r   rY   r   r   r  r  rP   r/   r-   r
  r
  :  sg        LI
 
 
A A A  
 
 
         r/   r
  c                  J    e Zd ZdZd Z ej        d          d             ZdS )PostUpdateAll)r   ro   r   c                @    || _         || _        d|j        |f| _        d S )Nr  )r   ro   	_sort_keyr   )rX   r   r   ro   s       r-   rY   zPostUpdateAll.__init__j  s%     (&*:HEr/   sqlalchemy.orm.persistencec                     t           j        j        }j         j                 \  }} fd|D             }|                     j        ||           d S )Nc                L    g | ] }j         |         d          j        k    |!S r   )rV   ro   )r   r   rX   r   s     r-   r   z)PostUpdateAll.execute.<locals>.<listcomp>s  s0    IIIsz!}Q'74='H'H!'H'H'Hr/   )r   	preloadedorm_persistencerW   r   post_update)rX   r   persistencerV   r   s   ``   r-   r   zPostUpdateAll.executeo  s_    n4-dk:IIIIIVIIIVS$?????r/   N)r   r   r   r   rY   r   preload_moduler   rP   r/   r-   r  r  g  sZ        0IF F F
 T566@ @ 76@ @ @r/   r  c                  V    e Zd ZdZd Z ej        d          d             Zd Zd Z	dS )r   r   r   c                F    || _         d|j        f| _        ||j        u sJ d S )Nr   r   r  r   r   rX   r   r   s      r-   rY   zSaveUpdateAll.__init__{  s2    (&*:;+++++++r/   r  c                    t           j        j                            | j        |                    | j        dd          |           d S r   )r   r  r   save_objr   r   r   s     r-   r   zSaveUpdateAll.execute  sH    &//K++DKFF	
 	
 	
 	
 	
r/   c              #    K   t          |                    | j        dd                    }| j        j        }t	          ||          }|D ]2}t          ||          }|j                            ||f           |V  3|j        | j                 D ]/}|	                    ||          }|
                    ||d           0d S r   )r   r   r   r   r   SaveUpdateStaterU   r   rK   r   r   )	rX   r   rV   r   
delete_allr&   r   r   states_for_props	            r-   r   z%SaveUpdateAll.per_state_flush_actions  s      ++DKFF
 
 k-sK00
 	 	E %S%00F  &*!5666LLLL8DK( 	E 	EC!77VDDO''_eDDDD	E 	Er/   c                0    | j         j        d| j        dS Nr  r  r  r   r   r\   s    r-   r  zSaveUpdateAll.__repr__      >222DKKK@@r/   N
r   r   r   r   rY   r   r#  r   r   r  rP   r/   r-   r   r   x  sx        &I, , ,
 T566
 
 76
E E E"A A A A Ar/   r   c                  V    e Zd ZdZd Z ej        d          d             Zd Zd Z	dS )r   r%  c                F    || _         d|j        f| _        ||j        u sJ d S )Nr   r'  r(  s      r-   rY   zDeleteAll.__init__  s2    $f&67+++++++r/   r  c                    t           j        j                            | j        |                    | j        dd          |           d S r   )r   r  r   
delete_objr   r   r   s     r-   r   zDeleteAll.execute  sH    &11K++DKuEE	
 	
 	
 	
 	
r/   c              #    K   t          |                    | j        dd                    }| j        j        }t	          ||          }|D ]2}t          ||          }|j                            ||f           |V  3|j        | j                 D ]/}|	                    ||          }|
                    ||d           0d S r   )r   r   r   r   r   DeleteStaterU   r   rK   r   r   )	rX   r   rV   r   save_allr&   r   r   r.  s	            r-   r   z!DeleteAll.per_state_flush_actions  s      ++DKuEE
 
 k- k22 	 	E !e,,F  (F!3444LLLL8DK( 	D 	DC!77VDDO''_dCCCC	D 	Dr/   c                0    | j         j        d| j        dS r0  r1  r\   s    r-   r  zDeleteAll.__repr__  r2  r/   Nr3  rP   r/   r-   r   r     sx        &I, , ,
 T566
 
 76
D D D"A A A A Ar/   r   c                  $    e Zd ZdZd Zd Zd ZdS )ProcessState)r   ro   r&   r   c                L    || _         d|j        f| _        || _        || _        d S Nr=  )r   r   ro   r&   )rX   r   r   ro   r&   s        r-   rY   zProcessState.__init__  s,    $8!')=)FG 


r/   c                
   | j         | j        | j        fd|D             }|                    |           | j        gd |D             z   }r                    ||           d S                     ||           d S )Nc                J    g | ]}|j         u r|j        u r|j        u | S rP   )r  r   ro   )r   rcls_r   ro   s     r-   r   z2ProcessState.execute_aggregate.<locals>.<listcomp>  sN     
 
 
{d""&*>>>
h&&	  '&&r/   c                    g | ]	}|j         
S rP   r&   r   rB  s     r-   r   z2ProcessState.execute_aggregate.<locals>.<listcomp>       ; ; ;Q ; ; ;r/   )r  r   ro   difference_updater&   r  r  )rX   r   r  our_recsrV   rC  r   ro   s        @@@r-   r   zProcessState.execute_aggregate  s    ~#8=
 
 
 
 
 

 
 
 	x(((* ; ;( ; ; ;; 	< 00f===== ..sF;;;;;r/   c                t    | j         j        d| j        dt          j        | j                  d| j        dS )Nr  z, z	, delete=r  )r  r   r   r   	state_strr&   ro   r\   s    r-   r  zProcessState.__repr__  sE    N###%%%tz****MMM	
 	
r/   N)r   r   r   r   rY   r   r  rP   r/   r-   r=  r=    sF        GI  < < <$
 
 
 
 
r/   r=  c                  P    e Zd ZdZd Z ej        d          d             Zd ZdS )r,  r&   r   r   c                \    || _         |j        j        | _        d| j        j        f| _        d S r?  r&   r   r   r  r   rX   r   r&   s      r-   rY   zSaveUpdateState.__init__  s*    
l.')>?r/   r  c                    t           j        j        }| j        | j        fd|D             }|                    |           |                    | j        gd |D             z   |           d S )Nc                8    g | ]}|j         u |j        u |S rP   r  r   r   rB  rC  r   s     r-   r   z5SaveUpdateState.execute_aggregate.<locals>.<listcomp>  8     
 
 
q{d22qx67I7IA7I7I7Ir/   c                    g | ]	}|j         
S rP   rE  rF  s     r-   r   z5SaveUpdateState.execute_aggregate.<locals>.<listcomp>  s    #>#>#>AG#>#>#>r/   )r   r  r   r  r   rH  r*  r&   )rX   r   r  r"  rI  rC  r   s        @@r-   r   z!SaveUpdateState.execute_aggregate  s    n4~
 
 
 
 

 
 
 	x(((TZL#>#>X#>#>#>>	
 	
 	
 	
 	
r/   c                T    | j         j        dt          j        | j                  dS r0  r  r   r   rK  r&   r\   s    r-   r  zSaveUpdateState.__repr__  0    N###tz****
 	
r/   N	r   r   r   r   rY   r   r#  r   r  rP   r/   r-   r,  r,    sd        -I@ @ @
 T566

 

 76


 
 
 
 
r/   r,  c                  P    e Zd ZdZd Z ej        d          d             Zd ZdS )r9  rM  c                \    || _         |j        j        | _        d| j        j        f| _        d S )Nr9  rO  rP  s      r-   rY   zDeleteState.__init__  s*    
l.&(=>r/   r  c                   t           j        j        }| j        | j        fd|D             }|                    |           | j        gd |D             z   }|                    fd|D                        d S )Nc                8    g | ]}|j         u |j        u |S rP   rS  rT  s     r-   r   z1DeleteState.execute_aggregate.<locals>.<listcomp>  rU  r/   c                    g | ]	}|j         
S rP   rE  rF  s     r-   r   z1DeleteState.execute_aggregate.<locals>.<listcomp>  rG  r/   c                :    g | ]}j         |         d          |S r  rh   )r   r   r   s     r-   r   z1DeleteState.execute_aggregate.<locals>.<listcomp>  s)    ;;;1#*Q-*:;Q;;;r/   )r   r  r   r  r   rH  r&   r7  )rX   r   r  r"  rI  rV   rC  r   s    `    @@r-   r   zDeleteState.execute_aggregate
  s    n4~
 
 
 
 

 
 
 	x(((* ; ;( ; ; ;;;;;;;;;S	
 	
 	
 	
 	
r/   c                T    | j         j        dt          j        | j                  dS r0  rX  r\   s    r-   r  zDeleteState.__repr__  rY  r/   NrZ  rP   r/   r-   r9  r9    sa        -I? ? ?
 T566
 
 76

 
 
 
 
r/   r9  N)(__doc__
__future__r   typingr   r   r   r   r    r   r   rb   r   r   r   r   
dependencyr   
interfacesr   r   r   r   r   r   r&   r   rG   rI   r   r   r  r
  r  r   r   r=  r,  r9  rP   r/   r-   <module>rh     sv    # " " " " "                                                                          %//////******      ++++++$$$$$$o o odJ5 J5 J5 J5 J5 J5 J5 J5Z
I I I I I I I I/ / / / /$ / / /d        *  *  *  *  * $k *  *  * Z@ @ @ @ @K @ @ @""A "A "A "A "AK "A "A "AJ"A "A "A "A "A "A "A "AJ!
 !
 !
 !
 !
; !
 !
 !
H
 
 
 
 
k 
 
 
8
 
 
 
 
+ 
 
 
 
 
r/   