U
    ˜9%e°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&t‚| jdks4t‚t| ƒddtdƒiiksPt‚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   úb/var/www/html/Darija-Ai-API/env/lib/python3.8/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ÚAssertionErrorÚ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s2t‚trHt| ƒdksXt‚nt| ƒdksXt‚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   r   Ú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:t‚d S ©Nr   r   r   )r	   r   Únewr   ©r   ÚBr   r   r   Útest_SDM_new%   s    r&   c                  C   sL   t ddtdƒiidtƒ} |  ¡ }| |ks,t‚tdƒ| d d< | |ksHt‚d S )Nr   r   r   r   )r	   r   Úcopyr   r$   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sTt‚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   r   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   r   )r	   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sDt‚t i dtƒ} |  ¡ g ks`t‚t i dtƒ} |  ¡ g g gks€t‚d S )Nr   r   r   ©r   r   )r   r   )r	   r   Zto_listr   r   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@t‚d S r"   )r	   r   Zto_list_flatr   r   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s0t‚d S )Nr   r   r   r   )r	   r   Zto_dokr   r   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@t‚|jdksNt‚t|ƒdtdƒidtdƒidœkstt‚d S )Nr   r   r   r   )r
   r   r	   Zfrom_ddmr   r   r   r   r$   r   r   r   Útest_SDM_from_ddmP   s
    (
r0   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sPt‚d S r"   )r	   r   r
   Zto_ddmr   r$   r   r   r   Útest_SDM_to_ddmX   s    (r1   c                  C   s,   t ddtdƒiidtƒ} |  ¡ | ks(t‚d S r"   )r	   r   Zto_sdmr   r   r   r   r   Útest_SDM_to_sdm^   s    r2   c                      sÄ   t ddtdƒiidtƒ‰ ˆ  dd¡tjks.t‚ˆ  dd¡tjksDt‚ˆ  dd¡tjksZt‚ˆ  dd¡tjkspt‚ˆ  dd¡tjks†t‚ˆ  dd¡tjksœt‚tt‡ fdd„ƒ tt‡ fdd„ƒ d S )	Nr   r   r   éþÿÿÿéÿÿÿÿc                      s   ˆ   dd¡S ©Nr   r   ©Úgetitemr   r   r   r   r   k   r   z"test_SDM_getitem.<locals>.<lambda>c                      s   ˆ   dd¡S ©Nr   r   r6   r   r   r   r   r   l   r   )r	   r   r7   Úzeror   Ú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sPt‚ˆ  ddtdƒ¡ ˆ t tdƒtdƒdœdtdƒidœdtƒks’t‚ˆ  ddtdƒ¡ ˆ t dtdƒtdƒdœidtƒksÊt‚ˆ  ddtdƒ¡ ˆ t dtdƒtdƒdœidtƒkst‚ˆ  ddtdƒ¡ ˆ t ddtdƒiidtƒks8t‚ˆ  ddtdƒ¡ ˆ t ddtdƒiidtƒkslt‚tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nr   r   r   r   c                      s   ˆ   ddtdƒ¡S )Nr   r   r   ©Úsetitemr   r   r   r   r   r      r   z"test_SDM_setitem.<locals>.<lambda>c                      s   ˆ   ddtdƒ¡S )Nr   r   r   r=   r   r   r   r   r   €   r   )r	   r   r>   r   r   r;   r   r   r   r   Útest_SDM_setitemo   s    &0&(""r?   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sft‚d S )	Nr   r   r   é   é   r   r   ©r   r   )r	   r   Zextract_sliceÚslicer   r$   r   r   r   Útest_SDM_extract_sliceƒ   s    .rD   c                     s4  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^t‚ˆ  ddgddg¡} | t tdƒtdƒdœtdƒtdƒdœdœdtƒks¨t‚ˆ  ddgddg¡} | t tdƒtdƒdœtdƒtdƒdœdœdtƒksòt‚ˆ  d	gd	g¡} | t ddtdƒiidtƒks$t‚t i dtƒ‰ ˆ  dddgddg¡} | t i d
tƒks\t‚t tdƒtdƒdœtdƒtdƒdœdœdtƒ‰ ˆ  g g ¡t  dt¡ks¨t‚ˆ  dgg ¡t  dt¡ksÈt‚ˆ  g dg¡t  dt¡ksèt‚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   r@   rA   r   r   rB   r4   ©r@   r   )r   r   )r   r   c                      s   ˆ   dgdg¡S r5   ©Úextractr   r   r   r   r      r   z"test_SDM_extract.<locals>.<lambda>c                      s   ˆ   dgdg¡S r8   rF   r   r   r   r   r   ž   r   c                      s   ˆ   dgdg¡S )Néýÿÿÿr   rF   r   r   r   r   r   Ÿ   r   c                      s   ˆ   dgdg¡S )Nr   rH   rF   r   r   r   r   r       r   )r	   r   rG   r   Úzerosr   r;   ©r%   r   r   r   Útest_SDM_extract‰   s(    . 66".  rK   c                  C   s<   t  dt¡} | jtkst‚| jdks(t‚t| ƒi ks8t‚d S )Nr   )r	   rI   r   r   r   r   r   r   r   r   r   Útest_SDM_zeros£   s    rL   c                  C   sN   t  dt¡} | jtkst‚| jdks(t‚t| ƒdtdƒtdƒdœiksJt‚d S )N©r   r   r   r   r   )r	   Zonesr   r   r   r   r   r   r   r   r   Útest_SDM_ones©   s    rN   c                  C   sR   t  dt¡} | jtkst‚| jdks(t‚t| ƒdtdƒidtdƒidœksNt‚d S )Nr   r   r   r   )r	   Úeyer   r   r   r   r   r   r   r   r   Útest_SDM_eye¯   s    rP   c                  C   sH   t  tdƒtdƒgtd¡} | t dtdƒidtdƒidœdtƒksDt‚d S )Nr   r   ©r   r@   r   r   )r	   Zdiagr   r   r   r   r   r   Útest_SDM_diag¶   s    rR   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slt‚t ddtdƒiidtƒ} t ddtdƒiidtƒ}|  ¡ |ks¬t‚t ddtdƒiidtƒ} t ddtdƒiid	tƒ}|  ¡ |ksìt‚d S )
Nr   r   r   r@   rA   r   r   rM   ©r   r   )r	   r   Ú	transposer   r$   r   r   r   Útest_SDM_transpose»   s    ..rU   c                     s€   t ddtdƒiidtƒ‰ t ddtdƒiidtƒ} ˆ tdƒ | ksDt‚tdƒˆ  | ksXt‚tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nr   r   r   rA   c                      s   ˆ t ddƒ S ©Nr   r   ©r   r   r   r   r   r   Ï   r   ztest_SDM_mul.<locals>.<lambda>c                      s   t ddƒˆ  S rV   rW   r   r   r   r   r   Ð   r   )r	   r   r   r   Ú	TypeErrorrJ   r   r   r   Útest_SDM_mulÉ   s    rY   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sjt‚ˆ | ¡|ks|t‚|  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   rA   r@   é   r   rB   c                      s
   ˆ   ˆ¡S ©N©Úmul_elementwiser   )ÚAqr%   r   r   r   Ý   r   z*test_SDM_mul_elementwise.<locals>.<lambda>c                      s
   ˆ   ˆ¡S r[   r\   r   )ÚA1r%   r   r   r   Þ   r   )	r	   r   r]   r   Ú
convert_tor   r   r   r   ©r   ÚCr   )r_   r^   r%   r   Útest_SDM_mul_elementwiseÓ   s    "
rc   c                     s*  t ddtdƒiidtƒ‰ t ddtdƒiidtƒ} ˆ  ˆ ¡ˆ ˆ    krN| ksTn t‚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n 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ƒ}t ddtdƒiidtƒ‰| ˆ¡|ksŽt‚ˆ |¡ˆks¢t‚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&n t‚d S )Nr   r   r   rA   c                      s
   ˆ   ˆ¡S r[   ©Úmatmulr   ra   r   r   r   ç   r   z!test_SDM_matmul.<locals>.<lambda>r   r   r@   é   é
   é   é   rE   rQ   rZ   ©r@   r@   c                      s
   ˆ  ˆ ¡S r[   rd   r   )ÚA22ÚA23r   r   r   ø   r   r4   rM   rS   rB   )r	   r   re   r   r   r   r   r   )r%   ZA32ZA33r   )r   rk   rl   rb   r   Útest_SDM_matmulá   s&    $..&"rm   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s.t‚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>.dmrA   r   )r   ÚNegativeInfinityZNegativeOneZZeroZOneÚInfinityr   r   )rw   ÚvaluesÚaÚbÚcrs   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ºn t‚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rlˆ |    krl| ˆ    krl|ksrn t‚tt‡ fd	d
„ƒ d S )Nr   r   r@   r   r   r   r3   é   c                      s   ˆ g  S r[   r   r   r   r   r   r     r   ztest_SDM_add.<locals>.<lambda>)r	   r   Úaddr   r   rX   ©r%   rb   r   r   r   Útest_SDM_add  s    (((B(.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sœn t‚tt‡ fd
d„ƒ d S )Nr   r   r@   r   r   r   r3   r4   rA   c                      s   ˆ g  S r[   r   r   r   r   r   r   $  r   ztest_SDM_sub.<locals>.<lambda>)r	   r   Úsubr   r   rX   r   r   r   r   Útest_SDM_sub  s
    ((($r„   c                  C   st   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rj|kspn t‚d S )	Nr   r   r@   r   r   r4   r3   rH   )r	   r   Únegr   r$   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sft‚|jtkstt‚|  t¡}|| ksŠt‚|jtks˜t‚d S )Nr   r   r@   r   r   )r	   r   r   r`   r   r   )r   r%   rb   Ú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s‚t‚t  | | ¡|ks–t‚t  | |¡|ksªt‚d S )Nr   r   r   )r   r@   ©r   rA   r@   r   )r	   r   Zhstackr   ©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s†t‚t  | | ¡|ksšt‚t  | |¡|ks®t‚d S )Nr   r   r   r,   )rA   r   )r   r@   )r	   r   Zvstackr   rŠ   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sHt‚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   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spt‚d S )	Nr   r   r   r@   rA   r   r3   r4   )r	   r   Úinvr   r$   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sBt‚d S )Nr   r   r   r@   rA   r   r3   )r	   r   Zdetr   r   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sjt‚d S )Nr   r   r   r@   rA   r   r   )r	   r   Zlur   )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|t‚|  |¡|ksŽt‚d S )	Nr   r   r   r@   rA   r   r   rS   )r	   r   re   r   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sPt‚d S )	Nr   r   r   r@   rA   r   éûÿÿÿr3   )r	   r   Zcharpolyr   r   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sLt‚d S )Nr   r   r   r   r4   rM   )r	   r   Z	nullspacer   r   r   r   r   Útest_SDM_nullspaceu  s    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sht‚t dtdƒitdƒtdƒdœdœdtƒ}| ¡ | ddgfks¨t‚t dtdƒitdƒtdƒdœdœdtƒ}| ¡ | ddgfksèt‚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€t‚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t‚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st‚d S )Nr   r   r   r   r   r@   rA   ©r   r   r   r   r   rf   rZ   é	   rj   r4   r,   rM   )r   r   r@   r‰   é   )r   r   r@   i÷ÿÿÿ©r   r   r@   rQ   )r	   r   Zrrefr   )Zeye2r   ZArrefr   r   r   Útest_SDM_rrefz  sR    ".((þ þ.ÿ ÿÿ ÿÿ ÿ$ þrœ   c                  C   s8   t ddtdƒiidtƒ} t  dt¡}|  ¡ |ks4t‚d S )Nr   r   r   rM   )r	   r   rI   Z
particularr   )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ks4t‚| ¡ dksDt‚d S )Nr   r   r   rM   FT)r	   r   rI   Zis_zero_matrixr   )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ks¶t‚| ¡ dksÆt‚d S ©Nr   r   r@   rA   )r   r   r   r@   r   r   rf   r›   rZ   r™   rQ   r˜   )r@   rA   TF)r	   r   Zis_upperr   r$   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ks¾t‚| ¡ dksÎt‚d S rŸ   )r	   r   rT   Zis_lowerr   r$   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/   r0   r1   r2   r<   r?   rD   rK   rL   rN   rP   rR   rU   rY   rc   rm   r~   r‚   r„   r†   rˆ   r‹   rŒ   rŽ   r   r‘   r“   r”   r–   r—   rœ   r   rž   r    r¡   r   r   r   r   Ú<module>   sd   
	
	


 