o
    à8Va‚/  ã                   @   sˆ  d dl mZmZmZ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-d.„ Z,ed/d0„ ƒZ-d1d2„ Z.d3d4„ Z/d5d6„ Z0d7d8„ Z1d9d:„ Z2d;d<„ Z3d=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!   úG/usr/lib/python3/dist-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   Z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   Zonesr    Zeye©r   r   r!   r!   r"   Útest_invertible_BlockMatrix/   s8    "þýþýþýþýr.   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_BlockDiagMatrixK   s   $&*r/   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_symmetricQ   s&   ",, (" $"r4   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
   )Z	predicater!   r!   r"   Ú_test_orthogonal_unitaryf   s   *&r5   c                   C   s   t tjƒ d S r   )r5   r   Ú
orthogonalr!   r!   r!   r"   Útest_orthogonalt   s   r7   c                   C   s(   t tjƒ tt t¡t t¡ƒsJ ‚d S r   )r5   r   Zunitaryr   r   r6   r!   r!   r!   r"   Útest_unitaryw   s   
r8   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 sJ ‚t t t	ddƒ¡ƒdu sJ ‚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    ,$r9   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 sJ ‚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   r6   r&   r	   r
   r   Úpositiver!   r!   r!   r"   Útest_positive_definite‰   s:     ÿÿÿÿ$ÿÿ$r<   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   Ú
triangularZunit_triangularr!   r!   r!   r"   Útest_triangularŸ   s(    ÿÿÿÿ"r@   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¡ƒsJ ‚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   Fr1   r2   )r   r   Údiagonalr   r   r    r	   r
   r   r>   r=   r3   r?   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   Útest_diagonal°   s0    ÿÿ$$  rB   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   &rD   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   r>   r?   r-   r!   r!   r"   Útest_non_trivial_impliesË   s   ÿÿÿÿrE   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   r3   r$   rA   r6   r=   )r   ÚBÚCr!   r!   r"   Útest_MatrixSliceÕ   s   rH   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   "rJ   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_elementsZ#sympy.matrices.expressions.hadamardrK   r    r%   r$   r   r   r   rC   r   )r   r   rK   rL   rM   r!   r!   r"   Útest_field_assumptionsê   s2   "(ÿ(&* *(rS   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+   r2   r   r   )ÚDFT)r   r   r   rC   rP   rN   rQ   ÚcomplexrR   r	   r
   r   Z"sympy.matrices.expressions.fourierrT   )r   rT   r!   r!   r"   Útest_matrix_element_sets  s   rV   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   rQ   r   rI   r!   r!   r"   Ú&test_matrix_element_sets_slices_blocks  s
   &ÿrW   c                   C   s@   t t ttƒ¡t t¡ƒsJ ‚t t ttƒ¡t t¡ƒsJ ‚d S r   )r   r   rN   r   r   rQ   r   r!   r!   r!   r"   Ú*test_matrix_element_sets_determinant_trace  s   "rX   N)4Zsympyr   r   r   r   r   Zsympy.matrices.denser   Zsympy.matrices.expressionsr   r	   r
   r   r   r   r   r   r   Z)sympy.matrices.expressions.factorizationsr   Zsympy.testing.pytestr   r   r   r   r   r   r   r   r   r#   r'   r(   r)   r.   r/   r4   r5   r7   r8   r9   r<   r@   rB   rD   rE   rH   rJ   rS   rV   rW   rX   r!   r!   r!   r"   Ú<module>   sJ    ,

	