o
    )Ti9                     @   sJ  U 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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 d	l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 m!Z! d
dl"m#Z# d
dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d
dl,m-Z-m.Z.m/Z/m0Z0 dd Z1dd Z2dd Z3dd Z4dd Z5dd Z6edZ7ee8d< edZ9ee8d< edZ:ee8d< G dd  d eZ;d!e<d"e<fd#d$Z=d@d%e<d&ee>e<  d"e<fd'd(Z?ed)d* Z@d+e<d"e<fd,d-ZAdAd.d/ZBdAd0d1ZCd2ZDd3eDd4d5d6 ZEdBdAd8d9ZFd@d"eGe>e< eHf fd:d;ZId"e>e< fd<d=ZJd"e>e< fd>d?ZKdS )C    N)defaultdict)contextmanagersuppress)
ContextVar)copy)Enum)	find_spec)PIPEPopen)LiteralOptionalUnion   )ActionConfigFile
ActionFail_ActionConfigLoad_ActionHelpClassPathremove_actions)NonParsingAction$get_optionals_as_positionals_actionsget_parsing_setting)get_signature_parameters)ActionTypeHintcallable_origin_typesget_all_subclass_pathsget_callable_return_typeget_typehint_originis_subclasstype_to_str)NoneTypePathimport_objectuniquec                 C   s   t |  t|  d S N)handle_argcomplete_autocompleteadd_print_completion_argument)parser r'   M/home/ubuntu/.local/lib/python3.10/site-packages/jsonargparse/_completions.pyhandle_completions   s   r)   c                 C   sj   t dr1dtjv r3dd l}ddlm} || jd ||  W d    d S 1 s*w   Y  d S d S d S )Nargcomplete_ARGCOMPLETEr   r   )parser_context)load_value_mode)r   osenvironr*   _commonr,   parser_modeautocomplete)r&   r*   r,   r'   r'   r(   r$   #   s   "r$   c                 C   sr   t | dd s
tdsd S td}|s%d| jvr%| jdtddtjd d S |r5d| jvr7| jdtd	 d S d S d S )
Nparent_parsershtabr%   --print_shtabz%(option)s is no longer supported. Use set_parsing_settings(add_print_completion_argument=True) or JSONARGPARSE_ADD_PRINT_COMPLETION_ARGUMENT=true to add --print_completion.)message)actionhelpz--print_completion)r7   )	getattrr   r   _option_string_actionsadd_argumentr   argparseSUPPRESSPrintCompletionAction)r&   print_completion_argumentr'   r'   r(   r%   -   s   
	r%   c                  C   s   ddl m}  |  S )Nr   FilesCompleter)argcomplete.completersrA   r@   r'   r'   r(   get_files_completerB   s   rC   c                 C   s0   | dkrt dj|_||jdd| }|S )Nr*   jsonargparseT)skip_validation)
__import__	Namespace	__class__merge_configget_defaultsas_flat)callerr&   	namespacer'   r'   r(   argcomplete_namespaceH   s   rN   c                 C   s   dd l }| dkrD|| tt+ tdt  d ttd}|	 \}}t
|  }t|d W d    n1 s?w   Y  t d dkrNd	nd
}||d| dgS )Nr    zps -p z -oppid=)stdoutstderr   r   zUTF-8_     )r*   warnr   	Exceptionr
   r.   getppidsplitr	   communicateintdecodestripkilllocale	getlocalereplace)prefixr6   r*   procrP   rS   	shell_pidr'   r'   r(   argcomplete_warn_redraw_promptO   s   

re   shtab_shell
shtab_progshtab_preamblesc                       s0   e Zd Zejejf fdd	ZdddZ  ZS )r>   c                    s.   dd l }t j|||dd |jD dd d S )Nr   c                 S   s   g | ]}d | qS )shtab-r'   ).0shellr'   r'   r(   
<listcomp>r   s    z2PrintCompletionAction.__init__.<locals>.<listcomp>zPrint shell completion script.)option_stringsdestdefaultchoicesr8   )r4   super__init__SUPPORTED_SHELLS)selfrm   rn   ro   kwargsr4   rH   r'   r(   rr   e   s   
zPrintCompletionAction.__init__Nc                 C   s    t || tj|d d S )Nr   )printget_completion_scriptr<   ArgumentParserexit)rt   r&   rM   completion_typeoption_stringr'   r'   r(   __call__v   s   zPrintCompletionAction.__call__r#   )__name__
__module____qualname__r<   r=   rr   r}   __classcell__r'   r'   rv   r(   r>   d   s
    r>   r{   returnc                 K   sP   | dstd| dtdstd| dt| |tdd  fi |S )Nri   zUnsupported completion_type: .r4   z/shtab package is required for completion type 'z'.)
startswith
ValueErrorr   get_shtab_scriptlen)r&   r{   ru   r'   r'   r(   rx   {   s
   
rx   rk   	preamblesc                 C   s   dd l }||jvrtd| dt| j}|sJ |sg }|dkr-|t d|g7 }t||| t	|  W d    n1 sBw   Y  |j
| |d|dS )Nr   z#Unsupported completion_type: shtab-r   bashz%s
)preamble)r4   rs   r   	norm_nameprogbash_compgen_typehintr]   ra   prepare_actions_contextshtab_prepare_actionscompletejoin)r&   rk   r   r4   r   r'   r'   r(   r      s   


r   c              	   c   sl    t | }t|}t|}zd V  W t | t| t| d S t | t| t| w r#   )rf   setrg   rh   reset)rk   r   r   token_shell
token_progtoken_preamblesr'   r'   r(   r      s   






r   namec                 C   s   t dd| S )Nz\W+rS   )resub)r   r'   r'   r(   r      s   r   c                 C   s   t | tf | jd}|r|| jv r| j| | jr)| jj D ]}t	| q"t
drDt| D ]}t|}g |_d|_| j| q1| jD ]}t||  qGd S )Nr5   parse_optionals_as_positionals?)r   r>   r:   get_actionsremove_subcommands_action_name_parser_mapvaluesr   r   r   r   rm   nargsappendshtab_prepare_action)r&   legacy_action	subparserr7   cloner'   r'   r(   r      s    

r   c                 C   s  dd l }| jst| drd S d }t| ttfr|j}nNt| tri| j}t	|t
krBt|ds0J dd |jD }t|dkrB|d }t|tr`t|dsNJ d|jv rW|j}nd	|jv r_|j}n	t|tjri|j}|rp|| _d S d }t| trt| d
i dt }| jr| jd nd }t| j|||\}}	t dkrdt| j }
| jg krd| j d|
 }
t|| |
||	d d }n
t| trt| j}|r|| _d S d S )Nr   r   __args__c              	   S   s$   g | ]}|t ttttthvr|qS r'   )r   strdictlisttuplebytesrj   sr'   r'   r(   rl      s   $ z(shtab_prepare_action.<locals>.<listcomp>r   _modefdsub_add_kwargsskipr   Expected type: z
Argument: ; require_prefix)r4   rp   hasattr
isinstancer   r   FILEr   	_typehintr   r   r   r   r   r    r   	DIRECTORYr.   PathLiker   r9   r   r   rm   get_typehint_choicesrf   r   rn   add_bash_typehint_completionr   get_help_class_choices)r7   r&   r4   r   typehintsubtypesrp   r   rb   r   r6   r'   r'   r(   r      s`   








r   z!_jsonargparse_%s_compgen_typehintaF  
_jsonargparse_%%s_matched_choices() {
  local TOTAL=$(echo "$1" | wc -w | tr -d " ")
  if [ "$TOTAL" != 0 ]; then
    local MATCH=$(echo "$2" | wc -w | tr -d " ")
    printf "; $MATCH/$TOTAL matched choices"
  fi
}
%(name)s() {
  local REQUIRE_PREFIX="$4"
  local MATCH=()
  if [ "$REQUIRE_PREFIX" = 1 ] && [ -z "$2" ]; then
    MATCH=()
  else
    MATCH=( $(IFS=" " compgen -W "$1" "$2") )
  fi
  if [ ${#MATCH[@]} = 0 ]; then
    if [ "$COMP_TYPE" = 63 ]; then
      MATCHED=$(_jsonargparse_%%s_matched_choices "$1" "${MATCH[*]}")
      printf "%(b)s\n$3$MATCHED\n%(n)s" >&2
      kill -WINCH $$
    fi
  else
    for match in "${MATCH[@]}"; do
      echo "$match"
    done
    if [ "$COMP_TYPE" = 63 ]; then
      MATCHED=$(_jsonargparse_%%s_matched_choices "$1" "${MATCH[*]}")
      printf "%(b)s\n$3$MATCHED%(n)s" >&2
    fi
  fi
}
z$(tput setaf 5)z$(tput sgr0))r   bnFc                 C   st   t tt  }| jdd}t d| d|j d}dj||d|||r(dndd	}t	 
| d
|i|_d S )Nz [options] rS   _jsonargparse_r   zM{fn_name}(){{ {fn_typehint} "{choices}" "$1" "{message}" {require_prefix}; }}rU   r   r   )fn_namefn_typehintrp   r6   r   r   )r   bash_compgen_typehint_namerg   r   r   ra   rn   formatr   rh   r   r   )r&   r7   r6   rp   r   r   r   fnr'   r'   r(   r     s   
r   c           	         s\    st   dttt ttf f fdd| \}}}t| tko)|o)|}||fS )Nr   c                    s  | t u rddgddfS | tu rdgddfS t| tr"t| jddfS t| }|tkr_g }| jD ]*}t	|t r@|
t|  q/|d u rJ|
d q/t	|tttfrY|
t| q/|ddfS |tkrg }d}d}| jD ]}| v sv|tu rwql|\}}}	|| |p|}|p|	}ql|||fS t| r |  t|  }|ddfS |tv rt| }
|
rt|
rt| jd }| t|
 }|ddfS g d|
d u fS g ddfS )NtruefalseTFnullr   )boolr   r   r   r   __members__r   r   r   r   r   r   lowerr[   floatr   objectextendr   is_subclass_typehintadd'add_subactions_and_get_subclass_choicesr   r   r   )r   originrp   arghas_explicit_choiceshas_open_valuessubtype
subchoicessubexplicitsubopenreturn_typenum_argsadded_subclassesget_choices_stater&   rb   r   r'   r(   r   %  sV   













z/get_typehint_choices.<locals>.get_choices_state)r   r   r   r   r   r   r   )	r   rb   r&   r   r   rp   r   r   r   r'   r   r(   r   !  s   (1r   c                 C   s  g }t | }tt}tt}|D ]h}	||	 zt|	}
t|
d |j}W n tyB } z|jd|	 d|  W Y d }~qd }~ww t	dd |D d}|dkrW||d  }|D ]}|j
|vrw||j
 |j ||j
 |	ddd  qYq|d ur| D ]O\}}| d| }||jvr||}t|D ]5}t|||||\}}t d	krd
t| d}|dd||  7 }t|||||d q|r||_qq|S )Nz(Unable to get signature parameters for 'z': c                 s   s    | ]
}t |tr|V  qd S r#   )r   r[   r   r'   r'   r(   	<genexpr>h  s    z:add_subactions_and_get_subclass_choices.<locals>.<genexpr>r   r   r   r   r   r   zAccepted by subclasses: z, r   )r   r   r   r   r!   r   _loggerrW   debugnextr   
annotationrsplititemsr:   r;   r"   r   rf   r   r   r   r   rp   )r   rb   r&   r   r   rp   paths	init_args
subclassespathclsparamsexnum_skipparamr   r   r|   r7   r   r   r   r6   r'   r'   r(   r   [  s\   




r   c                 C   sD   g }t | tkr| jD ]}t|r|t| q|S t| }|S r#   )r   r   r   inspectisclassr   r   r   )r   rp   r   r'   r'   r(   r     s   

r   r#   )r   N)F)Lr<   r   r_   r.   r   collectionsr   
contextlibr   r   contextvarsr   r   enumr   importlib.utilr   
subprocessr	   r
   typingr   r   r   r   r   r   r   r   r   r0   r   r   r   _parameter_resolversr   
_typehintsr   r   r   r   r   r   r   _utilr   r    r!   r"   r)   r$   r%   rC   rN   re   rf   __annotations__rg   rh   r>   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   r'   r'   r(   <module>   s\   
 $	
 


3!':.