o
    )Ti2                     @   s~  d 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 ddl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mZmZmZmZ d	dlmZm Z  d	dl!m"Z" d	dl#m$Z$ d	dl%m&Z& g dZ'e(dZ)dZ*dRde+dee+ defddZ,G dd de-Z.e.d	fddZ/G dd de0Z1dede&fddZ2de&fd d!Z3d"d# Z4ed$d%Z5	'dSd(ed)e6d*e6de7eee$ f fd+d,Z8d-e+fd.d/Z9i Z:d0efd1d2Z;d3e+d(edee+ fd4d5Z<d(edee+ fd6d7Z=d8d9 Z>d:d; Z?d<d= Z@d>d? ZAdTdAdBZBdUdCe+dDe6de+fdEdFZCdGdH ZDG dIdJ dJZE		dVdKedLef dMee(e  d-ee+ de(e fdNdOZFdPdQ ZGdS )Wz,Collection of general functions and classes.    N)ArgumentError)
namedtuple)wraps)import_module)BuiltinFunctionTypeFunctionType
ModuleType)AnyCallableOptionalTypeUnionget_type_hints   )	ClassTypeget_generic_originis_subclassparser_captureparser_context)json_compact_dump
load_value)_get_config_read_mode)Path)ArgumentParser)capture_parserclass_from_function"register_unresolvable_import_pathszPath to a configuration file.messagedefault_config_filereturnc                 C   s   t d | }|r
||_|S N)r   r   )r   r   ex r"   F/home/ubuntu/.local/lib/python3.10/site-packages/jsonargparse/_util.pyargument_error.   s   
r$   c                   @      e Zd ZdS )JsonargparseWarningN__name__
__module____qualname__r"   r"   r"   r#   r&   5       r&   c                 C   s>   t t | d } tjdt | d d ||d d d S )Nn   
z    r   )category
stacklevel)textwrapfilldedentstripwarningswarnindent)r   r.   r/   r"   r"   r#   warning9   s   
r7   c                       s&   e Zd Zdee f fddZ  ZS )CaptureParserExceptionparserc                    s$   || _ t |rd d S d d S )N z)No parse_args call to capture the parser.)r9   super__init__)selfr9   	__class__r"   r#   r<   C   s   zCaptureParserException.__init__)r(   r)   r*   r   r   r<   __classcell__r"   r"   r>   r#   r8   B   s    r8   functionc              
   O   sx   z&t dd | |i | W d   n1 sw   Y  W tdW td ty; } z	|jW  Y d}~S d}~ww )a  Returns the parser object used within the execution of a function.

    The function execution is stopped on the start of the call to
    :meth:`parse_args <.ArgumentParser.parse_args>`. No parsing is done or
    execution of instructions after the :meth:`parse_args
    <.ArgumentParser.parse_args>`.

    Args:
        function: A callable that internally creates a parser and calls :meth:`parse_args <.ArgumentParser.parse_args>`.
        *args: Positional arguments used to run the function.
        **kwargs: Keyword arguments used to run the function.

    Raises:
        CaptureParserException: If the function does not call :meth:`parse_args <.ArgumentParser.parse_args>`.
    T)r   N)r   r8   r9   )rA   argskwargsr!   r"   r"   r#   r   H   s   r   r9   c                 C   s   t  rt| d S r    )r   getr8   )r9   r"   r"   r#   return_parser_if_captured`   s   rE   c                 C   s   | S r    r"   )valuer"   r"   r#   identitye   s   rG   	NestedArgzkey valTFrF   enable_pathsimple_typesc                 C   s   d}t | tr| }|j} d}|rIt| tu rI| dkrIz	t| t d}W n	 ty,   Y nw |  t	|
 |d} W d   n1 sDw   Y  t| tu rc|  dkrct	| |d}t|turc|} t | trp|durp|| d< |ryt|j| d} | |fS )	z-Parses yaml/json config in a string or a pathFN-)mode)rJ   r:   __path__)keyval)
isinstancerH   rO   typestrr   r   	TypeErrorrelative_path_contextr   get_contentr3   dictrN   )rF   rI   rJ   
nested_argcfg_path
parsed_valr"   r"   r#   parse_value_or_configl   s.   

rZ   namec              
   C   s   t | tr	d| vrtd|  tdd | dD s#td|  | dd\}}z	t||gd}W n* ty^ } zd|vrB||dd\}}tt||gd|}W Y d}~nd}~ww t||S )	z8Returns an object in a module given its dot import path..z#Expected a dot import path string: c                 s   s    | ]}|  V  qd S r    )isidentifier.0xr"   r"   r#   	<genexpr>       z import_object.<locals>.<genexpr>zUnexpected import path format: r   )fromlistN)	rP   rR   
ValueErrorallsplitrsplit
__import__ModuleNotFoundErrorgetattr)r[   name_modulename_objectparentr!   name_object1r"   r"   r#   import_object   s    
ro   modulesc                  G   sf   | D ].}t | D ]%}t|dddu r/t|ddr/t|tttthv r/|j d|j t|< q
qdS )zSaves import paths of module objects for which its import path is unresolvable from the object alone.

    Objects with unresolvable import paths have the ``__module__`` attribute set to ``None``.
    r)   Nr(   r\   )	varsvaluesrj   rQ   r   r   r   r(   unresolvable_import_paths)rp   modulerO   r"   r"   r#   r      s   
r   module_pathc                 C   s:   t | }t| D ]\}}||u r| d |   S q
d S )Nr\   )r   rq   items)ru   rF   rt   r[   varr"   r"   r#   get_module_var_path   s   rx   c                 C   s  d}t | } t| dr(t| jr(t| r(t| jdd}| jj d| j }nt| dd}t| dd}|du rHt	| }|rG|
dd\}}n |sOt| rZt| r`t| js`t|| }n|rh|d | }|srtd|  d|r|rd|v s~d|v r|d}tt|D ]W}d|d|d  }t|}d|v r|
dd\}}	t||d}
t||	d| u r|d |	 } |S t|
|	d| kr|d | } |S qt||d| u r|d | } |S q|S )	z:Returns the shortest dot import path for the given object.N__self__r)   r\   r*   r:   r   z5Not possible to determine the import path for object )r   hasattrinspectisclassry   ismethodrj   r(   rs   rD   rg   rx   rd   rf   rangelenjoinr   )rF   pathru   qualname_module_partsnumrt   obj_nameattrobjr"   r"   r#   get_import_path   sZ    


r   c              
   C   sR   zt | }t|}| |urt|W S  ty( } ztd|  d| |d }~ww )Nz7Only possible to serialize an importable object, given : )r   ro   rd   	Exception)rF   r   
reimportedr!   r"   r"   r#   object_path_serializer   s   r   c                 C   s8   t | dst| j}|dkrtS |dv rtS t| dd S )N
__origin__ztypes.UnionType>   typing._TypedDictMeta typing_extensions._TypedDictMeta)rz   r   r?   r   rV   rj   )typehinttypehint_classr"   r"   r#   get_typehint_origin   s   

r   c                 C   sP   zt | ttfrtt| }W |S t| }W |S  ty'   tt| }Y |S w r    )rP   rV   listhashr   r   repr)item	item_hashr"   r"   r#   	hash_item   s   
r   c                 C   s<   g }t  }| D ]}t|}||vr|| || q|S r    )setr   appendadd)iterableunique_itemsseenr   rN   r"   r"   r#   unique   s   

r   ,c                 C   s<   t | } t| dkrt| d S d|dd | D  d S )Nr   r   {c                 s   s    | ]}t |V  qd S r    )rR   r^   r"   r"   r#   ra     rb   z"iter_to_set_str.<locals>.<genexpr>})r   r   rR   r   )rO   sepr"   r"   r#   iter_to_set_str  s   r   text
first_linec                 C   sR   |rt | dS |  }t|dkr| S |d tj t tj|dd  d S )Nz  r   r   )r0   r6   
splitlinesr   oslinesepr   )r   r   linesr"   r"   r#   indent_text  s   *r   c                    sD    fdd|  D } rtdt  t|dkr |d S |S )Nc                    s   g | ]
\}}  ||qS r"   )pop)r_   r[   defaultdatar"   r#   
<listcomp>  s    z&get_private_kwargs.<locals>.<listcomp>zUnexpected keyword parameters: r   r   )rv   rd   r   r   )r   rC   	extractedr"   r   r#   get_private_kwargs  s   r   c                   @   s   e Zd ZU eed< dS )ClassFromFunctionBasewrapped_functionN)r(   r)   r*   r
   __annotations__r"   r"   r"   r#   r   "  s   
 r   func.func_returnc           	   
      s  |du r
t  j}|t jju rt  dt|trEzt d }W n  t	yD } zt  j}td| d  d| |d}~ww |sP j
ddd	 }t t  d
 d p_t t}|sdJ t||rt||}t |rxt |nd}t|d
kr|d
 |u rt|tr|j u r|j|kr|S t|j d|dt  fdd}G dd d|t}t|||  |_||_ j|_|j|_||_||_
|S )ab  Creates a dynamic class which if instantiated is equivalent to calling func.

    Args:
        func: A function that returns an instance of a class.
        func_return: The return type of the function. Required if func does not have a return type annotation.
        name: The name of the class. Defaults to function name suffixed with ``_class``.
    Nz' does not have a return type annotationr   zUnable to dereference z, the return type of r   r\   ___classr   r   r"   z already defines z, please use a different namec                    s    |i |S r    r"   )clsrB   rC   r   r"   r#   __new__O  s   z$class_from_function.<locals>.__new__c                   @   r%   )z.class_from_function.<locals>.ClassFromFunctionNr'   r"   r"   r"   r#   ClassFromFunctionS  r+   r   )r{   	signaturereturn_annotation	Signatureemptyrd   rP   rR   r   r   r*   replace	getmodulestackr   rz   rj   r|   getmror   r   r   r   r(   r   setattrr   __doc__r)   )	r   r   r[   r!   caller_moduler   mror   r   r"   r   r#   r   &  sL   
 



r   c              
   C   s   dd l }ddlm}m} | jj|jkrpz9| jj}t|}d| }||}t	|ddd}i |j
d|i}t|| |d	 }	| jj|	_|	|j
|	j< |	W S  tyo }
 z| jjd
| jj d|
 |
d W Y d }
~
|S d }
~
ww |S )Nr   r   )ActionsContainerArgumentGroupz1class _ArgumentGroupAutoSubclass(ArgumentGroup):
z<ast>exec)filenamerL   r   _ArgumentGroupAutoSubclassz1Failed to create ArgumentGroup subclass based on r   )exc_info)ast_corer   r   r?   add_argumentr{   	getsourceparsecompile__globals__r   r)   r(   r   loggerdebug)r9   r   r   r   r   source	class_astcode	namespacegroup_classr!   r"   r"   r#   get_argument_group_class`  s.   



r   r    )TF)r   )T)NN)Hr   r{   r   r0   r4   argparser   collectionsr   	functoolsr   	importlibr   typesr   r   r   typingr	   r
   r   r   r   r   _commonr   r   r   r   r   _loaders_dumpersr   r   
_optionalsr   _pathsr   _type_checkingr   __all__rQ   NoneTypedefault_config_option_helprR   r$   UserWarningr&   r7   r   r8   r   rE   rG   rH   booltuplerZ   ro   rs   r   rx   r   r   r   r   r   r   r   r   r   r   r   r"   r"   r"   r#   <module>   s|     		

-

	


: