U
    Hvf                    @   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 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 )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   I/tmp/pip-unpacked-wheel-96ln3f52/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 )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   sH  ddddddddg}t |}d	}g }| D ]}|jd
kr|||  }|d
7 }t|d	 |jd	  |d
  |j}||d
 d |d	  }||d< n|jdkr0|||  }||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   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 )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     rG   )   r'   )r'   rH   )rG   r   )r   rG   r   r   )sqrtallfatMx11xN1x1r                 ?)mode)	r   randomseediscomplexobjr   typer=   r   Zqr)rC   rU   rQ   r   r   r8   r#   r$   r   r   r   generate_   s      zBaseQRdeltas.generateN)rE   )__name__
__module____qualname__rD   rV   r   r   r   r   rA   Z   s   rA   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 )NrJ   r   Foverwrite_qr	rV   ranger   r   r   deleter%   r   r   rC   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 )NrJ   r      r   Fr[   
rV   r^   r   r   r   r_   slicer%   r   r   	rC   r   r#   r$   ndelra   rb   rc   rd   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 )NrJ   r   colFwhichr\   r]   rC   r   r#   r$   rl   rb   rc   rd   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 )NrJ   r   rf   r   rl   Frm   rg   	rC   r   r#   r$   rj   rl   rb   rc   rd   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 )NrK   r   Fr[   r]   r`   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 )NrK   r   rf   r   Fr[   rg   ri   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 )NrK   r   rl   Frm   r]   ro   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 )NrK   r   rf   r   rl   Frm   rg   rq   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 )NrL   r   Fr[   r]   r`   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 )NrL   r   rf   r   Fr[   rg   ri   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 )NrL   r   rl   Frm   r]   ro   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 )NrL   r   rf   r   rl   Frm   rg   rq   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 NrK   economicr   Fr[   r]   r`   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{   rg   )	rC   rj   r   r#   r$   ra   rb   rc   rd   r   r   r   base_economic_p_row_xxx   s
    z$BaseQRdelete.base_economic_p_row_xxxc                 C   s   |  d d S Nr&   r~   rB   r   r   r   test_economic_p_row_economic   s    z)BaseQRdelete.test_economic_p_row_economicc                 C   s   |  d d S Nr)   r   rB   r   r   r   test_economic_p_row_sqr   s    z$BaseQRdelete.test_economic_p_row_sqrc                 C   s   |  d d S Nr'   r   rB   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 )NrK   r|   r   rl   Frm   r]   ro   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 )	NrK   r|   r   rf   r   rl   Frm   rg   rq   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 )NrM   r   Fr[   r]   r`   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 )NrM   r   rf   r   Fr[   rg   ri   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 )NrN   r   rl   Frm   r]   ro   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 )NrN   r   rf   r   rl   Frm   rg   rq   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 )NrM   r|   r   Fr[   r]   r`   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 )NrM   r|   r   rf   r   Fr[   rg   ri   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 )NrN   r   r   ra   r   r   r   r   )rV   r   r   r   ndarrayr   r   rC   r   r#   r$   rb   rc   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 )	NrK   rE   r   ra   r   r   r   r|   )rV   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 )	NrM   r|   r   r   rl   r   r   rE   )	rV   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 )	NrK   rE   r   r   rl   r   r|   r   )	rV   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 )NrO   r   r   ra   r   r   rl   )	rV   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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 |rLt||| | j
| jd
 t||| | j
| jd
 |d}|d}|||f\}}t|||	||d\}}t	|||| j
| j t|||	||d	\}}t	|||| j
| j |rft||| | j
| jd
 t||| | j
| jd
 qfd S )Nra   rJ   rK   rL   r   r   FFTr   )rh   	itertoolsproductrV   r   r_   r   copyr   r%   r   r   r   )rC   adjust_stridesksprn   overwriteableqindrindrU   r1   r   q0r0qsrsrd   r3   r#   r$   rb   rc   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   ra   Tr   r7   rB   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&   ra   Tr   rB   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   rl   Tr   rB   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&   rl   Fr   rB   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   ra   Fr   r9   rB   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&   ra   Fr   rB   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   rl   Fr   rB   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   rB   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<   rB   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   rB   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   rB   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   rB   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   r@   rB   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   rB   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   rB   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   rB   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 )NrJ   ir   r&   ra   rl   Fr[   r   )rV   r   r   r   r   r_   rh   r   r%   r   r   )
rC   r   r#   r$   r1   r   wrb   rc   rd   r   r   r   
test_neg_k  s    $.,zBaseQRdelete.test_neg_krE   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 )NrE   TFra   rJ   r   r&   r   r   r   C)
rh   rV   r   r_   r   r   r%   r   r   r   )rC   rn   r   Ztest_CZtest_FrQ   r   r   r   r   r   r   rd   r#   r$   rb   rc   r   r   r   r   r   r   r   base_overwrite_qr  s:    $





zBaseQRdelete.base_overwrite_qrc                 C   s   |  dddd d S )Nra   r   Tr   rB   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 )Nra   r   Tr|   r   rB   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 )Nrl   r   Tr   rB   r   r   r   test_overwrite_qr_1_col  s    z$BaseQRdelete.test_overwrite_qr_1_colc                 C   s   |  dddd d S )Nra   r&   Tr   rB   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 )Nra   r&   Tr|   r   rB   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 )Nrl   r&   FTr   rB   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 )NrJ   r   Zfoorn   rV   assert_raisesr-   r   rC   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 )NrK   r   r   rl   rV   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 )NrK   r   r    rl   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 NrK   r   r   rV   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 )NrK   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\}}}|D ]}|j|}tjdd |j|}W 5 Q R X 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 q0d S )Nint8int16int32int64uint8uint16uint32uint64float16
longdoublelongcomplexboolrK   ignoreinvalidr   r   ra   r   rl   )rV   realr=   r   errstater   r-   r   )rC   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 )	NrK   r   rI   r   r   ra   r&   rl   )rV   r   r   nanr   r-   r   )rC   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 )NrO   r   r   r   ra   rl   r   r   r   r   r   test_qr_scalare  s
    zBaseQRdelete.test_qr_scalarN)rE   )CrW   rX   rY   re   rk   rp   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   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   k   s   					9

&rZ   c                   @   s   e Zd ZedZdS )TestQRdelete_ffNrW   rX   rY   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 )BaseQRinsertrE   ra   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   ra   r   rl   z%which should be either "row" or "col"rP   )superrV   r   r   rR   r   r-   rT   r   rU   r=   )
rC   rU   rQ   rn   r   r   r#   r$   ur8   	__class__r   r   rV   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 )NrJ   ra   r   r   r   	rV   r^   r   r	   r   insertr%   r   r   	rC   r   r#   r$   r  ra   rb   rc   rd   r   r   r   re     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 )NrJ   ra   r&   rn   r   r   r   rV   r^   r   r	   r   r  rE   intpr%   r   r   r  r   r   r   rk     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 )NrJ   rl   r   r   FZoverwrite_qrur  	rC   r   r#   r$   r  rl   rb   rc   rd   r   r   r   rp     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 )NrJ   rl   r&   r	  r   Fr  r
  r  r   r   r   rr     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 )NrK   ra   r   r   r   r  r  r   r   r   rs     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 )NrK   ra   r&   r	  r   r   r
  r  r   r   r   rt     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 )NrK   rl   r   r   Fr  r  r  r   r   r   ru     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 )NrK   rl   r	  r   Fr  r
  
rC   r   r   r#   r$   r  rl   rb   rc   rd   r   r   r   base_tall_p_col_xxx  s
    z BaseQRinsert.base_tall_p_col_xxxc                 C   s   |  d d S r   r  rB   r   r   r   test_tall_p_col_tall  s    z!BaseQRinsert.test_tall_p_col_tallc                 C   s   |  d d S r   r  rB   r   r   r   test_tall_p_col_sqr  s    z BaseQRinsert.test_tall_p_col_sqrc                 C   s   |  d d S r   r  rB   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 )NrL   ra   r   r   r   r  r  r   r   r   rw     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 )NrL   ra   r	  r   r   r
  )
rC   r   r   r#   r$   r  ra   rb   rc   rd   r   r   r   base_fat_p_row_xxx  s
    zBaseQRinsert.base_fat_p_row_xxxc                 C   s   |  d d S r   r  rB   r   r   r   test_fat_p_row_fat  s    zBaseQRinsert.test_fat_p_row_fatc                 C   s   |  d d S r   r  rB   r   r   r   test_fat_p_row_sqr  s    zBaseQRinsert.test_fat_p_row_sqrc                 C   s   |  d d S r   r  rB   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 )NrL   rl   r   r   Fr  r  r  r   r   r   ry     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 )NrL   rl   r&   r	  r   Fr  r
  r  r   r   r   rz     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 )NrK   r|   ra   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 )	NrK   r|   ra   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 )NrK   r|   rl   r   r   Fr  )
rV   r^   r   r	   r   r   r  r%   r   r   r  r   r   r   r     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   rl   )r   r   r   r   r   r   ZLinAlgErrorr	   )rC   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 )NrK   r|   rl   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  rB   r   r   r   test_economic_p_col_eco4  s    z$BaseQRinsert.test_economic_p_col_ecoc                 C   s   |  d d S r   r  rB   r   r   r   test_economic_p_col_sqr8  s    z$BaseQRinsert.test_economic_p_col_sqrc                 C   s   |  d d S r   r  rB   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 )NrM   ra   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 )NrM   ra   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 )NrM   rl   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 )NrM   rl   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 )NrM   r|   ra   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 )NrM   r|   ra   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 )NrM   r|   rl   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 )NrM   r|   rl   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 )NrN   ra   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 )NrN   ra   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 )NrN   rl   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 )NrN   rl   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 )NrO   ra   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 )NrO   ra   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 )NrO   rl   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 )NrO   rl   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 )NrO   ra   r   r   r   rl   rV   r   r-   r	   rC   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 )
NrJ   rK   rL   r	  r   ra   r   r   Fr  T)
rV   r   r  rE   r  r   r	   r%   r   r   )!rC   r   r1   r   rn   rU   r   r   r   u0r   r   usZair#   r$   r  rb   rc   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   ra   r   rB   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_1_rowc                 C   s   |  tddd d S Nr   r&   ra   r   rB   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_p_rowc                 C   s   |  tddd d S Nr   r   rl   r   rB   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_1_colc                 C   s   |  tddd d S Nr   r&   rl   r   rB   r   r   r   r     s    z(BaseQRinsert.test_non_unit_strides_p_colc                 C   s   |  tddd d S r4  r   rB   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_1_rowc                 C   s   |  tddd d S r5  r   rB   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_p_rowc                 C   s   |  tddd d S r6  r   rB   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_1_colc                 C   s   |  tddd d S r7  r   rB   r   r   r   r     s    z#BaseQRinsert.test_neg_strides_p_colc                 C   s   |  tddd d S r4  r   rB   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 r5  r   rB   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 r6  r   rB   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 r7  r   rB   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 r4  r   rB   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_1_rowc                 C   s   |  tddd d S r5  r   rB   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_p_rowc                 C   s   |  tddd d S r6  r   rB   r   r   r   r     s    z-BaseQRinsert.test_non_native_byte_order_1_colc                 C   s   |  tddd d S r7  r   rB   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 )NrJ   rl   r   r	  r   r   Fr  Tr   r   )
rV   r   r	   r   r  r%   r   r   r   r   )rC   r   r   r$   r  r#   r.  rb   rc   rd   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 )NrJ   rl   r&   r	  r   r   r   Fr  Tr   )rV   r   r   r  r,   r  r	   r%   r   r   r   )rC   r   r   r$   r  r#   rd   rb   rc   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 )NrJ   ra   r   r   rl   )rV   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 )NrK   ra   r   r   r   rl   r*  r+  r   r   r   test_mismatched_shapesX  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\}}}}|D ]}|j|}tjdd |j|}W 5 Q R X |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 q6d S )Nr   r   r   r   r   r   r   r   r   r   r   r   rJ   ra   r   r   r   r   rl   )rV   r   r=   r   r   r   r-   r	   )
rC   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 )
NrJ   ra   r&   r	  r   rI   r   rl   r   )rV   r   r   r   r   r-   r	   )rC   r   r   r   r.  r#   r$   r  r   r   r   r   s  s&    

  

  

  zBaseQRinsert.test_check_finite)rE   ra   r   )GrW   rX   rY   rV   re   rk   rp   rr   rs   rt   ru   r  r  r  r  rw   r  r  r  r  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   r8  r9  r:  r;  r   r   r   r   r?  r@  rA  rC  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   rE    s   rE  c                   @   s   e Zd ZedZdS )TestQRinsert_Fr   Nr   r   r   r   r   rF    s   rF  c                   @   s   e Zd ZedZdS )TestQRinsert_dr   Nr   r   r   r   r   rG    s   rG  c                   @   s   e Zd ZedZdS )TestQRinsert_Dr   Nr   r   r   r   r   rH    s   rH  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 )^BaseQRupdaterE   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   rP   )	r  rV   r   rR   r   rT   r   rU   r=   )rC   rU   rQ   r   r   r#   r$   r  vr8   r;   r  r   r   rV     s    zBaseQRupdate.generatec           	      C   sT   |  d\}}}}}t||||d\}}|t||  }t|||| j| j d S )NrJ   FrV   r   r   outerr   r%   r   r   	rC   r   r#   r$   r  rJ  rb   rc   rd   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)   rJ   r   r   FrV   reshapesizer   r   r   r   r   r%   r   r   
rC   r   r   r#   r$   r  rJ  rb   rc   rd   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 )NrK   FrK  rM  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 )NrO  rK   rP  r   FrQ  rT  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 )NrL   FrK  rM  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 )NrO  rL   rP  r   FrQ  rT  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 )NrK   r|   FrK  rM  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 )NrO  rK   r|   r   FrQ  rT  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 )NrM   FrK  rM  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 )NrM   r   rP  FrQ  rM  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 )NrM   r|   FrK  rM  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 )NrM   r|   r   rP  FrQ  rM  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 )NrN   FrK  rM  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 )NrN   r   rP  FrQ  rM  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 )NrO   FrK  rM  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 )NrO   r   rP  FrQ  rM  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 )NrO   r   r   rV   r   r-   r   rC   r   r#   r$   r  rJ  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   )rV   r   rL  r   r   r   r   r   r%   r   r   r   ))rC   r   rQ   r   r   r   rU   r   r   r   r.  v0r   r   r/  vsZaupr#   r$   r  rJ  rb   rc   r   r   r   r   r   r   r   r   r   r   r=  r>  Zq4oZr4or0  r1  r2  r3  r   r   r   r   6  s~    




















z$BaseQRupdate.base_non_simple_stridesc                 C   s   |  tddd d S )NrE   r   Tr   rB   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   rB   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 NrE   r&   Fr   rB   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   rB   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 NrE   r   Fr   rB   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   rB   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 rk  r   rB   r   r   r   test_neg_strides_rank_p  s    z$BaseQRupdate.test_neg_strides_rank_pc                 C   s   |  tddd d S rm  r   rB   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 ro  r   rB   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 rq  r   rB   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 rk  r   rB   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 rm  r   rB   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 ro  r   rB   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 rq  r   rB   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 rk  r   rB   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 rm  r   rB   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 )NrJ   r   FTr   r   
rV   r   rL  r   r   r   r%   r   r   r   rC   r   r   r   r.  rg  rd   r#   r$   r  rJ  rb   rc   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 )NrK   r|   r   FTr   r   r}  r~  r   r   r   #test_overwrite_qruv_rank_1_economic  s*    







z0BaseQRupdate.test_overwrite_qruv_rank_1_economicc                 C   s   | j ddd\}}}}}|t||j  }|d}|d}|d}	|d}
t|||	|
d\}}t|||| j| j	 t|||| j| j	 t|||	|
d\}}t|||| j| j	 t
||| j| j	d t
||| j| j	d d S )	NrJ   r&   rP  r   r   FTr   )rV   r   r   r   r   r   r   r%   r   r   r   )rC   r   r   r   r.  rg  rd   r#   r$   r  rJ  rb   rc   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 )NrK   )rV   r   r-   r   r   r   re  r   r   r   rA    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 )NrK   r   rB  rd  re  r   r   r   rC    s
    z#BaseQRupdate.test_mismatched_shapesc                 C   s   ddddddddd	d
ddg}|  d\}}}}}|D ]}|j|}tjdd |j|}	W 5 Q R X |j|}
|j|}ttt|||| ttt||	|| ttt|||
| ttt|||| q4d S )Nr   r   r   r   r   r   r   r   r   r   r   r   rK   r   r   )rV   r   r=   r   r   r   r-   r   )rC   r   r   r   r   r.  rg  r   r#   r$   r  rJ  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arangerR  r   r   r-   r   )rC   r#   r$   r  rJ  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 )NrK   r&   rP  r   rI   r   r   rV   r   r   r   r   r-   r   
rC   r   r   r   r.  rg  r#   r$   r  rJ  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 )	NrK   r|   r&   )rQ   r   r   rI   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 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   rL  r   r%   r   r   )rC   r#   r$   r  rJ  rb   rc   rd   r   r   r   test_u_exactly_in_span_qY  s    &z%BaseQRupdate.test_u_exactly_in_span_q)rE   r   )1rW   rX   rY   rV   rN  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rf  r   ri  rj  rl  rn  rp  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r  r  r  rA  rC  r   r  r   r  r  rD  r   r   r  r   rI    sZ   






MrI  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}dddg}ddg}dddd	g}t | ||||D ]N\}}}}}	|dkrzt||||d|	 t||||d
|	 q>t||||d
|	 q>d S )Nr   r   rF   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_qTun  s    
r  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FDrP   z#form_qTu doesn't support this dtyper  r
   r   r   )r   rR   rS   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   Z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<   r@   rA   rZ   r   r   r   r   r  rE  rF  rG  rH  rI  r  r  r  r  r  r  r   r   r   r   <module>   sT   


           N