U
    O8cgD                  	   @   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d Zeddgd 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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 d0d1 d1Z#dS )2zTests for laguerre module.

    )reduceNpolyval)assert_almost_equalassert_raisesassert_equalassert_         i	      iH   ix   iiX  i8   i  i i  ii  ic                 C   s   t j| ddS )Ngư>)Ztol)laglagtrimx r   H/tmp/pip-unpacked-wheel-fd_gsd75/numpy/polynomial/tests/test_laguerre.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	lagdomainselfr   r   r   test_lagdomain   s    zTestConstants.test_lagdomainc                 C   s   t tjdg d S )Nr   )r   r   Zlagzeror   r   r   r   test_lagzero!   s    zTestConstants.test_lagzeroc                 C   s   t tjdg d S Nr	   )r   r   Zlagoner   r   r   r   test_lagone$   s    zTestConstants.test_lagonec                 C   s   t tjddg d S )Nr	   r
   )r   r   Zlagxr   r   r   r   	test_lagx'   s    zTestConstants.test_lagxN)__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   lagaddr   r   r   ijmsgtgtresr   r   r   test_lagadd.   s    $zTestArithmetic.test_lagaddc                 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/   r0   r1   r2   r   Zlagsubr   r   r4   r   r   r   test_lagsub8   s    $zTestArithmetic.test_lagsubc                 C   s   t tdgdg t tdgddg tddD ]L}dg| dg }dg|d  | d| d |d  g }tt|| q4d S )Nr   r	   r
   r*   r   )r   r   Zlagmulxr/   r   )r   r5   Zserr8   r   r   r   test_lagmulxB   s    (zTestArithmetic.test_lagmulxc           
      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   lagvalr   lagmulr   lenr   )
r   r5   Zpol1Zval1r6   r7   Zpol2Zval2Zpol3Zval3r   r   r   test_lagmulJ   s    zTestArithmetic.test_lagmulc           
      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   r3   Zlagdivr>   r   r   )
r   r5   r6   r7   cicjr8   Zquoremr9   r   r   r   test_lagdivX   s    zTestArithmetic.test_lagdivc                 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/   r0   aranger   r   r>   arrayZlagpowr   r   )r   r5   r6   r7   cr8   r9   r   r   r   test_lagpowc   s    zTestArithmetic.test_lagpowN)r"   r#   r$   r0   linspacer   r:   r;   r<   r@   rD   rH   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   .0rG   r   r   r   
<listcomp>}   s     z.TestEvaluation.test_lagval.<locals>.<listcomp>   r+   r-   r'   r   )r   r   r=   sizer0   rI   Llistr/   r   r1   shape)r   yr5   r7   r8   r9   Zdimsr   r   r   test_lagvalw   s    


zTestEvaluation.test_lagvalc           
      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   rV   r   
ValueErrorr   lagval2dc2dr   r0   onesr   rU   
r   x1x2x3y1y2Zy3r8   r9   zr   r   r   test_lagval2d   s    

zTestEvaluation.test_lagval2dc           
      C   s   | j \}}}| j\}}}tttj|||d d | j || | }t|||| j}t|| t	d}	t|	|	|	| j}t
|jdk d S rX   )r   rV   r   rZ   r   lagval3dc3dr   r0   r]   r   rU   r^   r   r   r   test_lagval3d   s    

zTestEvaluation.test_lagval3dc           
      C   sl   | j \}}}| j\}}}td||}t||| j}t|| td}	t|	|	| j}t	|j
dk d S )NrK   rY   )r   r'   r   r'   )r   rV   r0   einsumr   Z	laggrid2dr\   r   r]   r   rU   r^   r   r   r   test_laggrid2d   s    

zTestEvaluation.test_laggrid2dc           
      C   sr   | j \}}}| j\}}}td|||}t|||| j}t|| td}	t|	|	|	| j}t	|j
dk d S )NrL   rY   )r   r'   r   r'   r   r'   )r   rV   r0   ri   r   Z	laggrid3drg   r   r]   r   rU   r^   r   r   r   test_laggrid3d   s    

zTestEvaluation.test_laggrid3dN)r"   r#   r$   r0   rF   Zc1dri   r\   rg   randomr   r   rV   rW   re   rh   rj   rk   r   r   r   r   rJ   m   s   rJ   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axisr   r*   )mk)rs   rt   ro   )rs   rt   rp   rs   )r   	TypeErrorr   lagintrZ   r/   r   poly2laglag2polyr   r=   list)
r   r5   rt   r9   rp   polr8   Zlagpolrw   r6   r   r   r   test_lagint   s    




zTestIntegral.test_lagintc                 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   rw   rO   r   r   r   rQ   $  s     z1TestIntegral.test_lagint_axis.<locals>.<listcomp>r   rq   c                 S   s   g | ]}t |qS r   r   rO   r   r   r   rQ   (  s     r	   c                 S   s   g | ]}t j|d dqS )r'   )rt   r   rO   r   r   r   rQ   ,  s     r'   )rt   rr   )r0   rl   vstackTr   rw   r   r   r\   r8   r9   r   r   r   test_lagint_axis   s    

zTestIntegral.test_lagint_axisN)r"   r#   r$   r|   r   r   r   r   r   rm      s   Srm   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   rn   r
   r*   r	   ru   r   )rs   rp   )
r   rv   r   lagderrZ   r/   r   r   rw   r   )r   r5   r8   r9   r6   r   r   r   test_lagder3  s     zTestDerivative.test_lagderc                 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   rO   r   r   r   rQ   P  s     z3TestDerivative.test_lagder_axis.<locals>.<listcomp>r   rq   c                 S   s   g | ]}t |qS r   r   rO   r   r   r   rQ   T  s     r	   )r0   rl   r   r   r   r   r   r   r   r   r   test_lagder_axisL  s    
zTestDerivative.test_lagder_axisN)r"   r#   r$   r   r   r   r   r   r   r   1  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 )
TestVanderrM   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   r~   )
r0   rE   r   	lagvanderr   rU   r/   r   r=   rF   )r   r   vr5   coefr   r   r   test_lagvander]  s    
zTestVander.test_lagvanderc                 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 )NrY   r	   r   )r	   r*   r   )r   r0   rl   r   Zlagvander2dr[   dotflatr   r   rU   r   r_   r`   ra   rG   Zvanr8   r9   r   r   r   test_lagvander2dn  s    
zTestVander.test_lagvander2dc                 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   )r   r0   rl   r   Zlagvander3drf   r   r   r   r   rU   r   r   r   r   test_lagvander3d{  s    
zTestVander.test_lagvander3dN)	r"   r#   r$   r0   rl   r   r   r   r   r   r   r   r   r   Y  s   r   c                   @   s   e Zd Zdd ZdS )TestFittingc              	   C   s  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|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 d S )Nc                 S   s   | | d  | d  S )Nr	   r   r   r   r   r   r   f  s    z"TestFitting.test_lagfit.<locals>.fr	   r
   r   r   )wr   r'   r~   r*   y              ?y             )r   rZ   r   Zlagfitrv   r0   rI   r   r?   r   r=   rF   r   Z
zeros_likecopy)r   r   r   rV   Zcoef3Zcoef4Zcoef2dr   ZywZwcoef3Zwcoef2dr   r   r   test_lagfit  sZ    "


&zTestFitting.test_lagfitN)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   rZ   r   lagcompanionr   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   rU   )r   r5   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	   rN   )r   Zlaggaussr   r0   r   r   sqrtZdiagonalr   Zeyesum)r   r   r   r   vvZvdr8   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   lagfromrootsr   r   r/   r0   cosrI   pir=   r   r?   ry   )r   r9   r5   rootsr{   r8   r   r   r   test_lagfromroots  s    
*
zTestMisc.test_lagfromrootsc                 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   r   r*   r'   )r   r   Zlagrootsr/   r0   rI   r   r   )r   r5   r8   r9   r   r   r   test_lagroots  s    zTestMisc.test_lagrootsc                 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   rZ   r   r   r   )r   r   r   r   r   test_lagtrim  s
    zTestMisc.test_lagtrimc                 C   s   t tddddg d S )Nr'   r~   rR   r   )r   r   Zlagliner   r   r   r   test_lagline
  s    zTestMisc.test_laglinec                 C   s2   t dD ]$}ttdg| dg t|  qd S NrR   r   r	   )r/   r   r   ry   rT   r   r5   r   r   r   test_lag2poly  s    zTestMisc.test_lag2polyc                 C   s2   t dD ]$}ttt| dg| dg  qd S r   )r/   r   r   rx   rT   r   r   r   r   test_poly2lag  s    zTestMisc.test_poly2lagc                 C   s2   t ddd}t | }t|}t|| d S )Nr   
      )r0   rI   expr   Z	lagweightr   )r   r   r8   r9   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numpyr0   Znumpy.polynomial.laguerreZ
polynomialZlaguerrer   Znumpy.polynomial.polynomialr   Znumpy.testingr   r   r   r   rF   ZL0ZL1ZL2ZL3ZL4ZL5ZL6rT   r   r   r%   rJ   rm   r   r   r   r   r   r   r   r   r   r   <module>   s0   B^f(0>