B
    |?_[u                 @   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 d dl	m
Z
 erZd dlmZmZmZ nd dl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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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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'Z(G d-d
 d
ee'Z)G d.d/ d/eZ*d0d1ej+fd2d3Z,dS )4    )absolute_importprint_functionN)ordereddictPY2string_types)ScalarString)
MutableSetSizedSetCommentedSeqCommentedKeySeqCommentedMapCommentedOrderedMapCommentedSetcomment_attribmerge_attribZ_yaml_commentZ_yaml_formatZ_yaml_line_colZ_yaml_anchorZ_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.7/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__6   s
    
zComment.__str__c             C   s   | j S )N)r   )r   r   r   r   items?   s    zComment.itemsc             C   s   | j S )N)r   )r   r   r   r   r   D   s    zComment.endc             C   s
   || _ d S )N)r   )r   valuer   r   r   r   I   s    c             C   s   | j S )N)r   )r   r   r   r   startN   s    zComment.startc             C   s
   || _ d S )N)r   )r   r"   r   r   r   r#   S   s    N)__name__
__module____qualname__	__slots__r   attribr   r    propertyr!   r   setterr#   r   r   r   r   r   &   s   
	r   c               C   s   d S )Nr   r   r   r   r   	NoCommentZ   s    r+   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)_flow_stylec             C   s
   d | _ d S )N)r-   )r   r   r   r   r   c   s    zFormat.__init__c             C   s
   d| _ d S )NT)r-   )r   r   r   r   set_flow_styleg   s    zFormat.set_flow_stylec             C   s
   d| _ d S )NF)r-   )r   r   r   r   set_block_stylek   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)N)r-   )r   defaultr   r   r   
flow_styleo   s    
zFormat.flow_style)N)
r$   r%   r&   r'   format_attribr(   r   r.   r/   r1   r   r   r   r   r,   _   s   r,   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 )N)linecoldata)r   r   r   r   r   }   s    zLineCol.__init__c             C   s   | j d kri | _ || j |< d S )N)r6   )r   keyr6   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   r7      s    zLineCol.keyc             C   s   |  |ddS )N      )r:   )r   r;   r   r   r   r"      s    zLineCol.valuec             C   s(   | j d krd S | j | }|| || fS )N)r6   )r   r;   Zx0Zx1r6   r   r   r   r:      s    

zLineCol._kvc             C   s*   | j d krd S | j | d | j | d fS )Nr   r9   )r6   )r   idxr   r   r   item   s    
zLineCol.itemc             C   s   | j d kri | _ || j |< d S )N)r6   )r   r7   r6   r   r   r   add_idx_line_col   s    
zLineCol.add_idx_line_colN)r$   r%   r&   line_col_attribr(   r   r8   r7   r"   r:   r?   r@   r   r   r   r   r3   z   s   r3   c               @   s   e Zd ZdZeZdd ZdS )Anchor)r"   always_dumpc             C   s   d | _ d| _d S )NF)r"   rC   )r   r   r   r   r      s    zAnchor.__init__N)r$   r%   r&   r'   anchor_attribr(   r   r   r   r   r   rB      s   rB   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 )N)r"   )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%   r&   __doc__r'   
tag_attribr(   r   rF   r   r   r   r   rE      s
   rE   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 )N)hasattrr   r(   setattrgetattr)r   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 )N)rM   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 )Nr9   r   )rM   r   
setdefault
isinstancelistAssertionErrorrN   )r   r7   r   rO   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 )Nr=   r9   r   r<   )rM   r   rQ   rR   rS   rT   rN   )r   r7   r   rO   rU   r   r   r   yaml_value_comment_extend   s    z'CommentedBase.yaml_value_comment_extendr   c             C   sr   ddl m} ddlm} |  }|d dkr8|dd }||}x,|dD ]}||d| d |d qLW dS )zoverwrites any preceding comment lines on an object
        expects comment to be without `#` and possible have multiple lines
        r9   )CommentMark)CommentToken
Nz# )errorrX   tokensrY   _yaml_get_pre_commentsplitappend)r   r   indentrX   rY   pre_comments
start_markcomr   r   r   yaml_set_start_comment   s    z$CommentedBase.yaml_set_start_commentNc                s4  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,|rx&|	d
D ]}
|	d ||
| qW |r0||}|	d dkrg |	d< x(|	d
D ]}
|	d ||
| qW dS )zc
        expects comment (before/after) to be without `#` and possible have multiple lines
        r   )rX   )rY   c                s    | r
dnd|  d |d S )Nz# r   r[   r   )sZmark)rY   r   r   comment_token   s    zFCommentedBase.yaml_set_comment_before_after_key.<locals>.comment_tokenNr<   r9   rZ   r[   r   r=   )
Zruamel_yaml.errorrX   Zruamel_yaml.tokensrY   lenrM   r!   rQ   r`   r_   )r   r7   Zbeforera   ZafterZafter_indentrX   rg   rc   crd   r   )rY   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())rJ   r,   r(   rK   rL   )r   r   r   r   fa  s    zCommentedBase.fac             C   s   ddl m} ddlm} |dkr*| |}|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
        r9   )rY   )rX   Nr   #z#  )r7   )r]   rY   r\   rX   _yaml_get_column_yaml_add_eol_comment)r   r   r7   columnrY   rX   rc   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 )N)rJ   r3   r(   rK   rL   )r   r   r   r   lc2  s    zCommentedBase.lcc             C   s   || j _|| j _d S )N)rr   r4   r5   )r   r4   r5   r   r   r   _yaml_set_line_col9  s    z CommentedBase._yaml_set_line_colc             C   s   | j || d S )N)rr   r8   )r   r7   r6   r   r   r   _yaml_set_kv_line_col>  s    z#CommentedBase._yaml_set_kv_line_colc             C   s   | j || d S )N)rr   r@   )r   r7   r6   r   r   r   _yaml_set_idx_line_colB  s    z$CommentedBase._yaml_set_idx_line_colc             C   s(   t | tjst| tjt  t| tjS )N)rJ   rB   r(   rK   rL   )r   r   r   r   anchorF  s    zCommentedBase.anchorc             C   s   t | tjsd S | jS )N)rJ   rB   r(   rv   )r   r   r   r   yaml_anchorM  s    zCommentedBase.yaml_anchorc             C   s   || j _|| j _d S )N)rv   r"   rC   )r   r"   rC   r   r   r   yaml_set_anchorS  s    zCommentedBase.yaml_set_anchorc             C   s(   t | tjst| tjt  t| tjS )N)rJ   rE   r(   rK   rL   )r   r   r   r   tagX  s    zCommentedBase.tagc             C   s   || j _d S )N)ry   r"   )r   r"   r   r   r   yaml_set_tag_  s    zCommentedBase.yaml_set_tagc          	   C   sb   x\t jtjtjtjtjtgD ]>}t| |r|rHt||t	
t| | qt||t| | qW d S )N)r   r(   r,   r3   rB   rE   r   rJ   rK   copydeepcopyrL   )r   tdeepar   r   r   copy_attributesc  s    
zCommentedBase.copy_attributesc             C   s   t d S )N)NotImplementedError)r   r   r7   r   r   r   ro   m  s    z#CommentedBase._yaml_add_eol_commentc             C   s   t d S )N)r   )r   r   r   r   r^   q  s    z#CommentedBase._yaml_get_pre_commentc             C   s   t d S )N)r   )r   r7   r   r   r   rn   u  s    zCommentedBase._yaml_get_column)F)F)F)r   )Nr   NN)F)F)r$   r%   r&   r)   rM   rP   rV   rW   re   rj   rk   r+   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r   ro   r^   rn   r   r   r   r   rI      s,   



 
!



rI   c               @   sb   e Zd ZejfZefdd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d	S )r   c             C   s"   |t k	r| || n|| j_d S )N)r+   rV   rM   r   )r   r   r7   r   r   r   _yaml_add_comment}  s    zCommentedSeq._yaml_add_commentc             C   s   | j ||d d S )N)r7   )r   )r   r   r7   r   r   r   ro     s    z"CommentedSeq._yaml_add_eol_commentc             C   s   | j j| d jjS )Nr   )rM   r!   rc   rp   )r   r7   r   r   r   _yaml_get_columnX  s    zCommentedSeq._yaml_get_columnXc             C   sP   t | || x<t| jjddD ](}||k r.P | jj|| jj|d < q W dS )z5the comments after the insertion have to move forwardT)reverser9   N)rS   insertsortedrM   r!   pop)r   r>   val
list_indexr   r   r   r     s
    zCommentedSeq.insertNc             C   sZ   t | |}| jj|d  x8t| jjD ](}||k r8q*| jj|| jj|d < q*W |S )Nr9   )rS   r   rM   r!   r   )r   r>   resr   r   r   r   r     s    zCommentedSeq.popc             C   s   d }d }|d |d  }}|| j jkr,|}nD|| j jkr>|}n2x0t| D ]$\}}||krZP || j jkrhqH|}qHW |d k	r| |}|S )Nr9   )rM   r!   	enumerater   )r   r7   rp   sel_idxprepostrow_idxk1r   r   r   rn     s     
zCommentedSeq._yaml_get_columnc             C   s.   g }| j jd krd |g| j _n|| j jd< |S )Nr9   )rM   r   )r   rb   r   r   r   r^     s
    z"CommentedSeq._yaml_get_pre_commentc             C   sD   |   }||t| < x*| D ]"}|t| | j|dd qW |S )NT)r~   )	__class__idr`   r{   r|   r   )r   memor   r;   r   r   r   __deepcopy__  s    
zCommentedSeq.__deepcopy__c             C   sP   |t | k r>t|tr>t|ts>t| | tr>t| | |}t| || d S )N)rh   rR   r   r   typerS   __setitem__)r   r>   r"   r   r   r   r     s    

zCommentedSeq.__setitem__)N)r$   r%   r&   r   r(   r'   r+   r   ro   r   r   r   rn   r^   r   r   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 )N)r+   rV   rM   r   )r   r   r7   r   r   r   r     s    z!CommentedKeySeq._yaml_add_commentc             C   s   | j ||d d S )N)r7   )r   )r   r   r7   r   r   r   ro     s    z%CommentedKeySeq._yaml_add_eol_commentc             C   s   | j j| d jjS )Nr   )rM   r!   rc   rp   )r   r7   r   r   r   r     s    z!CommentedKeySeq._yaml_get_columnXc             C   s   d }d }|d |d  }}|| j jkr,|}nD|| j jkr>|}n2x0t| D ]$\}}||krZP || j jkrhqH|}qHW |d k	r| |}|S )Nr9   )rM   r!   r   r   )r   r7   rp   r   r   r   r   r   r   r   r   rn     s     
z CommentedKeySeq._yaml_get_columnc             C   s.   g }| j jd krd |g| j _n|| j jd< |S )Nr9   )rM   r   )r   rb   r   r   r   r^     s
    z%CommentedKeySeq._yaml_get_pre_commentN)
r$   r%   r&   rG   r+   r   ro   r   rn   r^   r   r   r   r   r     s   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	CommentedMapView)_mappingc             C   s
   || _ d S )N)r   )r   mappingr   r   r   r     s    zCommentedMapView.__init__c             C   sx   t | j}g }xdt| jtg D ]R}x>|d D ]2}| j|r>q,x|D ]}||krDP qDW |d7 }q,W ||d  qW |S )Nr9   )rh   r   rL   r   _unmerged_containsr`   )r   countdonemergedxyr   r   r   __len__  s    

zCommentedMapView.__len__c             C   s
   d | S )Nz&{0.__class__.__name__}({0._mapping!r}))r   )r   r   r   r   rF     s    zCommentedMapView.__repr__N)r$   r%   r&   r'   r   r   rF   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 )N)set)r   itr   r   r   _from_iterable   s    z#CommentedMapKeysView._from_iterablec             C   s
   || j kS )N)r   )r   r7   r   r   r   __contains__%  s    z!CommentedMapKeysView.__contains__c             c   s   x| j D ]
}|V  qW d S )N)r   )r   r   r   r   r   __iter__)  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 )N)r   )r   r   r   r   r   r   2  s    z$CommentedMapItemsView._from_iterablec             C   s8   |\}}y| j | }W n tk
r*   dS X ||kS d S )NF)r   KeyError)r   r?   r7   r"   vr   r   r   r   7  s    z"CommentedMapItemsView.__contains__c             c   s(   x"| j  D ]}|| j | fV  qW d S )N)r   _keys)r   r7   r   r   r   r   A  s    zCommentedMapItemsView.__iter__N)r$   r%   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 )CommentedMapValuesViewr   c             C   s&   x | j D ]}|| j | krdS qW dS )NTF)r   )r   r"   r7   r   r   r   r   J  s    z#CommentedMapValuesView.__contains__c             c   s    x| j D ]}| j | V  qW d S )N)r   )r   r7   r   r   r   r   Q  s    zCommentedMapValuesView.__iter__N)r$   r%   r&   r'   r   r   r   r   r   r   r   G  s   r   c               @   sR  e Zd ZejfZeefddZdd Zdd Z	dd Z
d	d
 Zdd ZdFddZdGddZdd Zdd Zdd Zdd ZdHddZdd Zdd  Zd!d" Zd#d$ Zd%d& Zerd'd( Zd)d* Zd+d, Znd-d( Zd.d/ Ze rd0d1 Zd2d3 Zd4d5 Z nd6d1 Zd7d8 Z!er*d9d: Z"d;d< Z#d=d> Z$nd?d: Z"e%d@dA Z&dBdC Z'dDdE Z(dS )Ir   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)r+   rV   rW   rM   r   )r   r   r7   r"   r   r   r   r   Z  s    zCommentedMap._yaml_add_commentc             C   s   | j ||d dS )z6add on the value line, with value specified by the key)r"   N)r   )r   r   r7   r   r   r   ro   e  s    z"CommentedMap._yaml_add_eol_commentc             C   s   | j j| d jjS )Nr<   )rM   r!   rc   rp   )r   r7   r   r   r   r   j  s    zCommentedMap._yaml_get_columnXc       
      C   s   d }d }d\}}}x2| D ]*}|d k	r2||kr2|}P ||kr>|}|}qW || j jkrX|}nD|| j jkrj|}n2x0t| D ]$\}}	|	|krP |	| j jkrqt|	}qtW |d k	r| |}|S )N)NNN)rM   r!   r   r   )
r   r7   rp   r   r   r   Zlastr   r   r   r   r   r   rn   n  s.    


zCommentedMap._yaml_get_columnc             C   s.   g }| j jd krd |g| j _n|| j jd< |S )Nr9   )rM   r   )r   rb   r   r   r   r^     s
    z"CommentedMap._yaml_get_pre_commentc             C   sD   yt | | W n. tk
r>   x|D ]}|| | |< q&W Y nX d S )N)r   update	TypeError)r   Zvalsr   r   r   r   r     s
    
zCommentedMap.updateNc             C   s*   t | ||| |dk	r&| j||d dS )zPinsert key value into given position
        attach comment if provided
        N)r7   )r   r   rq   )r   posr7   r"   r   r   r   r   r     s    zCommentedMap.insertFc          	      sf   t |ts| ||S  fdd y |d| S  tk
rD   |S  ttfk
r`   s\ |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 )Nr9   )rR   dictrT   rh   
IndexError)Zkey_listleveld)get_one_levellist_okr   r   r     s    z)CommentedMap.mlget.<locals>.get_one_levelr9   N)rR   rS   getr   r   r   )r   r7   r0   r   r   )r   r   r   mlget  s    

zCommentedMap.mlgetc             C   sV   yt | |S  tk
rP   x,t| tg D ]}||d kr*|d | S q*W  Y nX d S )Nr9   )r   __getitem__r   rL   r   )r   r7   r   r   r   r   r     s    zCommentedMap.__getitem__c             C   sL   || kr:t |tr:t |ts:t | | tr:t| | |}t| || d S )N)rR   r   r   r   r   r   )r   r7   r"   r   r   r   r     s    

zCommentedMap.__setitem__c             C   s   t | |rdS d S )NT)r   r   )r   r7   r   r   r   r     s    zCommentedMap._unmerged_containsc             C   s:   t | |rdS x$t| tg D ]}||d krdS qW dS )NTr9   F)r   r   rL   r   )r   r7   r   r   r   r   r     s    zCommentedMap.__contains__c             C   s   y
|  |S    |S d S )N)r   )r   r7   r0   r   r   r   r     s    
zCommentedMap.getc             C   s,   t | tst| S dtt|   d S )Nzordereddict())rJ   r   r   rF   reprrS   r   )r   r   r   r   rF     s    

zCommentedMap.__repr__c             c   s*   x$t | D ]}|t | |fV  qW d S )N)r   r   r   )r   r   r   r   r   non_merged_items  s    zCommentedMap.non_merged_itemsc          	   C   sr   d}x<t | tg D ],}y|d |= d}W q tk
r<   Y qX qW yt| | W n tk
rl   |sh Y nX d S )NTr9   )rL   r   r   r   __delitem__)r   r7   foundr   r   r   r   r     s    

zCommentedMap.__delitem__c             c   s   xt | D ]
}|V  qW g }x`t| tg D ]P}x<|d D ]0}t | |rLq:x|D ]}||krRP qRW |V  q:W ||d  q,W d S )Nr9   )r   r   rL   r   r   r`   )r   r   r   r   r   r   r   r   r     s    


zCommentedMap.__iter__c             c   s   xt | D ]
}|V  qW g }x`t| tg D ]P}x<|d D ]0}t | |rLq:x|D ]}||krRP qRW |V  q:W ||d  q,W d S )Nr9   )r   r   rL   r   r   r`   )r   r   r   r   r   r   r   r   r     s    


zCommentedMap._keysc             C   s   t |  S )N)rS   r   )r   r   r   r   keys%  s    zCommentedMap.keysc             C   s   |   S )N)r   )r   r   r   r   iterkeys)  s    zCommentedMap.iterkeysc             C   s   t | S )N)r   )r   r   r   r   viewkeys-  s    zCommentedMap.viewkeysc             C   s   t | S )N)r   )r   r   r   r   r   1  s    c             c   s   x t | D ]}t | |V  qW g }xlt| tg D ]\}xH|d D ]<}t | |rTqBx(|D ]}||krZP qZW t |d |V  qBW ||d  q4W d S )Nr9   )r   r   r   rL   r   r   r`   )r   r   r   r   r   r   r   r   _values5  s    
zCommentedMap._valuesc             C   s   t |  S )N)rS   r   )r   r   r   r   valuesF  s    zCommentedMap.valuesc             C   s   |   S )N)r   )r   r   r   r   
itervaluesJ  s    zCommentedMap.itervaluesc             C   s   t | S )N)r   )r   r   r   r   
viewvaluesN  s    zCommentedMap.viewvaluesc             C   s   t | S )N)r   )r   r   r   r   r   R  s    c             c   s   x$t | D ]}|t | |fV  qW g }xlt| tg D ]\}xH|d  D ]8\}}t | |r`qJx |D ]}||krfP qfW ||fV  qJW ||d  q8W d S )Nr9   )r   r   r   rL   r   r!   r   r`   )r   r   r   r   r   r   r   r   r   r   V  s    
zCommentedMap._itemsc             C   s   t |  S )N)rS   r   )r   r   r   r   r!   g  s    zCommentedMap.itemsc             C   s   |   S )N)r   )r   r   r   r   	iteritemsk  s    zCommentedMap.iteritemsc             C   s   t | S )N)r   )r   r   r   r   	viewitemso  s    zCommentedMap.viewitemsc             C   s   t | S )N)r   )r   r   r   r   r!   s  s    c             C   s    t | tst| tg  t| tS )N)rJ   r   rK   rL   )r   r   r   r   mergew  s    
zCommentedMap.mergec             C   s   | j | d S )N)r   rN   )r   r"   r   r   r   add_yaml_merge~  s    zCommentedMap.add_yaml_mergec             C   sF   |   }||t| < x,| D ]$}t| | ||< | j|dd qW |S )NT)r~   )r   r   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+   r   ro   r   rn   r^   r   r   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r)   r   r   r   r   r   r   r   r   W  sN   		
	







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   c               @   sP   e Zd ZejdfZd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 )N)r   r   r   r   )r   r   r   r   r   r     s    
zCommentedSet.__init__c             C   s   d| j |< dS )zAdd an element.N)r   )r   r"   r   r   r   add  s    zCommentedSet.addc             C   s   | j |= dS )z8Remove an element.  Do not raise an exception if absent.N)r   )r   r"   r   r   r   discard  s    zCommentedSet.discardc             C   s
   || j kS )N)r   )r   r   r   r   r   r     s    zCommentedSet.__contains__c             c   s   x| j D ]
}|V  qW d S )N)r   )r   r   r   r   r   r     s    zCommentedSet.__iter__c             C   s
   t | jS )N)rh   r   )r   r   r   r   r     s    zCommentedSet.__len__c             C   s   d | j S )Nz
set({0!r}))r   r   r   )r   r   r   r   rF     s    zCommentedSet.__repr__)N)r$   r%   r&   r   r(   r'   r   r   r   r   r   r   rF   r   r   r   r   r     s   

c               @   s   e Zd Zdd ZdS )TaggedScalarc             C   s   | j S )N)r"   )r   r   r   r   r      s    zTaggedScalar.__str__N)r$   r%   r&   r    r   r   r   r   r     s   r   r   .c             C   s   t | trbt| drb|r t| t| j|d x| D ](}t| | |rP|| | n|||d q4W nlt | trt| dr|rt| t| j|d x<t| D ]0\}}t||r|| t| nt|||d qW dS )zg
    recursively dump comments, all but the toplevel preceded by the path
    in dotted form x.0.a
    rM   )file)namesepoutN)	rR   r   rJ   printrM   dump_commentsrS   r   r   )r   r   r   r   r;   r>   r   r   r   r     s    
*r   )-Z
__future__r   r   sysr{   Zruamel_yaml.compatr   r   r   Zruamel_yaml.scalarstringr   collectionsr   r	   r
   Zcollections.abc__all__r   r2   rA   rD   r   rH   objectr   r+   r,   r3   rB   rE   rI   rS   r   tupler   r   r   r   r   r   r   r   r   stdoutr   r   r   r   r   <module>   sJ   
4+
 >W0  7&