U
    łŲfŅ»  ć                   @   s¬   d Z ddlZddlZddlZddlmZmZmZ ddlZddl	m
Z
 ddlZddlZddlZddlZdZdZdZdZG d	d
 d
e
jZG dd de
jZedkrØe ”  dS )z?Tests for utilities working with arbitrarily nested structures.é    N)ŚAnyŚIteratorŚMapping)Śparameterized)©©é   é   é   é   ©é   é   )))Zfoo1Zfoo2Zfoo3Zfoo4)Zfoo5Zfoo6)ZspamŚeggs)r   r   r   )r   c                   @   s   e Zd Zdd ZdS )ŚDoctestTestc                 C   sF   t td}tjt|tjd\}}|  |dd” |  |dd |”” d S )N)ŚcollectionsŚtree)Ś
extraglobsZoptionflagsr   zNo doctests found.z{} doctests failed)r   r   ŚdoctestŚtestmodŚELLIPSISZassertGreaterŚassertEqualŚformat)Śselfr   Z
num_failedZnum_attempted© r   ś5/tmp/pip-target-lpfmz8o1/lib/python/tree/tree_test.pyŚtestDoctest%   s    ž  ’
zDoctestTest.testDoctestN)Ś__name__Ś
__module__Ś__qualname__r   r   r   r   r   r   #   s   r   c                   @   sj  e Zd Zdd Zdd Ze ddddd	d
gdfdddgdfe dddg”d	d
ddfe	 
e dddg”d	d
ddf”g”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e d*d+”Ze d,d+”Ze d-d+”Ze d-d+”Ze d-d.”Ze d/d.”Ze d/d.”Ze d0d+”ZG d1d2 d2eZd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?d@ Z&dAdB Z'dCdD Z(dEdF Z)dGdH Z*dIdJ Z+dKdL Z,dMdN Z-dOdP Z.dQdR Z/dSdT Z0dUdV Z1dWdX Z2dYdZ Z3d[d\ Z4d]d^ Z5d_d` Z6dadb Z7dcdd Z8dedf Z9e dgdhdig”Z:e djdkdlg”Z;e e<g g dme<dndogdpdqgdme<drggggdsgdme<e:de;dndtdud+dvdwdxgdme<e:e;dndtdue;dydzdud+d{d|d}d~gdme<e;dtdduddgdme<e;dtgdduddgdme<e	 
e;dtgddu”ddgdmg”dd Z=e >e<dddddde<dd	d
d+ddddddd+de<ddddgddde<dd
dgd	d
dgd+dddgddgddddgdddgd+dg”dd Z?e >e<ddde@de<ddhd	idid
ie@de<dd
ddgd	dgd+ddgddgde@dg”dd ZAd d” ZBd¢d£ ZCd¤d„ ZDd¦d§ ZEdØd© ZFdŖd« ZGd¬d­ ZHd®dÆ ZId°d± ZJd²d³ ZKd“dµ ZLd¶S )·ŚNestTestc                 C   s   |   t |”|k ” ” d S ©N)Ś
assertTrueŚnpZasarrayŚall)r   ŚaŚbr   r   r   ŚassertAllEquals2   s    zNestTest.assertAllEqualsc              	   C   sø   G dd dt }tjG dd dt }ddg}|| }|  t |”” |  t |”” t |”}|  ||” t 	||”}|  
||” |  ||” |  td” t | ”}W 5 Q R X d S )Nc                   @   s   e Zd ZdZdZdS )z6NestTest.testAttrsFlattenAndUnflatten.<locals>.BadAttrz.Class that has a non-iterable __attrs_attrs__.N)r   r   r   Ś__doc__Z__attrs_attrs__r   r   r   r   ŚBadAttr7   s   r)   c                   @   s   e Zd Ze ” Ze ” ZdS )z9NestTest.testAttrsFlattenAndUnflatten.<locals>.SampleAttrN)r   r   r   ŚattrŚibŚfield1Śfield2r   r   r   r   Ś
SampleAttr;   s   r.   r   r	   zobject is not iterable)Śobjectr*   ŚsŚassertFalser   Z	_is_attrsr"   Śflattenr   Śunflatten_asŚassertIsInstanceŚassertRaisesRegexŚ	TypeError)r   r)   r.   Śfield_valuesZsample_attrŚflatŚrestructured_from_flatr   r   r   ŚtestAttrsFlattenAndUnflatten5   s    
z%NestTest.testAttrsFlattenAndUnflatten)r   r	   r
   é
   é   )ŚBŚAr   r	   r
   r   r   r   ŚPointŚxŚyc                 G   s>   t jG dd dt}|| }t dd |”}|  ||” d S )Nc                   @   s$   e Zd Ze ” Ze ” Ze ” ZdS )z2NestTest.testAttrsMapStructure.<locals>.SampleAttrN)r   r   r   r*   r+   Zfield3r,   r-   r   r   r   r   r.   W   s   r.   c                 S   s   | S r!   r   ©r@   r   r   r   Ś<lambda>^   ó    z0NestTest.testAttrsMapStructure.<locals>.<lambda>)r*   r0   r/   r   Śmap_structurer   )r   r7   r.   Ś	structureZnew_structurer   r   r   ŚtestAttrsMapStructureN   s
    	zNestTest.testAttrsMapStructurec                 C   s  d}dddddddd	g}|   t |”d
dddddddg” |   t ||”d” t dddg”}|ddd|dddfff}ddddg}|   t |”|” t ||”}|   ||” |   |d jd” |   |d jd” |   |d d d jd” |   |d d d jd” |   dgt d”” |   t 	dg”gt t 	dg””” |   dt ddg”” |   t 	dg”t dt 	dg”g”” |  
td” t dddg” W 5 Q R X |  
td” t ddgd” W 5 Q R X |  t”" t ddddggdddg” W 5 Q R X d S )N)©r
   r   r   )r   é   )é	   r;   é   r%   r&   ŚcŚdŚeŚfŚgŚhr
   r   r   r   rI   rJ   r;   rK   )©r%   r&   rL   )rM   rN   )rO   rP   rQ   r?   r@   rA   r	   ©r@   rA   r   r   ZscalarzStructure is a scalarZflat_sequenceZbad_sequence)r   r   r2   r3   r   Ś
namedtupler@   rA   r#   Śarrayr5   Ś
ValueErrorr6   ŚassertRaises)r   rF   r8   Śpointr9   r   r   r   ŚtestFlattenAndUnflattena   s<    "
ž$
 ’z NestTest.testFlattenAndUnflattenc                 C   s`   t  ddddg”}ddddd	}t |”}t |”}|  ddddg|” |  ddddg|” d S )
N©rM   r
   ©r&   r   ©r%   r   ©rL   r	   r
   r   r   r	   ©rM   r&   r%   rL   )r   ŚOrderedDictr   r2   r   )r   ŚorderedŚplainZordered_flatZ
plain_flatr   r   r   ŚtestFlattenDictOrder   s    

zNestTest.testFlattenDictOrderc                 C   sx   t  ddddg”}ddddd}dddd	g}t ||”}t ||”}|  t  d
dddg”|” |  d	dddd|” d S )N©rM   r   ©r&   r   r\   ©rL   r   r   r^   r   r	   r
   rZ   r[   r]   )r   r_   r   r3   r   )r   r`   ra   ŚseqZordered_reconstructionZplain_reconstructionr   r   r   ŚtestUnflattenDictOrder   s    žzNestTest.testUnflattenDictOrderc                 C   sŌ   t  dd”}d|dddt  ddg”gd	d
dg}t |”}|  |dddd	ddddg” d|dddt  ddg”gdd
dg}|  |t ||”” t ||”d d d }|  |t j” |  t| 	” ddg” d S )Nr>   ©r&   rL   Śzr
   r   r   )r&   r
   )r%   r	   r   )rL   r&   é   r	   é   r%   Tr   )r&   rJ   )r%   rK   zhi everybodyrL   r&   )
r   rT   r_   r   r2   r   r3   r4   ŚlistŚkeys)r   Znamed_tupleZmessŚ	flattenedZstructure_of_messZunflattened_ordered_dictr   r   r   Ś!testFlattenAndUnflatten_withDicts   sP    žžų
ó
žžų
ó ’’’’z*NestTest.testFlattenAndUnflatten_withDictsc                 C   s*   t  dddg”}t |”}|  |d” d S )Nr   r	   r
   )r#   rU   r   r2   Ś	assertLen©r   rF   rn   r   r   r   ŚtestFlatten_numpyIsNotFlattenedÄ   s    
z(NestTest.testFlatten_numpyIsNotFlattenedc                 C   s2   d}t  |”}|  |d” |  |t  d|”” d S )Nzlots of lettersr   Śgoodbye)r   r2   rp   r   r3   rq   r   r   r   Ś testFlatten_stringIsNotFlattenedÉ   s    
z)NestTest.testFlatten_stringIsNotFlattenedc                 C   sL   t dd}t |”}|  |d” |  ||g” |  |t t dd|”” d S )Nzbytes in an arrayŚasciir   Śhello)Ś	bytearrayr   r2   rp   r   r3   rq   r   r   r   Ś#testFlatten_bytearrayIsNotFlattenedĻ   s    

’z,NestTest.testFlatten_bytearrayIsNotFlattenedc              	   C   s(   |   td” t dd” W 5 Q R X d S )Nz flat_sequence must be a sequenceŚhiZbye)r5   r6   r   r3   ©r   r   r   r   Ś(testUnflattenSequenceAs_notIterableError×   s    z1NestTest.testUnflattenSequenceAs_notIterableErrorc              	   C   s2   |   td” t ddgdddg” W 5 Q R X d S )Nz;Structure had 2 elements, but flat_sequence had 3 elements.rv   ZworldŚandrs   Zagain)r5   rV   r   r3   rz   r   r   r   Ś)testUnflattenSequenceAs_wrongLengthsErrorŪ   s
    žz2NestTest.testUnflattenSequenceAs_wrongLengthsErrorc                 C   s^   t  tdd gfdd d gfg”}dddg}t  tddgfdddgfg”}|  |t ||”” d S )Nr%   r&   r   r	   r
   )r   Śdefaultdictrl   r   r   r3   )r   rF   ŚsequenceŚexpectedr   r   r   Ś#testUnflattenSequenceAs_defaultdictį   s     ’
 ’z,NestTest.testUnflattenSequenceAs_defaultdictc                 C   sü   |   t d”” |   t d”” |   t d”” |   t tdd”” |  t ddddgg”” |  t d”” |  t g ”” |  t dd	d
”” |   t tdd	g”” t d	dg”}|   t |”” |   t t |””” |   t t d””” d S )NŚ1234s   1234ru   r   r
   r   r   )©rI   rK   r   r	   rR   ©r   r   )	r1   r   Z	is_nestedrw   r"   Śsetr#   ŚonesŚtanh)r   r   r   r   r   ŚtestIsSequenceé   s    zNestTest.testIsSequenceZnamed_0rR   Znamed_1Z	same_namerS   Zsame_name_1Znot_same_namec                   @   s   e Zd ZdS )zNestTest.SameNamedType1N)r   r   r   r   r   r   r   ŚSameNamedType1  s   r   c                 C   s\   t  tt” t  dd” t  dd” t  dd” t  tddd” t  dt ddg”” d S )NŚabcg      š?s   abcru   r   r   )r   Śassert_same_structureŚ
STRUCTURE1Ś
STRUCTURE2rw   r#   rU   rz   r   r   r   ŚtestAssertSameStructure	  s    z NestTest.testAssertSameStructurec              	   C   s(   |   td” t tt” W 5 Q R X d S )NaF  The two structures don't have the same nested structure\.

First structure:.*?

Second structure:.*

More specifically: Substructure "type=tuple str=\(\(1, 2\), 3\)" is a sequence, while substructure "type=str str=spam" is not
Entire first structure:
\(\(\(\., \.\), \.\), \., \(\., \.\)\)\nEntire second structure:
\(\., \.\))r5   rV   r   r   r   Ś STRUCTURE_DIFFERENT_NUM_ELEMENTSrz   r   r   r   Ś,testAssertSameStructure_differentNumElements  s
    žz5NestTest.testAssertSameStructure_differentNumElementsc              	   C   s6   |   td”  t ddgt ddg”” W 5 Q R X d S )NzįThe two structures don't have the same nested structure\.

First structure:.*?

Second structure:.*

More specifically: Substructure "type=list str=\[0, 1\]" is a sequence, while substructure "type=ndarray str=\[0 1\]" is notr   r   )r5   rV   r   r   r#   rU   rz   r   r   r   Ś%testAssertSameStructure_listVsNdArray   s
    žz.NestTest.testAssertSameStructure_listVsNdArrayc              	   C   s,   |   td” t dddg” W 5 Q R X d S )Nz×The two structures don't have the same nested structure\.

First structure:.*?

Second structure:.*

More specifically: Substructure "type=list str=\[0, 1\]" is a sequence, while substructure "type=int str=0" is notr   r   ©r5   rV   r   r   rz   r   r   r   Ś!testAssertSameStructure_intVsList+  s
    žz*NestTest.testAssertSameStructure_intVsListc                 C   s   |   ttjdddg” d S )N©r   r   r   r   )rW   r6   r   r   rz   r   r   r   Ś#testAssertSameStructure_tupleVsList6  s       ’z,NestTest.testAssertSameStructure_tupleVsListc              	   C   s(   |   td” t tt” W 5 Q R X d S )NśPdon't have the same nested structure\.

First structure: .*?

Second structure: )r5   rV   r   r   r   ŚSTRUCTURE_DIFFERENT_NESTINGrz   r   r   r   Ś(testAssertSameStructure_differentNesting:  s
    žz1NestTest.testAssertSameStructure_differentNestingc              	   C   s   |   ttjdt dd”” d S )Nr   r%   r&   )rW   r6   r   r   r    ŚNamed0abrz   r   r   r   Ś)testAssertSameStructure_tupleVsNamedTupleA  s    
’z2NestTest.testAssertSameStructure_tupleVsNamedTuplec                 C   s    t  t dd”t dd”” d S )Nr
   r   r%   r&   )r   r   r    r   rz   r   r   r   Ś7testAssertSameStructure_sameNamedTupleDifferentContentsE  s    
’z@NestTest.testAssertSameStructure_sameNamedTupleDifferentContentsc              	   C   s&   |   ttjt dd”t dd”” d S )Nr
   r   )rW   r6   r   r   r    r   ŚNamed1abrz   r   r   r   Ś,testAssertSameStructure_differentNamedTuplesI  s    

 
’z5NestTest.testAssertSameStructure_differentNamedTuplesc              	   C   s:   |   td”$ t t dd”t dgd”” W 5 Q R X d S ©Nr   r
   r   )r5   rV   r   r   r    r   rz   r   r   r   ŚAtestAssertSameStructure_sameNamedTupleDifferentStructuredContentsM  s    ž’zJNestTest.testAssertSameStructure_sameNamedTupleDifferentStructuredContentsc              	   C   s4   |   td” t dgdgddgg” W 5 Q R X d S r   r   rz   r   r   r   Ś.testAssertSameStructure_differentlyNestedListsU  s
    žz7NestTest.testAssertSameStructure_differentlyNestedListsc              	   C   s^   ddgdgdddgg}|   td” t t|” W 5 Q R X tjttdd	 tjt|dd	 d S )
Nr   r	   r
   r   r   r   z!don't have the same sequence typeF©Ścheck_types)r5   r6   r   r   r   r   )r   Śstructure1_listr   r   r   Ś8testAssertSameStructure_listStructureWithAndWithoutTypes\  s
    zANestTest.testAssertSameStructure_listStructureWithAndWithoutTypesc              	   C   s0   |   td” t ddiddi” W 5 Q R X d S )Nzdon't have the same set of keysr%   r   r&   r   rz   r   r   r   Ś/testAssertSameStructure_dictionaryDifferentKeysc  s    z8NestTest.testAssertSameStructure_dictionaryDifferentKeysc                 C   s    t  t dd”t dd”” d S ©Nr   r   r	   r
   )r   r   r    Ś
SameNameabŚSameNameab2rz   r   r   r   Ś+testAssertSameStructure_sameNameNamedTuplesg  s    
’z4NestTest.testAssertSameStructure_sameNameNamedTuplesc              	   C   s0   t  t t dd”d”t t dd”d”” d S )Nr   r   r	   r
   r   )r   r   r    r§   ŚSameName1xyrØ   ŚSameName1xy2rz   r   r   r   Ś1testAssertSameStructure_sameNameNamedTuplesNestedk  s    žz:NestTest.testAssertSameStructure_sameNameNamedTuplesNestedc              
   C   sL   d}|   t|”2 t t dt dd””t t dd”d”” W 5 Q R X d S )Nz(The two structures don't have the same.*r   r   r	   )r5   rV   r   r   r    r§   rØ   )r   Zexpected_messager   r   r   Ś=testAssertSameStructure_sameNameNamedTuplesDifferentStructurer  s    žzFNestTest.testAssertSameStructure_sameNameNamedTuplesDifferentStructurec              	   C   s&   |   ttjt dd”t dd”” d S r¦   )rW   r6   r   r   r    r§   ŚNotSameNamerz   r   r   r   Ś4testAssertSameStructure_differentNameNamedStructuresy  s    

 
’z=NestTest.testAssertSameStructure_differentNameNamedStructuresc              	   C   s&   |   ttjt dd”t dd”” d S r¦   )rW   r6   r   r   r    r§   Ś
SameNamexyrz   r   r   r   Ś3testAssertSameStructure_sameNameDifferentFieldNames}  s    

 
’z<NestTest.testAssertSameStructure_sameNameDifferentFieldNamesc              	   C   s&   |   ttjt dd”t dd”” d S r¦   )rW   r6   r   r   r    r§   r   rz   r   r   r   Ś/testAssertSameStructure_classWrappingNamedTuple  s    

 
’z8NestTest.testAssertSameStructure_classWrappingNamedTuplec              	   C   sī  d}t  dd t”}t  t|” |  dddddd	gt  |”” t  d
d t|”}|  d|” |  dt  dd d”” |  d	t  dd dd”” |  dt  dd d”” |  g t  dd g ”” |  i t  dd i ”” t dd”}|  | t  dd | ”” |  	dt  dd g ”” |  
td” t  d|” W 5 Q R X |  
td” t  dd ” W 5 Q R X |  
td” t  dd dd” W 5 Q R X |  
td” t  dd dd ” W 5 Q R X |  
td!” t  d"d d#ddg” W 5 Q R X |  
td” t  d$d d#d%” W 5 Q R X d&dgdgdddgg}|  
td!” t  d'd t|” W 5 Q R X t jd(d t|d)d* |  
td” t jd+d d#d%d)d* W 5 Q R X |  
td,” t jd-d td.d/ W 5 Q R X |  
td,” t jd0d td)d.d1 W 5 Q R X d S )2N))r   rJ   r;   )é   é   c                 S   s   | d S ©Nr   r   rB   r   r   r   rC     rD   z+NestTest.testMapStructure.<locals>.<lambda>r	   r
   r   r   r   rI   c                 S   s   | | S r!   r   rS   r   r   r   rC     rD   )))rK   r;   r“   rk   )é   é   c                 S   s   | d S rµ   r   rB   r   r   r   rC     rD   c                 S   s   | | S r!   r   rS   r   r   r   rC     rD   r   c                 S   s   | d S rµ   r   rB   r   r   r   rC     rD   c                 S   s   | d S rµ   r   rB   r   r   r   rC     rD   c                 S   s   | d S rµ   r   rB   r   r   r   rC     rD   Śempty_ntŚ c                 S   s   | d S rµ   r   rB   r   r   r   rC     rD   c                 S   s   | d S rµ   r   rB   r   r   r   rC      rD   ŚcallableŚbadzat least one structurec                 S   s   | S r!   r   rB   r   r   r   rC   ¦  rD   zsame number of elementsc                 S   s   d S r!   r   rS   r   r   r   rC   ©  rD   rH   )r
   r   r   zsame nested structurec                 S   s   d S r!   r   rS   r   r   r   rC   ¬  rD   ©r
   zsame sequence typec                 S   s   d S r!   r   rS   r   r   r   rC   Æ  rD   )rH   r   c                 S   s   d S r!   r   rS   r   r   r   rC   ²  rD   )r
   r   r   c                 S   s   d S r!   r   rS   r   r   r   rC   ¶  rD   c                 S   s   d S r!   r   rS   r   r   r   rC   ø  rD   Fr”   c                 S   s   d S r!   r   rS   r   r   r   rC   ¼  rD   z Only valid keyword argument.*fooc                 S   s   d S r!   r   rB   r   r   r   rC   Ą  rD   r%   )Śfooc                 S   s   d S r!   r   rB   r   r   r   rC   Ć  rD   )r¢   r½   )r   rE   r   r   r'   r2   r   r   rT   ZassertNotEqualr5   r6   rV   )r   Z
structure2Zstructure1_plus1Zstructure1_plus_structure2rø   r£   r   r   r   ŚtestMapStructure  sh    ž  ’ž’ ’’zNestTest.testMapStructurec                 C   sņ   t  dd”}|ddd}|ddd}t dd	 ||”}|  d
|j” |  d|jd ” |  d|jd ” |ddd}t dd	 |”}t ||” |  |jd d d d |jd ” |  |jd d d d |jd ” |  |jd d d |j” d S )NŚab_tupleśa, br½   )ŚbarZbazrR   r	   )r   r
   c                 S   s   | | S r!   r   )ŚstringZrepeatsr   r   r   rC   É  rD   z6NestTest.testMapStructureWithStrings.<locals>.<lambda>ZfoofoorĮ   r   Z	bazbazbazr   )Z	somethingZsomething_elsezyet another thingc                 S   s   | d d d S )Né’’’’r   rB   r   r   r   rC   Ņ  rD   rĆ   )r   rT   r   rE   r   r%   r&   r   )r   ræ   Zinp_aZinp_bŚoutŚntZrev_ntr   r   r   ŚtestMapStructureWithStringsÅ  s$    
ž’""z$NestTest.testMapStructureWithStringsc              	   C   s@  ddg}dddg}|   ttjjt|t|d” t ||” W 5 Q R X ddg}ddgddgg}|  ttj	jt
|d	 t
|d	 d
” tj||d W 5 Q R X tj||dd dddid}dddid}|  ttj dg”” t ||” W 5 Q R X t ddg”}t ddg”}t ||” tjd	didgdd d S )Nr%   r&   rL   )Zinput_lengthZshallow_length©r   r   )r	   r	   r   r	   r   )Zshallow_typeŚ
input_type)Śshallow_treeŚ
input_treeFr”   rR   rM   ©r%   r   )r&   ©r	   r
   r½   )r5   rV   r   Z$_STRUCTURES_HAVE_MISMATCHING_LENGTHSr   ŚlenZ_assert_shallow_structureŚassertRaisesWithLiteralMatchr6   Z"_STRUCTURES_HAVE_MISMATCHING_TYPESŚtypeZ_SHALLOW_TREE_HAS_INVALID_KEYSr   r_   )r   Zinp_abZinp_abcZinp_ab1Zinp_ab2Zinp_bar   r   r   ŚtestAssertShallowStructureŁ  s@    
žž

žžžz#NestTest.testAssertShallowStructurec           	      C   s  ddgddggddgddggg}ddgddgg}t  ||”}t  ||”}|  |ddgddgddgddgg” |  |ddddg” dd	d
dggggg}ddddggggg}t  ||”}t  |”}|  |dd	d
dg” |  |ddddddddg” dddiddgd}ddddgd}t  ||”}|  |dddiddg” t dd”}|ddgdd}|ddd}t  ||”}|  |ddgdg” tjG dd dt}|ddgdd}|ddd}t  ||”}|  |ddgdg” t 	d|dddigddfddt 	dg”dfg”}|}t  ||”}|  |dddddg” t 	dddddfg”}t  ||”}|  ||dddigdddt 	dg”g” t 	dd g”}t  ||”}|  ||dddigdddt 	dg”dg” d!g}d"}t  ||”}t  ||”}|  ||g” |  ||g” d#d$g}d"}t  ||”}t  ||”}|  ||g” |  ||g” dg}d}t  ||”}t  ||”}|  ||g” |  ||g” ddg}d}t  ||”}t  ||”}|  ||g” |  ||g” d!}d"}t  ||”}t  ||”}|  ||g” |  ||g” d}d}t  ||”}t  ||”}|  ||g” |  ||g” d!}d"g}|  
tt j t|”” t  ||”}W 5 Q R X t  ||”}|  ||” d!}d%d&g}|  
tt j t|”” t  ||”}W 5 Q R X t  ||”}|  ||” d}dg}|  
tt j t|”” t  ||”}W 5 Q R X t  ||”}|  ||” d}dd'g}|  
tt j t|”” t  ||”}W 5 Q R X t  ||”}|  ||” d S )(Nr	   r
   r   rJ   r   TFrĖ   ©r&   r	   ©rL   r
   ©rM   r   Ślevel_1Ślevel_2Ślevel_3Ślevel_4r%   r   r&   rL   rM   r   ©r%   r&   rM   r   ræ   rĄ   rR   c                   @   s   e Zd Ze ” Ze ” ZdS )z(NestTest.testFlattenUpTo.<locals>.ABAttrN)r   r   r   r*   r+   r%   r&   r   r   r   r   ŚABAttr"  s   rŁ   ©rO   r   ©rM   rN   r\   re   rŹ   rÉ   Śinput_tree_0Śinput_tree_1Śshallow_tree_9Śshallow_tree_8rK   )r   Śflatten_up_tor   r2   r   rT   r*   r0   r/   r_   rĪ   r6   Z$_IF_SHALLOW_IS_SEQ_INPUT_MUST_BE_SEQr   rĻ   )	r   rŹ   rÉ   Śflattened_input_treeŚflattened_shallow_treeŚ$input_tree_flattened_as_shallow_treeŚinput_tree_flattenedræ   rŁ   r   r   r   ŚtestFlattenUpToż  s     $’

’’’’
’’
’’’’’
ž’’’’žžžžzNestTest.testFlattenUpToc                 C   s$   ddg}t  ||”}|  ||” d S )Nzunicode strings   byte string)r   rą   r   )r   rF   Zflattened_structurer   r   r   Ś#testByteStringsNotTreatedAsIterable  s    z,NestTest.testByteStringsNotTreatedAsIterablec                 C   sŲ  dd }ddgddggddgddggg}ddgd	dgg}|||\}}|||\}}|   |d
dddg” |   |ddgddgddgddgg” |   |d
dddg” |   |ddd	dg” ddddggggg}ddddggggg}|||\}}	dd t |”D }
t |”}|   |d
dddg” |   |	ddddg” |   |
dddddd d!d"g” |   |d#d$d%dd&dd'dg” d$d&didd(gd)}d*d*d*d*gd)}|||\}}	|   |d+d,d-d.g” |   |	d$d&didd(g” t d/d0”}|d*d$gdd1}|d*d$d1}|||\}}	|   |d+d,g” |   |	d*d$gdg” t d#|d*d%d$igdd1fd&dt d2g”d3fg”}|}|||\}}	|   |d4d5d1d6d7g” |   |	d*d$dddg” t d8d&dd$d3fg”}|||\}}	|   |d+d6d9g” |   |	|d*d%d$igdd1dt d2g”g” t d8d:g”}|||\}}	|   |d+d;g” |   |	|d*d%d$igdd1dt d2g”d3g” d<g}d=}|||\}}|||\}}|   |d>g” |   ||g” |   |d>g” |   ||g” d?d@g}d=}|||\}}|||\}}|   |d>g” |   ||g” |   |d>g” |   ||g” dAdBdCdD}d$ddE}d*g}d}|||\}}|||\}}|   |d>g” |   ||g” |   |d>g” |   ||g” d*d$g}d}|||\}}|||\}}|   |d>g” |   ||g” |   |d>g” |   ||g” d<}d=}|||\}}|||\}}|   |d>g” |   ||g” |   |d>g” |   ||g” d*}d*}|||\}}|||\}}|   |d>g” |   ||g” |   |d>g” |   ||g” d<}d=g}|  ttj	j
g t|dF” |||\}}W 5 Q R X |||\}}|   |dGg” |   ||” d<}dHdIg}|  ttj	j
g t|dF” |||\}}W 5 Q R X |||\}}|   |dGdJg” |   ||” d*}dg}|  ttj	j
g t|dF” |||\}}W 5 Q R X |||\}}|   |dGg” |   ||” d*}ddKg}|  ttj	j
g t|dF” |||\}}W 5 Q R X |||\}}|   |dGdJg” |   ||” d#d%d*d$hii}d#d%d*d$gii}|  ttj	j
d#d%gt|d# d% dF” |||\}}W 5 Q R X |||\}}|   |dLdMg” |   ||d# d% ” d S )NNc                 S   s0   t  | |”}dd |D }dd |D }||fS )Nc                 S   s   g | ]\}}|qS r   r   ©Ś.0ŚpŚ_r   r   r   Ś
<listcomp>£  s     zRNestTest.testFlattenWithPathUpTo.<locals>.get_paths_and_values.<locals>.<listcomp>c                 S   s   g | ]\}}|qS r   r   )rč   rź   Śvr   r   r   rė   ¤  s     )r   Zflatten_with_path_up_to)rÉ   rŹ   Zpath_value_pairsŚpathsŚvaluesr   r   r   Śget_paths_and_values”  s    z>NestTest.testFlattenWithPathUpTo.<locals>.get_paths_and_valuesr	   r
   r   rJ   r   TF)r   r   r   ©r   r   rĒ   rĖ   rŃ   rŅ   rÓ   rŌ   rÕ   rÖ   r×   c                 S   s   g | ]\}}|qS r   r   rē   r   r   r   rė   »  s    z4NestTest.testFlattenWithPathUpTo.<locals>.<listcomp>)r   r   r   )r   r   r   r   )r   r   r   r   r   )r   r   r   )r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r%   r   r&   rL   rM   r   rŲ   r   ©r%   ©r&   rc   )rM   r   ræ   rĄ   rR   rŚ   rŪ   )r%   r%   r   )r%   r%   r   r&   ©rL   rM   )rL   rN   rO   r\   )rL   rN   re   ©rL   rŹ   rÉ   r   rÜ   rŻ   r>   r=   ŚC)r%   r&   rL   ©r%   rL   )ŚpathrČ   ©r   rŽ   rß   ©r   rK   )r%   r&   r   )r%   r&   r   )r   r   Śflatten_with_pathr2   r   rT   r_   rĪ   r6   Z._IF_SHALLOW_IS_SEQ_INPUT_MUST_BE_SEQ_WITH_PATHr   rĻ   )r   rļ   rŹ   rÉ   Zflattened_input_tree_pathsrį   Zflattened_shallow_tree_pathsrā   Z*input_tree_flattened_as_shallow_tree_pathsrć   Zinput_tree_flattened_pathsrä   ræ   rF   Zflattened_tree_pathsZflattened_treer   r   r   ŚtestFlattenWithPathUpTo  s@    ’’
’$
’’’’

’
’   ż’’’
’’’’’
’’’’’ü’’’ž’
ž’’’’’’’’’’
’’’’’’’’ ’ž’’
’ ’ž’’
’ ’ž’’
’ ’ž’’
’ ’ž’’
’z NestTest.testFlattenWithPathUpToc                 C   sŠ   t  dd”}t  dd”}|ddd}||ddd	|ddd	d}tj|d
d ||dd}|  |jd” |  |jd” ddddgdddddgdddggg}dddgg}t |dd ||”}|  |dddgg” d S )Nræ   rĄ   Śop_tuplezadd, mulr	   r
   rR   r   ©ŚaddŚmulc                 S   s   | |j  |j S r!   rż   )ŚvalZopsr   r   r   rC      rD   z/NestTest.testMapStructureUpTo.<locals>.<lambda>Fr”   r   é   r   rK   r   rI   rJ   ZevensZoddsZprimesc                 S   s   d  t|| ”S )Nzfirst_{}_{})r   rĶ   )ŚnameŚsecr   r   r   rC   «  rD   Zfirst_4_evensZfirst_5_oddsZfirst_3_primes)r   rT   r   Śmap_structure_up_tor   r%   r&   )r   ræ   rü   Zinp_valZinp_opsrÄ   Z	data_listŚ	name_listr   r   r   ŚtestMapStructureUpTo  s,    ū$  žzNestTest.testMapStructureUpToŚFoor%   r&   ŚBarrL   rM   )Śinputsr   é   Ś42)rų   r
  )rł   r  él   ))r   r   r   r   r  é*   ró   )rń   r
   )rh   r
  )©r&   rM   r  r   Śthing)rö   r
  ))r%   rM   r  )rh   r   )r  r  é+   )rō   r  ))rM   r  )re   r  c                 C   s   |   t |”|” d S r!   )r   r   rś   )r   r	  r   r   r   r   ŚtestFlattenWithPathµ  s    zNestTest.testFlattenWithPathZTuplesrH   T))rų   r   )rł   r   )Śtestcase_nameŚs1Śs2r¢   r   ZDicts)r&   r%   )rń   r   )rņ   r   ZMixedFZNestedr   rI   rK   rJ   )r\   r;   )rĖ   r“   )rd   r   )r[   rK   )rŃ   r;   c                 C   s*   dd }t j||||d}|  ||” d S )Nc                 W   s   | t |fS r!   ©Śsum)r÷   rī   r   r   r   Śpath_and_sum×  s    zBNestTest.testMapWithPathCompatibleStructures.<locals>.path_and_sumr”   )r   Śmap_structure_with_pathr   )r   r  r  r¢   r   r  Śresultr   r   r   Ś#testMapWithPathCompatibleStructuresČ  s       ’z,NestTest.testMapWithPathCompatibleStructuresr   )r  r  r  Ś
error_typec              	   C   s,   |   |” t dd ||” W 5 Q R X d S )Nc                 W   s   dS )Nr   r   )r÷   r0   r   r   r   rC   ź  rD   z@NestTest.testMapWithPathIncompatibleStructures.<locals>.<lambda>)rW   r   r  )r   r  r  r  r   r   r   Ś%testMapWithPathIncompatibleStructuresŽ  s    z.NestTest.testMapWithPathIncompatibleStructuresc                 C   sn   t  ddd”}t  ddd”}|  t |”dddg” |  t |ddd	g”|” |  t d
d |”|” d S )Nr   rĢ   rR   r   r   r	   r
   r   r   c                 S   s   | d S )Nr
   r   )rģ   r   r   r   rC   ń  rD   z/NestTest.testMappingProxyType.<locals>.<lambda>)ŚtypesŚMappingProxyTyper   r   r2   r3   rE   )r   rF   r   r   r   r   ŚtestMappingProxyTypeģ  s
    zNestTest.testMappingProxyTypec                 C   s<   ddgddgig}|   ddddiftjdd |d	d
” d S )Nr   r
   r%   r   r¼   )r   c                 S   s   t | trt| S | S r!   )Ś
isinstancerl   ŚtuplerB   r   r   r   rC   ų  rD   z4NestTest.testTraverseListsToTuples.<locals>.<lambda>F)Ztop_down)r   r   Śtraverse©r   rF   r   r   r   ŚtestTraverseListsToTuplesó  s    żžz"NestTest.testTraverseListsToTuplesc              
      s   ddgfddgg}g   fdd}t  ||”}|  ddgfddgg|” |  ddgfddggddgfddgdddgddg ” d S )Nr   r	   r
   )r   r   r   c                    s(      | ” t| tr$t| dkr$dS d S )Nr	   ŚX)Śappendr   r!  rĶ   rB   ©Śvisitedr   r   Śvisit’  s    
z4NestTest.testTraverseEarlyTermination.<locals>.visitr%  )r   r"  r   )r   rF   r)  Śoutputr   r'  r   ŚtestTraverseEarlyTerminationü  s"          ’żz%NestTest.testTraverseEarlyTerminationc                 C   s   dddid}dddddd}dddddd}t  |d	d
 ||”}dddid}|  ||” t  |dd
 ||”}dddid}|  ||” d S )Nr   rL   r	   rR   r
   ró   r   )r%   r&   rN   c                  W   s   t | S r!   r  ©Śargsr   r   r   rC     rD   z=NestTest.testMapStructureAcrossSubtreesDict.<locals>.<lambda>r   c                  W   s   | S r!   r   r,  r   r   r   rC     rD   rĢ   )r
   r	   ©r   r  r   )r   ŚshallowŚdeep1Śdeep2Śsummedr   Zconcatenatedr   r   r   Ś"testMapStructureAcrossSubtreesDict
  s&       ’   ’z+NestTest.testMapStructureAcrossSubtreesDictc                 C   sP   dd gg}dddgg}dddgg}t  |dd ||”}ddgg}|  ||” d S )Nr   r	   r
   r   c                  W   s   t | S r!   r  r,  r   r   r   rC     rD   zCNestTest.testMapStructureAcrossSubtreesNoneValues.<locals>.<lambda>r   r.  ©r   r/  r0  r1  r2  r   r   r   r   Ś(testMapStructureAcrossSubtreesNoneValues  s    
   ’
z1NestTest.testMapStructureAcrossSubtreesNoneValuesc                 C   sP   ddgg}dddgg}dddgg}t  |dd ||”}ddgg}|  ||” d S )Nr   r	   r
   r   c                  W   s   t | S r!   r  r,  r   r   r   rC   %  rD   z=NestTest.testMapStructureAcrossSubtreesList.<locals>.<lambda>r   r.  r4  r   r   r   Ś"testMapStructureAcrossSubtreesList   s    
   ’
z+NestTest.testMapStructureAcrossSubtreesListc                 C   s4   d}d}d}t  |dd ||”}d}|  ||” d S )N)r   rł   )r   rĢ   )r	   rH   c                  W   s   t | S r!   r  r,  r   r   r   rC   .  rD   z>NestTest.testMapStructureAcrossSubtreesTuple.<locals>.<lambda>)r
   ©r   r.  r4  r   r   r   Ś#testMapStructureAcrossSubtreesTuple)  s       ’z,NestTest.testMapStructureAcrossSubtreesTuplec                 C   sf   t  dddg”}t  ddg”}|d}|dd}|dd}t |d	d
 ||”}|d}|  ||” d S )Nr  r@   rA   r  r   rš   r	   )r	   r   c                  W   s   t | S r!   r  r,  r   r   r   rC   9  rD   zCNestTest.testMapStructureAcrossSubtreesNamedTuple.<locals>.<lambda>r
   )r   rT   r   r  r   )r   r  r  r/  r0  r1  r2  r   r   r   r   Ś(testMapStructureAcrossSubtreesNamedTuple2  s    

   ’z1NestTest.testMapStructureAcrossSubtreesNamedTuplec                 C   s   ddg}dddgg}dddgg}t  |dd ||”}ddg}|  ||” ddgg}dd	g}dd
g}t  |dd ||”}ddgg}|  ||” d S )Nr   rł   r	   r
   r   c                  W   s   t | S r!   r  r,  r   r   r   rC   C  rD   zBNestTest.testMapStructureAcrossSubtreesListTuple.<locals>.<lambda>r7  rĢ   rH   c                  W   s   t | S r!   r  r,  r   r   r   rC   K  rD   r   r.  r4  r   r   r   Ś'testMapStructureAcrossSubtreesListTuple=  s     ’
’
z0NestTest.testMapStructureAcrossSubtreesListTuplec                 C   s   d}|   t |”dd g” d S )N)r   Nr   )r   r   r2   r#  r   r   r   ŚtestNoneNodeIncludedP  s    zNestTest.testNoneNodeIncludedc                 C   sd   G dd dt ttf }dd }|ddddd	}t ||”}|d
dddd	}|  ||” d S )Nc                   @   sH   e Zd ZdZdd ZeedddZeddd	Ze	e dd
dZ
dS )z9NestTest.testCustomClassMapWithPath.<locals>.ExampleClasszSmall example custom class.c                 _   s   t ||| _d S r!   )ŚdictŚ_mapping)r   r-  Śkwargsr   r   r   Ś__init__Y  s    zBNestTest.testCustomClassMapWithPath.<locals>.ExampleClass.__init__)ŚkŚreturnc                 S   s
   | j | S r!   )r=  )r   r@  r   r   r   Ś__getitem__\  s    zENestTest.testCustomClassMapWithPath.<locals>.ExampleClass.__getitem__)rA  c                 S   s
   t | jS r!   )rĶ   r=  rz   r   r   r   Ś__len___  s    zANestTest.testCustomClassMapWithPath.<locals>.ExampleClass.__len__c                 S   s
   t | jS r!   )Śiterr=  rz   r   r   r   Ś__iter__b  s    zBNestTest.testCustomClassMapWithPath.<locals>.ExampleClass.__iter__N)r   r   r   r(   r?  r   rB  ŚintrC  r   rE  r   r   r   r   ŚExampleClassV  s
   rG  c                 S   s   d  | ”}| d| S )Nś/rź   )Śjoin)r÷   ŚvalueŚ	full_pathr   r   r   Śmappere  s    
z3NestTest.testCustomClassMapWithPath.<locals>.mapperr   r	   r
   )ŚsecondŚthird)ŚfirstŚnestedZfirst_1znested/second_2znested/third_3)r   r   r   r  r   )r   rG  rL  Z
test_inputr*  r   r   r   r   ŚtestCustomClassMapWithPathT  s    žžz#NestTest.testCustomClassMapWithPathN)Mr   r   r   r'   r:   r   Ś
parametersr   rT   ŚwraptZObjectProxyrG   rY   rb   rg   ro   rr   rt   rx   r{   r}   r   r   r   r   r§   rØ   r°   rŖ   r«   r®   r   r   r   r   r   r   r   r   r   r   r   r    r¤   r„   r©   r¬   r­   rÆ   r±   r²   r¾   rĘ   rŠ   rå   rę   rū   r  r  r  r<  r  Znamed_parametersr  rV   r  r  r$  r+  r3  r5  r6  r8  r9  r:  r;  rQ  r   r   r   r   r    0   s
  ’ū
".?$  z
’’’’’’ó
 ’ ’ ’’üł
’’żū

				r    Ś__main__)r(   r   r   r  Śtypingr   r   r   ZunittestZabsl.testingr   r*   Śnumpyr#   r   rS  r   r   r   r   ZTestCaser   r    r   Śmainr   r   r   r   Ś<module>   s4           M