U
    ?hg$                     @   sL  d dl Zd dlmZmZ d dlZd dlmZ d dlm	  m
Z d dlmZ dd Zdd Zd	d
 ZG dd dZG dd dZdd Zejdd ddgejdd dejgdd Zejdd dddgejddejgejddejgdd Zejdd dddgejdddejgejdddejgdd ZdS )    N)assert_assert_allclose)_ufuncs)FuncDatac                  C   sX   t ddd} dt j  d }t | t | }t| |}tt j	||dd d S )Nr   i'           gV瞯<rtol)
nparangerandomrandcosZarccosr   eval_chebytr   Zallclose)nxZv1Zv2 r   Z/var/www/html/venv/lib/python3.8/site-packages/scipy/special/tests/test_orthogonal_eval.pytest_eval_chebyt
   s
    r   c                   C   s4   t ttddd t ttddd d S )Nr   g?)r   r   isnanr   eval_genlaguerrer   r   r   r   !test_eval_genlaguerre_restriction   s    r   c                	   C   sB   t jdd, tdd tdd tddd W 5 Q R X d S )Nraiseallr   r   )r   errstater   eval_legendreeval_laguerreeval_gegenbauerr   r   r   r   test_warnings   s    r!   c                   @   s   e Zd ZdZg g dddd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dd Zd d! Zd"d# Zd$S )%	TestPolyszQ
    Check that the eval_* functions agree with the constructed polynomials

    
   :0yE>c	              	      sB  t jd g }	t |D ]}
fdd|D }t |j}|sFdg}|D ]}|rb|
ft| }n|
f}|d |d |d  t j|  }|d |d< |d |d< t || j	}t j
t ||df|||f }|	| qJqt j|	dd}	 fdd}t jd	d
0 t||	ttt|d d|d}|  W 5 Q R X d S )N  c                    s(   g | ] \}}||| t j   qS r   r   r   r   .0abnparamr   r   
<listcomp>-   s     z(TestPolys.check_poly.<locals>.<listcomp>r   r   Zaxisc                     s$   | d  tf| dd   }  |  S )Nr   r   )astypeint)pfuncr   r   polyfunc?   s    z&TestPolys.check_poly.<locals>.polyfuncr   r   r   r   r	   )r   r   seedr   asarrayTtupler   Zpoly1dZcoefc_tileappendconcatenater   r   listrangelencheck)selfr3   clsparam_rangesx_rangennr,   nxr
   datasetr   paramsr1   r   Zpolyzr4   dsr   r3   r,   r   
check_poly'   s0    $ zTestPolys.check_polyc                 C   s$   | j tjtjddgddgdd d S )NgGzr#   r   r   h㈵>rC   rD   r
   )rL   r   eval_jacobiorthZjacobirA   r   r   r   test_jacobiH   s
     zTestPolys.test_jacobic                 C   s$   | j tjtjddgddgdd d S )Nr   r#   r   r   r   r   rN   rO   )rL   r   eval_sh_jacobirQ   Z	sh_jacobirR   r   r   r   test_sh_jacobiM   s
     zTestPolys.test_sh_jacobic                 C   s"   | j tjtjdgddgdd d S )NgV-߿r#   r   r   gHz>rO   )rL   r   r    rQ   Z
gegenbauerrR   r   r   r   test_gegenbauerR   s
     zTestPolys.test_gegenbauerc                 C   s   | j tjtjg ddgd d S Nr   r   rC   rD   )rL   r   r   rQ   ZchebytrR   r   r   r   test_chebytW   s     zTestPolys.test_chebytc                 C   s   | j tjtjg ddgd d S rZ   )rL   r   eval_chebyurQ   ZchebyurR   r   r   r   test_chebyu[   s     zTestPolys.test_chebyuc                 C   s   | j tjtjg ddgd d S Nr   r[   )rL   r   eval_chebysrQ   ZchebysrR   r   r   r   test_chebys_   s     zTestPolys.test_chebysc                 C   s   | j tjtjg ddgd d S r_   )rL   r   eval_chebycrQ   ZchebycrR   r   r   r   test_chebycc   s     zTestPolys.test_chebycc              	   C   s6   t jdd  | jtjtjg ddgd W 5 Q R X d S Nignorer   r   r   r[   )r   r   rL   r   eval_sh_chebytrQ   Z	sh_chebytrR   r   r   r   test_sh_chebytg   s
     zTestPolys.test_sh_chebytc                 C   s   | j tjtjg ddgd d S Nr   r   r[   )rL   r   eval_sh_chebyurQ   Z	sh_chebyurR   r   r   r   test_sh_chebyul   s     zTestPolys.test_sh_chebyuc                 C   s   | j tjtjg ddgd d S rZ   )rL   r   r   rQ   ZlegendrerR   r   r   r   test_legendrep   s     zTestPolys.test_legendrec              	   C   s6   t jdd  | jtjtjg ddgd W 5 Q R X d S re   )r   r   rL   r   eval_sh_legendrerQ   Zsh_legendrerR   r   r   r   test_sh_legendret   s
     zTestPolys.test_sh_legendrec                 C   s    | j tjtjdgddgd d S NrM   r   d   r[   )rL   r   r   rQ   ZgenlaguerrerR   r   r   r   test_genlaguerrey   s     zTestPolys.test_genlaguerrec                 C   s   | j tjtjg ddgd d S Nr   rp   r[   )rL   r   r   rQ   ZlaguerrerR   r   r   r   test_laguerre}   s     zTestPolys.test_laguerrec                 C   s   | j tjtjg ddgd d S Nirp   r[   )rL   r   eval_hermiterQ   ZhermiterR   r   r   r   test_hermite   s     zTestPolys.test_hermitec                 C   s   | j tjtjg ddgd d S rt   )rL   r   eval_hermitenormrQ   ZhermitenormrR   r   r   r   test_hermitenorm   s     zTestPolys.test_hermitenormN)__name__
__module____qualname____doc__rL   rS   rW   rY   r\   r^   rb   rd   rh   rk   rl   rn   rq   rs   rv   rx   r   r   r   r   r"   !   s*     
!r"   c                   @   s   e Zd ZdZg g dddd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dd Zd d! Zd"S )#TestRecurrencezI
    Check that the eval_* functions sig='ld->d' and 'dd->d' agree.

    r#   r$   c              	      sT  t jd g }t |D ]}	fdd|D }
t |
j}
|sFdg}
|
D ]}|rb|	ft| }n|	f}|d |d |d  t j|  }|d |d< |d |d< tt	|d d d d}t j
t ||df| ||f |f }|| qJqt j|dd	} fd
d}t jdd0 t||ttt	|d d|d}|  W 5 Q R X d S )Nr%   c                    s(   g | ] \}}||| t j   qS r   r&   r'   r+   r   r   r-      s     z-TestRecurrence.check_poly.<locals>.<listcomp>r   r   d->dsigr.   c                     sD   | d  tf| dd   } tdt| d d  d d} | |S )Nr   r   lr~   r   r   )r/   r0   dictr?   )r1   kwr2   r   r   r4      s    z+TestRecurrence.check_poly.<locals>.polyfuncr   r   r   r   r	   )r   r   r5   r   r6   r7   r8   r   r   r?   r9   r:   r;   r<   r   r   r=   r>   r@   )rA   r3   rC   rD   rE   r,   rF   r
   rG   r   rH   r1   r   r   rI   r4   rJ   r   rK   r   rL      s0    $(zTestRecurrence.check_polyc                 C   s   | j tjddgddgd d S )NrM   r   r   r[   )rL   r   rP   rR   r   r   r   rS      s    zTestRecurrence.test_jacobic                 C   s   | j tjddgddgd d S )NrT   rU   r   r   r[   )rL   r   rV   rR   r   r   r   rW      s     zTestRecurrence.test_sh_jacobic                 C   s   | j tjdgddgd d S )NrX   r   r   r[   )rL   r   r    rR   r   r   r   rY      s     zTestRecurrence.test_gegenbauerc                 C   s   | j tjg ddgd d S rZ   )rL   r   r   rR   r   r   r   r\      s     zTestRecurrence.test_chebytc                 C   s   | j tjg ddgd d S rZ   )rL   r   r]   rR   r   r   r   r^      s     zTestRecurrence.test_chebyuc                 C   s   | j tjg ddgd d S r_   )rL   r   ra   rR   r   r   r   rb      s     zTestRecurrence.test_chebysc                 C   s   | j tjg ddgd d S r_   )rL   r   rc   rR   r   r   r   rd      s     zTestRecurrence.test_chebycc                 C   s   | j tjg ddgd d S ri   )rL   r   rg   rR   r   r   r   rh      s     zTestRecurrence.test_sh_chebytc                 C   s   | j tjg ddgd d S ri   )rL   r   rj   rR   r   r   r   rk      s     zTestRecurrence.test_sh_chebyuc                 C   s   | j tjg ddgd d S rZ   )rL   r   r   rR   r   r   r   rl      s     zTestRecurrence.test_legendrec                 C   s   | j tjg ddgd d S ri   )rL   r   rm   rR   r   r   r   rn      s     zTestRecurrence.test_sh_legendrec                 C   s   | j tjdgddgd d S ro   )rL   r   r   rR   r   r   r   rq      s     zTestRecurrence.test_genlaguerrec                 C   s   | j tjg ddgd d S rr   )rL   r   r   rR   r   r   r   rs      s     zTestRecurrence.test_laguerrec                 C   s   t dd}d}t|| d S )NF         ?gi\m)r   ru   r   )rA   vr)   r   r   r   rv      s    zTestRecurrence.test_hermiteN)ry   rz   r{   r|   rL   rS   rW   rY   r\   r^   rb   rd   rh   rk   rl   rn   rq   rs   rv   r   r   r   r   r}      s(     
"r}   c                   C   s0   t tddstt tdds,td S )Nr   r   )r   r   r   ru   AssertionErrorrw   r   r   r   r   test_hermite_domain   s    r   r   r   r   r   c                 C   sX   t t| |t t | |gks*tt t| |t t | |gksTtd S N)r   r   r   ru   anyr   rw   )r   r   r   r   r   test_hermite_nan   s    *r   g	@alphac                 C   s:   t t| ||}t t | ||g}||ks6td S r   )r   r   r   r   r   r   )r   r   r   Znan_laguerrenan_argr   r   r   test_genlaguerre_nan   s    r   g        gư>c                 C   s:   t t| ||}t t | ||g}||ks6td S r   )r   r   r   r    r   r   )r   r   r   Znan_gegenbauerr   r   r   r   test_gegenbauer_nan  s    r   )numpyr   Znumpy.testingr   r   ZpytestZscipy.specialr   Zscipy.special._orthogonalspecialZ_orthogonalrQ   Zscipy.special._testutilsr   r   r   r!   r"   r}   r   markZparametrizenanr   r   r   r   r   r   r   <module>   s,   	ic