a
    CCCfH                     @   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y   G dd dZY n0 G dd deZzG dd deZW n  ey   G dd dZY n0 G dd deZG dd dZzG dd deZW n" eyN   G dd dZY n0 G dd deZ zG dd deZ!W n" ey   G dd dZ!Y n0 G dd deZ"G d d! d!Z#zG d"d# d#e#Z$W n" ey   G d$d# d#Z$Y n0 G d%d& d&e#Z%zG d'd( d(e#Z&W n" ey4   G d)d( d(Z&Y n0 G d*d+ d+e#Z'G d,d- d-Z(zG d.d/ d/e(Z)W n" ey   G d0d/ d/Z)Y n0 G d1d2 d2e(Z*zG d3d4 d4e(Z+W n" ey   G d5d4 d4Z+Y n0 G d6d7 d7e(Z,G d8d9 d9Z-zG d:d; d;e-Z.W n" ey(   G d<d; d;Z.Y n0 G d=d> d>e-Z/zG d?d@ d@e-Z0W n" eyp   G dAd@ d@Z0Y n0 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< qqn|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   Y/var/www/html/django/DPS/env/lib/python3.9/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   s^   t d| jd}td|j}tjtdd" | j||ddd W d    n1 sP0    Y  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   s^   t d| jd}td|j}tjtdd" | j||ddd W d    n1 sP0    Y  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   sR   t d| jd}tjtdd" | jd|ddd W d    n1 sD0    Y  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   s^   t d| jd}td|j}tjtdd" | j||ddd W d    n1 sP0    Y  d S r<   rA   rE   r   r   r    rF      s    zBaseCopy.test_x_bad_sizec                 C   s^   t d| jd}td|j}tjtdd" | j||ddd W d    n1 sP0    Y  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   s^   t d| jd}td|j}tjtdd" | j||ddd W d    n1 sP0    Y  d S r<   rA   rE   r   r   r    rF   -  s    zBaseSwap.test_x_bad_sizec                 C   s^   t d| jd}td|j}tjtdd" | j||ddd W d    n1 sP0    Y  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v 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 d    n1 sR0    Y  tjtdd( | jd||d|ddd}W d    n1 s0    Y  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
    6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 d    n1 sR0    Y  tjtdd( | jd||d|ddd}W d    n1 s0    Y  d S )	Nr1   r   zfailed for 2nd keywordr>   r   r   r0   r   r   r   r   r   r    test_y_stride_assert  s
    6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&   gh㈵>gHz>)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