o
    Ö­j– ã                   @   s²  d dl Z d dlZd dlmZmZmZ d dlmZ	 d dl
mZ d dlm  mZ d dlmZmZmZ d9dd„Zd:d	d
„Zd;dd„Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd „ d eƒZG d!d"„ d"eƒZG d#d$„ d$eƒZG d%d&„ d&eƒZ G d'd(„ d(eƒZ!G d)d*„ d*eƒZ"G d+d,„ d,eƒZ#G d-d.„ d.e#ƒZ$G d/d0„ d0e#ƒZ%G d1d2„ d2e#ƒZ&G d3d4„ d4e#ƒZ'd5d6„ Z(d7d8„ Z)dS )<é    N)Úassert_Úassert_allcloseÚassert_equal)Úraises)Úlinalg)Ú	qr_deleteÚ	qr_updateÚ	qr_insertTc                 C   sŠ   |d u rdt  | j¡jd   }|d u rdt  | j¡j }|r,t| jd | jd kdƒ t  | j 	¡ | ¡}t
|t  | jd ¡||d� d S )Nç      $@é   é
   r   é   zunitary matrices must be square©ÚrtolÚatol)ÚnpÚfinfoÚdtypeÚ	precisionÚepsr   ÚshapeÚdotÚTÚconjr   Úeye)Úar   r   Ú
assert_sqrÚaTa© r   úb/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/linalg/tests/test_decomp_update.pyÚassert_unitary
   s    r    c                 C   sp   |d u rdt  | j¡jd   }|d u rdt  | j¡j }t  | jd | jd dt j¡}t| | d||d� d S )Nr
   r   r   r   éÿÿÿÿg        r   )	r   r   r   r   r   Útrir   Úbool_r   )r   r   r   Úmaskr   r   r   Úassert_upper_tri   s   r%   c                 C   s4   t | |||ƒ t|||ƒ t|  |¡|||d� d S )Nr   )r    r%   r   r   )ÚqÚrr   r   r   r   r   r   r   Úcheck_qr   s   r(   c           
      C   s8  g d¢}t |ƒ}d}g }| D ]‹}|jdkrA|||  }|d7 }t |d |jd  |d  |j¡}||d d |d … }||d< nS|jdkr�|||  }||d |  }	|d7 }t |d |jd  |d  |	d |jd  |	d  f|j¡}||d d |d …|	d d |	d …f }||d< ntdƒ‚| |¡ q|S )N))é   é   )r   r   )r)   é   )r+   r   )é   r+   )r   r)   )r   r   )r+   r,   r   r   .r   z0make_strided only works for ndim = 1 or 2 arrays)ÚlenÚndimr   Úzerosr   r   Ú
ValueErrorÚappend)
ÚarrsÚstridesÚkmaxÚkÚretr   ÚsÚbaseÚviewÚtr   r   r   Úmake_strided"   s.   
$

6ÿ(
r;   c                 C   st   g }| D ]3}t  |¡}|jdkr|d d d…d d d…f }n|jdkr*|d d d… }ntdƒ‚||d< | |¡ q|S )Nr   r!   r   z2negate_strides only works for ndim = 1 or 2 arrays.)r   Ú
zeros_liker.   r0   r1   )r2   r6   r   Úbr   r   r   Únegate_strides<   s   


r>   c                 C   sJ   g }| D ]}|j }t |jd|fdg¡}| |¡}||d< | |¡ q|S )Nr   )ÚjunkÚS1.)r   r   r/   r   Úgetfieldr1   )r2   Úoutr   Úa_dtyper=   Úcr   r   r   Únonitemsize_stridesK   s   
rE   c                 C   s   dd„ | D ƒS )Nc                 S   s   g | ]
}|  |j ¡ ¡‘qS r   )Úastyper   Únewbyteorder)Ú.0r   r   r   r   Ú
<listcomp>W   s    z"make_nonnative.<locals>.<listcomp>r   )r2   r   r   r   Úmake_nonnativeV   s   rJ   c                   @   s   e Zd Zdd„ Zddd„ZdS )ÚBaseQRdeltasc                 C   s2   dt  | j¡jd   | _dt  | j¡j | _d S )Nr
   r   r   )r   r   r   r   r   r   r   ©Úselfr   r   r   Úsetup_method[   s   zBaseQRdeltas.setup_methodÚfullc                 C   s€   t j d¡ dddddddœ| }t j |¡}t  | j d	¡¡r,t j |¡}|d
|  }| | j¡}tj||d�\}}|||fS )NiÆr  ©é   rQ   )é   r*   )r*   rR   )rQ   r   )r   rQ   ©r   r   )ÚsqrÚtallÚfatÚMx1Ú1xNÚ1x1r   ù              ð?)Úmode)	r   ÚrandomÚseedÚiscomplexobjr   ÚtyperF   r   Úqr)rM   r_   r[   r   r   r=   r&   r'   r   r   r   Úgenerate_   s   ÿÿ
zBaseQRdeltas.generateN©rO   )Ú__name__Ú
__module__Ú__qualname__rN   ra   r   r   r   r   rK   Z   s    rK   c                   @   s  e 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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%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dƒdbdc„Z3ddde„ Z4dfdg„ Z5dhdi„ Z6djdk„ Z7dldm„ Z8dndo„ Z9dpdq„ Z:drds„ Z;dtdu„ Z<dvdw„ Z=dxdy„ Z>dzd{„ Z?d|d}„ Z@d~d„ ZAd€d�„ ZBd‚S )„ÚBaseQRdeletec                 C   ó^   |   d¡\}}}t|jd ƒD ]}t|||dd�\}}t ||d¡}t|||| j| jƒ qd S )NrT   r   F©Úoverwrite_qr©	ra   Úranger   r   r   Údeleter(   r   r   ©rM   r   r&   r'   ÚrowÚq1Úr1Úa1r   r   r   Útest_sqr_1_rowl   ó   ýzBaseQRdelete.test_sqr_1_rowc           	   	   C   ó~   |   d¡\}}}tddƒD ]/}t|jd | ƒD ]#}t||||dd�\}}t |t||| ƒd¡}t|||| j| j	ƒ qqd S )NrT   r   é   r   Frh   ©
ra   rk   r   r   r   rl   Úslicer(   r   r   ©	rM   r   r&   r'   Úndelrn   ro   rp   rq   r   r   r   Útest_sqr_p_rows   ó   ýÿzBaseQRdelete.test_sqr_p_rowc                 C   ó`   |   d¡\}}}t|jd ƒD ]}t|||ddd�\}}t ||d¡}t|||| j| jƒ qd S )NrT   r   ÚcolF©Úwhichri   rj   ©rM   r   r&   r'   r}   ro   rp   rq   r   r   r   Útest_sqr_1_col{   ó   ýzBaseQRdelete.test_sqr_1_colc           	   
   C   ó€   |   d¡\}}}tddƒD ]0}t|jd | ƒD ]$}t||||ddd�\}}t |t||| ƒd¡}t|||| j| j	ƒ qqd S )NrT   r   ru   r   r}   Fr~   rv   ©	rM   r   r&   r'   ry   r}   ro   rp   rq   r   r   r   Útest_sqr_p_col‚   ó   
ÿüÿzBaseQRdelete.test_sqr_p_colc                 C   rg   )NrU   r   Frh   rj   rm   r   r   r   Útest_tall_1_row‹   rs   zBaseQRdelete.test_tall_1_rowc           	   	   C   rt   )NrU   r   ru   r   Frh   rv   rx   r   r   r   Útest_tall_p_row’   r{   zBaseQRdelete.test_tall_p_rowc                 C   r|   )NrU   r   r}   Fr~   rj   r€   r   r   r   Útest_tall_1_colš   r‚   zBaseQRdelete.test_tall_1_colc           	   
   C   rƒ   )NrU   r   ru   r   r}   Fr~   rv   r„   r   r   r   Útest_tall_p_col¡   r†   zBaseQRdelete.test_tall_p_colc                 C   rg   )NrV   r   Frh   rj   rm   r   r   r   Útest_fat_1_rowª   rs   zBaseQRdelete.test_fat_1_rowc           	   	   C   rt   )NrV   r   ru   r   Frh   rv   rx   r   r   r   Útest_fat_p_row±   r{   zBaseQRdelete.test_fat_p_rowc                 C   r|   )NrV   r   r}   Fr~   rj   r€   r   r   r   Útest_fat_1_col¹   r‚   zBaseQRdelete.test_fat_1_colc           	   
   C   rƒ   )NrV   r   ru   r   r}   Fr~   rv   r„   r   r   r   Útest_fat_p_colÀ   r†   zBaseQRdelete.test_fat_p_colc                 C   ób   |   dd¡\}}}t|jd ƒD ]}t|||dd�\}}t ||d¡}t|||| j| jdƒ qd S ©NrU   Úeconomicr   Frh   rj   rm   r   r   r   Útest_economic_1_rowÉ   s   ýz BaseQRdelete.test_economic_1_rowc           	      C   sr   |   dd¡\}}}t|jd | ƒD ]$}t||||dd�\}}t |t||| ƒd¡}t|||| j| j	dƒ qd S r�   rv   )	rM   ry   r   r&   r'   rn   ro   rp   rq   r   r   r   Úbase_economic_p_row_xxxÕ   s   ýz$BaseQRdelete.base_economic_p_row_xxxc                 C   ó   |   d¡ d S ©Nr)   ©r“   rL   r   r   r   Útest_economic_p_row_economicÜ   ó   z)BaseQRdelete.test_economic_p_row_economicc                 C   r”   ©Nr,   r–   rL   r   r   r   Útest_economic_p_row_sqrà   r˜   z$BaseQRdelete.test_economic_p_row_sqrc                 C   r”   ©Nr*   r–   rL   r   r   r   Útest_economic_p_row_fatä   r˜   z$BaseQRdelete.test_economic_p_row_fatc                 C   sd   |   dd¡\}}}t|jd ƒD ]}t|||ddd�\}}t ||d¡}t|||| j| jdƒ qd S )NrU   r‘   r   r}   Fr~   rj   r€   r   r   r   Útest_economic_1_colè   s   ýz BaseQRdelete.test_economic_1_colc           	   
   C   s„   |   dd¡\}}}tddƒD ]1}t|jd | ƒD ]%}t||||ddd�\}}t |t||| ƒd¡}t|||| j| j	dƒ qqd S )	NrU   r‘   r   ru   r   r}   Fr~   rv   r„   r   r   r   Útest_economic_p_colï   s   
ÿüÿz BaseQRdelete.test_economic_p_colc                 C   rg   )NrW   r   Frh   rj   rm   r   r   r   Útest_Mx1_1_rowø   rs   zBaseQRdelete.test_Mx1_1_rowc           	   	   C   rt   )NrW   r   ru   r   Frh   rv   rx   r   r   r   Útest_Mx1_p_rowÿ   r{   zBaseQRdelete.test_Mx1_p_rowc                 C   r|   )NrX   r   r}   Fr~   rj   r€   r   r   r   Útest_1xN_1_col  r‚   zBaseQRdelete.test_1xN_1_colc           	   
   C   rƒ   )NrX   r   ru   r   r}   Fr~   rv   r„   r   r   r   Útest_1xN_p_col  r†   zBaseQRdelete.test_1xN_p_colc                 C   r�   )NrW   r‘   r   Frh   rj   rm   r   r   r   Útest_Mx1_economic_1_row  s   ýz$BaseQRdelete.test_Mx1_economic_1_rowc           	   	   C   s‚   |   dd¡\}}}tddƒD ]0}t|jd | ƒD ]$}t||||dd�\}}t |t||| ƒd¡}t|||| j| j	dƒ qqd S )NrW   r‘   r   ru   r   Frh   rv   rx   r   r   r   Útest_Mx1_economic_p_row  s   ýÿz$BaseQRdelete.test_Mx1_economic_p_rowc                 C   s^   |   d¡\}}}t||dddƒ\}}t|tjd|jd�ƒ t|tjd|jd f|jd�ƒ d S )NrX   r   r   rn   ©r   r   ©r   r   )ra   r   r   r   Úndarrayr   r   ©rM   r   r&   r'   ro   rp   r   r   r   Útest_delete_last_1_row&  s   $z#BaseQRdelete.test_delete_last_1_rowc                 C   sÈ   |   dd¡\}}}t||d|jd dƒ\}}t|tjd|jd�ƒ t|tjd|jd f|jd�ƒ |   dd¡\}}}t||d|jd dƒ\}}t|tjd|jd�ƒ t|tjd|jd f|jd�ƒ d S )	NrU   rO   r   rn   r¥   r¦   r   r‘   )ra   r   r   r   r   r§   r   r¨   r   r   r   Útest_delete_last_p_row-  s    $z#BaseQRdelete.test_delete_last_p_rowc                 C   sÎ   |   dd¡\}}}t||dddƒ\}}t|tj|jd df|jd�ƒ t|tjd|jd�ƒ |   dd¡\}}}t||dddƒ\}}t|ƒ t|j|jkƒ t|j|jkƒ t|tj|jd df|jd�ƒ d S )	NrW   r‘   r   r   r}   r¦   r¥   rO   )	ra   r   r   r   r§   r   r   r    r   r¨   r   r   r   Útest_delete_last_1_col8  s    $z#BaseQRdelete.test_delete_last_1_colc                 C   sÚ   |   dd¡\}}}t||d|jd dƒ\}}t|ƒ t|j|jkƒ t|j|jkƒ t|tj|jd df|jd�ƒ |   dd¡\}}}t||d|jd dƒ\}}t|tj|jd df|jd�ƒ t|tjd|jd�ƒ d S )	NrU   rO   r   r   r}   r¦   r‘   r¥   )	ra   r   r   r    r   r   r   r   r§   r¨   r   r   r   Útest_delete_last_p_colE  s     z#BaseQRdelete.test_delete_last_p_colc                 C   sÊ   |   d¡\}}}t||dddƒ\}}t|tjd|jd�ƒ t|tjd|jd f|jd�ƒ |   d¡\}}}t||dddƒ\}}t|ƒ t|j|jkƒ t|j|jkƒ t|tj|jd df|jd�ƒ d S )NrY   r   r   rn   r¥   r¦   r}   )	ra   r   r   r   r§   r   r   r    r   r¨   r   r   r   Útest_delete_1x1_row_colR  s    $z$BaseQRdelete.test_delete_1x1_row_colc                 C   sú  |dkrt |d ƒt |d ƒf}t |d ƒt d ƒf}nt d ƒt d ƒf}t d ƒt d | ƒf}t g d¢|¡D �]G\}}	|  |¡\}
}}|||fƒ\}}|dkrYt |
|	|dkrUdnd¡}n-t |	|	| ƒ}|	dk ryt |	|	| |dkrr|
jd n|
jd  ƒ}t |
||dkrƒdnd¡}| d¡}| d¡}t|||	||dƒ\}}t	|||| j
| jƒ t|||	||dƒ\}}t	|||| j
| jƒ |rÔt||| | j
| jd� t||| | j
| jd� | d¡}| d¡}t|||	||dƒ\}}t	|||| j
| jƒ t|||	||dƒ\}}t	|||| j
| jƒ |�r#t||| | j
| jd� t||| | j
| jd� | d¡}| d¡}|||fƒ\}}t|||	||dƒ\}}t	|||| j
| jƒ t|||	||dƒ\}}t	|||| j
| jƒ |�rzt||| | j
| jd� t||| | j
| jd� q2d S )	Nrn   ©rT   rU   rV   r   r   ÚFFTr   )rw   Ú	itertoolsÚproductra   r   rl   r   Úcopyr   r(   r   r   r   )rM   Úadjust_stridesÚksÚpr   ÚoverwriteableÚqindÚrindr_   r5   r   Úq0Úr0ÚqsÚrsrq   r7   r&   r'   ro   rp   Úq1oÚr1oÚq2Úr2Úq2oÚr2oÚq3Úr3Úq3oÚr3or   r   r   Úbase_non_simple_stridese  s\   
ÿ





€Òz$BaseQRdelete.base_non_simple_stridesc                 C   ó   |   tdgddd¡ d S )Nr   r   rn   T©rÇ   r;   rL   r   r   r   Útest_non_unit_strides_1_rowž  ó   z(BaseQRdelete.test_non_unit_strides_1_rowc                 C   rÈ   )Nr   r)   rn   TrÉ   rL   r   r   r   Útest_non_unit_strides_p_row¡  rË   z(BaseQRdelete.test_non_unit_strides_p_rowc                 C   rÈ   )Nr   r   r}   TrÉ   rL   r   r   r   Útest_non_unit_strides_1_col¤  rË   z(BaseQRdelete.test_non_unit_strides_1_colc                 C   rÈ   ©Nr   r)   r}   FrÉ   rL   r   r   r   Útest_non_unit_strides_p_col§  rË   z(BaseQRdelete.test_non_unit_strides_p_colc                 C   rÈ   ©Nr   r   rn   F©rÇ   r>   rL   r   r   r   Útest_neg_strides_1_rowª  rË   z#BaseQRdelete.test_neg_strides_1_rowc                 C   rÈ   ©Nr   r)   rn   FrÑ   rL   r   r   r   Útest_neg_strides_p_row­  rË   z#BaseQRdelete.test_neg_strides_p_rowc                 C   rÈ   ©Nr   r   r}   FrÑ   rL   r   r   r   Útest_neg_strides_1_col°  rË   z#BaseQRdelete.test_neg_strides_1_colc                 C   rÈ   rÎ   rÑ   rL   r   r   r   Útest_neg_strides_p_col³  rË   z#BaseQRdelete.test_neg_strides_p_colc                 C   rÈ   rÐ   ©rÇ   rE   rL   r   r   r   Útest_non_itemize_strides_1_row¶  rË   z+BaseQRdelete.test_non_itemize_strides_1_rowc                 C   rÈ   rÓ   rØ   rL   r   r   r   Útest_non_itemize_strides_p_row¹  rË   z+BaseQRdelete.test_non_itemize_strides_p_rowc                 C   rÈ   rÕ   rØ   rL   r   r   r   Útest_non_itemize_strides_1_col¼  rË   z+BaseQRdelete.test_non_itemize_strides_1_colc                 C   rÈ   rÎ   rØ   rL   r   r   r   Útest_non_itemize_strides_p_col¿  rË   z+BaseQRdelete.test_non_itemize_strides_p_colc                 C   rÈ   rÐ   ©rÇ   rJ   rL   r   r   r   Ú test_non_native_byte_order_1_rowÂ  rË   z-BaseQRdelete.test_non_native_byte_order_1_rowc                 C   rÈ   rÓ   rÝ   rL   r   r   r   Ú test_non_native_byte_order_p_rowÅ  rË   z-BaseQRdelete.test_non_native_byte_order_p_rowc                 C   rÈ   rÕ   rÝ   rL   r   r   r   Ú test_non_native_byte_order_1_colÈ  rË   z-BaseQRdelete.test_non_native_byte_order_1_colc                 C   rÈ   rÎ   rÝ   rL   r   r   r   Ú test_non_native_byte_order_p_colË  rË   z-BaseQRdelete.test_non_native_byte_order_p_colc           
   	   C   sÈ   |   d¡\}}}t ddgddgddg¡D ]L\}}}t|||||dd	�\}}|dkrAt |t||jd
  || |jd
  ƒd
¡}	nt |t||jd
  || |jd  ƒd¡}	t|||	| j	| j
ƒ qd S )NrT   éýÿÿÿiùÿÿÿr   r)   rn   r}   Frh   r   )ra   r°   r±   r   r   rl   rw   r   r(   r   r   )
rM   r   r&   r'   r5   rµ   Úwro   rp   rq   r   r   r   Ú
test_neg_kÎ  s   $.,úzBaseQRdelete.test_neg_krO   c                 C   s  |dkrdnd}|dkr t |d ƒt |d ƒf}t |d ƒt d ƒf}nt d ƒt d ƒf}t d ƒt d | ƒf}|  d|¡\}	}
}|dkrMt |	d|dkrIdnd¡}nt |	t dd| ƒ|dkr\dnd¡}|
 d	¡}| d	¡}t||d||dƒ\}}t|||| j| j|ƒ t|||	| j| j|ƒ |rÄ|
 d	¡}| d	¡}t||d||dƒ\}}t|||| j| j|ƒ t	||| | j| jd
� t	||| | j| jd
� |�r|
 d¡}| d¡}t||d||dƒ\}}t|||| j| j|ƒ t	||| | j| jd
� t	||| | j| jd
� d S d S )NrO   TFrn   rT   r   r)   r   r¯   r   ÚC)
rw   ra   r   rl   r²   r   r(   r   r   r   )rM   r   rµ   Útest_CÚtest_Fr[   r   r·   r¸   r   r¹   rº   rq   r&   r'   ro   rp   r¿   rÀ   rÃ   rÄ   r   r   r   Úbase_overwrite_qrØ  s<   $





úzBaseQRdelete.base_overwrite_qrc                 C   ó   |   dddd¡ d S )Nrn   r   T©rè   rL   r   r   r   Útest_overwrite_qr_1_rowþ  ó   z$BaseQRdelete.test_overwrite_qr_1_rowc                 C   ó   |   ddddd¡ d S )Nrn   r   Tr‘   rê   rL   r   r   r   Ú test_overwrite_economic_qr_1_row  ó   z-BaseQRdelete.test_overwrite_economic_qr_1_rowc                 C   ré   )Nr}   r   Trê   rL   r   r   r   Útest_overwrite_qr_1_col  ó   z$BaseQRdelete.test_overwrite_qr_1_colc                 C   ré   )Nrn   r)   Trê   rL   r   r   r   Útest_overwrite_qr_p_row  rì   z$BaseQRdelete.test_overwrite_qr_p_rowc                 C   rí   )Nrn   r)   Tr‘   rê   rL   r   r   r   Ú test_overwrite_economic_qr_p_row  rï   z-BaseQRdelete.test_overwrite_economic_qr_p_rowc                 C   s   |   dddd¡ d S )Nr}   r)   FTrê   rL   r   r   r   Útest_overwrite_qr_p_col  rñ   z$BaseQRdelete.test_overwrite_qr_p_colc                 C   s(   |   d¡\}}}ttt||ddd� d S )NrT   r   Úfoo©r   ©ra   Úassert_raisesr0   r   ©rM   r   r&   r'   r   r   r   Útest_bad_which  s   zBaseQRdelete.test_bad_whichc                 C   s„   |   d¡\}}}ttt|||jd dƒ ttt|||jd  d dƒ ttt|||jd ddƒ ttt|||jd  d ddƒ d S )NrU   r   r   r}   ©ra   rø   r0   r   r   rù   r   r   r   Ú
test_bad_k  s
   $zBaseQRdelete.test_bad_kc                 C   sš   |   d¡\}}}ttt||ddƒ ttt||dddƒ ttt||ddƒ ttt||dddƒ ttt||d|jd d ƒ ttt||d|jd d dƒ d S )NrU   r   r!   r}   r)   r   r   rû   rù   r   r   r   Ú
test_bad_p#  s   "zBaseQRdelete.test_bad_pc                 C   s,   |   d¡\}}}tttt g ¡|ddƒ d S ©NrU   r   r   ©ra   rø   r0   r   r   Úarrayrù   r   r   r   Útest_empty_q1  ó   zBaseQRdelete.test_empty_qc                 C   s,   |   d¡\}}}ttt|t g ¡ddƒ d S rþ   rÿ   rù   r   r   r   Útest_empty_r6  r  zBaseQRdelete.test_empty_rc                 C   s2   |   d¡\}}}|dd … }ttt||ddƒ d S )NrU   r   r   r÷   rù   r   r   r   Útest_mismatched_q_and_r;  s   z$BaseQRdelete.test_mismatched_q_and_rc              	   C   s
  g d¢}|   d¡\}}}|D ]t}|j |¡}tjdd�� |j |¡}W d   ƒ n1 s-w   Y  ttt||dddƒ ttt||dddƒ ttt||ddd	ƒ ttt||ddd	ƒ ttt||dddƒ ttt||dddƒ ttt||ddd	ƒ ttt||ddd	ƒ qd S )
N©Úint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64Úfloat16Ú
longdoubleÚclongdoubleÚboolrU   Úignore©Úinvalidr   r   rn   r   r}   )ra   ÚrealrF   r   Úerrstaterø   r0   r   )rM   Údtsr   r¹   rº   r   r&   r'   r   r   r   Útest_unsupported_dtypes@  s    ÿôz$BaseQRdelete.test_unsupported_dtypesc                 C   sÜ   |   d¡\}}}| d¡}tj|d< ttt||dddƒ ttt||dddƒ ttt||dddƒ ttt||dddƒ | d¡}tj|d< ttt||dddƒ ttt||dddƒ ttt||dddƒ ttt||dddƒ d S )	NrU   r¯   rS   r   r   rn   r)   r}   )ra   r²   r   Únanrø   r0   r   )rM   Úa0r¹   rº   r&   r'   r   r   r   Útest_check_finiteT  s   



zBaseQRdelete.test_check_finitec                 C   st   |   d¡\}}}ttt|d |dddƒ ttt||d dddƒ ttt|d |dddƒ ttt||d dddƒ d S )NrY   r¥   r   r   rn   r}   r÷   rù   r   r   r   Útest_qr_scalare  s
   zBaseQRdelete.test_qr_scalarNrb   )Crc   rd   re   rr   rz   r�   r…   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r’   r“   r—   rš   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¤   r©   rª   r«   r¬   r­   rÇ   rÊ   rÌ   rÍ   rÏ   rÒ   rÔ   rÖ   r×   rÙ   rÚ   rÛ   rÜ   rÞ   rß   rà   rá   rä   rè   rë   rî   rð   rò   ró   rô   rú   rü   rý   r  r  r  r  r  r  r   r   r   r   rf   k   s‚    					9

&rf   c                   @   ó   e Zd Ze d¡ZdS )ÚTestQRdelete_fÚfN©rc   rd   re   r   r   r   r   r   r   r  l  ó    r  c                   @   r  )ÚTestQRdelete_Fr¯   Nr   r   r   r   r   r"  o  r!  r"  c                   @   r  )ÚTestQRdelete_dÚdNr   r   r   r   r   r#  r  r!  r#  c                   @   r  )ÚTestQRdelete_DÚDNr   r   r   r   r   r%  u  r!  r%  c                       s.  e Zd ZdŠ‡ f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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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Z d@dA„ Z!dBdC„ Z"dDdE„ Z#dFdG„ Z$dHdI„ Z%dJdK„ Z&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdS„ Z*dTdU„ Z+dVdW„ Z,dXdY„ Z-dZd[„ Z.d\d]„ Z/d^d_„ Z0d`da„ Z1dbdc„ Z2ddde„ Z3dfdg„ Z4dhdi„ Z5djdk„ Z6dldm„ Z7dndo„ Z8dpdq„ Z9drds„ Z:dtdu„ Z;dvdw„ Z<dxdy„ Z=dzd{„ Z>d|d}„ Z?d~d„ Z@d€d�„ ZAd‚dƒ„ ZBd„d…„ ZCd†d‡„ ZDdˆd‰„ ZE‡  ZFS )‹ÚBaseQRinsertrO   rn   r   c                    sæ   t ƒ  ||¡\}}}t|dkƒ tj d¡}|dkr2|dkr'| |jd ¡}	n+| ||jd f¡}	n |dkrN|dkrC| |jd ¡}	n| |jd |f¡}	ntdƒ t | j	 
d¡¡rg| |	j¡}
|	d|
  }	|	 | j	¡}	||||	fS )Nr   iÒ  rn   r   r}   z%which should be either "row" or "col"rZ   )Úsuperra   r   r   r\   ÚRandomStater   r0   r^   r   r_   rF   )rM   r_   r[   r   rµ   r   r&   r'   ÚrngÚur=   ©Ú	__class__r   r   ra   y  s"   zBaseQRinsert.generatec           	      C   óh   | j ddd�\}}}}t|jd d ƒD ]}t||||ƒ\}}t |||d¡}t|||| j| jƒ qd S )NrT   rn   rö   r   r   ©	ra   rk   r   r	   r   Úinsertr(   r   r   ©	rM   r   r&   r'   r+  rn   ro   rp   rq   r   r   r   rr   ”  ó   ýzBaseQRinsert.test_sqr_1_rowc           	   	   C   óv   | j dddd�\}}}}t|jd d ƒD ]#}t||||ƒ\}}t |t d|tj¡|d¡}t|||| j	| j
ƒ qd S )NrT   rn   r)   ©r   rµ   r   r   ©ra   rk   r   r	   r   r0  rO   Úintpr(   r   r   r1  r   r   r   rz   ›  ó   ýzBaseQRinsert.test_sqr_p_rowc           	   	   C   ón   | j ddd�\}}}}t|jd d ƒD ] }t||||ddd�\}}t |||d¡}t|||| j| jƒ qd S )NrT   r}   rö   r   F©Úoverwrite_qrur/  ©	rM   r   r&   r'   r+  r}   ro   rp   rq   r   r   r   r�   £  ó   ýzBaseQRinsert.test_sqr_1_colc           	   	   C   ó|   | j dddd�\}}}}t|jd d ƒD ]&}t||||ddd�\}}t |t d|tj¡|d¡}t|||| j	| j
ƒ qd S )NrT   r}   r)   r4  r   Fr9  r5  r;  r   r   r   r…   ª  ó   ýzBaseQRinsert.test_sqr_p_colc           	      C   r.  )NrU   rn   rö   r   r   r/  r1  r   r   r   r‡   ²  r2  zBaseQRinsert.test_tall_1_rowc           	   	   C   r3  )NrU   rn   r)   r4  r   r   r5  r1  r   r   r   rˆ   ¹  r7  zBaseQRinsert.test_tall_p_rowc           	   	   C   r8  )NrU   r}   rö   r   Fr9  r/  r;  r   r   r   r‰   Á  r<  zBaseQRinsert.test_tall_1_colc           
   	   C   s|   | j dd|d�\}}}}t|jd d ƒD ]&}t||||ddd�\}}t |t ||tj¡|d¡}	t|||	| j	| j
ƒ qd S )NrU   r}   r4  r   Fr9  r5  ©
rM   rµ   r   r&   r'   r+  r}   ro   rp   rq   r   r   r   Úbase_tall_p_col_xxxÌ  ó   ýz BaseQRinsert.base_tall_p_col_xxxc                 C   r”   r•   ©r@  rL   r   r   r   Útest_tall_p_col_tallÓ  r˜   z!BaseQRinsert.test_tall_p_col_tallc                 C   r”   r™   rB  rL   r   r   r   Útest_tall_p_col_sqr×  r˜   z BaseQRinsert.test_tall_p_col_sqrc                 C   r”   r›   rB  rL   r   r   r   Útest_tall_p_col_fatÛ  r˜   z BaseQRinsert.test_tall_p_col_fatc           	      C   r.  )NrV   rn   rö   r   r   r/  r1  r   r   r   r‹   ß  r2  zBaseQRinsert.test_fat_1_rowc           
   	   C   sv   | j dd|d�\}}}}t|jd d ƒD ]#}t||||ƒ\}}t |t ||tj¡|d¡}	t|||	| j	| j
ƒ qd S )NrV   rn   r4  r   r   r5  )
rM   rµ   r   r&   r'   r+  rn   ro   rp   rq   r   r   r   Úbase_fat_p_row_xxxê  ó   ýzBaseQRinsert.base_fat_p_row_xxxc                 C   r”   r•   ©rF  rL   r   r   r   Útest_fat_p_row_fatñ  r˜   zBaseQRinsert.test_fat_p_row_fatc                 C   r”   r™   rH  rL   r   r   r   Útest_fat_p_row_sqrõ  r˜   zBaseQRinsert.test_fat_p_row_sqrc                 C   r”   r›   rH  rL   r   r   r   Útest_fat_p_row_tallù  r˜   z BaseQRinsert.test_fat_p_row_tallc           	   	   C   r8  )NrV   r}   rö   r   Fr9  r/  r;  r   r   r   r�   ý  r<  zBaseQRinsert.test_fat_1_colc           	   	   C   r=  )NrV   r}   r)   r4  r   Fr9  r5  r;  r   r   r   rŽ     r>  zBaseQRinsert.test_fat_p_colc           	      C   sn   |   ddd¡\}}}}t|jd d ƒD ] }t||||dd�\}}t |||d¡}t|||| j| jdƒ qd S )NrU   r‘   rn   r   r   Fr9  r/  r1  r   r   r   r’     s   ýz BaseQRinsert.test_economic_1_rowc           	   	   C   s|   |   dddd¡\}}}}t|jd d ƒD ]&}t||||dd�\}}t |t d|tj¡|d¡}t|||| j	| j
dƒ qd S )	NrU   r‘   rn   r)   r   r   Fr9  r5  r1  r   r   r   Útest_economic_p_row  s   ýz BaseQRinsert.test_economic_p_rowc           	   	   C   sv   | j dddd�\}}}}t|jd d ƒD ]#}t||| ¡ |ddd�\}}t |||d¡}t|||| j| j	dƒ qd S )NrU   r‘   r}   rö   r   Fr9  )
ra   rk   r   r	   r²   r   r0  r(   r   r   r;  r   r   r   r�     s   ýz BaseQRinsert.test_economic_1_colc                 C   sN   t jdd| jd�}t jd| jd�}t  g d¢| j¡}ttjt|||ddƒ d S )Nr,   r)   )r   )r   r   r   r   r   r   r}   )r   r   r   r   rø   r   ÚLinAlgErrorr	   )rM   r&   r'   r+  r   r   r   Útest_economic_1_col_bad_update"  s   z+BaseQRinsert.test_economic_1_col_bad_updatec           
   	   C   s€   | j ddd|d�\}}}}t|jd d ƒD ]'}t||||ddd�\}}t |t ||tj¡|d¡}	t|||	| j	| j
dƒ qd S )NrU   r‘   r}   r4  r   Fr9  r5  r?  r   r   r   Úbase_economic_p_col_xxx.  s   ýz$BaseQRinsert.base_economic_p_col_xxxc                 C   r”   r•   ©rO  rL   r   r   r   Útest_economic_p_col_eco5  r˜   z$BaseQRinsert.test_economic_p_col_ecoc                 C   r”   r™   rP  rL   r   r   r   Útest_economic_p_col_sqr9  r˜   z$BaseQRinsert.test_economic_p_col_sqrc                 C   r”   r›   rP  rL   r   r   r   Útest_economic_p_col_fat=  r˜   z$BaseQRinsert.test_economic_p_col_fatc           	      C   r.  )NrW   rn   rö   r   r   r/  r1  r   r   r   rŸ   A  r2  zBaseQRinsert.test_Mx1_1_rowc           	   	   C   r3  )NrW   rn   r)   r4  r   r   r5  r1  r   r   r   r    H  rG  zBaseQRinsert.test_Mx1_p_rowc           	   	   C   r8  )NrW   r}   rö   r   Fr9  r/  r;  r   r   r   Útest_Mx1_1_colO  r<  zBaseQRinsert.test_Mx1_1_colc           	   	   C   r=  )NrW   r}   r)   r4  r   Fr9  r5  r;  r   r   r   Útest_Mx1_p_colV  rA  zBaseQRinsert.test_Mx1_p_colc           	      C   sj   |   ddd¡\}}}}t|jd d ƒD ]}t||||ƒ\}}t |||d¡}t|||| j| jdƒ qd S )NrW   r‘   rn   r   r   Fr/  r1  r   r   r   r£   ]  s   ýz$BaseQRinsert.test_Mx1_economic_1_rowc           	   	   C   sx   |   dddd¡\}}}}t|jd d ƒD ]$}t||||ƒ\}}t |t d|tj¡|d¡}t|||| j	| j
dƒ qd S )NrW   r‘   rn   r)   r   r   Fr5  r1  r   r   r   r¤   d  s   ýz$BaseQRinsert.test_Mx1_economic_p_rowc           	   	   C   sp   |   ddd¡\}}}}t|jd d ƒD ]!}t||||ddd�\}}t |||d¡}t|||| j| jdƒ qd S )NrW   r‘   r}   r   Fr9  r/  r;  r   r   r   Útest_Mx1_economic_1_colk  s   ýz$BaseQRinsert.test_Mx1_economic_1_colc           	   	   C   s~   |   dddd¡\}}}}t|jd d ƒD ]'}t||||ddd�\}}t |t d|tj¡|d¡}t|||| j	| j
dƒ qd S )NrW   r‘   r}   r)   r   Fr9  r5  r;  r   r   r   Útest_Mx1_economic_p_colr  s   ýz$BaseQRinsert.test_Mx1_economic_p_colc           	      C   r.  )NrX   rn   rö   r   r   r/  r1  r   r   r   Útest_1xN_1_rowy  r2  zBaseQRinsert.test_1xN_1_rowc           	   	   C   r3  )NrX   rn   r)   r4  r   r   r5  r1  r   r   r   Útest_1xN_p_row€  rG  zBaseQRinsert.test_1xN_p_rowc           	   	   C   r8  )NrX   r}   rö   r   Fr9  r/  r;  r   r   r   r¡   ‡  r<  zBaseQRinsert.test_1xN_1_colc           	   	   C   r=  )NrX   r}   r)   r4  r   Fr9  r5  r;  r   r   r   r¢   Ž  rA  zBaseQRinsert.test_1xN_p_colc           	      C   r.  )NrY   rn   rö   r   r   r/  r1  r   r   r   Útest_1x1_1_row•  r2  zBaseQRinsert.test_1x1_1_rowc           	   	   C   r3  )NrY   rn   r)   r4  r   r   r5  r1  r   r   r   Útest_1x1_p_rowœ  rG  zBaseQRinsert.test_1x1_p_rowc           	   	   C   r8  )NrY   r}   rö   r   Fr9  r/  r;  r   r   r   Útest_1x1_1_col£  r<  zBaseQRinsert.test_1x1_1_colc           	   	   C   r=  )NrY   r}   r)   r4  r   Fr9  r5  r;  r   r   r   Útest_1x1_p_colª  rA  zBaseQRinsert.test_1x1_p_colc                 C   sª   | j ddd�\}}}}ttt|d ||ddƒ ttt||d |ddƒ ttt|||d ddƒ ttt|d ||ddƒ ttt||d |ddƒ ttt|||d ddƒ d S )NrY   rn   rö   r¥   r   r}   ©ra   rø   r0   r	   ©rM   r   r&   r'   r+  r   r   r   Útest_1x1_1_scalar±  s   zBaseQRinsert.test_1x1_1_scalarc           !   	   C   s‚  dD �];}| j |||d�\}}}}	||||	fƒ\}
}}|dkr.t |||	|dkr*dnd¡}nt |t ||tj¡|dkr>|	n|	|dkrEdnd¡}| d¡}| d¡}|	 d¡}t|
||||dd�\}}t|||| j| j	ƒ t|
||||d	d�\}}t|||| j| j	ƒ | d¡}| d¡}|	 d¡}t|||||dd�\}}t|||| j| j	ƒ t|||||d	d�\}}t|||| j| j	ƒ | d¡}| d¡}|	 d¡}t|||||dd�\}}t|||| j| j	ƒ t|||||d	d�\}}t|||| j| j	ƒ | d¡}| d¡}|	 d¡}||||fƒ\}
}}t|
||||dd�\}}t|||| j| j	ƒ t|
||||d	d�\}} t|| || j| j	ƒ qd S )
Nr®   r4  r   rn   r   r¯   Fr9  T)
ra   r   r0  rO   r6  r²   r	   r(   r   r   )!rM   r³   r5   rµ   r   r_   r   r¹   rº   Úu0r»   r¼   ÚusÚair&   r'   r+  ro   rp   r½   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   Úq5Úr5Úq5oÚr5or   r   r   rÇ   »  sN   
þ
	










Ñz$BaseQRinsert.base_non_simple_stridesc                 C   ó   |   tddd¡ d S ©Nr   r   rn   rÉ   rL   r   r   r   rÊ   í  ó   z(BaseQRinsert.test_non_unit_strides_1_rowc                 C   rh  ©Nr   r)   rn   rÉ   rL   r   r   r   rÌ   ð  rj  z(BaseQRinsert.test_non_unit_strides_p_rowc                 C   rh  ©Nr   r   r}   rÉ   rL   r   r   r   rÍ   ó  rj  z(BaseQRinsert.test_non_unit_strides_1_colc                 C   rh  ©Nr   r)   r}   rÉ   rL   r   r   r   rÏ   ö  rj  z(BaseQRinsert.test_non_unit_strides_p_colc                 C   rh  ri  rÑ   rL   r   r   r   rÒ   ù  rj  z#BaseQRinsert.test_neg_strides_1_rowc                 C   rh  rk  rÑ   rL   r   r   r   rÔ   ü  rj  z#BaseQRinsert.test_neg_strides_p_rowc                 C   rh  rl  rÑ   rL   r   r   r   rÖ   ÿ  rj  z#BaseQRinsert.test_neg_strides_1_colc                 C   rh  rm  rÑ   rL   r   r   r   r×     rj  z#BaseQRinsert.test_neg_strides_p_colc                 C   rh  ri  rØ   rL   r   r   r   Útest_non_itemsize_strides_1_row  rj  z,BaseQRinsert.test_non_itemsize_strides_1_rowc                 C   rh  rk  rØ   rL   r   r   r   Útest_non_itemsize_strides_p_row  rj  z,BaseQRinsert.test_non_itemsize_strides_p_rowc                 C   rh  rl  rØ   rL   r   r   r   Útest_non_itemsize_strides_1_col  rj  z,BaseQRinsert.test_non_itemsize_strides_1_colc                 C   rh  rm  rØ   rL   r   r   r   Útest_non_itemsize_strides_p_col  rj  z,BaseQRinsert.test_non_itemsize_strides_p_colc                 C   rh  ri  rÝ   rL   r   r   r   rÞ     rj  z-BaseQRinsert.test_non_native_byte_order_1_rowc                 C   rh  rk  rÝ   rL   r   r   r   rß     rj  z-BaseQRinsert.test_non_native_byte_order_p_rowc                 C   rh  rl  rÝ   rL   r   r   r   rà     rj  z-BaseQRinsert.test_non_native_byte_order_1_colc                 C   rh  rm  rÝ   rL   r   r   r   rá     rj  z-BaseQRinsert.test_non_native_byte_order_p_colc                 C   sf  | j dddd�\}}}}| d¡}| ¡ }t|||dddd�\}}t |d|d¡}	t|||	| j| jƒ t|||| j| jƒ t|||ddd	d�\}
}t|
||	| j| jƒ t|
|| j| jd
� t|| 	¡ | j| jƒ | d¡}| ¡ }t|||dddd�\}}t|||	| j| jƒ t|||| j| jƒ t|||ddd	d�\}}t|||	| j| jƒ t||| j| jd
� d S )NrT   r}   r   r4  rå   r   Fr9  Tr   r¯   )
ra   r²   r	   r   r0  r(   r   r   r   r   )rM   r   r¹   r'   r+  r&   ra  ro   rp   rq   r¿   rÀ   ÚqFÚu1rÃ   rÄ   Úq4Úr4r   r   r   Útest_overwrite_qu_rank_1  s&   

z%BaseQRinsert.test_overwrite_qu_rank_1c                 C   sÀ   | j dddd�\}}}}| d¡}t |t dtj¡|d¡}t|||dddd	�\}}t|||| j| j	ƒ t|||| j| j	ƒ t|||ddd
d	�\}	}
t|	|
|| j| j	ƒ t
|	|| j| j	d� d S )NrT   r}   r)   r4  r¯   r   r   Fr9  Tr   )ra   r²   r   r0  r/   r6  r	   r(   r   r   r   )rM   r   r¹   r'   r+  r&   rq   ro   rp   r¿   rÀ   r   r   r   Útest_overwrite_qu_rank_p>  s   
z%BaseQRinsert.test_overwrite_qu_rank_pc                 C   s¶   | j ddd�\}}}}tttt g ¡||ddƒ ttt|t g ¡|ddƒ ttt||t g ¡ddƒ tttt g ¡||ddƒ ttt|t g ¡|ddƒ ttt||t g ¡ddƒ d S )NrT   rn   rö   r   r}   )ra   rø   r0   r	   r   r   r_  r   r   r   Útest_empty_inputsP  s   zBaseQRinsert.test_empty_inputsc                 C   sÂ   | j ddd�\}}}}ttt||dd … |ddƒ ttt|d d… ||ddƒ ttt|||dd … ddƒ ttt||dd … |ddƒ ttt|d d… ||ddƒ ttt|||dd … ddƒ d S )NrU   rn   rö   r   r   éþÿÿÿr}   r^  r_  r   r   r   Útest_mismatched_shapesY  s    z#BaseQRinsert.test_mismatched_shapesc           
   	   C   sô   g d¢}| j ddd�\}}}}|D ]f}|j |¡}tjdd�� |j |¡}W d   ƒ n1 s0w   Y  |j |¡}	ttt|||ddƒ ttt|||ddƒ ttt|||ddƒ ttt|||ddƒ ttt|||	ddƒ ttt|||	ddƒ qd S )	Nr  rT   rn   rö   r  r  r   r}   )ra   r  rF   r   r  rø   r0   r	   )
rM   r  r   r¹   rº   ra  r   r&   r'   r+  r   r   r   r  b  s   ÿöz$BaseQRinsert.test_unsupported_dtypesc                 C   s�  | j dddd�\}}}}| d¡}tj|d< ttt|||d d …df ddƒ ttt|||ddƒ ttt|||d d …df ddƒ ttt|||ddƒ | d¡}tj|d< ttt|||d d …df ddƒ ttt|||ddƒ ttt|||d d …df ddƒ ttt|||ddƒ | d¡}tj|d	< ttt|||d d …df ddƒ ttt|||ddƒ ttt|||d d …df ddƒ ttt|||ddƒ d S )
NrT   rn   r)   r4  r¯   rS   r   r}   r¥   )ra   r²   r   r  rø   r0   r	   )rM   r  r¹   rº   ra  r&   r'   r+  r   r   r   r  t  s&   

  

  

  zBaseQRinsert.test_check_finite)rO   rn   r   )Grc   rd   re   ra   rr   rz   r�   r…   r‡   rˆ   r‰   r@  rC  rD  rE  r‹   rF  rI  rJ  rK  r�   rŽ   r’   rL  r�   rN  rO  rQ  rR  rS  rŸ   r    rT  rU  r£   r¤   rV  rW  rX  rY  r¡   r¢   rZ  r[  r\  r]  r`  rÇ   rÊ   rÌ   rÍ   rÏ   rÒ   rÔ   rÖ   r×   rn  ro  rp  rq  rÞ   rß   rà   rá   rv  rw  rx  rz  r  r  Ú__classcell__r   r   r,  r   r'  x  sˆ    
2!		r'  c                   @   r  )ÚTestQRinsert_fr  Nr   r   r   r   r   r|  Œ  r!  r|  c                   @   r  )ÚTestQRinsert_Fr¯   Nr   r   r   r   r   r}  �  r!  r}  c                   @   r  )ÚTestQRinsert_dr$  Nr   r   r   r   r   r~  ’  r!  r~  c                   @   r  )ÚTestQRinsert_Dr&  Nr   r   r   r   r   r  •  r!  r  c                       s~  e Zd Zd]‡ f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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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Z d?d@„ Z!dAdB„ Z"dCdD„ Z#dEdF„ Z$dGdH„ Z%dIdJ„ Z&dKdL„ Z'dMdN„ Z(dOdP„ Z)dQdR„ Z*dSdT„ Z+dUdV„ Z,dWdX„ Z-dYdZ„ Z.d[d\„ Z/‡  Z0S )^ÚBaseQRupdaterO   r   c                    sÚ   t ƒ  ||¡\}}}|dkr!tj |jd ¡}tj |jd ¡}ntj |jd |f¡}tj |jd |f¡}t | j d¡¡rZtj |j¡}	|d|	  }tj |j¡}
|d|
  }| | j¡}| | j¡}|||||fS )Nr   r   rZ   )	r(  ra   r   r\   r   r^   r   r_   rF   )rM   r_   r[   rµ   r   r&   r'   r+  Úvr=   rD   r,  r   r   ra   ™  s   zBaseQRupdate.generatec           	      C   óT   |   d¡\}}}}}t||||dƒ\}}|t || ¡ ¡ }t|||| j| jƒ d S )NrT   F©ra   r   r   Úouterr   r(   r   r   ©	rM   r   r&   r'   r+  r�  ro   rp   rq   r   r   r   Útest_sqr_rank_1¯  ó   zBaseQRupdate.test_sqr_rank_1c           
      C   óˆ   dD ]?}| j d|d�\}}}}}|dkr"| |jd¡}| |jd¡}t||||dƒ\}}|t ||j ¡ ¡ }	t|||	| j	| j
ƒ qd S )N©r   r   r)   r,   rT   ©rµ   r   F©ra   ÚreshapeÚsizer   r   r   r   r   r(   r   r   ©
rM   rµ   r   r&   r'   r+  r�  ro   rp   rq   r   r   r   Útest_sqr_rank_pµ  s   ùzBaseQRupdate.test_sqr_rank_pc           	      C   r‚  )NrU   Frƒ  r…  r   r   r   Útest_tall_rank_1À  r‡  zBaseQRupdate.test_tall_rank_1c           
      C   rˆ  )Nr‰  rU   rŠ  r   Fr‹  rŽ  r   r   r   Útest_tall_rank_pÆ  ó   ùzBaseQRupdate.test_tall_rank_pc           	      C   r‚  )NrV   Frƒ  r…  r   r   r   Útest_fat_rank_1Ð  r‡  zBaseQRupdate.test_fat_rank_1c           
      C   rˆ  )Nr‰  rV   rŠ  r   Fr‹  rŽ  r   r   r   Útest_fat_rank_pÖ  r’  zBaseQRupdate.test_fat_rank_pc           	      C   óX   |   dd¡\}}}}}t||||dƒ\}}|t || ¡ ¡ }t|||| j| jdƒ d S )NrU   r‘   Frƒ  r…  r   r   r   Útest_economic_rank_1à  ó   z!BaseQRupdate.test_economic_rank_1c           
      C   sŠ   dD ]@}|   dd|¡\}}}}}|dkr"| |jd¡}| |jd¡}t||||dƒ\}}|t ||j ¡ ¡ }	t|||	| j	| j
dƒ qd S )Nr‰  rU   r‘   r   Fr‹  rŽ  r   r   r   Útest_economic_rank_pæ  s   ùz!BaseQRupdate.test_economic_rank_pc           	      C   r‚  )NrW   Frƒ  r…  r   r   r   Útest_Mx1_rank_1ð  r‡  zBaseQRupdate.test_Mx1_rank_1c           	      C   óv   | j ddd�\}}}}}| |jd¡}| |jd¡}t||||dƒ\}}|t ||j ¡ ¡ }t|||| j	| j
ƒ d S )NrW   r   rŠ  Fr‹  r…  r   r   r   Útest_Mx1_rank_pö  ó   zBaseQRupdate.test_Mx1_rank_pc           	      C   r•  )NrW   r‘   Frƒ  r…  r   r   r   Útest_Mx1_economic_rank_1   r—  z%BaseQRupdate.test_Mx1_economic_rank_1c           	      C   sz   | j dddd�\}}}}}| |jd¡}| |jd¡}t||||dƒ\}}|t ||j ¡ ¡ }t|||| j	| j
dƒ d S )NrW   r‘   r   rŠ  Fr‹  r…  r   r   r   Útest_Mx1_economic_rank_p  s   z%BaseQRupdate.test_Mx1_economic_rank_pc           	      C   r‚  )NrX   Frƒ  r…  r   r   r   Útest_1xN_rank_1  r‡  zBaseQRupdate.test_1xN_rank_1c           	      C   rš  )NrX   r   rŠ  Fr‹  r…  r   r   r   Útest_1xN_rank_p  rœ  zBaseQRupdate.test_1xN_rank_pc           	      C   r‚  )NrY   Frƒ  r…  r   r   r   Útest_1x1_rank_1   r‡  zBaseQRupdate.test_1x1_rank_1c           	      C   rš  )NrY   r   rŠ  Fr‹  r…  r   r   r   Útest_1x1_rank_p&  rœ  zBaseQRupdate.test_1x1_rank_pc                 C   sp   |   d¡\}}}}}ttt|d |||ƒ ttt||d ||ƒ ttt|||d |ƒ ttt||||d ƒ d S )NrY   r¥   r   ©ra   rø   r0   r   ©rM   r   r&   r'   r+  r�  r   r   r   Útest_1x1_rank_1_scalar0  s
   z#BaseQRupdate.test_1x1_rank_1_scalarc           )      C   sþ  |dkrdnd}dD �]ñ}|   |||¡\}}}	}
}|||	|
|fƒ\}}}}|dkr4|t |
| ¡ ¡ }n|t |
|j ¡ ¡ }| d¡}|	 d¡}|
 d¡}| d¡}t||||dƒ\}}t|||| j	| j
|ƒ t||||dƒ\}}t|||| j	| j
|ƒ |r•t||| j	| j
d� t|| ¡ | j	| j
d� | d¡}|	 d¡}|
 d¡}| d¡}t||||dƒ\}}t|||| j	| j
|ƒ t||||dƒ\}}t|||| j	| j
|ƒ |rët||| j	| j
d� t|| ¡ | j	| j
d� | d¡}|	 d¡}|
 d¡}| d¡}t||||dƒ\}}t|||| j	| j
|ƒ t||||dƒ\}} t|| || j	| j
|ƒ |�rBt| || j	| j
d� t|| ¡ | j	| j
d� | d¡}|	 d¡}|
 d¡}| d¡}t||||dƒ\}!}"t|!|"|| j	| j
|ƒ t||||dƒ\}#}$t|#|$|| j	| j
|ƒ |�r™t|$|| j	| j
d� t|| ¡ | j	| j
d� | d¡}|	 d¡}|
 d¡}| d¡}|||||fƒ\}}}}t||||dƒ\}%}&t|%|&|| j	| j
|ƒ t||||dƒ\}'}(t|'|(|| j	| j
|ƒ |�rüt|(|| j	| j
d� t|| ¡ | j	| j
d� q
d S )	Nr‘   FTr®   r   r¯   rå   r   )ra   r   r„  r   r   r   r²   r   r(   r   r   r   ))rM   r³   r[   rµ   r¶   r   r_   r   r¹   rº   ra  Úv0r»   r¼   rb  ÚvsÚaupr&   r'   r+  r�  ro   rp   r½   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rt  ru  Úq4oÚr4ord  re  rf  rg  r   r   r   rÇ   7  s‚   




















€·z$BaseQRupdate.base_non_simple_stridesc                 C   rh  )NrO   r   TrÉ   rL   r   r   r   Útest_non_unit_strides_rank_1„  rj  z)BaseQRupdate.test_non_unit_strides_rank_1c                 C   rh  )Nr‘   r   TrÉ   rL   r   r   r   Ú%test_non_unit_strides_economic_rank_1‡  rj  z2BaseQRupdate.test_non_unit_strides_economic_rank_1c                 C   rh  ©NrO   r)   FrÉ   rL   r   r   r   Útest_non_unit_strides_rank_pŠ  rj  z)BaseQRupdate.test_non_unit_strides_rank_pc                 C   rh  ©Nr‘   r)   FrÉ   rL   r   r   r   Ú%test_non_unit_strides_economic_rank_p�  rj  z2BaseQRupdate.test_non_unit_strides_economic_rank_pc                 C   rh  ©NrO   r   FrÑ   rL   r   r   r   Útest_neg_strides_rank_1�  rj  z$BaseQRupdate.test_neg_strides_rank_1c                 C   rh  ©Nr‘   r   FrÑ   rL   r   r   r   Ú test_neg_strides_economic_rank_1“  rj  z-BaseQRupdate.test_neg_strides_economic_rank_1c                 C   rh  r­  rÑ   rL   r   r   r   Útest_neg_strides_rank_p–  rj  z$BaseQRupdate.test_neg_strides_rank_pc                 C   rh  r¯  rÑ   rL   r   r   r   Ú test_neg_strides_economic_rank_p™  rj  z-BaseQRupdate.test_neg_strides_economic_rank_pc                 C   rh  r±  rØ   rL   r   r   r   Ú test_non_itemsize_strides_rank_1œ  rj  z-BaseQRupdate.test_non_itemsize_strides_rank_1c                 C   rh  r³  rØ   rL   r   r   r   Ú)test_non_itemsize_strides_economic_rank_1Ÿ  rj  z6BaseQRupdate.test_non_itemsize_strides_economic_rank_1c                 C   rh  r­  rØ   rL   r   r   r   Ú test_non_itemsize_strides_rank_p¢  rj  z-BaseQRupdate.test_non_itemsize_strides_rank_pc                 C   rh  r¯  rØ   rL   r   r   r   Ú)test_non_itemsize_strides_economic_rank_p¥  rj  z6BaseQRupdate.test_non_itemsize_strides_economic_rank_pc                 C   rh  r±  rÝ   rL   r   r   r   Ú!test_non_native_byte_order_rank_1¨  rj  z.BaseQRupdate.test_non_native_byte_order_rank_1c                 C   rh  r³  rÝ   rL   r   r   r   Ú*test_non_native_byte_order_economic_rank_1«  rj  z7BaseQRupdate.test_non_native_byte_order_economic_rank_1c                 C   rh  r­  rÝ   rL   r   r   r   Ú!test_non_native_byte_order_rank_p®  rj  z.BaseQRupdate.test_non_native_byte_order_rank_pc                 C   rh  r¯  rÝ   rL   r   r   r   Ú*test_non_native_byte_order_economic_rank_p±  rj  z7BaseQRupdate.test_non_native_byte_order_economic_rank_pc                 C   sX  |   d¡\}}}}}|t || ¡ ¡ }| d¡}| d¡}| d¡}	| d¡}
t|||	|
dƒ\}}t|||| j| jƒ t|||| j| jƒ t|||	|
dƒ\}}t|||| j| jƒ t	||| j| jd� t	||| j| jd� | d¡}| d¡}| d¡}	| d¡}
t|||	|
dƒ\}}t|||| j| jƒ t	||| j| jd� t	||| j| jd� d S )NrT   r¯   FTr   rå   ©
ra   r   r„  r   r²   r   r(   r   r   r   ©rM   r   r¹   rº   ra  r¦  rq   r&   r'   r+  r�  ro   rp   r¿   rÀ   rÃ   rÄ   r   r   r   Útest_overwrite_qruv_rank_1´  s*   







z'BaseQRupdate.test_overwrite_qruv_rank_1c                 C   sb  |   dd¡\}}}}}|t || ¡ ¡ }| d¡}| d¡}| d¡}	| d¡}
t|||	|
dƒ\}}t|||| j| jdƒ t|||| j| jdƒ t|||	|
dƒ\}}t|||| j| jdƒ t	||| j| jd� t	||| j| jd� | d¡}| d¡}| d¡}	| d¡}
t|||	|
dƒ\}}t|||| j| jdƒ t	||| j| jd� t	||| j| jd� d S )NrU   r‘   r¯   FTr   rå   r¿  rÀ  r   r   r   Ú#test_overwrite_qruv_rank_1_economicÒ  s*   







z0BaseQRupdate.test_overwrite_qruv_rank_1_economicc                 C   sæ   | j ddd�\}}}}}|t ||j ¡ ¡ }| d¡}| d¡}| d¡}	| d¡}
t|||	|
dƒ\}}t|||| j| j	ƒ t|||| j| j	ƒ t|||	|
dƒ\}}t|||| j| j	ƒ t
||| j| j	d� t
||| j| j	d� d S )	NrT   r)   rŠ  r¯   rå   FTr   )ra   r   r   r   r   r²   r   r(   r   r   r   )rM   r   r¹   rº   ra  r¦  rq   r&   r'   r+  r�  ro   rp   r¿   rÀ   r   r   r   Útest_overwrite_qruv_rank_pñ  s   



z'BaseQRupdate.test_overwrite_qruv_rank_pc              	   C   sx   |   d¡\}}}}}tttt g ¡|||ƒ ttt|t g ¡||ƒ ttt||t g ¡|ƒ ttt|||t g ¡ƒ d S )NrU   )ra   rø   r0   r   r   r   r¤  r   r   r   rx    s
   zBaseQRupdate.test_empty_inputsc              	   C   s€   |   d¡\}}}}}ttt||dd … ||ƒ ttt|d d… |||ƒ ttt|||dd … |ƒ ttt||||dd … ƒ d S )NrU   r   ry  r£  r¤  r   r   r   rz    s
   z#BaseQRupdate.test_mismatched_shapesc              	   C   sÎ   g d¢}|   d¡\}}}}}|D ]T}|j |¡}tjdd�� |j |¡}	W d   ƒ n1 s/w   Y  |j |¡}
|j |¡}ttt||||ƒ ttt||	||ƒ ttt|||
|ƒ ttt||||ƒ qd S )Nr  rU   r  r  )ra   r  rF   r   r  rø   r0   r   )rM   r  r   r¹   rº   ra  r¦  r   r&   r'   r+  r�  r   r   r   r    s   ÿ÷z$BaseQRupdate.test_unsupported_dtypesc                 C   sX   t  d¡ dd¡}| ¡ }|d d …df  ¡ }|dd d …f  ¡ }ttt||||ƒ d S )Né   r+   r   )r   ÚarangerŒ  r²   rø   r0   r   )rM   r&   r'   r+  r�  r   r   r   Útest_integer_input%  s
   zBaseQRupdate.test_integer_inputc           
   	   C   s\  | j ddd�\}}}}}| d¡}tj|d< ttt|||d d …df |d d …df ƒ ttt||||ƒ | d¡}tj|d< ttt|||d d …df |d d …df ƒ ttt||||ƒ | d¡}tj|d< ttt|||d d …df |d d …df ƒ ttt||||ƒ | d¡}	tj|	d< ttt|||d d …df |	d d …df ƒ ttt||||	ƒ d S )NrU   r)   rŠ  r¯   rS   r   r¥   ©ra   r²   r   r  rø   r0   r   ©
rM   r  r¹   rº   ra  r¦  r&   r'   r+  r�  r   r   r   r  ,  s"   

*

*

*

*zBaseQRupdate.test_check_finitec           
   	   C   s^  | j dddd�\}}}}}| d¡}tj|d< ttt|||d d …df |d d …df ƒ ttt||||ƒ | d¡}tj|d< ttt|||d d …df |d d …df ƒ ttt||||ƒ | d¡}tj|d< ttt|||d d …df |d d …df ƒ ttt||||ƒ | d¡}	tj|	d< ttt|||d d …df |	d d …df ƒ ttt||||	ƒ d S )	NrU   r‘   r)   )r[   rµ   r¯   rS   r   r¥   rÇ  rÈ  r   r   r   Útest_economic_check_finiteC  s"   

*

*

*

*z'BaseQRupdate.test_economic_check_finitec                 C   s¬   t  ddgddgddgddgg| j¡}t  ddgddgg| j¡}t  g d¢| j¡}t  ddg| j¡}t||||ƒ\}}t  ||¡t  || ¡ ¡ }t|||| j| j	dƒ d S )Nr   r   )r   r   r   r!   r   F)
r   r   r   r   r   r„  r   r(   r   r   )rM   r&   r'   r+  r�  ro   rp   rq   r   r   r   Útest_u_exactly_in_span_qZ  s   &z%BaseQRupdate.test_u_exactly_in_span_q)rO   r   )1rc   rd   re   ra   r†  r�  r�  r‘  r“  r”  r–  r˜  r™  r›  r�  rž  rŸ  r   r¡  r¢  r¥  rÇ   r«  r¬  r®  r°  r²  r´  rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  rÁ  rÂ  rÃ  rx  rz  r  rÆ  r  rÉ  rÊ  r{  r   r   r,  r   r€  ˜  s\    






Mr€  c                   @   r  )ÚTestQRupdate_fr  Nr   r   r   r   r   rË  c  r!  rË  c                   @   r  )ÚTestQRupdate_Fr¯   Nr   r   r   r   r   rÌ  f  r!  rÌ  c                   @   r  )ÚTestQRupdate_dr$  Nr   r   r   r   r   rÍ  i  r!  rÍ  c                   @   r  )ÚTestQRupdate_Dr&  Nr   r   r   r   r   rÎ  l  r!  rÎ  c            
      C   sŒ   ddg} dg}g d¢}ddg}g d¢}t  | ||||¡D ]'\}}}}}	|dkr:t||||d|	ƒ t||||d|	ƒ qt||||d|	ƒ qd S )	Nr¯   rå   rP   )r¯   rå   ÚAr   r)   )r  r$  r¯   r&  r   )r°   r±   Úcheck_form_qTu)
Úq_orderÚq_shapeÚu_orderÚu_shaper   Úqor»   Úuorb  r$  r   r   r   Útest_form_qTuo  s   ÿúr×  c                 C   s>  t j d¡ |dkr|dkr|d f}n|d |f}t  |¡}|jdv r1t j |¡}t j |¡}n&|jdv rSt j |¡dt j |¡  }t j |¡dt j |¡  }ntdƒ t  ||| ¡}|dkrjt  |||¡}n	t| |¡fƒ\}d	t  	|¡j
d
   }d
t  	|¡j }	t  |j ¡ |¡}
t ||¡}t||
||	d� d S )Né/   r   r   ÚfdÚFDrZ   z#form_qTu doesn't support this dtyperÏ  r
   r   r   )r   r\   r]   r   Úcharr0   Úrequirer;   rF   r   r   r   r   r   r   Ú_decomp_updateÚ	_form_qTur   )rÑ  rÒ  rÓ  rÔ  Úu_ndimr   r&   r+  r   r   ÚexpectedÚresr   r   r   rÐ  ‰  s*   


rÐ  )NNT)NN)T)*r°   Únumpyr   Únumpy.testingr   r   r   Úpytestr   rø   Úscipyr   Úscipy.linalg._decomp_updaterÝ  r   r   r	   r    r%   r(   r;   r>   rE   rJ   rK   rf   r  r"  r#  r%  r'  r|  r}  r~  r  r€  rË  rÌ  rÍ  rÎ  r×  rÐ  r   r   r   r   Ú<module>   sV    


           N