o
                        @   sB  d dl mZmZmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZmZ d dlT d dlmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZm Z  d dl!T d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d d	l0m1Z1m2Z2m3Z3m4Z4m5Z5 d d
l6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= 	 g dZFG dd deZGG dd deZHG dd deZIG dd deJZKG dd deKZLeLMdeLjN eLMdeLjO eLMdeLjP eLMdeLjQ eLMdeLjR eLMd eLjS eLMd!eLjT eLMd"eLjU eLMd#eLjV eLMd$eLjW eLMd%eLjX eLMd&eLjY eLMdeLjZ er:G d'd( d(Z[G d)d* d*eLZ\e\Md+e\jN e\Md,e\jO e\Md-e\j] e\Md.e\j^ erhe\Md/e\j_ e\Md0e\jP e\Md1e\j` e\Md2e\jQ e\Md3e\ja e\Md4e\jX e\Md5e\jb e\Md6e\jY e\cd7e\jd e\cd8e\je e\cd9e\jf e\cd:e\jg e\cd;e\jh G d<d= d=eLZieiMdeijN eiMdeijO eiMdeijP eiMdeijQ eiMdeijR eiMd eijS eiMd!eijT eiMd"eijU eiMd#eijV eiMd$eijW eiMd%eijX eiMd&eijY eiMdeijZ dS )>    )print_functionabsolute_importdivisionN)MarkedYAMLErrorMarkedYAMLFutureWarningMantissaNoDotYAML1_1Warning)*)SequenceNodeMappingNode
ScalarNode)utf8builtins_moduleto_strPY2PY3ordereddict	text_typenprintnprintfversion_tnfHashableMutableSequenceMutableMapping)CommentedMapCommentedOrderedMapCommentedSetCommentedKeySeqCommentedSeqTaggedScalarCommentedKeyMap)SingleQuotedScalarStringDoubleQuotedScalarStringLiteralScalarStringFoldedScalarStringPlainScalarStringScalarString)	ScalarInt	BinaryIntOctalIntHexInt
HexCapsInt)ScalarFloat)ScalarBoolean)	TimeStamp)RegExpF)AnyDictListSet	GeneratorUnionOptional)BaseConstructorSafeConstructorConstructorConstructorErrorRoundTripConstructorc                   @      e Zd ZdS )r9   N__name__
__module____qualname__ r@   r@   @/tmp/google-cloud-sdk/lib/third_party/ruamel/yaml/constructor.pyr9   +       r9   c                   @   r;   )DuplicateKeyFutureWarningNr<   r@   r@   r@   rA   rC   /   rB   rC   c                   @   r;   )DuplicateKeyErrorNr<   r@   r@   r@   rA   rD   3   rB   rD   c                   @   s   e Zd Zi Zi Zd#ddZedd Ze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dZedd  Zed!d" ZdS )%r6   Nc                 C   sj   || _ | j d urt| j dd d u r| | j _|| _ t| _t| _i | _i | _g | _	d| _
|| _tdd| _d S )N_constructorF)r         )r      )loadergetattrrE   dictyaml_base_dict_typelistyaml_base_list_typeconstructed_objectsrecursive_objectsstate_generatorsdeep_construct_preserve_quotesr   allow_duplicate_keys)selfpreserve_quotesrI   r@   r@   rA   __init__<   s   zBaseConstructor.__init__c              	   C   sr   t | jdr
| jjS z| jjW S  ty8   tjdt	|  tjd| jj tjdt
|   w )Ntypzslt {}
zslc {}
z{}
)hasattrrI   composer	_composerAttributeErrorsysstdoutwriteformattypedirrU   r@   r@   rA   rZ   K   s   
zBaseConstructor.composerc                 C   s   t | jdr
| jjS | jjS )NrX   )rY   rI   resolver	_resolverrc   r@   r@   rA   rd   X   s   zBaseConstructor.resolverc                 C   s
   | j  S N)rZ   
check_noderc   r@   r@   rA   
check_data_   s   
zBaseConstructor.check_datac                 C   s   | j  r| | j  S d S rf   )rZ   rg   construct_documentget_noderc   r@   r@   rA   get_datad   s   
zBaseConstructor.get_datac                 C   s    | j  }|d ur| |S d S rf   )rZ   get_single_noderi   rU   noder@   r@   rA   get_single_dataj   s   

zBaseConstructor.get_single_datac                 C   sT   |  |}t| jr| j}g | _|D ]}|D ]}qqt| js
i | _i | _d| _|S )NF)construct_objectboolrQ   rO   rP   rR   )rU   rn   datarQ   	generator_dummyr@   r@   rA   ri   r   s   


z"BaseConstructor.construct_documentFc           
      C   s~  || j v r
| j | S |r| j}d| _|| jv r| j| S d| j|< d}d}|j| jv r2| j|j }nR| jD ]}|j|rM|jt|d }| j| } n7q5d| jv r\|j}| jd }n(d| jv rg| jd }nt|t	rq| j
j}nt|tr{| j
j}n	t|tr| j
j}|du r|| |}n|| ||}t|tjr|}t|}| jr|D ]}	qn| j| || j |< | j|= |r|| _|S )deep is True when creating an object/mapping recursively,
        in that case want the underlying elements available during construction
        TN)rO   rR   rP   tagyaml_constructorsyaml_multi_constructors
startswithlen
isinstancer   	__class__construct_scalarr	   construct_sequencer
   construct_mappingtypesGeneratorTypenextrQ   append)
rU   rn   deepold_deepconstructor
tag_suffix
tag_prefixrr   rs   rt   r@   r@   rA   rp      sZ   














z BaseConstructor.construct_objectc                 C   s&   t |tstd d d|j |j|jS )N$expected a scalar node, but found %s)r{   r   r9   id
start_markvaluerm   r@   r@   rA   r}      s
   
z BaseConstructor.construct_scalarc                    s6   t |tstddd|j |j fdd|jD S )ru   N&expected a sequence node, but found %sc                    s   g | ]	}j | d qS )r   )rp   ).0childr   rU   r@   rA   
<listcomp>   s    z6BaseConstructor.construct_sequence.<locals>.<listcomp>)r{   r	   r9   r   r   r   rU   rn   r   r@   r   rA   r~      s
   
z"BaseConstructor.construct_sequencec                 C   sH  t |tstddd|j |j|  }t|dddur'|jdf|jdfg}n|jdfg}|D ]r\}}|  }|D ]b\}}	| j	|dd}
t |
t
sRt |
trRt|
}
trrzt|
 W n% tyq } ztd|jd| |jd}~ww t |
t
std|jd	|j| j	|	|d}|r| ||||
|r|||
< q9|||
< q9|| q/|S )
ru   N%expected a mapping node, but found %smergeFTr   while constructing a mappingfound unacceptable key (%s)found unhashable key)r{   r
   r9   r   r   rL   rJ   r   r   rp   r   rM   tupler   hash	TypeErrorcheck_mapping_keyupdate)rU   rn   r   total_mappingtodovaluescheckmappingkey_node
value_nodekeyexcr   r@   r@   rA   r      sT   




z!BaseConstructor.construct_mappingc                 C   s   ||v rO| j sM||}tr,t|tr|d}t|tr"|d}t|tr,|d}d|jd||||jddg}| j du rIt	t
|  dS t| dS dS )	zreturn True if key is uniqueutf-8r   z?found duplicate key "{}" with value "{}" (original value: "{}")
                    To suppress this check see:
                        http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys
                                        Duplicate keys will become an error in future releases, and are errors
                    by default when using the new API.
                    NFT)rT   getr   r{   unicodeencoder   r`   warningswarnrC   rD   )rU   rn   r   r   r   r   mkargsr@   r@   rA   r      s0   








z!BaseConstructor.check_mapping_keyc                 C   sl   ||v r2| j s4trt|tr|d}d|jd||jddg}| j d u r.tt	|  d S t
| d S d S )Nr   zwhile constructing a setfound duplicate key "{}"r   r   )rT   r   r{   r   r   r   r`   r   r   rC   rD   )rU   rn   r   settingr   r   r@   r@   rA   check_set_key!  s"   


zBaseConstructor.check_set_keyc                 C   sb   t |tstd d d|j |jg }|jD ]\}}| j||d}| j||d}|||f q|S )Nr   r   )r{   r
   r9   r   r   r   rp   r   )rU   rn   r   pairsr   r   r   r   r@   r@   rA   construct_pairs;  s   
zBaseConstructor.construct_pairsc                 C   $   d| j vr| j | _|| j|< d S )Nrw   )__dict__rw   copy)clsrv   r   r@   r@   rA   add_constructorH     
zBaseConstructor.add_constructorc                 C   r   )Nrx   )r   rx   r   )r   r   multi_constructorr@   r@   rA   add_multi_constructorO  r   z%BaseConstructor.add_multi_constructor)NNF)r=   r>   r?   rw   rx   rW   propertyrZ   rd   rh   rk   ro   ri   rp   r}   r~   r   r   r   r   classmethodr   r   r@   r@   r@   rA   r6   7   s.    



8

3#

r6   c                	   @   s   e Zd Zdd Zdd Zd*ddZdd	 Zd
dd
dd
dd
ddZdd Zdd Z	dZ
e
e
e
 kr:e
e
9 Z
e
e
e
 ks0e
 e
 Zdd ZerJdd Zndd Zedej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S ),r7   c                 C   s>   t |tr|jD ]\}}|jdkr| |  S qt| |S )Ntag:yaml.org,2002:value)r{   r
   r   rv   r}   r6   )rU   rn   r   r   r@   r@   rA   r}   X  s   

z SafeConstructor.construct_scalarc           
      C   s  g }d}|t |jk r|j| \}}|jdkr|rD| jr%|j|= |d7 }qd|jd|j|jddg}| jdu r@tt|  nt	| |j|= t
|trY| | ||j nUt
|trg }|jD ]}t
|tsvtd|jd	|j |j| | ||j qc|  |D ]}	||	 qntd|jd
|j |j|jdkrd|_|d7 }n|d7 }|t |jk st|r||_||j |_dS dS )
        This implements the merge key feature http://yaml.org/type/merge.html
        by inserting keys from the merge dict/list of dicts if not yet
        available in this node
        r   tag:yaml.org,2002:mergerG   r   r   
                        To suppress this check see:
                           http://yaml.readthedocs.io/en/latest/api.html#duplicate-keys
                                                Duplicate keys will become an error in future releases, and are errors
                        by default when using the new API.
                        N,expected a mapping for merging, but found %s@expected a mapping or list of mappings for merging, but found %sr   tag:yaml.org,2002:str)rz   r   rv   rT   r   r`   r   r   rC   rD   r{   r
   flatten_mappingextendr	   r9   r   r   reverserq   r   )
rU   rn   r   indexr   r   r   submergesubnoder   r@   r@   rA   r   `  sr   










:zSafeConstructor.flatten_mappingFc                 C   s$   t |tr
| | tj| ||dS )ru   r   )r{   r
   r   r6   r   r   r@   r@   rA   r     s   

z!SafeConstructor.construct_mappingc                 C   s   |  | d S rf   r}   rm   r@   r@   rA   construct_yaml_null  s   
z#SafeConstructor.construct_yaml_nullT)yesnoyntruefalseonoffc                 C   s   |  |}| j|  S rf   )r}   bool_valueslowerrU   rn   r   r@   r@   rA   construct_yaml_bool  s   
z#SafeConstructor.construct_yaml_boolc                 C   sB  t | |}|dd}d}|d dkrd}|d dv r#|dd  }|dkr)dS |d	r9|t|d
d  d
 S |drI|t|d
d  d S |drY|t|d
d  d S | jjdkrl|d dkrl|t|d S | jjdkrd|v rdd |dD }|  d}d}|D ]}||| 7 }|d9 }q|| S |t| S )N_ rG   r   -+-00b   0xrH   0o   rG   rG   :c                 S      g | ]}t |qS r@   intr   partr@   r@   rA   r         z6SafeConstructor.construct_yaml_int.<locals>.<listcomp><   )	r   r}   replacery   r   rd   processing_versionsplitr   )rU   rn   value_ssigndigitsbaser   digitr@   r@   rA   construct_yaml_int  s6   



z"SafeConstructor.construct_yaml_intgu <7~c                 C   s  t | |}|dd }d}|d dkrd}|d dv r%|dd  }|dkr.|| j S |d	kr5| jS | jjd
krdd|v rddd |dD }|	  d}d}|D ]}||| 7 }|d9 }qS|| S | jjd
krd|v r|d\}	}
d|	vrt
t|| |t| S )Nr   r   rG   r   r   r   r   .inf.nanrG   r   r   c                 S   r   r@   floatr   r@   r@   rA   r     r   z8SafeConstructor.construct_yaml_float.<locals>.<listcomp>        r   e.)r   r}   r   r   	inf_value	nan_valuerd   r   r   r   r   r   r   r   )rU   rn   value_sor   r   r   r   r   r   mantissaexponentr@   r@   rA   construct_yaml_float  s2   

z$SafeConstructor.construct_yaml_floatc              
   C      z
|  |d}W n ty  } z
td d d| |jd }~ww zttdr-t|W S t|W S  t	j
yI } z
td d d| |jd }~ww Nasciiz,failed to convert base64 data into ascii: %sdecodebytes failed to decode base64 data: %sr}   r   UnicodeEncodeErrorr9   r   rY   base64r  decodestringbinasciiErrorrU   rn   r   r   r@   r@   rA   construct_yaml_binary
  *   
z%SafeConstructor.construct_yaml_binaryc              
   C   sN   |  |}zt|dW S  tjtfy& } z
td d d| |jd }~ww )Nr  r  )r}   r   decoder  r  r  r9   r   r  r@   r@   rA   r  !  s   
a  ^(?P<year>[0-9][0-9][0-9][0-9])
          -(?P<month>[0-9][0-9]?)
          -(?P<day>[0-9][0-9]?)
          (?:((?P<t>[Tt])|[ \t]+)   # explictly not retaining extra spaces
          (?P<hour>[0-9][0-9]?)
          :(?P<minute>[0-9][0-9])
          :(?P<second>[0-9][0-9])
          (?:\.(?P<fraction>[0-9]*))?
          (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
          (?::(?P<tz_minute>[0-9][0-9]))?))?)?$Nc              	   C   s  |d u r-z	| j |j}W n ty   d }Y nw |d u r)td d d|j|j| }t|d }t|d }t|d }|d sJt	
|||S t|d }t|d }t|d }	d}
|d	 r|d	 d d
 }t|d
k rz|d7 }t|d
k spt|}
t|d	 d
krt|d	 d
 dkr|
d7 }
d }|d rt|d }|d }|rt|nd}t	j||d}|d dkr| }t		||||||	|
}|r||8 }|S )N'failed to construct timestamp from "{}"yearmonthdayhourminutesecondr   fraction   r      rG   tz_signtz_hour	tz_minutehoursminutesr   )timestamp_regexpmatchr   r   r9   r`   r   	groupdictr   datetimedaterz   	timedelta)rU   rn   r   r(  r  r  r  r  r  r  r  
fraction_sdeltar"  r&  r#  rr   r@   r@   rA   construct_yaml_timestamp9  sV   
$	z(SafeConstructor.construct_yaml_timestampc                 c   s    t  }|V  t|tstd|jd|j |j|jD ]C}t|ts.td|jd|j |jt|jdkrCtd|jdt|j |j|jd \}}| 	|}||vsUJ | 	|}|||< qd S )N!while constructing an ordered map!expected a sequence, but found %s,expected a mapping of length 1, but found %srG   2expected a single mapping item, but found %d itemsr   )
r   r{   r	   r9   r   r   r   r
   rz   rp   rU   rn   omapr   r   r   r   r   r@   r@   rA   construct_yaml_omapm  s>   





z#SafeConstructor.construct_yaml_omapc                 c   s    g }|V  t |tstd|jd|j |j|jD ]@}t |ts-td|jd|j |jt|jdkrBtd|jdt|j |j|jd \}}| |}| |}|	||f qd S )Nzwhile constructing pairsr1  r2  rG   r3  r   )
r{   r	   r9   r   r   r   r
   rz   rp   r   )rU   rn   r   r   r   r   r   r   r@   r@   rA   construct_yaml_pairs  s<   




z$SafeConstructor.construct_yaml_pairsc                 c   s&    t  }|V  | |}|| d S rf   )setr   r   rU   rn   rr   r   r@   r@   rA   construct_yaml_set  s
   
z"SafeConstructor.construct_yaml_setc                 C   s6   |  |}tr	|S z|dW S  ty   | Y S w Nr
  )r}   r   r   r  r   r@   r@   rA   construct_yaml_str  s   
z"SafeConstructor.construct_yaml_strc                 c   s$    |   }|V  || | d S rf   )rN   r   r~   rU   rn   rr   r@   r@   rA   construct_yaml_seq  s   z"SafeConstructor.construct_yaml_seqc                 c   s(    |   }|V  | |}|| d S rf   )rL   r   r   r9  r@   r@   rA   construct_yaml_map  s
   
z"SafeConstructor.construct_yaml_mapc                 c   sR    | |}|V  t|dr| j|dd}|| d S | |}|j| d S N__setstate__Tr   )__new__rY   r   rA  r   r   rU   rn   r   rr   stater@   r@   rA   construct_yaml_object  s   


z%SafeConstructor.construct_yaml_objectc                 C   s   t d d dt|j |j)N0could not determine a constructor for the tag %r)r9   r   rv   r   rm   r@   r@   rA   construct_undefined  s   z#SafeConstructor.construct_undefinedr   rf   )r=   r>   r?   r}   r   r   r   r   r   r   r  r  r  r   r  r.   reXr'  r/  r6  r7  r:  r<  r>  r?  rE  rG  r@   r@   r@   rA   r7   W  sL    
G	




4! 
r7   ztag:yaml.org,2002:nullztag:yaml.org,2002:boolztag:yaml.org,2002:intztag:yaml.org,2002:floatztag:yaml.org,2002:binaryztag:yaml.org,2002:timestampztag:yaml.org,2002:omapztag:yaml.org,2002:pairsztag:yaml.org,2002:setr   ztag:yaml.org,2002:seqztag:yaml.org,2002:mapc                   @   r;   )classobjNr<   r@   r@   r@   rA   rJ    rB   rJ  c                   @   s   e Zd Zdd Zd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dd Zd!ddZdd Zdd Zd"ddZdd  ZdS )#r8   c                 C      t | |S rf   )r   r}   rm   r@   r@   rA   construct_python_str
     z Constructor.construct_python_strc                 C   s
   |  |S rf   r   rm   r@   r@   rA   construct_python_unicode  s   
z$Constructor.construct_python_unicodec              
   C   r  r	  r  r  r@   r@   rA   construct_python_bytes  r  z"Constructor.construct_python_bytesc                 C   s   |  |}tr	|S t|S rf   )r   r   r   )rU   rn   valr@   r@   rA   construct_python_long)  s   
z!Constructor.construct_python_longc                 C   rK  rf   )complexr}   rm   r@   r@   rA   construct_python_complex0  rM  z$Constructor.construct_python_complexc                 C   rK  rf   )r   r~   rm   r@   r@   rA   construct_python_tuple4  rM  z"Constructor.construct_python_tuplec              
   C   s\   |s	t d|d|zt| W n ty( } zt d|dt||f |d }~ww tj| S )N"while constructing a Python module+expected non-empty name appended to the tagcannot find module %r (%s))r9   
__import__ImportErrorr   r]   modules)rU   namemarkr   r@   r@   rA   find_python_module8  s&   
zConstructor.find_python_modulec              
   C   s  |s	t d|d|d|v r:|d}|}g }t|dkr9|d|  d|}zt| W n	 ty8   Y qw nt}|g}zt| W n ty^ } zt d|dt	||f |d }~ww t
j| }d|}	|}
|rt|
|d st d|dt	|	|jf |t|
|d}
|sm|
S )Nz"while constructing a Python objectrV  r  rG   r   rW  zcannot find %r in the module %r)r9   r   rz   insertpopjoinrX  rY  r   r   r]   rZ  rY   r=   rJ   )rU   r[  r\  lnamelmodule_namelobject_namemodule_namer   moduleobject_nameobjr@   r@   rA   find_python_nameL  s`   




zConstructor.find_python_namec                 C   6   |  |}|rtd|jdt| |j| ||jS )Nz while constructing a Python name&expected the empty value, but found %r)r}   r9   r   r   rh  rU   suffixrn   r   r@   r@   rA   construct_python_name}     

z!Constructor.construct_python_namec                 C   ri  )NrU  rj  )r}   r9   r   r   r]  rk  r@   r@   rA   construct_python_module  rn  z#Constructor.construct_python_moduleNFc                 C   s   |sg }|si }|  ||j}tr+|r$t|tr$|j|g|R i |S ||i |S |r@t|ttr@|s@|s@t }||_|S |rSt|trS|j|g|R i |S ||i |S rf   )rh  r   r   r{   ra   rB  rJ  r|   )rU   rl  rn   r   kwdsnewobjr   instancer@   r@   rA   make_python_instance  s    z Constructor.make_python_instancec                 C   s   t |dr|| d S i }t|trt|dkr|\}}t |dr)|j| n|r0|| | D ]
\}}tt	|| q4d S )NrA  r   r   )
rY   rA  r{   r   rz   r   r   itemssetattrobject)rU   rr  rD  	slotstater   r   r@   r@   rA   set_python_instance_state  s   


z%Constructor.set_python_instance_statec                 c   sJ    | j ||dd}|| j|< |V  t|d}| j||d}| || d S )NTrq  rA  r   )rs  rP   rY   r   rx  )rU   rl  rn   rr  r   rD  r@   r@   rA   construct_python_object  s   

z#Constructor.construct_python_objectc                 C   s   t |tr| j|dd}i }i }g }i }n%| j|dd}	|	dg }|	di }|	di }|	dg }|	di }| |||||}
t|rM| |
| t|rV|
| t|re|D ]}|| |
|< q\|
S )NTr   r   rp  rD  	listitems	dictitems)	r{   r	   r~   r   r   rs  rq   rx  r   )rU   rl  rn   rq  r   rp  rD  r{  r|  r   rr  r   r@   r@   rA   construct_python_object_apply  s*   

z)Constructor.construct_python_object_applyc                 C   s   | j ||ddS )NTry  )r}  )rU   rl  rn   r@   r@   rA   construct_python_object_new  s   z'Constructor.construct_python_object_new)NNFr   )r=   r>   r?   rL  rN  r   rO  rQ  rS  rT  r]  rh  rm  ro  rs  rx  rz  r}  r~  r@   r@   r@   rA   r8   	  s"    1

$r8   ztag:yaml.org,2002:python/noneztag:yaml.org,2002:python/boolztag:yaml.org,2002:python/strz tag:yaml.org,2002:python/unicodeztag:yaml.org,2002:python/bytesztag:yaml.org,2002:python/intztag:yaml.org,2002:python/longztag:yaml.org,2002:python/floatz tag:yaml.org,2002:python/complexztag:yaml.org,2002:python/listztag:yaml.org,2002:python/tupleztag:yaml.org,2002:python/dictztag:yaml.org,2002:python/name:z tag:yaml.org,2002:python/module:z tag:yaml.org,2002:python/object:z&tag:yaml.org,2002:python/object/apply:z$tag:yaml.org,2002:python/object/new:c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd(ddZ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d Zdd  Zd!d" Zd)d$d%Zd&d' Zd#S )*r:   zOneed to store the comments on the node itself,
    as well as on the items
    c                 C   sf  t |tstd d d|j |j|jdkr5t |jtr5t|j|j	d}|j
r3|j
d r3|j
d d |_
|S |jdkrt |jtrg }d}	 |jd	|d }|dk rSn
||t|  qEt|jd	d
|j	d}|j
ry|j
d ry|j
d d |_
|r~||_|S t| jrt |jtr|jdkrt|j|j	dS |jdkrt|j|j	dS |j	rt|j|j	dS |jS )Nr   |anchorrG   r   >r   Tr   '")r{   r   r9   r   r   styler   r   r"   r  commentfindr   rz   r#   r   fold_posrq   rS   r    r!   r$   )rU   rn   lssfold_positionsidxfssr@   r@   rA   r}   -  s@   


z%RoundTripConstructor.construct_scalarc                 C   s  d }t | |}z|d}t||d d ddg}W n ty)   d }Y n ty3   d }Y nw |dd}d}|d dkrDd}|d dv rP|dd  }|d	krVdS |d
r| j	j
dkro|d d	krot|dd  }|d ur|d dk|d< t|dd  dko|d dk|d< t|t|dd  d |||jdS |dr| j	j
dkr|d d	krt|dd  }t}|dd  D ]}	|	dv rt} n|	dv r nq|d ur|d dk|d< t|dd  dko|d dk|d< ||t|dd  d |||jdS |drP| j	j
dkr|d d	krt|dd  }|d ur>|d dk|d< t|dd  dko;|d dk|d< t|t|dd  d |||jdS | j	j
dkre|d d	kre|t|d S | j	j
dkrd|v rdd |dD }
|
  d}d}|
D ]}||| 7 }|d9 }q|| S | j	j
dkr|d d	kr|d urt|dko|d dk|d< t|t| t||dS |rt|dko|d dk|d< t|t| d ||jdS |jrt|t| d |jdS |t| S )Nr   rG   Fr   r   r   r   r   r   r   r   r   )width
underscorer  r   ABCDEFabcdefrH   r   r   r   r   c                 S   r   r@   r   r   r@   r@   rA   r     r   z;RoundTripConstructor.construct_yaml_int.<locals>.<listcomp>r   )r  r  )r  r  )r   r}   rstriprz   rindex
ValueError
IndexErrorr   ry   rd   r   r'   r   r  r)   r*   r(   r   r   r&   )rU   rn   r  value_susxr  r   r   hex_funchr   r   r   r   r@   r@   rA   r   P  s   
 
$$
&
z'RoundTripConstructor.construct_yaml_intc                 C   s  dd }d}t | |}|dd }d}|d dkrd	}|d d
v r/|d }|dd  }|dkr8|| j S |dkr?| jS | jjdkrnd|v rndd |dD }|	  d}d}	|D ]}
|	|
| 7 }	|d9 }q]||	 S d|v rz|d\}}d}W n t
y   |d\}}d}Y nw | jjdkrd|vrtt|| ||}t|}|d}|r|d8 }t|}|d d
v }t|t| ||||||||jd	S t|}|d}||}t|t| |||||jdS )Nc                 S   sX   d}d}|t | k r*| | dv r*| | dkr|d7 }|d7 }|t | k r*| | dv s|S )Nr   z0.r   rG   )rz   )vlead0r  r@   r@   rA   leading_zeros  s   z@RoundTripConstructor.construct_yaml_float.<locals>.leading_zerosFr   r   rG   r   r   r   r   r   r   r   r   c                 S   r   r@   r   r   r@   r@   rA   r     r   z=RoundTripConstructor.construct_yaml_float.<locals>.<listcomp>r   r   r   Er  )r  precm_signm_lead0expe_widthe_signr  )r  r  r  r  r  )r   r}   r   r   r  r  rd   r   r   r   r  r   r   r   rz   r  r+   r   r  r   )rU   rn   r  r  r  r   r   r   r   r   r   r  r  r  r  r  r  r  r  r@   r@   rA   r    s~   





z)RoundTripConstructor.construct_yaml_floatc                 C   sX   |  |}t|tr|S tr|S z|dW S  ty!   | Y S  ty+   | Y S w r;  )r}   r{   r%   r   r   r\   r  r   r@   r@   rA   r<    s   

z'RoundTripConstructor.construct_yaml_strFc                 C   s   t |tstd d d|j |jg }|jr0||jd d  t|jdkr0|j|jd dd |j	rDddl
m} ||j	sD||j	 t|jD ]%\}}|| j||d |jrb|j|j|d |||jj|jjg qI|S )	Nr   r   Tclearr   templated_idr   r   )r{   r	   r9   r   r   r  _yaml_add_commentrz   yaml_end_comment_extendr  ruamel.yaml.serializerr  yaml_set_anchor	enumerater   r   rp   _yaml_set_idx_line_collinecolumn)rU   rn   seqtypr   ret_valr  r  r   r@   r@   rA   construct_rt_sequence  s*   

z*RoundTripConstructor.construct_rt_sequencec           	         sR   fdd}g }d}|t |jk r|j| \}}|jdkr|rJ jr+|j|= |d7 }q
d|jd|j|jdd	g} jd
u rFtt|  nt	| |j|= t
|tr]||||f nCt
|tr|jD ]}t
|tsxtd|jd|j |j||||f qentd|jd|j |j|jdkrd|_|d7 }n|d7 }|t |jk s|S )r   c                    s*   |  j v r j |  }|S  j| dd}|S )NFr   )rO   rp   )r   r   rc   r@   rA   constructed(  s
   

z9RoundTripConstructor.flatten_mapping.<locals>.constructedr   r   rG   r   r   r   r   Nr   r   r   r   )rz   r   rv   rT   r   r`   r   r   rC   rD   r{   r
   r   r	   r9   r   )	rU   rn   r  merge_map_listr   r   r   r   r   r@   rc   rA   r      sb   








<z$RoundTripConstructor.flatten_mappingc                 C   s   d S rf   r@   rc   r@   r@   rA   	_sentinelw  s   zRoundTripConstructor._sentinelc                 C   s  t |tstd d d|j |j| |}|jr3||jd d  t|jdkr3|j	|jd dd |j
rGddlm} ||j
sG||j
 d | j}}|jD ] \}}	| j|dd}
t |
tst |
trt|
}|jdu ru|j  n
|jdu r|j  |}
n t |
trt|
}|jdu r|j  n
|jdu r|j  |}
trzt|
 W n% ty } ztd	|jd
| |jd }~ww t |
tstd	|jd|j| j|	|d}| ||||
|rQ|jrt|jdkr|jd r|d u r
|jd|jd< |j|j|d n|jd|jd< |j|j|
d d |_|jr*|j|j|
d |	jr6|j|	j|
d ||
|jj |jj!|	jj |	jj!g |||
< |
|}}qP|r\|"| d S d S )Nr   r   Tr  r   r  r   Fr   r   r   r   r   r  )#r{   r
   r9   r   r   r   r  r  rz   r  r  r  r  r  r  r   rp   r   r   r   
flow_stylefaset_flow_styleset_block_styler   r   r   r   r   r   r_  _yaml_set_kv_line_colr  r  add_yaml_merge)rU   rn   maptypr   	merge_mapr  last_key
last_valuer   r   r   key_skey_mr   r   r@   r@   rA   r   {  s   












$
	
z&RoundTripConstructor.construct_mappingc           
      C   sr  t |tstd d d|j |j|jr.||jd d  t|jdkr.|j|jd dd |j	rBddl
m} ||j	sB||j	 |jD ]q\}}| j|dd}t |ts^t |tr^t|}tr~zt| W n% ty} } ztd|jd	| |jd }~ww t |tstd|jd
|j| j||d}	| |||| |jr|j|j|d |jr|j|j|d || qEd S )Nr   r   Tr  r   r  r   r   r   r   r  r  )r{   r
   r9   r   r   r  r  rz   r  r  r  r  r  r   rp   r   rM   r   r   r   r   r   add)
rU   rn   rX   r   r  r   r   r   r   r   r@   r@   rA   construct_setting  sX   




z&RoundTripConstructor.construct_settingc                 c   sV    t  }||jj|jj |jr||j |V  || || | 	|| d S rf   )
r   _yaml_set_line_colr   r  r  r  r  r   r  set_collection_styler=  r@   r@   rA   r>    s   z'RoundTripConstructor.construct_yaml_seqc                 c   sB    t  }||jj|jj |V  | j||dd | || d S )NTr   )r   r  r   r  r  r   r  r=  r@   r@   rA   r?    s   z'RoundTripConstructor.construct_yaml_mapc                 C   sD   t |dkrd S |jdu r|j  d S |jdu r |j  d S d S )Nr   TF)rz   r  r  r  r  )rU   rr   rn   r@   r@   rA   r    s   

z)RoundTripConstructor.set_collection_stylec                 c   sV    | |}|V  t|drtj| |dd}|| d S t| |}|j| d S r@  )rB  rY   r7   r   rA  r   r   rC  r@   r@   rA   rE    s   

z*RoundTripConstructor.construct_yaml_objectc                 c   s~   t  }||jj|jj |jdu r|j  n
|jdu r#|j  |V  |j	rD|
|j	d d  t|j	dkrD|j|j	d dd t|tsUtd|jd|j |j|jD ]d}t|tsktd|jd|j |jt|jdkrtd|jd	t|j |j|jd
 \}}| |}||vsJ | |}|j	r|j
|j	|d |j	r|j
|j	|d |j	r|j
|j	|d |||< qXd S )NTFr   r  r0  r1  r2  rG   r3  r   r  r  )r   r  r   r  r  r  r  r  r  r  r  rz   r  r{   r	   r9   r   r   r
   rp   r4  r@   r@   rA   r6  (  s\   








z(RoundTripConstructor.construct_yaml_omapc                 c   s2    t  }||jj|jj |V  | || d S rf   )r   r  r   r  r  r  r=  r@   r@   rA   r:  X  s
   z'RoundTripConstructor.construct_yaml_setc                 c   s   zt |trDt }||jj|jj |jdu r|j	  n
|jdu r)|j
  ||j |V  |jr;||j | || W d S t |trmt }| ||_|j|_||j |V  |jrj|j|jdd W d S t |trt }||jj|jj |jdu r|j	  n
|jdu r|j
  ||j |V  |jr||j || | W d S W n   Y td d dt|j |j)NTF)always_dumprF  )r{   r
   r   r  r   r  r  r  r  r  r  yaml_set_tagrv   r  r  r   r   r   r}   r   r  r	   r   r   r~   r9   r   )rU   rn   rr   data2data3r@   r@   rA   rG  _  s\   








z(RoundTripConstructor.construct_undefinedNc                 C   sV  z	| j |j}W n ty   d }Y nw |d u r%td d d|j|j| }|d s4t	| ||S dD ]}|| r> nq6t	| ||S t
|d }t
|d }t
|d }t
|d }t
|d }	t
|d }
d	}|d
 r|d
 d d }t|dk r|d7 }t|dk s~t
|}t|d
 dkrt
|d
 d dkr|d7 }d }|d rt
|d }|d }|rt
|nd	}tj||d}|d dkr| }|r	t|||||	}||8 }t|j|j|j|j|j|
|}||jd< |d |d  }|d r|d|d  7 }||jd< nt|||||	|
|}|d r|d |jd< |d r)d|jd< |S )Nr  r  )tr!  r"  r#  r  r  r  r  r  r   r  r  r   r   rG   r!  r"  r#  r$  r   r.  r   tzr  T)r'  r(  r   r   r9   r`   r   r)  r7   r/  r   rz   r*  r,  r-   r  r  r  r  r  _yaml)rU   rn   r   r(  r   r  r  r  r  r  r  r  r-  r.  r"  r&  r#  dtrr   r  r@   r@   rA   r/    st   
$




z-RoundTripConstructor.construct_yaml_timestampc                 C   s$   t | |}|jrt||jdS |S )Nr  )r7   r   r  r,   )rU   rn   br@   r@   rA   r     s   z(RoundTripConstructor.construct_yaml_boolr   rf   )r=   r>   r?   __doc__r}   r   r  r<  r  r   r  r   r  r>  r?  r  rE  r6  r:  rG  r/  r   r@   r@   r@   rA   r:   (  s(    #[M
W

V1
	0
/=r:   )j
__future__r   r   r   r*  r  r  rH  r]   r   r   ruamel.yaml.errorr   r   r   ruamel.yaml.nodesr	   r
   r   ruamel.yaml.compatr   r   r   r   r   r   r   r   r   r   r   r   r   ruamel.yaml.commentsr   r   r   r   r   r   r   ruamel.yaml.scalarstringr    r!   r"   r#   r$   r%   ruamel.yaml.scalarintr&   r'   r(   r)   r*   ruamel.yaml.scalarfloatr+   ruamel.yaml.scalarboolr,   ruamel.yaml.timestampr-   ruamel.yaml.utilr.   typingr/   r0   r1   r2   r3   r4   r5   __all__r9   rC   rD   rv  r6   r7   r   r   r   r   r  r  r/  r6  r7  r:  r<  r>  r?  rG  rJ  r8   rL  rN  rO  rQ  rS  rT  r   rm  ro  rz  r}  r~  r:   r@   r@   r@   rA   <module>   s  <$   "    f     0