a
    d~                  	   @   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$y   dZ#Y n0 zd dl%Z%W n e$y   dZ%Y n0 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Z6ee6 dddZ7e,e+dddZ8edddZ9e,e&dddZ:ee+dd d!Z;eee+ef dd"d#Z<deeee)e,f  e+d$d%d&Z=ee e,ee d'd(d)Z>eeeee,ef  d*d+d,Z?eee, d-d.d/Z@deee+ ee,ef d0d1d2ZAeee, d-d3d4ZBdeee+ ee,ef d0d5d6ZCee+d-d7d8ZDee+d-d9d:ZEee+d-d;d<ZFee+dd=d>ZGe&e+dd?d@ZHeee dAdBdCZIee+d-dDdEZJeee, d-dFdGZKdeee+ ee,ef d0dHdIZLG dJdK dKeZMee+dLdMdNZNee+dLdOdPZOdee+e+e+dSdTdUZPdee+eMdVdWdXZQdee+e+dYdZd[ZRe,e+e+dVd\d]ZSee+dLd^d_ZTe,e+d`dadbZUe,e+d`dcddZVee+d-dedfZWee+d-dgdhZXee+ddidjZYee+ddkdlZZee+ddmdnZ[ee+d-dodpZ\ee+ddqdrZ]ee+d-dsdtZ^ee+d-dudvZ_eee  edwdxdyZ`ee eed
f dwdzd{Zaeeeef dwd|d}Zbee+dd~dZcee+dddZdee+dddZeeedLddZfdeeeee  d$ddZgehehddddZideeee,eheddddZjdee+e,dddZkdeeee,e+f  edddZlee+dddZmee+dddZnee+dddZoe,ee, dddZpe	deee d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edddZedddZdS )Markerdescc                 C   s
   || _ d S Nr*   )selfr+    r.   Y/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   r3   r.   r.   r.   r/   r)   d   s   r)   _DEFAULT_MARKER_c                   @   s*   e Zd ZdZeejeejdddZ	dS )OmegaConfDumperF)dumperdatar2   c                 C   s6   t |pt|pt|}| jtjjj||r.dnd dS )N')style)yaml_is_boolis_intis_floatZrepresent_scalaryamlresolverBaseResolverDEFAULT_SCALAR_TAG)r:   r;   Zwith_quotesr.   r.   r/   str_representers   s    
zOmegaConfDumper.str_representerN)
r4   r5   r6   str_representer_addedstaticmethodrA   Dumperr7   Z
ScalarNoderE   r.   r.   r.   r/   r9   p   s   r9   r1   c                   C   s   t jst tt j dt _t S )NT)r9   rF   Zadd_representerr7   rE   r.   r.   r.   r/   get_omega_conf_dumper}   s    rI   )br2   c                 C   s   | t v S r,   )YAML_BOOL_TYPES)rJ   r.   r.   r/   r>      s    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ejeed fddZ  ZS )z(get_yaml_loader.<locals>.OmegaConfLoaderF)nodedeepr2   c                    sl   t  }|jD ]N\}}|jtjjjkr&q|j|v rNtjd|j	d|j |j	|
|j qt j||dS )Nzwhile constructing a mappingzfound duplicate key )rM   )setvaluetagrA   rB   rC   rD   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)	r4   r5   r6   rA   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   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   s   t j| | S r,   )rb   	PosixPathrd   re   r.   r.   r/   rg      rh   z9tag:yaml.org,2002:python/object/apply:pathlib.WindowsPathc                 S   s   t j| | S r,   )rb   WindowsPathrd   re   r.   r.   r/   rg      rh   )
rA   Z
SafeLoaderZadd_implicit_resolverrecompileXlistZyaml_implicit_resolversitemsZadd_constructor)r[   rf   r.   r.   r/   get_yaml_loader   s4    
	rp   )pathr2   c                 C   s^   ddl m} | d\}}}||}zt||}W n& tyX   td| d| Y n0 |S )Nr   )import_module.zClass z is not in module )	importlibrr   
rpartitiongetattrAttributeErrorImportError)rq   rr   module_path_
class_namemodklassr.   r.   r/   
_get_class   s    r~   )type_r2   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typesZ	UnionTyperv   r   r   r.   r.   r/   is_union_annotation   s    
r   c                 C   s   t | rj| j}t|v r.d}tdd |D }nd}t|dkrJ||d fS t|dkrb|t| fS dsjJ | tu rzdtfS | dtfv rd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>   rh   z$_resolve_optional.<locals>.<genexpr>Fr   r      N)r   __args__r   tuplelenr   r   )r   argsoptionalr.   r.   r/   _resolve_optional   s     r   )objr_   r2   c                 C   sF   ddl m}m} |dur0t| |s&J | |} t| |s>J |  S )z:Check `obj` metadata to see if the given node is optional.r   	ContainerrX   N)baser   rX   r   	_get_node_is_optional)r   r_   r   rX   r.   r.   r/   r      s    
r   )r   moduler2   c                    s   dd l }t|dr|jn|j}t| |u r>t  d| j S t| rt| \}}|d urft	| d}|d urzt	| d}t
||f S t| rt| }|d urt	| d}t| S t| rt| }t fdd|D }t| S | S d S )Nr   
ForwardRefrs   r   c                 3   s   | ]}t | d V  qdS )r   N)_resolve_forward)r\   itr   r.   r/   r     rh   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   ZforwardZktZvtetZitsr.   r   r/   r      s*    r   )r   parentr2   c                 C   s   ddl m} t| t}|r| nt| }t|}|rTtjd|j dd d tdd |r\d	S |ri }t	|\}}| 
 D ]v\}	}
t|\}}t|| j}z||||	|
|d
||	< W qx ty } z"td	|	|
|t|d W Y d	}~qxd	}~0 0 qx|S d	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warnr4   UserWarningr   ro   r   r   r5   r   format_and_raiser7   )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  sH    
r   )r   r2   c                 C   s2   t | t}|r| nt| }dd t| D S )Nc                 S   s   g | ]\}}|j r|qS r.   )init)r\   	fieldname	attributer.   r.   r/   r^   @  s   z3get_attr_class_init_field_names.<locals>.<listcomp>)r   r   attrfields_dictro   )r   r   r   r.   r.   r/   get_attr_class_init_field_names=  s
    
r   )r   allow_objectsr2   c                 C   s  ddl m}m} |d ur d|ini }ddlm} i }t| t}|rF| nt| }|ji |d}	||	j_	t
|}
t| D ]\}}t|
| \}}t|| j}|st| |}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 }~0 0 || d  qzt| |	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   ro   r   r   r5   rv   defaultZNOTHINGr   is_supported_union_annotationr   type_strr   r7   r   r   _set_parentr   update)r   r   r   r   r   r   dr   r   dummy_parentresolved_hintsr   attribr   r   rO   er   r   r.   r.   r/   get_attr_dataG  sN    



r   c                 C   s   dd t | D S )Nc                 S   s   g | ]}|j r|jqS r.   )r   r   )r\   fieldr.   r.   r/   r^   x  rh   z2get_dataclass_init_field_names.<locals>.<listcomp>)dataclassesfieldsr   r.   r.   r/   get_dataclass_init_field_namesw  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}|st| |}n|r|j}n|r| }n|}t|rt|std| dt| }td d ||t|d z||||||	d||< W n@ ttfyr } z"t|	|||t|d W Y d }~n
d }~0 0 || d  qft| |	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   r   r5   r   default_factoryrv   r   r   r   r   r   r7   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zhas_defaultZhas_default_factoryrO   r   r   r   r.   r.   r/   get_dataclass_data{  sV    



r   c                 C   s,   ddl m} td u st| |r"dS t| S Nr   rX   F)omegaconf.baserX   r   r   is_dataclassr   rX   r.   r.   r/   r     s    r   c                 C   s,   ddl m} td u st| |r"dS t| S r   )r   rX   r   r   Zhasr   r.   r.   r/   is_attr_class  s    r   c                 C   s   t | pt| S r,   )r   r   r   r.   r.   r/   is_structured_config  s    r   c                 C   s   | j jS r,   )Z__dataclass_params__frozenr   r.   r.   r/   is_dataclass_frozen  s    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_objectr2   c                 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   s8   t | rt| S t| r t| S tdt| j d S )NUnsupported type: )r   r   r   r   
ValueErrorr   r4   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 d S )N)r   r   )r   r   r   r   r   r   r4   )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)r4   r5   r6   VALUEMANDATORY_MISSINGINTERPOLATIONr.   r.   r.   r/   r     s   r   )rO   r2   c                 C   s&   ddl m} t| |r|  } t| S )Nr   r   )r   rX   r   _value_is_missing_literal)rO   rX   r.   r.   r/   _is_missing_value  s    
r   c                 C   s   t | to| dkS )Nz???)r   r7   rO   r.   r.   r/   r     s    r   FT)rO   resolvethrow_on_resolution_failurer2   c                 C   sT   ddl m} t| |s| d u S |rL| j|d} |s>| d u r>dS t| |sLJ |  S )Nr   r   )r   F)r   rX   r   Z_maybe_dereference_node_is_none)rO   r   r   rX   r.   r.   r/   r    s    
r  )rO   strict_interpolation_validationr2   c                 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  )vr  r2   c                 C   s:   ddl m} t| |r|  } t| tr6t| |r6dS dS )Nr   r   TF)r   rX   r   r   r7   _is_interpolation_string)r  r  rX   r.   r.   r/   r  6  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  C  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_specialT  s    r	  )str2   c                 C   s(   zt |  W dS  ty"   Y dS 0 d S NTF)floatr   r
  r.   r.   r/   r@   \  s
    r@   c                 C   s(   zt |  W dS  ty"   Y dS 0 d S r  )intr   r  r.   r.   r/   r?   d  s
    r?   c                 C   s&   ddl m} t| | o$t| ttfS )Nr   )r   )r   r   r   rn   r   )r   r   r.   r.   r/   is_primitive_listl  s    r  c                 C   s   t | }|tu S r,   )r   dict)r   tr.   r.   r/   is_primitive_dictr  s    r  c                 C   sr   | t tfv rdS t| dd }tjdk rNt| do8| jtk}|tu pL| tu pL|S t| do`| jt k}|t u pl|S d S )NTr   r      r   __base__)r  r   rv   r   r   r   r  )r   originZ
typed_dictr.   r.   r/   r   w  s    
r   c                 C   sB   | t tfv rdS t| dd }tjdk r6|tu p4| tu S |t u S d S NTr   r  )rn   r   rv   r   r   r   r  r.   r.   r/   r     s    
r   c                 C   sB   | t tfv rdS t| dd }tjdk r6|tu p4| tu S |t u S d S r  )r   r
   rv   r   r   r  r.   r.   r/   r     s    
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     rh   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    r  c                 C   s   t | pt| S r,   )r  r  r   r.   r.   r/   is_primitive_container  s    r  )r   r2   c                 C   s6   t | dd }| tur.|d ur.|d r.|d }nt}|S )Nr   r   )rv   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.   .)rv   r   r   r   )r   r   r.   r.   r/   r     s
    r   c                 C   s   t | dd }|d u rDt | dd }|d urDt|dkrDt |d dd }| d u sT| tkr^t}t}n"|d urx|d }|d }nt}t}||fS )Nr   __orig_bases__r   r   )rv   r   r   r   )r   r   basesr   r   r.   r.   r/   r     s    
r   c                 C   s4   t | \}} | tu p2t| p2t| p2t| p2t| S r,   )r   r   r  r   is_container_annotationr   )r   rz   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   r  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   r  r   rb   rc   r   r   r.   r.   r/   r    s    r  c                 C   s   ddl m}m} ddlm} t| |r.|  S t| |r^|  }|d u sXt|sXt|r|S n6t| |r|  }|d u st|st|r|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   sv   ddl m}m} t| |r.|d ur>| |} n|d ur>tdt| |rn| jj}|  rh|t	urht
| S |S nt	S d S )Nr   r   z1Key must only be provided when obj is a container)r   r   rX   r   r   r   r   r   r   r   r	   )r   r_   r   rX   r   r.   r.   r/   get_type_hint   s    

r)  )r   r   r2   c                 C   sb   dt jv rt jd nd }t d u}|r2|dk p8|dk}|rF|| _nd | _| t d d S )NZOC_CAUSE01r   )osenvironr   gettrace	__cause__with_tracebackexc_info)r   r   env_var	debuggingZfull_backtracer.   r.   r/   _raise  s    r4  )rL   r_   rO   r   r   type_overrider2   c              
   C   s*  ddl m} ddlm} t|tr$ t|trd|jrd|}|d urZ|t|}t	
|j|_t|| d }	d }
| d u r|d ur|nd}d }d }d }n|d ur|  s| j|dd}
z| j|d}W n< ty } z$dt|j d	| d
}W Y d }~n
d }~0 0 || }t|}	t| }t|}t|j||	|||tt|ddt|j d}|d tfvrjt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)r;  r<  ZMSGr=  )+r   r   r   rX   r   AssertionErrorr   _initializedr7   copydeepcopy__dict__r4  r  r   Z_get_full_key	Exceptionr   r4   get_typer   r)  stringTemplatesafe_substituter   r   
substitute	TypeErrorr   
IndexErrorr   r  r   Zparent_node
child_noder_   full_keyrO   r   object_type_strr   ref_type_str)rL   r_   rO   r   r   r5  r   rX   r   rN  rL  rM  r   r   rO  excr>  smessageZexception_typer.   r.   r/   r   !  s    

.






r   )r  r:  r2   c                    sX  t | \}} | tu rt| jS | tu r*dS | du r6dS t| drLt| j}nZt| dd d urht| j}n>t| dd d urt| j	}n"t| }|
dr|tdd  }t| dd }|d urd	 fd
d| jD }| d| d}n|} r>t| dr2| jdkr2| jdkr2| j
ds2t| jd }nd}|| }|rPd| dS |S d S )Nr   .z...r4   _namer   ztyping.r   z, c                    s   g | ]}t | d qS )r9  )r   )r\   r  r9  r.   r/   r^     rh   ztype_str.<locals>.<listcomp>[]r5   builtinsr   z
omegaconf.rs   r7  z	Optional[)r   r   r7   r4   r   r   rv   rS  r   r   
startswithr   joinr   r5   )r  r:  r   r   r   retZmodule_prefixr.   r9  r/   r     sL    



r   )targetr   r2   c                 C   sd   ddl m} t| r6t| ttfs&J |j| |d} n*t| rN|j| |d} n|	| s`t
d| S )Nr   r6  r   z|Invalid input. Supports one of [dict,list,DictConfig,ListConfig,dataclass,dataclass instance,attr class,attr class instance])r   r   r  r   rn   r  r   r   Z
structuredZ	is_configr   )rZ  r   r   r.   r.   r/   _ensure_container  s    
r[  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    
r\  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    
r]  c                 C   s   t | pt| S r,   )r   r   r   r.   r.   r/   r!    s    r!  )r_   r2   c                 C   s   t | }|dusJ | d }| d| d}|t| krD|S | | dkr`|d s`|  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   rs   rT  c                 S   s   g | ]\}}|r|n|qS r.   r.   )r\   Zdot_keyZbracket_keyr.   r.   r/   r^     rh   zsplit_key.<locals>.<listcomp>)KEY_PATH_HEADr  spansplitr   popKEY_PATH_OTHERfindall)r_   firstZ
first_stoptokensothersr.   r.   r/   	split_key  s    
rh  )enter_resultr2   c                 c   s
   | V  d S r,   r.   )ri  r.   r.   r/   nullcontext  s    rj  )N)N)N)N)FT)F)F)N)N)F)N)N)rrA  r,  rb   rk   rF  r   r   r   
contextlibr   enumr   textwrapr   r   r   r   r   r   r	   r
   r   r   r   rA   errorsr   r   r   r   r   r   Zgrammar_parserr   r   r   rx   r   r   r   __annotations__r  r  rY   r7   bytesr   rl   r_  rc  rK   r)   r8   rH   r9   rI   r>   rp   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   r  r  r   r   r   r"  r$  r  r(  r)  rD  r4  r   r   r[  r\  r]  r!  rh  rj  r.   r.   r.   r/   <module>   s   
, 



	9 *
 0 
5

 
  

	 f- +