o
    g                    @   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   c/home/ubuntu/cloudmapper/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 )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longcomplex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 |dkr.|dkr"tj|jd }n.tj||jd f}n"|dkrL|dkr@tj|jd }ntj|jd |f}ntd t| j	drftj|j}	|d|	  }|
| j}||||fS )Nr   rn   r   r}   z%which should be either "row" or "col"rZ   )superra   r   r   r\   r   r0   r^   r   r_   rF   )
rM   r_   r[   r   r   r   r&   r'   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   r.  rO   intpr(   r   r   r/  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)   r2  r   Fr7  r3  r9  r   r   r   r        zBaseQRinsert.test_sqr_p_colc           	      C   r,  )NrU   rn   r   r   r   r-  r/  r   r   r   r     r0  zBaseQRinsert.test_tall_1_rowc           	   	   C   r1  )NrU   rn   r)   r2  r   r   r3  r/  r   r   r   r     r5  zBaseQRinsert.test_tall_p_rowc           	   	   C   r6  )NrU   r}   r   r   Fr7  r-  r9  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}   r2  r   Fr7  r3  
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   r@  rL   r   r   r   test_tall_p_col_sqr  r   z BaseQRinsert.test_tall_p_col_sqrc                 C   r   r   r@  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-  r/  r   r   r   r     r0  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   r2  r   r   r3  )
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   rD  rL   r   r   r   test_fat_p_row_fat  r   zBaseQRinsert.test_fat_p_row_fatc                 C   r   r   rF  rL   r   r   r   test_fat_p_row_sqr  r   zBaseQRinsert.test_fat_p_row_sqrc                 C   r   r   rF  rL   r   r   r   test_fat_p_row_tall  r   z BaseQRinsert.test_fat_p_row_tallc           	   	   C   r6  )NrV   r}   r   r   Fr7  r-  r9  r   r   r   r     r:  zBaseQRinsert.test_fat_1_colc           	   	   C   r;  )NrV   r}   r)   r2  r   Fr7  r3  r9  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   Fr7  r-  r/  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   Fr7  r3  r/  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   Fr7  )
ra   rk   r   r	   r   r   r.  r(   r   r   r9  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}   r2  r   Fr7  r3  r=  r   r   r   base_economic_p_col_xxx-  s   z$BaseQRinsert.base_economic_p_col_xxxc                 C   r   r   rM  rL   r   r   r   test_economic_p_col_eco4  r   z$BaseQRinsert.test_economic_p_col_ecoc                 C   r   r   rN  rL   r   r   r   test_economic_p_col_sqr8  r   z$BaseQRinsert.test_economic_p_col_sqrc                 C   r   r   rN  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-  r/  r   r   r   r   @  r0  zBaseQRinsert.test_Mx1_1_rowc           	   	   C   r1  )NrW   rn   r)   r2  r   r   r3  r/  r   r   r   r   G  rE  zBaseQRinsert.test_Mx1_p_rowc           	   	   C   r6  )NrW   r}   r   r   Fr7  r-  r9  r   r   r   test_Mx1_1_colN  r:  zBaseQRinsert.test_Mx1_1_colc           	   	   C   r;  )NrW   r}   r)   r2  r   Fr7  r3  r9  r   r   r   test_Mx1_p_colU  r?  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-  r/  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   Fr3  r/  r   r   r   r   c  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   Fr7  r-  r9  r   r   r   test_Mx1_economic_1_colj  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   Fr7  r3  r9  r   r   r   test_Mx1_economic_p_colq  s   z$BaseQRinsert.test_Mx1_economic_p_colc           	      C   r,  )NrX   rn   r   r   r   r-  r/  r   r   r   test_1xN_1_rowx  r0  zBaseQRinsert.test_1xN_1_rowc           	   	   C   r1  )NrX   rn   r)   r2  r   r   r3  r/  r   r   r   test_1xN_p_row  rE  zBaseQRinsert.test_1xN_p_rowc           	   	   C   r6  )NrX   r}   r   r   Fr7  r-  r9  r   r   r   r     r:  zBaseQRinsert.test_1xN_1_colc           	   	   C   r;  )NrX   r}   r)   r2  r   Fr7  r3  r9  r   r   r   r     r?  zBaseQRinsert.test_1xN_p_colc           	      C   r,  )NrY   rn   r   r   r   r-  r/  r   r   r   test_1x1_1_row  r0  zBaseQRinsert.test_1x1_1_rowc           	   	   C   r1  )NrY   rn   r)   r2  r   r   r3  r/  r   r   r   test_1x1_p_row  rE  zBaseQRinsert.test_1x1_p_rowc           	   	   C   r6  )NrY   r}   r   r   Fr7  r-  r9  r   r   r   test_1x1_1_col  r:  zBaseQRinsert.test_1x1_1_colc           	   	   C   r;  )NrY   r}   r)   r2  r   Fr7  r3  r9  r   r   r   test_1x1_p_col  r?  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   r2  r   rn   r   r   Fr7  T)
ra   r   r.  rO   r4  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   rf  Nr   r)   rn   r   rL   r   r   r   r     rh  z(BaseQRinsert.test_non_unit_strides_p_rowc                 C   rf  Nr   r   r}   r   rL   r   r   r   r     rh  z(BaseQRinsert.test_non_unit_strides_1_colc                 C   rf  Nr   r)   r}   r   rL   r   r   r   r     rh  z(BaseQRinsert.test_non_unit_strides_p_colc                 C   rf  rg  r   rL   r   r   r   r     rh  z#BaseQRinsert.test_neg_strides_1_rowc                 C   rf  ri  r   rL   r   r   r   r     rh  z#BaseQRinsert.test_neg_strides_p_rowc                 C   rf  rj  r   rL   r   r   r   r     rh  z#BaseQRinsert.test_neg_strides_1_colc                 C   rf  rk  r   rL   r   r   r   r     rh  z#BaseQRinsert.test_neg_strides_p_colc                 C   rf  rg  r   rL   r   r   r   test_non_itemsize_strides_1_row  rh  z,BaseQRinsert.test_non_itemsize_strides_1_rowc                 C   rf  ri  r   rL   r   r   r   test_non_itemsize_strides_p_row  rh  z,BaseQRinsert.test_non_itemsize_strides_p_rowc                 C   rf  rj  r   rL   r   r   r   test_non_itemsize_strides_1_col
  rh  z,BaseQRinsert.test_non_itemsize_strides_1_colc                 C   rf  rk  r   rL   r   r   r   test_non_itemsize_strides_p_col  rh  z,BaseQRinsert.test_non_itemsize_strides_p_colc                 C   rf  rg  r   rL   r   r   r   r     rh  z-BaseQRinsert.test_non_native_byte_order_1_rowc                 C   rf  ri  r   rL   r   r   r   r     rh  z-BaseQRinsert.test_non_native_byte_order_p_rowc                 C   rf  rj  r   rL   r   r   r   r     rh  z-BaseQRinsert.test_non_native_byte_order_1_colc                 C   rf  rk  r   rL   r   r   r   r     rh  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   r2  r   r   Fr7  Tr   r   )
ra   r   r	   r   r.  r(   r   r   r   r   )rM   r   r   r'   r)  r&   r_  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)   r2  r   r   r   Fr7  Tr   )ra   r   r   r.  r/   r4  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_inputsO  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_shapesX  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   r_  r   r&   r'   r)  r   r   r   r  a  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)   r2  r   rS   r   r}   r   )ra   r   r   r  r   r0   r	   )rM   r  r   r   r_  r&   r'   r)  r   r   r   r  s  s&   

  

  

  zBaseQRinsert.test_check_finite)rO   rn   r   )Grc   rd   re   ra   rr   rz   r   r   r   r   r   r>  rA  rB  rC  r   rD  rG  rH  rI  r   r   r   rJ  r   rL  rM  rO  rP  rQ  r   r   rR  rS  r   r   rT  rU  rV  rW  r   r   rX  rY  rZ  r[  r^  r   r   r   r   r   r   r   r   r   rl  rm  rn  ro  r   r   r   r   rt  ru  rv  rx  r  r  __classcell__r   r   r*  r   r'  x  s    
2!		r'  c                   @   r  )TestQRinsert_fr  Nr   r   r   r   r   rz    r!  rz  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_scalar/  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   r_  v0r   r   r`  vsaupr&   r'   r)  r  ro   rp   r   r   r   r   r   r   r   r   r   r   rr  rs  q4or4orb  rc  rd  re  r   r   r   r   6  s   




















z$BaseQRupdate.base_non_simple_stridesc                 C   rf  )NrO   r   Tr   rL   r   r   r   test_non_unit_strides_rank_1  rh  z)BaseQRupdate.test_non_unit_strides_rank_1c                 C   rf  )Nr   r   Tr   rL   r   r   r   %test_non_unit_strides_economic_rank_1  rh  z2BaseQRupdate.test_non_unit_strides_economic_rank_1c                 C   rf  NrO   r)   Fr   rL   r   r   r   test_non_unit_strides_rank_p  rh  z)BaseQRupdate.test_non_unit_strides_rank_pc                 C   rf  Nr   r)   Fr   rL   r   r   r   %test_non_unit_strides_economic_rank_p  rh  z2BaseQRupdate.test_non_unit_strides_economic_rank_pc                 C   rf  NrO   r   Fr   rL   r   r   r   test_neg_strides_rank_1  rh  z$BaseQRupdate.test_neg_strides_rank_1c                 C   rf  Nr   r   Fr   rL   r   r   r    test_neg_strides_economic_rank_1  rh  z-BaseQRupdate.test_neg_strides_economic_rank_1c                 C   rf  r  r   rL   r   r   r   test_neg_strides_rank_p  rh  z$BaseQRupdate.test_neg_strides_rank_pc                 C   rf  r  r   rL   r   r   r    test_neg_strides_economic_rank_p  rh  z-BaseQRupdate.test_neg_strides_economic_rank_pc                 C   rf  r  r   rL   r   r   r    test_non_itemsize_strides_rank_1  rh  z-BaseQRupdate.test_non_itemsize_strides_rank_1c                 C   rf  r  r   rL   r   r   r   )test_non_itemsize_strides_economic_rank_1  rh  z6BaseQRupdate.test_non_itemsize_strides_economic_rank_1c                 C   rf  r  r   rL   r   r   r    test_non_itemsize_strides_rank_p  rh  z-BaseQRupdate.test_non_itemsize_strides_rank_pc                 C   rf  r  r   rL   r   r   r   )test_non_itemsize_strides_economic_rank_p  rh  z6BaseQRupdate.test_non_itemsize_strides_economic_rank_pc                 C   rf  r  r   rL   r   r   r   !test_non_native_byte_order_rank_1  rh  z.BaseQRupdate.test_non_native_byte_order_rank_1c                 C   rf  r  r   rL   r   r   r   *test_non_native_byte_order_economic_rank_1  rh  z7BaseQRupdate.test_non_native_byte_order_economic_rank_1c                 C   rf  r  r   rL   r   r   r   !test_non_native_byte_order_rank_p  rh  z.BaseQRupdate.test_non_native_byte_order_rank_pc                 C   rf  r  r   rL   r   r   r   *test_non_native_byte_order_economic_rank_p  rh  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   r_  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   r_  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   rv    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   rw  r  r  r   r   r   rx    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   r_  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   r_  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_finiteB  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_qY  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  rv  rx  r  r  r  r  r  ry  r   r   r*  r   r~    s\    






Mr~  c                   @   r  )TestQRupdate_fr  Nr   r   r   r   r   r  b  r!  r  c                   @   r  )TestQRupdate_Fr   Nr   r   r   r   r   r  e  r!  r  c                   @   r  )TestQRupdate_dr$  Nr   r   r   r   r   r  h  r!  r  c                   @   r  )TestQRupdate_Dr&  Nr   r   r   r   r   r  k  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   uor`  r$  r   r   r   test_form_qTun  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'  rz  r{  r|  r}  r~  r  r  r  r  r  r  r   r   r   r   <module>   sV    


           N