o
    GZh^!                     @   sR	  d dl mZmZ d dlmZmZ d dlmZ d dlZdeg dg dgeedd gd dggeedd gd	d
ggeedd gd d
ggeeg dg dgefded	dgddggeedd gd dggeedd gddggeed	d gd d
ggeed	dgd d
ggefdeddgdd	gddggeeg dg dg dgeeg dg dg dgeedd gd dggeeddgd dgd d ggefdeg dg dg dgeeg dg dg dgeeg dg dg dgeeg dg dg dgeeg dg dg dgefdeg dg dg dgeeg dg dg dgeeg dg dg dgeeg dg dg dgeeg dg dg dgefd eg eeg eeg eeg eeg efd!eg d"eeg d#eeg d#eeg d#eeg d"efd$eg g gd%ee	d&ee	d&ee	d&eeg g gd%efd'ed(dgd
d)ggeedd gd dggeed(d gd
dggeed(d gd dggeed(dgd dggefd*eddgd
d	ggeedd gd dggeedd gd
dggeedd gd dggeeddgd dggefd+eg dg d,g d-geeg dg dg dgeeg dg d.g d/geeg dg d.g d0geeg dg d,g d/gefd1eg dg d2g dgeeg dg dg dgeeg dg d2g d3geeg dg d4g d5geeg dg d4g d6gefd7eg d8g d4g d9geeg dg dg dgeeg d8g d:g d/geeg d8g d;g d<geeg d8g d:g d/gefd=eg dg d>g d?geeg dg dg dgeeg dg d@g dAgeeg dg dg dgeeg dg dg dgefdBedggeedggeedggeedggeedggefdCedDgdEggeedd gd dggeedDd gdEdDggeedDd gd dDggeedDgd ggefdFeddGgdGdHgdIdJggeeg dg dg dgeeg d8g dKg dLgeeg d8g dMg dNgeeddGgd dOgd d ggefdPed dQggeedggeedQggeedQggeed dQggefdReg dSg dTg dUg dVgeeg dWg dXg dYg dZgeeg d[g d\g d]g d^geeg d[g d_g d`g dageeg dSg dbg dcg dgefddeg deg dfg dggeeg dg dg dgeeg dhg d4g digeeg dhg djg dkgeeg dfg dlg dgefgZ
dmdn Zdodp Zdqdr Zejdse
dtdu Zejdse
dvdw Zejdse
dxdy Zejdse
dzd{ Zejdse
d|d} Zd~d Zdd Zdd ZdS )    )DomainMatrixDM)ZZQQ)MatrixNZzz_2x3)         )         r   r
   )r   r   Zzz_2x2r	   r   r   Zzz_3x2r   r   )r   r   r   )r   r   r   )r   r   r   )r	   r   r   )r   r   r   Zzz_3x3)      	   )r
   r   r   )r   r   r   )r   r   r   )r   r   r   Zzz_zeroZzz_emptyZzz_empty_0x2)r   r   r   r   Zzz_empty_2x0)r   r   r   r   Zzz_negativeZzz_mixed_signsZzz_upper_triangular)r   r
   r   )r   r   r   )r   r
   r   )r   r      )r   r   `   Zzz_lower_triangular)r   r	   r   )r
   r      )r   r	   r   )r   r   6   )r   r   r   Zzz_diagonal)r   r   r   )r   r   r
   )r   r   r   )r      r   )r   r      Zrank_deficient_3x3)r   r
   r   )r	   r   r   )r   r   r   )r	   r   r   Zzz_1x1Zzz_nx1_2rowsQ   r   Zzz_nx2_3rowsr   -      T   )r   R   r   )r   )   r"   )r   r!   r   )r   r   r"   r!   Zzz_1x2   Zzz_nx3_4rows)r       r   )   ;      )5   .   r   )?   0      )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r    r   r   r   )r%   P r   r   )r(   3 r.   r   )r*   r.   r.   r.   )r   r-   r   r   )r   r   Nr   )r   r   r   r.   )r   r-   r'   )r   r   r/   Zfflu_row_swap)r   r   r   )r	   r
   r   )r   r   r   )r	   r   r   )r   r   r   )r   r   r   )r   r   r	   )r   r	   r   c                 C   s   |   }|   }|   }|   }| j\}	}
|j|	|	fks&J |j|	|	fks/J |j|	|	fks8J |j|	|
fksAJ |jsFJ |jsKJ | \}}|| ||||kscJ |jshJ d S N)	Zto_fieldto_denseshapeis_loweris_diagonalinv_denmatmulrmulis_upper)APLDUZP_fieldZL_fieldZD_fieldZU_fieldmndid rB   S/var/www/auris/lib/python3.10/site-packages/sympy/polys/matrices/tests/test_fflu.py_check_fflu   s   


$rD   c                 C   s8   t | tr| S t | tr| |jS t|  | j| jS r0   )
isinstancer   r   Zto_DMdomainZto_listr2   )r9   ZansrB   rB   rC   _to_DM   s
   

rG   c                 C   s   | \}}}}	t ||}t ||}t ||}t |	|}	t ||}|j\}
}|j|
|
fks-J |j|
|
fks6J |j|
|
fks?J |	j|
|fksHJ |jsMJ |jsRJ | \}}||||||	ksjJ |	jsoJ d S r0   )rG   r2   r3   r4   r5   r6   r7   r8   )resultr9   P_ansL_ansD_ansU_ansr:   r;   r<   r=   r>   r?   r@   rA   rB   rB   rC   _check_fflu_result   s    







$rM   z#name, A, P_ans, L_ans, D_ans, U_ansc                 C   "   |  }t| ||||| d S r0   )r1   rM   fflunamer9   rI   rJ   rK   rL   rB   rB   rC   test_dm_dense_fflu      rR   c                 C   rN   r0   )Z	to_sparserM   rO   rP   rB   rB   rC   test_dm_sparse_fflu   rS   rT   c                 C   rN   r0   )Zto_ddmrM   rO   rP   rB   rB   rC   test_ddm_fflu   rS   rU   c                 C   rN   r0   )Zto_sdmrM   rO   rP   rB   rB   rC   test_sdm_fflu   rS   rV   c                 C   sL   t d |jttfvr|jjst d | }t|	 ||||| d S )NZflintzDomain not supported by DFM)
pytestZimportorskiprF   r   r   Zis_FFskipZto_dfmrM   rO   rP   rB   rB   rC   test_dfm_fflu  s
   

rY   c                  C   sX   t g dt} |  \}}}}|jdksJ |jdksJ |jdks#J |jdks*J d S )Nr   )r   r   rO   r2   r9   r:   r;   r<   r=   rB   rB   rC   test_fflu_empty_matrix  s   r[   c                  C   s   t tdtdgtdtdggdt} |  \}}}}|jdks#J |jdks*J |jdks1J |jdks8J |js=J |jsBJ |jsGJ | \}}|| 	||||ks_J d S )Nr   r   r	   r
   r   )
r   r   rO   r2   r3   r8   r4   r5   r6   r7   )r9   r:   r;   r<   r=   r@   rA   rB   rB   rC   test_fflu_properties  s   (


(r\   c                  C   s   t tdtdgtdtdggdt} |  \}}}}|jdks#J |jdks*J |jdks1J |jdks8J |dddksBJ d S )Nr   r   r
   r   r   )r   r   rO   r2   Zgetitem_sympyrZ   rB   rB   rC   test_fflu_rank_deficient&  s   (r]   )Zsympy.polys.matricesr   r   Zsympy.polys.domainsr   r   Zsympyr   rW   eyeZFFLU_EXAMPLESrD   rG   rM   markZparametrizerR   rT   rU   rV   rY   r[   r\   r]   rB   rB   rB   rC   <module>   sF   




















     
  <




	