a
    ›¬<b  ã                   @   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sŠJ ‚d|d	< d	|jvs J ‚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sîJ ‚| | ||    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sŽJ ‚|d t	t
|d ƒƒks¬J ‚|d d|   krÌ|ksÒn J ‚ˆ jdksâJ ‚ˆ jdksòJ ‚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sšJ ‚tdƒ}t|d dtdƒ  ƒdksÄJ ‚dtdƒ d d tdƒksæJ ‚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   új/Users/vegardjervell/Documents/master/model/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.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sBJ ‚ˆ d d …df t dgdgdggƒksjJ ‚ˆ dd d …f t g d¢gƒksŒJ ‚ˆ dd	…dd	…f t dd
gddggƒks¸J ‚| dd… t d	dgƒksÔJ ‚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sºJ ‚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 s®0    Y  d|d d …df< |t g d ¢g d!¢g d"¢gƒksìJ ‚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sœJ ‚ttdƒg d
¢ƒt g d¢g d¢g d¢gƒksÌJ ‚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s€n 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s„J ‚|D ]}|dksˆJ ‚qˆtd	ƒtd	ƒks®J ‚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   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sTJ ‚tdƒd
ksdJ ‚g d¢}t|dƒdks~J ‚tt|dƒdƒdks–J ‚tt|dƒdƒdks®J ‚t|tƒdksÀJ ‚d S )Nr   rQ   r   r   r   r
   r   ÚFr   r   )r   rQ   r   r   é   r   gPÃþ…z$,@g%^Ì(@r   )r&   ZmnormÚinfÚsqrtZnormÚround)rE   r=   r   r   r   Ú
test_normsš   s    rb   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sŠJ ‚t| ƒt| jƒ  kr¨dks®n J ‚| j|  t d	ggƒksÈJ ‚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    $$rd   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    ri   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&   )rj   r<   r[   r   r   r   Útest_matrix_numpy¿   s    
rm   c            
      C   s¦   t ddƒ} | | d  }tdƒ}||d  }d}t |¡}||d  }t |¡}t d¡}| |||||||fD ]4}	|	| t |	g¡ksˆJ ‚||	 t |	g¡kslJ ‚qldS )z/Multiplication of iv.matrix and any scalar typer   r   y               @re   gX9´Èv¾ó?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    



ry   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   rp   r&   )rE   rg   rx   Ú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   rp   r&   Útyper.   )Zother_type_eyerE   rg   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sŠJ ‚|d jdk sœJ ‚t d¡|d v s²J ‚t d¡|d v sÈJ ‚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   )	ro   r&   rp   ÚdeltaÚmprZ   r(   r6   rn   )r=   rE   rg   rh   r   r   r   Útest_interval_matrix_mult_bugë   s    
r€   )r+   r?   Zmpmathr>   rC   rP   rR   rU   rY   r\   rb   rd   ri   rm   ry   ÚmarkZxfailr{   r}   r€   r   r   r   r   Ú<module>   s$   /2
	
