o
    ˳i                    @   sR  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 d dlmZmZmZ d dl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rBG d)d* d*Z[G d+d, d,eLZ\e\Md-e\jN e\Md.e\jO e\Md/e\j] e\Md0e\j^ erpe\Md1e\j_ e\Md2e\jP e\Md3e\j` e\Md4e\jQ e\Md5e\ja e\Md6e\jX e\Md7e\jb e\Md8e\jY e\cd9e\jd e\cd:e\je e\cd;e\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	text_typenprintnprintfversion_tnf)ordereddict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@   Q/home/ubuntu/.local/lib/python3.10/site-packages/strictyaml/ruamel/constructor.pyr9   -       r9   c                   @   r;   )DuplicateKeyFutureWarningNr<   r@   r@   r@   rA   rC   1   rB   rC   c                   @   r;   )DuplicateKeyErrorNr<   r@   r@   r@   rA   rD   5   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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   P   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   ]   s   zBaseConstructor.resolverc                 C   s
   | j  S N)rZ   
check_noderc   r@   r@   rA   
check_datad   s   
zBaseConstructor.check_datac                 C   s   | j  r| | j  S d S rf   )rZ   rg   construct_documentget_noderc   r@   r@   rA   get_datai   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_datao   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   w   s   


z"BaseConstructor.construct_documentFc                 C   sl   || j v r
| j | S |r| j}d| _|| jv r| j| S d| j|< | |}|| j |< | j|= |r4|| _|S )deep is True when creating an object/mapping recursively,
        in that case want the underlying elements available during construction
        TN)rO   rR   rP   construct_non_recursive_object)rU   rn   deepold_deeprr   r@   r@   rA   rp      s   






z BaseConstructor.construct_objectc           	      C   s&  d }d }|d u r|j }|| jv r| j| }nO| jD ]}||r/|t|d  }| j| } n6qd | jv r=|}| jd  }n(d | jv rH| jd  }nt|trR| jj}nt|t	r\| jj
}n	t|tre| jj}|d u ro|| |}n|| ||}t|tjr|}t|}| jr|D ]}q|S | j| |S rf   )tagyaml_constructorsyaml_multi_constructors
startswithlen
isinstancer   	__class__construct_scalarr	   construct_sequencer
   construct_mappingtypesGeneratorTypenextrR   rQ   append)	rU   rn   ry   constructor
tag_suffix
tag_prefixrr   rs   rt   r@   r@   rA   rv      sF   










z.BaseConstructor.construct_non_recursive_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 )rw   )rp   ).0childrw   rU   r@   rA   
<listcomp>   s    z6BaseConstructor.construct_sequence.<locals>.<listcomp>)r~   r	   r9   r   r   r   rU   rn   rw   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   rw   total_mappingtodovaluescheckmappingkey_node
value_nodekeyexcr   r@   r@   rA   r      sZ   




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_key7  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   rw   pairsr   r   r   r   r@   r@   rA   construct_pairsQ  s   
zBaseConstructor.construct_pairsc                 C   $   d| j vr| j | _|| j|< d S )Nrz   )__dict__rz   copy)clsry   r   r@   r@   rA   add_constructora     
zBaseConstructor.add_constructorc                 C   r   )Nr{   )r   r{   r   )r   r   multi_constructorr@   r@   rA   add_multi_constructorh  r   z%BaseConstructor.add_multi_constructor)NNFrf   )r=   r>   r?   rz   r{   rW   propertyrZ   rd   rh   rk   ro   ri   rp   rv   r   r   r   r   r   r   classmethodr   r   r@   r@   r@   rA   r6   9   s0    




(

6#

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   ry   r   r6   )rU   rn   r   r   r@   r@   rA   r   q  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)r}   r   ry   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   y  sx   










;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   replacer|   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&  0   
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dater}   	timedelta)rU   rn   r   r)  r  r  r  r  r  r  r  
fraction_sdeltar#  r'  r$  rr   r@   r@   rA   construct_yaml_timestamp[  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
   r}   rp   rU   rn   omapr   r   r   r   r   r@   r@   rA   construct_yaml_omap  sB   





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 pairsr2  r3  rG   r4  r   )
r~   r	   r9   r   r   r   r
   r}   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   r:  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   rB  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   ry   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(  r0  r7  r8  r;  r=  r?  r@  rF  rH  r@   r@   r@   rA   r7   p  sL    
J	



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   rK  9  rB   rK  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_unicodeB  s   
z$Constructor.construct_python_unicodec              
   C   r	  r
  r  r  r@   r@   rA   construct_python_bytesH  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   rL  rf   )complexr   rm   r@   r@   rA   construct_python_complexg  rN  z$Constructor.construct_python_complexc                 C   rL  rf   )r   r   rm   r@   r@   rA   construct_python_tuplek  rN  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_moduleo  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 objectrW  r  rG   r   rX  zcannot find %r in the module %r)r9   r   r}   insertpopjoinrY  rZ  r   r   r]   r[  rY   r=   rJ   )rU   r\  r]  lnamelmodule_namelobject_namemodule_namer   moduleobject_nameobjr@   r@   rA   find_python_name  sd   



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   ri  rU   suffixrn   r   r@   r@   rA   construct_python_name     

z!Constructor.construct_python_namec                 C   rj  )NrV  rk  )r   r9   r   r   r^  rl  r@   r@   rA   construct_python_module  ro  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   )ri  r   r   r~   ra   rC  rK  r   )rU   rm  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||| q4d S )NrB  r   r   )	rY   rB  r~   r   r}   r   r   itemssetattr)rU   rs  rE  	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rr  rB  r   )rt  rP   rY   r   rx  )rU   rm  rn   rs  rw   rE  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   rq  rE  	listitems	dictitems)	r~   r	   r   r   r   rt  rq   rx  r   )rU   rm  rn   rr  r   rq  rE  r{  r|  r   rs  r   r@   r@   rA   construct_python_object_apply  s*   

z)Constructor.construct_python_object_applyc                 C   s   | j ||ddS )NTry  )r}  )rU   rm  rn   r@   r@   rA   construct_python_object_new!  s   z'Constructor.construct_python_object_new)NNFr   )r=   r>   r?   rM  rO  r   rP  rR  rT  rU  r^  ri  rn  rp  rt  rx  rz  r}  r~  r@   r@   r@   rA   r8   =  s"    2

$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   r}   r#   r   fold_posrq   rS   r    r!   r$   )rU   rn   lssfold_positionsidxfssr@   r@   rA   r   q  sF   


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   rstripr}   rindex
ValueError
IndexErrorr   r|   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     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   )r}   )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   r}   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=  F  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r[|j|j|d d |_|| j||d |||jj|jjg qI|S )	Nr   r   Tclearr   templated_idr   r   )r~   r	   r9   r   r   r  _yaml_add_commentr}   yaml_end_comment_extendr  strictyaml.ruamel.serializerr  yaml_set_anchor	enumerater   r   rp   _yaml_set_idx_line_collinecolumn)rU   rn   seqtyprw   ret_valr  r  r   r@   r@   rA   construct_rt_sequenceU  s2   

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   constructedz  s
   

z9RoundTripConstructor.flatten_mapping.<locals>.constructedr   r   rG   r   r   r   r   Nr   r   r   r   )r}   r   ry   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   r  sf   








=z$RoundTripConstructor.flatten_mappingc                 C   s   d S rf   r@   rc   r@   r@   rA   	_sentinel  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  r}   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   maptyprw   	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  r}   r  r  r  r  r  r   rp   r   rM   r   r   r   r   r   add)
rU   rn   rX   rw   r  r   r   r   r   r   r@   r@   rA   construct_setting*  s^   




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@  h  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)r}   r  r  r  r  )rU   rr   rn   r@   r@   rA   r  p  s   

z)RoundTripConstructor.set_collection_stylec                 c   sV    | |}|V  t|drtj| |dd}|| d S t| |}|j| d S rA  )rC  rY   r7   r   rB  r   r   rD  r@   r@   rA   rF  y  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  r1  r2  r3  rG   r4  r   r  r  )r   r  r   r  r  r  r  r  r  r  r  r}   r  r~   r	   r9   r   r   r
   rp   r5  r@   r@   rA   r7    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;    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_dumprG  )r~   r
   r   r  r   r  r  r  r  r  r  yaml_set_tagry   r  r  r   r   r   r   r   r  r	   r   r   r   r9   r   )rU   rn   rr   data2data3r@   r@   rA   rH    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   r0  r   r}   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   r0    sx   
$




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  rF  r7  r;  rH  r0  r   r@   r@   r@   rA   r:   l  s(    &`O
X

\4
	1
/@r:   )j
__future__r   r   r   r+  r  r  rI  r]   r   r   strictyaml.ruamel.errorr   r   r   strictyaml.ruamel.nodesr	   r
   r   strictyaml.ruamel.compatr   r   r   r   r   r   r   r   r   r   r   r   r   strictyaml.ruamel.commentsr   r   r   r   r   r   r   strictyaml.ruamel.scalarstringr    r!   r"   r#   r$   r%   strictyaml.ruamel.scalarintr&   r'   r(   r)   r*   strictyaml.ruamel.scalarfloatr+   strictyaml.ruamel.scalarboolr,   strictyaml.ruamel.timestampr-   strictyaml.ruamel.utilr.   typingr/   r0   r1   r2   r3   r4   r5   __all__r9   rC   rD   objectr6   r7   r   r   r   r   r  r  r0  r7  r8  r;  r=  r?  r@  rH  rK  r8   rM  rO  rP  rR  rT  rU  r   rn  rp  rz  r}  r~  r:   r@   r@   r@   rA   <module>   sT  ,$   9    j     L