U
    ¸mœd…h  ã                   @   sz  d dl Zd dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZ ejdkZdd„ ZG dd„ dƒZG d	d
„ d
ƒZG dd„ dƒZG dd„ dƒZ G dd„ dƒZ!G dd„ dƒZ"G dd„ dƒZ#G dd„ dƒZ$G dd„ dƒZ%G dd„ dƒZ&G dd„ dƒZ'G dd„ dƒZ(G dd „ d ƒZ)G d!d"„ d"ƒZ*G d#d$„ d$ƒZ+G d%d&„ d&ƒZ,d'd(„ Z-dS ))é    N)Úapply_along_axisÚapply_over_axesÚarray_splitÚsplitÚhsplitÚdsplitÚvsplitÚdstackÚcolumn_stackÚkronÚtileÚexpand_dimsÚtake_along_axisÚput_along_axis)Úassert_Úassert_equalÚassert_array_equalÚassert_raisesÚassert_warnsì        c                    s   t  ˆ ¡‡ fdd„ƒ}|S )z: hack in keepdims behavior into a function taking an axis c                    s.   ˆ | fd|i|—Ž}|d kr d}t j||d�S )NÚaxisr   ©r   )Únpr   )Úar   ÚkwargsÚres©Úfunc© úX/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numpy/lib/tests/test_shape_base.pyÚwrapped   s    z_add_keepdims.<locals>.wrapped)Ú	functoolsÚwraps)r   r    r   r   r   Ú_add_keepdims   s    r#   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestTakeAlongAxisc           
   	   C   sÒ   ddl m} |dddƒ}tjtjtƒ fttjƒttjƒtƒ fttj	ƒttj
ƒtƒ ftjtjtdd�fg}|D ]`\}}}tt|jƒƒdg D ]@}||fd	|i|—Ž}||fd	|i|—Ž}	t|t||	|d
�ƒ qŠqldS )z- Test it translates from arg<func> to <func> r   ©Úrandé   é   é   é   )ZkthNr   r   )Únumpy.randomr&   r   ÚsortZargsortÚdictr#   ÚminÚargminÚmaxÚargmaxÚ	partitionZargpartitionÚlistÚrangeÚndimr   r   )
Úselfr&   r   Úfuncsr   Zargfuncr   r   Za_funcZai_funcr   r   r   Útest_argequivalent   s    üz$TestTakeAlongAxis.test_argequivalentc                 C   sˆ   t  d¡}t jdt jd�}t||dd� ttt|t  d¡dd� ttt|| t	¡dd� ttt|| t
¡dd� tt jt||dd� dS )z4 Test it errors when indices has too few dimensions )é
   r9   )r9   r*   ©Údtypeé   r   r9   N)r   ÚonesÚintpr   r   Ú
ValueErrorÚarrayÚ
IndexErrorZastypeÚboolÚfloatÚ	AxisError©r6   r   Úair   r   r   Útest_invalid1   s    
zTestTakeAlongAxis.test_invalidc                 C   s:   t  d¡}t jdt jd�}t||dd�}t|j|jƒ dS )zC Test everything is ok with empty results, even with inserted dims )r'   r(   r)   )r'   r   r)   r:   r<   r   N©r   r=   r>   r   r   Úshape©r6   r   rF   Úactualr   r   r   Ú
test_emptyB   s    
zTestTakeAlongAxis.test_emptyc                 C   s8   t  d¡}t jdt jd�}t||dd�}t|jdƒ dS )úD Test that non-indexing dimensions are broadcast in both directions ©r'   r(   r<   ©r<   r*   r)   r:   r<   r   ©r'   r*   r)   NrH   rJ   r   r   r   Útest_broadcastJ   s    
z TestTakeAlongAxis.test_broadcastN)Ú__name__Ú
__module__Ú__qualname__r8   rG   rL   rQ   r   r   r   r   r$      s   r$   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestPutAlongAxisc                 C   s~   t  dddgdddgg¡}tt|jƒƒd g D ]J}| ¡ }tt jƒ||d�}t||d|d� tt j	ƒ||d�}t
||ƒ q.d S )	Nr9   é   é   é<   é(   é2   r   i�ÿÿÿ)r   r@   r3   r4   r5   Úcopyr#   r1   r   r/   r   )r6   Za_baser   r   Zi_maxZi_minr   r   r   Útest_replace_maxS   s    z!TestPutAlongAxis.test_replace_maxc                 C   sL   t  d¡}t jdt jd� d¡d }t||ddd� tt||dd�dƒ d	S )
rM   rN   r9   r:   rO   r(   rW   r<   r   N)r   r=   Úaranger>   Úreshaper   r   r   rE   r   r   r   rQ   c   s    
zTestPutAlongAxis.test_broadcastN)rR   rS   rT   r\   rQ   r   r   r   r   rU   R   s   rU   c                   @   s†   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	fdd„Z
ej	fdd„Zej	fdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestApplyAlongAxisc                 C   s6   t  dd¡}tttd|ƒt|ƒt  |jd ¡ ƒ d S )N©rW   r9   Údr   r<   ©r   r=   r   r   ÚlenrI   ©r6   r   r   r   r   Útest_simplel   s
    
 ÿzTestApplyAlongAxis.test_simplec                 C   s6   t  dd¡}tttd|ƒt|ƒt  |jd ¡ ƒ d S )N)r9   ée   ra   r   r<   rb   rd   r   r   r   Útest_simple101q   s
    
 ÿz!TestApplyAlongAxis.test_simple101c                 C   s@   t  d¡ d¡}ttt jd|ƒdddgdddgd	d
dggƒ d S )Né   ©r'   r'   r'   r   rV   é!   é$   é'   é*   é-   é0   é3   )r   r]   r^   r   r   Úsumrd   r   r   r   Útest_3dv   s    ÿzTestApplyAlongAxis.test_3dc                 C   sž   dd„ }G dd„ dt jƒ}t  ddgddgg¡ |¡}t  ddgd	d
gg¡ |¡}t|d|ƒ}tt||ƒƒ t||ƒ t|d|ƒ}tt||ƒƒ t||ƒ d S )Nc                 S   s   | d S )Nr*   r   )Úrowr   r   r   Údouble|   s    z9TestApplyAlongAxis.test_preserve_subclass.<locals>.doublec                   @   s   e Zd ZdS )z<TestApplyAlongAxis.test_preserve_subclass.<locals>.MyNDArrayN©rR   rS   rT   r   r   r   r   Ú	MyNDArray   s   rv   r   r<   r*   r'   r(   é   )r   Úndarrayr@   Úviewr   r   Ú
isinstancer   )r6   rt   rv   ÚmÚexpectedÚresultr   r   r   Útest_preserve_subclass{   s    
z)TestApplyAlongAxis.test_preserve_subclassc                 C   sL   G dd„ dt jƒ}dd„ }t  d¡ |¡}tt|d|ƒt  dddg¡ƒ d S )Nc                   @   s   e Zd ZdZdS )z9TestApplyAlongAxis.test_subclass.<locals>.MinimalSubclassr<   N)rR   rS   rT   Údatar   r   r   r   ÚMinimalSubclassŽ   s   r€   c                 S   s   | j S ©N)r   )r@   r   r   r   Úminimal_function‘   s    z:TestApplyAlongAxis.test_subclass.<locals>.minimal_function©rw   r'   r   r<   )r   rx   Úzerosry   r   r   r@   )r6   r€   r‚   r   r   r   r   Útest_subclass�   s    
 ÿz TestApplyAlongAxis.test_subclassc                 C   sL   t  d¡ |¡}tt jd|ƒ}tt||ƒƒ t|t  dddg¡ |¡ƒ d S )Nrƒ   r   rw   )	r   r=   ry   r   rq   r   rz   r   r@   )r6   Úclsr   r   r   r   r   Útest_scalar_arrayš   s    z$TestApplyAlongAxis.test_scalar_arrayc              
   C   sŽ   dd„ }t  d¡ |¡}t|d|ƒ}tt||ƒƒ t|t  dddg¡ |¡ƒ t|d|ƒ}tt||ƒƒ t|t  ddddddg¡ |¡ƒ d S )Nc                 S   s    t | jdƒ t tj| dd�¡S )z/ Sum x, returning a 0d array of the same class r<   T)Zkeepdims)r   r5   r   Úsqueezerq   ©Úxr   r   r   Ú	sum_to_0d¡   s    z3TestApplyAlongAxis.test_0d_array.<locals>.sum_to_0drƒ   r   rw   r<   r'   )r   r=   ry   r   r   rz   r   r@   )r6   r†   r‹   r   r   r   r   r   Útest_0d_array    s    z TestApplyAlongAxis.test_0d_arrayc                    s2  ‡fdd„‰t  d¡ d¡‰ tˆdˆ ƒ}t j‡ ‡fdd„tˆ jd ƒD ƒd	d
� ˆ¡}tt	|ƒt	|ƒƒ t||ƒ tˆdˆ ƒ}t j‡ ‡fdd„tˆ jd ƒD ƒdd
� ˆ¡}tt	|ƒt	|ƒƒ t||ƒ t  d¡ d¡‰tˆdˆƒ}t j‡‡fdd„tˆjd ƒD ƒd	d
� ˆ¡}tt	|ƒt	|ƒƒ t||ƒ d S )Nc                    s0   t | jdƒ | ddd… | dd…df   ˆ ¡S )ú/produces an asymmetric non-square matrix from xr<   Néÿÿÿÿ)r   r5   ry   r‰   )r†   r   r   Úf1to2¯   s    z5TestApplyAlongAxis.test_axis_insertion.<locals>.f1to2é   rƒ   r   c                    s    g | ]}ˆˆ d d …|f ƒ‘qS r�   r   ©Ú.0Úi©Úa2dr�   r   r   Ú
<listcomp>¸   s    z:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>r<   rŽ   r   c                    s    g | ]}ˆˆ |d d …f ƒ‘qS r�   r   r‘   r”   r   r   r–   À   s    éZ   )rw   r)   r'   c                    s6   g | ].‰ t j‡‡‡ fd d„tˆjd ƒD ƒdd�‘qS )c                    s"   g | ]}ˆˆ |d d …ˆf ƒ‘qS r�   r   r‘   )Úa3dr�   Újr   r   r–   Ë   s    zETestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>.<listcomp>r   r   )r   Ústackr4   rI   )r’   )r˜   r�   )r™   r   r–   Ê   s   ýÿþr*   )
r   r]   r^   r   rš   r4   rI   ry   r   Útype)r6   r†   rK   r|   r   )r•   r˜   r†   r�   r   Útest_axis_insertion®   sB    ÿþþ
ÿþþ
üûûz&TestApplyAlongAxis.test_axis_insertionc                 C   s4   G dd„ dt jƒ}|  |¡ |  |¡ |  |¡ d S )Nc                   @   s   e Zd ZdS )zFTestApplyAlongAxis.test_subclass_preservation.<locals>.MinimalSubclassNru   r   r   r   r   r€   Ô   s   r€   )r   rx   r‡   rŒ   rœ   )r6   r€   r   r   r   Útest_subclass_preservationÓ   s    

z-TestApplyAlongAxis.test_subclass_preservationc                 C   sÖ   dd„ }t  d¡ d¡}t|d|ƒ}tt|t jjƒƒ t|j	dƒ t
|d d …d d …df j||d d …df ƒjƒ t
|d d …d d …df j||d d …df ƒjƒ t
|d d …d d …df j||d d …df ƒjƒ d S )	Nc                 S   s@   t | jdƒ | ddd… | dd…df  }tj |d dk|¡S )r�   r<   NrŽ   r)   r   )r   r5   r   ÚmaZmasked_where)rŠ   r   r   r   r   r�   Û   s    z8TestApplyAlongAxis.test_axis_insertion_ma.<locals>.f1to2r�   rƒ   r   r'   r<   r*   )r   r]   r^   r   r   rz   rž   Zmasked_arrayr   r5   r   Úmask)r6   r�   r   r   r   r   r   Útest_axis_insertion_maÚ   s    00z)TestApplyAlongAxis.test_axis_insertion_mac              	   C   sH   dd„ }t  |dt  ddgddgg¡¡}t|t  ddgddgg¡ƒ d S )Nc                 S   s   | d | d fS )Nr<   r   r   r‰   r   r   r   Ú	sample_1dé   s    z7TestApplyAlongAxis.test_tuple_func1d.<locals>.sample_1dr<   r*   r'   r(   )r   r   r@   r   )r6   r¡   r   r   r   r   Útest_tuple_func1dè   s     z$TestApplyAlongAxis.test_tuple_func1dc                 C   s|   dd„ }t  d¡}ttt j|d|ƒ ttt j|d|ƒ dd„ }t  d¡}t  |d|¡}t|t  d	¡ƒ ttt j|d|ƒ d S )
Nc                 S   s   t dƒ d S )NF)r   r‰   r   r   r   Ú
never_callð   s    z1TestApplyAlongAxis.test_empty.<locals>.never_call)r   r   r   r<   c                 S   s   t t| ƒdkƒ dS )Nr   r<   )r   rc   r‰   r   r   r   Ú
empty_to_1ø   s    z1TestApplyAlongAxis.test_empty.<locals>.empty_to_1)r9   r   r9   )r   Úemptyr   r?   r   r   r=   )r6   r£   r   r¤   rK   r   r   r   rL   î   s    

zTestApplyAlongAxis.test_emptyc                 C   s¦   t  ddhddhddhgddhd	d
hddhgg¡}t  dd„ d|¡}t  ddddhddd	d
hddddhg¡}t||ƒ t  |j¡D ]}tt|| ƒt|| ƒƒ q‚d S )Nr<   é   r*   é   r'   rj   r(   é,   r)   é7   rw   éB   c                 S   s
   t j| Ž S r�   )ÚsetÚunion)r   r   r   r   Ú<lambda>  ó    z>TestApplyAlongAxis.test_with_iterable_object.<locals>.<lambda>r   )r   r@   r   r   ZndindexrI   r›   )r6   ra   rK   r|   r“   r   r   r   Útest_with_iterable_object  s    þ(
z,TestApplyAlongAxis.test_with_iterable_objectN)rR   rS   rT   re   rg   rr   r~   r…   r   rx   r‡   rŒ   rœ   r�   r    r¢   rL   r¯   r   r   r   r   r_   k   s   %r_   c                   @   s   e Zd Zdd„ ZdS )ÚTestApplyOverAxesc                 C   sH   t  d¡ ddd¡}tt j|ddgƒ}t|t  dgdgdggg¡ƒ d S )	Né   r*   r'   r(   r   rX   é\   é|   )r   r]   r^   r   rq   r   r@   )r6   r   Zaoa_ar   r   r   re     s    zTestApplyOverAxes.test_simpleN)rR   rS   rT   re   r   r   r   r   r°     s   r°   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestExpandDimsc                 C   sR   d}t  |¡}tddƒD ]4}t||ƒ}t|j| dkƒ tt  |¡j|kƒ qd S )N©r*   r'   r(   r)   éûÿÿÿr(   r<   )r   r¥   r4   r   r   rI   rˆ   )r6   Úsr   r   Úbr   r   r   Útest_functionality  s    

z!TestExpandDims.test_functionalityc                 C   sn   t  d¡}t j|dd�jdks"t‚t j|dd�jdks:t‚t j|dd�jdksRt‚t j|d	d�jd
ksjt‚d S )Nri   )r   r<   r*   r   )r<   r<   r<   r'   r'   r'   )r   rŽ   éþÿÿÿ)r<   r'   r'   r'   r<   r<   )r   r'   r)   )r<   r'   r'   r<   r'   r<   )r   éýÿÿÿr¶   )r<   r<   r'   r<   r'   r'   )r   r¥   r   rI   ÚAssertionErrorrd   r   r   r   Útest_axis_tuple!  s
    
zTestExpandDims.test_axis_tuplec                 C   s\   d}t  |¡}tt jt|dƒ tt jt|dƒ t  d¡}tt jt|dƒ tt jt|dƒ d S )Nrµ   éúÿÿÿr)   ri   )r   r¾   )r   r)   )r   r¥   r   rD   r   )r6   r·   r   r   r   r   Útest_axis_out_of_range(  s    

z%TestExpandDims.test_axis_out_of_rangec                 C   s   t  d¡}ttt|dd� d S )Nri   ©r<   r<   r   )r   r¥   r   r?   r   rd   r   r   r   Útest_repeated_axis2  s    
z!TestExpandDims.test_repeated_axisc                 C   sf   t  d¡ d¡}t jj||d dkd�}t j|dd�}tt|t jjƒƒ t	|j
dƒ t	|jj
dƒ d S )	Nr9   )r*   r)   r'   r   ©rŸ   r<   r   )r*   r<   r)   )r   r]   r^   rž   r@   r   r   rz   ZMaskedArrayr   rI   rŸ   )r6   r   Úexpandedr   r   r   Útest_subclasses6  s    zTestExpandDims.test_subclassesN)rR   rS   rT   r¹   r½   r¿   rÁ   rÄ   r   r   r   r   r´     s
   
r´   c                   @   sf   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	j
e dd�dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestArraySplitc                 C   s   t  d¡}ttt|dƒ d S )Nr9   r   )r   r]   r   r?   r   rd   r   r   r   Útest_integer_0_splitA  s    
z#TestArraySplit.test_integer_0_splitc                 C   s’  t  d¡}t|dƒ}t  d¡g}t||ƒ t|dƒ}t  d¡t  dd¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd	¡t  d	d¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd	¡t  d	d¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g}t||ƒ t|d	ƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g}t||ƒ t|d
ƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g	}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g
}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡t  g ¡g}t||ƒ d S )Nr9   r<   r*   r)   r'   r(   é   rw   é   é	   r¦   )r   r]   r   Úcompare_resultsr@   ©r6   r   r   Údesiredr   r   r   Útest_integer_splitE  sœ    





 


ÿ


 
ÿ


 
 
ÿ


 
 

þ


 
 

 
þ


 
 

 
 
þ


 
 

 
 

ý


 
 

 
 

 ýz!TestArraySplit.test_integer_splitc                 C   sÚ   t  t  d¡t  d¡g¡}t|ddd�}t  t  d¡g¡t  t  d¡g¡t  d¡g}t||ƒ t|jj|d jjkƒ t|ddgdd�}t  d¡t  t  d¡g¡t  t  d¡g¡g}t||ƒ t|jj|d jjkƒ d S )Nr9   r'   r   r   ©r   r9   rŽ   r<   ©	r   r@   r]   r   r„   rÊ   r   r;   r›   ©r6   r   r   Útgtr   r   r   Útest_integer_split_2D_rows‚  s     ÿ
ÿ
z)TestArraySplit.test_integer_split_2D_rowsc              	   C   sŠ   t  t  d¡t  d¡g¡}t|ddd�}t  t  d¡t  d¡g¡t  t  dd¡t  dd¡g¡t  t  dd¡t  dd¡g¡g}t||ƒ d S )Nr9   r'   rŽ   r   r(   rÇ   )r   r@   r]   r   rÊ   rË   r   r   r   Útest_integer_split_2D_cols‘  s    þz)TestArraySplit.test_integer_split_2D_colsc                 C   sv   t  t  d¡t  d¡g¡}t|dƒ}t  t  d¡g¡t  t  d¡g¡t  d¡g}t||ƒ t|jj|d jjkƒ dS )z2 This will fail if we change default axis
        r9   r'   rÎ   rŽ   NrÏ   rÐ   r   r   r   Útest_integer_split_2D_default™  s    
 ÿ
z,TestArraySplit.test_integer_split_2D_defaultzNeeds 64bit platform)Úreasonc                 C   s\   t  dgd¡}t|dƒ}t  dgd¡}|gd }tt|ƒƒD ]}t|| j|| jƒ q<d S )Nr   )r   r*   r(   )i   @r*   )r   Zbroadcast_tor   r4   rc   r   rI   )r6   r   r   ÚchunkrÑ   r“   r   r   r   Ú,test_integer_split_2D_rows_greater_max_int32¤  s    

z;TestArraySplit.test_integer_split_2D_rows_greater_max_int32c                 C   s\   t  d¡}dddg}t||dd�}t  dd¡t  dd¡t  dd¡t  dd¡g}t||ƒ d S )Nr9   r<   r)   rÇ   rŽ   r   r   )r   r]   r   rÊ   ©r6   r   Úindicesr   rÌ   r   r   r   Útest_index_split_simple­  s    


ÿz&TestArraySplit.test_index_split_simplec                 C   sZ   t  d¡}dddg}t||dd�}t  g ¡t  dd¡t  dd¡t  dd¡g}t||ƒ d S )Nr9   r   r)   rÇ   rŽ   r   ©r   r]   r   r@   rÊ   rØ   r   r   r   Útest_index_split_low_boundµ  s    


ÿz)TestArraySplit.test_index_split_low_boundc                 C   sn   t  d¡}dddddg}t||dd�}t  g ¡t  dd¡t  dd¡t  dd¡t  g ¡t  g ¡g}t||ƒ d S )Nr9   r   r)   rÇ   é   rŽ   r   rÛ   rØ   r   r   r   Útest_index_split_high_bound½  s    

  ÿz*TestArraySplit.test_index_split_high_boundN)rR   rS   rT   rÆ   rÍ   rÒ   rÓ   rÔ   ÚpytestÚmarkZskipifÚIS_64BITr×   rÚ   rÜ   rÞ   r   r   r   r   rÅ   @  s   =
rÅ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	TestSplitc                 C   s8   t  d¡}t|dƒ}t  d¡t  dd¡g}t||ƒ d S )Nr9   r*   r)   )r   r]   r   rÊ   rË   r   r   r   Útest_equal_splitË  s    

zTestSplit.test_equal_splitc                 C   s   t  d¡}ttt|dƒ d S )Nr9   r'   )r   r]   r   r?   r   rd   r   r   r   Útest_unequal_splitÑ  s    
zTestSplit.test_unequal_splitN)rR   rS   rT   rã   rä   r   r   r   r   râ   Æ  s   râ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestColumnStackc                 C   s   t ttdƒ d S ©Nr<   )r   Ú	TypeErrorr
   ©r6   r   r   r   Útest_non_iterable×  s    z!TestColumnStack.test_non_iterablec                 C   sL   t  d¡}t  d¡}t  ddgddgddgg¡}t  ||f¡}t||ƒ d S )N©r<   r*   r'   )r*   r'   r(   r<   r*   r'   r(   ©r   r@   r
   r   ©r6   r   r¸   r|   rK   r   r   r   Útest_1D_arraysÚ  s    


þzTestColumnStack.test_1D_arraysc                 C   sd   t  dgdgdgg¡}t  dgdgdgg¡}t  ddgddgddgg¡}t  ||f¡}t||ƒ d S ©Nr<   r*   r'   r(   rë   rì   r   r   r   Útest_2D_arraysä  s    
þzTestColumnStack.test_2D_arraysc              	   C   s.   t tƒ� tdd„ tdƒD ƒƒ W 5 Q R X d S )Nc                 s   s   | ]}t  d ¡V  qdS ©r'   N©r   r]   ©r’   Ú_r   r   r   Ú	<genexpr>ð  s     z1TestColumnStack.test_generator.<locals>.<genexpr>r*   )r   ÚFutureWarningr
   r4   rè   r   r   r   Útest_generatorî  s    
zTestColumnStack.test_generatorN)rR   rS   rT   ré   rí   rï   rö   r   r   r   r   rå   Ö  s   

rå   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú
TestDstackc                 C   s   t ttdƒ d S ræ   )r   rç   r	   rè   r   r   r   ré   ô  s    zTestDstack.test_non_iterablec                 C   s@   t  d¡}t  d¡}t||gƒ}t  ddggg¡}t||ƒ d S ©Nr<   r*   ©r   r@   r	   r   ©r6   r   r¸   r   rÌ   r   r   r   Útest_0D_array÷  s
    

zTestDstack.test_0D_arrayc                 C   sD   t  dg¡}t  dg¡}t||gƒ}t  ddggg¡}t||ƒ d S rø   rù   rú   r   r   r   Útest_1D_arrayþ  s
    zTestDstack.test_1D_arrayc                 C   sX   t  dgdgg¡}t  dgdgg¡}t||gƒ}t  ddggddggg¡}t||ƒ d S rø   rù   rú   r   r   r   Útest_2D_array  s
    zTestDstack.test_2D_arrayc                 C   sN   t  ddg¡}t  ddg¡}t||gƒ}t  ddgddggg¡}t||ƒ d S rø   rù   rú   r   r   r   Útest_2D_array2  s
    zTestDstack.test_2D_array2c              	   C   s.   t tƒ� tdd„ tdƒD ƒƒ W 5 Q R X d S )Nc                 s   s   | ]}t  d ¡V  qdS rð   rñ   rò   r   r   r   rô     s     z,TestDstack.test_generator.<locals>.<genexpr>r*   )r   rõ   r	   r4   rè   r   r   r   rö     s    
zTestDstack.test_generatorN)	rR   rS   rT   ré   rû   rü   rý   rþ   rö   r   r   r   r   r÷   ó  s   r÷   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
TestHsplitú&Only testing for integer splits.

    c                 C   s   t ttddƒ d S ræ   )r   r?   r   rè   r   r   r   ré     s    zTestHsplit.test_non_iterablec                 C   s:   t  d¡}zt|dƒ tdƒ W n tk
r4   Y nX d S )Nr<   r*   r   )r   r@   r   r   r?   rd   r   r   r   rû   !  s    

zTestHsplit.test_0D_arrayc                 C   sF   t  ddddg¡}t|dƒ}t  ddg¡t  ddg¡g}t||ƒ d S rî   ©r   r@   r   rÊ   rË   r   r   r   rü   )  s    
zTestHsplit.test_1D_arrayc                 C   sb   t  ddddgddddgg¡}t|dƒ}t  ddgddgg¡t  ddgddgg¡g}t||ƒ d S rî   r  rË   r   r   r   rý   /  s    
ÿ
,zTestHsplit.test_2D_arrayN©rR   rS   rT   Ú__doc__ré   rû   rü   rý   r   r   r   r   rÿ     s
   rÿ   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
TestVsplitr   c                 C   s   t ttddƒ d S ræ   )r   r?   r   rè   r   r   r   ré   ;  s    zTestVsplit.test_non_iterablec                 C   s   t  d¡}ttt|dƒ d S rø   )r   r@   r   r?   r   rd   r   r   r   rû   >  s    
zTestVsplit.test_0D_arrayc                 C   sB   t  ddddg¡}zt|dƒ tdƒ W n tk
r<   Y nX d S ©Nr<   r*   r'   r(   r   )r   r@   r   r   r?   rd   r   r   r   rü   B  s    
zTestVsplit.test_1D_arrayc                 C   s^   t  ddddgddddgg¡}t|dƒ}t  ddddgg¡t  ddddgg¡g}t||ƒ d S rî   )r   r@   r   rÊ   rË   r   r   r   rý   J  s    
ÿ
(zTestVsplit.test_2D_arrayNr  r   r   r   r   r  7  s
   r  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
TestDsplitc                 C   s   t ttddƒ d S ræ   )r   r?   r   rè   r   r   r   ré   T  s    zTestDsplit.test_non_iterablec                 C   s   t  d¡}ttt|dƒ d S rø   ©r   r@   r   r?   r   rd   r   r   r   rû   W  s    
zTestDsplit.test_0D_arrayc                 C   s$   t  ddddg¡}ttt|dƒ d S rî   r  rd   r   r   r   rü   [  s    zTestDsplit.test_1D_arrayc                 C   sN   t  ddddgddddgg¡}zt|dƒ tdƒ W n tk
rH   Y nX d S r  )r   r@   r   r   r?   rd   r   r   r   rý   _  s    
ÿ
zTestDsplit.test_2D_arrayc                 C   sš   t  ddddgddddggddddgddddggg¡}t|dƒ}t  ddgddggddgddggg¡t  ddgddggddgddggg¡g}t||ƒ d S rî   )r   r@   r   rÊ   rË   r   r   r   Útest_3D_arrayh  s    
ÿ

ÿþ
$$ÿzTestDsplit.test_3D_arrayN)rR   rS   rT   ré   rû   rü   rý   r  r   r   r   r   r  R  s
   	r  c                   @   s   e Zd Zdd„ ZdS )ÚTestSqueezec                 C   sÀ   ddl m} |dddddƒ}|dddddƒ}|ddddƒ}tt |¡t |d¡ƒ tt |¡t |d¡ƒ tt |¡t |d¡ƒ d	ggg}t |¡}t|d	ƒ t|jdƒ tt|ƒtj	ƒ d S )
Nr   r%   rW   r9   r<   )rW   r9   r9   )rW   r9   rW   r`   g      ø?)
r+   r&   r   r   rˆ   r^   r   r5   r›   rx   )r6   r&   r   r¸   Úcr   r   r   r   Ú
test_basict  s    


zTestSqueeze.test_basicN©rR   rS   rT   r  r   r   r   r   r	  s  s   r	  c                	   @   sd   e Zd Zdd„ Zdd„ Zej dej	ej
g¡dd„ ƒZdd	„ Zej d
ddddddg¡dd„ ƒZdS )ÚTestKronc                 C   sÄ  t  d¡}t  ddgddgg¡}t  ddgddgg¡}tt  ||¡|ƒ t  ddgddgg¡}t  d¡}tt  ||¡|ƒ t  dg¡}t  ddgddgg¡}t  ddgddgg¡}tt  ||¡|ƒ t  ddgddgg¡}t  dg¡}tt  ||¡|ƒ t  dggdggg¡}t  ddgddgg¡}t  ddgddggddgddggg¡}tt  ||¡|ƒ t  ddgddgg¡}t  dggdggg¡}t  ddgddggddgddggg¡}tt  ||¡|ƒ d S )	Nr<   r*   r'   r(   rw   rÉ   rÝ   rÈ   )r   r@   r   r   )r6   r   r¸   Úkr   r   r   r  ‡  s,    

&&zTestKron.test_basicc                 C   sˆ   G dd„ dt jƒ}t  ddg¡}||j|j|jƒ}ttt||ƒƒt jƒ ttt||ƒƒ|ƒ ttt||ƒƒ|ƒ ttt||ƒƒ|ƒ d S )Nc                   @   s   e Zd ZdZdS )z*TestKron.test_return_type.<locals>.myarrayg      ð?N)rR   rS   rT   Z__array_priority__r   r   r   r   Úmyarray¥  s   r  r*   )	r   rx   r=   rI   r;   r   r   r›   r   )r6   r  r   rž   r   r   r   Útest_return_type¤  s    zTestKron.test_return_typeÚarray_classc                 C   sL   |t  ddg¡ƒ}|t  ddg¡ƒ}|t  ddg¡ƒ}tt  ||¡|ƒ d S )Nr'   rÉ   )r   r=   r   r   )r6   r  r   r¸   r  r   r   r   Útest_kron_smoke¯  s    zTestKron.test_kron_smokec                 C   sn   t jjddgddggddgddggd�}t jjt  ddddg¡t jt  d¡td� d�}t|t  ||¡ƒ d S )	Nr<   r*   r'   r(   r   rÂ   é   r:   )r   rž   r@   ZdiagÚidentityrB   r   r   )r6   rŠ   r  r   r   r   Útest_kron_ma¹  s
    (ÿzTestKron.test_kron_mazshape_a,shape_b)rÀ   rÀ   )rê   )r(   r)   rw   )©r*   r*   )r*   r*   r*   ))r<   r   rÀ   )©r*   r   r*   r  ))r*   r   r   r*   r  c           	      C   s‚   t  |¡}t  |¡}dtdt|ƒt|ƒ ƒ | }dtdt|ƒt|ƒ ƒ | }t  ||¡}t  ||¡}t  |j|¡s~tdƒ‚d S )N)r<   r   zUnexpected shape from kron)	r   r=   r0   rc   Úmultiplyr   Zarray_equalrI   r¼   )	r6   Zshape_aZshape_br   r¸   Znormalised_shape_aZnormalised_shape_bZexpected_shaper  r   r   r   Útest_kron_shapeÀ  s    

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