a
    kº”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s4J ‚t| ƒddtdƒiiksPJ ‚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   úQ/var/www/auris/lib/python3.9/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   s`   t dtdƒidtdƒidœdtƒ} t| ƒdks2J ‚tdkrLt| ƒdks\J ‚n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sHJ ‚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sTJ ‚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   Ú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sDJ ‚t i dtƒ} |  ¡ g ks`J ‚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s0J ‚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sNJ ‚t|ƒdtdƒidtdƒidœkstJ ‚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sPJ ‚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sDJ ‚ˆ  dd¡tjksZJ ‚ˆ  dd¡tjkspJ ‚ˆ  dd¡tjks†J ‚ˆ  dd¡tjksœJ ‚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   r5   r   r   r   r   r   l   r   )r	   r   r6   ZzeroZoner   Ú
IndexErrorr   r   r   r   Útest_SDM_getitemc   s    r9   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sPJ ‚ˆ  ddtdƒ¡ ˆ t tdƒtdƒdœdtdƒidœdtƒks’J ‚ˆ  ddtdƒ¡ ˆ t dtdƒtdƒdœidtƒksÊJ ‚ˆ  ddtdƒ¡ ˆ t dtdƒtdƒdœidtƒksJ ‚ˆ  ddtdƒ¡ ˆ t ddtdƒiidtƒks8J ‚ˆ  ddtdƒ¡ ˆ t ddtdƒiidtƒkslJ ‚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   r8   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sfJ ‚d S )	Nr   r   r   é   é   r   r   ©r   r   )r	   r   Zextract_sliceÚslicer#   r   r   r   Útest_SDM_extract_sliceƒ   s    .rA   c                     s2  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s¨J ‚ˆ  ddgddg¡} | t tdƒtdƒdœtdƒtdƒdœdœdtƒksòJ ‚ˆ  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sZJ ‚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   r=   r>   r   r   r?   r3   )r   r   r   ©r=   r   )r   r   )r   r   c                      s   ˆ   dgdg¡S r4   ©Úextractr   r   r   r   r      r   z"test_SDM_extract.<locals>.<lambda>c                      s   ˆ   dgdg¡S r7   rC   r   r   r   r   r   ž   r   c                      s   ˆ   dgdg¡S )Néýÿÿÿr   rC   r   r   r   r   r   Ÿ   r   c                      s   ˆ   dgdg¡S )Nr   rE   rC   r   r   r   r   r       r   )r	   r   rD   Úzerosr   r8   ©r$   r   r   r   Útest_SDM_extract‰   s(    . 66".  rH   c                  C   s<   t  dt¡} | jtksJ ‚| jdks(J ‚t| ƒi ks8J ‚d S )Nr   )r	   rF   r   r   r   r   r   r   r   r   Útest_SDM_zeros£   s    rI   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sJJ ‚d S )N©r   r   r   r   r   )r	   Zonesr   r   r   r   r   r   r   r   Útest_SDM_ones©   s    rK   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sNJ ‚d S )Nr   r   r   r   )r	   Zeyer   r   r   r   r   r   r   r   Útest_SDM_eye¯   s    rL   c                  C   sH   t  tdƒtdƒgtd¡} | t dtdƒidtdƒidœdtƒksDJ ‚d S )Nr   r   ©r   r=   r   r   )r	   Zdiagr   r   r   r   r   Útest_SDM_diag¶   s    rN   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slJ ‚t ddtdƒiidtƒ} t ddtdƒiidtƒ}|  ¡ |ks¬J ‚t ddtdƒiidtƒ} t ddtdƒiid	tƒ}|  ¡ |ksìJ ‚d S )
Nr   r   r   r=   r>   r   r   rJ   ©r   r   )r	   r   Ú	transposer#   r   r   r   Útest_SDM_transpose»   s    ..rQ   c                     s€   t ddtdƒiidtƒ‰ t ddtdƒiidtƒ} ˆ tdƒ | ksDJ ‚tdƒˆ  | ksXJ ‚tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nr   r   r   r>   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 rR   rS   r   r   r   r   r   Ð   r   )r	   r   r   Ú	TypeErrorrG   r   r   r   Útest_SDM_mulÉ   s    rU   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sjJ ‚ˆ | ¡|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   r>   r=   é   r   r?   c                      s
   ˆ   ˆ¡S ©N©Úmul_elementwiser   )ÚAqr$   r   r   r   Ý   r   z*test_SDM_mul_elementwise.<locals>.<lambda>c                      s
   ˆ   ˆ¡S rW   rX   r   )ÚA1r$   r   r   r   Þ   r   )r	   r   rY   Ú
convert_tor   r   r   r   ©r   ÚCr   )r[   rZ   r$   r   Útest_SDM_mul_elementwiseÓ   s    "
r_   c                     s*  t ddtdƒiidtƒ‰ t ddtdƒiidtƒ} ˆ  ˆ ¡ˆ ˆ    krN| ksTn 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n 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&n J ‚d S )Nr   r   r   r>   c                      s
   ˆ   ˆ¡S rW   ©Úmatmulr   r]   r   r   r   ç   r   z!test_SDM_matmul.<locals>.<lambda>r   r   r=   é   é
   é   é   rB   rM   rV   )r=   r=   c                      s
   ˆ  ˆ ¡S rW   r`   r   )ÚA22ÚA23r   r   r   ø   r   r3   rJ   rO   r?   )r	   r   ra   r   r   r   r   )r$   ZA32ZA33r   )r   rf   rg   r^   r   Útest_SDM_matmulá   s&    $..&"rh   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.J ‚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>  r   z1test_matmul_exraw.<locals>.dm.<locals>.<dictcomp>r   )Úitemsr	   r   )ÚdÚresultÚiÚrowr   r   r   Údm  s    
ztest_matmul_exraw.<locals>.dmr>   r   )r   ÚNegativeInfinityZNegativeOneZZeroZOneÚInfinityr   )rr   ÚvaluesÚaÚbÚcrn   ZAdZAd2r   r   r   Útest_matmul_exrawÿ   s    Jry   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 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rlˆ |    krl| ˆ    krl|ksrn J ‚tt‡ fd	d
„ƒ d S )Nr   r   r=   r   r   r   r2   é   c                      s   ˆ g  S rW   r   r   r   r   r   r     r   ztest_SDM_add.<locals>.<lambda>)r	   r   Úaddr   rT   ©r$   r^   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 J ‚tt‡ fd
d„ƒ d S )Nr   r   r=   r   r   r   r2   r3   r>   c                      s   ˆ g  S rW   r   r   r   r   r   r   $  r   ztest_SDM_sub.<locals>.<lambda>)r	   r   Úsubr   rT   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 J ‚d S )	Nr   r   r=   r   r   r3   r2   rE   )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sfJ ‚|jtkstJ ‚|  t¡}|| ksŠJ ‚|jtks˜J ‚d S )Nr   r   r=   r   r   )r	   r   r   r\   r   )r   r$   r^   Ú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‚J ‚t  | | ¡|ks–J ‚t  | |¡|ksªJ ‚d S )Nr   r   r   )r   r=   )r   r>   r=   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s†J ‚t  | | ¡|ksšJ ‚t  | |¡|ks®J ‚d S )Nr   r   r   r+   )r>   r   )r   r=   )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sHJ ‚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spJ ‚d S )	Nr   r   r   r=   r>   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sBJ ‚d S )Nr   r   r   r=   r>   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sjJ ‚d S )Nr   r   r   r=   r>   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sŽJ ‚d S )	Nr   r   r   r=   r>   r   r   rO   )r	   r   ra   Zlu_solve)r   rw   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sPJ ‚d S )	Nr   r   r   r=   r>   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sLJ ‚d S )Nr   r   r   r   r3   rJ   )r	   r   Z	nullspacer   r   r   r   Útest_SDM_nullspaceu  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ƒ}|  ¡ |ddgfkshJ ‚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sêJ ‚d S )Nr   r   r   r=   r>   r   r   ©r   r   r   r+   rM   rJ   )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s4J ‚d S )Nr   r   r   rJ   )r	   r   rF   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 s4J ‚| ¡ du sDJ ‚d S )Nr   r   r   rJ   FT)r	   r   rF   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 sÆJ ‚d S ©Nr   r   r=   r>   )r   r   r   r=   r   rz   rb   )r   r   r=   rV   é	   rM   r’   )r=   r>   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 sÎJ ‚d S r–   )r	   r   rP   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   r9   r<   rA   rH   rI   rK   rL   rN   rQ   rU   r_   rh   ry   r}   r   r   rƒ   r…   r†   rˆ   rŠ   r‹   r   rŽ   r   r‘   r“   r”   r•   r˜   r™   r   r   r   r   Ú<module>   sd   
	
	


