o
    )Ti8                     @   sr  d 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 ddlmZ ddlmZmZ d	gZeed
ZeedpEedZeedZedduZedduZedduZedduZedduZedduZedduZeedoedZedduZedduZedduZ da!ddda"dd Z#de$ddfd d!Z%d"d# Z&defd$d%Z'e&Z(e#d#Z)e)re'e)rd&ej*vre)Z&d'd( Z+G d)d* d*e,Z-d+d, Z.ed-d. Z/d/d0 Z0d1d2 Z1d3d4 Z2d5d6 Z3d7d8 Z4d9d: Z5d;d< Z6d=d> Z7d?d@ Z8		dwdAedBefdCdDZ9de$fdEd	Z:dxdFee fdGdHZ;dIdJ Z<dydKdLZ=dMdN Z>dxdOdPZ?dQdR Z@dSdT ZAdUe$deBe$ fdVdWZCdXeBe$ de$fdYdZZDd[eEdeEfd\d]ZFe#d^ZGd_eHdefd`daZId_eHdeHfdbdcZJe#ddZKd_eHdefdedfZLd_eHdefdgdhZMdeNfdidjZOeO ZPdefdkdlZQeQ ZRdeNfdmdnZSdefdodpZTdqdr ZUd_eHdefdsdtZVd_eHfdudvZWdS )zz&Code related to optional dependencies.    N)contextmanager)deepcopy)is_dataclass)version)	find_spec)OptionalUnion_get_config_read_modeyamltomltomllibtyping_extensionstypeshed_client
jsonschema_jsonnetrequestsdocstring_parserfsspecruamelruamel.yaml	omegaconfreconploggerattrsfrF)styleattribute_docstringsc                 C   s$   t r
ttd| dS ttd| dS )Nr   Ftyping)typing_extensions_supportgetattr
__import__)name r!   K/home/ubuntu/.local/lib/python3.10/site-packages/jsonargparse/_optionals.pytyping_extensions_import(   s   r#   r    returnc                 G   sP   | du st | dddkr$ttd|r"|D ]}|t td| qdS dS dS )zO
    Ensure different origins for types in typing_extensions are captured.
    F
__module__Nr   r   )r   hasattrr   add)typehintr    collections
collectionr!   r!   r"    capture_typing_extension_shadows/   s   r+   c                 C   s   t | dd | S )zDecorator to make a class ``final``, i.e., it shouldn't be subclassed.

    It is the same as ``typing.final`` or an equivalent implementation
    depending on the python version and whether typing-extensions is
    installed.
    	__final__T)setattr)clsr!   r!   r"   final:   s   r/   c                 C   s   | G dd d}t |ddS )Nc                   @      e Zd ZdS )z'is_compatible_final.<locals>.FinalClassN__name__r%   __qualname__r!   r!   r!   r"   
FinalClassF   s    r4   r,   F)r   )r/   r4   r!   r!   r"   is_compatible_finalE   s   r5   SPHINX_BUILDc                  C   s$   t rdd l} | S tdjtttdS )Nr   argparse)ImportedInfo
ModulePathResolver)typeshed_client_supportr   r   	Namespaceobject)r   r!   r!   r"   import_typeshed_clientS   s   r>   c                   @   r0   )UndefinedExceptionNr1   r!   r!   r!   r"   r?   \   s    r?   c                  C   s   ddl m}  | fS )Nr   ValidationError)jsonschema.exceptionsrA   r@   r!   r!   r"   get_jsonschema_exceptions`   s   rC   c              
   c   sB    zd V  W d S  t y  } zt |  d| d| |d }~ww )Nz package is required by z :: )ImportError)packageimporterexr!   r!   r"   missing_package_raisef   s   rH   c                 C   sZ   t drdd l}|j|jfS td|  dd l}W d    n1 s"w   Y  |j|jfS )Nr   r   r   )r   r   loadsTOMLDecodeErrorrH   r   TomlDecodeError)rF   r   r   r!   r!   r"   import_toml_loadsn   s   
rL   c                 C   <   t d|  dd l}W d    |jS 1 sw   Y  |jS )Nr   r   )rH   r   dumps)rF   r   r!   r!   r"   import_toml_dumpsz      

rO   c                 C   s<   t d|  dd l}W d    n1 sw   Y  ||jfS )Nr   r   )rH   r   Draft7Validator)rF   r   r!   r!   r"   import_jsonschema   s   

rR   c                 C   8   t d|  dd l}W d    |S 1 sw   Y  |S )Njsonnetr   )rH   r   )rF   r   r!   r!   r"   import_jsonnet      

rU   c                 C   rS   )Nr   r   )rH   r   )rF   r   r!   r!   r"   import_requests   rV   rW   c                 C   rS   )Nzdocstring-parserr   )rH   r   )rF   r   r!   r!   r"   import_docstring_parser   rV   rX   c                 C   rS   )Nr   r   )rH   r   )rF   r   r!   r!   r"   import_fsspec   rV   rY   c                 C   rM   )Nr   r   )rH   ruamel.yamlr
   )rF   r   r!   r!   r"   import_ruamel   rP   r[   c                 C   rS   )Nr   r   )rH   r   )rF   r   r!   r!   r"   import_reconplogger   rV   r\   urls_enabledfsspec_enabledc                    s.   t td  fdd}|d|  |d| dS )zEnables/disables optional config read modes.

    Args:
        urls_enabled: Whether to read config files from URLs using requests package.
        fsspec_enabled: Whether to read config files from fsspec supported file systems.
    )usc                    s@   |r |  d | t vrt dd|  a d S d S t | da d S )N_set_config_read_modef )_config_read_modereplace)flagenabledimportsr!   r"   update_mode   s   z*_set_config_read_mode.<locals>.update_moder_   r`   N)rW   rY   )r]   r^   rj   r!   rh   r"   ra      s   
	ra   c                   C   s   t S )z(Returns the current config reading mode.)rd   r!   r!   r!   r"   r	      s   r   c                 C   s`   t d}| durt| |jstd|j d| td< |dur.t|ts(td|td< dS dS )zSets options for docstring parsing.

    Args:
        style (docstring_parser.DocstringStyle): The docstring style to expect.
        attribute_docstrings: Whether to parse attribute docstrings (slower).
    _set_docstring_parse_optionsNzExpected style to be of type .r   z,Expected attribute_docstrings to be boolean.r   )rX   
isinstanceDocstringStyle
ValueError_docstring_parse_optionsbool)r   r   dpr!   r!   r"   rk      s   
rk   c                  C   s$   t d d u rtd} | jjt d< t S )Nr   get_docstring_parse_options)rp   rX   rn   AUTO)rr   r!   r!   r"   rs      s   rs   c              
   C   s   t d}t }z|r|d r|j| |d dW S |j| j|d dW S  t|jfyL } z|rA|d|  d|  W Y d }~d S W Y d }~d S d }~ww )Nparse_docstringr   r   )r   zFailed parsing docstring for z: )rX   rs   parse_from_objectparse__doc__ro   
ParseErrordebug)	componentparamsloggerrr   optionsrG   r!   r!   r"   ru      s    
ru   c           	      C   s   i }t rNt|r"| jdkr"t|d }t|r"|t||j| | g}t|r4| jdkr4||g7 }|D ]}t	|d|d}|rM|j
D ]}|j||j< qDq6|S )N__init__   Tr|   r}   )docstring_parser_supportr   r2   inspectgetmroupdate
parse_docsr   isclassru   r|   descriptionarg_name)	r{   parentr}   docsnext_mrodoc_sourcessrcdocparamr!   r!   r"   r      s    

r   c                 C   s^   t r-| }t| r!|st| d|d}|r|jr|jS t| |pd}t|d|d}|r-|jS d S )NFr   r   )r   r   r   ru   short_descriptionr   )function_or_classmethod_namer}   r{   	docstringr!   r!   r"   get_doc_short_description  s   

r   c                    s   ddl ddlm tdd ddlm  W d   n1 s w   Y  | dv s+J | d	kr>dd
lm fdd}|S  fdd}|S )zXReturns a yaml loader function based on OmegaConf which supports variable interpolation.r   Nr   )	yaml_loadr   get_omegaconf_loader	OmegaConf>   r   
omegaconf+r   )get_parsing_settingc                    s&   | } t | tr drt| } | S )N$omegaconf_absolute_to_relative_paths)rm   dictr   value)r   r   r!   r"   omegaconf_plus_load"  s   z1get_omegaconf_loader.<locals>.omegaconf_plus_loadc                    sZ   | }t |ttttfs|d u r|S   | }t	| gd }||kr+|S |S N)
rm   strintfloatrq   	to_objectloadStringIOr   fromkeys)r   value_pyyamlvalue_omegaconfstr_ref)r   ior   r!   r"   omegaconf_load*  s   z,get_omegaconf_loader.<locals>.omegaconf_load)r   _loaders_dumpersr   rH   r   r   _commonr   )moder   r   r!   )r   r   r   r   r"   r     s   r   c                 C   s   dt |vr|S tdd ddlm} W d    n1 sw   Y  ddlm} |dd	 | j|dd
d
d}W d    n1 sBw   Y  ||}|j|dd}| 	|S )N${r   omegaconf_applyr   r   r   )parser_contextT)path_dump_preserve_relativeF)skip_validation	skip_noneskip_link_targets)resolve)
r   rH   r   r   r   r   dumpcreateto_container_apply_actions)parsercfgr   r   cfg_dictcfg_omegaconfr!   r!   r"   r   5  s   

r   pathc                 C   s$   dd |  dd dddD S )z6Very small tokenizer: 'a.b[0].c' -> ['a','b','0','c'].c                 S   s   g | ]}|r|qS r!   r!   ).0tr!   r!   r"   
<listcomp>G  s    z&omegaconf_tokenize.<locals>.<listcomp>]rc   [rl   )re   split)r   r!   r!   r"   omegaconf_tokenizeE  s   $r   tokensc                 C   sD   d}| D ]}|  r|d| d7 }q||dkrdnd| 7 }q|S )zCRender tokens back to a normalized path: ['a','0','b'] -> 'a[0].b'.rc   r   r   rl   )isdigit)r   r`   r   r!   r!   r"   omegaconf_tokens_to_pathJ  s   r   datac                    s<   t | } tddttttf  f fdd  | g S )z
    Return a new nested dict/list where absolute ${...} interpolations
    are rewritten to relative form from the node where they appear.
    z!\$\{([a-zA-Z][a-zA-Z0-9[\]_.]*)\}current_pathc                    sv   t | tr fdd|  D S t | tr" fddt| D S t | tr9dtjdtf fdd}|| S | S )	Nc                    s"   i | ]\}}| ||g qS r!   r!   )r   kv_walkr   r!   r"   
<dictcomp>`  s   " zGomegaconf_absolute_to_relative_paths.<locals>._walk.<locals>.<dictcomp>c                    s    g | ]\}} ||g qS r!   r!   )r   ir   r   r!   r"   r   b  s     zGomegaconf_absolute_to_relative_paths.<locals>._walk.<locals>.<listcomp>mr$   c                    s   t | d}d}|t k r9|t|k r9t | || kr9|d7 }|t k r9|t|k r9t | || kstdt | }d| }t||d  }d| | d S )Nr   r   rl   r   })r   grouplenr   maxr   )r   
dst_tokensr   updotsdownr   r!   r"   _replacef  s   ,,zEomegaconf_absolute_to_relative_paths.<locals>._walk.<locals>._replace)	rm   r   itemslist	enumerater   reMatchsub)noder   r   r   regex_absolute_pathr   r"   r   ^  s   


z3omegaconf_absolute_to_relative_paths.<locals>._walk)r   r   compiler   r   r   r   )r   r!   r   r"   r   U  s   
 
r   _AnnotatedAliasr(   c                 C      t ot| t S r   )annotated_aliasrm   r(   r!   r!   r"   is_annotated{     r   c                 C      | j S r   )
__origin__r   r!   r!   r"   get_annotated_base_type     r   TypeAliasTypec                 C   r   r   )type_alias_typerm   r   r!   r!   r"   is_alias_type  r   r   c                 C   r   r   )	__value__r   r!   r!   r"   get_alias_target  r   r   c                  C   s(   d} t dr
td} t| ddd S )N0pydanticrl   r   r   )r   r   r   r   )supportr!   r!   r"   get_pydantic_support  s   r   c                  C   sP   t dr&td} tdd | dd d D \}}|dkp%|dko%|dkS dS )Nr   c                 s   s    | ]}t |V  qd S r   )r   )r   xr!   r!   r"   	<genexpr>  s    z3get_pydantic_supports_field_init.<locals>.<genexpr>rl         F)r   r   tupler   )r   majorminorr!   r!   r"    get_pydantic_supports_field_init  s
   $r  c                 C   s   t rBt rt| rt| ng }|D ]/}t|dddrAt|dddkrAdd l}t||jr3t   S t dkrAt||j	jrA dS qdS )Nr%   rc   r   r2   	BaseModelr   r   )
pydantic_supportr   r   r   r   
startswithr   
issubclassr  v1)
class_typeclassesr.   r   r!   r!   r"   is_pydantic_model  s   "r  c                 C   s   t rdd l}|| rdS dS )Nr   TF)attrs_supportr   has)r	  r   r!   r!   r"   is_attrs_class  s
   
r  c                 C   s   t t| ddddd S )Nr%   rc   rl   r   r   )r   typer   r   r!   r!   r"   
get_module  s   r  c                 C   s>   ddl m} tdkot| otdd | jD o|| jtkS )Nr   )get_typehint_originc                 s   s    | ]	}t |d v V  qdS )>   r   annotated_typesN)r  )r   r   r!   r!   r"   r     s    z)is_annotated_validator.<locals>.<genexpr>)_utilr  r  r   any__metadata__r   r   )r(   r  r!   r!   r"   is_annotated_validator  s   r  c                 C   s   ddl m} ||| S )Nr   )TypeAdapter)r   r  validate_python)r   r(   r  r!   r!   r"   validate_annotated  s   r  )FF)NN)FN)Xrx   r   osr   
contextlibr   copyr   dataclassesr   importlib.metadatar   importlib.utilr   r   r   r   __all__rq   pyyaml_availabletoml_load_availabletoml_dump_availabler   r;   jsonschema_supportjsonnet_supporturl_supportr   fsspec_supportruamel_supportomegaconf_supportreconplogger_supportr  rd   rp   r#   r   r+   r/   r5   fallback_finalstdlib_finalenvironr>   	Exceptionr?   rC   rH   rL   rO   rR   rU   rW   rX   rY   r[   r\   ra   r	   rk   rs   ru   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r  r  pydantic_supports_field_initr  r  r  r  r  r!   r!   r!   r"   <module>   s    	



!#	