o
    iaW                     @   sj  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mZmZ d dl	m
Z
 d dlmZ d dlmZmZmZ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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'm(Z( ej)dk rxn	 erd dl*m+Z+ ee%ddZ,G dd deZ-dde.B ee. B de/e. fddZ0de1e.df fddZ2ddddedee. de.de3fd d!Z4ded"e5de5fd#d$Z6dee. de.de/e1e.e3f  fd%d&Z7dd'dede/e. de.de/e. fd(d)Z8defd*d+Z9ded,efd-d.Z:defd/d0Z;de/e1d1ef  fd2d3Z<dd'd,edede/e. d4ee de.de1e j=e/e. f fd5d6Z>dS )7    N)CallableIterableSequence)suppress)partial)TYPE_CHECKINGAny
NamedTuple
get_origin)_bool)resolve_optional)ArgumentArgumentCollection)ArgumentOrderErrorCoercionErrorCombinedShortOptionErrorCycloptsErrorMissingArgumentErrorUnknownOptionErrorValidationError)POSITIONAL_ONLYPOSITIONAL_OR_KEYWORD)Token)UNSETis_option_like)      )Groupcli)sourcec                   @   s@   e Zd ZU dZeed< 	 eed< 	 eedf ed< 	 eed< dS )_KeywordMatchz?Represents a matched CLI token with its corresponding argument.matched_tokenargument.keysimplicit_valueN)	__name__
__module____qualname____doc__str__annotations__r   tupler    r,   r,   S/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/cyclopts/bind.pyr    '   s   
 r    tokensreturnc                 C   s>   | d u rt jdd  } | S t| trt| } | S t| } | S )N   )sysargv
isinstancer)   shlexsplitlist)r.   r,   r,   r-   normalize_tokens7   s   

r7   .c                 C   s   | sdS | d j }| dd  D ]7}|j s dS tt||j ddD ]\}\}}||kr<|dkr3  dS |j d | } nq!|d t|j  }q|S )Nr,   r   r0   F)strict)r#   	enumerateziplen)argument_collectioncommonr"   i
common_keyargument_keyr,   r,   r-   _common_root_keysA   s   
 rA   --F)end_of_options_delimiterstop_at_first_unknownr<   rC   rD   c          $      C   s"  g g }}d}|r&z| |}W n	 ty   Y nw ||d  }|d | }t|D ]\}}	|dkr8|d8 }q*t|	ddsR|rL|||d    n||	 q*g }
d}|	do`|	d }d|	v r|	dd\}}z| | |
| |d8 }d}W n ty   |	}Y nw |	}g }d }z|t	|g| |R   W n tyW   |r<t
|	d	kr<|d}d}|t
|k r6|| }d| }z>| |\}}}|tus|jjr|t	|||| |d7 }n||d d  }|t	|||| |r|}|d8 }W n/W n' ty/   |r$|||d   | Y  Y   S || |d7 }Y nw |t
|k s|s;Y q*n|rN|||d   | Y   S ||	 Y q*Y nw t|D ]\}}|d urt|t
|d krt|
| |jjjr|jt|jdd
 q\|jtur|
rzt|
d }W n% ty } z|jd u rt|jd|_|jd u r|j|_ d }~ww |r|jt|j|jd
 q\t|jtr|jt|j|j d
 q\	 q\|jt|j|jd
 q\t
|dkrtdd |D }|dkrtd| d|j|j\}}tt |rQ|jjjrQt D ]!} ||d |   }	|jjj sEt|	rE n|
|	 |d7 }q.nL||7 }t!|D ]C} t
|
dkrv|j"|
sr|j#|
|jrvd} n'||d |   }	|jjj st|	rt$|j|
|jd|
|	 |d7 }qYW d    n	1 sw   Y  |
s|r|jjjrt%|jj&}!t'|!p|! }"|jt|j|"|jd q\t$|j|
|jdt
|
| rt$|j|
|jdt|
D ]\}#}|jt|j||#|jd qq\q*|| |S )Nr   r0   T)allow_numbers-rB   =F   )keywordr$   )rI   c                 s   s(    | ]}|j tu r|jjjsd V  qdS )r0   N)r$   r   r"   	parametercount).0mr,   r,   r-   	<genexpr>   s    z&_parse_kw_and_flags.<locals>.<genexpr>z6Cannot combine multiple value-taking options in token )msg)r"   tokens_so_farrI   )rI   r$   r#   )rI   valueindexr#   )(rS   
ValueErrorr9   r   extendappend
startswithr5   matchr    r;   lstripr   rK   rL   r"   CliTokenr!   r$   r   r   tokenr3   boolsumr   token_countr#   r   
IndexErrorconsume_multiple	itertoolsallow_leading_hyphenrange_should_attempt_json_dict_should_attempt_json_listr   r   hintr
   )$r<   r.   rC   rD   unused_tokenspositional_only_tokensskip_next_iterationsdelimiter_indexr>   r[   
cli_valuesconsume_countallow_combined_flags
cli_option	cli_valuematchesattached_valuecharspositionchar	test_flagargr#   implicit	remaindermatch_indexrX   coerced_valueevalue_taking_counttokens_per_elementconsume_alljrf   empty_containerrS   r,   r,   r-   _parse_kw_and_flagsS   sD  



 




1








lr   starting_indexc              	   C   sx   d}t  D ]3}z| || \}}}W n ty   Y  |S w |jjtur) |S | \}}|r5td||7 }q|S )Nr   z1Cannot have 2 all-consuming positional arguments.)ra   rL   rX   rT   
field_infokindr   r^   )r<   r   n_tokens_to_leaver>   r"   _future_tokens_per_elementfuture_consume_allr,   r,   r-   #_future_positional_only_token_count.  s    
r   c                 C   s^   z|  |}dd | d | D dd | |d d  D  W S  ty.   dd | D  Y S w )Nc                 S      g | ]}|d fqS Fr,   rM   tr,   r,   r-   
<listcomp>A      z1_preprocess_positional_tokens.<locals>.<listcomp>c                 S   r   )Tr,   r   r,   r,   r-   r   A  r   r0   c                 S   r   r   r,   r   r,   r,   r-   r   C  r   )rS   rT   )r.   rC   rj   r,   r,   r-   _preprocess_positional_tokens>  s   
2r   rC   c             	   C   s  g }|sg S t ||}t D ]}z
| |\}}}W n
 ty%   Y  nw |jjtu r_|jr=|jd j	d ur=|
| q|r_|d }|jjsTt|rTtt|d| dt|||d d d| \}	}
td|	}	|
rz|jjtu rzt| |d }nd}g }t|| dkrt|| |	k rt|dd |D dt|d |	 D ]"\}\}}|s|jjst|rtt|d| d|
t||d	 q||	d  }|
snt|| dks||jd d< |s nqd
d |D S )Nr   )rR   )r[   r<   )r"   9prior_positional_or_keyword_supplied_as_keyword_argumentsr[   r0   c                 S      g | ]}|d  qS r   r,   rM   xr,   r,   r-   r   |  r   z_parse_pos.<locals>.<listcomp>)r"   rQ   )rR   rS   c                 S   r   r   r,   r   r,   r,   r-   r     r   )r   ra   rL   rX   rT   r   r   r   r.   rI   rV   rK   rb   r   r   rZ   r   r^   maxr   r   r;   r   r9   )r<   r.   rC   r   tokens_and_force_positionalr>   r"   r   r[   r}   r~   r   
new_tokensrS   force_positionalr,   r,   r-   
_parse_posF  s`   



r   c              
   C   sl   | D ]1}|j rq|jjd usJ |jjD ]}ztj| }W n	 ty&   Y qw |j t||dd  qd S )Nenv)rI   rR   r   )r.   rK   env_varosenvironKeyErrorrV   r   )r<   r"   env_var_nameenv_var_valuer,   r,   r-   
_parse_env  s   r   funcc                 C   s8   t | }| jD ]}|jtur|j|j|jj< q
|S )z+Bind the mapping to the function signature.)	inspect	signaturebind_partial_root_argumentsrR   r   	argumentsr   name)r<   r   boundr"   r,   r,   r-   _bind  s   

r   c                 C   s   |D ]}||  qd S Nr,   )r<   configsconfigr,   r,   r-   _parse_configs  s   
r   r   c                 C   sj   i }t t| jdd dD ]\}}| j|d}t|}||j|df|||f< qdd t| dd	D S )
zSort groups into "deepest common-root-keys first" order.

    This is imperfect, but probably works sufficiently well for practical use-cases.
    c                 S   s   | j S r   )r   )r   r,   r,   r-   <lambda>  s    z_sort_group.<locals>.<lambda>)key)group)keys_prefixc                 S   s   g | ]\}}|qS r,   r,   )rM   r   gar,   r,   r-   r     r   z_sort_group.<locals>.<listcomp>T)reverse)r9   sortedgroups	filter_byrA   items)r<   outr>   r   group_argumentscommon_root_keysr,   r,   r-   _sort_group  s   r   r   c             
   C   s  |}ztt |||d}t|||d}t| t|| |  t|}z|D ]\}}|jD ]}	|	| q,q%W n ttt	fyS }
 zt
|
jrI|
jd nd|d|
d}
~
ww |D ]}|jjrc|jjrc|jrdqV|jslt|dqVt|| }W ||fS  ty }
 z||
_||
_ d}
~
ww )a  Parse and coerce CLI tokens to match a function's signature.

    Parameters
    ----------
    func: Callable
        Function.
    argument_collection: ArgumentCollection
    tokens: list[str]
        CLI tokens to parse and coerce to match ``f``'s signature.
    configs: Iterable[Callable]
    end_of_options_delimiter: str
        Everything after this special token is forced to be supplied as a positional argument.

    Returns
    -------
    bound: inspect.BoundArguments
        The converted and bound positional and keyword arguments for ``f``.

    unused_tokens: list[str]
        Remaining tokens that couldn't be matched to ``f``'s signature.
    r   r    )exception_messager   N)r"   )r   r   r   r   _convertr   	validatorAssertionErrorrT   	TypeErrorr   argsrK   parser   requiredr#   
has_tokensr   r   r   root_input_tokensrg   )r   r<   r.   r   rC   rg   groups_with_argumentsr   r   r   r{   r"   r   r,   r,   r-   create_bound_arguments  sH   



r   )?r   ra   r   r4   r1   collections.abcr   r   r   
contextlibr   	functoolsr   typingr   r   r	   r
   cyclopts._convertr   cyclopts.annotationsr   cyclopts.argumentr   r   cyclopts.exceptionsr   r   r   r   r   r   r   cyclopts.field_infor   r   cyclopts.tokenr   cyclopts.utilsr   r   version_infocyclopts.groupr   rZ   r    r)   r6   r7   r+   rA   r\   r   intr   r   r   r   r   r   r   BoundArgumentsr   r,   r,   r,   r-   <module>   s    $	
"

 \&
G
