
    !ShV,                        d dl mZ d dlZd dlZ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 d dlmZmZ dZd Zd Zd	 Z ed
d
          Z ej        g d          Zd Zd Zd Zd Zd Zd Zd Zd Zg  edd
           edd          Zd eD             Zej         !                    de          d             Z"ej         !                    de          d             Z#d Z$d Z%dS )    )testmodN)AbstractBackend)	rearrangeparse_shape_optimize_transformation)collect_test_backendsis_backend_testedzAlex Rogozhnikovc                      t          t          j        dt          t                               t          t          j        dt          t                               d S )NT)np)raise_on_error
extraglobs)r   einopslayersdictnumpy     ]/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/einops/tests/test_other.pytest_doctests_examplesr      sF    FM$45>>>JJJJFM$45>>>JJJJJJr   c                      ddl m}   |             }g }t          j                    D ]J}|j        |vr	  |             # t
          $ r&}|                    |j        |f           Y d}~Cd}~ww xY wt          |          dk    s
J |            dS )z
    This test will fail if some of backends are not installed or can't be imported
    Other tests will just work and only test installed backends.
       )parse_backends_to_testNr   ) r   r   __subclasses__framework_name	Exceptionappendlen)r   backends_to_testerrorsbackend_typees        r   test_backends_installedr#      s    
 )(((((--//F'688 < <&.>>>	<LNNNN 	< 	< 	<MM<6:;;;;;;;;	<v;;!Vs   
>
A.A))A.c                     t          d           d t          d          D             } | d t          d          D             z  } | g dgz  } | g dgz  } | D ]}t          d          D ]
}t          |          }t          j                            d	d
|                              dg          }|d d          }t          j                            d	|dz             }t          t          j                            |          d |                   }t          j                            ||z
            }t          j                            d	dd          }	t          ||||	          x\  }
}}}}t          j
        |	|          sJ |                    |                              |                              |                              dg          }|                    |
                              |                              |                              dg          }t          j
        ||          sJ t          | }t          ||          D ]\  }}t          j
        ||          sJ  d S )NzTesting optimizationsc                     g | ]}d g|z  	S )   r   .0n_dimensionss     r   
<listcomp>z7test_optimize_transformations_numpy.<locals>.<listcomp>,   s    ???\qcL ???r      c                     g | ]}d g|z  	S )   r   r'   s     r   r*   z7test_optimize_transformations_numpy.<locals>.<listcomp>-   s    ???ls\!???r      )r&   r-         )r&   r-   r/   r0         r/   r   i   )sizer   i   iM  )axis)printranger   r   randomrandintreshapetuplepermutationr   array_equalsum	transposezip)shapesshapeattemptr)   x
init_shape	n_reducedreduced_axesaxes_reorderingfinal_shapeinit_shape2reduced_axes2axes_reordering2final_shape2combination2result1result2combination3abs                       r   #test_optimize_transformations_numpyrT   *   s   	
!"""??U2YY???F
??eAhh????F
|||nF
###$$F / /Qxx 	/ 	/Gu::L$$QE$::BBB4HHAqqqJ,,Qq0@AAI !9!9,!G!G

!STTL#l66|i7OPPO,..q$S.AAKXpL/;Y Y FK(8, $[,?????ii
++//\/BBLL_]]eegifjkkGii,,00m0DDNNO_``hhjlimnnG$Wg66666 4\BLL,77 / /1(A....../)	// /r   Fsymbolicr   
         (   c                  F   t           D ]} t          d| j                   t          t          d          }t          |                     t                    d          }||cxk    rt          dddd          k    sn J |t          dddd          cxk    r|k    sn J d S )	NzShape parsing for a b c drX   rY   rZ   r[   )rR   rS   cdr   )_IMPERATIVE_BACKENDSr6   r   r   x_np
from_numpyr   backendparsed1parsed2s      r   test_parse_shape_imperativerg   O   s    ' A A"G$:;;;dI..g0066	BB'AAAATB"b%A%A%AAAAAAA$bB"555@@@@@@@@@@@A Ar   c                      t           D ]\} t          t          d          }t          |                     t                    d          }||cxk    rt	                      k    sn J ]d S )Nz_ _ _ _r`   r   ra   rb   r   rc   s      r   test_underscorerj   X   ss    ' , ,dI..g0066	BB'++++TVV+++++++, ,r   c                      t           D ]^} t          t          d          }t          |                     t                    d          }||cxk    rt	          d          k    sn J _d S )Nz_ _ _ hellor[   )hellori   rc   s      r   test_underscore_onerm   _   sw    ' 4 4dM22g0066FF'3333T^^^33333334 4r   c                      t           D ]_} t          t          d          }t          |                     t                    d          }||cxk    rt	          dd          k    sn J `d S )Nz_ _ a1 a1a111arZ   r[   )a1a1a111ari   rc   s      r   test_underscore_severalrq   f   s~    ' = =d$455g00668HII'<<<<TR%<%<%<<<<<<<<= =r   c                  l   t          j        t          j                  5  t	          t
          d           d d d            n# 1 swxY w Y   t          D ]`} t          j        t          j                  5  t	          |                     t
                    d           d d d            n# 1 swxY w Y   ad S )Nza a b b)pytestraisesr   EinopsErrorr   ra   r`   rb   )rd   s    r   test_repeatingrv   m   s   	v)	*	* % %D)$$$% % % % % % % % % % % % % % % ( = =]6-.. 	= 	=**400)<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	== =s#   AAA3)B((B,	/B,	c                     t           D ]>} ddgdt                      fdgdt          d          fddgdt          d          fg ddt          d          fg ddt          d	          fdgd
t          d          fddgd
t          d          fg dd
t          d          fg dd
t          d          fg ddt          dd	          fdd	gdt          dd	          ffD ]^\  }}}t          j        |          }t	          ||          }t	          |                     |          |          }||cxk    r|k    sn J _@d S )NrX   rY   ...... arR   rX   rY   rZ   rZ   rW   r[   a ... a ... brR   rS   r`   r   r   onesr   rb   rd   rB   patternexpectedrD   re   rf   s          r   test_ellipsisr   v   s   ' 2 2"Xudff%T7D2JJJ'"Xwr


+\\7D2JJJ/wr


3T7D2JJJ'"Xwr


+\\7D2JJJ/wr


3z4"+;+;+;<"Xz4"#3#3#34)
 	2 	2$E7H 
5!!A!!W--G!'"4"4Q"7"7AAGg11111111111!	22 2r   c                  T   t           D ]} g ddt          d          fg ddt          d          fg ddt          d          ffD ]^\  }}}t          j        |          }t	          ||          }t	          |                     |          |          }||cxk    r|k    sn J _d S )	Nr   r&   r-      z1 2 3 ar   rz   )rX   r   r&   za 1 2rX   za () 2r   r   s          r   test_parse_with_anonymous_axesr      s    ' 	2 	2\\9dQiii0ZZ$***-ZZ4":::.)
 	2 	2$E7H
 
5!!A!!W--G!'"4"4Q"7"7AAGg11111111111	2	2 	2r   c                  6   t           D ]} g ddfg ddfg ddfg ddfg ddfg ddffD ]m\  }}t          j        t                    5  t	          j        |          }t          |                     |          |           d d d            n# 1 swxY w Y   nd S )Nr   za b cz2 a b cza b c ()z	a b c d eza b c d e ...)r`   rs   rt   RuntimeErrorr   r   r   rb   )rd   rB   r   rD   s       r   test_failuresr      s   ' < < \\7#\\9%\\:&\\;'\\?+\\:&
 
	< 
	<NE7 |,, < <Ju%%G..q117;;;< < < < < < < < < < < < < < <
	<< <s   8BBBTc                 (    g | ]}|j         d k    |S )ztensorflow.keras)r   )r(   rd   s     r   r*   r*      s&    ppp'7CY]oCoCogCoCoCor   rd   c           
         g dg dg dfD ]9}t          d| j        d|           |                     |          }t          |d          }i }|                                D ]L\  }}t          |t                    r|n,|                     ||t          j	        g d          fg          ||<   Mt          |           t          |dfi t          |d          d	d
i}|                     ||t          j	        g d          fg          }t          |j                   |j        dk    sJ t          j        |d          sJ ;d S )NrW   )rX   rY   NNNNNNz-special shape parsing backend.framework_name=z shape=r]   z*a b (c1 c2) (d1 d2) -> (a b d1) c1 (c2 d2)za b c1 _d2r&   )i  rZ   r&   r   )r6   r   create_symbolr   items
isinstanceinteval_symbolr   zerosr   rB   allclose)rd   rB   input_symbolshape_placeholdernamesymbolresult_placeholderresults           r   test_parse_shape_symbolicr      s    	    ) )
 	GW%;GGuGG	
 	
 	
 ,,U33'i@@-3355 	 	LD& fc**b((<M]M]M]A^A^2_1`aa $KK
 	e&F
 
JUVbdnJoJo
 
tu
 
 
 $$%7<UeUeUeIfIf:g9hiifl|88888~fa((((((3) )r   c                 0   ddgd d gdt                      fdgd gdt          d          fddgd d gdt          d          fg dg ddt          d          fg d	g d
dt          d          fdgd gdt          d          fddgd d gdt          d          fg dg ddt          d          fg d	g d
dt          d          fg d	g d
dt          dd          fddgd d gdt          dd          ffD ]\  }}}}|                     |          }t          ||          }i }|                                D ]N\  }}	t	          |	t
                    r|	||<    |                     |	|t          j        |          fg          ||<   O||k    sJ d S )NrX   rY   rx   ry   rz   r{   )NNNrZ   rW   r   r[   r|   r}   r~   z	 a ... b )	r   r   r   r   r   r   r   r   r   )
rd   static_shaperB   r   r   r   r   	out_shaper   r   s
             r   "test_parse_shape_symbolic_ellipsisr      s    bD$</
vwr


+
bD$<$***5	)))7D2JJJ?			333WdRjjjI
vwr


+
bD$<$***5	)))7D2JJJ?			333WdRjjjI			333ZbAQAQAQR
bD$<dR2.>.>.>?3 % %.eWh ,,U33'g>>	-3355 	k 	kLD&&#&& k"(	$")"5"5fekZfNgNg?h>i"j"j	$H$$$$$+% %r   c                     t          dd          } | t          dd          z  } | D ]c}dD ]^}d|v }t          j        g d|          }|                    |          }|                    |          |k    sJ |||j        f            _dd S )NFrU   T)int32int64float32float64float)r-   r   r/   )dtype)r   r   r   rb   is_float_typer   )backendsrd   r   is_floatinputs        r   test_is_float_typer      s    $eEBBBH%uTBBBBH [ [= 	[ 	[E%'HK			777E&&u--E((//8;;;eWek=Z;;;;		[[ [r   c                     t          d          st          j                     ddl} ddlm} ddlmmmm	m
 ddlm}  |              G fdd|j                  } |            }|                     |d	d
          }dD ]U}|                     ||dz   |dz   g          }dD ]2} |||          }	 |||          }
|                     |	|
          sJ 3VdS )a7  
    Test ensures that allow_ops_in_compiled_graph allows compiling in a single graph
    Additionally we ensure that after compilation cache works properly
     (by changing shapes and patterns)
    We additionally check that pack/unpack still can be handled
     despite variable number of inputs/outputs
    torchr   N)nn)repeatreducepackunpackeinsum)allow_ops_in_compiled_graphc                   6     e Zd Zd fdZdfd	Z xZS )5test_torch_compile.<locals>.TorchModuleWithOperationsreturnNc                 H    t                                                       d S )N)super__init__)self	__class__s    r   r   z>test_torch_compile.<locals>.TorchModuleWithOperations.__init__  s    GGr   r   c                    |j         \  }}}fd} | |d                    } | |d          d          } |gdt                    z   z   |d                    \  }}	 t          | |d                    |	d          }
|
d	         t          |
          z   }t          | |d
          |          } || |d                    d	         }||z   S )Nc                 n    |                                  }d                    fd|D                       S )N c                 2    g | ]}|d          dvr|n|z   S )r4   acdr   )r(   psuffixs     r   r*   z^test_torch_compile.<locals>.TorchModuleWithOperations.forward.<locals>.suf.<locals>.<listcomp>  s/     X X XQae5&8&8a&j X X Xr   )splitjoin)r   partsr   s     r   sufzJtest_torch_compile.<locals>.TorchModuleWithOperations.forward.<locals>.suf  s8    xx X X X XRW X X XYYYr   za b c -> a b c 4za b c d -> a b cminr&   za b * cza b d c -> (a b ) 1 c dzab one1 c *r   z(a b ) 1 c -> a b c)rS   za b c , a b c d -> d)rB   r   r   )r   x_abcr   rR   rS   r^   r   x_abcdx_abdcpsx_arrayx1additionr   r   r   r   r   s     `          r   forwardz=test_torch_compile.<locals>.TorchModuleWithOperations.forward
  s#   kGAq!Z Z Z Z Z VE33'9#:#:;;FF633'9#:#:EBBEugS[[933y>>JJJFBfYvss3L/M/MNNPRTabbGc'll*B2ss#899Q???BveVSS1G-H-HII!LH= r   )r   N)r   )__name__
__module____qualname__r   r   __classcell__)r   r   r   r   r   r   s   @r   TorchModuleWithOperationsr     sp        	 	 	 	 	 		! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!r   r   T	aot_eager)	fullgraphrd   )rX   rY   r[   r   r&   )r   suf1other_suffix)r	   rs   skipr   r   r   r   r   r   r   r   einops._torch_specificr   Modulecompilerandr   )r   r   r   r   originalcompiledr3   rD   r   rO   rP   r   r   r   r   r   s              @@@@@r   test_torch_compiler      s    W%% LLL;;;;;;;;;;;;;;BBBBBB!!!! ! ! ! ! ! ! ! ! ! !BI ! ! !, )(**H}}X{}KKH 4 4JJdQhq1222 	4 	4Fhq&))Ghq&))G>>'7333333	44 4r   )&doctestr   r   rs   r   einops.layerseinops.parsingeinops._backendsr   einops.einopsr   r   r   einops.testsr   r	   
__author__r   r#   rT   r`   r   ra   rg   rj   rm   rq   rv   r   r   r   _SYMBOLIC_BACKENDSmarkparametrizer   r   r   r   r   r   r   <module>r      sL                    , , , , , , J J J J J J J J J J A A A A A A A A
K K K$ $ $(/ / /@ -,eEJJJ u{###$$A A A, , ,4 4 4= = == = =2 2 2*
2 
2 
2< < < D777D666  qp-?ppp  $677) ) 87): $677% % 87%2[ [ [.4 .4 .4 .4 .4r   