a
    ³ÐOc‹d  ã                   @   sz  d dl Zd dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZ ejdkZdd„ ZG dd„ dƒZG d	d
„ d
ƒZG dd„ dƒZG dd„ dƒZ G dd„ dƒZ!G dd„ dƒZ"G dd„ dƒZ#G dd„ dƒZ$G dd„ dƒZ%G dd„ dƒZ&G dd„ dƒZ'G dd„ dƒZ(G dd „ d ƒZ)G d!d"„ d"ƒZ*G d#d$„ d$ƒZ+G d%d&„ d&ƒZ,d'd(„ Z-dS ))é    N)Úapply_along_axisÚapply_over_axesÚarray_splitÚsplitÚhsplitÚdsplitÚvsplitÚdstackÚcolumn_stackÚkronÚtileÚexpand_dimsÚtake_along_axisÚput_along_axis)Úassert_Úassert_equalÚassert_array_equalÚassert_raisesÚassert_warnsì        c                    s   t  ˆ ¡‡ fdd„ƒ}|S )z: hack in keepdims behavior into a function taking an axis c                    s.   ˆ | fd|i|¤Ž}|d u r d}t j||d�S )NÚaxisr   ©r   )Únpr   )Úar   ÚkwargsÚres©Úfunc© úV/var/www/html/gsl.tools/lib/python3.9/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   sz   t  g d¢g d¢g¡}tt|jƒƒd g D ]J}| ¡ }tt jƒ||d�}t||d|d� tt j	ƒ||d�}t
||ƒ q*d S )N)r9   é   é   )é<   é(   é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|ƒg d¢g d¢g d¢gƒ d S )Né   ©r'   r'   r'   r   )rh   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   sJ   G dd„ dt jƒ}dd„ }t  d¡ |¡}tt|d|ƒt  g d¢¡ƒ 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<   r<   )r   rx   Úzerosry   r   r   r@   )r6   r€   r‚   r   r   r   r   Útest_subclass�   s    ÿz TestApplyAlongAxis.test_subclassc                 C   sJ   t  d¡ |¡}tt jd|ƒ}tt||ƒƒ t|t  g d¢¡ |¡ƒ d S )Nrƒ   r   ©rw   rw   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  g d¢¡ |¡ƒ t|d|ƒ}tt||ƒƒ t|t  g d¢¡ |¡ƒ d S )Nc                 S   s    t | jdƒ t tj| dd�¡S )z/ Sum x, returning a 0d array of the same class r<   T)Zkeepdims)r   r5   r   Úsqueezerq   ©Úxr   r   r   Ú	sum_to_0d¡   s    z3TestApplyAlongAxis.test_0d_array.<locals>.sum_to_0drƒ   r   r†   r<   )r'   r'   r'   r'   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  h d£h d£h d£g¡}t||ƒ t  |j¡D ]}tt|| ƒt|| ƒƒ qvd 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©   >   r*   r)   r¨   rª   >   rj   r«   r'   rw   )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"J ‚t j|dd�jdks:J ‚t j|dd�jdksRJ ‚t j|d	d�jd
ksjJ ‚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   rd   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  sr    





 


ÿ

ÿ

ÿ


þ

þ

þ


ý

ýz!TestArraySplit.test_integer_splitc                 C   sÚ   t  t  d¡t  d¡g¡}t|ddd�}t  t  d¡g¡t  t  d¡g¡t  d¡g}t||ƒ t|jj|d jju ƒ t|ddgdd�}t  d¡t  t  d¡g¡t  t  d¡g¡g}t||ƒ t|jj|d jju ƒ d S )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u ƒ 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   sZ   t  d¡}g d¢}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   r]   r   rË   ©r6   r   Úindicesr   rÍ   r   r   r   Útest_index_split_simple­  s    

ÿz&TestArraySplit.test_index_split_simplec                 C   sX   t  d¡}g d¢}t||dd�}t  g ¡t  dd¡t  dd¡t  dd¡g}t||ƒ d S )Nr9   )r   r)   rÈ   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   sh   t  d¡}g d¢}t||dd�}t  g ¡t  dd¡t  dd¡t  dd¡t  g ¡t  g ¡g}t||ƒ d S )Nr9   )r   r)   rÈ   r9   é   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   sB   t tƒ�& tdd„ tdƒD ƒƒ W d   ƒ n1 s40    Y  d S )Nc                 s   s   | ]}t  d ¡V  qdS ©r'   N©r   r]   ©r“   Ú_r   r   r   Ú	<genexpr>ð  r¯   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   sB   t tƒ�& tdd„ tdƒD ƒƒ W d   ƒ n1 s40    Y  d S )Nc                 s   s   | ]}t  d ¡V  qdS rð   rñ   rò   r   r   r   rô     r¯   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   s8   t  d¡}zt|dƒ tdƒ W n ty2   Y n0 d S )Nr<   r*   r   )r   r@   r   r   r?   rd   r   r   r   rû   !  s    

zTestHsplit.test_0D_arrayc                 C   sB   t  g d¢¡}t|dƒ}t  ddg¡t  ddg¡g}t||ƒ d S ©N©r<   r*   r'   r(   r*   r<   r'   r(   ©r   r@   r   rË   rÌ   r   r   r   rü   )  s    
zTestHsplit.test_1D_arrayc                 C   sZ   t  g d¢g d¢g¡}t|dƒ}t  ddgddgg¡t  ddgddgg¡g}t||ƒ d S r  r  rÌ   r   r   r   rý   /  s    
ÿ
,zTestHsplit.test_2D_arrayN©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   s<   t  g d¢¡}zt|dƒ tdƒ W n ty6   Y n0 d S ©Nr  r*   r   )r   r@   r   r   r?   rd   r   r   r   rü   B  s    
zTestVsplit.test_1D_arrayc                 C   sN   t  g d¢g d¢g¡}t|dƒ}t  g d¢g¡t  g d¢g¡g}t||ƒ d S ©Nr  r*   )r   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  g d¢¡}ttt|dƒ d S r  r
  rd   r   r   r   rü   [  s    zTestDsplit.test_1D_arrayc                 C   sD   t  g d¢g d¢g¡}zt|dƒ tdƒ W n ty>   Y n0 d S r  )r   r@   r   r   r?   rd   r   r   r   rý   _  s    
ÿ
zTestDsplit.test_2D_arrayc                 C   sŠ   t  g d¢g d¢gg d¢g d¢gg¡}t|dƒ}t  ddgddggddgddggg¡t  ddgddggddgddggg¡g}t||ƒ d S r  )r   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                   @   sT   e Zd Zdd„ Zej dejej	g¡dd„ ƒZ
dd„ Zej dg d	¢¡d
d„ ƒZdS )ÚTestKronc                 C   sˆ   G dd„ dt jƒ}t  ddg¡}||j|j|jƒ}ttt||ƒƒt jƒ ttt||ƒƒ|ƒ ttt||ƒƒ|ƒ ttt||ƒƒ|ƒ d S )Nc                   @   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¹   Úkr   r   r   Útest_kron_smoke’  s    zTestKron.test_kron_smokec                 C   sj   t jjddgddggddgddggd�}t jjt  g d¢¡t jt  d¡td� d�}t|t  ||¡ƒ d S )	Nr<   r*   r'   r(   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~J dƒ‚d S )N)r<   r   zUnexpected shape from kron)r   r=   r0   rc   Úmultiplyr   Zarray_equalrI   )	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á   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  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»   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   ©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   sn   ddl m} g d¢}g d¢}|D ]H}|dd|d�}|D ]0}t ||j¡}t||ƒ}t||ƒ}	t||	ƒ q6q 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  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 '( '!2(