U
    Æ½„b!™  ã                   @   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 dd	d
ddddddddg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/d0„ d0e<eƒZ>G d1d2„ d2e<ƒZ?G d3d
„ d
ee7ƒZ@eAd4d5„ ƒZBG d6d7„ d7e7eƒZCG d8d„ de@ƒZDG d9d„ dee7ƒZEG d:d;„ d;e7ƒZFd<d=ejGfd>d?„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    ú8/tmp/pip-unpacked-wheel-ctuyz3qg/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k
rR   d‰ Y nX d ‡ fdd„| j ¡ D ƒ¡}|r‚d| d	 }d
 | j	||¡S )Nr3   r4   c                 S   s   g | ]}t t|ƒƒ‘qS r    ©Úlenr(   ©Ú.0Úkr    r    r!   Ú
<listcomp>y   s     z(Comment._old__repr__.<locals>.<listcomp>r   ú    c                    s&   g | ]\}}d   t|ƒd ˆ |¡‘qS ©z	{:{}} {}
ú:©r6   r(   ©r;   r<   Úv©Úlnr    r!   r=   }   s     ú
    ú  z&Comment(
  start={},
  items={{{}}}{}))
r5   r0   r(   Úmaxr/   Ú
ValueErrorÚjoinÚitemsr6   r.   ©r   r7   Úitr    rD   r!   Ú_old__repr__r   s    

ÿzComment._old__repr__c                    s¤   | j d kr|  ¡ S t| jƒr,dt| jƒ }nd}ztdd„ | jD ƒƒd ‰ W n tk
rd   d‰ Y nX d ‡ fdd„| j 	¡ D ƒ¡}|r”d| d	 }d
 
| j||¡S )Nr3   r4   c                 S   s   g | ]}t t|ƒƒ‘qS r    r8   r:   r    r    r!   r=   Œ   s     z$Comment.__repr__.<locals>.<listcomp>r   r>   c                    s&   g | ]\}}d   t|ƒd ˆ |¡‘qS r?   rA   rB   rD   r    r!   r=   �   s     rF   rG   z$Comment(
  pre={},
  items={{{}}}{}))r1   rN   r5   r0   ÚreprrH   r/   rI   rJ   rK   r6   ÚprerL   r    rD   r!   Ú__repr__ƒ   s    


ÿzComment.__repr__c                 C   s   | j S r'   )r/   r   r    r    r!   rK   –   s    zComment.itemsc                 C   s   | j S r'   ©r0   r   r    r    r!   r7   ›   s    zComment.endc                 C   s
   || _ d S r'   rR   ©r   Úvaluer    r    r!   r7       s    c                 C   s   | j S r'   ©r1   r   r    r    r!   rP   ¥   s    zComment.prec                 C   s
   || _ d S r'   rU   rS   r    r    r!   rP   ª   s    c                 C   s,   | j  |¡}|d ks t|ƒ|k r$d S || S r'   )r/   Úgetr9   )r   ÚitemÚposr%   r    r    r!   rV   ¯   s    zComment.getc                 C   sb   | j  |¡}|d kr.d g|d   | j |< }nt|ƒ|krF| d ¡ q.|| d ksVt‚|||< d S r#   )r/   rV   r9   ÚappendÚAssertionError)r   rW   rX   rT   r%   r    r    r!   Úset¶   s    zComment.setc                 C   sª   | j rN| j d r$|| j d jkr$dS | j d rN| j d D ]}||jkr8 dS q8| j ¡ D ]*}|sbqX|D ]}|rf||jkrf  dS qfqX| jr¦| jD ]}||jkr� dS q�dS )Nr   Tr   F)r.   rT   rK   Úvaluesr7   )r   r%   ÚcrT   r    r    r!   Ú__contains__Á   s$    



zComment.__contains__N)T)r*   r+   r,   Ú	__slots__r   Úattribr"   r)   rN   rQ   ÚpropertyrK   r7   ÚsetterrP   rV   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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)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 k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!   rT     s    zLineCol.valuec                 C   s(   | j d k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 krd S | j | d | j | d fS ru   rq   ©r   Úidxr    r    r!   rW     s    
zLineCol.itemc                 C   s   | j d k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!   rQ   '  s    zLineCol.__repr__N)r*   r+   r,   Ú__doc__Úline_col_attribr`   r"   rt   rs   rT   rw   rW   r}   rQ   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©rT   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!   rQ   6  s    zTag.__repr__N)	r*   r+   r,   r~   r_   Ú
tag_attribr`   r"   rQ   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 krd S |s| j jd k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   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   r   ©r‡   r/   Ú
setdefaultÚ
isinstanceÚlistrZ   rˆ   ©r   rs   r.   r‰   Úrr    r    r!   Úyaml_key_comment_extendK  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 )Nry   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 )
z‡overwrites 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   rY   )	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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kr´g |	d< |d
krÒ|	d  |d|ƒ¡ n$| 	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   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‡   rK   rŒ   rY   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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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¸   rT   Úalways_dump)r   rT   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¼   rT   rS   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 k	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ƒ   ;  s<   




       ÿ
&
	




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| f|ž|Ž 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|   rT   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‡   rK   Ú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‡   rK   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 k	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‡   rK   r¢   r±   rÈ   r    r    r!   Ú_yaml_get_columnXF  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‡   rK   Ú	enumeraterä   ©r   rs   r±   Úsel_idxrP   ÚpostZrow_idxZ_k1r    r    r!   r®   J  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   r¡   r    r    r!   rÇ   _  s
    z"CommentedSeq._yaml_get_pre_commentc                 C   s.   g }| j jd k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__ÚidrY   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 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	|< q’d S )NrØ   c                 S   s   g | ]}|d  ‘qS )r   r    ©r;   r%   r    r    r!   r=   ‚  s     z%CommentedSeq.sort.<locals>.<listcomp>c                    s   g | ]}t  ˆ |d  ¡‘qS )r   rÌ   ró   r   r    r!   r=   ‡  s     r   )rÔ   ÚzipÚranger9   rŽ   r"   ÚmapÚ__iter__r‡   rK   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Ž   rQ   r   r    r    r!   rQ   �  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ø   rQ   r    r    r    r!   r     s&   

					
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 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!   rÇ   »  s
    z%CommentedKeySeq._yaml_get_pre_commentc                 C   s.   g }| j jd k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   	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   rM   r    r    r!   Ú_from_iterableÞ  s    z#CommentedMapKeysView._from_iterablec                 C   s
   || j k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   s:   |\}}z| j | }W n tk
r,   Y dS X ||kS d S rh   )rû   ÚKeyError)r   rW   rs   rT   rC   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   rT   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| 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©rc   r‘   r’   r‡   r.   ©r   r.   rs   rT   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 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rŠql|}ql|d k	r¢|  |¡}|S )N)NNN)r‡   rK   rä   )	r   rs   r±   rè   rP   ré   Úlastr%   Zk1r    r    r!   r®   3  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!   rÇ   O  s
    z"CommentedMap._yaml_get_pre_commentc                 C   s.   g }| j jd k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| f|ž|Ž W n2 tk
rH   |d D ]}|d | | |< q.Y nX |ršz| j |d  ¡ ¡ W n2 tk
r˜   |d D ]}| j |d ¡ q~Y nX |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k	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   rX   rs   rT   r.   r  ZkeytmpÚrefererr    r    r!   rÚ   s  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#   )r�   ÚdictrZ   r9   Ú
IndexError)Zkey_listÚlevelÚd©Úget_one_levelÚlist_okr    r!   r  ‰  s    z)CommentedMap.mlget.<locals>.get_one_levelr   N)r�   rŽ   rV   r  r  r  )r   rs   rj   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   rs   Ú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'   )r�   r(   r   rÏ   r   rÐ   r	  r  )r   rs   rT   r    r    r!   rÐ   ¦  s    ÿþýzCommentedMap.__setitem__c                 C   s   || j k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 X d S r'   )rÍ   )r   rs   rj   r    r    r!   rV   ½  s    zCommentedMap.getc                 C   s   t  | ¡ dd¡S )Nr   r   )r   rQ   Úreplacer   r    r    r!   rQ   Ä  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
  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!   rK     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<   rC   r    r    r!   r¾     s
    


zCommentedMap.copyc                 C   s   || j kr| j  |¡ d S r'   )r
  rY   )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(  rK   r   r^   rÐ   r&  rˆ   )r   rT   rC   r<   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   rs   rC   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^   rV   rQ   r"  rÒ   r÷   r  r×   rÜ   r  r\   r/   rK   ra   r&  r¾   r(  r)  r  rñ   r    r    r    r!   r     sD   		






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||Ž| _W n tk
r8   ‚ Y nX 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ÚtuplerK   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.  rQ   rO   rŽ   rK   r   r    r    r!   rQ   _  s    

zCommentedKeyMap.__repr__Nc                 C   s   t t | |¡ƒS r'   )r-  r  Úfromkeys)r  rC   r    r    r!   r4  e  s    zCommentedKeyMap.fromkeysc                 C   s"   |t k	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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®   y  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!   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×   r2  rQ   r  r4  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   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   r6  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°   ±  s    z"CommentedSet._yaml_add_eol_commentc                 C   s   d| j |< dS )zAdd an element.N©r6  rS   r    r    r!   r  ¶  s    zCommentedSet.addc                 C   s   | j |= dS )z8Remove an element.  Do not raise an exception if absent.Nr7  rS   r    r    r!   r#  »  s    zCommentedSet.discardc                 C   s
   || j kS r'   r7  r$   r    r    r!   r^   À  s    zCommentedSet.__contains__c                 c   s   | j D ]
}|V  qd S r'   r7  r$   r    r    r!   r÷   Ä  s    
zCommentedSet.__iter__c                 C   s
   t | jƒS r'   )r9   r6  r   r    r    r!   r×   É  s    zCommentedSet.__len__c                 C   s   d  | j ¡ ¡S )Nz
set({0!r}))r6   r6  r  r   r    r    r!   rQ   Í  s    zCommentedSet.__repr__)N)r*   r+   r,   r-   r`   r_   r"   rc   rà   r°   r  r#  r^   r÷   r×   rQ   r    r    r    r!   r   œ  s   

c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚTaggedScalarNc                 C   s"   || _ || _|d k	r|  |¡ d S r'   )rT   Ústyler½   )r   rT   r9  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!   r8  Ò  s   
r8  r4   Ú.c                 C   sò   t | tƒrtt| dƒrt|r.| d |t| ƒ¡¡ | d | j¡¡ | D ],}t| | |rd|| t|ƒ n|||d� qDnzt | t	ƒrît| dƒrî|r¢| d |t| ƒ¡¡ | d | j¡¡ t
| ƒD ]0\}}t||rÜ|| t|ƒ nt|ƒ||d� q¼d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   r1  r   rù   rþ   r  r  r   r  r,  r-  r   r   r8  Ústdoutr?  r    r    r    r!   Ú<module>   s„         ý


 3 L :  $
Z6