o
    i #                     @   s   d Z ddlZddlZddlZddl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 dd	lmZmZ G d
d dejZeddG dd dZeddG dd dZG dd dZdS )z+Utilities to deal with function signatures.    N)OrderedDictdefaultdict)	dataclassfield)cached_property)GenericAlias   )normalize_type)MISSINGsubtler_typec                       s<   e Zd Z fddZejejdddZedd Z  Z	S )LazySignaturec                    s   t  g  || _d S N)super__init__ovld)selfr   	__class__ R/home/ubuntu/.local/lib/python3.10/site-packages/spaces/_vendor/ovld/signatures.pyr      s   
zLazySignature.__init__)
parametersreturn_annotationc                C   s2   |t ju r
| j }|t ju r| j}t j||dS )N)r   )inspect_voidr   values_return_annotation	Signature)r   r   r   r   r   r   replace   s
   


zLazySignature.replacec                 C   s   | j j}g }|jr|tjdtjd |dd |jD 7 }|dd |jD 7 }|dd |j	D 7 }|dd |j
D 7 }|dd |jD 7 }|d	d |jD 7 }td
d |D S )Nr   namekindc                 S      g | ]
}t j|t jd qS r   )r   	Parameter_POSITIONAL_ONLY.0pr   r   r   
<listcomp>*       z,LazySignature.parameters.<locals>.<listcomp>c                 S      g | ]}t j|t jtd qS )r   r    default)r   r#   r$   r
   r%   r   r   r   r(   1       c                 S   r!   r"   )r   r#   _POSITIONAL_OR_KEYWORDr%   r   r   r   r(   9   r)   c                 S   r*   r+   )r   r#   r.   r
   r%   r   r   r   r(   @   r-   c                 S   r!   r"   )r   r#   _KEYWORD_ONLYr%   r   r   r   r(   H   r)   c                 S   r*   r+   )r   r#   r/   r
   r%   r   r   r   r(   O   r-   c                 S   s   i | ]}|j |qS r   )r   r%   r   r   r   
<dictcomp>W   s    z,LazySignature.parameters.<locals>.<dictcomp>)r   argument_analysis	is_methodappendr   r#   r$   strict_positional_requiredstrict_positional_optionalpositional_requiredpositional_optionalkeyword_requiredkeyword_optionalr   )r   analr   r   r   r   r      s8   zLazySignature.parameters)
__name__
__module____qualname__r   r   r   r   propertyr   __classcell__r   r   r   r   r      s    r   T)frozenc                   @   sR   e Zd ZU eje ed< eje ed< eed< e	ed< e
dd Ze
dd Zd	S )
Arginfopositionr   requiredannc                 C   s   t | jtS r   )
isinstancerD   r   r   r   r   r   
is_complexa   s   zArginfo.is_complexc                 C   s   | j d u r| jS | j S r   )rB   r   rF   r   r   r   	canonicale   s   zArginfo.canonicalN)r;   r<   r=   typingOptionalint__annotations__strbooltyper   rG   rH   r   r   r   r   rA   Z   s   
 
rA   c                   @   s   e Zd ZU eed< eed< eed< eed< eed< eed< e	ed< dZ
eed	< d
Zeed< eed
d
dZee ed< ei fddZdS )r   typesreturn_typereq_posmax_pos	req_namesvarargpriorityr   tiebreakFr2   )default_factoryhashcomparearginfoc                 C   s  g }t |}d}d}t }d}g }	t|j D ]\}
\}}|dks-|dkr<t|ddr<|
dkr9td| dd}qd  }}t|j	||}|j
t ju rc|
| }|| ||jt ju 7 }|d	7 }nQ|j
t ju r|
| }|j}|| ||jt ju 7 }|d	7 }n2|j
t ju r|j}||j|f |jt ju r||j n|j
t ju rtd
|j
t ju rtd|	t|||jt ju |d q| t|t|j|||t|d|d |	d	S )Nr   Fr   clsspecializerzArgument name 'z:' marks a method and must always be in the first position.Tr   zovld does not support *argszovld does not support **kwargs)rB   r   rC   rD   )	rP   rQ   rR   rS   rT   rU   r2   rV   r[   )r   	signatureset	enumerater   itemsgetattr	Exceptionr	   
annotationr    r$   r3   r,   _emptyr.   r   r/   add_VAR_POSITIONAL	TypeError_VAR_KEYWORDrA   tupler   	frozenset)r\   fnlcltypelistsigrS   rR   rT   r2   r[   ir   paramposnmrD   r   r   r   extractw   sr   






	
zSignature.extractN)r;   r<   r=   rj   rL   rO   rK   rk   rN   floatrW   r2   r   listr[   rA   classmethodrt   r   r   r   r   r   j   s   
 r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ArgumentAnalyzerc                 C   s@   t t| _t t| _t dd | _t | _d| _d | _d| _d S )Nc                   S   s   ddgS )Nr   r   r   r   r   r   <lambda>   s    z+ArgumentAnalyzer.__init__.<locals>.<lambda>r   F)	r   r_   name_to_positionsposition_to_namescountscomplex_transformstotalr2   donerF   r   r   r   r      s   


zArgumentAnalyzer.__init__c                 C   s   d| _ | jdd |jD  |jD ]7}|jd ur#| j|j |j |jd ur2| j|j |j	 | j
|j	 }|d  |j7  < |d  d7  < q|  jd7  _| jd u r\|j| _d S | j|jkrftdd S )NFc                 s   s    | ]	}|j r|jV  qd S r   )rG   rH   )r&   argr   r   r   	<genexpr>   s    z'ArgumentAnalyzer.add.<locals>.<genexpr>r   r   zMSome, but not all registered methods define `self`. It should be all or none.)r   r}   updater[   rB   r{   rf   r   rz   rH   r|   rC   r~   r2   rh   )r   ro   r   cntr   r   r   rf      s$   



zArgumentAnalyzer.addc                    sf   j rd S  j D ]#\}}t|dkr-tdd |D r%td| dtd| dq
dd t j D }tt	
d	d
 t|}|  |d t|t|  | |ks^J  fddtD  _ fddtD  _ fddt|D  _ fddt|D  _dd  j D } fdd|D  _ fdd|D  _d _ d S )Nr   c                 s   s    | ]}t |tV  qd S r   rE   rK   r%   r   r   r   r      s    z+ArgumentAnalyzer.compile.<locals>.<genexpr>z
Argument 'z' is declared in different positions by different methods. The same argument name should always be in the same position unless it is strictly positional.z\' is declared in a positional and keyword setting by different methods. It should be either.c                 S   s   g | ]\}}t |qS r   )rv   )r&   _namesr   r   r   r(      s    z,ArgumentAnalyzer.compile.<locals>.<listcomp>c                 S   s   t | dkot| d tS )Nr   r   )lenrE   rM   )r   r   r   r   ry      s    z*ArgumentAnalyzer.compile.<locals>.<lambda>c                    s2   g | ]\}} j | d   jkrd|d  qS r   ARGr   r|   r~   r&   rr   r   rF   r   r   r(      
    c                    s2   g | ]\}} j | d   jkrd|d  qS r   r   r   rF   r   r   r(      r   c                    s4   g | ]\}} j |t  d   jkr|d  qS r   r|   r   r~   r&   rr   r   r   strict_positionalr   r   r(      
    c                    s4   g | ]\}} j |t  d   jkr|d  qS r   r   r   r   r   r   r(      r   c                 S   s    g | ]\}\}t |ts|qS r   r   )r&   r   r   r   r   r   r(     s
    c                    s$   g | ]} j | d   jkr|qS r   r   r&   r   rF   r   r   r(   	      c                    s$   g | ]} j | d   jkr|qS r   r   r   rF   r   r   r(     r   T)r   rz   ra   r   allrh   sortedr{   rv   	itertools	takewhilereversedreverser`   r4   r5   r6   r7   r8   r9   )r   r   rr   p_to_n
positionalkeywordsr   r   r   compile   sX   







zArgumentAnalyzer.compilec                 C   s   || j v rtS tS r   )r}   r   rO   )r   keyr   r   r   
lookup_for  s   zArgumentAnalyzer.lookup_forN)r;   r<   r=   r   rf   r   r   r   r   r   r   rx      s
    	<rx   )__doc__r   r   rI   collectionsr   r   dataclassesr   r   	functoolsr   rP   r   r	   utilsr
   r   r   r   rA   rx   r   r   r   r   <module>   s     KJ