U
    »mœdýH  ã                   @   sš  d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZmZmZ d dlZdZdd„ ZG dd	„ d	ƒZzG d
d„ deƒZW n" ek
r´   G dd„ dƒZY nX G dd„ deƒZzG dd„ deƒZW n" ek
rü   G dd„ dƒZY nX G dd„ deƒZG dd„ dƒZzG dd„ deƒZW n$ ek
�rT   G dd„ dƒZY nX G dd„ deƒZ zG dd„ deƒZ!W n$ ek
�rž   G dd„ dƒZ!Y nX G dd„ deƒZ"G d d!„ d!ƒZ#zG d"d#„ d#e#ƒZ$W n$ ek
�rö   G d$d#„ d#ƒZ$Y nX G d%d&„ d&e#ƒZ%zG d'd(„ d(e#ƒZ&W n$ ek
�r@   G d)d(„ d(ƒZ&Y nX G d*d+„ d+e#ƒZ'G d,d-„ d-ƒZ(zG d.d/„ d/e(ƒZ)W n$ ek
�r˜   G d0d/„ d/ƒZ)Y nX G d1d2„ d2e(ƒZ*zG d3d4„ d4e(ƒZ+W n$ ek
�râ   G d5d4„ d4ƒZ+Y nX G d6d7„ d7e(ƒZ,G d8d9„ d9ƒZ-zG d:d;„ d;e-ƒZ.W n$ ek
�r:   G d<d;„ d;ƒZ.Y nX G d=d>„ d>e-ƒZ/zG d?d@„ d@e-ƒZ0W n$ ek
�r„   G dAd@„ d@ƒZ0Y nX G dBdC„ dCe-ƒZ1dS )Dé    )Úfloat32Úfloat64Ú	complex64Ú
complex128ÚarangeÚarrayÚzerosÚshapeÚ	transposeÚnewaxisÚcommon_typeÚ	conjugate)Ú_fblas)Úassert_array_equalÚassert_allcloseÚassert_array_almost_equalÚassert_Né   c                 C   sâ   t |jƒdkr$d}|d d …tf }nd}t| jd |jd kƒ t| jd |jd ft| |ƒƒ}t| jd ƒD ]X}t|jd ƒD ]D}d}t| jd ƒD ] }|| ||f |||f  7 }q–||||f< q€qn|rÞ| | jd f¡}|S )Né   TFr   )Úlenr	   r   r   r   r   ÚrangeÚreshape)ÚaÚbZb_is_vectorÚcÚiÚjÚsÚk© r   úV/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/linalg/tests/test_fblas.pyÚmatrixmultiply   s     r!   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚBaseAxpyz Mixin class for axpy tests c                 C   sB   t d| jd�}t d|jd�}|d | }|  ||¡}t||ƒ d S )Nç      @©Údtypeç      ð?©r   r%   Ú	blas_funcr   ©ÚselfÚxÚyZreal_yr   r   r    Útest_default_a3   s
    zBaseAxpy.test_default_ac                 C   sF   t d| jd�}t d|jd�}|d | }| j||dd�}t||ƒ d S )Nr#   r$   )r   r'   r)   r   r   r    Útest_simple:   s
    zBaseAxpy.test_simplec                 C   s`   t d| jd�}td|jƒ}t d|jd�}|d d d… d | }| j||dddd�}t||ƒ d S )Nç      @r$   é   r#   é   )r   ÚnÚincx©r   r%   r   r(   r   r)   r   r   r    Útest_x_strideA   s    zBaseAxpy.test_x_stridec                 C   s\   t d| jd�}td|jƒ}|d |d d d…  }| j||dddd�}t||d d d… ƒ d S )Nr#   r$   é   r1   r0   )r   r2   Úincyr4   r)   r   r   r    Útest_y_strideI   s
    zBaseAxpy.test_y_stridec                 C   sh   t d| jd�}td|jƒ}|d d d… d |d d d…  }| j||ddddd�}t||d d d… ƒ d S )	Nç      (@r$   r6   é   r#   r1   r0   )r   r2   r3   r7   r4   r)   r   r   r    Útest_x_and_y_strideP   s
     zBaseAxpy.test_x_and_y_stridec              	   C   sJ   t d| jd�}td|jƒ}tjtdd�� | j||ddd� W 5 Q R X d S ©	Nr9   r$   r6   úfailed for 1st keyword©Úmatchr:   r   ©r2   r3   ©r   r%   r   ÚpytestÚraisesÚ	Exceptionr(   ©r*   r+   r,   r   r   r    Útest_x_bad_sizeW   s    zBaseAxpy.test_x_bad_sizec              	   C   sJ   t d| jd�}td|jƒ}tjtdd�� | j||ddd� W 5 Q R X d S ©	Nr9   r$   r6   r=   r>   r0   r   ©r2   r7   rA   rE   r   r   r    Útest_y_bad_size]   s    zBaseAxpy.test_y_bad_sizeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r.   r5   r8   r;   rF   rI   r   r   r   r    r"   0   s   r"   c                   @   s   e Zd ZejZeZdS ©Ú	TestSaxpyN)rJ   rK   rL   ÚfblasZsaxpyr(   r   r%   r   r   r   r    rO   e   s   rO   c                   @   s   e Zd ZdS rN   ©rJ   rK   rL   r   r   r   r    rO   i   s   c                   @   s   e Zd ZejZeZdS )Ú	TestDaxpyN)rJ   rK   rL   rP   Zdaxpyr(   r   r%   r   r   r   r    rR   m   s   rR   c                   @   s   e Zd ZejZeZdS ©Ú	TestCaxpyN)rJ   rK   rL   rP   Zcaxpyr(   r   r%   r   r   r   r    rT   s   s   rT   c                   @   s   e Zd ZdS rS   rQ   r   r   r   r    rT   w   s   c                   @   s   e Zd ZejZeZdS )Ú	TestZaxpyN)rJ   rK   rL   rP   Zzaxpyr(   r   r%   r   r   r   r    rU   {   s   rU   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚBaseScalz Mixin class for scal testing c                 C   s0   t d| jd�}|d }|  d|¡}t||ƒ d S ©Nr#   r$   r'   ©r*   r+   Zreal_xr   r   r    r.   †   s    zBaseScal.test_simplec                 C   sZ   t d| jd�}| ¡ }|d d d… td| jƒ |d d d…< | jd|ddd�}t||ƒ d S )Nr/   r$   r1   r#   r0   r@   )r   r%   Úcopyr   r(   r   rX   r   r   r    r5   Œ   s
    $zBaseScal.test_x_stridec              	   C   s>   t d| jd�}tjtdd�� | jd|ddd� W 5 Q R X d S )	Nr9   r$   r=   r>   g       @r:   r   r@   )r   r%   rB   rC   rD   r(   )r*   r+   r   r   r    rF   “   s    zBaseScal.test_x_bad_sizeN)rJ   rK   rL   rM   r.   r5   rF   r   r   r   r    rV   ƒ   s   rV   c                   @   s   e Zd ZejZeZdS ©Ú	TestSscalN)rJ   rK   rL   rP   Zsscalr(   r   r%   r   r   r   r    r[   š   s   r[   c                   @   s   e Zd ZdS rZ   rQ   r   r   r   r    r[   ž   s   c                   @   s   e Zd ZejZeZdS )Ú	TestDscalN)rJ   rK   rL   rP   Zdscalr(   r   r%   r   r   r   r    r\   ¢   s   r\   c                   @   s   e Zd ZejZeZdS ©Ú	TestCscalN)rJ   rK   rL   rP   Zcscalr(   r   r%   r   r   r   r    r^   ¨   s   r^   c                   @   s   e Zd ZdS r]   rQ   r   r   r   r    r^   ¬   s   c                   @   s   e Zd ZejZeZdS )Ú	TestZscalN)rJ   rK   rL   rP   Zzscalr(   r   r%   r   r   r   r    r_   °   s   r_   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚBaseCopyz Mixin class for copy testing c                 C   s8   t d| jd�}tt|ƒ|jƒ}|  ||¡}t||ƒ d S rW   )r   r%   r   r	   r(   r   rE   r   r   r    r.   »   s    zBaseCopy.test_simplec                 C   sD   t d| jd�}td|jƒ}| j||ddd�}t|d d d… |ƒ d S ©Nr/   r$   r0   r1   r@   r4   rE   r   r   r    r5   Á   s    zBaseCopy.test_x_stridec                 C   sD   t d| jd�}td|jƒ}| j||ddd�}t||d d d… ƒ d S )Nr#   r$   r6   r0   r1   rH   r4   rE   r   r   r    r8   Ç   s    zBaseCopy.test_y_stridec                 C   sP   t d| jd�}td|jƒ}| j||dddd�}t|d d d… |d d d… ƒ d S )Nr9   r$   r6   r0   r:   r1   ©r2   r3   r7   r4   rE   r   r   r    r;   Í   s    zBaseCopy.test_x_and_y_stridec              	   C   sJ   t d| jd�}td|jƒ}tjtdd�� | j||ddd� W 5 Q R X d S r<   rA   rE   r   r   r    rF   Ó   s    zBaseCopy.test_x_bad_sizec              	   C   sJ   t d| jd�}td|jƒ}tjtdd�� | j||ddd� W 5 Q R X d S rG   rA   rE   r   r   r    rI   Ù   s    zBaseCopy.test_y_bad_sizeN©
rJ   rK   rL   rM   r.   r5   r8   r;   rF   rI   r   r   r   r    r`   ¸   s   r`   c                   @   s   e Zd ZejZeZdS ©Ú	TestScopyN)rJ   rK   rL   rP   Zscopyr(   r   r%   r   r   r   r    re   è   s   re   c                   @   s   e Zd ZdS rd   rQ   r   r   r   r    re   ì   s   c                   @   s   e Zd ZejZeZdS )Ú	TestDcopyN)rJ   rK   rL   rP   Zdcopyr(   r   r%   r   r   r   r    rf   ð   s   rf   c                   @   s   e Zd ZejZeZdS ©Ú	TestCcopyN)rJ   rK   rL   rP   Zccopyr(   r   r%   r   r   r   r    rh   ö   s   rh   c                   @   s   e Zd ZdS rg   rQ   r   r   r   r    rh   ú   s   c                   @   s   e Zd ZejZeZdS )Ú	TestZcopyN)rJ   rK   rL   rP   Zzcopyr(   r   r%   r   r   r   r    ri   þ   s   ri   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚBaseSwapz Mixin class for swap tests c                 C   sV   t d| jd�}tt|ƒ|jƒ}| ¡ }| ¡ }|  ||¡\}}t||ƒ t||ƒ d S rW   )r   r%   r   r	   rY   r(   r   ©r*   r+   r,   Z	desired_xÚ	desired_yr   r   r    r.   	  s    
zBaseSwap.test_simplec                 C   sl   t d| jd�}td|jƒ}| ¡ }| ¡ d d d… }| j||ddd�\}}t||d d d… ƒ t||ƒ d S ra   ©r   r%   r   rY   r(   r   rk   r   r   r    r5     s    zBaseSwap.test_x_stridec                 C   sl   t d| jd�}td|jƒ}| ¡ d d d… }| ¡ }| j||ddd�\}}t||ƒ t||d d d… ƒ d S )Nr#   r$   r6   r1   r0   rH   rm   rk   r   r   r    r8     s    
zBaseSwap.test_y_stridec                 C   s‚   t d| jd�}td|jƒ}| ¡ d d d… }| ¡ d d d… }| j||dddd�\}}t||d d d… ƒ t||d d d… ƒ d S )Nr9   r$   r6   r1   r:   r0   rb   rm   rk   r   r   r    r;   $  s    zBaseSwap.test_x_and_y_stridec              	   C   sJ   t d| jd�}td|jƒ}tjtdd�� | j||ddd� W 5 Q R X d S r<   rA   rE   r   r   r    rF   -  s    zBaseSwap.test_x_bad_sizec              	   C   sJ   t d| jd�}td|jƒ}tjtdd�� | j||ddd� W 5 Q R X d S rG   rA   rE   r   r   r    rI   3  s    zBaseSwap.test_y_bad_sizeNrc   r   r   r   r    rj     s   				rj   c                   @   s   e Zd ZejZeZdS ©Ú	TestSswapN)rJ   rK   rL   rP   Zsswapr(   r   r%   r   r   r   r    ro   ;  s   ro   c                   @   s   e Zd ZdS rn   rQ   r   r   r   r    ro   ?  s   c                   @   s   e Zd ZejZeZdS )Ú	TestDswapN)rJ   rK   rL   rP   Zdswapr(   r   r%   r   r   r   r    rp   C  s   rp   c                   @   s   e Zd ZejZeZdS ©Ú	TestCswapN)rJ   rK   rL   rP   Zcswapr(   r   r%   r   r   r   r    rr   I  s   rr   c                   @   s   e Zd ZdS rq   rQ   r   r   r   r    rr   M  s   c                   @   s   e Zd ZejZeZdS )Ú	TestZswapN)rJ   rK   rL   rP   Zzswapr(   r   r%   r   r   r   r    rs   Q  s   rs   c                   @   sj   e Zd ZdZd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S )ÚBaseGemvz Mixin class for gemv tests r   c                 C   sÈ   t d| jd�}| jttfkr*t d| jd�}ddlm}m} |dƒ t d| jd�| }t d| jd�| }|ddd	ƒ | j¡| }tt	|ƒd | | jd�| }	tt	|ƒd | | jd�| }
||||	|
fS )
Nr   r$   y      ð?      ð?r   )ÚnormalÚseediÒ  r&   g        )r0   r0   )
r   r%   r   r   Znumpy.randomru   rv   Zastyper   r	   )r*   Úx_strideÚy_strideZmultru   rv   ÚalphaÚbetar   r+   r,   r   r   r    Úget_data]  s    zBaseGemv.get_datac                 C   sH   |   ¡ \}}}}}|t||ƒ ||  }|  |||||¡}t||ƒ d S ©N©r{   r!   r(   r   ©r*   ry   rz   r   r+   r,   rl   r   r   r    r.   j  s    zBaseGemv.test_simplec                 C   s8   |   ¡ \}}}}}t||ƒ}|  d||¡}t||ƒ d S )Nr   r}   r~   r   r   r    Útest_default_beta_yp  s    
zBaseGemv.test_default_beta_yc                 C   sP   |   ¡ \}}}}}|tt|ƒ|ƒ ||  }| j|||||dd�}t||ƒ d S )Nr   ©Útrans©r{   r!   r
   r(   r   r~   r   r   r    Útest_simple_transposev  s    zBaseGemv.test_simple_transposec                 C   sT   |   ¡ \}}}}}|ttt|ƒƒ|ƒ ||  }| j|||||dd�}t||ƒ d S )Nr1   r€   )r{   r!   r
   r   r(   r   r~   r   r   r    Útest_simple_transpose_conj|  s    z#BaseGemv.test_simple_transpose_conjc                 C   sZ   | j dd�\}}}}}|t||d d d… ƒ ||  }| j|||||dd�}t||ƒ d S )Nr1   ©rw   )r3   r}   r~   r   r   r    r5   ‚  s     zBaseGemv.test_x_stridec              	   C   s`   | j dd�\}}}}}|tt|ƒ|d d d… ƒ ||  }| j|||||ddd�}t||ƒ d S )Nr1   r…   r   ©r�   r3   r‚   r~   r   r   r    Útest_x_stride_transposeˆ  s    $z BaseGemv.test_x_stride_transposec              
   C   s~   | j dd�\}}}}}tjtdd�� | jd||d|ddd�}W 5 Q R X tjtdd�� | jd||d|ddd�}W 5 Q R X d S )	Nr1   r…   zfailed for 3rd argumentr>   r   r   r0   r†   ©r{   rB   rC   rD   r(   ©r*   ry   rz   r   r+   r,   r   r   r    Útest_x_stride_assertŽ  s
    "zBaseGemv.test_x_stride_assertc                 C   sl   | j dd�\}}}}}| ¡ }|t||ƒ ||d d d…   |d d d…< | j|||||dd�}t||ƒ d S )Nr1   ©rx   )r7   )r{   rY   r!   r(   r   r~   r   r   r    r8   –  s
    *zBaseGemv.test_y_stridec              	   C   sr   | j dd�\}}}}}| ¡ }|tt|ƒ|ƒ ||d d d…   |d d d…< | j|||||ddd�}t||ƒ d S )Nr1   r‹   r   ©r�   r7   )r{   rY   r!   r
   r(   r   r~   r   r   r    Útest_y_stride_transpose�  s
    .z BaseGemv.test_y_stride_transposec              
   C   s~   | j dd�\}}}}}tjtdd�� | jd||d|ddd�}W 5 Q R X tjtdd�� | jd||d|ddd�}W 5 Q R X d S )	Nr1   r‹   zfailed for 2nd keywordr>   r   r   r0   rŒ   rˆ   r‰   r   r   r    Útest_y_stride_assert¤  s
    "zBaseGemv.test_y_stride_assertN)r   r   )rJ   rK   rL   rM   r{   r.   r   rƒ   r„   r5   r‡   rŠ   r8   r�   rŽ   r   r   r   r    rt   Z  s   
rt   c                   @   s   e Zd ZejZeZdd„ ZdS )Ú	TestSgemvc                    sÌ   ddl m} dd l}dd l‰|jdkr*d S d‡fdd„	‰ d‡ fdd„	}‡fd	d
„}|ddddƒ}|D ]b\}}}}	ˆj ||¡}
ˆj |¡}ˆ |
|¡}||
|ˆj|	d�}|||ˆj|	d�}||||ƒ qdd S )Nr   )ÚproductÚdarwinÚCc           	         s†   |ƒ }ˆ   | ¡}ˆ j||j | ˆ jd�}|jd d }t|ƒD ]}|| | dkr@ qZq@|||||j  … j|d�}|j| |d�S )Nr$   Údatar   ©Úorder)Úprodr   ÚnbytesZuint8Z__array_interface__r   Úviewr   )	r	   Úalignr%   r•   ÚdÚNÚtmpÚaddressÚoffset)Únpr   r    Úaligned_arrayº  s    
z2TestSgemv.test_sgemv_on_osx.<locals>.aligned_arrayc                    s(   ˆ | j |||ƒ}| d d … |d d …< |S r|   )r	   )Zarrr™   r%   r•   Zaligned)r    r   r    Ú
as_alignedÈ  s    z/TestSgemv.test_sgemv_on_osx.<locals>.as_alignedc                    s   t ˆ  d| |¡|ddd� d S )Nr&   gñhãˆµøä>gH¯¼šò×z>)ZrtolZatol)r   r(   )ÚAÚXÚdesired)r*   r   r    Úassert_dot_closeÎ  s     ÿz5TestSgemv.test_sgemv_on_osx.<locals>.assert_dot_close)é   é    )i'  )éÈ   éY   )r’   ÚFr”   )r’   )r’   )	Ú	itertoolsr�   ÚsysÚnumpyÚplatformÚrandomZrandÚdotr   )r*   r�   r¬   r¡   r¥   Ztestdatar™   Úmr2   Za_orderZA_dZX_dr¤   ZA_fZX_fr   )r    rŸ   r*   r    Útest_sgemv_on_osx²  s     
zTestSgemv.test_sgemv_on_osxN)	rJ   rK   rL   rP   Zsgemvr(   r   r%   r²   r   r   r   r    r�   ®  s   r�   c                   @   s   e Zd ZdS )r�   NrQ   r   r   r   r    r�   Ý  s   c                   @   s   e Zd ZejZeZdS )Ú	TestDgemvN)rJ   rK   rL   rP   Zdgemvr(   r   r%   r   r   r   r    r³   á  s   r³   c                   @   s   e Zd ZejZeZdS ©Ú	TestCgemvN)rJ   rK   rL   rP   Zcgemvr(   r   r%   r   r   r   r    rµ   ç  s   rµ   c                   @   s   e Zd ZdS r´   rQ   r   r   r   r    rµ   ë  s   c                   @   s   e Zd ZejZeZdS )Ú	TestZgemvN)rJ   rK   rL   rP   Zzgemvr(   r   r%   r   r   r   r    r¶   ï  s   r¶   )2r­   r   r   r   r   r   r   r   r	   r
   r   r   r   Zscipy.linalgr   rP   Znumpy.testingr   r   r   r   rB   Zaccuracyr!   r"   rO   ÚAttributeErrorrR   rT   rU   rV   r[   r\   r^   r_   r`   re   rf   rh   ri   rj   ro   rp   rr   rs   rt   r�   r³   rµ   r¶   r   r   r   r    Ú<module>	   sz   84/4	S.8