Ë
    øÿæiëH  ã                   óº  — d dl Z d dlmZ d dlZd dlZd dlmZmZm	Z	 d dl
mZ d dl
mZmZ dZ edg d¢«      Z ed	 ed
¬«      dddddg d¢g«       ed edd¬«      dg d¢«       ed ed¬«      dg d¢«      gZd„ Zd„ Zg e¢ ed ed¬«      dddg«      ‘ ed eddd¬ «      dd!g«      ‘ ed" ed¬«      ddd#g«      ‘Zd$„ Zd%„ Zd-d&„Zd'„ Zd(„ Zd)„ Zd*„ Zd+„ Zd,„ Zy).é    N)Ú
namedtuple)ÚEinopsErrorÚ	rearrangeÚreduce)ÚFLOAT_REDUCTIONS)Úcollect_test_backendsÚis_backend_testedzAlex RogozhnikovÚtestcase)ÚpatternÚaxes_lengthsÚinput_shapeÚwrong_shapesúb c h w -> b (c h w)é   ©Úc)é
   r   é   é(   © ©r   )r   r   r   )r   é   r   r   )é   r   r   r   r   z(b c (h1 h2) (w1 w2) -> b (c h2 w2) h1 w1é   ©Úh2Úw2)r   )r   r   r   r   )r   r   é   r   zb ... c -> c b ...r   )Úb)r   r   r   )r   r   )é   r   c                  ó0  — t        dd¬«      D �]õ  } t        d| j                  «       t        D �]Ò  \  }}}}t	        j
                  t	        j                  |«      d¬«      j                  |«      }t        ||fi |¤Ž} | j                  «       j                  |fi |¤Ž}|D ]9  }	  || j                  t	        j                  |d¬«      «      «       t        d«      ‚ t        j                   t        j"                  |«      «      }	| j%                   || j                  |«      «      «      }
| j%                   |	| j                  |«      «      «      }t	        j&                  ||
«      sJ ‚t	        j&                  |
|«      sJ ‚| j                  «       j)                  dd	¬
«      }| j                  |«      } | ||«      «      }|j+                  «        t	        j&                  | j%                  |j,                  «      d«      r�ŒÓJ ‚ �Œø y # t        $ r Y �Œtw xY w)NFT©ÚsymbolicÚlayersúTest layer for Úfloat32©ÚdtypeúFailure expectedú...->Úsum©Ú	reductionr   )r   ÚprintÚframework_nameÚrearrangement_patternsÚnpÚarangeÚprodÚreshaper   r$   Ú	RearrangeÚ
from_numpyÚzerosÚAssertionErrorÚBaseExceptionÚpickleÚloadsÚdumpsÚto_numpyÚallcloseÚReduceÚbackwardÚgrad)Úbackendr   r   r   r   ÚxÚresult_numpyÚlayerÚshapeÚlayer2Úresult1Úresult2Újust_sumÚvariableÚresults                  úm/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/einops/tests/test_layers.pyÚtest_rearrange_imperativerN   %   sÊ  € Ü(°%À×EÐEˆÜÐ ×!7Ñ!7Ô8ç@VÐ@VÑ<ˆG�\ ;°Ü—	‘	œ"Ÿ'™' +Ó.°iÔ@×HÑHÈÓUˆAÜ$ Q¨Ñ@°<Ñ@ˆLØ.�G—N‘NÓ$×.Ñ.¨wÑG¸,ÑGˆEÛ%�ð=Ù˜'×,Ñ,¬R¯X©X°eÀ9Ô-MÓNÔOô )Ð);Ó<Ð<ð &ô —\‘\¤&§,¡,¨uÓ"5Ó6ˆFØ×&Ñ&¡u¨W×-?Ñ-?ÀÓ-BÓ'CÓDˆGØ×&Ñ&¡v¨g×.@Ñ.@ÀÓ.CÓ'DÓEˆGÜ—;‘;˜|¨WÔ5Ð5Ð5Ü—;‘;˜w¨Ô0Ð0Ð0à—~‘~Ó'×.Ñ.¨wÀ%Ð.ÓHˆHà×)Ñ)¨!Ó,ˆHÙ™e H›oÓ.ˆFà�O‰OÔÜ—;‘;˜w×/Ñ/°·±Ó>ÀÖBÐBÐBò3 AWñ Føô %ò Úðús   Â$,HÈ	H	ÈH	c                  ó’  — t        dd¬«      D �]¶  } t        d| j                  «       t        D �]“  \  }}}}t	        j
                  t	        j                  |«      d¬«      j                  |«      }t        ||fi |¤Ž} | j                  «       j                  |fi |¤Ž}d gt        |«      z  }||g}	|	D �]  }
| j                  |
«      }||fg} ||«      }| j                  ||«      }t	        j                  ||«      sJ ‚t        j                   t        j"                  |«      «      } ||«      }| j                  ||«      }t	        j                  ||«      sJ ‚| j                  «       j%                  dd¬«      }| j                   ||«      |«      }t	        j&                  |«      }t	        j                  ||«      r�ŒJ ‚ �Œ– �Œ¹ y )	NTr"   r%   r&   r'   r*   r+   r,   )r   r.   r/   r0   r1   r2   r3   r4   r   r$   r5   ÚlenÚcreate_symbolÚeval_symbolr>   r:   r;   r<   r?   r+   )rB   r   r   r   Ú_wrong_shapesrC   rD   rE   Úinput_shape_of_nonesÚshapesrF   ÚsymbolÚeval_inputsÚresult_symbol1rH   rG   Úresult_symbol2rI   rJ   Úresult_sum1Úresult_sum2s                        rM   Útest_rearrange_symbolicr\   E   s   € Ü(°$¸t×DÐDˆÜÐ ×!7Ñ!7Ô8çAWÐAWÑ=ˆG�\ ;°Ü—	‘	œ"Ÿ'™' +Ó.°iÔ@×HÑHÈÓUˆAÜ$ Q¨Ñ@°<Ñ@ˆLØ.�G—N‘NÓ$×.Ñ.¨wÑG¸,ÑGˆEØ$( 6¬C°Ó,<Ñ#<Ð Ø!Ð#7Ð8ˆFä�Ø ×.Ñ.¨uÓ5�Ø &¨˜{˜m�á!& v£�Ø!×-Ñ-¨n¸kÓJ�Ü—{‘{ <°Ô9Ð9Ð9äŸ™¤f§l¡l°5Ó&9Ó:�Ù!'¨£�Ø!×-Ñ-¨n¸kÓJ�Ü—{‘{ 7¨GÔ4Ð4Ð4ð #Ÿ>™>Ó+×2Ñ2°7ÀeÐ2ÓL�à%×1Ñ1±(¸>Ó2JÈKÓX�Ü Ÿf™f Q›i�ä—{‘{ ;°Ö<Ð<Ð<ò'  ò BXñ Eó    zb c h w -> b ()z b c (h1 h2) (w1 w2) -> b c h1 w1é   )Úh1r   r   )r   r   é   r   zb ... c -> b)é   r   c                  óš  — t        dd¬«      D �]ª  } t        d| j                  «       t        D �]‡  }t        D �]z  \  }}}}t        | |||||«       t        j                  ddt        j                  |«      z   d¬«      j                  |«      }||j                  «       z  }t        |||fi |¤Ž} | j                  «       j                  ||fi |¤Ž}|D ]9  }		  || j                  t        j                  |	d¬«      «      «       t        d«      ‚ t#        j$                  t#        j&                  |«      «      }
| j)                   || j                  |«      «      «      }| j)                   |
| j                  |«      «      «      }t        j*                  ||«      sJ ‚t        j*                  ||«      sJ ‚| j                  «       j                  d	d
¬«      }| j                  |«      } | ||«      «      }|j-                  «        | j)                  |j.                  «      }|d
k(  rt        j*                  |d«      sJ ‚|dk(  r&t        j*                  ||j1                  «       «      sJ ‚|dv s�Œ4t        j2                  t        j4                  |ddg«      «      sJ ‚t        j6                  |«      dkD  r�Œ{J ‚ �ŒŠ �Œ­ y # t         $ r Y �Œöw xY w)NFTr"   r%   r   r&   r'   r)   r*   r+   r,   Úmean)ÚmaxÚminr   g      à?)r   r.   r/   Ú
REDUCTIONSÚreduction_patternsr1   r2   r3   r4   rc   r   r$   r?   r6   r7   r8   r9   r:   r;   r<   r=   r>   r@   rA   re   ÚallÚisinr+   )rB   r-   r   r   r   r   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rA   s                    rM   Útest_reduce_imperativerj   n   ss  € Ü(°%À×EÐEˆÜÐ ×!7Ñ!7Ô8ß#˜ˆIßDVÐDVÑ@�˜ {°LÜ�g˜y¨'°<ÀÈlÔ[Ü—I‘I˜a ¤R§W¡W¨[Ó%9Ñ!9ÀÔK×SÑSÐT_Ó`�Ø�Q—V‘V“X‘�Ü% a¨°)ÑL¸|ÑL�Ø/˜Ÿ™Ó(×/Ñ/°¸ÑSÀlÑS�Û)�EðAÙ˜g×0Ñ0´·±¸%ÀyÔ1QÓRÔSô -Ð-?Ó@Ð@ð *ô  Ÿ™¤f§l¡l°5Ó&9Ó:�Ø!×*Ñ*©5°×1CÑ1CÀAÓ1FÓ+GÓH�Ø!×*Ñ*©6°'×2DÑ2DÀQÓ2GÓ+HÓI�Ü—{‘{ <°Ô9Ð9Ð9Ü—{‘{ 7¨GÔ4Ð4Ð4à"Ÿ>™>Ó+×2Ñ2°7ÀeÐ2ÓL�à"×-Ñ-¨aÓ0�Ù!¡%¨£/Ó2�à—‘Ô!Ø×'Ñ'¨¯©Ó6�Ø Ò%ÜŸ;™; t¨QÔ/Ð/Ð/Ø Ò&ÜŸ;™; t¨T¯X©X«ZÔ8Ð8Ð8Ø Ó.ÜŸ6™6¤"§'¡'¨$°°A°Ó"7Ô8Ð8Ð8ÜŸ6™6 $›<¨#Ô-Ð-Ð-òE EWò $ñ Føô )ò Úðús   Ã,J=Ê=	K
Ë	K
c            
      ó  — t        dd¬«      D �]t  } t        d| j                  «       t        D �]Q  }t        D �]D  \  }}}}t        j                  ddt        j                  |«      z   d¬«      j                  |«      }||j                  «       z  }t        |||fi |¤Ž} | j                  «       j                  ||fi |¤Ž}d gt        |«      z  }	||	g}
|
D ]¤  }| j                  |«      }||fg} ||«      }| j                  ||«      }t        j                   ||«      sJ ‚t#        j$                  t#        j&                  |«      «      } ||«      }| j                  ||«      }t        j                   ||«      rŒ¤J ‚ �ŒG �ŒT �Œw y )NTr"   r%   r   r&   r'   )r   r.   r/   rf   rg   r1   r2   r3   r4   rc   r   r$   r?   rP   rQ   rR   r>   r:   r;   r<   )rB   r-   r   r   r   rS   rC   rD   rE   rT   rU   rF   rV   rW   rX   rH   rG   rY   rI   s                      rM   Útest_reduce_symbolicrl   —   sq  € Ü(°$¸t×DÐDˆÜÐ ×!7Ñ!7Ô8ß#˜ˆIßEWÐEWÑA�˜ {°MÜ—I‘I˜a ¤R§W¡W¨[Ó%9Ñ!9ÀÔK×SÑSÐT_Ó`�Ø�Q—V‘V“X‘�Ü% a¨°)ÑL¸|ÑL�Ø/˜Ÿ™Ó(×/Ñ/°¸ÑSÀlÑS�Ø(, v´°KÓ0@Ñ'@Ð$Ø%Ð';Ð<�ã#�EØ$×2Ñ2°5Ó9�FØ$*¨A ; -�Ká%*¨6£]�NØ%×1Ñ1°.À+ÓN�GÜŸ;™; |°WÔ=Ð=Ð=ä#Ÿ\™\¬&¯,©,°uÓ*=Ó>�FÙ%+¨F£^�NØ%×1Ñ1°.À+ÓN�GÜŸ;™; w°Õ8Ð8Ð8ò $ò FXò $ñ Er]   c                 ó¾  — t        d«      st        j                  «        y dd l}ddlm}m}m}m}m	} ddl
m}m}	m}
  | |ddd¬«      | r |
d	d
dd¬«      n |d¬«       |ddd¬«       |
d	d
dd¬«      |r!|j                  j                   |	d«      «      n |	d«       |dd«       |«        |dd«       |«        |ddddd¬«       |ddddd¬«       |dd«      «      S )NÚtorchr   )ÚConv2dÚLinearÚ	MaxPool2dÚReLUÚ
Sequential©ÚEinMixr5   r?   r   é   )r    r    ©Úkernel_sizeúb c (h h2) (w w2) -> b c h wrd   r   r   é   r   i�  éx   éT   úb c1 -> (b c2)úc1 c2Úc2©Úweight_shapeÚ
bias_shapeÚc1r   ú(b c2) -> b c3úc2 c3Úc3©r�   r‚   r   r†   r   )r	   ÚpytestÚskipÚ	torch.jitÚtorch.nnro   rp   rq   rr   rs   Úeinops.layers.torchru   r5   r?   ÚjitÚscript)Ú
use_reduceÚadd_scripted_layerrn   ro   rp   rq   rr   rs   ru   r5   r?   s              rM   Úcreate_torch_modelr‘   ±   sà   € Ü˜WÔ%Ü�‰�ãßHÕHçAÑAáÙ�1�a VÔ,ÙIS‰FÐ1°5¸QÀ1ÕEÑYbÐopÔYqÙ�1�b fÔ-ÙÐ1°5¸QÀ1ÔEá!ð �I‰I×Ñ™YÐ'=Ó>Ô?áÐ1Ó2Ù�:˜sÓ#Ù‹FÙ�3˜‹OÙ‹FÙÐ#°'ÀdÈrÐVXÔYÙÐ#°'ÀdÈrÐVXÔYÙ�2�r‹Nó
ð 	
r]   c                  ó˜  — t        d«      st        j                  «        y dd l} dd l} t        d¬«      }t        d¬«      }| j                  g d¢«      }| j                   ||«       ||«      «      rJ ‚|j                  t        j                  t        j                  |j                  «       «      «      «       | j                   ||«       ||«      «      sJ ‚| j                  j                  ||¬«      }| j                  j!                   ||«       ||«      dd¬	«       | j                  j!                   ||d
z   «       ||d
z   «      dd¬	«       | j                  j                  ||¬«      }| j                  j!                   ||«       ||«      dd¬	«       | j                  j!                   ||d
z   «       ||d
z   «      dd¬	«       y )Nrn   r   T)r�   F©r   r   é    r”   )Úexample_inputsçü©ñÒMbP?©ÚatolÚrtolr   )r	   rˆ   r‰   rn   rŠ   r‘   Úrandnr>   Úload_state_dictr:   r;   r<   Ú
state_dictr�   ÚtraceÚtestingÚassert_close)rn   Úmodel1Úmodel2ÚinputÚmodel3Úmodel4s         rM   Útest_torch_layerr¥   Ì   sp  € Ü˜WÔ%Ü�‰�ó 	Ûä#¨tÔ4ˆÜ#¨uÔ5ˆØ—‘šOÓ,ˆà—>‘>¡&¨£-±¸³Ô?Ð?Ð?Ø×ÑœvŸ|™|¬F¯L©L¸×9JÑ9JÓ9LÓ,MÓNÔOØ�~‰~™f U›m©V°E«]Ô;Ð;Ð;ð —‘—‘ ¸�Ó>ˆØ�‰×"Ñ"¡6¨%£=±&¸³-ÀdÐQUÐ"ÔVØ�‰×"Ñ"¡6¨%°!©)Ó#4±f¸UÀQ¹YÓ6GÈdÐY]Ð"Ô^à—‘—‘ ¸�Ó>ˆØ�‰×"Ñ"¡6¨%£=±&¸³-ÀdÐQUÐ"ÔVØ�‰×"Ñ"¡6¨%°!©)Ó#4±f¸UÀQ¹YÓ6GÈdÐY]Ð"Õ^r]   c                  ó&  — t        d«      st        j                  «        y dd l} dD ]h  }t	        d|¬«      }| j
                  j                  |«      }| j                  g d¢«      }| j                  j                   ||«       ||«      dd¬«       Œj y )	Nrn   r   )FTT)r�   r�   r“   r–   r—   )
r	   rˆ   r‰   rn   r‘   r�   rŽ   rš   rž   rŸ   )rn   Úscript_layerr    r¡   r¢   s        rM   Útest_torch_layers_scriptingr¨   æ   sr   € Ü˜WÔ%Ü�‰�ãã)ˆLÜ'°4ÈLÔYˆFØ—Y‘Y×%Ñ% fÓ-ˆFØ—K‘K¢Ó0ˆEà�M‰M×&Ñ&¡v¨e£}±f¸U³mÈ$ÐUYÐ&ÕZñ *r]   c                  ó  ‡‡‡‡‡‡‡— t         j                  j                  «       } t        d«      st	        j
                  «        y dd l}|j                  dk  rt	        j
                  «        ddlm	Š ddlm
Š ddlmŠ ddlmŠ ddlmŠmŠmŠm} ˆˆˆˆˆˆˆfd	„} |«       } |«       }| j'                  g d
¢¬«      j)                  d«      }t        j*                  |j-                  |«      |j-                  |«      «      rJ ‚d}t/        d|«       |j0                  j2                  j5                  ||«       |j0                  j2                  j7                  ||¬«      }t         j8                  j;                  |j-                  |«      |j-                  |«      «       d}	|j0                  j2                  j=                  |j?                  «       |¬«      }
|jA                  |	«       |
jC                  |	«       |jC                  |	«       t         j8                  j;                  |j-                  |«      |j-                  |«      «       t         j8                  j;                  |j-                  |«      |
j-                  |«      «       y )NÚ
tensorflowr   z2.16.)ÚConv2D)ÚDense)rr   )rs   )ru   r5   r?   Úkeras_custom_objectsc                  óê   •—  ‰ ‰ ddg d¢¬«       ‰dddd¬«       ‰ d	d¬
«       ‰dddd¬«       ‰d«       ‰d«       ‰«        ‰d«       ‰«        ‰ddddd¬«       ‰ddddd¬«       ‰d«      g«      S )Nrv   r    )r”   r”   r   )rx   r   ry   rd   r   r   rz   rw   r   r{   r|   r}   r~   r   r€   r„   r…   r†   r‡   r   r   )ro   ru   rp   rr   r5   r?   rs   s   €€€€€€€rM   Úcreate_keras_modelz,test_keras_layer.<locals>.create_keras_model  s—   ø€ Ùá˜1¨!ºÔEÙÐ9¸5ÀQÈ1ÔMÙ˜2¨1Ô-ÙÐ9¸5ÀQÈ1ÔMÙÐ4Ó5Ù˜3“KÙ“FÙ˜2“JÙ“FÙÐ+¸'ÈdÐWYÐ^`ÔaÙÐ+¸'ÈdÐWYÐ^`ÔaÙ˜2“Jðóð r]   )r   r”   r”   r   )Úsizer&   z/tmp/einops_tf_model.h5Útemp_path_keras1)Úcustom_objectsz/tmp/einops_tf_model.weights.h5)"r1   ÚrandomÚdefault_rngr	   rˆ   r‰   rª   Ú__version__Útensorflow.keras.layersr«   r¬   rr   Útensorflow.keras.modelsrs   Úeinops.layers.kerasru   r5   r?   r­   ÚnormalÚastyper>   Úpredict_on_batchr.   ÚkerasÚmodelsÚ
save_modelÚ
load_modelrž   Úassert_allcloseÚmodel_from_jsonÚto_jsonÚsave_weightsÚload_weights)ÚrngÚtfr­   r¯   r    r¡   r¢   Útmp_model_filenamer£   Úweight_filenamer¤   ro   ru   rp   rr   r5   r?   rs   s              @@@@@@@rM   Útest_keras_layerrÉ   ô   sÕ  þ€ Ü
�)‰)×
Ñ
Ó
!€CÜ˜\Ô*Ü�‰�ãà�>‰>˜GÒ#ä�K‰KŒMÝ<Ý;Ý0Ý6çWÓW÷	ò 	ñ$ $Ó%ˆÙ#Ó%ˆà—
‘
¢�
Ó0×7Ñ7¸	ÓBˆä—;‘;˜v×6Ñ6°uÓ=¸v×?VÑ?VÐW\Ó?]Ô^Ð^Ð^ð 7ÐäÐ Ð"4Ô5Ø
�‰�‰×"Ñ" 6Ð+=Ô>Ø—‘—‘×+Ñ+Ð,>ÐOcÐ+Ódˆä
�
‰
×"Ñ" 6×#:Ñ#:¸5Ó#AÀ6×CZÑCZÐ[`ÓCaÔbà;ˆà—‘—‘×0Ñ0°·±Ó1AÐRfÐ0ÓgˆØ×Ñ˜OÔ,Ø×Ñ˜OÔ,Ø×Ñ˜OÔ,ä
�
‰
×"Ñ" 6×#:Ñ#:¸5Ó#AÀ6×CZÑCZÐ[`ÓCaÔbô 	�
‰
×"Ñ" 6×#:Ñ#:¸5Ó#AÀ6×CZÑCZÐ[`ÓCaÕbr]   c                  óÞ  ‡‡‡‡‡‡‡— t        d«      st        j                  «        yddl} ddl}ddlmŠ ddlmŠ ddlm	Šm
ŠmŠ  G ˆˆˆˆfd„d‰j                  «      } |«       Š‰j                  g d¢«      Š‰j                  |j                  j!                  d«      ‰«      }ˆˆˆfd	„}|j#                  |«      } ||«      } ||«      \  }}‰j%                  ||«      sJ ‚|j&                  d
k  r|j(                  }	n|j*                  j,                  }	 |	d„ ||«      }
 ||
«      }||k\  s	J ||f«       ‚| j.                  j1                  |«      }| j.                  j3                  ||«      }y)z|
    One-off simple tests for Flax layers.
    Unfortunately, Flax layers have a different interface from other layers.
    Újaxr   N)Úlinenrt   c                   ó<   •— e Zd ZW °j                  ˆ ˆˆfd„«       Zy)útest_flax_layers.<locals>.NNc                 ó®   •—   ‰dddt        dddd¬«      ¬	«      |«      }  ‰d
t        d¬«      ¬	«      |«      }  ‰ddt        d¬«      «      |«      }|S )Nz b (h h2) (w w2) c -> b h w c_outzh2 w2 c c_outÚc_outr   r   é   r    )r   r   r   rÐ   )Úsizeszb h w c -> b (w h c)r   z
b hwc -> brc   r   )Úhwc)Údict)ÚselfrC   ru   r5   r?   s     €€€rM   Ú__call__z%test_flax_layers.<locals>.NN.__call__D  sl   ø€ ð‘FØ6¸ÈÔX\Ð`aÐfgÐklÐtuÔXvôàó�ð G‘IÐ4¼DÀ1¼IÔFÀqÓI�ØE‘F˜<¨´¸)Ô1DÓEÀaÓH�Ø�r]   N)Ú__name__Ú
__module__Ú__qualname__ÚcompactrÖ   )ru   r5   r?   Únns   €€€€rM   ÚNNrÎ   C  s   ø„ Ù�Z‰Zõó ñr]   rÜ   )r   rÑ   é	   rÑ   c                 óZ   •— ‰j                   j                  ‰j                  | ‰«      «      S )N)ÚlinalgÚnormÚapply)ÚparamsÚfixed_inputÚjnpÚmodels    €€€rM   Úeval_at_pointz'test_flax_layers.<locals>.eval_at_pointQ  s!   ø€ Ø—:‘:—?‘? 5§;¡;¨v°{Ó#CÓDÐDr]   z0.6.0c                 ó   — | |dz  z
  S )Nr–   r   )Úx1Úx2s     rM   Ú<lambda>z"test_flax_layers.<locals>.<lambda>]  s   € ¨"¨r°E©zª/r]   )r	   rˆ   r‰   ÚflaxrË   Ú	jax.numpyÚnumpyrÌ   Úeinops.layers.flaxru   r5   r?   ÚModuleÚonesÚinitr³   ÚPRNGKeyÚvalue_and_gradr>   rµ   Útree_mapÚtreeÚmapÚserializationÚto_bytesÚ
from_bytes)rë   rË   rÜ   râ   ræ   ÚvandgÚvalue0Úvalue1Úgrad1rô   Úparams2Úvalue2ÚfbytesÚ_loadedru   r5   r?   rã   rä   rå   rÛ   s                 @@@@@@@rM   Útest_flax_layersr  4  s:  þ€ ô
 ˜UÔ#Ü�‰�ãÛÝÝ$ç@Ñ@÷	ñ 	�—‘ô 	ñ “ˆØ—h‘hÒ4Ó5ˆØ—‘˜CŸJ™J×.Ñ.¨qÓ1°;Ó?ˆö	Eð ×"Ñ" =Ó1ˆÙ˜vÓ&ˆÙ˜f›‰ˆ�Ø�|‰|˜F FÔ+Ð+Ð+Ø�?‰?˜WÒ$Ø—|‘|‰Hà—x‘x—|‘|ˆHáÑ9¸6À5ÓIˆá˜wÓ'ˆØ˜ÒÐ1 &¨&Ð!1Ó1Ðð ×#Ñ#×,Ñ,¨VÓ4ˆØ×$Ñ$×/Ñ/°¸Ó?‰r]   c            
      óü  — ddl m}   | ddddd¬«      }|j                  �J ‚|j                  �J ‚|j                  d
k(  sJ ‚|j
                  g d¢k(  sJ ‚|j                  �J ‚ | dddddddd¬«      }|j                  �J ‚|j                  �J ‚|j                  d
k(  sJ ‚|j
                  g d¢k(  sJ ‚|j                  g d¢k(  sJ ‚ | ddd¬«      }|j                  �J ‚|j                  �J ‚|j                  dk(  sJ ‚|j
                  g k(  sJ ‚|j                  g k(  sJ ‚ | ddddd¬«      }|j                  �J ‚|j                  �J ‚|j                  dk(  sJ ‚|j
                  g d¢k(  sJ ‚|j                  �J ‚ | ddddd¬«      }|j                  dk(  sJ ‚|j                  t        dd¬«      k(  sJ ‚|j                  dk(  sJ ‚|j                  dk(  sJ ‚|j
                  g d¢k(  sJ ‚|j                  �J ‚ | dd d!ddd¬"«      }|j                  d#k(  sJ ‚|j                  t        dd¬$«      k(  sJ ‚|j                  d%k(  sJ ‚|j                  d&k(  sJ ‚|j
                  ddgk(  sJ ‚|j                  g d'¢k(  sJ ‚ | d(d)d*ddd¬+«      }|j                  d,k(  sJ ‚|j                  t        dd¬-«      k(  sJ ‚|j                  d.k(  sJ ‚|j                  d/k(  sJ ‚|j
                  g d0¢k(  sJ ‚|j                  g d1¢k(  sJ ‚y	)2zP
    Testing that einmix correctly decomposes into smaller transformations.
    r   ©Ú_EinmixDebuggerúa b c d e -> e d c b aúd a br   r   r    ©r�   ÚdÚar   Nzabcde,dab->edcba)r   r   r    z	a b c d er   rÑ   )r�   r‚   r
  r   r   r	  Úe)rÑ   r   r   )r    rÑ   r   r   r   z
... -> ...Ú )r�   r‚   z	...,->...zb a ...  -> b c ...zb a c)r�   r
  r   r   zba...,bac->bc...)r   r   r   z(b a) ... -> b c (...)z(b a) ... -> b a ...)r
  r   zb c ... -> b c (...)zb ... (a c) -> b ... (a d)zc dza d)r�   r‚   r
  r   r	  zb ... (a c) -> b ... a c)r
  r   zb ... a d -> b ... (a d)zb...ac,cd->b...ad)r   r   rÑ   za ... (b c) -> a (... d b)zc d bzd b)r�   r‚   r   r   r	  za ... (b c) -> a ... b c)r   r   za ... d b -> a (... d b)za...bc,cdb->a...db)r   rÑ   r   )r   rÑ   r   )	Úeinops.layers._einmixr  Úpre_reshape_patternÚpost_reshape_patternÚeinsum_patternÚsaved_weight_shapeÚsaved_bias_shapeÚpre_reshape_lengthsrÔ   )r  Úmixin1Úmixin2Úmixin3Úmixin4Úmixin5Úmixin6Úmixin7s           rM   Útest_einmix_decompositionr  g  sÃ  € õ 6áØ ØØ
ˆq�Aô€Fð
 ×%Ñ%Ð-Ð-Ð-Ø×&Ñ&Ð.Ð.Ð.Ø× Ñ Ð$6Ò6Ð6Ð6Ø×$Ñ$ª	Ò1Ð1Ð1Ø×"Ñ"Ð*Ð*Ð*áØ ØØØ
ˆq�A˜˜aô	€Fð ×%Ñ%Ð-Ð-Ð-Ø×&Ñ&Ð.Ð.Ð.Ø× Ñ Ð$6Ò6Ð6Ð6Ø×$Ñ$ª	Ò1Ð1Ð1Ø×"Ñ"¢oÒ5Ð5Ð5áØØØô€Fð
 ×%Ñ%Ð-Ð-Ð-Ø×&Ñ&Ð.Ð.Ð.Ø× Ñ  KÒ/Ð/Ð/Ø×$Ñ$¨Ò*Ð*Ð*Ø×"Ñ" bÒ(Ð(Ð(áØØØ
ˆq�Aô€Fð
 ×%Ñ%Ð-Ð-Ð-Ø×&Ñ&Ð.Ð.Ð.Ø× Ñ Ð$6Ò6Ð6Ð6Ø×$Ñ$ª	Ò1Ð1Ð1Ø×"Ñ"Ð*Ð*Ð*áØ ØØ
ˆq�Aô€Fð
 ×%Ñ%Ð)?Ò?Ð?Ð?Ø×%Ñ%¬°°Q¬Ò7Ð7Ð7Ø×&Ñ&Ð*@Ò@Ð@Ð@Ø× Ñ Ð$6Ò6Ð6Ð6Ø×$Ñ$ª	Ò1Ð1Ð1Ø×"Ñ"Ð*Ð*Ð*áØ$ØØØ
ˆq�Aô	€Fð ×%Ñ%Ð)CÒCÐCÐCØ×%Ñ%¬°°Q¬Ò7Ð7Ð7Ø×&Ñ&Ð*DÒDÐDÐDØ× Ñ Ð$7Ò7Ð7Ð7Ø×$Ñ$¨¨A¨Ò.Ð.Ð.Ø×"Ñ"¢iÒ/Ð/Ð/áØ$ØØØ
ˆq�Aô	€Fð ×%Ñ%Ð)CÒCÐCÐCØ×%Ñ%¬°°Q¬Ò7Ð7Ð7Ø×&Ñ&Ð*DÒDÐDÐDØ× Ñ Ð$8Ò8Ð8Ð8Ø×$Ñ$ª	Ò1Ð1Ð1Ø×"Ñ"¢iÒ/Ð/Ñ/r]   c                  óà  — ddl m}  t        j                  t        «      5   | dddd¬«       ddd«       t        j                  t        «      5   | dd	ddd
¬«       ddd«       t        j                  t        «      5   | ddd
¬«       ddd«       t        j                  t        «      5   | ddd
d¬«       ddd«       y# 1 sw Y   Œ”xY w# 1 sw Y   ŒqxY w# 1 sw Y   ŒPxY w# 1 sw Y   yxY w)z!
    Testing different cases
    r   r  r  r  r   r   )r�   r	  r
  Nzw a br   r  z(...) a -> ... ar
  )r�   r
  z(...) a -> a ...)r�   r
  r‚   )r  r  rˆ   Úraisesr   r  s    rM   Útest_einmix_restrictionsr  Á  sÃ   € õ 6ä	�‰”{Õ	#ÙØ$Ø Ø�1õ	
÷ 
$ô 
�‰”{Õ	#ÙØ$Ø Ø�1˜õ	
÷ 
$ô 
�‰”{Õ	#ÙØØ õ	
÷ 
$ô 
�‰”{Õ	#ÙØØ Øõ	
÷ 
$Ð	#÷) 
$Ð	#ú÷ 
$Ð	#ú÷ 
$Ð	#ú÷ 
$Ð	#ús/    C ÁCÁ=CÂ*C$Ã C	ÃCÃC!Ã$C-)FF)r:   Úcollectionsr   rí   r1   rˆ   Úeinopsr   r   r   Úeinops.testsr   rf   r   r	   Ú
__author__r
   rÔ   r0   rN   r\   rg   rj   rl   r‘   r¥   r¨   rÉ   r  r  r  r   r]   rM   Ú<module>r#     sI  ðÛ Ý "ã Û ç 1Ñ 1Ý 7ß Aà€
á�jÒ"\Ó]€ñ ØÙˆrŒ
ØØ	ˆU�LÐ"2Ò4DÐEó	ñ Ø2Ù��aÔØÚ*ó	ñ ØÙˆrŒ
ØÚó	ðÐ ò,Cò@=ðBØðáÐ¡ r¤
Ð,<¸uÀlÐ>SÓTðñ Ð/±¸ÀÀaÔ1HÐJZÐ]mÐ\nÓoðñ ˆ^™T BœZÐ)9¸EÀ8Ð;LÓMð	Ð ò&.òR9ó4
ò6_ò4[ò=cò@0@òfW0ót
r]   