o
    qoip                     @   s   d Z ddlZddlmZ ddlZddlmZ ddlm	Z	 ej
ddG dd	 d	Zej
ddG d
d deZej
ddG dd dZG dd dejZedkrWe  dS dS )zTests for autobuilders.    N)absltest)autobuilders)autobuilders_test_utilT)frozenc                   @      e Zd ZU eed< eed< dS )	FakeDensein_dimout_dimN)__name__
__module____qualname__int__annotations__ r   r   k/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/experimental/autobuilders/autobuilders_test.pyr         
 r   c                   @      e Zd ZdS )FakeDenseSubclassNr
   r   r   r   r   r   r   r   !   s    r   c                   @   r   )FakeMlpfirst_densesecond_denseN)r
   r   r   r   r   r   r   r   r   r   &   r   r   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	dd Z
dd Zdd Zdd Zdd Zdd Zdd Z  ZS )RegistryTestc                    s   t   t   d S N)r   clear_registrysupersetUpself	__class__r   r   r   .   s   zRegistryTest.setUpc                 C   sh   G dd d}t |dtjfdd}t |}| |tj t|}| || | |jd d S )Nc                   @   s   e Zd Zdd ZdS )z6RegistryTest.test_skeleton_and_get_config.<locals>.Fooc                 S   s
   || _ d S r   x)r   r"   r   r   r   __init__6   s   
z?RegistryTest.test_skeleton_and_get_config.<locals>.Foo.__init__N)r
   r   r   r#   r   r   r   r   Foo4   s    r$   configc                 S   s
   d| _ d S )N   r!   r%   r   r   r   foo_skeleton9   s   
z?RegistryTest.test_skeleton_and_get_config.<locals>.foo_skeletonr&   )	abskeletonfdlConfigr%   assertIsInstancebuildassertEqualr"   )r   r$   r(   foo_builderfoor   r   r   test_skeleton_and_get_config2   s   

z)RegistryTest.test_skeleton_and_get_configc                 C   s   G dd d}|  td t | W d    n1 sw   Y  |  td t| W d    n1 s:w   Y  t|dd  |  td t| W d    d S 1 s_w   Y  d S )Nc                   @   r   )z5RegistryTest.test_get_config_not_present.<locals>.FooNr   r   r   r   r   r$   G   s    r$   z	.*\bFoo\bc                 S      d S r   r   r'   r   r   r   <lambda>Q       z:RegistryTest.test_get_config_not_present.<locals>.<lambda>)assertRaisesRegexKeyErrorr)   Registryr%   	validator)r   r$   r   r   r   test_get_config_not_presentE   s   "z(RegistryTest.test_get_config_not_presentc                 C   s>   t  }dd }|t| | |jtt j|g di d S )Nc                 S   r3   r   r   r'   r   r   r   r4   W   r5   z6RegistryTest.test_skeleton_registers.<locals>.<lambda>skeleton_fn
validators)r)   r8   r*   r   assertDictEqualtable
TableEntryr   registryfnr   r   r   test_skeleton_registersU   s   
z$RegistryTest.test_skeleton_registersc                 C   s`   t  }|tdd  | t jd |tdd  W d    d S 1 s)w   Y  d S )Nc                 S   r3   r   r   r'   r   r   r   r4   _   r5   zORegistryTest.test_skeleton_duplicate_class_registration_error.<locals>.<lambda>z.*FakeDense.*c                 S   r3   r   r   r'   r   r   r   r4   a   r5   )r)   r8   r*   r   r6   DuplicateSkeletonError)r   rB   r   r   r   0test_skeleton_duplicate_class_registration_error]   s
   "z=RegistryTest.test_skeleton_duplicate_class_registration_errorc                 C   sh   dd }t  }||dd  | t jd ||dd  W d    d S 1 s-w   Y  d S )Nc                   S   r3   r   r   r   r   r   r   fake_fnf      zQRegistryTest.test_skeleton_duplicate_function_registration_error.<locals>.fake_fnc                 S   r3   r   r   r'   r   r   r   r4   j   r5   zRRegistryTest.test_skeleton_duplicate_function_registration_error.<locals>.<lambda>z.*fake_fn.*c                 S   r3   r   r   r'   r   r   r   r4   l   r5   )r)   r8   r*   r6   rE   )r   rG   rB   r   r   r   3test_skeleton_duplicate_function_registration_errorc   s   "z@RegistryTest.test_skeleton_duplicate_function_registration_errorc              	   C   st   t tdtjdd fdd}t tdtjdd fdd}tt t}| |ttddd	tddd	d
 d S )Nr%   returnc                 S      d| _ d| _d S N   r   r	   r'   r   r   r   dense_skeletonp      
z<RegistryTest.test_recursive_skeleton.<locals>.dense_skeletonc                 S   s$   t t| _d| j_t t| _d S )N   )r)   r%   r   r   r   r   r'   r   r   r   mlp_skeletonu   s   z:RegistryTest.test_recursive_skeleton.<locals>.mlp_skeletonrQ   rM   rN   r   r   )	r)   r*   r   r+   r,   r   r.   r%   r/   )r   rO   rR   fake_mlpr   r   r   test_recursive_skeletonn   s   

z$RegistryTest.test_recursive_skeletonc              
   C   s6   t t | t ttttttt d S r   r)   auto_skeletonr   r/   r%   r+   r,   r   r   r   r   r   test_auto_skeleton_basic   s
   
z%RegistryTest.test_auto_skeleton_basicc              	   C   s   t tdtjdd fdd}t tdtjdd fdd}t jttd tt 	t}| 
|ttddd	td
dd	d d S )Nr%   rJ   c                 S   rK   rL   rN   r'   r   r   r   rO      rP   zYRegistryTest.test_auto_skeleton_subclasses_and_existing_skeletons.<locals>.dense_skeletonc                 S   s   d| _ d| _d S )N   	   rN   r'   r   r   r   dense_subclass_skeleton   rP   zbRegistryTest.test_auto_skeleton_subclasses_and_existing_skeletons.<locals>.dense_subclass_skeletonr   rM   rN   rY   rZ   rS   )r)   r*   r   r+   r,   r   rW   r   r.   r%   r/   )r   rO   r[   rT   r   r   r   4test_auto_skeleton_subclasses_and_existing_skeletons   s   

zARegistryTest.test_auto_skeleton_subclasses_and_existing_skeletonsc                 C   s4   t jtd d | t ttjtttd d S )Nr\   )r   rV   r   r   r   r   7test_auto_skeleton_allows_none_as_unconfigured_sentinel   s   zDRegistryTest.test_auto_skeleton_allows_none_as_unconfigured_sentinelc                 C   sP   dd }|  t t| W d    n1 sw   Y  tj|td d d S )Nc                 S   s   | | S r   r   r"   yr   r   r   unannotated      zGRegistryTest.test_auto_skeleton_unannotated_raises.<locals>.unannotatedr_   )assertRaises
ValueErrorr)   rW   r   )r   ra   r   r   r   %test_auto_skeleton_unannotated_raises   s
   z2RegistryTest.test_auto_skeleton_unannotated_raisesc                 C   sz   t jG dd d}| td t| W d    n1 s w   Y  tj|d d tt|}| 	|j
d d S )Nc                   @   s   e Zd ZU dZeed< dS )zHRegistryTest.test_auto_skeleton_doesnt_configure_primitives.<locals>.FoorM   r"   N)r
   r   r   r"   r   r   r   r   r   r   r$      s   
 r$   z#Parameter 'x'.*cannot be configuredr!   rM   )dataclasses	dataclassr6   	TypeErrorr)   rW   r+   r.   r%   r/   r"   )r   r$   r1   r   r   r   .test_auto_skeleton_doesnt_configure_primitives   s   z;RegistryTest.test_auto_skeleton_doesnt_configure_primitivesc                 C   s   t jtdd | td t t W d    n1 sw   Y  dd }dd }t j||dd | td	 t | W d    d S 1 sIw   Y  d S )
NT)attributes_require_skeletonszNo skeleton.*FakeDensec                 S   s   | d S )N   r   )zr   r   r   bar   rb   zIRegistryTest.test_auto_skeleton_attribute_skeletons_required.<locals>.barc                 S   s   | S r   r   r!   r   r   r   r1      rH   zIRegistryTest.test_auto_skeleton_attribute_skeletons_required.<locals>.foo)r"   rj   zNo skeleton.*bar)r)   rW   r   r6   r7   r%   )r   rm   r1   r   r   r   /test_auto_skeleton_attribute_skeletons_required   s   "z<RegistryTest.test_auto_skeleton_attribute_skeletons_requiredc                 C   s@   t  }dd }|t| | |jtt jd |gdi d S )Nc                 S   r3   r   r   r'   r   r   r   r4      r5   z7RegistryTest.test_validator_registers.<locals>.<lambda>r;   )r)   r8   r9   r   r>   r?   r@   rA   r   r   r   test_validator_registers   s   
z%RegistryTest.test_validator_registers)r
   r   r   r   r2   r:   rD   rF   rI   rU   rX   r]   r^   re   ri   rn   ro   __classcell__r   r   r   r   r   ,   s    	r   __main__)__doc__rf   absl.testingr   fiddler+   %fiddle._src.experimental.autobuildersr   r)   r   rg   r   r   r   TestCaser   r
   mainr   r   r   r   <module>   s"   


 0