U
    d                  
   @   s  d dl Z d dlmZ d dlmZ d dlZd dlmZmZm	Z	m
Z
mZmZmZ zd dlmZ W n  ek
r|   d dlmZ Y nX de de jed	d
de de jedd
de de jedd
de de jddddgd
de de jedd
de ddgd
gde de jedd
de de jedd
de d e jedd
de d!e jddddgd
gd"Zd#e d$d%gd
Zd1d(d)Zd*d+ ZG d,d- d-ejZd2d/d0ZdS )3    N)	b64encode)sha224)
AliasTokenAnchorTokenFlowMappingEndTokenFlowMappingStartTokenKeyTokenScalarToken
ValueToken)CSafeLoader)
SafeLoaderztag:yaml.org,2002:boolzj^(?:yes|Yes|YES|no|No|NO
            |true|True|TRUE|false|False|FALSE
            |on|On|ON|off|Off|OFF)$Z
yYnNtTfFoO)tagregexpstart_charsztag:yaml.org,2002:floatz^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?
            |\.[0-9_]+(?:[eE][-+][0-9]+)?
            |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*
            |[-+]?\.(?:inf|Inf|INF)
            |\.(?:nan|NaN|NAN))$z-+0123456789.ztag:yaml.org,2002:intz^(?:[-+]?0b[0-1_]+
            |[-+]?0[0-7_]+
            |[-+]?(?:0|[1-9][0-9_]*)
            |[-+]?0x[0-9a-fA-F_]+
            |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$z-+0123456789ztag:yaml.org,2002:nullz3^(?: ~
            |null|Null|NULL
            | )$~nN ztag:yaml.org,2002:timestampa  ^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
            |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]?
            (?:[Tt]|[ \t]+)[0-9][0-9]?
            :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)?
            (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$
0123456789ztag:yaml.org,2002:valuez^(?:=)$=z'^(?:|true|True|TRUE|false|False|FALSE)$ZtTfFz.^(?:|0o[0-7]+|[-+]?(?:[0-9]+)|0x[0-9a-fA-F]+)$zf^(?:[-+]?(?:\.[0-9]+|[0-9]+(\.[0-9]*)?)(?:[eE][-+]?[0-9]+)?|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$z^(?:~||null|Null|NULL)$)z1.11.2ztag:yaml.org,2002:mergez^(?:<<)$<r   Tc                 C   s|   |t krtd| tt | }|r0|t i | _|D ]<}|d D ].}| j|g  | j| |d |d f qFq:d S )NzUnknown grammar version r   r   r   )core_resolvers	Exceptionlistappendmerge_resolveryaml_implicit_resolvers
setdefault)resolvergrammar_versionexpand_merge_keys	resolversrZ
start_char r$   h/mounts/lovelace/software/anaconda3/envs/qiime2-amplicon-2024.2/lib/python3.8/site-packages/yq/loader.pyset_yaml_grammarp   s    
r&   c                 C   s&   t tt| tr|  n|   S N)r   r   
isinstancestrencodeZdigestdecode)keyr$   r$   r%   hash_key}   s    r-   c                       s4   e Zd ZdZdd Z fddZ fddZ  ZS )CustomLoaderFc                 C   s   t |j|jd}| jtf | | jtf | | jtf |dd| | jtf | | jtf |dd| | jt	f | d S )N)
start_markend_markT)valueplain)
dictr/   r0   tokensr   r   r   r	   r
   r   )selfr,   r1   original_tokenmarksr$   r$   r%   
emit_yq_kv   s    zCustomLoader.emit_yq_kvc                    s>   | j rt  S |   d| _| t}| jd|j|d d S )NF__yq_alias__)r6   )	expand_aliasessuperfetch_aliassave_possible_simple_keyallow_simple_keyscan_anchorr   r8   r1   )r5   Zalias_token	__class__r$   r%   r<      s    

zCustomLoader.fetch_aliasc                    s,   | j rt  S |   d| _| t}d S )NF)r:   r;   fetch_anchorr=   r>   r?   r   )r5   Zanchor_tokenr@   r$   r%   rB      s
    
zCustomLoader.fetch_anchor)__name__
__module____qualname__r:   r8   r<   rB   __classcell__r$   r$   r@   r%   r.      s   	r.   Fc                    s   fddfdd  fdd}|r.t nt}|tjjj  |tjjj |d| |j	
dd  |j	
d	d  t||d
 |S )Nc                    s   g }t |jD ]\}}s q|jr^|jdr^|jds^t|jdkr^|d||j t|tj	j
r|jr|d||j qt|tj	jtj	jfr|jdkr|d|d q fdd	|jD | S )
N!!!   z__yq_tag_{}_{}__z__yq_style_{}_{}__Tflowc                    s   g | ]}  |qS r$   )construct_object).0iloaderr$   r%   
<listcomp>   s     z:get_loader.<locals>.construct_sequence.<locals>.<listcomp>)	enumerater1   r   
startswithlenr   formatr(   yamlnodes
ScalarNodestyleSequenceNodeMappingNode
flow_style)rO   nodeannotationsrM   v_nodeuse_annotationsrN   r%   construct_sequence   s    , z&get_loader.<locals>.construct_sequencec                    s
  |  | g }|jD ]\}}| |}| |}|||f  rt|ttfsRq|jr|jdr|jdst	|jdkr|d
t||jf t|tjjr|jr|d
t||jf qt|tjjtjjfr|jdkr|d
t|df qt|S )NrG   rH   rI   z__yq_tag_{}__z__yq_style_{}__TrJ   )flatten_mappingr1   rK   r   r(   r)   bytesr   rR   rS   rT   r-   rU   rV   rW   rX   rY   rZ   r[   r3   )rO   r\   pairsZk_noder^   r,   r1   r_   r$   r%   construct_mapping   s    


, z%get_loader.<locals>.construct_mappingc                    sL   t |tjjr| |S t |tjjr0| |S t |tjjrH | |S d S r'   )r(   rU   rV   rW   construct_scalarrY   rZ   )rO   
tag_suffixr\   )re   ra   r$   r%   parse_unknown_tags   s    

z&get_loader.<locals>.parse_unknown_tagsr   ztag:yaml.org,2002:binaryztag:yaml.org,2002:set)r!   )default_loaderr.   add_constructorrU   r   BaseResolverDEFAULT_MAPPING_TAGDEFAULT_SEQUENCE_TAGadd_multi_constructoryaml_constructorspopr&   )r`   r:   r!   rh   loader_classr$   )re   ra   r`   r%   
get_loader   s    rr   )r   T)FTT)rebase64r   Zhashlibr   rU   Zyaml.tokensr   r   r   r   r   r	   r
   r   ri   ImportErrorr   compileXr   r   r   r&   r-   r.   rr   r$   r$   r$   r%   <module>   s   $

=	
W
