a
    ͝Gd!                     @   s(  d Z ddlZddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZ g dZdZd	Zd
ZdZG dd dZe Ze  ZZe Z e  Z!Z"e  Z#Z$e Z%e Z&e Z'e Z(e Z)e Z*e Z+e Z,dZ-dZ.dZ/dZ0dZ1G dd dZ2dd Z3G dd dZ4G dd dZ5G dd dZ6G dd dZ7G dd  d ee8e7Z9G d!d" d"e:e7Z;G d#d$ d$eZ<G d%d& d&e<eZ=G d'd( d(e<eZ>G d)d* d*e<Z?G d+d, d,ee7Z@eAd-d. ZBG d/d0 d0e7eZCG d1d2 d2e@ZDG d3d4 d4ee7ZEG d5d6 d6e7ZFd7d8ejGfd9d:ZHdS );z
stuff to deal with comments and formatting on dict/list/ordereddict/set
these are not really related, formatting could be factored out as
a separate base
    N)ordereddict)MutableSliceableSequence_Fnprintf)ScalarString)Anchor)
MutableSetSizedSetMapping)CommentedSeqCommentedKeySeqCommentedMapCommentedOrderedMapCommentedSetcomment_attribmerge_attribC_POSTC_PREC_SPLIT_ON_FIRST_BLANKC_BLANK_LINE_PRESERVE_SPACE         c                   @   s$   e Zd Zdd Zdd Zdd ZdS )IDXc                 C   s
   d| _ d S Nr   _idxself r    P/var/www/html/django/DPS/env/lib/python3.9/site-packages/ruamel/yaml/comments.py__init__1   s    zIDX.__init__c                 C   s   | j }|  j d7  _ |S Nr   r   r   xr    r    r!   __call__5   s    zIDX.__call__c                 C   s
   t | jS N)strr   r   r    r    r!   __str__;   s    zIDX.__str__N)__name__
__module____qualname__r"   r&   r)   r    r    r    r!   r   /   s   r   Z_yaml_commentZ_yaml_formatZ_yaml_line_colZ_yaml_mergeZ	_yaml_tagc                   @   s   e Zd ZdZeZdddZdd Zdd Zd	d
 Z	e
dd Ze
dd Zejdd Ze
dd Zejdd Zdd Zdd Zdd ZdS )Comment)comment_items_post_preTc                 C   s$   |rd ng | _ d | _i | _g | _d S r'   )r1   r.   r/   r0   )r   oldr    r    r!   r"   _   s    zComment.__init__c                 C   s0   t | jrdt| j }nd}d| j| j|S )N,
  end= z$Comment(comment={0},
  items={1}{2}))boolr0   r(   formatr.   r/   )r   endr    r    r!   r)   j   s    
zComment.__str__c                    s   t | jrdt| j }nd}ztdd | jD d  W n tyP   d Y n0 d fdd| j D }|rd| d	 }d
| j	||S )Nr3   r4   c                 S   s   g | ]}t t|qS r    lenr(   .0kr    r    r!   
<listcomp>y       z(Comment._old__repr__.<locals>.<listcomp>r       c                    s&   g | ]\}}d  t|d  |qS z	{:{}} {}
:r6   r(   r;   r<   vlnr    r!   r=   }   r>   
      z&Comment(
  start={},
  items={{{}}}{}))
r5   r0   r(   maxr/   
ValueErrorjoinitemsr6   r.   r   r7   itr    rE   r!   _old__repr__r   s    

zComment._old__repr__c                    s   | j d u r|  S t| jr,dt| j }nd}ztdd | jD d  W n tyb   d Y n0 d fdd| j	 D }|rd| d	 }d

| j||S )Nr3   r4   c                 S   s   g | ]}t t|qS r    r8   r:   r    r    r!   r=      r>   z$Comment.__repr__.<locals>.<listcomp>r   r?   c                    s&   g | ]\}}d  t|d  |qS r@   rB   rC   rE   r    r!   r=      r>   rG   rH   z$Comment(
  pre={},
  items={{{}}}{}))r1   rO   r5   r0   reprrI   r/   rJ   rK   rL   r6   prerM   r    rE   r!   __repr__   s    


zComment.__repr__c                 C   s   | j S r'   )r/   r   r    r    r!   rL      s    zComment.itemsc                 C   s   | j S r'   r0   r   r    r    r!   r7      s    zComment.endc                 C   s
   || _ d S r'   rS   r   valuer    r    r!   r7      s    c                 C   s   | j S r'   r1   r   r    r    r!   rQ      s    zComment.prec                 C   s
   || _ d S r'   rV   rT   r    r    r!   rQ      s    c                 C   s,   | j |}|d u s t||k r$d S || S r'   )r/   getr9   )r   itemposr%   r    r    r!   rW      s    zComment.getc                 C   sb   | j |}|d u r.d g|d   | j |< }nt||krF|d  q.|| d u sVJ |||< d S r#   )r/   rW   r9   append)r   rX   rY   rU   r%   r    r    r!   set   s    zComment.setc                 C   s   | j rN| j d r$|| j d jv r$dS | j d rN| j d D ]}||jv r8 dS q8| j D ]*}|sbqX|D ]}|rf||jv rf  dS qfqX| jr| jD ]}||jv r dS qdS )Nr   Tr   F)r.   rU   rL   valuesr7   )r   r%   crU   r    r    r!   __contains__   s$    



zComment.__contains__N)T)r*   r+   r,   	__slots__r   attribr"   r)   rO   rR   propertyrL   r7   setterrQ   rW   r[   r^   r    r    r    r!   r-   Y   s&   





r-   c                   C   s   d S r'   r    r    r    r    r!   	NoComment   s    rc   c                   @   s6   e Zd ZdZeZdd Zdd Zdd Zdd	d
Z	dS )FormatZ_flow_stylec                 C   s
   d | _ d S r'   re   r   r    r    r!   r"      s    zFormat.__init__c                 C   s
   d| _ d S NTre   r   r    r    r!   set_flow_style   s    zFormat.set_flow_stylec                 C   s
   d| _ d S NFre   r   r    r    r!   set_block_style   s    zFormat.set_block_styleNc                 C   s   | j du r|S | j S )a  if default (the flow_style) is None, the flow style tacked on to
        the object explicitly will be taken. If that is None as well the
        default flow style rules the format down the line, or the type
        of the constituent values (simple -> flow, map/list -> block)Nre   )r   defaultr    r    r!   
flow_style   s    
zFormat.flow_style)N)
r*   r+   r,   r_   format_attribr`   r"   rg   ri   rk   r    r    r    r!   rd      s   rd   c                   @   sT   e Zd ZdZeZdd Zdd Zdd Zdd	 Z	d
d Z
dd Zdd Zdd ZdS )LineColzL
    line and column information wrt document, values start at zero (0)
    c                 C   s   d | _ d | _d | _d S r'   )linecoldatar   r    r    r!   r"      s    zLineCol.__init__c                 C   s   | j d u ri | _ || j |< d S r'   rp   r   keyrp   r    r    r!   add_kv_line_col  s    
zLineCol.add_kv_line_colc                 C   s   |  |ddS Nr   r   _kvr   r<   r    r    r!   rs     s    zLineCol.keyc                 C   s   |  |ddS )Nr      rv   rx   r    r    r!   rU     s    zLineCol.valuec                 C   s(   | j d u rd S | j | }|| || fS r'   rq   )r   r<   Zx0x1rp   r    r    r!   rw     s    

zLineCol._kvc                 C   s*   | j d u rd S | j | d | j | d fS ru   rq   r   idxr    r    r!   rX     s    
zLineCol.itemc                 C   s   | j d u ri | _ || j |< d S r'   rq   rr   r    r    r!   add_idx_line_col!  s    
zLineCol.add_idx_line_colc                 C   s   t d| j| jdS )NzLineCol({line}, {col}))rn   ro   )r   rn   ro   r   r    r    r!   rR   '  s    zLineCol.__repr__N)r*   r+   r,   __doc__line_col_attribr`   r"   rt   rs   rU   rw   rX   r}   rR   r    r    r    r!   rm      s   rm   c                   @   s(   e Zd ZdZdZeZdd Zdd ZdS )Tagz'store tag information for roundtrippingrU   c                 C   s
   d | _ d S r'   r   r   r    r    r!   r"   2  s    zTag.__init__c                 C   s
   d | S )Nz#{0.__class__.__name__}({0.value!r}))r6   r   r    r    r!   rR   6  s    zTag.__repr__N)	r*   r+   r,   r~   r_   
tag_attribr`   r"   rR   r    r    r    r!   r   ,  s
   r   c                   @   s   e Zd Zedd Zd.ddZd/ddZd0dd	Zd1ddZd2ddZ	edd Z
edfddZedd Zdd Zdd Zdd Zedd Zdd Zd3d d!Zed"d# Zd$d% Zd4d&d'Zd(d) Zd*d+ Zd,d- ZdS )5CommentedBasec                 C   s(   t | tjst| tjt  t| tjS r'   )hasattrr-   r`   setattrgetattrr   r    r    r!   ca<  s    zCommentedBase.caFc                 C   s6   |d u rd S |s| j jd u r$g | j _| j j| d S r'   )r   r7   extend)r   r.   clearr    r    r!   yaml_end_comment_extendC  s
    z%CommentedBase.yaml_end_comment_extendc                 C   sr   | j j|g d}|s$|d d u rP|d d urBt|d tsBJ |d |d< n|d |d  |d |d< d S )NNNNNr   r   r   r/   
setdefault
isinstancelistr   r   rs   r.   r   rr    r    r!   yaml_key_comment_extendK  s    z%CommentedBase.yaml_key_comment_extendc                 C   sr   | j j|g d}|s$|d d u rP|d d urBt|d tsBJ |d |d< n|d |d  |d |d< d S )Nr   ry   r   r   r   r   r   r    r    r!   yaml_value_comment_extendV  s    z'CommentedBase.yaml_value_comment_extendr   c           	      C   s   ddl m} ddlm} |  }|d dkr8|dd }||}|dD ]@}| }t|dkrv|d dkrvd	| }|||d | qJdS )
zoverwrites any preceding comment lines on an object
        expects comment to be without `#` and possible have multiple lines
        r   CommentMarkCommentToken
Nr   ## )	errorr   tokensr   _yaml_clear_pre_commentsplitstripr9   rZ   )	r   r.   indentr   r   pre_comments
start_markcomr]   r    r    r!   yaml_set_start_commenta  s    z$CommentedBase.yaml_set_start_commentNc                    sD  ddl m} ddlm   fdd}|du r4|d }|r\t|dkr\|d	 d
kr\|dd	 }|rx|d	 d
krx|dd	 }||}| jj|dg ddg}	|dur|	d du rg |	d< |d
kr|	d |d| n$|	d
D ]}
|	d ||
| q|r@||}|	d du rg |	d< |	d
D ]}
|	d ||
| q$dS )zc
        expects comment (before/after) to be without `#` and possible have multiple lines
        r   r   r   c                    s    | r
dnd|  d |S )Nr   r4   r   r    )smarkr   r    r!   comment_token}  s    zFCommentedBase.yaml_set_comment_before_after_key.<locals>.comment_tokenNr   r   r   r   r4   ry   )
Zruamel.yaml.errorr   Zruamel.yaml.tokensr   r9   r   rL   r   rZ   r   )r   rs   beforer   afterZafter_indentr   r   r   r]   r   r    r   r!   !yaml_set_comment_before_after_keys  s0    z/CommentedBase.yaml_set_comment_before_after_keyc                 C   s(   t | tjst| tjt  t| tjS )z<format attribute

        set_flow_style()/set_block_style())r   rd   r`   r   r   r   r    r    r!   fa  s    zCommentedBase.fac                 C   s   ddl m} ddlm} |du rFz| |}W n tyD   d}Y n0 |d dkrZd| }|du rz|d dkrzd| }d}||}|||dg}| j||d	 dS )
z
        there is a problem as eol comments should start with ' #'
        (but at the beginning of the line the space doesn't have to be before
        the #. The column index is for the # mark
        r   r   r   Nr   r   r    rs   )r   r   r   r   _yaml_get_columnAttributeError_yaml_add_eol_comment)r   r.   rs   columnr   r   r   ctr    r    r!   yaml_add_eol_comment  s     
z"CommentedBase.yaml_add_eol_commentc                 C   s(   t | tjst| tjt  t| tjS r'   )r   rm   r`   r   r   r   r    r    r!   lc  s    zCommentedBase.lcc                 C   s   || j _|| j _d S r'   )r   rn   ro   )r   rn   ro   r    r    r!   _yaml_set_line_col  s    z CommentedBase._yaml_set_line_colc                 C   s   | j || d S r'   )r   rt   rr   r    r    r!   _yaml_set_kv_line_col  s    z#CommentedBase._yaml_set_kv_line_colc                 C   s   | j || d S r'   )r   r}   rr   r    r    r!   _yaml_set_idx_line_col  s    z$CommentedBase._yaml_set_idx_line_colc                 C   s(   t | tjst| tjt  t| tjS r'   )r   r   r`   r   r   r   r    r    r!   anchor  s    zCommentedBase.anchorc                 C   s   t | tjsd S | jS r'   )r   r   r`   r   r   r    r    r!   yaml_anchor  s    zCommentedBase.yaml_anchorc                 C   s   || j _|| j _d S r'   )r   rU   always_dump)r   rU   r   r    r    r!   yaml_set_anchor  s    zCommentedBase.yaml_set_anchorc                 C   s(   t | tjst| tjt  t| tjS r'   )r   r   r`   r   r   r   r    r    r!   tag  s    zCommentedBase.tagc                 C   s   || j _d S r'   )r   rU   rT   r    r    r!   yaml_set_tag  s    zCommentedBase.yaml_set_tagc              
   C   sd   t jtjtjtjtjtfD ]D}t| |r|d urLt||t	
t| || qt||t| | qd S r'   )r-   r`   rd   rm   r   r   r   r   r   copydeepcopyr   )r   tmemoar    r    r!   copy_attributes  s    
zCommentedBase.copy_attributesc                 C   s   t d S r'   NotImplementedErrorr   r.   rs   r    r    r!   r     s    z#CommentedBase._yaml_add_eol_commentc                 C   s   t d S r'   r   r   r    r    r!   _yaml_get_pre_comment  s    z#CommentedBase._yaml_get_pre_commentc                 C   s   t d S r'   r   r   rs   r    r    r!   r     s    zCommentedBase._yaml_get_column)F)F)F)r   )Nr   NN)F)N)r*   r+   r,   ra   r   r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r   ;  s6   




 
&
	




r   c                   @   s   e Zd ZejdfZdd Zdd Zdd Zd(d	d
Z	dd Z
dd Zdd Zdd ZefddZdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd)d$d%Zd&d' ZdS )*r   Z_lstc                 O   s   t j| g|R i | d S r'   )r   r"   r   argskwr    r    r!   r"   	  s    zCommentedSeq.__init__c                 C   s   t | |S r'   r   __getitem__r{   r    r    r!   __getsingleitem__  s    zCommentedSeq.__getsingleitem__c                 C   sP   |t | k r>t|tr>t|ts>t| | tr>t| | |}t| || d S r'   )r9   r   r(   r   typer   __setitem__)r   r|   rU   r    r    r!   __setsingleitem__  s    zCommentedSeq.__setsingleitem__Nc                 C   sV   t | | | jj|d  t| jjD ](}||k r6q(| jj|| jj|d < q(d S r#   )r   __delitem__r   rL   popsorted)r   r|   
list_indexr    r    r!   __delsingleitem__  s    zCommentedSeq.__delsingleitem__c                 C   s
   t | S r'   )r   __len__r   r    r    r!   r   &  s    zCommentedSeq.__len__c                 C   sN   t | || t| jjddD ]*}||k r. qJ| jj|| jj|d < qdS )z5the comments after the insertion have to move forwardTreverser   N)r   insertr   r   rL   r   )r   r|   valr   r    r    r!   r   *  s
    zCommentedSeq.insertc                 C   s   t | | d S r'   )r   r   )r   r   r    r    r!   r   3  s    zCommentedSeq.extendc                 C   s   t | |S r'   )r   __eq__r   otherr    r    r!   r   7  s    zCommentedSeq.__eq__c                 C   s"   |t ur| || n|| j_d S r'   rc   r   r   r.   r   r    r    r!   _yaml_add_comment;  s    zCommentedSeq._yaml_add_commentc                 C   s   | j ||d d S Nr   r   r   r    r    r!   r   B  s    z"CommentedSeq._yaml_add_eol_commentc                 C   s   | j j| d jjS r   r   rL   r   r   r   r    r    r!   _yaml_get_columnXF  s    zCommentedSeq._yaml_get_columnXc                 C   s   d }d }|d |d  }}|| j jv r,|}nB|| j jv r>|}n0t| D ]&\}}||krZ qn|| j jvrhqF|}qF|d ur| |}|S r#   r   rL   	enumerater   r   rs   r   sel_idxrQ   postZrow_idxZ_k1r    r    r!   r   J  s     
zCommentedSeq._yaml_get_columnc                 C   s.   g }| j jd u rd |g| j _n| j jd }|S r#   r   r.   r   r   r    r    r!   r   _  s
    z"CommentedSeq._yaml_get_pre_commentc                 C   s.   g }| j jd u rd |g| j _n|| j jd< |S r#   r   r   r    r    r!   r   h  s
    z$CommentedSeq._yaml_clear_pre_commentc                 C   sB   |   }||t| < | D ]$}|t|| | j||d q|S N)r   )	__class__idrZ   r   r   r   r   r   resr<   r    r    r!   __deepcopy__q  s    zCommentedSeq.__deepcopy__c                 C   s   t | |S r'   )r   __add__r   r    r    r!   r   z  s    zCommentedSeq.__add__Fc                    s   |d u r:t t tt |d}t dd |D  n@t tt|t tt |d}t  fdd|D   jj	}i  j_
t|D ](\}}|d }||v r||  jj	|< qd S )Nr   c                 S   s   g | ]}|d  qS )r   r    r;   r%   r    r    r!   r=     r>   z%CommentedSeq.sort.<locals>.<listcomp>c                    s   g | ]}t  |d  qS )r   r   r   r   r    r!   r=     r>   r   )r   zipranger9   r   r"   map__iter__r   rL   r/   r   )r   rs   r   Ztmp_lstZitmr|   r%   Z	old_indexr    r   r!   sort~  s    zCommentedSeq.sortc                 C   s
   t | S r'   )r   rR   r   r    r    r!   rR     s    zCommentedSeq.__repr__)N)NF)r*   r+   r,   r-   r`   r_   r"   r   r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r   r   rR   r    r    r    r!   r     s&   

					
r   c                   @   sD   e Zd ZdZefddZdd Zdd Zdd	 Zd
d Z	dd Z
dS )r   zEThis primarily exists to be able to roundtrip keys that are sequencesc                 C   s"   |t ur| || n|| j_d S r'   r   r   r    r    r!   r     s    z!CommentedKeySeq._yaml_add_commentc                 C   s   | j ||d d S r   r   r   r    r    r!   r     s    z%CommentedKeySeq._yaml_add_eol_commentc                 C   s   | j j| d jjS r   r   r   r    r    r!   r     s    z!CommentedKeySeq._yaml_get_columnXc                 C   s   d }d }|d |d  }}|| j jv r,|}nB|| j jv r>|}n0t| D ]&\}}||krZ qn|| j jvrhqF|}qF|d ur| |}|S r#   r   r   r    r    r!   r     s     
z CommentedKeySeq._yaml_get_columnc                 C   s.   g }| j jd u rd |g| j _n| j jd }|S r#   r   r   r    r    r!   r     s
    z%CommentedKeySeq._yaml_get_pre_commentc                 C   s.   g }| j jd u rd |g| j _n|| j jd< |S r#   r   r   r    r    r!   r     s
    z'CommentedKeySeq._yaml_clear_pre_commentN)r*   r+   r,   r~   rc   r   r   r   r   r   r   r    r    r    r!   r     s   	r   c                   @   s    e Zd ZdZdd Zdd ZdS )CommentedMapView_mappingc                 C   s
   || _ d S r'   r   )r   mappingr    r    r!   r"     s    zCommentedMapView.__init__c                 C   s   t | j}|S r'   )r9   r   )r   countr    r    r!   r     s    
zCommentedMapView.__len__N)r*   r+   r,   r_   r"   r   r    r    r    r!   r     s   r   c                   @   s,   e Zd ZdZedd Zdd Zdd ZdS )	CommentedMapKeysViewr    c                 C   s   t |S r'   r[   r   rN   r    r    r!   _from_iterable  s    z#CommentedMapKeysView._from_iterablec                 C   s
   || j v S r'   r   r   r    r    r!   r^     s    z!CommentedMapKeysView.__contains__c                 c   s   | j D ]
}|V  qd S r'   r   r$   r    r    r!   r     s    
zCommentedMapKeysView.__iter__Nr*   r+   r,   r_   classmethodr  r^   r   r    r    r    r!   r     s
   
r   c                   @   s,   e Zd ZdZedd Zdd Zdd ZdS )	CommentedMapItemsViewr    c                 C   s   t |S r'   r   r  r    r    r!   r    s    z$CommentedMapItemsView._from_iterablec                 C   s8   |\}}z| j | }W n ty*   Y dS 0 ||kS d S rh   )r   KeyError)r   rX   rs   rU   rD   r    r    r!   r^     s    z"CommentedMapItemsView.__contains__c                 c   s$   | j  D ]}|| j | fV  q
d S r'   r   _keysr   r    r    r!   r      s    zCommentedMapItemsView.__iter__Nr  r    r    r    r!   r    s
   

r  c                   @   s    e Zd ZdZdd Zdd ZdS )CommentedMapValuesViewr    c                 C   s$   | j D ]}|| j | kr dS qdS )NTFr   )r   rU   rs   r    r    r!   r^   	  s    
z#CommentedMapValuesView.__contains__c                 c   s    | j  D ]}| j | V  q
d S r'   r  r   r    r    r!   r     s    zCommentedMapValuesView.__iter__N)r*   r+   r,   r_   r^   r   r    r    r    r!   r	    s   r	  c                   @   s(  e Zd ZejddfZdd ZeefddZdd Z	d	d
 Z
dd Zdd Zdd Zdd ZdEddZdFddZdd Zdd Zdd Zdd  ZdGd!d"Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z e!d9d: Z"d;d< Z#d=d> Z$d?d@ Z%dAdB Z&dCdD Z'dS )Hr   _ok_refc                 O   s*   t  | _g | _tj| g|R i | d S r'   )r[   r
  r  r   r"   r   r    r    r!   r"     s    zCommentedMap.__init__c                 C   s:   |t ur| || dS |t ur.| || n|| j_dS z>values is set to key to indicate a value attachment of commentNrc   r   r   r   r.   r   r.   rs   rU   r    r    r!   r     s    zCommentedMap._yaml_add_commentc                 C   s   | j ||d dS z6add on the value line, with value specified by the keyr   Nr   r   r    r    r!   r   *  s    z"CommentedMap._yaml_add_eol_commentc                 C   s   | j j| d jjS )Nr   r   r   r    r    r!   r   /  s    zCommentedMap._yaml_get_columnXc           	      C   s   d }d }d\}}}| D ],}|d ur2||kr2|} qD||kr>|}|}q|| j jv rV|}n:|| j jv rh|}n(| D ]"}||kr| q|| j jvrql|}ql|d ur| |}|S )N)NNN)r   rL   r   )	r   rs   r   r   rQ   r   lastr%   Zk1r    r    r!   r   3  s.    

zCommentedMap._yaml_get_columnc                 C   s.   g }| j jd u rd |g| j _n| j jd }|S r#   r   r   r    r    r!   r   O  s
    z"CommentedMap._yaml_get_pre_commentc                 C   s.   g }| j jd u rd |g| j _n|| j jd< |S r#   r   r   r    r    r!   r   X  s
    z$CommentedMap._yaml_clear_pre_commentc                 O   s   zt j| g|R i | W n0 tyL   |d D ]}|d | | |< q2Y n0 |rz| j|d   W n0 ty   |d D ]}| j|d  qY n0 |r| jj|   d S r   )r   update	TypeErrorr
  keysr   add)r   valsr   r%   r    r    r!   r  a  s    zCommentedMap.updateNc                 C   sr   t |  |g }t| ||| |D ]}| j| q&| jD ]}|D ]}|| qFq>|durn| j||d dS )zPinsert key value into given position
        attach comment if provided
        Nr   )	r   r  r   r   r
  r  r  update_key_valuer   )r   rY   rs   rU   r.   r  Zkeytmprefererr    r    r!   r   s  s    
zCommentedMap.insertFc              	      sl   t |ts| ||S  fdd z |d| W S  tyH   | Y S  ttfyf   s^ | Y S 0 dS )z/multi-level get that expects dicts within dictsc                    sZ   st |tsJ |t| kr>|t| kr.t|| |d   S  | |d || |d   S r#   )r   dictr9   
IndexError)Zkey_listleveldget_one_levellist_okr    r!   r    s    z)CommentedMap.mlget.<locals>.get_one_levelr   N)r   r   rW   r  r  r  )r   rs   rj   r  r    r  r!   mlget  s    

zCommentedMap.mlgetc                 C   sZ   zt | |W S  tyT   t| tg D ]$}||d v r(|d |    Y S q( Y n0 d S r#   )r   r   r  r   r   )r   rs   mergedr    r    r!   r     s    zCommentedMap.__getitem__c                 C   sX   || v r:t |tr:t |ts:t | | tr:t| | |}t| || | j| d S r'   )r   r(   r   r   r   r   r
  r  )r   rs   rU   r    r    r!   r     s    zCommentedMap.__setitem__c                 C   s   || j v rdS d S rf   )r
  r   r    r    r!   _unmerged_contains  s    
zCommentedMap._unmerged_containsc                 C   s   t t| |S r'   )r5   r   r^   r   r    r    r!   r^     s    zCommentedMap.__contains__c                 C   s"   z|  |W S    | Y S 0 d S r'   )r   )r   rs   rj   r    r    r!   rW     s    zCommentedMap.getc                 C   s   t | ddS )Nr   r   )r   rR   replacer   r    r    r!   rR     s    zCommentedMap.__repr__c                 c   s0   t | D ] }|| jv r
|t | |fV  q
d S r'   )r   r   r
  r   r$   r    r    r!   non_merged_items  s    
zCommentedMap.non_merged_itemsc                 C   s2   | j | t| | | jD ]}|| qd S r'   )r
  discardr   r   r  r  )r   rs   r  r    r    r!   r     s    
zCommentedMap.__delitem__c                 c   s   t | D ]
}|V  q
d S r'   r   r   r$   r    r    r!   r     s    zCommentedMap.__iter__c                 c   s   t | D ]
}|V  q
d S r'   r%  r$   r    r    r!   r    s    zCommentedMap._keysc                 C   s   t t| S r'   )intr   r   r   r    r    r!   r     s    zCommentedMap.__len__c                 C   s   t t| |kS r'   )r5   r  r   r    r    r!   r     s    zCommentedMap.__eq__c                 C   s   t | S r'   )r   r   r    r    r!   r    s    zCommentedMap.keysc                 C   s   t | S r'   )r	  r   r    r    r!   r\     s    zCommentedMap.valuesc                 c   s&   t | D ]}|t | |fV  q
d S r'   )r   r   r   r$   r    r    r!   r/     s    zCommentedMap._itemsc                 C   s   t | S r'   )r  r   r    r    r!   rL     s    zCommentedMap.itemsc                 C   s    t | tst| tg  t| tS r'   )r   r   r   r   r   r    r    r!   merge  s    
zCommentedMap.mergec                 C   s2   t |  }|  D ]\}}|||< q| | |S r'   )r   r/   r   )r   r%   r<   rD   r    r    r!   r     s
    


zCommentedMap.copyc                 C   s   || j vr| j | d S r'   )r  rZ   )r   cmr    r    r!   add_referent  s    
zCommentedMap.add_referentc                 C   sZ   |D ]D}|d  |  |d  D ]$\}}t| |r8q"t| || q"q| j| d S r#   )r)  rL   r   r^   r   r'  r   )r   rU   rD   r<   r    r    r!   add_yaml_merge  s    zCommentedMap.add_yaml_mergec                 C   sR   || j v rd S | jD ],}||d v rt| ||d |   d S qt| | d S r#   )r
  r'  r   r   r   )r   rs   rD   r    r    r!   r  #  s    

zCommentedMap.update_key_valuec                 C   sD   |   }||t| < | D ]}t| | |||< q| j||d |S r   )r   r   r   r   r   r   r    r    r!   r   -  s    zCommentedMap.__deepcopy__)N)NF)N)(r*   r+   r,   r-   r`   r_   r"   rc   r   r   r   r   r   r   r  r   r  r   r   r!  r^   rW   rR   r#  r   r   r  r   r   r  r\   r/   rL   ra   r'  r   r)  r*  r  r   r    r    r    r!   r     sD   		






r   c                 O   s   t d| jd S )Nz{} objects are immutable)r  r6   r*   )clsr   kwargsr    r    r!   raise_immutable8  s    r-  c                   @   s   e Zd ZejdfZdd Ze Z Z	 Z
 Z Z ZZdd Zdd Zdd	 Zd
d Zdd ZedddZefddZdd Zdd Zdd Zdd ZdS )CommentedKeyMap_odc                 O   s@   t | drt|  zt|i || _W n ty:    Y n0 d S )Nr/  )r   r-  r   r/  r  r   r    r    r!   r"   B  s    
zCommentedKeyMap.__init__c                 C   s
   | j | S r'   )r/  )r   indexr    r    r!   r   N  s    zCommentedKeyMap.__getitem__c                 c   s   | j  D ]
}|V  q
d S r'   )r/  r   r$   r    r    r!   r   R  s    zCommentedKeyMap.__iter__c                 C   s
   t | jS r'   )r9   r/  r   r    r    r!   r   W  s    zCommentedKeyMap.__len__c                 C   s   t t|  S r'   )hashtuplerL   r   r    r    r!   __hash__[  s    zCommentedKeyMap.__hash__c                 C   s.   t | ts| j S dtt| j  d S )Nzordereddict())r   r   r/  rR   rP   r   rL   r   r    r    r!   rR   _  s    

zCommentedKeyMap.__repr__Nc                 C   s   t t| |S r'   )r.  r  fromkeys)r  rD   r    r    r!   r5  e  s    zCommentedKeyMap.fromkeysc                 C   s"   |t ur| || n|| j_d S r'   r   r   r    r    r!   r   j  s    z!CommentedKeyMap._yaml_add_commentc                 C   s   | j ||d d S r   r   r   r    r    r!   r   q  s    z%CommentedKeyMap._yaml_add_eol_commentc                 C   s   | j j| d jjS r   r   r   r    r    r!   r   u  s    z!CommentedKeyMap._yaml_get_columnXc                 C   s   d }d }|d |d  }}|| j jv r,|}nB|| j jv r>|}n0t| D ]&\}}||krZ qn|| j jvrhqF|}qF|d ur| |}|S r#   r   r   r    r    r!   r   y  s     
z CommentedKeyMap._yaml_get_columnc                 C   s.   g }| j jd u rd |g| j _n|| j jd< |S r#   r   r   r    r    r!   r     s
    z%CommentedKeyMap._yaml_get_pre_comment)N)r*   r+   r,   r-   r`   r_   r"   r-  r   r   r   r   popitemr   r  r   r   r   r3  rR   r  r5  rc   r   r   r   r   r   r    r    r    r!   r.  >  s   
	r.  c                   @   s   e Zd ZejfZdS )r   N)r*   r+   r,   r-   r`   r_   r    r    r    r!   r     s   r   c                   @   sf   e Zd ZejdfZdddZeefddZdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd ZdS )r   odictNc                 C   s&   t  | _t|  |d ur"| |O } d S r'   )r   r7  r   r"   )r   r\   r    r    r!   r"     s    
zCommentedSet.__init__c                 C   s:   |t ur| || dS |t ur.| || n|| j_dS r  r  r  r    r    r!   r     s    zCommentedSet._yaml_add_commentc                 C   s   | j ||d dS r  r   r   r    r    r!   r     s    z"CommentedSet._yaml_add_eol_commentc                 C   s   d| j |< dS )zAdd an element.Nr7  rT   r    r    r!   r    s    zCommentedSet.addc                 C   s   | j |= dS )z8Remove an element.  Do not raise an exception if absent.Nr8  rT   r    r    r!   r$    s    zCommentedSet.discardc                 C   s
   || j v S r'   r8  r$   r    r    r!   r^     s    zCommentedSet.__contains__c                 c   s   | j D ]
}|V  qd S r'   r8  r$   r    r    r!   r     s    
zCommentedSet.__iter__c                 C   s
   t | jS r'   )r9   r7  r   r    r    r!   r     s    zCommentedSet.__len__c                 C   s   d | j S )Nz
set({0!r}))r6   r7  r  r   r    r    r!   rR     s    zCommentedSet.__repr__)N)r*   r+   r,   r-   r`   r_   r"   rc   r   r   r  r$  r^   r   r   rR   r    r    r    r!   r     s   

r   c                   @   s   e Zd ZdddZdd ZdS )TaggedScalarNc                 C   s"   || _ || _|d ur| | d S r'   )rU   styler   )r   rU   r:  r   r    r    r!   r"     s    zTaggedScalar.__init__c                 C   s   | j S r'   r   r   r    r    r!   r)     s    zTaggedScalar.__str__)NNN)r*   r+   r,   r"   r)   r    r    r    r!   r9    s   
r9  r4   .c                 C   s   t | trtt| drt|r.|d|t|  |d| j | D ],}t| | |rd|| t| n|||d qDnzt | t	rt| dr|r|d|t|  |d| j t
| D ]0\}}t||r|| t| nt|||d qdS )zg
    recursively dump comments, all but the toplevel preceded by the path
    in dotted form x.0.a
    r   z{} {}
z{!r}
)namesepoutN)r   r  r   writer6   r   r   dump_commentsr(   r   r   )r  r<  r=  r>  r<   r|   r    r    r!   r@    s    , r@  )Ir~   sysr   Zruamel.yaml.compatr   r   r   r   Zruamel.yaml.scalarstringr   Zruamel.yaml.anchorr   collections.abcr   r	   r
   r   AnyDictOptionalListUnionIterator__all__r   r   r   r   r   ZcidxZC_VALUE_EOLZ
C_ELEM_EOLZ	C_KEY_EOLZ	C_KEY_PREZ
C_ELEM_PREZC_VALUE_POSTZC_ELEM_POSTZC_VALUE_PREZ
C_KEY_POSTZ	C_TAG_EOLZ
C_TAG_POSTZ	C_TAG_PREZC_ANCHOR_EOLZC_ANCHOR_POSTZC_ANCHOR_PREr   rl   r   r   r   r-   rc   rd   rm   r   r   r   r   r2  r   r   r   r  r	  r   r  r-  r.  r   r   r9  stdoutr@  r    r    r    r!   <module>   sp   


 3 L :  $
Z6