a
    q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            
         sL  t d} tdD ]}d| ||f< q| tdks2J | t | ksBJ t dd  jrVJ t g dg dg dg}t|ttddksJ d|d	< d	|jvsJ 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sJ | | ||    kr|ksn J tt fdd g dg dg dg}t |}| |ksXJ |t	t
|ksnJ t |}|t	t
|ksJ |d t	t
|d ksJ |d d|   kr|ksn 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sTJ t ddgddgdd
gddggt ddg}| t g dksJ td}t|d dtd  dksJ dtd d d tdksJ tdd tdks J ttfdd td}t |}	d|d < ||	ks:J t|sHJ d S )!N         r   r   r                  	   
   r   )r   r   r
      i'   c                      s      S N r   )A2r   V/var/www/html/assistant/venv/lib/python3.9/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
randmatrixZnstr)
A1iZA3A5lZA6xZA8ZA9ZA10r   )r   r"   r$   r   test_matrix_basic   sZ    

 &
& ""r>   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
    

rC   c                     s  t g dg dg dg t g d}  d d d d f  ksBJ  d d df t dgdgdggksjJ  dd d f t g dgksJ  dd	dd	f t dd
gddggksJ | dd t d	dgksJ 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s8J t g dg|dd d f< |t g dg dg dgksvJ 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sJ d| dd	< | t g dks$J tt,  d d df |dd d f< W d    n1 sb0    Y  tt0  d d d d f |dddf< W d    n1 s0    Y  d|d d df< |t g d g d!g d"gksJ d#|d d d d f< |D ]}|d#ksJ 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   r   z$test_matrix_slices.<locals>.<lambda>)r      r   r            )r   rF   rG   )r   r	   rH   )r   r   rI               )rJ   rK   rG   )rL   rM   rH   r   )r   r   r   r   r	   r   )rJ   rK   r   )rL   rM   r   )r   r   r   r   )r&   r+   r,   
IndexErrorr-   )Vr9   r=   r   rD   r   test_matrix_slicesA   s\    (",
 
$
<@
rP   c                  C   sp   t ddgddgg} | d | |  ks(J | d | |  |  ks@J | d t| ksTJ | d t| |  kslJ d S )Nr   r   r   r   r   )r&   ZinverserD   r   r   r   test_matrix_powers   s
    rR   c                  C   s   t ddgddgddgg} | j|    krDt g dg dgksJn J t| dd | t ddgddgddggksxJ ddg}t|d	d |ddgksJ ttdg d
t g dg dg dgksJ 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&   TZ	transposeZswap_rowextendr(   )rE   r<   r   r   r   test_matrix_transformz   s    0"rU   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sDJ |  | j  krzt tdddgdtddggksn J d S )Nr   r   r   r   )r&   j	conjugateZmpcZtranspose_conjHrD   r   r   r   test_matrix_conjugate   s
    , rY   c                  C   s  t g dtg dg dg dgks*J tdd} | jdkrH| jdksLJ | D ]}|dksPJ qPtdd}|jdkr|jdksJ |D ]}|dksJ qtd	td	ksJ td}tdt||d |d g|d |d |d
 g|d |d
 |d ggksJ d S )Nr   )r   r   r   )r   r   r   )r   r   r   r   r   r   r   r   r   r	   )	Zdiagr&   r6   r2   r3   r7   r8   mpfZhilbert)r9   ar   oner   r   r   test_matrix_creation   s    *

r]   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sTJ tdd
ksdJ g d}t|ddks~J tt|dddksJ tt|dddksJ t|tdksJ d S )Nr   rQ   r   r   r   r
   r   Fr   r   )r   rQ   r   r      r   gPz$,@g%^(@r   )r&   ZmnorminfsqrtZnormround)rE   r=   r   r   r   
test_norms   s    rc   c                  C   s   t g d} | t dgdgdgdgdggks0J | d dks@J t| jdksRJ t| ttdksjJ d| d< d| d< | d dksJ t| t| j  krdksn J | j|  t d	ggksJ d S )
N)r   r   r   r   r   r   r   r   r   r   r	   r#   r   )r&   r4   r)   r*   r'   rS   )r=   r   r   r   test_vector   s    $$re   c                  C   sZ   t d} |  }| 
 }| |ks"J | |ks.J d|d< | |ksBJ d|d< | |ksVJ d S )Nr
   r   r%   *   )r6   copy)rE   BCr   r   r   test_matrix_copy   s    rj   c                  C   sZ   zdd l } W n ty    Y d S 0 ddgddgddgg}| |}t|t|ksVJ d S )Nr   r   r   r   r   r	   r
   )numpyImportErrorarrayr&   )rk   r<   r[   r   r   r   test_matrix_numpy   s    
rn   c            
      C   s   t dd} | | d  }td}||d  }d}t|}||d  }t|}td}| |||||||fD ]4}	|	| t|	gksJ ||	 t|	gkslJ qldS )z/Multiplication of iv.matrix and any scalar typer   r   y               @rf   gX9v?y              @N)mpirZ   r1   convertivr6   r&   )
r[   bcdefghMr=   r   r   r    test_interval_matrix_scalar_mult   s    



rz   c                  C   s|   t d} t d}t d}| ||fD ]P}|| t|ks@J || |ksPJ || t|ksfJ || |ks&J q&dS )z2Multiplication of iv.matrix and other matrix typesr   N)r6   r1   rq   r&   )rE   rh   ry   Xr   r   r    test_interval_matrix_matrix_mult   s    

r|   c                  C   sh   t dt dt dfD ]H} t| }t d}t|d t|d ksNJ | | ksJ qd S )Nr   r%   )r(   r1   rq   r&   typer.   )Zother_type_eyerE   rh   r   r   r   test_matrix_conversion_to_iv   s
    

r~   c                  C   s$  t d} t| gg}t|}t| gg}||ks8J || }|| }||ksTJ |d jdksfJ |d jdk sxJ |d jdksJ |d jdk sJ td|d v sJ td|d v sJ 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s J d S )	Nz1.00000000000001r%   gؗҜ<gMg<z:1.00000000000001998401444325291756783368705994138804689654r   r   r   )	rp   r&   rq   deltamprZ   r(   r6   ro   )r=   rE   rh   ri   r   r   r   test_interval_matrix_mult_bug   s    
r   )r+   r?   Zmpmathr>   rC   rP   rR   rU   rY   r]   rc   re   rj   rn   rz   markZxfailr|   r~   r   r   r   r   r   <module>   s$   /2
	
