U
    ZÊ¹j  ã                   @   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s2t‚| t | ƒksBt‚t ddƒ‰ ˆ jrVt‚t dddgdddgddd	ggƒ}t|ƒttdd
ƒƒks�t‚d|d< d|jks¦t‚t dddgdddggƒ‰t ddgddgddggƒ}ˆ| t ddgddggƒksøt‚| | ||    k�r|k�sn t‚t t‡ fdd„¡ d
ddgdddgdddgg}t |ƒ}| 	¡ |k�sht‚|t
t|ƒƒk�s~t‚t  |¡}|t
t|ƒƒk�sžt‚|d t
t|d ƒƒk�s¼t‚|d
 d
|   k�rÜ|k�sân t‚ˆ jdk�sòt‚ˆ jdk�st‚d|_d|_t|jƒdk�s"t‚ˆˆ dˆ k�s8t‚t t‡ ‡fdd„¡ t| |  ƒdk�sdt‚t ddgddgddgddggƒ‰t d
dgƒ}ˆ| t ddddgƒk�s®t‚tdƒ}t|d dtdƒ  ƒdk�sØt‚dtdƒ d d tdƒk�sút‚tdƒd
 tdƒk�st‚t t‡fdd„¡ tdƒ}t |ƒ}	d |d!< ||	k�sNt‚t|ƒ�s\t‚d S )"Né   é   é   é   é   é   é   é   é	   é
   r   )r   r   éÿÿÿÿéýÿÿÿé   iúÿÿÿé'   éôÿÿÿc                      s   ˆ ˆ  S ©N© r   )ÚA2r   úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mpmath/tests/test_matrices.pyÚ<lambda>   ó    z#test_matrix_basic.<locals>.<lambda>é   é   é(   é<   éF   éP   éZ   y              ð?c                      s   ˆˆ  S r   r   r   )r   ÚA4r   r   r   $   r   éöÿÿÿc                      s   ˆ d S )Nr   r   r   )ÚA7r   r   r   -   r   iœÿÿÿ©r   r   )ÚmatrixÚrangeÚeyeÚAssertionErrorÚ_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   sR   t jdk rt d¡ tdddgdddg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   r   zassert A4 @ A5 == A4 * A5N)ÚsysÚ
hexversionr)   Úskipr#   Úexec)r   r9   r   r   r   Útest_matmul4   s
    

rA   c               	      s&  t dddgdddgddd	ggƒ‰ t dddddgƒ} ˆ d d …d d …f ˆ ksNt‚ˆ d d …df t dgdgdggƒksvt‚ˆ dd d …f t ddd	ggƒksšt‚ˆ dd…dd…f t ddgdd	ggƒksÆt‚| dd… t ddgƒksât‚t t‡ fd
d„¡ t dƒ}ˆ |d d …d d …f< |d d …d d …f t dddgdddgddd	ggƒk�sLt‚t dddggƒ|dd d …f< |t dddgdddgddd	ggƒk�s’t‚t dgdgdggƒ|d d …df< |t dddgdddgdddggƒk�sÜt‚t ddgddggƒ|d d…d d…f< |t dddgdddgdddggƒk�s*t‚d| dd…< | t dddddgƒk�sRt‚t t¡�" ˆ d d …df |dd d …f< W 5 Q R X t t¡�& ˆ d d …d d …f |ddd…f< W 5 Q R X d|d d …df< |t dddgdddgdddggƒk�sôt‚d|d d …d d …f< |D ]}|dk�st‚�qd S )Nr   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   r   )r#   r&   r)   r*   Ú
IndexErrorr+   )ÚVr7   r;   r   rB   r   Útest_matrix_slicesA   s\    
þ($,þþ þ$þ&*þrN   c                  C   sp   t ddgddggƒ} | d | |  ks(t‚| d | |  |  ks@t‚| d t| ƒksTt‚| d t| |  ƒkslt‚d S )Nr   r   r   r   r   éþÿÿÿ)r#   r&   ZinverserB   r   r   r   Útest_matrix_powers   s
    rP   c                  C   sâ   t ddgddgddggƒ} | j|  ¡   krHt dddgdddggƒksNn t‚t| ddƒ | t ddgddgddggƒks|t‚ddg}t|ddƒ |ddgks t‚ttdƒdddgƒt ddddgddddgddddggƒksÞt‚d S )Nr   r   r   r   r   r   r   )r#   ÚTZ	transposer&   Zswap_rowÚextendr%   )rC   r:   r   r   r   Útest_matrix_transformz   s    4"rS   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sDt‚|  ¡ | j  krzt tddƒdgdtddƒggƒks€n t‚d S )Nr   r   r   r   )r#   ÚjÚ	conjugateZmpcr&   Ztranspose_conjÚHrB   r   r   r   Útest_matrix_conjugate„   s
    , ÿrW   c                  C   s  t dddgƒtdddgdddgdddggƒks2t‚tddƒ} | jdkrP| jdksTt‚| D ]}|dksXt‚qXtddƒ}|jdkrˆ|jdksŒt‚|D ]}|dks�t‚q�tdƒtdƒks¶t‚tdƒ}t	dƒt||d |d g|d |d |d g|d |d |d ggƒk�st‚d S )Nr   r   r   r   r   r   r   )
Zdiagr#   r&   r4   r0   r1   r5   r6   ÚmpfZhilbert)r7   Úar   Úoner   r   r   Útest_matrix_creationŠ   s    2

þr[   c                  C   sÈ   t ddgddgddggƒ} t| dƒdks,t‚t| tƒdks>t‚t| dƒtd	ƒksTt‚tdƒd
ksdt‚ddddg}t|dƒdks‚t‚tt|dƒdƒdksšt‚tt|dƒdƒdks²t‚t|tƒdksÄt‚d S )Nr   rO   r   r   r   r   r   ÚFr   r   r	   r   é   r   gPÃþ…z$,@g%^Ì(@r   )r#   Zmnormr&   ÚinfÚsqrtZnormÚround)rC   r;   r   r   r   Ú
test_normsš   s    ra   c                  C   sÒ   t dddddgƒ} | t dgdgdgdgdggƒks6t‚| d dksFt‚t| jƒdksXt‚t| ƒttdƒƒkspt‚d| d< d| d< | d dks�t‚t| ƒt| jƒ  kr®dks´n t‚| j|  t dggƒksÎt‚d S )	Nr   r   r   r   r   r   r    ér   )r#   r&   r2   r'   r(   r$   rQ   )r;   r   r   r   Útest_vector¨   s    $$rc   c                  C   sZ   t dƒ} |  ¡ }| 
 }| |ks"t‚| |ks.t‚d|d< | |ksBt‚d|d< | |ksVt‚d S )Nr   r   r"   é*   )r4   Úcopyr&   )rC   ÚBÚCr   r   r   Útest_matrix_copy´   s    rh   c                  C   s\   zdd l } W n tk
r"   Y d S X ddgddgddgg}|  |¡}t|ƒt|ƒksXt‚d S )Nr   r   r   r   r   r   r   )ÚnumpyÚImportErrorÚarrayr#   r&   )ri   r:   rY   r   r   r   Útest_matrix_numpy¿   s    
rl   c            
      C   s¦   t ddƒ} | | d  }tdƒ}||d  }d}t |¡}||d  }t |¡}t d¡}| |||||||fD ]4}	|	| t |	g¡ksˆt‚||	 t |	g¡kslt‚qldS )z/Multiplication of iv.matrix and any scalar typer   r   y               @rd   gX9´Èv¾ó?y              @N)ÚmpirX   r/   ÚconvertÚivr4   r#   r&   )
rY   ÚbÚcÚdÚeÚfÚgÚhÚMr;   r   r   r   Ú test_interval_matrix_scalar_multÈ   s    



rx   c                  C   s|   t dƒ} t  d¡}t  d¡}| ||fD ]P}|| t |¡ks@t‚|| |ksPt‚|| t |¡ksft‚|| |ks&t‚q&dS )z2Multiplication of iv.matrix and other matrix typesr   N)r4   r/   ro   r#   r&   )rC   rf   rw   ÚXr   r   r   Ú test_interval_matrix_matrix_mult×   s    

rz   c                  C   sh   t dƒt  d¡t  d¡fD ]H} t | ¡}t  d¡}t|d ƒt|d ƒksNt‚| ¡ | ¡ kst‚qd S )Nr   r"   )r%   r/   ro   r#   Útyper&   r,   )Zother_type_eyerC   rf   r   r   r   Útest_matrix_conversion_to_ivã   s
    

r|   c                  C   s$  t dƒ} t| ggƒ}t |¡}t | gg¡}||ks8t‚|| }|| }||ksTt‚|d jdksft‚|d jdk sxt‚|d jdksŠt‚|d jdk sœt‚t d¡|d ks²t‚t d¡|d ksÈt‚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 t‚d S )	Nz1.00000000000001r"   g¼‰Ø—²Òœ<gMgâñžµ<z:1.00000000000001998401444325291756783368705994138804689654r   r   r   )
rn   r#   ro   r&   ÚdeltaÚmprX   r%   r4   rm   )r;   rC   rf   rg   r   r   r   Útest_interval_matrix_mult_bugë   s    
r   )r)   r=   Zmpmathr<   rA   rN   rP   rS   rW   r[   ra   rc   rh   rl   rx   ÚmarkZxfailrz   r|   r   r   r   r   r   Ú<module>   s$   /2
	
