o
    GZhRt                     @   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sJ |jdksJ |jt ksJ |j	dksJ  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sJ n'td
kr|	j |ksJ |	j|ksJ n|	j|ksJ |	j |ksJ  | dt j	dksJ  |dt j	dks%J  |dt j	dks1J tt fdd tt fdd tt fdd q|D ]  dt }|jdksbJ |jdksjJ |jt ksrJ |j	dkszJ t 
|d d du sJ tdt j|ksJ  |dt j	dksJ  |dt j	dksJ  |dt j	dksJ tt fdd tt fdd tt fdd qRt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                          dt S Nr   r   r    XDMlolr&   R/var/www/auris/lib/python3.10/site-packages/sympy/polys/matrices/tests/test_xxm.py<lambda>c       z'test_XXM_constructors.<locals>.<lambda>c                      r"   Nr   r%   r&   )r(   lol_badr&   r*   r+   d   r,   c                      r"   r-   r%   r&   r(   dodr&   r*   r+   e   r,   c                      r"   r#   r%   r&   r/   r&   r*   r+   u   r,   c                      r"   r-   r%   r&   r'   r&   r*   r+   v   r,   c                      r"   r-   r%   r&   )r(   dod_badr&   r*   r+   w   r,   c                         t  dtS r#   r   r   r&   r)   r&   r*   r+   y   r,   c                      r2   r-   r3   r&   )r.   r&   r*   r+   z   r,   c                      r2   r-   r3   r&   )r1   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(   r0   r1   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rtddgddggdt }tddgddggdt }|| || t|D ]2\}}t|D ])\}}||kr||kd	u sJ ||kd
u sJ q||kd
u sJ ||kd	u sJ qqt|D ]6\}}t|D ]-\}}||kr||kd	u sJ ||kd
u sJ q||kd
u sJ ||kd	u sJ qqt|D ]!\}}t|D ]\}}||kd
u s3J ||kd	u s<J q&qd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   r5   	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~   sR    & &


rD   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rPt| dt }|| |D ]'   |ks\J   |ksdJ tdkryt	t
 fdd	   |ksyJ qRtdkr|D ]`   |ksJ t ttd
tfD ]Kt trtst	t
 fdd	 q tr|} |ksJ  |ksJ qt	t
fdd	  |ksJ qqdS dS )z4Test to_ddm etc. for DDM, SDM, DFM and DomainMatrix.r   r   r   r   r   r>   r   c                            S Nto_dfmr&   r<   r&   r*   r+          ztest_to_XXM.<locals>.<lambda>r   c                      
     S rF   )
convert_tor&   )r<   Kr&   r*   r+         
 c                      rE   rF   rG   r&   )A_Kr&   r*   r+      rJ   N)r   r   r   r   r   r   r5   r;   to_sdmr   NotImplementedErrorZto_dfm_or_ddmrH   r   r   r   
isinstance_supports_domainrL   )	r)   r0   ZA_ddmZA_sdmZA_dm_dZA_dm_sZA_allZA_dfmZA_dfm_Kr&   )r<   rO   rM   r*   test_to_XXM   sB    &



rT   c                     s
  t d\} }tdv rg }i }tttdt|  t| |f g}n/tdkrGddl}ttg}t|jt|jtddi}t|  t| |f t| |t	g}nJ dt |D ] t
 d	u sZJ |  durkt
 |  kskJ qO|D ] t
 du syJ tt fd
d qndS )z(Test which domains are supported by DFM.zx, y)pythongmpyr   r   r   NFzUnknown GROUND_TYPES: %sTc                      s
   t  S rF   )r   _get_flint_funcr&   r8   r&   r*   r+     rN   z"test_DFM_domains.<locals>.<lambda>)r   r   r   r   r   r   Zfmpz_matZfmpq_matZ
frac_fieldr   r   rS   rW   r   rQ   )xy	supportedZflint_funcsZnot_supportedr   r&   rX   r*   test_DFM_domains   s6    

r\   c                 C   sV   t | |}|dkr| S |dkr| S |dkr%tdkr!td | S J d| )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 %s)r   r;   rP   r   r   rH   )r)   typrM   r<   r&   r&   r*   _DM
  s   
r^   c                 C      t | |tS )z'Make a DM of type typ over ZZ from lol.)r^   r   r)   r]   r&   r&   r*   _DMZ     ra   c                 C   r_   )z'Make a DM of type typ over QQ from lol.)r^   r   r`   r&   r&   r*   _DMQ  rb   rc   c                 C      t | d|S )zMake a DDM over K from lol.r   r^   r)   rM   r&   r&   r*   DM_ddm$  rb   rg   c                 C   rd   )zMake a SDM over K from lol.r   re   rf   r&   r&   r*   DM_sdm)  rb   rh   c                 C   rd   )zMake a DFM over K from lol.r   re   rf   r&   r&   r*   DM_dfm.  rb   ri   c                 C   
   t | dS zMake a DDM from lol.r   ra   r4   r&   r&   r*   DMZ_ddm3     
rm   c                 C   rj   zMake a SDM from lol.r   rl   r4   r&   r&   r*   DMZ_sdm8  rn   rp   c                 C   rj   zMake a DFM from lol.r   rl   r4   r&   r&   r*   DMZ_dfm=  rn   rr   c                 C   rj   rk   rc   r4   r&   r&   r*   DMQ_ddmB  rn   rt   c                 C   rj   ro   rs   r4   r&   r&   r*   DMQ_sdmG  rn   ru   c                 C   rj   rq   rs   r4   r&   r&   r*   DMQ_dfmL  rn   rv   r   c                    s   ddgddgg}| |  j \}}g d}|D ];|D ]6d  kr'|k rFn nd  kr3|k rFn n t|  ksEJ qtt fdd qqdS )	zTest getitem for DDM, etc.r   r   r   )r   r   r   rx   c                      s     S rF   )getitemr&   r<   ijr&   r*   r+   e  r,   z"test_XDM_getitem.<locals>.<lambda>N)r9   rz   r   r   
IndexError)r   r)   rA   r@   indicesr&   r{   r*   test_XDM_getitemV  s   
0"r   c                    s  | g dg dg   ddtd  | g dg dgks!J   ddtd  | g dg dgks8J   dd	td
  | g dg dgksOJ   ddtd  | g dg dgksfJ   ddtd  | g dg dgks}J   ddtd  | g dg dgksJ tt fdd tt fdd   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sEJ   ddtd  | g dg d$gks]J   ddtd  | g d%g d$gksuJ   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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   r   ry   	   )r   r   r   rx   
   )r   r   r   rw      )r   r   r   c                           ddtdS )Nr   r      setitemr   r&   rI   r&   r*   r+         z"test_XDM_setitem.<locals>.<lambda>c                      r   )Nr      r   r&   rI   r&   r*   r+     r      )r   r   r      )r   r   r      )r   r   r      )r   r   r   c                      r   )Nr   r      r   r&   rI   r&   r*   r+     r   c                      r   )Nrw   r      r   r&   rI   r&   r*   r+     r   )r   r   r   )r   r   r   r   r   r   )r   r   r   )r   r   r   r   r   r   N)r   r   r   r~   r   r&   rI   r*   test_XDM_setitemh  sR   "r   c                   @   s   e Zd Zdd ZdS )_Slicedc                 C   s   |S rF   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s7J |j tdd dd f  | ddgddggksPJ |j tdd d d	f  | d
dgddggksiJ |j tdd d d	df  | d
gdggksJ |j td d d d df  | ddgd
dgddggksJ |j td d dd d f  | g dg d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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s&J |j td d d d d	f  | g dg dg dgksDJ |j td d d	d d f  | g dg dg dgksbJ d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   ry   r   r   r   r   rx   )r   r   r   )r   r   r   )r   r   r   )Zextract_slice_slicer   r<   r&   r&   r*   test_XXM_extract_slice  s   "2220:46688<@r   c                    s  | g dg dg dg   g dg d ksJ   ddgddg| ddgd	d
ggks1J   ddgddg| ddgdd	ggksGJ   ddgddg| ddgdd
ggks]J   ddgdg| dgdggkspJ   ddgg | dggdtksJ   g g d| dggdtksJ 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   r   r   r   r   r   r!   )r   r   c                           ddgddgS )Nr   r   r   r   extractr&   rI   r&   r*   r+         z"test_XXM_extract.<locals>.<lambda>c                      r   )Nr   r   r   r   r   r&   rI   r&   r*   r+     r   c                      s     ddgddgS )Nr   r   r   r   r&   rI   r&   r*   r+     r   c                      r   )Nr   r   r   r   r   r&   rI   r&   r*   r+     r   r   )r   zerosr   r   r~   )r   Br&   rI   r*   test_XXM_extract  s   ,,,&((0r   c                  C   s  t g dg dg dgdt} t| dksJ t|  dks!J t|  dks+J t| dks3J t|  dks=J t|  d	ksGJ t td
tdddtdiddt}t|dkscJ t| dksmJ t| dkswJ t|dksJ tdkrt| dksJ t| dksJ nt| dksJ t| dksJ tdkrt|  dksJ t| dksJ t|  dksJ t| dksJ d S 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}}rV   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   strr;   rP   reprr   rH   )r<   r   r&   r&   r*   test_XXM_str  sx   



(










	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sLJ tt fdd d S )Nr   r   r   r   r   r   r   r   r   r   r   r$   c                           dtS r-   )	from_listr   r&   TZ
lol_ZZ_badr&   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s&J 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s$J 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                      r   )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s'J d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r>   )r   Z
to_flat_nzr9   )r   Melementsr   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s1J 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   r   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s&J d S )
Nr   r   r    r   r   r   r   r   r   r   r   )r   Zto_dodr   r0   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s1J d S )Nr   r   r   r    r   r   r   r   r$   r   r   )r   r   Zfrom_dodr   r   r0   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s"J 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s-J 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s#J d S )Nr   r   r   r   r   r   )r   sorted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s-J d S )Nr   r   r    r   r   r   r   r   r   r   r   )r   r   
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s%J 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   8   t | dgg}|dt| g dg dgksJ d S )Nr   r$   r   )r   r   r   r   r   r&   r&   r*   test_XXM_zerost     (r   c                 C   r   )Nr   r$   )r   r   r   )r   Zonesr   r   r&   r&   r*   test_XXM_onesz  r   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s2J 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   2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   R   | g dg dg}| g dg dg}| g dg dg}| ||ks'J d S )Nr   r   r   r   r   r   r   r   )addr   r<   r   Cr&   r&   r*   test_XXM_add     r   c                 C   sR   | g dg dg}| g dg dg}| g dg dg}| ||ks'J d S )Nr   r   r   )subr   r&   r&   r*   test_XXM_sub  r   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s0J 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s*J d S )Nr   r   r   r   r   r   r   r         1   @   )matmulr   r&   r&   r*   test_XXM_matmul  s   r   c                 C   r   )Nr   r   )r   r   r   )r      $   )Zmul_elementwiser   r&   r&   r*   test_XXM_mul_elementwise  r   r   c                 C   s<   | g dg dg}| g dg dg}|  |ksJ d S )Nr   r   )ry   rx   rw   )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s(J d S )Nr   r   )r   r   rL   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s(J 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s1J | |||ks;J d S )Nr   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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s=J | |||ksGJ 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&   )rY   r&   r&   r*   r+     rJ   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 s*J | g g g  du s6J d S )Nr   )r   r   r   Tr   F)is_upperr   r&   r&   r*   test_XXM_is_upper  s     r	  c                 C   D   | 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      $r  c                 C   r
  )Nr   r   r   r   Tr   r   F)is_diagonalr   r&   r&   r*   test_XXM_is_diagonal   r  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  r  r  c                 C   sP   | g dg dg dg  dksJ | g dg dg dg  dks&J d S )Nr   r   r   r   r   r   r   rw   )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   ry   r   )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sJ ||| d	d
gd
d	ggks-J | 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                      rE   rF   invr&   )dM3r&   r*   r+   %  rJ   z!test_XXM_inv_QQ.<locals>.<lambda>)r   r$   r  )r  r  r   c                      rE   rF   r  r&   )dM4r&   r*   r+   (  rJ   )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                      rE   rF   r  r&   r  r&   r*   r+   0  rJ   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   ir   ry   )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                      rK   rF   lu_solver&   r  r!  r&   r*   r+   C  rN   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r7| ks:J  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   )rx   r   )r   r   r   )r-  )r   r   rx   r   )r   r.  r   r   r   c                      rK   rF   r)  r&   r   ZdM5r&   r*   r+   O  rN   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   &r0  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   rx   r   r   )Z	nullspacer  r&   r&   r*   test_XXM_nullspace_QQR  s   $r1  c                 C   sv   | g dg dg}| g dg dg}| ddgddgg}|  |ks&J | ||fks0J |||ks9J d S )Nr   )r   r   r  )ry   r   r   r   r   r   )ZlllZlll_transformr   )r   r   ZM_lllr   r&   r&   r*   test_XXM_lll[  s   r2  c                 C   sh   t dt dgt dt dgg}| |}| \}}|||ks#J | |js-J |js2J d S )Nr   rx   rw   r   r   qrr   r   r  r  r   r)   r<   QRr&   r&   r*   test_XXM_qr_mixed_signse      r8  c                 C   sZ   dd t dD }| |}| \}}|||ksJ | |js&J |js+J d S )Nc                    s"   g | ]  fd dt dD qS )c                    s   g | ]}t  | qS r&   )r   ).0r}   r|   r&   r*   
<listcomp>q  s    z7test_XXM_qr_large_matrix.<locals>.<listcomp>.<listcomp>r   )range)r:  r&   r;  r*   r<  q  s   " z,test_XXM_qr_large_matrix.<locals>.<listcomp>r   )r=  r4  r   r   r  r  r5  r&   r&   r*   test_XXM_qr_large_matrixo  s   r>  c                 C   s~   t | dgg}|dt}| \}}||ksJ ||ks J | |js*J |js/J |jdks6J |jdks=J d S )Nr   r   r   )	r   r   r   r4  r   r   r  r  r9   r   r   r<   r6  r7  r&   r&   r*   test_XXM_qr_identity_matrixy  s   
r@  c                 C   h   t dt dgt dt dgg}| |}| \}}|||ks#J | |js-J |js2J d S Nr   r   r   r3  r5  r&   r&   r*   test_XXM_qr_square_matrix  r9  rC  c                 C   sh   t dt dgt dt dgg}| |}| \}}|||ks#J | |js-J |js2J d S )Nr   r   r   r3  r5  r&   r&   r*   $test_XXM_qr_matrix_with_zero_columns  r9  rD  c                 C   sh   t dt dgt dt dgg}| |}| \}}|||ks#J | |js-J |js2J d S )Nr   r   r   r3  r5  r&   r&   r*   &test_XXM_qr_linearly_dependent_columns  r9  rE  c                 C   s`   t dt dgt dt dgg}| |}tt |  W d    d S 1 s)w   Y  d S rB  )r   pytestr   r	   r4  )r   r)   r<   r&   r&   r*   test_XXM_qr_non_field  s
    
"rG  c                 C   rA  rB  r3  r5  r&   r&   r*   test_XXM_qr_field  r9  rH  c                 C   sv   t dt dgt dt dgt dt dgg}| |}| \}}|||ks*J | |js4J |js9J d S Nr   r   r   r   r   r   r3  r5  r&   r&   r*   test_XXM_qr_tall_matrix  s   .rJ  c                 C   st   t dt dt dgt dt dt dgg}| |}| \}}|||ks)J | |js3J |js8J d S rI  r3  r5  r&   r&   r*   test_XXM_qr_wide_matrix  s   ,rK  c                 C   s|   t | dgg}|dt}| \}}||j|jksJ | |js)J |js.J |jdks5J |jdks<J d S )Nr   r   	r   r   r   r4  r   r9   r   r  r  r?  r&   r&   r*   test_XXM_qr_empty_matrix_0x0     
rM  c                 C   s|   t | dgg}|dt}| \}}||j|jksJ | |js)J |js.J |jdks5J |jdks<J d S )Nr   r!   r   rL  r?  r&   r&   r*   test_XXM_qr_empty_matrix_2x0  rN  rO  c                 C   s|   t | dgg}|dt}| \}}||j|jksJ | |js)J |js.J |jdks5J |jdks<J d S )Nr   r    r   rL  r?  r&   r&   r*   test_XXM_qr_empty_matrix_0x2  rN  rP  c                 C   s,  | ddgddgg}|  \}}}}|t}|t}|t}|t}	|t}
|j|jks3J |j|jks;J |j|jksCJ |j|jksKJ || ddgddggksYJ || ddgddggksgJ || ddgddggksuJ || ddgddggksJ ||	 |
||ksJ d S )Nr   r   r   r   r   rx   )ZfflurL   r   r9   r   r  )r   r<   PLDUZA_fieldZP_fieldZL_fieldZD_fieldZU_fieldr&   r&   r*   test_XXM_fflu  s    




&rU  )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   rF  r=   rD   rT   r\   r^   ra   rc   rg   rh   ri   rm   rp   rr   rt   ru   rv   ZDM_allZDMZ_allZDMQ_allmarkZparametrizer   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  r1  r2  r8  r>  r@  rC  rD  rE  rG  rH  rJ  rK  rM  rO  rP  rU  r&   r&   r&   r*   <module>   s0  [6,*




B

6







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

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