U
    ½mœdÃ  ã                   @   sô  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ dd„ ZejdejdiZedediZdd„ Ze j dejejg¡dd„ ƒZe j dejejg¡dd„ ƒZe j dejejg¡dd„ ƒZe j dejejg¡dd „ ƒZ e j dejejg¡d!d"„ ƒZ!e j dejejg¡d#d$„ ƒZ"e j dejejg¡d%d&„ ƒZ#e j dejejg¡d'd(„ ƒZ$e j dejejg¡e jjd)eefej%efgd*d+gd,�e jjd-eegd.d/gd,�d0d1„ ƒƒƒZ&e j dejejg¡e jjd-eegd.d/gd,�d2d3„ ƒƒZ'e j dejejg¡e jjd4eefej%efgd*d+gd,�e jjd)eefej%efgd*d+gd,�e jjd-eegd.d/gd,�d5d6„ ƒƒƒƒZ(dS )7é    N)Úassert_allclose)Ú_dot_memview)Ú_asum_memview)Ú_axpy_memview)Ú_nrm2_memview)Ú_copy_memview)Ú_scal_memview)Ú_rotg_memview)Ú_rot_memview)Ú_gemv_memview)Ú_ger_memview)Ú_gemm_memview)ÚRowMajorÚColMajor)ÚTransÚNoTransc                 C   s.   t  d¡}| tjkr|jS | tjkr*|jS d S )NÚcython)ÚpytestZimportorskipÚnpÚfloat32ÚfloatÚfloat64Údouble)Údtyper   © r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/utils/tests/test_cython_blas.pyÚ_numpy_to_cython   s
    


r   g�íµ ÷Æ°>gê-�™—q=ÚCÚFc                 C   s   | S )Nr   )Úxr   r   r   Ú_no_op!   s    r    r   c                 C   sj   t t| ƒ }tj d¡}| d¡j| dd�}| d¡j| dd�}| |¡}|||ƒ}t||t	|  d� d S ©Nr   é
   F©Úcopy©Zrtol)
r   r   r   ÚrandomÚRandomStateÚrandom_sampleÚastypeÚdotr   ÚRTOL)r   r*   Úrngr   ÚyÚexpectedÚactualr   r   r   Útest_dot%   s    

r0   c                 C   sX   t t| ƒ }tj d¡}| d¡j| dd�}t |¡ ¡ }||ƒ}t	||t
|  d� d S r!   )r   r   r   r&   r'   r(   r)   ÚabsÚsumr   r+   )r   Zasumr,   r   r.   r/   r   r   r   Ú	test_asum3   s    r3   c                 C   sr   t t| ƒ }tj d¡}| d¡j| dd�}| d¡j| dd�}d}|| | }||||ƒ t||t|  d� d S ©Nr   r"   Fr#   ç      @r%   )	r   r   r   r&   r'   r(   r)   r   r+   )r   Zaxpyr,   r   r-   Úalphar.   r   r   r   Ú	test_axpy@   s    r7   c                 C   sV   t t| ƒ }tj d¡}| d¡j| dd�}tj |¡}||ƒ}t	||t
|  d� d S r!   )r   r   r   r&   r'   r(   r)   ZlinalgZnormr   r+   )r   Znrm2r,   r   r.   r/   r   r   r   Ú	test_nrm2O   s    r8   c                 C   s^   t t| ƒ }tj d¡}| d¡j| dd�}t |¡}| ¡ }|||ƒ t	||t
|  d� d S r!   )r   r   r   r&   r'   r(   r)   Z
empty_liker$   r   r+   )r   r$   r,   r   r-   r.   r   r   r   Ú	test_copy\   s    

r9   c                 C   sX   t t| ƒ }tj d¡}| d¡j| dd�}d}|| }|||ƒ t||t|  d� d S r4   )	r   r   r   r&   r'   r(   r)   r   r+   )r   Zscalr,   r   r6   r.   r   r   r   Ú	test_scalj   s    
r:   c           
      C   sn   t t| ƒ }tj d¡}| | ¡ ƒ}| | ¡ ƒ}d\}}dd„ }|||ƒ}|||||ƒ}	t|	|t|  d� d S )Nr   )ç        r;   c                 S   sš   t | ƒt |ƒkr| n|}| dkr6|dkr6d\}}}}nXt | d |d  ¡|dkrVdnd }| | ||  }}|| krz|n|dkr†dnd| }||||fS )Nr   )é   r   r   r   é   r<   éÿÿÿÿ)r1   r   Úsqrt)ÚaÚbZroeÚcÚsÚrÚzr   r   r   Úexpected_rotg�   s    & z test_rotg.<locals>.expected_rotgr%   )r	   r   r   r&   r'   Úrandnr   r+   )
r   Zrotgr,   r@   rA   rB   rC   rF   r.   r/   r   r   r   Ú	test_rotgx   s    

rH   c           	      C   sž   t t| ƒ }tj d¡}| d¡j| dd�}| d¡j| dd�}| | ¡ ƒ}| | ¡ ƒ}|| ||  }|| ||  }|||||ƒ t||ƒ t||ƒ d S )Nr   r"   Fr#   )	r
   r   r   r&   r'   r(   r)   rG   r   )	r   Zrotr,   r   r-   rB   rC   Z
expected_xZ
expected_yr   r   r   Útest_rot‘   s    
rI   zopA, transAr   r   )ZidsÚorderr   r   c                 C   s°   t t| ƒ }tj d¡}tj|| d¡j| dd�ƒt| d�}| d¡j| dd�}| d¡j| dd�}d\}	}
|	||ƒ 	|¡ |
|  }|||	|||
|ƒ t
||t|  d	� d S )
Nr   )é   r"   Fr#   ©rJ   r"   rK   ©r5   g      à¿r%   )r   r   r   r&   r'   Úasarrayr(   r)   ÚORDERr*   r   r+   )r   ÚopAÚtransArJ   Zgemvr,   ÚAr   r-   r6   Úbetar.   r   r   r   Ú	test_gemv¤   s     ÿrT   c           	      C   sž   t t| ƒ }tj d¡}| d¡j| dd�}| d¡j| dd�}tj| d¡j| dd�t| d�}d}|t 	||¡ | }|||||ƒ t
||t|  d	� d S )
Nr   r"   Fr#   rK   ©r"   rK   rL   r5   r%   )r   r   r   r&   r'   r(   r)   rN   rO   Úouterr   r+   )	r   rJ   Zgerr,   r   r-   rR   r6   r.   r   r   r   Útest_gerº   s     ÿrW   zopB, transBc                 C   sÖ   t t| ƒ }tj d¡}tj|| d¡j| dd�ƒt| d�}tj|| d¡j| dd�ƒt| d�}	tj| d¡j| dd�t| d�}
d\}}|||ƒ 	||	ƒ¡ ||
  }||||||	||
ƒ t
|
|t|  d	� d S )
Nr   )é   r"   Fr#   rL   rU   )rX   rK   rM   r%   )r   r   r   r&   r'   rN   r(   r)   rO   r*   r   r+   )r   rP   rQ   ZopBZtransBrJ   Zgemmr,   rR   ÚBr   r6   rS   r.   r   r   r   Ú	test_gemmÍ   s$    	 ÿ ÿ ÿrZ   ))r   Únumpyr   Zsklearn.utils._testingr   Zsklearn.utils._cython_blasr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r+   rO   r    ÚmarkZparametrizer0   r3   r7   r8   r9   r:   rH   rI   Z	transposerT   rW   rZ   r   r   r   r   Ú<module>   sv   







  ÿ  ÿ  ÿ