Ë
    øÿæii  ã                   óª  — d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZ  edd¬«      Z edd¬«      Zej$                  j'                  «       Zg d	¢Zg d
¢Zg d¢Zd„ Zd„ ZdAd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d e)«       fd e)ddd d!¬"«      fd# e)d$¬%«      fd& e)dd$d¬'«      fd( e)d)¬%«      fd* e)d$d¬+«      fd, e)«       fd- e)dd ¬+«      fd. e)dd$¬+«      fg	Z*d/„ Z+d0„ Z,d1„ Z-d2„ Z.d3„ Z/d4 e)«       fd5 e)d$d)d6¬7«      fd8 e)d ¬%«      fd9 e)«       fd: e)dd ¬+«      fd; e)«       fgZ0d<„ Z1d=„ Z2d>„ Z3d?„ Z4d@„ Z5y)Bé    N)ÚEinopsError)Ú_enumerate_directionsÚ	rearrangeÚreduceÚrepeat)ÚFLOAT_REDUCTIONS)Úcollect_test_backendsÚis_backend_testedF©ÚsymbolicÚlayersT)ú...->...za b c d e-> a b c d eza b c d e ...-> ... a b c d eza b c d e ...-> a ... b c d ez... a b c d e -> ... a b c d eza ... e-> a ... eza ... -> a ... za ... c d e -> a (...) c d e))za b c d e -> (a b) c d eza b ... -> (a b) ... )za b c d e -> a b (c d) ez... c d e -> ... (c d) e)za b c d e -> a b c d ez... -> ... )za b c d e -> (a b c d e)ú... ->  (...))za b c d e -> b (c d e) aza b ... -> b (...) a)za b c d e -> b (a c d) eza b ... e -> b (a ...) e))úa b c d e -> z	 ... ->  )za b c d e -> (e a)za ... e -> (e a))za b c d e -> d (a e)z a b c d e ... -> d (a e) )za b c d e -> (a b)z ... c d e  -> (...) c                  óJ  — t        j                  g d¢«      } t        | d«       t        j                  t
        «      5  t        | d«       d d d «       t        | d«       t        j                  t
        «      5  t        | d«       d d d «       y # 1 sw Y   ŒDxY w# 1 sw Y   y xY w)N©é   r   r   r   r   za b c d ... ->  a b c ... dza b c d (...) ->  a b c ... dr   z(...) -> (...))ÚnpÚzerosr   ÚpytestÚraisesr   ©Úxs    új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/einops/tests/test_ops.pyÚ"test_collapsed_ellipsis_errors_outr   ,   st   € Ü
�‰’Ó!€AÜˆaÐ.Ô/Ü	�‰”{Õ	#Ü�!Ð4Ô5÷ 
$ô ˆa�Ô!Ü	�‰”{Õ	#Ü�!Ð%Ô&÷ 
$Ð	#÷	 
$Ð	#ú÷ 
$Ð	#ús   ½BÁ7BÂBÂB"c            
      óú  — t        j                  d«      j                  g d¢«      } t        D ])  }t        j                  | t        | |«      «      rŒ$J |«       ‚ t        D ]1  \  }}t        j                  t        | |«      t        | |«      «      rŒ1J ‚ dD ]@  }t        D ]5  \  }}t        j                  t        | ||¬«      t        | ||¬«      «      rŒ5J ‚ ŒB g t        ¢}t        D ]  }|j                  |«       Œ y )NéÐ  ©é   é   é   é   é   ©ÚminÚmaxÚsum©Ú	reduction)
r   ÚarangeÚreshapeÚidentity_patternsÚarray_equalr   Úequivalent_rearrange_patternsÚequivalent_reduction_patternsr   Úextend)r   ÚpatternÚpattern1Úpattern2r)   Úall_rearrange_patternsÚpattern_pairss          r   Útest_ellipsis_ops_numpyr6   7   sä   € Ü
�	‰	Ð#Ó$×,Ñ,ª_Ó=€Aß$ˆÜ�~‰~˜a¤¨1¨gÓ!6Õ7Ð@¸Ó@Ð7ð %÷ <Ñˆ�(Ü�~‰~œi¨¨8Ó4´iÀÀ8Ó6LÕMÐMÐMð <ó +ˆ	ß"?ÑˆH�hÜ—>‘>¤&¨¨HÀ	Ô"JÌFÐSTÐV^ÐjsÔLtÕuÐuÐuñ #@ð +ð
 2Ô0Ð1Ðß6ˆØ×%Ñ% mÕ4ñ 7ó    c                 ó€  ‡‡‡— ˆˆˆfd„} ||«      }t         j                  }d}	|rb|j                  D �
cg c]  }
t        j	                  «       |	k\  r|
nd‘Œ }}
| j                  |¬«      } ||«      }| j                  |||fg«      }n( || j                  |«      «      }| j                  |«      } |||«       yc c}
w )z�
    Helper to test result of operation (rearrange or transpose) against numpy
    if reduction == 'rearrange', rearrange op is tested, otherwise reduce
    c                 óD   •— ‰dk(  rt        | ‰fi ‰¤ŽS t        | ‰‰fi ‰¤ŽS )Nr   )r   r   )r   Úaxes_lengthsr1   r)   s    €€€r   Ú	operationz)check_op_against_numpy.<locals>.operationO   s1   ø€ Ø˜Ò#Ü˜Q Ñ8¨<Ñ8Ð8ä˜!˜W iÑ@°<Ñ@Ð@r7   g      à?N)Úshape)	r   r-   r<   ÚrngÚrandomÚcreate_symbolÚeval_symbolÚ
from_numpyÚto_numpy)ÚbackendÚnumpy_inputr1   r:   r)   Úis_symbolicr;   Únumpy_resultÚcheck_equalÚp_none_dimensionÚdÚsymbol_shapeÚsymbolÚresult_symbolÚbackend_results     ```          r   Úcheck_op_against_numpyrN   I   sÂ   ú€ öAñ ˜[Ó)€LÜ—.‘.€KØÐÙØQ\×QbÒQbÓcÑQbÈAœSŸZ™Z›\Ð-=Ò=™À4ÑGÐQbˆÐcØ×&Ñ&¨\Ð&Ó:ˆÙ! &Ó)ˆØ ×,Ñ,¨]¸fÀkÐ=RÐ<SÓT‰á" 7×#5Ñ#5°kÓ#BÓCˆØ ×)Ñ)¨.Ó9ˆá�˜nÕ-ùò ds   µ"B;c                  ó`  — t        j                  d«      j                  g d¢«      } dD ]ƒ  }t        |d¬«      D ]q  }t        t        t        j                  t        Ž «      z   D ]  }t        || |i d|¬«       Œ dD ].  }t        j                  t        Ž D ]  }t        || |i ||¬«       Œ Œ0 Œs Œ… y	)
z'Checking various patterns against numpyr   r   )TFFr   r   )r:   r)   rE   r$   N)r   r*   r+   r	   r,   ÚlistÚ	itertoolsÚchainr.   rN   r/   )r   rE   rC   r1   r)   s        r   Útest_ellipsis_ops_imperativerS   d   s¤   € ä
�	‰	Ð#Ó$×,Ñ,ª_Ó=€AÛ$ˆÜ,°kÈ%×PˆGÜ,¬t´I·O±OÔEbÐ4cÓ/dÔd�Ü&Ø˜Q °bÀKÐ]höð eó
 3�	Ü(Ÿ™Ô0MÓN�GÜ*Ø  G¸"È	Ð_jöñ  Oñ 3ñ Qñ %r7   c                  ó®  — dd l } ddlm} | j                  dk  rt	        j
                  «        t        j                  d«      j                  g d¢«      }t        t        t        j                  t        Ž «      z   D ]Y  }t        ||«      }|j                  | j                  |«      |«      }t        j                   |j#                  |dz   «      |«      rŒYJ ‚ y )Nr   ©Ú	array_apiú2.0.0r   r   )ÚnumpyÚeinopsrV   Ú__version__r   Úskipr   r*   r+   r,   rP   rQ   rR   r.   r   Úfrom_dlpackr-   Úasnumpy)ÚxpÚAAr   r1   ÚexpectedÚresults         r   Útest_rearrange_array_apirb   u   sœ   € Ûå&à	‡~�~˜ÒÜ�‰Œä
�	‰	Ð#Ó$×,Ñ,ª_Ó=€AÜ$¤t¬I¯O©OÔ=ZÐ,[Ó'\Ô\ˆÜ˜Q Ó(ˆØ—‘˜bŸn™n¨QÓ/°Ó9ˆÜ�~‰~˜bŸj™j¨°!©Ó4°hÕ?Ð?Ð?ñ ]r7   c            
      óÊ  — dd l } ddlm} | j                  dk  rt	        j
                  «        t        j                  d«      j                  g d¢«      }t        j                  t        Ž D ]w  }dD ]p  }t        |||¬«      }|j                  | j                  |«      ||¬«      }t        j                  |j                  t        j                   |dz   «      «      |«      rŒpJ ‚ Œy y )Nr   rU   rW   r   r   r$   r(   )rX   rY   rV   rZ   r   r[   r   r*   r+   rQ   rR   r/   r   r\   r-   r]   Úasarray)r^   r_   r   r1   r)   r`   ra   s          r   Útest_reduce_array_apire   „   s«   € Ûå&à	‡~�~˜ÒÜ�‰Œä
�	‰	Ð#Ó$×,Ñ,ª_Ó=€AÜ—?‘?Ô$AÓBˆÛ.ˆIÜ˜a °IÔ>ˆHØ—Y‘Y˜rŸ~™~¨aÓ0°'ÀY�YÓOˆFÜ—>‘> "§*¡*¬R¯Z©Z¸À¹
Ó-CÓ"DÀhÕOÐOÐOñ /ñ Cr7   c                  óÎ  — g d¢} t        j                  t        j                  | «      «      j                  | «      }dD ]M  }t	        ||«      }t        t        j                  ||«      «      dk(  sJ ‚|j                  |j                  k(  rŒMJ ‚ t	        |d«      }t        j                  |j                  «       |j                  «       «      sJ ‚t	        |d«      }t        j                  ||«      sJ ‚t	        |d«      }t	        |d«      }t        j                  ||«      sJ ‚t	        t	        |d«      d	d
d¬«      }t        j                  ||«      sJ ‚t        t        d| «      «      }t	        |dfi |¤Ž}t	        |d	fi |¤Ž}t        j                  ||«      sJ ‚t        j                  d«      j                  g d¢«      }t	        |d«      }|d   |d   k(  sJ ‚|d   |d   k(  sJ ‚y )N)r   r   r    r"   é   é   )za b c d e f -> a b c d e fzb a c d e f -> a b d e f cúa b c d e f -> f e d c b aza b c d e f -> (f e) d (c b a)za b c d e f -> (f e d c b a)r   za b c d e f -> a (b) (c d e) fz0a aa aa1 a1a1 aaaa a11 -> a aa aa1 a1a1 aaaa a11ri   zf e d c b a -> a b c d e fza b c d e f -> (f d) c (e b) az(f d) c (e b) a -> a b c d e fr   r"   )ÚbrI   Úabcdefé   ©r   r    r!   za b c -> b c a)r   r   r    )r   r    r   )r   r   r   )r   r   r   )r   r*   Úprodr+   r   ÚlenÚ	setdiff1dÚdtyper-   ÚflattenÚdictÚzip)	r<   r   r1   ra   Úresult1Úresult2ÚsizesÚtempÚx2s	            r   Ú test_rearrange_consistency_numpyrz   ”   s¿  € Ú€EÜ
�	‰	”"—'‘'˜%“.Ó!×)Ñ)¨%Ó0€Aóˆô ˜1˜gÓ&ˆÜ”2—<‘<  6Ó*Ó+¨qÒ0Ð0Ð0Ø�|‰|˜qŸw™wÓ&Ð&Ð&ðô �qÐ:Ó;€FÜ�>‰>˜!Ÿ)™)›+ v§~¡~Ó'7Ô8Ð8Ð8ä�qÐLÓM€FÜ�>‰>˜!˜VÔ$Ð$Ð$ä˜Ð7Ó8€GÜ˜Ð7Ó8€GÜ�>‰>˜' 7Ô+Ð+Ð+ä”y Ð$DÓEÐGgÐklÐpqÔr€FÜ�>‰>˜!˜VÔ$Ð$Ð$ä”�X˜uÓ%Ó&€EÜ�QÐ8ÑB¸EÑB€DÜ�tÐ=ÑGÀÑG€FÜ�>‰>˜!˜VÔ$Ð$Ð$ä	�‰�9Ó	×	%Ñ	%¢iÓ	0€BÜ�rÐ+Ó,€FØˆg‰;˜& ™/Ò)Ð)Ð)Øˆg‰;˜& ™/Ò)Ð)Ñ)r7   c                  óê  — t        dd«      D ]Ï  } t        j                  d| z  «      j                  dg| z  «      }t        j                  | «      }dj                  d„ t        | «      D «       «      }dj                  d„ |D «       «      }|dz   |z   }t        ||«      }t        j                  ddd| g«      D ]$  }|t        |«         |t        ||   «         k(  rŒ$J ‚ ŒÑ t        dd«      D �]  } t        j                  d| z  «      j                  dg| z  «      }t        j                  | «      }dj                  d	„ t        | «      d d d
…   D «       «      }dj                  d„ |d d d
…   D «       «      }|dz   |z   }t        ||«      }|j                  |j                  k(  sJ ‚t        j                  |«      }t        |«      D ]  \  }	}
|||	z	  dz  |
z  z  }Œ t        j                  ||«      r�ŒJ ‚ y )Nr   é
   r   Ú c              3   ó8   K  — | ]  }d t        |«      z   –— Œ y­w©ÚiN©Ústr©Ú.0Úaxiss     r   Ú	<genexpr>z4test_rearrange_permutations_numpy.<locals>.<genexpr>¿   s   è ø€ Ð"M¹}°t 3¬¨T«¥?¹}ùó   ‚c              3   ó8   K  — | ]  }d t        |«      z   –— Œ y­wr   r�   rƒ   s     r   r†   z4test_rearrange_permutations_numpy.<locals>.<genexpr>À   s   è ø€ Ð#LÁ¸ C¬#¨d«)¥OÁùr‡   ú -> r   c              3   ó8   K  — | ]  }d t        |«      z   –— Œ y­wr   r�   rƒ   s     r   r†   z4test_rearrange_permutations_numpy.<locals>.<genexpr>Ê   s   è ø€ Ð"SÑ?R°t 3¬¨T«¥?Ñ?Rùr‡   éÿÿÿÿc              3   ó8   K  — | ]  }d t        |«      z   –— Œ y­wr   r�   rƒ   s     r   r†   z4test_rearrange_permutations_numpy.<locals>.<genexpr>Ë   s   è ø€ Ð#RÑ@Q¸ C¬#¨d«)¥OÑ@Qùr‡   )Úranger   r*   r+   r=   ÚpermutationÚjoinr   ÚintegersÚtupler<   Ú
zeros_likeÚ	enumerater-   )Ún_axesÚinputrŽ   Úleft_expressionÚright_expressionÚ
expressionra   ÚpickÚexpected_resultÚoriginal_axisÚresult_axiss              r   Ú!test_rearrange_permutations_numpyr�   º   sÓ  € ä˜˜2–,ˆÜ—	‘	˜!˜V™)Ó$×,Ñ,¨a¨S°6©\Ó:ˆÜ—o‘o fÓ-ˆØŸ(™(Ñ"M¼uÀV¼}Ó"MÓMˆØŸ8™8Ñ#LÁÓ#LÓLÐØ$ vÑ-Ð0@Ñ@ˆ
Ü˜5 *Ó-ˆä—L‘L  A¨¨F |Ö4ˆDØœ˜t›Ñ%¨´°d¸;Ñ6GÓ0HÑ)IÓIÐIÐIñ 5ð ô ˜˜2—,ˆÜ—	‘	˜!˜V™)Ó$×,Ñ,¨a¨S°6©\Ó:ˆÜ—o‘o fÓ-ˆØŸ(™(Ñ"S¼uÀV»}ÉTÈrÈTÒ?RÓ"SÓSˆØŸ8™8Ñ#RÀÉDÈbÈDÒ@QÓ#RÓRÐØ$ vÑ-Ð0@Ñ@ˆ
Ü˜5 *Ó-ˆØ�|‰|˜uŸ{™{Ò*Ð*Ð*ÜŸ-™-¨Ó.ˆÜ*3°KÖ*@Ñ&ˆM˜;Ø ¨-Ñ!7¸1Ñ <ÀÑLÑL‰Oð +Aô �~‰~˜f oÖ6Ð6Ð6ñ r7   c                  ó.  — t         D �]  } t        d| j                  «       t        D �]è  }t	        j
                  dd¬«      j                  g d¢«      }|dv r"||j                  d«      j                  «       z  }di  t        ||«      «       gd	i  t        ||«      «       gd
t        dd¬«       t        ||«      «       gdi  t        ||«      d¬«      j                  ddd«      j                  ddg«      gdi  t        ||«      d¬«      j                  ddd«      j                  ddg«      gdi  t        ||«      d¬«      j                  ddd«      j                  ddg«      gdi  t        ||«      d¬«      j                  ddd«      j                  dg«      gdt        d¬«      |gg}|D ]c  \  }}}t        | j                  |j                  «       «      |fd|i|¤Ž}| j                  |«      }t	        j                   ||«      rŒ[J d|› �«       ‚ �Œë �Œ y )NúReduction tests for r   Úint64©rq   r   ©Úmeanrn   Úfloat64r   ú	a ... -> z(a1 a2) ... (e1 e2) -> r   r   )Úa1Úe2úa b c d e -> (e c) a©r   r    ©r…   r   r‹   úa ... c d e -> (e c) aúa b c d e ... -> (e c) aúa b c d e -> (e c a)ú(a a2) ... -> (a2 a) ...©Úa2r)   z
Failed at )Úimp_op_backendsÚprintÚframework_nameÚ
REDUCTIONSr   r*   r+   Úastyper£   Úgetattrrs   Ú	transposer   rA   ÚcopyrB   Úallclose)rC   r)   r•   Ú
test_casesr1   r:   rš   ra   s           r   Útest_reduction_imperativesr»   Ö   s2  € ß"�?ˆÜÐ$ g×&<Ñ&<Ô=ß#˜ˆIä—I‘IÐ/°wÔ?×GÑGÊÓXˆEØÐ,Ñ,Ø §¡¨YÓ 7× <Ñ <Ó >Ñ>�à  "Ð&?¤g¨e°YÓ&?Ó&AÐBØ˜bÐ";¤'¨%°Ó";Ó"=Ð>Ø*¬D°A¸!Ô,<Ð>W¼gÀeÈYÓ>WÓ>YÐZà*ØØ-”G˜E 9Ó-°6Ô:×DÑDÀQÈÈ1ÓM×UÑUÐWYÐ[\ÐV]Ó^ðð -ØØ-”G˜E 9Ó-°6Ô:×DÑDÀQÈÈ1ÓM×UÑUÐWYÐ[\ÐV]Ó^ðð /ØØ-”G˜E 9Ó-°6Ô:×DÑDÀQÈÈ1ÓM×UÑUÐWYÐ[\ÐV]Ó^ðð
 (¨Ð-F¬W°U¸IÓ-FÈFÔ-S×-]Ñ-]Ð^_ÐabÐdeÓ-f×-nÑ-nÐprÐosÓ-tÐuØ+¬T°Q¬Z¸Ð?ð)ˆJó, ;EÑ6�˜ Ü × 2Ñ 2°5·:±:³<Ó @À'ÑoÐU^ÐoÐbnÑo�Ø ×)Ñ)¨&Ó1�Ü—{‘{ 6¨?Õ;ÐS¸zÈ'ÈÐ=SÓSÐ;ò ;Eò7 $ñ #r7   c                  óª  — t         D �]Ä  } t        d| j                  «       t        D �]¡  }t	        j
                  dd¬«      j                  g d¢«      }||j                  d«      j                  «       z  }di  t        ||«      «       gdi  t        ||«      «       gd	t        d
d
¬«       t        ||«      «       gdi  t        ||«      d¬«      j                  dd
d«      j                  ddg«      gdi  t        ||«      d¬«      j                  dd
d«      j                  ddg«      gdi  t        ||«      d¬«      j                  dd
d«      j                  ddg«      gdi  t        ||«      d¬«      j                  dd
d«      j                  dg«      gdt        d
¬«      |gg}|D �]  \  }}}|j                  |j                  D �cg c]  }d ‘Œ c}g}|D ]O  }	| j                  |	«      }
t        |
|fd|i|¤Ž}| j                  ||
|fg«      }t	        j                   ||«      rŒOJ ‚ 	 g }	i |¥}t#        d|j                  «      D ]1  \  }}||v r|	j%                  d «       |||<   Œ!|	j%                  |«       Œ3 | j                  |	«      }
t        |
|fd|i|¤Ž}| j                  ||
|fg«      }t	        j                   ||«      r�Œ J ‚ �Œ¤ �ŒÇ y c c}w )NrŸ   r   r    r¡   r   r¤   r   r¥   z(a a2) ... (e e2) -> r   )r°   r§   r¨   r©   rª   r   r   r‹   r«   r¬   r­   r®   r¯   r)   Úabcde)Úsym_op_backendsr²   r³   r´   r   r*   r+   rµ   r£   r¶   rs   r·   r<   r?   r   r@   r¹   rt   Úappend)rC   r)   r•   rº   r1   r:   Úexpected_numpy_resultÚ_Úshapesr<   ÚsymÚ
result_symra   Ú_axes_lengthsr…   Úlengths                   r   Útest_reduction_symbolicrÇ   ú   s  € ß"�?ˆÜÐ$ g×&<Ñ&<Ô=ß#˜ˆIÜ—I‘IÐ/°wÔ?×GÑGÊÓXˆEØ˜EŸL™L¨Ó3×8Ñ8Ó:Ñ:ˆEð ! "Ð&?¤g¨e°YÓ&?Ó&AÐBØ˜bÐ";¤'¨%°Ó";Ó"=Ð>Ø(¬$°!¸Ô*:Ð<U¼GÀEÈ9Ó<UÓ<WÐXà*ØØ-”G˜E 9Ó-°6Ô:×DÑDÀQÈÈ1ÓM×UÑUÐWYÐ[\ÐV]Ó^ðð -ØØ-”G˜E 9Ó-°6Ô:×DÑDÀQÈÈ1ÓM×UÑUÐWYÐ[\ÐV]Ó^ðð /ØØ-”G˜E 9Ó-°6Ô:×DÑDÀQÈÈ1ÓM×UÑUÐWYÐ[\ÐV]Ó^ðð
 (¨Ð-F¬W°U¸IÓ-FÈFÔ-S×-]Ñ-]Ð^_ÐabÐdeÓ-f×-nÑ-nÐprÐosÓ-tÐuØ+¬T°Q¬Z¸Ð?ð)ˆJô, AKÑ<�˜Ð'<ØŸ+™+°e·k²kÓ'B±k°ª°kÑ'BÐC�Û#�EØ!×/Ñ/°Ó6�CÜ!'¨¨WÑ!ZÀ	Ð!ZÈ\Ñ!Z�JØ$×0Ñ0°¸sÀE¸l¸^ÓL�FÜŸ;™; vÐ/DÕEÐEÐEð	 $ð Ø�EØ$4 |Ð$4�MÜ(+¨G°U·[±[Ö(A™˜˜fà 7™?Ø!ŸL™L¨Ô.Ø28˜M¨$Ò/à!ŸL™L¨Õ0ð )Bð "×/Ñ/°Ó6�CÜ!'¨¨WÑ![À	Ð![È]Ñ![�JØ$×0Ñ0°¸sÀE¸l¸^ÓL�FÜŸ;™; vÐ/DÖEÐEÐEò+ AKò5 $ñ #ùò: (Cs   Ç	Kc                  ó¸  — t         D �]Ð  } t        d| j                  «       g t        ¢d‘D �]©  }d}t        j
                  }|dv rd}t        j                  }d}d| j                  v rd}d	| j                  v rd
}t        |«      D �]M  }t        j                  dd|¬«      }t        j                  |«      }|dk(  rdnt        j                  |dz   «      }dj                  d„ t        |«      D «       «      }	dj                  d„ ||d  D «       «      }
|	dz   |
z   }t	        j                  ddt	        j                  |«      z   |¬«      j                  |«      }|dk(  r||j                  «       z  }t!        |||¬«      }|j#                  |«      }|dkD  r% t%        ||«      t'        t        |«      «      ¬«      } |||«      sJ ‚t)        | |||i d¬«       �ŒP �Œ¬ �ŒÓ y )NzStress-testing reduction for r   r    r¢   r¤   rh   Úoneflowrg   Úpaddleé	   r   r!   ©Úsizer   r   r}   c              3   ó8   K  — | ]  }d t        |«      z   –— Œ y­w©r   Nr�   ©r„   r€   s     r   r†   z4test_reduction_stress_imperatives.<locals>.<genexpr>A  s   è ø€ ÐD±m° ¤c¨!£f¥±mùr‡   c              3   ó8   K  — | ]  }d t        |«      z   –— Œ y­wrÏ   r�   rÐ   s     r   r†   z4test_reduction_stress_imperatives.<locals>.<genexpr>B  s   è ø€ Ð MÑ7L°! ¤s¨1£v¥Ñ7Lùr‡   ú->r¡   rn   r(   rª   F)r)   r:   rE   )r±   r²   r³   r´   r   r-   r¹   r�   r=   r�   rŽ   r�   r*   rn   r+   r£   r   r·   r¶   r‘   rN   )rC   r)   rq   ÚcoincideÚmax_dimr”   r<   rŽ   ÚskippedÚleftÚrightr1   r   ru   rv   s                  r   Ú!test_reduction_stress_imperativesrØ   /  s´  € ß"�?ˆÜÐ-¨w×/EÑ/EÔFØ3œ:Ð3 {Ô3ˆIØˆEÜ—~‘~ˆHØÐ,Ñ,Ø!�ÜŸ;™;�ØˆGØ˜G×2Ñ2Ñ2Ø�Ø˜7×1Ñ1Ñ1Ø�Ü Ÿ.�ÜŸ™ Q¨°˜Ó7�Ü!Ÿo™o¨fÓ5�Ø(¨KÒ7™!¼S¿\¹\È&ÐSTÉ*Ó=U�Ø—x‘xÑD´e¸F´mÓDÓD�ØŸ™Ñ M°{À7À8Ñ7LÓ MÓM�Ø ™+¨Ñ-�Ü—I‘I˜a ¤R§W¡W¨U£^Ñ!3¸5ÔA×IÑIÈ%ÓP�Ø Ò&Ø˜Ÿ™›‘M�AÜ   G°yÔA�ØŸ+™+ kÓ2�Ø˜Q’;Ø9œg g¨yÓ9¼uÄUÈ7Ã^Ó?TÔU�GÙ ¨Ô1Ð1Ð1Ü& w°°7ÀiÐ^`Ðns×tò )ò 4ñ #r7   c                  ón  — t        j                  d«      j                  g d¢«      j                  d«      } | | j	                  «       z  } d„ }d„ }d„ }d„ }dd	lm}m}m}m	} |j                  ||j                  ||j                  ||j                  |i}	t        D ]š  }
|
j                  |	vrŒ|	|
j                     }|
j                  | «      }t        D ]`  \  }}t        d
|
j                  ||«       t        | ||¬«      }t        |||¬«      }t        j                   ||
j#                  |«      «      rŒ`J ‚ Œœ y )Nr   r   Úfloat32c                 ó$   — | j                  |«      S )N)Ú	logsumexp)r   Útuple_of_axess     r   Úlogsumexp_torchzAtest_reduction_with_callable_imperatives.<locals>.logsumexp_torchS  s   € Ø�{‰{˜=Ó)Ð)r7   c                 ó.   — dd l }|j                  | |«      S ©Nr   )Ú
tensorflowÚreduce_logsumexp)r   rÝ   Útfs      r   Úlogsumexp_tfz>test_reduction_with_callable_imperatives.<locals>.logsumexp_tfV  s   € Ûà×"Ñ" 1 mÓ4Ð4r7   c                 ó8   — dd l mc m} |j                  | |«      S rà   )Útensorflow.keras.backendÚkerasrC   rÜ   )r   rÝ   Úks      r   Úlogsumexp_keraszAtest_reduction_with_callable_imperatives.<locals>.logsumexp_keras[  s   € ß,Ð,à�{‰{˜1˜mÓ,Ð,r7   c                 óØ   — | j                  |«      }| | j                  |d¬«      z
  }t        j                  |«      }t        j                  ||¬«      }t        j                  |«      |z   S )NT)Úkeepdimsrª   )r&   r   Úexpr'   Úlog)r   rÝ   ÚminusedÚys       r   Úlogsumexp_numpyzAtest_reduction_with_callable_imperatives.<locals>.logsumexp_numpy`  sW   € à—%‘%˜Ó&ˆØ�—‘�m¨d�Ó3Ñ3ˆÜ�F‰F�1‹IˆÜ�F‰F�1˜=Ô)ˆÜ�v‰v�a‹y˜7Ñ"Ð"r7   r   )ÚNumpyBackendÚTensorflowBackendÚTFKerasBackendÚTorchBackendz!Test reduction with callable for r(   )r   r*   r+   rµ   r&   Úeinops._backendsrñ   rò   ró   rô   r³   r±   rA   r/   r²   r   r¹   rB   )Úx_numpyrÞ   rä   ré   rð   rñ   rò   ró   rô   Úbackend2callbackrC   Úbackend_callbackÚ	x_backendr2   r3   Úoutput_numpyÚoutput_backends                    r   Ú(test_reduction_with_callable_imperativesrü   O  s3  € Ü�i‰iÐ)Ó*×2Ñ2²?ÓC×JÑJÈ9ÓU€GØˆw�{‰{‹}Ñ€Gò*ò5ò
-ò
#÷ _Ó^ð 	×#Ñ# _Ø×(Ñ(¨,Ø×%Ñ% Ø×#Ñ# _ð	Ð÷ #ˆØ×!Ñ!Ð)9Ñ9Øà+¨G×,BÑ,BÑCÐà×&Ñ& wÓ/ˆ	ß"?ÑˆH�hÜÐ5°w×7MÑ7MÈxÐYaÔbÜ! '¨8¸ÔOˆLÜ# I¨xÐCSÔTˆNÜ—;‘;ØØ× Ñ  Ó0õð ð ñ	 #@ñ #r7   c                  óL  — t         D �]  } t        d| j                  «       g dgg d¢g d¢fD ]î  }t        j                  t        j
                  |«      «      j                  |«      }t        |«      }t        | j                  |«      «      }t        |«      t        |«      cxk(  rt        |«      k(  sJ ‚ J ‚|D �cg c]  }| j                  |«      ‘Œ }}t        ||«      D ]8  \  }}|j                  |j                  k(  sJ ‚t        j                  ||«      rŒ8J ‚ Œð �Œ y c c}w )Nztesting directions forr   )r   r   r   ©r   r    r"   rg   )r±   r²   r³   r   r*   rn   r+   r   rA   ro   rB   rt   r<   r¹   )rC   r<   r   Úaxes1Úaxes2ÚaxÚax1Úax2s           r   Útest_enumerating_directionsr  ‚  sü   € ß"�?ˆÜÐ&¨×(>Ñ(>Ô?Ø˜1˜#šyª,Ó7ˆEÜ—	‘	œ"Ÿ'™' %›.Ó)×1Ñ1°%Ó8ˆAÜ)¨!Ó,ˆEÜ)¨'×*<Ñ*<¸QÓ*?Ó@ˆEÜ�u“:¤ U£Ô9¬s°5«zÒ9Ð9Ñ9Ð9Ð9Ù49Ó:±E¨b�W×%Ñ% bÕ)°EˆEÐ:Ü  uÖ-‘��SØ—y‘y C§I¡IÒ-Ð-Ð-Ü—{‘{ 3¨Õ,Ð,Ð,ñ .ò 8ñ #ùò ;s   Â:D!c                  óÖ  — t         D �]U  } t        d| j                  «       dD �]6  }g dgddgg d¢dgdz  g}|D �]  }t        |«      D �cg c]=  }t	        j
                  ||t	        j                  |«      z   «      j                  |«      ‘Œ? }}|D �cg c]  }| j                  |«      ‘Œ }}t	        j                  |«      }t        |d«      }	t        |d«      }
t	        j                  ||	«      sJ ‚t	        j                  |	| j                  |
«      «      sJ ‚t        |d«      }	t        |d«      }
t	        j                  |	| j                  |
«      «      r�ŒJ ‚ �Œ9 �ŒX y c c}w c c}w )Nztesting shapes for )r   r   r"   r   rþ   r#   r   zb ... -> ... b)r±   r²   r³   r�   r   r*   rn   r+   rA   rd   r   r-   rB   )rC   Ún_arraysrÂ   r<   r€   Úarrays1ÚarrayÚarrays2Úresult0ru   rv   s              r   Ú test_concatenations_and_stackingr  �  sH  € ß"�?ˆÜÐ# W×%;Ñ%;Ô<Ü!ˆHØ˜1˜#  1˜v¢|°a°S¸1±WÐ=ˆFÜ�ÜTYÐZbÔTcÓdÑTcÈqœ2Ÿ9™9 Q¨¬B¯G©G°E«NÑ(:Ó;×CÑCÀEÕJÐTc�ÐdÙBIÓJÁ'¸˜7×-Ñ-¨eÕ4À'�ÐJÜŸ*™* WÓ-�Ü# G¨ZÓ8�Ü# G¨ZÓ8�Ü—~‘~ g¨wÔ7Ð7Ð7Ü—~‘~ g¨w×/?Ñ/?ÀÓ/HÔIÐIÐIä# GÐ-=Ó>�Ü# GÐ-=Ó>�Ü—~‘~ g¨w×/?Ñ/?ÀÓ/HÖIÐIÐIò  ò "ñ #ùò
 eùÚJs   Á
AE!
ÂE&
c                  ó¤  — t         D �]F  } | dv rŒ	t        j                  dd«      j                  g d¢«      j	                  d«      }i }t
        D ]“  }|j                  |«      }t        |d«      sŒ!t        |d| ¬«      }t        |d	| ¬«      }t        |d
| d¬«      }t        |d| ¬«      }|j                  «        |j                  |j                  «      }	|	||j                  <   Œ• t        d|j                  «       «       |j                  «       D ]=  \  }
}|j                  «       D ]%  \  }}t        j                   ||«      rŒJ |
|dg«       ‚ Œ? �ŒI y )N)ÚanyÚallr   é   rm   rÚ   Úgradza b c -> c ar(   z
c a -> a cza (c1 c2) -> ar   )r)   Úc1z... -> zcomparing gradients forzprovided different gradients)r´   r   r*   r+   rµ   r±   rA   Úhasattrr   ÚbackwardrB   r  r³   r²   ÚkeysÚitemsr¹   )r)   r   ÚresultsrC   Úy0Úy1Úy2Úy3Úy4r  Úname1Úgrad1Úname2Úgrad2s                 r   Útest_gradients_imperativesr   £  s/  € ç�Zˆ	Ø˜Ñ&ØÜ�I‰I�a˜Ó'×/Ñ/²	Ó:×AÑAÀ)ÓLˆØˆß&ˆGØ×#Ñ# AÓ&ˆBÜ˜2˜vÔ&Øä˜˜N°iÔ@ˆBÜ˜˜L°IÔ>ˆBÜ˜Ð,¸	ÀaÔHˆBÜ˜˜I°Ô;ˆBà�K‰KŒMØ×#Ñ# B§G¡GÓ,ˆDØ.2ˆG�G×*Ñ*Ò+ð 'ô 	Ð'¨¯©«Ô8Ø#ŸM™MžO‰LˆE�5Ø '§¡¦‘��uÜ—{‘{ 5¨%Õ0Ð`°5¸%ÐA_Ð2`Ó`Ð0ñ !0ò ,ñ)  r7   c                  óp  — t         D ]­  } t        d| j                  «       t        j                  dd¬«      j                  g d¢«      }g d¢}|D ]d  }t        j                  ||«      }| j                  |«      }| j                  ||«      }| j                  |«      }t        j                  ||«      rŒdJ ‚ Œ¯ y ©NzTiling tests for é   r    r¡   )r   r   r    r   r"   )r   )r   r   r   r    r   )r    r   r   r!   r   )
r±   r²   r³   r   r*   r+   ÚtilerA   rB   r-   )rC   r•   rº   Úrepeatsr`   Ú	convertedÚrepeatedra   s           r   Útest_tiling_imperativesr(  ¾  sŸ   € ß"ˆÜÐ! 7×#9Ñ#9Ô:Ü—	‘	˜)¨7Ô3×;Ñ;ºOÓLˆò
ˆ
ó
 "ˆGÜ—w‘w˜u gÓ.ˆHØ×*Ñ*¨5Ó1ˆIØ—|‘| I¨wÓ7ˆHØ×%Ñ% hÓ/ˆFÜ—>‘> &¨(Õ3Ð3Ð3ñ "ñ #r7   c                  óV  — t         D �]  } t        d| j                  «       t        j                  dd¬«      j                  g d¢«      }g d¢}|D ]Õ  }t        j                  ||«      }| j                  |j                  «      }| j                  | j                  ||«      ||gg«      }t        j                  ||«      sJ ‚| j                  d gt        |j                  «      z  «      }| j                  | j                  ||«      ||gg«      }t        j                  ||«      rŒÕJ ‚ �Œ" y r"  )r¾   r²   r³   r   r*   r+   r$  r?   r<   r@   r-   ro   )rC   r•   rº   r%  r`   rÃ   ra   s          r   Útest_tiling_symbolicr*  Ï  sÿ   € ß"�?ˆÜÐ! 7×#9Ñ#9Ô:Ü—	‘	˜)¨7Ô3×;Ñ;ºOÓLˆò
ˆ
ó
 "ˆGÜ—w‘w˜u gÓ.ˆHØ×'Ñ'¨¯©Ó4ˆCØ×(Ñ(¨¯©°c¸7Ó)CÀsÈEÀlÀ^ÓTˆFÜ—>‘> &¨(Ô3Ð3Ð3à×'Ñ'¨¨´°U·[±[Ó1AÑ(AÓBˆCØ×(Ñ(¨¯©°c¸7Ó)CÀsÈEÀlÀ^ÓTˆFÜ—>‘> &¨(Õ3Ð3Ð3ò "ñ #r7   za b c -> c a bza b c -> (c copy a b)r   r    r"   )r¸   Úarj   Úcza b c -> (a copy) b c r   ©r¸   za b c -> (c a) (copy1 b copy2))r+  Úcopy1Úcopy2za ...  -> a ... copyr!   z... c -> ... (copy1 c copy2))r.  r/  z...  -> ... z ...  -> copy1 ... copy2 za b c  -> copy1 a copy2 b c () c                 óò   — |j                  d«      \  }}|dz   |z   }t        | |fi |¤Ž}t        ||fddi|¤Ž}t        ||fddi|¤Ž}t        j                  | |«      sJ ‚t        j                  | |«      sJ ‚y)z*Checks repeat pattern by running reductionrÒ   r)   r%   r&   N)Úsplitr   r   r   r-   )	r   Úrepeat_patternrw   rÖ   r×   Úreduce_patternr'  Úreduced_minÚreduced_maxs	            r   Úcheck_reversionr6  ñ  s‰   € à ×&Ñ& tÓ,�K€Dˆ%Ø˜T‘\ DÑ(€NÜ�a˜Ñ1¨5Ñ1€HÜ˜ >ÑL¸UÐLÀeÑL€KÜ˜ >ÑL¸UÐLÀeÑL€KÜ�>‰>˜!˜[Ô)Ð)Ð)Ü�>‰>˜!˜[Ô)Ð)Ñ)r7   c                  óØ   — t        j                  d«      j                  g d¢«      } t        | dd¬«      }t        j                  | d    |«      sJ ‚t
        D ]  \  }}t        | |fi |¤Ž Œ y )Nr#  ©r   r    r"   za b c -> copy a b c r   r-  )r   r*   r+   r   r-   Úrepeat_test_casesr6  )r   Úx1r1   Úaxis_dimensionss       r   Útest_repeat_numpyr<  ü  s`   € ä
�	‰	�)Ó×$Ñ$¢YÓ/€AÜ	�Ð)°Ô	2€BÜ�>‰>˜!˜D™' 2Ô&Ð&Ð&ß$5Ñ ˆ�Ü˜˜7Ñ6 oÓ6ñ %6r7   c                  óV  — t        j                  d«      j                  g d¢«      } t        D ]z  }t	        d|j
                  «       t        D ]Y  \  }}t        | |fi |¤Ž}|j                  | «      }t        ||fi |¤Ž}|j                  |«      }t        j                  ||«      rŒYJ ‚ Œ| y ©Nr#  r8  zRepeat tests for )r   r*   r+   r±   r²   r³   r9  r   rA   rB   r-   )r   rC   r1   r;  r`   r&  r'  ra   s           r   Útest_repeat_imperativesr?    s›   € Ü
�	‰	�)Ó×$Ñ$¢YÓ/€Aß"ˆÜÐ! 7×#9Ñ#9Ô:ç(9Ñ$ˆG�_Ü˜a Ñ<¨OÑ<ˆHØ×*Ñ*¨1Ó-ˆIÜ˜i¨ÑD°OÑDˆHØ×%Ñ% hÓ/ˆFÜ—>‘> &¨(Õ3Ð3Ð3ñ ):ñ #r7   c            	      ón  — t        j                  d«      j                  g d¢«      } t        D ]†  }t	        d|j
                  «       t        D ]e  \  }}t        | |fi |¤Ž}|j                  | j                  «      }|j                  t        ||fi |¤Ž|| gg«      }t        j                  ||«      rŒeJ ‚ Œˆ y r>  )r   r*   r+   r¾   r²   r³   r9  r   r?   r<   r@   r-   )r   rC   r1   r;  r`   rÃ   ra   s          r   Útest_repeat_symbolicrA    s¦   € Ü
�	‰	�)Ó×$Ñ$¢YÓ/€Aç"ˆÜÐ! 7×#9Ñ#9Ô:ç(9Ñ$ˆG�_Ü˜a Ñ<¨OÑ<ˆHà×'Ñ'¨¯©Ó0ˆCØ×(Ñ(¬°°WÑ)PÀÑ)PÐTWÐYZÐS[ÐR\Ó]ˆFÜ—>‘> &¨(Õ3Ð3Ð3ñ ):ñ #r7   c                  óz  — dd l } ddlm} | j                  dk  rt	        j
                  «        t        j                  d«      j                  g d¢«      }t        D ]_  \  }}t        ||fi |¤Ž} |j                  | j                  |«      |fi |¤Ž}t        j                  |j                  |dz   «      |«      rŒ_J ‚ y )Nr   rU   rW   r#  r8  )rX   rY   rV   rZ   r   r[   r   r*   r+   r9  r   r\   r-   r]   )r^   r_   r   r1   r;  r`   ra   s          r   Útest_repeat_array_apirC     s—   € Ûå&à	‡~�~˜ÒÜ�‰Œä
�	‰	�)Ó×$Ñ$¢YÓ/€Aç$5Ñ ˆ�Ü˜!˜WÑ8¨Ñ8ˆà�—‘˜2Ÿ>™>¨!Ó,¨gÑI¸ÑIˆÜ�~‰~˜bŸj™j¨°!©Ó4°hÕ?Ð?Ð?ñ	 %6r7   za b c d -> c a d bza b c d -> (c 2 d a b)r#   )r+  r,  rI   z1 b c d -> (d copy 1) 3 b c z1 ...  -> 3 ... z"() ... d -> 1 (copy1 d copy2) ... z$1 b c d -> (1 1) (1 b) 2 c 3 d (1 1)c                  ó†   — t        j                  d«      j                  g d¢«      } t        D ]  \  }}t	        | |fi |¤Ž Œ y )Né0   )r   r   r!   r#   )r   r*   r+   Útest_cases_repeat_anonymousr6  )r   r1   r;  s      r   Útest_anonymous_axesrG  <  s:   € Ü
�	‰	�-Ó ×(Ñ(ªÓ6€Aß$?Ñ ˆ�Ü˜˜7Ñ6 oÓ6ñ %@r7   c                  óš  — t        j                  d«      j                  g d¢«      } t        j                  t	        t        | «      d«      t	        | d«      «      sJ ‚t        j                  t        t        | «      dd«      t        | dd«      «      sJ ‚t        j                  t        t        | «      dd¬«      t        | dd¬«      «      sJ ‚y )	Nr   r   z... -> (...)za ... e -> (...)r%   z...  -> b (...)r    )rj   )r   r*   r+   r-   r   rP   r   r   r   s    r   Útest_list_inputsrI  B  s¶   € Ü
�	‰	Ð#Ó$×,Ñ,ª_Ó=€Aä�>‰>Ü”$�q“'˜>Ó*Ü�!�^Ó$ôð ð ô �>‰>ÜŒt�A‹wÐ*¨EÓ2ÜˆqÐ$ eÓ,ôð ð ô �>‰>ÜŒt�A‹wÐ)¨QÔ/ÜˆqÐ# qÔ)ôð ñ r7   c                  ó6  — t        d«      st        j                  «        dd l} d| j                  j
                  _        d„ }| j                  |dd¬«      }| j                  |dd¬«      }| j                  g d¢¬«      }| j                   ||«       ||«      d	¬
«      sJ ‚| j                   ||«       ||«      d	¬
«      sJ ‚| j                  g d¢¬«      }| j                   ||«       ||«      d	¬
«      sJ ‚| j                   ||«       ||«      d	¬
«      sJ ‚y )NÚtorchr   Tc                 óf   — | j                   ^}}}}t        | dd¬«      } t        | dd|dz  ¬«      } | S )Nz"(a a2) b c ... -> b (c a2) (a ...)r   r¯   zb ca2 A -> b Ar'   )Úca2)r<   r   r   )r   r+  rj   r,  Úothers        r   Úfunc1z4test_torch_compile_with_dynamic_shape.<locals>.func1[  s<   € àŸ'™'ˆˆˆ1ˆa�%Ü�aÐ=À!ÔDˆä�1Ð&¨°1°q±5Ô9ˆØˆr7   F)ÚdynamicÚ	fullgraph)r!   r"   r#   r    rÌ   gñhãˆµøä>)Úatol)r#   r    r!   r   r    )
r
   r   r[   rK  Ú_dynamoÚconfigÚverboseÚcompileÚrandnr¹   )rK  rO  Úfunc1_compiled_staticÚfunc1_compiled_dynamicr   s        r   Ú%test_torch_compile_with_dynamic_shaperZ  S  s  € Ü˜WÔ%Ü�‰ŒÛð $(€E‡M�M×ÑÔ òð "ŸM™M¨%¸È$˜MÓOÐØ"Ÿ]™]¨5¸$È$˜]ÓOÐà�‰šˆÓ&€AØ�>‰>Ñ/°Ó2±E¸!³HÀ4ˆ>ÔHÐHÐHØ�>‰>Ñ0°Ó3±U¸1³XÀDˆ>ÔIÐIÐIà�‰šˆÓ)€AØ�>‰>Ñ/°Ó2±E¸!³HÀ4ˆ>ÔHÐHÐHØ�>‰>Ñ0°Ó3±U¸1³XÀDˆ>ÔIÐIÑIr7   c                 ó>   ‡ — t        ˆ fd„t        d«      D «       «      S )Nc              3   ó.   •K  — | ]  }‰|z	  d z  –— Œ y­w)r   N© )r„   r€   r   s     €r   r†   zbit_count.<locals>.<genexpr>q  s   øè ø€ Ð/¡Y ��Q‘˜!�|¡Yùs   ƒé   )r'   r�   r   s   `r   Ú	bit_countr_  p  s   ø€ ÜÓ/¤U¨2¤YÓ/Ó/Ð/r7   c                  óÀ  — t        j                  t        d«      D � cg c]  } t        | «      dz  dk(  ‘Œ c} «      j	                  dgdz  «      }t
        D �]  }t        d|j                  «       t        d«      D �]  }t        j                  ||d¬«      }t        j                  ||d¬«      }t        j                  ||«      rJ ‚t        d«      }t        |«      }t        |«      }d	||<   d
j                  |«      dz   d
j                  |«      z   }	t        |j                  |«      |	d¬«      }
t        |j                  |«      |	d¬«      }t        j                  ||j                  |
«      «      sJ ‚t        j                  ||j                  |«      «      r�Œ J ‚ t        j                  |dd¬«      }t        j                  |dd¬«      }d}	t        |j                  |«      |	d¬«      }
t        |j                  |«      |	d¬«      }t        j                  ||j                  |
«      «      sJ ‚t        j                  ||j                  |«      «      r�ŒJ ‚ yc c} w )z5Checks that any/all reduction works in all frameworksé@   r   r   r#   zReduction any/all tests for T)r…   rë   rk   Ú1r}   r‰   r  r(   r  )r   r   za b ... -> 1 1 ...N)r   rd   r�   r_  r+   r±   r²   r³   r  r  r-   rP   r�   r   rA   rB   )r   Úx_nprC   r…   Úexpected_result_anyÚexpected_result_allÚaxesÚaxes_inÚaxes_outr1   Úres_anyÚres_alls               r   Ú#test_reduction_imperatives_booleansrk  t  s  € ä�:‰:¼¸d¼ÓD¹°1œ	 !› qÑ(¨QÓ.¸ÑDÓE×MÑMÈqÈcÐTUÉgÓV€Dß"�?ˆÜÐ,¨g×.DÑ.DÔEä˜!—HˆDÜ"$§&¡&¨°DÀ4Ô"HÐÜ"$§&¡&¨°DÀ4Ô"HÐÜ—~‘~Ð&9Ð;NÔOÐOÐOä˜“>ˆDÜ˜4“jˆGÜ˜D“zˆHØ ˆH�T‰NØ—x‘x Ó(¨FÑ2°c·h±h¸xÓ6HÑIˆGä˜W×/Ñ/°Ó5°wÈ%ÔPˆGÜ˜W×/Ñ/°Ó5°wÈ%ÔPˆGä—>‘>Ð"5°w×7GÑ7GÈÓ7PÔQÐQÐQÜ—>‘>Ð"5°w×7GÑ7GÈÓ7PÖQÐQÐQð ô$ !Ÿf™f T°ÀÔFÐÜ Ÿf™f T°ÀÔFÐØ&ˆÜ˜×+Ñ+¨DÓ1°7ÀeÔLˆÜ˜×+Ñ+¨DÓ1°7ÀeÔLˆÜ�~‰~Ð1°7×3CÑ3CÀGÓ3LÔMÐMÐMÜ�~‰~Ð1°7×3CÑ3CÀGÓ3LÖMÐMÐMñ7 #ùò Es   �I)r   F)6rQ   rX   r   r   rY   r   Úeinops.einopsr   r   r   r   Úeinops.testsr   r´   r	   r
   r±   r¾   r>   Údefault_rngr=   r,   r.   r/   r   r6   rN   rS   rb   re   rz   r�   r»   rÇ   rØ   rü   r  r  r   r(  r*  rs   r9  r6  r<  r?  rA  rC  rF  rG  rI  rZ  r_  rk  r]  r7   r   Ú<module>ro     sÐ  ðÛ ã Û å ß JÓ JÝ 7ß Aá'°¸uÔE€Ù'°¸eÔD€à‡i�i×ÑÓ€ò	Ð ò!Ð ò!Ð ò'ò5ó$.ò6ò"@òPò #*òL7ò8!TòH2Fòjuò@0òf-òJò&aò64ò"4ð, ‘t“vÐØ™d¨¨Q°!°qÔ9Ð:Ø™t¨œ|Ð,Ø%¡t¨a°qÀÔ'BÐCØ™T qœ\Ð*Ø#¡T°¸Ô%;Ð<Ø‘T“VÐØ ¡$¨Q°aÔ"8Ð9Ø&©°1¸AÔ(>Ð?ðÐ ò*ò7ò
4ò4ò@ð& ™4›6Ð"Ø™t a¨1°Ô2Ð3Ø#¡T¨q¤\Ð2Ø™›Ð Ø)©4°a¸qÔ+AÐBØ+©T«VÐ4ðÐ ò7òò"Jò:0óNr7   