a
    ߙfbS                    @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlmZ	 d dl
mZmZmZmZmZmZ d dlmZmZ ejje ddZdd	 ZeeejejZee ZG d
d deZG dd dedZ G dd de Z!G dd de Z"G dd de Z#G dd de!Z$G dd de"Z%G dd de Z&G dd de"Z'G dd de!Z(G dd  d e!Z)G d!d" d"e!Z*G d#d$ d$edZ+G d%d& d&e!Z,G d'd( d(edZ-G d)d* d*edZ.G d+d, d,e!Z/G d-d. d.e!Z0G d/d0 d0edZ1G d1d2 d2e!Z2G d3d4 d4e!Z3G d5d6 d6edZ4G d7d8 d8edZ5G d9d: d:edZ6G d;d< d<edZ7G d=d> d>edZ8G d?d@ d@edZ9G dAdB dBe!Z:G dCdD dDedZ;G dEdF dFedZ<G dGdH dHe"Z=G dIdJ dJedZ>G dKdL dLe"Z?G dMdN dNedZ@G dOdP dPe ZAejBdQejjCejjDgdRdS ZEeG dTdU dUe!ZFG dVdW dWedZGe ZHerZdXdY e D ZIeHeIO ZHernejJejKhZLne ZLeHeLO ZHejMejNejOejPhZQeHeQO ZHejRejSejTejUejVejWejXejYejZej[ej\hZ]eHe]O ZHedZd[ Z^G d\d] d]Z_dS )^    N)assert_array_equal)units)ARRAY_FUNCTION_ENABLEDSUBCLASS_SAFE_FUNCTIONSUNSUPPORTED_FUNCTIONSFUNCTION_HELPERSDISPATCHED_FUNCTIONSIGNORED_FUNCTIONS)NUMPY_LT_1_20NUMPY_LT_1_23z Needs __array_function__ support)reasonc                  G   sL   i }| D ]>}|j  D ].\}}|tju r*qt|rt|dr|||< qq|S )N__wrapped__)__dict__itemsnpZprintoptionscallablehasattr)modulesZwrapped_functionsmodnamef r   Klib/python3.9/site-packages/astropy/units/tests/test_quantity_non_ufuncs.pyget_wrapped_functions   s    
r   c                       s&   e Zd ZdZe Z fddZ  ZS )CoverageMetaz|Meta class that tracks which functions are covered by tests.

    Assumes that a test is called 'test_<function_name>'.
    c                    s\   |  D ]@\}}t|r|dr|dd}|tv r| jt|  qt 	| |||S )NtestZtest_ )
r   inspectZ
isfunction
startswithreplaceall_wrapped_functionscoveredaddsuper__new__)mclsr   basesmemberskvr   	__class__r   r   r$   .   s    zCoverageMeta.__new__)__name__
__module____qualname____doc__setr!   r$   __classcell__r   r   r*   r   r   '   s   r   c                   @   s   e Zd ZdZdd ZdS )BasicTestSetupzTest setup for functions that should not change the unit.

    Also provides a default Quantity with shape (3, 3) and units of m.
    c                 C   s"   t dddd tj | _d S )N      "@         @r   arangereshapeumqselfr   r   r   setup=   s    zBasicTestSetup.setupN)r,   r-   r.   r/   r>   r   r   r   r   r2   8   s   r2   )	metaclassc                   @   s   e Zd Zdd ZdS )InvariantUnitTestSetupc                 O   s`   || j g|R i |}|| j jg|R i || j j }|j|jksJJ t||ks\J d S N)r;   valueunitshaper   all)r=   funcargskwargsoexpectedr   r   r   checkB   s    "zInvariantUnitTestSetup.checkNr,   r-   r.   rK   r   r   r   r   r@   A   s   r@   c                   @   s   e Zd Zdd ZdS )NoUnitTestSetupc                 O   s   || j g|R i |}|| j jg||R  }t|t|u sDJ t|trltdd t||D s~J nt||ks~J d S )Nc                 s   s    | ]\}}t ||kV  qd S rA   r   rE   .0rI   xr   r   r   	<genexpr>O       z(NoUnitTestSetup.check.<locals>.<genexpr>)r;   rB   type
isinstancetuplerE   zipr   r=   rF   rG   rH   outrJ   r   r   r   rK   J   s    
zNoUnitTestSetup.checkNrL   r   r   r   r   rM   I   s   rM   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestShapeInformationc                 C   s   t | jdksJ d S Nr4   r4   )r   rD   r;   r<   r   r   r   
test_shapeU   s    zTestShapeInformation.test_shapec                 C   s   t | jdksJ d S )N	   )r   sizer;   r<   r   r   r   	test_sizeX   s    zTestShapeInformation.test_sizec                 C   s   t | jdksJ d S N   )r   ndimr;   r<   r   r   r   	test_ndim[   s    zTestShapeInformation.test_ndimN)r,   r-   r.   r]   r`   rd   r   r   r   r   rZ   T   s   rZ   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d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$TestShapeManipulationc                 C   s   |  tjd d S )N)r^      )rK   r   r8   r<   r   r   r   test_reshapeb   s    z"TestShapeManipulation.test_reshapec                 C   s   |  tj d S rA   )rK   r   ravelr<   r   r   r   
test_ravele   s    z TestShapeManipulation.test_ravelc                 C   s   |  tjdd d S Nr   rf   )rK   r   Zmoveaxisr<   r   r   r   test_moveaxish   s    z#TestShapeManipulation.test_moveaxisc                 C   s   |  tjdd d S )Nr   rb   )rK   r   Zrollaxisr<   r   r   r   test_rollaxisk   s    z#TestShapeManipulation.test_rollaxisc                 C   s   |  tjdd d S rj   )rK   r   Zswapaxesr<   r   r   r   test_swapaxesn   s    z#TestShapeManipulation.test_swapaxesc                 C   s   |  tj d S rA   )rK   r   Z	transposer<   r   r   r   test_transposeq   s    z$TestShapeManipulation.test_transposec                 C   s`   dt j }t|| j\}}|jdks*J ||ks6J t| jjt j }t||ks\J d S )N      ?rf   )r9   r:   r   Z
atleast_1dr;   rD   rB   rE   r=   r;   rI   ZsorJ   r   r   r   test_atleast_1dt   s    
z%TestShapeManipulation.test_atleast_1dc                 C   s`   dt j }t|| j\}}|jdks*J ||ks6J t| jjt j }t||ks\J d S )Nro   rf   rf   )r9   r:   r   Z
atleast_2dr;   rD   rB   rE   rq   r   r   r   test_atleast_2d|   s    
z%TestShapeManipulation.test_atleast_2dc                 C   s`   dt j }t|| j\}}|jdks*J ||ks6J t| jjt j }t||ks\J d S )Nro   )rf   rf   rf   )r9   r:   r   Z
atleast_3dr;   rD   rB   rE   rq   r   r   r   test_atleast_3d   s    
z%TestShapeManipulation.test_atleast_3dc                 C   s   |  tjd d S Nrf   )rK   r   expand_dimsr<   r   r   r   test_expand_dims   s    z&TestShapeManipulation.test_expand_dimsc                 C   sF   t | jd d t jd d f }|jdks.J t || jksBJ d S r[   )r   Zsqueezer;   newaxisrD   rE   )r=   rI   r   r   r   test_squeeze   s     z"TestShapeManipulation.test_squeezec                 C   s   |  tj d S rA   )rK   r   Zflipr<   r   r   r   	test_flip   s    zTestShapeManipulation.test_flipc                 C   s   |  tj d S rA   )rK   r   Zfliplrr<   r   r   r   test_fliplr   s    z!TestShapeManipulation.test_fliplrc                 C   s   |  tj d S rA   )rK   r   Zflipudr<   r   r   r   test_flipud   s    z!TestShapeManipulation.test_flipudc                 C   s   |  tj d S rA   )rK   r   Zrot90r<   r   r   r   
test_rot90   s    z TestShapeManipulation.test_rot90c                 C   s6   | j tjddd t| jd}t|tju s2J d S N)r4   r4   r4   TZsubok)rK   r   Zbroadcast_tor;   rT   ndarray)r=   rY   r   r   r   test_broadcast_to   s    z'TestShapeManipulation.test_broadcast_toc                 C   s   t dtj }t j| j|dd\}}t|tjs6J t|tjsFJ |j|j  kr^dksdn J t 	|| jksxJ t 	||ksJ t | j|\}}t
|t ju sJ t
|t ju sJ d S r   )r   onesr9   sZbroadcast_arraysr;   rU   QuantityrD   rE   rT   r   )r=   q2o1o2Za1Za2r   r   r   test_broadcast_arrays   s    z+TestShapeManipulation.test_broadcast_arraysN)r,   r-   r.   rg   ri   rk   rl   rm   rn   rr   rt   ru   rx   rz   r{   r|   r}   r~   r   r   r   r   r   r   re   _   s"   re   c                   @   sX   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
dd Zdd ZdS )TestArgFunctionsc                 C   s   |  tj d S rA   )rK   r   Zargminr<   r   r   r   test_argmin   s    zTestArgFunctions.test_argminc                 C   s   |  tj d S rA   )rK   r   argmaxr<   r   r   r   test_argmax   s    zTestArgFunctions.test_argmaxc                 C   s   |  tj d S rA   )rK   r   Zargsortr<   r   r   r   test_argsort   s    zTestArgFunctions.test_argsortc                 C   s   |  tj d S rA   )rK   r   Zlexsortr<   r   r   r   test_lexsort   s    zTestArgFunctions.test_lexsortc                 C   sV   | j  }tddgtj }t||}t|j||j	}t
||ksRJ d S )N     b@g     u@)r;   rh   r   arrayr9   cmZsearchsortedrB   to_valuerC   rE   )r=   r;   r   rY   rJ   r   r   r   test_searchsorted   s
    
z"TestArgFunctions.test_searchsortedc                 C   s   |  tj d S rA   )rK   r   Znonzeror<   r   r   r   test_nonzero   s    zTestArgFunctions.test_nonzeroc                 C   s   |  tj d S rA   )rK   r   Zargwherer<   r   r   r   test_argwhere   s    zTestArgFunctions.test_argwherec                 C   s   |  tjd d S ra   )rK   r   Zargpartitionr<   r   r   r   test_argpartition   s    z"TestArgFunctions.test_argpartitionc                 C   s   |  tj d S rA   )rK   r   Zflatnonzeror<   r   r   r   test_flatnonzero   s    z!TestArgFunctions.test_flatnonzeroN)r,   r-   r.   r   r   r   r   r   r   r   needs_array_functionr   r   r   r   r   r   r      s   
r   c                   @   sL   e Zd Zdd Zdd Zejdddd Ze	ejd	d
dd Z
dS )TestAlongAxisc                 C   s^   t jt j| jdddd}t j| j|dd}t j| jj|dd| jj }t ||ksZJ d S Nr   axis)r   rw   r   r;   Ztake_along_axisrB   rC   rE   )r=   indicesrY   rJ   r   r   r   test_take_along_axis   s    z"TestAlongAxis.test_take_along_axisc                 C   sx   | j  }tjtj| j dddd}tj||ddtj d |j }tj||ddd ||j	 }t
||kstJ d S )Nr   r   i)r   values)r;   copyr   rw   r   Zput_along_axisr9   r   rB   rC   rE   )r=   r;   r   rJ   r   r   r   test_put_along_axis   s    


z!TestAlongAxis.test_put_along_axisr   r   rf   c                 C   s@   t t j|| j}t t j|| jj| jjd  }t|| d S ra   )r   Zapply_along_axissquarer;   rB   rC   r   )r=   r   rY   rJ   r   r   r   test_apply_along_axis   s    

z#TestAlongAxis.test_apply_along_axisaxes)rp   r   r   c                 C   sP   dd }t || j|}t || jj|}|| jjdt|   }t|| d S )Nc                 S   s   t t | |S rA   )r   sumr   )rQ   r   r   r   r   function   s    z4TestAlongAxis.test_apply_over_axes.<locals>.functionrb   )r   Zapply_over_axesr;   rB   rC   lenr   )r=   r   r   rY   rJ   r   r   r   test_apply_over_axes   s
    z"TestAlongAxis.test_apply_over_axesN)r,   r-   r.   r   r   pytestmarkparametrizer   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S )TestIndicesFromc                 C   s   |  tj d S rA   )rK   r   Zdiag_indices_fromr<   r   r   r   test_diag_indices_from   s    z&TestIndicesFrom.test_diag_indices_fromc                 C   s   |  tj d S rA   )rK   r   Ztriu_indices_fromr<   r   r   r   test_triu_indices_from   s    z&TestIndicesFrom.test_triu_indices_fromc                 C   s   |  tj d S rA   )rK   r   Ztril_indices_fromr<   r   r   r   test_tril_indices_from  s    z&TestIndicesFrom.test_tril_indices_fromN)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S )TestRealImagc                 C   s"   t dddd tj | _d S )Nr3   r4                 ?r6   r<   r   r   r   r>     s    zTestRealImag.setupc                 C   s   |  tj d S rA   )rK   r   realr<   r   r   r   	test_real  s    zTestRealImag.test_realc                 C   s   |  tj d S rA   )rK   r   imagr<   r   r   r   	test_imag  s    zTestRealImag.test_imagN)r,   r-   r.   r>   r   r   r   r   r   r   r     s   r   c                   @   sH   e Zd Zedd Zedd Zdd Zdd Zd	d
 Zedd Z	dS )TestCopyAndCreationc                 C   s*   |  tj tj| jd}t|| j d S Na)rK   r   r   r;   r   )r=   r   r   r   r   	test_copy  s    zTestCopyAndCreation.test_copyc                 C   s*   |  tj tj| jd}t|| j d S r   )rK   r   Zasfarrayr;   r   )r=   Zfarrayr   r   r   test_asfarray  s    z!TestCopyAndCreation.test_asfarrayc                 C   s   t | j}|jdksJ t|tjs*J |j| jjks<J t j| jd}|jdksXJ t|tjshJ |j| jjkszJ t j| jdd}t|t j	u sJ d S )Nr\   )Z	prototypeFr   )
r   
empty_liker;   rD   rU   r9   r   rC   rT   r   )r=   rI   r   o3r   r   r   test_empty_like   s    z#TestCopyAndCreation.test_empty_likec                 C   s.   |  tj tj| jd}t|| jd  d S )Nr           )rK   r   Z
zeros_liker;   r   )r=   r   r   r   r   test_zeros_like,  s    z#TestCopyAndCreation.test_zeros_likec                 C   s   |  tj d S rA   )rK   r   Z	ones_liker<   r   r   r   test_ones_like1  s    z"TestCopyAndCreation.test_ones_likec                 C   s   t | jdtj }t | jjtj }dtj |d< t ||ksHJ t	
tj$ t | jdtj  W d    n1 s~0    Y  d S )N      ?.)r   Z	full_liker;   r9   kmr   rB   r:   rE   r   raises
UnitsErrorr   r=   rI   rJ   r   r   r   test_full_like4  s    z"TestCopyAndCreation.test_full_likeN)
r,   r-   r.   r   r   r   r   r   r   r   r   r   r   r   r     s   

r   c                   @   s`   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd ZdS )TestAccessingPartsc                 C   s   |  tj d S rA   )rK   r   diagr<   r   r   r   	test_diag?  s    zTestAccessingParts.test_diagc                 C   sV   | j  }t|}t|j|j> }|j| j jks8J |j|jksHJ t|| d S rA   )r;   rh   r   r   rB   rC   rD   r   )r=   r;   rI   rJ   r   r   r   test_diag_1d_inputB  s    

z%TestAccessingParts.test_diag_1d_inputc                 C   s   |  tj d S rA   )rK   r   Zdiagonalr<   r   r   r   test_diagonalL  s    z TestAccessingParts.test_diagonalc                 C   s   |  tj d S rA   )rK   r   Zdiagflatr<   r   r   r   test_diagflatO  s    z TestAccessingParts.test_diagflatc                 C   sL   t jg d| jdd}t jg d| jjdd| jj }t ||ksHJ d S )NTFTr   r   )r   compressr;   rB   rC   rE   r   r   r   r   test_compressR  s    z TestAccessingParts.test_compressc                 C   sD   t g d| j}t g d| jj| jj }t ||ks@J d S )Nr   )r   extractr;   rB   rC   rE   r   r   r   r   test_extractX  s    
zTestAccessingParts.test_extractc                 C   s.   |  tjtddd |  tjddgd d S )Nrf   rb   r   )rK   r   deleteslicer<   r   r   r   test_delete^  s    zTestAccessingParts.test_deletec                 C   s<   | j  }t|}t|jtj }t||ks8J d S rA   )r;   rh   r   Z
trim_zerosrB   r9   r:   rE   r=   r;   rY   rJ   r   r   r   test_trim_zerosb  s    

z"TestAccessingParts.test_trim_zerosc                 C   s$   |  tjd | j tjddd d S )Nrf   r   r   )rK   r   Zrollr<   r   r   r   	test_rollh  s    zTestAccessingParts.test_rollc                 C   s(   | j tjddgdd |  tjd d S )Nr   rf   r   )rK   r   Ztaker<   r   r   r   	test_takel  s    zTestAccessingParts.test_takeN)r,   r-   r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   >  s   
	r   c                   @   s@   e Zd Zdd Zedd Zedd Zedd Zd	d
 ZdS )TestSettingPartsc                 C   s`   t dtj }t |ddgddgtj  |jtjks<J g dtj }t ||ks\J d S )N      @r   rb   2      r   d   r   )r   r7   r9   r:   Zputr   rC   rE   r=   r;   rJ   r   r   r   test_putr  s
    zTestSettingParts.test_putc                 C   s(  t dtj }g d}g dtj }t ||| |jtjksDJ g dtj }t ||ksdJ t	tj
  t |||j W d    n1 s0    Y  t	tj
  t |j|| W d    n1 s0    Y  t d}g dtj }t ||| t g d}t ||ks$J d S )Nr   r   r   r   r   r   r   ro         ?)r   r7   r9   r:   r   ZputmaskrC   rE   r   r   r   rB   percentr   )r=   r;   maskr   rJ   r   r   r   r   test_putmasky  s     ..
zTestSettingParts.test_putmaskc                 C   s   t dtj }t |g dddgtj  |jtjks<J g dtj }t ||ks\J t d}t |g dddgtj  t	|t j
u sJ t g d}t ||ksJ d S )Nr   r   r   r   r   r   )r   r7   r9   r:   Zplacer   rC   rE   r   rT   r   r   r=   r;   rJ   r   r   r   r   
test_place  s    
zTestSettingParts.test_placec                 C   s   t dtj }t j|g dtj g dd |jtjks>J g dtj }t ||ks^J t d}t j|g dtj g dd t	|t j
u sJ t g d}t ||ksJ d S )Nr   r   r   )wherer   r   )r   r7   r9   r:   Zcopytor   rC   rE   r   rT   r   r   r   r   r   r   test_copyto  s    
zTestSettingParts.test_copytoc                 C   sp   t dddtj }|j }t |d |tj }t |dtj  |j	tjksZJ t 
||kslJ d S )Nr3   r4         ?      9@)r   r7   r8   r9   r:   rB   r   Zfill_diagonalr   rC   rE   r   r   r   r   test_fill_diagonal  s    

z#TestSettingParts.test_fill_diagonalN)	r,   r-   r.   r   r   r   r   r   r   r   r   r   r   r   q  s   


r   c                   @   s(   e Zd Zdd Zdd Zedd ZdS )
TestRepeatc                 C   s   |  tjd d S ra   )rK   r   Ztiler<   r   r   r   	test_tile  s    zTestRepeat.test_tilec                 C   s   |  tjd d S ra   )rK   r   repeatr<   r   r   r   test_repeat  s    zTestRepeat.test_repeatc                 C   s   |  tjd d S )N)   r   )rK   r   Zresizer<   r   r   r   test_resize  s    zTestRepeat.test_resizeN)r,   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edd Zedd Zed	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd ZdS )TestConcatenatec                 C   s.   t dddtj | _| jtj| _d S )N      @rb   r4   )	r   r7   r8   r9   r:   q1tor   r   r<   r   r   r   r>     s    zTestConcatenate.setupc                    s   | d| j| jg}| d|d  ||g|R i |} fdd|D }||g|R i | j }|j|jksxJ t||ksJ d S )Nq_listq_refr   c                    s   g | ]}  |qS r   )Z_to_own_unitrP   r;   r   r   r   
<listcomp>  rS   z)TestConcatenate.check.<locals>.<listcomp>)popr   r   rC   rD   r   rE   )r=   rF   rG   rH   r   rI   Zv_listrJ   r   r   r   rK     s    zTestConcatenate.checkc                 C   s   |  tj | j tjdd | j tjt| jj| j| jg| jd tdtj	 }tj| j| jg|d}||u svJ |j
| jj
ksJ t| jj| j| jj
g| jj
 }t||ksJ tt" t| jt g W d    n1 s0    Y  d S )Nrf   r   )r   r   )r   r4   rY   )rK   r   Zconcatenatezerosr   rD   r   emptyr9   dimensionless_unscaledrC   rB   r   rE   r   r   	TypeErrorobject)r=   rY   resultrJ   r   r   r   test_concatenate  s"    z TestConcatenate.test_concatenatec                 C   s   |  tj d S rA   )rK   r   stackr<   r   r   r   
test_stack  s    zTestConcatenate.test_stackc                 C   s   |  tj d S rA   )rK   r   Zcolumn_stackr<   r   r   r   test_column_stack  s    z!TestConcatenate.test_column_stackc                 C   s   |  tj d S rA   )rK   r   Zhstackr<   r   r   r   test_hstack  s    zTestConcatenate.test_hstackc                 C   s   |  tj d S rA   )rK   r   Zvstackr<   r   r   r   test_vstack  s    zTestConcatenate.test_vstackc                 C   s   |  tj d S rA   )rK   r   Zdstackr<   r   r   r   test_dstack  s    zTestConcatenate.test_dstackc                 C   sb   |  tj tddtj gdtj dtj gg}t|tddgddggtj> ks^J d S )Nr   ro          @r   {Gz?     @@)rK   r   blockr9   r:   r   r   rE   r=   r	  r   r   r   
test_block  s    (zTestConcatenate.test_blockc                 C   s   t j| j| jdd}|j| jjks&J t j| jj| j| jjdd| jj }t ||ks`J t d}t |dt	j
 }t|t	jsJ |jt	jksJ t |dt	j }t ||ksJ d S )Nr   r   r         I@r   )r   appendr   r   rC   rB   r   rE   r7   r9   r   rU   r   r  )r=   rY   rJ   r   r	  r   r   r   test_append  s    
zTestConcatenate.test_appendc                 C   s  t dddtj }t |dddgtj }t|tjs@J |j	|j	ksPJ t |j
dddg|j	> }t ||ks|J t |dd	}t |j
dd	|j	> }t ||ksJ t d
}t |ddtj }t|tjsJ |j	tjksJ t |ddtj }t ||ksJ tt* t |dtj dtj  W d    n1 sT0    Y  ttj$ t |ddtj  W d    n1 s0    Y  d S )Ng      (@   rb   )r4      r  r   r   r   r   r   )rb   r4   r   )r   r7   r8   r9   r:   insertr   rU   r   rC   rB   rE   r   r  r   r   r  r   r   )r=   r;   rY   rJ   out2	expected2r   r	  r   r   r   test_insert	  s&    
:zTestConcatenate.test_insertc                 C   s  t ddtj }t j|ddddtj fd}|j|jks>J t j|jdddd|j }t ||ksjJ t j|dddtj d}|j|jksJ t j|jddd	d|j }t ||ksJ t j|dd
dtj dfd}|j|jksJ t j|jdd
dd|j }t ||ksJ d S )Nro   r   )rb   r4   Zconstantr   r   )Zconstant_values)r   r   r   Zlinear_rampr   )Z
end_values)r   r   )	r   r7   r9   r:   Zpadr   rC   rB   rE   )r=   r;   rY   rJ   r  r  out3	expected3r   r   r   test_pad#  s2    zTestConcatenate.test_padN)r,   r-   r.   r>   rK   r   r
  r  r  r  r  r  r  r  r  r"  r   r   r   r   r     s,   	








r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )	TestSplitc                 C   s    t ddddtj | _d S )Ng      K@r4   r  r6   r<   r   r   r   r>   8  s    zTestSplit.setupc                    s   | j g|R i |}| j jg|R i |} fdd|D }t|t|ksXJ tdd t||D stJ tdd t||D sJ d S )Nc                    s   g | ]}| j j qS r   )r;   rC   )rP   rQ   r<   r   r   r  >  rS   z#TestSplit.check.<locals>.<listcomp>c                 s   s   | ]\}}|j |j kV  qd S rA   )rD   rO   r   r   r   rR   @  rS   z"TestSplit.check.<locals>.<genexpr>c                 s   s    | ]\}}t ||kV  qd S rA   rN   rO   r   r   r   rR   A  rS   )r;   rB   r   rE   rW   rX   r   r<   r   rK   ;  s    zTestSplit.checkc                 C   s   |  tjdg d S rv   )rK   r   splitr<   r   r   r   
test_splitC  s    zTestSplit.test_splitc                 C   s   |  tjd d S ra   )rK   r   Zarray_splitr<   r   r   r   test_array_splitF  s    zTestSplit.test_array_splitc                 C   s   |  tjddg d S )Nrf   r   )rK   r   Zhsplitr<   r   r   r   test_hsplitI  s    zTestSplit.test_hsplitc                 C   s   |  tjdg d S rv   )rK   r   Zvsplitr<   r   r   r   test_vsplitL  s    zTestSplit.test_vsplitc                 C   s   |  tjdg d S rv   )rK   r   Zdsplitr<   r   r   r   test_dsplitO  s    zTestSplit.test_dsplitN)
r,   r-   r.   r>   rK   r%  r&  r'  r(  r)  r   r   r   r   r#  7  s   r#  c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )TestUfuncReductionsc                 C   s   |  tj d S rA   )rK   r   Zamaxr<   r   r   r   	test_amaxT  s    zTestUfuncReductions.test_amaxc                 C   s   |  tj d S rA   )rK   r   Zaminr<   r   r   r   	test_aminW  s    zTestUfuncReductions.test_aminc                 C   s   |  tj d S rA   )rK   r   r   r<   r   r   r   test_sumZ  s    zTestUfuncReductions.test_sumc                 C   s   |  tj d S rA   )rK   r   Zcumsumr<   r   r   r   test_cumsum]  s    zTestUfuncReductions.test_cumsumc                 C   s:   t t t| j W d    n1 s,0    Y  d S rA   )r   r   r  r   anyr;   r<   r   r   r   test_any`  s    zTestUfuncReductions.test_anyc                 C   s:   t t t| j W d    n1 s,0    Y  d S rA   )r   r   r  r   rE   r;   r<   r   r   r   test_alld  s    zTestUfuncReductions.test_allc                 C   s:   t t t| j W d    n1 s,0    Y  d S rA   )r   r   r  r   Zsometruer;   r<   r   r   r   test_sometrueh  s    z!TestUfuncReductions.test_sometruec                 C   s:   t t t| j W d    n1 s,0    Y  d S rA   )r   r   r  r   Zalltruer;   r<   r   r   r   test_alltruel  s    z TestUfuncReductions.test_alltruec                 C   s<   t tj t| j W d    n1 s.0    Y  d S rA   )r   r   r9   r   r   Zprodr;   r<   r   r   r   	test_prodp  s    zTestUfuncReductions.test_prodc                 C   s<   t tj t| j W d    n1 s.0    Y  d S rA   )r   r   r9   r   r   productr;   r<   r   r   r   test_productt  s    z TestUfuncReductions.test_productc                 C   s<   t tj t| j W d    n1 s.0    Y  d S rA   )r   r   r9   r   r   Zcumprodr;   r<   r   r   r   test_cumprodx  s    z TestUfuncReductions.test_cumprodc                 C   s<   t tj t| j W d    n1 s.0    Y  d S rA   )r   r   r9   r   r   Z
cumproductr;   r<   r   r   r   test_cumproduct|  s    z#TestUfuncReductions.test_cumproductN)r,   r-   r.   r+  r,  r-  r.  r0  r1  r2  r3  r4  r6  r7  r8  r   r   r   r   r*  S  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d Z	e
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Zdd  Ze
d!d" Zd#S )$TestUfuncLikec                 C   s    |  tj | j tjdd d S r   )rK   r   Zptpr<   r   r   r   test_ptp  s    zTestUfuncLike.test_ptpc                 C   s   |  tj d S rA   )rK   r   Zround_r<   r   r   r   test_round_  s    zTestUfuncLike.test_round_c                 C   s   |  tj d S rA   )rK   r   Zaroundr<   r   r   r   test_around  s    zTestUfuncLike.test_aroundc                 C   s   |  tj d S rA   )rK   r   Zfixr<   r   r   r   test_fix  s    zTestUfuncLike.test_fixc                 C   sF   t g dtj }t |}t |jtj }t ||ksBJ d S N)y      ?        r         ?      ?y                )r   r   r9   r:   ZanglerB   radianrE   r   r   r   r   
test_angle  s    
zTestUfuncLike.test_anglec                 C   s   t g dtj }t |}t |tjtj }t|tjsFJ t 	||ksXJ t
tj t | j W d    n1 s0    Y  d S )N)r         $@      4@)r   r   r9   r   Zi0r   onerU   r   rE   r   r   r   r;   r   r   r   r   test_i0  s    
zTestUfuncLike.test_i0c                 C   sl   dt j }g dt j }t| j||}t| jj|| jj|| jj| jj }t||kshJ d S )N   )i  i  i"  )	r9   r   r   Zclipr;   rB   r   rC   rE   )r=   ZqminZqmaxrY   rJ   r   r   r   	test_clip  s    
zTestUfuncLike.test_clipc                 C   s   g dt j }t|}t|t jt j }t|t js@J t	||ksRJ t
t j  tdt j  W d    n1 s0    Y  d S )Nr   g     Ԭ@g     pg     @ro   )r9   degr   Zsincr   r@  rD  rU   r   rE   r   r   r   r   r   r   r   	test_sinc  s    
zTestUfuncLike.test_sincc                 C   sN   t g d| jdtj }t g d| jjd| jj }t ||ksJJ d S )Nr   ro        @@)r   r   r;   r9   r   rB   rC   rE   r=   rY   rJ   r   r   r   
test_where  s    zTestUfuncLike.test_wherec                 C   s   t ddgd}t g ddtj }t g ddtj }t |||f}t ||j||j	ftj }t 
||ksJ d S )Nr   rf   )rb   rf   rf   rf   rb   r4   )rf   r4   rf   )r   )rf   rf   r  )r   r   r8   r9   r   r:   ZchooserB   r   rC   rE   )r=   r   r   r   rY   rJ   r   r   r   test_choose  s     zTestUfuncLike.test_choosec                 C   s   | j }tj|dtj k |dtj kg||tjgdtj d}tj|jdk |jdkg|j|jgddtj }t	||ksJ d S )Ng?ro         )defaultrf   i)
r;   r   Zselectr9   r:   r   r   r   rB   rE   r   r   r   r   test_select  s    zTestUfuncLike.test_selectc                 C   sF   t g dtj }t |}t |jtj }t ||ksBJ d S r>  )r   r   r9   r:   Zreal_if_closerB   rE   r   r   r   r   test_real_if_close  s    
z TestUfuncLike.test_real_if_closec                 C   s   |  tj d S rA   )rK   r   Ztrilr<   r   r   r   	test_tril  s    zTestUfuncLike.test_trilc                 C   s   |  tj d S rA   )rK   r   Ztriur<   r   r   r   	test_triu  s    zTestUfuncLike.test_triuc                 C   s   g dt j }t|}t|t jt j |j}|j|jksHJ tj||dt j	 ddsdJ t
t j$ tddgt j  W d    n1 s0    Y  t
t j$ tj|dt j d W d    n1 s0    Y  d S )NrH  rf   r   atolrtolro   r  )Zdiscont)r9   rI  r   Zunwrapr   Zradr   rC   allcloseZuradr   r   r   r:   r   r   r   r   test_unwrap  s    
 2zTestUfuncLike.test_unwrapc                 C   sV   t t j t j
 t jddgtj }t |}t |j|j }t 	||ksRJ d S Nr   r5   )
r   r   infnanr9   r:   
nan_to_numrB   rC   rE   r   r   r   r   test_nan_to_num  s    $
zTestUfuncLike.test_nan_to_numc                 C   sl   t t j t j
 t jddgtj }t j|dtj dtj dtj d}g dtj }t ||kshJ d S )Nr   r5   ro   r  rO  )ra  ZposinfZneginf)g     @r  rK  r   r5   )	r   r   r`  ra  r9   r:   rb  r   rE   r   r   r   r   test_nan_to_num_complex  s    $$z%TestUfuncLike.test_nan_to_num_complexN)r,   r-   r.   r:  r;  r<  r=  rA  rE  rG  r   rJ  rM  rS  rV  rW  rX  rY  r^  rc  rd  r   r   r   r   r9    s4   	
	







r9  c                   @   sP   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
dd ZdS )TestUfuncLikeTestsc                 C   s*   t t j t j
 t jddgtj | _d S r_  )r   r   r`  ra  r9   r:   r;   r<   r   r   r   r>     s    zTestUfuncLikeTests.setupc                 C   sN   || j }|| j j}t|tju s(J |jjdks8J t||ksJJ d S )Nb)r;   rB   rT   r   r   dtypekindrE   )r=   rF   rY   rJ   r   r   r   rK     s
    
zTestUfuncLikeTests.checkc                 C   s   |  tj d S rA   )rK   r   Zisposinfr<   r   r   r   test_isposinf  s    z TestUfuncLikeTests.test_isposinfc                 C   s   |  tj d S rA   )rK   r   Zisneginfr<   r   r   r   test_isneginf  s    z TestUfuncLikeTests.test_isneginfc                 C   s&   |  tj tdgtj r"J d S Nr?  )rK   r   Zisrealr9   r:   r<   r   r   r   test_isreal  s    zTestUfuncLikeTests.test_isrealc                 C   s&   |  tj tdgtj s"J d S rk  )rK   r   Z	iscomplexr9   r:   r<   r   r   r   test_iscomplex	  s    z!TestUfuncLikeTests.test_iscomplexc                 C   s  t dtj }t g dtj }dtj }dtj }t j|||d}t j|j|	|j
|	|j
d}t|t ju s|J |jjdksJ t ||ksJ t j||d|d}t j|j|	|j
dd	d}t|t ju sJ |jjdksJ t ||ksJ d S )
Nr   )r   g     Y@     h@r   ro   r[  rf  r   rZ  r  )r   r7   r9   r:   r   r   r   iscloserB   r   rC   rT   r   rg  rh  rE   )r=   r   r   r[  r\  rY   rJ   r   r   r   test_isclose  s$    


zTestUfuncLikeTests.test_isclosec                 C   s   | j tj}t| j |}t| j j|tj}t	||ksFJ t
dtj }tg dtj }tj||ddd}tj|j||jddd}t	||ksJ tj||ddd}tj|j||jddd}t	||ksJ d S )Nr   )r        @Y@g     h@I+?r   rZ  )r;   r   r9   r   r   rp  rB   r   r:   rE   r7   r   rC   )r=   Zq_cmrY   rJ   r   r   r  r  r   r   r   test_allclose_atol_default_unit  s     z2TestUfuncLikeTests.test_allclose_atol_default_unitN)r,   r-   r.   r>   rK   ri  rj  rl  rm  rq  r   rt  r   r   r   r   re    s   re  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zedd Z	edd Z
dd Zedd Zdd Zedd Zdd Zedd Zedd ZdS )TestReductionLikeFunctionsc                 C   sd   t dddtj }t dtj }t j||d}t j|j|jdtj }t 	||ks`J d S )Nr3   r4   weights)
r   r7   r8   r9   r:   eyer   ZaveragerB   rE   r=   r   r   rI   rJ   r   r   r   test_average2  s
    z'TestReductionLikeFunctions.test_averagec                 C   s   |  tj d S rA   )rK   r   Zmeanr<   r   r   r   	test_mean9  s    z$TestReductionLikeFunctions.test_meanc                 C   s   |  tj d S rA   )rK   r   Zstdr<   r   r   r   test_std<  s    z#TestReductionLikeFunctions.test_stdc                 C   s<   t | j}t | jj| jjd  }t ||ks8J d S ra   )r   varr;   rB   rC   rE   r   r   r   r   test_var?  s    z#TestReductionLikeFunctions.test_varc                 C   s   |  tj d S rA   )rK   r   Zmedianr<   r   r   r   test_medianD  s    z&TestReductionLikeFunctions.test_medianc                 C   s  |  tjd t| jdtj }t| jjdtj }t||ksJJ t| jjdtj }|j	tj
kspJ t||jksJ d| }tj| jdtj |d}||u sJ t||ksJ d| }t| jdtj d |}||u sJ t||ksJ d S )Nr   r   r   r  )rK   r   Zquantiler;   r9   r   rB   r:   rE   rC   r  )r=   rI   rJ   r   r   r	  Zo4r   r   r   test_quantileG  s    z(TestReductionLikeFunctions.test_quantilec                 C   sN   |  tjd t| jdtj }t| jjdtj }t||ksJJ d S Nr   r   )	rK   r   Z
percentiler;   r9   rD  rB   r:   rE   r   r   r   r   test_percentileZ  s    z*TestReductionLikeFunctions.test_percentilec                 C   s   |  tj d S rA   )rK   r   Ztracer<   r   r   r   
test_tracea  s    z%TestReductionLikeFunctions.test_tracec                 C   s   t dddtj }t |}t|tjus4J |dks@J t j|dd}t|t ju s`J t 	|t 
g dks|J d S )Nr3   r4      rf   r   )rb   r4   r4   )r   r7   r8   r9   r:   Zcount_nonzerorT   r   r   rE   r   )r=   r   rI   r   r   r   test_count_nonzerod  s    
z-TestReductionLikeFunctions.test_count_nonzeroc                 C   sf   t dtj }t g dtj }dtj }dtj }t j|||dsLJ t j||d|dsbJ d S )Nr   r   rr  rn  rb   ro   ro  r   rZ  )r   r7   r9   r:   r   r   r   r]  )r=   r   r   r[  r\  r   r   r   test_allcloseo  s    

z(TestReductionLikeFunctions.test_allclosec                 C   sT   t dtj }t g dtj }t j||ddds:J t j||dddrPJ d S )Nr   r  rs  r   rZ  )r   r7   r9   r:   r   r   r]  r=   r   r   r   r   r   rt  w  s    z:TestReductionLikeFunctions.test_allclose_atol_default_unitc                 C   s   t dtj }t g dtj }ttj( t j	||dtj
 dd W d    n1 s^0    Y  ttj( t j	||ddtj
 d W d    n1 s0    Y  d S )Nr   r  rb   r   rZ  ro   )r   r7   r9   r:   r   r   r   r   r   r]  r   r  r   r   r   test_allclose_failures~  s    6z1TestReductionLikeFunctions.test_allclose_failuresc                 C   sL   t dtj }|tj}t ||s,J |jtj }t ||rHJ d S Nr   )r   r7   r9   r:   r   r   Zarray_equalrB   r=   r   r   q3r   r   r   test_array_equal  s
    z+TestReductionLikeFunctions.test_array_equalc                 C   s^   t g dgd tj }|d tj}t ||s:J |d jtj }t ||rZJ d S )N)r   ro   r  r4   r   )r   r   r9   r:   r   r   Zarray_equivrB   r  r   r   r   test_array_equiv  s
    z+TestReductionLikeFunctions.test_array_equivN)r,   r-   r.   rz  r{  r|  r~  r  r   r  r  r  r  r  rt  r  r  r  r   r   r   r   ru  1  s(   





ru  c                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zedd Zedd Z  ZS )TestNanFunctionsc                    s   t    tj| jd< d S )Nrs   )r#   r>   r   ra  r;   r<   r*   r   r   r>     s    
zTestNanFunctions.setupc                 C   s   |  tj d S rA   )rK   r   Znanmaxr<   r   r   r   test_nanmax  s    zTestNanFunctions.test_nanmaxc                 C   s   |  tj d S rA   )rK   r   Znanminr<   r   r   r   test_nanmin  s    zTestNanFunctions.test_nanminc                 C   s*   t | j}t | jj}||ks&J d S rA   )r   Z	nanargminr;   rB   rL  r   r   r   test_nanargmin  s    zTestNanFunctions.test_nanargminc                 C   s*   t | j}t | jj}||ks&J d S rA   )r   Z	nanargmaxr;   rB   rL  r   r   r   test_nanargmax  s    zTestNanFunctions.test_nanargmaxc                 C   s   |  tj d S rA   )rK   r   Znanmeanr<   r   r   r   test_nanmean  s    zTestNanFunctions.test_nanmeanc                 C   s   |  tj d S rA   )rK   r   Z	nanmedianr<   r   r   r   test_nanmedian  s    zTestNanFunctions.test_nanmedianc                 C   s   |  tj d S rA   )rK   r   Znansumr<   r   r   r   test_nansum  s    zTestNanFunctions.test_nansumc                 C   s   |  tj d S rA   )rK   r   Z	nancumsumr<   r   r   r   test_nancumsum  s    zTestNanFunctions.test_nancumsumc                 C   s   |  tj d S rA   )rK   r   Znanstdr<   r   r   r   test_nanstd  s    zTestNanFunctions.test_nanstdc                 C   s<   t | j}t | jj| jjd  }t ||ks8J d S ra   )r   Znanvarr;   rB   rC   rE   rL  r   r   r   test_nanvar  s    zTestNanFunctions.test_nanvarc                 C   s<   t tj t| j W d    n1 s.0    Y  d S rA   )r   r   r9   r   r   Znanprodr;   r<   r   r   r   test_nanprod  s    zTestNanFunctions.test_nanprodc                 C   s<   t tj t| j W d    n1 s.0    Y  d S rA   )r   r   r9   r   r   Z
nancumprodr;   r<   r   r   r   test_nancumprod  s    z TestNanFunctions.test_nancumprodc                 C   sN   |  tjd t| jdtj }t| jjdtj }t||ksJJ d S r  )	rK   r   Znanquantiler;   r9   r   rB   r:   rE   r   r   r   r   test_nanquantile  s    z!TestNanFunctions.test_nanquantilec                 C   sN   |  tjd t| jdtj }t| jjdtj }t||ksJJ d S r  )	rK   r   Znanpercentiler;   r9   rD  rB   r:   rE   r   r   r   r   test_nanpercentile  s    z#TestNanFunctions.test_nanpercentile)r,   r-   r.   r>   r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r1   r   r   r*   r   r    s"   
r  c                   @   sx   e Zd ZdZedd Zedd Zedd Zedd	 Zed
d Z	edd Z
edd Zedd Zdd ZdS )TestVariousProductFunctionsz4
    Test functions that are similar to gufuncs
    c                 C   sj   t dddtj }t g dtj }t ||}t |j|jtj tj }t 	||ksfJ d S )Nr   rb   r4   r5         @r   )
r   r7   r8   r9   r:   r   r   ZcrossrB   rE   ry  r   r   r   
test_cross  s
    z&TestVariousProductFunctions.test_crossc              	   C   s   t g dtj }t ddgtj }t ||}t |t ddgddgddggtj tj ksjJ d| }t j|||d}||u sJ t ||ksJ tt	" t j||t
 d W d    n1 s0    Y  d S )	NrN  rf   rb   r   r4   r  r   r  )r   r   r9   r:   r   ZouterrE   r   r   r  r  )r=   r   r   rI   r   r	  r   r   r   
test_outer  s    6z&TestVariousProductFunctions.test_outerc                 C   sP   t g dtj }t g dtj }t ||}|dtj tj ksLJ d S )NrN  )r   r  r      )r   r   r9   r:   r   innerr=   r   r   rI   r   r   r   
test_inner  s    z&TestVariousProductFunctions.test_innerc                 C   sP   t g dtj }t g dtj }t ||}|dtj tj ksLJ d S )N)ro   r  r   r  g      @@)r   r   r9   r:   r   dotr  r   r   r   test_dot  s    z$TestVariousProductFunctions.test_dotc                 C   sP   t g dtj }t g dtj }t ||}|dtj tj ksLJ d S )N)r                  @y              @)y              @y              @y              @y      @@        )r   r   r9   r:   r   Zvdotr  r   r   r   	test_vdot   s    z%TestVariousProductFunctions.test_vdotc                 C   s   t ddddtj }t ddddtj }t j||ddgddgfd	}t j|j|jddgddgfd	tj tj }t ||ksJ d S )
Ng      N@r4   r   r  g      8@rb   rf   r   )r   )	r   r7   r8   r9   r:   r   Z	tensordotrB   rE   )r=   r   rf  crJ   r   r   r   test_tensordot  s    z*TestVariousProductFunctions.test_tensordotc                 C   s^   t dtj }t dtj }t ||}t |j|jtj tj }t ||ksZJ d S ra   )	r   rx  r9   r:   r   r   ZkronrB   rE   ry  r   r   r   	test_kron  s
    z%TestVariousProductFunctions.test_kronc                 C   s   t dddtj }t d|}t ||ks6J t d|}t d|jtj }t ||kshJ t dtj	 }t d||}t ||tj	 ksJ d| }t jd|||d}||u sJ t ||ksJ d S )Nr3   r4   ...iiiij,jkr   r  )
r   r7   r8   r9   r:   ZeinsumrE   rB   rx  r   )r=   r   rI   rJ   r   r   r   r	  r   r   r   test_einsum  s    z'TestVariousProductFunctions.test_einsumc                 C   s   t dddtj }t d|}|d ddgks8J t d|}|d ddgksXJ t dtj }t d||}|d dd	gksJ d S )
Nr3   r4   r  r   einsum_pathr   r  r  r   )r   r7   r8   r9   r:   r  rx  r   )r=   r   rI   r   r   r   r   test_einsum_path)  s    z,TestVariousProductFunctions.test_einsum_pathN)r,   r-   r.   r/   r   r  r  r  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edd Zdd Zed	d
 ZdS )TestIntDiffFunctionsc                 C   s   t dtj tj }t |}t |j|j }t ||ksDJ dtj }t j||d}t j|j|jd|j |j }t ||ksJ t dtj }t ||}t |j|j|j |j }t ||ksJ d S )Nr3   rB  )dx)	r   r7   r9   r:   r   ZtrapzrB   rC   rE   )r=   yrY   rJ   r  rQ   r   r   r   
test_trapz5  s    

zTestIntDiffFunctions.test_trapzc                 C   sB   t dtj }t |}t |jtj }t ||ks>J d S NrB  )r   r7   r9   r:   diffrB   rE   r=   rQ   rY   rJ   r   r   r   	test_diffE  s    
zTestIntDiffFunctions.test_diffc                 C   s   t dtj }t j|dtj dtj d}t j|jddd|j }t 	||ksVJ t dtj }t j|dtj dtj dd}t j|jdddd|j }t 	||ksJ t
t  t j|t d	 W d    n1 s0    Y  d S )
NrB        )rf   )prependr        rK  rb   )r  r  n)r  )r   r7   r9   r:   r  r   r   rB   rC   rE   r   r   r  r  r  r   r   r   test_diff_prepend_appendL  s    z-TestIntDiffFunctions.test_diff_prepend_appendc                 C   sB   t dtj }t |}t |jtj }t ||ks>J d S r  )r   r7   r9   r:   gradientrB   rE   r  r   r   r   test_gradient[  s    
z"TestIntDiffFunctions.test_gradientc                 C   sB  t dtj }dtj }t ||}t |j|j|j|j  }t ||ksTJ t 	g dg dgtj }dtj }g dtj
 }t |||\}}	t |j|j|j\}
}|
|j |j }
||j |j }t ||
ksJ t |	|ksJ t j||dd}t ||
ksJ t j||dd}t ||ks>J d S )	NrB  )rf   rb   r  )r4   r   r  r  )ro   r   g      @r   r   rp   )r   r7   r9   r:   r   r  rB   rC   rE   r   ZGHz)r=   rQ   ZspacingrY   rJ   r   r  r  ZdfdxZdfdyZexp_dfdxZexp_dfdyZdfdx2Zdfdy2r   r   r   test_gradient_spacingb  s(    

z*TestIntDiffFunctions.test_gradient_spacingN)	r,   r-   r.   r  r  r   r  r  r  r   r   r   r   r  4  s   
r  c                   @   s,   e Zd Zdd Zedd Zedd ZdS )TestSpaceFunctionsc                 C   s   t dtj dtj d}t dddtj }t ||ks@J t dddtj }d	tj }t ||d}t |	|j
|jd|j
 }t ||ksJ d S )
NrK  rB  r  rf   
   r   rb   r4        @)r   linspacer9   r:   r   rE   r7   r8   r   r   rC   rB   r=   rY   rJ   r   r   r   r   r   test_linspace|  s    
z TestSpaceFunctions.test_linspacec                 C   s   t jt jd  }tdt | dt | d}tddd| }t||ksVJ tdt j dt j d}tjdddddt j }t 	||sJ d S )Nrb   rB     r  rC  g$uz?)base)
r9   r:   r   r   ZlogspaceZdexrE   ZSTmagZSTr]  )r=   rC   rY   rJ   r   r   r   test_logspace  s    "z TestSpaceFunctions.test_logspacec                 C   s   t dtj dtj d}t dddtj }t ||ks@J t dddd	tj }d
tj }t ||d}t |	|j
|jd|j
 }t ||ksJ d S )NrK  rB  r  rf   r  ro   g      @rb   r4   r  )r   Z	geomspacer9   r:   r   rE   r7   r8   r   r   rC   rB   r  r   r   r   test_geomspace  s    
z!TestSpaceFunctions.test_geomspaceN)r,   r-   r.   r  r   r  r  r   r   r   r   r  {  s
   
	r  c                   @   s$   e Zd Zedd Zedd ZdS )TestInterpolationFunctionsc                 C   s   t ddgtj }t dtj }t dtj }t |||}t ||j	|j
|j
|j	 }t ||kstJ t |||j
}t|t ju sJ t ||j
ksJ d S )Ng     @g     |@r  )r   r   r9   r:   r7   r   dayZinterpr   rC   rB   rE   rT   r   )r=   rQ   ZxpZyprY   rJ   r   r   r   test_interp  s     z&TestInterpolationFunctions.test_interpc                 C   s  t dddtj }t ||dk |dkgdtj dtj g}t |j|jdk |jdkgddgtj }|j|jksxJ t 	||ksJ t ||dtj k |dkgdtj dtj dd	 g}t |j|jdk |jdkgg d
tj }|j|jksJ t 	||ksJ t ||dtj k |dkgddtj
 dd	 g}t |j|jdk |jdkgg dtj }|j|jkszJ t 	||ksJ tt" t ||gdg W d    n1 s0    Y  tt$ t |j|gdg W d    n1 s0    Y  d S )Ng            @r  r   r   rf   Q c                 S   s
   dt j S rv   )r9   ZhourrQ   r   r   r   <lambda>  rS   z;TestInterpolationFunctions.test_piecewise.<locals>.<lambda>)r   r  i  c                 S   s
   dt j S rv   )r9   rD  r  r   r   r   r    rS   )r   r  rf   r   )r   r  r9   r:   Z	piecewiser   r  rB   rC   rE   r   rD  r   r   r  )r=   rQ   rY   rJ   r  r  r   r!  r   r   r   test_piecewise  sB    *2z)TestInterpolationFunctions.test_piecewiseN)r,   r-   r.   r   r  r  r   r   r   r   r    s   
r  c                   @   s$   e Zd Zedd Zedd ZdS )TestBincountDigitizec                 C   s   t g d}t t|tj }t ||}t ||j|j }t	|| t
t t | W d    n1 sv0    Y  d S )N)rf   rf   rb   r4   rb   r   )r   r   r7   r   r9   JyZbincountrB   rC   r   r   r   r  )r=   irw  rY   rJ   r   r   r   test_bincount  s    
z"TestBincountDigitize.test_bincountc                 C   sT   t g dtj }t dtj }t ||}t ||j|j	}t
|| d S )N)g     p@g     @g     @rB  )r   r   r9   r:   r7   r   Zdigitizer   rC   rB   r   )r=   rQ   binsrY   rJ   r   r   r   test_digitize  s
    z"TestBincountDigitize.test_digitizeN)r,   r-   r.   r   r  r  r   r   r   r   r    s   

r  c                   @   s   e Zd Zdd ZddddddZedd Zed	d
 Zedd Zedd Z	edd Z
edd Zedd Zedd ZdS )TestHistogramFunctionsc                 C   sH   t g dtj | _t g dtj | _t t| jtj	 | _
d S )Ng?333333?g?g @gffffff@)r  g@g333333@r   r5   )r   r   r9   r:   rQ   r   r  r7   r   r   rw  r<   r   r   r   r>     s    zTestHistogramFunctions.setupN)
value_argsvalue_kwargsexpected_unitsc                O   s   |du r|}n|  D ]\}}||| q||i |}	||i |}
|	d }|
d }|d durp||d  }t|| |tju rd}n
tdd}t|	| |
| || D ]$\}}}|dur|| }t|| qdS )a4  Check quanties are treated correctly in the histogram function.
        Test is done by applying ``function(*args, **kwargs)``, where
        the argument can be quantities, and comparing the result to
        ``function(*value_args, **value_kwargs)``, with the outputs
        converted to quantities using the ``expected_units`` (where `None`
        indicates the output is expected to be a regular array).

        For ``**value_kwargs``, any regular ``kwargs`` are treated as
        defaults, i.e., non-quantity arguments do not have to be repeated.
        Nr   rf   )r   
setdefaultr   r   histogramddr   rW   )r=   r   r  r  r  rG   rH   r(   r)   rY   rJ   Zout_hZ
expected_hZ	bin_sliceZo_binZe_binZe_unitr   r   r   rK     s*    


zTestHistogramFunctions.checkc              
   C   s  | j }| j}| jtj||jfd |jfd | jtj|ddgtj |jddgfd |jfd | jtj|ddgtj d|jddgfd|j |jfd | jtj|ddgtj ||jddgft	|jd	|j|jfd
 | jtj|ddgtj |d|jddgft	|jd	|j|j |jfd t
tj& t|ddgtj  W d    n1 sP0    Y  t
tj  t|ddg W d    n1 s0    Y  t
tj( t|jddgtj  W d    n1 s0    Y  d S )Nr  r  }   rF        ?r  Trf   densityr  r  rv  rw  r  r  r  )rw  r  r  r  r  )rQ   rw  rK   r   Z	histogramrB   rC   r9   r   dictr   r   r   r   )r=   rQ   rw  r   r   r   test_histogram  s>    



60z%TestHistogramFunctions.test_histogramc                 C   sJ  t g dtj }t |}t |j|j }t ||ksBJ t |ddgtj }t |jddg|j }t ||ksJ t	
tj& t |ddgtj  W d    n1 s0    Y  t	
tj  t |ddg W d    n1 s0    Y  t	
tj( t |jddgtj  W d    n1 s<0    Y  d S )Nr  r  rF  r  r  )r   r   r9   r:   Zhistogram_bin_edgesrB   rC   rE   r   r   r   r   r   )r=   rQ   Zout_bZ
expected_bZout2_bZexpected2_br   r   r   test_histogram_bin_edges7  s    
4.z/TestHistogramFunctions.test_histogram_bin_edgesc                 C   s  | j | j }}| j}| jtj|||j|jfd |j|jfd | jtj||d|j|jfd|j|j  |j|jfd | jtj||||j|jft|jd|j|j|jfd g dt	j
 }| jtj||d|g|j|jdtg d	gfd |j|jfd g d
t	j }| jtj|j|jd|g|j|jftdtg d	gdd t	jt	jfd tt$ t||dt	j  W d    n1 s0    Y  tt( t|j|jdt	j  W d    n1 s0    Y  tt	j( t||ddgt	j  W d    n1 s
0    Y  tt	j* t||ddgddgf W d    n1 sR0    Y  tt	j, t|j|jddgt	j  W d    n1 s0    Y  d S )Nr  Trf   r  rv  r  r   g?ro   r  r   r        Y@r      r  r  r  r  r  r  r  rF  )rQ   r  rw  rK   r   Zhistogram2drB   rC   r  r9   r:   r   r   rD  r   r   r  r   r   )r=   rQ   r  rw  inb_yinb2_yr   r   r   test_histogram2dJ  sL    




488:z'TestHistogramFunctions.test_histogram2dc                 C   s  | j | jf}| j j| jjf}| j j| jjf}| j}| jtj||fd |fd | jtj|d|fd| j j| jj  |fd | jtj|||ft|jd|j|fd g dt	j
 }| jtj|d|g|dtg d	gfd |fd g d
t	j }| jtj|d|g|ftdtg d	gdd t	jt	jffd tjjddt	j
 }| jtj||jfd |jfd fd | jtj|d d df |d d df |d d df f|jfd |jfd fd tt" t|dt	j  W d    n1 s0    Y  tt& t|ddgt	j  W d    n1 s&0    Y  tt& t|ddgt	j  W d    n1 sh0    Y  tt	j( t|ddgddgf W d    n1 s0    Y  tt	j. t|ddgt	j ddgf W d    n1 s0    Y  d S )Nr  Trf   r  rv  r  r  r  r  r  r  r  )r  r4   )r_   r4   r   rb   r  rF  )rQ   r  rC   rB   rw  rK   r   r  r  r9   r:   r   r   rD  ZrandomZnormalr   r   r  r   r   )r=   ZsampleZsample_unitsZsample_valuesrw  r  r  Zxyzr   r   r   test_histogramddy  sb    


42668z'TestHistogramFunctions.test_histogramddc                 C   sX   g dt j }g dt j }t||}t|j|jt jd  }t||ksTJ d S NrN  )r   rf   r   rb   )r9   r:   r   Z	correlaterB   rE   r=   Zx1x2rY   rJ   r   r   r   test_correlate  s
    z%TestHistogramFunctions.test_correlatec                 C   sX   g dt j }g dt j }t||}t|j|jt jd  }t||ksTJ d S r  )r9   r:   r   ZconvolverB   rE   r  r   r   r   test_convolve  s
    z$TestHistogramFunctions.test_convolvec                 C   s\   t ddgddgddggjtj }tt t | W d    n1 sN0    Y  d S Nr   rb   rf   )	r   r   Tr9   r:   r   r   r  Zcovr=   rQ   r   r   r   test_cov  s    $zTestHistogramFunctions.test_covc                 C   s\   t ddgddgddggjtj }tt t | W d    n1 sN0    Y  d S r  )	r   r   r  r9   r:   r   r   r  Zcorrcoefr  r   r   r   test_corrcoef  s    $z$TestHistogramFunctions.test_corrcoef)r,   r-   r.   r>   rK   r   r  r  r  r  r  r  r   r  r   r   r   r   r    s(   +
$

.
A


r  c                   @   s0   e Zd Zdd Zedd Zdd Zdd Zd	S )
TestSortFunctionsc                 C   s   |  tj d S rA   )rK   r   sortr<   r   r   r   	test_sort  s    zTestSortFunctions.test_sortc                 C   s   |  tj d S rA   )rK   r   Zsort_complexr<   r   r   r   test_sort_complex  s    z#TestSortFunctions.test_sort_complexc                 C   s   |  tj d S rA   )rK   r   Zmsortr<   r   r   r   
test_msort  s    zTestSortFunctions.test_msortc                 C   s   |  tjd d S ra   )rK   r   	partitionr<   r   r   r   test_partition  s    z TestSortFunctions.test_partitionN)r,   r-   r.   r  r   r  r  r  r   r   r   r   r    s
   
r  c                   @   s8   e Zd Zdd Zedd Zedd Zedd Zd	S )
TestStringFunctionsc                 C   s   t dtj | _d S r  )r   r7   r9   r  r;   r<   r   r   r   r>     s    zTestStringFunctions.setupc           	      C   s   t | j}t| jj}||ks$J t j| jdd}d}||ksDJ t j| jddtid}d}||ksjJ t | jd d d ddt jdti}||ksJ t j| jdd	tid}||ksJ d S )
Nz, )	separatorz[0., 1., 2.]rE   )r
  Z	formatterz[0.0 Jy, 1.0 Jy, 2.0 Jy]r   floatint)r   Zarray2stringr;   strrB   Z_NoValue)	r=   Zout0Z	expected0Zout1	expected1r  r  r   Zout4r   r   r   test_array2string  s    
z%TestStringFunctions.test_array2stringc                 C   s>   t | j}|dksJ | jd}t |}|dks:J d S )Nz!Quantity([0., 1., 2.], unit='Jy')f4z0Quantity([0., 1., 2.], unit='Jy', dtype=float32))r   Z
array_reprr;   Zastype)r=   rY   r   r  r   r   r   test_array_repr  s
    
z#TestStringFunctions.test_array_reprc                 C   s&   t | j}t| j}||ks"J d S rA   )r   Z	array_strr;   r  rL  r   r   r   test_array_str  s    
z"TestStringFunctions.test_array_strN)r,   r-   r.   r>   r   r  r  r  r   r   r   r   r	    s   

r	  c                   @   sP   e Zd Zdd Zedd Zedd Zedd Zed	d
 Zedd Z	dS )TestBitAndIndexFunctionsc                 C   s.   t dtj | _tjt dddd| _d S )Nr4   r:   Zu1)rg  )r   r7   r9   r:   r;   r   uint_qr<   r   r   r   r>     s    zTestBitAndIndexFunctions.setupc                 C   sp   t t t| j W d    n1 s,0    Y  t t t| j W d    n1 sb0    Y  d S rA   )r   r   r  r   Zpackbitsr;   r  r<   r   r   r   test_packbits  s    *z&TestBitAndIndexFunctions.test_packbitsc                 C   sp   t t t| j W d    n1 s,0    Y  t t t| j W d    n1 sb0    Y  d S rA   )r   r   r  r   Z
unpackbitsr;   r  r<   r   r   r   test_unpackbits$  s    *z(TestBitAndIndexFunctions.test_unpackbitsc                 C   st   t t t| jd W d    n1 s.0    Y  t t t| jd W d    n1 sf0    Y  d S Nr4   )r   r   r  r   Zunravel_indexr;   r  r<   r   r   r   test_unravel_index+  s    ,z+TestBitAndIndexFunctions.test_unravel_indexc                 C   sx   t t  t| jfd W d    n1 s00    Y  t t  t| jfd W d    n1 sj0    Y  d S r  )r   r   r  r   Zravel_multi_indexr;   r  r<   r   r   r   test_ravel_multi_index2  s    .z/TestBitAndIndexFunctions.test_ravel_multi_indexc                 C   sp   t t t| j W d    n1 s,0    Y  t t t| j W d    n1 sb0    Y  d S rA   )r   r   r  r   Zix_r;   r  r<   r   r   r   test_ix_9  s    *z!TestBitAndIndexFunctions.test_ix_N)
r,   r-   r.   r>   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 )TestDtypeFunctionsc                 C   s   |  tj d S rA   )rK   r   Zcommon_typer<   r   r   r   test_common_typeB  s    z#TestDtypeFunctions.test_common_typec                 C   s   |  tj d S rA   )rK   r   Zresult_typer<   r   r   r   test_result_typeE  s    z#TestDtypeFunctions.test_result_typec                 C   s$   |  tj| jj |  tjd d S )Nr  )rK   r   Zcan_castr;   rg  r<   r   r   r   test_can_castH  s    z TestDtypeFunctions.test_can_castc                 C   s2   t | jd }t | jjd }||ks.J d S )Nr   )r   Zmin_scalar_typer;   rB   rL  r   r   r   test_min_scalar_typeL  s    z'TestDtypeFunctions.test_min_scalar_typec                 C   s   |  tj d S rA   )rK   r   Ziscomplexobjr<   r   r   r   test_iscomplexobjQ  s    z$TestDtypeFunctions.test_iscomplexobjc                 C   s   |  tj d S rA   )rK   r   Z	isrealobjr<   r   r   r   test_isrealobjT  s    z!TestDtypeFunctions.test_isrealobjN)	r,   r-   r.   r  r  r  r  r   r!  r   r   r   r   r  A  s   r  c                   @   s   e Zd Zdd ZdS )TestMeshGridc                 C   sx   t dtj }t dtj }t ||\}}t |j|j\}}t |||j ks\J t |||j kstJ d S )Nr   r  )	r   r7   r9   r:   r   ZmeshgridrB   rE   rC   )r=   r   r   r   r   Ze1Ze2r   r   r   test_meshgridY  s    zTestMeshGrid.test_meshgridN)r,   r-   r.   r#  r   r   r   r   r"  X  s   r"  c                   @   s   e Zd Zdd Zdd ZdS )TestMemoryFunctionsc                 C   s   |  tj| jj d S rA   )rK   r   Zshares_memoryr;   rB   r<   r   r   r   test_shares_memoryc  s    z&TestMemoryFunctions.test_shares_memoryc                 C   s   |  tj| jj d S rA   )rK   r   Zmay_share_memoryr;   rB   r<   r   r   r   test_may_share_memoryf  s    z)TestMemoryFunctions.test_may_share_memoryN)r,   r-   r.   r%  r&  r   r   r   r   r$  b  s   r$  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zej	d	e
d
d
de
d
de
d
d
d
dfdd Zeej	d	e
dde
dde
d
dddfdd Zeej	d	e
 e
d
dfdd Zedd Zedd Zedd Zed d! Zed"d# Zd$d% Zd&S )'TestSetOpsFcuntionsc                 C   s>   t g dg dg dgtj | _t g dtj | _d S )N)r   ro   rT  )r   r  r   )r   ro   r   )r   r  r   g      i@)r   r   r9   r:   r;   r   r   r<   r   r   r   r>   k  s    
zTestSetOpsFcuntions.setupc                    s   | d jj}|g ||R i |}t fdd|D }|g ||R i |}t|tr|r~|d | f|dd   }t||D ]\}	}
t|	|
 qn|r|| }t|| d S )NrC   c                 3   s   | ]}|  jjV  qd S rA   )r   r;   rC   r   r<   r   r   rR   t  rS   z,TestSetOpsFcuntions.check.<locals>.<genexpr>r   rf   )r  r;   rC   rV   rU   rW   r   )r=   r   ZqsrG   rH   rC   rY   ZqvrJ   rI   er   r<   r   rK   q  s    
zTestSetOpsFcuntions.checkc                 O   s"   | j || jfg|R i | d S rA   )rK   r;   r=   r   rG   rH   r   r   r   check1  s    zTestSetOpsFcuntions.check1c                 O   s&   | j || j| jfg|R i | d S rA   )rK   r;   r   r)  r   r   r   check2  s    zTestSetOpsFcuntions.check2rH   T)return_indexreturn_inverse)return_counts)r,  r-  r.  c                 C   s   | j tjfi | d S rA   r*  r   uniquer=   rH   r   r   r   test_unique  s    zTestSetOpsFcuntions.test_uniquer   r   rf   F)r.  r-  r   c                 C   s   | j tjfi | d S rA   r/  r1  r   r   r   test_unique_more_complex  s    z,TestSetOpsFcuntions.test_unique_more_complex)Zreturn_indicesc                 C   s   | j tjfi | d S rA   )r+  r   Zintersect1dr1  r   r   r   test_intersect1d  s    z$TestSetOpsFcuntions.test_intersect1dc                 C   s   |  tj d S rA   )r+  r   Zsetxor1dr<   r   r   r   test_setxor1d  s    z!TestSetOpsFcuntions.test_setxor1dc                 C   s`   |  tj ttdtjgtdtj> }|jtju s@J t	|j
tdddtjg d S )Nr   r4   ro   r  )r+  r   Zunion1dr   ra  r7   r9   r:   rC   r   rB   r  r   r   r   test_union1d  s    $z TestSetOpsFcuntions.test_union1dc                 C   s   |  tj d S rA   )r+  r   Z	setdiff1dr<   r   r   r   test_setdiff1d  s    z"TestSetOpsFcuntions.test_setdiff1dc                 C   sl   | j tjd d ttd| js(J ttj$ tt	d| j W d    n1 s^0    Y  d S )NrC   rf   )
r+  r   Zin1dr  r   r   r   r9   r   r   r<   r   r   r   	test_in1d  s    zTestSetOpsFcuntions.test_in1dc                 C   s   | j tjd d d S )Nr8  )r+  r   Zisinr<   r   r   r   	test_isin  s    zTestSetOpsFcuntions.test_isinc                 C   s^   |  tj tdtj }tj|dtj dtj d}tj|jddd|j	 }t
|| d S )NrB  r  rf   )Zto_beginZto_endr  rK  )r*  r   Zediff1dr7   r9   r:   r   r   rB   rC   r   r  r   r   r   test_ediff1d  s
    z TestSetOpsFcuntions.test_ediff1dN)r,   r-   r.   r>   rK   r*  r+  r   r   r   r  r2  r   r3  r4  r5  r6  r7  r9  r:  r;  r   r   r   r   r'  j  sD   






r'  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestDatetimeFunctionsc                 C   s>   t t  t| j| j W d    n1 s00    Y  d S rA   )r   r   r  r   Zbusday_countr;   r<   r   r   r   test_busday_count  s    z'TestDatetimeFunctions.test_busday_countc                 C   s>   t t  t| j| j W d    n1 s00    Y  d S rA   )r   r   r  r   Zbusday_offsetr;   r<   r   r   r   test_busday_offset  s    z(TestDatetimeFunctions.test_busday_offsetc                 C   s:   t t t| j W d    n1 s,0    Y  d S rA   )r   r   r  r   Zdatetime_as_stringr;   r<   r   r   r   test_datetime_as_string  s    z-TestDatetimeFunctions.test_datetime_as_stringc                 C   s:   t t t| j W d    n1 s,0    Y  d S rA   )r   r   r  r   Z	is_busdayr;   r<   r   r   r   test_is_busday  s    z$TestDatetimeFunctions.test_is_busdayN)r,   r-   r.   r=  r>  r?  r@  r   r   r   r   r<    s   r<  r   c                 C   s2   | ddt j d}| dddt j }t|| d S )N   g?)d)r9   r   r   )r   rY   rJ   r   r   r   test_fft_frequencies  s    rC  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d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$TestFFTc                 C   s   t dddtj | _d S )Ng      `@r  r   )r   r7   r8   r9   r   r;   r<   r   r   r   r>     s    zTestFFT.setupc                 C   s   |  tjj d S rA   )rK   r   fftr<   r   r   r   test_fft  s    zTestFFT.test_fftc                 C   s   |  tjj d S rA   )rK   r   rE  Zifftr<   r   r   r   	test_ifft  s    zTestFFT.test_ifftc                 C   s   |  tjj d S rA   )rK   r   rE  Zrfftr<   r   r   r   	test_rfft  s    zTestFFT.test_rfftc                 C   s   |  tjj d S rA   )rK   r   rE  Zirfftr<   r   r   r   
test_irfft  s    zTestFFT.test_irfftc                 C   s   |  tjj d S rA   )rK   r   rE  Zfft2r<   r   r   r   	test_fft2  s    zTestFFT.test_fft2c                 C   s   |  tjj d S rA   )rK   r   rE  Zifft2r<   r   r   r   
test_ifft2  s    zTestFFT.test_ifft2c                 C   s   |  tjj d S rA   )rK   r   rE  Zrfft2r<   r   r   r   
test_rfft2  s    zTestFFT.test_rfft2c                 C   s   |  tjj d S rA   )rK   r   rE  Zirfft2r<   r   r   r   test_irfft2  s    zTestFFT.test_irfft2c                 C   s   |  tjj d S rA   )rK   r   rE  Zfftnr<   r   r   r   	test_fftn  s    zTestFFT.test_fftnc                 C   s   |  tjj d S rA   )rK   r   rE  Zifftnr<   r   r   r   
test_ifftn  s    zTestFFT.test_ifftnc                 C   s   |  tjj d S rA   )rK   r   rE  Zrfftnr<   r   r   r   
test_rfftn   s    zTestFFT.test_rfftnc                 C   s   |  tjj d S rA   )rK   r   rE  Zirfftnr<   r   r   r   test_irfftn  s    zTestFFT.test_irfftnc                 C   s   |  tjj d S rA   )rK   r   rE  Zhfftr<   r   r   r   	test_hfft  s    zTestFFT.test_hfftc                 C   s   |  tjj d S rA   )rK   r   rE  Zihfftr<   r   r   r   
test_ihfft	  s    zTestFFT.test_ihfftc                 C   s   |  tjj d S rA   )rK   r   rE  Zfftshiftr<   r   r   r   test_fftshift  s    zTestFFT.test_fftshiftc                 C   s   |  tjj d S rA   )rK   r   rE  Z	ifftshiftr<   r   r   r   test_ifftshift  s    zTestFFT.test_ifftshiftN)r,   r-   r.   r>   rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  r   r   r   r   rD    s"   rD  c                   @   s  e Zd Zdd Zdd Zdd Zedd Zd	d
 Zedd Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zd/S )0
TestLinAlgc                 C   s(   t g dg dg dgtj> | _d S )N)ro   rT  r  )r   r   rT  )rT  rT  ro   )r   r   r9   r:   r;   r<   r   r   r   r>     s    
zTestLinAlg.setupc                 C   s.   t j| j}t j| jj}||ks*J d S rA   )r   linalgZcondr;   rB   )r=   r  rJ   r   r   r   	test_cond  s    zTestLinAlg.test_condc                 C   s.   t j| j}t j| jj}||ks*J d S rA   )r   rW  matrix_rankr;   rB   )r=   rrQ   r   r   r   test_matrix_rank  s    zTestLinAlg.test_matrix_rankc                 C   s\   t dddd tj }dtj }t j||}t j|j|	|j
}||ksXJ d S )Nr3   r4   r   ro   )r   r7   r8   r9   r:   r   rW  rY  rB   r   rC   )r=   r;   ZtolZr2r  r   r   r   test_matrix_rank_with_tol$  s
    
z$TestLinAlg.test_matrix_rank_with_tolc                 C   sp   t j| jd}t|| j t j| jd}t|| j| j  t j| jd}t|| j| j | j | j  d S )Nrf   rb   r   )r   rW  matrix_powerr;   r   r  r   r   r   test_matrix_power-  s    zTestLinAlg.test_matrix_powerc                 C   sX   t j| jj| jj }t j| jd}t|| t j| jd}t||| |  d S )Nr   rP  )r   rW  invr;   rB   rC   r]  r   )r=   ZqinvZqm1Zqm3r   r   r   test_matrix_inv_power5  s
    
z TestLinAlg.test_matrix_inv_powerc                 C   sb   t j| j| jg}| j| j }t|| t j| j| j| jg}| j| j | j }t|| d S rA   )r   rW  Z	multi_dotr;   r   )r=   r   Zq2xr  Zq3xr   r   r   test_multi_dot=  s    
zTestLinAlg.test_multi_dotc           
      C   s   t dt dd d t jf  tj }t jj|dd\}}}t jj|jdd\}}}||jK }t	|| t	|| t	|| t
|t | | |sJ t jj|dd}t jj|jdd|j> }	t	||	 d S )NrB  r  F)Zfull_matrices)Z
compute_uv)r   r7   ry   r9   r:   rW  ZsvdrB   rC   r   r]  r   )
r=   r:   Zsvd_uZsvd_sZsvd_vtZsvd_uxZsvd_sxZsvd_vtxs2Zsvd_s2xr   r   r   test_svdF  s    (



zTestLinAlg.test_svdc                 C   s4   t j| j}t j| jj| jj }t|| d S rA   )r   rW  r_  r;   rB   rC   r   r=   r_  rJ   r   r   r   test_invU  s    zTestLinAlg.test_invc                 C   s|   t j| j}t j| jj| jj }t|| dtj }t j| j|}t j| jj|	| jj| jj }t|| d S )Nr  )
r   rW  pinvr;   rB   rC   r   r9   r   r   )r=   rf  rJ   rcondZpinv2r  r   r   r   	test_pinv[  s    

zTestLinAlg.test_pinvc                 C   s<   t jj| jdd}t jj| jjdd| jj }t|| d S )Nrf   )Zind)r   rW  Z	tensorinvr;   rB   rC   r   rd  r   r   r   test_tensorinvf  s    zTestLinAlg.test_tensorinvc                 C   s   t j| j}t j| jj}|| jj| jjd  K }t|| t	t jj
" t j| jd  W d    n1 sv0    Y  t	t jj
& t j| jd d  W d    n1 s0    Y  d S )Nr   r   )r   rW  detr;   rB   rC   rD   r   r   r   ZLinAlgError)r=   rj  rJ   r   r   r   test_detl  s    
0zTestLinAlg.test_detc                 C   sJ   t t, tj| j}t|ds(J W d    n1 s<0    Y  d S )NrC   )r   r   r  r   rW  Zslogdetr;   r   )r=   Zlogdetr   r   r   test_slogdetw  s    zTestLinAlg.test_slogdetc                 C   st   t g dtj tj }t j| j|}t j| jj|j}||j	| jj	 K }t
|| t| j| |spJ d S Nro   r  r5   )r   r   r9   r:   r   rW  Zsolver;   rB   rC   r   r]  r=   rf  rQ   xxr   r   r   
test_solve~  s    
zTestLinAlg.test_solvec                 C   st   t g dtj tj }t j| j|}t j| jj|j}||j	| jj	 K }t
|| t| j| |spJ d S rm  )r   r   r9   r:   r   rW  Ztensorsolver;   rB   rC   r   r]  ro  r   r   r   test_tensorsolve  s    
zTestLinAlg.test_tensorsolvec                 C   s  t g dtj tj }t jj| j|d d\}}}}t jj| jj|jd d\}}}}	||j	| jj	 K }||j	d K }|	| jj	K }	t
|| t
|| t
||	 ||ksJ t| j| |sJ t d}
t dtj }t jj|
|dtj d\}}}}t
|| t |dtjd  ks$J |dks2J t
|t g dtj>  ttj( t jj|
|dtj d W d    n1 s0    Y  d S )Nrn  )rg  rb   r4   ro   r   )ro   ro   ro   )r   r   r9   r:   r   rW  Zlstsqr;   rB   rC   r   r]  rx  r7   r   rE   rD  r   r   r   )r=   rf  rQ   Z	residualsZrankr   rp  Z
residualsxZrankxZsxr:   r   r   r   
test_lstsq  s,    



 
zTestLinAlg.test_lstsqc                 C   sr   t j| j}t j| jj| jj> }t|| t jj| jd dd}t jj| jd jddtj> }t|| d S )Nr   )ord)	r   rW  Znormr;   rB   rC   r   r9   rD  )r=   r  rJ   Zn1r  r   r   r   	test_norm  s    
zTestLinAlg.test_normc                 C   sh   t ddgddggtj }t j|}t j|j|jd > }t|| t	||j
  |sdJ d S )Nrf                 r  r  r   )r   r   r9   r:   rW  ZcholeskyrB   rC   r   r]  r  Zconj)r=   r;   ZcdZcdxr   r   r   test_cholesky  s
    
zTestLinAlg.test_choleskyc                 C   s~   t ddgddggtj }t j|\}}t j|j\}}|tjK }||jK }t	|| t	|| t
|| |szJ d S )Nrf   rv  r  r  )r   r   r9   r:   rW  ZqrrB   rD  rC   r   r]  )r=   r   r;   rZ  ZqxZrxr   r   r   test_qr  s    



zTestLinAlg.test_qrc                 C   s   t j| j\}}t j| jj\}}|| jjK }|tjK }t|| t|| t 	dtj
 }t j|\}}t|t ddtj
  t|t d d S )NrN  rf   r   r4   )r   rW  Zeigr;   rB   rC   r9   rD  r   r   r:   r7   rx  )r=   wr)   wxvxr;   r   r   r   test_eig  s    


zTestLinAlg.test_eigc                 C   sh   t j| j}t j| jj| jj> }t|| t dtj	 }t j|}t|t 
ddtj	  d S )NrN  rf   r   )r   rW  Zeigvalsr;   rB   rC   r   r   r9   r:   r7   )r=   ry  rz  r;   r   r   r   test_eigvals  s    
zTestLinAlg.test_eigvalsc                 C   sT   t j| j\}}t j| jj\}}|| jjK }|tjK }t|| t|| d S rA   )	r   rW  Zeighr;   rB   rC   r9   rD  r   )r=   ry  r)   rz  r{  r   r   r   	test_eigh  s    

zTestLinAlg.test_eighc                 C   s4   t j| j}t j| jj| jj> }t|| d S rA   )r   rW  Zeigvalshr;   rB   rC   r   )r=   ry  rz  r   r   r   test_eigvalsh  s    zTestLinAlg.test_eigvalshN)r,   r-   r.   r>   rX  r[  r   r\  r^  r`  ra  rc  re  rh  ri  rk  rl  rq  rr  rs  ru  rw  rx  r|  r}  r~  r  r   r   r   r   rV    sT   














	



	
rV  c                 C   s"   h | ]}|t jjj v r|qS r   )r   libZ	financialr   r   )rP   r   r   r   r   	<setcomp>  s   r  c                   C   s&   t jtrJ tt jtB ks"J d S rA   )r   r!   intersectionuntested_functionsall_wrappedr   r   r   r   test_testing_completeness  s    r  c                   @   sZ   e Zd Zejdeee	e
e e
e fddd Zedd Zedd Zd	S )
TestFunctionHelpersCompletenesszone, tworb   c                 C   s   | |rJ d S rA   )r  )r=   rD  Ztwor   r   r   test_no_duplicates  s    z2TestFunctionHelpersCompleteness.test_no_duplicatesc                 C   s0   t tB tt B tt B }t|ks,J d S rA   )r   r   r0   r   keysr   r  )r=   Zincluded_in_helpersr   r   r   test_all_included  s    

z1TestFunctionHelpersCompleteness.test_all_includedc                 C   s   t tksJ d S rA   )r	   r  r<   r   r   r   test_ignored_are_untested%  s    z9TestFunctionHelpersCompleteness.test_ignored_are_untestedN)r,   r-   r.   r   r   r   	itertoolscombinationsr   r   r0   r   r  r   r  r   r  r  r   r   r   r   r    s   



r  )`r  r   Znumpyr   Znumpy.testingr   r   Zastropyr   r9   Z.astropy.units.quantity_helper.function_helpersr   r   r   r   r   r	   Zastropy.utils.compatr
   r   r   Zxfailr   r   rE  rW  r    r0   r   r  rT   r   r2   r@   rM   rZ   re   r   r   r   r   r   r   r   r   r   r#  r*  r9  re  ru  r  r  r  r  r  r  r  r  r	  r  r  r"  r$  r'  r<  r   ZfftfreqZrfftfreqrC  rD  rV  r  Zfinancial_functionsZasscalaralenZdeprecated_functionsZsaveZsavezZsavetxtZsavez_compressedZio_functionsZpolyZpolyaddZpolyderZpolydivZpolyfitZpolyintZpolymulZpolysubZpolyvalrootsZvanderZpoly_functionsr  r  r   r   r   r   <module>   s    	W"$,3Ay.s=f@]G$, {-+
V
7 b
