o
    "`                     @   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   </usr/lib/python3/dist-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.4 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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   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   sb   (",
 
$
"
rP   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&   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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&   TZ	transposeZswap_rowextendr(   )rE   r<   r   r   r   test_matrix_transformz   s   2"4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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	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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	   )	Zdiagr&   r6   r2   r3   r7   r8   mpfZhilbert)r9   ar   Z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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   rQ   r   r   r   r
   r   Fr   r   )r   rQ   r   r      r   gPz$,@g%^(@r   )r&   ZmnorminfZsqrtZnormround)rE   r=   r   r   r   
test_norms   s   ra   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'   rS   )r=   r   r   r   test_vector   s   $&rc   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)rE   BCr   r   r   test_matrix_copy   s   rh   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ImportErrorZarrayr&   )ri   r<   r[   r   r   r   test_matrix_numpy   s   
rk   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               @rd   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   



rw   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   rn   r&   )rE   rf   rv   Xr   r   r    test_interval_matrix_matrix_mult   s   

ry   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   rn   r&   typer.   )Zother_type_eyerE   rf   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   )	rm   r&   rn   ZdeltaZmprZ   r(   r6   rl   )r=   rE   rf   rg   r   r   r   test_interval_matrix_mult_bug   s   
Zr|   )r+   r?   Zmpmathr>   rC   rP   rR   rU   rY   r\   ra   rc   rh   rk   rw   ZmarkZxfailry   r{   r|   r   r   r   r   <module>   s&    /2
	
