o
    Ô­jÁ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 u rd}t j||d�S )NÚaxisr   ©r   )Únpr   )Úar   ÚkwargsÚres©Úfunc© ú\/var/www/html/CropPilot/venv/lib/python3.10/site-packages/numpy/lib/tests/test_shape_base.pyÚwrapped   s   z_add_keepdims.<locals>.wrapped)Ú	functoolsÚwraps)r   r    r   r   r   Ú_add_keepdims   s   r#   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestTakeAlongAxisc           
   	   C   sÒ   ddl m} |dddƒ}tjtjtƒ fttjƒttjƒtƒ fttj	ƒttj
ƒtƒ ftjtjtdd�fg}|D ]0\}}}tt|jƒƒdg D ] }||fd	|i|¤Ž}||fd	|i|¤Ž}	t|t||	|d
�ƒ qEq6dS )z- Test it translates from arg<func> to <func> r   ©Úrandé   é   é   é   )ÚkthNr   r   )Únumpy.randomr'   r   ÚsortÚargsortÚdictr#   ÚminÚargminÚmaxÚargmaxÚ	partitionÚargpartitionÚlistÚrangeÚndimr   r   )
Úselfr'   r   Úfuncsr   Úargfuncr   r   Úa_funcÚai_funcr   r   r   Útest_argequivalent   s   üýÿz$TestTakeAlongAxis.test_argequivalentc                 C   sˆ   t  d¡}t jdt jd�}t||dd� ttt|t  d¡dd� ttt|| t	¡dd� ttt|| t
¡dd� tt jt||dd� dS )z4 Test it errors when indices has too few dimensions )é
   r@   )r@   r+   ©Údtypeé   r   r@   N)r   ÚonesÚintpr   r   Ú
ValueErrorÚarrayÚ
IndexErrorÚastypeÚboolÚfloatÚ	AxisError©r:   r   Úair   r   r   Útest_invalid1   s   
zTestTakeAlongAxis.test_invalidc                 C   s:   t  d¡}t jdt jd�}t||dd�}t|j|jƒ dS )zC Test everything is ok with empty results, even with inserted dims )r(   r)   r*   )r(   r   r*   rA   rC   r   N©r   rD   rE   r   r   Úshape©r:   r   rN   Úactualr   r   r   Ú
test_emptyB   s   
zTestTakeAlongAxis.test_emptyc                 C   s8   t  d¡}t jdt jd�}t||dd�}t|jdƒ dS )úD Test that non-indexing dimensions are broadcast in both directions ©r(   r)   rC   ©rC   r+   r*   rA   rC   r   ©r(   r+   r*   NrP   rR   r   r   r   Útest_broadcastJ   s   
z TestTakeAlongAxis.test_broadcastN)Ú__name__Ú
__module__Ú__qualname__r?   rO   rT   rY   r   r   r   r   r%      s
    r%   c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTestPutAlongAxisc                 C   sz   t  g d¢g d¢g¡}tt|jƒƒd g D ]%}| ¡ }tt jƒ||d�}t||d|d� tt j	ƒ||d�}t
||ƒ qd S )N)r@   é   é   )é<   é(   é2   r   i�ÿÿÿ)r   rG   r7   r8   r9   Úcopyr#   r4   r   r2   r   )r:   Úa_baser   r   Úi_maxÚi_minr   r   r   Útest_replace_maxS   s   õz!TestPutAlongAxis.test_replace_maxc                 C   sL   t  d¡}t jdt jd� d¡d }t||ddd� tt||dd�dƒ d	S )
rU   rV   r@   rA   rW   r)   r`   rC   r   N)r   rD   ÚarangerE   Úreshaper   r   r   rM   r   r   r   rY   c   s   
zTestPutAlongAxis.test_broadcastN)rZ   r[   r\   rh   rY   r   r   r   r   r^   R   s    r^   c                   @   s†   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	fdd„Z
ej	fdd„Zej	fdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestApplyAlongAxisc                 C   ó6   t  dd¡}tttd|ƒt|ƒt  |jd ¡ ƒ d S )N©r`   r@   Údr   rC   ©r   rD   r   r   ÚlenrQ   ©r:   r   r   r   r   Útest_simplel   ó    ÿzTestApplyAlongAxis.test_simplec                 C   rl   )N)r@   ée   rn   r   rC   ro   rq   r   r   r   Útest_simple101q   rs   z!TestApplyAlongAxis.test_simple101c                 C   s:   t  d¡ d¡}ttt jd|ƒg d¢g d¢g d¢gƒ d S )Né   ©r(   r(   r(   r   )rv   r_   é!   )é$   é'   é*   )é-   é0   é3   )r   ri   rj   r   r   Úsumrq   r   r   r   Útest_3dv   s   ÿzTestApplyAlongAxis.test_3dc                 C   sž   dd„ }G dd„ dt jƒ}t  ddgddgg¡ |¡}t  ddgd	d
gg¡ |¡}t|d|ƒ}tt||ƒƒ t||ƒ t|d|ƒ}tt||ƒƒ t||ƒ d S )Nc                 S   s   | d S )Nr+   r   )Úrowr   r   r   Údouble|   s   z9TestApplyAlongAxis.test_preserve_subclass.<locals>.doublec                   @   ó   e Zd ZdS )z<TestApplyAlongAxis.test_preserve_subclass.<locals>.MyNDArrayN©rZ   r[   r\   r   r   r   r   Ú	MyNDArray   ó    r…   r   rC   r+   r(   r)   é   )r   ÚndarrayrG   Úviewr   r   Ú
isinstancer   )r:   r‚   r…   ÚmÚexpectedÚresultr   r   r   Útest_preserve_subclass{   s   
z)TestApplyAlongAxis.test_preserve_subclassc                 C   sJ   G dd„ dt jƒ}dd„ }t  d¡ |¡}tt|d|ƒt  g d¢¡ƒ d S )Nc                   @   ó   e Zd ZdZdS )z9TestApplyAlongAxis.test_subclass.<locals>.MinimalSubclassrC   N)rZ   r[   r\   Údatar   r   r   r   ÚMinimalSubclassŽ   ó    r‘   c                 S   s   | j S ©N)r�   )rG   r   r   r   Úminimal_function‘   s   z:TestApplyAlongAxis.test_subclass.<locals>.minimal_function©r‡   r(   r   )rC   rC   rC   )r   rˆ   Úzerosr‰   r   r   rG   )r:   r‘   r”   r   r   r   r   Útest_subclass�   s   ÿz TestApplyAlongAxis.test_subclassc                 C   sJ   t  d¡ |¡}tt jd|ƒ}tt||ƒƒ t|t  g d¢¡ |¡ƒ d S )Nr•   r   ©r‡   r‡   r‡   )	r   rD   r‰   r   r   r   rŠ   r   rG   )r:   Úclsr   r   r   r   r   Útest_scalar_arrayš   s   z$TestApplyAlongAxis.test_scalar_arrayc                 C   s„   dd„ }t  d¡ |¡}t|d|ƒ}tt||ƒƒ t|t  g d¢¡ |¡ƒ t|d|ƒ}tt||ƒƒ t|t  g d¢¡ |¡ƒ d S )Nc                 S   s    t | jdƒ t tj| dd�¡S )z/ Sum x, returning a 0d array of the same class rC   T)Úkeepdims)r   r9   r   Úsqueezer   ©Úxr   r   r   Ú	sum_to_0d¡   s   z3TestApplyAlongAxis.test_0d_array.<locals>.sum_to_0dr•   r   r˜   rC   )r(   r(   r(   r(   r(   r(   )r   rD   r‰   r   r   rŠ   r   rG   )r:   r™   rŸ   r   r   r   r   r   Útest_0d_array    s   z TestApplyAlongAxis.test_0d_arrayc                    s2  ‡fdd„‰t  d¡ d¡‰ tˆdˆ ƒ}t j‡ ‡fdd„tˆ jd ƒD ƒd	d
� ˆ¡}tt	|ƒt	|ƒƒ t||ƒ tˆdˆ ƒ}t j‡ ‡fdd„tˆ jd ƒD ƒdd
� ˆ¡}tt	|ƒt	|ƒƒ t||ƒ t  d¡ d¡‰tˆdˆƒ}t j‡‡fdd„tˆjd ƒD ƒd	d
� ˆ¡}tt	|ƒt	|ƒƒ t||ƒ d S )Nc                    s0   t | jdƒ | ddd… | dd…df   ˆ ¡S )ú/produces an asymmetric non-square matrix from xrC   Néÿÿÿÿ)r   r9   r‰   r�   )r™   r   r   Úf1to2¯   s   $z5TestApplyAlongAxis.test_axis_insertion.<locals>.f1to2é   r•   r   c                    s    g | ]}ˆˆ d d …|f ƒ‘qS r“   r   ©Ú.0Úi©Úa2dr£   r   r   Ú
<listcomp>¸   ó    ÿz:TestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>rC   r¢   r   c                    s    g | ]}ˆˆ |d d …f ƒ‘qS r“   r   r¥   r¨   r   r   rª   À   r«   éZ   )r‡   r*   r(   c                    s6   g | ]‰ t j‡‡‡ fd d„tˆjd ƒD ƒdd�‘qS )c                    s"   g | ]}ˆˆ |d d …ˆf ƒ‘qS r“   r   r¥   )Úa3dr£   Újr   r   rª   Ë   s    ÿzETestApplyAlongAxis.test_axis_insertion.<locals>.<listcomp>.<listcomp>r   r   )r   Ústackr8   rQ   )r¦   )r­   r£   )r®   r   rª   Ê   s    ýÿþÿr+   )
r   ri   rj   r   r¯   r8   rQ   r‰   r   Útype)r:   r™   rS   rŒ   r   )r©   r­   r™   r£   r   Útest_axis_insertion®   sB   ÿþþ
ÿþþ
üûûz&TestApplyAlongAxis.test_axis_insertionc                 C   s4   G dd„ dt jƒ}|  |¡ |  |¡ |  |¡ d S )Nc                   @   rƒ   )zFTestApplyAlongAxis.test_subclass_preservation.<locals>.MinimalSubclassNr„   r   r   r   r   r‘   Ô   r†   r‘   )r   rˆ   rš   r    r±   )r:   r‘   r   r   r   Útest_subclass_preservationÓ   s   

z-TestApplyAlongAxis.test_subclass_preservationc                 C   sÖ   dd„ }t  d¡ d¡}t|d|ƒ}tt|t jjƒƒ t|j	dƒ t
|d d …d d …df j||d d …df ƒjƒ t
|d d …d d …df j||d d …df ƒjƒ t
|d d …d d …df j||d d …df ƒjƒ d S )	Nc                 S   s@   t | jdƒ | ddd… | dd…df  }tj |d dk|¡S )r¡   rC   Nr¢   r*   r   )r   r9   r   ÚmaÚmasked_where)rž   r   r   r   r   r£   Û   s   z8TestApplyAlongAxis.test_axis_insertion_ma.<locals>.f1to2r¤   r•   r   r(   rC   r+   )r   ri   rj   r   r   rŠ   r³   Úmasked_arrayr   r9   r   Úmask)r:   r£   r   r   r   r   r   Útest_axis_insertion_maÚ   s   004z)TestApplyAlongAxis.test_axis_insertion_mac              	   C   sH   dd„ }t  |dt  ddgddgg¡¡}t|t  ddgddgg¡ƒ d S )Nc                 S   s   | d | d fS )NrC   r   r   r�   r   r   r   Ú	sample_1dé   ó   z7TestApplyAlongAxis.test_tuple_func1d.<locals>.sample_1drC   r+   r(   r)   )r   r   rG   r   )r:   r¸   r   r   r   r   Útest_tuple_func1dè   s     z$TestApplyAlongAxis.test_tuple_func1dc                 C   s|   dd„ }t  d¡}ttt j|d|ƒ ttt j|d|ƒ dd„ }t  d¡}t  |d|¡}t|t  d	¡ƒ ttt j|d|ƒ d S )
Nc                 S   s   t dƒ d S )NF)r   r�   r   r   r   Ú
never_callð   s   z1TestApplyAlongAxis.test_empty.<locals>.never_call)r   r   r   rC   c                 S   s   t t| ƒdkƒ dS )Nr   rC   )r   rp   r�   r   r   r   Ú
empty_to_1ø   s   z1TestApplyAlongAxis.test_empty.<locals>.empty_to_1)r@   r   r@   )r   Úemptyr   rF   r   r   rD   )r:   r»   r   r¼   rS   r   r   r   rT   î   s   

zTestApplyAlongAxis.test_emptyc                 C   sš   t  ddhddhddhgddhd	d
hddhgg¡}t  dd„ d|¡}t  h d£h d£h d£g¡}t||ƒ t  |j¡D ]}tt|| ƒt|| ƒƒ q;d S )NrC   é   r+   é   r(   rx   r)   é,   r*   é7   r‡   éB   c                 S   s
   t j| Ž S r“   )ÚsetÚunion)r   r   r   r   Ú<lambda>  s   
 z>TestApplyAlongAxis.test_with_iterable_object.<locals>.<lambda>r   >   rC   r)   r¾   rÀ   >   r+   r*   r¿   rÁ   >   r(   r‡   rx   rÂ   )r   rG   r   r   ÚndindexrQ   r°   )r:   rn   rS   rŒ   r§   r   r   r   Útest_with_iterable_object  s   þ
ÿz,TestApplyAlongAxis.test_with_iterable_objectN)rZ   r[   r\   rr   ru   r€   rŽ   r—   r   rˆ   rš   r    r±   r²   r·   rº   rT   rÇ   r   r   r   r   rk   k   s    %rk   c                   @   ó   e Zd Zdd„ ZdS )ÚTestApplyOverAxesc                 C   sH   t  d¡ ddd¡}tt j|ddgƒ}t|t  dgdgdggg¡ƒ d S )	Né   r+   r(   r)   r   ra   é\   é|   )r   ri   rj   r   r   r   rG   )r:   r   Úaoa_ar   r   r   rr     s   "zTestApplyOverAxes.test_simpleN)rZ   r[   r\   rr   r   r   r   r   rÉ     ó    rÉ   c                   @   ó4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestExpandDimsc                 C   sR   d}t  |¡}tddƒD ]}t||ƒ}t|j| dkƒ tt  |¡j|kƒ qd S )N©r+   r(   r)   r*   éûÿÿÿr)   rC   )r   r½   r8   r   r   rQ   rœ   )r:   Úsr   r   Úbr   r   r   Útest_functionality  s   

ýz!TestExpandDims.test_functionalityc                 C   sn   t  d¡}t j|dd�jdksJ ‚t j|dd�jdksJ ‚t j|dd�jdks)J ‚t j|d	d�jd
ks5J ‚d S )Nrw   ©r   rC   r+   r   )rC   rC   rC   r(   r(   r(   )r   r¢   éþÿÿÿ)rC   r(   r(   r(   rC   rC   )r   r(   r*   )rC   r(   r(   rC   r(   rC   )r   éýÿÿÿrÒ   )rC   rC   r(   rC   r(   r(   )r   r½   r   rQ   rq   r   r   r   Útest_axis_tuple!  s
   
zTestExpandDims.test_axis_tuplec                 C   s\   d}t  |¡}tt jt|dƒ tt jt|dƒ t  d¡}tt jt|dƒ tt jt|dƒ d S )NrÑ   éúÿÿÿr*   rw   )r   rÚ   )r   r*   )r   r½   r   rL   r   )r:   rÓ   r   r   r   r   Útest_axis_out_of_range(  s   

z%TestExpandDims.test_axis_out_of_rangec                 C   s   t  d¡}ttt|dd� d S )Nrw   ©rC   rC   r   )r   r½   r   rF   r   rq   r   r   r   Útest_repeated_axis2  s   
z!TestExpandDims.test_repeated_axisc                 C   sf   t  d¡ d¡}t jj||d dkd�}t j|dd�}tt|t jjƒƒ t	|j
dƒ t	|jj
dƒ d S )	Nr@   )r+   r*   r(   r   ©r¶   rC   r   )r+   rC   r*   )r   ri   rj   r³   rG   r   r   rŠ   ÚMaskedArrayr   rQ   r¶   )r:   r   Úexpandedr   r   r   Útest_subclasses6  s   zTestExpandDims.test_subclassesN)rZ   r[   r\   rÕ   rÙ   rÛ   rÝ   rá   r   r   r   r   rÐ     s    
rÐ   c                   @   sf   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	j
e dd�dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestArraySplitc                 C   ó   t  d¡}ttt|dƒ d S )Nr@   r   )r   ri   r   rF   r   rq   r   r   r   Útest_integer_0_splitA  ó   
z#TestArraySplit.test_integer_0_splitc                 C   s’  t  d¡}t|dƒ}t  d¡g}t||ƒ t|dƒ}t  d¡t  dd¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd	¡t  d	d¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd	¡t  d	d¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g}t||ƒ t|d	ƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g}t||ƒ t|d
ƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g	}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡g
}t||ƒ t|dƒ}t  d¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd¡t  dd	¡t  d	d
¡t  d
d¡t  g ¡g}t||ƒ d S )Nr@   rC   r+   r*   r(   r)   é   r‡   é   é	   r¾   )r   ri   r   Úcompare_resultsrG   ©r:   r   r   Údesiredr   r   r   Útest_integer_splitE  sr   





 


ÿ

ÿ

ÿ


þ

þ

þ


ý

ýz!TestArraySplit.test_integer_splitc                 C   sÚ   t  t  d¡t  d¡g¡}t|ddd�}t  t  d¡g¡t  t  d¡g¡t  d¡g}t||ƒ t|jj|d jju ƒ t|ddgdd�}t  d¡t  t  d¡g¡t  t  d¡g¡g}t||ƒ t|jj|d jju ƒ d S )Nr@   r(   r   r   ©r   r@   r¢   rC   ©	r   rG   ri   r   r–   ré   r   rB   r°   ©r:   r   r   Útgtr   r   r   Útest_integer_split_2D_rows‚  s    ÿ
ÿ
z)TestArraySplit.test_integer_split_2D_rowsc              	   C   sŠ   t  t  d¡t  d¡g¡}t|ddd�}t  t  d¡t  d¡g¡t  t  dd¡t  dd¡g¡t  t  dd¡t  dd¡g¡g}t||ƒ d S )Nr@   r(   r¢   r   r)   ræ   )r   rG   ri   r   ré   rê   r   r   r   Útest_integer_split_2D_cols‘  s   þz)TestArraySplit.test_integer_split_2D_colsc                 C   sv   t  t  d¡t  d¡g¡}t|dƒ}t  t  d¡g¡t  t  d¡g¡t  d¡g}t||ƒ t|jj|d jju ƒ dS )z2 This will fail if we change default axis
        r@   r(   rí   r¢   Nrî   rï   r   r   r   Útest_integer_split_2D_default™  s   
 ÿ
z,TestArraySplit.test_integer_split_2D_defaultzNeeds 64bit platform)Úreasonc                 C   s\   t  dgd¡}t|dƒ}t  dgd¡}|gd }tt|ƒƒD ]}t|| j|| jƒ qd S )Nr   )r   r+   r)   )i   @r+   )r   Úbroadcast_tor   r8   rp   r   rQ   )r:   r   r   Úchunkrð   r§   r   r   r   Ú,test_integer_split_2D_rows_greater_max_int32¤  s   

ÿz;TestArraySplit.test_integer_split_2D_rows_greater_max_int32c                 C   sZ   t  d¡}g d¢}t||dd�}t  dd¡t  dd¡t  dd¡t  dd¡g}t||ƒ d S )	Nr@   )rC   r*   ræ   r¢   r   r   rC   r*   ræ   )r   ri   r   ré   ©r:   r   Úindicesr   rë   r   r   r   Útest_index_split_simple­  s   

ÿz&TestArraySplit.test_index_split_simplec                 C   sX   t  d¡}g d¢}t||dd�}t  g ¡t  dd¡t  dd¡t  dd¡g}t||ƒ d S )Nr@   )r   r*   ræ   r¢   r   r   r*   ræ   ©r   ri   r   rG   ré   rø   r   r   r   Útest_index_split_low_boundµ  s   

ÿz)TestArraySplit.test_index_split_low_boundc                 C   sh   t  d¡}g d¢}t||dd�}t  g ¡t  dd¡t  dd¡t  dd¡t  g ¡t  g ¡g}t||ƒ d S )Nr@   )r   r*   ræ   r@   é   r¢   r   r   r*   ræ   rû   rø   r   r   r   Útest_index_split_high_bound½  s   
ÿz*TestArraySplit.test_index_split_high_boundN)rZ   r[   r\   rä   rì   rñ   rò   ró   ÚpytestÚmarkÚskipifÚIS_64BITr÷   rú   rü   rþ   r   r   r   r   râ   @  s    =
râ   c                   @   r]   )Ú	TestSplitc                 C   s8   t  d¡}t|dƒ}t  d¡t  dd¡g}t||ƒ d S )Nr@   r+   r*   )r   ri   r   ré   rê   r   r   r   Útest_equal_splitË  s   

zTestSplit.test_equal_splitc                 C   rã   )Nr@   r(   )r   ri   r   rF   r   rq   r   r   r   Útest_unequal_splitÑ  rå   zTestSplit.test_unequal_splitN)rZ   r[   r\   r  r  r   r   r   r   r  Æ  s    r  c                   @   r$   )
ÚTestColumnStackc                 C   ó   t ttdƒ d S ©NrC   )r   Ú	TypeErrorr
   ©r:   r   r   r   Útest_non_iterable×  r¹   z!TestColumnStack.test_non_iterablec                 C   sL   t  d¡}t  d¡}t  ddgddgddgg¡}t  ||f¡}t||ƒ d S )N©rC   r+   r(   )r+   r(   r)   rC   r+   r(   r)   ©r   rG   r
   r   ©r:   r   rÔ   rŒ   rS   r   r   r   Útest_1D_arraysÚ  s   


þzTestColumnStack.test_1D_arraysc                 C   sd   t  dgdgdgg¡}t  dgdgdgg¡}t  ddgddgddgg¡}t  ||f¡}t||ƒ d S )NrC   r+   r(   r)   r  r  r   r   r   Útest_2D_arraysä  s   
þzTestColumnStack.test_2D_arraysc                 C   óJ   t jtdd�� tdd„ tdƒD ƒƒ W d   ƒ d S 1 sw   Y  d S )Núarrays to stack must be©Úmatchc                 s   ó   � | ]}t  d ¡V  qdS ©r(   N©r   ri   ©r¦   Ú_r   r   r   Ú	<genexpr>ð  ó   € z1TestColumnStack.test_generator.<locals>.<genexpr>r+   )rÿ   Úraisesr	  r
   r8   r
  r   r   r   Útest_generatorî  ó   "ÿzTestColumnStack.test_generatorN)rZ   r[   r\   r  r  r  r  r   r   r   r   r  Ö  s
    

r  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú
TestDstackc                 C   r  r  )r   r	  r	   r
  r   r   r   r  ô  r¹   zTestDstack.test_non_iterablec                 C   s@   t  d¡}t  d¡}t||gƒ}t  ddggg¡}t||ƒ d S ©NrC   r+   ©r   rG   r	   r   ©r:   r   rÔ   r   rë   r   r   r   Útest_0D_array÷  s
   

zTestDstack.test_0D_arrayc                 C   sD   t  dg¡}t  dg¡}t||gƒ}t  ddggg¡}t||ƒ d S r   r!  r"  r   r   r   Útest_1D_arrayþ  s
   zTestDstack.test_1D_arrayc                 C   sX   t  dgdgg¡}t  dgdgg¡}t||gƒ}t  ddggddggg¡}t||ƒ d S r   r!  r"  r   r   r   Útest_2D_array  s
   zTestDstack.test_2D_arrayc                 C   sN   t  ddg¡}t  ddg¡}t||gƒ}t  ddgddggg¡}t||ƒ d S r   r!  r"  r   r   r   Útest_2D_array2  s
   zTestDstack.test_2D_array2c                 C   r  )Nr  r  c                 s   r  r  r  r  r   r   r   r    r  z,TestDstack.test_generator.<locals>.<genexpr>r+   )rÿ   r  r	  r	   r8   r
  r   r   r   r    r  zTestDstack.test_generatorN)	rZ   r[   r\   r  r#  r$  r%  r&  r  r   r   r   r   r  ó  s    r  c                   @   ó0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú
TestHsplitú&Only testing for integer splits.

    c                 C   ó   t ttddƒ d S r  )r   rF   r   r
  r   r   r   r    ó   zTestHsplit.test_non_iterablec                 C   s8   t  d¡}zt|dƒ tdƒ W d S  ty   Y d S w )NrC   r+   r   )r   rG   r   r   rF   rq   r   r   r   r#  !  s   

ÿzTestHsplit.test_0D_arrayc                 C   sB   t  g d¢¡}t|dƒ}t  ddg¡t  ddg¡g}t||ƒ d S ©N©rC   r+   r(   r)   r+   rC   r(   r)   ©r   rG   r   ré   rê   r   r   r   r$  )  s   
zTestHsplit.test_1D_arrayc                 C   sZ   t  g d¢g d¢g¡}t|dƒ}t  ddgddgg¡t  ddgddgg¡g}t||ƒ d S r,  r.  rê   r   r   r   r%  /  s   
ÿ
,zTestHsplit.test_2D_arrayN©rZ   r[   r\   Ú__doc__r  r#  r$  r%  r   r   r   r   r(    s    r(  c                   @   r'  )Ú
TestVsplitr)  c                 C   r*  r  )r   rF   r   r
  r   r   r   r  ;  r+  zTestVsplit.test_non_iterablec                 C   rã   r   )r   rG   r   rF   r   rq   r   r   r   r#  >  rå   zTestVsplit.test_0D_arrayc                 C   s<   t  g d¢¡}zt|dƒ tdƒ W d S  ty   Y d S w ©Nr-  r+   r   )r   rG   r   r   rF   rq   r   r   r   r$  B  s   
ÿzTestVsplit.test_1D_arrayc                 C   sN   t  g d¢g d¢g¡}t|dƒ}t  g d¢g¡t  g d¢g¡g}t||ƒ d S ©Nr-  r+   )r   rG   r   ré   rê   r   r   r   r%  J  s   
ÿ
 zTestVsplit.test_2D_arrayNr/  r   r   r   r   r1  7  s    r1  c                   @   rÏ   )Ú
TestDsplitc                 C   r*  r  )r   rF   r   r
  r   r   r   r  T  r+  zTestDsplit.test_non_iterablec                 C   rã   r   ©r   rG   r   rF   r   rq   r   r   r   r#  W  rå   zTestDsplit.test_0D_arrayc                 C   s    t  g d¢¡}ttt|dƒ d S r3  r5  rq   r   r   r   r$  [  s   zTestDsplit.test_1D_arrayc                 C   sD   t  g d¢g d¢g¡}zt|dƒ tdƒ W d S  ty!   Y d S w r2  )r   rG   r   r   rF   rq   r   r   r   r%  _  s   
ÿ
ÿzTestDsplit.test_2D_arrayc                 C   sŠ   t  g d¢g d¢gg d¢g d¢gg¡}t|dƒ}t  ddgddggddgddggg¡t  ddgddggddgddggg¡g}t||ƒ d S r,  )r   rG   r   ré   rê   r   r   r   Útest_3D_arrayh  s   
ÿÿþ
$$ÿzTestDsplit.test_3D_arrayN)rZ   r[   r\   r  r#  r$  r%  r6  r   r   r   r   r4  R  s    	r4  c                   @   rÈ   )ÚTestSqueezec                 C   sÀ   ddl m} |dddddƒ}|dddddƒ}|ddddƒ}tt |¡t |d¡ƒ tt |¡t |d¡ƒ tt |¡t |d¡ƒ d	ggg}t |¡}t|d	ƒ t|jdƒ tt|ƒtj	ƒ d S )
Nr   r&   r`   r@   rC   )r`   r@   r@   )r`   r@   r`   rm   g      ø?)
r-   r'   r   r   rœ   rj   r   r9   r°   rˆ   )r:   r'   r   rÔ   Úcr   r   r   r   Ú
test_basict  s   


zTestSqueeze.test_basicN©rZ   r[   r\   r9  r   r   r   r   r7  s  rÎ   r7  c                   @   s\   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
g d¢¡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 )	NrC   r+   r(   r)   r‡   rè   rý   rç   )r   rG   r   r   )r:   r   rÔ   Úkr   r   r   r9  ‡  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                   @   r�   )z*TestKron.test_return_type.<locals>.myarrayg      ð?N)rZ   r[   r\   Ú__array_priority__r   r   r   r   Úmyarray¥  r’   r>  r+   )	r   rˆ   rD   rQ   rB   r�   r   r°   r   )r:   r>  r   r³   r   r   r   Útest_return_type¤  s   zTestKron.test_return_typeÚarray_classc                 C   sL   |t  ddg¡ƒ}|t  ddg¡ƒ}|t  ddg¡ƒ}tt  ||¡|ƒ d S )Nr(   rè   )r   rD   r   r   )r:   r@  r   rÔ   r<  r   r   r   Útest_kron_smoke¯  s   zTestKron.test_kron_smokec                 C   sj   t jjddgddggddgddggd�}t jjt  g d¢¡t jt  d¡td� d�}t|t  ||¡ƒ d S )	NrC   r+   r(   r)   r   rÞ   )rC   r)   r)   é   rA   )r   r³   rG   ÚdiagÚidentityrJ   r   r   )r:   rž   r<  r   r   r   Útest_kron_ma¹  s
   (ÿzTestKron.test_kron_mazshape_a,shape_b))rÜ   rÜ   )r  )r)   r*   r‡   )©r+   r+   )r+   r+   r+   ))rC   r   rÜ   )©r+   r   r+   rF  ))r+   r   r   r+   rG  c           	      C   s‚   t  |¡}t  |¡}dtdt|ƒt|ƒ ƒ | }dtdt|ƒt|ƒ ƒ | }t  ||¡}t  ||¡}t  |j|¡s?J dƒ‚d S )N)rC   r   zUnexpected shape from kron)r   rD   r3   rp   Úmultiplyr   Úarray_equalrQ   )	r:   Úshape_aÚshape_br   rÔ   Únormalised_shape_aÚnormalised_shape_bÚexpected_shaper<  r   r   r   Útest_kron_shapeÀ  s   


ÿÿzTestKron.test_kron_shapeN)rZ   r[   r\   r9  r?  rÿ   r   Úparametrizer   ÚasarrayÚmatrA  rE  rO  r   r   r   r   r;  †  s    ÿ
ÿ	r;  c                   @   r$   )
ÚTestTilec                 C   sÔ   t  g d¢¡}ddgddgg}tt|dƒg d¢ƒ tt|dƒg d¢g d¢gƒ tt|dƒg d¢gƒ tt|dƒg d	¢g d
¢gƒ tt|dƒddgddgddgddggƒ tt|dƒg d	¢g d
¢g d	¢g d
¢gƒ d S )NrÖ   rC   r+   r(   r)   )r   rC   r+   r   rC   r+   rF  ©rC   r+   )rC   r+   rC   r+   )r(   r)   r(   r)   ©r+   rC   )r   rG   r   r   ©r:   r   rÔ   r   r   r   r9  Ö  s   (
ÿzTestTile.test_basicc                 C   s0   t  d¡}t|dƒ}|d7 }t|t  d¡ƒ d S )Nr*   rC   r+   )r   ri   r   r   rV  r   r   r   Ú(test_tile_one_repetition_on_array_gh4679á  s   

z1TestTile.test_tile_one_repetition_on_array_gh4679c                 C   sL   t  g gg¡}t  g g g¡}t|dƒj}t|dƒj}t|dƒ t|dƒ d S )Nr+   rX   )r+   r   )r(   r+   r   )r   rG   r   rQ   r   )r:   r   rÔ   r8  rn   r   r   r   rT   ç  s   
zTestTile.test_emptyc           
      C   sn   ddl m} g d¢}g d¢}|D ]$}|dd|d�}|D ]}t ||j¡}t||ƒ}t||ƒ}	t||	ƒ qqd S )Nr   )Úrandint))r+   rT  rU  rF  )r+   r(   r+   )r(   r+   ))r(   )r+   r(   )r(   r)   r(   )r(   r+   r(   )r)   r(   r+   r)   rF  r@   )Úsize)r-   rX  r   rD   rB   r   r   r   )
r:   rX  ÚrepsrQ   rÓ   rÔ   Úrr   ÚlargeÚklarger   r   r   Útest_kroncompareï  s   

üþzTestTile.test_kroncompareN)rZ   r[   r\   r9  rW  rT   r^  r   r   r   r   rS  Õ  s
    rS  c                   @   rÈ   )ÚTestMayShareMemoryc              	   C   sü   t  d¡}t  d¡}tt  ||¡ƒ tt  ||d d d… ¡ƒ tt  ||d d d… ¡ƒ tt  ||dd …d d d…f ¡ƒ tt  |d d d… |¡ ƒ tt  |d d d… |¡ ƒ tt  |dd …d d d…f |¡ ƒ tt  |dd …d d d…f |¡ƒ d S )N)rc   ra   )r_   ra   r‡   r¢   r+   rC   )r   rD   r   Úmay_share_memory)r:   rn   Úd2r   r   r   r9  þ  s   

"$&zTestMayShareMemory.test_basicNr:  r   r   r   r   r_  ý  rÎ   r_  c                 C   s:   t | ƒt |ƒkrtdƒ‚t| |ƒD ]	\}}t||ƒ qdS )zCompare lists of arrays.z Iterables have different lengthsN)rp   rF   Úzipr   )r   rë   rž   Úyr   r   r   ré     s
   ÿré   ).Únumpyr   r!   Úsysrÿ   Únumpy.lib.shape_baser   r   r   r   r   r   r   r	   r
   r   r   r   r   r   Únumpy.testingr   r   r   r   r   Úmaxsizer  r#   r%   r^   rk   rÉ   rÐ   râ   r  r  r  r(  r1  r4  r7  r;  rS  r_  ré   r   r   r   r   Ú<module>   s6    @
4 '( '!O(