B
    F0dH                 @   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d	 Zedd
ddgd	 Zedddddgd Zeddddddgd Zedddddddgd Zeddddddddgd Zedddddddddg	d Zedddd dd!dd"dd#g
d 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 legendre module.

    )reduceN)polyval)assert_almost_equalassert_raisesassert_equalassert_            i#         i?   i   i      ii;  iKi  ii  ii#     iibF  iti{/  c             C   s   t j| ddS )Ngư>)Ztol)leglegtrim)x r   V/var/www/html/venv/lib/python3.7/site-packages/numpy/polynomial/tests/test_legendre.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	legdomain)selfr   r   r   test_legdomain!   s    zTestConstants.test_legdomainc             C   s   t tjdg d S )Nr   )r   r   Zlegzero)r   r   r   r   test_legzero$   s    zTestConstants.test_legzeroc             C   s   t tjdg d S )Nr   )r   r   Zlegone)r   r   r   r   test_legone'   s    zTestConstants.test_legonec             C   s   t tjddg d S )Nr   r   )r   r   Zlegx)r   r   r   r   	test_legx*   s    zTestConstants.test_legxN)__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   xt dD ]}xt 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W q
W d S )Nr   zAt i=z, j=r   r   )err_msg)rangenpzerosmaxr   legaddr   r   )r   ijmsgtgtresr   r   r   test_legadd1   s    $zTestArithmetic.test_legaddc             C   s   xt dD ]}xt 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W q
W d S )Nr   zAt i=z, j=r   r   )r(   )r)   r*   r+   r,   r   Zlegsubr   r   )r   r.   r/   r0   r1   r2   r   r   r   test_legsub;   s    $zTestArithmetic.test_legsubc             C   s   t tdgdg t tdgddg xbtddD ]T}d| d }dg| dg }dg|d  || d|d | g }t t|| q6W d S )Nr   r   r   r   )r   r   Zlegmulxr)   )r   r.   tmpZserr1   r   r   r   test_legmulxE   s    $zTestArithmetic.test_legmulxc       
      C   s   xt dD ]}dg| dg }t| j|}xt dD ]x}d| d| }dg| dg }t| j|}t||}t| j|}	tt||| d k| t|	|| |d q6W q
W d S )Nr   r   r   zAt i=z, j=)r(   )r)   r   legvalr   legmulr   lenr   )
r   r.   Zpol1Zval1r/   r0   Zpol2Zval2Zpol3Zval3r   r   r   test_legmulN   s    zTestArithmetic.test_legmulc       
      C   s   xt dD ]}xt dD ]z}d| d| }dg| dg }dg| dg }t||}t||\}}tt|||}	tt|	t||d qW q
W d S )Nr   zAt i=z, j=r   r   )r(   )r)   r   r-   Zlegdivr8   r   r   )
r   r.   r/   r0   cicjr1   Zquoremr2   r   r   r   test_legdiv\   s    zTestArithmetic.test_legdivc             C   s   x~t dD ]r}xlt dD ]`}d| d| }t|d }ttj|g| tdg}t||}tt	|t	||d qW q
W d S )Nr   zAt i=z, j=r   )r(   )
r)   r*   aranger   r   r8   arrayZlegpowr   r   )r   r.   r/   r0   cr1   r2   r   r   r   test_legpowg   s    zTestArithmetic.test_legpowN)r#   r$   r%   r*   linspacer   r3   r4   r6   r:   r>   rB   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       @zi,j->ijz
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 }xHtdD ]<}d| }|| }t dg| dg }t|||d q>W xltd	D ]`}d
g| }t	| t t dgj
| t t ddgj
| t t dddgj
| qW d S )Nr   r   r	   c                s   g | ]}t  |qS r   )r   ).0rA   )r   r   r   
<listcomp>   s    z.TestEvaluation.test_legval.<locals>.<listcomp>
   zAt i=)r(   r
   r   )r   r   r7   sizer*   rC   Llistr)   r   r+   shape)r   yr.   r0   r1   r2   Zdimsr   )r   r   test_legval{   s    


zTestEvaluation.test_legvalc       
      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   rK   r   
ValueErrorr   legval2dc2dr   r*   onesr   rJ   )
r   x1x2x3y1y2y3r1   r2   zr   r   r   test_legval2d   s    

zTestEvaluation.test_legval2dc       
      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   rK   r   rM   r   legval3dc3dr   r*   rP   r   rJ   )
r   rQ   rR   rS   rT   rU   rV   r1   r2   rW   r   r   r   test_legval3d   s    

zTestEvaluation.test_legval3dc       
      C   sl   | j \}}}| j\}}}td||}t||| j}t|| td}	t|	|	| j}t	|j
dk d S )Nzi,j->ij)r   r
   )r   r
   r   r
   )r   rK   r*   einsumr   Z	leggrid2drO   r   rP   r   rJ   )
r   rQ   rR   rS   rT   rU   rV   r1   r2   rW   r   r   r   test_leggrid2d   s    

zTestEvaluation.test_leggrid2dc       
      C   sr   | j \}}}| j\}}}td|||}t|||| j}t|| td}	t|	|	|	| j}t	|j
dk d S )Nz
i,j,k->ijk)r   r
   )r   r
   r   r
   r   r
   )r   rK   r*   r\   r   Z	leggrid3drZ   r   rP   r   rJ   )
r   rQ   rR   rS   rT   rU   rV   r1   r2   rW   r   r   r   test_leggrid3d   s    

zTestEvaluation.test_leggrid3dN)r#   r$   r%   r*   r@   Zc1dr\   rO   rZ   randomr   r   rK   rL   rX   r[   r]   r^   r   r   r   r   rD   q   s   rD   c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestIntegralc       
   	   C   sr  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 xFtdd	D ]8}dg|d  dg }tjdg||d
}t|ddg qW xztd	D ]n}|d }dg| dg }|gdg|  d| g }t|}tj|d|gd
}t|}tt	|t	| qW xZtd	D ]N}|d }dg| dg }t|}tj|d|gdd}tt
d|| qJW x~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	| qW xtd	D ]z}xrtdd	D ]d}	dg| dg }|d d  }x t|	D ]}tj|dd}q`W tj||	d}tt	|t	| q6W q&W xtd	D ]}xtdd	D ]r}	dg| dg }|d d  }x$t|	D ]}tj|d|gd
}qW tj||	tt|	d
}tt	|t	| qW qW xtd	D ]}xtdd	D ]v}	dg| dg }|d d  }x&t|	D ]}tj|d|gdd}q~W tj||	tt|	dd}tt	|t	| qTW qDW xtd	D ]}xtdd	D ]v}	dg| dg }|d d  }x&t|	D ]}tj|d|gdd}qW tj||	tt|	dd}tt	|t	| qW qW d S )Nr   g      ?r	   r   )lbnd)scl)axisr   r   )mk)rd   re   ra   )rd   re   rb   )rd   )r   	TypeErrorr   legintrM   r)   r   poly2legleg2polyr   r7   list)
r   r.   re   r2   rb   polr1   Zlegpolrg   r/   r   r   r   test_legint   s    




zTestIntegral.test_legintc             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   rg   )rE   rA   r   r   r   rF   (  s    z1TestIntegral.test_legint_axis.<locals>.<listcomp>r   )rc   c             S   s   g | ]}t |qS r   )r   rg   )rE   rA   r   r   r   rF   ,  s    r   c             S   s   g | ]}t j|d dqS )r
   )re   )r   rg   )rE   rA   r   r   r   rF   0  s    r
   )re   rc   )r*   r_   vstackTr   rg   r   )r   rO   r1   r2   r   r   r   test_legint_axis$  s    

zTestIntegral.test_legint_axisc             C   s   t tddd d S )N)r   r   r
   r   )r   r   rg   )r   r   r   r   test_legint_zerointord4  s    z#TestIntegral.test_legint_zerointordN)r#   r$   r%   rl   rp   rq   r   r   r   r   r`      s   Sr`   c               @   s$   e Zd Zd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 x@tdD ]4}dg| dg }tj|dd}tt|t| q.W x^tdD ]R}xLtddD ]>}dg| dg }tjtj||d|d}t	t|t| qW qpW xbtdD ]V}xPtddD ]B}dg| dg }tjtj||dd|dd}t	t|t| qW qW d S )	Nr   g      ?r	   r   r   )rd   r   )rd   rb   )
r   rf   r   legderrM   r)   r   r   rg   r   )r   r.   r1   r2   r/   r   r   r   test_legder:  s     zTestDerivative.test_legderc             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 )N)r
   rm   c             S   s   g | ]}t |qS r   )r   rs   )rE   rA   r   r   r   rF   W  s    z3TestDerivative.test_legder_axis.<locals>.<listcomp>r   )rc   c             S   s   g | ]}t |qS r   )r   rs   )rE   rA   r   r   r   rF   [  s    r   )r*   r_   rn   ro   r   rs   r   )r   rO   r1   r2   r   r   r   test_legder_axisS  s    
zTestDerivative.test_legder_axisc             C   s   d}t t|ddg d S )N)r   r   r
   rm   rm   r   )r   r   rs   )r   rA   r   r   r    test_legder_orderhigherthancoeff_  s    z/TestDerivative.test_legder_orderhigherthancoeffN)r#   r$   r%   rt   ru   rv   r   r   r   r   rr   8  s   rr   c               @   s@   e Zd Zejdd d Zdd Zdd Zdd	 Zd
d Z	dS )
TestVander)r
   r   r   r   c             C   s   t d}t|d}t|jdk x:tdD ].}dg| dg }t|d|f t|| q.W t 	ddgddgdd	gg}t|d}t|jd
k x:tdD ].}dg| dg }t|d|f t|| qW d S )Nr
   )r
   rm   rm   r   r   .r   r      )r
   r   rm   )
r*   r?   r   	legvanderr   rJ   r)   r   r7   r@   )r   r   vr.   coefr   r   r   test_legvanderg  s    
zTestVander.test_legvanderc             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 )N)r   r
   r   r   )r   r   rx   )r   r*   r_   r   Zlegvander2drN   dotflatr   r   rJ   )r   rQ   rR   rS   rA   vanr1   r2   r   r   r   test_legvander2dx  s    
zTestVander.test_legvander2dc             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
   rm   r   r   r
   )r   r      )r   r*   r_   r   Zlegvander3drY   r}   r~   r   r   rJ   )r   rQ   rR   rS   rA   r   r1   r2   r   r   r   test_legvander3d  s    
zTestVander.test_legvander3dc             C   s   t ttjdd d S )N)r   r   r
   r	   )r   rM   r   ry   )r   r   r   r   test_legvander_negdeg  s    z TestVander.test_legvander_negdegN)
r#   r$   r%   r*   r_   r   r|   r   r   r   r   r   r   r   rw   c  s
   rw   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_legfit.<locals>.fc             S   s   | d | d  d S )Nrm   r   r   r   )r   r   r   r   f2  s    z#TestFitting.test_legfit.<locals>.f2r   r	   r   r   )wrx   r
   rm   r   y              ?y             )r   rM   r   Zlegfitrf   r*   rC   r   r9   r   r7   r@   ro   Z
zeros_likecopy)r   r   r   r   rK   Zcoef3Zcoef4Zcoef2dr   ZywZwcoef3Zwcoef2dZcoef1Zcoef2r   r   r   test_legfit  sp    "


&zTestFitting.test_legfitN)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 )Nr   )r   rM   r   legcompanion)r   r   r   r   test_raises  s    zTestCompanion.test_raisesc             C   s@   x:t ddD ],}dg| dg }tt|j||fk qW d S )Nr   r   r   )r)   r   r   r   rJ   )r   r.   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 d}t|
 | d S )Nr'   c   r   g       @)r   Zleggaussry   r*   r}   ro   sqrtZdiagonalr   eyesum)r   r   r   rz   vvZvdr1   r   r   r   test_100  s    zTestGauss.test_100N)r#   r$   r%   r   r   r   r   r   r     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S )TestMiscc          	   C   s   t g }tt|dg xt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&W d S )Nr   r   r   r   r	   )r   legfromrootsr   r   r)   r*   cosrC   pir7   r   r9   ri   )r   r2   r.   rootsrk   r1   r   r   r   test_legfromroots  s    
*
zTestMisc.test_legfromrootsc             C   sp   t tdgg  t tddgdg xBtddD ]4}tdd|}tt|}t t|t| q4W d S )Nr   r   g      r   r	   )r   r   Zlegrootsr)   r*   rC   r   r   )r   r.   r1   r2   r   r   r   test_legroots  s    zTestMisc.test_legrootsc             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   rM   r   r   r   )r   r{   r   r   r   test_legtrim  s
    zTestMisc.test_legtrimc             C   s   t tddddg d S )Nr
   rm   )r   r   legline)r   r   r   r   test_legline&  s    zTestMisc.test_leglinec             C   s   t tdddg d S )Nr
   r   )r   r   r   )r   r   r   r   test_legline_zeroscl)  s    zTestMisc.test_legline_zerosclc             C   s6   x0t dD ]$}ttdg| dg t|  q
W d S )NrG   r   r   )r)   r   r   ri   rI   )r   r.   r   r   r   test_leg2poly,  s    zTestMisc.test_leg2polyc             C   s6   x0t dD ]$}ttt| dg| dg  q
W d S )NrG   r   r   )r)   r   r   rh   rI   )r   r.   r   r   r   test_poly2leg0  s    zTestMisc.test_poly2legc             C   s*   t ddd}d}t|}t|| d S )Nr	   r      g      ?)r*   rC   r   Z	legweightr   )r   r   r1   r2   r   r   r   test_weight4  s    
zTestMisc.test_weightN)r#   r$   r%   r   r   r   r   r   r   r   r   r   r   r   r   r     s   r   )'__doc__	functoolsr   numpyr*   Znumpy.polynomial.legendreZ
polynomialZlegendrer   Znumpy.polynomial.polynomialr   Znumpy.testingr   r   r   r   r@   ZL0ZL1ZL2ZL3ZL4ZL5ZL6ZL7ZL8ZL9rI   r   r   r&   rD   r`   rr   rw   r   r   r   r   r   r   r   r   <module>   s6    "C^i+3M