o
    h                    @   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   Y/var/www/vscode/kcb/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 )Nir     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` Z2ddbdcZ3ddde Z4dfdg Z5dhdi Z6djdk Z7dldm Z8dndo Z9dpdq Z:drds Z;dtdu Z<dvdw Z=dxdy Z>dzd{ Z?d|d} Z@d~d ZAdd ZBdS )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rdnd}|d}|d}t|||	||d\}}t	|||| j
| j t|||	||d\}}t	|||| j
| j |rt||| | 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   ir   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@dd ZAdd ZBdd ZCdd ZDdd 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
| |rt||| j	| j
d t|| | j	| j
d |d}|	d}|
d}|d}t||||d\}}t|||| j	| j
| t||||d\}}t|||| j	| j
| |rt||| 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
| |rt|$|| j	| j
d t|| | j	| j
d |d}|	d}|
d}|d}|||||f\}}}}t||||d\}%}&t|%|&|| j	| j
| t||||d\}'}(t|'|(|| j	| j
| |rt|(|| 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