a
    Re                    @   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 }|rXt| 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_sqrZaTa r   Y/var/www/sunrise/env/lib/python3.9/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   Ztrir   Z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   s<  g d}t |}d}g }| D ]}|jdkr|||  }|d7 }t|d |jd  |d  |j}||d d |d  }||d< n|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stridesZkmaxkretr   sbaseviewtr   r   r   make_strided"   s.    

$
6(
r7   c                 C   st   g }| D ]f}t |}|jdkr:|d d dd d df }n"|jdkrT|d d d }ntd||d< || q|S )Nr   r    r   z2negate_strides only works for ndim = 1 or 2 arrays.)r   Z
zeros_liker+   r-   r.   )r/   r2   r   br   r   r   negate_strides<   s    


r9   c                 C   sJ   g }| D ]<}|j }t|jd|fdg}||}||d< || q|S )Nr   )ZjunkZS1.)r   r   r,   r   Zgetfieldr.   )r/   outr   Za_dtyper8   cr   r   r   nonitemsize_stridesK   s    
r<   c                 C   s   dd | D S )Nc                 S   s   g | ]}| |j qS r   )astyper   Znewbyteorder).0r   r   r   r   
<listcomp>W       z"make_nonnative.<locals>.<listcomp>r   )r/   r   r   r   make_nonnativeV   s    rA   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	rXt j|}|d
|  }|| j}tj||d\}}|||fS )Nir     rH   )   r'   )r'   rI   )rH   r   )r   rH   r   r   )sqrtallfatMx11xN1x1r                 ?)mode)	r   randomseediscomplexobjr   typer=   r   Zqr)rD   rV   rR   r   r   r8   r#   r$   r   r   r   generate_   s    zBaseQRdeltas.generateN)rF   )__name__
__module____qualname__rE   rW   r   r   r   r   rB   Z   s   rB   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   s^   |  d\}}}t|jd D ]:}t|||dd\}}t||d}t|||| j| j qd S )NrK   r   Foverwrite_qr	rW   ranger   r   r   deleter%   r   r   rD   r   r#   r$   rowq1r1a1r   r   r   test_sqr_1_rowl   s
    zBaseQRdelete.test_sqr_1_rowc           	   	   C   s~   |  d\}}}tddD ]^}t|jd | D ]F}t||||dd\}}t|t||| d}t|||| j| j	 q0qd S )NrK   r      r   Fr\   
rW   r_   r   r   r   r`   slicer%   r   r   	rD   r   r#   r$   ndelrb   rc   rd   re   r   r   r   test_sqr_p_rows   s    zBaseQRdelete.test_sqr_p_rowc                 C   s`   |  d\}}}t|jd D ]<}t|||ddd\}}t||d}t|||| j| j qd S )NrK   r   colFwhichr]   r^   rD   r   r#   r$   rm   rc   rd   re   r   r   r   test_sqr_1_col{   s
    zBaseQRdelete.test_sqr_1_colc           	   
   C   s   |  d\}}}tddD ]`}t|jd | D ]H}t||||ddd\}}t|t||| d}t|||| j| j	 q0qd S )NrK   r   rg   r   rm   Frn   rh   	rD   r   r#   r$   rk   rm   rc   rd   re   r   r   r   test_sqr_p_col   s    
zBaseQRdelete.test_sqr_p_colc                 C   s^   |  d\}}}t|jd D ]:}t|||dd\}}t||d}t|||| j| j qd S )NrL   r   Fr\   r^   ra   r   r   r   test_tall_1_row   s
    zBaseQRdelete.test_tall_1_rowc           	   	   C   s~   |  d\}}}tddD ]^}t|jd | D ]F}t||||dd\}}t|t||| d}t|||| j| j	 q0qd S )NrL   r   rg   r   Fr\   rh   rj   r   r   r   test_tall_p_row   s    zBaseQRdelete.test_tall_p_rowc                 C   s`   |  d\}}}t|jd D ]<}t|||ddd\}}t||d}t|||| j| j qd S )NrL   r   rm   Frn   r^   rp   r   r   r   test_tall_1_col   s
    zBaseQRdelete.test_tall_1_colc           	   
   C   s   |  d\}}}tddD ]`}t|jd | D ]H}t||||ddd\}}t|t||| d}t|||| j| j	 q0qd S )NrL   r   rg   r   rm   Frn   rh   rr   r   r   r   test_tall_p_col   s    
zBaseQRdelete.test_tall_p_colc                 C   s^   |  d\}}}t|jd D ]:}t|||dd\}}t||d}t|||| j| j qd S )NrM   r   Fr\   r^   ra   r   r   r   test_fat_1_row   s
    zBaseQRdelete.test_fat_1_rowc           	   	   C   s~   |  d\}}}tddD ]^}t|jd | D ]F}t||||dd\}}t|t||| d}t|||| j| j	 q0qd S )NrM   r   rg   r   Fr\   rh   rj   r   r   r   test_fat_p_row   s    zBaseQRdelete.test_fat_p_rowc                 C   s`   |  d\}}}t|jd D ]<}t|||ddd\}}t||d}t|||| j| j qd S )NrM   r   rm   Frn   r^   rp   r   r   r   test_fat_1_col   s
    zBaseQRdelete.test_fat_1_colc           	   
   C   s   |  d\}}}tddD ]`}t|jd | D ]H}t||||ddd\}}t|t||| d}t|||| j| j	 q0qd S )NrM   r   rg   r   rm   Frn   rh   rr   r   r   r   test_fat_p_col   s    
zBaseQRdelete.test_fat_p_colc                 C   sb   |  dd\}}}t|jd D ]<}t|||dd\}}t||d}t|||| j| jd q d S NrL   economicr   Fr\   r^   ra   r   r   r   test_economic_1_row   s
    z BaseQRdelete.test_economic_1_rowc           	      C   sr   |  dd\}}}t|jd | D ]H}t||||dd\}}t|t||| d}t|||| j| j	d q$d S r|   rh   )	rD   rk   r   r#   r$   rb   rc   rd   re   r   r   r   base_economic_p_row_xxx   s
    z$BaseQRdelete.base_economic_p_row_xxxc                 C   s   |  d d S Nr&   r   rC   r   r   r   test_economic_p_row_economic   s    z)BaseQRdelete.test_economic_p_row_economicc                 C   s   |  d d S Nr)   r   rC   r   r   r   test_economic_p_row_sqr   s    z$BaseQRdelete.test_economic_p_row_sqrc                 C   s   |  d d S Nr'   r   rC   r   r   r   test_economic_p_row_fat   s    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 )NrL   r}   r   rm   Frn   r^   rp   r   r   r   test_economic_1_col   s
    z BaseQRdelete.test_economic_1_colc           	   
   C   s   |  dd\}}}tddD ]b}t|jd | D ]J}t||||ddd\}}t|t||| d}t|||| j| j	d q2qd S )	NrL   r}   r   rg   r   rm   Frn   rh   rr   r   r   r   test_economic_p_col   s    
z BaseQRdelete.test_economic_p_colc                 C   s^   |  d\}}}t|jd D ]:}t|||dd\}}t||d}t|||| j| j qd S )NrN   r   Fr\   r^   ra   r   r   r   test_Mx1_1_row   s
    zBaseQRdelete.test_Mx1_1_rowc           	   	   C   s~   |  d\}}}tddD ]^}t|jd | D ]F}t||||dd\}}t|t||| d}t|||| j| j	 q0qd S )NrN   r   rg   r   Fr\   rh   rj   r   r   r   test_Mx1_p_row   s    zBaseQRdelete.test_Mx1_p_rowc                 C   s`   |  d\}}}t|jd D ]<}t|||ddd\}}t||d}t|||| j| j qd S )NrO   r   rm   Frn   r^   rp   r   r   r   test_1xN_1_col  s
    zBaseQRdelete.test_1xN_1_colc           	   
   C   s   |  d\}}}tddD ]`}t|jd | D ]H}t||||ddd\}}t|t||| d}t|||| j| j	 q0qd S )NrO   r   rg   r   rm   Frn   rh   rr   r   r   r   test_1xN_p_col  s    
zBaseQRdelete.test_1xN_p_colc                 C   sb   |  dd\}}}t|jd D ]<}t|||dd\}}t||d}t|||| j| jd q d S )NrN   r}   r   Fr\   r^   ra   r   r   r   test_Mx1_economic_1_row  s
    z$BaseQRdelete.test_Mx1_economic_1_rowc           	   	   C   s   |  dd\}}}tddD ]`}t|jd | D ]H}t||||dd\}}t|t||| d}t|||| j| j	d q2qd S )NrN   r}   r   rg   r   Fr\   rh   rj   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 )NrO   r   r   rb   r   r   r   r   )rW   r   r   r   ndarrayr   r   rD   r   r#   r$   rc   rd   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 )	NrL   rF   r   rb   r   r   r   r}   )rW   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 )	NrN   r}   r   r   rm   r   r   rF   )	rW   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 )	NrL   rF   r   r   rm   r   r}   r   )	rW   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 )NrP   r   r   rb   r   r   rm   )	rW   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r0t |d t |d f}t |d t d f}n$t d t d f}t d t d | f}tg d|D ]\}}	| |\}
}}|||f\}}|dkrt|
|	|dkrdnd}n\t |	|	| }|	dk rt |	|	| |dkr|
jd n|
jd  }t|
||dkrd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 |rJt||| | j
| jd t||| | j
| jd |d}|d}|||f\}}t|||	||d\}}t	|||| j
| j t|||	||d\}}t	|||| j
| j |rdt||| | j
| jd t||| | j
| jd qdd S )	Nrb   rK   rL   rM   r   r   FFTr   )ri   	itertoolsproductrW   r   r`   r   copyr   r%   r   r   r   )rD   adjust_strideskspro   overwriteableqindrindrV   r1   r   q0r0qsrsre   r3   r#   r$   rc   rd   q1or1oq2r2q2or2oq3r3q3or3or   r   r   base_non_simple_stridese  sX    






z$BaseQRdelete.base_non_simple_stridesc                 C   s   |  tdgddd d S )Nr   r   rb   Tr   r7   rC   r   r   r   test_non_unit_strides_1_row  s    z(BaseQRdelete.test_non_unit_strides_1_rowc                 C   s   |  tdgddd d S )Nr   r&   rb   Tr   rC   r   r   r   test_non_unit_strides_p_row  s    z(BaseQRdelete.test_non_unit_strides_p_rowc                 C   s   |  tdgddd d S )Nr   r   rm   Tr   rC   r   r   r   test_non_unit_strides_1_col  s    z(BaseQRdelete.test_non_unit_strides_1_colc                 C   s   |  tdgddd d S Nr   r&   rm   Fr   rC   r   r   r   test_non_unit_strides_p_col  s    z(BaseQRdelete.test_non_unit_strides_p_colc                 C   s   |  tdgddd d S Nr   r   rb   Fr   r9   rC   r   r   r   test_neg_strides_1_row  s    z#BaseQRdelete.test_neg_strides_1_rowc                 C   s   |  tdgddd d S Nr   r&   rb   Fr   rC   r   r   r   test_neg_strides_p_row  s    z#BaseQRdelete.test_neg_strides_p_rowc                 C   s   |  tdgddd d S Nr   r   rm   Fr   rC   r   r   r   test_neg_strides_1_col  s    z#BaseQRdelete.test_neg_strides_1_colc                 C   s   |  tdgddd d S r   r   rC   r   r   r   test_neg_strides_p_col  s    z#BaseQRdelete.test_neg_strides_p_colc                 C   s   |  tdgddd d S r   r   r<   rC   r   r   r   test_non_itemize_strides_1_row  s    z+BaseQRdelete.test_non_itemize_strides_1_rowc                 C   s   |  tdgddd d S r   r   rC   r   r   r   test_non_itemize_strides_p_row  s    z+BaseQRdelete.test_non_itemize_strides_p_rowc                 C   s   |  tdgddd d S r   r   rC   r   r   r   test_non_itemize_strides_1_col  s    z+BaseQRdelete.test_non_itemize_strides_1_colc                 C   s   |  tdgddd d S r   r   rC   r   r   r   test_non_itemize_strides_p_col  s    z+BaseQRdelete.test_non_itemize_strides_p_colc                 C   s   |  tdgddd d S r   r   rA   rC   r   r   r    test_non_native_byte_order_1_row  s    z-BaseQRdelete.test_non_native_byte_order_1_rowc                 C   s   |  tdgddd d S r   r   rC   r   r   r    test_non_native_byte_order_p_row  s    z-BaseQRdelete.test_non_native_byte_order_p_rowc                 C   s   |  tdgddd d S r   r   rC   r   r   r    test_non_native_byte_order_1_col  s    z-BaseQRdelete.test_non_native_byte_order_1_colc                 C   s   |  tdgddd d S r   r   rC   r   r   r    test_non_native_byte_order_p_col  s    z-BaseQRdelete.test_non_native_byte_order_p_colc           
   	   C   s   |  d\}}}tddgddgddgD ]\}}}t|||||dd	\}}|dkrt|t||jd
  || |jd
  d
}	n,t|t||jd
  || |jd  d}	t|||	| j	| j
 q*d S )NrK   ir   r&   rb   rm   Fr\   r   )rW   r   r   r   r   r`   ri   r   r%   r   r   )
rD   r   r#   r$   r1   r   wrc   rd   re   r   r   r   
test_neg_k  s    $.,zBaseQRdelete.test_neg_krF   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rt|	d|dkrdnd}n$t|	t dd| |dkrd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 )NrF   TFrb   rK   r   r&   r   r   r   C)
ri   rW   r   r`   r   r   r%   r   r   r   )rD   ro   r   Ztest_CZtest_FrR   r   r   r   r   r   r   re   r#   r$   rc   rd   r   r   r   r   r   r   r   base_overwrite_qr  s:    $





zBaseQRdelete.base_overwrite_qrc                 C   s   |  dddd d S )Nrb   r   Tr   rC   r   r   r   test_overwrite_qr_1_row  s    z$BaseQRdelete.test_overwrite_qr_1_rowc                 C   s   |  ddddd d S )Nrb   r   Tr}   r   rC   r   r   r    test_overwrite_economic_qr_1_row  s    z-BaseQRdelete.test_overwrite_economic_qr_1_rowc                 C   s   |  dddd d S )Nrm   r   Tr   rC   r   r   r   test_overwrite_qr_1_col  s    z$BaseQRdelete.test_overwrite_qr_1_colc                 C   s   |  dddd d S )Nrb   r&   Tr   rC   r   r   r   test_overwrite_qr_p_row  s    z$BaseQRdelete.test_overwrite_qr_p_rowc                 C   s   |  ddddd d S )Nrb   r&   Tr}   r   rC   r   r   r    test_overwrite_economic_qr_p_row  s    z-BaseQRdelete.test_overwrite_economic_qr_p_rowc                 C   s   |  dddd d S )Nrm   r&   FTr   rC   r   r   r   test_overwrite_qr_p_col  s    z$BaseQRdelete.test_overwrite_qr_p_colc                 C   s(   |  d\}}}ttt||ddd d S )NrK   r   Zfooro   rW   assert_raisesr-   r   rD   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 )NrL   r   r   rm   rW   r   r-   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 )NrL   r   r    rm   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 NrL   r   r   rW   r   r-   r   r   arrayr   r   r   r   test_empty_q1  s    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  s    zBaseQRdelete.test_empty_rc                 C   s2   |  d\}}}|dd  }ttt||dd d S )NrL   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 ]}|j|}tjdd |j|}W d    n1 sZ0    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Zint8int16int32int64Zuint8Zuint16Zuint32Zuint64float16Z
longdoubleZlongcomplexboolrL   ignoreinvalidr   r   rb   r   rm   )rW   realr=   r   errstater   r-   r   )rD   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 )	NrL   r   rJ   r   r   rb   r&   rm   )rW   r   r   nanr   r-   r   )rD   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 )NrP   r   r   r   rb   rm   r   r   r   r   r   test_qr_scalare  s
    zBaseQRdelete.test_qr_scalarN)rF   )CrX   rY   rZ   rf   rl   rq   rs   rt   ru   rv   rw   rx   ry   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[   k   s   					9

&r[   c                   @   s   e Zd ZedZdS )TestQRdelete_ffNrX   rY   rZ   r   r   r   r   r   r   r   l  s   r   c                   @   s   e Zd ZedZdS )TestQRdelete_Fr   Nr   r   r   r   r   r   o  s   r   c                   @   s   e Zd ZedZdS )TestQRdelete_ddNr   r   r   r   r   r   r  s   r   c                   @   s   e Zd ZedZdS )TestQRdelete_DDNr   r   r   r   r   r   u  s   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 )BaseQRinsertrF   rb   r   c           
         s   t  ||\}}}t|dk |dkr\|dkrDtj|jd }qtj||jd f}nD|dkr|dkrtj|jd }qtj|jd |f}ntd t| j	drtj|j}	|d|	  }|
| j}||||fS )Nr   rb   r   rm   z%which should be either "row" or "col"rQ   )superrW   r   r   rS   r   r-   rU   r   rV   r=   )
rD   rV   rR   ro   r   r   r#   r$   ur8   	__class__r   r   rW   y  s     zBaseQRinsert.generatec           	      C   sh   | j ddd\}}}}t|jd d D ]:}t||||\}}t|||d}t|||| j| j q(d S )NrK   rb   r   r   r   	rW   r_   r   r	   r   insertr%   r   r   	rD   r   r#   r$   r   rb   rc   rd   re   r   r   r   rf     s
    zBaseQRinsert.test_sqr_1_rowc           	   	   C   sv   | j dddd\}}}}t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q*d S )NrK   rb   r&   ro   r   r   r   rW   r_   r   r	   r   r  rF   intpr%   r   r   r  r   r   r   rl     s
    zBaseQRinsert.test_sqr_p_rowc           	   	   C   sn   | j ddd\}}}}t|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q(d S )NrK   rm   r   r   FZoverwrite_qrur  	rD   r   r#   r$   r   rm   rc   rd   re   r   r   r   rq     s
    zBaseQRinsert.test_sqr_1_colc           	   	   C   s|   | j dddd\}}}}t|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q*d S )NrK   rm   r&   r  r   Fr  r  r	  r   r   r   rs     s
    zBaseQRinsert.test_sqr_p_colc           	      C   sh   | j ddd\}}}}t|jd d D ]:}t||||\}}t|||d}t|||| j| j q(d S )NrL   rb   r   r   r   r  r  r   r   r   rt     s
    zBaseQRinsert.test_tall_1_rowc           	   	   C   sv   | j dddd\}}}}t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q*d S )NrL   rb   r&   r  r   r   r  r  r   r   r   ru     s
    zBaseQRinsert.test_tall_p_rowc           	   	   C   sn   | j ddd\}}}}t|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q(d S )NrL   rm   r   r   Fr  r  r	  r   r   r   rv     s
    zBaseQRinsert.test_tall_1_colc           
   	   C   s|   | j dd|d\}}}}t|jd d D ]L}t||||ddd\}}t|t||tj|d}	t|||	| j	| j
 q*d S )NrL   rm   r  r   Fr  r  
rD   r   r   r#   r$   r   rm   rc   rd   re   r   r   r   base_tall_p_col_xxx  s
    z BaseQRinsert.base_tall_p_col_xxxc                 C   s   |  d d S r   r  rC   r   r   r   test_tall_p_col_tall  s    z!BaseQRinsert.test_tall_p_col_tallc                 C   s   |  d d S r   r  rC   r   r   r   test_tall_p_col_sqr  s    z BaseQRinsert.test_tall_p_col_sqrc                 C   s   |  d d S r   r  rC   r   r   r   test_tall_p_col_fat  s    z BaseQRinsert.test_tall_p_col_fatc           	      C   sh   | j ddd\}}}}t|jd d D ]:}t||||\}}t|||d}t|||| j| j q(d S )NrM   rb   r   r   r   r  r  r   r   r   rx     s
    zBaseQRinsert.test_fat_1_rowc           
   	   C   sv   | j dd|d\}}}}t|jd d D ]F}t||||\}}t|t||tj|d}	t|||	| j	| j
 q*d S )NrM   rb   r  r   r   r  )
rD   r   r   r#   r$   r   rb   rc   rd   re   r   r   r   base_fat_p_row_xxx  s
    zBaseQRinsert.base_fat_p_row_xxxc                 C   s   |  d d S r   r  rC   r   r   r   test_fat_p_row_fat  s    zBaseQRinsert.test_fat_p_row_fatc                 C   s   |  d d S r   r  rC   r   r   r   test_fat_p_row_sqr  s    zBaseQRinsert.test_fat_p_row_sqrc                 C   s   |  d d S r   r  rC   r   r   r   test_fat_p_row_tall  s    z BaseQRinsert.test_fat_p_row_tallc           	   	   C   sn   | j ddd\}}}}t|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q(d S )NrM   rm   r   r   Fr  r  r	  r   r   r   rz     s
    zBaseQRinsert.test_fat_1_colc           	   	   C   s|   | j dddd\}}}}t|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q*d S )NrM   rm   r&   r  r   Fr  r  r	  r   r   r   r{     s
    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 )NrL   r}   rb   r   r   Fr  r  r  r   r   r   r~     s
    z BaseQRinsert.test_economic_1_rowc           	   	   C   s|   |  dddd\}}}}t|jd d D ]L}t||||dd\}}t|td|tj|d}t|||| j	| j
d q*d S )	NrL   r}   rb   r&   r   r   Fr  r  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 ]F}t||| |ddd\}}t|||d}t|||| j| j	d q*d S )NrL   r}   rm   r   r   Fr  )
rW   r_   r   r	   r   r   r  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   rm   )r   r   r   r   r   r   ZLinAlgErrorr	   )rD   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 ]N}t||||ddd\}}t|t||tj|d}	t|||	| j	| j
d q,d S )NrL   r}   rm   r  r   Fr  r  r
  r   r   r   base_economic_p_col_xxx-  s
    z$BaseQRinsert.base_economic_p_col_xxxc                 C   s   |  d d S r   r  rC   r   r   r   test_economic_p_col_eco4  s    z$BaseQRinsert.test_economic_p_col_ecoc                 C   s   |  d d S r   r  rC   r   r   r   test_economic_p_col_sqr8  s    z$BaseQRinsert.test_economic_p_col_sqrc                 C   s   |  d d S r   r  rC   r   r   r   test_economic_p_col_fat<  s    z$BaseQRinsert.test_economic_p_col_fatc           	      C   sh   | j ddd\}}}}t|jd d D ]:}t||||\}}t|||d}t|||| j| j q(d S )NrN   rb   r   r   r   r  r  r   r   r   r   @  s
    zBaseQRinsert.test_Mx1_1_rowc           	   	   C   sv   | j dddd\}}}}t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q*d S )NrN   rb   r&   r  r   r   r  r  r   r   r   r   G  s
    zBaseQRinsert.test_Mx1_p_rowc           	   	   C   sn   | j ddd\}}}}t|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q(d S )NrN   rm   r   r   Fr  r  r	  r   r   r   test_Mx1_1_colN  s
    zBaseQRinsert.test_Mx1_1_colc           	   	   C   s|   | j dddd\}}}}t|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q*d S )NrN   rm   r&   r  r   Fr  r  r	  r   r   r   test_Mx1_p_colU  s
    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 )NrN   r}   rb   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 ]H}t||||\}}t|td|tj|d}t|||| j	| j
d q*d S )NrN   r}   rb   r&   r   r   Fr  r  r   r   r   r   c  s
    z$BaseQRinsert.test_Mx1_economic_p_rowc           	   	   C   sp   |  ddd\}}}}t|jd d D ]B}t||||ddd\}}t|||d}t|||| j| jd q(d S )NrN   r}   rm   r   Fr  r  r	  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 ]N}t||||ddd\}}t|td|tj|d}t|||| j	| j
d q*d S )NrN   r}   rm   r&   r   Fr  r  r	  r   r   r   test_Mx1_economic_p_colq  s
    z$BaseQRinsert.test_Mx1_economic_p_colc           	      C   sh   | j ddd\}}}}t|jd d D ]:}t||||\}}t|||d}t|||| j| j q(d S )NrO   rb   r   r   r   r  r  r   r   r   test_1xN_1_rowx  s
    zBaseQRinsert.test_1xN_1_rowc           	   	   C   sv   | j dddd\}}}}t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q*d S )NrO   rb   r&   r  r   r   r  r  r   r   r   test_1xN_p_row  s
    zBaseQRinsert.test_1xN_p_rowc           	   	   C   sn   | j ddd\}}}}t|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q(d S )NrO   rm   r   r   Fr  r  r	  r   r   r   r     s
    zBaseQRinsert.test_1xN_1_colc           	   	   C   s|   | j dddd\}}}}t|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q*d S )NrO   rm   r&   r  r   Fr  r  r	  r   r   r   r     s
    zBaseQRinsert.test_1xN_p_colc           	      C   sh   | j ddd\}}}}t|jd d D ]:}t||||\}}t|||d}t|||| j| j q(d S )NrP   rb   r   r   r   r  r  r   r   r   test_1x1_1_row  s
    zBaseQRinsert.test_1x1_1_rowc           	   	   C   sv   | j dddd\}}}}t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q*d S )NrP   rb   r&   r  r   r   r  r  r   r   r   test_1x1_p_row  s
    zBaseQRinsert.test_1x1_p_rowc           	   	   C   sn   | j ddd\}}}}t|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q(d S )NrP   rm   r   r   Fr  r  r	  r   r   r   test_1x1_1_col  s
    zBaseQRinsert.test_1x1_1_colc           	   	   C   s|   | j dddd\}}}}t|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q*d S )NrP   rm   r&   r  r   Fr  r  r	  r   r   r   test_1x1_p_col  s
    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 )NrP   rb   r   r   r   rm   rW   r   r-   r	   rD   r   r#   r$   r   r   r   r   test_1x1_1_scalar  s    zBaseQRinsert.test_1x1_1_scalarc           !   	   C   s  dD ]v}| j |||d\}}}}	||||	f\}
}}|dkr\t|||	|dkrTdnd}n4t|t||tj|dkr||	n|	|dkrd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   r  r   rb   r   r   Fr  T)
rW   r   r  rF   r  r   r	   r%   r   r   )!rD   r   r1   r   ro   rV   r   r   r   u0r   r   usZair#   r$   r   rc   rd   r   r   r   r   r   r   r   r   r   r   q5r5q5or5or   r   r   r     sL    
	











z$BaseQRinsert.base_non_simple_stridesc                 C   s   |  tddd d S Nr   r   rb   r   rC   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_1_rowc                 C   s   |  tddd d S Nr   r&   rb   r   rC   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_p_rowc                 C   s   |  tddd d S Nr   r   rm   r   rC   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_1_colc                 C   s   |  tddd d S Nr   r&   rm   r   rC   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_p_colc                 C   s   |  tddd d S r/  r   rC   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_1_rowc                 C   s   |  tddd d S r0  r   rC   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_p_rowc                 C   s   |  tddd d S r1  r   rC   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_1_colc                 C   s   |  tddd d S r2  r   rC   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_p_colc                 C   s   |  tddd d S r/  r   rC   r   r   r   test_non_itemsize_strides_1_row  s    z,BaseQRinsert.test_non_itemsize_strides_1_rowc                 C   s   |  tddd d S r0  r   rC   r   r   r   test_non_itemsize_strides_p_row  s    z,BaseQRinsert.test_non_itemsize_strides_p_rowc                 C   s   |  tddd d S r1  r   rC   r   r   r   test_non_itemsize_strides_1_col
  s    z,BaseQRinsert.test_non_itemsize_strides_1_colc                 C   s   |  tddd d S r2  r   rC   r   r   r   test_non_itemsize_strides_p_col  s    z,BaseQRinsert.test_non_itemsize_strides_p_colc                 C   s   |  tddd d S r/  r   rC   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_1_rowc                 C   s   |  tddd d S r0  r   rC   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_p_rowc                 C   s   |  tddd d S r1  r   rC   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_1_colc                 C   s   |  tddd d S r2  r   rC   r   r   r   r     s    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 )NrK   rm   r   r  r   r   Fr  Tr   r   )
rW   r   r	   r   r  r%   r   r   r   r   )rD   r   r   r$   r   r#   r)  rc   rd   re   r   r   Z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 )NrK   rm   r&   r  r   r   r   Fr  Tr   )rW   r   r   r  r,   r  r	   r%   r   r   r   )rD   r   r   r$   r   r#   re   rc   rd   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 )NrK   rb   r   r   rm   )rW   r   r-   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 )NrL   rb   r   r   r   rm   r&  r'  r   r   r   test_mismatched_shapesX  s    z#BaseQRinsert.test_mismatched_shapesc           
   	   C   s   g d}| j ddd\}}}}|D ]}|j|}tjdd |j|}W d    n1 s`0    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   rK   rb   r   r   r   r   rm   )rW   r   r=   r   r   r   r-   r	   )
rD   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 )
NrK   rb   r&   r  r   rJ   r   rm   r   )rW   r   r   r   r   r-   r	   )rD   r   r   r   r)  r#   r$   r   r   r   r   r   s  s&    

  

  

  zBaseQRinsert.test_check_finite)rF   rb   r   )GrX   rY   rZ   rW   rf   rl   rq   rs   rt   ru   rv   r  r  r  r  rx   r  r  r  r  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   r3  r4  r5  r6  r   r   r   r   r:  r;  r<  r>  r   r   __classcell__r   r   r   r   r   x  s   
2!		r   c                   @   s   e Zd ZedZdS )TestQRinsert_fr   Nr   r   r   r   r   r@    s   r@  c                   @   s   e Zd ZedZdS )TestQRinsert_Fr   Nr   r   r   r   r   rA    s   rA  c                   @   s   e Zd ZedZdS )TestQRinsert_dr   Nr   r   r   r   r   rB    s   rB  c                   @   s   e Zd ZedZdS )TestQRinsert_Dr   Nr   r   r   r   r   rC    s   rC  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 )^BaseQRupdaterF   r   c                    s   t  ||\}}}|dkrBtj|jd }tj|jd }n,tj|jd |f}tj|jd |f}t| jdrtj|j}	|d|	  }tj|j}
|d|
  }|| j}|| j}|||||fS )Nr   r   rQ   )	r   rW   r   rS   r   rU   r   rV   r=   )rD   rV   rR   r   r   r#   r$   r   vr8   r;   r   r   r   rW     s    zBaseQRupdate.generatec           	      C   sT   |  d\}}}}}t||||d\}}|t||  }t|||| j| j d S )NrK   FrW   r   r   outerr   r%   r   r   	rD   r   r#   r$   r   rE  rc   rd   re   r   r   r   test_sqr_rank_1  s    zBaseQRupdate.test_sqr_rank_1c           
      C   s   dD ]~}| j d|d\}}}}}|dkrD||jd}||jd}t||||d\}}|t||j  }	t|||	| j	| j
 qd S )Nr   r   r&   r)   rK   r   r   FrW   reshapesizer   r   r   r   r   r%   r   r   
rD   r   r   r#   r$   r   rE  rc   rd   re   r   r   r   test_sqr_rank_p  s    zBaseQRupdate.test_sqr_rank_pc           	      C   sT   |  d\}}}}}t||||d\}}|t||  }t|||| j| j d S )NrL   FrF  rH  r   r   r   test_tall_rank_1  s    zBaseQRupdate.test_tall_rank_1c           
      C   s   dD ]~}| j d|d\}}}}}|dkrD||jd}||jd}t||||d\}}|t||j  }	t|||	| j	| j
 qd S )NrJ  rL   rK  r   FrL  rO  r   r   r   test_tall_rank_p  s    zBaseQRupdate.test_tall_rank_pc           	      C   sT   |  d\}}}}}t||||d\}}|t||  }t|||| j| j d S )NrM   FrF  rH  r   r   r   test_fat_rank_1  s    zBaseQRupdate.test_fat_rank_1c           
      C   s   dD ]~}| j d|d\}}}}}|dkrD||jd}||jd}t||||d\}}|t||j  }	t|||	| j	| j
 qd S )NrJ  rM   rK  r   FrL  rO  r   r   r   test_fat_rank_p  s    zBaseQRupdate.test_fat_rank_pc           	      C   sX   |  dd\}}}}}t||||d\}}|t||  }t|||| j| jd d S )NrL   r}   FrF  rH  r   r   r   test_economic_rank_1  s    z!BaseQRupdate.test_economic_rank_1c           
      C   s   dD ]}|  dd|\}}}}}|dkrD||jd}||jd}t||||d\}}|t||j  }	t|||	| j	| j
d qd S )NrJ  rL   r}   r   FrL  rO  r   r   r   test_economic_rank_p  s    z!BaseQRupdate.test_economic_rank_pc           	      C   sT   |  d\}}}}}t||||d\}}|t||  }t|||| j| j d S )NrN   FrF  rH  r   r   r   test_Mx1_rank_1  s    zBaseQRupdate.test_Mx1_rank_1c           	      C   sv   | j ddd\}}}}}||jd}||jd}t||||d\}}|t||j  }t|||| j	| j
 d S )NrN   r   rK  FrL  rH  r   r   r   test_Mx1_rank_p  s    zBaseQRupdate.test_Mx1_rank_pc           	      C   sX   |  dd\}}}}}t||||d\}}|t||  }t|||| j| jd d S )NrN   r}   FrF  rH  r   r   r   test_Mx1_economic_rank_1  s    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 )NrN   r}   r   rK  FrL  rH  r   r   r   test_Mx1_economic_rank_p  s    z%BaseQRupdate.test_Mx1_economic_rank_pc           	      C   sT   |  d\}}}}}t||||d\}}|t||  }t|||| j| j d S )NrO   FrF  rH  r   r   r   test_1xN_rank_1  s    zBaseQRupdate.test_1xN_rank_1c           	      C   sv   | j ddd\}}}}}||jd}||jd}t||||d\}}|t||j  }t|||| j	| j
 d S )NrO   r   rK  FrL  rH  r   r   r   test_1xN_rank_p  s    zBaseQRupdate.test_1xN_rank_pc           	      C   sT   |  d\}}}}}t||||d\}}|t||  }t|||| j| j d S )NrP   FrF  rH  r   r   r   test_1x1_rank_1  s    zBaseQRupdate.test_1x1_rank_1c           	      C   sv   | j ddd\}}}}}||jd}||jd}t||||d\}}|t||j  }t|||| j	| j
 d S )NrP   r   rK  FrL  rH  r   r   r   test_1x1_rank_p%  s    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 )NrP   r   r   rW   r   r-   r   rD   r   r#   r$   r   rE  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rh|t|
|  }n|t|
|j  }|d}|	d}|
d}|d}t||||d\}}t|||| j	| j
| t||||d\}}t|||| j	| j
| |r,t||| j	| j
d t|| | j	| j
d |d}|	d}|
d}|d}t||||d\}}t|||| j	| j
| t||||d\}}t|||| j	| j
| |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
| |r6t|$|| j	| j
d t|| | j	| j
d |d}|	d}|
d}|d}|||||f\}}}}t||||d\}%}&t|%|&|| j	| j
| t||||d\}'}(t|'|(|| j	| j
| |rt|(|| j	| j
d t|| | j	| j
d qd S )	Nr}   FTr   r   r   r   r   )rW   r   rG  r   r   r   r   r   r%   r   r   r   ))rD   r   rR   r   r   r   rV   r   r   r   r)  v0r   r   r*  vsZaupr#   r$   r   rE  rc   rd   r   r   r   r   r   r   r   r   r   r   r8  r9  Zq4oZr4or+  r,  r-  r.  r   r   r   r   6  s~    




















z$BaseQRupdate.base_non_simple_stridesc                 C   s   |  tddd d S )NrF   r   Tr   rC   r   r   r   test_non_unit_strides_rank_1  s    z)BaseQRupdate.test_non_unit_strides_rank_1c                 C   s   |  tddd d S )Nr}   r   Tr   rC   r   r   r   %test_non_unit_strides_economic_rank_1  s    z2BaseQRupdate.test_non_unit_strides_economic_rank_1c                 C   s   |  tddd d S NrF   r&   Fr   rC   r   r   r   test_non_unit_strides_rank_p  s    z)BaseQRupdate.test_non_unit_strides_rank_pc                 C   s   |  tddd d S Nr}   r&   Fr   rC   r   r   r   %test_non_unit_strides_economic_rank_p  s    z2BaseQRupdate.test_non_unit_strides_economic_rank_pc                 C   s   |  tddd d S NrF   r   Fr   rC   r   r   r   test_neg_strides_rank_1  s    z$BaseQRupdate.test_neg_strides_rank_1c                 C   s   |  tddd d S Nr}   r   Fr   rC   r   r   r    test_neg_strides_economic_rank_1  s    z-BaseQRupdate.test_neg_strides_economic_rank_1c                 C   s   |  tddd d S rf  r   rC   r   r   r   test_neg_strides_rank_p  s    z$BaseQRupdate.test_neg_strides_rank_pc                 C   s   |  tddd d S rh  r   rC   r   r   r    test_neg_strides_economic_rank_p  s    z-BaseQRupdate.test_neg_strides_economic_rank_pc                 C   s   |  tddd d S rj  r   rC   r   r   r    test_non_itemsize_strides_rank_1  s    z-BaseQRupdate.test_non_itemsize_strides_rank_1c                 C   s   |  tddd d S rl  r   rC   r   r   r   )test_non_itemsize_strides_economic_rank_1  s    z6BaseQRupdate.test_non_itemsize_strides_economic_rank_1c                 C   s   |  tddd d S rf  r   rC   r   r   r    test_non_itemsize_strides_rank_p  s    z-BaseQRupdate.test_non_itemsize_strides_rank_pc                 C   s   |  tddd d S rh  r   rC   r   r   r   )test_non_itemsize_strides_economic_rank_p  s    z6BaseQRupdate.test_non_itemsize_strides_economic_rank_pc                 C   s   |  tddd d S rj  r   rC   r   r   r   !test_non_native_byte_order_rank_1  s    z.BaseQRupdate.test_non_native_byte_order_rank_1c                 C   s   |  tddd d S rl  r   rC   r   r   r   *test_non_native_byte_order_economic_rank_1  s    z7BaseQRupdate.test_non_native_byte_order_economic_rank_1c                 C   s   |  tddd d S rf  r   rC   r   r   r   !test_non_native_byte_order_rank_p  s    z.BaseQRupdate.test_non_native_byte_order_rank_pc                 C   s   |  tddd d S rh  r   rC   r   r   r   *test_non_native_byte_order_economic_rank_p  s    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 )NrK   r   FTr   r   
rW   r   rG  r   r   r   r%   r   r   r   rD   r   r   r   r)  rb  re   r#   r$   r   rE  rc   rd   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 )NrL   r}   r   FTr   r   rx  ry  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 )	NrK   r&   rK  r   r   FTr   )rW   r   r   r   r   r   r   r%   r   r   r   )rD   r   r   r   r)  rb  re   r#   r$   r   rE  rc   rd   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 )NrL   )rW   r   r-   r   r   r   r`  r   r   r   r<    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 )NrL   r   r=  r_  r`  r   r   r   r>    s
    z#BaseQRupdate.test_mismatched_shapesc              	   C   s   g d}|  d\}}}}}|D ]}|j|}tjdd |j|}	W d    n1 s^0    Y  |j|}
|j|}ttt|||| ttt||	|| ttt|||
| ttt|||| q d S )Nr   rL   r   r   )rW   r   r=   r   r   r   r-   r   )rD   r   r   r   r   r)  rb  r   r#   r$   r   rE  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   ZarangerM  r   r   r-   r   )rD   r#   r$   r   rE  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 )NrL   r&   rK  r   rJ   r   r   rW   r   r   r   r   r-   r   
rD   r   r   r   r)  rb  r#   r$   r   rE  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 )	NrL   r}   r&   )rR   r   r   rJ   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   rG  r   r%   r   r   )rD   r#   r$   r   rE  rc   rd   re   r   r   r   test_u_exactly_in_span_qY  s    &z%BaseQRupdate.test_u_exactly_in_span_q)rF   r   )1rX   rY   rZ   rW   rI  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  ra  r   rd  re  rg  ri  rk  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rz  r{  r|  r<  r>  r   r~  r   r  r  r?  r   r   r   r   rD    sZ   






MrD  c                   @   s   e Zd ZedZdS )TestQRupdate_fr   Nr   r   r   r   r   r  b  s   r  c                   @   s   e Zd ZedZdS )TestQRupdate_Fr   Nr   r   r   r   r   r  e  s   r  c                   @   s   e Zd ZedZdS )TestQRupdate_dr   Nr   r   r   r   r   r  h  s   r  c                   @   s   e Zd ZedZdS )TestQRupdate_Dr   Nr   r   r   r   r   r  k  s   r  c            
      C   s   ddg} dg}g d}ddg}g d}t | ||||D ]N\}}}}}	|dkrtt||||d|	 t||||d|	 q8t||||d|	 q8d S )	Nr   r   rG   )r   r   Ar   r&   )r   r   r   r   r   )r   r   check_form_qTu)
q_orderq_shapeu_orderu_shaper   Zqor   Z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 rbt j|}t j|}nL|jdv rt j|dt j|  }t j|dt j|  }ntd t ||| }|dkrt |||}nt||f\}d	t 	|j
d
   }d
t 	|j }	t |j |}
t||}t||
||	d d S )N/   r   r   fdZFDrQ   z#form_qTu doesn't support this dtyper  r
   r   r   )r   rS   rT   r   charr-   requirer7   r=   r   r   r   r   r   r   _decomp_updateZ	_form_qTur   )r  r  r  r  Zu_ndimr   r#   r   r   r   expectedresr   r   r   r    s*    


r  )NNT)NN)T)*r   numpyr   Znumpy.testingr   r   r   Zpytestr   r   Zscipyr   Zscipy.linalg._decomp_updater  r   r   r	   r   r"   r%   r7   r9   r<   rA   rB   r[   r   r   r   r   r   r@  rA  rB  rC  rD  r  r  r  r  r  r  r   r   r   r   <module>   sT   


           N