o
    GZŽhg4  ã                   @   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)ÚGROUND_TYPES)Ú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   úR/var/www/auris/lib/python3.10/site-packages/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   sb   t dtdƒidtdƒidœdtƒ} t| ƒdksJ ‚tdk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}}Zgmpyz1SDM({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)Z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   Z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   Zto_list_flatr   r   r   r   Útest_SDM_to_list_flatF   s   ,r-   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   Zto_dokr   r   r   r   Útest_SDM_to_dokK   s   r.   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	   Zfrom_ddmr   r   r   r#   r   r   r   Útest_SDM_from_ddmP   s
   (
*r/   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
   Zto_ddmr#   r   r   r   Útest_SDM_to_ddmX   s   (r0   c                  C   s,   t ddtdƒiidtƒ} |  ¡ | ksJ ‚d S r!   )r	   r   Zto_sdmr   r   r   r   Útest_SDM_to_sdm^   s   r1   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                      r4   ©Nr   r   r6   r   r   r   r   r   l   r8   )r	   r   r7   ÚzeroÚoner   Ú
IndexErrorr   r   r   r   Útest_SDM_getitemc   s   r=   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                      r>   )Nr   r   r   r?   r   r   r   r   r   €   rA   )r	   r   r@   r   r<   r   r   r   r   Útest_SDM_setitemo   s   &0&&  rB   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   Zextract_sliceÚslicer#   r   r   r   Útest_SDM_extract_sliceƒ   s   .$rG   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   rC   rD   r   r   rE   r3   )r   r   r   ©rC   r   )r   r   )r   r   c                      ó   ˆ   dgdg¡S r5   ©Úextractr   r   r   r   r      ó    z"test_SDM_extract.<locals>.<lambda>c                      rI   r9   rJ   r   r   r   r   r   ž   rL   c                      rI   )Néýÿÿÿr   rJ   r   r   r   r   r   Ÿ   rL   c                      rI   )Nr   rM   rJ   r   r   r   r   r       rL   )r	   r   rK   Úzerosr   r<   ©r$   r   r   r   Útest_SDM_extract‰   s(   . 66 .rP   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	   rN   r   r   r   r   r   r   r   r   Útest_SDM_zeros£   s   rQ   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	   Zonesr   r   r   r   r   r   r   r   Útest_SDM_ones©   s   &rS   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   *rU   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   rC   r   r   )r	   Zdiagr   r   r   r   r   Útest_SDM_diag¶   s   .rW   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   rC   rD   r   r   rR   ©r   r   )r	   r   Ú	transposer#   r   r   r   Útest_SDM_transpose»   s   ..rZ   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   rD   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 r[   r\   r   r   r   r   r   Ð   r]   )r	   r   r   Ú	TypeErrorrO   r   r   r   Útest_SDM_mulÉ   s   r_   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   rD   rC   é   r   rE   c                      ó
   ˆ   ˆ¡S ©N©Úmul_elementwiser   )ÚAqr$   r   r   r   Ý   ó   
 z*test_SDM_mul_elementwise.<locals>.<lambda>c                      ra   rb   rc   r   )ÚA1r$   r   r   r   Þ   rf   )r	   r   rd   Ú
convert_tor   r   r   r   ©r   ÚCr   )rg   re   r$   r   Útest_SDM_mul_elementwiseÓ   s   "
rk   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   rD   c                      ra   rb   ©Úmatmulr   ri   r   r   r   ç   rf   z!test_SDM_matmul.<locals>.<lambda>r   r   rC   é   é
   é   é   rH   rV   r`   )rC   rC   c                      s
   ˆ  ˆ ¡S rb   rl   r   )ÚA22ÚA23r   r   r   ø   rf   r3   rR   rX   rE   )r	   r   rm   r   r   r   r   )r$   ZA32ZA33r   )r   rr   rs   rj   r   Útest_SDM_matmulá   s&   &..&"6rt   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>.dmrD   r   )r   ÚNegativeInfinityZNegativeOneZZeroZOneÚInfinityr   )r~   ÚvaluesÚaÚbÚcrz   ZAdZ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   rC   r   r   r   r2   é   c                      s   ˆ g  S rb   r   r   r   r   r   r     ó    ztest_SDM_add.<locals>.<lambda>)r	   r   Úaddr   r^   ©r$   rj   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   rC   r   r   r   r2   r3   rD   c                      s   ˆ g  S rb   r   r   r   r   r   r   $  r‡   ztest_SDM_sub.<locals>.<lambda>)r	   r   Úsubr   r^   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   rC   r   r   r3   r2   rM   )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   rC   r   r   )r	   r   r   rh   r   )r   r$   rj   Ú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   rC   )r   rD   rC   r   )r	   r   Zhstack©r   r$   ZAAZ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+   )rD   r   )r   rC   )r	   r   Z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   Z	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   rC   rD   r   r2   r3   )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   rC   rD   r   r2   )r	   r   Z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   rC   rD   r   r   )r	   r   Z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   rC   rD   r   r   rX   )r	   r   rm   Z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   rC   rD   r   éûÿÿÿr2   )r	   r   Z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   r3   rR   )r	   r   Z	nullspacer   r   r   r   Útest_SDM_nullspaceu  s   2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ƒ}|  ¡ |ddgfks4J ‚t tdƒtdƒtdƒdœtdƒtdƒd	œdœd
tƒ} t tddƒtddƒd	œtddƒtddƒdœdœd
tƒ}|  ¡ |ddgfksuJ ‚d S )Nr   r   r   rC   rD   r   r   ©r   r   r   r+   rV   rR   )r	   r   Zrrefr   )r   ZA_rrefr   r   r   Útest_SDM_rref{  s$   ÿÿ"ÿÿÿÿr    c                  C   s8   t ddtdƒiidtƒ} t  dt¡}|  ¡ |ksJ ‚d S )Nr   r   r   rR   )r	   r   rN   Z
particular)r   Z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   rR   FT)r	   r   rN   Zis_zero_matrix)r   Z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   rC   rD   )r   r   r   rC   r   r†   rn   )r   r   rC   r`   é	   rV   rŸ   )rC   rD   TF)r	   r   Z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   rY   Zis_lowerr#   r   r   r   Útest_SDM_is_lower¢  s$   þþýþþýr¦   N)?Ú__doc__Ú	itertoolsr   Zsympy.core.singletonr   Zsympy.external.gmpyr   Zsympy.testing.pytestr   Zsympy.polys.domainsr   r   r   Zsympy.polys.matrices.sdmr	   Zsympy.polys.matrices.ddmr
   Zsympy.polys.matrices.exceptionsr   r   r   r   r    r%   r'   r*   r,   r-   r.   r/   r0   r1   r=   rB   rG   rP   rQ   rS   rU   rW   rZ   r_   rk   rt   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    
	
	


