o
    Eb%                     @   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d |td |D ](}t|}|| }| | \}}t||dd|d tt|| dt| k | qGW d    d S 1 s{w   Y  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   E/usr/lib/python3/dist-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 ]L}
d}t dd|
 d D ])}|dt  ||||
|||| |||
|||  t|||
|d|
 d   7 }qt|d| t|	 k rP |	|fS |	|7 }	q|	|fS )N:0yE>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   Zx1Zy1Zz1Zx2Zy2Zz2res)r   r   r   	potential,   s   (z'test_ellip_potential.<locals>.potentialx      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.   r0   Zptssupr   r<   exactresultZ	last_termr   )r   r    r"   r   test_ellip_potential   s&    "rC   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  }i d!| d"|d#|d$|d%|d&|d'|d(|d)|d*|
d+|	d,|d-|d.|d/|d0|fd1d2 t    fd3d4}t jd5 t jjd6d7d8}|d7t jjd6|jd8  }g }td9D ]!}td7d:| d: D ]}|||t |j|t |j|f qqt 	|}t
 }|td; tt||d<d= W d    d S 1 sw   Y  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&      rD   rE   r   r   r   G11H      ztest_ellip_norm.<locals>.G11c                 S   s   dt  |  ||   d S rG   rD   rE   r   r   r   G12K      ztest_ellip_norm.<locals>.G12c                 S   s   dt  | ||   d S rG   rD   rE   r   r   r   G13N   rL   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&      rH   r7     r   r   r   r/   r   r   r   G22Q      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&   rN   rH   r7   rP   r   rQ   r   r   r   G21V   rS   ztest_ellip_norm.<locals>.G21c                 S   s    dt  | d  | ||   d S Nr&   r   r5   rD   rE   r   r   r   G23[       ztest_ellip_norm.<locals>.G23c                 S   s    dt  |  |d  ||   d S rU   rD   rE   r   r   r   G24^   rW   ztest_ellip_norm.<locals>.G24c                 S   s    dt  |  | ||  d  d S rU   rD   rE   r   r   r   G25a   rW   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 )Nr7   r&   $   r   .      rH   r9   E3  r   rQ   r   r   r   G32d      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 )Nr7   r&   rZ   r   r[   r\      rH   r9   r^   r   rQ   r   r   r   G31j   r`   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 )NrN   r&   r7      rH      "   r   ira   	      r^   r   rQ   r   r   r   G34p      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 )NrN   r&   r7   rc   rH   rd   re   r   ra   rf   rg   r^   r   rQ   r   r   r   G33v   ri   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 )Nr7   r&   rN   rd   rH   rc   re   r   r]   rg   rf   r^   r   rQ   r   r   r   G36|   ri   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 )Nr7   r&   rN   rd   rH   rc   re   r   ra   rg   rf   r^   r   rQ   r   r   r   G35   ri   ztest_ellip_norm.<locals>.G35c                 S   s(   dt  | d  |d  ||  d  d S )Nr&   r   i   rD   rE   r   r   r   G37   s   (ztest_ellip_norm.<locals>.G37r   r%   r%   r%   r%   r   r%   rH   r   r%   r   r   r   rH   r   r&   r      rH   r%   rH   r   rH   rH   rH   r&   rH   rx   rH   rN   rH   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   )r   r   r   ellip_normal_known   s   z+test_ellip_norm.<locals>.ellip_normal_known        ?r%   sizer&   r   r:   -q=r;   )npZ	vectorizerandomseedparetor   r'   appendZfullarrayr   r>   r   r   r
   )rF   rI   rK   rM   rR   rT   rV   rX   rY   r_   rb   rh   rj   rk   rl   rn   r   r   r   pointsr   r   r@   r   )r   r   r   test_ellip_normC   sr   
(
"r   c                  C   s   dd } t  U}|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 d    d S 1 s_w   Y  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%   rH   r   r!   )r   r   sr/   r   r   r   I1   s   """ztest_ellip_harm_2.<locals>.I1r:   rx   ra   r=   r%   i$"  r   g$;Q?gyoVQ?rH   g<i`Q?r&   gϙar~Q?gTzL۰Q?)r   r>   r   r   r   r	   )r   r@   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% i d&| d'|d(|d)|d*|d+|d,|d-|d.|d/|	d0|
d1|d2|d3|d4|d5| g  fd6d7}tjd8 tjjd9d:d;}|d#tjjd9|jd;  }tjjd9|jd;}g }t|jD ]%}td<D ]}td#d$| d$ D ]}||| || |||| f qqqt	|}t
t||d=d> d S )?Nc                 S   s   dS )Nr%   r   r   r   r   r   r   r   E01      ztest_ellip_harm.<locals>.E01c                 S   s   |S r   r   r   r   r   r   E11   r   ztest_ellip_harm.<locals>.E11c                 S   s   t t|| |  S r   r   r(   r   r   r   r   E12   rJ   ztest_ellip_harm.<locals>.E12c                 S   s   t t|| | S r   r   r   r   r   r   E13   rJ   ztest_ellip_harm.<locals>.E13c                 S   s8   || d| | t t| | | |  d|  |     S NgUUUUUU?rH   r   r   r   r   r   E21      8ztest_ellip_harm.<locals>.E21c                 S   s8   || d| | t t| | | |  d|  |     S r   r   r   r   r   r   E22   r   ztest_ellip_harm.<locals>.E22c                 S   s   |t t|| |   S r   r   r   r   r   r   E23   rL   ztest_ellip_harm.<locals>.E23c                 S   s   |t t|| |  S r   r   r   r   r   r   E24   rL   ztest_ellip_harm.<locals>.E24c                 S   s    t t|| |  || |  S r   r   r   r   r   r   E25   rW   ztest_ellip_harm.<locals>.E25c                 S   sD   || | |d d| |  t d| |  | |  d|  |     S Nrx   r   r&   r5   r   r   r   r   r   E31      .
ztest_ellip_harm.<locals>.E31c                 S   sD   || | |d d| |  t d| |  | |  d|  |     S r   r   r   r   r   r   E32   r   ztest_ellip_harm.<locals>.E32c              
   S   sX   t t|| |  || d| d|  t t| d|  | d|   d|  |      S N皙?r   rx   r   r   r   r   r   E33      *

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   r   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      .

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   r   ztest_ellip_harm.<locals>.E36c                 S   s$   |t t|| |  || |   S r   r   r   r   r   r   E37   s   $ztest_ellip_harm.<locals>.E37rx   ra   r%   r   g      @ro   rp   rq   rr   rs   rt   ru   rv   rw   ry   rz   r{   r|   r}   r~   r   c                    sN   t | jD ]} t|| t|| f }|| | || ||  qS r   )r'   r   intr   )r   r   r   r   r   ir   r   Z	point_refr   r   ellip_harm_known   s    z)test_ellip_harm.<locals>.ellip_harm_knownr   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   r   r   r   r   r   r   r   r   r   r   r   r   test_ellip_harm   sv   "
r   c                  C   s2   d} d|  d }t dd| |d}t|sJ d S )Nr&   r   r   g       @r   )r   r   Zisnan)r   r   rB   r   r   r   test_ellip_harm_invalid_p  s   r   )Znumpyr   Znumpy.testingr   r   r   r   r   Zscipy.special._testutilsr   Zscipy.specialr   r	   r
   Zscipy.integrater   r   r   rC   r   r   r   r   r   r   r   r   <module>   s   4dU