o
    qoi,                     @   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 ddlZ	ddl
mZ ddlmZ ddlmZ dd	 ZejG d
d dZejG dd deZejG dd dZejG dd dZejG dd dZejG dd dZG dd de	jZG dd deZG dd deZdd Zdd Zejd d! Zd"e	je fd#d$Z ejG d%d& d&Z!ejG d'd( d(Z"ejG d)d* d*Z#G d+d, d,e	jZ$d"e	je# fd-d.Z%G d/d0 d0ej&Z'G d1d2 d2ej&Z(G d3d4 d4ej&Z)e*d5kre+  dS dS )6zTests for selectors.    N)AnyList)absltest)	selectors)auto_config)person_friend_toyc                 C   s
   ~ ~~dS )Ni   )rngshapedtyper   r   N/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/selectors_test.pyfake_init_fn   s   r   c                   @   s&   e Zd ZU eed< eed< eed< dS )	Attentionr   kernel_init	bias_initN)__name__
__module____qualname__r   __annotations__r   r   r   r   r   #      
 r   c                   @      e Zd ZdZdS )CrossAttentionzExample subclass.Nr   r   r   __doc__r   r   r   r   r   *   s    r   c                   @      e Zd ZU eed< eed< dS )Mlpr   use_biasN)r   r   r   r   r   boolr   r   r   r   r   /      
 r   c                   @   r   )FakeEncoder	attentionmlpNr   r   r   r   r   r   r   r   r   r   r   7   r   r   c                   @   s&   e Zd ZU eed< eed< eed< dS )FakeDecoderself_attentionencoder_decoder_attentionr!   Nr"   r   r   r   r   r#   =   r   r#   c                   @   r   )FakeEncoderDecoderencoderdecoderN)r   r   r   r   r   r#   r   r   r   r   r&   D   r   r&   c                   @   r   )AnyInitializerTagzBase tag class.Nr   r   r   r   r   r)   J       r)   c                   @   r   )KernelInitializerTagz)Sub-tag class for the kernel initializer.Nr   r   r   r   r   r+   N   r*   r+   c                   @   r   )BiasInitializerTagz'Sub-tag class for the bias initializer.Nr   r   r   r   r   r,   R   r*   r,   c                 C      | |iS Nr   nameargsr   r   r   fcnV      r2   c                 C   r-   r.   r   r/   r   r   r   fcn2Z   r3   r4   c                  C   s8   t dd} td| }td| }t dd}td|||gS )Nsharedr   abcroot)r4   r2   )r5   r6   r7   r8   r   r   r   fixture^   s
   



r:   returnc               	   C   sx   t td d d } t jtt tdd| t tddd}t jtt tdd| t tdddt tddd}t t	||S )Nfloat32kernel1F)r    r!   kernel2bias2)r$   r%   r!   )
fdlPartialr   Configr   r   r   r#   r   r&   )r   encoder_cfgdecoder_cfgr   r   r   encoder_decoder_configg   s   
rE   c                   @   s.   e Zd ZU eed< eed< eed< dd ZdS )AddRangestartstopr   c                 C   s   dd t |t| j| jD S )Nc                 S   s   g | ]\}}|| qS r   r   ).0r6   r7   r   r   r   
<listcomp>   s    z%AddRange.__call__.<locals>.<listcomp>)ziprangerG   rH   selfxr   r   r   __call__   s   zAddRange.__call__N)r   r   r   intr   r   rP   r   r   r   r   rF   ~   s
   
 rF   c                   @   s&   e Zd ZU eed< eed< dd ZdS )AddConstantvaluer   c                 C   s
   || j  S r.   rS   rM   r   r   r   rP      s   
zAddConstant.__call__N)r   r   r   r   r   rP   r   r   r   r   rR      s   
 rR   c                   @   s"   e Zd ZU ee ed< dd ZdS )
Sequential
submodulesc                 C   s   | j D ]}||}q|S r.   rV   )rN   rO   moduler   r   r   rP      s   

zSequential.__call__N)r   r   r   r   r   r   rP   r   r   r   r   rU      s   
 rU   c                   @   r   )ActivationDTypez+The requested data-type for module outputs.Nr   r   r   r   r   rY      r*   rY   c                  C   s@   t tddtjdd} t tdtjdd}t jt| |gdS )Nr      r<   )default   rW   )r@   rB   rF   rY   newrR   rU   )	add_range	add_constr   r   r   colab_example_base_config   s   r`   c                   @   s   e Zd Zdd ZdS )SelectionTestc                 C   s   t  }| t tj|ttd W d    n1 sw   Y  | t tj|tdd W d    d S 1 s9w   Y  d S )N)	fn_or_clstagF)rc   match_subclasses)rE   assertRaisesNotImplementedErrorr   selectr   rY   rN   cfgr   r   r   (test_unsupported_select_arg_combinations   s   "z6SelectionTest.test_unsupported_select_arg_combinationsN)r   r   r   rj   r   r   r   r   ra      s    ra   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d Z
dd Zdd Zdd ZdS )NodeSelectionTestc                 C   sn   t  }ttjt|t}| ||j	 | 
||j	j | ||j	j | 
||jj d S r.   )rE   typingcastr   NodeSelectionrg   r   assertFalse_matchesr'   
assertTruer    r!   r(   r%   )rN   ri   selr   r   r   test_matches_based_on_type   s   z,NodeSelectionTest.test_matches_based_on_typec                 C   s.   t  }t|tD ]}| t|t q	d S r.   )rE   r   rg   r   assertIsr@   get_callable)rN   ri   cfg_noder   r   r   test_matches_function_call   s   z,NodeSelectionTest.test_matches_function_callc                 C   sn   t  }| tt|td | ttj|tddd | tt|td | tt|td d S )N   F)rd      r\   )rE   	assertLenlistr   rg   r   r   r   rh   r   r   r   test___iter__   s   zNodeSelectionTest.test___iter__c                 C   sL   t  }| td t|td W d    d S 1 sw   Y  d S )Nzreplace.*not supported.*rootreplaced)r:   as_buildableassertRaisesRegex
ValueErrorr   rg   r2   replacerN   configr   r   r   *test_replace_fails_if_replacing_whole_tree   s   "z<NodeSelectionTest.test_replace_fails_if_replacing_whole_treec                 C   s   t  }t|jd }t|tjdgdd t	
|}| |dddgiddgidggi | |d d d |d d	 d  | |d d d |d d
  | ||jd  d S )Nr0   r}   Fdeepcopyr9   r6   r7   r   r\   ry   )r:   r~   copyr   __argument_history__r   rg   r4   r   r@   buildassertEqualrt   )rN   r   root_name_historybuiltr   r   r   test_replace_shallow_copy   s"   
$ z+NodeSelectionTest.test_replace_shallow_copyc                 C   s   t  }dg}t|t| t|}| |dddgiddgidggi | 	|d d d |d d d  | 
|d d d |d d  | 
|d d d | | 
|d d | d S )Nr}   r9   r6   r7   r   r\   ry   )r:   r~   r   rg   r4   r   r@   r   r   rt   assertIsNot)rN   r   replacementr   r   r   r   test_replace_deep_copy   s$   
$ z(NodeSelectionTest.test_replace_deep_copyc                 C   sd   t tddt tdddgg}t td||g}t|tjd dd | |jd |jd  d S )	Nr5   r\   childry   r9   Tr   r   )	r@   rB   r2   r4   r   rg   r   rt   r1   )rN   shared_fri   r   r   r   test_replace_sharing	  s    z&NodeSelectionTest.test_replace_sharingc                 C   sL   t j }| |jj|jj t|jt j	d  | |jj|jj d S r.   )
r   build_exampler~   rt   r   friendr   rg   Toyr   r   r   r   r   test_replace_doesnt_unlink  s   
z,NodeSelectionTest.test_replace_doesnt_unlinkc                 C   sh   t  }t|tjddd | |jjjd | |j	j
jd | |jjjd | |j	j
jd d S )Noverride_dtypeoverride_init)r   r   )rE   r   rg   r   setr   r'   r    r   r(   r$   r   rh   r   r   r   test_set  s   zNodeSelectionTest.test_setc                 C   sH   t  }| td tj|tdd W d    d S 1 sw   Y  d S )NzSelection.*fcn.*is emptyT)check_nonempty)rE   r   r   r   rg   r2   rh   r   r   r   test_check_nonempty  s   "z%NodeSelectionTest.test_check_nonemptyc                 C   s0   t  }tt|td}| g d| d S )Nr   )r=   r=   r>   )rE   r{   r   rg   r   getassertCountEqual)rN   ri   attention_kernelsr   r   r   test_debug_get#  s
   z NodeSelectionTest.test_debug_getN)r   r   r   rs   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   rk      s    
	rk   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TagSelectionTestc                 C   s^   t  }t|jjdt d|jj_| tt	j
|tddg | tt	j
|tddg d S )Nr   test_init_fnrc   )rE   r@   add_tagr'   r    r+   r   r   r{   r   rg   r)   r   r   r   r   test_iter_values,  s   
z!TagSelectionTest.test_iter_valuesc                 C   s   t jtdd}t |dt t |dt tj|tdjdd tj|tdjdd | 	t 
|tddd | 	ttj|tddg | 	ttj|tddg tj|tdjd	d | 	t 
|tdd	d	 d S )
Nr<   r   r   r   r   rZ   rT   r\   ry   )r@   rB   r   r   r+   r,   r   rg   r   r   r   r{   r)   r   r   r   r   test_select_tag_subclasses6  s   z+TagSelectionTest.test_select_tag_subclassesc                 C   s0   G dd d}t  }tj|tdj| d d S )Nc                   @   s   e Zd ZdS )z6TagSelectionTest.test_colab_example.<locals>.FakeInt32N)r   r   r   r   r   r   r   	FakeInt32H  s    r   r   rT   )r`   r   rg   rY   r   )rN   r   ri   r   r   r   test_colab_exampleF  s   z#TagSelectionTest.test_colab_examplec                 C   s\   t jtdd}t |dt d|_tj|tdjt	dd | 
t |tddd dS )	z>Tests that replace() works when the tag is in the replacement.r<   r   r   ry   r   actual_valuerT   N)r@   rB   r   r   r+   r   r   rg   r   r]   r   r   r   r   r   r   &test_replace_doesnt_infinitely_recurseN  s   z7TagSelectionTest.test_replace_doesnt_infinitely_recursec                 C   sn   t jtdd}t |dt t |dt | ttj	|tdt j
g | ttj	|tdt j
t j
g d S )Nr<   r   r   r   r   )r@   rB   r   r   r+   r,   r   r{   r   rg   NO_VALUEr)   r   r   r   r   test_iterate_no_valuesY  s   
z'TagSelectionTest.test_iterate_no_valuesN)r   r   r   r   r   r   r   r   r   r   r   r   r   *  s    
r   __main__),r   r   dataclassesrl   r   r   absl.testingr   fiddler@   fiddle._srcr   fiddle._src.experimentalr   fiddle._src.testing.exampler   r   	dataclassr   r   r   r   r#   r&   Tagr)   r+   r,   r2   r4   r:   rB   rE   rF   rR   rU   rY   r`   TestCasera   rk   r   r   mainr   r   r   r   <module>   sZ   
		
{=