U
    3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   H/tmp/pip-unpacked-wheel-zrfo1fqw/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rd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   )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#   rK   r"   rL   r5   g      r%   )r   r   r   r&   r'   asarrayr(   r)   ORDERr*   r   r+   )r   opAtransArK   Zgemvr,   Ar   r-   r6   betar.   r   r   r   	test_gemv   s     rU   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#   rL   r"   rL   rM   r5   r%   )r   r   r   r&   r'   r(   r)   rO   rP   outerr   r+   )	r   rK   Zgerr,   r   r-   rS   r6   r.   r   r   r   test_ger   s     rX   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#   rM   rV   )rY   rL   rN   r%   )r   r   r   r&   r'   rO   r(   r)   rP   r*   r   r+   )r   rQ   rR   ZopBZtransBrK   Zgemmr,   rS   Br   r6   rT   r.   r   r   r   	test_gemm   s$    	   r[   ))r   Z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+   rP   r    markZparametrizer0   r3   r7   r8   r9   r:   rH   rI   Z	transposerU   rX   r[   r   r   r   r   <module>   sv   







      