o
    h                    @   s&  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
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 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 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
l.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< 	 g dZEG dd deZFG dd deZGG dd deZHG dd dZIG dd deIZJeJKdeJjL eJKdeJjM eJKdeJjN eJKdeJjO eJKd eJjP eJKd!eJjQ eJKd"eJjR eJKd#eJjS eJKd$eJjT eJKd%eJjU eJKd&eJjV eJKd'eJjW eJKdeJjX G d(d) d)eJZYeYKd*eYjL eYKd+eYjM eYKd,eYjZ eYKd-eYj[ eYKd.eYj\ eYKd/eYjN eYKd0eYj] eYKd1eYjO eYKd2eYj^ eYKd3eYjV eYKd4eYj_ eYKd5eYjW eY`d6eYja eY`d7eYjb eY`d8eYjc eY`d9eYjd eY`d:eYje G d;d< d<eJZfefKdefjL efKdefjM efKdefjN efKdefjO efKd efjP efKd!efjQ efKd"efjR efKd#efjS efKd$efjT efKd%efjU efKd&efjV efKd'efjW efKdefjX dS )=    N)HashableMutableSequenceMutableMapping)MarkedYAMLErrorMarkedYAMLFutureWarningMantissaNoDotYAML1_1Warning)*)SequenceNodeMappingNode
ScalarNode)_Fbuiltins_modulenprintnprintfversion_tnf)ordereddict)CommentedMapCommentedOrderedMapCommentedSetCommentedKeySeqCommentedSeqTaggedScalarCommentedKeyMap	C_KEY_PRE	C_KEY_EOL
C_KEY_POSTC_VALUE_PREC_VALUE_EOLC_VALUE_POST)SingleQuotedScalarStringDoubleQuotedScalarStringLiteralScalarStringFoldedScalarStringPlainScalarStringScalarString)	ScalarInt	BinaryIntOctalIntHexInt
HexCapsInt)ScalarFloat)ScalarBoolean)	TimeStamp)timestamp_regexpcreate_timestampF)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@   _/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/ruamel/yaml/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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)selfZ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   composerZ	_composerAttributeErrorsysstdoutwriteformattypedirrU   r@   r@   rA   rY   M   s   
zBaseConstructor.composerc                 C      t | jdr
| jjS | jjS NrW   )rX   rI   resolverZ	_resolverra   r@   r@   rA   rd   Z   s   zBaseConstructor.resolverc                 C   rb   rc   )rX   rI   scannerZ_scannerra   r@   r@   rA   re   a   s   zBaseConstructor.scannerc                 C   s
   | j  S N)rY   
check_nodera   r@   r@   rA   
check_datai   s   
zBaseConstructor.check_datac                 C   s   | j  r| | j  S d S rf   )rY   rg   construct_documentZget_nodera   r@   r@   rA   get_datan   s   
zBaseConstructor.get_datac                 C   s    | j  }|d ur| |S d S rf   )rY   Zget_single_noderi   rU   noder@   r@   rA   get_single_datat   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   rl   datarQ   	generator_dummyr@   r@   rA   ri   |   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   rl   deepZold_deeprp   r@   r@   rA   rn      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   rl   rv   constructorZ
tag_suffix
tag_prefixrp   rq   rr   r@   r@   rA   rt      sF   










z.BaseConstructor.construct_non_recursive_objectc                 C   s*   t |tstd d td|jd|j|jS )N-expected a scalar node, but found {node_id!s}Znode_id)r{   r   r9   r   id
start_markvaluerk   r@   r@   rA   r}      s   
z BaseConstructor.construct_scalarc                    s:   t |tstddtd|jd|j fdd|jD S )rs   N/expected a sequence node, but found {node_id!s}r   c                    s   g | ]	}j | d qS )ru   )rn   ).0childru   rU   r@   rA   
<listcomp>   s    z6BaseConstructor.construct_sequence.<locals>.<listcomp>)r{   r	   r9   r   r   r   r   rU   rl   ru   r@   r   rA   r~      s   
z"BaseConstructor.construct_sequencec              	   C   s  t |tstddtd|jd|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sTt |
trTt|
}
t |
tsbtd|jd	|j| j
|	|d}|ry| ||||
|rx|||
< q;|||
< q;|| q1|S )
rs   N.expected a mapping node, but found {node_id!s}r   mergeFTr   while constructing a mappingfound unhashable key)r{   r
   r9   r   r   r   rL   rJ   r   r   rn   r   rM   tuplecheck_mapping_keyupdate)rU   rl   ru   Ztotal_mappingtodovaluescheckmappingkey_node
value_nodekeyr   r@   r@   rA   r      sB   




z!BaseConstructor.construct_mappingc                 C   sb   ||v r/| j s-||}d|jd||||jddg}| j du r)tt|  dS t| dS dS )zreturn True if key is uniquer   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^   warningswarnrC   rD   )rU   rl   r   r   r   r   mkargsr@   r@   rA   r     s"   


z!BaseConstructor.check_mapping_keyc                 C   sT   ||v r&| j s(d|jd||jddg}| j d u r"tt|  d S t| d S d S )Nzwhile constructing a setfound duplicate key "{}"r   r   )rT   r   r^   r   r   rC   rD   )rU   rl   r   Zsettingr   r   r@   r@   rA   check_set_key*  s   
zBaseConstructor.check_set_keyc                 C   sf   t |tstd d td|jd|jg }|jD ]\}}| j||d}| j||d}|||f q|S )Nr   r   r   )	r{   r
   r9   r   r   r   r   rn   r   )rU   rl   ru   pairsr   r   r   r   r@   r@   rA   construct_pairsA  s   
zBaseConstructor.construct_pairsc                 C   $   d| j vr| j | _|| j|< d S )Nrw   )__dict__rw   copy)clsrv   r   r@   r@   rA   add_constructorQ     
zBaseConstructor.add_constructorc                 C   r   )Nrx   )r   rx   r   )r   r   Zmulti_constructorr@   r@   rA   add_multi_constructorX  r   z%BaseConstructor.add_multi_constructor)NNFrf   )r=   r>   r?   rw   rx   rV   propertyrY   rd   re   rh   rj   rm   ri   rn   rt   r}   r~   r   r   r   r   classmethodr   r   r@   r@   r@   rA   r6   9   s4    





(

+

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dd Ze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   rl   r   r   r@   r@   rA   r}   a  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 nYt
|trg }|jD ] }t
|tsxtd|jtd	|jd
|j| | ||j qc|  |D ]}	||	 qntd|jtd|jd|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.
                        N8expected a mapping for merging, but found {subnode_id!s}Z
subnode_idOexpected a mapping or list of mappings for merging, but found {value_node_id!s}Zvalue_node_idr   tag:yaml.org,2002:str)rz   r   rv   rT   r   r^   r   r   rC   rD   r{   r
   flatten_mappingextendr	   r9   r   r   r   reversero   r   )
rU   rl   r   indexr   r   r   Zsubmergesubnoder   r@   r@   rA   r   i  sz   








	


@zSafeConstructor.flatten_mappingFc                 C   s$   t |tr
| | tj| ||dS )rs   r   )r{   r
   r   r6   r   r   r@   r@   rA   r     s   

z!SafeConstructor.construct_mappingc                 C   s   |  | d S rf   r}   rk   r@   r@   rA   construct_yaml_null     
z#SafeConstructor.construct_yaml_nullT)yesnoyntruefalseonoffc                 C   s   |  |}| j|  S rf   )r}   bool_valueslowerrU   rl   r   r@   r@   rA   construct_yaml_bool  s   
z#SafeConstructor.construct_yaml_boolc                 C   s>  |  |}|dd}d}|d dkrd}|d dv r!|dd  }|dkr'dS |d	r7|t|d
d  d
 S |drG|t|d
d  d S |drW|t|d
d  d S | jjdkrj|d dkrj|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}   replacery   r   rd   processing_versionsplitr   )rU   rl   value_ssigndigitsbaser   digitr@   r@   rA   construct_yaml_int  s6   




z"SafeConstructor.construct_yaml_intgu <7~c                 C   s
  |  |}|dd }d}|d dkrd}|d dv r#|dd  }|dkr,|| j S |d	kr3| jS | jjd
krbd|v rbdd |dD }|  d}d}|D ]}||| 7 }|d9 }qQ|| S | jjd
krd|v r|d\}	}
d|	vrt	
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   	inf_value	nan_valuerd   r   r   r   r   r   r   r   )rU   rl   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 td|d|jd }~ww zt|W S  tj	yB } ztd d td|d|jd }~ww Nasciiz1failed to convert base64 data into ascii: {exc!s})excz%failed to decode base64 data: {exc!s}
r}   encodeUnicodeEncodeErrorr9   r   r   base64decodebytesbinasciiErrorrU   rl   r   r  r@   r@   rA   construct_yaml_binary  ,   

z%SafeConstructor.construct_yaml_binaryNc                 C   sh   |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i |S )N'failed to construct timestamp from "{}"r@   )	r-   matchr   	TypeErrorr9   r^   r   	groupdictr.   )rU   rl   r   r  r@   r@   rA   construct_yaml_timestamp.  s   
z(SafeConstructor.construct_yaml_timestampc                 c   s    t  }|V  t|tstd|jtd|jd|j|jD ]G}t|ts2td|jtd|jd|jt	|jdkrItd|jtdt	|jd|j|jd	 \}}| 
|}||vs[J | 
|}|||< qd S )
N!while constructing an ordered map*expected a sequence, but found {node_id!s}r   8expected a mapping of length 1, but found {subnode_id!s}r   rG   Cexpected a single mapping item, but found {len_subnode_val:d} itemsZlen_subnode_valr   )r   r{   r	   r9   r   r   r   r   r
   rz   rn   rU   rl   Zomapr   r   r   r   r   r@   r@   rA   construct_yaml_omap?  sJ   


		


z#SafeConstructor.construct_yaml_omapc                 c   s    g }|V  t |tstd|jtd|jd|j|jD ]D}t |ts1td|jtd|jd|jt|jdkrHtd|jtdt|jd|j|jd	 \}}| 	|}| 	|}|
||f qd S )
Nzwhile constructing pairsr  r   r  r   rG   r  r  r   )r{   r	   r9   r   r   r   r   r
   rz   rn   r   )rU   rl   r   r   r   r   r   r   r@   r@   rA   construct_yaml_pairsf  sH   


		

z$SafeConstructor.construct_yaml_pairsc                 c   s&    t  }|V  | |}|| d S rf   )setr   r   rU   rl   rp   r   r@   r@   rA   construct_yaml_set  s
   
z"SafeConstructor.construct_yaml_setc                 C      |  |}|S rf   r   r   r@   r@   rA   construct_yaml_str  r   z"SafeConstructor.construct_yaml_strc                 c   s$    |   }|V  || | d S rf   )rN   r   r~   rU   rl   rp   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__rX   r   r!  r   r   )rU   rl   r   rp   stater@   r@   rA   construct_yaml_object  s   


z%SafeConstructor.construct_yaml_objectc                 C   s   t d d td|jd|j)N:could not determine a constructor for the tag {node_tag!r}Znode_tag)r9   r   rv   r   rk   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  r  r  r  r  r  r   r$  r'  r@   r@   r@   rA   r7   `  sB    
M	

'&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                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zd!ddZdd Zdd Zd"ddZdd  ZdS )#r8   c                 C   
   |  |S rf   r   rk   r@   r@   rA   construct_python_str     
z Constructor.construct_python_strc                 C   r(  rf   r   rk   r@   r@   rA   construct_python_unicode  r*  z$Constructor.construct_python_unicodec              
   C   r   r   r  r	  r@   r@   rA   construct_python_bytes  r  z"Constructor.construct_python_bytesc                 C   r  rf   )r   )rU   rl   valr@   r@   rA   construct_python_long  r   z!Constructor.construct_python_longc                 C      t | |S rf   )complexr}   rk   r@   r@   rA   construct_python_complex     z$Constructor.construct_python_complexc                 C   r/  rf   )r   r~   rk   r@   r@   rA   construct_python_tuple  r2  z"Constructor.construct_python_tuplec                 C   sZ   |s	t d|d|zt| W n ty' } zt d|td||d|d }~ww tj| S )N"while constructing a Python module+expected non-empty name appended to the tagz%cannot find module {name!r} ({exc!s}))namer  )r9   
__import__ImportErrorr   r[   modules)rU   r6  markr  r@   r@   rA   find_python_module
  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|t	d||d|d }~ww t
j| }d|}	|}
|rt|
|d st d|t	d|	|jd	|t|
|d}
|sl|
S )
Nz"while constructing a Python objectr5  r   rG   r   z,cannot find module {module_name!r} ({exc!s}))module_namer  z9cannot find {object_name!r} in the module {module_name!r})object_namer<  )r9   r   rz   insertpopjoinr7  r8  r   r   r[   r9  rX   r=   rJ   )rU   r6  r:  lnameZlmodule_nameZlobject_namer<  r  moduler=  objr@   r@   rA   find_python_name  sp   




zConstructor.find_python_namec                 C   6   |  |}|rtd|jtd|d|j| ||jS )Nz while constructing a Python name-expected the empty value, but found {value!r}r   )r}   r9   r   r   rD  rU   suffixrl   r   r@   r@   rA   construct_python_nameW     

z!Constructor.construct_python_namec                 C   rE  )Nr4  rF  rG  )r}   r9   r   r   r;  rH  r@   r@   rA   construct_python_modulec  rK  z#Constructor.construct_python_moduleNFc                 C   sR   |sg }|si }|  ||j}|r"t|tr"|j|g|R i |S ||i |S rf   )rD  r   r{   r_   r"  )rU   rI  rl   r   kwdsnewobjr   r@   r@   rA   make_python_instanceo  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 )Nr!  r   r   )	rX   r!  r{   r   rz   r   r   itemssetattr)rU   instancer#  	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rN  r!  r   )rO  rP   rX   r   rT  )rU   rI  rl   rR  ru   r#  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   rM  r#  	listitems	dictitems)	r{   r	   r~   r   r   rO  ro   rT  r   )rU   rI  rl   rN  r   rM  r#  rW  rX  r   rR  r   r@   r@   rA   construct_python_object_apply  s*   

z)Constructor.construct_python_object_applyc                 C   s   | j ||ddS )NTrU  )rY  )rU   rI  rl   r@   r@   rA   construct_python_object_new  s   z'Constructor.construct_python_object_new)NNFr   )r=   r>   r?   r)  r+  r,  r.  r1  r3  r;  rD  rJ  rL  rO  rT  rV  rY  rZ  r@   r@   r@   rA   r8     s     9

$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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   s(   | j jd usJ | jj| }|  |S rf   )rI   comment_handlingre   commentsZset_assigned)rU   idxxr@   r@   rA   comment  s   zRoundTripConstructor.commentNc                 c   sH    |d u rg S |d ur|| d u rg S || }|D ]}|  |V  qd S rf   )r_  )rU   Zlist_of_commentsr]  r^  r@   r@   rA   r\    s   zRoundTripConstructor.commentsc                 C   s  t |tstd d td|jd|j|jdkrWt |jtrWt	|j|j
d}| jr@| jjd u r@|jr>|jd r>|jd d |_|S |jd urU|jd rU| |jd d |_|S |jdkrt |jtrg }d}	 |jd
|d }|dk run
||t|  qgt|jd
d|j
d}| jr| jjd u r|jr|jd r|jd d |_n|jd ur|jd r| |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   r   |anchorrG   r   >r   Tr   '")r{   r   r9   r   r   r   styler   strr!   rb  rI   r[  r_  findr   rz   r"   r   Zfold_posro   rS   r   r    r#   )rU   rl   ZlssZfold_positionsr]  Zfssr@   r@   rA   r}     sV   


z%RoundTripConstructor.construct_scalarc                 C   s  d }|  |}z|d}t||d d ddg}W n ty'   d }Y n ty1   d }Y nw |dd}d}|d dkrBd}|d dv rN|dd  }|d	krTdS |d
r| jj	dkrm|d d	krmt|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rM| jj	dkr|d d	krt|dd  }|d ur;|d dk|d< t|dd  dko8|d dk|d< t|t|dd  d |||jdS | jj	dkrb|d d	krb|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
underscorerb  r   ZABCDEFZabcdefrH   r   r   r   r   c                 S   r   r@   r   r   r@   r@   rA   r     r   z;RoundTripConstructor.construct_yaml_int.<locals>.<listcomp>r   )rj  rk  )rj  rb  )r}   rstriprz   rindex
ValueError
IndexErrorr   ry   rd   r   r&   r   rb  r(   r)   r'   r   r   r%   )rU   rl   rj  Zvalue_susxrk  r   r   Zhex_funchr   r   r   r   r@   r@   rA   r   ?  s   

 
$
$
&
z'RoundTripConstructor.construct_yaml_intc                 C   s  dd }d}|  |}|dd }d}|d dkrd	}|d d
v r-|d }|dd  }|dkr6|| j S |dkr=| jS | jjdkrld|v rld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   )rj  precm_signm_lead0expe_widthe_signrb  )rj  rv  rw  rx  rb  )r}   r   r   r   r   rd   r   r   r   rn  r   r   r   rz   ri  r*   r   rb  r   )rU   rl   rt  rw  r   r   r   r   r   r   r   r   r   ry  rs  rj  rv  rz  r{  r@   r@   rA   r     s~   






z)RoundTripConstructor.construct_yaml_floatc                 C   s   |  |}t|tr|S |S rf   )r}   r{   r$   r   r@   r@   rA   r    s   

z'RoundTripConstructor.construct_yaml_strFc                 C   s  t |tstd d td|jd|jg }| jr<| jjd u r<|jr;|	|jd d  t
|jdkr;|j|jd dd n	|jrEtd|j |jrYddlm} ||jsY||j t|jD ](\}}|jrp|j	|j|d	 d |_|| j||d
 |||jj|jjg q^|S )Nr   r   r   TclearZnc3r   templated_idr   r   )r{   r	   r9   r   r   r   rI   r[  r_  _yaml_add_commentrz   yaml_end_comment_extendr   rb  ruamel.yaml.serializerr  yaml_set_anchor	enumerater   r   rn   Z_yaml_set_idx_line_collinecolumn)rU   rl   Zseqtypru   Zret_valr  r]  r   r@   r@   rA   construct_rt_sequence  s:   

z*RoundTripConstructor.construct_rt_sequencec           	         sZ   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 nGt
|tr|jD ]}t
|tsztd|jtd|jd|j||||f qentd|jtd|jd|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   rn   )r   r   ra   r@   rA   constructed  s
   

z9RoundTripConstructor.flatten_mapping.<locals>.constructedr   r   rG   r   r   r   r   Nr   r   r   r   r   r   )rz   r   rv   rT   r   r^   r   r   rC   rD   r{   r
   r   r	   r9   r   r   )	rU   rl   r  Zmerge_map_listr   r   r   r   r   r@   ra   rA   r     sj   






	


Bz$RoundTripConstructor.flatten_mappingc                 C   s   d S rf   r@   ra   r@   r@   rA   	_sentinelp  s   zRoundTripConstructor._sentinelc                 C   s  t |tstd d td|jd|j| |}| jr?| jjd u r?|j	r>|
|j	d d  t|j	dkr>|j|j	d dd n|j	r]|jjd u rLg |j_| |j	dD ]	}|jj| qS|jrqddlm} ||jsq||j d | j}}|jD ]h\}	}
| j|	dd}t |tst |trt|}|	jdu r|j  n
|	jd	u r|j  |}n t |trt |}|	jdu r|j  n
|	jd	u r|j  |}t |tstd
|jd|	j| j|
|d}| !||	|||r| jrL| jjd u rL|	j	r3t|	j	dkr3|	j	d r3|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	rK|j
|
j	|d n||	j	rt#d||	j	 |	j	d rh|j$|t%|	j	d  |	j	d ry|j$|t&|	j	d  |	j	d r|j$|t'|	j	d  |
j	rt#d||
j	 |
j	d r|j$|t(|
j	d  |
j	d r|j$|t)|
j	d  |
j	d r|j$|t*|
j	d  |+||	jj,|	jj-|
jj,|
jj-g |||< ||}}qz|r|.| d S d S )Nr   r   r   Tr|  r   r~  r   Fr   r      rG  r  Znc5arG   Znc5b)/r{   r
   r9   r   r   r   r   rI   r[  r_  r  rz   r  caprer\  r   rb  r  r  r  r  r   rn   r   r   r   
flow_stylefaset_flow_styleset_block_styler   r   r   r?  r   r  r   r   r   r   r   r   Z_yaml_set_kv_line_colr  r  Zadd_yaml_merge)rU   rl   Zmaptypru   Z	merge_mapZcmntr  last_key
last_valuer   r   r   Zkey_sZkey_mr   r@   r@   rA   r   t  s   












$
	
z&RoundTripConstructor.construct_mappingc           	      C   s  t |tstd d td|jd|j| jr:| jjd u r:|jr9|	|jd d  t
|jdkr9|j|jd dd n	|jrCtd|j |jrWddlm} ||jsW||j |jD ]m\}}| j|dd	}t |tsst |trst|}t |tstd
|jd|j| j||d	}| |||| | jr| jjd u r|jr|j	|j|d |jr|j	|j|d n|jrtd|j |jrtd|j || qZd S )Nr   r   r   Tr|  Znc6r   r~  r   r   r   r  rG  Znc7aZnc7b)r{   r
   r9   r   r   r   rI   r[  r_  r  rz   r  r   rb  r  r  r  r   rn   r   rM   r   r   add)	rU   rl   rW   ru   r  r   r   r   r   r@   r@   rA   construct_setting  sZ   




z&RoundTripConstructor.construct_settingc                 c   sD    t  }||jj|jj |V  || || | || d S rf   )r   _yaml_set_line_colr   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   rp   rl   r@   r@   rA   r  $  s   

z)RoundTripConstructor.set_collection_stylec                 c   s    | |}|V  t|drtj| |dd}|| nt| |}t|dr0|jdi | n|j| |jrgddl	m
} ddlm} ||jsit||js[| }t||j| nt||j}|j|_d S d S d S )	Nr!  Tr   Z__attrs_attrs__r   r~  )Anchorr@   )r"  rX   r7   r   r!  rV   r   r   rb  r  r  Zruamel.yaml.anchorr  ZattribrQ  rJ   r   )rU   rl   r   rp   r#  r  r  ar@   r@   rA   r$  -  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	rN| j	j
d u rN|jrM||jd d  t|jdkrM|j|jd dd n	|jrWtd|j t|tsjtd|jtd|jd|j|jD ]}t|tstd|jtd	|jd
|jt|jdkrtd|jtdt|jd|j|jd \}}| |}||vsJ | |}| j	r| j	j
d u r|jr|j|j|d |jr|j|j|d |jr|j|j|d n|jrtd|j |jrtd|j |jrtd|j |||< qmd S )NTFr   r|  Znc8r  r  r   r  r   rG   r  r  r   r  rG  Znc9aZnc9bZnc9c)r   r  r   r  r  r  r  r  r  rI   r[  r_  r  rz   r  r   r{   r	   r9   r   r   r   r
   rn   r  r@   r@   rA   r  F  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rOt }||jj|jj |jdu r|j	  n
|jdu r)|j
  ||j |V  |jrFddlm} ||jsF||j | || W d S t |trt }| ||_|j|_||j |V  |jrddlm} ||js|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rddlm} ||js||j || | W d S W n   Y td d td|jd|j)NTFr   r~  )Zalways_dumpr%  r&  )r{   r
   r   r  r   r  r  r  r  r  r  Zyaml_set_tagrv   rb  r  r  r  r   r   r   r}   r   rg  r	   r   r   r~   r9   r   )rU   rl   rp   r  Zdata2Zdata3r@   r@   rA   r'    sl   











z(RoundTripConstructor.construct_undefinedc                 C   sz  z	| j |j}W n ty   d }Y nw |d u r%td d d|j|j| }|d s4tdi |S dD ]}|| r> nq6tdi |S tdi |}d }|d rut	|d }|d }|rct	|nd}	t
j||	d}|d d	kru| }t|j|j|j|j|j|j|j}
|r||
jd
< |d |d  }|d r|d|d  7 }||
jd< n|d r|d |
jd< |d rd|
jd< |
S )Nr  hour)ttz_signtz_hour	tz_minuter  r  r  r   )hoursminutesr   deltar   tzr  Tr@   )r-   r  r   r  r9   r^   r   r  r.   r   datetime	timedeltar,   yearmonthdayr  minutesecondmicrosecondZ_yaml)rU   rl   r   r  r   ddr  r  r  r  rp   r  r@   r@   rA   r    sV   


z-RoundTripConstructor.construct_yaml_timestampc                 C   s$   t | |}|jrt||jdS |S )Nra  )r7   r   rb  r+   )rU   rl   br@   r@   rA   r     s   z(RoundTripConstructor.construct_yaml_boolrf   r   )r=   r>   r?   __doc__r_  r\  r}   r   r   r  r  r   r  r   r  r  r   r  r$  r  r  r'  r  r   r@   r@   r@   rA   r:     s,    
4[M
%]

i5
	D
:2r:   )gr  r  r  r[   r   r   collections.abcr   r   r   Zruamel.yaml.errorr   r   r   Zruamel.yaml.nodesr	   r
   r   Zruamel.yaml.compatr   r   r   r   r   r   Zruamel.yaml.commentsr   r   r   r   r   r   r   r   r   r   r   r   r   Zruamel.yaml.scalarstringr   r    r!   r"   r#   r$   Zruamel.yaml.scalarintr%   r&   r'   r(   r)   Zruamel.yaml.scalarfloatr*   Zruamel.yaml.scalarboolr+   Zruamel.yaml.timestampr,   Zruamel.yaml.utilr-   r.   typingr/   r0   r1   r2   r3   r4   r5   __all__r9   rC   rD   r6   r7   r   r   r   r   r   r
  r  r  r  r  r  r  r   r'  r8   r)  r+  r,  r.  r1  r3  r   rJ  rL  rV  rY  rZ  r:   r@   r@   r@   rA   <module>   s
  <   )  ^ `      