o
    oĒhā/  ć                   @   s  d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ edd	d	Zed
d	dZedd	d	ZedddZedddZedd d Zedd	dZedd	dZdd Z dd Z!dd Z"e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/d0 Z.ed1d2 Z/d3d4 Z0d5d6 Z1d7d8 Z2d9d: Z3d;d< Z4d=d> Z5d?S )@é    )ŚQŚask)ŚSymbol)Ś
DiagMatrixŚDiagonalMatrix)ŚMatrix)	ŚMatrixSymbolŚIdentityŚ
ZeroMatrixŚ	OneMatrixŚTraceŚMatrixSliceŚDeterminantŚBlockMatrixŚBlockDiagMatrix)ŚLofLU)ŚXFAILŚXé   ŚYé   ŚZŚA1x1é   ŚB1x1ŚC0x0ŚV1ŚV2c                   C   s@   t t t”s	J t t t”rJ t t ttj ”sJ d S ©N)r   r   Śsquarer   r   ŚT© r!   r!   śy/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/assumptions/tests/test_matrices.pyŚtest_square   s   r#   c                   C   s  t t t”t t”sJ t t t”du sJ t t tt ”t t”du s)J t t tt ”t t”d u s:J t t tt ”t t”t t”@ du sPJ t t tj”d u s\J t t tj”t t”du slJ t t tj”du sxJ t t td”du sJ t t t	dd”du sJ t t t
dd”du s”J t t t
dd”du sÆJ t t t”t t”t t”@ sĮJ d S )NFTr   r   )r   r   Ś
invertibler   r   r   r    ŚIr	   r
   r   Śfullrankr   r!   r!   r!   r"   Śtest_invertible   s   "", (r'   c                   C   sX   t t t”d u sJ t t t”t t”du sJ t t t”t t” du s*J d S )NFT)r   r   Śsingularr   r$   r!   r!   r!   r"   Śtest_singular'   s   $r)   c                   C   s"   t t t”t t”du sJ d S )NT)r   r   r$   r   r&   r!   r!   r!   r"   Śtest_invertible_fullrank,   s   "r*   c               
   C   sF  t t ttdg”dksJ t t ttddg”dks!J tg d¢g d¢g} tg d¢g d¢g}t t tt dd”|jg| t 	d”gg”dksPJ t t t|jt dd”gt 	d”| gg”dkskJ t t t| t 	d”gt dd”|jgg”dksJ t t tt 	d”| g|jt dd”gg”dks”J d S )	Nr   TF)r   r   r   )r   é   é   )r,   r   é   )r   r   r+   r   )
r   r   r$   r   r	   r
   r   Śonesr    Śeye©r   r   r!   r!   r"   Śtest_invertible_BlockMatrix1   s8    "žżžżžżžżr1   c                   C   st   t t ttdtd”dksJ t t ttddtd”dks%J t t ttdtdd”dks8J d S )Nr   r+   TF)r   r   r$   r   r	   r
   r   r!   r!   r!   r"   Śtest_invertible_BlockDiagMatrixM   s   $&*r2   c                   C   sT  t t t”t t”sJ t t tt ”t t”d u sJ t t tt ”t t”t t”@ du s4J t t tt ”t t”t t”@ du sJJ t t t”du sUJ t t ttj ”du scJ t t tjt t ”d u ssJ t t tjt t ”t t”du sJ t t td ”t t”du sJ t t t”du s£J t t tt ”du s°J t t tt ”du s½J t t t	jt	 ”du sĖJ t t t	jt	t
  ”du sŪJ t t t	jt	t
  t ”du sķJ t t ttdd”du süJ t t td”du s
J t t tdd”du sJ t t tdd”du s(J d S )NTFé
   ©r   r   ©r   r   r   )r   r   Ś	symmetricr   r   r   r    r   r   r   r   r   r	   r
   r   r!   r!   r!   r"   Śtest_symmetricS   s&   ",, (" $"r7   c                 C   sH  t | t| tsJ t | tj| tdu sJ t | tj| tdu s'J t | td | ts4J t | tdu s>J t | td u sHJ t | tt t” du sWJ t | tt t | t| t@ du slJ t | tddu sxJ t | t	dddu sJ t t t”| tsJ t | tt | t| t@ r¢J d S )NTr   Fr   )
r   r   r    r%   r   r   r$   r   r	   r
   )Ś	predicater!   r!   r"   Ś_test_orthogonal_unitaryh   s   *&r9   c                   C   s   t tj d S r   )r9   r   Ś
orthogonalr!   r!   r!   r"   Śtest_orthogonalv   s   r;   c                   C   s(   t tj tt t”t t”sJ d S r   )r9   r   Śunitaryr   r   r:   r!   r!   r!   r"   Śtest_unitaryy   s   
r=   c                   C   sB  t t t”t t”sJ t t td ”t t”sJ t t tj”t t”du s,J t t t”d u s7J t t t”d u sBJ t t tt ”t t”t t”@ du sXJ t t td”du seJ t t tdd”du ssJ t t t	dd”du sJ t t t	dd”du sJ t t 
t”t t” dksJ d S )Nr   Tr   Fr   )r   r   r&   r   r    r   r   r	   r
   r   r$   r!   r!   r!   r"   Śtest_fullrank}   s    ,$r>   c                   C   s  t t t”t t”sJ t t tj”t t”du sJ t t tj”t t”du s-J t t t”du s8J t t t”d u sCJ t t td ”t t”sRJ t t tt t ”t t”t t”@ du sjJ t t t”t t”swJ t t tjt t ”t t”t 	t”@ du sJ t t tjt t ”t t”r¢J t t t
d”du sÆJ t t tdd”du s½J t t tdd”du sĖJ t t tdd”du sŁJ t t tt ”t t”t t”@ du sļJ t t t ”t t”rżJ t t td ”t t”sJ d S )NTFr   r   )r   r   )r   r   Śpositive_definiter   r    r%   r   r   r:   r&   r	   r
   r   Śpositiver!   r!   r!   r"   Śtest_positive_definite   s:     ’’’’$’’$rA   c                   C   s  t t ttj td ”t t”t t”@ du sJ t t ttj ”t t”t t”@ du s2J t t td”du s?J t t tdd”du sMJ t t tdd”du s[J t t t	dd”du siJ t t t	dd”du swJ t t t	dd”du sJ t t t	dd”du sJ t t 
t”t t”s J t t td ”t t”sÆJ t t td ”t t”s¾J d S )Nr   Tr   r   F)r   r   Śupper_triangularr   r   r    r	   Ślower_triangularr
   r   Ś
triangularŚunit_triangularr!   r!   r!   r"   Śtest_triangular”   s(    ’’’’"rF   c                   C   s0  t t ttj td ”t t”t t”@ du sJ t t tdd”s'J t t tdd”du s5J t t tdd”du sCJ t t 	t”t 
t”@ t t”sUJ t t t”t 	t”t 
t”@ sgJ t t t”t t”stJ t t t”t t”sJ t t t”sJ t t t”sJ t t tt ”sJ t t tt ”s©J t t tjt ”sµJ t t tjtt  t ”sÅJ t t ttdd”du sŌJ t t tjtt  ”du säJ t t td ”t t”sóJ t t td”sžJ t t tt”s
J t t tt”sJ d S )Nr   Tr   r   Fr4   r5   )r   r   Śdiagonalr   r   r    r	   r
   r   rC   rB   r6   rD   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   Śtest_diagonal²   s0    ’’$$  rH   c                   C   s&   t t tt”t tt”sJ d S r   )r   r   Śrealr   r   r@   r!   r!   r!   r"   Śtest_non_atomsŹ   s   &rJ   c                  C   s   t ddd} t ddd}tt | | ”t | ”t |”@ du s"J tt | ”t | ”du s1J tt | | ”t | ”t |”@ du sGJ d S )Nr   r   r   T)r   r   r   rC   rD   r0   r!   r!   r"   Śtest_non_trivial_impliesĶ   s   ’’’’rK   c                  C   s,  t ddd} t| dd}t| dd}tt |”t | ”sJ tt |”t | ”s,J tt |”t | ”s9J tt |”t | ”sFJ tt |”t | ”sSJ tt |”t | ”r`J tt |”t | ”rmJ tt |”t | ”rzJ tt |”t | ”rJ tt |”t | ”rJ d S )Nr   r,   )r   r   )r   r   )	r   r   r   r   r6   r$   rG   r:   rB   )r   ŚBŚCr!   r!   r"   Śtest_MatrixSlice×   s   rN   c                  C   sL   t ddd} tt t| ”t | ”sJ tt t| ”t | ”s$J d S )Nr   r,   )r   r   r   r@   r   r?   r   ©r   r!   r!   r"   Śtest_det_trace_positiveē   s   "rP   c                  C   s  t ddd} t ddd}tt | ”t | ”sJ tt | ”t | ”r&J tt | ”t | ”s3J tt | d ”t | ”sBJ tt | d ”t | ”sQJ tt | | ”t | ”d u sbJ tt | | ”t | ”t |”@ svJ ddlm} tt || |”t | ”t |”@ sJ tt | | ”t | ”t |”@ s„J tt | j”t | ”s³J tt | j	”t | ”t 
| ”@ sĘJ tt t| ”t | ”sÕJ tt t| ”t | ”säJ tt | j	”t | ”rņJ td}tt ||  ”t | ”t |”@ sJ tt t| ”t | ”sJ tdd	d	d
}tt | | ”t | ”t 
| ”@ s7J tt | | ”t | ”d u sIJ d S )Nr   r,   r   r   r   )ŚHadamardProductŚalphaŚeT)ŚintegerŚnegative)r   r   r   Śreal_elementsŚinteger_elementsŚcomplex_elementsŚ#sympy.matrices.expressions.hadamardrQ   r    r%   r$   r   r   r   rI   r   )r   r   rQ   rR   rS   r!   r!   r"   Śtest_field_assumptionsģ   s2   "(’(&* *(rZ   c                  C   sŅ   t ddd} tt | d ”t | ”sJ tt | d ”t | ”s$J tt | d ”t | ”s3J tt t	d”s>J tt t
dd”sJJ tt tdd”sVJ ddlm} tt |d”sgJ d S )Nr   r,   r5   r   r   )ŚDFT)r   r   r   rI   rV   rT   rW   ŚcomplexrX   r	   r
   r   Ś"sympy.matrices.expressions.fourierr[   )r   r[   r!   r!   r"   Śtest_matrix_element_sets  s   r^   c                  C   s\   t ddd} tt | d d df ”t | ”sJ tt t| g| gg”t | ”s,J d S )Nr   r,   r   )r   r   r   rW   r   rO   r!   r!   r"   Ś&test_matrix_element_sets_slices_blocks  s
   &’r_   c                   C   s@   t t tt”t t”sJ t t tt”t t”sJ d S r   )r   r   rT   r   r   rW   r   r!   r!   r!   r"   Ś*test_matrix_element_sets_determinant_trace  s   "r`   N)6Śsympy.assumptions.askr   r   Śsympy.core.symbolr   Ś#sympy.matrices.expressions.diagonalr   r   Śsympy.matrices.denser   Śsympy.matrices.expressionsr   r	   r
   r   r   r   r   r   r   Ś)sympy.matrices.expressions.factorizationsr   Śsympy.testing.pytestr   r   r   r   r   r   r   r   r   r#   r'   r)   r*   r1   r2   r7   r9   r;   r=   r>   rA   rF   rH   rJ   rK   rN   rP   rZ   r^   r_   r`   r!   r!   r!   r"   Ś<module>   sN    ,

	