U
    O8cH                     @   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 d0d1 d1Z"G d2d3 d3Z#G d4d5 d5Z$G d6d7 d7Z%G d8d9 d9Z&dS ):zTests for hermite module.

    )reduceNpolyval)assert_almost_equalassert_raisesassert_equalassert_         i      i   x   i`    ii  i @   ipi   i   i  ii4  i    i v  i i   i i   c                 C   s   t j| ddS )Ngư>)Ztol)hermhermtrimx r   G/tmp/pip-unpacked-wheel-fd_gsd75/numpy/polynomial/tests/test_hermite.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   Z
hermdomainselfr   r   r   test_hermdomain!   s    zTestConstants.test_hermdomainc                 C   s   t tjdg d S )Nr   )r   r   Zhermzeror   r   r   r   test_hermzero$   s    zTestConstants.test_hermzeroc                 C   s   t tjdg d S Nr	   )r   r   Zhermoner   r   r   r   test_hermone'   s    zTestConstants.test_hermonec                 C   s   t tjddg d S )Nr         ?)r   r   Zhermxr   r   r   r   
test_hermx*   s    zTestConstants.test_hermxN)__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 )TestArithmetic   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   hermaddr   r   r   ijmsgtgtresr   r   r   test_hermadd1   s    $zTestArithmetic.test_hermaddc                 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-   )r3   r4   r5   r6   r   Zhermsubr   r   r8   r   r   r   test_hermsub;   s    $zTestArithmetic.test_hermsubc                 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   r   Zhermmulxr3   )r   r9   Zserr<   r   r   r   test_hermmulxE   s    zTestArithmetic.test_hermmulxc           
      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/   r0   r1   )r3   r   hermvalr   hermmulr   lenr   )
r   r9   Zpol1Zval1r:   r;   Zpol2Zval2Zpol3Zval3r   r   r   test_hermmulM   s    zTestArithmetic.test_hermmulc           
      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/   r0   r   r	   r1   )r3   r   r7   ZhermdivrB   r   r   )
r   r9   r:   r;   cicjr<   Zquoremr=   r   r   r   test_hermdiv[   s    zTestArithmetic.test_hermdivc                 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/   r0   r	   r1   )
r3   r4   aranger   r   rB   arrayZhermpowr   r   )r   r9   r:   r;   cr<   r=   r   r   r   test_hermpowf   s    zTestArithmetic.test_hermpowN)r&   r'   r(   r4   linspacer   r>   r?   r@   rD   rH   rL   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
   r	   g       @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   .0rK   r   r   r   
<listcomp>   s     z/TestEvaluation.test_hermval.<locals>.<listcomp>
   r/   r1   r+   r
   )r   r   rA   sizer4   rM   Hlistr3   r   r5   shape)r   yr9   r;   r<   r=   Zdimsr   r   r   test_hermvalz   s    


zTestEvaluation.test_hermvalc           
      C   s   | j \}}}| j\}}}tttj||d d | j || }t||| j}t|| t	d}	t|	|	| j}t
|jdk d S Nr
   r
   r+   )r   rY   r   
ValueErrorr   	hermval2dc2dr   r4   onesr   rX   
r   x1x2x3y1y2Zy3r<   r=   zr   r   r   test_hermval2d   s    

zTestEvaluation.test_hermval2dc           
      C   s   | j \}}}| j\}}}tttj|||d d | j || | }t|||| j}t|| t	d}	t|	|	|	| j}t
|jdk d S r[   )r   rY   r   r]   r   	hermval3dc3dr   r4   r`   r   rX   ra   r   r   r   test_hermval3d   s    

zTestEvaluation.test_hermval3dc           
      C   sl   | j \}}}| j\}}}td||}t||| j}t|| td}	t|	|	| j}t	|j
dk d S )NrO   r\   )r
   r+   r
   r+   )r   rY   r4   einsumr   Z
hermgrid2dr_   r   r`   r   rX   ra   r   r   r   test_hermgrid2d   s    

zTestEvaluation.test_hermgrid2dc           
      C   sr   | j \}}}| j\}}}td|||}t|||| j}t|| td}	t|	|	|	| j}t	|j
dk d S )NrP   r\   )r
   r+   r
   r+   r
   r+   )r   rY   r4   rl   r   Z
hermgrid3drj   r   r`   r   rX   ra   r   r   r   test_hermgrid3d   s    

zTestEvaluation.test_hermgrid3dN)r&   r'   r(   r4   rJ   Zc1drl   r_   rj   randomr   r   rY   rZ   rh   rk   rm   rn   r   r   r   r   rN   p   s   rN   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   r	   )lbnd)sclaxisr
   r.   )mk)ru   rv   rq   )ru   rv   rr   ru   )r   	TypeErrorr   hermintr]   r3   r   	poly2herm	herm2polyr   rA   list)
r   r9   rv   r=   rr   polr<   Zhermpolry   r:   r   r   r   test_hermint   s    




zTestIntegral.test_hermintc                 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+   r   c                 S   s   g | ]}t |qS r   r   ry   rR   r   r   r   rT   '  s     z2TestIntegral.test_hermint_axis.<locals>.<listcomp>r   rs   c                 S   s   g | ]}t |qS r   r   rR   r   r   r   rT   +  s     r	   c                 S   s   g | ]}t j|d dqS )r+   )rv   r   rR   r   r   r   rT   /  s     r+   )rv   rt   )r4   ro   vstackTr   ry   r   r   r_   r<   r=   r   r   r   test_hermint_axis#  s    

zTestIntegral.test_hermint_axisN)r&   r'   r(   r~   r   r   r   r   r   rp      s   Srp   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   r$   r   r.   r	   rw   r
   )ru   rr   )
r   rx   r   hermderr]   r3   r   r   ry   r   )r   r9   r<   r=   r:   r   r   r   test_hermder6  s     zTestDerivative.test_hermderc                 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 )Nr   c                 S   s   g | ]}t |qS r   r   r   rR   r   r   r   rT   S  s     z4TestDerivative.test_hermder_axis.<locals>.<listcomp>r   rs   c                 S   s   g | ]}t |qS r   r   rR   r   r   r   rT   W  s     r	   )r4   ro   r   r   r   r   r   r   r   r   r   test_hermder_axisO  s    
z TestDerivative.test_hermder_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 )
TestVanderrQ   r
   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+   r   r   r   r	   .r
   r.      )r+   r
   r   )
r4   rI   r   
hermvanderr   rX   r3   r   rA   rJ   )r   r   vr9   coefr   r   r   test_hermvander`  s    
zTestVander.test_hermvanderc                 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 )Nr\   r	   r
   )r	   r.   r   )r   r4   ro   r   Zhermvander2dr^   dotflatr   r   rX   r   rb   rc   rd   rK   Zvanr<   r=   r   r   r   test_hermvander2dq  s    
zTestVander.test_hermvander2dc                 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)r
   r+   r   r	   r
   r+   )r	   r.      )r   r4   ro   r   Zhermvander3dri   r   r   r   r   rX   r   r   r   r   test_hermvander3d~  s    
zTestVander.test_hermvander3dN)	r&   r'   r(   r4   ro   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	   r
   r   r   r   r   r   f  s    z#TestFitting.test_hermfit.<locals>.fc                 S   s   | d | d  d S )Nr   r
   r	   r   r   r   r   r   f2  s    z$TestFitting.test_hermfit.<locals>.f2r	   r   r   r
   )wr   r+   r   r.   y              ?y             r$   )r   r]   r   Zhermfitrx   r4   rM   r   rC   r   rA   rJ   r   Z
zeros_likecopy)r   r   r   r   rY   Zcoef3Zcoef4Zcoef2dr   ZywZwcoef3Zwcoef2dZcoef1Zcoef2r   r   r   test_hermfit  sp    "


&zTestFitting.test_hermfitN)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   r]   r   hermcompanionr   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   )r3   r   r   r   rX   )r   r9   r   r   r   r   test_dimensions  s    zTestCompanion.test_dimensionsc                 C   s   t tddgd dk d S )Nr	   r
   )r   r   g      п)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tj
}t| | d S )Nr,   c   r	   )r   Z	hermgaussr   r4   r   r   sqrtZdiagonalr   Zeyepisum)r   r   r   r   vvZvdr<   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   r
   r   )r   hermfromrootsr   r   r3   r4   cosrM   r   rA   r   rC   r{   )r   r=   r9   rootsr}   r<   r   r   r   test_hermfromroots  s    
*
zTestMisc.test_hermfromrootsc                 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	   g      r
   r.   r   )r   r   Z	hermrootsr3   r4   rM   r   r   )r   r9   r<   r=   r   r   r   test_hermroots	  s    zTestMisc.test_hermrootsc                 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 )Nr
   r   r	   r   r*   )r   r]   r   r   r   )r   r   r   r   r   test_hermtrim  s
    zTestMisc.test_hermtrimc                 C   s   t tddddg d S )Nr+   r   r
   )r   r   Zhermliner   r   r   r   test_hermline  s    zTestMisc.test_hermlinec                 C   s2   t dD ]$}ttdg| dg t|  qd S NrU   r   r	   )r3   r   r   r{   rW   r   r9   r   r   r   test_herm2poly  s    zTestMisc.test_herm2polyc                 C   s2   t dD ]$}ttt| dg| dg  qd S r   )r3   r   r   rz   rW   r   r   r   r   test_poly2herm#  s    zTestMisc.test_poly2hermc                 C   s6   t ddd}t |d  }t|}t|| d S )Nr.      r
   )r4   rM   expr   Z
hermweightr   )r   r   r<   r=   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numpyr4   Znumpy.polynomial.hermiteZ
polynomialZhermiter   Znumpy.polynomial.polynomialr   Znumpy.testingr   r   r   r   rJ   ZH0ZH1ZH2ZH3ZH4ZH5ZH6ZH7ZH8ZH9rW   r   r   r)   rN   rp   r   r   r   r   r   r   r   r   r   r   <module>   s6   B^f(0M