a
    ¬<bâ/  ã                   @   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!   úu/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/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 s0J ‚t t tt ¡t t¡ƒdu sRJ ‚t t tt ¡t t¡ƒd u stJ ‚t t tt ¡t t¡t t¡@ ƒdu s J ‚t t tj¡ƒd u s¸J ‚t t tj¡t t¡ƒdu sØJ ‚t t tj¡ƒ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 sHJ ‚t t t
ddƒ¡ƒdu sfJ ‚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 s4J ‚t t t¡t t¡ ƒdu sTJ ‚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   sJ  t t ttdƒgƒ¡ƒdks J ‚t t ttddƒgƒ¡ƒdksBJ ‚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s J ‚t t t|jt dd¡gt 	d¡| ggƒ¡ƒdksÖJ ‚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sFJ ‚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_BlockMatrix1   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sJJ ‚t t ttdƒtddƒƒ¡ƒdkspJ ‚d S )Nr   r*   TF)r   r   r$   r   r	   r
   r   r!   r!   r!   r"   Útest_invertible_BlockDiagMatrixM   s    $&r/   c                   C   sf  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 shJ ‚t t tt ¡t t¡t t¡@ ƒdu s”J ‚t t t¡ƒdu sªJ ‚t t ttj ¡ƒdu sÆJ ‚t t tjt t ¡ƒd u sæJ ‚t t tjt t ¡t t¡ƒdu sJ ‚t t td ¡t t¡ƒdu s4J ‚t t t¡ƒdu sLJ ‚t t tt ¡ƒdu shJ ‚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 sDJ ‚t t tddƒ¡ƒdu sbJ ‚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&    ",, *$"& r4   c                 C   sN  t | tƒ| tƒƒsJ ‚t | tjƒ| tƒƒdu s2J ‚t | tjƒ| tƒƒdu sNJ ‚t | td ƒ| tƒƒshJ ‚t | tƒƒdu s|J ‚t | tƒƒd u sJ ‚t | tƒt t¡ ƒdu s®J ‚t | tt t ƒ| tƒ| tƒ@ ƒdu sØJ ‚t | tdƒƒƒdu sðJ ‚t | t	ddƒƒƒdu sJ ‚t t t¡| tƒƒs&J ‚t | tt ƒ| tƒ| tƒ@ ƒrJJ ‚d S )NTr   Fr   )
r   r   r    r%   r   r   r$   r   r	   r
   )Ú	predicater!   r!   r"   Ú_test_orthogonal_unitaryh   s    *r6   c                   C   s   t tjƒ d S r   )r6   r   Ú
orthogonalr!   r!   r!   r"   Útest_orthogonalv   s    r8   c                   C   s(   t tjƒ tt t¡t t¡ƒs$J ‚d S r   )r6   r   Zunitaryr   r   r7   r!   r!   r!   r"   Útest_unitaryy   s    
r9   c                   C   sH  t t t¡t t¡ƒsJ ‚t t td ¡t t¡ƒs8J ‚t t tj¡t t¡ƒdu sXJ ‚t t t¡ƒd u snJ ‚t t t¡ƒd u s„J ‚t t tt ¡t t¡t t¡@ ƒ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 ‚t t t	ddƒ¡ƒdu s"J ‚t t 
t¡t t¡ ƒdksDJ ‚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 sZJ ‚t t t¡ƒdu spJ ‚t t t¡ƒd u s†J ‚t t td ¡t t¡ƒs¤J ‚t t tt t ¡t t¡t t¡@ ƒdu sÔJ ‚t t t¡t t¡ƒsîJ ‚t t tjt t ¡t t¡t 	t¡@ ƒdu s"J ‚t t tjt t ¡t t¡ƒrHJ ‚t t t
dƒ¡ƒdu sdJ ‚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   r7   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 s6J ‚t t ttj ¡t t¡t t¡@ ƒdu sdJ ‚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	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¡ƒsFJ ‚t t td ¡t t¡ƒsfJ ‚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(     ÿÿÿÿ rA   c                   C   sF  t t ttj tdƒ ¡t t¡t t¡@ ƒdu s6J ‚t t tddƒ¡ƒsNJ ‚t t tddƒ¡ƒdu sjJ ‚t t tddƒ¡ƒdu s†J ‚t t 	t¡t 
t¡@ t t¡ƒsªJ ‚t t t¡t 	t¡t 
t¡@ ƒsÎJ ‚t t t¡t t¡ƒsèJ ‚t t t¡t t¡ƒsJ ‚t t t¡ƒsJ ‚t t t¡ƒs,J ‚t t tt ¡ƒsDJ ‚t t tt ¡ƒs\J ‚t t tjt ¡ƒsvJ ‚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ƒ¡ƒsBJ ‚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     ÿÿ$$" " rC   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    rE   c                  C   s’   t dddƒ} t dddƒ}tt | | ¡t | ¡t |¡@ ƒdu sDJ ‚tt | ¡t | ¡ƒdu sbJ ‚tt | | ¡t | ¡t |¡@ ƒdu sŽJ ‚d S )Nr   r   r   T)r   r   r   r?   r@   r-   r!   r!   r"   Útest_non_trivial_impliesÍ   s    ÿÿÿÿrF   c                  C   s0  t dddƒ} t| ddƒ}t| ddƒ}tt |¡t | ¡ƒs>J ‚tt |¡t | ¡ƒsXJ ‚tt |¡t | ¡ƒsrJ ‚tt |¡t | ¡ƒsŒJ ‚tt |¡t | ¡ƒs¦J ‚tt |¡t | ¡ƒrÀJ ‚tt |¡t | ¡ƒrÚJ ‚tt |¡t | ¡ƒrôJ ‚tt |¡t | ¡ƒrJ ‚tt |¡t | ¡ƒr,J ‚d S )Nr   r+   )r   r   )r   r   )	r   r   r   r   r3   r$   rB   r7   r>   )r   ÚBÚCr!   r!   r"   Útest_MatrixSlice×   s    rI   c                  C   sL   t dddƒ} tt t| ƒ¡t | ¡ƒs*J ‚tt t| ƒ¡t | ¡ƒsHJ ‚d S )Nr   r+   )r   r   r   r<   r   r;   r   ©r   r!   r!   r"   Útest_det_trace_positiveç   s    rK   c                  C   s¤  t dddƒ} t dddƒ}tt | ¡t | ¡ƒs2J ‚tt | ¡t | ¡ƒrLJ ‚tt | ¡t | ¡ƒsfJ ‚tt | d ¡t | ¡ƒs„J ‚tt | d ¡t | ¡ƒs¢J ‚tt | | ¡t | ¡ƒd u sÄJ ‚tt | | ¡t | ¡t |¡@ ƒsìJ ‚ddlm} tt || |ƒ¡t | ¡t |¡@ ƒs$J ‚tt | | ¡t | ¡t |¡@ ƒsNJ ‚tt | j¡t | ¡ƒslJ ‚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 | ¡ƒsDJ ‚tdd	d	d
}tt | | ¡t | ¡t 
| ¡@ ƒs|J ‚tt | | ¡t | ¡ƒd u s J ‚d S )Nr   r+   r   r   r   )ÚHadamardProductÚalphaÚeT)ÚintegerÚnegative)r   r   r   Úreal_elementsÚinteger_elementsÚcomplex_elementsZ#sympy.matrices.expressions.hadamardrL   r    r%   r$   r   r   r   rD   r   )r   r   rL   rM   rN   r!   r!   r"   Útest_field_assumptionsì   s2    "(ÿ
*(  * *rT   c                  C   sÒ   t dddƒ} tt | d ¡t | ¡ƒs*J ‚tt | d ¡t | ¡ƒsHJ ‚tt | d ¡t | ¡ƒsfJ ‚tt t	dƒ¡ƒs|J ‚tt t
ddƒ¡ƒs”J ‚tt tddƒ¡ƒs¬J ‚ddlm} tt |dƒ¡ƒsÎJ ‚d S )Nr   r+   r2   r   r   )ÚDFT)r   r   r   rD   rQ   rO   rR   ÚcomplexrS   r	   r
   r   Z"sympy.matrices.expressions.fourierrU   )r   rU   r!   r!   r"   Útest_matrix_element_sets  s    rW   c                  C   s\   t dddƒ} tt | d d …df ¡t | ¡ƒs2J ‚tt t| g| ggƒ¡t | ¡ƒsXJ ‚d S )Nr   r+   r   )r   r   r   rR   r   rJ   r!   r!   r"   Ú&test_matrix_element_sets_slices_blocks  s
    &ÿrX   c                   C   s@   t t ttƒ¡t t¡ƒsJ ‚t t ttƒ¡t t¡ƒs<J ‚d S r   )r   r   rO   r   r   rR   r   r!   r!   r!   r"   Ú*test_matrix_element_sets_determinant_trace  s    rY   N)6Zsympy.assumptions.askr   r   Zsympy.core.symbolr   Z#sympy.matrices.expressions.diagonalr   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   r6   r8   r9   r:   r=   rA   rC   rE   rF   rI   rK   rT   rW   rX   rY   r!   r!   r!   r"   Ú<module>   sL   ,

	