o
    ,wi#,                     @   s   d Z 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 ddl	m
Z
 ddlmZ ddlZejG dd deZejG d	d
 d
Zdd ZdddddZG dd dejZG dd dejZG dd dejZedkrxe  dS dS )zTests for signatures.    N)absltest)parameterized)
signatures)DataclassBaseWithLocalTypec                   @      e Zd ZU eed< dS )ChildClassWithNonLocalTypethreeN__name__
__module____qualname__int__annotations__ r   r   X/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/fiddle/_src/signatures_test.pyr         
 r   c                   @   s$   e Zd ZU dZejedf ed< dS )TaggedDataclass   some_metadatapseudo_taggedN)r
   r   r   r   typing_extensions	Annotatedr   r   r   r   r   r   r   $   s   
 r   c                  O      t  S Nlocals)argskwargsr   r   r   args_and_kwargs_fn)      r      )kwarg1c               O   r   r   r   )abcr!   r   r   r   r   r   positional_args_fn-   r   r%   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdej	fddZ
dd Zdd ZdS )SignatureCacheTestc                 C   s,   ddt fdd}t| | |tj d S )Nr    r#   c                 S   s   ~ ~d S r   r   )r"   r#   r   r   r   some_fn5      z<SignatureCacheTest.test_signature_is_cached.<locals>.some_fnr    )r   r   get_signatureassertIn_signature_cache)selfr'   r   r   r   test_signature_is_cached3   s   
z+SignatureCacheTest.test_signature_is_cachedc                 C   s\   t t}|j}| |d | j|d dtjjtjj	d | j|d dtjjtjj
d d S )N   r   namedefaultkindr   )r   r*   dict
parameters	assertLencheck_parameterinspect	ParameteremptyVAR_POSITIONALVAR_KEYWORD)r-   	signaturer5   r   r   r   test_can_get_dict_signature;   s   

z.SignatureCacheTest.test_can_get_dict_signaturec                 C   sL   t jddG dd d}| }| t| t|}| d|j d S )NT)eqc                   @   s   e Zd ZddefddZdS )zQSignatureCacheTest.test_can_get_signature_of_unhashable_object.<locals>.SomeClassr    r#   c                 S   s   ~~d S r   r   )r-   r"   r#   r   r   r   __call__O   r(   zZSignatureCacheTest.test_can_get_signature_of_unhashable_object.<locals>.SomeClass.__call__Nr)   )r
   r   r   r   r@   r   r   r   r   	SomeClassL   s    rA   r#   )dataclasses	dataclass
assertTruer   has_signaturer*   r+   r5   )r-   rA   instancer=   r   r   r   +test_can_get_signature_of_unhashable_objectJ   s   

z>SignatureCacheTest.test_can_get_signature_of_unhashable_objectc                 C   s\   G dd d}|  t|  | t t|  W d    d S 1 s'w   Y  d S )Nc                   @   s   e Zd ZdS )zVSignatureCacheTest.test_nonexistent_signature_for_uncallable_object.<locals>.SomeClassN)r
   r   r   r   r   r   r   rA   Y   s    rA   )assertFalser   rE   assertRaises	TypeErrorr*   )r-   rA   r   r   r   0test_nonexistent_signature_for_uncallable_objectW   s
   "zCSignatureCacheTest.test_nonexistent_signature_for_uncallable_objectc                 C   sl   t j}|jdkr2|jdkr4| tt | t	 t
t W d    d S 1 s+w   Y  d S d S d S )N   
   )sysversion_infomajorminorrH   r   rE   printrI   
ValueErrorr*   )r-   versionr   r   r   &test_nonexistent_signature_for_builtin`   s   "z9SignatureCacheTest.test_nonexistent_signature_for_builtinparamc                C   s<   |  |tj | |j| | |j| | |j| d S r   )assertIsInstancer8   r9   assertEqualr1   r2   r3   )r-   rV   r1   r2   r3   r   r   r   r7   g   s   z"SignatureCacheTest.check_parameterc                 C   s   d	dt fdd}t|}|j}| |d | j|d dtjjtjj	d | j|d dtjjtjj	d | j|d ddtjj	d | j|d dtjjtjj
d d S )
N   xc                 [   s
   ~~~| S r   r   )rZ   yzr   r   r   r   fooo   s   z8SignatureCacheTest.test_defaults_and_kwargs.<locals>.foor0   r[   r\   r   )rY   )r   r   r*   r5   r6   r7   r8   r9   r:   POSITIONAL_OR_KEYWORDr<   )r-   r]   r=   r5   r   r   r   test_defaults_and_kwargsm   s8   

z+SignatureCacheTest.test_defaults_and_kwargsc                 C   s   dddd}t |}|j}| |d | j|d dtjjtjjd | j|d dtjjtjj	d | j|d	 d	dtjj
d d S )
NrY   )r\   c               S   s   ~~| S r   r   rZ   r[   r\   r   r   r   bar   s   z;SignatureCacheTest.test_positional_and_kw_only.<locals>.barrL   rZ   r0   r[   r\   )r   r*   r5   r6   r7   r8   r9   r:   POSITIONAL_ONLYr^   KEYWORD_ONLY)r-   ra   r=   r5   r   r   r   test_positional_and_kw_only   s,   

z.SignatureCacheTest.test_positional_and_kw_onlyN)r
   r   r   r.   r>   rG   rK   rU   r8   r9   r7   r_   rd   r   r   r   r   r&   1   s    	r&   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TypeHintsCacheTestc                 C   s,   G dd d}t |}| |dti d S )Nc                   @   s   e Zd ZdefddZdS )z;TypeHintsCacheTest.test_regular_class.<locals>.RegularClassrZ   c                 S      d S r   r   )r-   rZ   r   r   r   __init__      zDTypeHintsCacheTest.test_regular_class.<locals>.RegularClass.__init__N)r
   r   r   r   rg   r   r   r   r   RegularClass   s    ri   rZ   )r   get_type_hintsrX   r   )r-   ri   hintsr   r   r   test_regular_class   s   
z%TypeHintsCacheTest.test_regular_classc                 C   s2   t jG dd d}t|}| |dti d S )Nc                   @   r   )z8TypeHintsCacheTest.test_dataclass.<locals>.SomeDataclassrZ   Nr	   r   r   r   r   SomeDataclass   r   rm   rZ   )rB   rC   r   rj   rX   r   )r-   rm   rk   r   r   r   test_dataclass   s   
z!TypeHintsCacheTest.test_dataclassc                 C   s(   t dg d}t|}| | d S )NSampleTupler`   )collections
namedtupler   rj   assertEmptyr-   ro   rk   r   r   r   test_namedtuple_function   s   
z+TypeHintsCacheTest.test_namedtuple_functionc                 C   s2   G dd dt j}t|}| |ttd d S )Nc                   @   s"   e Zd ZU eed< dZeed< dS )z=TypeHintsCacheTest.test_namedtuple_class.<locals>.SampleTuplerZ   zwhy?r[   N)r
   r   r   r   r   r[   strr   r   r   r   ro      s   
 ro   )rZ   r[   )typing
NamedTupler   rj   rX   r   ru   rs   r   r   r   test_namedtuple_class   s   
z(TypeHintsCacheTest.test_namedtuple_classc                 C      t t}| |i  d S r   )r   rj   objectrX   r-   rk   r   r   r   test_object      
zTypeHintsCacheTest.test_objectc                 C   ry   r   )r   rj   r   rX   r{   r   r   r   test_int   r}   zTypeHintsCacheTest.test_intc                 C   s(   G dd d}t |}| i | d S )Nc                   @   s   e Zd ZdddZdS )zJTypeHintsCacheTest.test_invalid_types.<locals>.ClassWithInvalidAnnotationsoopsAnyc                 S   rf   r   r   )r-   r   r   r   r   rg      rh   zSTypeHintsCacheTest.test_invalid_types.<locals>.ClassWithInvalidAnnotations.__init__N)r   r   )r
   r   r   rg   r   r   r   r   ClassWithInvalidAnnotations   s    r   )r   rj   rX   )r-   r   rk   r   r   r   test_invalid_types   s   
z%TypeHintsCacheTest.test_invalid_typesc                 C   s,   t jtdd}| |dtjtdf i d S )NTinclude_extrasr   r   )r   rj   r   rX   r   r   r   r{   r   r   r   test_annotations_with_extras   s   z/TypeHintsCacheTest.test_annotations_with_extrasc                 C   s6   t jtdd}| |dti | |t td d S )NFr   r   zTesting function defaults.)r   rj   r   rX   r   r{   r   r   r   test_annotations_without_extras   s   z2TypeHintsCacheTest.test_annotations_without_extrasc                 C   s$   t t}| | h d| d S )N>   onetwor   )r   rj   r   rX   keysr{   r   r   r   +test_cross_module_dataclass_with_local_type   s   
z>TypeHintsCacheTest.test_cross_module_dataclass_with_local_typeN)r
   r   r   rl   rn   rt   rx   r|   r~   r   r   r   r   r   r   r   r   re      s    				re   c                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
dddddddddg ddddgddddddddgddigddddddejdgdddgdddddddddg ddddgdddddddg ddddgdd Z  ZS ) SignatureInfoTestc                    s2   t    ttt| _ttt| _	d S r   )
supersetUpr   SignatureInfor8   r=   r%   signature_positionalr   signature_args_and_kwargsr-   	__class__r   r   r      s   

zSignatureInfoTest.setUpc              
   C   s8   t jjtddddddd}| |ddddddd d S )	Nr"   r#   r$   dr    r/   r!   kwarg2r   r    r$   rL   r!   r   )r   r   signature_bindingr%   rX   r-   	argumentsr   r   r   test_signature_binding   s   z(SignatureInfoTest.test_signature_bindingc                 C   sB   |  td tjjtdd W d    d S 1 sw   Y  d S )NzRCannot bind.*ChildClassWithNonLocalType.*unexpected keyword argument 'nonexistent'i  )nonexistent)assertRaisesRegexrJ   r   r   r   r   r   r   r   r   -test_signature_binding_invalid_argument_error  s   "z?SignatureInfoTest.test_signature_binding_invalid_argument_errorc                 C   s$   |  | jjd |  | jjd d S )NrL   r   )rX   r   var_positional_startr   r   r   r   r   test_var_positional_start  s   z+SignatureInfoTest.test_var_positional_startc                 C   s@   t tjd}| | j|t dd | | jtjd d S )NrL   )slicer   VARARGSrX   r   replace_varargs_handle)r-   slcr   r   r   test_replace_varargs_handle  s   z-SignatureInfoTest.test_replace_varargs_handlec                 C   s  ddddd}|  | jd|d |  | jd|d |  | jd|d |  | jd	|d	 |  | jd
|d	 |  | jd|d |  | jd|d |  | jd|d dddd}|  | jd|d |  | jd|d |  | jd
|d d S )Nr"   r#   r$   r   )r   r    r$   rL   r   r    r/   rL   r   )r   r    r/   )rX   r   index_to_keyr   r   r   r   r   test_index_to_key  s&   z#SignatureInfoTest.test_index_to_keyc                 C   s   t  }| | jd|| | | jd|d | | jd|d | | jd|d | | jd|| | | jd|| d S )Nr   r    r/   r$   )rz   rX   r   get_defaultr   )r-   missingr   r   r   test_get_default.  s   z"SignatureInfoTest.test_get_defaultr"   r#   r$   r   r    r/   r   F)r"   r#   r$   r   r   )r   r    r$   )r    r!   r   T)r   r    r!   r   )r"   r#   r    c                 C   s2   | j j|||d\}}| || | || d S )N)include_pos_or_kw_in_argsinclude_no_value)r   transform_to_args_kwargsrX   )r-   r   r   r   expected_argsexpected_kwargsr   r   r   r   r   test_transform_to_args_kwargs;  s   -
z/SignatureInfoTest.test_transform_to_args_kwargs)r
   r   r   r   r   r   r   r   r   r   r   r5   r   NO_VALUEr   __classcell__r   r   r   r   r      sR    	
	

%r   __main__)r   r    )__doc__rp   rB   r8   rN   rv   absl.testingr   r   fiddle._srcr   "fiddle._src.signatures_test_helperr   r   rC   r   r   r   r%   TestCaser&   re   r   r
   mainr   r   r   r   <module>   s0   tI 