a
    khRt                     @   s  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_ej+,d'e*dd Z`ej+,d'e*dd Zaej+,d'e*dd Zbej+,d'e*dd Zcej+,d'e*dd Zdej+,d'e*dd Zeej+,d'e)dd Zfej+,d'e*dd Zgej+,d'e*dd Zhej+,d'e*dd Ziej+,d'e*dd Zjej+,d'e*dd Zkej+,d'e*dd Zlej+,d'e)dd Zmd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s6J |jdksFJ |jt ksVJ |j	dksfJ  turt 
|d d du sJ nt 
|jd du sJ tdt }	 tu r|	j|ksJ |	j |ks8J nTtd
kr|	j |ksJ |	j|ks8J n$|	j|ks$J |	j |ks8J  | dt j	dksPJ  |dt j	dkshJ  |dt j	dksJ tt fdd tt fdd tt fdd q|D ]
  dt }|jdksJ |jdksJ |jt ksJ |j	dksJ t 
|d d du s2J tdt j|ksJJ  |dt j	dksbJ  |dt j	dkszJ  |dt j	dksJ 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%   Q/var/www/auris/lib/python3.9/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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	u sJ ||kd
u sJ n$||kd
u sJ ||kd	u sjJ qjqZt|D ]r\}}t|D ]^\}}||kr||kd	u s
J ||kd
u sBJ n$||kd
u s0J ||kd	u sJ qqt|D ]B\}}t|D ].\}}||kd
u s|J ||kd	u sbJ 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   	enumerate)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sJ   |ksJ tdkrt	t
 fdd	   |ksJ qtdkr|D ]Ή   |ksJ t ttd
tfD ]t trZtsZt	t
 fdd	 np tr|} |ksJ  |ksJ n*t	t
fdd	  |ks(J 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   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v r<g }i }tttdt|  t| |f g}nbtdkrddl}ttg}t|jt|jtddi}t|  t| |f t| |t	g}ndsJ dt |D ]8 t
 d	u sJ |  durt
 |  ksJ q|D ]( t
 du sJ 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   r   rM   rQ   r   rK   )xy	supportedZflint_funcsZnot_supportedr   r%   rR   r)   test_DFM_domains   s2     

rV   c                 C   s^   t | |}|dkr| S |dkr*| S |dkrJtdkrBtd | S dsZJ 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   )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 \}}g d}|D ]v|D ]ld  krN|k rn n:d  krf|k rn n" t|  ksJ q6tt fdd q6q.dS )	zTest getitem for DDM, etc.r   r   r   )r   r   r   rm   c                      s     S rC   )getitemr%   r:   ijr%   r)   r*   e  r+   z"test_XDM_getitem.<locals>.<lambda>N)r7   ro   r   r   
IndexError)r   r(   r?   r>   indicesr%   rp   r)   test_XDM_getitemV  s    
0"ru   c                    s  | g dg dg   ddtd  | g dg dgksBJ   ddtd  | g dg dgkspJ   dd	td
  | g dg dgksJ   ddtd  | g dg dgksJ   ddtd  | g dg dgksJ   ddtd  | g dg dgks*J tt fdd tt fdd   ddtd  | g dg dgks~J   ddtd  | g dg dgksJ   ddtd  | g dg dgksJ   ddtd  | g dg dgksJ tt fd d tt fd!d   dd	td  | g dg d"gksbJ   ddtd  | g dg d#gksJ   ddtd  | g dg d$gksJ   ddtd  | g d%g d$gksJ   ddtd  | g d&g d$gks"J   ddtd  | g d&g d$gksRJ   ddtd  | g d$g d$gksJ   ddtd  | g d'g d$gksJ d(S ))zTest setitem for DDM, etc.r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r      )r   r   rv   rn   	   )r   r   rw   rm   
   )r   rx   rw   rl      )ry   rx   rw   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+      )r   r   r      )r   r   r      )r   r   r      )ry   r   rw   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+   )r   r   r   )r   r   r   r   r   r   )r   r   rw   )r   r   r   r   r   r   N)r|   r   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  | g dg dg dg}|j td d d d f  |ks<J |j tdd d d f  | g dg dgksnJ |j tdd dd f  | ddgddggksJ |j tdd d d	f  | d
dgddggksJ |j tdd d d	df  | d
gdggksJ |j td d d d df  | ddgd
dgddggks@J |j td d dd d f  | g dg dgksvJ |j td d dd d df  | ddgddggksJ |j td d dd d df  | ddgddggksJ |j td d dd d df  | ddgddggksJ |j td d dd d df  | ddgddggksVJ |j td d d d d	f  | g dg dg dgksJ |j td d d	d d f  | g dg dg dgksJ d S )Nr   r   r   r   r   r   r   rv   rw   r   r   r   rv   rw   rn   r   r   r   r   rm   )r   r   r   )r   r   r   )rw   rv   r   )Zextract_slice_slicer   r:   r%   r%   r)   test_XXM_extract_slice  s    "2222<68888<r   c                    s  | g dg dg dg   g dg d ks6J   ddgddg| ddgd	d
ggksbJ   ddgddg| ddgdd	ggksJ   ddgddg| ddgdd
ggksJ   ddgdg| dgdggksJ   ddgg | dggdtks
J   g g d| dggdtks4J tt fdd tt fdd tt fdd tt fdd | g dg dg dg}| ddgddg| ddgddggksJ d S )Nr   r   r   r   r   r   r   r   rv   rw   r   r   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   )r   zerosr   r   rs   )r   Br%   rF   r)   test_XXM_extract  s    ,,,&**r   c                  C   s  t g dg dg dgdt} t| dks.J t|  dksBJ t|  dksVJ t| dksfJ t|  dkszJ t|  d	ksJ t td
tdddtdiddt}t|dksJ t| dksJ t| dksJ t|dksJ tdkr6t| dksJ t| dksbJ n,t| dksLJ t| dksbJ tdkrt|  dksJ t| dksJ t|  dksJ t| dksJ d S )Nr   r   r   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   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   strr9   rJ   reprr   rE   )r:   r   r%   r%   r)   test_XXM_str  st    



(

















r   c                    s   t | dgg g dg d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sJ tt fdd d S )Nr   r   r   r   r   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   r   r   )r   r(   Zlol_ZZr%   r   r)   test_XXM_from_list  s    ,2r   c                 C   sP   g dg dg}| |  tdtdtdgtdtdtdggksLJ d S Nr   r   r   r   r   r   r   )Zto_listr   r   r(   r%   r%   r)   test_XXM_to_list  s    r   c                 C   sL   g dg dg}| |  tdtdtdtdtdtdgksHJ d S r   )Zto_list_flatr   r   r%   r%   r)   test_XXM_to_list_flat#  s    r   c                    sv   t | dgg tdtdtdtdtdtdg dt| g dg d	gks^J tt fd
d d S )Nr   r   r   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   r   r   r   r%   r   r)   test_XXM_from_list_flat)  s    (&r   c                 C   sR   | g dg dg dg}t dt dt dg}d}| |||jffksNJ d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r<   )r   Z
to_flat_nzr7   )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}| g dg dg d	g} |t|ksbJ tt fd
d d S )Nr   r   r   r   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   r   r   )r   dataresultr%   r   r)   test_XXM_from_flat_nz9  s    r   c                 C   sP   t dt ddt dt dt ddd}| g dg d	g |ksLJ d S )
Nr   r   r    r   r   r   r   r   r   r   r   )r   Zto_dodr   r/   r%   r%   r)   test_XXM_to_dodD  s    ,r   c                 C   sf   t | dgg}tdtddtdtdtddd}||d	t| g d
g dgksbJ d S )Nr   r   r   r    r   r   r   r   r#   r   r   )r   r   Zfrom_dodr   r   r/   r%   r%   r)   test_XXM_from_dodJ  s    ,r   c                 C   sH   t dt dt dt dt dd}| g dg dg |ksDJ d S )Nr   r   r   r   r   r    r   r   r   r   r   r   r   r   )r   Zto_dokr   r%   r%   r)   test_XXM_to_dokQ  s    r   c                 C   s^   t | dgg}tdtdtdtdtdd}||dt| g dg d	gksZJ d S )
Nr   r   r   r   r   r   r#   r   r   )r   r   Zfrom_dokr   r%   r%   r)   test_XXM_from_dokX  s
    r   c                 C   sJ   t dt dt dt dt dg}t| g dg dg |ksFJ d S )Nr   r   r   r   r   r   )r   sortedZiter_values)r   valuesr%   r%   r)   test_XXM_iter_values`  s    "r   c                 C   s^   dt dfdt dfdt dfdt dfdt d	fg}t| g d
g dg |ksZJ d S )Nr   r   r    r   r   r   r   r   r   r   r   )r   r   Z
iter_items)r   itemsr%   r%   r)   test_XXM_iter_itemsf  s    r   c                 C   sN   t | dgg}tg dg dgdt}||| g dg dgksJJ d S )Nr   r   r   r#   )r   r   r   Zfrom_ddm)r   r   Zddmr%   r%   r)   test_XXM_from_ddmm  s    r   c                 C   s8   t | dgg}|dt| g dg dgks4J d S )Nr   r#   r   )r   r   r   r   r   r%   r%   r)   test_XXM_zerost  s    r   c                 C   s8   t | dgg}|dt| g dg dgks4J d S )Nr   r#   )r   r   r   )r   Zonesr   r   r%   r%   r)   test_XXM_onesz  s    r   c                 C   sh   t | dgg}|dt| g dg dg dgks:J |dt| ddgddgddggksdJ d S )Nr   r   r   r   r   r   r   r   r   r   r   )r   eyer   r   r%   r%   r)   test_XXM_eye  s    *r   c                 C   sB   t | dgg}|g dt| g dg dg dgks>J d S )Nr   r   r   )r   r   r   r   )r   Zdiagr   r   r%   r%   r)   test_XXM_diag  s    r   c                 C   s>   | g dg dg}|  | ddgddgddggks:J d S )	Nr   r   r   r   r   r   r   r   )	transposer   r%   r%   r)   test_XXM_transpose  s    r   c                 C   sR   | g dg dg}| g dg dg}| g dg dg}| ||ksNJ d S )Nr   r   r   r   r   rv   rx   rz   )addr   r:   r   Cr%   r%   r)   test_XXM_add  s    r   c                 C   sR   | g dg dg}| g dg dg}| g dg dg}| ||ksNJ d S )Nr   r   r   )subr   r%   r%   r)   test_XXM_sub  s    r   c                 C   sd   | g dg dg}t d}||| g dg dgks>J ||| g dg dgks`J d S )Nr   r   r   r   r   )r   mulZrmul)r   r:   br%   r%   r)   test_XXM_mul  s    "r   c                 C   sX   | g dg dg}| ddgddgddgg}| d	d
gddgg}| ||ksTJ d S )Nr   r   r   r   r   r   r   r         1   @   )matmulr   r%   r%   r)   test_XXM_matmul  s    r   c                 C   sR   | g dg dg}| g dg dg}| g dg dg}| ||ksNJ d S )Nr   r   )r   r   rw   )r      $   )Zmul_elementwiser   r%   r%   r)   test_XXM_mul_elementwise  s    r   c                 C   s<   | g dg dg}| g dg dg}|  |ks8J d S )Nr   r   )rn   rm   rl   )r}   i)neg)r   r:   r   r%   r%   r)   test_XXM_neg  s    r   c                 C   sT   | g dg dgt }| g dg dgt}|t|ks>J |t |ksPJ d S )Nr   r   )r   r   rG   r   r:   r   r%   r%   r)   test_XXM_convert_to  s    r   c                 C   sT   | g dg dg dg dg dg dg}|  ddgdgd	d
gdggksPJ d S )N)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   )Zsccr   r%   r%   r)   test_XXM_scc  s    r   c                 C   sz   | g dg dg}| ddgddgg}| g dg dg}| g d	g d
g}| ||ksbJ | |||ksvJ d S )Nr   r   r   rv   rw   rx   )r   r   r   r   rv   )r   r   r   rw   rx   )
r   r   r   r   rv   r   r   r   r   rv   )
r   r   r   rw   rx   r   r   r   rw   rx   )Zhstackr   r:   r   r   ABCr%   r%   r)   test_XXM_hstack  s    r   c                 C   s   | g dg dg}| g dg}| g dg dg dg}| g dg dg dg dg dg dg}| ||kszJ | |||ksJ d S )Nr   r   r   )Zvstackr   r%   r%   r)   test_XXM_vstack  s    ,r   c                 C   sD   | g dg dg}| g dg dg}| dd t|ks@J d S )Nr   r   r   r   c                 S   s   d|  S )Nr   r%   )rS   r%   r%   r)   r*     r+   z$test_XXM_applyfunc.<locals>.<lambda>)Z	applyfuncr   r   r%   r%   r)   test_XXM_applyfunc  s    r   c                 C   sp   | g dg dg  du s J | g dg dg  du s@J | g   du sTJ | g g g  du slJ d S )Nr   )r   r   r   Tr   F)is_upperr   r%   r%   r)   test_XXM_is_upper  s      r   c                 C   sD   | g dg dg  du s J | g dg dg  du s@J d S )Nr   )r   r   r   Tr   r   F)Zis_lowerr   r%   r%   r)   test_XXM_is_lower  s     r   c                 C   sD   | g dg dg  du s J | g dg dg  du s@J d S )Nr   r   r   r   Tr   r   F)is_diagonalr   r%   r%   r)   test_XXM_is_diagonal   s     r   c                 C   s(   | g dg dg  ddgks$J d S )Nr   r   r   r   )Zdiagonalr   r%   r%   r)   test_XXM_diagonal  s    r   c                 C   sD   | g dg dg  du s J | g dg dg  du s@J d S )Nr   Tr   F)Zis_zero_matrixr   r%   r%   r)   test_XXM_is_zero_matrix  s     r   c                 C   sP   | g dg dg dg  dks&J | g dg dg dg  dksLJ d S )Nr   r   r   r   r   rv   rx   rl   )detr   r%   r%   r)   test_XXM_det_ZZ  s    &r   c                 C   s.   | ddgddgg}|  tddks*J d S )Nr   r#   r   r   r   r   rn   rx   )r   r   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s8J ||| d	d
gd
d	ggksZJ | ddgddgg tt fdd | g dg d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>)r   r#   r   )r  r  r   c                      s      S rC   r  r%   )dM4r%   r)   r*   (  r+   )r  r   r   r   r
   )r   r   dM2r%   )r  r  r)   test_XXM_inv_QQ  s    "r	  c                    s0   | g dg dg dg t t fdd d S )Nr   r   r   c                      s      S rC   r  r%   r   r%   r)   r*   0  r+   z!test_XXM_inv_ZZ.<locals>.<lambda>r   r	   r   r%   r
  r)   test_XXM_inv_ZZ+  s    r  c                 C   s2   | g dg dg dg}|  g dks.J d S )Nr   r   r   )r   iir   )charpolyr   r%   r%   r)   test_XXM_charpoly_ZZ3  s    r  c                 C   s@   | ddgddgg}|  tddtddtddgks<J d S )	Nr   r#   r   r   r   irx   rn   )r  r   r   r%   r%   r)   test_XXM_charpoly_QQ9  s    r  c                    sL   | g dg dg dg | g dg dg dgt t fdd d S )	Nr   r   r   r   r   r   c                      s
     S rC   lu_solver%   r   r  r%   r)   r*   C  r+   z&test_XXM_lu_solve_ZZ.<locals>.<lambda>r  r   r%   r  r)   test_XXM_lu_solve_ZZ?  s    r  c                    s   | g dg dg dg}| g dg dg dg}| g dg dg d	g}| ||  krl| ksrn J | g dg dg | d
dgdd
gddggtt fdd d S )Nr   r   r   r   r   r   )rm   r   )r}   r   r   )r  )ry   r   rm   r   )r   r  r   r   r   c                      s
     S rC   r  r%   r  ZdM5r%   r)   r*   O  r+   z&test_XXM_lu_solve_QQ.<locals>.<lambda>)r  r  r   r   )r   r   r  r  r%   r  r)   test_XXM_lu_solve_QQF  s    $r  c                 C   s>   | g dg dg dg}|  | g dgdgfks:J d S )Nr   r   r   )r   rm   r   r   )Z	nullspacer   r%   r%   r)   test_XXM_nullspace_QQR  s    r  c                 C   sv   | g dg dg}| g dg dg}| ddgddgg}|  |ksLJ | ||fks`J |||ksrJ d S )Nr   )r   r   r  )rn   r   r   r   r   r   )ZlllZlll_transformr   )r   r   ZM_lllr   r%   r%   r)   test_XXM_lll[  s    r  c                 C   sh   t dt dgt dt dgg}| |}| \}}|||ksFJ | |jsZJ |jsdJ d S )Nr   rm   rl   r   r   qrr   r   r   r   r   r(   r:   QRr%   r%   r)   test_XXM_qr_mixed_signse  s     r  c                 C   sZ   dd t dD }| |}| \}}|||ks8J | |jsLJ |jsVJ d S )Nc                    s"   g | ]  fd dt dD qS )c                    s   g | ]}t  | qS r%   )r   ).0rr   rq   r%   r)   
<listcomp>q  r+   z7test_XXM_qr_large_matrix.<locals>.<listcomp>.<listcomp>rx   )range)r   r%   r!  r)   r"  q  r+   z,test_XXM_qr_large_matrix.<locals>.<listcomp>rx   )r#  r  r   r   r   r   r  r%   r%   r)   test_XXM_qr_large_matrixo  s    r$  c                 C   s~   t | dgg}|dt}| \}}||ks4J ||ks@J | |jsTJ |js^J |jdkslJ |jdkszJ d S )Nr   r   r   )	r   r   r   r  r   r   r   r   r7   r   r   r:   r  r  r%   r%   r)   test_XXM_qr_identity_matrixy  s    
r&  c                 C   sh   t dt dgt dt dgg}| |}| \}}|||ksFJ | |jsZJ |jsdJ d S Nr   r   r   r  r  r%   r%   r)   test_XXM_qr_square_matrix  s     r(  c                 C   sh   t dt dgt dt dgg}| |}| \}}|||ksFJ | |jsZJ |jsdJ d S )Nr   r   r   r  r  r%   r%   r)   $test_XXM_qr_matrix_with_zero_columns  s     r)  c                 C   sh   t dt dgt dt dgg}| |}| \}}|||ksFJ | |jsZJ |jsdJ d S )Nr   r   r   r  r  r%   r%   r)   &test_XXM_qr_linearly_dependent_columns  s     r*  c                 C   s^   t dt dgt dt dgg}| |}tt |  W d    n1 sP0    Y  d S r'  )r   pytestr   r	   r  )r   r(   r:   r%   r%   r)   test_XXM_qr_non_field  s     r,  c                 C   sh   t dt dgt dt dgg}| |}| \}}|||ksFJ | |jsZJ |jsdJ d S r'  r  r  r%   r%   r)   test_XXM_qr_field  s     r-  c                 C   sv   t dt dgt dt dgt dt dgg}| |}| \}}|||ksTJ | |jshJ |jsrJ d S Nr   r   r   r   r   r   r  r  r%   r%   r)   test_XXM_qr_tall_matrix  s    .r/  c                 C   st   t dt dt dgt dt dt dgg}| |}| \}}|||ksRJ | |jsfJ |jspJ d S r.  r  r  r%   r%   r)   test_XXM_qr_wide_matrix  s    ,r0  c                 C   s|   t | dgg}|dt}| \}}||j|jks>J | |jsRJ |js\J |jdksjJ |jdksxJ d S )Nr   r   	r   r   r   r  r   r7   r   r   r   r%  r%   r%   r)   test_XXM_qr_empty_matrix_0x0  s    
r2  c                 C   s|   t | dgg}|dt}| \}}||j|jks>J | |jsRJ |js\J |jdksjJ |jdksxJ d S )Nr   r!   r   r1  r%  r%   r%   r)   test_XXM_qr_empty_matrix_2x0  s    
r3  c                 C   s|   t | dgg}|dt}| \}}||j|jks>J | |jsRJ |js\J |jdksjJ |jdksxJ d S )Nr   r    r   r1  r%  r%   r%   r)   test_XXM_qr_empty_matrix_0x2  s    
r4  c                 C   s0  | ddgddgg}|  \}}}}|t}|t}|t}|t}	|t}
|j|jksfJ |j|jksvJ |j|jksJ |j|jksJ || ddgddggksJ || ddgddggksJ || ddgddggksJ || ddgddggksJ ||	 |
||ks,J d S )Nr   r   r   r   r   rm   )ZfflurG   r   r7   r   r  )r   r:   PLDUZA_fieldZP_fieldZL_fieldZD_fieldZU_fieldr%   r%   r)   test_XXM_fflu  s     




r9  )nZ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   r+  r;   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(  r)  r*  r,  r-  r/  r0  r2  r3  r4  r9  r%   r%   r%   r)   <module>   s.  [6,*




B

6






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

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