B
    |?_[¸¯  ã               @   s>  d dl mZmZmZ d dlT d dlT d dlmZmZm	Z	m
Z
mZmZ d dlmZmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlZd dlZd dlZerºd dlZd dlZnd dl Zd	d
dddgZ!G dd„ de"ƒZ#e
rìdd„ Z$G dd	„ d	e%ƒZ&G dd
„ d
e&ƒZ'e' (e)dƒe'j*¡ e' (e+e'j,¡ e
rBe' (e-e'j.¡ ne' (e/e'j0¡ e' (e1e'j2¡ e' (e3e'j4¡ e
r€e' (e5e'j6¡ e' (e7e'j8¡ e' (e9e'j:¡ e' (e;e'j:¡ e' (e<e'j=¡ e' (e>e'j?¡ e' (ee'j@¡ ejAdkrød dlBZBe' (eBjCe'j@¡ e' (ejDe'jE¡ e' (eje'jF¡ e' (de'jG¡ G dd„ de'ƒZHe
rfeH (e+eHj,¡ eH (e-eHj.¡ eH (e5eHj6¡ eH (eIeHjJ¡ eH (e;eHjK¡ eH (e)eHjL¡ e
r¦eH (ejMeHjL¡ eH (ejNeHjL¡ eH (ejOeHjL¡ eH (ejPeHjQ¡ e
rìeH RejSeHjT¡ eH Re%eHjU¡ d dlVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ G dd„ de'ƒZ_e_ (e)dƒe_j*¡ e_ (ee_j`¡ e_ (ee_ja¡ e_ (ee_jb¡ e_ (ee_jc¡ e_ (ee_jd¡ e_ (ee_je¡ e_ (ee_jf¡ e_ (ee_jg¡ e_ (ee_jh¡ e_ (eYe_j:¡ e_ (eWe_j=¡ e_ (eXe_j@¡ ejAdkrd dlBZBe_ (eBjCe_j@¡ e_ (e[e_j?¡ e_ (e^e_ji¡ e_ (ee_jF¡ dS )é    )Úprint_functionÚabsolute_importÚdivision)Ú*)Ú	text_typeÚbinary_typeÚ
to_unicodeÚPY2ÚPY3Úordereddict)ÚPreservedScalarStringÚSingleQuotedScalarStringÚDoubleQuotedScalarString)Ú	ScalarIntÚ	BinaryIntÚOctalIntÚHexIntÚ
HexCapsInt)ÚScalarFloat)Ú	TimeStampNÚBaseRepresenterÚSafeRepresenterÚRepresenterÚRepresenterErrorÚRoundTripRepresenterc               @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú6lib/python3.7/site-packages/ruamel_yaml/representer.pyr       s   c             C   s(   | g}x| j D ]}| t|ƒ¡ qW |S )N)Ú	__bases__ÚextendÚget_classobj_bases)ÚclsÚbasesÚbaser   r   r   r"   %   s    r"   c               @   sŠ   e Zd Zi Zi Zddd„Zedd„ ƒZdd„ Zdd	„ Z	d
d„ Z
edd„ ƒZedd„ ƒZddd„Zddd„Zddd„Zddd„Zdd„ ZdS )r   Nc             C   s:   || _ | j d k	r| | j _|| _|| _i | _g | _d | _d S )N)ÚdumperZ_representerÚdefault_styleÚdefault_flow_styleÚrepresented_objectsÚobject_keeperÚ	alias_key)Úselfr'   r(   r&   r   r   r   Ú__init__2   s    
zBaseRepresenter.__init__c             C   s6   yt | jdƒr| jjS | jjS  tk
r0   | S X d S )NÚtyp)Úhasattrr&   Ú
serializerZ_serializerÚAttributeError)r,   r   r   r   r0   =   s    zBaseRepresenter.serializerc             C   s,   |   |¡}| j |¡ i | _g | _d | _d S )N)Úrepresent_datar0   Z	serializer)   r*   r+   )r,   ÚdataÚnoder   r   r   Ú	representG   s
    
zBaseRepresenter.representc             C   s  |   |¡rd | _n
t|ƒ| _| jd k	rN| j| jkrB| j| j }|S | j |¡ t|ƒj}trzt	|t
jƒrzt|jƒt|ƒ }|d | jkrž| j|d  | |ƒ}nrxp|D ] }|| jkr¤| j| | |ƒ}P q¤W d | jkrä| jd  | |ƒ}n,d | jkr| jd  | |ƒ}ntd t|ƒƒ}|S )Nr   )Úignore_aliasesr+   Úidr)   r*   ÚappendÚtypeÚ__mro__r	   Ú
isinstanceÚtypesÚInstanceTyper"   Ú	__class__ÚlistÚyaml_representersÚyaml_multi_representersÚ
ScalarNoder   )r,   r3   r4   Z
data_typesÚ	data_typer   r   r   r2   O   s2    







zBaseRepresenter.represent_datac             C   s
   |   |¡S )a  
        David Fraser: Extract a method to represent keys in mappings, so that
        a subclass can choose not to quote them (for example)
        used in represent_mapping
        https://bitbucket.org/davidfraser/pyyaml/commits/d81df6eb95f20cac4a79eed95ae553b5c6f77b8c
        )r2   )r,   r3   r   r   r   Úrepresent_keyv   s    zBaseRepresenter.represent_keyc             C   s$   d| j kr| j ¡ | _|| j|< d S )Nr@   )Ú__dict__r@   Úcopy)r#   rC   Úrepresenterr   r   r   Úadd_representer€   s    
zBaseRepresenter.add_representerc             C   s$   d| j kr| j ¡ | _|| j|< d S )NrA   )rE   rA   rF   )r#   rC   rG   r   r   r   Úadd_multi_representer‡   s    
z%BaseRepresenter.add_multi_representerc             C   s6   |d kr| j }t|||d}| jd k	r2|| j| j< |S )N)Ústyle)r'   rB   r+   r)   )r,   ÚtagÚvaluerJ   r4   r   r   r   Úrepresent_scalarŽ   s    
z BaseRepresenter.represent_scalarc       	      C   sˆ   g }t |||d}| jd k	r(|| j| j< d}x4|D ],}|  |¡}t|tƒrP|jrTd}| |¡ q2W |d kr„| jd k	r~| j|_	n||_	|S )N)Ú
flow_styleTF)
ÚSequenceNoder+   r)   r2   r;   rB   rJ   r8   r(   rN   )	r,   rK   ÚsequencerN   rL   r4   Ú
best_styleÚitemÚ	node_itemr   r   r   Úrepresent_sequence—   s    




z"BaseRepresenter.represent_sequencec       
      C   s€   g }t |||d}| jd k	r(|| j| j< d}x,|D ]$}|| }|  ||i¡}	| |	¡ q2W |d kr|| jd k	rv| j|_n||_|S )N)rN   T)rO   r+   r)   r2   r8   r(   rN   )
r,   rK   ÚomaprN   rL   r4   rQ   Úitem_keyÚitem_valrS   r   r   r   Úrepresent_omapª   s    



zBaseRepresenter.represent_omapc             C   sæ   g }t |||d}| jd k	r(|| j| j< d}t|dƒrdt| ¡ ƒ}yt|ƒ}W n tk
rb   Y nX xZ|D ]R\}}|  |¡}	|  	|¡}
t
|	tƒr–|	jršd}t
|
tƒrª|
jr®d}| |	|
f¡ qjW |d krâ| jd k	rÜ| j|_n||_|S )N)rN   TÚitemsF)ÚMappingNoder+   r)   r/   r?   rY   ÚsortedÚ	TypeErrorrD   r2   r;   rB   rJ   r8   r(   rN   )r,   rK   ÚmappingrN   rL   r4   rQ   rV   Ú
item_valueÚnode_keyÚ
node_valuer   r   r   Úrepresent_mapping¿   s2    






z!BaseRepresenter.represent_mappingc             C   s   dS )NFr   )r,   r3   r   r   r   r6   Ü   s    zBaseRepresenter.ignore_aliases)NNN)N)N)N)N)r   r   r   r@   rA   r-   Úpropertyr0   r5   r2   rD   ÚclassmethodrH   rI   rM   rT   rX   ra   r6   r   r   r   r   r   -   s   

'

	


c               @   sÎ   e Zd Zdd„ Zdd„ Zer.dd„ Zdd„ Znd	d„ Zd
d„ Zdd„ Z	dd„ Z
erZdd„ ZdZx eeƒeee ƒkr~ee9 Zq`W 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   c             C   s:   |d kst |tƒr|dkrdS t |tttttfƒr6dS dS )Nr   TF)r;   Útupler   r   ÚboolÚintÚfloat)r,   r3   r   r   r   r6   ã   s
    zSafeRepresenter.ignore_aliasesc             C   s   |   dd¡S )Nztag:yaml.org,2002:nullÚnull)rM   )r,   r3   r   r   r   Úrepresent_noneî   s    zSafeRepresenter.represent_nonec             C   s   |   d|¡S )Nztag:yaml.org,2002:str)rM   )r,   r3   r   r   r   Úrepresent_stró   s    zSafeRepresenter.represent_strc             C   s<   t tdƒrt |¡ d¡}nt |¡ d¡}| jd|ddS )NÚencodebytesÚasciiztag:yaml.org,2002:binaryú|)rJ   )r/   Úbase64rk   ÚdecodeZencodestringrM   )r,   r3   r   r   r   Úrepresent_binary÷   s
    
z SafeRepresenter.represent_binaryc             C   sz   d }d }yt |dƒ}d}W nN tk
rh   yt |dƒ}d}W n& tk
rb   | d¡}d}d}Y nX Y nX | j|||dS )Nrl   ztag:yaml.org,2002:strzutf-8rn   ztag:yaml.org,2002:binaryrm   )rJ   )ÚunicodeÚUnicodeDecodeErrorÚencoderM   )r,   r3   rK   rJ   r   r   r   rj      s    


c             C   s   |   d|¡S )Nztag:yaml.org,2002:str)rM   )r,   r3   r   r   r   Úrepresent_unicode  s    z!SafeRepresenter.represent_unicodec             C   sD   y| j jt|ƒ }W n" tk
r6   |r.d}nd}Y nX |  d|¡S )NÚtrueZfalseztag:yaml.org,2002:bool)r&   Zboolean_representationre   r1   rM   )r,   r3   rL   r   r   r   Úrepresent_bool  s    
zSafeRepresenter.represent_boolc             C   s   |   dt|ƒ¡S )Nztag:yaml.org,2002:int)rM   r   )r,   r3   r   r   r   Úrepresent_int   s    zSafeRepresenter.represent_intc             C   s   |   dt|ƒ¡S )Nztag:yaml.org,2002:int)rM   r   )r,   r3   r   r   r   Úrepresent_long%  s    zSafeRepresenter.represent_longgœu ˆ<ä7~c             C   sŒ   ||ks|dkr|dkrd}nb|| j kr.d}nR|| j  kr@d}n@tt|ƒƒ ¡ }t| jdd ƒdkr€d|kr€d	|kr€| d	d
d¡}|  d|¡S )Ng        g      ð?z.nanz.infz-.infZuse_version)é   ry   Ú.Úez.0ery   ztag:yaml.org,2002:float)Ú	inf_valuer   ÚreprÚlowerÚgetattrr0   ÚreplacerM   )r,   r3   rL   r   r   r   Úrepresent_float.  s    
zSafeRepresenter.represent_floatc             C   s   |   d|¡S )Nztag:yaml.org,2002:seq)rT   )r,   r3   r   r   r   Úrepresent_listD  s    	zSafeRepresenter.represent_listc             C   s   |   d|¡S )Nztag:yaml.org,2002:map)ra   )r,   r3   r   r   r   Úrepresent_dictT  s    zSafeRepresenter.represent_dictc             C   s   |   d|¡S )Nztag:yaml.org,2002:omap)rX   )r,   r3   r   r   r   Úrepresent_ordereddictX  s    z%SafeRepresenter.represent_ordereddictc             C   s&   i }x|D ]}d ||< q
W |   d|¡S )Nztag:yaml.org,2002:set)ra   )r,   r3   rL   Úkeyr   r   r   Úrepresent_set\  s    
zSafeRepresenter.represent_setc             C   s   t | ¡ ƒ}|  d|¡S )Nztag:yaml.org,2002:timestamp)r   Ú	isoformatrM   )r,   r3   rL   r   r   r   Úrepresent_datec  s    zSafeRepresenter.represent_datec             C   s   t | d¡ƒ}|  d|¡S )Nú ztag:yaml.org,2002:timestamp)r   r‡   rM   )r,   r3   rL   r   r   r   Úrepresent_datetimeh  s    z"SafeRepresenter.represent_datetimeNc             C   s.   t |dƒr| ¡ }n
|j ¡ }| j|||dS )NÚ__getstate__)rN   )r/   r‹   rE   rF   ra   )r,   rK   r3   r#   rN   Ústater   r   r   Úrepresent_yaml_objectm  s    


z%SafeRepresenter.represent_yaml_objectc             C   s   t d| ƒ‚d S )Nzcannot represent an object: %s)r   )r,   r3   r   r   r   Úrepresent_undefinedu  s    z#SafeRepresenter.represent_undefined)N)r   r   r   r6   ri   r
   rj   rp   rt   rv   rw   r	   rx   r|   r}   r   r‚   rƒ   r„   r†   rˆ   rŠ   r   rŽ   r   r   r   r   r   á   s.   
	
)é   é   c               @   s\   e Zd Zer$dd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
erPdd„ Zdd„ ZdS )r   c             C   sz   d }d }yt |dƒ}d}W nN tk
rh   yt |dƒ}d}W n& tk
rb   | d¡}d}d}Y nX Y nX | j|||dS )	Nrl   ztag:yaml.org,2002:strzutf-8ztag:yaml.org,2002:python/strrn   ztag:yaml.org,2002:binaryrm   )rJ   )rq   rr   rs   rM   )r,   r3   rK   rJ   r   r   r   rj   ´  s    


zRepresenter.represent_strc             C   s<   d }y|  d¡ d}W n tk
r.   d}Y nX |  ||¡S )Nrl   z tag:yaml.org,2002:python/unicodeztag:yaml.org,2002:str)rs   ÚUnicodeEncodeErrorrM   )r,   r3   rK   r   r   r   rt   Å  s    

zRepresenter.represent_unicodec             C   s$   d}t |ƒ|k	rd}|  |t|ƒ¡S )Nztag:yaml.org,2002:intztag:yaml.org,2002:python/long)rf   rM   r   )r,   r3   rK   r   r   r   rx   Ï  s    zRepresenter.represent_longc             C   sd   |j dkrd|j }nB|jdkr,d|j  }n,|j dkrHd|j|j f }nd|j|j f }|  d|¡S )Ng        z%rz%rjr   z%r+%rjz%r%rjz tag:yaml.org,2002:python/complex)ÚimagÚrealrM   )r,   r3   r   r   r   Úrepresent_complexÖ  s    


zRepresenter.represent_complexc             C   s   |   d|¡S )Nztag:yaml.org,2002:python/tuple)rT   )r,   r3   r   r   r   Úrepresent_tupleâ  s    zRepresenter.represent_tuplec             C   s    d|j |jf }|  d| d¡S )Nz%s.%sztag:yaml.org,2002:python/name:Ú )r   r   rM   )r,   r3   Únamer   r   r   Úrepresent_nameæ  s    zRepresenter.represent_namec             C   s   |   d|j d¡S )Nz tag:yaml.org,2002:python/module:r–   )rM   r   )r,   r3   r   r   r   Úrepresent_moduleì  s    zRepresenter.represent_modulec             C   sº   |j }d|j|jf }d }d }t|dƒr4t| ¡ ƒ}t|dƒrH| ¡ }n|j}|d krpt|t	ƒrp|  
d| |¡S t|t	ƒrŽ|sŽ|  d| |¡S i }t|ƒr¢||d< ||d< |  
d| |¡S )Nz%s.%sÚ__getinitargs__r‹   z tag:yaml.org,2002:python/object:z$tag:yaml.org,2002:python/object/new:ÚargsrŒ   )r>   r   r   r/   r?   rš   r‹   rE   r;   Údictra   rT   re   )r,   r3   r#   Ú
class_namer›   rŒ   rL   r   r   r   Úrepresent_instanceò  s,    



zRepresenter.represent_instancec             C   s®  t |ƒ}|tjkr"tj| |ƒ}n6t|dƒr8| d¡}n t|dƒrL| ¡ }ntd| ƒ‚t|ƒd gd  d d… }|\}}}}}t|ƒ}|d kr”i }|d k	r¤t|ƒ}|d k	r´t|ƒ}|j	dkrÜ|d }|dd … }d	}	d
}
nd}	d}
d|j
|j	f }|s(|s(|s(t|tƒr(|
r(|  d| |¡S |sV|sVt|tƒrV|sV|  |	| |¡S i }|rh||d< |szt|tƒs‚||d< |r||d< |rž||d< |  |	| |¡S )NÚ__reduce_ex__r   Ú
__reduce__zcannot represent object: %ré   Ú
__newobj__r   ry   z$tag:yaml.org,2002:python/object/new:Tz&tag:yaml.org,2002:python/object/apply:Fz%s.%sz tag:yaml.org,2002:python/object:r›   rŒ   Ú	listitemsÚ	dictitems)r9   ÚcopyregÚdispatch_tabler/   rŸ   r    r   r?   rœ   r   r   r;   ra   rT   )r,   r3   r#   ÚreduceZfunctionr›   rŒ   r£   r¤   rK   ZnewobjZfunction_namerL   r   r   r   Úrepresent_object  sT    




zRepresenter.represent_objectN)r   r   r   r	   rj   rt   rx   r”   r•   r˜   r™   rž   r¨   r   r   r   r   r   ²  s   
+)ÚCommentedMapÚCommentedOrderedMapÚCommentedSeqÚCommentedKeySeqÚCommentedSetÚcomment_attribÚmerge_attribÚTaggedScalarc               @   s´   e Zd Zd*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„ Zdd„ Zdd„ Zdd„ Zd+dd„Zdd„ Zd,dd„Zd-d d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ ZdS ).r   Nc             C   s,   t |dƒs|d krd}tj| |||d d S )Nr.   F)r'   r(   r&   )r/   r   r-   )r,   r'   r(   r&   r   r   r   r-     s
    zRoundTripRepresenter.__init__c             C   s.   t | jƒdkr"| jjs"|  dd¡S |  dd¡S )Nr   ztag:yaml.org,2002:nullrh   r–   )Úlenr)   r0   Zuse_explicit_startrM   )r,   r3   r   r   r   ri   •  s    z#RoundTripRepresenter.represent_nonec             C   s4   d }d}t r t|tƒs t|dƒ}d}| j|||dS )Nrm   rl   ztag:yaml.org,2002:str)rJ   )r	   r;   rq   rM   )r,   r3   rK   rJ   r   r   r   Ú represent_preserved_scalarstringœ  s    
z5RoundTripRepresenter.represent_preserved_scalarstringc             C   s4   d }d}t r t|tƒs t|dƒ}d}| j|||dS )Nú'rl   ztag:yaml.org,2002:str)rJ   )r	   r;   rq   rM   )r,   r3   rK   rJ   r   r   r   Ú$represent_single_quoted_scalarstring¥  s    
z9RoundTripRepresenter.represent_single_quoted_scalarstringc             C   s4   d }d}t r t|tƒs t|dƒ}d}| j|||dS )Nú"rl   ztag:yaml.org,2002:str)rJ   )r	   r;   rq   rM   )r,   r3   rK   rJ   r   r   r   Ú$represent_double_quoted_scalarstring®  s    
z9RoundTripRepresenter.represent_double_quoted_scalarstringc             C   s˜   |d kr|   d|| ¡S |d rht|ƒ}t|ƒ|d  }x$|dkr\| |d¡ ||d 8 }q:W d |¡}|d rxd| }|d rˆ|d7 }|   d|| ¡S )Nztag:yaml.org,2002:intr   Ú_r–   ry   r   )rM   r?   r±   ÚinsertÚjoin)r,   ÚprefixÚsZ
underscoreZslÚposr   r   r   Úinsert_underscore·  s    

z&RoundTripRepresenter.insert_underscorec             C   s4   |j d k	rd ||j ¡}n
t|dƒ}|  d||j¡S )Nz{:0{}d}Údr–   )Ú_widthÚformatr½   Ú_underscore)r,   r3   r»   r   r   r   Úrepresent_scalar_intÈ  s    

z)RoundTripRepresenter.represent_scalar_intc             C   s4   |j d k	rd ||j ¡}n
t|dƒ}|  d||j¡S )Nz{:0{}b}ÚbZ0b)r¿   rÀ   r½   rÁ   )r,   r3   r»   r   r   r   Úrepresent_binary_intÐ  s    

z)RoundTripRepresenter.represent_binary_intc             C   s4   |j d k	rd ||j ¡}n
t|dƒ}|  d||j¡S )Nz{:0{}o}ÚoZ0o)r¿   rÀ   r½   rÁ   )r,   r3   r»   r   r   r   Úrepresent_octal_intÙ  s    

z(RoundTripRepresenter.represent_octal_intc             C   s4   |j d k	rd ||j ¡}n
t|dƒ}|  d||j¡S )Nz{:0{}x}ÚxÚ0x)r¿   rÀ   r½   rÁ   )r,   r3   r»   r   r   r   Úrepresent_hex_intâ  s    

z&RoundTripRepresenter.represent_hex_intc             C   s4   |j d k	rd ||j ¡}n
t|dƒ}|  d||j¡S )Nz{:0{}X}ÚXrÈ   )r¿   rÀ   r½   rÁ   )r,   r3   r»   r   r   r   Úrepresent_hex_caps_intë  s    

z+RoundTripRepresenter.represent_hex_caps_intc             C   s~  d}||ks|dkr"|dkr"d}n || j kr2d}n|| j  krBd}|rR|  d|¡S |jdkrš|jdkrš|j|jd	 kršd
 |jr†|jndtt|ƒƒ¡}n¾|jdkr|j}|d	k r¸d	}|jrÄ|jnd}d |t|ƒ|jt	|ƒ |j| d	 ¡}xt	|ƒ|jk r|d7 }qòW nFd ||j|j|j |jr2d	nd ¡ 
d¡\}}|jdkrV|jn|jd	 }|dk rr|d	7 }|d|… }t|ƒ}| 
d¡\}	}
x:t	|	ƒt	|
ƒ |j|jdkr¸d	nd k rÎ|
d7 }
q–W |jrê|dkrêd|	 }	|jrödnd}|jdk r‚|
dkr|t	|
ƒ8 }nd}
x>t	|	ƒt	|
ƒ |jr>d	nd |jk r`|
d7 }
|d	8 }q$W |	|
 |j d |||j¡ }nÖ|jdkr¾|t	|
ƒ8 }|	|
 d |j d |||j¡ }nš|jdkrþd|jd	  |	 |
 }
d}	|
d|j … }
||j7 }x6t	|	ƒ|jk r4|	|
d 7 }	|
d	d… }
|d	8 }q W |	d |
 |j d |||j¡ }|dkrrtt|ƒƒ ¡ }|  d|¡S )z this is way more complicated Ng        g      ð?z.nanz.infz-.infztag:yaml.org,2002:floatr   ry   z{}{:d}.r–   z{}{:0{}.{}f}Ú0z	{:{}.{}e}r{   rz   ú+z	{:{}0{}d})r|   rM   Z_expZ_precr¿   rÀ   Z_m_signÚabsrf   r±   ÚsplitZ_e_signZ_e_widthZ_m_lead0r   r}   r~   )r,   r3   rL   ZprecZmsÚmZesÚwr{   Zm1Zm2Zesgnr   r   r   Úrepresent_scalar_floatô  sx    
$$$

.
* 

z+RoundTripRepresenter.represent_scalar_floatc             C   sÌ  g }y|j  |¡}W n tk
r,   |}Y nX y| ¡ }W n tk
rR   d }Y nX t||||d}| jd k	rz|| j| j< d}y¸t|tƒ}|j	|_	|j	r¾|j	d r¾x|j	d D ]}	|	 
¡  q®W |j}
x6|
 ¡ D ]*}|rÎ|d rÎx|d D ]}	|	 
¡  qèW qÎW |j}
|j	|_	y|j	 |j¡ W n tk
r2   Y nX W n tk
rP   i }
Y nX xNt|ƒD ]B\}}|  |¡}|
 |¡|_	t|tƒrŽ|jr’d}| |¡ q\W |d krÈ| jd k	rÂ| j|_n||_|S )N)rN   ÚanchorTry   F)ÚfarN   r1   Úyaml_anchorrO   r+   r)   r   r®   ÚcommentÚresetrY   Úvaluesr8   ÚendÚ	enumerater2   Úgetr;   rB   rJ   r(   )r,   rK   rP   rN   rL   rÓ   r4   rQ   rÖ   ÚctÚitem_commentsÚvÚidxrR   rS   r   r   r   rT   =  sV    








z'RoundTripRepresenter.represent_sequencec             C   s,   t |tƒr d | _| jd|ddS t | |¡S )Nztag:yaml.org,2002:seqT)rN   )r;   r¬   r+   rT   r   rD   )r,   r3   r   r   r   rD   p  s
    
z"RoundTripRepresenter.represent_keyc             C   sÆ  g }y|j  |¡}W n tk
r,   |}Y nX y| ¡ }W n tk
rR   d }Y nX t||||d}| jd k	rz|| j| j< d}yªt|tƒ}|j	|_	|j	r¾|j	d r¾x|j	d D ]}	|	 
¡  q®W |j}
x6|
 ¡ D ]*}|rÎ|d rÎx|d D ]}	|	 
¡  qèW qÎW y|j	 |j¡ W n tk
r$   Y nX W n tk
rB   i }
Y nX dd„ t|tg ƒD ƒ}t|ƒrn| ¡ }n| ¡ }xÖ|D ]Î\}}|  |¡}|  |¡}|
 |¡}|r
t|dd ƒd ks¾t‚|d d… |_	t|dd ƒ}|d k	rü|d |d< |d	 |d< n|dd … |_	t|tƒr|jr"d
}t|tƒr6|jr:d
}| ||f¡ q|W |d krt| jd k	rn| j|_n||_t|ƒrÂt|ƒdkrœ|  |d ¡}n|  |¡}d|_| dtddƒ|f¡ |S )N)rN   rÓ   Try   c             S   s   g | ]}|d  ‘qS )ry   r   )Ú.0rÐ   r   r   r   ú
<listcomp>™  s    z:RoundTripRepresenter.represent_mapping.<locals>.<listcomp>rÖ   r   r   é   Fztag:yaml.org,2002:mergez<<)rÔ   rN   r1   rÕ   rZ   r+   r)   r   r®   rÖ   r×   rY   rØ   r8   rÙ   r¯   re   Znon_merged_itemsrD   r2   rÛ   ÚAssertionErrorr;   rB   rJ   r(   r±   r¸   )r,   rK   r]   rN   rL   rÓ   r4   rQ   rÖ   rÜ   rÝ   rÞ   Z
merge_listrY   rV   r^   r_   r`   Úitem_commentÚnvcÚargr   r   r   ra   x  s€    















z&RoundTripRepresenter.represent_mappingc             C   sP  g }y|j  |¡}W n tk
r,   |}Y nX y| ¡ }W n tk
rR   d }Y nX t||||d}| jd k	rz|| j| j< d}yªt|tƒ}|j	|_	|j	r¾|j	d r¾x|j	d D ]}	|	 
¡  q®W |j}
x6|
 ¡ D ]*}|rÎ|d rÎx|d D ]}	|	 
¡  qèW qÎW y|j	 |j¡ W n tk
r$   Y nX W n tk
rB   i }
Y nX xà|D ]Ø}|| }|  ||i¡}|
 |¡}|r|d rŒd |d g|_	t|jd d dd ƒd ks¬t‚|d d g|jd d _	t|jd d dd ƒ}|d k	rþ|d |d< |d |d< n|dd … |jd d _	| |¡ qJW |d krL| jd k	rF| j|_n||_|S )N)rN   rÓ   Try   r   rÖ   r   râ   )rÔ   rN   r1   rÕ   rO   r+   r)   r   r®   rÖ   r×   rY   rØ   r8   rÙ   r2   rÛ   rL   rã   r(   )r,   rK   rU   rN   rL   rÓ   r4   rQ   rÖ   rÜ   rÝ   rÞ   rV   rW   rS   rä   rå   r   r   r   rX   Â  sd    








 


z#RoundTripRepresenter.represent_omapc             C   sÚ  d}d}g }|j  |¡}y| ¡ }W n tk
r<   d }Y nX t||||d}| jd k	rd|| j| j< d}yªt|tƒ}|j	|_	|j	r¨|j	d r¨x|j	d D ]}	|	 
¡  q˜W |j}
x6|
 ¡ D ]*}|r¸|d r¸x|d D ]}	|	 
¡  qÒW q¸W y|j	 |j¡ W n tk
r   Y nX W n tk
r,   i }
Y nX x¢|jD ]˜}|  |¡}|  d ¡}|
 |¡}|r‚t|dd ƒd kstt‚|d d… |_	d |_|_t|tƒr¢|jr¦d}t|tƒrº|jr¾d}| ||f¡ q6W |}|S )	NFztag:yaml.org,2002:set)rN   rÓ   Try   rÖ   r   ú?)rÔ   rN   rÕ   r1   rZ   r+   r)   r   r®   rÖ   r×   rY   rØ   r8   rÙ   ZodictrD   r2   rÛ   rã   rJ   r;   rB   )r,   ZsettingrN   rK   rL   rÓ   r4   rQ   rÖ   rÜ   rÝ   rÞ   rV   r_   r`   rä   r   r   r   r†   þ  sZ    







z"RoundTripRepresenter.represent_setc             C   s\   y|j j}W n tk
r$   d}Y nX |rL| d¡rFd|dd…  }qP|}nd}|  ||¡S )z!write out tag if saved on loadingNz!!ztag:yaml.org,2002:r   ztag:yaml.org,2002:map)rK   rL   r1   Ú
startswithra   )r,   r3   ÚtrK   r   r   r   rƒ   0  s    

z#RoundTripRepresenter.represent_dictc             C   sf   |j d rdnd}|j }|d r8||d 7 }| |¡}n
| |¡}|d rV||d 7 }|  dt|ƒ¡S )Nré   ÚTr‰   ZdeltaZtzztag:yaml.org,2002:timestamp)Ú_yamlr‡   rM   r   )r,   r3   Zinterrë   rL   r   r   r   rŠ   @  s    
z'RoundTripRepresenter.represent_datetimec             C   s:   y|j j}W n tk
r$   d }Y nX | j||j|jdS )N)rJ   )rK   rL   r1   rM   rJ   )r,   r3   rK   r   r   r   Úrepresent_tagged_scalarM  s
    
z,RoundTripRepresenter.represent_tagged_scalar)NNN)N)N)N)r   r   r   r-   ri   r²   r´   r¶   r½   rÂ   rÄ   rÆ   rÉ   rË   rÒ   rT   rD   ra   rX   r†   rƒ   rŠ   rì   r   r   r   r   r   ‰  s(   
							I
3
J
<2)jZ
__future__r   r   r   Zruamel_yaml.errorZruamel_yaml.nodesZruamel_yaml.compatr   r   r   r	   r
   r   Zruamel_yaml.scalarstringr   r   r   Zruamel_yaml.scalarintr   r   r   r   r   Zruamel_yaml.scalarfloatr   Zruamel_yaml.timestampr   ZdatetimeÚsysr<   r¥   rn   Zcopy_regÚ__all__Z	YAMLErrorr   r"   Úobjectr   r   rH   r9   ri   Ústrrj   rq   rt   Úbytesrp   re   rv   rf   rw   Zlongrx   rg   r   r?   r‚   rd   rœ   rƒ   Úsetr†   r„   Úversion_infoÚcollectionsÚOrderedDictZdaterˆ   rŠ   rŽ   r   Úcomplexr”   r•   r˜   Z	ClassTypeÚFunctionTypeÚBuiltinFunctionTypeÚ
ModuleTyper™   rI   r=   rž   r¨   Zruamel_yaml.commentsr©   rª   r«   r¬   r­   r®   r¯   r°   r   r²   r´   r¶   rÂ   rÄ   rÆ   rÉ   rË   rÒ   rì   r   r   r   r   Ú<module>   s   
 5 

 ,(   O
