o
    qoie                     @   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 ddl	m
Z
 ddlmZ ejG dd	 d	ZG d
d dejZedkrEe  dS dS )zTests for dataclasses.    N)absltest)daglish)	test_util)fake_encoder_decoder)dataclassesc                   @   sB   e Zd ZU dZeed< dZeed< ejddZ	eed< dd	 Z
d
S )PostInitDataclass   a   bF)initcc                 C   s   |  j d7  _ | jd | _d S )Nr      )r   r	   r   )self r   ]/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/experimental/dataclasses_test.py__post_init__"   s   zPostInitDataclass.__post_init__N)__name__
__module____qualname__r	   int__annotations__r   r   fieldr   r   r   r   r   r   r      s
   
 r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
DataclassesTestc                 C   s   t  }t|}| |t j | |tj | t	|t j | |j
jtj | t	|j
jt j | |t| d S )N)r   fixturefdl_dcconvert_dataclasses_to_configsassertIsInstanceFakeEncoderDecoderfdlConfigassertEqualget_callableencodermlpMlpbuild)r   modelconfigr   r   r   #test_convert_dataclasses_to_configs)   s   
z3DataclassesTest.test_convert_dataclasses_to_configsc                 C   s`   t  }| td t| W d    n1 sw   Y  tj|dd}| |t| d S )NzDataclasses.*__post_init__.*T)allow_post_init)r   assertRaisesRegex
ValueErrorr   r   assertNotEqualr   r&   )r   dcr(   r   r   r   #test_post_init_dataclass_conversion7   s   z3DataclassesTest.test_post_init_dataclass_conversionc                 C   s   dt i}| t|| d S )Nfoo)r   r!   r   r   )r   valuer   r   r   #test_convert_reference_to_dataclass?   s   z3DataclassesTest.test_convert_reference_to_dataclassc                 C   sf   t jddddgd}dtjfdd}t||tj }|||}| |t jd	didddgd d S )
N    Fr0   bar)dtypeuse_biassharding_axesstatec                 S   s&   t | trt | tsd| iS || S )Nr1   )
isinstancer   boolmap_children)r1   r8   r   r   r   traverseH   s   
z@DataclassesTest.test_traverse_dataclass_values.<locals>.traverser1   )	r   r%   r   StateMemoizedTraversalr   daglish_dataclass_registryinitial_stater!   )r   r.   r<   r8   transformedr   r   r   test_traverse_dataclass_valuesC   s    

z.DataclassesTest.test_traverse_dataclass_valuesN)r   r   r   r)   r/   r2   rB   r   r   r   r   r   '   s
    r   __main__)__doc__r   absl.testingr   fiddler   r   fiddle._src.testingr   fiddle._src.testing.exampler   fiddle.experimentalr   	dataclassr   TestCaser   r   mainr   r   r   r   <module>   s   
3