U
    Hvf%                     @   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 | qW 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   G/tmp/pip-unpacked-wheel-96ln3f52/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: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   x1y1Zz1Zx2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.   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   ir_   	      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?gyoVQ?rK   g<i`Q?r&   gϙar~Q?gTzL۰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   )Z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