o
    qo™iC?  ã                   @   s
  d 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 ejG dd„ dƒƒZG d	d
„ d
eƒ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G dd„ dejƒZG dd„ dejƒZedkrƒe ¡  dS dS )zTests for daglish.é    N)ÚAnyÚ
NamedTuple)Úabsltest)Údaglish)Údaglish_legacyc                   @   ó   e Zd ZU eed< eed< dS )ÚFooÚbarÚbazN©Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__© r   r   ú`/home/ubuntu/.local/lib/python3.10/site-packages/fiddle/_src/experimental/daglish_legacy_test.pyr      s   
 r   c                   @   r   )ÚSampleNamedTupleÚfizzÚbuzzNr   r   r   r   r   r   "   s   
 r   c                   @   s   e Zd ZdZdS )Ú	SampleTagz`fdl.Tag` to use for testing.N)r   r   r   Ú__doc__r   r   r   r   r   '   s    r   c                   @   sL   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S )ÚTraverseWithPathTestc                 C   sh   |   t t¡¡ tddƒ}|   t |¡¡ t dddg¡}|   t |¡¡ |ddƒ}|   t |¡¡ d S )Né   é   ÚCollectionsNamedTupleÚarg1Úarg2)Ú
assertTruer   Úis_namedtuple_subclassr   r   Úis_namedtuple_instanceÚcollectionsÚ
namedtuple)ÚselfÚtyping_namedtupleÚcollections_namedtuple_typeÚcollections_namedtuple_instancer   r   r   Útest_is_namedtuple-   s   
ÿ
ÿz'TraverseWithPathTest.test_is_namedtuplec                    sÜ   t jtdddigtt jtdddd dd}i ‰ ‡ fdd	„}t ||¡}||j|jd
 |jd |jd d |jd d d
 |j|jj|jjj|jjjd
 |jjj|jj	dœ}|  
| ¡ ˆ  ¡ ¡ |  ||¡ |  
||¡ d S )Nr   Úkey©r   ©r   Úboop©r	   r
   ©r   r   c                 3   s    |ˆ t  | ¡< d V S ©N©r   Úpath_str©ÚpathÚvalue©Úvisited_valuesr   r   ÚtraverseC   s   €zDTraverseWithPathTest.test_pretraversal_return_none.<locals>.traverser   ©Ú ú.barú.bar[0]ú.bar[1]z.bar[1]['key']z.bar[1]['key'][0]ú.bazz	.baz.fizzz.baz.fizz.barz.baz.fizz.bar[0]z.baz.fizz.bazz	.baz.buzz)ÚfdlÚConfigr   r   r   Útraverse_with_pathr	   r
   r   r   ÚassertEqualÚitemsÚassertIsNot©r"   Úconfigr5   ÚoutputÚexpectedr   r3   r   Útest_pretraversal_return_none8   s8   ÿÿûôz2TraverseWithPathTest.test_pretraversal_return_nonec                 C   s@   t g d¢dd}dd„ }t ||¡}t ddd}|  ||¡ d S )N©r   r   é   ©é   é   é   r,   c                 s   s.    ~t  | ¡dkrdS t  | ¡dkrdS d V S )Nz.fizzúfizz!z.buzzúbuzz!r.   r0   r   r   r   r5   ^   s   €z?TraverseWithPathTest.test_pretraversal_return.<locals>.traverserM   rN   )r   r   r>   r?   rB   r   r   r   Útest_pretraversal_return[   s
   z-TraverseWithPathTest.test_pretraversal_returnc                 C   s¼   t jtdddigtt jtdddd dd}dd	„ }t ||¡}||j|jd
 |jd |jd d |jd d d
 |j|jj|jjj|jjjd
 |jjj|jj	dœ}|  
| ¡ | ¡ ¡ d S )Nr   r'   r(   r)   r*   r+   r,   c                 s   sN    d V }t  | ¡|i}t  t|ƒ¡}|r%| |¡\}}|D ]}| |¡ q|S r-   )r   r/   Úfind_node_traverserÚtypeÚflattenÚupdate)r1   r2   Ú	new_valuerD   Ú	traverserÚelementsÚ_Úelementr   r   r   r5   s   s   €z@TraverseWithPathTest.test_posttraversal_return.<locals>.traverser   r6   )r<   r=   r   r   r   r>   r	   r
   r   r   r?   r@   rB   r   r   r   Útest_posttraversal_returnj   s2   ÿÿû
ôz.TraverseWithPathTest.test_posttraversal_returnc                 C   sZ   t g d¢dd}dd„ }d}|  t|¡ t ||¡ W d   ƒ d S 1 s&w   Y  d S )NrG   rI   r,   c                 s   s    |V  d S r-   r   )Úunused_pathr2   r   r   r   r5   ’   s   €
z@TraverseWithPathTest.test_yield_non_none_error.<locals>.traversez1The traversal function yielded a non-None value\.)r   ÚassertRaisesRegexÚRuntimeErrorr   r>   )r"   rC   r5   Úmsgr   r   r   Útest_yield_non_none_error   s   "ÿz.TraverseWithPathTest.test_yield_non_none_errorc                 C   sJ   dd„ }d}|   t|¡ t |g ¡ W d   ƒ d S 1 sw   Y  d S )Nc                 s   s    d V  d V  d S r-   r   )rZ   Úunused_valuer   r   r   r5   ›   s   €
z=TraverseWithPathTest.test_yield_twice_error.<locals>.traversez,Does the traversal function have two yields?)r[   r\   r   r>   )r"   r5   r]   r   r   r   Útest_yield_twice_error™   s
   "ÿz+TraverseWithPathTest.test_yield_twice_errorc                 C   s<   ddgddœ}dd„ }t  ||¡}|ddgddœksJ ‚d S )	Nr   r   rG   )ÚaÚbc                 s   s>    |dkrd S t |tƒrdS d V }t |tƒrdd„ |D ƒS |S )Nr   úused to be a tuple...c                 S   s   g | ]
}|d u r
dn|‘qS )Núused to be a two...r   )Ú.0Úxr   r   r   Ú
<listcomp>´   s    zZTraverseWithPathTest.test_doc_example.<locals>.replace_twos_and_tuples.<locals>.<listcomp>)Ú
isinstanceÚtupleÚlist)rZ   r2   rT   r   r   r   Úreplace_twos_and_tuples©   s   €

zFTraverseWithPathTest.test_doc_example.<locals>.replace_twos_and_tuplesrd   rc   )r   r>   )r"   Ú	structurerk   rD   r   r   r   Útest_doc_example£   s   þÿþz%TraverseWithPathTest.test_doc_examplec                 C   s®   t  t¡}|d  d¡ |d  ddg¡ dd„ }t ||¡}|  |t j¡ |  |j	t¡ |  
||¡ tj|dd}d	d
„ | ¡ D ƒ}dgdddgdd|dœ}|  
||¡ d S )Nra   r   rb   r   c                 s   ó    d V S r-   r   r0   r   r   r   Ú<lambda>Å   s   € z7TraverseWithPathTest.test_defaultdict.<locals>.<lambda>F©Úmemoizable_onlyc                 S   s   i | ]
\}}t  |¡|“qS r   r.   )re   r1   r2   r   r   r   Ú
<dictcomp>Í   s    ÿz9TraverseWithPathTest.test_defaultdict.<locals>.<dictcomp>)z['a']z['a'][0]z['b']z['b'][0]z['b'][1]r7   )r    Údefaultdictrj   ÚappendÚextendr   r>   ÚassertIsInstanceÚassertIsÚdefault_factoryr?   Úcollect_value_by_pathr@   )r"   rs   Úidentity_traverserD   Úvalue_by_pathÚvalue_by_path_strrE   r   r   r   Útest_defaultdictÀ   s,   
ÿÿúz%TraverseWithPathTest.test_defaultdictN)r   r   r   r&   rF   rO   rY   r^   r`   rm   r}   r   r   r   r   r   +   s    #%

r   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTraverseWithAllPathsTestc                    sÈ   t jtddd}ddg}t jt||f||gd}i ‰ ‡ fdd„}t ||¡}dgdgdd	gd
dgddgddgddgddgdgdd	gd
dgddgddgddgddgdœ}|  | ¡ ˆ  ¡ ¡ |  |¡ d S )Nr   r   r+   c                 3   s$    dd„ | D ƒˆ t  |¡< d V  d S )Nc                 S   s   g | ]}t  |¡‘qS r   r.   )re   r1   r   r   r   rg   é   s    
ÿzQTraverseWithAllPathsTest.test_collect_paths.<locals>.traverse.<locals>.<listcomp>r.   )Ú	all_pathsÚcurrent_pathr_   ©Úpath_to_all_pathsr   r   r5   è   s
   €ÿ
z=TraverseWithAllPathsTest.test_collect_paths.<locals>.traverser7   r8   r9   ú.baz[0]ú
.bar[0][0]ú
.baz[0][0]ú
.bar[0][1]ú
.baz[0][1]r:   ú.baz[1]ú.bar[1].barú.baz[1].barú.bar[1].bazú.baz[1].bazr;   )r7   r8   r9   r…   r‡   r:   rŠ   rŒ   r;   r„   r†   rˆ   r‰   r‹   r   )r<   r=   r   r   Útraverse_with_all_pathsr?   r@   ÚassertIsNone)r"   Úshared_configÚshared_listrC   r5   rD   rE   r   r‚   r   Útest_collect_pathsÝ   s8   ýñz+TraverseWithAllPathsTest.test_collect_pathsc                 C   óØ   t jtddd}ddg}t jt||f||gd}dd„ }t ||¡}|  |jd |jd ¡ |  |jd |jd ¡ |  |jd |jd ¡ |  |jd |jd ¡ |  |jd |jd ¡ |  |jd |jd ¡ d S )Nr   r   r+   c                 s   s    d V  |S r-   r   )Úunused_all_pathsÚunused_current_pathr2   r   r   r   r5     s   €zNTraverseWithAllPathsTest.test_posttraversal_return_old_value.<locals>.traverser   )r<   r=   r   r   rŽ   rw   r	   r
   ©r"   r   r‘   rC   r5   rD   r   r   r   Ú#test_posttraversal_return_old_value  s   ýz<TraverseWithAllPathsTest.test_posttraversal_return_old_valuec                 C   r“   )Nr   r   r+   c                 s   rn   r-   r   )r”   r•   r_   r   r   r   r5   "  ó   €zNTraverseWithAllPathsTest.test_posttraversal_return_new_value.<locals>.traverser   )r<   r=   r   r   rŽ   rA   r	   r
   r–   r   r   r   Ú#test_posttraversal_return_new_value  ó   ýz<TraverseWithAllPathsTest.test_posttraversal_return_new_valueN)r   r   r   r’   r—   r™   r   r   r   r   r   Û   s    'r   c                   @   s   e Zd Zdd„ ZdS )ÚMemoizedTraverseTestc                 C   sØ   t jtddd}ddg}t jt||f||gd}dd„ }t ||¡}|  |jd |jd ¡ |  |jd |jd ¡ |  |jd |jd ¡ |  |jd |jd ¡ |  |jd |jd ¡ |  |jd |jd ¡ d S )Nr   r   r+   c                 s   rn   r-   r   )r”   r_   r   r   r   r5   9  r˜   z;MemoizedTraverseTest.test_memoizes_values.<locals>.traverser   )	r<   r=   r   r   Úmemoized_traverserA   r	   r
   rw   r–   r   r   r   Útest_memoizes_values0  rš   z)MemoizedTraverseTest.test_memoizes_valuesN)r   r   r   r   r   r   r   r   r›   .  s    r›   c                   @   r~   )ÚCollectPathsByIdTestc                 C   sL   g i t  t¡fD ]}|  t |d¡t|ƒdgi¡ q|  t dd¡i ¡ d S )NTr   )r<   r=   r   r?   r   Úcollect_paths_by_idÚid©r"   Úrootr   r   r   Útest_empty_structureG  s
   ÿz)CollectPathsByIdTest.test_empty_structurec                 C   s4   t  d¡}t|ƒdgi}t |d¡}|  ||¡ d S )Nr   r   T)r   Únewr    r   rŸ   r?   )r"   Útagged_valuerE   Úpaths_by_idr   r   r   Útest_tagged_valueN  s
   

ÿz&CollectPathsByIdTest.test_tagged_valuec                 C   s  t jtddd}ddg}t jt||f||gd}tj|dd}t|ƒdgt|jƒt d¡fgt|j	ƒt d¡fgt|ƒt d¡t 
d	¡ft d¡t 
d	¡fgt|ƒt d¡t 
d¡ft d¡t 
d¡fgi}|  ||¡ |  t¡ tj|d
d}W d   ƒ d S 1 s„w   Y  d S )Nr   r   r+   Trp   r   r	   r
   r   F)r<   r=   r   r   rŸ   r    r	   r   ÚAttrr
   ÚIndexr?   ÚassertRaisesÚ
ValueError)r"   r   r‘   rC   r¦   rE   r   r   r   Útest_collect_paths_by_idV  s4   ýÿ
ÿÿú	ÿ"ÿz-CollectPathsByIdTest.test_collect_paths_by_idN)r   r   r   r£   r§   r¬   r   r   r   r   rž   E  s    rž   c                   @   r~   )ÚCollectValueByIdTestc                 C   s‚   g i t  t¡fD ]}|  t |d¡t|ƒ|i¡ |  t |d¡t|ƒ|i¡ q|  t dd¡i ¡ |  t dd¡tdƒdi¡ d S )NFTr   )r<   r=   r   r?   r   Úcollect_value_by_idr    r¡   r   r   r   r£   s  s   ÿÿÿz)CollectValueByIdTest.test_empty_structurec                 C   s<   t  d¡}t|ƒ|t|jƒdi}t |d¡}|  ||¡ d S )Nr   F)r   r¤   r    r2   r   r®   r?   )r"   r¥   rE   Úvalue_by_idr   r   r   r§   ~  s   
z&CollectValueByIdTest.test_tagged_valuec                 C   sð   t jtddd}g dg}t jt||f||gd}tj|dd}||j|j|||d g}|  | ¡ dd	„ |D ƒ¡ |D ]}|  	|t
|ƒ |¡ q:tj|d
d}| |d |j|jg¡ |  | ¡ dd	„ |D ƒ¡ |D ]}|  	|t
|ƒ |¡ qid S )Nr   r   r+   r   Trp   r   c                 S   ó   g | ]}t |ƒ‘qS r   ©r    ©re   r2   r   r   r   rg   –  ó    zACollectValueByIdTest.test_collect_value_by_id.<locals>.<listcomp>Fc                 S   r°   r   r±   r²   r   r   r   rg      r³   )r<   r=   r   r   r®   r	   r
   ÚassertCountEqualÚkeysrw   r    ru   )r"   r   r‘   ÚcfgÚid_to_valuerE   r2   r   r   r   Útest_collect_value_by_id„  s8   ýúýÿz-CollectValueByIdTest.test_collect_value_by_idN)r   r   r   r£   r§   r¸   r   r   r   r   r­   q  s    r­   c                   @   r~   )ÚCollectValueByPathTestc                 C   sv   g i t  t¡fD ]}|  t |d¡d|i¡ |  t |d¡d|i¡ q|  t dd¡i ¡ |  t dd¡ddi¡ d S )NFr   T)r<   r=   r   r?   r   ry   r¡   r   r   r   r£   §  s   ÿÿz+CollectValueByPathTest.test_empty_structurec                 C   s:   t  d¡}d|t d¡fdi}t |d¡}|  ||¡ d S )Nr   r   r2   F)r   r¤   r   r¨   r   ry   r?   )r"   r¥   rE   r{   r   r   r   r§   ±  s   
z(CollectValueByPathTest.test_tagged_valuec                 C   sd  t jtddd}g dg}t jt||f||gd}tj|dd}d|t d¡f|jt d¡t d¡f|jd t d¡t d¡t d¡f|jd d t d¡t d¡f|jd t d	¡f|j	t d	¡t d¡f|j	d t d	¡t d¡t d¡f|j	d d t d	¡t d¡f|j	d i	}|  
||¡ |D ]}|  || || ¡ q“tj|d
d}| t d¡t d¡t d¡f|jd d t d¡t d¡t d¡f|jd jt d¡t d¡t d	¡f|jd j	t d	¡t d¡t d¡f|j	d d t d	¡t d¡t d¡f|j	d jt d	¡t d¡t d	¡f|j	d j	i¡ |  
||¡ |D ]}|  || || ¡ q"d S )Nr   r   r+   r   Trp   r	   r   r
   F)r<   r=   r   r   ry   r   r¨   r	   r©   r
   r?   rw   rS   )r"   r   r‘   r¶   r{   rE   r1   r   r   r   Útest_collect_value_by_path·  sj   ýÿ

îÿ



ôÿz1CollectValueByPathTest.test_collect_value_by_pathN)r   r   r   r£   r§   rº   r   r   r   r   r¹   ¥  s    
r¹   Ú__main__)r   r    ÚdataclassesÚtypingr   r   Úabsl.testingr   Úfiddler<   r   Úfiddle._src.experimentalr   Ú	dataclassr   r   ÚTagr   ÚTestCaser   r   r›   rž   r­   r¹   r   Úmainr   r   r   r   Ú<module>   s,    1S,4Jÿ