a
    kh^!                     @   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sLJ |j|	|	fks^J |j|	|	fkspJ |j|	|
fksJ |jsJ |jsJ | \}}|| ||||ksJ |jsJ 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   R/var/www/auris/lib/python3.9/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sZJ |j|
|
fkslJ |j|
|
fks~J |	j|
|fksJ |jsJ |jsJ | \}}||||||	ksJ |	jsJ 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   s"   |  }t| ||||| d S r0   )r1   rM   fflunamer9   rI   rJ   rK   rL   rB   rB   rC   test_dm_dense_fflu   s    rQ   c                 C   s"   |  }t| ||||| d S r0   )Z	to_sparserM   rN   rO   rB   rB   rC   test_dm_sparse_fflu   s    rR   c                 C   s"   |  }t| ||||| d S r0   )Zto_ddmrM   rN   rO   rB   rB   rC   test_ddm_fflu   s    rS   c                 C   s"   |  }t| ||||| d S r0   )Zto_sdmrM   rN   rO   rB   rB   rC   test_sdm_fflu   s    rT   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   rN   rO   rB   rB   rC   test_dfm_fflu  s
    

rW   c                  C   sX   t g dt} |  \}}}}|jdks*J |jdks8J |jdksFJ |jdksTJ d S )Nr   )r   r   rN   r2   r9   r:   r;   r<   r=   rB   rB   rC   test_fflu_empty_matrix  s    rY   c                  C   s   t tdtdgtdtdggdt} |  \}}}}|jdksFJ |jdksTJ |jdksbJ |jdkspJ |jszJ |jsJ |jsJ | \}}|| 	||||ksJ d S )Nr   r   r	   r
   r   )
r   r   rN   r2   r3   r8   r4   r5   r6   r7   )r9   r:   r;   r<   r=   r@   rA   rB   rB   rC   test_fflu_properties  s    (


rZ   c                  C   s   t tdtdgtdtdggdt} |  \}}}}|jdksFJ |jdksTJ |jdksbJ |jdkspJ |dddksJ d S )Nr   r   r
   r   r   )r   r   rN   r2   Zgetitem_sympyrX   rB   rB   rC   test_fflu_rank_deficient&  s    (r[   )Zsympy.polys.matricesr   r   Zsympy.polys.domainsr   r   Zsympyr   rU   ZeyeZFFLU_EXAMPLESrD   rG   rM   markZparametrizerQ   rR   rS   rT   rW   rY   rZ   r[   rB   rB   rB   rC   <module>   sD  




















     
  <




	