o
    qoi $                     @   sZ  d Z ddlZddl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ede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dd Zdeje fddZdeje fddZdeje fddZdeje fddZdeje fddZedkrdZdZndZd ZG d!d" d"ejZ edkre!  dS dS )#zTests for codegen.    N)List)absltest)legacy_codegen)	test_utilcodereturnc                 C   s   |    S N)stripsplit)r    r   [/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/codegen/legacy_codegen_test.pytokens   s   r   c                   @   s.   e Zd ZU eed< ejedZe	d  ed< dS )Fooa)default_factoryleavesN)
__name__
__module____qualname__int__annotations__dataclassesfieldlistr   r   r   r   r   r   r       s   
 r   c                   @   s   e Zd ZU eed< eed< dS )Barfoo1foo2N)r   r   r   r   r   r   r   r   r   r   &      
 r   c                   @   s   e Zd ZU eed< eed< dS )BazfoobarN)r   r   r   r   r   r   r   r   r   r   r   ,   r   r   c                 C   s   | S r   r   xr   r   r   identity2   s   r#   c                   C   s(   t jtdt jtddt jtddgdS )N      r      r   r   )fdlConfigr   r   r   r   r   simple_tree6   s   r+   c                  C   sH   t jtdd} t t}| |_t t|_t jtdd|j_| |j_|S )Nr$   r&   r%   )	r)   r*   r   r   r   r   r    r   r   )
shared_foobazr   r   r   shared_config>   s   
r.   c                  C   sF   t tjt} | d}| d|gd}| d|| d| d||gdgdS Nr$   r%   )r   r'         	functoolspartialr)   r*   r   )r   shared1shared2r   r   r   multi_shared_configK   s   r7   c                  C   sD   t tjt} | d| dgd}| d| d|gd| d|gdgdS r/   r2   )r   sharedr   r   r   unshared_child_of_sharedY   s   $r9   c                  C   s(   t jtdd} t jt| t jt| ddS )Nr$   r&   )r   )r   r    )r)   Partialr   r   r   r!   r   r   r   partial_config`   s   r;   __main__ z3from fiddle._src.codegen import legacy_codegen_testzlegacy_codegen_test.c                   @   sT   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S )CodegenTestc                 C   sf   t  }t|}dt dt dt dt dt d}td| }| |t|d|  d S )N
import fiddle as fdl
1


def build_config():
  shared_foo = fdl.Config(z-Foo)
  shared_foo.a = 1

  root = fdl.Config(z6Baz)
  root.foo = shared_foo

  root.bar = fdl.Config(z@Bar)
  root.bar.foo2 = shared_foo

  root.bar.foo1 = fdl.Config(z.Foo)
  root.bar.foo1.a = 2

  return root
    
)	r.   r   codegen_dot_syntaxthis_module_importthis_module_prefixr   joinlinesassertSequenceEqualselfcfgresultexpectedactual_tokensr   r   r   test_codegen_dot_syntax_shareds   s"   
	z*CodegenTest.test_codegen_dot_syntax_sharedc                 C   sb   t  }t|}dt dt dt dt dt dt d}d| }| t|t|| d S )	Nr?   r@   z5Foo)
  shared_foo.a = 1

  shared_foo_2 = fdl.Config(zTFoo)
  shared_foo_2.a = 2
  shared_foo_2.leaves = [shared_foo]

  root = fdl.Config(zFoo)
  root.a = 3
  root.leaves = [shared_foo_2, NotImplemented, NotImplemented]  # fdl.Config sub-nodes will replace NotImplemented

  root.leaves[1] = fdl.Config(z;Foo)
  root.leaves[1].a = 4

  root.leaves[2] = fdl.Config(zdFoo)
  root.leaves[2].a = 5
  root.leaves[2].leaves = [shared_foo, shared_foo_2]

  return root
    rA   )	r7   r   rB   rC   rD   rE   rF   rG   r   )rI   rJ   rK   rL   r   r   r   r   test_codegen_multi_shared   s"   
	z%CodegenTest.test_codegen_multi_sharedc                 C   s   t jtjdt jtjddgd}t|}d}d| }| t	|t	|| i }t
|| |d  }t |}| |jd | |jd | |jd jd | |jd j d S )	Nr$   r%   r&   r(   a3  
import fiddle as fdl
from fiddle._src.codegen import test_util


def build_config():
  root = fdl.Config(test_util.Foo)
  root.a = 1
  root.leaves = [NotImplemented]  # fdl.Config sub-nodes will replace NotImplemented

  root.leaves[0] = fdl.Config(test_util.Foo)
  root.leaves[0].a = 2

  return root
    rA   build_configr   )r)   r*   r   r   r   rB   rE   rF   rG   r   execbuildassertEqualr   	assertLenr   assertEmpty)rI   rJ   rK   rL   r   exec_globalsconfigr   r   r   r   test_codegen_import_and_exec   s   



z(CodegenTest.test_codegen_import_and_execc                 C   sl   t  }t|}dt dt dt dt dt dt d}td| }| |t|d|  d S )	Nr?   r@   z5Foo)
  shared_foo.a = 2

  shared_foo_2 = fdl.Config(zTFoo)
  shared_foo_2.a = 1
  shared_foo_2.leaves = [shared_foo]

  root = fdl.Config(zFoo)
  root.a = 3
  root.leaves = [NotImplemented, NotImplemented]  # fdl.Config sub-nodes will replace NotImplemented

  root.leaves[0] = fdl.Config(zdFoo)
  root.leaves[0].a = 4
  root.leaves[0].leaves = [shared_foo_2]

  root.leaves[1] = fdl.Config(zXFoo)
  root.leaves[1].a = 5
  root.leaves[1].leaves = [shared_foo_2]

  return root
    rA   )	r9   r   rB   rC   rD   r   rE   rF   rG   rH   r   r   r   %test_codegen_unshared_child_of_shared   s&   
	z1CodegenTest.test_codegen_unshared_child_of_sharedc              	   C   s`   t  }t|}dt dt dt dt d	}td| }| |t|d|  d S )Nr?   z2


def build_config():
  shared_foo = fdl.Partial(z.Foo)
  shared_foo.a = 1

  root = fdl.Partial(z7Baz)
  root.foo = shared_foo

  root.bar = fdl.Partial(z5Bar)
  root.bar.foo1 = shared_foo

  return root
    rA   )	r;   r   rB   rC   rD   r   rE   rF   rG   rH   r   r   r   test_codegen_partial   s   
	z CodegenTest.test_codegen_partialc                 C   sD   t jtjjdd}dt| }d}| 	t
|t
|| d S )Nr0   r&   rA   z
import fiddle as fdl
from fiddle._src.codegen import test_util

def build_config():
  root = fdl.Config(test_util.NestedParent.Inner)
  root.a = 4

  return root
    )r)   r*   r   NestedParentInnerrE   r   rB   rF   rG   r   rI   rJ   r   rL   r   r   r   test_codegen_inner_class_name  s   
z)CodegenTest.test_codegen_inner_class_namec                 C   sb   t jtdt jtddid}dt| }dt dt	 dt	 d	}| 
t|t|| d S )
Nr   r$   r&   r!   rA   r?   +


def build_config():
  root = fdl.Config(zidentity)
  root.x = {'foo': NotImplemented}  # fdl.Config sub-nodes will replace NotImplemented

  root.x['foo'] = fdl.Config(z.Foo)
  root.x['foo'].a = 1

  return root
    )r)   r*   r#   r   rE   r   rB   rF   rC   rD   rG   r   r]   r   r   r   test_dict_value  s   	zCodegenTest.test_dict_valuec                 C   s\   t jtddgddgdd}dt| }dt d	t d
}| 	t
|t
|| d S )Nr'   r0   r$   r%   )r    r   r!   rA   r?   r_   zGidentity)
  root.x = {'bar': [3, 4], 'foo': [1, 2]}

  return root
    )r)   r*   r#   rE   r   rB   rF   rC   rD   rG   r   r]   r   r   r   test_deeply_nested_constant-  s   z'CodegenTest.test_deeply_nested_constantc                 C   sR   t jtjdt jtjddgd}dt| }d}| 	t
|t
|| d S )Nr$   r0   r&   r(   rA   a}  
import fiddle as fdl
from fiddle._src.codegen.test_submodule import test_util
from fiddle._src.codegen import test_util as test_util_2


def build_config():
  root = fdl.Config(test_util.Foo)
  root.a = 1
  root.leaves = [NotImplemented]  # fdl.Config sub-nodes will replace NotImplemented

  root.leaves[0] = fdl.Config(test_util_2.Foo)
  root.leaves[0].a = 4

  return root
    )r)   r*   submodule_test_utilr   r   rE   r   rB   rF   rG   r   r]   r   r   r   test_codegen_submodule=  s   z"CodegenTest.test_codegen_submoduleN)r   r   r   rN   rO   rX   rY   rZ   r^   r`   ra   rc   r   r   r   r   r>   q   s     #"r>   )"__doc__r   r3   typingr   absl.testingr   fiddler)   fiddle._src.codegenr   r   "fiddle._src.codegen.test_submodulerb   strr   	dataclassr   r   r   r#   r*   r+   r.   r7   r9   r:   r;   r   rC   rD   TestCaser>   mainr   r   r   r   <module>   s@   	 d