U
    e3                     @   s  d dl mZmZ d dlZd dlZd dlmZmZmZm	Z	 d dl
mZ d dlmZ errd dlmZmZmZmZmZ nd dlmZmZmZmZmZ ddd	d
dddgZdZdZdZdZdZ G dd de!Z"dd Z#G dd de!Z$G dd de!Z%G dd de!Z&G dd de!Z'G dd de	e(e'Z)G d d de*e'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ee'Z0e1d*d+ Z2G d,d- d-e'eZ3G d.d
 d
e0Z4G d/d dee'Z5G d0d1 d1e'Z6d2d3ej7fd4d5Z8dS )6    )absolute_importprint_functionN)ordereddictPY2string_typesMutableSliceableSequence)ScalarString)Anchor)
MutableSetSizedSetMutableMappingMappingCommentedSeqCommentedKeySeqCommentedMapCommentedOrderedMapCommentedSetcomment_attribmerge_attribZ_yaml_commentZ_yaml_formatZ_yaml_line_colZ_yaml_mergeZ	_yaml_tagc                   @   sd   e Zd ZdZe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S )Comment)comment_items_end_startc                 C   s   d | _ i | _g | _d S N)r   r   r   self r   3lib/python3.8/site-packages/ruamel_yaml/comments.py__init__.   s    zComment.__init__c                 C   s0   t | jrdt| j }nd}d| j| j|S )Nz,
  end= z$Comment(comment={0},
  items={1}{2}))boolr   strformatr   r   )r   endr   r   r   __str__8   s    
zComment.__str__c                 C   s   | j S r   r   r   r   r   r   items@   s    zComment.itemsc                 C   s   | j S r   r   r   r   r   r   r%   E   s    zComment.endc                 C   s
   || _ d S r   r)   r   valuer   r   r   r%   J   s    c                 C   s   | j S r   r   r   r   r   r   startO   s    zComment.startc                 C   s
   || _ d S r   r,   r*   r   r   r   r-   T   s    N)__name__
__module____qualname__	__slots__r   attribr    r&   propertyr(   r%   setterr-   r   r   r   r   r   (   s   




r   c                   C   s   d S r   r   r   r   r   r   	NoComment[   s    r5   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   r7   r   r   r   r   r    d   s    zFormat.__init__c                 C   s
   d| _ d S NTr7   r   r   r   r   set_flow_styleh   s    zFormat.set_flow_stylec                 C   s
   d| _ d S NFr7   r   r   r   r   set_block_stylel   s    zFormat.set_block_styleNc                 C   s   | j dk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)Nr7   )r   defaultr   r   r   
flow_stylep   s    
zFormat.flow_style)N)
r.   r/   r0   r1   format_attribr2   r    r9   r;   r=   r   r   r   r   r6   `   s   r6   c                   @   sH   e 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S )LineColc                 C   s   d | _ d | _d | _d S r   )linecoldatar   r   r   r   r    ~   s    zLineCol.__init__c                 C   s   | j d kri | _ || j |< d S r   rB   r   keyrB   r   r   r   add_kv_line_col   s    
zLineCol.add_kv_line_colc                 C   s   |  |ddS Nr      _kvr   kr   r   r   rE      s    zLineCol.keyc                 C   s   |  |ddS )N      rI   rK   r   r   r   r+      s    zLineCol.valuec                 C   s(   | j d krd S | j | }|| || fS r   rC   )r   rL   Zx0Zx1rB   r   r   r   rJ      s    

zLineCol._kvc                 C   s*   | j d krd S | j | d | j | d fS rG   rC   r   idxr   r   r   item   s    
zLineCol.itemc                 C   s   | j d kri | _ || j |< d S r   rC   rD   r   r   r   add_idx_line_col   s    
zLineCol.add_idx_line_colN)r.   r/   r0   line_col_attribr2   r    rF   rE   r+   rJ   rQ   rR   r   r   r   r   r?   {   s   r?   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r+   c                 C   s
   d | _ d S r   rU   r   r   r   r   r       s    zTag.__init__c                 C   s
   d | S )Nz#{0.__class__.__name__}({0.value!r}))r$   r   r   r   r   __repr__   s    zTag.__repr__N)	r.   r/   r0   __doc__r1   
tag_attribr2   r    rV   r   r   r   r   rT      s
   rT   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   r2   setattrgetattrr   r   r   r   ca   s    zCommentedBase.caFc                 C   s6   |d krd S |s| j jd kr$g | j _| j j| d S r   )r]   r%   extend)r   r   clearr   r   r   yaml_end_comment_extend   s
    z%CommentedBase.yaml_end_comment_extendc                 C   sv   | j j|d d d d g}|s(|d d krT|d d k	rFt|d tsFt|d |d< n|d |d  |d |d< d S )NrH   r   r]   r   
setdefault
isinstancelistAssertionErrorr^   r   rE   r   r_   rr   r   r   yaml_key_comment_extend   s    z%CommentedBase.yaml_key_comment_extendc                 C   sv   | j j|d d d d g}|s(|d d krT|d d k	rFt|d tsFt|d |d< n|d |d  |d |d< d S )NrN   rH   r   rM   ra   rf   r   r   r   yaml_value_comment_extend   s    z'CommentedBase.yaml_value_comment_extendr   c                 C   sn   ddl m} ddlm} |  }|d dkr8|dd }||}|dD ]}||d| d |d qJdS )zoverwrites any preceding comment lines on an object
        expects comment to be without `#` and possible have multiple lines
        rH   CommentMarkCommentToken
N# )errorrk   tokensrm   _yaml_get_pre_commentsplitappend)r   r   indentrk   rm   pre_comments
start_markcomr   r   r   yaml_set_start_comment   s    z$CommentedBase.yaml_set_start_commentNc                    s,  ddl m} ddlm   fdd}|dk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
kr|	d |d| n(|r|	d
D ]}
|	d ||
| q|r(||}|	d dkrg |	d< |	d
D ]}
|	d ||
| qdS )zc
        expects comment (before/after) to be without `#` and possible have multiple lines
        r   rj   rl   c                    s    | r
dnd|  d |d S )Nrp   r!   ro   r   )sZmarkrl   r   r   comment_token   s    zFCommentedBase.yaml_set_comment_before_after_key.<locals>.comment_tokenNrM   rH   rn   ro   r!   rN   )
Zruamel_yaml.errorrk   Zruamel_yaml.tokensrm   lenr]   r(   rb   ru   rt   )r   rE   Zbeforerv   ZafterZafter_indentrk   r|   rx   cry   r   rl   r   !yaml_set_comment_before_after_key   s,    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())rZ   r6   r2   r[   r\   r   r   r   r   fa  s    zCommentedBase.fac                 C   s   ddl m} ddlm} |dkrHz| |}W n tk
rF   d}Y nX |d dkr\d| }|dkr||d dkr|d| }d}||}|||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
        rH   rl   rj   Nr   #rp    rE   )rr   rm   rq   rk   _yaml_get_columnAttributeError_yaml_add_eol_comment)r   r   rE   columnrm   rk   rx   Z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   )rZ   r?   r2   r[   r\   r   r   r   r   lc0  s    zCommentedBase.lcc                 C   s   || j _|| j _d S r   )r   r@   rA   )r   r@   rA   r   r   r   _yaml_set_line_col7  s    z CommentedBase._yaml_set_line_colc                 C   s   | j || d S r   )r   rF   rD   r   r   r   _yaml_set_kv_line_col<  s    z#CommentedBase._yaml_set_kv_line_colc                 C   s   | j || d S r   )r   rR   rD   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   )rZ   r	   r2   r[   r\   r   r   r   r   anchorD  s    zCommentedBase.anchorc                 C   s   t | tjsd S | jS r   )rZ   r	   r2   r   r   r   r   r   yaml_anchorK  s    zCommentedBase.yaml_anchorc                 C   s   || j _|| j _d S r   )r   r+   always_dump)r   r+   r   r   r   r   yaml_set_anchorQ  s    zCommentedBase.yaml_set_anchorc                 C   s(   t | tjst| tjt  t| tjS r   )rZ   rT   r2   r[   r\   r   r   r   r   tagV  s    zCommentedBase.tagc                 C   s   || j _d S r   )r   r+   r*   r   r   r   yaml_set_tag]  s    zCommentedBase.yaml_set_tagc              	   C   s^   t jtjtjtjtjtfD ]>}t| |r|rFt||t	
t| | qt||t| | qd S r   )r   r2   r6   r?   r	   rT   r   rZ   r[   copydeepcopyr\   )r   tdeepar   r   r   copy_attributesa  s     
zCommentedBase.copy_attributesc                 C   s   t d S r   NotImplementedErrorr   r   rE   r   r   r   r   m  s    z#CommentedBase._yaml_add_eol_commentc                 C   s   t d S r   r   r   r   r   r   rs   q  s    z#CommentedBase._yaml_get_pre_commentc                 C   s   t d S r   r   r   rE   r   r   r   r   u  s    zCommentedBase._yaml_get_column)F)F)F)r   )Nr   NN)F)F)r.   r/   r0   r3   r]   r`   rh   ri   rz   r   r   r5   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   r   r   r   rY      s<   




       
#
	




rY   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"d#Zd$d% ZdS )(r   Z_lstc                 O   s   t j| f|| d S r   )rd   r    r   argskwr   r   r   r    }  s    zCommentedSeq.__init__c                 C   s   t | |S r   rd   __getitem__rO   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   )r}   rc   r   r   typerd   __setitem__)r   rP   r+   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 NrH   )rd   __delitem__r]   r(   popsorted)r   rP   
list_indexr   r   r   __delsingleitem__  s    zCommentedSeq.__delsingleitem__c                 C   s
   t | S r   )rd   __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reverserH   N)rd   insertr   r]   r(   r   )r   rP   valr   r   r   r   r     s
    zCommentedSeq.insertc                 C   s   t | | d S r   )rd   r^   )r   r   r   r   r   r^     s    zCommentedSeq.extendc                 C   s   t | |S r   )rd   __eq__r   otherr   r   r   r     s    zCommentedSeq.__eq__c                 C   s"   |t k	r| || n|| j_d S r   r5   rh   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     s    z"CommentedSeq._yaml_add_eol_commentc                 C   s   | j j| d jjS Nr   r]   r(   rx   r   r   r   r   r   _yaml_get_columnX  s    zCommentedSeq._yaml_get_columnXc                 C   s   d }d }|d |d  }}|| j jkr,|}nB|| j jkr>|}n0t| D ]&\}}||krZ qn|| j jkrhqF|}qF|d k	r| |}|S r   r]   r(   	enumerater   r   rE   r   sel_idxprepostZrow_idxZ_k1r   r   r   r     s     
zCommentedSeq._yaml_get_columnc                 C   s.   g }| j jd krd |g| j _n|| j jd< |S r   r]   r   r   rw   r   r   r   rs     s
    z"CommentedSeq._yaml_get_pre_commentc                 C   s@   |   }||t| < | D ]"}|t| | j|dd q|S NT)r   )	__class__idru   r   r   r   r   memoresrL   r   r   r   __deepcopy__  s    zCommentedSeq.__deepcopy__c                 C   s   t | |S r   )rd   __add__r   r   r   r   r     s    zCommentedSeq.__add__Fc                    s   |d k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 }||kr||  jj	|< qd S )Nr   c                 S   s   g | ]}|d  qS )r   r   .0xr   r   r   
<listcomp>  s     z%CommentedSeq.sort.<locals>.<listcomp>c                    s   g | ]}t  |d  qS )rH   r   r   r   r   r   r     s     rH   )r   zipranger}   rd   r    map__iter__r]   r(   r   r   )r   rE   r   Ztmp_lstZitmrP   r   Z	old_indexr   r   r   sort  s     zCommentedSeq.sortc                 C   s
   t | S r   )rd   rV   r   r   r   r   rV     s    zCommentedSeq.__repr__)N)NF)r.   r/   r0   r   r2   r1   r    r   r   r   r   r   r^   r   r5   r   r   r   r   rs   r   r   r   rV   r   r   r   r   r   z  s$   

				
c                   @   s<   e Zd ZdZef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 k	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kr,|}nB|| j jkr>|}n0t| D ]&\}}||krZ qn|| j jkrhqF|}qF|d k	r| |}|S r   r   r   r   r   r   r     s     
z CommentedKeySeq._yaml_get_columnc                 C   s.   g }| j jd krd |g| j _n|| j jd< |S r   r   r   r   r   r   rs   &  s
    z%CommentedKeySeq._yaml_get_pre_commentN)
r.   r/   r0   rW   r5   r   r   r   r   rs   r   r   r   r   r     s   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    3  s    zCommentedMapView.__init__c                 C   s   t | j}|S r   )r}   r   )r   countr   r   r   r   7  s    
zCommentedMapView.__len__N)r.   r/   r0   r1   r    r   r   r   r   r   r   0  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   setr   itr   r   r   _from_iterable@  s    z#CommentedMapKeysView._from_iterablec                 C   s
   || j kS r   r   r   r   r   r   __contains__E  s    z!CommentedMapKeysView.__contains__c                 c   s   | j D ]
}|V  qd S r   r   r   r   r   r   r   r   I  s    
zCommentedMapKeysView.__iter__Nr.   r/   r0   r1   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  s    z$CommentedMapItemsView._from_iterablec                 C   s:   |\}}z| j | }W n tk
r,   Y dS X ||kS d S r:   )r   KeyError)r   rQ   rE   r+   vr   r   r   r   X  s    z"CommentedMapItemsView.__contains__c                 c   s$   | j  D ]}|| j | fV  q
d S r   r   _keysr   r   r   r   r   b  s    zCommentedMapItemsView.__iter__Nr   r   r   r   r   r   P  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   r+   rE   r   r   r   r   k  s    
z#CommentedMapValuesView.__contains__c                 c   s    | j  D ]}| j | V  q
d S r   r   r   r   r   r   r   r  s    zCommentedMapValuesView.__iter__N)r.   r/   r0   r1   r   r   r   r   r   r   r   h  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dTddZdUddZdd Zdd Zdd Zdd ZdVdd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zerd/d0 Zd1d2 Zd3d4 Znd5d0 Zerd6d7 Z d8d9 Z!d:d; Z"d<d= Z#nd>d9 Z!d?d@ Z$erFdAdB Z%dCdD Z&dEdF Z'ndGdB Z%e(dHdI Z)dJdK Z*dLdM Z+dNdO Z,dPdQ Z-dRdS Z.dS )Wr   _ok_refc                 O   s$   t  | _g | _tj| f|| d S r   )r   r   r   r   r    r   r   r   r   r    {  s    zCommentedMap.__init__c                 C   s:   |t k	r| || dS |t k	r.| || n|| j_dS z>values is set to key to indicate a value attachment of commentNr5   rh   ri   r]   r   r   r   rE   r+   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 keyrU   Nr   r   r   r   r   r     s    z"CommentedMap._yaml_add_eol_commentc                 C   s   | j j| d jjS )NrM   r   r   r   r   r   r     s    zCommentedMap._yaml_get_columnXc           	      C   s   d }d }d\}}}| D ],}|d k	r2||kr2|} qD||kr>|}|}q|| j jkrV|}n:|| j jkrh|}n(| D ]"}||kr| q|| j jkrql|}ql|d k	r| |}|S )N)NNN)r]   r(   r   )	r   rE   r   r   r   r   Zlastr   Zk1r   r   r   r     s.    

zCommentedMap._yaml_get_columnc                 C   s.   g }| j jd krd |g| j _n|| j jd< |S r   r   r   r   r   r   rs     s
    z"CommentedMap._yaml_get_pre_commentc                 C   sP   z t | | | j|  W n* tk
rJ   |D ]}|| | |< q4Y nX d S r   )r   updater   keys	TypeError)r   Zvalsr   r   r   r   r     s    zCommentedMap.updateNc                 C   s6   t | ||| | j| |dk	r2| j||d dS )zPinsert key value into given position
        attach comment if provided
        Nr   )r   r   r   addr   )r   posrE   r+   r   r   r   r   r     s    zCommentedMap.insertFc              	      sp   t |ts| ||S  fdd z |d| W S  tk
rJ   | Y S  ttfk
rj   sb | Y S X dS )z/multi-level get that expects dicts within dictsc                    sZ   st |tst|t| kr>|t| kr.t|| |d   S  | |d || |d   S r   )rc   dictre   r}   
IndexError)Zkey_listleveldget_one_levellist_okr   r   r     s    z)CommentedMap.mlget.<locals>.get_one_levelrH   N)rc   rd   getr   r   r   )r   rE   r<   r   r   r   r   mlget  s    

zCommentedMap.mlgetc                 C   s\   zt | |W S  tk
rV   t| tg D ]$}||d kr*|d |    Y S q* Y nX d S r   )r   r   r   r\   r   )r   rE   Zmergedr   r   r   r     s    zCommentedMap.__getitem__c                 C   sX   || kr:t |tr:t |ts:t | | tr:t| | |}t| || | j| d S r   )rc   r   r   r   r   r   r   r   )r   rE   r+   r   r   r   r     s    zCommentedMap.__setitem__c                 C   s   || j krdS d S r8   )r   r   r   r   r   _unmerged_contains  s    
zCommentedMap._unmerged_containsc                 C   s   t t| |S r   )r"   r   r   r   r   r   r   r     s    zCommentedMap.__contains__c                 C   s"   z|  |W S    | Y S X d S r   )r   )r   rE   r<   r   r   r   r   	  s    zCommentedMap.getc                 C   s   t | ddS )Nr   r   )r   rV   replacer   r   r   r   rV     s    zCommentedMap.__repr__c                 c   s0   t | D ] }|| jk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   update_key_value)r   rE   Zrefererr   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   3  s    zCommentedMap._keysc                 C   s
   t | S r   )r   r   r   r   r   r   r   8  s    zCommentedMap.__len__c                 C   s   t t| |kS r   )r"   r   r   r   r   r   r   <  s    zCommentedMap.__eq__c                 C   s   t |  S r   )rd   r   r   r   r   r   r   B  s    zCommentedMap.keysc                 C   s   |   S r   )r   r   r   r   r   iterkeysF  s    zCommentedMap.iterkeysc                 C   s   t | S r   r   r   r   r   r   viewkeysJ  s    zCommentedMap.viewkeysc                 C   s   t | S r   r  r   r   r   r   r   P  s    c                 c   s"   t | D ]}t | |V  q
d S r   r   r   r   r   r   r   r   _valuesV  s    zCommentedMap._valuesc                 C   s   t |  S r   )rd   r  r   r   r   r   values[  s    zCommentedMap.valuesc                 C   s   |   S r   )r  r   r   r   r   
itervalues_  s    zCommentedMap.itervaluesc                 C   s   t | S r   r   r   r   r   r   
viewvaluesc  s    zCommentedMap.viewvaluesc                 C   s   t | S r   r
  r   r   r   r   r  i  s    c                 c   s&   t | D ]}|t | |fV  q
d S r   r  r   r   r   r   r   m  s    zCommentedMap._itemsc                 C   s   t |  S r   )rd   r   r   r   r   r   r(   t  s    zCommentedMap.itemsc                 C   s   |   S r   r'   r   r   r   r   	iteritemsx  s    zCommentedMap.iteritemsc                 C   s   t | S r   r   r   r   r   r   	viewitems|  s    zCommentedMap.viewitemsc                 C   s   t | S r   r  r   r   r   r   r(     s    c                 C   s    t | tst| tg  t| tS r   )rZ   r   r[   r\   r   r   r   r   merge  s    
zCommentedMap.mergec                 C   s"   i }|   D ]\}}|||< q|S r   r'   )r   r   rL   r   r   r   r   r     s    
zCommentedMap.copyc                 C   s   || j kr| j | d S r   )r   ru   )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  r(   r   r   r   r  r^   )r   r+   r   rL   r   r   r   add_yaml_merge  s    zCommentedMap.add_yaml_mergec                 C   sR   || j krd S | jD ],}||d krt| ||d |   d S qt| | d S r   )r   r  r   r   r   )r   rE   r   r   r   r   r    s    

zCommentedMap.update_key_valuec                 C   sB   |   }||t| < | D ]$}t| | ||< | j|dd q|S r   )r   r   r   r   r   r   r   r   r   r     s    zCommentedMap.__deepcopy__)N)NF)N)/r.   r/   r0   r   r2   r1   r    r5   r   r   r   r   rs   r   r   r   r   r   r   r   r   rV   r   r   r   r   r   r   r   r   r  r  r  r  r	  r  r   r(   r  r  r3   r  r   r  r  r  r   r   r   r   r   r   x  s\   	











c                 O   s   t d| jd S )Nz{} objects are immutable)r   r$   r.   )clsr   kwargsr   r   r   raise_immutable  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   sV   t | drt|  zt||| _W n. tk
rP   trJt|d  | _n Y nX d S )Nr  r   )rZ   r  r   r  r   r   r(   r   r   r   r   r      s    
zCommentedKeyMap.__init__c                 C   s
   | j | S r   )r  )r   indexr   r   r   r     s    zCommentedKeyMap.__getitem__c                 c   s   | j  D ]
}|V  q
d S r   )r  r   r   r   r   r   r     s    zCommentedKeyMap.__iter__c                 C   s
   t | jS r   )r}   r  r   r   r   r   r     s    zCommentedKeyMap.__len__c                 C   s   t t|  S r   )hashtupler(   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())rZ   r   r  rV   reprrd   r(   r   r   r   r   rV     s    

zCommentedKeyMap.__repr__Nc                 C   s   t t| |S r   )r  r   fromkeys)r   r   r   r   r   r    s    zCommentedKeyMap.fromkeysc                 C   s"   |t k	r| || n|| j_d S r   r   r   r   r   r   r     s    z!CommentedKeyMap._yaml_add_commentc                 C   s   | j ||d d S r   r   r   r   r   r   r     s    z%CommentedKeyMap._yaml_add_eol_commentc                 C   s   | j j| d jjS r   r   r   r   r   r   r     s    z!CommentedKeyMap._yaml_get_columnXc                 C   s   d }d }|d |d  }}|| j jkr,|}nB|| j jkr>|}n0t| D ]&\}}||krZ qn|| j jkrhqF|}qF|d k	r| |}|S r   r   r   r   r   r   r     s     
z CommentedKeyMap._yaml_get_columnc                 C   s.   g }| j jd krd |g| j _n|| j jd< |S r   r   r   r   r   r   rs     s
    z%CommentedKeyMap._yaml_get_pre_comment)N)r.   r/   r0   r   r2   r1   r    r  r   r   r_   r   popitemrb   r   r   r   r   r  rV   r   r  r5   r   r   r   r   rs   r   r   r   r   r    s   
r  c                   @   s   e Zd ZejfZdS )r   N)r.   r/   r0   r   r2   r1   r   r   r   r   r     s   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 k	r"| |O } d S r   )r   r   r
   r    )r   r  r   r   r   r    "  s    
zCommentedSet.__init__c                 C   s:   |t k	r| || dS |t k	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   4  s    z"CommentedSet._yaml_add_eol_commentc                 C   s   d| j |< dS )zAdd an element.Nr   r*   r   r   r   r   9  s    zCommentedSet.addc                 C   s   | j |= dS )z8Remove an element.  Do not raise an exception if absent.Nr!  r*   r   r   r   r   >  s    zCommentedSet.discardc                 C   s
   || j kS r   r!  r   r   r   r   r   C  s    zCommentedSet.__contains__c                 c   s   | j D ]
}|V  qd S r   r!  r   r   r   r   r   G  s    
zCommentedSet.__iter__c                 C   s
   t | jS r   )r}   r   r   r   r   r   r   L  s    zCommentedSet.__len__c                 C   s   d | j S )Nz
set({0!r}))r$   r   r   r   r   r   r   rV   P  s    zCommentedSet.__repr__)N)r.   r/   r0   r   r2   r1   r    r5   r   r   r   r   r   r   r   rV   r   r   r   r   r     s   

c                   @   s   e Zd Zdd Zdd ZdS )TaggedScalarc                 C   s   d | _ d | _d S r   )r+   Zstyler   r   r   r   r    W  s    zTaggedScalar.__init__c                 C   s   | j S r   rU   r   r   r   r   r&   \  s    zTaggedScalar.__str__N)r.   r/   r0   r    r&   r   r   r   r   r"  U  s   r"  r!   .c                 C   s   t | trlt| drl|r*tjd| |d| j | D ](}t| | |r\|| | n|||d q@nvt | t	rt| dr|rtjd| |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{}
)namesepoutN)rc   r   rZ   sysstdoutwriter$   r]   dump_commentsrd   r   r#   )r   r$  r%  r&  rL   rP   r   r   r   r*  a  s"    (   r*  )9Z
__future__r   r   r'  r   Zruamel_yaml.compatr   r   r   r   Zruamel_yaml.scalarstringr   Zruamel_yaml.anchorr	   collectionsr
   r   r   r   r   Zcollections.abcZAnyZDictZOptionalZListZUnionIterator__all__r   r>   rS   r   rX   objectr   r5   r6   r?   rT   rY   rd   r   r  r   r   r   r   r   r   r   r  r  r   r   r"  r(  r*  r   r   r   r   <module>   sX      3+ F 1  B
]6