
    Ngh                     D   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 Z G d d          Z G d d	          Z G d
 d          Z G d d          Z  G d d          Z! G d d          Z" G d d          Z# G d d          Z$ G d d          Z% G d d          Z& G d d          Z' G d d          Z( G d d          Z) G d  d!          Z* G d" d#          Z+ G d$ d%          Z,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                 F     t          j                    fd            }|S )z: hack in keepdims behavior into a function taking an axis c                 N     | fd|i|}|d}t          j        ||          S )Naxisr   r   )npr   )ar   kwargsresfuncs       [/var/www/html/ai-engine/env/lib/python3.11/site-packages/numpy/lib/tests/test_shape_base.pywrappedz_add_keepdims.<locals>.wrapped   s>    d1**4*6**<D~c----    )	functoolswraps)r   r!   s   ` r    _add_keepdimsr%      s8    _T. . . . .
 Nr"   c                   &    e Zd Zd Zd Zd Zd ZdS )TestTakeAlongAxisc           
         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          fg}|D ]d\  }}}t          t          |j                            dgz   D ]8} ||fd	|i|} ||fd	|i|}	t!          |t#          ||	|
                     9ed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_funcs
             r    test_argequivalentz$TestTakeAlongAxis.test_argequivalent   sH   %%%%%%DAqMM Wbj$&&)26""M")$<$<dffE26""M")$<$<dffE\2?DQKKK8	
 &+ 	M 	M!D'6U16]]++tf4 M Ma55d5f55!'!99$9&99V_Qd%K%K%KLLLLM	M 	Mr"   c                    t          j        d          }t          j        dt           j                  }t          ||d           t	          t
          t          |t          j        d          d           t	          t          t          ||                    t                    d           t	          t          t          ||                    t                    d           t	          t           j        t          ||d           dS )z4 Test it errors when indices has too few dimensions )
   rD   )rD   r.   dtype   r   rD   N)r   onesintpr   r   
ValueErrorarray
IndexErrorastypeboolfloat	AxisErrorr=   r   ais      r    test_invalidzTestTakeAlongAxis.test_invalid1   s    GHWWBG,,, 	2A&&&& 	j/1bhqkkJJJJj/1biiooANNNNj/1bii6F6FQOOOOblOQDDDDDDr"   c                     t          j        d          }t          j        dt           j                  }t          ||d          }t	          |j        |j                   dS )zC Test everything is ok with empty results, even with inserted dims )r+   r,   r-   )r+   r   r-   rE   rG   r   Nr   rH   rI   r   r   shaper=   r   rR   actuals       r    
test_emptyzTestTakeAlongAxis.test_emptyB   sU    WYWYbg... BQ///V\28,,,,,r"   c                     t          j        d          }t          j        dt           j                  }t          ||d          }t	          |j        d           dS )D Test that non-indexing dimensions are broadcast in both directions r+   r,   rG   rG   r.   r-   rE   rG   r   r+   r.   r-   NrU   rW   s       r    test_broadcastz TestTakeAlongAxis.test_broadcastJ   sS    WYWYbg... BQ///V\9-----r"   N)__name__
__module____qualname__rB   rS   rY   r_    r"   r    r'   r'      sV        M M M$E E E"- - -. . . . .r"   r'   c                       e Zd Zd Zd ZdS )TestPutAlongAxisc                    t          j        g dg dg          }t          t          |j                            d gz   D ]}|                                } t          t           j                  ||          }t          ||d|            t          t           j	                  ||          }t          ||           d S )N)rD         )<   (   2   r   i)r   rK   r:   r;   r<   copyr%   r7   r   r5   r   )r=   a_baser   r   i_maxi_mins         r    test_replace_maxz!TestPutAlongAxis.test_replace_maxS   s    <<<677v{++,,v5 	' 	'DA -M"),,QT:::E1eSt4444 -M"),,QT:::E&&&&	' 	'r"   c                     t          j        d          }t          j        dt           j                                      d          dz  }t          ||dd           t          t          ||d          d           d	S )
r[   r\   rD   rE   r]   r,   rh   rG   r   N)r   rH   arangerI   reshaper   r   r   rQ   s      r    r_   zTestPutAlongAxis.test_broadcastc   sv    WYYr)))11)<<q@q"bq))))_Q333R88888r"   N)r`   ra   rb   rp   r_   rc   r"   r    re   re   R   s2        ' ' ' 9 9 9 9 9r"   re   c                       e Zd Zd Zd Zd Zd Zd Zej	        fdZ
ej	        fdZej	        fdZd	 Zd
 Zd Zd Zd ZdS )TestApplyAlongAxisc                     t          j        dd          }t          t          t          d|          t	          |          t          j        |j        d                   z             d S )Nrh   rD   dr   rG   r   rH   r   r   lenrV   r=   r   s     r    test_simplezTestApplyAlongAxis.test_simplel   s`    GHc""S!Q''Q
0C0C)C	E 	E 	E 	E 	Er"   c                     t          j        dd          }t          t          t          d|          t	          |          t          j        |j        d                   z             d S )N)rD   e   rx   r   rG   ry   r{   s     r    test_simple101z!TestApplyAlongAxis.test_simple101q   s`    GIs##S!Q''Q
0C0C)C	E 	E 	E 	E 	Er"   c                     t          j        d                              d          }t          t	          t           j        d|          g dg dg dg           d S )N   r+   r+   r+   r   )r   rg   !   )$   '   *   )-   0   3   )r   rr   rs   r   r   sumr{   s     r    test_3dzTestApplyAlongAxis.test_3dv   se    IbMM!!),,+BFAq99(LL,,,E	G 	G 	G 	G 	Gr"   c                    d } G d dt           j                  }t          j        ddgddgg                              |          }t          j        ddgdd	gg                              |          }t	          |d|          }t          t          ||                     t          ||           t	          |d|          }t          t          ||                     t          ||           d S )
Nc                     | dz  S )Nr.   rc   )rows    r    doublez9TestApplyAlongAxis.test_preserve_subclass.<locals>.double|   s    7Nr"   c                       e Zd ZdS )<TestApplyAlongAxis.test_preserve_subclass.<locals>.MyNDArrayNr`   ra   rb   rc   r"   r    	MyNDArrayr              Dr"   r   r   rG   r.   r+   r,      )r   ndarrayrK   viewr   r   
isinstancer   )r=   r   r   mexpectedresults         r    test_preserve_subclassz)TestApplyAlongAxis.test_preserve_subclass{   s   	 	 		 	 	 	 	
 	 	 	 Hq!fq!f%&&++I668aVaV,--229==!&!Q//
69--...68,,,!&!Q//
69--...68,,,,,r"   c                      G d dt           j                  }d }t          j        d                              |          }t	          t          |d|          t          j        g d                     d S )Nc                       e Zd ZdZdS )9TestApplyAlongAxis.test_subclass.<locals>.MinimalSubclassrG   N)r`   ra   rb   datarc   r"   r    MinimalSubclassr      s        DDDr"   r   c                     | j         S N)r   )rK   s    r    minimal_functionz:TestApplyAlongAxis.test_subclass.<locals>.minimal_function   s
    :r"   r   r+   r   )rG   rG   rG   )r   r   zerosr   r   r   rK   )r=   r   r   r   s       r    test_subclassz TestApplyAlongAxis.test_subclass   s    	 	 	 	 	bj 	 	 		 	 	 HV!!/22-q!44bhyyy6I6I	
 	
 	
 	
 	
r"   c                 2   t          j        d                              |          }t          t           j        d|          }t          t          ||                     t          |t          j        g d                              |                     d S )Nr   r   r   r   r   )	r   rH   r   r   r   r   r   r   rK   )r=   clsr   r   s       r    test_scalar_arrayz$TestApplyAlongAxis.test_scalar_array   sz    GFOO  %%rvq!,,
3$$%%%3 3 3 8 8 = =>>>>>r"   c                    d }t          j        d                              |          }t          |d|          }t	          t          ||                     t          |t          j        g d                              |                     t          |d|          }t	          t          ||                     t          |t          j        g d                              |                     d S )Nc                 |    t          | j        d           t          j        t          j        | d                    S )z/ Sum x, returning a 0d array of the same class rG   T)keepdims)r   r<   r   squeezer   xs    r    	sum_to_0dz3TestApplyAlongAxis.test_0d_array.<locals>.sum_to_0d   s3    ###:bfQ666777r"   r   r   r   rG   )r+   r+   r+   r+   r+   r+   )r   rH   r   r   r   r   r   rK   )r=   r   r   r   r   s        r    test_0d_arrayz TestApplyAlongAxis.test_0d_array   s    	8 	8 	8 GFOO  %%y!Q//
3$$%%%3 3 3 8 8 = =>>>y!Q//
3$$%%%3););); < < A A# F FGGGGGr"   c                 J   fdt          j        d                              d          t          d          }t          j        fdt          j        d                   D             d                                        }t          t          |          t          |                     t          ||           t          d          }t          j        fd	t          j        d                   D             d                                        }t          t          |          t          |                     t          ||           t          j        d
                              d          t          d          }t          j        fdt          j        d                   D             d                                        }t          t          |          t          |                     t          ||           d S )Nc                     t          | j        d           | ddd         | dddf         z                                S )/produces an asymmetric non-square matrix from xrG   N)r   r<   r   )r   r   s    r    f1to2z5TestApplyAlongAxis.test_axis_insertion.<locals>.f1to2   sD    ###dddGa4j(..s333r"      r   r   c                 :    g | ]} d d |f                   S r   rc   .0ia2dr   s     r    
<listcomp>z:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>   s:     
 
 
 !EE#aaac(OO
 
 
r"   rG   r   r   c                 :    g | ]} |d d f                   S r   rc   r   s     r    r   z:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>   s:     
 
 
 !EE#ac(OO
 
 
r"   Z   )r   r-   r+   c           	          g | ]>t          j        fd t          j        d                   D             d          ?S )c                 <    g | ]} |d d f                   S r   rc   )r   r   a3dr   js     r    r   zETestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>.<listcomp>   s>       &'c!AAAa%j!!  r"   r   r   )r   stackr;   rV   )r   r   r   r   s    @r    r   z:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>   s~     
 
 
  H      +01+>+>    
 
 
r"   r.   )
r   rr   rs   r   r   r;   rV   r   r   type)r=   r   rX   r   r   r   r   s    `  @@@r    test_axis_insertionz&TestApplyAlongAxis.test_axis_insertion   sH   	4 	4 	4 	4 	4
 inn$$V,, "%C008 
 
 
 
 
%*39Q<%8%8
 
 
  DII 	 	T&\\4>>222VX&&& "%C008 
 
 
 
 
%*39Q<%8%8
 
 
  499 	 	T&\\4>>222VX&&& i&&y11!%C008 
 
 
 
 
 39Q<((	
 
 

   
 DII 	 	T&\\4>>222VX&&&&&r"   c                      G d dt           j                  }|                     |           |                     |           |                     |           d S )Nc                       e Zd ZdS )FTestApplyAlongAxis.test_subclass_preservation.<locals>.MinimalSubclassNr   rc   r"   r    r   r      r   r"   r   )r   r   r   r   r   )r=   r   s     r    test_subclass_preservationz-TestApplyAlongAxis.test_subclass_preservation   sp    	 	 	 	 	bj 	 	 	///?+++  11111r"   c                 Z   d }t          j        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                     t          | j        d           | ddd         | dddf         z  }t          j                            |dz  dk    |          S )r   rG   Nr   r-   r   )r   r<   r   mamasked_where)r   r   s     r    r   z8TestApplyAlongAxis.test_axis_insertion_ma.<locals>.f1to2   sT    ###DDbD'AabbgJ&C5%%c!eQh444r"   r   r   r   r+   rG   r.   )r   rr   rs   r   r   r   r   masked_arrayr   r<   r   mask)r=   r   r   r   s       r    test_axis_insertion_maz)TestApplyAlongAxis.test_axis_insertion_ma   s%   	5 	5 	5
 IcNN""6**ua++
3 233444SXq!!!3qqq1u:?EE!AAAaC&MM,>???3qqq1u:?EE!AAAaC&MM,>???3qqq1u:?EE!AAAaC&MM,>?????r"   c           	          d }t          j        |dt          j        ddgddgg                    }t          |t          j        ddgddgg                     d S )Nc                 "    | d         | d         fS )NrG   r   rc   r   s    r    	sample_1dz7TestApplyAlongAxis.test_tuple_func1d.<locals>.sample_1d   s    Q41:r"   rG   r.   r+   r,   )r   r   rK   r   )r=   r   r   s      r    test_tuple_func1dz$TestApplyAlongAxis.test_tuple_func1d   si    	 	 	!)Q1a&1a&9I0J0JKK31a&1a&)9 : :;;;;;r"   c                    d }t          j        d          }t          t          t           j        |d|           t          t          t           j        |d|           d }t          j        d          }t          j        |d|          }t          |t          j        d                     t          t          t           j        |d|           d S )Nc                 $    t          d           d S )NF)r   r   s    r    
never_callz1TestApplyAlongAxis.test_empty.<locals>.never_call   s    ENNNNNr"   )r   r   r   rG   c                 F    t          t          |           dk               dS )Nr   rG   )r   rz   r   s    r    
empty_to_1z1TestApplyAlongAxis.test_empty.<locals>.empty_to_1   s    CFFaK   1r"   )rD   r   rD   )r   emptyr   rJ   r   r   rH   )r=   r   r   r   rX   s        r    rY   zTestApplyAlongAxis.test_empty   s    	 	 	 HVj""5z1aHHHj""5z1aHHH	 	 	 HW$ZA66VRWR[[)))j""5z1aHHHHHr"   c                    t          j        ddhddhddhgddhd	d
hddhgg          }t          j        d d|          }t          j        h dh dh dg          }t          ||           t          j        |j                  D ]8}t          t          ||                   t          ||                              9d S )NrG      r.      r+   r   r,   ,   r-   7   r   B   c                     t          j        |  S r   )setunion)r   s    r    <lambda>z>TestApplyAlongAxis.test_with_iterable_object.<locals>.<lambda>  s    sy!} r"   r   >   rG   r,   r   r   >   r.   r-   r   r   >   r+   r   r   r   )r   rK   r   r   ndindexrV   r   )r=   rx   rX   r   r   s        r    test_with_iterable_objectz,TestApplyAlongAxis.test_with_iterable_object  s    HWq"g2w'Wq"g2w'
   $%<%<aCC8^^^^^^^^^LMMVX&&& FL)) 	= 	=AfQi$x{*;*;<<<<	= 	=r"   N)r`   ra   rb   r|   r   r   r   r   r   r   r   r   r   r   r   r   rY   r   rc   r"   r    ru   ru   k   s       E E E
E E E
G G G
- - -$
 
 
 %'J ? ? ? ? !#
 H H H H ')j #' #' #' #'J2 2 2@ @ @< < <I I I&= = = = =r"   ru   c                       e Zd Zd ZdS )TestApplyOverAxesc                     t          j        d                              ddd          }t          t           j        |ddg          }t          |t          j        dgdgdggg                     d S )	N   r.   r+   r,   r   ri   \   |   )r   rr   rs   r   r   r   rK   )r=   r   aoa_as      r    r|   zTestApplyOverAxes.test_simple  sh    IbMM!!!Q**Aq6225"(bTB4#,?+@"A"ABBBBBr"   N)r`   ra   rb   r|   rc   r"   r    r   r     s(        C C C C Cr"   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestExpandDimsc                    d}t          j        |          }t          dd          D ]Z}t          ||          }t	          |j        |         dk               t	          t          j        |          j        |k               [d S )Nr.   r+   r,   r-   r,   rG   )r   r   r;   r   r   rV   r   )r=   sr   r   bs        r    test_functionalityz!TestExpandDims.test_functionality  s~    HQKK"aLL 	. 	.DAt$$AAGDMQ&'''BJqMM'1,----	. 	.r"   c                 6   t          j        d          }t          j        |d          j        dk    sJ t          j        |d          j        dk    sJ t          j        |d          j        dk    sJ t          j        |d	          j        d
k    sJ d S )Nr   r   rG   r.   r   )rG   rG   rG   r+   r+   r+   )r   r   )rG   r+   r+   r+   rG   rG   )r   r+   r-   )rG   r+   r+   rG   r+   rG   )r   r   )rG   rG   r+   rG   r+   r+   )r   r   r   rV   r{   s     r    test_axis_tuplezTestExpandDims.test_axis_tuple!  s    HY~ai0006:LLLLL~ak2228<NNNNN~ai0006:LLLLL~ak2228<NNNNNNNr"   c                 b   d}t          j        |          }t          t           j        t          |d           t          t           j        t          |d           t          j        d          }t          t           j        t          |d           t          t           j        t          |d           d S )Nr   r-   r   )r   r   )r   r-   )r   r   r   rP   r   )r=   r   r   s      r    test_axis_out_of_rangez%TestExpandDims.test_axis_out_of_range(  s    HQKKblKB777blKA666HYblKG<<<blKF;;;;;r"   c                 h    t          j        d          }t          t          t          |d           d S )Nr   rG   rG   r   )r   r   r   rJ   r   r{   s     r    test_repeated_axisz!TestExpandDims.test_repeated_axis2  s.    HYj+qv>>>>>>r"   c                    t          j        d                              d          }t           j                            ||dz  dk              }t          j        |d          }t          t          |t           j        j                             t          |j
        d           t          |j        j
        d           d S )	NrD   )r.   r-   r+   r   r   rG   r   )r.   rG   r-   )r   rr   rs   r   rK   r   r   r   MaskedArrayr   rV   r   )r=   r   expandeds      r    test_subclasseszTestExpandDims.test_subclasses6  s    IbMM!!&))EKK!qK))>!!,,,
8RU%677888X^Y///X]()44444r"   N)r`   ra   rb   r   r   r   r  r  rc   r"   r    r   r     sb        . . .O O O< < <? ? ?5 5 5 5 5r"   r   c                       e Zd Zd Zd Zd Zd Zd Zej	        
                    e d          d             Zd	 Zd
 Zd ZdS )TestArraySplitc                 f    t          j        d          }t          t          t          |d           d S )NrD   r   )r   rr   r   rJ   r   r{   s     r    test_integer_0_splitz#TestArraySplit.test_integer_0_splitA  s)    IbMMj+q!44444r"   c                 R   t          j        d          }t          |d          }t          j        d          g}t          ||           t          |d          }t          j        d          t          j        dd          g}t          ||           t          |d          }t          j        d          t          j        dd          t          j        dd          g}t          ||           t          |d          }t          j        d          t          j        dd          t          j        dd	          t          j        d	d          g}t          ||           t          |d          }t          j        d          t          j        dd          t          j        dd          t          j        dd	          t          j        d	d          g}t          ||           t          |d          }t          j        d          t          j        dd          t          j        dd          t          j        dd	          t          j        d	d
          t          j        d
d          g}t          ||           t          |d          }t          j        d          t          j        dd          t          j        dd          t          j        dd          t          j        dd	          t          j        d	d
          t          j        d
d          g}t          ||           t          |d	          }t          j        d          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd	          t          j        d	d
          t          j        d
d          g}t          ||           t          |d
          }t          j        d          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd	          t          j        d	d
          t          j        d
d          g	}t          ||           t          |d          }t          j        d          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd	          t          j        d	d
          t          j        d
d          g
}t          ||           t          |d          }t          j        d          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        dd	          t          j        d	d
          t          j        d
d          t          j        g           g}t          ||           d S )NrD   rG   r.   r-   r+   r,      r      	   r   )r   rr   r   compare_resultsrK   r=   r   r   desireds       r    test_integer_splitz!TestArraySplit.test_integer_splitE  s   IbMM!Q9R==/W%%%!Q9Q<<1b!1!12W%%%!Q9Q<<1a")Ar2B2BCW%%%!Q9Q<<1a")Aq//9Q##%W%%%!Q9Q<<1a")Aq//9Q??BIa$4$46W%%%!Q9Q<<1a")Aq//9Q??BIaOORYq"5E5EGW%%%!Q9Q<<1a")Aq//9Q??BIaOORYq!__9Q##% 	W%%%!Q9Q<<1a")Aq//9Q??BIaOORYq!__9Q??BIa$4$46 	W%%%!Q9Q<<1a")Aq//9Q??BIaOORYq!__9Q??BIaOORYq"5E5EG 	W%%%!R  9Q<<1a")Aq//9Q??BIaOORYq!__9Q??BIaOORYq!__9Q##% 	W%%%!R  9Q<<1a")Aq//9Q??BIaOORYq!__9Q??BIaOORYq!__9Q##RXb\\3 	W%%%%%r"   c                 6   t          j        t          j        d          t          j        d          g          }t          |dd          }t          j        t          j        d          g          t          j        t          j        d          g          t          j        d          g}t          ||           t          |j        j        |d         j        j        u            t          |ddgd          }t          j        d          t          j        t          j        d          g          t          j        t          j        d          g          g}t          ||           t          |j        j        |d         j        j        u            d S )NrD   r+   r   r   r   rD   r   rG   	r   rK   rr   r   r   r  r   rF   r   r=   r   r   tgts       r    test_integer_split_2D_rowsz)TestArraySplit.test_integer_split_2D_rows  s<   HbimmRYr]]344!QQ'''x2(("(BIbMM?*C*C8G$$&S!!!B 22333 !aV!,,,x  "(BIbMM?";";x2((*S!!!B 2233333r"   c           	          t          j        t          j        d          t          j        d          g          }t          |dd          }t          j        t          j        d          t          j        d          g          t          j        t          j        dd          t          j        dd          g          t          j        t          j        dd          t          j        dd          g          g}t	          ||           d S )NrD   r+   r   r   r,   r  )r   rK   rr   r   r  r  s       r    test_integer_split_2D_colsz)TestArraySplit.test_integer_split_2D_cols  s    HbimmRYr]]344!QR(((8RYq\\29Q<<8998RYq!__bi1oo>??8RYq"--ryB/?/?@AAC 	W%%%%%r"   c                    t          j        t          j        d          t          j        d          g          }t          |d          }t          j        t          j        d          g          t          j        t          j        d          g          t          j        d          g}t          ||           t          |j        j        |d         j        j        u            dS )z2 This will fail if we change default axis
        rD   r+   r  r   Nr  r  s       r    test_integer_split_2D_defaultz,TestArraySplit.test_integer_split_2D_default  s     HbimmRYr]]344!Qx2(("(BIbMM?*C*C8G$$&S!!!B 2233333r"   zNeeds 64bit platform)reasonc                    t          j        dgd          }t          |d          }t          j        dgd          }|gdz  }t          t	          |                    D ](}t          ||         j        ||         j                   )d S )Nr   )r   r.   r,   )i   @r.   )r   broadcast_tor   r;   rz   r   rV   )r=   r   r   chunkr  r   s         r    ,test_integer_split_2D_rows_greater_max_int32z;TestArraySplit.test_integer_split_2D_rows_greater_max_int32  s    OQC..!Q\22gks3xx 	5 	5AQs1v|4444	5 	5r"   c                    t          j        d          }g d}t          ||d          }t          j        dd          t          j        dd          t          j        dd          t          j        dd          g}t          ||           d S )	NrD   )rG   r-   r  r   r   r   rG   r-   r  )r   rr   r   r  r=   r   indicesr   r  s        r    test_index_split_simplez&TestArraySplit.test_index_split_simple  s}    IbMM))!W2...9Q??BIaOORYq!__9Q##%W%%%%%r"   c                    t          j        d          }g d}t          ||d          }t          j        g           t          j        dd          t          j        dd          t          j        dd          g}t	          ||           d S )NrD   )r   r-   r  r   r   r   r-   r  r   rr   r   rK   r  r%  s        r    test_index_split_low_boundz)TestArraySplit.test_index_split_low_bound  s{    IbMM))!W2...8B<<1a")Aq//9Q##%W%%%%%r"   c                 h   t          j        d          }g d}t          ||d          }t          j        g           t          j        dd          t          j        dd          t          j        dd          t          j        g           t          j        g           g}t	          ||           d S )NrD   )r   r-   r  rD      r   r   r   r-   r  r)  r%  s        r    test_index_split_high_boundz*TestArraySplit.test_index_split_high_bound  s    IbMM###!W2...8B<<1a")Aq//9Q##RXb\\28B<<AW%%%%%r"   N)r`   ra   rb   r  r  r  r  r  pytestmarkskipifIS_64BITr#  r'  r*  r-  rc   r"   r    r
  r
  @  s        5 5 5;& ;& ;&z4 4 4& & &4 4 4 [H-CDD5 5 ED5& & && & && & & & &r"   r
  c                       e Zd Zd Zd ZdS )	TestSplitc                     t          j        d          }t          |d          }t          j        d          t          j        dd          g}t          ||           d S )NrD   r.   r-   )r   rr   r   r  r  s       r    test_equal_splitzTestSplit.test_equal_split  sP    IbMMAqkk9Q<<1b!1!12W%%%%%r"   c                 f    t          j        d          }t          t          t          |d           d S )NrD   r+   )r   rr   r   rJ   r   r{   s     r    test_unequal_splitzTestSplit.test_unequal_split  s)    IbMMj%A.....r"   N)r`   ra   rb   r5  r7  rc   r"   r    r3  r3    s2        
& & &/ / / / /r"   r3  c                   &    e Zd Zd Zd Zd Zd ZdS )TestColumnStackc                 <    t          t          t          d           d S NrG   )r   	TypeErrorr   r=   s    r    test_non_iterablez!TestColumnStack.test_non_iterable  s    iq11111r"   c                     t          j        d          }t          j        d          }t          j        ddgddgddgg          }t          j        ||f          }t          ||           d S )NrG   r.   r+   )r.   r+   r,   rG   r.   r+   r,   r   rK   r   r   r=   r   r   r   rX   s        r    test_1D_arrayszTestColumnStack.test_1D_arrays  su    HYHY8aVVV% & & !Q((VX&&&&&r"   c                     t          j        dgdgdgg          }t          j        dgdgdgg          }t          j        ddgddgddgg          }t          j        ||f          }t          ||           d S )NrG   r.   r+   r,   rA  rB  s        r    test_2D_arrayszTestColumnStack.test_2D_arrays  s    HqcA3_%%HqcA3_%%8aVVV% & & !Q((VX&&&&&r"   c                     t          j        t          d          5  t          d t	          d          D                        d d d            d S # 1 swxY w Y   d S )Narrays to stack must bematchc              3   >   K   | ]}t          j        d           V  dS r+   Nr   rr   r   _s     r    	<genexpr>z1TestColumnStack.test_generator.<locals>.<genexpr>  s*      991")A,,999999r"   r.   )r.  raisesr<  r   r;   r=  s    r    test_generatorzTestColumnStack.test_generator  s    ]9,EFFF 	; 	;99a999:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;   'AAAN)r`   ra   rb   r>  rC  rE  rQ  rc   r"   r    r9  r9    sP        2 2 2' ' '' ' '; ; ; ; ;r"   r9  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )
TestDstackc                 <    t          t          t          d           d S r;  )r   r<  r
   r=  s    r    r>  zTestDstack.test_non_iterable  s    i+++++r"   c                     t          j        d          }t          j        d          }t          ||g          }t          j        ddggg          }t          ||           d S NrG   r.   r   rK   r
   r   r=   r   r   r   r  s        r    test_0D_arrayzTestDstack.test_0D_array  sX    HQKKHQKKaVnn(aVH:&&3(((((r"   c                     t          j        dg          }t          j        dg          }t          ||g          }t          j        ddggg          }t          ||           d S rW  rX  rY  s        r    test_1D_arrayzTestDstack.test_1D_array  s\    HaSMMHaSMMaVnn(aVH:&&3(((((r"   c                     t          j        dgdgg          }t          j        dgdgg          }t          ||g          }t          j        ddggddggg          }t          ||           d S rW  rX  rY  s        r    test_2D_arrayzTestDstack.test_2D_array  su    HqcA3Z  HqcA3Z  aVnn(aVH1xj1223(((((r"   c                     t          j        ddg          }t          j        ddg          }t          ||g          }t          j        ddgddggg          }t          ||           d S rW  rX  rY  s        r    test_2D_array2zTestDstack.test_2D_array2  sl    HaVHaVaVnn(aVaV,-..3(((((r"   c                     t          j        t          d          5  t          d t	          d          D                        d d d            d S # 1 swxY w Y   d S )NrG  rH  c              3   >   K   | ]}t          j        d           V  dS rK  rL  rM  s     r    rO  z,TestDstack.test_generator.<locals>.<genexpr>  s*      33QBIaLL333333r"   r.   )r.  rP  r<  r
   r;   r=  s    r    rQ  zTestDstack.test_generator  s    ]9,EFFF 	5 	533%((333444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5rR  N)	r`   ra   rb   r>  rZ  r\  r^  r`  rQ  rc   r"   r    rT  rT    sn        , , ,) ) )) ) )) ) )) ) )5 5 5 5 5r"   rT  c                   *    e Zd ZdZd Zd Zd Zd ZdS )
TestHsplit&Only testing for integer splits.

    c                 >    t          t          t          dd           d S r;  )r   rJ   r   r=  s    r    r>  zTestHsplit.test_non_iterable      j&!Q/////r"   c                     t          j        d          }	 t          |d           t          d           d S # t          $ r Y d S w xY w)NrG   r.   r   )r   rK   r   r   rJ   r{   s     r    rZ  zTestHsplit.test_0D_array!  sR    HQKK	1aLLLAJJJJJ 	 	 	DD	s   7 
AAc                     t          j        g d          }t          |d          }t          j        ddg          t          j        ddg          g}t          ||           d S NrG   r.   r+   r,   r.   rG   r+   r,   r   rK   r   r  r  s       r    r\  zTestHsplit.test_1D_array)  s^    H\\\""Qll8QF##RXq!f%5%56W%%%%%r"   c                     t          j        g dg dg          }t          |d          }t          j        ddgddgg          t          j        ddgddgg          g}t          ||           d S rj  rl  r  s       r    r^  zTestHsplit.test_2D_array/  s    Hlll,,  ! !Qll8aVaV,--rx!Q!Q8H/I/IJW%%%%%r"   Nr`   ra   rb   __doc__r>  rZ  r\  r^  rc   r"   r    rd  rd    sZ         0 0 0  & & && & & & &r"   rd  c                   *    e Zd ZdZd Zd Zd Zd ZdS )
TestVsplitre  c                 >    t          t          t          dd           d S r;  )r   rJ   r	   r=  s    r    r>  zTestVsplit.test_non_iterable;  rg  r"   c                 f    t          j        d          }t          t          t          |d           d S rW  )r   rK   r   rJ   r	   r{   s     r    rZ  zTestVsplit.test_0D_array>  )    HQKKj&!Q/////r"   c                     t          j        g d          }	 t          |d           t          d           d S # t          $ r Y d S w xY wNrk  r.   r   )r   rK   r	   r   rJ   r{   s     r    r\  zTestVsplit.test_1D_arrayB  sX    H\\\""	1aLLLAJJJJJ 	 	 	DD	s   9 
AAc                     t          j        g dg dg          }t          |d          }t          j        g dg          t          j        g dg          g}t          ||           d S Nrk  r.   )r   rK   r	   r  r  s       r    r^  zTestVsplit.test_2D_arrayJ  sr    Hlll,,  ! !Qll8\\\N++RX|||n-E-EFW%%%%%r"   Nrn  rc   r"   r    rq  rq  7  sZ         0 0 00 0 0  & & & & &r"   rq  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
TestDsplitc                 >    t          t          t          dd           d S r;  )r   rJ   r   r=  s    r    r>  zTestDsplit.test_non_iterableT  rg  r"   c                 f    t          j        d          }t          t          t          |d           d S rW  r   rK   r   rJ   r   r{   s     r    rZ  zTestDsplit.test_0D_arrayW  rt  r"   c                 j    t          j        g d          }t          t          t          |d           d S rx  r}  r{   s     r    r\  zTestDsplit.test_1D_array[  s/    H\\\""j&!Q/////r"   c                     t          j        g dg dg          }	 t          |d           t          d           d S # t          $ r Y d S w xY wrv  )r   rK   r   r   rJ   r{   s     r    r^  zTestDsplit.test_2D_array_  sh    Hlll,,  ! !	1aLLLAJJJJJ 	 	 	DD	s   = 
A
Ac                    t          j        g dg dgg dg dgg          }t          |d          }t          j        ddgddggddgddggg          t          j        ddgddggddgddggg          g}t          ||           d S rj  )r   rK   r   r  r  s       r    test_3D_arrayzTestDsplit.test_3D_arrayh  s    H|||<<!<<<<!" # # Qll8q!fq!f-AA/?@AA8q!fq!f-AA/?@AACW%%%%%r"   N)r`   ra   rb   r>  rZ  r\  r^  r  rc   r"   r    rz  rz  R  s_        0 0 00 0 00 0 0  & & & & &r"   rz  c                       e Zd Zd ZdS )TestSqueezec                 r   ddl m}  |ddddd          } |ddddd          } |dddd          }t          t          j        |          t          j        |d                     t          t          j        |          t          j        |d                     t          t          j        |          t          j        |d                     d	ggg}t          j        |          }t          |d	           t          |j        d           t          t          |          t          j	                   d S )
Nr   r)   rh   rD   rG   )rh   rD   rD   )rh   rD   rh   rw   g      ?)
r0   r*   r   r   r   rs   r   r<   r   r   )r=   r*   r   r   cr   s         r    
test_basiczTestSqueeze.test_basict  s   %%%%%%DRQ""DQAr""DAr22:a=="*Q*E*EFFF2:a=="*Q*E*EFFF2:a=="*Q*A*ABBB eWIjmmS#SXq!!!T#YY
+++++r"   Nr`   ra   rb   r  rc   r"   r    r  r  s  s#        , , , , ,r"   r  c                       e Zd Zd Zd Zej                            dej	        ej
        g          d             Zd Zej                            dg d          d             Zd	S )
TestKronc                    t          j        d          }t          j        ddgddgg          }t          j        ddgddgg          }t          t          j        ||          |           t          j        ddgddgg          }t          j        d          }t          t          j        ||          |           t          j        dg          }t          j        ddgddgg          }t          j        ddgddgg          }t          t          j        ||          |           t          j        ddgddgg          }t          j        dg          }t          t          j        ||          |           t          j        dggdggg          }t          j        ddgddgg          }t          j        ddgddggddgddggg          }t          t          j        ||          |           t          j        ddgddgg          }t          j        dggdggg          }t          j        ddgddggddgddggg          }t          t          j        ||          |           d S )	NrG   r.   r+   r,   r   r  r,  r  )r   rK   r   r   )r=   r   r   ks       r    r  zTestKron.test_basic  sR   HQKKHq!fq!f%&&Hq!fq!f%&&271a==!,,,Hq!fq!f%&&HQKK271a==!,,, HaSMMHq!fq!f%&&Hq!fq"g&''271a==!,,,Hq!fq!f%&&HaSMM271a==!,,, HseqcU^$$Hq!fq!f%&&H1v1v&!Q!Q(89::271a==!,,,Hq!fq!f%&&HseqcU^$$H1v1v&!Q!Q(89::271a==!,,,,,r"   c                     G d dt           j                  }t          j        ddg          } ||j        |j        |j                  }t          t          t          ||                    t           j                   t          t          t          ||                    |           t          t          t          ||                    |           t          t          t          ||                    |           d S )Nc                       e Zd ZdZdS )*TestKron.test_return_type.<locals>.myarrayg      ?N)r`   ra   rb   __array_priority__rc   r"   r    myarrayr    s        !$r"   r  r.   )	r   r   rH   rV   rF   r   r   r   r   )r=   r  r   r   s       r    test_return_typezTestKron.test_return_type  s    	% 	% 	% 	% 	%bj 	% 	% 	% GQFOOWQWagqv..T$q!**%%rz222T$r2,,''111T$q"++&&000T$r1++&&00000r"   array_classc                     |t          j        ddg                    } |t          j        ddg                    } |t          j        ddg                    }t          t          j        ||          |           d S )Nr+   r  )r   rH   r   r   )r=   r  r   r   r  s        r    test_kron_smokezTestKron.test_kron_smoke  su     KA((KA((KA((271a==!,,,,,r"   c                 h   t           j                            ddgddggddgddgg          }t           j                            t          j        g d          t          j        t          j        d          t
                               }t          |t          j        ||                     d S )	NrG   r.   r+   r,   r   r  )rG   r,   r,      rE   )r   r   rK   diagidentityrN   r   r   )r=   r   r  s      r    test_kron_mazTestKron.test_kron_ma  s    EKK!Q!Q(AA/?K@@EKK..hr{1~~T::::  < < 	1bgamm,,,,,r"   zshape_a,shape_b))r  r  )r@  )r,   r-   r   )r.   r.   )r.   r.   r.   ))rG   r   r  )r.   r   r.   r  ))r.   r   r   r.   r  c                    t          j        |          }t          j        |          }dt          dt          |          t          |          z
            z  |z   }dt          dt          |          t          |          z
            z  |z   }t          j        ||          }t          j        ||          }t          j        |j        |          s
J d            d S )N)rG   r   zUnexpected shape from kron)r   rH   r6   rz   multiplyr   array_equalrV   )	r=   shape_ashape_br   r   normalised_shape_anormalised_shape_bexpected_shaper  s	            r    test_kron_shapezTestKron.test_kron_shape  s     GGGG!C3w<<G+D$E$EEO!C3w<<G+D$E$EEO%79KLLGAqMM~) ) 	G 	G*F	G 	G 	G 	G 	Gr"   N)r`   ra   rb   r  r  r.  r/  parametrizer   asarraymatr  r  r  rc   r"   r    r  r    s        - - -:	1 	1 	1 [
BF+ - - -- - - [ 
 
 
 	G 	G 	G 	G 	Gr"   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestTilec                    t          j        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   rG   r.   r+   r,   )r   rG   r.   r   rG   r.   r  rG   r.   )rG   r.   rG   r.   )r+   r,   r+   r,   r.   rG   )r   rK   r   r   r=   r   r   s      r    r  zTestTile.test_basic  s3   HYYYVaVT!QZZ!3!3!3444T!V__'9'9'9;M;M;M&NOOOT!V__'9'9'9&:;;;T!QZZ,,,!=>>>T!V__1v1v1v1v&FGGGT!V__|||\\\'3||\\\'C 	D 	D 	D 	D 	Dr"   c                     t          j        d          }t          |d          }|dz  }t          |t          j        d                     d S )Nr-   rG   r.   )r   rr   r   r   r  s      r    (test_tile_one_repetition_on_array_gh4679z1TestTile.test_tile_one_repetition_on_array_gh4679  sC    IaLLAJJ	QQ	!%%%%%r"   c                     t          j        g gg          }t          j        g g g          }t          |d          j        }t          |d          j        }t	          |d           t	          |d           d S )Nr.   r^   )r.   r   )r+   r.   r   )r   rK   r   rV   r   )r=   r   r   r  rx   s        r    rY   zTestTile.test_empty  sp    HrdVHb"XAJJI$QQ	"""""r"   c                     ddl m} g d}g d}|D ]_} |dd|          }|D ]L}t          j        ||j                  }t          ||          }t          ||          }	t          ||	           M`d 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,   r  rD   )size)r0   r  r   rH   rF   r   r   r   )
r=   r  repsrV   r   r   rr   largeklarges
             r    test_kroncomparezTestTile.test_kroncompare  s    ((((((@@@JJJ 	, 	,A2A&&&A , ,GAqw''Q

aUF++++	,	, 	,r"   N)r`   ra   rb   r  r  rY   r  rc   r"   r    r  r    sS        	D 	D 	D& & &# # #, , , , ,r"   r  c                       e Zd Zd ZdS )TestMayShareMemoryc           
         t          j        d          }t          j        d          }t          t          j        ||                     t          t          j        ||d d d                              t          t          j        ||d d d                              t          t          j        ||dd d d df                              t          t          j        |d d d         |                      t          t          j        |d d d         |                      t          t          j        |dd d d df         |                      t          t          j        |dd d d df         |                     d S )N)rk   ri   )rg   ri   r   r   r.   rG   )r   rH   r   may_share_memory)r=   rx   d2s      r    r  zTestMayShareMemory.test_basic  se   GHW[!!#Aq))***#Aq2w//000#Aq1v..///#AqTTrT{33444B'$$B$444555B'##A#333444B'!""ddd(R888999#Bqrr44R4xL"5566666r"   Nr  rc   r"   r    r  r    s#        7 7 7 7 7r"   r  c                     t          |           t          |          k    rt          d          t          | |          D ]\  }}t          ||           dS )zCompare lists of arrays.z Iterables have different lengthsN)rz   rJ   zipr   )r   r  r   ys       r    r  r    sb    
3xx3w<<;<<<C!! ! !11a    ! !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   maxsizer1  r%   r'   re   ru   r   r   r
  r3  r9  rT  rd  rq  rz  r  r  r  r  r  rc   r"   r    <module>r     s           



                                
             
 ;  1. 1. 1. 1. 1. 1. 1. 1.h9 9 9 9 9 9 9 92c= c= c= c= c= c= c= c=LC C C C C C C C%5 %5 %5 %5 %5 %5 %5 %5PC& C& C& C& C& C& C& C&L/ / / / / / / / ; ; ; ; ; ; ; ;:"5 "5 "5 "5 "5 "5 "5 "5N& & & & & & & &:& & & & & & & &6& & & & & & & &B, , , , , , , ,&LG LG LG LG LG LG LG LG^%, %, %, %, %, %, %, %,P7 7 7 7 7 7 7 7 ! ! ! ! !r"   