o
    qo™i‡9  ã                   @   s8  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mZm	Z	 ddl
mZ ddl
mZ ddlZddlmZ ddlZG dd„ dejƒZG d	d
„ d
ƒZdde	eef fdd„Zddœdd„Zddd„Zdeje fdd„Zdejfdd„ZejG dd„ dƒƒZG dd„ dejƒZG dd„ dejƒZe dkrše !¡  dS dS ) z%Tests for the `fiddle.config` module.é    N)ÚAnyÚCallableÚDict)Úabsltest)Úparameterized)Úarg_factoryc                   @   s   e Zd ZdZdS )ÚTag1zOne tag.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úL/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/partial_test.pyr       s    r   c                   @   sL   e Zd ZU eed< eed< eed< eed< ddd„Zdd	„ Zed
d„ ƒZdS )ÚSampleClassÚarg1Úarg2Úkwarg1Úkwarg2Nc                 C   s   | j  tƒ ¡ d S ©N)Ú__dict__ÚupdateÚlocals)Úselfr   r   r   r   r   r   r   Ú__init__*   s   zSampleClass.__init__c                 C   s   dS )Né   r   )r   r   r   r   Úa_method-   s   zSampleClass.a_methodc                 C   s
   | ddƒS )Né   é   r   )Úclsr   r   r   Úa_classmethod0   s   
zSampleClass.a_classmethod©NN)	r	   r
   r   r   Ú__annotations__r   r   Úclassmethodr   r   r   r   r   r   $   s   
 
r   Úreturnc                 C   ó   t ƒ S r   ©r   ©r   r   r   r   r   r   r   Úbasic_fn5   ó   r'   ©r   c                G   r$   r   r%   )r   r   Úargsr   r   r   Úfn_with_var_args9   r(   r+   c                 K   r$   r   r%   )r   r   Úkwargsr   r   r   Úfn_with_var_kwargs=   r(   r-   c                   C   s   t jtddS )z3Helper function to create a typed Partial instance.r   ©r   )ÚfdlÚPartialr   r   r   r   r   Úmake_typed_partialA   s   r1   c                 K   s   t j| fi |¤ŽS )z4Helper function which returns an untyped fdl.Config.)r/   r0   )Úarg_to_configurer,   r   r   r   Úmake_untyped_partialF   s   r3   c                   @   s   e Zd ZU dZeed< dS )ÚDataclassChildr   ÚxN)r	   r
   r   r5   Úintr!   r   r   r   r   r4   K   s   
 r4   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d„ Zejejejejgejejejgddd„ ƒZdd„ ZdS )ÚPartialTestc                 C   sp   t  tdd¡}t jtt  t j|¡t  t j|¡d}|  |j|j¡ t	 
|¡}|  |j|j¡ |  |j|j¡ d S )Nr   r   ©r   r   )r/   r0   r   ÚConfigr'   ÚcastÚassertIsNotr   r   ÚcopyÚdeepcopy)r   Úclass_partialÚ	fn_configÚfn_config_copyr   r   r   Útest_deep_copy_partialsR   s   ý
z#PartialTest.test_deep_copy_partialsc                 C   sÂ   t  tdd¡}t |t jt ¡ t  |¡}t |tdtf ¡ |ƒ }t |t¡ |  |tj	¡ |  |t¡ |  
|jd¡ |  
|jd¡ |dddd}|  
|jd¡ |  
|jd¡ |  
|jd¡ d S )Nr   r   .Únew_arg1Únew_arg2Ú
new_kwarg1)r   r   r   )r/   r0   r   Úpytype_extensionsÚassert_typeÚbuildr   ÚassertIsInstanceÚ	functoolsÚpartialÚassertEqualr   r   r   ©r   r>   rJ   Úinstancer   r   r   Útest_partial_for_classes^   s   
z$PartialTest.test_partial_for_classesc                 C   sÀ   t jtddd}t |t jtttf  ¡ |  |j	d¡ |  |j
d¡ d|_	|  |j	d¡ d|_d|_t  |¡}t |tdtttf f ¡ |ƒ }t |tttf ¡ |  |dddddœ¡ d S )	Nr   r   )r   r   r   r   .r&   )r/   r0   r'   rE   rF   r   Ústrr   rK   r   r   r   r   rG   r   )r   Ú
fn_partialrJ   Úvaluer   r   r   Útest_partial_for_functionsp   s0   ÿ
ÿüþz&PartialTest.test_partial_for_functionsc                 C   s`   t ƒ }t |tjt ¡ t |¡}t |tdtf ¡ |dd}|  |j	d¡ |  |j
d¡ d S )N.r   ©r   r   )r1   rE   rF   r/   r0   r   rG   r   rK   r   r   rL   r   r   r   Útest_typed_partialŒ   s   

zPartialTest.test_typed_partialc                 C   sb   t tdd}t |tj¡ t |¡}t |tdtf ¡ |dd}|  	|j
d¡ |  	|jd¡ d S )Nr   r.   .r   rS   )r3   r   rE   rF   r/   r0   rG   r   r   rK   r   r   rL   r   r   r   Útest_untyped_partial•   s   

z PartialTest.test_untyped_partialc                 C   st   t  tdd¡}t  t j|¡}d|_d|_d|_|  |jd¡ t  	|¡}|  |jd¡ |  |jd¡ |  |jd¡ d S )Nr   r   rB   rC   rD   )
r/   r0   r   r:   r9   r   r   r   rK   rG   ©r   r>   Úclass_configrM   r   r   r   Útest_convert_partialž   s   
z PartialTest.test_convert_partialc                 C   sŽ   t  tdd¡}t  tt  t j|¡t  t j|¡¡}t  |¡}|  |jjd¡ |  |jjd¡ |  |jjd¡ |  |jjd¡ |  	|j|j¡ d S )Nr   r   )
r/   r0   r   r9   r:   rG   rK   r   r   r;   rV   r   r   r   Útest_convert_partial_nestedª   s   ý
z'PartialTest.test_convert_partial_nestedc                 C   ó*   t jtdddd}d}|  t|ƒ|¡ d S )Nr   r   r   r)   z7<Partial[SampleClass(arg1=1, arg2=2, kwarg1='kwarg1')]>)r/   r0   r   rK   Úrepr)r   r>   Úexpected_reprr   r   r   Útest_repr_class_partial¸   ó   z#PartialTest.test_repr_class_partialc                 C   rZ   )Nr   r   r   r)   z4<Partial[basic_fn(arg1=1, arg2=2, kwarg1='kwarg1')]>)r/   r0   r'   rK   r[   )r   rP   r\   r   r   r   Útest_repr_fn_partial½   r^   z PartialTest.test_repr_fn_partialc                 C   s,   t  t¡}d|_|  |t t |¡¡¡ d S )NÚ	something)r/   r0   r   r   rK   ÚpickleÚloadsÚdumps©r   Úcfgr   r   r   Útest_pickling_partialÂ   s   
z!PartialTest.test_pickling_partialc                 C   s>   t  tdd¡}t  t¡|_d|j_|  |t t 	|¡¡¡ d S )Nr   Úabcr`   )
r/   r9   r   r0   r   r   rK   ra   rb   rc   rd   r   r   r   Útest_pickling_compositionÇ   s   z%PartialTest.test_pickling_composition)Ú	from_typeÚto_typec                 C   sn   |t ddƒ}t |dt¡ t ||¡}|  ||¡ |  t |¡t |¡¡ |  |j|j¡ |  |j	|j	¡ d S )Nr   r   r   )
r-   r/   Úadd_tagr   r:   rH   rK   Úget_callableÚ__arguments__Ú__argument_tags__)r   ri   rj   Úcfg1Úcfg2r   r   r   Ú	test_castÍ   s   zPartialTest.test_castc              	   C   s–   t  t¡}|  td¡6 | jtjd}t  t j	|¡ |  
|jg ¡ W d   ƒ n1 s,w   Y  W d   ƒ d S W d   ƒ d S 1 sDw   Y  d S )Nz,no logs of level WARNING or higher triggered)Úlevel)r/   r0   r   ÚassertRaisesRegexÚAssertionErrorÚ
assertLogsÚloggingÚWARNINGr:   r9   rK   Úoutput)r   re   Úcmr   r   r   Ú-test_no_warnings_on_casting_partial_to_configÚ   s   
ÿþý"ýz9PartialTest.test_no_warnings_on_casting_partial_to_configN)r	   r
   r   rA   rN   rR   rT   rU   rX   rY   r]   r_   rf   rh   r   Úproductr/   r9   r0   Ú
ArgFactoryrq   rz   r   r   r   r   r7   P   s$    		þ
	r7   c                   @   sD   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S )ÚArgFactoryTestc                 C   sb   t jtdd}t  |¡}|  |jtj¡ |  |jj	t¡ |  
|jjtdd¡ |  
|jjd¡ dS )zBuild an ArgFactory(...).é   r.   r   N)r/   r|   r   rG   rH   ÚfactoryrI   rJ   ÚassertIsÚfuncrK   ÚkeywordsÚdictr*   )r   re   rQ   r   r   r   Útest_build_argfactoryê   s   
z$ArgFactoryTest.test_build_argfactoryc              	   C   s”   t  tt  t¡¡}t  |¡}|  t |¡¡ |  	|tj
ttd¡ |dd}|dd}|  ||¡ |  |ttƒ dddd¡ |  |d |d ¡ dS )z&Build a Partial(..., ArgFactory(...)).r.   é   rS   Nr&   r   )r/   r0   r'   r|   r4   rG   Ú
assertTruer   Úis_arg_factory_partialÚassertPartialsEqualrJ   rK   rƒ   r;   ©r   re   Ú
partial_fnÚv1Úv2r   r   r   Útest_build_partial_argfactoryó   s   
ÿ

ÿz,ArgFactoryTest.test_build_partial_argfactoryc                 C   s  t  tt  tt  t¡¡¡}d|j_d|_t  |¡}|  t	 
|¡¡ |  |tjt	jttjt	jttdddddd¡ |ƒ }|ƒ }|  ||¡ |  |tttƒ dddddddd¡ |  |d t¡ |  |d d t¡ |  |d |d ¡ |  |d d |d d ¡ dS )z7Build a Partial(..., ArgFactory(..., ArgFactory(...))).r   r…   r.   rS   Nr&   r   )r/   r0   r'   r|   r4   r   r   rG   r†   r   r‡   rˆ   rI   rJ   rK   rƒ   rH   r;   r‰   r   r   r   Ú(test_build_partial_argfactory_argfactory  sF   ÿ
ÿþùþüþ	 z7ArgFactoryTest.test_build_partial_argfactory_argfactoryc                 C   s  t  tt  tt  t¡¡¡}d|j_d|_t  |¡}|  	t
 |¡¡ |  |tjt
jttjttƒ ddddd¡ |ƒ }|ƒ }|  ||¡ |  |tttƒ dddddddd¡ |  |d t¡ |  |d d t¡ |  |d |d ¡ |  |d d |d d ¡ dS )	z3Build a Partial(..., ArgFactory(..., Config(...))).r   r…   r8   r.   rS   Nr&   r   )r/   r0   r'   r|   r9   r4   r   r   rG   r†   r   r‡   rˆ   rI   rJ   rK   rƒ   rH   r;   r€   r‰   r   r   r   Ú$test_build_partial_argfactory_config/  sB   ÿ
þûþüþ	 z3ArgFactoryTest.test_build_partial_argfactory_configc              	   C   sp  t  tt  t¡gt  t¡gg d¢dœ¡}t  |¡}|  t	 
|¡¡ |dd}|dd}|  ||¡ |d d d d }|  |t|gtƒ gg d¢dœdddd	¡ |  |d |d ¡ |  |d d |d d ¡ |  |d d d
 |d d d
 ¡ |  |d d d |d d d ¡ |  |d d d d |¡ |  |d d d d |¡ |  |d d |d d ¡ dS )z1Build a Partial(..., Tree(..., ArgFactory(...))).)r   r   r…   )r5   Úyr…   rS   r   r5   r   Nr&   r   r   )r/   r0   r'   r9   Úobjectr|   r4   rG   r†   r   r‡   rK   rƒ   r;   r€   )r   re   rŠ   r‹   rŒ   Úobjr   r   r   Ú"test_build_partial_tree_argfactoryW  s8   þþ


üþ
$$ z1ArgFactoryTest.test_build_partial_tree_argfactoryc              
   C   s  t  t¡}t  t  t¡¡}| |dg |d¡}t t	 t t	 tt¡dg ¡t¡d¡}|  
||¡ |ƒ }|ƒ }|  |g dg g dfd dœ¡ |  |g dg g dfd dœ¡ |  |d |d ¡ |  |d d |d d ¡ |  |d d |d d ¡ |ddd	}|  |g dg g ddfddœ¡ d S )
Nr   r~   )r   r*   r   r   r*   r   é
   é   r)   )r/   r0   r+   rG   r|   ÚlistÚ	__build__rI   rJ   r   rˆ   rK   r;   r€   )r   ÚconfigÚlist_factoryrŠ   Úexpectedr‹   rŒ   Úv3r   r   r   Útest_build_varargs|  s,   
ÿüù	"z!ArgFactoryTest.test_build_varargsc                 C   s   |   t|ƒt|ƒ¡ d S r   )rK   r[   )r   r5   r   r   r   r   rˆ      s   z"ArgFactoryTest.assertPartialsEqualN)
r	   r
   r   r„   r   rŽ   r   r“   rœ   rˆ   r   r   r   r   r}   è   s    	*(%$r}   Ú__main__r    r   )"r   r<   ÚdataclassesrI   rv   ra   Útypingr   r   r   Úabsl.testingr   r   Úfiddler/   r   rE   ÚTagr   r   rO   r'   r+   r-   r0   r1   r3   Ú	dataclassr4   ÚTestCaser7   r}   r	   Úmainr   r   r   r   Ú<module>   s8   
  @ÿ