
    Jcr                     ~   d dl 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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            Z G d de          Z  G d de          Z!dede"fd Z#dS )!    N)Any)Dict)Iterator)List)Optional)Tuple)Union   )decode)merge_dicts)KeyAlreadyPresent)NonExistentKey)TOMLKitError)AoT)Comment)Item)Key)Null)	SingleKey)Table)Trivia)
Whitespace)_CustomDict)itemc            	       P    e Zd ZdZd7deddfdZedeee	e
         ef                  fd            ZdefdZedeeef         fd	            Zd
eddfdZ	 d8dee
eef         de	e         dd fdZde
deddfdZdee
edf         dedd fdZdeddfdZdee
ef         dd fdZdee
ef         dee
ef         dedd fdZdedee
ef         dedd fdZdee
ef         defdZde	e         fdZdefdZ	 d8de
dede	e         defdZ d8dZ!d8dede	e         defdZ"d8d Z#defd!Z$de%e         fd"Z&dee
ef         deed f         fd#Z'dee
ef         deddfd$Z(dee
ef         ddfd%Z)dee
ef         d&edef fd'Z*dee
ef         d(ee
ef         deddfd)Z+deeee         f         d(ee
ef         deddfd*Z,defd+Z-defd,Z.d-e/defd.Z0d/ Z1d0 Z2d1 Z3d2 Z4d9d3Z5d9d4Z6de7ffde	e         de	eeef                  fd5Z8de7ffde	e         de	e         fd6Z9 xZ:S ):	Containerz
    A container for items within a TOMLDocument.

    This class implements the `dict` interface with copy/deepcopy protocol.
    FparsedreturnNc                 >    i | _         g | _        || _        g | _        d S N)_map_body_parsed_table_keys)selfr   s     1lib/python3.11/site-packages/tomlkit/container.py__init__zContainer.__init__'   s%    $&	79
    c                     | j         S r    r"   r%   s    r&   bodyzContainer.body-   s
    zr(   c                    i }|                                  D ]m\  }}|t          |t                    r|j        }t          |t                    r|                                }||v rt          ||         |           h|||<   n|S r    )items
isinstancer   keyr   unwrapr   )r%   	unwrappedkvs       r&   r1   zContainer.unwrap1   s    	JJLL 	! 	!DAq !S!! E!T"" HHJJI~ !IaL!,,,, 	!r(   c                     i }| j         D ]R\  }}||j        }|j        }t          |t                    r|j        }||v rt          ||         |           M|||<   S|S r    )r"   r0   valuer/   r   r   )r%   dr3   r4   s       r&   r6   zContainer.valueD   s    J 	 	DAq AA!Y'' GAv AaD!$$$$!r(   parsingc                     || _         | j        D ]n\  }}t          |t                    r|j                            |           5t          |t                    r$|j        D ]}|j                            |           od S r    )r#   r"   r/   r   r6   r8   r   r,   )r%   r8   _r4   ts        r&   r8   zContainer.parsingX   s    J 	- 	-DAq!U## -((((As## - - -AGOOG,,,,	- 	-r(   r0   r   c                     |/t          |t          t          f          st          d          d|}}|                     ||          S )z
        Adds an item to the current Container.

        :Example:

        >>> # add a key-value pair
        >>> doc.add('key', 'value')
        >>> # add a comment or whitespace or newline
        >>> doc.add(comment('# comment'))
        Nz8Non comment/whitespace items must have an associated key)r/   r   r   
ValueErrorappend)r%   r0   r   s      r&   addzContainer.addb   sW      	"cGZ#899  N   cC{{3%%%r(   r6   c                    t          t          |                    }|d         }d|_        || v rt          |t                    st	          t          d          t                      dd          }|}t          |dd                    D ]\  }}|t          |          dz
  k    r#|j	        |_	        |
                    ||           >d|_        |
                    |t	          t          d          t                      d|t          |          dz
  k                          ||         }|}| 
                    ||           d S t	          t          d          t                      dd          }| 
                    ||           t          |dd                    D ]\  }}|t          |          dz
  k    r#|j	        |_	        |
                    ||           >d|_        ||j        v r|j        |         }\|
                    |t	          t          d          t                      d|t          |          dz
  k                          ||         }d S )Nr   TF)is_super_tabler
      )tupleiter_dottedr/   r   r   r   	enumeratelensepr>   r6   )	r%   r0   r6   namesnametable_tablei_names	            r&   _handle_dotted_keyzContainer._handle_dotted_keyy   s]   d3ii  Qx4< 	%eU++ ioovxxtTTT )%) 4 4 / /HAuCJJN* /$'G	eU3333(,!! )$ & %/03u::>/A	     "(KKe$$$F)D//688U4PPPEKKe$$$!%),, 	) 	)HAuCJJN" )G	UE**** $EK' )!K.EELL%dOO"HH!+,s5zzA~+=	     "%LEE)	) 	)r(   c                    t          |t                    s|t          |          }t          |t                    st	          |          }|,|                                r|                     ||           | S t          |t          t          f          r|j	        |j
        |_	        |                                 }t          |t                    pt          |          }t          |t                    rL|j	        |j
        k    r|                                 | j        r!| j        s|j        j        s|sd|j        _        t          |t                    r_| j        rX| j        sQ|                                 |r;d|d         j        j        v s'|s%d|d         j        j        z   |d         j        _        |m|| v rh| j        |         }t          |t(                    r| j        |d                  }n| j        |         }|d         }t          |t                    rt          |t          t          f          st+          |          |                                r\t          |t                    s0t          ||g| j                  }|                     |||           n|                    |           | S |                                r:|                                st+          |          |                    |           | S |                                r||                                r=| j        d         |d         k    s.|                                s|d                                         rt          |t(                    s|f}|t;          | j                  fz   | j        |<   | j                            ||f           | j                            |           t=          | | j        |                    | S t?          j         |          }|j!        j"        D ]\  }}	|                    ||	           |d         |f| j        t          |t(                    r|d         n|<   | S |d                                         rtG          d          n|                                st+          |          nit          |t                    rEt          |t                    st+          |          |j"        D ]}
|                    |
           | S t+          |          t          |t          t          f          }|j| j        rb| j        sZd}tI          | j                  D ]l\  }\  }}	t          |	tJ                    rt          |	t                    r|	&                                sH|st          |	t          t          f          r n|p|}m|t          |tN                    r|dz   t;          | j                  k     r| (                    |dz   ||          S | j        d         d         }t          |t                    s4t          |          s%|s#d|j        j)        v s|j        xj)        dz  c_)        n.| *                    |||          S | (                    d||          S || j        v r| j        |         }t          |t(                    r|d         }| j        |         d         }|$t          |t                    st+          |          t          |t(                    s|f}|t;          | j                  fz   | j        |<   nt;          | j                  | j        |<   | j                            ||f           |+                                r| j                            |           |&tX          -                    | |j
        |j!                   | S )z<Similar to :meth:`add` but both key and value must be given.N
r   r
   )r   z!Redefinition of an existing table).r/   r   r   r   _itemis_multirO   r   r   rJ   r0   _previous_itemr   ends_with_whitespaceinvalidate_display_namer"   r#   triviaindentr!   rC   r   is_aot_element_replacer>   is_aotrA   r$   	is_dottedrG   OutOfOrderTableProxycopydeepcopyr6   r,   r   rF   r   is_fixedint
_insert_attrail_insert_afteris_tabledict__setitem__)r%   r0   r   prevprev_wscurrent_idxcurrent_body_elementcurrentr3   r4   rK   rf   	key_afterrM   previous_items                  r&   r>   zContainer.append   s   #s## 	! 	!C..C$%% 	;;D 	s||~~ 	##C...KdS%L)) 	 di 	 DI""$$T:..L2Ft2L2LdE"" 	*yCG# /,,...z *4< *4;3E * *%)"dC   	ETZ 	E 	E((*** ETT!W^%:: Eg E(,tAw~/D(DQ% M	-sd{ M	-)C.K+u-- ?'+z+b/'B$$'+z+'>$*1-G$&& D-!'E3<88 1+C000&&(( 51 &gs33 -"%wodl"K"K"Kc38888t,,,K^^%% *1..00 5/444NN4(((K++-- "1**,, P !,R04H4KK("}}(  4A6@@BB(
 $.k5#A#A =/:n-8C
OO;M-MDIcN J--sDk::: ,33C888 1ty~FFF#'K #'-"8"8$(JO 1 1DAq#NN1a0000
 2!4g>	 
)+u==-KOO!,  $-a0::<< P*+NOOOP,,.. 1+C0001D#&& 
-!'3// 1+C000!Y * *ENN5))))',,,dUCL11 "	5tz "	5$, "	5
 I&tz22 
# 
#	6Aqa&& a,, QZZ\\  Jq5#,$?$? EF		 5i-- D 1}s4:6 
?#y1}c4HHH(,
2q(9&}jAA?3MBB?  (?  $}';'AA	? *066$>66--idCCCq#t444$) 	-)C.K+u-- .)"oj-a0G -z'5'A'A -',,, k511 -*n(C
OO+==DIcNN __DIcN
3+&&&==?? 	)##C((( 	8T37DJ777r(   idxc                    | j         |         d         }| j                            |          }|t          |          d t	                      f| j         |<   t          |t                    rgt          |          }|                    |           t          |          dk    r|
                                }nt          |          }|| j        |<   d S t                              | |j                   | j        
                    |           d S )Nr   r
   )r"   r!   getr   r   r/   rC   listremoverG   poprg   __delitem__r0   )r%   rp   r0   indexs       r&   
_remove_atzContainer._remove_at]  s    joa 	c"" 	& %%%.
3eU## 
	KKELL5zzQ %		e"DIcNNNT37+++IMM#r(   c                 |   t          |t                    st          |          }| j                            |d          }|t          |          t          |t                    r|D ]}dt                      f| j        |<   ndt                      f| j        |<   t          
                    | |j                   | S )z Remove a key from the container.N)r/   r   r   r!   ru   r   rC   r   r"   rg   rv   r0   )r%   r0   rp   rM   s       r&   rt   zContainer.removep  s    #s## 	!C..CimmC&& 	& %%%c5!! 	- / /!%tvv
1/  $TVVnDJsOsw'''r(   	other_keyc                    |t          d          || vrt          |          t          |t                    st	          |          }t          |t                    st	          |          }t          |          }| j        |         }t          |t                    rt          |          }| j	        |         d         }d|j
        j        vr|j
        xj        dz  c_        | j                                        D ]l\  }}t          |t                    r?g }|D ]"}	|	|k    r|	dz   }	|                    |	           #t          |          | j        |<   Y||k    r|dz   | j        |<   m|dz   | j        |<   | j	                            |dz   ||f           |&t                              | |j        |j                   | S )Nz$Key cannot be null in insert_after()r
   rQ   )r=   r   r/   r   r   rS   r!   rC   maxr"   rX   rd   r.   r>   insertrg   rh   r0   r6   )
r%   r0   rz   r   rp   current_itemr3   r4   new_indicesv_s
             r&   re   zContainer._insert_after  s     	ECDDDd? 	& %%%#s## 	!C..C)S)) 	-!),,IT{{inc5!! 	c((Cz#q)|*00 	.%%-%% IOO%% 	% 	%DAq!U## 
%  + +BCx $!V&&r****$[11	!S % 1u	!"Qw	)
#'It#4555 	>T9=$*===r(   c                 n   |t          | j                  dz
  k    rt          d|           t          |t                    st          |          }t          |          }|dk    ry| j        |dz
           d         }t          |t                    sNt          |          s?t          |t          t          f          s#d|j        j        v s|j        xj        dz  c_        | j                                        D ]l\  }}t          |t                    r?g }|D ]"}||k    r|dz   }|                    |           #t          |          | j        |<   Y||k    r|dz   | j        |<   m|| j        |<   | j                            |||f           |&t$                              | |j        |j                   | S )Nr
   zUnable to insert at position r   rQ   )rG   r"   r=   r/   r   r   rS   r   rV   r   r   rX   rd   r!   r.   rC   r>   r}   rg   rh   r0   r6   )	r%   rp   r0   r   ro   r3   r4   r   r   s	            r&   rc   zContainer._insert_at  s   TZ1$$ 	DBSBBCCC#s## 	!C..CT{{7 	3 JsQw/2M=*553'663 dS%L113 =/55	3 $**d2** IOO%% 	% 	%DAq!U## 
%  + +BSy $!V&&r****$[11	!c % 1u	!	#
#T{+++ 	8T37DJ777r(   c                    t          |t                    st          |          }| j                            |d          }|t          |          t          |t                    rt          | |          S | j        |         d         S )zGet an item for the given key.Nr
   )	r/   r   r   r!   rr   r   rC   r^   r"   )r%   r0   rp   s      r&   r   zContainer.item  s    #s## 	!C..CimmC&& 	& %%%c5!! 	3 (c222z#q!!r(   c                 :    | j         r| j         d         d         S dS )zGet the last item.rR   r
   Nr*   r+   s    r&   	last_itemzContainer.last_item  s'    : 	%:b>!$$	% 	%r(   c                 J   d}| j         D ]\  }}|xt          |t                    r||                     ||          z  }6t          |t                    r||                     ||          z  }e||                     ||          z  }||                     ||          z  }|S )zRender as TOML string. )r"   r/   r   _render_tabler   _render_aot_render_simple_item)r%   sr3   r4   s       r&   	as_stringzContainer.as_string  s    J 		4 		4DAq 4a'' 8++Aq111AA3'' 8))!Q///AA11!Q777AAT--a333r(   rK   prefixc                    d}|j         |j         }n|                                }||dz   |z   }|                                r7t          d |j        j        D                       r|                                sd\  }}|                                rd\  }}|d                    |j	        j
        |t          |          ||j	        j        t          |j	        j                  |j	        j        d|j	        j        vrt          |j                  dk    rdnd          z  }n|j	        j
        dk    r||j	        j
        z  }|j        j        D ]\  }}	t!          |	t"                    r|	                                r^|                                r.|                                s||                     ||	          z  }q||                     ||	|	          z  }||                     ||	|	          z  }t!          |	t&                    r||                     ||	|	          z  }||                     ||	|                                r|nd 	          z  }|S )
Nr   .c              3   b   K   | ]*\  }}t          |t          t          t          f           V  +d S r    )r/   r   r   r   ).0r:   r4   s      r&   	<genexpr>z*Container._render_table.<locals>.<genexpr>  sK        @D1Jq5#z":;;;     r(   )[]z[[z]]z{}{}{}{}{}{}{}{}rQ   r   r   )display_namer   rA   anyr6   r,   r]   rZ   formatrX   rY   r   
comment_wscommentrd   rG   r/   r   r   r   r   r   )
r%   r0   rK   r   cur_keyopen_closer3   r4   s
             r&   r   zContainer._render_table  s     	+%DD==??D +|d*##%% 	'  HMHX    	' MMOO		' $LE5##%% *)u%,,#t'u|+,,"EL$66W3u{;K;Ka;OWUW	 	 	CC \ D( 	'5<&&CK$ 	 	DAq!U## ##%% A{{}} ES]]__ Et11!Q777t11!Qt1DDD4--a4-@@@CCAs## t''1T':::t//q!Bd 0    
r(   c                     |                                 }||dz   |z   }d}t          |          }|j        D ]}||                     ||          z  }|S )Nr   r   r   )r   r   r,   _render_aot_table)r%   r0   aotr   r   r   rK   s          r&   r   zContainer._render_aot8  sj    }} 	'C<$&Dd||X 	> 	>E4))%)===CC
r(   c                    d}|pd}|                                 sed\  }}|d                    |j        j        |t	          |          ||j        j        t	          |j        j                  |j        j                  z  }|j        j	        D ]\  }}t          |t                    rz|                                 rJ|                                r||                     ||          z  }\||                     |||          z  }x||                     |||          z  }t          |t                    r||                     |||          z  }||                     ||          z  }|S )Nr   r   {}{}{}{}{}{}{}r   )rA   r   rX   rY   r   r   r   rd   r6   r,   r/   r   r]   r   r   r   r   )	r%   rK   r   r   r   r   r   r3   r4   s	            r&   r   zContainer._render_aot_tableD  s   |##%% 	%LE5#**#t'u|+,,"  C K$ 	6 	6DAq!U## 6##%% A{{}} Et11!Q777t11!Qt1DDD4--a4-@@@CCAs## 6t''1T':::t//1555
r(   c           
      l   ||                                 S |                                 }||dz   |z   }d                    |j        j        t	          |          |j        t	          |                                           |j        j        t	          |j        j                  |j        j                  S )Nr   r   )	r   r   rX   rY   r   rH   r   r   rd   )r%   r0   r   r   r   s        r&   r   zContainer._render_simple_itemg  s     	$>>###}} 	'C<$&D&&K4LLG4>>##$$K"4;&''K
 
 	
r(   c                 6    t                               |           S r    rg   __len__r+   s    r&   r   zContainer.__len__y      ||D!!!r(   c                 P    t          t                              |                     S r    rD   rg   keysr+   s    r&   __iter__zContainer.__iter__|      DIIdOO$$$r(   c                 L   t          |t                    st          |          }| j                            |d           }|t          |          t          |t                    rt          | |          S | j        |         d         }|	                                r|j
        S |S Nr
   )r/   r   r   r!   rr   r   rC   r^   r"   
is_booleanr6   )r%   r0   rp   r   s       r&   __getitem__zContainer.__getitem__  s    #s## 	!C..CimmC&& 	& %%%c5!! 	3 (c222z#q!?? 	:r(   c                     B| v r>t          t          fd| j                            }|                     ||           d S |                     |           d S )Nc                     | k    S r     )r3   r0   s    r&   <lambda>z'Container.__setitem__.<locals>.<lambda>  s    AH r(   )nextfilterr!   r[   r>   )r%   r0   r6   old_keys    `  r&   rh   zContainer.__setitem__  so     	$sd{ 	$6"4"4"4"4di@@AAGMM'3.....KKU#####r(   c                 0    |                      |           d S r    )rt   r%   r0   s     r&   rv   zContainer.__delitem__  s    Cr(   defaultc                 Z    t                                          ||           | |         S N)r   super
setdefaultr%   r0   r   	__class__s      r&   r   zContainer.setdefault  *    3000Cyr(   new_keyc                     t          |t                    st          |          }| j                            |d           }|t          |          |                     |||           d S r    )r/   r   r   r!   rr   r   _replace_at)r%   r0   r   r6   rp   s        r&   r[   zContainer._replace  sj     #s## 	!C..CimmC&& 	& %%%gu-----r(   c                    t          |          }t          |t                    r-|dd          D ]}d t                      f| j        |<   |d         }| j        |         \  }}t          |t
                    sWt          |t          t          f          t          |t          t          f          k    s||j        k    rt          |          }n|}| j
        |= || j
        |<   ||k    rt                              | |           t          |t          t          f          t          |t          t          f          k    r|                     |           t          |t          | j                            D ]J}t          | j        |         d         t          t          f          r|                     |||           |} nKd}|                     ||           nt          |t$          t          f          sp|j        j        |j        _        |j        j        p|j        j        |j        _        |j        j        p|j        j        |j        _        |j        j        |j        _        ||f| j        |<   t1          |d          r|                                 t          |t                    r|                                 \  }}|dk     r|n|}t7          |          }	||k     o(t          | j        |dz            d         t$                    }
||k     r'|
s%|	s#|                    d t%          d                     t                              | |j        |j                   d S d S )Nr
   r   rR   rW   rQ   )rS   r/   rC   r   r"   r   r   r   r0   r   r!   rg   rv   rt   rangerG   rc   r>   r   rX   rY   r   r   rd   hasattrrW   _previous_item_with_indexrV   rh   r6   )r%   rp   r   r6   rM   r3   r4   lastr:   has_wsnext_wss              r&   r   zContainer._replace_at  s%    ec5!! 	W / /!%tvv
1a&Cz#1'3'' 	53,//:a#u3N3NNae# $G,,IaL 	'a< 	&T1%%%ec5\**jS%L.I.II 	/KKNNN3DJ00 , ,djmA.e== OOAw666CE
 GU+++ ej#%677 4&'ho#*/,*A*XQXEX'',|';'Oqx?O$%&X^"&.DJsO5344 	,))+++eU## 	= 4466GD!'*$$sC)%00FDjSZ
370CA0F
%S%SGTz 57 5f 5T:d#3#3444T7;<<<<<	= 	=r(   c                 *    t          | j                  S r    )strr6   r+   s    r&   __str__zContainer.__str__  s    4:r(   c                 *    t          | j                  S r    )reprr6   r+   s    r&   __repr__zContainer.__repr__  s    DJr(   otherc                 P    t          |t                    st          S | j        |k    S r    )r/   rg   NotImplementedr6   )r%   r   s     r&   __eq__zContainer.__eq__  s'    %&& 	"!!zU""r(   c                     | j         fS r    )r#   r%   protocols     r&   	_getstatezContainer._getstate  s    r(   c                 ,    |                      d          S )NrB   )__reduce_ex__r+   s    r&   
__reduce__zContainer.__reduce__  s    !!!$$$r(   c                 l    | j         |                     |          | j        | j        | j        | j        ffS r    )r   r   r!   r"   r#   r$   r   s     r&   r   zContainer.__reduce_ex__  s5    NNN8$$Y
DL$2BC
 	
r(   c                     |d         | _         |d         | _        |d         | _        |d         | _        | j        D ]-\  }}|&t                              | |j        |j                   .d S )Nr   r
   rB      )r!   r"   r#   r$   rg   rh   r0   r6   )r%   stater0   r   s       r&   __setstate__zContainer.__setstate__  ss    !H	1X
Qx 8 	< 	<IC <  sw
;;;	< 	<r(   c                 *    t          j         |           S r    )r_   r+   s    r&   r_   zContainer.copy  s    yr(   c                    |                      | j                  }t                              |           D ]!\  }}t                              |||           "|xj        | j        z  c_        |j                            | j                   |S r    )	r   r#   rg   r.   rh   r"   r,   r!   update)r%   cr3   r4   s       r&   __copy__zContainer.__copy__  s|    NN4<((JJt$$ 	& 	&DAqQ1%%%%	49	di   r(   c                     ||t          | j                  k    rt          | j                  }t          |dz
  dd          D ]+}| j        |         d         }t          ||          s||fc S ,dS )z5Find the immediate previous item before index ``idx``Nr
   rR   )rG   r"   r   r/   )r%   rp   ignorerM   r4   s        r&   r   z#Container._previous_item_with_index  s      	"#DJ/ 	"dj//CsQwB'' 	 	A
1b!Aa(( !ttr(   c                 F    |                      ||          }|r|d         ndS )z{Find the immediate previous item before index ``idx``.
        If ``idx`` is not given, the last item is returned.
        rR   N)r   )r%   rp   r   ri   s       r&   rU   zContainer._previous_item(  s,     --c6::)tBxxT)r(   )Fr    )r   r   );__name__
__module____qualname____doc__boolr'   propertyr   r   r   r   r   r,   r   r1   r   r   r6   r8   r	   r?   rO   r>   rb   rx   rt   re   rc   r   r   r   r   r   r   r   r   r   r   r   r   rh   rv   r   r[   r   r   r   rg   r   r   r   r   r   r_   r   r   r   rU   __classcell__r   s   @r&   r   r       s<         t      d5#!456    X    & tCH~    X&-t - - - - - BF& &dC(&08&	& & & &.8)c 8)$ 8)4 8) 8) 8) 8)th%S$/ ht h h h h hTc d    &%S/ k    &-c?-/4S#X-FI-	- - - -^'c 'c3h 's '{ ' ' ' 'R"c3h "D " " " ""%8D> % % % %
3    " ?C5 55$5.6sm5	5 5 5 5n
 
 
 
! !u !hsm !s ! ! ! !F
 
 
 
$" " " " "%(3- % % % %uS#X 5{9J3K    ($uS#X $s $t $ $ $ $uS#X 4    eCHo        
.c?
.-238_
.EI
.	
. 
. 
. 
.<=eCj)<=49#s(O<=LP<=	<= <= <= <=|     #        #D #T # # # #  % % %
 
 
< < <       $(
 
C=
	%T	"	#
 
 
 
 $(* *C=*	$* * * * * * * *r(   r   c                       e Zd Zdedee         ddfdZdefdZe	d             Z
deeef         defd	Zdeeef         d
eddfdZdeddfdZdeeef         ddfdZdee         fdZdefdZdeeef         dedef fdZ xZS )r^   	containerindicesr   Nc                    || _         t          d          | _        g | _        i | _        |D ]}| j         j        |         \  }}t          |t                    r| j                            |           t          | j                  dz
  }|j
        j        D ]M\  }}| j                            ||           || j        |<   |!t                              | |j        |           Nd S )NTr
   )
_containerr   _internal_container_tables_tables_mapr"   r/   r   r>   rG   r6   r,   rg   rh   r0   )	r%   r   r   rM   r:   r   	table_idxr3   r4   s	            r&   r'   zOutOfOrderTableProxy.__init__3  s    ##,T??  
	9 
	9Ao+A.GAt$&& 9##D)))--1	 JO 9 9DAq,33Aq999*3D$Q' 9((qua888
	9 
	9r(   c                 4    | j                                         S r    )r   r1   r+   s    r&   r1   zOutOfOrderTableProxy.unwrapE  s    '..000r(   c                     | j         j        S r    )r   r6   r+   s    r&   r6   zOutOfOrderTableProxy.valueH  s    '--r(   r0   c                 L    || j         vrt          |          | j         |         S r    )r   r   r   s     r&   r   z OutOfOrderTableProxy.__getitem__L  s.    d.. 	& %%%',,r(   r   c                     || j         v r| j        | j         |                  }|||<   n$| j        r| j        d         }|||<   n
|| j        |<   || j        |<   |t                              | ||           d S d S )Nr   )r   r   r   r   rg   rh   )r%   r0   r   rK   s       r&   rh   z OutOfOrderTableProxy.__setitem__R  s    $"" 	(L!1#!67EE#JJ\ 	(LOEE#JJ#'DOC (, % 	.T3-----	. 	.r(   rK   c                     | j                             |           t          | j        j                  D ],\  }}|d         |u r| j                            |            dS -dS )z&Remove table from the parent containerr
   N)r   rt   rF   r   r"   rx   )r%   rK   rp   r   s       r&   _remove_tablez"OutOfOrderTableProxy._remove_table`  su    E""""4?#899 	 	ICAw% **3///	 	r(   c                 *   || j         v rS| j        | j         |                  }||= |s-t          | j                  dk    r|                     |           | j         |= nt	          |          | j        |= |t                              | |           d S d S r   )r   r   rG   r  r   r   rg   rv   )r%   r0   rK   s      r&   rv   z OutOfOrderTableProxy.__delitem__h  s    $"" 	&L!1#!67Ec
 *S..2 *""5))) %% %%%$S) 	(T3'''''	( 	(r(   c                 P    t          t                              |                     S r    r   r+   s    r&   r   zOutOfOrderTableProxy.__iter__v  r   r(   c                 6    t                               |           S r    r   r+   s    r&   r   zOutOfOrderTableProxy.__len__y  r   r(   r   c                 Z    t                                          ||           | |         S r   r   r   s      r&   r   zOutOfOrderTableProxy.setdefault|  r   r(   )r   r   r   r   r   rb   r'   r   r1   r   r6   r	   r   r   r   rh   r   r  rv   r   r   r   r   r   r   s   @r&   r^   r^   2  s       9) 9eCj 9T 9 9 9 9$1 1 1 1 1 . . X.-uS#X -3 - - - -.uS#X .c .d . . . .5 T    (uS#X (4 ( ( ( (%(3- % % % %" " " " "eCHo            r(   r^   itr   c                 
   t          | t                    o+t          | j                                        t                    pBt          | t
                    o-t          |           dk    ot          | d         t                    S )zqReturns ``True`` if the given item ``it`` is a ``Table`` or ``AoT`` object
    ending with a ``Whitespace``.
    r   rR   )r/   r   r6   rU   r   r   rG   )r  s    r&   rV   rV     si    
 	2uS*RX-D-D-F-F
"S"SR
R


P#b''A+
P*RVZ2P2PRr(   )$r_   typingr   r   r   r   r   r   r	   _compatr   _utilsr   
exceptionsr   r   r   r.   r   r   r   r   r   r   r   r   r   r   r   rS   object_NOT_SETr   r^   r   rV   r   r(   r&   <module>r     sS                                                          ) ) ) ) ) ) & & & & & & $ $ $ $ $ $                                                                         688O* O* O* O* O* O* O* O*dL L L L L; L L L^RS RT R R R R R Rr(   