U
    O8ch                     @   sz  d dl Zd dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZ ejdkZdd ZG dd dZG d	d
 d
ZG dd dZG dd dZ G dd dZ!G dd dZ"G dd dZ#G dd dZ$G dd dZ%G dd dZ&G dd dZ'G dd dZ(G dd  d Z)G d!d" d"Z*G d#d$ d$Z+G d%d& d&Z,d'd( Z-dS ))    N)apply_along_axisapply_over_axesarray_splitsplithsplitdsplitvsplitdstackcolumn_stackkrontileexpand_dimstake_along_axisput_along_axis)assert_assert_equalassert_array_equalassert_raisesassert_warns        c                    s   t   fdd}|S )z: hack in keepdims behavior into a function taking an axis c                    s.    | fd|i|}|d kr d}t j||dS )Naxisr   r   )npr   )ar   kwargsresfunc C/tmp/pip-unpacked-wheel-fd_gsd75/numpy/lib/tests/test_shape_base.pywrapped   s    z_add_keepdims.<locals>.wrapped)	functoolswraps)r   r    r   r   r   _add_keepdims   s    r#   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestTakeAlongAxisc           
   	   C   s   ddl m} |ddd}tjtjt fttjttjt fttj	ttj
t ftjtjtddfg}|D ]`\}}}tt|jdg D ]@}||fd	|i|}||fd	|i|}	t|t||	|d
 qqldS )z- Test it translates from arg<func> to <func> r   rand            )ZkthNr   r   )numpy.randomr&   r   sortZargsortdictr#   minargminmaxargmax	partitionZargpartitionlistrangendimr   r   )
selfr&   r   funcsr   Zargfuncr   r   Za_funcZai_funcr   r   r   test_argequivalent   s    z$TestTakeAlongAxis.test_argequivalentc                 C   s   t d}t jdt jd}t||dd ttt|t ddd ttt||t	dd ttt||t
dd tt jt||dd dS )z4 Test it errors when indices has too few dimensions )
   r9   )r9   r*   dtype   r   r9   N)r   onesintpr   r   
ValueErrorarray
IndexErrorZastypeboolfloat	AxisErrorr6   r   air   r   r   test_invalid1   s    
zTestTakeAlongAxis.test_invalidc                 C   s:   t d}t jdt jd}t||dd}t|j|j dS )zC Test everything is ok with empty results, even with inserted dims )r'   r(   r)   )r'   r   r)   r:   r<   r   Nr   r=   r>   r   r   shaper6   r   rF   actualr   r   r   
test_emptyB   s    
zTestTakeAlongAxis.test_emptyc                 C   s8   t d}t jdt jd}t||dd}t|jd dS )D Test that non-indexing dimensions are broadcast in both directions r'   r(   r<   r<   r*   r)   r:   r<   r   r'   r*   r)   NrH   rJ   r   r   r   test_broadcastJ   s    
z TestTakeAlongAxis.test_broadcastN)__name__
__module____qualname__r8   rG   rL   rQ   r   r   r   r   r$      s   r$   c                   @   s   e Zd Zdd Zdd ZdS )TestPutAlongAxisc                 C   s~   t dddgdddgg}tt|jd g D ]J}| }tt j||d}t||d|d tt j	||d}t
|| q.d S )	Nr9         <   (   2   r   i)r   r@   r3   r4   r5   copyr#   r1   r   r/   r   )r6   Za_baser   r   Zi_maxZi_minr   r   r   test_replace_maxS   s    z!TestPutAlongAxis.test_replace_maxc                 C   sL   t d}t jdt jddd }t||ddd tt||ddd d	S )
rM   rN   r9   r:   rO   r(   rW   r<   r   N)r   r=   aranger>   reshaper   r   r   rE   r   r   r   rQ   c   s    
zTestPutAlongAxis.test_broadcastN)rR   rS   rT   r\   rQ   r   r   r   r   rU   R   s   rU   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	fddZ
ej	fddZej	fddZdd Zdd Zdd Zdd Zdd ZdS )TestApplyAlongAxisc                 C   s6   t dd}tttd|t|t |jd   d S )NrW   r9   dr   r<   r   r=   r   r   lenrI   r6   r   r   r   r   test_simplel   s
    
 zTestApplyAlongAxis.test_simplec                 C   s6   t dd}tttd|t|t |jd   d S )N)r9   e   ra   r   r<   rb   rd   r   r   r   test_simple101q   s
    
 z!TestApplyAlongAxis.test_simple101c                 C   s@   t dd}ttt jd|dddgdddgd	d
dgg d S )N   r'   r'   r'   r   rV   !   $   '   *   -   0   3   )r   r]   r^   r   r   sumrd   r   r   r   test_3dv   s    zTestApplyAlongAxis.test_3dc                 C   s   dd }G dd dt j}t ddgddgg|}t ddgd	d
gg|}t|d|}tt|| t|| t|d|}tt|| t|| d S )Nc                 S   s   | d S )Nr*   r   )rowr   r   r   double|   s    z9TestApplyAlongAxis.test_preserve_subclass.<locals>.doublec                   @   s   e Zd ZdS )z<TestApplyAlongAxis.test_preserve_subclass.<locals>.MyNDArrayNrR   rS   rT   r   r   r   r   	MyNDArray   s   rv   r   r<   r*   r'   r(      )r   ndarrayr@   viewr   r   
isinstancer   )r6   rt   rv   mexpectedresultr   r   r   test_preserve_subclass{   s    
z)TestApplyAlongAxis.test_preserve_subclassc                 C   sL   G dd dt j}dd }t d|}tt|d|t dddg d S )Nc                   @   s   e Zd ZdZdS )z9TestApplyAlongAxis.test_subclass.<locals>.MinimalSubclassr<   N)rR   rS   rT   datar   r   r   r   MinimalSubclass   s   r   c                 S   s   | j S N)r   )r@   r   r   r   minimal_function   s    z:TestApplyAlongAxis.test_subclass.<locals>.minimal_functionrw   r'   r   r<   )r   rx   zerosry   r   r   r@   )r6   r   r   r   r   r   r   test_subclass   s    
 z TestApplyAlongAxis.test_subclassc                 C   sL   t d|}tt jd|}tt|| t|t dddg| d S )Nr   r   rw   )	r   r=   ry   r   rq   r   rz   r   r@   )r6   clsr   r   r   r   r   test_scalar_array   s    z$TestApplyAlongAxis.test_scalar_arrayc              
   C   s   dd }t d|}t|d|}tt|| t|t dddg| t|d|}tt|| t|t ddddddg| d S )Nc                 S   s    t | jd ttj| ddS )z/ Sum x, returning a 0d array of the same class r<   T)Zkeepdims)r   r5   r   squeezerq   xr   r   r   	sum_to_0d   s    z3TestApplyAlongAxis.test_0d_array.<locals>.sum_to_0dr   r   rw   r<   r'   )r   r=   ry   r   r   rz   r   r@   )r6   r   r   r   r   r   r   r   test_0d_array   s    z TestApplyAlongAxis.test_0d_arrayc                    s2  fddt dd td }t j fddt jd D d	d
}tt	|t	| t|| td }t j fddt jd D dd
}tt	|t	| t|| t ddtd}t jfddtjd D d	d
}tt	|t	| t|| d S )Nc                    s0   t | jd | ddd | dddf   S )/produces an asymmetric non-square matrix from xr<   N)r   r5   ry   r   )r   r   r   f1to2   s    z5TestApplyAlongAxis.test_axis_insertion.<locals>.f1to2   r   r   c                    s    g | ]} d d |f qS r   r   .0ia2dr   r   r   
<listcomp>   s    z:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>r<   r   r   c                    s    g | ]} |d d f qS r   r   r   r   r   r   r      s    Z   )rw   r)   r'   c                    s6   g | ]. t j fd dtjd D ddqS )c                    s"   g | ]} |d d f qS r   r   r   )a3dr   jr   r   r      s    zETestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>.<listcomp>r   r   )r   stackr4   rI   )r   )r   r   )r   r   r      s   r*   )
r   r]   r^   r   r   r4   rI   ry   r   type)r6   r   rK   r|   r   )r   r   r   r   r   test_axis_insertion   sB    

z&TestApplyAlongAxis.test_axis_insertionc                 C   s4   G dd dt j}| | | | | | d S )Nc                   @   s   e Zd ZdS )zFTestApplyAlongAxis.test_subclass_preservation.<locals>.MinimalSubclassNru   r   r   r   r   r      s   r   )r   rx   r   r   r   )r6   r   r   r   r   test_subclass_preservation   s    

z-TestApplyAlongAxis.test_subclass_preservationc                 C   s   dd }t dd}t|d|}tt|t jj t|j	d t
|d d d d df j||d d df j t
|d d d d df j||d d df j t
|d d d d df j||d d df j d S )	Nc                 S   s@   t | jd | ddd | dddf  }tj|d dk|S )r   r<   Nr   r)   r   )r   r5   r   maZmasked_where)r   r   r   r   r   r      s    z8TestApplyAlongAxis.test_axis_insertion_ma.<locals>.f1to2r   r   r   r'   r<   r*   )r   r]   r^   r   r   rz   r   Zmasked_arrayr   r5   r   mask)r6   r   r   r   r   r   r   test_axis_insertion_ma   s    00z)TestApplyAlongAxis.test_axis_insertion_mac              	   C   sH   dd }t |dt ddgddgg}t|t ddgddgg d S )Nc                 S   s   | d | d fS )Nr<   r   r   r   r   r   r   	sample_1d   s    z7TestApplyAlongAxis.test_tuple_func1d.<locals>.sample_1dr<   r*   r'   r(   )r   r   r@   r   )r6   r   r   r   r   r   test_tuple_func1d   s     z$TestApplyAlongAxis.test_tuple_func1dc                 C   s|   dd }t d}ttt j|d| ttt j|d| dd }t d}t |d|}t|t d	 ttt j|d| d S )
Nc                 S   s   t d d S )NF)r   r   r   r   r   
never_call   s    z1TestApplyAlongAxis.test_empty.<locals>.never_call)r   r   r   r<   c                 S   s   t t| dk dS )Nr   r<   )r   rc   r   r   r   r   
empty_to_1   s    z1TestApplyAlongAxis.test_empty.<locals>.empty_to_1)r9   r   r9   )r   emptyr   r?   r   r   r=   )r6   r   r   r   rK   r   r   r   rL      s    

zTestApplyAlongAxis.test_emptyc                 C   s   t ddhddhddhgddhd	d
hddhgg}t dd d|}t ddddhddd	d
hddddhg}t|| t |jD ]}tt|| t||  qd S )Nr<      r*      r'   rj   r(   ,   r)   7   rw   B   c                 S   s
   t j|  S r   )setunion)r   r   r   r   <lambda>      z>TestApplyAlongAxis.test_with_iterable_object.<locals>.<lambda>r   )r   r@   r   r   ZndindexrI   r   )r6   ra   rK   r|   r   r   r   r   test_with_iterable_object  s    (
z,TestApplyAlongAxis.test_with_iterable_objectN)rR   rS   rT   re   rg   rr   r~   r   r   rx   r   r   r   r   r   r   rL   r   r   r   r   r   r_   k   s   %r_   c                   @   s   e Zd Zdd ZdS )TestApplyOverAxesc                 C   sH   t dddd}tt j|ddg}t|t dgdgdggg d S )	N   r*   r'   r(   r   rX   \   |   )r   r]   r^   r   rq   r   r@   )r6   r   Zaoa_ar   r   r   re     s    zTestApplyOverAxes.test_simpleN)rR   rS   rT   re   r   r   r   r   r     s   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestExpandDimsc                 C   sR   d}t |}tddD ]4}t||}t|j| dk tt |j|k qd S )Nr*   r'   r(   r)   r(   r<   )r   r   r4   r   r   rI   r   )r6   sr   r   br   r   r   test_functionality  s    

z!TestExpandDims.test_functionalityc                 C   sn   t d}t j|ddjdks"tt j|ddjdks:tt j|ddjdksRtt j|d	djd
ksjtd S )Nri   )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   rI   AssertionErrorrd   r   r   r   test_axis_tuple!  s
    
zTestExpandDims.test_axis_tuplec                 C   s\   d}t |}tt jt|d tt jt|d t d}tt jt|d tt jt|d d S )Nr   r)   ri   )r   r   )r   r)   )r   r   r   rD   r   )r6   r   r   r   r   r   test_axis_out_of_range(  s    

z%TestExpandDims.test_axis_out_of_rangec                 C   s   t d}ttt|dd d S )Nri   r<   r<   r   )r   r   r   r?   r   rd   r   r   r   test_repeated_axis2  s    
z!TestExpandDims.test_repeated_axisc                 C   sf   t dd}t jj||d dkd}t j|dd}tt|t jj t	|j
d t	|jj
d d S )	Nr9   )r*   r)   r'   r   r   r<   r   )r*   r<   r)   )r   r]   r^   r   r@   r   r   rz   ZMaskedArrayr   rI   r   )r6   r   expandedr   r   r   test_subclasses6  s    zTestExpandDims.test_subclassesN)rR   rS   rT   r   r   r   r   r   r   r   r   r   r     s
   
r   c                   @   sf   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	j
e dddd Zdd Zdd Zdd ZdS )TestArraySplitc                 C   s   t d}ttt|d d S )Nr9   r   )r   r]   r   r?   r   rd   r   r   r   test_integer_0_splitA  s    
z#TestArraySplit.test_integer_0_splitc                 C   s  t d}t|d}t dg}t|| t|d}t dt ddg}t|| t|d}t dt ddt ddg}t|| t|d}t dt ddt dd	t d	dg}t|| t|d}t dt ddt ddt dd	t d	dg}t|| t|d}t dt ddt ddt dd	t d	d
t d
dg}t|| t|d}t dt ddt ddt ddt dd	t d	d
t d
dg}t|| t|d	}t dt ddt ddt ddt ddt dd	t d	d
t d
dg}t|| t|d
}t dt ddt ddt ddt ddt ddt dd	t d	d
t d
dg	}t|| t|d}t dt ddt ddt ddt ddt ddt ddt dd	t d	d
t d
dg
}t|| t|d}t dt ddt ddt ddt ddt ddt ddt dd	t d	d
t d
dt g g}t|| d S )Nr9   r<   r*   r)   r'   r(      rw      	   r   )r   r]   r   compare_resultsr@   r6   r   r   desiredr   r   r   test_integer_splitE  s    





 





 



 
 



 
 




 
 

 



 
 

 
 



 
 

 
 




 
 

 
 

 z!TestArraySplit.test_integer_splitc                 C   s   t t dt dg}t|ddd}t t dgt t dgt dg}t|| t|jj|d jjk t|ddgdd}t dt t dgt t dgg}t|| t|jj|d jjk d S )Nr9   r'   r   r   r   r9   r   r<   	r   r@   r]   r   r   r   r   r;   r   r6   r   r   tgtr   r   r   test_integer_split_2D_rows  s     

z)TestArraySplit.test_integer_split_2D_rowsc              	   C   s   t t dt dg}t|ddd}t t dt dgt t ddt ddgt t ddt ddgg}t|| d S )Nr9   r'   r   r   r(   r   )r   r@   r]   r   r   r   r   r   r   test_integer_split_2D_cols  s    z)TestArraySplit.test_integer_split_2D_colsc                 C   sv   t t dt dg}t|d}t t dgt t dgt dg}t|| t|jj|d jjk dS )z2 This will fail if we change default axis
        r9   r'   r   r   Nr   r   r   r   r   test_integer_split_2D_default  s    
 
z,TestArraySplit.test_integer_split_2D_defaultzNeeds 64bit platform)reasonc                 C   s\   t dgd}t|d}t dgd}|gd }tt|D ]}t|| j|| j q<d S )Nr   )r   r*   r(   )i   @r*   )r   Zbroadcast_tor   r4   rc   r   rI   )r6   r   r   chunkr   r   r   r   r   ,test_integer_split_2D_rows_greater_max_int32  s    

z;TestArraySplit.test_integer_split_2D_rows_greater_max_int32c                 C   s\   t d}dddg}t||dd}t ddt ddt ddt ddg}t|| d S )Nr9   r<   r)   r   r   r   r   )r   r]   r   r   r6   r   indicesr   r   r   r   r   test_index_split_simple  s    


z&TestArraySplit.test_index_split_simplec                 C   sZ   t d}dddg}t||dd}t g t ddt ddt ddg}t|| d S )Nr9   r   r)   r   r   r   r   r]   r   r@   r   r   r   r   r   test_index_split_low_bound  s    


z)TestArraySplit.test_index_split_low_boundc                 C   sn   t d}dddddg}t||dd}t g t ddt ddt ddt g t g g}t|| d S )Nr9   r   r)   r      r   r   r   r   r   r   r   test_index_split_high_bound  s    

  z*TestArraySplit.test_index_split_high_boundN)rR   rS   rT   r   r   r   r   r   pytestmarkZskipifIS_64BITr   r   r   r   r   r   r   r   r   @  s   =
r   c                   @   s   e Zd Zdd Zdd ZdS )	TestSplitc                 C   s8   t d}t|d}t dt ddg}t|| d S )Nr9   r*   r)   )r   r]   r   r   r   r   r   r   test_equal_split  s    

zTestSplit.test_equal_splitc                 C   s   t d}ttt|d d S )Nr9   r'   )r   r]   r   r?   r   rd   r   r   r   test_unequal_split  s    
zTestSplit.test_unequal_splitN)rR   rS   rT   r   r   r   r   r   r   r     s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestColumnStackc                 C   s   t ttd d S Nr<   )r   	TypeErrorr
   r6   r   r   r   test_non_iterable  s    z!TestColumnStack.test_non_iterablec                 C   sL   t d}t d}t ddgddgddgg}t ||f}t|| d S )Nr<   r*   r'   )r*   r'   r(   r<   r*   r'   r(   r   r@   r
   r   r6   r   r   r|   rK   r   r   r   test_1D_arrays  s    


zTestColumnStack.test_1D_arraysc                 C   sd   t dgdgdgg}t dgdgdgg}t ddgddgddgg}t ||f}t|| d S Nr<   r*   r'   r(   r   r   r   r   r   test_2D_arrays  s    
zTestColumnStack.test_2D_arraysc              	   C   s.   t t tdd tdD  W 5 Q R X d S )Nc                 s   s   | ]}t d V  qdS r'   Nr   r]   r   _r   r   r   	<genexpr>  s     z1TestColumnStack.test_generator.<locals>.<genexpr>r*   )r   FutureWarningr
   r4   r   r   r   r   test_generator  s    
zTestColumnStack.test_generatorN)rR   rS   rT   r   r   r   r   r   r   r   r   r     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S )
TestDstackc                 C   s   t ttd d S r   )r   r   r	   r   r   r   r   r     s    zTestDstack.test_non_iterablec                 C   s@   t d}t d}t||g}t ddggg}t|| d S Nr<   r*   r   r@   r	   r   r6   r   r   r   r   r   r   r   test_0D_array  s
    

zTestDstack.test_0D_arrayc                 C   sD   t dg}t dg}t||g}t ddggg}t|| d S r   r   r   r   r   r   test_1D_array  s
    zTestDstack.test_1D_arrayc                 C   sX   t dgdgg}t dgdgg}t||g}t ddggddggg}t|| d S r   r   r   r   r   r   test_2D_array  s
    zTestDstack.test_2D_arrayc                 C   sN   t ddg}t ddg}t||g}t ddgddggg}t|| d S r   r   r   r   r   r   test_2D_array2  s
    zTestDstack.test_2D_array2c              	   C   s.   t t tdd tdD  W 5 Q R X d S )Nc                 s   s   | ]}t d V  qdS r   r   r   r   r   r   r     s     z,TestDstack.test_generator.<locals>.<genexpr>r*   )r   r   r	   r4   r   r   r   r   r     s    
zTestDstack.test_generatorN)	rR   rS   rT   r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )
TestHsplit&Only testing for integer splits.

    c                 C   s   t ttdd d S r   )r   r?   r   r   r   r   r   r     s    zTestHsplit.test_non_iterablec                 C   s:   t d}zt|d td W n tk
r4   Y nX d S )Nr<   r*   r   )r   r@   r   r   r?   rd   r   r   r   r   !  s    

zTestHsplit.test_0D_arrayc                 C   sF   t ddddg}t|d}t ddgt ddgg}t|| d S r   r   r@   r   r   r   r   r   r   r   )  s    
zTestHsplit.test_1D_arrayc                 C   sb   t ddddgddddgg}t|d}t ddgddggt ddgddggg}t|| d S r   r  r   r   r   r   r   /  s    

,zTestHsplit.test_2D_arrayNrR   rS   rT   __doc__r   r   r   r   r   r   r   r   r     s
   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )
TestVsplitr   c                 C   s   t ttdd d S r   )r   r?   r   r   r   r   r   r   ;  s    zTestVsplit.test_non_iterablec                 C   s   t d}ttt|d d S r   )r   r@   r   r?   r   rd   r   r   r   r   >  s    
zTestVsplit.test_0D_arrayc                 C   sB   t ddddg}zt|d td W n tk
r<   Y nX d S Nr<   r*   r'   r(   r   )r   r@   r   r   r?   rd   r   r   r   r   B  s    
zTestVsplit.test_1D_arrayc                 C   s^   t ddddgddddgg}t|d}t ddddggt ddddggg}t|| d S r   )r   r@   r   r   r   r   r   r   r   J  s    

(zTestVsplit.test_2D_arrayNr  r   r   r   r   r  7  s
   r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
TestDsplitc                 C   s   t ttdd d S r   )r   r?   r   r   r   r   r   r   T  s    zTestDsplit.test_non_iterablec                 C   s   t d}ttt|d d S r   r   r@   r   r?   r   rd   r   r   r   r   W  s    
zTestDsplit.test_0D_arrayc                 C   s$   t ddddg}ttt|d d S r   r  rd   r   r   r   r   [  s    zTestDsplit.test_1D_arrayc                 C   sN   t ddddgddddgg}zt|d td W n tk
rH   Y nX d S r  )r   r@   r   r   r?   rd   r   r   r   r   _  s    

zTestDsplit.test_2D_arrayc                 C   s   t ddddgddddggddddgddddggg}t|d}t ddgddggddgddgggt ddgddggddgddgggg}t|| d S r   )r   r@   r   r   r   r   r   r   test_3D_arrayh  s    



$$zTestDsplit.test_3D_arrayN)rR   rS   rT   r   r   r   r   r  r   r   r   r   r  R  s
   	r  c                   @   s   e Zd Zdd ZdS )TestSqueezec                 C   s   ddl m} |ddddd}|ddddd}|dddd}tt|t|d tt|t|d tt|t|d d	ggg}t|}t|d	 t|jd tt|tj	 d S )
Nr   r%   rW   r9   r<   )rW   r9   r9   )rW   r9   rW   r`   g      ?)
r+   r&   r   r   r   r^   r   r5   r   rx   )r6   r&   r   r   cr   r   r   r   
test_basict  s    


zTestSqueeze.test_basicNrR   rS   rT   r  r   r   r   r   r	  s  s   r	  c                	   @   sd   e Zd Zdd Zdd Zejdej	ej
gdd Zdd	 Zejd
ddddddgdd ZdS )TestKronc                 C   s  t d}t ddgddgg}t ddgddgg}tt ||| t ddgddgg}t d}tt ||| t dg}t ddgddgg}t ddgddgg}tt ||| t ddgddgg}t dg}tt ||| t dggdggg}t ddgddgg}t ddgddggddgddggg}tt ||| t ddgddgg}t dggdggg}t ddgddggddgddggg}tt ||| d S )	Nr<   r*   r'   r(   rw   r   r   r   )r   r@   r   r   )r6   r   r   kr   r   r   r    s,    

&&zTestKron.test_basicc                 C   s   G dd dt j}t ddg}||j|j|j}ttt||t j ttt||| ttt||| ttt||| d S )Nc                   @   s   e Zd ZdZdS )z*TestKron.test_return_type.<locals>.myarrayg      ?N)rR   rS   rT   Z__array_priority__r   r   r   r   myarray  s   r  r*   )	r   rx   r=   rI   r;   r   r   r   r   )r6   r  r   r   r   r   r   test_return_type  s    zTestKron.test_return_typearray_classc                 C   sL   |t ddg}|t ddg}|t ddg}tt ||| d S )Nr'   r   )r   r=   r   r   )r6   r  r   r   r  r   r   r   test_kron_smoke  s    zTestKron.test_kron_smokec                 C   sn   t jjddgddggddgddggd}t jjt ddddgt jt dtd d}t|t || d S )	Nr<   r*   r'   r(   r   r      r:   )r   r   r@   ZdiagidentityrB   r   r   )r6   r   r  r   r   r   test_kron_ma  s
    (zTestKron.test_kron_mazshape_a,shape_b)r   r   )r   )r(   r)   rw   )r*   r*   )r*   r*   r*   ))r<   r   r   )r*   r   r*   r  ))r*   r   r   r*   r  c           	      C   s   t |}t |}dtdt|t|  | }dtdt|t|  | }t ||}t ||}t |j|s~tdd S )N)r<   r   zUnexpected shape from kron)	r   r=   r0   rc   multiplyr   Zarray_equalrI   r   )	r6   Zshape_aZshape_br   r   Znormalised_shape_aZnormalised_shape_bZexpected_shaper  r   r   r   test_kron_shape  s    


 zTestKron.test_kron_shapeN)rR   rS   rT   r  r  r   r   Zparametrizer   Zasarraymatr  r  r  r   r   r   r   r    s&    

	r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestTilec              	   C   s  t dddg}ddgddgg}tt|dddddddg tt|dddddddgddddddgg tt|dddddddgg tt|dddddgddddgg tt|dddgddgddgddgg tt|dddddgddddgddddgddddgg d S )	Nr   r<   r*   r'   r(   r  r<   r*   r*   r<   )r   r@   r   r   r6   r   r   r   r   r   r    s    ,$(
 
zTestTile.test_basicc                 C   s0   t d}t|d}|d7 }t|t d d S )Nr)   r<   r*   )r   r]   r   r   r  r   r   r   (test_tile_one_repetition_on_array_gh4679  s    

z1TestTile.test_tile_one_repetition_on_array_gh4679c                 C   sL   t g gg}t g g g}t|dj}t|dj}t|d t|d d S )Nr*   rP   )r*   r   )r'   r*   r   )r   r@   r   rI   r   )r6   r   r   r
  ra   r   r   r   rL     s    
zTestTile.test_emptyc           
      C   s~   ddl m} ddddddg}d	d
ddddg}|D ]H}|dd|d}|D ]0}t||j}t||}t||}	t||	 qFq0d S )Nr   )randint)r*   r  r  r  )r*   r'   r*   )r'   r*   )r'   )r*   r'   )r'   r(   r'   )r'   r*   r'   )r(   r'   r*   r(   r9   )size)r+   r   r   r=   r;   r   r   r   )
r6   r   ZrepsrI   r   r   rr   ZlargeZklarger   r   r   test_kroncompare  s    

zTestTile.test_kroncompareN)rR   rS   rT   r  r  rL   r#  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )TestMayShareMemoryc              	   C   s   t d}t d}tt || tt ||d d d  tt ||d d d  tt ||dd d d df  tt |d d d |  tt |d d d |  tt |dd d d df |  tt |dd d d df | d S )N)rZ   rX   )rV   rX   rw   r   r*   r<   )r   r=   r   Zmay_share_memory)r6   ra   Zd2r   r   r   r    s    

"$zTestMayShareMemory.test_basicNr  r   r   r   r   r$    s   r$  c                 C   s:   t | t |krtdt| |D ]\}}t|| q"dS )zCompare lists of arrays.z Iterables have different lengthsN)rc   r?   zipr   )r   r   r   yr   r   r   r     s    r   ).Znumpyr   r!   sysr   Znumpy.lib.shape_baser   r   r   r   r   r   r   r	   r
   r   r   r   r   r   Znumpy.testingr   r   r   r   r   maxsizer   r#   r$   rU   r_   r   r   r   r   r   r   r   r  r  r	  r  r  r$  r   r   r   r   r   <module>   s4   @
4 '( '!O(