Ë
    øÿæiö,  ã                   óR   — 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
 d„ Zd„ Zd„ Zy)é    N)Úparse_shapeÚ	rearrangeÚreduce)Úis_backend_tested)Úimp_op_backendsc                  óN  ‡‡‡‡‡— d„ } d„ }d„ }d„ }d„ }d„ }d„ }d„ }d	„ }d
„ }	d„ }
d„ Šd„ Šd„ Šd„ Šd„ Š| |||||||||	|
ˆˆfd„ˆˆfd„ˆˆfd„ˆˆfd„g}t         D �]E  }t        d|j                  «       |D �]&  }t        j                  d«      j                  g d¢«      } ||«      }|j                   ||j                  |«      «      «      }t        j                  ||«      sJ ‚t        j                  d«      j                  g d¢«      }|j                  dk7  r|j                  dk7  rdnd}t        j                  d d d…d d d…d d d…d d |…f   } |||   «      }|j                   ||j                  |«      |   «      «      }t        j                  ||«      r�Œ'J ‚ �ŒH y ) Nc                 óR   — t        | d«      }t        |j                  «      dk(  sJ ‚|S )Núb c h w -> b h w c©é
   é   é(   é   ©r   ÚtupleÚshape©ÚxÚys     úo/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/einops/tests/test_examples.pyÚtest1z&test_rearrange_examples.<locals>.test1
   s+   € ä�aÐ-Ó.ˆÜ�Q—W‘W‹~Ð!1Ò1Ð1Ð1Øˆó    c                 óR   — t        | d«      }t        |j                  «      dk(  sJ ‚|S )Nzb c h w -> b (c h w))r   iÀ]  r   r   s     r   Útest2z&test_rearrange_examples.<locals>.test2   s+   € ä�aÐ/Ó0ˆÜ�Q—W‘W‹~Ð!3Ò3Ð3Ð3Øˆr   c                 óX   — t        | ddd¬«      }t        |j                  «      dk(  sJ ‚|S )Nz$b (c h1 w1) h w -> b c (h h1) (w w1)é   ©Úh1Úw1)r   é   é<   éP   r   r   s     r   Útest3z&test_rearrange_examples.<locals>.test3   s/   € ä�aÐ?ÀAÈ!ÔLˆÜ�Q—W‘W‹~Ð!8Ò8Ð8Ð8Øˆr   c                 óX   — t        | ddd¬«      }t        |j                  «      dk(  sJ ‚|S )Nz$b c (h h1) (w w1) -> b (h1 w1 c) h wr   r   )r   r"   é   r   r   r   s     r   Útest4z&test_rearrange_examples.<locals>.test4   s/   € ä�aÐ?ÀAÈ!ÔLˆÜ�Q—W‘W‹~Ð!?Ò?Ð?Ð?Øˆr   c                 óR   — t        | d«      }t        |j                  «      dk(  sJ ‚|S )Nz(b1 sound b2 letter -> b1 b2 sound letter)r   r   r   r   r   r   s     r   Útest5z&test_rearrange_examples.<locals>.test5"   s+   € ä�aÐCÓDˆÜ�Q—W‘W‹~Ð!1Ò1Ð1Ð1Øˆr   c                 óÌ   — t        | d«      }|d d …d d d…f   }t        |j                  «      dk(  sJ ‚t        |dfi t        | d«      ¤Ž}t        |j                  «      dk(  sJ ‚|S )Nzb c h w -> (b h w) cr   )ià.  r   z(b h w) c2 -> b c2 h wzb _ h w©r   r   r   r   )r   r   r   r   )r   Útr   s      r   Útest6z&test_rearrange_examples.<locals>.test6(   sl   € ä�aÐ/Ó0ˆØŠa‘�1�ˆf‰IˆÜ�Q—W‘W‹~Ð!3Ò3Ð3Ð3ä�aÐ1ÑO´[ÀÀIÓ5NÑOˆÜ�Q—W‘W‹~Ð!1Ò1Ð1Ð1Øˆr   c                 ó–   — t        | dd¬«      \  }}t        |j                  «      dk(  sJ ‚t        |j                  «      dk(  sJ ‚||z   S )Nzb (c g) h w -> g b c h wr   )Úgr*   r   )r   Úy1Úy2s      r   Útest7z&test_rearrange_examples.<locals>.test72   sL   € ä˜1Ð8¸AÔ>‰ˆˆBÜ�R—X‘X‹Ð"2Ò2Ð2Ð2Ü�R—X‘X‹Ð"2Ò2Ð2Ð2Ø�B‰wˆr   c                 óZ   — t        | dddd¬«      }t        |j                  «      dk(  sJ ‚|S )Nzb c (h h1) (w w1) -> b c h wÚmaxr   )Ú	reductionr   r   )r   r   r%   r   )r   r   r   r   s     r   Útest8z&test_rearrange_examples.<locals>.test89   s2   € ä�1Ð4ÀÈ!ÐPQÔRˆÜ�Q—W‘W‹~Ð!;Ò;Ð;Ð;Øˆr   c                 ó¢   — t        | dd¬«      }t        |j                  «      dk(  sJ ‚t        |d«      }t        |j                  «      dk(  sJ ‚|S )Nzb c h w -> b c () ()r3   )r4   )r   r   é   r7   zb c () () -> c b)r   r   )r   r   r   r   r   s     r   Útest9z&test_rearrange_examples.<locals>.test9?   sO   € ä�1Ð,¸Ô>ˆÜ�Q—W‘W‹~ Ò/Ð/Ð/Ü�aÐ+Ó,ˆÜ�Q—W‘W‹~ Ò)Ð)Ð)Øˆr   c                 ón   — t        | dz   «      }t        |d«      }t        |j                  «      dk(  sJ ‚|S )Nr   r
   r   ©Úlistr   r   r   ©r   Útensorss     r   Útest10z'test_rearrange_examples.<locals>.test10G   s9   € ä�q˜1‘u“+ˆÜ˜GÐ%9Ó:ˆÜ�W—]‘]Ó#Ð'7Ò7Ð7Ð7Øˆr   c                 ón   — t        | dz   «      }t        |d«      }t        |j                  «      dk(  sJ ‚|S )Nr   zb c h w -> h (b w) c)r   i�  r   r:   r<   s     r   Útest11z'test_rearrange_examples.<locals>.test11N   s9   € ä�q˜1‘u“+ˆÜ˜GÐ%;Ó<ˆÜ�W—]‘]Ó#Ð'8Ò8Ð8Ð8Øˆr   c                 óD   —  || «      } t        | d||¬«      }  || «      } | S )Nzb (c1 c2) h w-> b (c2 c1) h w)Úc1Úc2©r   )r   ÚconvolverB   rC   s       r   Ú
shufflenetz+test_rearrange_examples.<locals>.shufflenetU   s*   € á�Q‹KˆÜ�aÐ8¸RÀBÔGˆÙ�Q‹KˆØˆr   c                 óf   — t        | d«      } t        | d|¬«      }  || «      } t        | d|¬«      } | S )Núb c t1 t2 -> b c (t1 t2)z b c (t stride) -> (stride b) c t)Ústridez (stride b) c t -> b c (t stride)rD   )r   rI   Úusual_convolutions      r   Úconvolve_strided_1dz4test_rearrange_examples.<locals>.convolve_strided_1d\   s<   € Ü�aÐ3Ó4ˆÜ�aÐ;ÀFÔKˆÙ˜aÓ ˆÜ�aÐ;ÀFÔKˆØˆr   c                 óR   — t        | d||¬«      }  || «      } t        | d||¬«      } | S )Nz$b c (h hs) (w ws) -> (hs ws b) c h w)ÚhsÚwsz$(hs ws b) c h w -> b c (h hs) (w ws)rD   )r   Úh_strideÚw_striderJ   s       r   Úconvolve_strided_2dz4test_rearrange_examples.<locals>.convolve_strided_2dc   s5   € Ü�aÐ?ÀHÐQYÔZˆÙ˜aÓ ˆÜ�aÐ?ÀHÐQYÔZˆØˆr   c                 ól   — t        | d«      } t        | dd¬«      } ||«      }| t        |dd¬«      z   } | S )NrH   zb c (t dt) -> b (dt c) tr   )Údtzb (dt c) t -> b c (t dt)rD   )r   rJ   r   s      r   Úunet_like_1dz-test_rearrange_examples.<locals>.unet_like_1di   sA   € ä�aÐ3Ó4ˆÜ�aÐ3¸Ô:ˆÙ˜aÓ ˆØ”	˜!Ð7¸AÔ>Ñ>ˆØˆr   c                 ó   — | S )N© )r   s    r   Úconvolve_mockz.test_rearrange_examples.<locals>.convolve_mockr   s   € Øˆr   c                 ó   •—  ‰| ‰dd¬«      S )Né   r    )rE   rB   rC   rV   )r   rW   rF   s    €€r   Ú<lambda>z)test_rearrange_examples.<locals>.<lambda>�   s   ø€ ‘*˜Q¨¸1ÀÕCr   c                 ó   •—  ‰| d‰¬«      S )Nr   )rI   rJ   rV   )r   rW   rK   s    €€r   rZ   z)test_rearrange_examples.<locals>.<lambda>‚   s   ø€ Ñ% a°À]ÕSr   c                 ó   •—  ‰| dd‰¬«      S )Nr   )rO   rP   rJ   rV   )r   rW   rQ   s    €€r   rZ   z)test_rearrange_examples.<locals>.<lambda>ƒ   s   ø€ Ñ% a°!¸aÐS`Õar   c                 ó   •—  ‰| ‰¬«      S )N)rJ   rV   )r   rW   rT   s    €€r   rZ   z)test_rearrange_examples.<locals>.<lambda>„   s   ø€ ‘,˜q°MÕBr   ztesting source_examples for i€© )r   r   r   r   i ù )r   r!   r   r   ÚtorchÚoneflowéÿÿÿÿr7   r   é   )
r   ÚprintÚframework_nameÚnpÚarangeÚreshapeÚto_numpyÚ
from_numpyÚarray_equalÚ	index_exp)r   r   r#   r&   r(   r,   r1   r5   r8   r>   r@   ÚtestsÚbackendÚtestr   Úresult1Úresult2Ú	last_stepÚindexing_expressionrW   rK   rQ   rF   rT   s                      @@@@@r   Útest_rearrange_examplesrr   	   s¼  ü€ òòòòòòòòòòòòòòòòð 	ØØØØØØØØØØÜCÜSÜaÜBð€E÷$ #�?ˆÜÐ,¨g×.DÑ.DÔEÜˆDÜ—	‘	Ð+Ó,×4Ñ4Ò5EÓFˆAÙ˜1“gˆGØ×&Ñ&¡t¨G×,>Ñ,>¸qÓ,AÓ'BÓCˆGÜ—>‘> '¨7Ô3Ð3Ð3ô —	‘	Ð7Ó8×@Ñ@ÒAaÓbˆAà&×5Ñ5¸Ò@ÀW×E[ÑE[Ð_hÒEh™ÐopˆIÜ"$§,¡,©s°¨s±C°a°C¹¸1¸¹kÀ	¸kÐ/IÑ"JÐÙ˜1Ð0Ñ1Ó2ˆGØ×&Ñ&¡t¨G×,>Ñ,>¸qÓ,AÐBUÑ,VÓ'WÓXˆGÜ—>‘> '¨7Ö3Ð3Ð3ò ñ #r   c            	      ób  — t        j                  g d¢«      } d}t         j                  dk  ry | j                  D �cg c]  }t        j                  ||||g«      ‘Œ }}|d   d d …d d …d d…d d …f   |d<   |d   d d …d d …d d …d d…f   |d<   | j	                  dg| j                  ¢­«      }|D ]  }t        j
                  d||«      }Œ |j	                  d«      }| j	                  d«      }|D ]@  }|j                  \  }}}	}
t        |d|	|¬	«      }|t        |d
«      z  }t        |d|
|¬«      }ŒB |}t        j                  ||«      sJ ‚| }|D ]1  }|j                  \  }}}	}
t        |d|	|¬	«      }|t        |d
«      z  }Œ3 |j	                  d«      }t        j                  ||«      sJ ‚y c c}w )N)ra   rY   r    é   rY   z1.15.0r   r7   r`   zi j a b, a i ...  -> b ... jz (i rest alpha) -> rest (alpha i))ÚalphaÚiz$i j alpha beta -> (alpha i) (j beta)zrest (beta j) -> (beta rest j))ÚbetaÚjz"i ... (j alpha) -> ... j (alpha i))rd   ÚonesÚ__version__r   rf   Úeinsumr   Úallclose)r   ÚrankÚdÚGsr   ÚGr/   rv   rx   ru   rw   r0   Úy3s                r   Útensor_train_example_numpyr‚   ™   s¼  € ô 	�‰’Ó€AØ€DÜ	‡~�~˜Ò àà/0¯wªwÓ	7©w¨!Œ"�'‰'�1�a˜˜tÐ$Õ
%¨w€BÐ	7Øˆq‰E’!’Q˜˜˜šA�+Ñ€B€q�EØ�‰V’A’qš!˜R˜a˜R�KÑ €B€r�Fð 	
�	‰	�1�-�q—w‘w‘-Ó €AÛˆô �I‰IÐ4°a¸Ó;‰ð ð 
�‰�2‹€Bð 	
�	‰	�"‹€AÛˆØŸG™GÑˆˆ1ˆe�TÜ�aÐ;À5ÈAÔNˆØ”	˜!ÐCÓDÑDˆÜ�aÐ9ÀÈÔJ‰ð	 ð
 
€BÜ�;‰;�r˜2ÔÐÐð 	
€AÛˆØŸG™GÑˆˆ1ˆe�TÜ�aÐ=ÀUÈaÔPˆØ”	˜!ÐCÓDÑD‰ð ð 
�‰�2‹€BÜ�;‰;�r˜2ÔÐÑùò; 
8s   ¼ F,c                  óh  ‡— t        d«      st        j                  «        dd lŠˆfd„} ˆfd„}d}d}d}d}dd	gd	dgd
d
gg}t	        |«      }‰j                  ||d|z   z  ddg«      } | ||||||¬«      }	 |||||||¬«      }
|	j                  |
j                  «      }	‰j                  |	|
«      sJ ‚y )Nr^   r   c           	      ó’  •— | j                  d«      }| j                  d«      }| j                  d«      }|D �	�
cg c]  \  }	}
|	|z  |
|z  f‘Œ }}	}
| j                  ||d|z   ||«      j                  ddddd«      j                  «       }‰j	                  |d   «      }‰j	                  |d   «      }|d	   }|d
   }‰j	                  |d   «      }‰j	                  |ddd …f   «      }|j
                  r‰j                  j                  n‰j                  }|j
                  r‰j                  j                  n‰j                  }‰j                  d|dz
  |«      j                  |d«      j                  ||z  dd«      j                  |j                  «      j                  |«      }‰j                  d|dz
  |«      j                  |d«      j                  «       j                  ||z  dd«      j                  |j                  «      j                  |«      } ||«      j                  d |dg«      «      } ||«      j                  d |dg«      «      }|j                  |d«      j                  dd||z  «      j                  |j                  «      }|j                  |d«      j                  dd||z  «      j                  |j                  «      } ||dd d…f   j                  «      }|j                  |z   |d<   |j                  |z   |d<   ‰j!                  |j                  «      |z  |d	<   ‰j!                  |j                  «      |z  |d
<   ‰j#                  ||gdz  «      j                  |«      }‰j%                  |j                  |dd«      |z  |j                  |dd«      |j                  |d|«      fd«      }|S c c}
}	w )Nr   r   ra   r    r7   rY   ).r   ).r7   ).r   ).ra   ).rY   .r`   )ÚsizeÚviewÚpermuteÚ
contiguousÚsigmoidÚis_cudaÚcudaÚFloatTensorÚ
LongTensorÚlinspaceÚrepeatr   Útyper+   Úindex_selectÚdataÚexpÚTensorÚcat)ÚtensorÚnum_classesÚnum_anchorsÚanchorsÚstride_hÚstride_wÚbsÚin_hÚin_wÚa_wÚa_hÚscaled_anchorsÚ
predictionr   r   ÚwÚhÚconfÚpred_clsrŒ   r�   Úgrid_xÚgrid_yÚanchor_wÚanchor_hÚ
pred_boxesÚ_scaleÚoutputr^   s                               €r   Úold_wayz+test_pytorch_yolo_fragment.<locals>.old_wayÈ   sg  ø€ à�[‰[˜‹^ˆØ�{‰{˜1‹~ˆØ�{‰{˜1‹~ˆÙKRÔSÉ7¹x¸sÀC˜3 ™>¨3°©>Ò:È7ˆÑSà—[‘[  [°!°k±/À4ÈÓN×VÑVÐWXÐZ[Ð]^Ð`aÐcdÓe×pÑpÓrˆ
à�M‰M˜* VÑ,Ó-ˆØ�M‰M˜* VÑ,Ó-ˆØ�vÑˆØ�vÑˆØ�}‰}˜Z¨Ñ/Ó0ˆØ—=‘= ¨C°±¨GÑ!4Ó5ˆð 12·	²	�e—j‘j×,Ò,¸u×?PÑ?PˆØ./¯iªi�U—Z‘Z×*Ò*¸U×=MÑ=Mˆ
ð �N‰N˜1˜d Q™h¨Ó-ß‰V�D˜!‹_ß‰V�B˜Ñ$ a¨Ó+ß‰T�!—'‘'‹]ß‰T�+Óð 	ð �N‰N˜1˜d Q™h¨Ó-ß‰V�D˜!‹_ß‰Q‹Sß‰V�B˜Ñ$ a¨Ó+ß‰T�!—'‘'‹]ß‰T�+Óð 	ñ ˜~Ó.×;Ñ;¸A¹zÈ1È#»ÓOˆÙ˜~Ó.×;Ñ;¸A¹zÈ1È#»ÓOˆØ—?‘? 2 qÓ)×0Ñ0°°A°t¸d±{ÓC×HÑHÈÏÉÓQˆØ—?‘? 2 qÓ)×0Ñ0°°A°t¸d±{ÓC×HÑHÈÏÉÓQˆá  ¨C°°!°¨GÑ!4×!:Ñ!:Ó;ˆ
ØŸV™V f™_ˆ
�6ÑØŸV™V f™_ˆ
�6ÑØ"ŸY™Y q§v¡vÓ.°Ñ9ˆ
�6ÑØ"ŸY™Y q§v¡vÓ.°Ñ9ˆ
�6Ñà—‘˜x¨Ð2°QÑ6Ó7×<Ñ<¸[ÓIˆØ—‘Ø�_‰_˜R  QÓ'¨&Ñ0°$·)±)¸BÀÀAÓ2FÈÏÉÐVXÐZ\Ð^iÓHjÐkÐmoó
ˆð ˆùó] Ts   ºOc                 óì  •— t        | d|¬«      }‰j                  |«      j                  | j                  «      }t        |d«      }|j                  \  }}}}	}
t        ‰j                  |	«      j                  «       d«      j                  | j                  «      }t        ‰j                  |
«      j                  «       d«      j                  | j                  «      }‰j                  |«      }|d   j                  «       |z   |z  |d<   |d   j                  «       |z   |z  |d<   |dd	 j                  «       |z  |dd	 |d	   j                  «       |d	<   |d
d  j                  «       |d
d  t        |d«      S )Nz5 b (anchor prediction) h w -> prediction b anchor h w)Úanchorz!anchor dim -> dim () anchor () ()zh -> () () h ()zw -> () () () wr   r7   r   rY   r    z2prediction b anchor h w -> b anchor h w prediction)
r   rŒ   ÚtoÚdevicer   re   ÚfloatÚ
zeros_liker‰   r“   )r–   r—   r˜   r™   rš   r›   Úraw_predictionsÚanchor_sizesÚ_r�   rž   Úgrid_hÚgrid_wÚpredicted_bboxesr^   s                 €r   Únew_wayz+test_pytorch_yolo_fragment.<locals>.new_wayý   so  ø€ Ü# FÐ,cÐlwÔxˆà×#Ñ# GÓ,×/Ñ/°·±Ó>ˆÜ  Ð*MÓNˆà-×3Ñ3Ñˆˆ1ˆa��tÜ˜5Ÿ<™<¨Ó-×3Ñ3Ó5Ð7HÓI×LÑLÈVÏ]É]Ó[ˆÜ˜5Ÿ<™<¨Ó-×3Ñ3Ó5Ð7HÓI×LÑLÈVÏ]É]Ó[ˆà ×+Ñ+¨OÓ<ÐØ.¨qÑ1×9Ñ9Ó;¸fÑDÈÑPÐ˜ÑØ.¨qÑ1×9Ñ9Ó;¸fÑDÈÑPÐ˜ÑØ!0°°1Ð!5×!9Ñ!9Ó!;¸|Ñ KÐ˜˜1ÐØ-¨aÑ0×8Ñ8Ó:Ð˜ÑØ.¨q¨rÐ2×:Ñ:Ó<Ð˜˜ÐäÐ)Ð+_Ó`Ð`r   rY   r    é   é2   éd   éK   r7   )r–   r˜   r—   rš   r›   r™   )	r   ÚpytestÚskipr^   ÚlenÚrandnrf   r   r|   )r®   r»   rš   r›   Ú
batch_sizer—   r™   r˜   r   rn   ro   r^   s              @r   Útest_pytorch_yolo_fragmentrÅ   Â   sÜ   ø€ Ü˜WÔ%Ü�‰Œãô3ôjað& €HØ€HØ€JØ€KØ�Cˆy˜3 ˜) b¨" XÐ.€GÜ�g“,€Kà�‰�Z °°K±Ñ!@À!ÀQÐGÓH€AÙØØØØØØô€Gñ ØØØØØØô€Gð �o‰o˜gŸm™mÓ,€GØ�>‰>˜' 7Ô+Ð+Ñ+r   )Únumpyrd   rÀ   Úeinopsr   r   r   Úeinops.testsr   Úeinops.tests.test_opsr   rr   r‚   rÅ   rV   r   r   Ú<module>rÊ      s*   ðÛ Û ç 1Ñ 1Ý *Ý 1òM4ò`&óRg,r   