U
    »mœdÌ7  ã                   @   s  d dl Zd dlmZmZmZmZ d dlZd dl mZm	Z	m
Z
mZmZmZmZmZmZ d dlmZmZmZmZ d dlm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eƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ dƒZ"dS )é    N)Úassert_almost_equalÚassert_allcloseÚassert_array_almost_equalÚsuppress_warnings)	ÚsinÚcosÚsinhÚcoshÚexpÚinfÚnanÚr_Úpi)Úspherical_jnÚspherical_ynÚspherical_inÚspherical_kn)Úquadc                   @   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 )ÚTestSphericalJnc                 C   sT   t  dddddg¡}ttd|ƒd| d|d   t|ƒ d|d  t|ƒ  ƒ d S )	Nç¸…ëQ¸¾?ç®Gáz®ó?ç®Gáz®(@çÍÌÌÌÌÜ^@ç     J“@é   éÿÿÿÿé   )ÚnpÚarrayr   r   r   r   ©ÚselfÚx© r"   úb/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/special/tests/test_spherical_bessel.pyÚtest_spherical_jn_exact   s    
.ÿz'TestSphericalJn.test_spherical_jn_exactc                 C   sT   t  dddddg¡}d}tt|d |ƒt|d |ƒ d| d | t||ƒ ƒ d S ©Né   r   r   é   é   ùš™™™™™ñ?      ø?©r   r   r   r   ©r    Únr!   r"   r"   r#   Ú$test_spherical_jn_recurrence_complex   s
    ÿz4TestSphericalJn.test_spherical_jn_recurrence_complexc                 C   sT   t  dddddg¡}d}tt|d |ƒt|d |ƒ d| d | t||ƒ ƒ d S ©Nr&   r   r   r'   r(   r   r*   r+   r"   r"   r#   Ú!test_spherical_jn_recurrence_real   s
    ÿz1TestSphericalJn.test_spherical_jn_recurrence_realc                 C   s2   d}t  t tg¡}tt||ƒt  ddg¡ƒ d S ©Né   r   )r   r   r   r   r   r+   r"   r"   r#   Útest_spherical_jn_inf_real%   s    z*TestSphericalJn.test_spherical_jn_inf_realc              	   C   sd   d}t  t d td td g¡}tƒ �2}| td¡ tt||ƒt  ddtd g¡ƒ W 5 Q R X d S ©Nr'   ù                ù      ð?      ð?z%invalid value encountered in multiplyr   )r   r   r   r   ÚfilterÚRuntimeWarningr   r   ©r    r,   r!   Úsupr"   r"   r#   Útest_spherical_jn_inf_complex+   s
    z-TestSphericalJn.test_spherical_jn_inf_complexc                 C   s   t tddƒdƒ d S )Nr   g%�•-ª@g·õ<«]�3¿©r   r   ©r    r"   r"   r#   Útest_spherical_jn_large_arg_13   s    z-TestSphericalJn.test_spherical_jn_large_arg_1c                 C   s   t tddƒdƒ d S )Nr   i'  g°µ|¸	 ?r;   r<   r"   r"   r#   Útest_spherical_jn_large_arg_29   s    z-TestSphericalJn.test_spherical_jn_large_arg_2c              
   C   s@   t  ddddddg¡}d}tt||ƒt  ddddddg¡ƒ d S ©Nr   r&   r   é   é
   éd   r*   r+   r"   r"   r#   Útest_spherical_jn_at_zero?   s    z)TestSphericalJn.test_spherical_jn_at_zeroN)Ú__name__Ú
__module__Ú__qualname__r$   r-   r/   r2   r:   r=   r>   rC   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 )ÚTestSphericalYnc                 C   sT   t  dddddg¡}ttd|ƒd| d|d   t|ƒ d|d  t|ƒ  ƒ d S )	Nr   r   r   r   r   r   r&   r   )r   r   r   r   r   r   r   r"   r"   r#   Útest_spherical_yn_exactH   s    
.ÿz'TestSphericalYn.test_spherical_yn_exactc                 C   sT   t  dddddg¡}d}tt|d |ƒt|d |ƒ d| d | t||ƒ ƒ d S r.   ©r   r   r   r   r+   r"   r"   r#   Ú!test_spherical_yn_recurrence_realP   s
    ÿz1TestSphericalYn.test_spherical_yn_recurrence_realc                 C   sT   t  dddddg¡}d}tt|d |ƒt|d |ƒ d| d | t||ƒ ƒ d S r%   rI   r+   r"   r"   r#   Ú$test_spherical_yn_recurrence_complexW   s
    ÿz4TestSphericalYn.test_spherical_yn_recurrence_complexc                 C   s2   d}t  t tg¡}tt||ƒt  ddg¡ƒ d S r0   )r   r   r   r   r   r+   r"   r"   r#   Útest_spherical_yn_inf_real^   s    z*TestSphericalYn.test_spherical_yn_inf_realc              	   C   sd   d}t  t d td td g¡}tƒ �2}| td¡ tt||ƒt  ddtd g¡ƒ W 5 Q R X d S r3   )r   r   r   r   r6   r7   r   r   r8   r"   r"   r#   Útest_spherical_yn_inf_complexd   s
    z-TestSphericalYn.test_spherical_yn_inf_complexc                 C   s:   t  ddddddg¡}d}tt||ƒt  |jt ¡ƒ d S r?   )r   r   r   r   ÚfullÚshaper   r+   r"   r"   r#   Útest_spherical_yn_at_zerol   s    z)TestSphericalYn.test_spherical_yn_at_zeroc                 C   s8   t  ddddddg¡}d}tt||ƒt  |jt¡ƒ d S ©Nr   r&   r   r@   rA   rB   r4   )r   r   r   r   rN   rO   r   r+   r"   r"   r#   Ú!test_spherical_yn_at_zero_complexr   s    z1TestSphericalYn.test_spherical_yn_at_zero_complexN)
rD   rE   rF   rH   rJ   rK   rL   rM   rP   rR   r"   r"   r"   r#   rG   G   s   rG   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSphericalJnYnCrossProductc                 C   sj   t  dddg¡}t  dddg¡}t|d |ƒt||ƒ t||ƒt|d |ƒ  }d|d  }t||ƒ d S )Nr&   r@   é   çš™™™™™¹?rA   r   ©r   r   r   r   r   ©r    r,   r!   ÚleftÚrightr"   r"   r#   Ú$test_spherical_jn_yn_cross_product_1~   s    ÿzBTestSphericalJnYnCrossProduct.test_spherical_jn_yn_cross_product_1c                 C   sr   t  dddg¡}t  dddg¡}t|d |ƒt||ƒ t||ƒt|d |ƒ  }d| d |d  }t||ƒ d S )Nr&   r@   rT   rU   rA   r   r   rV   rW   r"   r"   r#   Ú$test_spherical_jn_yn_cross_product_2‡   s    ÿzBTestSphericalJnYnCrossProduct.test_spherical_jn_yn_cross_product_2N)rD   rE   rF   rZ   r[   r"   r"   r"   r#   rS   }   s   	rS   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestSphericalInc                 C   sR   t  ddddg¡}ttd|ƒd| d|d   t|ƒ d|d  t|ƒ  ƒ d S ©Nr   r   r   r   r   r&   r   )r   r   r   r   r   r	   r   r"   r"   r#   Útest_spherical_in_exact’   s    
.ÿz'TestSphericalIn.test_spherical_in_exactc                 C   sT   t  dddddg¡}d}tt|d |ƒt|d |ƒ d| d | t||ƒ ƒ d S r.   ©r   r   r   r   r+   r"   r"   r#   Ú!test_spherical_in_recurrence_real˜   s
    ÿz1TestSphericalIn.test_spherical_in_recurrence_realc                 C   sT   t  dddddg¡}d}tt|d |ƒt|d |ƒ d| d | t||ƒ ƒ d S r%   r_   r+   r"   r"   r#   Ú$test_spherical_in_recurrence_complexŸ   s
    ÿz4TestSphericalIn.test_spherical_in_recurrence_complexc                 C   s4   d}t  t tg¡}tt||ƒt  t tg¡ƒ d S )Nr@   )r   r   r   r   r   r+   r"   r"   r#   Útest_spherical_in_inf_real¦   s    z*TestSphericalIn.test_spherical_in_inf_realc                 C   sD   d}t  t d td td g¡}tt||ƒt  t ttg¡ƒ d S )Nr'   r4   r5   )r   r   r   r   r   r   r+   r"   r"   r#   Útest_spherical_in_inf_complex¬   s    z-TestSphericalIn.test_spherical_in_inf_complexc              
   C   s@   t  ddddddg¡}d}tt||ƒt  ddddddg¡ƒ d S r?   r_   r+   r"   r"   r#   Útest_spherical_in_at_zero·   s    z)TestSphericalIn.test_spherical_in_at_zeroN)	rD   rE   rF   r^   r`   ra   rb   rc   rd   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 )ÚTestSphericalKnc                 C   sT   t  ddddg¡}ttd|ƒtd t| ƒ d| d|d   d|d    ƒ d S r]   )r   r   r   r   r   r
   r   r"   r"   r#   Útest_spherical_kn_exactÀ   s    
0ÿz'TestSphericalKn.test_spherical_kn_exactc                 C   st   t  dddddg¡}d}td|d  t|d |ƒ d|d  t|d |ƒ  d| d| d  | t||ƒ ƒ d S )Nr&   r   r   r'   r(   r   r   ©r   r   r   r   r+   r"   r"   r#   Ú!test_spherical_kn_recurrence_realÆ   s
    4 ÿz1TestSphericalKn.test_spherical_kn_recurrence_realc                 C   st   t  dddddg¡}d}td|d  t|d |ƒ d|d  t|d |ƒ  d| d| d  | t||ƒ ƒ d S )Nr&   r   r   r'   r(   r)   r   rg   r+   r"   r"   r#   Ú$test_spherical_kn_recurrence_complexÍ   s
    4 ÿz4TestSphericalKn.test_spherical_kn_recurrence_complexc                 C   s4   d}t  t tg¡}tt||ƒt  t dg¡ƒ d S )Nr@   r   )r   r   r   r   r   r+   r"   r"   r#   Útest_spherical_kn_inf_realÔ   s    z*TestSphericalKn.test_spherical_kn_inf_realc                 C   sD   d}t  t d td td g¡}tt||ƒt  t dtg¡ƒ d S )Nr'   r4   r5   r   )r   r   r   r   r   r   r+   r"   r"   r#   Útest_spherical_kn_inf_complexÚ   s    z-TestSphericalKn.test_spherical_kn_inf_complexc                 C   s8   t  ddddddg¡}d}tt||ƒt  |jt¡ƒ d S r?   )r   r   r   r   rN   rO   r   r+   r"   r"   r#   Útest_spherical_kn_at_zeroã   s    z)TestSphericalKn.test_spherical_kn_at_zeroc                 C   s8   t  ddddddg¡}d}tt||ƒt  |jt¡ƒ d S rQ   )r   r   r   r   rN   rO   r   r+   r"   r"   r#   Ú!test_spherical_kn_at_zero_complexé   s    z1TestSphericalKn.test_spherical_kn_at_zero_complexN)
rD   rE   rF   rf   rh   ri   rj   rk   rl   rm   r"   r"   r"   r#   re   ¿   s   	re   c                   @   s4   e Zd Zdd„ Zejjdd„ ƒZejjdd„ ƒZdS )ÚSphericalDerivativesTestCasec                    s@   t ‡ ‡fdd„||ƒ\}}t|ˆ ˆ |¡ˆ ˆ |¡ |d� d S )Nc                    s   ˆ  ˆ | ¡S ©N)Údf)Úz©r,   r    r"   r#   Ú<lambda>ò   ó    zBSphericalDerivativesTestCase.fundamental_theorem.<locals>.<lambda>)Zatol)r   r   Úf)r    r,   ÚaÚbZintegralZ	tolerancer"   rr   r#   Úfundamental_theoremñ   s
    þz0SphericalDerivativesTestCase.fundamental_theoremc                 C   s   |   ddd¡ d S )Nr   g      @ç      .@©rx   r<   r"   r"   r#   Útest_fundamental_theorem_0÷   s    z7SphericalDerivativesTestCase.test_fundamental_theorem_0c                 C   s   |   ddd¡ d S )Nr'   ç      à?g333333ó?rz   r<   r"   r"   r#   Útest_fundamental_theorem_7û   s    z7SphericalDerivativesTestCase.test_fundamental_theorem_7N)	rD   rE   rF   rx   ÚpytestÚmarkZslowr{   r}   r"   r"   r"   r#   rn   ð   s
   
rn   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestSphericalJnDerivativesc                 C   s
   t ||ƒS ro   ©r   ©r    r,   rq   r"   r"   r#   ru     s    zTestSphericalJnDerivatives.fc                 C   s   t ||dd�S ©NT©Z
derivativer�   r‚   r"   r"   r#   rp     s    zTestSphericalJnDerivatives.dfc              
   C   s@   t  ddddddg¡}tt|ddd�t  dd	ddddg¡ƒ d S )
Nr   r&   r   r   r'   é   Tr„   gUUUUUUÕ?r*   ©r    r,   r"   r"   r#   Útest_spherical_jn_d_zero  s    ÿz3TestSphericalJnDerivatives.test_spherical_jn_d_zeroN)rD   rE   rF   ru   rp   r‡   r"   r"   r"   r#   r€      s   r€   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSphericalYnDerivativesc                 C   s
   t ||ƒS ro   ©r   r‚   r"   r"   r#   ru     s    zTestSphericalYnDerivatives.fc                 C   s   t ||dd�S rƒ   r‰   r‚   r"   r"   r#   rp     s    zTestSphericalYnDerivatives.dfN©rD   rE   rF   ru   rp   r"   r"   r"   r#   rˆ     s   rˆ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestSphericalInDerivativesc                 C   s
   t ||ƒS ro   ©r   r‚   r"   r"   r#   ru     s    zTestSphericalInDerivatives.fc                 C   s   t ||dd�S rƒ   rŒ   r‚   r"   r"   r#   rp     s    zTestSphericalInDerivatives.dfc                 C   s2   t  dddddg¡}tt|ddd�t  d	¡ƒ d S )
Nr&   r   r   r'   r…   r   Tr„   r@   )r   r   r   r   Zzerosr†   r"   r"   r#   Útest_spherical_in_d_zero  s    ÿz3TestSphericalInDerivatives.test_spherical_in_d_zeroN)rD   rE   rF   ru   rp   r�   r"   r"   r"   r#   r‹     s   r‹   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSphericalKnDerivativesc                 C   s
   t ||ƒS ro   ©r   r‚   r"   r"   r#   ru   #  s    zTestSphericalKnDerivatives.fc                 C   s   t ||dd�S rƒ   r�   r‚   r"   r"   r#   rp   &  s    zTestSphericalKnDerivatives.dfNrŠ   r"   r"   r"   r#   rŽ   "  s   rŽ   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestSphericalOldc                 C   s¸   t  d¡}d}td|ƒ|d d< td|ƒ|d d< td|dd�|d d< td|dd�|d d< |d d }|d d d|d d   }t|d t  dd	g¡d
ƒ t|d ||gd
ƒ d S )N)r   r   çš™™™™™É?r   r&   Tr„   ç      $@g±µA€\ð?gÐÉc‘"±?r(   )r   Úemptyr   r   r   )r    Zi1nr!   Zinp0Zinp1r"   r"   r#   Útest_sph_in.  s    
ÿÿzTestSphericalOld.test_sph_inc                 C   sî   d}t  d¡}td|ƒ|d< td|dd�|d< t  t  |¡| t  |¡| t  |¡|d   g¡}tt| |ƒ t  d¡}td|ƒ|d< td|dd�|d< t  dt	 t
| ƒ | d	t	 t
| ƒ d| d|d    g¡}tt| |ƒ d S )
Ng      ð?)r   r   Tr„   r&   r   r|   g      à¿)r   r“   r   r   r   r	   r   r   r   r   r
   )r    r!   Zsph_i0Zsph_i0_expectedZsph_k0Zsph_k0_expectedr"   r"   r#   Útest_sph_in_kn_order0>  s    
ÿ
$ÿz&TestSphericalOld.test_sph_in_kn_order0c                 C   sü   t  d¡}d}td|ƒ|d d< td|ƒ|d d< td|ƒ|d d< td|dd�|d d< td|dd�|d d< td|dd�|d d< |d d  }|d d d|d d   }|d d d	|d d   }t|d d
ddgdƒ t|d |||gdƒ d S )N©r   r   r‘   r   r&   r   Tr„   r’   ry   gkGì~Éï?g¥Åk‡�ÿ°?g’)ËÜqÈe?r(   )r   r“   r   r   )r    Ús1r!   Zs10Zs11Zs12r"   r"   r#   Útest_sph_jnN  s$    

þþzTestSphericalOld.test_sph_jnc                 C   s   t  d¡}d}td|ƒ|d d< td|ƒ|d d< td|ƒ|d d< td|dd�|d d< td|dd�|d d< td|dd�|d d< |d d  }|d d  d|d d   }|d d  d	|d d   }t|d d
ddgdƒ t|d |||gdƒ d S )Nr–   r‘   r   r&   r   Tr„   r’   ry   gDT»—Ÿ¸@g3Ì±wJC@gè-ßuAI‚@r(   é	   )r   r“   r   r   )r    Úknr!   Zkn0Zkn1Zkn2r"   r"   r#   Útest_sph_kna  s$    

þþzTestSphericalOld.test_sph_knc                 C   sf   t ddƒ}t ddƒ}t|ddƒ t|ddƒ t ddƒdt ddƒ  d }t ddd	d
�}t||dƒ d S )Nr   r‘   r   g[_$´e˜wÀr@   g&$Þð™Àr   r&   Tr„   é   )r   r   )r    Zsy1Zsy2ZsphpyZsy3r"   r"   r#   Útest_sph_ynt  s    

zTestSphericalOld.test_sph_ynN)rD   rE   rF   r”   r•   r˜   r›   r�   r"   r"   r"   r#   r�   *  s
   r�   )#Únumpyr   Znumpy.testingr   r   r   r   r~   r   r   r   r	   r
   r   r   r   r   Zscipy.specialr   r   r   r   Zscipy.integrater   r   rG   rS   r\   re   rn   r€   rˆ   r‹   rŽ   r�   r"   r"   r"   r#   Ú<module>   s    ,96.1