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\Md0e\j] e\Md1e\j^ erpe\Md2e\j_ e\Md3e\jP e\Md4e\j` e\Md5e\jQ e\Md6e\ja e\Md7e\jX e\Md8e\jb e\Md9e\jY e\cd:e\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 )A    )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 )r:   N__name__
__module____qualname__ rA   rA   Q/home/ubuntu/.local/lib/python3.10/site-packages/srsly/ruamel_yaml/constructor.pyr:   -       r:   c                   @   r<   )DuplicateKeyFutureWarningNr=   rA   rA   rA   rB   rD   1   rC   rD   c                   @   r<   )DuplicateKeyErrorNr=   rA   rA   rA   rB   rE   5   rC   rE   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 )(r7   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   )r      )loadergetattrrF   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   rA   rA   rB   __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   rA   rA   rB   rZ   P   s   
zBaseConstructor.composerc                 C   s   t | jdr
| jjS | jjS )NrX   )rY   rI   resolver	_resolverrc   rA   rA   rB   rd   ]   s   zBaseConstructor.resolverc                 C   s
   | j  S N)rZ   
check_noderc   rA   rA   rB   
check_datad   s   
zBaseConstructor.check_datac                 C   s   | j  r| | j  S d S rf   )rZ   rg   construct_documentget_noderc   rA   rA   rB   get_datai   s   
zBaseConstructor.get_datac                 C   s    | j  }|d ur| |S d S rf   )rZ   get_single_noderi   rU   noderA   rA   rB   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_dummyrA   rA   rB   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   rA   rA   rB   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   rA   rA   rB   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   r:   id
start_markvaluerm   rA   rA   rB   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   rA   rB   
<listcomp>   s    z6BaseConstructor.construct_sequence.<locals>.<listcomp>)r~   r
   r:   r   r   r   rU   rn   rw   rA   r   rB   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   r:   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   rA   rA   rB   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warnrD   rE   )rU   rn   r   r   r   r   mkargsrA   rA   rB   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   rD   rE   )rU   rn   r   settingr   r   rA   rA   rB   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   r:   r   r   r   rp   r   )rU   rn   rw   pairsr   r   r   r   rA   rA   rB   construct_pairsQ  s   
zBaseConstructor.construct_pairsc                 C   $   d| j vr| j | _|| j|< d S )Nrz   )__dict__rz   copy)clsry   r   rA   rA   rB   add_constructora     
zBaseConstructor.add_constructorc                 C   r   )Nr{   )r   r{   r   )r   r   multi_constructorrA   rA   rB   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   rA   rA   rA   rB   r7   9   s0    




(

6#

r7   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 ),r8   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   r7   )rU   rn   r   r   rA   rA   rB   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:merger   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   rD   rE   r~   r   flatten_mappingextendr
   r:   r   r   reverserq   r   )
rU   rn   r   indexr   r   r   submergesubnoder   rA   rA   rB   r   y  sx   










;zSafeConstructor.flatten_mappingFc                 C   s$   t |tr
| | tj| ||dS )ru   r   )r~   r   r   r7   r   r   rA   rA   rB   r     s   

z!SafeConstructor.construct_mappingc                 C   s   |  | d S rf   )r   rm   rA   rA   rB   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   rA   rA   rB   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_ r   r   -+-00b   0xrH   0o   r   r   :c                 S      g | ]}t |qS rA   intr   partrA   rA   rB   r         z6SafeConstructor.construct_yaml_int.<locals>.<listcomp><   )	r   r   replacer|   r   rd   processing_versionsplitr   )rU   rn   value_ssigndigitsbaser   digitrA   rA   rB   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   r   r   r   r   r   .inf.nanr   r   r   c                 S   r   rA   floatr   rA   rA   rB   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exponentrA   rA   rB   construct_yaml_float  s2   

z$SafeConstructor.construct_yaml_floatc              
   C   s   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   UnicodeEncodeErrorr:   r   rY   base64r	  decodestringbinasciiErrorrU   rn   r   r   rA   rA   rB   construct_yaml_binary&  s0   
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  r:   r   r  rA   rA   rB   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      r   tz_signtz_hour	tz_minutehoursminutesr   )timestamp_regexpmatchr   r   r:   r`   r   	groupdictr   datetimedater}   	timedelta)rU   rn   r   r$  r  r  r  r  r  r  r  
fraction_sdeltar  r"  r  rr   rA   rA   rB   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 %sr   2expected a single mapping item, but found %d itemsr   )
r   r~   r
   r:   r   r   r   r   r}   rp   rU   rn   omapr   r   r   r   r   rA   rA   rB   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 pairsr-  r.  r   r/  r   )
r~   r
   r:   r   r   r   r   r}   rp   r   )rU   rn   r   r   r   r   r   r   rA   rA   rB   construct_yaml_pairs  s@   




z$SafeConstructor.construct_yaml_pairsc                 c   s&    t  }|V  | |}|| d S rf   )setr   r   rU   rn   rr   r   rA   rA   rB   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   rA   rA   rB   construct_yaml_str  s   
z"SafeConstructor.construct_yaml_strc                 c   s$    |   }|V  || | d S rf   )rN   r   r   rU   rn   rr   rA   rA   rB   construct_yaml_seq  s   z"SafeConstructor.construct_yaml_seqc                 c   s(    |   }|V  | |}|| d S rf   )rL   r   r   r5  rA   rA   rB   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   r=  r   r   rU   rn   r   rr   staterA   rA   rB   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)r:   r   ry   r   rm   rA   rA   rB   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+  r2  r3  r6  r8  r:  r;  rA  rC  rA   rA   rA   rB   r8   p  sL    
J	



4"!
r8   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=   rA   rA   rA   rB   rF  9  rC   rF  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 )#r9   c                 C      t dNz2Unsafe constructor not implemented in this library
ValueErrorrm   rA   rA   rB   construct_python_str>     z Constructor.construct_python_strc                 C   rG  rH  rI  rm   rA   rA   rB   construct_python_unicodeA  rL  z$Constructor.construct_python_unicodec                 C   rG  rH  rI  rm   rA   rA   rB   construct_python_bytesF  rL  z"Constructor.construct_python_bytesc                 C   rG  rH  rI  rm   rA   rA   rB   construct_python_longI  rL  z!Constructor.construct_python_longc                 C   rG  rH  rI  rm   rA   rA   rB   construct_python_complexL  rL  z$Constructor.construct_python_complexc                 C   rG  rH  rI  rm   rA   rA   rB   construct_python_tupleO  rL  z"Constructor.construct_python_tuplec                 C   rG  rH  rI  rU   namemarkrA   rA   rB   find_python_moduleR  rL  zConstructor.find_python_modulec                 C   rG  rH  rI  rR  rA   rA   rB   find_python_nameU  rL  zConstructor.find_python_namec                 C   rG  rH  rI  rU   suffixrn   rA   rA   rB   construct_python_nameX  rL  z!Constructor.construct_python_namec                 C   rG  rH  rI  rW  rA   rA   rB   construct_python_module[  rL  z#Constructor.construct_python_moduleNFc                 C   rG  rH  rI  )rU   rX  rn   r   kwdsnewobjrA   rA   rB   make_python_instance^  rL  z Constructor.make_python_instancec                 C   rG  rH  rI  )rU   instancer@  rA   rA   rB   set_python_instance_statea  rL  z%Constructor.set_python_instance_statec                 C   rG  rH  rI  rW  rA   rA   rB   construct_python_objectd  rL  z#Constructor.construct_python_objectc                 C   rG  rH  rI  )rU   rX  rn   r\  rA   rA   rB   construct_python_object_applyg  rL  z)Constructor.construct_python_object_applyc                 C   rG  rH  rI  rW  rA   rA   rB   construct_python_object_newj  rL  z'Constructor.construct_python_object_new)NNFr   )r>   r?   r@   rK  rM  r   rN  rO  rP  rQ  rU  rV  rY  rZ  r]  r_  r`  ra  rb  rA   rA   rA   rB   r9   =  s"    

r9   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   |anchorr   r   >r   Tr   '")r~   r   r:   r   r   styler   r   r#   re  commentfindr   r}   r$   r   fold_posrq   rS   r!   r"   r%   )rU   rn   lssfold_positionsidxfssrA   rA   rB   r     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   r   Fr   r   r   r   r   r   r   r   r   )width
underscorere  r   ABCDEFabcdefrH   r   r   r   r   c                 S   r   rA   r   r   rA   rA   rB   r   !  r   z;RoundTripConstructor.construct_yaml_int.<locals>.<listcomp>r   )rr  rs  )rr  re  )r   r   rstripr}   rindexrJ  
IndexErrorr   r|   rd   r   r(   r   re  r*   r+   r)   r   r   r'   )rU   rn   rr  value_susxrs  r   r   hex_funchr   r   r   r   rA   rA   rB   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   r   )r}   )vlead0rp  rA   rA   rB   leading_zerosA  s   z@RoundTripConstructor.construct_yaml_float.<locals>.leading_zerosFr   r   r   r   r   r   r   r   r   r   r   c                 S   r   rA   r   r   rA   rA   rB   r   Z  r   z=RoundTripConstructor.construct_yaml_float.<locals>.<listcomp>r   r   r   Er  )rr  precm_signm_lead0expe_widthe_signre  )rr  r  r  r  re  )r   r   r   r   r  r  rd   r   r   r   rJ  r   r   r   r}   rl  r,   r   re  r   )rU   rn   r  r  r  r   r   r   r   r   r   r  r  r  r~  rr  r  r  r  rA   rA   rB   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 r7  )r   r~   r&   r   r   r\   r  r   rA   rA   rB   r8    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
   r:   r   r   rk  _yaml_add_commentr}   yaml_end_comment_extendre  
serializerr  yaml_set_anchor	enumerater   r   rp   _yaml_set_idx_line_collinecolumn)rU   rn   seqtyprw   ret_valr  rp  r   rA   rA   rB   construct_rt_sequence  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   rA   rB   constructed  s
   

z9RoundTripConstructor.flatten_mapping.<locals>.constructedr   r   r   r   r   r   r   Nr   r   r   r   )r}   r   ry   rT   r   r`   r   r   rD   rE   r~   r   r   r
   r:   r   )	rU   rn   r  merge_map_listr   r   r   r   r   rA   rc   rB   r     sf   








=z$RoundTripConstructor.flatten_mappingc                 C   s   d S rf   rA   rc   rA   rA   rB   	_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~   r   r:   r   r   r   rk  r  r}   r  re  r  r  r  r  r   rp   r   r   r   
flow_stylefaset_flow_styleset_block_styler   r    r   r   r   r   pop_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   rA   rA   rB   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   r:   r   r   rk  r  r}   r  re  r  r  r  r   rp   r   rM   r   r   r   r   r   add)
rU   rn   rX   rw   r  r   r   r   r   r   rA   rA   rB   construct_settingr  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  rk  r  r   r  set_collection_styler9  rA   rA   rB   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  r9  rA   rA   rB   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)r}   r  r  r  r  )rU   rr   rn   rA   rA   rB   r    s   

z)RoundTripConstructor.set_collection_stylec                 c   sV    | |}|V  t|drtj| |dd}|| d S t| |}|j| d S r<  )r>  rY   r8   r   r=  r   r   r?  rA   rA   rB   rA    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  r,  r-  r.  r   r/  r   r  r  )r   r  r   r  r  r  r  r  r  rk  r  r}   r  r~   r
   r:   r   r   r   rp   r0  rA   rA   rB   r2    s`   








z(RoundTripConstructor.construct_yaml_omapc                 c   s2    t  }||jj|jj |V  | || d S rf   )r   r  r   r  r  r  r9  rA   rA   rB   r6    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_dumprB  )r~   r   r   r  r   r  r  r  r  r  r  yaml_set_tagry   re  r  r   r   r   r   r   rj  r
   r   r   r   r:   r   )rU   rn   rr   data2data3rA   rA   rB   rC    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  r   r  r  r  r   r   r*  r   tzr  T)r#  r$  r   r   r:   r`   r   r%  r8   r+  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  rA   rA   rB   r+  3  sx   
$




z-RoundTripConstructor.construct_yaml_timestampc                 C   s$   t | |}|jrt||jdS |S )Nrd  )r8   r   re  r-   )rU   rn   brA   rA   rB   r   r  s   z(RoundTripConstructor.construct_yaml_boolr   rf   )r>   r?   r@   __doc__r   r   r  r8  r  r   r  r   r  r:  r;  r  rA  r2  r6  rC  r+  r   rA   rA   rA   rB   r;     s(    &`O
X

\4
	1
/?r;   )j
__future__r   r   r   r&  r  r  rD  r]   r   r   errorr   r   r   nodesr
   r   r   compatr   r   r   r   r   r   r   r   r   r   r   r   r   commentsr   r   r   r   r   r   r    scalarstringr!   r"   r#   r$   r%   r&   	scalarintr'   r(   r)   r*   r+   scalarfloatr,   
scalarboolr-   	timestampr.   utilr/   typingr0   r1   r2   r3   r4   r5   r6   __all__r:   rD   rE   objectr7   r8   r   r   r   r   r  r  r+  r2  r3  r6  r8  r:  r;  rC  rF  r9   rK  rM  rN  rO  rP  rQ  r   rY  rZ  r`  ra  rb  r;   rA   rA   rA   rB   <module>   sR  ,$   9   1     K