o
    lh                     @   s   d dl Z d dlZd dlT 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 j dd Zdd Zdd  ZdS )!    N)*c            
         s<  t d} tdD ]}d| ||f< q| tdksJ | t | ks!J t dd  jr+J t g dg dg dg}t|ttddksEJ d|d	< d	|jvsPJ t g dg dgt d
dgddgddgg}| t ddgddggkswJ | | ||    kr|ksJ  J tt fdd g dg dg dg}t |}| |ksJ |t	t
|ksJ t |}|t	t
|ksJ |d t	t
|d ksJ |d d|   kr|ksJ  J  jdksJ  jdksJ d|_d|_t|jdksJ  d ksJ tt fdd t| |  dks"J t ddgddgdd
gddggt ddg}| t g dksEJ td}t|d dtd  dksZJ dtd d d tdkskJ tdd tdksxJ ttfdd td}t |}	d|d < ||	ksJ t|sJ d S )!N         r   r   r                  	   
   r   )r   r   r
      i'   c                      s      S N r   )A2r   n/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/mpmath/tests/test_matrices.py<lambda>       z#test_matrix_basic.<locals>.<lambda>)r         )(   r   <   )F   P   Z   y              ?c                      s     S r   r   r   )r   A4r   r   r   $   r   r   r	   r   r   )r#   r#   r#   r#   c                      s    d S )Nr   r   r   )A7r   r   r   -   r   ir   r   )matrixrangeeye_matrix__datalistpytestraises
ValueErrortolistevalreprfprowscolslensumoneszeros
randmatrixnstr)
A1iA3A5lA6xA8A9A10r   )r   r"   r$   r   test_matrix_basic   sZ   

 $
$ ""rD   c                  C   sN   t jdk r
td tg dg dg} tddgddgd	d
gg}td dS )z
    Test the PEP465 "@" matrix multiplication syntax.
    To avoid syntax errors when importing this file in Python 3.5 and below, we have to use exec() - sorry for that.
    i z9'@' (__matmul__) is only supported in Python 3.5 or newerr   r   r
   r   r   r   r   r   zassert A4 @ A5 == A4 * A5N)sys
hexversionr+   skipr&   exec)r"   r=   r   r   r   test_matmul4   s
   

rI   c                     s  t g dg dg dg t g d}  d d d d f  ks!J  d d df t dgdgdggks5J  dd d f t g dgksFJ  dd	dd	f t dd
gddggks\J | dd t d	dgksjJ tt fdd t d	} |d d d d f< |d d d d f t g dg dg dgksJ t g dg|dd d f< |t g dg dg dgksJ t dgdgdgg|d d df< |t g dg dg dgksJ t ddgddgg|d dd df< |t g dg dg dgksJ d| dd	< | t g dksJ tt  d d df |dd d f< W d    n	1 s-w   Y  tt  d d d d f |dddf< W d    n	1 sSw   Y  d|d d df< |t g d g d!g d"gksrJ d#|d d d d f< |D ]
}|d#ksJ q~d S )$Nr   r   r   )r   r   r   r   r	   r   r   r	   r   r   r
   r   r   c                      s    d d ddf S )Nr   r
   r   r   Ar   r   r   M   s    z$test_matrix_slices.<locals>.<lambda>)r      r   r            )r   rL   rM   )r   r	   rN   )r   r   rO               )rP   rQ   rM   )rR   rS   rN   r   )r   r   r   r   r	   r   )rP   rQ   r   )rR   rS   r   )r   r   r   r   )r&   r+   r,   
IndexErrorr-   )Vr:   r@   r   rJ   r   test_matrix_slicesA   sb   (",
 
$
"
rV   c                  C   sp   t ddgddgg} | d | |  ksJ | d | |  |  ks J | d t| ks*J | d t| |  ks6J d S )Nr   r   r   r   r   )r&   inverserJ   r   r   r   test_matrix_powers   s
   rY   c                  C   s   t ddgddgddgg} | j|    kr#t g dg dgks&J  J t| dd | t ddgddgddggks=J ddg}t|d	d |ddgksOJ ttdg d
t g dg dg dgksgJ d S )Nr   r   r   r   r	   r
   )r   r   r	   )r   r   r
   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r&   T	transposeswap_rowextendr(   )rK   r>   r   r   r   test_matrix_transformz   s   2"4r^   c                  C   s   t dt dgdtgg} |  t tdddgdtddggks"J |  | j  kr>t tdddgdtddggksAJ  J d S )Nr   r   r   r   )r&   j	conjugatempctranspose_conjHrJ   r   r   r   test_matrix_conjugate   s
   , rd   c                  C   s  t g dtg dg dg dgksJ tdd} | jdkr$| jdks&J | D ]}|dks0J q(tdd}|jdkr@|jdksBJ |D ]}|dksLJ qDtd	td	ksWJ td}tdt||d |d g|d |d |d
 g|d |d
 |d ggksJ d S )Nr   )r   r   r   )r   r   r   )r   r   r   r   r   r   r   r   r   r	   )	diagr&   r6   r2   r3   r7   r8   mpfhilbert)r:   ar   oner   r   r   test_matrix_creation   s   *

rj   c                  C   s   t ddgddgddgg} t| ddksJ t| tdksJ t| dtd	ks*J tdd
ks2J g d}t|ddks?J tt|dddksKJ tt|dddksWJ t|tdks`J d S )Nr   rW   r   r   r   r
   r   Fr   r   )r   rW   r   r      r   gPz$,@g%^(@r   )r&   mnorminfsqrtnormround)rK   r@   r   r   r   
test_norms   s   rr   c                  C   s   t g d} | t dgdgdgdgdggksJ | d dks J t| jdks)J t| ttdks5J d| d< d| d< | d dksEJ t| t| j  krUdksXJ  J | j|  t d	ggkseJ d S )
N)r   r   r   r   r   r   r   r   r   r   r	   r#   r   )r&   r4   r)   r*   r'   rZ   )r@   r   r   r   test_vector   s   $&rt   c                  C   sZ   t d} |  }| 
 }| |ksJ | |ksJ d|d< | |ks!J d|d< | |ks+J d S )Nr
   r   r%   *   )r6   copy)rK   BCr   r   r   test_matrix_copy   s   ry   c                  C   sZ   zdd l } W n
 ty   Y d S w ddgddgddgg}| |}t|t|ks+J d S )Nr   r   r   r   r   r	   r
   )numpyImportErrorarrayr&   )rz   r>   rh   r   r   r   test_matrix_numpy   s   
r}   c            
      C   s   t dd} | | d  }td}||d  }d}t|}||d  }t|}td}| |||||||fD ]}	|	| t|	gksDJ ||	 t|	gksPJ q6dS )z/Multiplication of iv.matrix and any scalar typer   r   y               @ru   gX9v?y              @N)mpirf   r1   convertivr6   r&   )
rh   bcdefghMr@   r   r   r    test_interval_matrix_scalar_mult   s   



r   c                  C   s|   t d} t d}t d}| ||fD ](}|| t|ks J || |ks(J || t|ks3J || |ks;J qdS )z2Multiplication of iv.matrix and other matrix typesr   N)r6   r1   r   r&   )rK   rw   r   Xr   r   r    test_interval_matrix_matrix_mult   s   

r   c                  C   sh   t dt dt dfD ]$} t| }t d}t|d t|d ks'J | | ks1J qd S )Nr   r%   )r(   r1   r   r&   typer.   )other_type_eyerK   rw   r   r   r   test_matrix_conversion_to_iv   s   

r   c                  C   s"  t d} t| gg}t|}t| gg}||ksJ || }|| }||ks*J |d jdks3J |d jdk s<J |d jdksEJ |d jdk sNJ td|d v sYJ td|d v sdJ ttdtdtdd  ttddtddgtddtddggksJ d S )	Nz1.00000000000001r%   gؗҜ<gMg<z:1.00000000000001998401444325291756783368705994138804689654r   r   r   )	r   r&   r   deltamprf   r(   r6   r~   )r@   rK   rw   rx   r   r   r   test_interval_matrix_mult_bug   s   
Zr   )r+   rE   mpmathrD   rI   rV   rY   r^   rd   rj   rr   rt   ry   r}   r   markxfailr   r   r   r   r   r   r   <module>   s&    /2
	
