U
    @fc                     @   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)dd ZZej+,d'e*dd Z[ej+,d'e)dd Z\ej+,d'e*dd Z]ej+,d'e*dd Z^ej+,d'e)dd 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	rt |d d dkstnt |jd dksttdt }	 tkr|	j|kst|	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sttt fdd tt fdd tt fdd q|D ]
  dt }|jdkst|jdkst|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sttt fdd tt fdd tt fdd qt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%   G/tmp/pip-unpacked-wheel-6uje5nh9/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   Z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st||kd
kstn$||kd
kst||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stqqt|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   	enumerater4   )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     & &




rB   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rt| dt }|| |D ]N   |kst 	 |ksttdkrt
t fdd	   |kstqt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st |kst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 rC   )
convert_tor%   )r:   Kr%   r)   r*      r+   c                      s      S rC   rD   r%   )A_Kr%   r)   r*      r+   N)r   r   r   r   r   r   r3   r9   r4   to_sdmr   NotImplementedErrorZto_dfm_or_ddmrE   r   r   r   
isinstance_supports_domainrG   )	r(   r/   ZA_ddmZA_sdmZA_dm_dZA_dm_sZA_allZA_dfmZA_dfm_Kr%   )r:   rI   rH   r)   test_to_XXM   s:     &



rN   c                     s   t d\} }tdkr<g }i }tttdt|  t| |f g}n`tdkrddl}ttg}t|jt|ji}tdt|  t| |f t| |t	g}ndst
dt |D ], t d	kst
t |  kst
q|D ]( t dkst
tt fd
d qdS )z(Test which domains are supported by DFM.zx, y)pythongmpyr   r   r   NFzUnknown GROUND_TYPES: %sTc                      s
   t  S rC   )r   _get_flint_funcr%   r6   r%   r)   r*     r+   z"test_DFM_domains.<locals>.<lambda>)r   r   r   r   r   r   Zfmpz_matZfmpq_matZ
frac_fieldr   r4   r   rM   rQ   r   rK   )xy	supportedZflint_funcsZnot_supportedr   r%   rR   r)   test_DFM_domains   s4       

rV   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   r9   rJ   r   r   rE   r4   )r(   typrH   r:   r%   r%   r)   _DM
  s    
rX   c                 C   s   t | |tS )z'Make a DM of type typ over ZZ from lol.)rX   r   r(   rW   r%   r%   r)   _DMZ  s    rZ   c                 C   s   t | |tS )z'Make a DM of type typ over QQ from lol.)rX   r   rY   r%   r%   r)   _DMQ  s    r[   c                 C   s   t | d|S )zMake a DDM over K from lol.r   rX   r(   rH   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    r`   c                 C   s
   t | dS zMake a DDM from lol.r   rZ   r2   r%   r%   r)   DMZ_ddm3  s    rc   c                 C   s
   t | dS zMake a SDM from lol.r   rb   r2   r%   r%   r)   DMZ_sdm8  s    re   c                 C   s
   t | dS zMake a DFM from lol.r   rb   r2   r%   r%   r)   DMZ_dfm=  s    rg   c                 C   s
   t | dS ra   r[   r2   r%   r%   r)   DMQ_ddmB  s    ri   c                 C   s
   t | dS rd   rh   r2   r%   r%   r)   DMQ_sdmG  s    rj   c                 C   s
   t | dS rf   rh   r2   r%   r%   r)   DMQ_dfmL  s    rk   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 rn n:d  krn|k rn n" t|  kstq>tt fdd q>q6d	S )
zTest getitem for DDM, etc.r   r   r   c                      s     S rC   )getitemr%   r:   ijr%   r)   r*   e  r+   z"test_XDM_getitem.<locals>.<lambda>N)r7   ro   r   r4   r   
IndexError)r   r(   r?   r>   indicesr%   rp   r)   test_XDM_getitemV  s    
0"ru   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st  dd
td  | dddgdddggkst  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st  ddtd  | dddgdddggkst  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st  ddtd  | dddgdddggkst  ddtd  | dddgdddggkst  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st  ddtd  | dddgdddggkst  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      rn   	   rm   
   rl      c                      s     ddtdS )Nr   r      setitemr   r%   rF   r%   r)   r*     r+   z"test_XDM_setitem.<locals>.<lambda>c                      s     ddtdS )Nr      r{   r%   rF   r%   r)   r*     r+               c                      s     ddtdS )Nr   r      r{   r%   rF   r%   r)   r*     r+   c                      s     ddtdS )Nrl   r      r{   r%   rF   r%   r)   r*     r+   N)r|   r   r4   r   rs   r   r%   rF   r)   test_XDM_setitemh  sR        """""""""""""r   c                   @   s   e Zd Zdd ZdS )_Slicedc                 C   s   |S rC   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st|j tdd d d
f  | ddgddggkst|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st|j td d dd d df  | ddgdd	ggkst|j td d dd d df  | ddgd	dggkst|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st|j td d d
d d f  | ddd	gdddgdddggkstd S )Nr   r   r   r   r   r   r   rv   rw   rn   rm   )Zextract_slice_slicer4   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st  ddgd
dg| ddgdd	ggkst  ddgd
g| dgdggkst  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std S )Nr   r   r   r   r   r   r   rv   rw   r   r!   )r   r   c                      s     ddgddgS )Nr   r   r   r   extractr%   rF   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%   rF   r%   r)   r*     r+   c                      s     ddgddgS )Nr   r   r   r   r%   rF   r%   r)   r*     r+   c                      s     ddgddgS )Nr}   r   r   r   r   r%   rF   r%   r)   r*     r+   )r   r4   zerosr   r   rs   )r   Br%   rF   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stt|  dkstt tdtdddtdiddt}t|dkstt| dkstt| dkst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rt|  dkstt| dkstt|  dkstt| dkstd S )Nr   r   r   r   r   r   r   rv   rw   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}}rP   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   strr4   r9   rJ   reprr   rE   )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st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   r4   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   r4   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   r4   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   r4   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_nzr7   r4   )r   Melementsrt   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   rt   r%   r)   r*   A  r+   z'test_XXM_from_flat_nz.<locals>.<lambda>)r   r   r   r4   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_dodr4   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_dodr4   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_dokr4   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_dokr4   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   sortedZiter_valuesr4   )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   Z
iter_itemsr4   )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_ddmr4   )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   r4   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   r4   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   Zeyer   r4   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   r4   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	transposer4   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   rv   rx   rz   )addr4   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   )subr4   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   mulr4   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   @   )matmulr4   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   rw   r      $   )Zmul_elementwiser4   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   rn   rm   rl   r}   i)negr4   )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   rG   r4   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std S )Nr   r   r   r   r   r   )Zsccr4   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st| |||kstd S )Nr   r   r   r   r   r   r   rv   rw   rx   )Zhstackr4   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st| |||kstd S )
Nr   r   r   r   r   r   r   rv   rw   )Zvstackr4   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   rv   rx   rz   c                 S   s   d|  S )Nr   r%   )rS   r%   r%   r)   r*     r+   z$test_XXM_applyfunc.<locals>.<lambda>)Z	applyfuncr   r4   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_upperr4   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_lowerr4   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_diagonalr4   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diagonalr4   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_matrixr4   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   rv   rw   r   rx   rl   )detr4   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   rn   rx   )r   r   r4   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   )ir   )   r   )r   r   )r   r   r   r   )r   r   )r   r   c                      s      S rC   invr%   )dM3r%   r)   r*   #  r+   z!test_XXM_inv_QQ.<locals>.<lambda>c                      s      S rC   r   r%   )dM4r%   r)   r*   &  r+   )r   r4   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   rv   rx   c                      s      S rC   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   rv   rx   ii)charpolyr4   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   irx   rn   )r   r   r4   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   rv   rx   r   c                      s
     S rC   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sn 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   rv   rx   r   )rm   r   )r}   r   r   )ry   r   )rm   r   c                      s
     S rC   r   r%   r   ZdM5r%   r)   r*   M  r+   z&test_XXM_lu_solve_QQ.<locals>.<lambda>)r   r   r4   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   rv   rw   rm   )Z	nullspacer4   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   rn   r   r   )Zlllr4   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;   rB   rN   rV   rX   rZ   r[   r^   r_   r`   rc   re   rg   ri   rj   rk   ZDM_allZDMZ_allZDMQ_allmarkZparametrizeru   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






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

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