U
    ZÊ¹jÏc  ã                   @   sV  d dl mZ d dlmZmZmZmZmZ d dlm	Z	m
Z
mZmZmZ d dlmZmZmZmZmZ d dlmZmZ d dl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'ee e!gZ(e"e#e$gZ)e%e&e'gZ*ej+ ,d'e)¡d(d)„ ƒZ-ej+ ,d'e)¡d*d+„ ƒZ.G d,d-„ d-ƒZ/e/ƒ Z0ej+ ,d'e)¡d.d/„ ƒZ1ej+ ,d'e)¡d0d1„ ƒZ2d2d3„ Z3ej+ ,d'e)¡d4d5„ ƒZ4ej+ ,d'e)¡d6d7„ ƒZ5ej+ ,d'e)¡d8d9„ ƒZ6ej+ ,d'e)¡d:d;„ ƒZ7ej+ ,d'e)¡d<d=„ ƒZ8ej+ ,d'e)¡d>d?„ ƒZ9ej+ ,d'e)¡d@dA„ ƒZ:ej+ ,d'e)¡dBdC„ ƒZ;ej+ ,d'e)¡dDdE„ ƒZ<ej+ ,d'e)¡dFdG„ ƒZ=ej+ ,d'e)¡dHdI„ ƒZ>ej+ ,d'e)¡dJdK„ ƒZ?ej+ ,d'e)¡dLdM„ ƒZ@ej+ ,d'e)¡dNdO„ ƒZAej+ ,d'e)¡dPdQ„ ƒZBej+ ,d'e)¡dRdS„ ƒZCej+ ,d'e)¡dTdU„ ƒZDej+ ,d'e)¡dVdW„ ƒZEej+ ,d'e)¡dXdY„ ƒZFej+ ,d'e)¡dZd[„ ƒZGej+ ,d'e)¡d\d]„ ƒZHej+ ,d'e)¡d^d_„ ƒZIej+ ,d'e)¡d`da„ ƒZJej+ ,d'e)¡dbdc„ ƒZKej+ ,d'e(¡ddde„ ƒZLej+ ,d'e)¡dfdg„ ƒZMej+ ,d'e)¡dhdi„ ƒZNej+ ,d'e)¡djdk„ ƒZOej+ ,d'e)¡dldm„ ƒZPej+ ,d'e)¡dndo„ ƒZQej+ ,d'e)¡dpdq„ ƒZRej+ ,d'e)¡drds„ ƒZSej+ ,d'e)¡dtdu„ ƒZTej+ ,d'e)¡dvdw„ ƒZUej+ ,d'e)¡dxdy„ ƒZVej+ ,d'e*¡dzd{„ ƒZWej+ ,d'e*¡d|d}„ ƒZXej+ ,d'e)¡d~d„ ƒZYej+ ,d'e)¡d€d�„ ƒZZej+ ,d'e*¡d‚dƒ„ ƒZ[ej+ ,d'e)¡d„d…„ ƒZ\ej+ ,d'e*¡d†d‡„ ƒZ]ej+ ,d'e*¡dˆd‰„ ƒZ^ej+ ,d'e)¡dŠd‹„ ƒZ_dS )Œé    )ÚGROUND_TYPES)ÚZZÚQQÚGFÚZZ_IÚsymbols)ÚDMBadInputErrorÚDMDomainErrorÚDMNonSquareMatrixErrorÚDMNonInvertibleMatrixErrorÚDMShapeError)ÚDMÚDomainMatrixÚDDMÚSDMÚDFM)ÚraisesÚskipNc            
         s  t dƒt dƒgt dƒt dƒgt dƒt dƒgg‰t dƒt dƒdœt dƒt dƒdœt dƒt dƒdœdœ‰g } g }g g g}i }i }i }t dƒt dƒgt dƒt dƒgt dƒt dƒt d	ƒgg‰t dƒt dƒdœt dƒt dƒdœt dƒt dƒt d	ƒdœdœ‰tg}tg}td
k�r| t¡ |D �]¨‰ ˆ ˆdt ƒ}|jdk�s6t‚|jdk�sFt‚|j	t k�sVt‚|j
dk�sft‚ˆ tk	�rŽt  |d d ¡dk�s¨t‚nt  |jd ¡dk�s¨t‚tˆdt ƒ}	ˆ tk�rä|	j|k�sÎt‚|	j ¡ |k�s8t‚nTtd
k�r|	j ¡ |k�st‚|	j|k�s8t‚n$|	j|k�s$t‚|	j ¡ |k�s8t‚ˆ | dt ƒj
dk�sPt‚ˆ |dt ƒj
dk�sht‚ˆ |dt ƒj
dk�s€t‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ �q|D �]
‰ ˆ ˆdt ƒ}|jdk�sæt‚|jdk�söt‚|j	t k�st‚|j
dk�st‚t  |d d ¡dk�s2t‚tˆdt ƒj|k�sJt‚ˆ |dt ƒj
dk�sbt‚ˆ |dt ƒj
dk�szt‚ˆ |dt ƒj
dk�s’t‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ �qÄtt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ dS )zTest the DDM, etc constructors.é   é   é   é   é   é   ©r   r   ©r   r   r   é   Úflint©r   r   r   T©r   r   ©r   r   ©r   r   c                      s   ˆ ˆdt ƒS ©N©r   r   ©r   © ©ÚXDMÚlolr%   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/polys/matrices/tests/test_xxm.pyÚ<lambda>c   ó    z'test_XXM_constructors.<locals>.<lambda>c                      s   ˆ ˆdt ƒS ©Nr   r$   r%   )r'   Úlol_badr%   r)   r*   d   r+   c                      s   ˆ ˆdt ƒS r,   r$   r%   ©r'   Údodr%   r)   r*   e   r+   c                      s   ˆ ˆdt ƒS r"   r$   r%   r.   r%   r)   r*   u   r+   c                      s   ˆ ˆdt ƒS r,   r$   r%   r&   r%   r)   r*   v   r+   c                      s   ˆ ˆdt ƒS r,   r$   r%   )r'   Údod_badr%   r)   r*   w   r+   c                      s   t ˆ dtƒS r"   ©r   r   r%   ©r(   r%   r)   r*   y   r+   c                      s   t ˆ dtƒS r,   r1   r%   )r-   r%   r)   r*   z   r+   c                      s   t ˆ dtƒS r,   r1   r%   )r0   r%   r)   r*   {   r+   N)r   r   r   r   Úappendr   ÚrowsÚAssertionErrorÚcolsÚdomainÚshapeZof_typeÚrepr   Úto_ddmr   r   )
Zlol_0x0Zlol_0x2Zlol_2x0Zdod_0x0Zdod_0x2Zdod_2x0Z	XDM_denseZ
XDM_sparseÚAZAdmr%   )r'   r/   r0   r(   r-   r)   Útest_XXM_constructors#   s†    ýýýý






r<   c                  C   sš  t dƒt dƒgt dƒt dƒgg} t dƒt dƒdœt dƒt dƒdœdœ}t dƒt dƒgt dƒt dƒgg}t dƒt dƒdœt dƒt dƒdœdœ}t| dt ƒ}t|dt ƒ}t| dt ƒ}t|dt ƒ}t|dt ƒ}t|dt ƒ}	t|dt ƒ}
t|dt ƒ}||||g}||	|
|g}tdk�rRtddgddggdt ƒ}tddgddggdt ƒ}| |¡ | |¡ t|ƒD ]r\}}t|ƒD ]^\}}||k�r¢||kd	k�sŽt‚||kd
k�sÆt‚n$||kd
k�s´t‚||kd	k�sjt‚�qj�qZt|ƒD ]r\}}t|ƒD ]^\}}||k�r||kd	k�s
t‚||kd
k�sBt‚n$||kd
k�s0t‚||kd	k�sæt‚�qæ�qÖt|ƒD ]B\}}t|ƒD ].\}}||kd
k�s|t‚||kd	k�sbt‚�qb�qRdS )z1Test equality for DDM, SDM, DFM and DomainMatrix.r   r   r   r   r   r   ©r   r   r   TFN)	r   r   r   r   r   r   r3   Ú	enumerater5   )Zlol1Zdod1Zlol2Zdod2ZA1_ddmZA1_sdmZA1_dm_dZA1_dm_sZA2_ddmZA2_sdmZA2_dm_dZA2_dm_sZA1_allZA2_allZA1_dfmZA2_dfmÚnZAnÚmZAmÚA1ÚA2r%   r%   r)   Útest_XXM_eq~   sJ     & &




rC   c            	         sÖ  t dƒt dƒgt dƒt dƒgg} t dƒt dƒdœt dƒt dƒdœdœ}t| dt ƒ}t|dt ƒ}t| dt ƒ}t|dt ƒ}||||g}tdkr t| dt ƒ}| |¡ |D ]N‰ ˆ  ¡ |ks¸t‚ˆ  	¡ |ksÈt‚tdkr¤t
t‡ fdd	„ƒ ˆ  ¡ |ks¤t‚q¤tdk�rÒ|D ]Î‰ ˆ  ¡ |k�st‚t ttd
ƒtfD ]¤‰tˆ tƒ�rZt ˆ¡�sZt
t‡ ‡fdd	„ƒ npˆ  ˆ¡‰t ˆ¡�r | ˆ¡}ˆ ¡ |k�sŒt‚ˆ ¡ |k�sÊt‚n*t
t‡fdd	„ƒ ˆ ¡ | ˆ¡k�s(t‚�q(�qdS )z4Test to_ddm etc. for DDM, SDM, DFM and DomainMatrix.r   r   r   r   r   r=   r   c                      s   ˆ   ¡ S ©N©Úto_dfmr%   ©r;   r%   r)   r*   É   r+   ztest_to_XXM.<locals>.<lambda>r   c                      s
   ˆ   ˆ¡S rD   )Ú
convert_tor%   )r;   ÚKr%   r)   r*   Ô   r+   c                      s   ˆ   ¡ S rD   rE   r%   )ÚA_Kr%   r)   r*   Ü   r+   N)r   r   r   r   r   r   r3   r:   r5   Úto_sdmr   ÚNotImplementedErrorZto_dfm_or_ddmrF   r   r   r   Ú
isinstanceÚ_supports_domainrH   )	r(   r/   ZA_ddmZA_sdmZA_dm_dZA_dm_sZA_allZA_dfmZA_dfm_Kr%   )r;   rJ   rI   r)   Útest_to_XXM´   s:     &



rO   c                     s   t dƒ\} }tdkr<g }i }tttdƒt|  t| |f g}n`tdkrŒddl}ttg}t|jt|ji}tdƒt|  t| |f t | |¡t	g}ndsœt
dt ƒ‚|D ],‰ t ˆ ¡d	ks¶t
‚t ˆ ¡|ˆ  ks t
‚q |D ](‰ t ˆ ¡dksèt
‚tt‡ fd
d„ƒ qÒdS )z(Test which domains are supported by DFM.zx, y)ÚpythonÚgmpyr   r   r   NFzUnknown GROUND_TYPES: %sTc                      s
   t  ˆ ¡S rD   )r   Ú_get_flint_funcr%   ©r7   r%   r)   r*     r+   z"test_DFM_domains.<locals>.<lambda>)r   r   r   r   r   r   Zfmpz_matZfmpq_matZ
frac_fieldr   r5   r   rN   rR   r   rL   )ÚxÚyÚ	supportedZflint_funcsZnot_supportedr   r%   rS   r)   Útest_DFM_domainsà   s4       þ

÷rW   c                 C   s^   t | |ƒ}|dkr| ¡ S |dkr*| ¡ S |dkrJtdkrBtdƒ | ¡ S dsZtd| ƒ‚dS )	z&Make a DM of type typ over K from lol.r   r   r   r   z%DFM not supported in this ground typeFzUnknown type %sN)r   r:   rK   r   r   rF   r5   )r(   ÚtyprI   r;   r%   r%   r)   Ú_DM
  s    
rY   c                 C   s   t | |tƒS )z'Make a DM of type typ over ZZ from lol.)rY   r   ©r(   rX   r%   r%   r)   Ú_DMZ  s    r[   c                 C   s   t | |tƒS )z'Make a DM of type typ over QQ from lol.)rY   r   rZ   r%   r%   r)   Ú_DMQ  s    r\   c                 C   s   t | d|ƒS )zMake a DDM over K from lol.r   ©rY   ©r(   rI   r%   r%   r)   ÚDM_ddm$  s    r_   c                 C   s   t | d|ƒS )zMake a SDM over K from lol.r   r]   r^   r%   r%   r)   ÚDM_sdm)  s    r`   c                 C   s   t | d|ƒS )zMake a DFM over K from lol.r   r]   r^   r%   r%   r)   ÚDM_dfm.  s    ra   c                 C   s
   t | dƒS ©zMake a DDM from lol.r   ©r[   r2   r%   r%   r)   ÚDMZ_ddm3  s    rd   c                 C   s
   t | dƒS ©zMake a SDM from lol.r   rc   r2   r%   r%   r)   ÚDMZ_sdm8  s    rf   c                 C   s
   t | dƒS ©zMake a DFM from lol.r   rc   r2   r%   r%   r)   ÚDMZ_dfm=  s    rh   c                 C   s
   t | dƒS rb   ©r\   r2   r%   r%   r)   ÚDMQ_ddmB  s    rj   c                 C   s
   t | dƒS re   ri   r2   r%   r%   r)   ÚDMQ_sdmG  s    rk   c                 C   s
   t | dƒS rg   ri   r2   r%   r%   r)   ÚDMQ_dfmL  s    rl   r   c                    s²   ddgddgg}| |ƒ‰ ˆ j \}}ddddddg}|D ]v‰|D ]l‰dˆ  krV|k r”n n:dˆ  krn|k r”n n"ˆ  ˆˆ¡t|ˆ ˆ ƒksªt‚q>tt‡ ‡‡fdd„ƒ q>q6d	S )
zTest getitem for DDM, etc.r   r   r   éýÿÿÿéþÿÿÿéÿÿÿÿc                      s   ˆ   ˆˆ¡S rD   )Úgetitemr%   ©r;   ÚiÚjr%   r)   r*   e  r+   z"test_XDM_getitem.<locals>.<lambda>N)r8   rp   r   r5   r   Ú
IndexError)r   r(   r@   r?   Úindicesr%   rq   r)   Útest_XDM_getitemV  s    
0"rv   c                    s  | dddgdddggƒ‰ ˆ   ddtdƒ¡ ˆ | dddgdddggƒksJt‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒks|t‚ˆ   ddtd	ƒ¡ ˆ | ddd	gdddggƒks®t‚ˆ   dd
tdƒ¡ ˆ | dddgdddggƒksàt‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�st‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�sHt‚tt‡ fdd„ƒ tt‡ fdd„ƒ ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�s t‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�sÔt‚ˆ   d
dtdƒ¡ ˆ | dddgdddggƒk�st‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�s<t‚tt‡ fdd„ƒ tt‡ fdd„ƒ ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�s”t‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�sÈt‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�süt‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�s0t‚ˆ   dd
tdƒ¡ ˆ | dddgdddggƒk�sdt‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�s˜t‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�sÌt‚ˆ   ddtdƒ¡ ˆ | dddgdddggƒk�s t‚dS )zTest setitem for DDM, etc.r   r   r   r   r   r   r   r   é   ro   é	   rn   é
   rm   é   c                      s   ˆ   ddtdƒ¡S )Nr   r   é   ©Úsetitemr   r%   rG   r%   r)   r*   €  r+   z"test_XDM_setitem.<locals>.<lambda>c                      s   ˆ   ddtdƒ¡S )Nr   éüÿÿÿé   r|   r%   rG   r%   r)   r*   �  r+   é   é   é   é   c                      s   ˆ   ddtdƒ¡S )Nr   r   é   r|   r%   rG   r%   r)   r*   �  r+   c                      s   ˆ   ddtdƒ¡S )Nrm   r   é   r|   r%   rG   r%   r)   r*   �  r+   N)r}   r   r5   r   rt   ©r   r%   rG   r)   Útest_XDM_setitemh  sR        """""""""""""r‡   c                   @   s   e Zd Zdd„ ZdS )Ú_Slicedc                 C   s   |S rD   r%   )ÚselfÚitemr%   r%   r)   Ú__getitem__¬  s    z_Sliced.__getitem__N)Ú__name__Ú
__module__Ú__qualname__r‹   r%   r%   r%   r)   rˆ   «  s   rˆ   c                 C   sì  | dddgdddgddd	ggƒ}|j td d …d d …f Ž |ksBt‚|j tdd …d d …f Ž | dddgddd	ggƒksxt‚|j tdd …dd …f Ž | ddgdd	ggƒksªt‚|j tdd …d d
…f Ž | ddgddggƒksÜt‚|j tdd …d d
d…f Ž | dgdggƒk�st‚|j td d …d d d…f Ž | ddgddgdd	ggƒk�sJt‚|j td d d…d d …f Ž | dddgddd	ggƒk�s„t‚|j td d d…d d d…f Ž | ddgdd	ggƒk�s¼t‚|j td d d…d d d…f Ž | ddgd	dggƒk�sôt‚|j td d d…d d d…f Ž | dd	gddggƒk�s,t‚|j td d d…d d d…f Ž | d	dgddggƒk�sdt‚|j td d …d d d
…f Ž | dddgdddgd	ddggƒk�s¦t‚|j td d d
…d d …f Ž | ddd	gdddgdddggƒk�sèt‚d S )Nr   r   r   r   r   r   r   rw   rx   ro   rn   )Zextract_sliceÚ_slicer5   ©r   r;   r%   r%   r)   Útest_XXM_extract_slice³  s     "6222<:8888Br‘   c                    sÚ  | dddgdddgddd	ggƒ‰ ˆ   d
ddgd
ddg¡ˆ ks@t‚ˆ   ddgddg¡| ddgdd	ggƒkslt‚ˆ   ddgd
dg¡| ddgddggƒks˜t‚ˆ   ddgd
dg¡| ddgdd	ggƒksÄt‚ˆ   ddgd
g¡| dgdggƒksêt‚ˆ   ddgg ¡| dggƒ dt¡k�st‚ˆ   g d
ddg¡| dggƒ 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
d
d
gd
d
d
gd
d
d
ggƒ}|  ddgddg¡| d
d
gd
d
ggƒk�sÖt‚d S )Nr   r   r   r   r   r   r   rw   rx   r   r!   )r   r   c                      s   ˆ   ddgddg¡S )Nr   r   r   r   ©Úextractr%   rG   r%   r)   r*   Ò  r+   z"test_XXM_extract.<locals>.<lambda>c                      s   ˆ   ddgddg¡S )Nr   r   r   r~   r’   r%   rG   r%   r)   r*   Ó  r+   c                      s   ˆ   ddgddg¡S )Nr   r   r   r’   r%   rG   r%   r)   r*   Ô  r+   c                      s   ˆ   ddgddg¡S )Nr~   r   r   r   r’   r%   rG   r%   r)   r*   Õ  r+   )r“   r5   Úzerosr   r   rt   )r   ÚBr%   rG   r)   Útest_XXM_extractÅ  s      ,,,&*, r–   c                  C   sÐ  t dddgdddgddd	ggd
tƒ} t| ƒdks4t‚t|  ¡ ƒdksHt‚t|  ¡ ƒdks\t‚t| ƒdkslt‚t|  ¡ ƒdks€t‚t|  ¡ ƒdks”t‚t tdƒtdƒdœdtdƒidœdtƒ}t|ƒdksÌt‚t| ¡ ƒdksàt‚t| ¡ ƒdksôt‚t|ƒdk�st‚tdk�r>t| ¡ ƒdk�s&t‚t| ¡ ƒdk�sjt‚n,t| ¡ ƒdk�sTt‚t| ¡ ƒdk�sjt‚tdk�rÌt|  ¡ ƒdk�sŠt‚t| ¡ ƒdk�s t‚t|  ¡ ƒdk�s¶t‚t| ¡ ƒdk�sÌt‚d S )Nr   r   r   r   r   r   r   rw   rx   ©r   r   z;DomainMatrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]], (3, 3), ZZ)z![[1, 2, 3], [4, 5, 6], [7, 8, 9]]zE{0: {0: 1, 1: 2, 2: 3}, 1: {0: 4, 1: 5, 2: 6}, 2: {0: 7, 1: 8, 2: 9}}z2DDM([[1, 2, 3], [4, 5, 6], [7, 8, 9]], (3, 3), ZZ)zVSDM({0: {0: 1, 1: 2, 2: 3}, 1: {0: 4, 1: 5, 2: 6}, 2: {0: 7, 1: 8, 2: 9}}, (3, 3), ZZ)r   r   r=   z6DomainMatrix({0: {0: 1, 1: 2}, 1: {0: 3}}, (2, 2), ZZ)z[[1, 2], [3, 0]]z{0: {0: 1, 1: 2}, 1: {0: 3}}rQ   z!DDM([[1, 2], [3, 0]], (2, 2), ZZ)z-SDM({0: {0: 1, 1: 2}, 1: {0: 3}}, (2, 2), ZZ)z5DDM([[mpz(1), mpz(2)], [mpz(3), mpz(0)]], (2, 2), ZZ)z<SDM({0: {0: mpz(1), 1: mpz(2)}, 1: {0: mpz(3)}}, (2, 2), ZZ)r   z2DFM([[1, 2, 3], [4, 5, 6], [7, 8, 9]], (3, 3), ZZ)z!DFM([[1, 2], [3, 0]], (2, 2), ZZ))	r   r   Ústrr5   r:   rK   Úreprr   rF   )r;   r•   r%   r%   r)   Útest_XXM_strÛ  st    $ÿ
ÿ
ÿÿ
ÿ
ÿ(ÿ
ÿ
ÿÿ


ÿ

ÿ
ÿ

ÿ


ÿ

ÿ

ÿ

ÿrš   c                    s´   t | dggƒƒ‰ dddgdddgg}tdƒtdƒtdƒgtdƒtdƒtdƒgg}tdƒtdƒtdƒgtdƒtdƒtdƒtdƒgg‰ˆ  |dt¡| |ƒksœt‚tt‡ ‡fd	d
„ƒ d S )Nr   r   r   r   r   r   r   r#   c                      s   ˆ   ˆdt¡S r,   )Ú	from_listr   r%   ©ÚTZ
lol_ZZ_badr%   r)   r*     r+   z$test_XXM_from_list.<locals>.<lambda>)Útyper   r›   r5   r   r   )r   r(   Zlol_ZZr%   rœ   r)   Útest_XXM_from_list  s    ,2rŸ   c                 C   sT   dddgdddgg}| |ƒ  ¡ tdƒtdƒtdƒgtdƒtdƒtdƒggksPt‚d S ©Nr   r   r   r   r   )Zto_listr   r5   ©r   r(   r%   r%   r)   Útest_XXM_to_list  s    r¢   c                 C   sP   dddgdddgg}| |ƒ  ¡ tdƒtdƒtdƒtdƒtdƒtdƒgksLt‚d S r    )Zto_list_flatr   r5   r¡   r%   r%   r)   Útest_XXM_to_list_flat#  s    r£   c                    sz   t | dggƒƒ‰ tdƒtdƒtdƒtdƒtdƒtdƒg‰ˆ  ˆdt¡| dddgdddggƒksbt‚tt‡ ‡fdd	„ƒ d S )
Nr   r   r   r   r   r   r#   c                      s   ˆ   ˆdt¡S )Nr—   )Úfrom_list_flatr   r%   ©r�   Zflatr%   r)   r*   .  r+   z)test_XXM_from_list_flat.<locals>.<lambda>)rž   r   r¤   r5   r   r   r†   r%   r¥   r)   Útest_XXM_from_list_flat)  s    (*r¦   c                 C   sX   | dddgdddgdddggƒ}t dƒt dƒt dƒg}d}| ¡ |||jffksTt‚d S )Nr   r   r   r   ©r   r   r=   )r   Z
to_flat_nzr8   r5   )r   ÚMÚelementsru   r%   r%   r)   Útest_XXM_to_flat_nz1  s     rª   c                    s‚   t | dggƒƒ‰ tdƒtdƒtdƒg‰d‰ˆdf}| dddgdddgdddggƒ}ˆ  ˆ|t¡|ksht‚tt‡ ‡‡fdd„ƒ d S )	Nr   r   r   r   r§   r—   c                      s   ˆ   ˆˆdft¡S r"   )Úfrom_flat_nzr   r%   ©r�   r©   ru   r%   r)   r*   A  r+   z'test_XXM_from_flat_nz.<locals>.<lambda>)rž   r   r«   r5   r   r   )r   ÚdataÚresultr%   r¬   r)   Útest_XXM_from_flat_nz9  s     r¯   c                 C   sT   t dƒt dƒdœt dƒt dƒt dƒdœdœ}| dddgdddggƒ ¡ |ksPt‚d S )	Nr   r   r    r   r   r   r   r   )r   Zto_dodr5   ©r   r/   r%   r%   r)   Útest_XXM_to_dodD  s    ,r±   c                 C   sj   t | dggƒƒ}tdƒtdƒdœtdƒtdƒtdƒdœdœ}| |d	t¡| dddgdddggƒksft‚d S )
Nr   r   r   r    r   r   r   r   r#   )rž   r   Zfrom_dodr5   ©r   r�   r/   r%   r%   r)   Útest_XXM_from_dodJ  s    ,r³   c                 C   sL   t dƒt dƒt dƒt dƒt dƒdœ}| dddgdddggƒ ¡ |ksHt‚d S )Nr   r   r   r   ©r   r    ©r   r   ©r   r   ©r   r   r   )r   Zto_dokr5   r°   r%   r%   r)   Útest_XXM_to_dokQ  s      ÿr¸   c                 C   sb   t | dggƒƒ}tdƒtdƒtdƒtdƒtdƒdœ}| |dt¡| dddgdddggƒks^t‚d S )Nr   r   r   r   r   r´   r#   )rž   r   Zfrom_dokr5   r²   r%   r%   r)   Útest_XXM_from_dokX  s      ÿr¹   c                 C   sN   t dƒt dƒt dƒt dƒt dƒg}t| dddgdddggƒ ¡ ƒ|ksJt‚d S )Nr   r   r   r   r   )r   ÚsortedÚiter_valuesr5   )r   Úvaluesr%   r%   r)   Útest_XXM_iter_values`  s    "r½   c                 C   sb   dt dƒfdt dƒfdt dƒfdt dƒfdt d	ƒfg}t| dd
dgddd	ggƒ ¡ ƒ|ks^t‚d S )Nr   r   r    r   rµ   r¶   r   r·   r   r   )r   rº   Ú
iter_itemsr5   )r   Úitemsr%   r%   r)   Útest_XXM_iter_itemsf  s    
 
 
ÿrÀ   c                 C   sV   t | dggƒƒ}tdddgdddggdtƒ}| |¡| dddgdddggƒksRt‚d S )Nr   r   r   r   r   r   r#   )rž   r   r   Zfrom_ddmr5   )r   r�   Zddmr%   r%   r)   Útest_XXM_from_ddmm  s    rÁ   c                 C   s<   t | dggƒƒ}| dt¡| dddgdddggƒks8t‚d S )Nr   r#   )rž   r”   r   r5   ©r   r�   r%   r%   r)   Útest_XXM_zerost  s    rÃ   c                 C   s<   t | dggƒƒ}| dt¡| dddgdddggƒks8t‚d S )Nr   r#   r   )rž   Zonesr   r5   rÂ   r%   r%   r)   Útest_XXM_onesz  s    rÄ   c                 C   sn   t | dggƒƒ}| dt¡| dddgdddgdddggƒks@t‚| dt¡| ddgddgddggƒksjt‚d S )Nr   r   r   r   )rž   Úeyer   r5   rÂ   r%   r%   r)   Útest_XXM_eye€  s    0rÆ   c                 C   sJ   t | dggƒƒ}| dddgt¡| dddgdddgdddggƒksFt‚d S )Nr   r   r   r   )rž   Zdiagr   r5   rÂ   r%   r%   r)   Útest_XXM_diag‡  s    rÇ   c                 C   sB   | dddgdddggƒ}|  ¡ | ddgddgddggƒks>t‚d S ©Nr   r   r   r   r   r   )Z	transposer5   r�   r%   r%   r)   Útest_XXM_transpose�  s    rÉ   c                 C   s^   | dddgdddggƒ}| dddgdddggƒ}| dddgddd	ggƒ}|  |¡|ksZt‚d S ©
Nr   r   r   r   r   r   rw   ry   r{   )Úaddr5   ©r   r;   r•   ÚCr%   r%   r)   Útest_XXM_add“  s    rÎ   c                 C   s^   | dddgdddggƒ}| dddgdddggƒ}| dddgdddggƒ}|  |¡|ksZt‚d S )Nr   r   r   r   r   r   r   )Úsubr5   rÌ   r%   r%   r)   Útest_XXM_sub›  s    rÐ   c                 C   sp   | dddgdddggƒ}t dƒ}| |¡| dddgddd	ggƒksFt‚| |¡| dddgddd	ggƒkslt‚d S rÊ   )r   Úmulr5   Zrmul)r   r;   Úbr%   r%   r)   Útest_XXM_mul£  s    &rÓ   c                 C   s\   | dddgdddggƒ}| ddgddgddggƒ}| ddgd	d
ggƒ}|  |¡|ksXt‚d S )Nr   r   r   r   r   r   é   é   é1   é@   )Úmatmulr5   rÌ   r%   r%   r)   Útest_XXM_matmul«  s    rÙ   c                 C   s^   | dddgdddggƒ}| dddgdddggƒ}| dddgdd	d
ggƒ}|  |¡|ksZt‚d S )Nr   r   r   r   r   r   rx   r‚   é   é$   )Zmul_elementwiser5   rÌ   r%   r%   r)   Útest_XXM_mul_elementwise³  s    rÜ   c                 C   sD   | dddgdddggƒ}| ddd	gd
ddggƒ}|  ¡ |ks@t‚d S )Nr   r   r   r   r   r   ro   rn   rm   r~   éûÿÿÿiúÿÿÿ)Únegr5   )r   r;   rÍ   r%   r%   r)   Útest_XXM_neg»  s    rß   c                 C   s\   | dddgdddggt ƒ}| dddgdddggtƒ}| t¡|ksFt‚| t ¡|ksXt‚d S rÈ   )r   r   rH   r5   ©r   r;   r•   r%   r%   r)   Útest_XXM_convert_toÂ  s    rá   c                 C   s„   | ddddddgddddddgddddddgddddddgddddddgddddddggƒ}|  ¡ ddgdgddgdggks€t‚d S )Nr   r   r   r   r   r   )Zsccr5   r�   r%   r%   r)   Útest_XXM_sccÊ  s    úrâ   c                 C   sª   | dddgdddggƒ}| ddgd	d
ggƒ}| dddddgdddd	d
ggƒ}| ddddddddddg
dddd	d
dddd	d
g
gƒ}|  |¡|ks’t‚|  ||¡|ks¦t‚d S )Nr   r   r   r   r   r   r   rw   rx   ry   )Zhstackr5   ©r   r;   r•   rÍ   ÚABCr%   r%   r)   Útest_XXM_hstackÖ  s     ÿrå   c              	   C   sª   | dddgdddggƒ}| ddd	ggƒ}| dddgdddgddd	ggƒ}| dddgdddgddd	gdddgdddgddd	ggƒ}|  |¡|ks’t‚|  ||¡|ks¦t‚d S )
Nr   r   r   r   r   r   r   rw   rx   )Zvstackr5   rã   r%   r%   r)   Útest_XXM_vstacká  s     8ræ   c                 C   sL   | dddgdddggƒ}| dddgddd	ggƒ}|  d
d„ t¡|ksHt‚d S )Nr   r   r   r   r   r   rw   ry   r{   c                 S   s   d|  S )Nr   r%   )rT   r%   r%   r)   r*   ï  r+   z$test_XXM_applyfunc.<locals>.<lambda>)Z	applyfuncr   r5   rà   r%   r%   r)   Útest_XXM_applyfuncë  s    rç   c                 C   sL   | dddgdddggƒ  ¡ dks$t‚| dddgdddggƒ  ¡ d	ksHt‚d S )
Nr   r   r   r   r   r   Tr   F)Zis_upperr5   r†   r%   r%   r)   Útest_XXM_is_upperò  s    $rè   c                 C   sL   | dddgdddggƒ  ¡ dks$t‚| dddgdddggƒ  ¡ d	ksHt‚d S )
Nr   r   r   r   Tr   r   r   F)Zis_lowerr5   r†   r%   r%   r)   Útest_XXM_is_lowerø  s    $ré   c                 C   sL   | dddgdddggƒ  ¡ dks$t‚| dddgdddggƒ  ¡ d	ksHt‚d S )
Nr   r   r   Tr   r   r   r   F)Zis_diagonalr5   r†   r%   r%   r)   Útest_XXM_is_diagonalþ  s    $rê   c                 C   s,   | dddgdddggƒ  ¡ ddgks(t‚d S )Nr   r   r   )Zdiagonalr5   r†   r%   r%   r)   Útest_XXM_diagonal  s    rë   c                 C   sL   | dddgdddggƒ  ¡ dks$t‚| dddgdddggƒ  ¡ dksHt‚d S )Nr   Tr   F)Zis_zero_matrixr5   r†   r%   r%   r)   Útest_XXM_is_zero_matrix	  s    $rì   c                 C   s\   | dddgdddgddd	ggƒ  ¡ d
ks,t‚| dddgdddgdddggƒ  ¡ dksXt‚d S )Nr   r   r   r   r   r   r   rw   rx   r   ry   rm   )Údetr5   r†   r%   r%   r)   Útest_XXM_det_ZZ  s    ,rî   c                 C   s.   | ddgddggƒ}|  ¡ tddƒks*t‚d S )Nr·   r#   ©r   r   ©r   r   ro   ry   )rí   r   r5   ©r   ÚdM1r%   r%   r)   Útest_XXM_det_QQ  s    ró   c                    s®   | ddgddggƒ}| ddgddggƒ}|  ¡ |ks8t‚| |¡| d	d
gd
d	ggƒksZt‚| ddgddggƒ‰ tt‡ fdd„ƒ | dddgdddggƒ‰tt‡fdd„ƒ d S )Nr·   r#   rï   rð   )iøÿÿÿr   )é   r   )r�   r   )rÝ   r   r   r   )r   r   )r   r   c                      s   ˆ   ¡ S rD   ©Úinvr%   )ÚdM3r%   r)   r*   #  r+   z!test_XXM_inv_QQ.<locals>.<lambda>c                      s   ˆ   ¡ S rD   rõ   r%   )ÚdM4r%   r)   r*   &  r+   )rö   r5   rØ   r   r   r
   )r   rò   ÚdM2r%   )r÷   rø   r)   Útest_XXM_inv_QQ  s    "rú   c                    s6   | dddgdddgddd	ggƒ‰ t t‡ fd
d„ƒ d S )Nr   r   r   r   r   r   r   rw   ry   c                      s   ˆ   ¡ S rD   rõ   r%   ©rò   r%   r)   r*   .  r+   z!test_XXM_inv_ZZ.<locals>.<lambda>©r   r	   r†   r%   rû   r)   Útest_XXM_inv_ZZ)  s     rý   c                 C   s<   | dddgdddgddd	ggƒ}|  ¡ dd
ddgks8t‚d S )Nr   r   r   r   r   r   r   rw   ry   iðÿÿÿiôÿÿÿ)Úcharpolyr5   rñ   r%   r%   r)   Útest_XXM_charpoly_ZZ1  s     rÿ   c                 C   s@   | ddgddggƒ}|  ¡ tddƒtddƒtddƒgks<t‚d S )	Nr·   r#   rï   rð   r   ióÿÿÿry   ro   )rþ   r   r5   rñ   r%   r%   r)   Útest_XXM_charpoly_QQ7  s    r   c                    sX   | dddgdddgddd	ggƒ‰ | dd
d
gd
dd
gd
d
dggƒ‰t t‡ ‡fdd„ƒ d S )Nr   r   r   r   r   r   r   rw   ry   r   c                      s
   ˆ   ˆ¡S rD   ©Úlu_solver%   ©rò   rù   r%   r)   r*   A  r+   z&test_XXM_lu_solve_ZZ.<locals>.<lambda>rü   r†   r%   r  r)   Útest_XXM_lu_solve_ZZ=  s      r  c                    sÎ   | dddgdddgddd	ggƒ}| dd
d
gd
dd
gd
d
dggƒ}| dddgdddgdddggƒ}|  |¡|  kr~| ¡ ks„n t‚| dddgdddggƒ‰ | dd
gd
dgd
d
ggƒ‰tt‡ ‡fdd„ƒ d S )Nr   r   r   r   r   r   r   rw   ry   r   )rn   r   )r~   r   r¶   )rz   r   )rn   r   c                      s
   ˆ   ˆ¡S rD   r  r%   ©rø   ZdM5r%   r)   r*   M  r+   z&test_XXM_lu_solve_QQ.<locals>.<lambda>)r  rö   r5   r   r   )r   rò   rù   r÷   r%   r  r)   Útest_XXM_lu_solve_QQD  s       $r  c                 C   sF   | dddgdddgddd	ggƒ}|  ¡ | dd
dggƒdgfksBt‚d S )Nr   r   r   r   r   r   r   rw   rx   rn   )Z	nullspacer5   rñ   r%   r%   r)   Útest_XXM_nullspace_QQP  s     r  c                 C   s~   | dddgdddggƒ}| dddgdddggƒ}| dd	gddggƒ}|  ¡ |ksTt‚| ¡ ||fksht‚| |¡|kszt‚d S )
Nr   r   r   r   r   rô   ro   rÝ   r   )Zlllr5   Zlll_transformrØ   )r   r¨   ZM_lllr�   r%   r%   r)   Útest_XXM_lllY  s    r  )`Zsympy.external.gmpyr   Zsympyr   r   r   r   r   Zsympy.polys.matrices.exceptionsr   r	   r
   r   r   Z!sympy.polys.matrices.domainmatrixr   r   r   r   r   Zsympy.testing.pytestr   r   Zpytestr<   rC   rO   rW   rY   r[   r\   r_   r`   ra   rd   rf   rh   rj   rk   rl   ZDM_allZDMZ_allZDMQ_allÚmarkZparametrizerv   r‡   rˆ   r�   r‘   r–   rš   rŸ   r¢   r£   r¦   rª   r¯   r±   r³   r¸   r¹   r½   rÀ   rÁ   rÃ   rÄ   rÆ   rÇ   rÉ   rÎ   rÐ   rÓ   rÙ   rÜ   rß   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>   sö   [6,*




B

6





























	














