o
    qoi,L                     @   s^  d Z ddlZddl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 G dd de
jZG d	d
 d
e
jZdd Zdd ZG dd dZdededefddZejG dd dZdedefddZdefddZdZG dd dejZG d d! d!ejZG d"d# d#ejZ G d$d% d%ejZ!G d&d' d'ejZ"e#d(kre$  dS dS ))zTests for print.    N)Union)absltest)daglish)printingc                   @      e Zd ZdZdS )	SampleTagzSample tag for testing.N__name__
__module____qualname____doc__ r   r   M/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/printing_test.pyr          r   c                   @   r   )
SampleTag2zSecond tag, for fun & profit!Nr   r   r   r   r   r   "   r   r   c                 C      d S Nr   xyr   r   r   fn_x_y&      r   c                 K   r   r   r   )r   r   kwargsr   r   r   fn_with_kwargs*   r   r   c                   @      e Zd Zdd ZdS )SampleClassc                 C   r   r   r   )selfabr   r   r   __init__0   r   zSampleClass.__init__N)r	   r
   r   r   r   r   r   r   r   .       r   r   r   zc                 C   r   r   r   )r   r   r!   r   r   r   fn_with_type_annotations4   r   r"   c                   @   s   e Zd ZU eed< eed< dS )DataclassHelperr   r   N)r	   r
   r   int__annotations__strr   r   r   r   r#   8   s   
 r#   r   c                 K   r   r   r   )r   r   r   r   r   advanced_annotations_helper>   r   r'   c                  K   r   r   r   )r   r   r   r   annotated_kwargs_helperB   r   r(   z&(__main__|fiddle\._src\.printing_test)c                   @   s$   e Zd Zdd Zdd Zdd ZdS )PathStrTestc                 C   s   |  tdd d S )Nr    )assertEqualr   	_path_str)r   r   r   r   
test_emptyM   s   zPathStrTest.test_emptyc                 C   s*   t dt df}| t|d d S )Nfoobarzfoo.bar)r   Attrr+   r   r,   r   pathr   r   r   test_nested_attrP   s   zPathStrTest.test_nested_attrc                 C   s"   t df}| t|d d S )Nr   z[0])r   Indexr+   r   r,   r1   r   r   r   	test_listT   s   zPathStrTest.test_listN)r	   r
   r   r-   r3   r5   r   r   r   r   r)   K   s    r)   c                   @   r   )GetTypeAnnotationTestc                 C   s    t t}| t|d d S )Nr   )fdlConfigr"   assertIsNoner   _get_annotation)r   configr   r   r   test_get_type_annotation_root[   s   
z3GetTypeAnnotationTest.test_get_type_annotation_rootN)r	   r
   r   r<   r   r   r   r   r6   Y   r    r6   c                   @   s   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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 )0AsStrFlattenedTestsc                 C   s    t t|}| || d S r   )reescapetextwrapdedentassertRegex)r   actualexpectedr   r   r   check_resultb   s   z AsStrFlattenedTests.check_resultc                 C   s(   t tdd}t|}| |d d S )N   abcz        x = 1
        y = 'abc')r7   r8   r   r   as_str_flattenedrE   r   cfgoutputr   r   r   test_simple_printingf   s   
z(AsStrFlattenedTests.test_simple_printingc                 C   s0   t td}t|}td}| || d S )NQ	@z&        x = 3.14
        y = <[unset]>r7   r8   r   r   rH   r@   rA   r+   r   rJ   rK   rD   r   r   r   test_unset_argumentn   s   

z'AsStrFlattenedTests.test_unset_argumentc              	   C   s<   t tdt tdd}t|}td}| || d S )Nr   nest_x{   z8        x = 'x'
        y.x = 'nest_x'
        y.y = 123rN   rO   r   r   r   test_nestedw   s   

zAsStrFlattenedTests.test_nestedc                 C   4   t jtddd}t|}td}| || d S )Na_paramrR   r   z%        a = 'a_param'
        b = 123)r7   r8   r   r   rH   r@   rA   r+   rO   r   r   r   
test_class      

zAsStrFlattenedTests.test_classc                 C   rT   )NrF   extra kwarg valuerG   zE        x = 1
        y = <[unset]>
        abc = 'extra kwarg value'r7   r8   r   r   rH   r@   rA   r+   rO   r   r   r   test_kwargs   s   

zAsStrFlattenedTests.test_kwargsc                 C   s>   t jtt jtdddd}t|}td}| || d S )NrF   wheenested_extraextraz        x = <[unset]>
        y = <[unset]>
        extra.x = 1
        extra.y = <[unset]>
        extra.nested_extra = 'whee'r[   rO   r   r   r   test_nested_kwargs   s   

z&AsStrFlattenedTests.test_nested_kwargsc                 C   sF   t tt tddt tdg}t|}td}| || d S )NrF   1   zk        x[0].x = 1
        x[0].y = '1'
        x[1].a = 2
        x[1].b = <[unset]>
        y = <[unset]>)	r7   r8   r   r   r   rH   r@   rA   r+   rO   r   r   r   test_nested_collections   s   


z+AsStrFlattenedTests.test_nested_collectionsc                 C   s`   t tt jtg ddg ddt tt tddgg}t|}td}| || d S )NrF   rd      rZ   rg   rd   rF   r   r   rF   rd   z        x['a'].x = <[unset]>
        x['a'].y = <[unset]>
        x['a'].abc = [1, 2, 3]
        x['b'] = [3, 2, 1]
        y[0].x[0].x = 1
        y[0].x[0].y = 2
        y[0].y = <[unset]>)	r7   r8   r   r   r   rH   r@   rA   r+   rO   r   r   r    test_multiple_nested_collections   s   

z4AsStrFlattenedTests.test_multiple_nested_collectionsc                 C   s:   ddd}t |d}t|}td}| || d S )Nrg   rG   c                 S   r   r   r   wr   r   r!   r   r   r   test_fn   r   z8AsStrFlattenedTests.test_default_values.<locals>.test_fnrF   zk        w = 1
        x = <[unset]>
        y = <[unset; default: 3]>
        z = <[unset; default: 'abc']>rg   rG   )r7   r8   r   rH   r@   rA   r+   r   rm   rJ   rK   rD   r   r   r   test_default_values   s
   


z'AsStrFlattenedTests.test_default_valuesc                 C   st   t jtt tjddd}t|}| |dt dt  t j|tdd t|}| |dt d	t  d S )
NrG   defaultr           x = <[unset]> 
        y = 'abc' cbatagvalue        x = 'cba' 
        y = 'cba' )	r7   r8   r   r   newr   rH   rE   
set_taggedrI   r   r   r   test_tagged_values   s$   

z&AsStrFlattenedTests.test_tagged_valuesc                 C   s   t jtt jttfdt jttfddd}t|}| |dt dt dt dt  t j	|tdd	 t|}| |d
t dt dt dt  d S )N)tagsrG   )r~   rr   r   rs    rt   ru   rv   ry   rz   )
r7   r8   r   TaggedValuer   r   r   rH   rE   r|   rI   r   r   r    test_tagged_values_multiple_tags   s<   

z4AsStrFlattenedTests.test_tagged_values_multiple_tagsc                 C   s   t jtdd}t |dt t |dt t|}| |dt dt  t j|tdd t|}| |d	t d
t  d S )NrG   r   r   r   rs   rt   ru   rv   ry   rz   )	r7   r8   r   add_tagr   r   rH   rE   r|   rI   r   r   r   test_argument_tags   s(   

z&AsStrFlattenedTests.test_argument_tagsc                 C   s   t jtdd}t |dttf t |dttf t|}| |dt dt dt dt  t j	|tdd	 t|}| |d
t dt dt dt  d S )NrG   r   r   r   rs   r   rt   ru   rv   ry   rz   )
r7   r8   r   set_tagsr   r   r   rH   rE   r|   rI   r   r   r    test_argument_tags_multiple_tags	  s8   

z4AsStrFlattenedTests.test_argument_tags_multiple_tagsc                 C   sD   t jtt td}t |dt t|}| |dt d d S )Nr   r   z$        x = <Config[SampleClass()]> z
        y = <[unset]>)	r7   r8   r   r   r   r   r   rH   rE   rI   r   r   r    test_argument_tags_tagged_config  s   
z4AsStrFlattenedTests.test_argument_tags_tagged_configc                 C   s4   t t}d|_t|}td}| || d S )NrG   z'        x = 'abc'
        y = <[unset]>)	r7   Partialr   r   r   rH   r@   rA   r+   r   partialrK   rD   r   r   r   test_partial%  s
   


z AsStrFlattenedTests.test_partialc                 C   s6   t td}d|_t|}td}| || d S )NrF   rG   zF        x: int = 1
        y: str = 'abc'
        z: float = <[unset]>	r7   r8   r"   r   r   rH   r@   rA   r+   rO   r   r   r   test_builtin_types_annotations/  s
   

z2AsStrFlattenedTests.test_builtin_types_annotationsc                 C   s:   t t}t t|_t|}td}| 	|| d S )Nz`        x: SampleClass = <[unset]>
        abc.x: int = <[unset]>
        abc.y: str = <[unset]>)
r7   r8   r'   r#   rG   r   rH   r@   rA   r+   rO   r   r   r   test_advanced_type_annotations:  s
   


z2AsStrFlattenedTests.test_advanced_type_annotationsc                 C   rT   )NrF   oopsr   z*        x: int = 1
        y: int = 'oops')r7   r8   r(   r   rH   r@   rA   r+   rO   r   r   r   test_annotated_kwargsE  rX   z)AsStrFlattenedTests.test_annotated_kwargsc                 C   s:   t td}d|_tj|dd}td}| || d S )NrF   rG   Finclude_typesz5        x = 1
        y = 'abc'
        z = <[unset]>r   rO   r   r   r   test_disabling_type_annotationsN  s
   
z3AsStrFlattenedTests.test_disabling_type_annotationsc                 C   sD   dt ttf fdd}t|d}tj|dd}d}| || d S )Nr   c                 S      t | S r   r$   r   r   r   r   
to_integer[     zAAsStrFlattenedTests.test_can_print_union_type.<locals>.to_integerrF   Tr   zx: typing.Union[int, str] = 1)r   r$   r&   r7   r8   r   rH   r+   r   r   rJ   rK   rD   r   r   r   test_can_print_union_typeY  s
   z-AsStrFlattenedTests.test_can_print_union_typec                 C   sb   t jjdkrt jjdks| d dtt fdd}t|g d}t	
|}d}| || d S )	Nrg   	    types.GenericAlias is 3.9+ only.r   c                 S      | S r   r   r   r   r   r   
takes_listh  r   zLAsStrFlattenedTests.test_can_print_parameterized_generic.<locals>.takes_listrf   zx: list[int] = [1, 2, 3])sysversion_infomajorminorskipTestlistr$   r7   r8   r   rH   r+   r   r   rJ   rK   rD   r   r   r   $test_can_print_parameterized_genericd  s   

z8AsStrFlattenedTests.test_can_print_parameterized_genericc                 C   sD   ddd}t |d}t | t|}td}| || d S )Nrg   rG   c                 S      ~ ~~~d S r   r   rk   r   r   r   rm   s     zEAsStrFlattenedTests.test_materialized_default_values.<locals>.test_fnrF   zC        w = 1
        x = <[unset]>
        y = 3
        z = 'abc'rn   )r7   r8   materialize_defaultsr   rH   r@   rA   r+   ro   r   r   r    test_materialized_default_valuesq  s   



z4AsStrFlattenedTests.test_materialized_default_valuesN)r	   r
   r   rE   rL   rP   rS   rW   r\   rb   re   rj   rp   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   `   s0    	
	
	
	r=   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )HistoryPerLeafParamTestsc                 C   s>   t tdd}d|_t|}tdd}| 	|| d S )NrF   rG   rd   z
        x = 2 @ .*/printing_test.py:\d+:test_simple_history
          - previously: 1 @ .*/printing_test.py:\d+:test_simple_history
        y = 'abc' @ .*/printing_test.py:\d+:test_simple_history
)
r7   r8   r   r   r   history_per_leaf_parameterr@   rA   striprB   rO   r   r   r   test_simple_history  s   
z,HistoryPerLeafParamTests.test_simple_historyc                 C   s   t tt tddt tdg}d|jd _d|jd _d|jd _d|jd _t|}| 	t
|j tdt d	d
}| || d S )NrF   rc   rd   rg   r   rG      aX  
        __fn_or_cls__ = .*fn_x_y .+/printing_test.py:\d+:test_nested_in_collections
        x\[0\].__fn_or_cls__ = .*fn_x_y .+/printing_test.py:\d+:test_nested_in_collections
        x\[0\].x = 4 @ .*/printing_test.py:\d+:test_nested_in_collections
          - previously: 3 @ .*/printing_test.py:\d+:test_nested_in_collections
          - previously: 1 @ .*/printing_test.py:\d+:test_nested_in_collections
        x\[0\].y = 'abc' @ .*/printing_test.py:\d+:test_nested_in_collections
          - previously: '1' @ .*/printing_test.py:\d+:test_nested_in_collections
        x\[1\].__fn_or_cls__ = .*a  .SampleClass.*/printing_test.py:\d+:test_nested_in_collections
        x\[1\].a = 2 @ .*/printing_test.py:\d+:test_nested_in_collections
          - previously: 2 @ .*/printing_test.py:\d+:test_nested_in_collections
        x\[1\].b = <\[unset\]>
        y = <\[unset\]>r   )r7   r8   r   r   r   r   r   r   r   
assertTrue_has_nested_builderr@   rA   _local_module_regexr   rB   rO   r   r   r   test_nested_in_collections  s"   

z3HistoryPerLeafParamTests.test_nested_in_collectionsc                 C   sL   t jtddd}t |t d|_t|}t	d
d}| || d S )NrF   rd   r   123a  
        __fn_or_cls__ = .*fn_with_kwargs .+/printing_test.py:\d+:test_update_callable_history
          - previously: .*fn_x_y .+/printing_test.py:\d+:test_update_callable_history
        x = 1 @ .+/printing_test.py:\d+:test_update_callable_history
        y = 2 @ .+/printing_test.py:\d+:test_update_callable_history
        abc = '123' @ .+/printing_test.py:\d+:test_update_callable_history
        kwargs = <\[unset\]>r   )r7   r8   r   update_callabler   rG   r   r   r@   rA   r   rB   rO   r   r   r   test_update_callable_history  s   
z5HistoryPerLeafParamTests.test_update_callable_historyc                 C   sX   ddd}t j|dd}d|_d|_t | t|}td	d
}| 	|| d S )NrF   rd   c                 S   r   r   r   rk   r   r   r   test_defaulting_helper  r   zZHistoryPerLeafParamTests.test_materialize_defaults_history.<locals>.test_defaulting_helperr   )rl         a~  
        __fn_or_cls__ = .*test_defaulting_helper .+/printing_test.py:\d+:test_materialize_defaults_history
        w = 0 @ .*/printing_test.py:\d+:test_materialize_defaults_history
        y = 6 @ .*/printing_test.py:\d+:test_materialize_defaults_history
          - previously: 5 .*
        z = 2 @ .*/printing_test.py:\d+:test_materialize_defaults_history
        x = <\[unset\]>r   )rF   rd   )
r7   r8   r   r   r   r   r@   rA   r   rB   )r   r   rJ   rK   rD   r   r   r   !test_materialize_defaults_history  s   


z:HistoryPerLeafParamTests.test_materialize_defaults_historyc                 C   s   t jtdd}d|_t jtdd}d|_d|_t||g}d}td	| d
| d| d| d| d| d| 	d}| 
|| d S )NrF   r   rd   rg   r   
   r   z@.*printing_test.py:\d+:test_collection_of_two_buildables_historyz9
        \[0\].__fn_or_cls__ = <function fn_x_y at .*> @ z
        \[0\].x = 2 @ z
          - previously: 1 @ zW
        \[0\].y = <\[unset\]>
        \[1\].__fn_or_cls__ = <function fn_x_y at .*> @ z
        \[1\].y = 4 @ z
          - previously: 3 @ z
        \[1\].x = 10 @ r   )r7   r8   r   r   r   r   r   r@   rA   r   rB   )r   config_aconfig_brK   namerD   r   r   r   )test_collection_of_two_buildables_history  s2   	zBHistoryPerLeafParamTests.test_collection_of_two_buildables_historyN)r	   r
   r   r   r   r   r   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	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#S )$AsFlattenedDictTestsc                 C   s2   t tdd}t|}ddd}| || d S NrF   rG   r   r7   r8   r   r   as_dict_flattenedr+   rO   r   r   r   test_simple_flattened_dict  s   

z/AsFlattenedDictTests.test_simple_flattened_dictc                 C   s.   t td}t|}ddi}| || d S )NrM   r   r   rO   r   r   r   test_skip_unset_argument  s   
z-AsFlattenedDictTests.test_skip_unset_argumentc              	   C   s>   t tdt tdd}t|}dddd}| || d S )Nr   rQ   rR   )r   zy.xzy.yr   rO   r   r   r   rS     s   
z AsFlattenedDictTests.test_nestedc                 C   4   t jtddd}t|}ddd}| || d S )NrU   rR   rV   ri   )r7   r8   r   r   r   r+   rO   r   r   r   rW        

zAsFlattenedDictTests.test_classc                 C   r   )NrF   rY   rZ   )r   rG   r7   r8   r   r   r   r+   rO   r   r   r   r\     r   z AsFlattenedDictTests.test_kwargsc                 C   s>   t jtt jtdddd}t|}ddd}| || d S )NrF   r]   r^   r`   )zextra.xzextra.nested_extrar   rO   r   r   r   rb     s   

z'AsFlattenedDictTests.test_nested_kwargsc                 C   sH   t tt tddt tdg}t|}dddd}| || d S )NrF   rc   rd   )zx[0].xzx[0].yzx[1].a)r7   r8   r   r   r   r   r+   rO   r   r   r   re   
  s   
z,AsFlattenedDictTests.test_nested_collectionsc                 C   sl   t tt jtg ddg ddt tt tddgg}t|}g dg dddd}| || d S )Nrf   rZ   rh   ri   rF   rd   )z
x['a'].abczx['b']zy[0].x[0].xzy[0].x[0].y)r7   r8   r   r   r   r   r+   rO   r   r   r   rj     s   
z5AsFlattenedDictTests.test_multiple_nested_collectionsc                 C   s8   ddd}t |d}t|}ddi}| || d S )Nrg   rG   c                 S   r   r   r   rk   r   r   r   rm   $  r   z>AsFlattenedDictTests.test_skip_default_values.<locals>.test_fnrF   rl   rn   )r7   r8   r   r   r+   ro   r   r   r   test_skip_default_values#  s
   

z-AsFlattenedDictTests.test_skip_default_valuesc                 C   sn   t jtt tjddd}t|}ddi}| || t j|tdd t|}ddd}| || d S )NrG   rq   r   r   ru   rv   )	r7   r8   r   r   r{   r   r   r+   r|   rO   r   r   r   r}   -  s   


z'AsFlattenedDictTests.test_tagged_valuesc                 C   s2   t t}d|_t|}ddi}| || d S )NrG   r   )r7   r   r   r   r   r   r+   r   r   r   r   r   :  s
   

z!AsFlattenedDictTests.test_partialc                 C   6   t td}d|_t|}ddd}| || d S r   r7   r8   r"   r   r   r   r+   rO   r   r   r   r   B  
   

z3AsFlattenedDictTests.test_builtin_types_annotationsc                 C   s4   t jtddd}t|}ddd}| || d S )NrF   r   r   )r7   r8   r(   r   r   r+   rO   r   r   r   r   J  r   z*AsFlattenedDictTests.test_annotated_kwargsc                 C   r   r   r   rO   r   r   r   r   Q  r   z4AsFlattenedDictTests.test_disabling_type_annotationsc                 C   sD   dt ttf fdd}t|d}t|}ddi}| || d S )Nr   c                 S   r   r   r   r   r   r   r   r   Z  r   z8AsFlattenedDictTests.test_union_type.<locals>.to_integerrF   )r   r$   r&   r7   r8   r   r   r+   r   r   r   r   test_union_typeY  s
   
z$AsFlattenedDictTests.test_union_typec                 C   sj   t jjdkrt jjdks| d dtt fdd}t|g d}t	
|}dg di}| || d S )Nrg   r   r   r   c                 S   r   r   r   r   r   r   r   r   g  r   zCAsFlattenedDictTests.test_parameterized_generic.<locals>.takes_listrf   )r   r   r   r   r   r   r$   r7   r8   r   r   r+   r   r   r   r   test_parameterized_genericc  s   

z/AsFlattenedDictTests.test_parameterized_genericc                 C   sF   ddd}t |d}t | t|}dddd}| || d S )Nrg   rG   c                 S   r   r   r   rk   r   r   r   rm   q  r   zFAsFlattenedDictTests.test_materialized_default_values.<locals>.test_fnrF   )rl   r   r!   rn   )r7   r8   r   r   r   r+   ro   r   r   r   r   p  s   


z5AsFlattenedDictTests.test_materialized_default_valuesN)r	   r
   r   r   r   rS   rW   r\   rb   re   rj   r   r}   r   r   r   r   r   r   r   r   r   r   r   r     s$    		

r   __main__)%r   dataclassesr>   r   r@   typingr   absl.testingr   fiddler7   r   fiddle._srcr   Tagr   r   r   r   r   r$   r&   floatr"   	dataclassr#   r'   r(   r   TestCaser)   r6   r=   r   r   r	   mainr   r   r   r   <module>   s@     #[  