o
    qoi                     @   s   d Z ddl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l	mZ dd	lmZ dd
lmZ ddlmZ ddlZddlZdd Zdedee fddZejfddZG dd dejZG dd dejZedkrve  dS dS )z"Tests for fiddle.extensions.numpy.    )List)absltestN)graphviz)printing)legacy_codegen)special_value_codegen)dtype_module)py_val_to_cst_converter)experimental_top_level_apic                 C      | S N dtyper   r   U/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/extensions/numpy_test.pyfoo!      r   codereturnc                 C   s   |    S r   )stripsplit)r   r   r   r   tokens%   s   r   c                 C   r   r   r   r   r   r   r   foo_with_default)   r   r   c                   @   s&   e Zd Zdd ZdedefddZdS )NoopImportManagerc                 C   s
   g | _ d S r   )callsselfr   r   r   __init__/   s   
zNoopImportManager.__init__module_namer   c                 C   s   | j | |S r   )r   append)r   r   r   r   r   add_by_name2   s   zNoopImportManager.add_by_nameN)__name__
__module____qualname__r   strr    r   r   r   r   r   -   s    r   c                       sd   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  ZS )	NumpyTestc                    s   t    tjj  d S r   )supersetUpfiddle
extensionsnumpyenabler   	__class__r   r   r'   9   s   
zNumpyTest.setUpc                 C   s8   t  }ttj|}| |jdg | t|d dS )zEDirectly tests the effects of enable() through special_value_codegen.r*   znumpy.float32N)r   r   transform_py_valuenpfloat32assertEqualr   repr)r   import_managerfloat32_valuer   r   r   test_enable=   s   zNumpyTest.test_enablec                 C   sB   t jtjtjd}dt|	 }d}| 
t|t| d S )Nr   
z
import fiddle as fdl
from fiddle._src.extensions.test_modules import dtype_module
import numpy as np


def build_config():
  root = fdl.Config(dtype_module.foo)
  root.dtype = np.float16

  return root
    )fdlConfigr   r   r/   float16joinr   codegen_dot_syntaxlinesr1   r   r   configr   expectedr   r   r   test_codegenF   s   zNumpyTest.test_codegenc                 C   s<   t jtjtdd}t|}d}| t	|t	| d S )N
complex128r   z
from fiddle._src.extensions.test_modules import dtype_module
from fiddle.experimental import auto_config


@auto_config.auto_config
def config_fixture():
    return dtype_module.foo(dtype=numpy.dtype('complex128'))
    )
r7   r8   r   r   r/   r   r
   auto_config_codegenr1   r   r=   r   r   r   test_codegen_dtype_instanceW   s   
	z%NumpyTest.test_codegen_dtype_instancec                 C   s,   t jttjd}t|}| d|j d S )Nr   z
np.float16)	r7   r8   r   r/   r9   r   renderassertInsourcer   r>   resultr   r   r   test_graphvizl   s   
zNumpyTest.test_graphvizc                 C   s*   t jttjd}t|}| d| d S )Nr   zdtype = np.float16)r7   r8   r   r/   r9   r   as_str_flattenedr1   rG   r   r   r   test_str_printingq   s   
zNumpyTest.test_str_printingc                 C   s.   t jttdd}t|}| d| dS )zThis is default behavior, NOT the behavior of the numpy extension.

    But it seems to work well enough, so might as well add a test. Feel free
    to change if we do issue qualified import statements.
    r9   r   zdtype = dtype('float16')N)r7   r8   r   r/   r   r   rJ   r1   rG   r   r   r   test_str_printing_plain_dtypev   s   
z'NumpyTest.test_str_printing_plain_dtypec                 C   s:   t jttjd}tj|_t|}d	 }| 
|| d S )Nr   z
dtype = np\.float32 @ .*/numpy_test.py:\d+:test_history_printing
  - previously: np.float16 @ .*/numpy_test.py:\d+:test_history_printing
)r7   r8   r   r/   r9   r0   r   r   history_per_leaf_parameterr   assertRegex)r   r>   rH   r?   r   r   r   test_history_printing   s   
zNumpyTest.test_history_printingc                 C   s$   t t}t|}| d| d S )Nz&dtype = <[unset; default: np.float16]>)r7   r8   r   r   rJ   r1   rG   r   r   r   test_default_printing   s   

zNumpyTest.test_default_printingc                 C   sL   t g dd}| td t| W d    d S 1 sw   Y  d S )N)         r0   z.*ndarray.*)r/   arrayassertRaisesRegex
ValueErrorr	   convert_py_val_to_cst)r   rT   r   r   r   "test_py_val_to_cst_converter_error   s   "z,NumpyTest.test_py_val_to_cst_converter_error)r!   r"   r#   r'   r5   r@   rC   rI   rK   rL   rO   rP   rX   __classcell__r   r   r,   r   r%   7   s    	

r%   __main__) __doc__typingr   absl.testingr   r(   r7   r   r   fiddle._src.codegenr   r   #fiddle._src.extensions.test_modulesr   fiddle.codegenr	   fiddle.codegen.auto_configr
   fiddle.extensions.numpyr*   r/   r   r$   r   r9   r   ImportManagerApir   TestCaser%   r!   mainr   r   r   r   <module>   s*   
`