o
    *Î®c°6  ã                   @   sÈ  d 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mZ ddlmZ ddlmZ dd	lmZmZ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,d-„ Z&d.d/„ Z'd0d1„ Z(d2d3„ Z)d4d5„ Z*d6d7„ Z+d8d9„ Z,d:d;„ Z-d<d=„ Z.d>d?„ Z/d@dA„ Z0dBdC„ Z1dDdE„ Z2dFdG„ Z3dHdI„ Z4dJdK„ Z5dLdM„ Z6dNdO„ Z7dPdQ„ Z8dRdS„ Z9dTdU„ Z:dVdW„ Z;dXdY„ Z<dZd[„ Z=d\d]„ Z>d^S )_z5
Tests for the basic functionality of the SDM class.
é    )Úproduct)ÚS)ÚHAS_GMPY)Úraises)ÚQQÚZZÚEXRAW)ÚSDM)ÚDDM)ÚDMBadInputErrorÚDMDomainErrorÚDMShapeErrorc                  C   sp   t ddtdƒiidtƒ} | jtksJ ‚| jdksJ ‚t| ƒddtdƒiiks(J ‚ttdd„ ƒ ttdd„ ƒ d S )Nr   é   ©é   r   c                   S   s   t ddtdƒiidtƒS )Né   r   r   r   ©r	   r   © r   r   úJ/tmp/pip-target-vg8gfxp4/lib/python/sympy/polys/matrices/tests/test_sdm.pyÚ<lambda>   ó    ztest_SDM.<locals>.<lambda>c                   S   s   t ddtdƒiidtƒS )Nr   r   r   r   r   r   r   r   r      r   )r	   r   ÚdomainÚshapeÚdictr   r   ©ÚAr   r   r   Útest_SDM   s   r   c                  C   s^   t dtdƒidtdƒidœdtƒ} t| ƒdksJ ‚tr%t| ƒdks#J ‚d S t| ƒdks-J ‚d S )Nr   r   ©r   r   r   z{0: {0: 1}, 1: {1: 1}}z1SDM({0: {0: mpz(1)}, 1: {1: mpz(1)}}, (2, 2), ZZ)z'SDM({0: {0: 1}, 1: {1: 1}}, (2, 2), ZZ))r	   r   Ústrr   Úrepr)Úsdmr   r   r   Útest_DDM_str   s
   "r!   c                  C   s>   t ddtdƒiidtƒ} |  i dt¡}|t i dtƒksJ ‚d S ©Nr   r   r   )r	   r   Únew©r   ÚBr   r   r   Útest_SDM_new%   s   r&   c                  C   sL   t ddtdƒiidtƒ} |  ¡ }| |ksJ ‚tdƒ| d d< | |ks$J ‚d S )Nr   r   r   r   )r	   r   Úcopyr$   r   r   r   Útest_SDM_copy+   s
   r(   c                  C   st   t  tdƒtdƒgtdƒtdƒggdt¡} | t dtdƒidtdƒidœdtƒks*J ‚ttdd„ ƒ ttdd„ ƒ d S )Nr   r   r   r   c                   S   s$   t  tdƒgtdƒtdƒggdt¡S r"   ©r	   Ú	from_listr   r   r   r   r   r   7   s   $ z$test_SDM_from_list.<locals>.<lambda>c                   S   s   t  tdƒtdƒggdt¡S r"   r)   r   r   r   r   r   8   s    )r	   r*   r   r   r   r   r   r   r   Útest_SDM_from_list3   s   **r+   c                  C   s„   t ddtdƒiidtƒ} |  ¡ tdƒtdƒgtdƒtdƒggks"J ‚t i dtƒ} |  ¡ g ks0J ‚t i dtƒ} |  ¡ g g gks@J ‚d S )Nr   r   r   ©r   r   )r   r   )r	   r   Úto_listr   r   r   r   Útest_SDM_to_list;   s   ,r.   c                  C   sD   t ddtdƒiidtƒ} |  ¡ tdƒtdƒtdƒtdƒgks J ‚d S r"   )r	   r   Úto_list_flatr   r   r   r   Útest_SDM_to_list_flatF   s   ,r0   c                  C   s4   t ddtdƒiidtƒ} |  ¡ dtdƒiksJ ‚d S )Nr   r   r   r   )r	   r   Úto_dokr   r   r   r   Útest_SDM_to_dokK   s   r2   c                  C   sx   t tdƒtdƒgtdƒtdƒggdtƒ} t | ¡}|jtks J ‚|jdks'J ‚t|ƒdtdƒidtdƒidœks:J ‚d S )Nr   r   r   r   )r
   r   r	   Úfrom_ddmr   r   r   r$   r   r   r   Útest_SDM_from_ddmP   s
   (
*r4   c                  C   sT   t ddtdƒiidtƒ} ttdƒtdƒgtdƒtdƒggdtƒ}|  ¡ |ks(J ‚d S r"   )r	   r   r
   Úto_ddmr$   r   r   r   Útest_SDM_to_ddmX   s   (r6   c                  C   s,   t ddtdƒiidtƒ} |  ¡ | ksJ ‚d S r"   )r	   r   Úto_sdmr   r   r   r   Útest_SDM_to_sdm^   s   r8   c                      sÄ   t ddtdƒiidtƒ‰ ˆ  dd¡tjksJ ‚ˆ  dd¡tjks"J ‚ˆ  dd¡tjks-J ‚ˆ  dd¡tjks8J ‚ˆ  dd¡tjksCJ ‚ˆ  dd¡tjksNJ ‚tt‡ fdd„ƒ tt‡ fdd„ƒ d S )	Nr   r   r   éþÿÿÿéÿÿÿÿc                      ó   ˆ   dd¡S ©Nr   r   ©Úgetitemr   r   r   r   r   k   ó    z"test_SDM_getitem.<locals>.<lambda>c                      r;   ©Nr   r   r=   r   r   r   r   r   l   r?   )r	   r   r>   ÚzeroÚoner   Ú
IndexErrorr   r   r   r   Útest_SDM_getitemc   s   rD   c                      sŽ  t ddtdƒiidtƒ‰ ˆ  ddtdƒ¡ ˆ t dtdƒtdƒdœidtƒks(J ‚ˆ  ddtdƒ¡ ˆ t tdƒtdƒdœdtdƒidœdtƒksIJ ‚ˆ  ddtdƒ¡ ˆ t dtdƒtdƒdœidtƒkseJ ‚ˆ  ddtdƒ¡ ˆ t dtdƒtdƒdœidtƒksJ ‚ˆ  ddtdƒ¡ ˆ t ddtdƒiidtƒksšJ ‚ˆ  ddtdƒ¡ ˆ t ddtdƒiidtƒks³J ‚tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nr   r   r   r   c                      ó   ˆ   ddtdƒ¡S )Nr   r   r   ©Úsetitemr   r   r   r   r   r      ó    z"test_SDM_setitem.<locals>.<lambda>c                      rE   )Nr   r   r   rF   r   r   r   r   r   €   rH   )r	   r   rG   r   rC   r   r   r   r   Útest_SDM_setitemo   s   &0&&  rI   c                  C   sj   t tdƒtdƒdœtdƒtdƒdœdœdtƒ} |  tddƒtddƒ¡}|t ddtdƒiidtƒks3J ‚d S )	Nr   r   r   é   é   r   r   ©r   r   )r	   r   Úextract_sliceÚslicer$   r   r   r   Útest_SDM_extract_sliceƒ   s   .$rO   c                     s(  t tdƒtdƒdœtdƒtdƒdœdœdtƒ‰ ˆ  dgdg¡} | t ddtdƒiidtƒks/J ‚ˆ  ddgddg¡} | t tdƒtdƒdœtdƒtdƒdœdœdtƒksTJ ‚ˆ  ddgddg¡} | t tdƒtdƒdœtdƒtdƒdœdœdtƒksyJ ‚ˆ  d	gd	g¡} | t ddtdƒiidtƒks‘J ‚t i dtƒ‰ ˆ  g d
¢ddg¡} | t i dtƒks«J ‚t tdƒtdƒdœtdƒtdƒdœdœdtƒ‰ ˆ  g g ¡t  dt¡ksÐJ ‚ˆ  dgg ¡t  dt¡ksßJ ‚ˆ  g dg¡t  dt¡ksîJ ‚tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nr   r   r   rJ   rK   r   r   rL   r:   )r   r   r   ©rJ   r   )r   r   )r   r   c                      ó   ˆ   dgdg¡S r<   ©Úextractr   r   r   r   r      ó    z"test_SDM_extract.<locals>.<lambda>c                      rQ   r@   rR   r   r   r   r   r   ž   rT   c                      rQ   )Néýÿÿÿr   rR   r   r   r   r   r   Ÿ   rT   c                      rQ   )Nr   rU   rR   r   r   r   r   r       rT   )r	   r   rS   Úzerosr   rC   ©r%   r   r   r   Útest_SDM_extract‰   s(   . 66 .rX   c                  C   s<   t  dt¡} | jtksJ ‚| jdksJ ‚t| ƒi ksJ ‚d S )Nr   )r	   rV   r   r   r   r   r   r   r   r   Útest_SDM_zeros£   s   rY   c                  C   sN   t  dt¡} | jtksJ ‚| jdksJ ‚t| ƒdtdƒtdƒdœiks%J ‚d S )N©r   r   r   r   r   )r	   Úonesr   r   r   r   r   r   r   r   Útest_SDM_ones©   s   &r\   c                  C   sR   t  dt¡} | jtksJ ‚| jdksJ ‚t| ƒdtdƒidtdƒidœks'J ‚d S )Nr   r   r   r   )r	   Úeyer   r   r   r   r   r   r   r   Útest_SDM_eye¯   s   *r^   c                  C   sH   t  tdƒtdƒgtd¡} | t dtdƒidtdƒidœdtƒks"J ‚d S )Nr   r   ©r   rJ   r   r   )r	   Údiagr   r   r   r   r   Útest_SDM_diag¶   s   .ra   c                  C   sð   t tdƒtdƒdœtdƒtdƒdœdœdtƒ} t tdƒtdƒdœtdƒtdƒdœdœdtƒ}|  ¡ |ks6J ‚t ddtdƒiidtƒ} t ddtdƒiidtƒ}|  ¡ |ksVJ ‚t ddtdƒiidtƒ} t ddtdƒiid	tƒ}|  ¡ |ksvJ ‚d S )
Nr   r   r   rJ   rK   r   r   rZ   ©r   r   )r	   r   Ú	transposer$   r   r   r   Útest_SDM_transpose»   s   ..rd   c                     s€   t ddtdƒiidtƒ‰ t ddtdƒiidtƒ} ˆ tdƒ | ks"J ‚tdƒˆ  | ks,J ‚tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nr   r   r   rK   c                      s   ˆ t ddƒ S ©Nr   r   ©r   r   r   r   r   r   Ï   ó    ztest_SDM_mul.<locals>.<lambda>c                      s   t ddƒˆ  S re   rf   r   r   r   r   r   Ð   rg   )r	   r   r   Ú	TypeErrorrW   r   r   r   Útest_SDM_mulÉ   s   ri   c                     sÊ   t dtdƒtdƒdœidtƒ} t dtdƒidtdƒidœdtƒ‰t ddtdƒiidtƒ}|  ˆ¡|ks5J ‚ˆ | ¡|ks>J ‚|  t¡‰t ddtdƒiid	tƒ‰ tt‡‡fd
d„ƒ tt‡ ‡fdd„ƒ d S )Nr   r   r   r   rK   rJ   é   r   rL   c                      ó
   ˆ   ˆ¡S ©N©Úmul_elementwiser   )ÚAqr%   r   r   r   Ý   ó   
 z*test_SDM_mul_elementwise.<locals>.<lambda>c                      rk   rl   rm   r   )ÚA1r%   r   r   r   Þ   rp   )r	   r   rn   Ú
convert_tor   r   r   r   ©r   ÚCr   )rq   ro   r%   r   Útest_SDM_mul_elementwiseÓ   s   "
ru   c                     s*  t ddtdƒiidtƒ‰ t ddtdƒiidtƒ} ˆ  ˆ ¡ˆ ˆ    kr(| ks+J ‚ J ‚t ddtdƒiidtƒ‰tt‡ ‡fdd„ƒ t tdƒtdƒdœtd	ƒtdƒdœdœdtƒ‰ t td
ƒtdƒdœtdƒtdƒdœdœdtƒ} ˆ  ˆ ¡ˆ ˆ    kr| ks‚J ‚ J ‚t ddtdƒiidtƒ‰t ddtdƒiidtƒ}t ddtdƒiidtƒ‰t ddtdƒiidtƒ}t ddtdƒiidtƒ‰| ˆ¡|ksÇJ ‚ˆ |¡ˆksÐJ ‚tt‡‡fdd„ƒ t dtdƒtdƒdœidtƒ‰ t dtdƒidtdƒidœdtƒ} ˆ  | ¡ˆ |    krt i dtƒksJ ‚ J ‚d S )Nr   r   r   rK   c                      rk   rl   ©Úmatmulr   rs   r   r   r   ç   rp   z!test_SDM_matmul.<locals>.<lambda>r   r   rJ   é   é
   é   é   rP   r_   rj   ©rJ   rJ   c                      s
   ˆ  ˆ ¡S rl   rv   r   )ÚA22ÚA23r   r   r   ø   rp   r:   rZ   rb   rL   )r	   r   rw   r   r   r   r   )r%   ÚA32ÚA33r   )r   r}   r~   rt   r   Útest_SDM_matmulá   s&   &..&"6r   c                  C   s´   dd„ } t jt jt jt jt jg}t|gd Ž D ]@\}}}}| ||dœ||dœdœƒ}| || ||  || ||  dœ|| ||  || ||  dœdœƒ}|| |ksWJ ‚qd S )Nc                 S   s@   i }|   ¡ D ]\}}dd„ |  ¡ D ƒ}|r|||< qt|dtƒS )Nc                 S   s   i | ]	\}}|r||“qS r   r   )Ú.0ÚjÚvalr   r   r   Ú
<dictcomp>  s    z1test_matmul_exraw.<locals>.dm.<locals>.<dictcomp>r   )Úitemsr	   r   )ÚdÚresultÚiÚrowr   r   r   Údm  s   €ztest_matmul_exraw.<locals>.dmrK   r   )r   ÚNegativeInfinityÚNegativeOneÚZeroÚOneÚInfinityr   )r‹   ÚvaluesÚaÚbÚcr‡   ÚAdÚAd2r   r   r   Útest_matmul_exrawÿ   s   Jýr—   c                     s„  t dtdƒitdƒtdƒdœdœdtƒ‰ t dtdƒitdƒtdƒdœdœdtƒ} t tdƒtdƒdœdtdƒidœdtƒ}ˆ  | ¡|  ˆ ¡  kr[ˆ |    kr[| ˆ    kr[|ks^J ‚ J ‚t ddtdƒiidtƒ‰ t dtdƒitdƒtdƒdœdœdtƒ} t tdƒtdƒdœtdƒtdƒdœdœdtƒ}ˆ  | ¡|  ˆ ¡  kr´ˆ |    kr´| ˆ    kr´|ks·J ‚ J ‚tt‡ fd	d
„ƒ d S )Nr   r   rJ   r   r   r   r9   é   c                      s   ˆ g  S rl   r   r   r   r   r   r     ó    ztest_SDM_add.<locals>.<lambda>)r	   r   Úaddr   rh   ©r%   rt   r   r   r   Útest_SDM_add  s   (((D(.Drœ   c                     s´   t dtdƒitdƒtdƒdœdœdtƒ‰ t dtdƒitdƒtdƒdœdœdtƒ} t tdƒtdƒdœdtd	ƒidœdtƒ}ˆ  | ¡ˆ |    krL|ksOJ ‚ J ‚tt‡ fd
d„ƒ d S )Nr   r   rJ   r   r   r   r9   r:   rK   c                      s   ˆ g  S rl   r   r   r   r   r   r   $  r™   ztest_SDM_sub.<locals>.<lambda>)r	   r   Úsubr   rh   r›   r   r   r   Útest_SDM_sub  s
   (((&rž   c                  C   sv   t dtdƒitdƒtdƒdœdœdtƒ} t dtdƒitdƒtdƒdœdœdtƒ}|  ¡ |    kr6|ks9J ‚ J ‚d S )	Nr   r   rJ   r   r   r:   r9   rU   )r	   r   Únegr$   r   r   r   Útest_SDM_neg'  s   ((&r    c                  C   sœ   t dtdƒitdƒtdƒdœdœdtƒ} t dtdƒitdƒtdƒdœdœdtƒ}|  t¡}||ks3J ‚|jtks:J ‚|  t¡}|| ksEJ ‚|jtksLJ ‚d S )Nr   r   rJ   r   r   )r	   r   r   rr   r   )r   r%   rt   ÚDr   r   r   Útest_SDM_convert_to-  s   ((

r¢   c                  C   s®   t ddtdƒiidtƒ} t ddtdƒiidtƒ}t dtdƒtdƒdœidtƒ}t dtdƒidtdƒidœdtƒ}t  | ¡| ksAJ ‚t  | | ¡|ksKJ ‚t  | |¡|ksUJ ‚d S )Nr   r   r   )r   rJ   ©r   rK   rJ   r   )r	   r   Úhstack©r   r%   ÚAAÚABr   r   r   Útest_SDM_hstack9  s   "r¨   c                  C   s²   t ddtdƒiidtƒ} t ddtdƒiidtƒ}t dtdƒidtdƒidœdtƒ}t dtdƒidtdƒidœdtƒ}t  | ¡| ksCJ ‚t  | | ¡|ksMJ ‚t  | |¡|ksWJ ‚d S )Nr   r   r   r,   )rK   r   )r   rJ   )r	   r   Úvstackr¥   r   r   r   Útest_SDM_vstackC  s   ""rª   c                  C   sL   t ddtdƒiidtƒ} t ddtdƒiidtƒ}|  dd„ t¡|ks$J ‚d S )Nr   r   r   r   c                 S   s   d|  S )Nr   r   )Úxr   r   r   r   P  r™   z$test_SDM_applyfunc.<locals>.<lambda>)r	   r   Ú	applyfuncr$   r   r   r   Útest_SDM_applyfuncM  s   r­   c                  C   st   t tdƒtdƒdœtdƒtdƒdœdœdtƒ} t tdƒtdƒdœtddƒtddƒdœdœdtƒ}|  ¡ |ks8J ‚d S )	Nr   r   r   rJ   rK   r   r9   r:   )r	   r   Úinvr$   r   r   r   Útest_SDM_invS  s   .2r¯   c                  C   sF   t tdƒtdƒdœtdƒtdƒdœdœdtƒ} |  ¡ tdƒks!J ‚d S )Nr   r   r   rJ   rK   r   r9   )r	   r   Údetr   r   r   r   Útest_SDM_detY  s   .r±   c                  C   sn   t tdƒtdƒdœtdƒtdƒdœdœdtƒ} t dtdƒitdƒtdƒdœdœdtƒ}|  ¡ d |ks5J ‚d S )Nr   r   r   rJ   rK   r   r   )r	   r   Úlu)r   ÚLr   r   r   Útest_SDM_lu^  s   .(r´   c                  C   s’   t tdƒtdƒdœtdƒtdƒdœdœdtƒ} t dtdƒidtdƒidœdtƒ}t ddtddƒiidtƒ}|  |¡|ks>J ‚|  |¡|ksGJ ‚d S )	Nr   r   r   rJ   rK   r   r   rb   )r	   r   rw   Úlu_solve)r   r“   r«   r   r   r   Útest_SDM_lu_solveh  s
   ."r¶   c                  C   sT   t tdƒtdƒdœtdƒtdƒdœdœdtƒ} |  ¡ tdƒtdƒtdƒgks(J ‚d S )	Nr   r   r   rJ   rK   r   éûÿÿÿr9   )r	   r   Úcharpolyr   r   r   r   Útest_SDM_charpolyp  s   .&r¹   c                  C   sP   t dtdƒtdƒdœidtƒ} |  ¡ d t dtdƒtdƒdœidtƒks&J ‚d S )Nr   r   r   r   r:   rZ   )r	   r   Ú	nullspacer   r   r   r   Útest_SDM_nullspaceu  s   2r»   c                  C   s’  t dtdƒidtdƒidœdtƒ} t tdƒtdƒdœtdƒtdƒdœdœdtƒ}| ¡ | ddgfks4J ‚t dtdƒitdƒtdƒdœdœdtƒ}| ¡ | ddgfksTJ ‚t dtdƒitdƒtdƒdœdœdtƒ}| ¡ | ddgfkstJ ‚t tdƒtdƒtdƒdœtdƒtd	ƒtd
ƒdœtdƒtdƒtdƒdœdœdtƒ}t tdƒtdƒdœtdƒtdƒdœdœdtƒ}| ¡ |ddgfks¿J ‚t tdƒtdƒtdƒdœtdƒtdƒtdƒdœdœdtƒ}t tdƒtdƒtdƒdœtdƒtdƒtdƒdœdœdtƒ}| ¡ |ddgfksJ ‚t tdƒtdƒtdƒdœtdƒtdƒtdƒdœdœdtƒ}t dtddƒitddƒtddƒdœdœdtƒ}| ¡ |ddgfksGJ ‚d S )Nr   r   r   r   r   rJ   rK   ©r   r   r   r   r˜   rx   rj   é	   r|   r:   r,   rZ   )r   r   rJ   r£   é   )r   r   rJ   i÷ÿÿÿ©r   r   rJ   r_   )r	   r   Úrref)Úeye2r   ÚArrefr   r   r   Útest_SDM_rrefz  sH   ".((þþ.ÿÿÿÿÿÿ$þrÃ   c                  C   s8   t ddtdƒiidtƒ} t  dt¡}|  ¡ |ksJ ‚d S )Nr   r   r   rZ   )r	   r   rV   Ú
particular)r   ÚApartr   r   r   Útest_SDM_particularš  s   rÆ   c                  C   sH   t ddtdƒiidtƒ} t  dt¡}|  ¡ du sJ ‚| ¡ du s"J ‚d S )Nr   r   r   rZ   FT)r	   r   rV   Úis_zero_matrix)r   ÚAzeror   r   r   Útest_SDM_is_zero_matrix   s   rÉ   c                  C   sÊ   t tdƒtdƒtdƒtdƒdœtdƒtdƒtdƒd	œtd
ƒtdƒdœdœdtƒ} t tdƒtdƒtdƒtdƒdœtdƒtdƒtdƒd	œtdƒtd
ƒtdƒd	œdœdtƒ}|  ¡ du s[J ‚| ¡ du scJ ‚d S ©Nr   r   rJ   rK   )r   r   r   rJ   r   r˜   rx   r¿   rj   r½   r_   r¼   )rJ   rK   TF)r	   r   Úis_upperr$   r   r   r   Útest_SDM_is_upper§  s   þþþþrÌ   c                  C   sÒ   t tdƒtdƒtdƒtdƒdœtdƒtdƒtdƒd	œtd
ƒtdƒdœdœdtƒ ¡ } t tdƒtdƒtdƒtdƒdœtdƒtdƒtdƒd	œtdƒtd
ƒtdƒd	œdœdtƒ ¡ }|  ¡ du s_J ‚| ¡ du sgJ ‚d S rÊ   )r	   r   rc   Úis_lowerr$   r   r   r   Útest_SDM_is_lower²  s$   þþýþþýrÎ   N)?Ú__doc__Ú	itertoolsr   Úsympy.core.singletonr   Úsympy.external.gmpyr   Úsympy.testing.pytestr   Úsympy.polys.domainsr   r   r   Úsympy.polys.matrices.sdmr	   Úsympy.polys.matrices.ddmr
   Úsympy.polys.matrices.exceptionsr   r   r   r   r!   r&   r(   r+   r.   r0   r2   r4   r6   r8   rD   rI   rO   rX   rY   r\   r^   ra   rd   ri   ru   r   r—   rœ   rž   r    r¢   r¨   rª   r­   r¯   r±   r´   r¶   r¹   r»   rÃ   rÆ   rÉ   rÌ   rÎ   r   r   r   r   Ú<module>   sf    
	
	


 