o
    *ήc=                     @   s4  d dl m Z  d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZ dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd  Z!d!d" Z"d#d$ Z#d%d& Z$d'd( Z%d)d* Z&d+d, Z'd-d. Z(d/d0 Z)d1d2 Z*d3S )4    )copyImmutableDenseNDimArray)Dict)diff)Rational)S)Symbolsymbols)SparseMatrix)IndexedIndexedBase)MatrixImmutableSparseNDimArray)raisesc                     sB  t g dd} t| dksJ |  dksJ ttdd  ttdd  ttdd  ttd	d  ttd
d  ttdd  t dg}t|dksMJ |d dksUJ |d d  t dgksbJ | dksjJ t tdg}t|dksyJ |d tdksJ |d d  t tdgksJ | dksJ d}t |}t||ksJ |j|fksJ | dksJ t|}t||ksJ |j|fksJ |j	t
 ksJ | dksJ t tdd}t|dksJ |jdksJ | dksJ d}tj| }t|j	dksJ t|dksJ |j|ksJ | dks'J t g d}t|dks6J |jdks>J | dksGJ | g dksRJ d}	tj|	 }
t|
dksbJ |
j|	ksjJ |
d dkssJ |
 dks|J tdtdf}	tj|	 }t|dksJ |j|	ksJ |tdtdf dksJ | dksJ t tdtdtdksJ jtdfksJ  dksJ ttfdd ddlm} t tfD ]3}|| t dksJ  jdksJ   dksJ  d |ksJ tt fdd qd S )Nr   shaper      c                   S      t dgddS Nr   r   r   r    r   r   Y/tmp/pip-target-vg8gfxp4/lib/python/sympy/tensor/array/tests/test_immutable_ndim_array.py<lambda>       z,test_ndim_array_initiation.<locals>.<lambda>c                   S      t g dddS Nr         r   r   r   r   r   r   r   r          c                   S      t g ddS Nr   r   r   r   r   r   r   r          c                   S   r   r   r   r   r   r   r   r      r   c                   S   r   r   r   r   r   r   r   r      r!   c                   S   r"   r#   r   r   r   r   r   r      r$      x   Q   )r    r    r    r       )r   r    r   r    r    r    r    	   r   r   r   c                      s    t d S )Nr'   )intr   )vector_with_long_shaper   r   r   Y   r$   r&   r   c                          d S Nr   r   r   )rank_zero_arrayr   r   r   b       )r   lenrankr   
ValueErrorr	   zerosr   r   _sparse_arrayr   rangetolistr.   	sympy.abcr&   )arr_with_no_elementsarr_with_one_elementarr_with_symbol_elementnumber5vectorn_dim_arrayarray_shapesparse_arrayone_dim_arrayr   array_with_many_argsarray_with_long_shaper&   	ArrayTyper   )r3   r/   r   test_ndim_array_initiation   s   





rI   c                  C   sl   t tdd} | jdksJ |  dksJ | ddd} | jdks$J |  dks,J t| dks4J d S )N2   )rJ   r   r'   r   )r'   r'   r   r    )r   r:   r   r6   reshaper5   arrayr   r   r   test_reshapee   s   rN   c                     s   t tfD ]n} | tdddd   g dg dg dgg dg d	g d
ggks-J  d | g dg dg dgks@J  d | g dksLJ d}tdD ]}tdD ]}tdD ]} |||f |kskJ |d7 }q^qXqRqtt fdd tt fdd tt fdd d S )N   r   r    r)   )r   r   r   r    )r)   r'         )   r,   
      )            )            )         r%   r   r-   r   c                      r1   )N)r    r)   r'   r   r   rL   r   r   r   }   r4   ztest_getitem.<locals>.<lambda>c                      r1   )N)r    r)   r'   rP   r   r   rL   r   r   r   ~   r4   c                      s    dddddf S )Nr    r)   r'   r   r   rL   r   r   r      s    )r   r   r:   rK   r;   r   r7   )rH   valueijkr   rL   r   test_getitemp   s"   8&
rd   c                  C   sn   t tdd} | d t ddgksJ | d t ddgksJ | d} d}| D ]}||ks0J |d7 }q(d S )Nr)   r   r   r   r   r   r    )r   r:   rK   )rM   rb   ra   r   r   r   test_iterator   s   

rf   c                     s  t g dd t dksJ t jdksJ   ddgddggks&J t ddgddggD ]\} }| t |ks=J q1 fdd}t jdksMJ tt| t jdks[J  d dkscJ  d t tjtjgtjtj	ggdksxJ t 
d	d
t 
d	d
ksJ t ddid}|d t ddidksJ d| t ddidksJ |d t i dksJ d| t i dksJ |d t dtddidksJ | t ddidksJ d S )N)r   r   r   r   re   r)   r   r   c                      s   d d< d S )N{   r-   r   r   rD   r   r   sparse_assignment      z&test_sparse.<locals>.sparse_assignmentr-   順 @ iA )rk   rl   r    )r   r5   r9   r;   zipr   	TypeErrorr   NaNComplexInfinityr8   r   )ra   rb   ri   ar   rh   r   test_sparse   s(   
* rs   c                  C   s   t dgd d} t dgd d}| | }|D ]}|t g dks"J q|t dgd dks/J |tdgd dks;J ||  }|D ]}|t g dksMJ qA|t dgd dksZJ |tdgd dksfJ d S )Nr   r,   r+   )rS   rS   rS   rS   )rR   rR   rR   rR   )r   r   )rr   bcra   r   r   r   test_calculation   s   rv   c                  C   st  t g dd} |  }|ddgddggksJ |  }t|ts"J tt| D ]}| | | || ks7J q(|j| jks@J t || ksHJ t |	 | ksRJ t |
 | ks\J tg dd}| }|ddgddggkssJ | }t|ts~J tt|D ]}||| || ksJ q|j|jksJ t||ksJ t|	 |ksJ t|
 |ksJ d S )Nr   r   r    r)   re   r   r   r    r)   )r   r;   tomatrix
isinstancer   r:   r5   _get_tuple_indexr   as_immutable
as_mutabler   r   )dense_arrayalistmatrixra   rD   r   r   r   test_ndim_array_converting   s,   r   c                  C   sz   g d} t d}t| d}t|tsJ | | ksJ t|}t|ts)J | | ks3J |j|jks;J d S )Nrw   )r   r   )r    r)   re   )r   r   ry   r;   r   )arr_list
arr_matrixarr_ndim_arrayr   r   r   test_converting_functions   s   
r   c                     s   g d} g d}g d}| |ksJ | |ksJ t | d}t |dt | d}|ks-J dd  tt fdd |ksAJ ||ksGJ d S )Nrw   )r)   r    r   r   re   c                 S   s   d| d< d S )Nr   r-   r   )rr   r   r   r   assignment_attempt  rj   z)test_equality.<locals>.assignment_attemptc                      s    S )Nr   r   r   second_ndim_arrayr   r   r   
  r4   ztest_equality.<locals>.<lambda>)r   r   ro   )
first_listsecond_list
third_listfirst_ndim_arrayfourth_ndim_arrayr   r   r   test_equality   s   


r   c                  C   s  t dd tdD d} t dd tdD d}| | }||  }||ks&J | | }||  }||d ks6J | d }d|  }t| }|d9 }||  krQ|ksTJ  J | d }	t| }
|
d }
|	|
ksfJ |	d |	d	   kr|	d
   kr|	d   kr|	d   kr|	d   kr|	d   kr|	d   kr|	d   krtddksJ  J t| t|  krt|  krt|  krt|  krt|  krt|  krt|  krt|  krt|	ksJ  J |  }|t dd tdD dksJ d S )Nc                 S      g | ]}d qS r*   r   .0ra   r   r   r   
<listcomp>  r!   z#test_arithmetic.<locals>.<listcomp>r,   r+   c                 S   r   )rQ   r   r   r   r   r   r     r!   rm   r'   r-   r   r   r   r   r   r   r   r   r   )r   r   )r   r   re   r    c                 S   r   )r   r   r   r   r   r   ,  r!   )r   r:   r   r   type)rr   rt   c1c2d1d2e1e2e3f1f2z0r   r   r   test_arithmetic  sN   >L&r   c                  C   s  t tddd} |  g dg dg dgg dg dg d	ggks$J | d
dks-J | ddks6J | ddks?J | ddksHJ t| dksPJ t g dg dg dgg dg dg d	gg}| |ksnJ t g dg dg dgg dg dg d	ggd}| |ksJ d S )NrS   "   r   r    r)   )rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   )r_   r%   rO      )            )          !   r   )r   r   r   r   )r   r   r   r)   )r   r   r   rU   )r   r   r   zp[[[10, 11, 12, 13], [14, 15, 16, 17], [18, 19, 20, 21]], [[22, 23, 24, 25], [26, 27, 28, 29], [30, 31, 32, 33]]])r   r:   r;   rz   str)m3
m3_rebuiltm3_otherr   r   r   test_higher_dimenions/  s&   
02r   c                  C   sL   t tddd} ttddd}| | j| j ksJ ||j|j ks$J d S )NrS   r   r   )r   r:   r   funcargs)sparrdensarrr   r   r   test_rebuild_immutable_arraysI  s   r   c                  C   s  t tddd} | d d  t tdddksJ | d d d d df  tg dg dgks1J | dddd d f  tg d	gksGJ | ddd
d d f  tg d	g dgks`J | d d d d d d f | ksqJ ttddd}|t| ksJ |d d  ttdddksJ |d d d d df  tg dg dgksJ |dddd d f  tg d	gksJ |ddd
d d f  tg d	g dgksJ |d d d d d d f |ksJ d S )NrS   r   r   r   )rS   rW   r[   )r_   r   r   r   r   r   r    r   )r   r:   rx   r   r   )mdsdr   r   r   test_slicesQ  s    2,2" 2,2&r   c                  C   s  ddl m} m}m} t| |g| | | | | gg}|| tddg||| ggks-J t|| tddg||| ggks@J t|}|t| || | | | | gdksWJ || tddg||| ggksjJ t|| tddg||| ggks}J |dd }|td|  d| gd|  | d|  | | ggksJ ||ksJ |dd }|t| d	 |d	 g| | d	 | | | d	 ggksJ ||ksJ |d
d }|t| d |d g| | d | | | d ggksJ ||ksJ d S )Nr   )r&   yzr   re   c                 S   s   | d S )Nr    r   r0   r   r   r   r   o  r4   z)test_diff_and_applyfunc.<locals>.<lambda>r    c                 S   s   | d S Nr   r   r0   r   r   r   r   s  r4   r   c                 S   s   | d S )Nr   r   r0   r   r   r   r   w  r4   )r<   r&   r   r   r   r   r   	applyfunc)r&   r   r   r   r   mdnsdnsdpr   r   r   test_diff_and_applyfuncd  s"    &&&&&888r   c                  C   s   ddl m}  tg d}d|  | }|d|   }|td|  dd|   dd|   gks-J ||ks3J tg d}d|  | }|d|   }|td|  dd|   dd|   gksZJ ||ks`J d S )Nr   r0   r   r   r   r    )r<   r&   r   r   )r&   r   r   r   r   r   e4r   r   r   test_op_priority|  s   **r   c                     s2  t d\} }}}t| |g||gg t d\} |f }t|ts%J tdd|  gddgg|f }t|ts>J dD ]&\}}||||i ||f ksUJ ||||i||f ksfJ q@tdd	}	|	d
 |	 | ksxJ |	|f |	  |f ksJ  |f  |	|	|f ksJ t d d |f tsJ  d d |f d|di d ksJ t df tsJ  df d d
 ksJ  df d d ksJ  |f | tddgddgg|f ksJ |f | tddgddgg|f ks!J tg d}
|
 ddks4J tg d}| ddksGJ tt	 fdd tt	 fdd tt	 fdd tt	 fdd tt	fdd tt	fdd tt	fdd tt	fdd d S )Nzx y z wzi, jr   r    r)   r'   )r-   r   r   r   Ar   r-   r   r   r   r   r   c                          df S r   r   r   Mra   r   r   r     r$   z(test_symbolic_indexing.<locals>.<lambda>c                      r   Nrm   r   r   r   r   r   r     r$   c                          df S r   r   r   r   r   r   r     r$   c                      r   r   r   r   r   r   r   r     r$   c                      r   r   r   r   Msra   r   r   r     r$   c                      r   r   r   r   r   r   r   r     r$   c                      r   r   r   r   r   r   r   r     r$   c                      r   r   r   r   r   r   r   r     r$   )
r
   r   ry   r   r   subsr   r   r   r7   )r&   r   r   wrb   Mijmsijoiojr   MoMosr   )r   r   ra   r   test_symbolic_indexing  sD   "$
$$.  44r   c                  C   s   t g d} t|  d S )Nr   )r   hasharrr   r   r   test_issue_12665  s   r   c                  C   s   t  } | t dksJ d S r2   )r   r8   r   r   r   r   test_zeros_without_shape  s   r   c                  C   s4   t d} |  dksJ t | }| dksJ d S r2   )r   r6   )a0a1r   r   r   test_issue_21870  s   r   N)+r   #sympy.tensor.array.dense_ndim_arrayr   sympy.core.containersr   sympy.core.functionr   sympy.core.numbersr   sympy.core.singletonr   sympy.core.symbolr	   r
   sympy.matricesr   sympy.tensor.indexedr   r   r   $sympy.tensor.array.sparse_ndim_arrayr   sympy.testing.pytestr   rI   rN   rd   rf   rs   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s>    U&" *