
    kh{                    2   d dl mZ 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  e       Z G d de	      Z G d de	      ZddZ y)    )annotationsN)Any)Iterator)decode)_CustomDict)merge_dicts)KeyAlreadyPresent)NonExistentKey)TOMLKitError)AoT)Comment)Item)Key)Null)	SingleKey)Table)Trivia)
Whitespaceitemc                      e Zd ZdZd,d-dZed.d       Zd/dZed/d       Zd0dZ	d1d2dZ
d3d	Zd4d
Zd1d5dZ	 d6	 	 	 	 	 	 	 d7dZd8dZd9dZd:dZ	 	 	 	 	 	 	 	 d;dZd<dZd=dZd>dZd?dZd1d@dZd1dZd1dAdZd1dZd4dZdBdZdCdZdDdZdEdZdF fdZ dGdZ!	 	 	 	 	 	 	 	 dHd Z"d?d!Z#d?d"Z$dId#Z%d$ Z&d% Z'd& Z(d' Z)dJd(Z*dJd)Z+de,ff	 	 	 dKd*Z-de,ffdLd+Z. xZ/S )M	Containerz
    A container for items within a TOMLDocument.

    This class implements the `dict` interface with copy/deepcopy protocol.
    c                <    i | _         g | _        || _        g | _        y N)_map_body_parsed_table_keys)selfparseds     M/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/tomlkit/container.py__init__zContainer.__init__$   s    <>	46
    c                    | j                   S r   r   r   s    r!   bodyzContainer.body*   s    zzr#   c                    i }| j                         D ]Y  \  }}|	t        |t              r|j                  }t	        |d      r|j                         }||v rt        ||   |       U|||<   [ |S )z#Returns as pure python object (ppo)unwrap)items
isinstancer   keyhasattrr)   r   )r   	unwrappedkvs       r!   r)   zContainer.unwrap.   sv    	JJL 	!DAqy!S!EEq(#HHJI~IaL!, 	!	! r#   c                    i }| j                   D ]U  \  }}|	|j                  }|j                  }t        |t              r|j                  }||v rt        ||   |       Q|||<   W |S )zThe wrapped dict value)r   r,   valuer+   r   r   )r   dr/   r0   s       r!   r2   zContainer.valueB   sr     JJ 	DAqyAA!Y'GGAvAaD!$!	 r#   c                   || _         | j                  D ]n  \  }}t        |t              r|j                  j                  |       2t        |t              sC|j                  D ]  }|j                  j                  |        p y r   )r   r   r+   r   r2   parsingr   r'   )r   r5   _r0   ts        r!   r5   zContainer.parsingW   sg    JJ 	-DAq!U#(As# -AGGOOG,-		-r#   Nc                t    |%t        |t        t        f      st        d      d|}}| j	                  ||      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   r,   r   s      r!   addzContainer.adda   sD     <cGZ#89 N  cC{{3%%r#   c                   t        |t        t        f      rt        d      |^}}}d|_        t        t        d      t               dd      x}}|D ]=  }d|_        t        t        d      t               dd      }	|j                  ||	       |	}? |j                  |_        |j                  ||       | j                  ||       y )Nz!Can't add a table to a dotted keyTF)is_super_table)	r+   r   r   r   _dottedr   r   r:   sep)
r   r,   r2   namemidlasttablecurrent_name	new_tables
             r!   _handle_dotted_keyzContainer._handle_dotted_keyv   s    eeS\*BCCsD	$5QUVV 	 E EMiovxtTINN5),G		  77tU#D% r#   c                   d}t        | j                        D ]h  \  }\  }}t        |t              rt        |t              r|j                         s;t        |t        t        f      r|j                         s |dz   S |}j |dz   S N   )		enumerater   r+   r   r   is_fixedr   r   	is_dotted)r   
last_indexir/   r0   s        r!   _get_last_index_before_tablez&Container._get_last_index_before_table   s    
"4::. 		IAv1!T"!Z(!eS\*1;;=A~ J		 A~r#   c                    |'| j                   D ]  }|J | j                  |        y || j                   vst        | j                   |   t              sy t        j                  | | j                   |          y r   )r   _validate_out_of_order_tabler+   tupleOutOfOrderTableProxyvalidate)r   r,   r/   s      r!   rT   z&Container._validate_out_of_order_table   so    ;YY 5}$}11!45 diiz$))C.%'H%%dDIIcN;r#   c                `   t        |t              s|t        |      }t        |t              st	        |      }|$|j                         r| j                  ||       | S t        |t        t        f      r|j                  |j                  |_	        | j                         }t        |t              xs t        |      }t        |t              rm| j                  s|j                          | j                   rE| j                  s9|j"                  j$                  s#|s!|j'                         sd|j"                  _        t        |t              ru| j                   ri| j                  s]|j                          |rKd|d   j"                  j$                  v s0|s.d|d   j"                  j$                  z   |d   j"                  _        ||| v r| j(                  |   }t        |t*              r| j                   |d      }n| j                   |   }|d   }t        |t              r[t        |t        t        f      st-        |      |j/                         rQt        |t              s.t        ||g| j                        }| j1                  |||       | S |j3                  |       | S |j5                         r.|j/                         st-        |      |j3                  |       | S |j7                         ro|j7                         r@|j'                         s(|d   j'                         s| j8                  d   |d   k7  r|j'                         r| j                  s| j;                         }	nt=        | j                         }	|	t=        | j                         k  r| j?                  |	||       n| jA                  ||       |r| jC                  |       | S tE        jF                  |      }|jH                  jJ                  D ]  \  }
}|j3                  |
|        |d   |f| j                   t        |t*              r|d   <   | S |<   | S |d   j'                         rtM        d      |j7                         set-        |      t        |t              r?t        |t              st-        |      |jJ                  D ]  }|j3                  |        | S t-        |      t        |t        t        f      }|.| j                   r!| j                  s|r|j'                         r| j;                         }|t=        | j                         k  ru| j                   |   d   }t        |t              s@d|j"                  j$                  v s(d|j"                  j$                  z   |j"                  _        | j?                  |||      S | j                   d   d   }t        |t              sBt        |      s7d|j"                  jN                  v s|j"                  xjN                  dz  c_'        | jA                  ||       | S )z<Similar to :meth:`add` but both key and value must be given.
r   rK   rL   )r    z!Redefinition of an existing table)(r+   r   r   r   _itemis_multirH   r   r   rA   r,   _previous_itemr   ends_with_whitespacer   invalidate_display_namer   triviaindentrO   r   rU   r	   is_aot_element_replacer:   is_aotr>   r   rR   len
_insert_at_raw_appendrT   copydeepcopyr2   r'   r   trail)r   r,   r   rW   prevprev_wscurrent_idxcurrent_body_elementrE   idxr/   r0   rD   is_tablerP   
after_itemprevious_items                    r!   r:   zContainer.append   s    #s#C.C$%;D?s||~##C.KdS%L)dii.?DI""$T:.L2Ft2LdE"<<,,.

););w%)"dC TZZ((*TT!W^^%:%::g(,tAw~~/D/D(DQ%?sd{))C.K+u-'+zz+b/'B$'+zz+'>$*1-G$&!'E3<8+C00&&( &gs3"%wodll"Kc38  K  t,K^^%..0/44NN4(K++-**,  MMO3A6@@B#//37KA7NN"}}t||&*&G&G&I&)$**o"S_4 $S$ ? $ 0 0d ;' $ A A# F#'K #'--"8$(JJOO 1DAq#NN1a01 2!4g> 

 $.k5#A !,B  $	 &1	  $-a0::<*+NOO,,.+C00D#&!'3/+C00!YY *ENN5)* ',,dUCL1O

LL ::<JC

O+!ZZ
3A6
z:6z00777/3j6G6G6N6N/NJ%%,z3== $

2q 1}j9+M:}33999!((..$6.d#r#   c                L   || j                   v r|| j                   |   }t        |t              s|f}| j                  |d      d   }|t        |t              st        |      g |t        | j                        | j                   |<   n$|"t        | j                        | j                   |<   | j                  j                  ||f       |j                         r| j                  j                  |       |,t        j                  | |j                  |j                         y y rJ   )r   r+   rU   r   r   r	   rd   r:   ro   r   dict__setitem__r,   r2   )r   r,   r   rl   rE   s        r!   rf   zContainer._raw_append7  s    $))))C.Kk51*njjR1!4Gz'5'A',,<{<C

O<DIIcN_ _DIIcN

3+&==?##C(?T377DJJ7 r#   c                   | j                   |   d   }| j                  j                  |      }|t        |      d t	               f| j                   |<   t        |t              rVt        |      }|j                  |       t        |      dk(  r|j                         }nt        |      }|| j                  |<   y t        j                  | |j                         | j                  j                  |       y )Nr   rL   )r   r   getr
   r   r+   rU   listremoverd   poprs   __delitem__r,   )r   rn   r,   indexs       r!   
_remove_atzContainer._remove_atL  s    jjoa 		c"= %%.

3eU#KELL5zQ		e"DIIcNT377+IIMM#r#   c                b   t        |t              st        |      }| j                  j	                  |d      }|t        |      t        |t              r!|D ]  }dt               f| j                  |<    ndt               f| j                  |<   t        j                  | |j                         | S )z Remove a key from the container.N)r+   r   r   r   ry   r
   rU   r   r   rs   rz   r,   )r   r,   rn   rQ   s       r!   rx   zContainer.remove_  s    #s#C.CiimmC&; %%c5! /!%tv

1/  $TVnDJJsOsww'r#   c                t   |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                  j                         D ]j  \  }}t        |t              r=g }|D ]  }	|	|kD  r|	dz   }	|j                  |	        t        |      | j                  |<   S||kD  sY|dz   | j                  |<   l |dz   | j                  |<   | j                  j                  |dz   ||f       |+t        j!                  | |j"                  |j$                         | S )Nz$Key cannot be null in insert_after()rL   rY   )r9   r
   r+   r   r   rZ   r   rU   maxr   r_   ri   r*   r:   insertrs   rt   r,   r2   )
r   r,   	other_keyr   rn   current_itemr/   r0   new_indicesv_s
             r!   _insert_afterzContainer._insert_afterr  s    ;CDDd? %%#s#C.C)S)!),IT{iinc5!c(Czz#q)|**000%%-% IIOO% 	%DAq!U#  +BCx!V&&r*	+  %[1		!S 1u		!	%  #Qw		)

#'It#45?T9==$**=r#   c                   |t        | j                        dz
  kD  rt        d|       t        |t              st        |      }t        |      }|dkD  r}| j                  |dz
     d   }t        |t              sXt        |      sMt        |t        t        f      s7d|j                  j                  v s|j                  xj                  dz  c_        | j                  j                         D ]j  \  }}t        |t              r=g }|D ]  }||k\  r|dz   }|j!                  |        t        |      | j                  |<   S||k\  sY|dz   | j                  |<   l || j                  v r7| j                  |   }	t        |	t              s|	f}	g |	|| j                  |<   n|| j                  |<   | j                  j#                  |||f       t$        j'                  | |j(                  |j*                         | S )NrL   zUnable to insert at position r   rY   )rd   r   r9   r+   r   r   rZ   r   r]   r   r   r_   ri   r   r*   rU   r:   r   rs   rt   r,   r2   )
r   rn   r,   r   rq   r/   r0   r   r   rl   s
             r!   re   zContainer._insert_at  s   TZZ1$$<SEBCC#s#C.CT{7 JJsQw/2M=*5'6dS%L1=//555$$**d2* IIOO% 	%DAq!U#  +BSy!V&&r*	+  %[1		!c 1u		!	% $))))C.Kk51*n0{0C0DIIcN DIIcN

#T{+sww

3r#   c                    t        |t              st        |      }| j                  j	                  |      }|t        |      t        |t              rt        | |      S | j                  |   d   S )zGet an item for the given key.rL   )	r+   r   r   r   rv   r
   rU   rV   r   )r   r,   rn   s      r!   r   zContainer.item  sc    #s#C.CiimmC ; %%c5! (c22zz#q!!r#   c                @    | j                   r| j                   d   d   S y)zGet the last item.rK   rL   Nr%   r&   s    r!   	last_itemzContainer.last_item  s!    ::::b>!$$ r#   c                b   d}| j                   D ]  \  }}|t        |t              rd|j                  d      r=|j                  d      j	                  d      sd|j
                  j                  vr|dz  }|| j                  ||      z  }}t        |t              rd|j                  d      r=|j                  d      j	                  d      sd|j
                  j                  vr|dz  }|| j                  ||      z  }|| j                  ||      z  }|| j                  ||      z  } |S )zRender as TOML string.  rY   )r   r+   r   stripendswithr_   r`   _render_tabler   _render_aot_render_simple_item)r   sr/   r0   s       r!   	as_stringzContainer.as_string  s   JJ 	4DAq}a' ! 5 5d ; 7T	++Aq11A3' ! 5 5d ; 7T	))!Q//A11!Q77AT--a33+	4. r#   c           	        d}|j                   |j                   }n|j                         }||dz   |z   }|j                         r6t        d |j                  j
                  D              r|j                         sd\  }}|j                         rd\  }}d|j                  j                  vrt        |j                        dkD  rdnd}||j                  j                   | t        |       | |j                  j                   t        |j                  j                         |j                  j                   | z  }n2|j                  j                  dk(  r||j                  j                  z  }|j                  j
                  D ]z  \  }	}
t        |
t               r|j#                  d      r=|j#                  d      j%                  d      sd|
j                  j                  vr|dz  }|
j                         rN|	j                         r&|j                         s|| j'                  |	|
      z  }|| j'                  |	|
|	      z  }|| j'                  |	|
|	      z  }t        |
t(              rg|j#                  d      r=|j#                  d      j%                  d      sd|
j                  j                  vr|dz  }|| j+                  |	|
|	      z  }R|| j-                  |	|
|j                         r|nd 	      z  }} |S )
Nr   .c              3  d   K   | ](  \  }}t        |t        t        t        t        f        * y wr   )r+   r   r   r   r   ).0r6   r0   s      r!   	<genexpr>z*Container._render_table.<locals>.<genexpr>  s/      Aq q5#z4"@AAs   .0)[]z[[z]]rY   r   r   prefix)display_namer   r>   anyr2   r'   rO   ra   r_   ri   rd   r`   r   
comment_wscommentr+   r   r   r   r   r   r   r   )r   r,   rD   r   cur_keyopen_closenewline_in_table_triviar/   r0   s              r!   r   zContainer._render_table  s   )%%D==?D!|d*##% !KK,,  MMO#LE5##%)u ELL$6$663u{{;Ka;OUW $ <<&&''$<.'<<**+%,,../0<<%%&*+-	C \\  D(5<<&&&CKK$$ 	DAq!U#IIcNIIcN33D9AHHOO34KC##%{{}S]]_t11!Q77t11!Qt1DD4--a4-@@CAs#IIcNIIcN33D9AHHOO34KCt''1T'::t//qd 0  3	: 
r#   c                    |j                         }||dz   |z   }d}t        |      }|j                  D ]  }|| j                  ||      z  } |S )Nr   r   r   )r   r   r'   _render_aot_table)r   r,   aotr   r   r   rD   s          r!   r   zContainer._render_aotF  sc    }}C<$&Dd|XX 	>E4))%)==C	> 
r#   c           	        d}|xs d}d\  }}||j                   j                   | t        |       | |j                   j                   t        |j                   j                         |j                   j
                   z  }|j                  j                  D ]  \  }}t        |t              rf|j                         r>|j                         r|| j                  ||      z  }L|| j                  |||      z  }d|| j                  |||      z  }|t        |t              r|| j                  |||      z  }|| j                  ||      z  } |S )Nr   r   r   )r_   r`   r   r   r   ri   r2   r'   r+   r   r>   rO   r   r   r   r   )	r   rD   r   r   r   r   r   r/   r0   s	            r!   r   zContainer._render_aot_tableR  sQ   |!u||""#gd|ng||&&'ell**+,||!!"$	
 KK$$ 	6DAq!U###%{{}t11!Q77t11!Qt1DD4--a4-@@CAs#t''1T'::t//155	6 
r#   c                   ||j                         S |j                         }||dz   |z   }|j                  j                   t        |       |j                   t        |j                                |j                  j
                   t        |j                  j                         |j                  j                   S )Nr   )r   r_   r`   r   r@   r   r   ri   )r   r,   r   r   r   s        r!   r   zContainer._render_simple_itemr  s    ;>>##}}C<$&D {{!!"d|nwwidnn&'({{%%&dkk))*+{{  !#	
r#   c                ,    t         j                  |       S r   rs   __len__r&   s    r!   r   zContainer.__len__      ||D!!r#   c                >    t        t        j                  |             S r   iterrs   keysr&   s    r!   __iter__zContainer.__iter__      DIIdO$$r#   c                    | j                  |      }t        |t              r|j                         r|j                  S |S r   )r   r+   r   
is_booleanr2   r;   s      r!   __getitem__zContainer.__getitem__  s1    yy~dD!doo&7::r#   c                    :| v r6t        t        fd| j                              }| j                  ||       y | j	                  |       y )Nc                    | k(  S r    )r/   r,   s    r!   <lambda>z'Container.__setitem__.<locals>.<lambda>  s    AH r#   )nextfilterr   rb   r:   )r   r,   r2   old_keys    `  r!   rt   zContainer.__setitem__  sB    ?sd{6"4dii@AGMM'3.KKU#r#   c                &    | j                  |       y r   )rx   r   r,   s     r!   rz   zContainer.__delitem__  s    Cr#   c                0    t         |   ||       | |   S N)defaultsuper
setdefaultr   r,   r   	__class__s      r!   r   zContainer.setdefault      30Cyr#   c                    t        |t              st        |      }| j                  j	                  |      }|t        |      | j                  |||       y r   )r+   r   r   r   rv   r
   _replace_at)r   r,   new_keyr2   rn   s        r!   rb   zContainer._replace  sI    #s#C.CiimmC ; %%gu-r#   c                V   t        |      }t        |t              r(|dd  D ]  }d t               f| j                  |<    |d   }| j                  |   \  }}t        |t
              sJt        |t        t        f      t        |t        t        f      k7  s||j                  k7  rt        |      }n|}| j                  |= || j                  |<   ||k7  rt        j                  | |       t        |t        t        f      t        |t        t        f      k7  r| j                  |       t        |t        | j                              D ]@  }t        | j                  |   d   t        t        f      s*| j!                  |||       |} n d}| j#                  ||       nt        |t$        t        f      s|j&                  j(                  |j&                  _        |j&                  j*                  xs |j&                  j*                  |j&                  _        |j&                  j,                  xs |j&                  j,                  |j&                  _        |j&                  j.                  |j&                  _        ||f| j                  |<   t1        |d      r|j3                          t        |t              r| j5                         \  }}|dk  r|n|}t7        |      }	t        |t              xrB |j8                  j:                  xr* t        |j8                  j:                  d   d   t$              }
||k  xr# t        | j                  |dz      d   t$              }||k  s|
r|s|	s|j#                  d t%        d             t        j=                  | |j                  |j8                         y y )NrL   r   rK   r^   rY   )rZ   r+   rU   r   r   r   r   r   r,   r   r   rs   rz   rx   rangerd   re   r:   r   r_   r`   r   r   ri   r-   r^   _previous_item_with_indexr]   r2   r'   rt   )r   rn   r   r2   rQ   r/   r0   rC   r6   has_wsreplace_has_wsnext_wss               r!   r   zContainer._replace_at  s    ec5!W /!%tv

1/ a&Czz#1'3'53,/:a#u3NNaee##G,IIaL 		'a<T1%ec5\*jS%L.IIKKN3DJJ0 ,djjmA.e=OOAw6C	, GU+ ej#%67&'hhoo#*/,,*A*A*XQXXEXEX'',||';';'Oqxx?O?O$%&XX^^"&.DJJsO534))+eU#
 446GD!'$sC)%0F1e$ @GGLL@qww||B/2J? 
 DjSZ

370CA0F
%SGd
nw&T:d#34T7;;<# $r#   c                ,    t        | j                        S r   )strr2   r&   s    r!   __str__zContainer.__str__  s    4::r#   c                ,    t        | j                        S r   )reprr2   r&   s    r!   __repr__zContainer.__repr__  s    DJJr#   c                L    t        |t              st        S | j                  |k(  S r   )r+   rs   NotImplementedr2   )r   others     r!   __eq__zContainer.__eq__  s!    %&!!zzU""r#   c                    | j                   fS r   )r   r   protocols     r!   	_getstatezContainer._getstate  s    r#   c                $    | j                  d      S )N   )__reduce_ex__r&   s    r!   
__reduce__zContainer.__reduce__  s    !!!$$r#   c                    | j                   | j                  |      | j                  | j                  | j                  | j
                  ffS r   )r   r   r   r   r   r   r   s     r!   r   zContainer.__reduce_ex__   s=    NNNN8$YY

DLL$2B2BC
 	
r#   c                    |d   | _         |d   | _        |d   | _        |d   | _        | j                  D ]3  \  }}|	t        j                  | |j                  |j                         5 y )Nr   rL   r      )r   r   r   r   rs   rt   r,   r2   )r   stater,   r   s       r!   __setstate__zContainer.__setstate__  se    !H	1X
Qx 8 	<IC  sww

;	<r#   c                ,    t        j                   |       S r   )rg   r&   s    r!   rg   zContainer.copy  s    yyr#   c                ,   | j                  | j                        }t        j                  |       D ]  \  }}t        j	                  |||        |xj
                  | j                  z  c_        |j                  j                  | j                         |S r   )	r   r   rs   r*   rt   r   r'   r   update)r   cr/   r0   s       r!   __copy__zContainer.__copy__  so    NN4<<(JJt$ 	&DAqQ1%	& 	
499	dii r#   c                    ||t        | j                        kD  rt        | j                        }t        |dz
  dd      D ]&  }| j                  |   d   }t        ||      r"||fc S  y)z5Find the immediate previous item before index ``idx``NrL   rK   )rd   r   r   r+   )r   rn   ignorerQ   r0   s        r!   r   z#Container._previous_item_with_index  sk     ;#DJJ/djj/CsQwB' 	A

1b!Aa(!t	 r#   c                8    | j                  ||      }|r|d   S dS )z{Find the immediate previous item before index ``idx``.
        If ``idx`` is not given, the last item is returned.
        rK   N)r   )r   rn   r   rj   s       r!   r\   zContainer._previous_item*  s'     --c6:tBx)T)r#   )F)r    boolreturnNone)r   zlist[tuple[Key | None, Item]])r   zdict[str, Any])r5   r   r   r   r   )r,   zKey | Item | strr   Item | Noner   r   )r,   r   r2   r   r   r   r   int)r,   zSingleKey | Noner   r   )T)r,   zKey | str | Noner   r   rW   r   r   r   )r,   z
Key | Noner   r   r   r   )rn   r   r   r   )r,   	Key | strr   r   )r,   r   r   r   r   r   r   r   )rn   r   r,   r   r   r   r   r   )r,   r   r   r   )r   r   r   r   )r,   r   rD   r   r   
str | Noner   r   )rD   r   r   r   r   r   r   zIterator[str])r,   r   r   zItem | Containerr,   r   r2   r   r   r   r,   r   r   r   r,   r   r   r   r   r   )r,   r   r   r   r2   r   r   r   )rn   zint | tuple[int]r   r   r2   r   r   r   )r   rs   r   r   )r   r   )rn   
int | Noner   ztuple[int, Item] | None)rn   r   r   r   )0__name__
__module____qualname____doc__r"   propertyr'   r)   r2   r5   r<   rH   rR   rT   r:   rf   r|   rx   r   re   r   r   r   r   r   r   r   r   r   r   rt   rz   r   rb   r   r   r   r   r   r   r   r   rg   r   r   r   r\   __classcell__r   s   @r!   r   r      s     (  (-&*$< CGU#U+/U;?U	Un8*&&--)2-:=-	-^,\""%
8CJ
@
$"%$.B=#B=.7B=@DB=	B=H #%
< !%dW

	 
 04TG * *r#   r   c                       e Zd Zedd       ZddZddZed        ZddZ	ddZ
ddZddZdd	Zdd
Zd fdZ xZS )rV   c                    t        d      }|D ]W  }| j                  |   \  }}t        |t              s&|j                  j
                  D ]  \  }}|j                  ||d        Y |j                          y)z3Validate out of order tables in the given containerTF)rW   N)r   r   r+   r   r2   r'   r:   rT   )	containerindicestemp_containerrQ   r6   r   r/   r0   s           r!   rW   zOutOfOrderTableProxy.validate3  sz     #4 	@Aooa(GAt$& JJOO @DAq"))!Q)?@		@ 	335r#   c                n   || _         t        d      | _        g | _        i | _        |D ]  }| j                   j
                  |   \  }}t        |t              s0| j                  j                  |       t        | j                        dz
  }|j                  j                  D ]v  \  }}| j                  j                  ||       | j                  j                  |g       }||vr|j                  |       |Vt        j                  | |j                   |       x  | j                  j#                          y )NTrL   )
_containerr   _internal_container_tables_tables_mapr   r+   r   r:   rd   r2   r'   rf   r   rs   rt   r,   rT   )	r   r
  r  rQ   r6   r   	table_idxr/   r0   s	            r!   r"   zOutOfOrderTableProxy.__init__A  s   ##,T? $&13 	9Aoo++A.GAt$&##D)-1	 JJOO 9DAq,,88A>"..99!R@G /y1}((quua89	9 	  ==?r#   c                6    | j                   j                         S r   )r  r)   r&   s    r!   r)   zOutOfOrderTableProxy.unwrapW  s    ''..00r#   c                .    | j                   j                  S r   )r  r2   r&   s    r!   r2   zOutOfOrderTableProxy.valueZ  s    ''---r#   c                R    || j                   vrt        |      | j                   |   S r   )r  r
   r   s     r!   r   z OutOfOrderTableProxy.__getitem__^  s,    d... %%'',,r#   c                
   ddl m dfd|| j                  v r| j                  |   }t        |      dkD  r=| j                  |j                            }| j                  |       t        |      dkD  r=| j                  |d      |   } |      r. |      s&| j                  |d      |= | j                  |= || |<   y || j                  |d      |<   n| j                  rh |      sM| j                  D ]+  }t        fd|j                         D              s&|||<    n6 || j                  d   |<   n"|| j                  d   |<   n|| j                  |<   || j                  |<   |t        j                  | ||       y y )NrL   r   c                <    t         |       t        t        f      S r   )r+   r   r   )itr   s    r!   _is_table_or_aotz:OutOfOrderTableProxy.__setitem__.<locals>._is_table_or_aotg  s    d2h55r#   r   c              3  6   K   | ]  \  }} |         y wr   r   )r   r6   r0   r  s      r!   r   z3OutOfOrderTableProxy.__setitem__.<locals>.<genexpr>|  s     Mtq!/22Ms   r  r   r   r   )r*   r   r  rd   r  ry   _remove_tabler   r  r  rs   rt   )r   r,   r2   r  rD   	old_valuer  r   s         @@r!   rt   z OutOfOrderTableProxy.__setitem__d  sx   	6 $"""&&s+Gg,"W[[]3""5) g," WQZ05I	*3CE3JLL,S1$$S)!S	,1DLL$S)\\#E*!\\ 1EMu{{}MM%*c
	1 ,1DLLOC(',Q$#(DOOC (-  %?T3. r#   c                    | j                   j                  |       t        | j                  j                        D ])  \  }}|d   |u s| j                  j                  |        y y)z&Remove table from the parent containerrL   N)r  rx   rM   r  r   r|   )r   rD   rn   r   s       r!   r  z"OutOfOrderTableProxy._remove_table  sW    E""4??#8#89 	ICAw%**3/	r#   c                T   || j                   vrt        |      t        | j                   |         D ]A  }| j                  |   }||= |rt	        | j                        dkD  s1| j                  |       C | j                   |= | j                  |= |t        j                  | |       y y )NrL   )	r  r
   reversedr  rd   r  r  rs   rz   )r   r,   rQ   rD   s       r!   rz   z OutOfOrderTableProxy.__delitem__  s    d&&& %%$**3/0 	*ALLOEc
S.2""5)		* S!$$S)?T3' r#   c                >    t        t        j                  |             S r   r   r&   s    r!   r   zOutOfOrderTableProxy.__iter__  r   r#   c                ,    t         j                  |       S r   r   r&   s    r!   r   zOutOfOrderTableProxy.__len__  r   r#   c                0    t         |   ||       | |   S r   r   r   s      r!   r   zOutOfOrderTableProxy.setdefault  r   r#   )r
  r   r  ztuple[int, ...]r   r   r   )r,   r   r   r   r   )rD   r   r   r   r   r   r   r   )r  r  r  staticmethodrW   r"   r)   r  r2   r   rt   r  rz   r   r   r   r  r  s   @r!   rV   rV   2  s]    6 6@,1 . .-$/L(%" r#   rV   c                    t        | t              xr( t        | j                  j                         t              xs5 t        | t
              xr# t        |       dkD  xr t        | d   t              S )zqReturns ``True`` if the given item ``it`` is a ``Table`` or ``AoT`` object
    ending with a ``Whitespace``.
    r   rK   )r+   r   r2   r\   r   r   rd   )r  s    r!   r]   r]     sZ    
 	2uS*RXX-D-D-F
"SR
R

P#b'A+
P*RVZ2PRr#   r  )!
__future__r   rg   typingr   r   tomlkit._compatr   tomlkit._typesr   tomlkit._utilsr   tomlkit.exceptionsr	   r
   r   tomlkit.itemsr   r   r   r   r   r   r   r   r   r   rZ   object_NOT_SETr   rV   r]   r   r#   r!   <module>r/     sn    "    " & & 0 - +  !    #    $ ' 8R* R*jw; wtRr#   