
    G/Ph`k                     P   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 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)	AxisError)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/test/jupyter/venv/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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         Nr   r   )numpy.randomr+   r   sortargsortdictr&   minargminmaxargmaxlistrangendimr   r   )
selfr+   r   funcsr    argfuncr   r   a_funcai_funcs
             r!   test_argequivalentz$TestTakeAlongAxis.test_argequivalent    s2   %%%%%%DAqMM Wbj$&&)26""M")$<$<dffE26""M")$<$<dffE
 &+ 	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                 B   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          t          ||d           t	          t
          t          ||d           dS )z4 Test it errors when indices has too few dimensions )
   rA   )rA      dtype   r   rA   N)r   onesintpr   r   
ValueErrorarray
IndexErrorastypeboolfloatr   r:   r   ais      r!   test_invalidzTestTakeAlongAxis.test_invalid2   s    GHWWBG,,, 	2A&&&& 	j/1bhqkkJJJJj/1biiooANNNNj/1bii6F6FQOOOOi!RbAAAAj/1bt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.   rC   rE   r   Nr   rF   rG   r   r   shaper:   r   rO   actuals       r!   
test_emptyzTestTakeAlongAxis.test_emptyE   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-   rE   rE   rB   r.   rC   rE   r   r,   rB   r.   NrR   rT   s       r!   test_broadcastz TestTakeAlongAxis.test_broadcastM   sS    WYWYbg... BQ///V\9-----r#   N)__name__
__module____qualname__r?   rP   rV   r\    r#   r!   r(   r(      sV        M M M$E E E&- - -. . . . .r#   r(   c                        e Zd 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rA         <   (   2   r   i)r   rI   r7   r8   r9   copyr&   r6   r   r4   r   )r:   a_baser   r   i_maxi_mins         r!   test_replace_maxz!TestPutAlongAxis.test_replace_maxV   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 )
rX   rY   rA   rC   rZ   r-   rf   rE   r   N)r   rF   arangerG   reshaper   r   r   rN   s      r!   r\   zTestPutAlongAxis.test_broadcastf   sv    WYYr)))11)<<q@q"bq))))_Q333R88888r#   c                    t          j        g dg dg          }t          j        dgdgg          }t          j        dgdgg          }|                                }t          |||d           t          j        |g dg dgk              sJ |                                }t          t                    5 }t          |||d	           d	d	d	           n# 1 swxY w Y   d
t          |j                  v sJ d	S )z Test invalid inputs rd   rg   r   rE   rB   r   rB   rB   rB   rE   rE   rE   Nzsingle dimension)	r   rI   rk   r   allr   rH   str	exception)r:   rl   indicesvaluesr   excs         r!   rP   zTestPutAlongAxis.test_invalidm   sA   <<<677(QC!:&&A3*%% KKMMq'62222vaIIIyyy1122222 KKMM:&& 	:#1gvD9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:!S%7%7777777s   :CC!CN)r]   r^   r_   ro   r\   rP   r`   r#   r!   rb   rb   U   sA        ' ' ' 9 9 98 8 8 8 8r#   rb   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rf   rA   dr   rE   r   rF   r   r   lenrS   r:   r   s     r!   test_simplezTestApplyAlongAxis.test_simple   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)rA   e   r   r   rE   r   r   s     r!   test_simple101z!TestApplyAlongAxis.test_simple101   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   re   !   )$   '   *   )-   0   3   )r   rq   rr   r   r   sumr   s     r!   test_3dzTestApplyAlongAxis.test_3d   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 )NrB   r`   )rows    r!   doublez9TestApplyAlongAxis.test_preserve_subclass.<locals>.double   s    7Nr#   c                       e Zd ZdS )<TestApplyAlongAxis.test_preserve_subclass.<locals>.MyNDArrayNr]   r^   r_   r`   r#   r!   	MyNDArrayr              Dr#   r   r   rE   rB   r,   r-      )r   ndarrayrI   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>.MinimalSubclassrE   N)r]   r^   r_   datar`   r#   r!   MinimalSubclassr      s        DDDr#   r   c                     | j         S N)r   )rI   s    r!   minimal_functionz:TestApplyAlongAxis.test_subclass.<locals>.minimal_function   s
    :r#   r   r,   r   ru   )r   r   zerosr   r   r   rI   )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   rF   r   r   r   r   r   r   rI   )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 rE   T)keepdims)r   r9   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   rE   )r,   r,   r,   r,   r,   r,   )r   rF   r   r   r   r   r   rI   )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 xrE   N)r   r9   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   r`   .0ia2dr   s     r!   
<listcomp>z:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>   s:     
 
 
 !EE#aaac(OO
 
 
r#   rE   r   r   c                 :    g | ]} |d d f                   S r   r`   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   r`   )r   r   a3dr   js     r!   r   zETestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>.<listcomp>   s>       &'c!AAAa%j!!  r#   r   r   )r   stackr8   rS   )r   r   r   r   s    @r!   r   z:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>   s~     
 
 
  H      +01+>+>    
 
 
r#   rB   )
r   rq   rr   r   r   r8   rS   r   r   type)r:   r   rU   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   r`   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   rE   Nr   r.   r   )r   r9   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,   rE   rB   )r   rq   rr   r   r   r   r   masked_arrayr   r9   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 )NrE   r   r`   r   s    r!   	sample_1dz7TestApplyAlongAxis.test_tuple_func1d.<locals>.sample_1d   s    Q41:r#   rE   rB   r,   r-   )r   r   rI   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   rE   c                 F    t          t          |           dk               dS )Nr   rE   )r   r   r   s    r!   
empty_to_1z1TestApplyAlongAxis.test_empty.<locals>.empty_to_1  s    CFFaK   1r#   )rA   r   rA   )r   emptyr   rH   r   r   rF   )r:   r   r   r   rU   s        r!   rV   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 )NrE      rB      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   >   rE   r-   r   r   >   rB   r.   r   r   >   r,   r   r   r   )r   rI   r   r   ndindexrS   r   )r:   r   rU   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]   r^   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r`   r#   r!   r}   r}      s       E E E
E E E
G G G
- - -$
 
 
 %'J ? ? ? ? !#
 H H H H ')j #' #' #' #'J2 2 2@ @ @< < <I I I&= = = = =r#   r}   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   rB   r,   r-   r   rh   \   |   )r   rq   rr   r   r   r   rI   )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]   r^   r_   r   r`   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rB   r,   r-   r.   r-   rE   )r   r   r8   r   r   rS   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   rE   rB   r   )rE   rE   rE   r,   r,   r,   )r   r   )rE   r,   r,   r,   rE   rE   )r   r,   r.   )rE   r,   r,   rE   r,   rE   )r   r   )rE   rE   r,   rE   r,   r,   )r   r   r   rS   r   s     r!   test_axis_tuplezTestExpandDims.test_axis_tuple6  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                 :   d}t          j        |          }t          t          t          |d           t          t          t          |d           t          j        d          }t          t          t          |d           t          t          t          |d           d S )Nr   r.   r   )r   r  )r   r.   )r   r   r   r   r   )r:   r   r   s      r!   test_axis_out_of_rangez%TestExpandDims.test_axis_out_of_range=  sy    HQKKia444ia333HYia999ia88888r#   c                 h    t          j        d          }t          t          t          |d           d S )Nr   rE   rE   r   )r   r   r   rH   r   r   s     r!   test_repeated_axisz!TestExpandDims.test_repeated_axisG  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 )	NrA   )rB   r.   r,   r   r   rE   r   )rB   rE   r.   )r   rq   rr   r   rI   r   r   r   MaskedArrayr   rS   r   )r:   r   expandeds      r!   test_subclasseszTestExpandDims.test_subclassesK  s    IbMM!!&))EKK!qK))>!!,,,
8RU%677888X^Y///X]()44444r#   N)r]   r^   r_   r   r  r  r  r  r`   r#   r!   r   r   -  sb        . . .O O O9 9 9? ? ?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 )NrA   r   )r   rq   r   rH   r   r   s     r!   test_integer_0_splitz#TestArraySplit.test_integer_0_splitV  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 )NrA   rE   rB   r.   r,   r-      r      	   r   )r   rq   r   compare_resultsrI   r:   r   r   desireds       r!   test_integer_splitz!TestArraySplit.test_integer_splitZ  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 )NrA   r,   r   r   r   rA   r   rE   	r   rI   rq   r   r   r  r   rD   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 )NrA   r,   r   r   r-   r  )r   rI   rq   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
        rA   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   rB   r-   )i   @rB   )r   broadcast_tor   r8   r   r   rS   )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 )	NrA   )rE   r.   r  r   r   r   rE   r.   r  )r   rq   r   r  r:   r   ry   r   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 )NrA   )r   r.   r  r   r   r   r.   r  r   rq   r   rI   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 )NrA   )r   r.   r  rA      r   r   r   r.   r  r0  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]   r^   r_   r  r  r"  r$  r&  pytestmarkskipifIS_64BITr+  r.  r1  r4  r`   r#   r!   r  r  U  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 )NrA   rB   r.   )r   rq   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 )NrA   r,   )r   rq   r   rH   r   r   s     r!   test_unequal_splitzTestSplit.test_unequal_split  s)    IbMMj%A.....r#   N)r]   r^   r_   r<  r>  r`   r#   r!   r:  r:    s2        
& & &/ / / / /r#   r:  c                   &    e Zd Zd Zd Zd Zd ZdS )TestColumnStackc                 <    t          t          t          d           d S NrE   )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rE   rB   r,   )rB   r,   r-   rE   rB   r,   r-   r   rI   r   r   r:   r   r   r   rU   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 )NrE   rB   r,   r-   rH  rI  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   rq   r   _s     r!   	<genexpr>z1TestColumnStack.test_generator.<locals>.<genexpr>  s*      88!1888888r#   rB   )r5  raisesrC  r   r8   rD  s    r!   test_generatorzTestColumnStack.test_generator  s    ]9,EFFF 	9 	988uQxx888888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9   'AAAN)r]   r^   r_   rE  rJ  rL  rX  r`   r#   r!   r@  r@    sP        2 2 2' ' '' ' '9 9 9 9 9r#   r@  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 rB  )r   rC  r
   rD  s    r!   rE  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 NrE   rB   r   rI   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 r^  r_  r`  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 r^  r_  r`  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 r^  r_  r`  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 )NrN  rO  c              3   >   K   | ]}t          j        d           V  dS rR  rS  rT  s     r!   rV  z,TestDstack.test_generator.<locals>.<genexpr>*  s*      22A29Q<<222222r#   rB   )r5  rW  rC  r
   r8   rD  s    r!   rX  zTestDstack.test_generator(  s    ]9,EFFF 	3 	322q222222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3rY  N)	r]   r^   r_   rE  ra  rc  re  rg  rX  r`   r#   r!   r[  r[    sn        , , ,) ) )) ) )) ) )) ) )3 3 3 3 3r#   r[  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 rB  )r   rH   r   rD  s    r!   rE  zTestHsplit.test_non_iterable3      j&!Q/////r#   c                     t          j        d          }	 t          |d           t          d           d S # t          $ r Y d S w xY w)NrE   rB   r   )r   rI   r   r   rH   r   s     r!   ra  zTestHsplit.test_0D_array6  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rE   rB   r,   r-   rB   rE   r,   r-   r   rI   r   r  r  s       r!   rc  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 rq  rs  r  s       r!   re  zTestHsplit.test_2D_arrayD  s    Hlll,,  ! !Qll8aVaV,--rx!Q!Q8H/I/IJW%%%%%r#   Nr]   r^   r_   __doc__rE  ra  rc  re  r`   r#   r!   rk  rk  /  sZ         0 0 0  & & && & & & &r#   rk  c                   *    e Zd ZdZd Zd Zd Zd ZdS )
TestVsplitrl  c                 >    t          t          t          dd           d S rB  )r   rH   r	   rD  s    r!   rE  zTestVsplit.test_non_iterableP  rn  r#   c                 f    t          j        d          }t          t          t          |d           d S r^  )r   rI   r   rH   r	   r   s     r!   ra  zTestVsplit.test_0D_arrayS  )    HQKKj&!Q/////r#   c                     t          j        g d          }	 t          |d           t          d           d S # t          $ r Y d S w xY wNrr  rB   r   )r   rI   r	   r   rH   r   s     r!   rc  zTestVsplit.test_1D_arrayW  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 Nrr  rB   )r   rI   r	   r  r  s       r!   re  zTestVsplit.test_2D_array_  sr    Hlll,,  ! !Qll8\\\N++RX|||n-E-EFW%%%%%r#   Nru  r`   r#   r!   rx  rx  L  sZ         0 0 00 0 0  & & & & &r#   rx  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 rB  )r   rH   r   rD  s    r!   rE  zTestDsplit.test_non_iterablei  rn  r#   c                 f    t          j        d          }t          t          t          |d           d S r^  r   rI   r   rH   r   r   s     r!   ra  zTestDsplit.test_0D_arrayl  r{  r#   c                 j    t          j        g d          }t          t          t          |d           d S r  r  r   s     r!   rc  zTestDsplit.test_1D_arrayp  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r}  )r   rI   r   r   rH   r   s     r!   re  zTestDsplit.test_2D_arrayt  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 rq  )r   rI   r   r  r  s       r!   test_3D_arrayzTestDsplit.test_3D_array}  s    H|||<<!<<<<!" # # Qll8q!fq!f-AA/?@AA8q!fq!f-AA/?@AACW%%%%%r#   N)r]   r^   r_   rE  ra  rc  re  r  r`   r#   r!   r  r  g  s_        0 0 00 0 00 0 0  & & & & &r#   r  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*   rf   rA   rE   )rf   rA   rA   )rf   rA   rf   r   g      ?)
r/   r+   r   r   r   rr   r   r9   r   r   )r:   r+   r   r   cr   s         r!   
test_basiczTestSqueeze.test_basic  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]   r^   r_   r  r`   r#   r!   r  r    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 )	NrE   rB   r,   r-   r   r  r3  r  )r   rI   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]   r^   r_   __array_priority__r`   r#   r!   myarrayr    s        !$r#   r  rB   )	r   r   rF   rS   rD   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   rF   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 )	NrE   rB   r,   r-   r   r  )rE   r-   r-      rC   )r   r   rI   diagidentityrL   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
  )rG  )r-   r.   r   )rB   rB   rt   ))rE   r   r
  )rB   r   rB   r  ))rB   r   r   rB   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)rE   r   zUnexpected shape from kron)r   rF   r5   r   multiplyr   array_equalrS   )	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]   r^   r_   r  r  r5  r6  parametrizer   asarrayasmatrixr  r  r  r`   r#   r!   r  r    s        - - -:	1 	1 	1 [
BK0 - - -- - - [ 
 
 
 	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  rE   rB   r,   r-   )r   rE   rB   r   rE   rB   r  rE   rB   )rE   rB   rE   rB   )r,   r-   r,   r-   rB   rE   )r   rI   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.   rE   rB   )r   rq   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 )NrB   r[   )rB   r   )r,   rB   r   )r   rI   r   rS   r   )r:   r   r   r  r   s        r!   rV   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))rB   r  r  r  )rB   r,   rB   )r,   rB   ))r,   )rB   r,   )r,   r-   r,   )r,   rB   r,   )r-   r,   rB   r-   r  rA   )size)r/   r  r   rF   rD   r   r   r   )
r:   r  repsrS   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]   r^   r_   r  r  rV   r  r`   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)rj   rh   )re   rh   r   r   rB   rE   )r   rF   r   may_share_memory)r:   r   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  r`   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)r   rH   zipr   )r   r  r   ys       r!   r  r  "  sb    
3xx3w<<;<<<C!! ! !11a    ! !r#   )/numpyr   r$   sysr5  r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   numpy.exceptionsr   numpy.testingr   r   r   r   r   maxsizer8  r&   r(   rb   r}   r   r   r  r:  r@  r[  rk  rx  r  r  r  r  r  r  r`   r#   r!   <module>r     s           



                                
 ' & & & & &             
 ;  3. 3. 3. 3. 3. 3. 3. 3.l'8 '8 '8 '8 '8 '8 '8 '8Vc= 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/ / / / / / / / 9 9 9 9 9 9 9 9:"3 "3 "3 "3 "3 "3 "3 "3N& & & & & & & &:& & & & & & & &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#   