o
    =n0j4                     @   s  U 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Zd dlm	Z	 d dl
mZ d dl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ZddlmZmZmZmZmZmZ ddl m!Z!m"Z" zd dl#Z#W n e$yv   dZ#Y nw zd dl%Z%W n e$y   dZ%Y nw e&dZ'ed e(d	< e)e*e+e,e-e'fZ.eee d
f e(d< e/dZ0e/dZ1g dZ2G dd dZ3e3dZ4ee(d< G dd dej5Z6dee6 fddZ7de,de+fddZ8defddZ9de,de&fddZ:dede+fd d!Z;dedee+ef fd"d#Z<dd$ed%eee)e,f  de+fd&d'Z=dee d(e,dee fd)d*Z>d$ed+edeee,ef  fd,d-Z?d$eded. fd/d0Z@dd$ed1ee+ dee,ef fd2d3ZAd$eded4 fd5d6ZB	dd$ed1ee+ dee,ef fd7d8ZCd$ede+fd9d:ZDd$ede+fd;d<ZEd$ede+fd=d>ZFdede+fd?d@ZGde&de+fdAdBZHdCedee fdDdEZId$ede+fdFdGZJd$edee, fdHdIZK	dd$ed1ee+ dee,ef fdJdKZLG dLdM dMeZMdNede+fdOdPZNdNede+fdQdRZO	TddNedUe+dVe+de+fdWdXZP	SddNedYe+deMfdZd[ZQdd\edYe+de+fd]d^ZRdNe,dYe+de+fd_d`ZSdNede+fdadbZTdce,de+fdddeZUdce,de+fdfdgZVd$ede+fdhdiZWd$ede+fdjdkZXdede+fdldmZYdede+fdndoZZdede+fdpdqZ[d$ede+fdrdsZ\dede+fdtduZ]d$ede+fdvdwZ^d$ede+fdxdyZ_dzeee  defd{d|Z`dzee deed
f fd}d~Zadzedeeef fddZbdede+fddZcdede+fddZddede+fddZedNedefddZfdd$ed%edeee  fddZgdehdehddfddZi	dded%edNede,dehdeddfddZjddede+de,fddZkddedeee,e+f  defddZldede+fddZmdede+fddZndede+fddZod%e,dee, fddZpe	ddedee fddZqdS )    N)contextmanager)Enum)dedent)	AnyDictIteratorListOptionalTupleTypeUnionget_type_hints   )ConfigIndexErrorConfigTypeErrorConfigValueErrorGrammarParseErrorOmegaConfBaseExceptionValidationError)SIMPLE_INTERPOLATION_PATTERNparseNoneType.BUILTIN_VALUE_TYPESz(\.)*[^.[]*z\.([^.[]*)|\[(.*?)\])yYyesZYesZYESnNnoZNoNOtrueTrueTRUEfalseFalseFALSEonZOnONoffZOffZOFFc                   @   s(   e Zd ZdefddZdefddZdS )Markerdescc                 C   s
   || _ d S Nr*   )selfr*    r.   W/home/wildlama/miniconda3/envs/lam_a2e/lib/python3.10/site-packages/omegaconf/_utils.py__init__e   s   
zMarker.__init__returnc                 C   s   | j S r+   r,   )r-   r.   r.   r/   __repr__h   s   zMarker.__repr__N)__name__
__module____qualname__strr0   r2   r.   r.   r.   r/   r)   d   s    r)   _DEFAULT_MARKER_c                   @   s.   e Zd ZdZedejdedejfddZ	dS )OmegaConfDumperFdumperdatar1   c                 C   s:   t |pt|pt|}| jtjjj||rddS d dS )N')style)yaml_is_boolis_intis_floatZrepresent_scalaryamlresolverBaseResolverDEFAULT_SCALAR_TAG)r9   r:   Zwith_quotesr.   r.   r/   str_representers   s   zOmegaConfDumper.str_representerN)
r3   r4   r5   str_representer_addedstaticmethodr@   Dumperr6   Z
ScalarNoderD   r.   r.   r.   r/   r8   p   s     r8   r1   c                   C   s   t jst tt j dt _t S )NT)r8   rE   Zadd_representerr6   rD   r.   r.   r.   r/   get_omega_conf_dumper}   s   rH   bc                 C   s   | t v S r+   )YAML_BOOL_TYPES)rI   r.   r.   r/   r=         r=   c                  C   s|   G dd dt j} | }|dtdtjtd dd |j D |_|	dd	d
  |	ddd
  |	ddd
  |S )Nc                       s.   e Zd Zddejdedef fddZ  ZS )z(get_yaml_loader.<locals>.OmegaConfLoaderFnodedeepr1   c                    sl   t  }|jD ]'\}}|jtjjjkrq|j|v r'tjd|j	d|j |j	|
|j qt j||dS )Nzwhile constructing a mappingzfound duplicate key )rM   )setvaluetagr@   rA   rB   rC   constructorZConstructorErrorZ
start_markaddsuperconstruct_mapping)r-   rL   rM   keysZkey_nodeZ
value_node	__class__r.   r/   rT      s   

z:get_yaml_loader.<locals>.OmegaConfLoader.construct_mappingF)	r3   r4   r5   r@   Nodeboolr   rT   __classcell__r.   r.   rV   r/   OmegaConfLoader   s    &r\   ztag:yaml.org,2002:floata  ^(?:
         [-+]?[0-9]+(?:_[0-9]+)*\.[0-9_]*(?:[eE][-+]?[0-9]+)?
        |[-+]?[0-9]+(?:_[0-9]+)*(?:[eE][-+]?[0-9]+)
        |\.[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.c                 S   s    i | ]\}}|d d |D qS )c                 S   s    g | ]\}}|d kr||fqS )ztag:yaml.org,2002:timestampr.   ).0rP   regexpr.   r.   r/   
<listcomp>   s
    z.get_yaml_loader.<locals>.<dictcomp>.<listcomp>r.   )r]   key	resolversr.   r.   r/   
<dictcomp>   s    z#get_yaml_loader.<locals>.<dictcomp>z2tag:yaml.org,2002:python/object/apply:pathlib.Pathc                 S      t j| | S r+   )pathlibPathconstruct_sequenceloaderrL   r.   r.   r/   <lambda>       z!get_yaml_loader.<locals>.<lambda>z7tag:yaml.org,2002:python/object/apply:pathlib.PosixPathc                 S   rc   r+   )rd   	PosixPathrf   rg   r.   r.   r/   ri      rj   z9tag:yaml.org,2002:python/object/apply:pathlib.WindowsPathc                 S   rc   r+   )rd   WindowsPathrf   rg   r.   r.   r/   ri      rj   )
r@   Z
SafeLoaderZadd_implicit_resolverrecompileXlistZyaml_implicit_resolversitemsZadd_constructor)r\   rh   r.   r.   r/   get_yaml_loader   s4   
	rr   pathc                 C   sX   ddl m} | d\}}}||}zt||}W |S  ty+   td| d| w )Nr   )import_module.zClass z is not in module )	importlibrt   
rpartitiongetattrAttributeErrorImportError)rs   rt   module_path_
class_namemodklassr.   r.   r/   
_get_class   s   r   type_c                 C   s*   t jdkrt| tjrdS t| dd tu S )N)   
   T
__origin__)sysversion_info
isinstancetypes	UnionTyperx   r   r   r.   r.   r/   is_union_annotation   s   
r   c                 C   s   t | r3| j}t|v rd}tdd |D }nd}t|dkr%||d fS t|dkr1|t| fS J | tu r;dtfS | dtfv rEdtfS d| fS )	zGCheck whether `type_` is equivalent to `typing.Optional[T]` for some T.Tc                 s   s    | ]	}|t ur|V  qd S r+   )r   )r]   ar.   r.   r/   	<genexpr>       z$_resolve_optional.<locals>.<genexpr>Fr   r      N)r   __args__r   tuplelenr   r   )r   argsoptionalr.   r.   r/   _resolve_optional   s    r   objr`   c                 C   sF   ddl m}m} |durt| |sJ | |} t| |sJ |  S )z:Check `obj` metadata to see if the given node is optional.r   	ContainerrY   N)baser   rY   r   	_get_node_is_optional)r   r`   r   rY   r.   r.   r/   r      s   
r   modulec                    s   dd l }t|dr|jn|j}t| |u rt  d| j S t| rCt| \}}|d ur3t	| d}|d ur=t	| d}t
||f S t| rYt| }|d urUt	| d}t| S t| rpt| }t fdd|D }t| S | S )Nr   
ForwardRefru   r   c                 3   s    | ]	}t | d V  qdS )r   N)_resolve_forward)r]   itr   r.   r/   r     r   z#_resolve_forward.<locals>.<genexpr>)typinghasattrr   Z_ForwardReftyper   __forward_arg__is_dict_annotationget_dict_key_value_typesr   r   is_list_annotationget_list_element_typer   is_tuple_annotationget_tuple_item_typesr   r
   )r   r   r   forwardktvtetZitsr.   r   r/   r      s*   r   parentc                 C   s   ddl m} t| t}|r| nt| }t|}|r*tjd|j dd d tdd |r.d	S |ryi }t	|\}}| 
 D ]:\}	}
t|\}}t|| j}z||||	|
|d
||	< W q< tyv } ztd	|	|
|t|d W Y d	}~q<d	}~ww |S d	S )zWCheck if obj is an instance of a subclass of Dict. If so, extract the Dict keys/values.r   )_maybe_wrapzClass `z` subclasses `Dict`.z? Subclassing `Dict` in Structured Config classes is deprecated,z) see github.com/omry/omegaconf/issues/663	   )
stacklevelNref_typeis_optionalr`   rO   r   rL   r`   rO   causemsg)omegaconf.omegaconfr   r   r   is_dict_subclasswarningswarnr3   UserWarningr   rq   r   r   r4   r   format_and_raiser6   )r   r   r   is_typeobj_typeZsubclasses_dictdict_subclass_datakey_typeelement_typenamerO   r   r   exr.   r.   r/   extract_dict_subclass_data  sL   
r   zattr.Attribute[Any]c                 C   s6   t | t}|r	| nt| }t| }dd |D S )Nc                 S       g | ]}|j d dur|qS Zomegaconf_ignoreTmetadatagetr]   fr.   r.   r/   r_   A       z)get_attr_class_fields.<locals>.<listcomp>)r   r   attrZfields_dictvalues)r   r   r   fieldsr.   r.   r/   get_attr_class_fields=  s   
r   allow_objectsc                 C   s  ddl m}m} |d urd|ini }ddlm} i }t| t}|r#| nt| }|ji |d}	||	j_	t
|}
t| D ]x}|j}t|
| \}}t|| j}|sUt| |}n
|j}|tjkr_|}t|r~t|s~td| dt| }td d ||t|d z||||||	d	||< W n ttfy } zt|	|||t|d W Y d }~nd }~ww || d  q:t| |	d
}|d ur|| |S )Nr   )	OmegaConfr   r   )MISSINGflags(Unions of containers are not supported:
: r   r   r   r   )r   r   r   	omegaconfr   r   r   create	_metadataobject_typer   r   r   r   r   r4   rx   defaultr   ZNOTHINGr   is_supported_union_annotationr   type_strr   r6   r   r   _set_parentr   update)r   r   r   r   r   r   dr   r   dummy_parentresolved_hintsZattribr   r   r   rO   er   r   r.   r.   r/   get_attr_dataD  sT   


r   zdataclasses.Field[Any]c                 C   s   t | }dd |D S )Nc                 S   r   r   r   r   r.   r.   r/   r_   w  r   z(get_dataclass_fields.<locals>.<listcomp>)dataclassesr   r   r   r.   r.   r/   get_dataclass_fieldsu  s   
r   c                 C   s  ddl m}m}m} |d urd|ini }i }t| t}t| }|ji |d}	||	j_	t
|}
t| D ]}|j}t|
|j \}}t|| j}|jtjk}|jtjk}|sZt| |}n|r`|j}n	|rg| }n|}t|rt|std| dt| }td d ||t|d z||||||	d||< W n ttfy } zt|	|||t|d W Y d }~nd }~ww || d  q2t| |	d	}|d ur|| |S )
Nr   )r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   get_type_ofr   r   r   r   r   r   r   r   r4   r   r   default_factoryrx   r   r   r   r   r   r6   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   fieldr   r   r   Zhas_defaultZhas_default_factoryrO   r   r   r   r.   r.   r/   get_dataclass_dataz  sZ   


r   c                 C   ,   ddl m} td u st| |rdS t| S Nr   rY   F)omegaconf.baserY   r   r   is_dataclassr   rY   r.   r.   r/   r        
r   c                 C   r   r   )r   rY   r   r   hasr   r.   r.   r/   is_attr_class  r   r   c                 C      t | pt| S r+   )r   r   r   r.   r.   r/   is_structured_config     r   c                 C   s   | j jS r+   )__dataclass_params__frozenr   r.   r.   r/   is_dataclass_frozen  rK   r   c                 C   s   | j tjjkS r+   )__setattr__r   _makeZ_frozen_setattrsr   r.   r.   r/   is_attr_frozen  s   r  class_or_objectc                 C   s(   | }t |tst| }t |tsJ |S r+   )r   r   )r  r   r.   r.   r/   r     s
   
r   c                 C   s,   t | }t|rt|S t|rt|S dS )NF)r   r   r   r   r  )r   r   r.   r.   r/   is_structured_config_frozen  s   r  c                 C   sF   t | r	t| }nt| rt| }n
tdt| j dd |D S )NUnsupported type: c                 S   s   g | ]}|j r|jqS r.   )initr   r   r.   r.   r/   r_         z:get_structured_config_init_field_names.<locals>.<listcomp>)r   r   r   r   
ValueErrorr   r3   r   r.   r.   r/   &get_structured_config_init_field_names  s   

r	  c                 C   s<   t | r
t| |dS t| rt| |dS tdt| j )N)r   r  )r   r   r   r   r  r   r3   )r   r   r.   r.   r/   get_structured_config_data  s
   r
  c                   @   s   e Zd ZdZdZdZdS )	ValueKindr   r   r   N)r3   r4   r5   VALUEMANDATORY_MISSINGINTERPOLATIONr.   r.   r.   r/   r    s    r  rO   c                 C   s&   ddl m} t| |r|  } t| S )Nr   r   )r   rY   r   _value_is_missing_literal)rO   rY   r.   r.   r/   _is_missing_value  s   
r  c                 C   s   t | to| dkS )Nz???)r   r6   rO   r.   r.   r/   r    s   r  FTresolvethrow_on_resolution_failurec                 C   sT   ddl m} t| |s| d u S |r&| j|d} |s| d u rdS t| |s&J |  S )Nr   r   )r  F)r   rY   r   Z_maybe_dereference_node_is_none)rO   r  r  rY   r.   r.   r/   r  	  s   
r  strict_interpolation_validationc                 C   s$   t | rtjS t| |rtjS tjS )aA  
    Determine the kind of a value
    Examples:
    VALUE: "10", "20", True
    MANDATORY_MISSING: "???"
    INTERPOLATION: "${foo.bar}", "${foo.${bar}}", "${foo:bar}", "[${foo}, ${bar}]",
                   "ftp://${host}/path", "${foo:${bar}, [true], {'baz': ${baz}}}"

    :param value: Input to classify.
    :param strict_interpolation_validation: If `True`, then when `value` is a string
        containing "${", it is parsed to validate the interpolation syntax. If `False`,
        this parsing step is skipped: this is more efficient, but will not detect errors.
    )r  r  r  _is_interpolationr  r  rO   r  r.   r.   r/   get_value_kind  s
   
r  vc                 C   s:   ddl m} t| |r|  } t| trt| |rdS dS )Nr   r   TF)r   rY   r   r  r6   _is_interpolation_string)r  r  rY   r.   r.   r/   r  7  s   
r  c                 C   s*   d| v r|rt | d u rt|  dS dS )Nz${TF)r   matchr   r  r.   r.   r/   r  D  s   r  c                 C   s   t | pt| tjtjfv S )z4Special values are None, MISSING, and interpolation.)r  r  r  r  r  r  r.   r.   r/   _is_specialU  s   r  stc                 C   $   zt |  W dS  ty   Y dS w NTF)floatr  r  r.   r.   r/   r?   ]     r?   c                 C   r  r   )intr  r"  r.   r.   r/   r>   e  r#  r>   c                 C   s   t | ttfS r+   )r   rp   r   r   r.   r.   r/   is_primitive_listm  s   r%  c                 C   s   t | }|tu S r+   )r   dict)r   tr.   r.   r/   is_primitive_dictq  s   r(  c                 C   sn   | t tfv rdS t| dd }tjdk r't| do| jtk}|tu p&| tu p&|S t| do0| jt k}|t u p6|S )NTr   r      r   __base__)r&  r   rx   r   r   r   r+  )r   originZ
typed_dictr.   r.   r/   r   v  s   
r   c                 C   >   | t tfv rdS t| dd }tjdk r|tu p| tu S |t u S NTr   r)  )rp   r   rx   r   r   r   r,  r.   r.   r/   r        
r   c                 C   r-  r.  )r   r
   rx   r   r   r/  r.   r.   r/   r     r0  r   c                 C   s$   t | sdS | j}tdd |D S )zLCurrently only primitive types are supported in Unions, e.g. Union[int, str]Fc                 s   s    | ]}t |V  qd S r+   )is_primitive_type_annotation)r]   argr.   r.   r/   r     s    z0is_supported_union_annotation.<locals>.<genexpr>)r   r   all)r   r   r.   r.   r/   r     s   r   c                 C   s   | d uot | tot| tS r+   )r   r   
issubclassr   r   r.   r.   r/   r     s   r   c                 C   s   t | pt| pt| S r+   )r(  r   r   r   r.   r.   r/   is_dict  s   r5  c                 C   r   r+   )r%  r(  r   r.   r.   r/   is_primitive_container  r   r6  r   c                 C   s8   t | dd }| tur|d ur|d r|d }|S t}|S )Nr   r   )rx   r   r   )r   r   r   r.   r.   r/   r     s   r   c                 C   s.   t | dd }|dv rtdf}t|tsJ |S )Nr   )Nr.   .)rx   r   r   r   )r   r   r.   r.   r/   r     s
   r   c                 C   s   t | dd }|d u r"t | dd }|d ur"t|dkr"t |d dd }| d u s*| tkr2t}t}||fS |d urB|d }|d }||fS t}t}||fS )Nr   __orig_bases__r   r   )rx   r   r   r   )r   r   basesr   r   r.   r.   r/   r     s    	r   c                 C   s4   t | \}} | tu pt| pt| pt| pt| S r+   )r   r   r1  r   is_container_annotationr   )r   r|   r.   r.   r/   is_valid_value_annotation  s   r:  c                 C   s(   ddl m} | d u p| tu pt| |jS )Nr   )DictKeyType)r   r;  r   r4  r   )r   r;  r.   r.   r/   _valid_dict_key_annotation_type  s   r<  c                 C   s    t | } t| ttjfp| tv S r+   )r   r4  r   rd   re   r   r   r.   r.   r/   r1    s   r1  c                 C   s   ddl m}m} ddlm} t| |r|  S t| |r0|  }|d u s,t|s,t|r.|S | S t| |rK|  }|d u sEt|sEt|rG|S t	|S | S )Nr   )r   	UnionNode)	ValueNode)
r   r   r=  nodesr>  r   r  r  r  
_get_value)rO   r   r=  r>  Zboxedr.   r.   r/   r@    s   

	
r@  c                 C   sp   ddl m}m} t| |r|d ur| |} n|d urtdt| |r6| jj}|  r4|t	ur4t
| S |S t	S )Nr   r   z1Key must only be provided when obj is a container)r   r   rY   r   r   r  r   r   r   r   r	   )r   r`   r   rY   r   r.   r.   r/   get_type_hint  s   


rA  r   r   c                 C   s^   dt jv r
t jd nd }t d u}|r|dk p|dk}|r#|| _nd | _| t d )NZOC_CAUSE01r   )osenvironr   gettrace	__cause__with_tracebackexc_info)r   r   env_varZ	debuggingZfull_backtracer.   r.   r/   _raise  s   rK  rL   r   type_overridec              
   C   s"  ddl m} ddlm} t|tr t|tr2|jr2|}|d ur-|t|}t	
|j|_t|| d }	d }
| d u rI|d ur@|nd}d }d }d }nG|d urX|  sX| j|dd}
z| j|d}W n ty~ } zdt|j d	| d
}W Y d }~nd }~ww || }t|}	t| }t|}t|j||	|||tt|ddt|j d}|d tfvrtd}ntd}tj|d}|j||	||d}|d u rt|n|}|tkrt}n|tkrt}|| }t |tr
d|_||_!| |_"|
|_#||_$||_%||_&||_'|	|_(||_)||_*t|| d S )Nr   r   r    F)Zvalidate_access)r`   z<unresolvable due to r   >Tinclude_module_name)REF_TYPEOBJECT_TYPEZKEYFULL_KEYr  Z
VALUE_TYPEZKEY_TYPEz            $MSG
                full_key: $FULL_KEY
                reference_type=$REF_TYPE
                object_type=$OBJECT_TYPEz]            $MSG
                full_key: $FULL_KEY
                object_type=$OBJECT_TYPE)template)rR  rS  ZMSGrT  )+r   r   r   rY   r   AssertionErrorr   _initializedr6   copydeepcopy__dict__rK  r  r   Z_get_full_key	Exceptionr   r3   get_typer   rA  stringTemplatesafe_substituter   r   
substitute	TypeErrorr   
IndexErrorr   r4  r   Zparent_node
child_noder`   full_keyrO   r   object_type_strr   ref_type_str)rL   r`   rO   r   r   rL  r   rY   r   re  rc  rd  r   r   rf  excrU  smessageZexception_typer.   r.   r/   r      s   

$




r   r'  rQ  c                    sH  t | \}} | tu rt| jS | tu rdS | du rdS t| dr&t| j}n-t| dd d ur4t| j}nt| dd d urBt| j	}nt| }|
drS|tdd  }t| dd }|d ursd	 fd
d| jD }| d| d}n|} rt| dr| jdkr| jdkr| j
dst| jd }nd}|| }|rd| dS |S )Nr   .z...r3   _namer   ztyping.r   z, c                    s   g | ]}t | d qS )rP  )r   )r]   r'  rP  r.   r/   r_     r  ztype_str.<locals>.<listcomp>[]r4   builtinsr   z
omegaconf.ru   rN  z	Optional[)r   r   r6   r3   r   r   rx   rj  r   r   
startswithr   joinr   r4   )r'  rQ  r   r   r   retZmodule_prefixr.   rP  r/   r     sH   





r   targetr   c                 C   sh   ddl m} t| rt| ttfsJ |j| |d} | S t| r)|j| |d} | S |	| s2t
d| S )Nr   rM  r   z|Invalid input. Supports one of [dict,list,DictConfig,ListConfig,dataclass,dataclass instance,attr class,attr class instance])r   r   r6  r   rp   r&  r   r   Z
structuredZ	is_configr  )rq  r   r   r.   r.   r/   _ensure_container  s   	
rr  c                 C   s   t | o	t| duS )z
    Checks if a type is a generic list, for example:
    list returns False
    typing.List returns False
    typing.List[T] returns True

    :param type_: variable type
    :return: bool
    N)r   r   r   r.   r.   r/   is_generic_list  s   
rs  c                 C   s   t | ott| dkS )z
    Checks if a type is a generic dict, for example:
    list returns False
    typing.List returns False
    typing.List[T] returns True

    :param type_: variable type
    :return: bool
    r   )r   r   r   r   r.   r.   r/   is_generic_dict  s   
rt  c                 C   r   r+   )r   r   r   r.   r.   r/   r9    r   r9  c                 C   s   t | }|dusJ | d }| d| d}|t| kr"|S | | dkr0|d s0|  t| |d }|dd |D 7 }|S )	a&  
    Split a full key path into its individual components.

    This is similar to `key.split(".")` but also works with the getitem syntax:
        "a.b"       -> ["a", "b"]
        "a[b]"      -> ["a", "b"]
        ".a.b[c].d" -> ["", "a", "b", "c", "d"]
        "[a].b"     -> ["a", "b"]
    Nr   r   ru   rk  c                 S   s   g | ]
\}}|r
|n|qS r.   r.   )r]   Zdot_keyZbracket_keyr.   r.   r/   r_     s    zsplit_key.<locals>.<listcomp>)KEY_PATH_HEADr  spansplitr   popKEY_PATH_OTHERfindall)r`   firstZ
first_stoptokensZothersr.   r.   r/   	split_key  s   
r~  enter_resultc                 c   s    | V  d S r+   r.   )r  r.   r.   r/   nullcontext  s   
r  r+   )FTrX   )rrX  rD  rd   rm   r]  r   r   r   
contextlibr   enumr   textwrapr   r   r   r   r   r   r	   r
   r   r   r   r@   errorsr   r   r   r   r   r   Zgrammar_parserr   r   r   rz   r   r   r   __annotations__r$  r!  rZ   r6   bytesr   rn   rv  rz  rJ   r)   r7   rG   r8   rH   r=   rr   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  r?   r>   r%  r(  r   r   r   r   r   r5  r6  r   r   r   r:  r<  r1  r@  rA  r[  rK  r   r   rr  rs  rt  r9  r~  r  r.   r.   r.   r/   <module>   s  
 , 

	9$"*$1

5






	 
f$-+