B
    `                @   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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-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 kr dt | jjd   }|d kr:dt | jj }|rXt| jd | jd kd t | j	 | }t
|t | jd ||d d S )Ng      $@   
   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   T/home/dcms/DCMS/lib/python3.7/site-packages/scipy/linalg/tests/test_decomp_update.pyassert_unitary
   s    r   c             C   sp   |d kr dt | jjd   }|d kr:dt | jj }t | jd | jd dt j}t| | d||d d S )Ng      $@r
   r   r   g        )r   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 )N)r   r   )r   r    r   r   )qrr   r   r   r   r   r   r   check_qr   s    r#   c       
      C   sN  ddddddddg}t |}d	}g }x"| D ]}|jd
kr|||  }|d
7 }t|d	 |jd	  |d
  |j}||d
 d |d	  }||d< n|jdkr4|||  }||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,W |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(
r5   c             C   sx   g }xn| D ]f}t |}|jdkr<|d d dd d df }n"|jdkrV|d d d }ntd||d< || q
W |S )Nr
   r   r   z2negate_strides only works for ndim = 1 or 2 arrays.)r   Z
zeros_liker)   r+   r,   )r-   r0   r   br   r   r   negate_strides<   s    



r7   c             C   sN   g }xD| D ]<}|j }t|jd|fdg}||}||d< || q
W |S )Nr   )ZjunkZS1.)r   r   r*   r   Zgetfieldr,   )r-   outr   Za_dtyper6   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   s    z"make_nonnative.<locals>.<listcomp>r   )r-   r   r   r   make_nonnativeV   s    r>   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 )Ng      $@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  )   rC   )   r%   )r%   rD   )rC   r   )r   rC   )r   r   )sqrtallfatMx11xN1x1r   y              ?)mode)	r   randomseediscomplexobjr   typer;   r   Zqr)r@   rO   rK   r   r   r6   r!   r"   r   r   r   generate_   s    zBaseQRdeltas.generateN)rB   )__name__
__module____qualname__rA   rP   r   r   r   r   r?   Z   s   r?   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   sb   |  d\}}}xLt|jd D ]:}t|||dd\}}t||d}t|||| j| j q W d S )NrE   r   F)overwrite_qr)	rP   ranger   r   r   deleter#   r   r   )r@   r   r!   r"   rowq1r1a1r   r   r   test_sqr_1_rowl   s
    zBaseQRdelete.test_sqr_1_rowc       	   	   C   s   |  d\}}}xptddD ]b}x\t|jd | D ]F}t||||dd\}}t|t||| d}t|||| j| j	 q4W qW d S )NrE   r
      r   F)rU   )
rP   rV   r   r   r   rW   slicer#   r   r   )	r@   r   r!   r"   ndelrX   rY   rZ   r[   r   r   r   test_sqr_p_rows   s    zBaseQRdelete.test_sqr_p_rowc             C   sd   |  d\}}}xNt|jd D ]<}t|||ddd\}}t||d}t|||| j| j q W d S )NrE   r   colF)whichrU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   ra   rY   rZ   r[   r   r   r   test_sqr_1_col{   s
    zBaseQRdelete.test_sqr_1_colc       	   
   C   s   |  d\}}}xrtddD ]d}x^t|jd | D ]H}t||||ddd\}}t|t||| d}t|||| j| j	 q4W qW d S )NrE   r
   r]   r   ra   F)rb   rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   ra   rY   rZ   r[   r   r   r   test_sqr_p_col   s    zBaseQRdelete.test_sqr_p_colc             C   sb   |  d\}}}xLt|jd D ]:}t|||dd\}}t||d}t|||| j| j q W d S )NrF   r   F)rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   rX   rY   rZ   r[   r   r   r   test_tall_1_row   s
    zBaseQRdelete.test_tall_1_rowc       	   	   C   s   |  d\}}}xptddD ]b}x\t|jd | D ]F}t||||dd\}}t|t||| d}t|||| j| j	 q4W qW d S )NrF   r
   r]   r   F)rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   rX   rY   rZ   r[   r   r   r   test_tall_p_row   s    zBaseQRdelete.test_tall_p_rowc             C   sd   |  d\}}}xNt|jd D ]<}t|||ddd\}}t||d}t|||| j| j q W d S )NrF   r   ra   F)rb   rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   ra   rY   rZ   r[   r   r   r   test_tall_1_col   s
    zBaseQRdelete.test_tall_1_colc       	   
   C   s   |  d\}}}xrtddD ]d}x^t|jd | D ]H}t||||ddd\}}t|t||| d}t|||| j| j	 q4W qW d S )NrF   r
   r]   r   ra   F)rb   rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   ra   rY   rZ   r[   r   r   r   test_tall_p_col   s    zBaseQRdelete.test_tall_p_colc             C   sb   |  d\}}}xLt|jd D ]:}t|||dd\}}t||d}t|||| j| j q W d S )NrG   r   F)rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   rX   rY   rZ   r[   r   r   r   test_fat_1_row   s
    zBaseQRdelete.test_fat_1_rowc       	   	   C   s   |  d\}}}xptddD ]b}x\t|jd | D ]F}t||||dd\}}t|t||| d}t|||| j| j	 q4W qW d S )NrG   r
   r]   r   F)rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   rX   rY   rZ   r[   r   r   r   test_fat_p_row   s    zBaseQRdelete.test_fat_p_rowc             C   sd   |  d\}}}xNt|jd D ]<}t|||ddd\}}t||d}t|||| j| j q W d S )NrG   r   ra   F)rb   rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   ra   rY   rZ   r[   r   r   r   test_fat_1_col   s
    zBaseQRdelete.test_fat_1_colc       	   
   C   s   |  d\}}}xrtddD ]d}x^t|jd | D ]H}t||||ddd\}}t|t||| d}t|||| j| j	 q4W qW d S )NrG   r
   r]   r   ra   F)rb   rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   ra   rY   rZ   r[   r   r   r   test_fat_p_col   s    zBaseQRdelete.test_fat_p_colc             C   sf   |  dd\}}}xNt|jd D ]<}t|||dd\}}t||d}t|||| j| jd q"W d S )NrF   economicr   F)rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   rX   rY   rZ   r[   r   r   r   test_economic_1_row   s
    z BaseQRdelete.test_economic_1_rowc       	      C   sv   |  dd\}}}x^t|jd | D ]H}t||||dd\}}t|t||| d}t|||| j| j	d q&W d S )NrF   rm   r   F)rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r_   r   r!   r"   rX   rY   rZ   r[   r   r   r   base_economic_p_row_xxx   s
    z$BaseQRdelete.base_economic_p_row_xxxc             C   s   |  d d S )Nr$   )ro   )r@   r   r   r   test_economic_p_row_economic   s    z)BaseQRdelete.test_economic_p_row_economicc             C   s   |  d d S )Nr'   )ro   )r@   r   r   r   test_economic_p_row_sqr   s    z$BaseQRdelete.test_economic_p_row_sqrc             C   s   |  d d S )Nr%   )ro   )r@   r   r   r   test_economic_p_row_fat   s    z$BaseQRdelete.test_economic_p_row_fatc             C   sh   |  dd\}}}xPt|jd D ]>}t|||ddd\}}t||d}t|||| j| jd q"W d S )NrF   rm   r   ra   F)rb   rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   ra   rY   rZ   r[   r   r   r   test_economic_1_col   s
    z BaseQRdelete.test_economic_1_colc       	   
   C   s   |  dd\}}}xttddD ]f}x`t|jd | D ]J}t||||ddd\}}t|t||| d}t|||| j| j	d q6W qW d S )	NrF   rm   r
   r]   r   ra   F)rb   rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   ra   rY   rZ   r[   r   r   r   test_economic_p_col   s    z BaseQRdelete.test_economic_p_colc             C   sb   |  d\}}}xLt|jd D ]:}t|||dd\}}t||d}t|||| j| j q W d S )NrH   r   F)rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   rX   rY   rZ   r[   r   r   r   test_Mx1_1_row   s
    zBaseQRdelete.test_Mx1_1_rowc       	   	   C   s   |  d\}}}xptddD ]b}x\t|jd | D ]F}t||||dd\}}t|t||| d}t|||| j| j	 q4W qW d S )NrH   r
   r]   r   F)rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   rX   rY   rZ   r[   r   r   r   test_Mx1_p_row   s    zBaseQRdelete.test_Mx1_p_rowc             C   sd   |  d\}}}xNt|jd D ]<}t|||ddd\}}t||d}t|||| j| j q W d S )NrI   r   ra   F)rb   rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   ra   rY   rZ   r[   r   r   r   test_1xN_1_col  s
    zBaseQRdelete.test_1xN_1_colc       	   
   C   s   |  d\}}}xrtddD ]d}x^t|jd | D ]H}t||||ddd\}}t|t||| d}t|||| j| j	 q4W qW d S )NrI   r
   r]   r   ra   F)rb   rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   ra   rY   rZ   r[   r   r   r   test_1xN_p_col  s    zBaseQRdelete.test_1xN_p_colc             C   sf   |  dd\}}}xNt|jd D ]<}t|||dd\}}t||d}t|||| j| jd q"W d S )NrH   rm   r   F)rU   )	rP   rV   r   r   r   rW   r#   r   r   )r@   r   r!   r"   rX   rY   rZ   r[   r   r   r   test_Mx1_economic_1_row  s
    z$BaseQRdelete.test_Mx1_economic_1_rowc       	   	   C   s   |  dd\}}}xrtddD ]d}x^t|jd | D ]H}t||||dd\}}t|t||| d}t|||| j| j	d q6W qW d S )NrH   rm   r
   r]   r   F)rU   )
rP   rV   r   r   r   rW   r^   r#   r   r   )	r@   r   r!   r"   r_   rX   rY   rZ   r[   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 )NrI   r   r   rX   )r   r   )r   r   )rP   r   r   r   ndarrayr   r   )r@   r   r!   r"   rY   rZ   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 )	NrF   rB   r   rX   )r   r   )r   r   r   rm   )rP   r   r   r   r   r{   r   )r@   r   r!   r"   rY   rZ   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 )	NrH   rm   r   r   ra   )r   r   )r   r   rB   )	rP   r   r   r   r{   r   r   r   r   )r@   r   r!   r"   rY   rZ   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 )	NrF   rB   r   r   ra   )r   r   rm   )r   r   )	rP   r   r   r   r   r   r   r   r{   )r@   r   r!   r"   rY   rZ   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 )NrJ   r   r   rX   )r   r   )r   r   ra   )	rP   r   r   r   r{   r   r   r   r   )r@   r   r!   r"   rY   rZ   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}xtdddg|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 |rPt||| | j
| jd
 t||| | j
| jd
 |d}|d}|||f\}}t|||	||d\}}t	|||| j
| j t|||	||d	\}}t	|||| j
| j |rjt||| | j
| jd
 t||| | j
| jd
 qjW d S )NrX   rE   rF   rG   r   r   FFT)r   r   )r^   	itertoolsproductrP   r   rW   r   copyr   r#   r   r   r   )r@   adjust_stridesksprb   overwriteableqindrindrO   r/   r   q0r0qsrsr[   r1   r!   r"   rY   rZ   q1or1oq2r2q2or2oq3r3q3or3or   r   r   base_non_simple_stridese  sV     
 





z$BaseQRdelete.base_non_simple_stridesc             C   s   |  tdgddd d S )Nr   r   rX   T)r   r5   )r@   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$   rX   T)r   r5   )r@   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   ra   T)r   r5   )r@   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$   ra   F)r   r5   )r@   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   rX   F)r   r7   )r@   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$   rX   F)r   r7   )r@   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   ra   F)r   r7   )r@   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 )Nr   r$   ra   F)r   r7   )r@   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 )Nr   r   rX   F)r   r:   )r@   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 )Nr   r$   rX   F)r   r:   )r@   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 )Nr   r   ra   F)r   r:   )r@   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 )Nr   r$   ra   F)r   r:   )r@   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 )Nr   r   rX   F)r   r>   )r@   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 )Nr   r$   rX   F)r   r>   )r@   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 )Nr   r   ra   F)r   r>   )r@   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 )Nr   r$   ra   F)r   r>   )r@   r   r   r    test_non_native_byte_order_p_col  s    z-BaseQRdelete.test_non_native_byte_order_p_colc       
   	   C   s   |  d\}}}xt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,W d S )NrE   ir   r$   rX   ra   F)rU   r   )rP   r   r   r   r   rW   r^   r   r#   r   r   )
r@   r   r!   r"   r/   r   wrY   rZ   r[   r   r   r   
test_neg_k  s    &.,zBaseQRdelete.test_neg_krB   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 )NrB   TFrX   rE   r   r$   r   r   )r   r   C)
r^   rP   r   rW   r   r   r#   r   r   r   )r@   rb   r   Ztest_CZtest_FrK   r   r   r   r   r   r   r[   r!   r"   rY   rZ   r   r   r   r   r   r   r   base_overwrite_qr  s:    $





zBaseQRdelete.base_overwrite_qrc             C   s   |  dddd d S )NrX   r   T)r   )r@   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 )NrX   r   Trm   )r   )r@   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 )Nra   r   T)r   )r@   r   r   r   test_overwrite_qr_1_col  s    z$BaseQRdelete.test_overwrite_qr_1_colc             C   s   |  dddd d S )NrX   r$   T)r   )r@   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 )NrX   r$   Trm   )r   )r@   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 )Nra   r$   FT)r   )r@   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 )NrE   r   Zfoo)rb   )rP   assert_raisesr+   r   )r@   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 )NrF   r   r   ra   )rP   r   r+   r   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 )NrF   r   r   ra   r$   r
   r   )rP   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 )NrF   r   r   )rP   r   r+   r   r   array)r@   r   r!   r"   r   r   r   test_empty_q1  s    zBaseQRdelete.test_empty_qc             C   s,   |  d\}}}ttt|tg dd d S )NrF   r   r   )rP   r   r+   r   r   r   )r@   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 )NrF   r   r   )rP   r   r+   r   )r@   r   r!   r"   r   r   r   test_mismatched_q_and_r;  s    z$BaseQRdelete.test_mismatched_q_and_rc             C   s   ddddddddd	d
ddg}|  d\}}}x|D ]}|j|}|j|}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 q2W d S )Nint8int16int32int64uint8uint16uint32uint64float16
longdoublelongcomplexboolrF   r   r   rX   r
   ra   )rP   realr;   r   r+   r   )r@   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 )	NrF   r   )r   r   r   r   rX   r$   ra   )rP   r   r   nanr   r+   r   )r@   a0r   r   r!   r"   r   r   r   test_check_finiteS  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 )NrJ   )r   r   r   r   rX   ra   )rP   r   r+   r   )r@   r   r!   r"   r   r   r   test_qr_scalard  s
    zBaseQRdelete.test_qr_scalarN)rB   )CrQ   rR   rS   r\   r`   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rn   ro   rp   rq   rr   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   rT   k   s   					9

&rT   c               @   s   e Zd ZedZdS )TestQRdelete_ffN)rQ   rR   rS   r   r   r   r   r   r   r   k  s   r   c               @   s   e Zd ZedZdS )TestQRdelete_Fr   N)rQ   rR   rS   r   r   r   r   r   r   r   n  s   r   c               @   s   e Zd ZedZdS )TestQRdelete_ddN)rQ   rR   rS   r   r   r   r   r   r   r   q  s   r   c               @   s   e Zd ZedZdS )TestQRdelete_DDN)rQ   rR   rS   r   r   r   r   r   r   r   t  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 )BaseQRinsertrB   rX   r   c       
         s   t t| ||\}}}t|dk |dkr`|dkrHt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   rX   r   ra   z%which should be either "row" or "col"y              ?)superr   rP   r   r   rL   r   r+   rN   r   rO   r;   )
r@   rO   rK   rb   r   r   r!   r"   ur6   )	__class__r   r   rP   x  s     zBaseQRinsert.generatec       	      C   sl   | j ddd\}}}}xPt|jd d D ]:}t||||\}}t|||d}t|||| j| j q*W d S )NrE   rX   )rb   r   r   )	rP   rV   r   r	   r   insertr#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   r\     s
    zBaseQRinsert.test_sqr_1_rowc       	   	   C   sz   | j dddd\}}}}x\t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrE   rX   r$   )rb   r   r   r   )rP   rV   r   r	   r   r   rB   intpr#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   r`     s
    zBaseQRinsert.test_sqr_p_rowc       	   	   C   sr   | j ddd\}}}}xVt|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q*W d S )NrE   ra   )rb   r   F)overwrite_qru)	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   rc     s
    zBaseQRinsert.test_sqr_1_colc       	   	   C   s   | j dddd\}}}}xbt|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrE   ra   r$   )rb   r   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   rd     s
    zBaseQRinsert.test_sqr_p_colc       	      C   sl   | j ddd\}}}}xPt|jd d D ]:}t||||\}}t|||d}t|||| j| j q*W d S )NrF   rX   )rb   r   r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   re     s
    zBaseQRinsert.test_tall_1_rowc       	   	   C   sz   | j dddd\}}}}x\t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrF   rX   r$   )rb   r   r   r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   rf     s
    zBaseQRinsert.test_tall_p_rowc       	   	   C   sr   | j ddd\}}}}xVt|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q*W d S )NrF   ra   )rb   r   F)r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   rg     s
    zBaseQRinsert.test_tall_1_colc       
   	   C   s   | j dd|d\}}}}xbt|jd d D ]L}t||||ddd\}}t|t||tj|d}	t|||	| j	| j
 q,W d S )NrF   ra   )rb   r   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )
r@   r   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   base_tall_p_col_xxx  s
    z BaseQRinsert.base_tall_p_col_xxxc             C   s   |  d d S )Nr$   )r   )r@   r   r   r   test_tall_p_col_tall  s    z!BaseQRinsert.test_tall_p_col_tallc             C   s   |  d d S )Nr'   )r   )r@   r   r   r   test_tall_p_col_sqr  s    z BaseQRinsert.test_tall_p_col_sqrc             C   s   |  d d S )Nr%   )r   )r@   r   r   r   test_tall_p_col_fat  s    z BaseQRinsert.test_tall_p_col_fatc       	      C   sl   | j ddd\}}}}xPt|jd d D ]:}t||||\}}t|||d}t|||| j| j q*W d S )NrG   rX   )rb   r   r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   ri     s
    zBaseQRinsert.test_fat_1_rowc       
   	   C   sz   | j dd|d\}}}}x\t|jd d D ]F}t||||\}}t|t||tj|d}	t|||	| j	| j
 q,W d S )NrG   rX   )rb   r   r   r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )
r@   r   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   base_fat_p_row_xxx  s
    zBaseQRinsert.base_fat_p_row_xxxc             C   s   |  d d S )Nr$   )r   )r@   r   r   r   test_fat_p_row_fat  s    zBaseQRinsert.test_fat_p_row_fatc             C   s   |  d d S )Nr'   )r   )r@   r   r   r   test_fat_p_row_sqr  s    zBaseQRinsert.test_fat_p_row_sqrc             C   s   |  d d S )Nr%   )r   )r@   r   r   r   test_fat_p_row_tall  s    z BaseQRinsert.test_fat_p_row_tallc       	   	   C   sr   | j ddd\}}}}xVt|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q*W d S )NrG   ra   )rb   r   F)r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   rk     s
    zBaseQRinsert.test_fat_1_colc       	   	   C   s   | j dddd\}}}}xbt|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrG   ra   r$   )rb   r   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   rl     s
    zBaseQRinsert.test_fat_p_colc       	      C   sr   |  ddd\}}}}xVt|jd d D ]@}t||||dd\}}t|||d}t|||| j| jd q*W d S )NrF   rm   rX   r   r   F)r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   rn   
  s
    z BaseQRinsert.test_economic_1_rowc       	   	   C   s   |  dddd\}}}}xbt|jd d D ]L}t||||dd\}}t|td|tj|d}t|||| j	| j
d q,W d S )	NrF   rm   rX   r$   r   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   test_economic_p_row  s
    z BaseQRinsert.test_economic_p_rowc       	   	   C   sz   | j dddd\}}}}x\t|jd d D ]F}t||| |ddd\}}t|||d}t|||| j| j	d q,W d S )NrF   rm   ra   )rb   r   F)r   )
rP   rV   r   r	   r   r   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   rs     s
    z BaseQRinsert.test_economic_1_colc             C   sT   t jdd| jd}t jd| jd}t dddddg| j}ttjt|||dd d S )Nr'   r$   )r   r   r   ra   )r   r   r   r   r   r   ZLinAlgErrorr	   )r@   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\}}}}xdt|jd d D ]N}t||||ddd\}}t|t||tj|d}	t|||	| j	| j
d q.W d S )NrF   rm   ra   )rb   r   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )
r@   r   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   base_economic_p_col_xxx,  s
    z$BaseQRinsert.base_economic_p_col_xxxc             C   s   |  d d S )Nr$   )r   )r@   r   r   r   test_economic_p_col_eco3  s    z$BaseQRinsert.test_economic_p_col_ecoc             C   s   |  d d S )Nr'   )r   )r@   r   r   r   test_economic_p_col_sqr7  s    z$BaseQRinsert.test_economic_p_col_sqrc             C   s   |  d d S )Nr%   )r   )r@   r   r   r   test_economic_p_col_fat;  s    z$BaseQRinsert.test_economic_p_col_fatc       	      C   sl   | j ddd\}}}}xPt|jd d D ]:}t||||\}}t|||d}t|||| j| j q*W d S )NrH   rX   )rb   r   r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   ru   ?  s
    zBaseQRinsert.test_Mx1_1_rowc       	   	   C   sz   | j dddd\}}}}x\t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrH   rX   r$   )rb   r   r   r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   rv   F  s
    zBaseQRinsert.test_Mx1_p_rowc       	   	   C   sr   | j ddd\}}}}xVt|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q*W d S )NrH   ra   )rb   r   F)r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   test_Mx1_1_colM  s
    zBaseQRinsert.test_Mx1_1_colc       	   	   C   s   | j dddd\}}}}xbt|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrH   ra   r$   )rb   r   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   test_Mx1_p_colT  s
    zBaseQRinsert.test_Mx1_p_colc       	      C   sn   |  ddd\}}}}xRt|jd d D ]<}t||||\}}t|||d}t|||| j| jd q*W d S )NrH   rm   rX   r   r   F)	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   ry   [  s
    z$BaseQRinsert.test_Mx1_economic_1_rowc       	   	   C   s|   |  dddd\}}}}x^t|jd d D ]H}t||||\}}t|td|tj|d}t|||| j	| j
d q,W d S )NrH   rm   rX   r$   r   r   F)rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   rz   b  s
    z$BaseQRinsert.test_Mx1_economic_p_rowc       	   	   C   st   |  ddd\}}}}xXt|jd d D ]B}t||||ddd\}}t|||d}t|||| j| jd q*W d S )NrH   rm   ra   r   F)r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   test_Mx1_economic_1_coli  s
    z$BaseQRinsert.test_Mx1_economic_1_colc       	   	   C   s   |  dddd\}}}}xdt|jd d D ]N}t||||ddd\}}t|td|tj|d}t|||| j	| j
d q,W d S )NrH   rm   ra   r$   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   test_Mx1_economic_p_colp  s
    z$BaseQRinsert.test_Mx1_economic_p_colc       	      C   sl   | j ddd\}}}}xPt|jd d D ]:}t||||\}}t|||d}t|||| j| j q*W d S )NrI   rX   )rb   r   r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   test_1xN_1_roww  s
    zBaseQRinsert.test_1xN_1_rowc       	   	   C   sz   | j dddd\}}}}x\t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrI   rX   r$   )rb   r   r   r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   test_1xN_p_row~  s
    zBaseQRinsert.test_1xN_p_rowc       	   	   C   sr   | j ddd\}}}}xVt|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q*W d S )NrI   ra   )rb   r   F)r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   rw     s
    zBaseQRinsert.test_1xN_1_colc       	   	   C   s   | j dddd\}}}}xbt|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrI   ra   r$   )rb   r   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   rx     s
    zBaseQRinsert.test_1xN_p_colc       	      C   sl   | j ddd\}}}}xPt|jd d D ]:}t||||\}}t|||d}t|||| j| j q*W d S )NrJ   rX   )rb   r   r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   test_1x1_1_row  s
    zBaseQRinsert.test_1x1_1_rowc       	   	   C   sz   | j dddd\}}}}x\t|jd d D ]F}t||||\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrJ   rX   r$   )rb   r   r   r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   rX   rY   rZ   r[   r   r   r   test_1x1_p_row  s
    zBaseQRinsert.test_1x1_p_rowc       	   	   C   sr   | j ddd\}}}}xVt|jd d D ]@}t||||ddd\}}t|||d}t|||| j| j q*W d S )NrJ   ra   )rb   r   F)r   )	rP   rV   r   r	   r   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   r[   r   r   r   test_1x1_1_col  s
    zBaseQRinsert.test_1x1_1_colc       	   	   C   s   | j dddd\}}}}xbt|jd d D ]L}t||||ddd\}}t|td|tj|d}t|||| j	| j
 q,W d S )NrJ   ra   r$   )rb   r   r   F)r   )rP   rV   r   r	   r   r   rB   r   r#   r   r   )	r@   r   r!   r"   r   ra   rY   rZ   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 )NrJ   rX   )rb   )r   r   r   ra   )rP   r   r+   r	   )r@   r   r!   r"   r   r   r   r   test_1x1_1_scalar  s    zBaseQRinsert.test_1x1_1_scalarc       !   	   C   s  xdD ]v}| j |||d\}}}}	||||	f\}
}}|dkr`t|||	|dkrXd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W d S )
N)rE   rF   rG   )rb   r   r   rX   r   r   F)r   T)
rP   r   r   rB   r   r   r	   r#   r   r   )!r@   r   r/   r   rb   rO   r   r   r   u0r   r   usZair!   r"   r   rY   rZ   r   r   r   r   r   r   r   r   r   r   q5r5q5or5or   r   r   r     sJ    











z$BaseQRinsert.base_non_simple_stridesc             C   s   |  tddd d S )Nr   r   rX   )r   r5   )r@   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_1_rowc             C   s   |  tddd d S )Nr   r$   rX   )r   r5   )r@   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_p_rowc             C   s   |  tddd d S )Nr   r   ra   )r   r5   )r@   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_1_colc             C   s   |  tddd d S )Nr   r$   ra   )r   r5   )r@   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_p_colc             C   s   |  tddd d S )Nr   r   rX   )r   r7   )r@   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_1_rowc             C   s   |  tddd d S )Nr   r$   rX   )r   r7   )r@   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_p_rowc             C   s   |  tddd d S )Nr   r   ra   )r   r7   )r@   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_1_colc             C   s   |  tddd d S )Nr   r$   ra   )r   r7   )r@   r   r   r   r      s    z#BaseQRinsert.test_neg_strides_p_colc             C   s   |  tddd d S )Nr   r   rX   )r   r:   )r@   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 )Nr   r$   rX   )r   r:   )r@   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 )Nr   r   ra   )r   r:   )r@   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 )Nr   r$   ra   )r   r:   )r@   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 )Nr   r   rX   )r   r>   )r@   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_1_rowc             C   s   |  tddd d S )Nr   r$   rX   )r   r>   )r@   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_p_rowc             C   s   |  tddd d S )Nr   r   ra   )r   r>   )r@   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_1_colc             C   s   |  tddd d S )Nr   r$   ra   )r   r>   )r@   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 )NrE   ra   r   )rb   r   r   r   F)r   T)r   r   r   )
rP   r   r	   r   r   r#   r   r   r   r   )r@   r   r   r"   r   r!   r   rY   rZ   r[   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 )NrE   ra   r$   )rb   r   r   r   r   F)r   T)r   r   )rP   r   r   r   r*   r   r	   r#   r   r   r   )r@   r   r   r"   r   r!   r[   rY   rZ   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 )NrE   rX   )rb   r   ra   )rP   r   r+   r	   r   r   )r@   r   r!   r"   r   r   r   r   test_empty_inputsN  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 )NrF   rX   )rb   r   r   ra   )rP   r   r+   r	   )r@   r   r!   r"   r   r   r   r   test_mismatched_shapesW  s    z#BaseQRinsert.test_mismatched_shapesc       
      C   s   ddddddddd	d
ddg}| j ddd\}}}}x|D ]}|j|}|j|}|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 q8W d S )Nr   r   r   r   r   r   r   r   r   r   r   r   rE   rX   )rb   r   ra   )rP   r   r;   r   r+   r	   )
r@   r   r   r   r   r   r   r!   r"   r   r   r   r   r   `  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 )
NrE   rX   r$   )rb   r   r   )r   r   r   ra   )r   r   )rP   r   r   r   r   r+   r	   )r@   r   r   r   r   r!   r"   r   r   r   r   r   q  s&    

  

  

  zBaseQRinsert.test_check_finite)rB   rX   r   )GrQ   rR   rS   rP   r\   r`   rc   rd   re   rf   rg   r   r   r   r   ri   r   r   r   r   rk   rl   rn   r   rs   r   r   r   r   r   ru   rv   r   r   ry   rz   r   r   r   r   rw   rx   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   __classcell__r   r   )r   r   r   w  s   
2!		r   c               @   s   e Zd ZedZdS )TestQRinsert_fr   N)rQ   rR   rS   r   r   r   r   r   r   r
    s   r
  c               @   s   e Zd ZedZdS )TestQRinsert_Fr   N)rQ   rR   rS   r   r   r   r   r   r   r    s   r  c               @   s   e Zd ZedZdS )TestQRinsert_dr   N)rQ   rR   rS   r   r   r   r   r   r   r    s   r  c               @   s   e Zd ZedZdS )TestQRinsert_Dr   N)rQ   rR   rS   r   r   r   r   r   r   r    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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 )^BaseQRupdaterB   r   c                s   t t| ||\}}}|dkrFt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   y              ?)
r   r  rP   r   rL   r   rN   r   rO   r;   )r@   rO   rK   r   r   r!   r"   r   vr6   r9   )r   r   r   rP     s    zBaseQRupdate.generatec       	      C   sT   |  d\}}}}}t||||d\}}|t||  }t|||| j| j d S )NrE   F)rP   r   r   outerr   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   r   r   r   test_sqr_rank_1  s    zBaseQRupdate.test_sqr_rank_1c       
      C   s   xdD ]~}| j d|d\}}}}}|dkrF||jd}||jd}t||||d\}}|t||j  }	t|||	| j	| j
 qW d S )N)r   r
   r$   r'   rE   )r   r   F)rP   reshapesizer   r   r   r   r   r#   r   r   )
r@   r   r   r!   r"   r   r  rY   rZ   r[   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 )NrF   F)rP   r   r   r  r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   r   r   r   test_tall_rank_1  s    zBaseQRupdate.test_tall_rank_1c       
      C   s   xdD ]~}| j d|d\}}}}}|dkrF||jd}||jd}t||||d\}}|t||j  }	t|||	| j	| j
 qW d S )N)r   r
   r$   r'   rF   )r   r   F)rP   r  r  r   r   r   r   r   r#   r   r   )
r@   r   r   r!   r"   r   r  rY   rZ   r[   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 )NrG   F)rP   r   r   r  r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   r   r   r   test_fat_rank_1  s    zBaseQRupdate.test_fat_rank_1c       
      C   s   xdD ]~}| j d|d\}}}}}|dkrF||jd}||jd}t||||d\}}|t||j  }	t|||	| j	| j
 qW d S )N)r   r
   r$   r'   rG   )r   r   F)rP   r  r  r   r   r   r   r   r#   r   r   )
r@   r   r   r!   r"   r   r  rY   rZ   r[   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 )NrF   rm   F)rP   r   r   r  r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   r   r   r   test_economic_rank_1  s    z!BaseQRupdate.test_economic_rank_1c       
      C   s   xdD ]}|  dd|\}}}}}|dkrF||jd}||jd}t||||d\}}|t||j  }	t|||	| j	| j
d qW d S )N)r   r
   r$   r'   rF   rm   r   F)rP   r  r  r   r   r   r   r   r#   r   r   )
r@   r   r   r!   r"   r   r  rY   rZ   r[   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 )NrH   F)rP   r   r   r  r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   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 )NrH   r   )r   F)rP   r  r  r   r   r   r   r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   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 )NrH   rm   F)rP   r   r   r  r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   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 )NrH   rm   r   )r   F)rP   r  r  r   r   r   r   r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   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 )NrI   F)rP   r   r   r  r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   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 )NrI   r   )r   F)rP   r  r  r   r   r   r   r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   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 )NrJ   F)rP   r   r   r  r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   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 )NrJ   r   )r   F)rP   r  r  r   r   r   r   r   r#   r   r   )	r@   r   r!   r"   r   r  rY   rZ   r[   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 )NrJ   )r   r   r   )rP   r   r+   r   )r@   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}xdD ]}|  |||\}}}	}
}|||	|
|f\}}}}|dkrl|t|
|  }n|t|
|j  }|d}|	d}|
d}|d}t||||d\}}t|||| j	| j
| t||||d\}}t|||| j	| j
| |r0t||| 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
| |r:t|$|| j	| j
d t|| | j	| j
d |d}|	d}|
d}|d}|||||f\}}}}t||||d\}%}&t|%|&|| j	| j
| t||||d\}'}(t|'|(|| j	| j
| |rt|(|| j	| j
d t|| | j	| j
d qW d S )	Nrm   FT)rE   rF   rG   r   r   r   )r   r   )rP   r   r  r   r   r   r   r   r#   r   r   r   ))r@   r   rK   r   r   r   rO   r   r   r   r   v0r   r   r   vsZaupr!   r"   r   r  rY   rZ   r   r   r   r   r   r   r   r   r   r   r  r  Zq4oZr4or   r   r   r   r   r   r   r   4  s~    



















z$BaseQRupdate.base_non_simple_stridesc             C   s   |  tddd d S )NrB   r   T)r   r5   )r@   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 )Nrm   r   T)r   r5   )r@   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 )NrB   r$   F)r   r5   )r@   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 )Nrm   r$   F)r   r5   )r@   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 )NrB   r   F)r   r7   )r@   r   r   r   test_neg_strides_rank_1  s    z$BaseQRupdate.test_neg_strides_rank_1c             C   s   |  tddd d S )Nrm   r   F)r   r7   )r@   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 )NrB   r$   F)r   r7   )r@   r   r   r   test_neg_strides_rank_p  s    z$BaseQRupdate.test_neg_strides_rank_pc             C   s   |  tddd d S )Nrm   r$   F)r   r7   )r@   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 )NrB   r   F)r   r:   )r@   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 )Nrm   r   F)r   r:   )r@   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 )NrB   r$   F)r   r:   )r@   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 )Nrm   r$   F)r   r:   )r@   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 )NrB   r   F)r   r>   )r@   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 )Nrm   r   F)r   r>   )r@   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 )NrB   r$   F)r   r>   )r@   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 )Nrm   r$   F)r   r>   )r@   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 )NrE   r   FT)r   r   r   )
rP   r   r  r   r   r   r#   r   r   r   )r@   r   r   r   r   r$  r[   r!   r"   r   r  rY   rZ   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 )NrF   rm   r   FT)r   r   r   )
rP   r   r  r   r   r   r#   r   r   r   )r@   r   r   r   r   r$  r[   r!   r"   r   r  rY   rZ   r   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 )	NrE   r$   )r   r   r   FT)r   r   )rP   r   r   r   r   r   r   r#   r   r   r   )r@   r   r   r   r   r$  r[   r!   r"   r   r  rY   rZ   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 )NrF   )rP   r   r+   r   r   r   )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 )NrF   r   r  )rP   r   r+   r   )r@   r   r!   r"   r   r  r   r   r   r  
  s
    z#BaseQRupdate.test_mismatched_shapesc             C   s   ddddddddd	d
ddg}|  d\}}}}}x|D ]|}|j|}|j|}	|j|}
|j|}ttt|||| ttt||	|| ttt|||
| ttt|||| q6W d S )Nr   r   r   r   r   r   r   r   r   r   r   r   rF   )rP   r   r;   r   r+   r   )r@   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   Zaranger  r   r   r+   r   )r@   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 )NrF   r$   )r   r   )r   r   r   )r   r   )rP   r   r   r   r   r+   r   )
r@   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 )	NrF   rm   r$   )rK   r   r   )r   r   r   )r   r   )rP   r   r   r   r   r+   r   )
r@   r   r   r   r   r$  r!   r"   r   r  r   r   r   test_economic_check_finite?  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 ddddg| j}t ddg| j}t||||\}}t ||t ||  }t|||| j| j	d d S )Nr   r   r   r
   F)
r   r   r   r   r   r  r   r#   r   r   )r@   r!   r"   r   r  rY   rZ   r[   r   r   r   test_u_exactly_in_span_qV  s    &z%BaseQRupdate.test_u_exactly_in_span_q)rB   r   )1rQ   rR   rS   rP   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/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r  r  r   r:  r   r;  r<  r	  r   r   )r   r   r    sZ   






Mr  c               @   s   e Zd ZedZdS )TestQRupdate_fr   N)rQ   rR   rS   r   r   r   r   r   r   r=  _  s   r=  c               @   s   e Zd ZedZdS )TestQRupdate_Fr   N)rQ   rR   rS   r   r   r   r   r   r   r>  b  s   r>  c               @   s   e Zd ZedZdS )TestQRupdate_dr   N)rQ   rR   rS   r   r   r   r   r   r   r?  e  s   r?  c               @   s   e Zd ZedZdS )TestQRupdate_Dr   N)rQ   rR   rS   r   r   r   r   r   r   r@  h  s   r@  c        
      C   s   ddg} dg}dddg}ddg}dddd	g}xdt | ||||D ]N\}}}}}	|dkr|t||||d|	 t||||d
|	 q@t||||d
|	 q@W d S )Nr   r   )rC   rC   Ar   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_qTuk  s    
 rG  c             C   s>  t jd |dkr(|dkr(|d f}n|d |f}t |}|jdkrbt j|}t j|}nL|jdk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FDy              ?z#form_qTu doesn't support this dtyperA  g      $@r
   )r   r   )r   rL   rM   r   charr+   requirer5   r;   r   r   r   r   r   r   _decomp_updateZ	_form_qTur   )rC  rD  rE  rF  Zu_ndimr   r!   r   r   r   expectedresr   r   r   rB    s*    


rB  )NNT)NN)T)+r   numpyr   Znumpy.testingr   r   r   Zpytestr   r   Zscipyr   Zscipy.linalg._decomp_updaterL  r   r   r	   r   r    r#   r5   r7   r:   r>   objectr?   rT   r   r   r   r   r   r
  r  r  r  r  r=  r>  r?  r@  rG  rB  r   r   r   r   <module>   sT   


           M