U
    O8cI                     @   s  d Z ddlmZ ddlZddlm  mZ ddl	m
Z
 ddlmZmZmZmZ edgZeddgZedddgZeddddgZed	dd
ddgZeddddddgZedddddddgZeddddddddgZedddddddddg	Zeddddddddddg
Zeeeeeeeeeeg
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&dS )/zTests for hermite_e module.

    )reduceNpolyval)assert_almost_equalassert_raisesassert_equalassert_      i   ii-   ii   ii\   ii  iiz  ic                 C   s   t j| ddS )Ngư>)Ztol)herme	hermetrimx r   I/tmp/pip-unpacked-wheel-fd_gsd75/numpy/polynomial/tests/test_hermite_e.pytrim   s    r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestConstantsc                 C   s   t tjddg d S )Nr
   r	   )r   r   Zhermedomainselfr   r   r   test_hermedomain!   s    zTestConstants.test_hermedomainc                 C   s   t tjdg d S )Nr   )r   r   Z	hermezeror   r   r   r   test_hermezero$   s    zTestConstants.test_hermezeroc                 C   s   t tjdg d S Nr	   )r   r   Zhermeoner   r   r   r   test_hermeone'   s    zTestConstants.test_hermeonec                 C   s   t tjddg d S )Nr   r	   )r   r   Zhermexr   r   r   r   test_hermex*   s    zTestConstants.test_hermexN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   r   c                   @   sJ   e Zd ZedddZdd Zdd Zdd	 Zd
d Z	dd Z
dd ZdS )TestArithmeticr   r   d   c                 C   s   t dD ]}t dD ]}d| d| }tt||d }||  d7  < ||  d7  < tdg| dg dg| dg }tt|t||d qqd S N   At i=, j=r	   r   err_msg)rangenpzerosmaxr   hermeaddr   r   r   ijmsgtgtresr   r   r   test_hermeadd1   s    $zTestArithmetic.test_hermeaddc                 C   s   t dD ]}t dD ]}d| d| }tt||d }||  d7  < ||  d8  < tdg| dg dg| dg }tt|t||d qqd S r%   )r+   r,   r-   r.   r   Zhermesubr   r   r0   r   r   r   test_hermesub;   s    $zTestArithmetic.test_hermesubc                 C   sv   t tdgdg t tdgddg tddD ]<}dg| dg }dg|d  |ddg }t t|| q4d S )Nr   r	   r&   )r   r   Z	hermemulxr+   )r   r1   Zserr4   r   r   r   test_hermemulxE   s    zTestArithmetic.test_hermemulxc           
      C   s   t dD ]}dg| dg }t| j|}t dD ]x}d| d| }dg| dg }t| j|}t||}t| j|}	tt||| d k| t|	|| |d q2qd S )Nr&   r   r	   r'   r(   r)   )r+   r   hermevalr   hermemulr   lenr   )
r   r1   Zpol1Zval1r2   r3   Zpol2Zval2Zpol3Zval3r   r   r   test_hermemulM   s    zTestArithmetic.test_hermemulc           
      C   s   t dD ]}t dD ]z}d| d| }dg| dg }dg| dg }t||}t||\}}tt|||}	tt|	t||d qqd S )Nr&   r'   r(   r   r	   r)   )r+   r   r/   Zhermedivr:   r   r   )
r   r1   r2   r3   cicjr4   Zquoremr5   r   r   r   test_hermediv[   s    zTestArithmetic.test_hermedivc                 C   s|   t dD ]n}t dD ]`}d| d| }t|d }ttj|g| tdg}t||}tt	|t	||d qqd S )Nr&   r'   r(   r	   r)   )
r+   r,   aranger   r   r:   arrayZhermepowr   r   )r   r1   r2   r3   cr4   r5   r   r   r   test_hermepowf   s    zTestArithmetic.test_hermepowN)r    r!   r"   r,   linspacer   r6   r7   r8   r<   r@   rD   r   r   r   r   r#   .   s   

r#   c                   @   s   e Zd ZedddgZedeeZedeeeZej		dd d Z
ee
d	ddgZd
d Zdd Zdd Zdd Zdd ZdS )TestEvaluationg      @g       @g      @i,j->ij
i,j,k->ijkr   r&      r	   g      ?c                    s   t tg dgjd tdd  fddtD }tdD ]<}d| }|| }t dg| dg }t|||d q<td	D ]`}d
g| }t	| t t dgj
| t t ddgj
| t t dddgj
| qd S )Nr	   r   r
   c                    s   g | ]}t  |qS r   r   .0rC   r   r   r   
<listcomp>   s     z0TestEvaluation.test_hermeval.<locals>.<listcomp>
   r'   r)   r   rJ   )r   r   r9   sizer,   rE   Helistr+   r   r-   shape)r   yr1   r3   r4   r5   Zdimsr   r   r   test_hermevalz   s    


zTestEvaluation.test_hermevalc           
      C   s   | j \}}}| j\}}}tttj||d d | j || }t||| j}t|| t	d}	t|	|	| j}t
|jdk d S NrJ   rJ   r   )r   rR   r   
ValueErrorr   
hermeval2dc2dr   r,   onesr   rQ   
r   x1x2x3y1y2Zy3r4   r5   zr   r   r   test_hermeval2d   s    

zTestEvaluation.test_hermeval2dc           
      C   s   | j \}}}| j\}}}tttj|||d d | j || | }t|||| j}t|| t	d}	t|	|	|	| j}t
|jdk d S rT   )r   rR   r   rV   r   
hermeval3dc3dr   r,   rY   r   rQ   rZ   r   r   r   test_hermeval3d   s    

zTestEvaluation.test_hermeval3dc           
      C   sl   | j \}}}| j\}}}td||}t||| j}t|| td}	t|	|	| j}t	|j
dk d S )NrG   rU   )rJ   r   rJ   r   )r   rR   r,   einsumr   Zhermegrid2drX   r   rY   r   rQ   rZ   r   r   r   test_hermegrid2d   s    

zTestEvaluation.test_hermegrid2dc           
      C   sr   | j \}}}| j\}}}td|||}t|||| j}t|| td}	t|	|	|	| j}t	|j
dk d S )NrH   rU   )rJ   r   rJ   r   rJ   r   )r   rR   r,   re   r   Zhermegrid3drc   r   rY   r   rQ   rZ   r   r   r   test_hermegrid3d   s    

zTestEvaluation.test_hermegrid3dN)r    r!   r"   r,   rB   Zc1dre   rX   rc   randomr   r   rR   rS   ra   rd   rf   rg   r   r   r   r   rF   p   s   rF   c                   @   s   e Zd Zdd Zdd ZdS )TestIntegralc           
   	   C   s2  t ttjdgd t ttjdgd t ttjdgdddg t ttjdgdgd t ttjdgdgd t ttjdgdd tdd	D ]8}dg|d  dg }tjdg||d
}t|ddg qtd	D ]n}|d }dg| dg }|gdg|  d| g }t|}tj|d|gd
}t|}tt	|t	| qtd	D ]N}|d }dg| dg }t|}tj|d|gdd}tt
d|| q@td	D ]r}|d }dg| dg }|gdg|  d| g }t|}tj|d|gdd}t|}tt	|t	| qtd	D ]r}tdd	D ]`}	dg| dg }|d d  }t|	D ]}tj|dd}qJtj||	d}tt	|t	| q"qtd	D ]}tdd	D ]n}	dg| dg }|d d  }t|	D ]}tj|d|gd
}qtj||	tt|	d
}tt	|t	| qqtd	D ]}tdd	D ]r}	dg| dg }|d d  }t|	D ]}tj|d|gdd}qPtj||	tt|	dd}tt	|t	| q(qtd	D ]}tdd	D ]r}	dg| dg }|d d  }t|	D ]}tj|d|gdd}qtj||	tt|	dd}tt	|t	| qqd S )Nr         ?r
   r	   )lbnd)sclaxisrJ   r&   )mk)ro   rp   rk   )ro   rp   rl   ro   )r   	TypeErrorr   hermeintrV   r+   r   
poly2herme
herme2polyr   r9   list)
r   r1   rp   r5   rl   polr4   Zhermepolrs   r2   r   r   r   test_hermeint   s    




zTestIntegral.test_hermeintc                 C   s   t jd}t dd |jD j}tj|dd}t|| t dd |D }tj|dd}t|| t dd |D }tj|d	dd
}t|| d S )Nr      c                 S   s   g | ]}t |qS r   r   rs   rK   r   r   r   rM   '  s     z3TestIntegral.test_hermeint_axis.<locals>.<listcomp>r   rm   c                 S   s   g | ]}t |qS r   r{   rK   r   r   r   rM   +  s     r	   c                 S   s   g | ]}t j|d dqS )r   )rp   r{   rK   r   r   r   rM   /  s     r   )rp   rn   )r,   rh   vstackTr   rs   r   r   rX   r4   r5   r   r   r   test_hermeint_axis#  s    

zTestIntegral.test_hermeint_axisN)r    r!   r"   rx   r   r   r   r   r   ri      s   Sri   c                   @   s   e Zd Zdd Zdd ZdS )TestDerivativec                 C   s  t ttjdgd t ttjdgd tdD ]4}dg| dg }tj|dd}tt|t| q,tdD ]N}tddD ]>}dg| dg }tjtj||d|d}t	t|t| qxqjtdD ]R}tddD ]B}dg| dg }tjtj||dd|dd}t	t|t| qqd S )	Nr   rj   r
   r&   r	   rq   rJ   )ro   rl   )
r   rr   r   hermederrV   r+   r   r   rs   r   )r   r1   r4   r5   r2   r   r   r   test_hermeder6  s(      zTestDerivative.test_hermederc                 C   sl   t jd}t dd |jD j}tj|dd}t|| t dd |D }tj|dd}t|| d S )Nry   c                 S   s   g | ]}t |qS r   r   r   rK   r   r   r   rM   T  s     z5TestDerivative.test_hermeder_axis.<locals>.<listcomp>r   rm   c                 S   s   g | ]}t |qS r   r   rK   r   r   r   rM   X  s     r	   )r,   rh   r|   r}   r   r   r   r~   r   r   r   test_hermeder_axisP  s    
z!TestDerivative.test_hermeder_axisN)r    r!   r"   r   r   r   r   r   r   r   4  s   r   c                   @   s8   e Zd Zejdd d Zdd Zdd Zdd	 Zd
S )
TestVanderrI   rJ   r	   c                 C   s   t d}t|d}t|jdk tdD ].}dg| dg }t|d|f t|| q,t 	ddgddgdd	gg}t|d}t|jd
k tdD ].}dg| dg }t|d|f t|| qd S )Nr   ry   rz   r   r	   .rJ   r&      )r   rJ   rz   )
r,   rA   r   hermevanderr   rQ   r+   r   r9   rB   )r   r   vr1   coefr   r   r   test_hermevandera  s    
zTestVander.test_hermevanderc                 C   sx   | j \}}}tjd}t||ddg}t|||}t||j}t|| t|g|gddg}t	|j
dk d S )NrU   r	   rJ   )r	   r&   r   )r   r,   rh   r   Zhermevander2drW   dotflatr   r   rQ   r   r[   r\   r]   rC   Zvanr4   r5   r   r   r   test_hermevander2dr  s    
zTestVander.test_hermevander2dc                 C   s   | j \}}}tjd}t|||dddg}t||||}t||j}t|| t|g|g|gdddg}t	|j
dk d S )N)rJ   r   rz   r	   rJ   r   )r	   r&      )r   r,   rh   r   Zhermevander3drb   r   r   r   r   rQ   r   r   r   r   test_hermevander3d  s    
zTestVander.test_hermevander3dN)	r    r!   r"   r,   rh   r   r   r   r   r   r   r   r   r   ]  s   r   c                   @   s   e Zd Zdd ZdS )TestFittingc              	   C   s&  dd }dd }t ttjdgdgd t ttjdggdgd t ttjg dgd t ttjdgdgggd t ttjddgdgd t ttjdgddgd t ttjdgdgddggd	 t ttjdgdgdddgd	 t ttjdgdgdg t ttjdgdgddd
g t ttjdgdgg  tdd}||}t||d}tt|d t	t
||| t||ddddg}tt|d t	t
||| t||d}tt|d t	t
||| t||dddddg}tt|d t	t
||| t||dddddg}tt|d t	t
||| t|t||gjd}t	|t||gj t|t||gjddddg}t	|t||gj t|}| }	d|dd d< d|dd d< tj||	d|d	}
t	|
| tj||	ddddg|d	}
t	|
| tj|t|	|	gjd|d	}t	|t||gj tj|t|	|	gjddddg|d	}t	|t||gj ddddg}t	t||dddg t	t||ddgddg tdd}||}t||d}t	t
||| t||dddg}t	t
||| t	|| d S )Nc                 S   s   | | d  | d  S )Nr	   rJ   r   r   r   r   r   f  s    z$TestFitting.test_hermefit.<locals>.fc                 S   s   | d | d  d S )Nrz   rJ   r	   r   r   r   r   r   f2  s    z%TestFitting.test_hermefit.<locals>.f2r	   r
   r   rJ   )wr   r   rz   r&   y              ?y             )r   rV   r   Zhermefitrr   r,   rE   r   r;   r   r9   rB   r}   Z
zeros_likecopy)r   r   r   r   rR   Zcoef3Zcoef4Zcoef2dr   ZywZwcoef3Zwcoef2dZcoef1Zcoef2r   r   r   test_hermefit  sp    "


&zTestFitting.test_hermefitN)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 )TestCompanionc                 C   s"   t ttjg  t ttjdg d S r   )r   rV   r   hermecompanionr   r   r   r   test_raises  s    zTestCompanion.test_raisesc                 C   s<   t ddD ],}dg| dg }tt|j||fk q
d S )Nr	   r&   r   )r+   r   r   r   rQ   )r   r1   r   r   r   r   test_dimensions  s    zTestCompanion.test_dimensionsc                 C   s   t tddgd dk d S )Nr	   rJ   )r   r         )r   r   r   r   r   r   r   test_linear_root  s    zTestCompanion.test_linear_rootN)r    r!   r"   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )	TestGaussc                 C   s   t d\}}t |d}t|j| |}dt|  }|d d d f | | }t|t	d tdtj
 }t| | d S )Nr$   c   r	   rJ   )r   Z
hermegaussr   r,   r   r}   sqrtZdiagonalr   Zeyepisum)r   r   r   r   vvZvdr4   r   r   r   test_100  s    zTestGauss.test_100N)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 )TestMiscc              	   C   s   t g }tt|dg tddD ]z}tttj dd| d dd d }t |}t 	||}d}t
t||d k tt |d d t|| q$d S )Nr	   r&   r   rJ   r
   )r   hermefromrootsr   r   r+   r,   cosrE   r   r9   r   r;   ru   )r   r5   r1   rootsrw   r4   r   r   r   test_hermefromroots  s    
*
zTestMisc.test_hermefromrootsc                 C   sl   t tdgg  t tddgdg tddD ]4}tdd|}tt|}t t|t| q2d S )Nr	   r
   rJ   r&   )r   r   Z
hermerootsr+   r,   rE   r   r   )r   r1   r4   r5   r   r   r   test_hermeroots
  s    zTestMisc.test_hermerootsc                 C   sf   ddddg}t ttj|d tt||d d  tt|d|d d  tt|ddg d S )NrJ   r
   r	   r   r   )r   rV   r   r   r   )r   r   r   r   r   test_hermetrim  s
    zTestMisc.test_hermetrimc                 C   s   t tddddg d S )Nr   rz   )r   r   Z	hermeliner   r   r   r   test_hermeline  s    zTestMisc.test_hermelinec                 C   s2   t dD ]$}ttdg| dg t|  qd S NrN   r   r	   )r+   r   r   ru   rP   r   r1   r   r   r   test_herme2poly   s    zTestMisc.test_herme2polyc                 C   s2   t dD ]$}ttt| dg| dg  qd S r   )r+   r   r   rt   rP   r   r   r   r   test_poly2herme$  s    zTestMisc.test_poly2hermec                 C   s8   t ddd}t d|d  }t|}t|| d S )Nr&      r   rJ   )r,   rE   expr   Zhermeweightr   )r   r   r4   r5   r   r   r   test_weight(  s    
zTestMisc.test_weightN)
r    r!   r"   r   r   r   r   r   r   r   r   r   r   r   r     s   r   )'__doc__	functoolsr   Znumpyr,   Znumpy.polynomial.hermite_eZ
polynomialZ	hermite_er   Znumpy.polynomial.polynomialr   Znumpy.testingr   r   r   r   rB   ZHe0ZHe1ZHe2ZHe3ZHe4ZHe5ZHe6ZHe7ZHe8ZHe9rP   r   r   r#   rF   ri   r   r   r   r   r   r   r   r   r   r   <module>   s6   B^f)0M