o
    0Zcd                     @   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 u rd}t j||dS )Naxisr   r   )npr   )ar   kwargsresfunc U/var/www/chikooza/env/lib/python3.10/site-packages/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                   @   ,   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 ]0\}}}tt|jdg D ] }||fd	|i|}||fd	|i|}	t|t||	|d
 qEq6dS )z- Test it translates from arg<func> to <func> r   rand            )kthNr   r   )numpy.randomr'   r   sortargsortdictr#   minargminmaxargmax	partitionargpartitionlistrangendimr   r   )
selfr'   r   funcsr   argfuncr   r   a_func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 )
   r@   )r@   r+   dtype   r   r@   N)r   onesintpr   r   
ValueErrorarray
IndexErrorastypeboolfloat	AxisErrorr:   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*   rA   rC   r   Nr   rD   rE   r   r   shaper:   r   rN   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)   rC   rC   r+   r*   rA   rC   r   r(   r+   r*   NrP   rR   r   r   r   test_broadcastJ   s   
z TestTakeAlongAxis.test_broadcastN)__name__
__module____qualname__r?   rO   rT   rY   r   r   r   r   r%      s
    r%   c                   @      e Zd Zdd Zdd ZdS )TestPutAlongAxisc                 C   sz   t g dg dg}tt|jd g D ]%}| }tt j||d}t||d|d tt j	||d}t
|| qd S )N)r@         )<   (   2   r   i)r   rG   r7   r8   r9   copyr#   r4   r   r2   r   )r:   a_baser   r   i_max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 )
rU   rV   r@   rA   rW   r)   r`   rC   r   N)r   rD   arangerE   reshaper   r   r   rM   r   r   r   rY   c   s   
zTestPutAlongAxis.test_broadcastN)rZ   r[   r\   rh   rY   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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   6   t dd}tttd|t|t |jd   d S )Nr`   r@   dr   rC   r   rD   r   r   lenrQ   r:   r   r   r   r   test_simplel       zTestApplyAlongAxis.test_simplec                 C   rl   )N)r@   e   rn   r   rC   ro   rq   r   r   r   test_simple101q   rs   z!TestApplyAlongAxis.test_simple101c                 C   s:   t dd}ttt jd|g dg dg dg d S )N   r(   r(   r(   r   )rv   r_   !   )$   '   *   )-   0   3   )r   ri   rj   r   r   sumrq   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                   @      e Zd ZdS )z<TestApplyAlongAxis.test_preserve_subclass.<locals>.MyNDArrayNrZ   r[   r\   r   r   r   r   	MyNDArray       r   r   rC   r+   r(   r)      )r   ndarrayrG   viewr   r   
isinstancer   )r:   r   r   mexpectedresultr   r   r   test_preserve_subclass{   s   
z)TestApplyAlongAxis.test_preserve_subclassc                 C   sJ   G dd dt j}dd }t d|}tt|d|t g d d S )Nc                   @      e Zd ZdZdS )z9TestApplyAlongAxis.test_subclass.<locals>.MinimalSubclassrC   N)rZ   r[   r\   datar   r   r   r   MinimalSubclass       r   c                 S   s   | j S N)r   )rG   r   r   r   minimal_function   s   z:TestApplyAlongAxis.test_subclass.<locals>.minimal_functionr   r(   r   )rC   rC   rC   )r   r   zerosr   r   r   rG   )r:   r   r   r   r   r   r   test_subclass   s   z TestApplyAlongAxis.test_subclassc                 C   sJ   t d|}tt jd|}tt|| t|t g d| d S )Nr   r   r   r   r   )	r   rD   r   r   r   r   r   r   rG   )r:   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 g d| t|d|}tt|| t|t g d| 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 rC   T)keepdims)r   r9   r   squeezer   xr   r   r   	sum_to_0d   s   z3TestApplyAlongAxis.test_0d_array.<locals>.sum_to_0dr   r   r   rC   )r(   r(   r(   r(   r(   r(   )r   rD   r   r   r   r   r   rG   )r:   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 xrC   N)r   r9   r   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>       z:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>rC   r   r   c                    s    g | ]} |d d f qS r   r   r   r   r   r   r      r   Z   )r   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   stackr8   rQ   )r   )r   r   )r   r   r      s    r+   )
r   ri   rj   r   r   r8   rQ   r   r   type)r:   r   rS   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                   @   r   )zFTestApplyAlongAxis.test_subclass_preservation.<locals>.MinimalSubclassNr   r   r   r   r   r      r   r   )r   r   r   r   r   )r:   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   rC   Nr   r*   r   )r   r9   r   mamasked_where)r   r   r   r   r   r      s   z8TestApplyAlongAxis.test_axis_insertion_ma.<locals>.f1to2r   r   r   r(   rC   r+   )r   ri   rj   r   r   r   r   masked_arrayr   r9   r   mask)r:   r   r   r   r   r   r   test_axis_insertion_ma   s   004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 )NrC   r   r   r   r   r   r   	sample_1d      z7TestApplyAlongAxis.test_tuple_func1d.<locals>.sample_1drC   r+   r(   r)   )r   r   rG   r   )r:   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   rC   c                 S   s   t t| dk dS )Nr   rC   )r   rp   r   r   r   r   
empty_to_1   s   z1TestApplyAlongAxis.test_empty.<locals>.empty_to_1)r@   r   r@   )r   emptyr   rF   r   r   rD   )r:   r   r   r   rS   r   r   r   rT      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 h dh dh dg}t|| t |jD ]}tt|| t||  q;d S )NrC      r+      r(   rx   r)   ,   r*   7   r   B   c                 S   s
   t j|  S r   )setunion)r   r   r   r   <lambda>  s   
 z>TestApplyAlongAxis.test_with_iterable_object.<locals>.<lambda>r   >   rC   r)   r   r   >   r+   r*   r   r   >   r(   r   rx   r   )r   rG   r   r   ndindexrQ   r   )r:   rn   rS   r   r   r   r   r   test_with_iterable_object  s   
z,TestApplyAlongAxis.test_with_iterable_objectN)rZ   r[   r\   rr   ru   r   r   r   r   r   r   r   r   r   r   r   rT   r   r   r   r   r   rk   k   s    %rk   c                   @      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   ra   \   |   )r   ri   rj   r   r   r   rG   )r:   r   aoa_ar   r   r   rr     s   "zTestApplyOverAxes.test_simpleN)rZ   r[   r\   rr   r   r   r   r   r         r   c                   @   4   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 ]}t||}t|j| dk tt |j|k qd S )Nr+   r(   r)   r*   r)   rC   )r   r   r8   r   r   rQ   r   )r:   sr   r   br   r   r   test_functionality  s   

z!TestExpandDims.test_functionalityc                 C   sn   t d}t j|ddjdksJ t j|ddjdksJ t j|ddjdks)J t j|d	djd
ks5J d S )Nrw   r   rC   r+   r   )rC   rC   rC   r(   r(   r(   )r   r   )rC   r(   r(   r(   rC   rC   )r   r(   r*   )rC   r(   r(   rC   r(   rC   )r   r   )rC   rC   r(   rC   r(   r(   )r   r   r   rQ   rq   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*   rw   )r   r   )r   r*   )r   r   r   rL   r   )r:   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 )Nrw   rC   rC   r   )r   r   r   rF   r   rq   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 )	Nr@   )r+   r*   r(   r   r   rC   r   )r+   rC   r*   )r   ri   rj   r   rG   r   r   r   MaskedArrayr   rQ   r   )r:   r   expandedr   r   r   test_subclasses6  s   zTestExpandDims.test_subclassesN)rZ   r[   r\   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      t d}ttt|d d S )Nr@   r   )r   ri   r   rF   r   rq   r   r   r   test_integer_0_splitA     
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 )Nr@   rC   r+   r*   r(   r)      r      	   r   )r   ri   r   compare_resultsrG   r:   r   r   desiredr   r   r   test_integer_splitE  sr   





 


















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u  t|ddgdd}t dt t dgt t dgg}t|| t|jj|d jju  d S )Nr@   r(   r   r   r   r@   r   rC   	r   rG   ri   r   r   r   r   rB   r   r:   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 )Nr@   r(   r   r   r)   r   )r   rG   ri   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u  dS )z2 This will fail if we change default axis
        r@   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   broadcast_tor   r8   rp   r   rQ   )r:   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   sZ   t d}g d}t||dd}t ddt ddt ddt ddg}t|| d S )	Nr@   )rC   r*   r   r   r   r   rC   r*   r   )r   ri   r   r   r:   r   indicesr   r   r   r   r   test_index_split_simple  s   

z&TestArraySplit.test_index_split_simplec                 C   sX   t d}g d}t||dd}t g t ddt ddt ddg}t|| d S )Nr@   )r   r*   r   r   r   r   r*   r   r   ri   r   rG   r   r   r   r   r   test_index_split_low_bound  s   

z)TestArraySplit.test_index_split_low_boundc                 C   sh   t d}g d}t||dd}t g t ddt ddt ddt g t g g}t|| d S )Nr@   )r   r*   r   r@      r   r   r   r*   r   r   r   r   r   r   test_index_split_high_bound  s   
z*TestArraySplit.test_index_split_high_boundN)rZ   r[   r\   r   r   r   r   r   pytestmarkskipifIS_64BITr   r   r   r   r   r   r   r   r   @  s    =
r   c                   @   r]   )	TestSplitc                 C   s8   t d}t|d}t dt ddg}t|| d S )Nr@   r+   r*   )r   ri   r   r   r   r   r   r   test_equal_split  s   

zTestSplit.test_equal_splitc                 C   r   )Nr@   r(   )r   ri   r   rF   r   rq   r   r   r   test_unequal_split  r   zTestSplit.test_unequal_splitN)rZ   r[   r\   r  r  r   r   r   r   r    s    r  c                   @   r$   )
TestColumnStackc                 C      t ttd d S NrC   )r   	TypeErrorr
   r:   r   r   r   test_non_iterable  r   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rC   r+   r(   )r+   r(   r)   rC   r+   r(   r)   r   rG   r
   r   r:   r   r   r   rS   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 )NrC   r+   r(   r)   r  r  r   r   r   test_2D_arrays  s   
zTestColumnStack.test_2D_arraysc                 C   D   t t tdd tdD  W d    d S 1 sw   Y  d S )Nc                 s       | ]}t d V  qdS r(   Nr   ri   r   _r   r   r   	<genexpr>      z1TestColumnStack.test_generator.<locals>.<genexpr>r+   )r   FutureWarningr
   r8   r
  r   r   r   test_generator     
"zTestColumnStack.test_generatorN)rZ   r[   r\   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   r  r  )r   r	  r	   r
  r   r   r   r    r   zTestDstack.test_non_iterablec                 C   s@   t d}t d}t||g}t ddggg}t|| d S NrC   r+   r   rG   r	   r   r:   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   r  )Nc                 s   r  r  r  r  r   r   r   r    r  z,TestDstack.test_generator.<locals>.<genexpr>r+   )r   r  r	   r8   r
  r   r   r   r    r  zTestDstack.test_generatorN)	rZ   r[   r\   r  r   r!  r"  r#  r  r   r   r   r   r    s    r  c                   @   0   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      t ttdd d S r  )r   rF   r   r
  r   r   r   r       zTestHsplit.test_non_iterablec                 C   s8   t d}zt|d td W d S  ty   Y d S w )NrC   r+   r   )r   rG   r   r   rF   rq   r   r   r   r   !  s   

zTestHsplit.test_0D_arrayc                 C   sB   t g d}t|d}t ddgt ddgg}t|| d S NrC   r+   r(   r)   r+   rC   r(   r)   r   rG   r   r   r   r   r   r   r!  )  s   
zTestHsplit.test_1D_arrayc                 C   sZ   t g dg d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rZ   r[   r\   __doc__r  r   r!  r"  r   r   r   r   r%    s    r%  c                   @   r$  )
TestVsplitr&  c                 C   r'  r  )r   rF   r   r
  r   r   r   r  ;  r(  zTestVsplit.test_non_iterablec                 C   r   r  )r   rG   r   rF   r   rq   r   r   r   r   >  r   zTestVsplit.test_0D_arrayc                 C   s<   t g d}zt|d td W d S  ty   Y d S w Nr*  r+   r   )r   rG   r   r   rF   rq   r   r   r   r!  B  s   
zTestVsplit.test_1D_arrayc                 C   sN   t g dg dg}t|d}t g dgt g dgg}t|| d S Nr*  r+   )r   rG   r   r   r   r   r   r   r"  J  s   

 zTestVsplit.test_2D_arrayNr,  r   r   r   r   r.  7  s    r.  c                   @   r   )
TestDsplitc                 C   r'  r  )r   rF   r   r
  r   r   r   r  T  r(  zTestDsplit.test_non_iterablec                 C   r   r  r   rG   r   rF   r   rq   r   r   r   r   W  r   zTestDsplit.test_0D_arrayc                 C   s    t g d}ttt|d d S r0  r2  rq   r   r   r   r!  [  s   zTestDsplit.test_1D_arrayc                 C   sD   t g dg dg}zt|d td W d S  ty!   Y d S w r/  )r   rG   r   r   rF   rq   r   r   r   r"  _  s   

zTestDsplit.test_2D_arrayc                 C   s   t g dg dgg dg d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   rG   r   r   r   r   r   r   test_3D_arrayh  s   

$$zTestDsplit.test_3D_arrayN)rZ   r[   r\   r  r   r!  r"  r3  r   r   r   r   r1  R  s    	r1  c                   @   r   )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&   r`   r@   rC   )r`   r@   r@   )r`   r@   r`   rm   g      ?)
r-   r'   r   r   r   rj   r   r9   r   r   )r:   r'   r   r   cr   r   r   r   
test_basict  s   


zTestSqueeze.test_basicNrZ   r[   r\   r6  r   r   r   r   r4  s  r   r4  c                   @   sT   e Zd Zdd Zejdejej	gdd Z
dd Zejdg d	d
d ZdS )TestKronc                 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                   @   r   )z*TestKron.test_return_type.<locals>.myarrayg      ?N)rZ   r[   r\   __array_priority__r   r   r   r   myarray  r   r:  r+   )	r   r   rD   rQ   rB   r   r   r   r   )r:   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   rD   r   r   )r:   r<  r   r   kr   r   r   test_kron_smoke  s   zTestKron.test_kron_smokec                 C   sj   t jjddgddggddgddggd}t jjt g dt jt dtd d}t|t || d S )	NrC   r+   r(   r)   r   r   )rC   r)   r)      rA   )r   r   rG   diagidentityrJ   r   r   )r:   r   r=  r   r   r   test_kron_ma  s
   (zTestKron.test_kron_mazshape_a,shape_b))r   r   )r  )r)   r*   r   )r+   r+   )r+   r+   r+   ))rC   r   r   )r+   r   r+   rC  ))r+   r   r   r+   rD  c           	      C   s   t |}t |}dtdt|t|  | }dtdt|t|  | }t ||}t ||}t |j|s?J dd S )N)rC   r   zUnexpected shape from kron)r   rD   r3   rp   multiplyr   array_equalrQ   )	r:   shape_ashape_br   r   normalised_shape_anormalised_shape_bexpected_shaper=  r   r   r   test_kron_shape  s   


zTestKron.test_kron_shapeN)rZ   r[   r\   r;  r   r   parametrizer   asarraymatr>  rB  rL  r   r   r   r   r8    s    
	r8  c                   @   r$   )
TestTilec                 C   s   t g d}ddgddgg}tt|dg d tt|dg dg dg tt|dg dg tt|dg d	g d
g tt|dddgddgddgddgg tt|dg d	g d
g d	g d
g d S )Nr   rC   r+   r(   r)   )r   rC   r+   r   rC   r+   rC  rC   r+   )rC   r+   rC   r+   )r(   r)   r(   r)   r+   rC   )r   rG   r   r   r:   r   r   r   r   r   r6    s   (
zTestTile.test_basicc                 C   s0   t d}t|d}|d7 }t|t d d S )Nr*   rC   r+   )r   ri   r   r   rS  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+   rX   )r+   r   )r(   r+   r   )r   rG   r   rQ   r   )r:   r   r   r5  rn   r   r   r   rT     s   
zTestTile.test_emptyc           
      C   sn   ddl m} g d}g d}|D ]$}|dd|d}|D ]}t||j}t||}t||}	t||	 qqd S )Nr   )randint))r+   rQ  rR  rC  )r+   r(   r+   )r(   r+   ))r(   )r+   r(   )r(   r)   r(   )r(   r+   r(   )r)   r(   r+   r)   rC  r@   )size)r-   rU  r   rD   rB   r   r   r   )
r:   rU  repsrQ   r   r   rr   largeklarger   r   r   test_kroncompare  s   

zTestTile.test_kroncompareN)rZ   r[   r\   r6  rT  rT   r[  r   r   r   r   rP    s
    rP  c                   @   r   )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)rc   ra   )r_   ra   r   r   r+   rC   )r   rD   r   may_share_memory)r:   rn   d2r   r   r   r6    s   

"$&zTestMayShareMemory.test_basicNr7  r   r   r   r   r\    r   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)rp   rF   zipr   )r   r   r   yr   r   r   r     s
   r   ).numpyr   r!   sysr   numpy.lib.shape_baser   r   r   r   r   r   r   r	   r
   r   r   r   r   r   numpy.testingr   r   r   r   r   maxsizer  r#   r%   r^   rk   r   r   r   r  r  r  r%  r.  r1  r4  r8  rP  r\  r   r   r   r   r   <module>   s6    @
4 '( '!2(