
    ,VhS                      Z   d Z ddlmZmZ ddlZddlmZmZ ddlm	Z	  ej                  d      Zdedee	   fd	Zdd
Zej                  j!                  deeg      deddfd       Zej                  j!                  dg d      deddfd       ZddZddZddZddZddZddZddZy)zO
Tests the input parsing for opt_einsum. Duplicates the np.einsum input tests.
    )AnyListN)contractcontract_path)	ArrayTypenumpystringreturnc                 b   d}t         j                  g d      }t        t        ||            }g }| j	                  dd      } | j                  d      d   j                  d      }|D ]?  }|D cg c]  }||   	 }}|j                  t        j                  j                  |        A |S c c}w )z\Builds random numpy arrays for testing by using a fixed size dictionary and an input string.
abcdefghij)
            r   r   r      r   r   z...ijz->r   ,)	nparraydictzipreplacesplitappendrandomrand)	r	   charssizes_arraysizesviewstermstermxdimss	            K/home/dcms/DCMS/lib/python3.12/site-packages/opt_einsum/tests/test_input.pybuild_viewsr&      s     E((9:KUK()EE^^E4(FLLq!'',E ,"&'Qa''RYY^^T*+, L (s   /B,c                  z   t        j                  t              5  t        dd       d d d        t        j                  t              5  t        ddd       d d d        t        j                  t        t        f      5  t        ddd       d d d        t        j                  t              5  t        ddd       d d d        t        j                  t              5  t        ddd	
       d d d        t        j                  t              5  t        ddd       d d d        t        j                  t              5  t        d  d d d        t        j                  t              5  t        ddd       d d d        t        j                  t              5  t        ddd       d d d        t        j                  t              5  t        ddd       d d d        t        j                  t              5  t        ddd       d d d        d} t        |       }t        j                  t              5  t        |d   t        dgt        dgg       d d d        t        j                  t              5  t        |d   t        i gt        dg       d d d        y # 1 sw Y   qxY w# 1 sw Y   NxY w# 1 sw Y   %xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   [xY w# 1 sw Y   9xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr    test)outW)orderblah)castingbad_data_type)dtype)bad_arg)?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNz->,->r   z&,a->za,a->&
...a->...aa)pytestraises	TypeErrorr   
ValueErrorr&   Ellipsis)r	   r    s     r%   test_type_errorsr9   !   s   	y	! A 
y	! $QF#$
 
	:.	/ #Qc"# 
z	" (Q'( 
y	! /Qo./ 
y	! #Q"# 
y	!  ,  
z	"  !Q  
z	"  !Q  
z	" !1a ! 
z	" !1a ! FE 
y	! =qHa=8cU*;<= 
y	! <qHb>Hc?;< <g $ $
# #( (/ /# #         ! !! != =< <s   JJ#>J0.J=K
K>	K$(K1K>L5L1L%0L1J #J-0J:=K
KK!$K.1K;>LLL"%L.1L:contract_fnc                 p   t        j                  t              5   | d       d d d        t        j                  t              5   | dd       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | d       d d d        t        j                  t              5   | ddd       d d d        t        j                  t              5   | dddgdg       d d d        t        j                  t              5   | ddg       d d d        t        j                  t              5   | dd       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | d	d       d d d        t        j                  t              5   | d
ddg       d d d        t        j                  t              5   | dd       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddg       d d d        t        j                  t              5   | dddgddgg       d d d        t        j                  t              5   | dt        j                  d      j                  dd             d d d        t        j                  t              5   | dt        j                  d      j                  dd             d d d        t        j                  t              5   | dt        j                  d      j                  dd             d d d        t        j                  t              5   | dddgddggd       d d d        y # 1 sw Y   ,xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   PxY w# 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   wxY w# 1 sw Y   WxY w# 1 sw Y   7xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   wxY w# 1 sw Y   SxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr(   r   zi%...z...j$zi->&r   ir   z...izi...jzi...zij...zi..z.i...zj->..jzj->.j...zi->ijzij->jijiir   r   r   zii->izij->ij   T)	bad_kwarg)r4   r5   r7   r6   r   arangereshape)r:   s    r%   test_value_errorsrB   Z   sr   	z	" B 
y	! Aq 
z	" %GaV$%	z	" %GaV$%	z	" $FQF#$ 
z	" B 
z	" B1	z	" &CQC!%&	z	" C! 
z	" C	z	" "D1a&!"	z	" FA	z	" %GaV$%	z	" FA	z	" %GaV$% 
z	" #EAq6"#	z	" %GaV$%	z	" &Hq!f%&	z	" (JA'( 
z	" %GaV$%	z	" %GaV$%	z	" $FQF#$ 
z	" %GaV$% 
z	" 1IAA/01 
z	" 6D"))A,..q!456	z	" 9GRYYq\11!Q789 
z	" 5C1--a345 
y	! @H1v1v.$?@ @W  % %% %$ $  & &  " " % % % %# #% %& &( (% %% %$ $% %1 16 69 95 5@ @sO  	U
U/U'U4	V6	V VV(;V5'
WW?
W*W)
W6X/XX	X*6X7#YY=Y*Y+Y8-Z-Z$-Z2Z,UU$'U14U>VVV%(V25V?WWW&)W36X XXX'*X47YYYY(+Y58ZZZZ),Z5)	...a->...z	a...->...za...a->...az...,...za,bz	...a,...bc                     t        |       }t        | g|ddi}t        | g| }t        j                  ||      sJ t        | g|ddi}t        j                  ||      sJ y )NoptimizeFoptimal)r&   r   r   allcloser	   r    einopts       r%   test_comparerK      sm     E
6
2E
2E
2C
6
"E
"C;;sC   
6
6E
6I
6C;;sC       c                      d} t        |       }t        | g|ddi}t        |d   t        dgt        g      }t        j	                  ||      sJ y )NrC   rE   Fr   r&   r   r8   r   rG   rH   s       r%   test_ellipse_input1rO      sQ    FE
6
2E
2E
2C
58h]XJ
7C;;sC   rL   c                      d} t        |       }t        | g|ddi}t        |d   t        dg      }t        j	                  ||      sJ y )Nz...arE   Fr   rN   rH   s       r%   test_ellipse_input2rQ      sM    FE
6
2E
2E
2C
58h]
+C;;sC   rL   c                      d} t        |       }t        | g|ddi}t        |d   t        dgt        dg      }t        j	                  ||      sJ y )Nr2   rE   Fr   rN   rH   s       r%   test_ellipse_input3rS      sS    FE
6
2E
2E
2C
58h]XqM
:C;;sC   rL   c                      d} t        |       }t        | g|ddi}t        |d   t        dg|d   t        dgt        g      }t        j	                  ||      sJ y )Nz...b,...a->...rE   Fr   r>   rN   rH   s       r%   test_ellipse_input4rU      s]    FE
6
2E
2E
2C
58h]E!HxmhZ
PC;;sC   rL   c                      t         j                  d      } t         j                  d      }t        d| |d      }t        d| |d      }t         j                  ||      sJ t         j                  |ddg      sJ t         j                  d      } t         j                  d	      }d
D ]e  }t        d| | |      f}t        d| ||      }t         j                  ||      sJ t         j                  |t         j	                  dd            reJ  y )N)
   r   )r>   r   zij,ij->jF)rE   Tg      $@)r>   r   )r   r   )TFz...ij,...jk->...ikr   )r   onesr   rG   full)pqrI   rJ   rE   res1res2s          r%   "test_singleton_dimension_broadcastr^      s    
A
A
:q!e
4C
:q!d
3C;;sC   ;;sT4L)))
A
A! 5-q!hGI,aXF{{4&&&{{4!3444	5rL   c                     d} t        |       \  }}}t        | |||      }t        |d|d|d      }t        j                  ||      sJ t	        d      D ]5  }t        ||dz   |f      }t        j                  ||j
                        r5J  y )Nab,bc,cd)i    )ra     )rb   i  rW   r>   r&   r   r   rG   rangeT)r	   r#   yzstring_output
int_outputr<   transpose_outputs           r%   test_large_int_input_formatrk      s    F&!GAq!VQ1-M!\1lA|LJ;;}j1112Y 2#AAqz2{{+QSS1112rL   c            	      r   d} t        |       \  }}}t        | |||      }t        |d|d|d      }t        |d|d|dd      }t        j                  ||      sJ t        j                  ||      sJ t	        dd      D ]8  }t        |d|z  d	|z  f      }t        j                  ||j
                        r8J  y )
Nr`   )leftbond1)rn   bond2)ro   right)rm   rp   r>   rW   br3   rc   )	r	   r#   rf   rg   rh   hash_output1hash_output2r<   rj   s	            r%   !test_hashable_object_input_formatrt     s    F&!GAq!VQ1-MA0!5GL^_L			L ;;}l333;;|\2221b\ 2#Aaq'9:{{+QSS1112rL   )r
   N)__doc__typingr   r   r4   
opt_einsumr   r   opt_einsum.typingr   importorskipr   strr&   r9   markparametrizerB   rK   rO   rQ   rS   rU   r^   rk   rt    rL   r%   <module>r~      s      . 'V! Y $6<r =(ABM@3 M@4 M@ CM@` ! ! !!!!!!5(22rL   