a
    uR`.                     @   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rnd dlmZmZmZmZ nd dlmZmZmZmZ g 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	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/e0d'd( Z1G d)d* d*e&eZ2G d+d, d,e/Z3G d-d. d.ee&Z4G d/d0 d0e&Z5d1d2ej6fd3d4Z7dS )5    )absolute_importprint_functionN)ordereddictPY2string_typesMutableSliceableSequence)ScalarString)Anchor)
MutableSetSizedSet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.9/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    r4   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   r6   r   r   r   r   r   d   s    zFormat.__init__c                 C   s
   d| _ d S NTr6   r   r   r   r   set_flow_styleh   s    zFormat.set_flow_stylec                 C   s
   d| _ d S NFr6   r   r   r   r   set_block_stylel   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)Nr6   )r   defaultr   r   r   
flow_stylep   s    
zFormat.flow_style)N)
r-   r.   r/   r0   format_attribr1   r   r8   r:   r<   r   r   r   r   r5   `   s   r5   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 u ri | _ || j |< d S r   rA   r   keyrA   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   rD      s    zLineCol.keyc                 C   s   |  |ddS )N      rH   rJ   r   r   r   r*      s    zLineCol.valuec                 C   s(   | j d u rd S | j | }|| || fS r   rB   )r   rK   Zx0Zx1rA   r   r   r   rI      s    

zLineCol._kvc                 C   s*   | j d u rd S | j | d | j | d fS rF   rB   r   idxr   r   r   item   s    
zLineCol.itemc                 C   s   | j d u ri | _ || j |< d S r   rB   rC   r   r   r   add_idx_line_col   s    
zLineCol.add_idx_line_colN)r-   r.   r/   line_col_attribr1   r   rE   rD   r*   rI   rP   rQ   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   rT   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__r0   
tag_attribr1   r   rU   r   r   r   r   rS      s
   rS   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   r1   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\   r$   extend)r   r   clearr   r   r   yaml_end_comment_extend   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NNNNrG   r   r\   r   
setdefault
isinstancelistr]   r   rD   r   r^   rr   r   r   yaml_key_comment_extend   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`   rM   rG   r   rL   ra   re   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
        rG   CommentMarkCommentToken
N# )errorrj   tokensrl   _yaml_get_pre_commentsplitappend)r   r   indentrj   rl   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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
kr|	d |d| n(|r|	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   ri   rk   c                    s    | r
dnd|  d |d S )Nro   r    rn   r   )sZmarkrk   r   r   comment_token   s    zFCommentedBase.yaml_set_comment_before_after_key.<locals>.comment_tokenNrL   rG   rm   rn   r    rM   )
Zruamel_yaml.errorrj   Zruamel_yaml.tokensrl   lenr\   r'   rb   rt   rs   )r   rD   Zbeforeru   ZafterZafter_indentrj   r{   rw   crx   r   rk   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())rY   r5   r1   rZ   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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
        rG   rk   ri   Nr   #ro    rD   )rq   rl   rp   rj   _yaml_get_columnAttributeError_yaml_add_eol_comment)r   r   rD   columnrl   rj   rw   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   )rY   r>   r1   rZ   r[   r   r   r   r   lc0  s    zCommentedBase.lcc                 C   s   || j _|| j _d S r   )r   r?   r@   )r   r?   r@   r   r   r   _yaml_set_line_col7  s    z CommentedBase._yaml_set_line_colc                 C   s   | j || d S r   )r   rE   rC   r   r   r   _yaml_set_kv_line_col<  s    z#CommentedBase._yaml_set_kv_line_colc                 C   s   | j || d S r   )r   rQ   rC   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   )rY   r	   r1   rZ   r[   r   r   r   r   anchorD  s    zCommentedBase.anchorc                 C   s   t | tjsd S | jS r   )rY   r	   r1   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   )rY   rS   r1   rZ   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   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   r1   r5   r>   r	   rS   r   rY   rZ   copydeepcopyr[   )r   tmemoar   r   r   copy_attributesa  s    
zCommentedBase.copy_attributesc                 C   s   t d S r   NotImplementedErrorr   r   rD   r   r   r   r   m  s    z#CommentedBase._yaml_add_eol_commentc                 C   s   t d S r   r   r   r   r   r   rr   q  s    z#CommentedBase._yaml_get_pre_commentc                 C   s   t d S r   r   r   rD   r   r   r   r   u  s    zCommentedBase._yaml_get_column)F)F)F)r   )Nr   NN)F)N)r-   r.   r/   r2   r\   r_   rg   rh   ry   r~   r   r4   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r   r   r   r   rX      s6   




 
#
	




rX   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| g|R i | d S r   )rd   r   r   argskwr   r   r   r   }  s    zCommentedSeq.__init__c                 C   s   t | |S r   rd   __getitem__rN   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   rO   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 NrG   )rd   __delitem__r\   r'   popsorted)r   rO   
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reverserG   N)rd   insertr   r\   r'   r   )r   rO   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 ur| || n|| j_d S r   r4   rg   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'   rw   r   r   r   r   r   _yaml_get_columnX  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\   r'   	enumerater   r   rD   r   sel_idxprepostZrow_idxZ_k1r   r   r   r     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   rv   r   r   r   rr     s
    z"CommentedSeq._yaml_get_pre_commentc                 C   sB   |   }||t| < | D ]$}|t|| | j||d q|S N)r   )	__class__idrt   r   r   r   r   r   resrK   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 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   .0xr   r   r   
<listcomp>      z%CommentedSeq.sort.<locals>.<listcomp>c                    s   g | ]}t  |d  qS )rG   r   r   r   r   r   r     r   rG   )r   zipranger|   rd   r   map__iter__r\   r'   r   r   )r   rD   r   Ztmp_lstZitmrO   r   Z	old_indexr   r   r   sort  s    zCommentedSeq.sortc                 C   s
   t | S r   )rd   rU   r   r   r   r   rU     s    zCommentedSeq.__repr__)N)NF)r-   r.   r/   r   r1   r0   r   r   r   r   r   r   r]   r   r4   r   r   r   r   rr   r   r   r   rU   r   r   r   r   r   z  s$   

				
r   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 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   rr   &  s
    z%CommentedKeySeq._yaml_get_pre_commentN)
r-   r.   r/   rV   r4   r   r   r   r   rr   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   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.   r/   r0   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 v 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.   r/   r0   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   s8   |\}}z| j | }W n ty*   Y dS 0 ||kS d S r9   )r   KeyError)r   rP   rD   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*   rD   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.   r/   r0   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| 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r4   rg   rh   r\   r   r   r   rD   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 keyrT   Nr   r   r   r   r   r     s    z"CommentedMap._yaml_add_eol_commentc                 C   s   | j j| d jjS )NrL   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\   r'   r   )	r   rD   r   r   r   r   Zlastr   Zk1r   r   r   r     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   rr     s
    z"CommentedMap._yaml_get_pre_commentc                 C   s   zt | | W n( ty8   |D ]}|| | |< q"Y n0 z| j|  W n, tyz   |D ]}| j|d  q`Y n0 d S r   )r   update	TypeErrorr   keysr   add)r   Zvalsr   r   r   r   r     s    zCommentedMap.updateNc                 C   s6   t | ||| | j| |dur2| j||d dS )zPinsert key value into given position
        attach comment if provided
        Nr   )r   r   r   r   r   )r   posrD   r*   r   r   r   r   r     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   )rc   dictr|   
IndexError)Zkey_listleveldget_one_levellist_okr   r   r     s    z)CommentedMap.mlget.<locals>.get_one_levelrG   N)rc   rd   getr   r   r   )r   rD   r;   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   rD   Z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   )rc   r   r   r   r   r   r   r   )r   rD   r*   r   r   r   r     s    zCommentedMap.__setitem__c                 C   s   || j v rdS d S r7   )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 0 d S r   )r   )r   rD   r;   r   r   r   r     s    zCommentedMap.getc                 C   s   t | ddS )Nr   r   )r   rU   replacer   r   r   r   rU     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   update_key_value)r   rD   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   3  s    zCommentedMap.__iter__c                 c   s   t | D ]
}|V  q
d S r   r  r   r   r   r   r   8  s    zCommentedMap._keysc                 C   s
   t | S r   )r   r   r   r   r   r   r   =  s    zCommentedMap.__len__c                 C   s   t t| |kS r   )r!   r   r   r   r   r   r   A  s    zCommentedMap.__eq__c                 C   s   t |  S r   )rd   r   r   r   r   r   r   G  s    zCommentedMap.keysc                 C   s   |   S r   )r   r   r   r   r   iterkeysK  s    zCommentedMap.iterkeysc                 C   s   t | S r   r   r   r   r   r   viewkeysO  s    zCommentedMap.viewkeysc                 C   s   t | S r   r  r   r   r   r   r   U  s    c                 c   s"   t | D ]}t | |V  q
d S r   r   r   r   r   r   r   r   _values[  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   
itervaluesd  s    zCommentedMap.itervaluesc                 C   s   t | S r   r   r   r   r   r   
viewvaluesh  s    zCommentedMap.viewvaluesc                 C   s   t | S r   r	  r   r   r   r   r  n  s    c                 c   s&   t | D ]}|t | |fV  q
d S r   r  r   r   r   r   r   r  s    zCommentedMap._itemsc                 C   s   t |  S r   )rd   r   r   r   r   r   r'   y  s    zCommentedMap.itemsc                 C   s   |   S r   r&   r   r   r   r   	iteritems}  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   )rY   r   rZ   r[   r   r   r   r   merge  s    
zCommentedMap.mergec                 C   s2   t |  }|  D ]\}}|||< q| | |S r   )r   r   r   )r   r   rK   r   r   r   r   r     s
    


zCommentedMap.copyc                 C   s   || j vr| j | d S r   )r   rt   )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   rK   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   rD   r   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   r1   r0   r   r4   r   r   r   r   rr   r   r   r   r   r   r   r   r   rU   r   r   r   r   r   r   r   r   r  r  r  r  r  r
  r   r'   r  r  r2   r  r   r  r  r   r   r   r   r   r   r   x  s\   	










r   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   sX   t | drt|  zt|i || _W n, tyR   trLt|d  | _n Y n0 d S )Nr  r   )rY   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())rY   r   r  rU   reprrd   r'   r   r   r   r   rU     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 u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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 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   rr     s
    z%CommentedKeyMap._yaml_get_pre_comment)N)r-   r.   r/   r   r1   r0   r   r  r   r   r^   r   popitemrb   r   r   r   r   r  rU   r   r  r4   r   r   r   r   rr   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   r1   r0   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   r  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r  r)   r   r   r   r   ?  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   D  s    zCommentedSet.discardc                 C   s
   || j v S r   r   r   r   r   r   r   I  s    zCommentedSet.__contains__c                 c   s   | j D ]
}|V  qd S r   r   r   r   r   r   r   M  s    
zCommentedSet.__iter__c                 C   s
   t | jS r   )r|   r  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   rU   V  s    zCommentedSet.__repr__)N)r-   r.   r/   r   r1   r0   r   r4   r   r   r   r   r   r   r   rU   r   r   r   r   r   %  s   

r   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   ]  s    zTaggedScalar.__init__c                 C   s   | j S r   rT   r   r   r   r   r%   b  s    zTaggedScalar.__str__N)r-   r.   r/   r   r%   r   r   r   r   r!  [  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   rY   sysstdoutwriter#   r\   dump_commentsrd   r   r"   )r   r#  r$  r%  rK   rO   r   r   r   r)  g  s    ( r)  )8Z
__future__r   r   r&  r   Zruamel_yaml.compatr   r   r   r   Zruamel_yaml.scalarstringr   Zruamel_yaml.anchorr	   collectionsr
   r   r   r   collections.abcAnyDictOptionalListUnionIterator__all__r   r=   rR   r   rW   objectr   r4   r5   r>   rS   rX   rd   r   r  r   r   r   r   r   r   r   r  r  r   r   r!  r'  r)  r   r   r   r   <module>   sL   3+ F 1  H
]6