o
    Ö­jÿ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yY   G dd„ dƒZY nw G dd„ deƒZz
G dd„ deƒZW n ey|   G dd„ dƒZY nw 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w G dd„ deƒZ z
G dd„ deƒZ!W n eyÉ   G dd„ dƒZ!Y nw 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w G d%d&„ d&e#ƒZ%z
G d'd(„ d(e#ƒZ&W n e�y   G d)d(„ d(ƒZ&Y nw G d*d+„ d+e#ƒZ'G d,d-„ d-ƒZ(z
G d.d/„ d/e(ƒZ)W n e�yB   G d0d/„ d/ƒZ)Y nw G d1d2„ d2e(ƒZ*z
G d3d4„ d4e(ƒZ+W n e�yf   G d5d4„ d4ƒZ+Y nw 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w G d=d>„ d>e-ƒZ/z
G d?d@„ d@e-ƒZ0W n e�yµ   G dAd@„ d@ƒZ0Y nw G dBdC„ dCe-ƒZ1	 d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 ],}t|jd ƒD ]"}d}t| jd ƒD ]}|| ||f |||f  7 }qK||||f< q@q7|ro| | jd f¡}|S )Né   TFr   )Úlenr	   r   r   r   r   ÚrangeÚreshape)ÚaÚbÚb_is_vectorÚcÚiÚjÚsÚk© r    úZ/var/www/html/CropPilot/venv/lib/python3.10/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ÚyÚ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%   é   r3   r2   )r   r4   Úincyr6   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%   r8   é   r$   r3   r2   )r   r4   r5   r9   r6   r*   r    r    r!   Útest_x_and_y_strideP   s
    zBaseAxpy.test_x_and_y_stridec                 C   ó`   t d| jd�}td|jƒ}tjtdd�� | j||ddd� W d   ƒ d S 1 s)w   Y  d S ©	Nr;   r%   r8   úfailed for 1st keyword©Úmatchr<   r   ©r4   r5   ©r   r&   r   ÚpytestÚraisesÚ	Exceptionr)   ©r+   r,   r-   r    r    r!   Útest_x_bad_sizeW   ó
   "ÿzBaseAxpy.test_x_bad_sizec                 C   r>   ©	Nr;   r%   r8   r@   rA   r2   r   ©r4   r9   rD   rH   r    r    r!   Útest_y_bad_size]   rJ   zBaseAxpy.test_y_bad_sizeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r0   r7   r:   r=   rI   rM   r    r    r    r!   r#   0   s    r#   c                   @   ó   e Zd ZejZeZdS ©Ú	TestSaxpyN)rN   rO   rP   ÚfblasÚsaxpyr)   r   r&   r    r    r    r!   rT   e   ó    rT   c                   @   ó   e Zd ZdS rS   ©rN   rO   rP   r    r    r    r!   rT   i   ó    c                   @   rR   )Ú	TestDaxpyN)rN   rO   rP   rU   Údaxpyr)   r   r&   r    r    r    r!   r[   m   rW   r[   c                   @   rR   ©Ú	TestCaxpyN)rN   rO   rP   rU   Úcaxpyr)   r   r&   r    r    r    r!   r^   s   rW   r^   c                   @   rX   r]   rY   r    r    r    r!   r^   w   rZ   c                   @   rR   )Ú	TestZaxpyN)rN   rO   rP   rU   Úzaxpyr)   r   r&   r    r    r    r!   r`   {   rW   r`   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,   Úreal_xr    r    r!   r0   †   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 )Nr1   r%   r3   r$   r2   rC   )r   r&   Úcopyr   r)   r   rd   r    r    r!   r7   Œ   s
   $zBaseScal.test_x_stridec                 C   sT   t d| jd�}tjtdd�� | jd|ddd� W d   ƒ d S 1 s#w   Y  d S )	Nr;   r%   r@   rA   g       @r<   r   rC   )r   r&   rE   rF   rG   r)   )r+   r,   r    r    r!   rI   “   s   "ÿzBaseScal.test_x_bad_sizeN)rN   rO   rP   rQ   r0   r7   rI   r    r    r    r!   rb   ƒ   s
    rb   c                   @   rR   ©Ú	TestSscalN)rN   rO   rP   rU   Ússcalr)   r   r&   r    r    r    r!   rh   š   rW   rh   c                   @   rX   rg   rY   r    r    r    r!   rh   ž   rZ   c                   @   rR   )Ú	TestDscalN)rN   rO   rP   rU   Údscalr)   r   r&   r    r    r    r!   rj   ¢   rW   rj   c                   @   rR   ©Ú	TestCscalN)rN   rO   rP   rU   Úcscalr)   r   r&   r    r    r    r!   rm   ¨   rW   rm   c                   @   rX   rl   rY   r    r    r    r!   rm   ¬   rZ   c                   @   rR   )Ú	TestZscalN)rN   rO   rP   rU   Úzscalr)   r   r&   r    r    r    r!   ro   °   rW   ro   c                   @   ó@   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 rc   )r   r&   r   r	   r)   r   rH   r    r    r!   r0   »   s   zBaseCopy.test_simplec                 C   sD   t d| jd�}td|jƒ}| j||ddd�}t|d d d… |ƒ d S ©Nr1   r%   r2   r3   rC   r6   rH   r    r    r!   r7   Á   ó   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%   r8   r2   r3   rL   r6   rH   r    r    r!   r:   Ç   rt   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 )Nr;   r%   r8   r2   r<   r3   ©r4   r5   r9   r6   rH   r    r    r!   r=   Í   s   "zBaseCopy.test_x_and_y_stridec                 C   r>   r?   rD   rH   r    r    r!   rI   Ó   rJ   zBaseCopy.test_x_bad_sizec                 C   r>   rK   rD   rH   r    r    r!   rM   Ù   rJ   zBaseCopy.test_y_bad_sizeN©
rN   rO   rP   rQ   r0   r7   r:   r=   rI   rM   r    r    r    r!   rr   ¸   s    rr   c                   @   rR   ©Ú	TestScopyN)rN   rO   rP   rU   Úscopyr)   r   r&   r    r    r    r!   rx   è   rW   rx   c                   @   rX   rw   rY   r    r    r    r!   rx   ì   rZ   c                   @   rR   )Ú	TestDcopyN)rN   rO   rP   rU   Údcopyr)   r   r&   r    r    r    r!   rz   ð   rW   rz   c                   @   rR   ©Ú	TestCcopyN)rN   rO   rP   rU   Úccopyr)   r   r&   r    r    r    r!   r}   ö   rW   r}   c                   @   rX   r|   rY   r    r    r    r!   r}   ú   rZ   c                   @   rR   )Ú	TestZcopyN)rN   rO   rP   rU   Úzcopyr)   r   r&   r    r    r    r!   r   þ   rW   r   c                   @   rq   )ÚBaseSwapz Mixin class for swap tests c                 C   sV   t d| jd�}tt|ƒ|jƒ}| ¡ }| ¡ }|  ||¡\}}t||ƒ t||ƒ d S rc   )r   r&   r   r	   rf   r)   r   ©r+   r,   r-   Ú	desired_xÚ	desired_yr    r    r!   r0   	  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 rs   ©r   r&   r   rf   r)   r   r‚   r    r    r!   r7     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%   r8   r3   r2   rL   r…   r‚   r    r    r!   r:     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 )Nr;   r%   r8   r3   r<   r2   ru   r…   r‚   r    r    r!   r=   $  s   zBaseSwap.test_x_and_y_stridec                 C   r>   r?   rD   rH   r    r    r!   rI   -  rJ   zBaseSwap.test_x_bad_sizec                 C   r>   rK   rD   rH   r    r    r!   rM   3  rJ   zBaseSwap.test_y_bad_sizeNrv   r    r    r    r!   r�     s    				r�   c                   @   rR   ©Ú	TestSswapN)rN   rO   rP   rU   Ússwapr)   r   r&   r    r    r    r!   r‡   ;  rW   r‡   c                   @   rX   r†   rY   r    r    r    r!   r‡   ?  rZ   c                   @   rR   )Ú	TestDswapN)rN   rO   rP   rU   Údswapr)   r   r&   r    r    r    r!   r‰   C  rW   r‰   c                   @   rR   ©Ú	TestCswapN)rN   rO   rP   rU   Úcswapr)   r   r&   r    r    r    r!   rŒ   I  rW   rŒ   c                   @   rX   r‹   rY   r    r    r    r!   rŒ   M  rZ   c                   @   rR   )Ú	TestZswapN)rN   rO   rP   rU   Úzswapr)   r   r&   r    r    r    r!   rŽ   Q  rW   rŽ   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        )r2   r2   )
r   r&   r   r   Únumpy.randomr‘   r’   Úastyper   r	   )r+   Úx_strideÚy_strideÚmultr‘   r’   Ú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+   r˜   r™   r   r,   r-   r„   r    r    r!   r0   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 )Nr3   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 )Nr3   ©r•   )r5   rœ   r�   r    r    r!   r7   ‚  s    zBaseGemv.test_x_stridec              	   C   s`   | j dd�\}}}}}|tt|ƒ|d d d… ƒ ||  }| j|||||ddd�}t||ƒ d S )Nr3   r¤   r   ©r    r5   r¡   r�   r    r    r!   Útest_x_stride_transposeˆ  s   $z BaseGemv.test_x_stride_transposec              
   C   ó¨   | j dd�\}}}}}tjtdd�� | jd||d|ddd�}W d   ƒ n1 s)w   Y  tjtdd�� | jd||d|ddd�}W d   ƒ d S 1 sMw   Y  d S )	Nr3   r¤   zfailed for 3rd argumentrA   r   r   r2   r¥   ©rš   rE   rF   rG   r)   ©r+   r˜   r™   r   r,   r-   r    r    r!   Útest_x_stride_assertŽ  ó   ÿ"ÿzBaseGemv.test_x_stride_assertc                 C   sl   | j dd�\}}}}}| ¡ }|t||ƒ ||d d d…   |d d d…< | j|||||dd�}t||ƒ d S )Nr3   ©r–   )r9   )rš   rf   r"   r)   r   r�   r    r    r!   r:   –  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 )Nr3   r¬   r   ©r    r9   )rš   rf   r"   r
   r)   r   r�   r    r    r!   Útest_y_stride_transpose�  s
   .z BaseGemv.test_y_stride_transposec              
   C   r§   )	Nr3   r¬   zfailed for 2nd keywordrA   r   r   r2   r­   r¨   r©   r    r    r!   Útest_y_stride_assert¤  r«   zBaseGemv.test_y_stride_assertN)r   r   )rN   rO   rP   rQ   rš   r0   rž   r¢   r£   r7   r¦   rª   r:   r®   r¯   r    r    r    r!   r�   Z  s    
r�   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 ]1\}}}}	ˆj ||¡}
ˆj |¡}ˆ |
|¡}||
|ˆj|	d�}|||ˆj|	d�}||||ƒ q2d S )Nr   )ÚproductÚdarwinÚCc           	         s†   |ƒ }ˆ   | ¡}ˆ j||j | ˆ jd�}|jd d }t|ƒD ]}|| | dkr, nq |||||j  … j|d�}|j| |d�S )Nr%   Údatar   ©Úorder)Úprodr   ÚnbytesÚuint8Ú__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	   )Úarrr¼   r&   r¶   Ú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>)ÚrtolÚ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³   )	Ú	itertoolsr±   ÚsysÚnumpyÚplatformÚrandomÚrandÚdotr   )r+   r±   rÓ   rÆ   rÌ   Útestdatar¼   Úmr4   Úa_orderÚA_dÚX_drË   ÚA_fÚX_fr    )rÃ   rÂ   r+   r!   Útest_sgemv_on_osx²  s"   
ùzTestSgemv.test_sgemv_on_osxN)	rN   rO   rP   rU   Úsgemvr)   r   r&   rà   r    r    r    r!   r°   ®  s    r°   c                   @   rX   )r°   NrY   r    r    r    r!   r°   Ý  rZ   c                   @   rR   )Ú	TestDgemvN)rN   rO   rP   rU   Údgemvr)   r   r&   r    r    r    r!   râ   á  rW   râ   c                   @   rR   ©Ú	TestCgemvN)rN   rO   rP   rU   Úcgemvr)   r   r&   r    r    r    r!   rå   ç  rW   rå   c                   @   rX   rä   rY   r    r    r    r!   rå   ë  rZ   c                   @   rR   )Ú	TestZgemvN)rN   rO   rP   rU   Úzgemvr)   r   r&   r    r    r    r!   rç   ï  rW   rç   )2rÔ   r   r   r   r   r   r   r   r	   r
   r   r   r   Úscipy.linalgr   rU   Únumpy.testingr   r   r   r   rE   Úaccuracyr"   r#   rT   ÚAttributeErrorr[   r^   r`   rb   rh   rj   rm   ro   rr   rx   rz   r}   r   r�   r‡   r‰   rŒ   rŽ   r�   r°   râ   rå   rç   r    r    r    r!   Ú<module>   s’   84ÿÿÿÿ/ÿÿ4ÿÿ	S.ÿÿ3