U
    »mœd¨%  ã                   @   sŒ   d dl Zd dlmZmZmZmZmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dl mZmZ dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ ZdS )é    N)Úassert_equalÚassert_almost_equalÚassert_allcloseÚassert_Úsuppress_warnings)Úassert_func_equal)Ú
ellip_harmÚellip_harm_2Úellip_normal)ÚIntegrationWarning©ÚsqrtÚpic            	   	      sî   dd„ ‰ dd„ ‰dd„ ‰‡‡fdd„} ‡ fd	d
„}dt dƒddt dƒdddfdt dƒddt dƒdddfg}tƒ �t}| td¡ | td¡ |D ]P}t|ƒ}||Ž }| |Ž \}}t||dd|d� tt|| ƒdt|ƒ k |ƒ qŽW 5 Q R X d S )Nc                 S   s–   t | d |d  |d  ||  ƒ}t | d | |d |  ||d   |||   ƒ}t | d | ||d   ||d   |||   ƒ}|||fS )Né   ©r   )Úlambda1ÚmuÚnuÚh2Úk2ÚxÚyÚz© r   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/special/tests/test_ellip_harm.pyÚchange_coefficient   s    $44z0test_ellip_potential.<locals>.change_coefficientc                 S   s0   t ||||| ƒt |||||ƒ t |||||ƒ S ©N)r   ©r   r   r   ÚnÚpr   r   r   r   r   Úsolid_int_ellip   s    ÿz-test_ellip_potential.<locals>.solid_int_ellipc                 S   s0   t ||||| ƒt|||||ƒ t|||||ƒ S r   ©r	   r   r   r   r   r   Úsolid_int_ellip2   s
    ÿÿz.test_ellip_potential.<locals>.solid_int_ellip2c                    s¬   d}d}	t dƒD ]’}
d}t dd|
 d ƒD ]R}|dt ˆ ||||
|||ƒˆ| |||
|||ƒ  t|||
|ƒd|
 d   7 }q*t|ƒd| t|	ƒ k rš q¤|	|7 }	q|	|fS )Nç:Œ0âŽyE>r   é   é   r   é   gš™™™™™¹?)Úranger   r
   Úabs)r   Úmu1Únu1Úlambda2Úmu2Únu2r   r   ZtolZsum1r   Zxsumr   )r    r"   r   r   Ú	summation   s    ÿþ
z'test_ellip_potential.<locals>.summationc                    s\   ˆ | ||||ƒ\}}	}
ˆ |||||ƒ\}}}t || d ||	 d  ||
 d  ƒ}d| S )Nr   r%   r   )r   r)   r*   r+   r,   r-   r   r   Úx1Úy1Zz1Zx2Úy2Zz2Úres)r   r   r   Ú	potential,   s    (z'test_ellip_potential.<locals>.potentialéx   é   r   é)   é   é   é   é   gš™™™™™	@é   é   g333333@r$   ú The occurrence of roundoff errorz"The maximum number of subdivisionsr   r#   )ZatolÚrtolÚerr_msgé
   )r   r   Úfilterr   Úreprr   r   r(   )	r.   r3   ZptsÚsupr   r?   ÚexactÚresultZ	last_termr   )r   r    r"   r   Útest_ellip_potential   s"    þrF   c                     sŽ  dd„ } dd„ }dd„ }dd„ }d	d
„ }dd„ }dd„ }dd„ }dd„ }dd„ }	dd„ }
dd„ }dd„ }dd„ }dd„ }dd „ }| |||||||||
|	|||||d!œ‰‡fd"d#„‰ t  ˆ ¡‰ ‡ fd$d%„}t j d&¡ t jjd'd(d)�}|d(t jjd'|jd)�  }g }td*ƒD ]F}td(d+| d+ ƒD ],}| ||t  |j|¡t  |j|¡f¡ �q �q
t  	|¡}t
ƒ �"}| td,¡ tt||d-d.� W 5 Q R X d S )/Nc                 S   s   dt  S )Nr&   ©r   ©r   r   r   r   r   ÚG01E   s    ztest_ellip_norm.<locals>.G01c                 S   s   dt  |  | d S ©Nr&   é   rG   rH   r   r   r   ÚG11H   s    ztest_ellip_norm.<locals>.G11c                 S   s   dt  |  ||   d S rJ   rG   rH   r   r   r   ÚG12K   s    ztest_ellip_norm.<locals>.G12c                 S   s   dt  | ||   d S rJ   rG   rH   r   r   r   ÚG13N   s    ztest_ellip_norm.<locals>.G13c                 S   s˜   d| d |d   d|  | | d |d    d| d  |d   t | d |d  | |  ƒd| d |d   d|  | | |     }dt d | S )Nr   r&   é   éþÿÿÿrK   r:   é•  r   ©r   r   r2   r   r   r   ÚG22Q   s    BBÿztest_ellip_norm.<locals>.G22c                 S   s˜   d| d |d   d|  | | d |d    d| d  |d   t | d |d  | |  ƒd| d |d   d|  | | |     }dt d | S )Nr   r&   rO   rK   r:   rQ   r   rR   r   r   r   ÚG21V   s    BBÿztest_ellip_norm.<locals>.G21c                 S   s    dt  | d  | ||   d S ©Nr&   r   r8   rG   rH   r   r   r   ÚG23[   s    ztest_ellip_norm.<locals>.G23c                 S   s    dt  |  |d  ||   d S rU   rG   rH   r   r   r   ÚG24^   s    ztest_ellip_norm.<locals>.G24c                 S   s    dt  |  | ||  d  d S rU   rG   rH   r   r   r   ÚG25a   s    ztest_ellip_norm.<locals>.G25c                 S   s¨   d| d |d   d|  | | d |d    d| d  |d   t d| d |d   d|  |  ƒd| d |d   d	|  | | |     }dt d
 | |  | S )Nr:   r&   é$   r   é.   é   éøÿÿÿrK   r<   éE3  r   rR   r   r   r   ÚG32d   s    B4ÿÿztest_ellip_norm.<locals>.G32c                 S   s¨   d| d |d   d|  | | d |d    d| d  |d   t d| d |d   d|  |  ƒd| d |d   d	|  | | |     }dt d
 |  | | S )Nr:   r&   rY   r   rZ   r[   é   rK   r<   r]   r   rR   r   r   r   ÚG31j   s    B4ÿÿztest_ellip_norm.<locals>.G31c                 S   sÀ   d| d  d|d   d| d  |  d|  |d   d| d  |d   t | d d|d   | |  ƒd	| d  d
|d   d| d  |  d|  |d     }dt d |  ||   | S )NrO   r&   r:   é   rK   é   é"   r   iúÿÿÿr_   é	   é   r]   r   rR   r   r   r   ÚG34p   s    JDÿÿztest_ellip_norm.<locals>.G34c                 S   sÀ   d| d  d|d   d| d  |  d|  |d   d| d  |d   t | d d|d   | |  ƒd| d  d	|d   d
| d  |  d|  |d     }dt d |  ||   | S )NrO   r&   r:   ra   rK   rb   rc   r   r_   rd   re   r]   r   rR   r   r   r   ÚG33v   s    JDÿÿztest_ellip_norm.<locals>.G33c                 S   sÀ   d| d  d|d   d| d  |  d|  |d   d| d  |d   t d| d  |d  | |  ƒd	| d  d|d   d
| d  |  d|  |d     }dt d | ||   | S )Nr:   r&   rO   rb   rK   ra   rc   r   r\   re   rd   r]   r   rR   r   r   r   ÚG36|   s    JDÿÿztest_ellip_norm.<locals>.G36c                 S   sÀ   d| d  d|d   d| d  |  d|  |d   d| d  |d   t d| d  |d  | |  ƒd	| d  d|d   d
| d  |  d|  |d     }dt d | ||   | S )Nr:   r&   rO   rb   rK   ra   rc   r   r_   re   rd   r]   r   rR   r   r   r   ÚG35‚   s    JDÿÿztest_ellip_norm.<locals>.G35c                 S   s(   dt  | d  |d  ||  d  d S )Nr&   r   éi   rG   rH   r   r   r   ÚG37ˆ   s    ztest_ellip_norm.<locals>.G37©)r   r%   )r%   r%   )r%   r   )r%   rK   )r   r%   )r   r   )r   rK   )r   r&   )r   é   )rK   r%   )rK   r   )rK   rK   )rK   r&   )rK   rm   )rK   rO   )rK   r[   c                    s   ˆ | |f }|||ƒS r   r   )r   r   r   r   Úfunc)Úknown_funcsr   r   Ú_ellip_norm�   s    z$test_ellip_norm.<locals>._ellip_normc                    s   ˆ ||| |ƒS r   r   )r   r   r   r   )rp   r   r   Úellip_normal_known•   s    z+test_ellip_norm.<locals>.ellip_normal_knownéÒ  ç      à?r%   ©Úsizer&   r   r=   çê-�™—q=©r>   )ÚnpZ	vectorizeÚrandomÚseedÚparetoru   r'   ÚappendÚfullÚarrayr   rA   r   r   r
   )rI   rL   rM   rN   rS   rT   rV   rW   rX   r^   r`   rf   rg   rh   ri   rk   rq   r   r   Úpointsr   r   rC   r   )rp   ro   r   Útest_ellip_normC   sX             ý
.
r€   c               	   C   s¶   dd„ } t ƒ �ž}| td¡ t| dddƒddtdƒ  ƒ ttddd	ddƒd
ƒ ttddd	d	dƒdƒ ttddd	ddƒdƒ ttddd	ddƒdƒ ttddd	ddƒdƒ W 5 Q R X d S )Nc              	   S   sp   t | |dd|ƒdt| |dd|ƒ  t | |dd|ƒdt| |dd|ƒ   t | |dd|ƒdt| |dd|ƒ   }|S )Nr%   rK   r   r!   )r   r   Úsr2   r   r   r   ÚI1©   s    ""ÿ"þztest_ellip_harm_2.<locals>.I1r=   rm   r_   r@   r%   i$"  r   g$Ðâ ;´Q?g¬¾yoVQ?rK   g©Ã<i`Q?r&   gÏ™ar~Q?gTz�LÛ°Q?)r   rA   r   r   r   r	   )r‚   rC   r   r   r   Útest_ellip_harm_2§   s    rƒ   c                     s¤  dd„ } dd„ }dd„ }dd„ }d	d
„ }dd„ }dd„ }dd„ }dd„ }dd„ }	dd„ }
dd„ }dd„ }dd„ }dd„ }dd „ }t td!d"d#d$d%d#d#ƒtd!d"d#d$d%ƒƒ | |||||||||	|
|||||d&œ‰ g ‰‡ ‡fd'd(„}tj d)¡ tjjd*d+d,�}|d#tjjd*|jd,�  }tjjd*|jd,�}g }t|jƒD ]P}td-ƒD ]@}td#d$| d$ ƒD ]&}| || || |||| f¡ �qV�q@�q4t 	|¡}t
t||d.d/� d S )0Nc                 S   s   dS )Nr%   r   ©r   r   r�   r   r   r   ÚE01½   s    ztest_ellip_harm.<locals>.E01c                 S   s   |S r   r   r„   r   r   r   ÚE11À   s    ztest_ellip_harm.<locals>.E11c                 S   s   t t|| |  ƒƒS r   ©r   r(   r„   r   r   r   ÚE12Ã   s    ztest_ellip_harm.<locals>.E12c                 S   s   t t|| | ƒƒS r   r‡   r„   r   r   r   ÚE13Æ   s    ztest_ellip_harm.<locals>.E13c                 S   s8   || d| | t t| | | |  d|  |  ƒƒ   S ©NgUUUUUUÕ?rK   r‡   r„   r   r   r   ÚE21É   s    ztest_ellip_harm.<locals>.E21c                 S   s8   || d| | t t| | | |  d|  |  ƒƒ   S rŠ   r‡   r„   r   r   r   ÚE22Ì   s    ztest_ellip_harm.<locals>.E22c                 S   s   |t t|| |  ƒƒ S r   r‡   r„   r   r   r   ÚE23Ï   s    ztest_ellip_harm.<locals>.E23c                 S   s   |t t|| | ƒƒ S r   r‡   r„   r   r   r   ÚE24Ò   s    ztest_ellip_harm.<locals>.E24c                 S   s    t t|| |  || |  ƒƒS r   r‡   r„   r   r   r   ÚE25Õ   s    ztest_ellip_harm.<locals>.E25c                 S   sD   || | |d d| |  t d| |  | |  d|  |  ƒ   S ©Nrm   r   r&   r8   r   r„   r   r   r   ÚE31Ø   s    .
ÿztest_ellip_harm.<locals>.E31c                 S   sD   || | |d d| |  t d| |  | |  d|  |  ƒ   S r�   r   r„   r   r   r   ÚE32Ü   s    .
ÿztest_ellip_harm.<locals>.E32c              
   S   sX   t t|| |  ƒƒ|| d| d|  t t| d|  | d|   d|  |  ƒƒ    S ©Nçš™™™™™É?r   rm   r‡   r„   r   r   r   ÚE33à   s    *ÿ
ÿ
ÿztest_ellip_harm.<locals>.E33c              
   S   sX   t t|| |  ƒƒ|| d| d|  t t| d|  | d|   d|  |  ƒƒ    S r“   r‡   r„   r   r   r   ÚE34ä   s    *ÿ
ÿ
ÿztest_ellip_harm.<locals>.E34c              	   S   sX   t t|| | ƒƒ|| dd|  | t td|  | d|  |  d|  |  ƒƒ    S r“   r‡   r„   r   r   r   ÚE35è   s    .ÿ
ÿ
ÿztest_ellip_harm.<locals>.E35c              	   S   sX   t t|| | ƒƒ|| dd|  | t td|  | d|  |  d|  |  ƒƒ    S r“   r‡   r„   r   r   r   ÚE36ì   s    .ÿ
ÿ
ÿztest_ellip_harm.<locals>.E36c                 S   s$   |t t|| |  || |  ƒƒ S r   r‡   r„   r   r   r   ÚE37ð   s    ztest_ellip_harm.<locals>.E37rm   r_   r%   r   g      @rl   c                    sN   t | jƒD ]>}ˆ t|| ƒt|| ƒf }ˆ || | || || ƒ¡ q
ˆS r   )r'   ru   Úintr|   )r   r   r   r   r�   Úirn   ©ro   Z	point_refr   r   Úellip_harm_knowný   s     z)test_ellip_harm.<locals>.ellip_harm_knownrr   rs   é   rt   r&   rv   rw   )r   r   rx   ry   rz   r{   ru   r'   r|   r~   r   )r…   r†   rˆ   r‰   r‹   rŒ   r�   rŽ   r�   r‘   r’   r•   r–   r—   r˜   r™   r�   r   r   r�   r   r›   r   r   r   rœ   r   Útest_ellip_harm»   s\    ÿ         ý,
rŸ   c                  C   s2   d} d|  d }t dd| |dƒ}t |¡s.t‚d S )Nr&   r   rs   g       @r”   )r   rx   ÚisnanÚAssertionError)r   r   rE   r   r   r   Útest_ellip_harm_invalid_p  s    r¢   )Únumpyrx   Znumpy.testingr   r   r   r   r   Zscipy.special._testutilsr   Zscipy.specialr   r	   r
   Zscipy.integrater   r   r   rF   r€   rƒ   rŸ   r¢   r   r   r   r   Ú<module>   s   4dU