a
    .'a5                     @   s   d dl Z d dlZd dlZd dl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Zd dlmZmZmZmZ d dlmZ d dlZd dlZd dlmZ d dlm  mZ  ddd	Z!d
d Z"G dd dZ#G dd dZ$G dd dZ%G dd dZ&dS )    N)sqrtcossinarctanexplogpiInf)assert_assert_allcloseassert_array_lessassert_almost_equal)quaddblquadtplquadnquad)LowLevelCallable)sine_ctypes+i)+P>c                 C   s.   | \}}t |||dd |d ur*t|| d S )Nr   )atolZrtol)r   r   )Zvalue_and_errZtabled_valueerrTolvalueerr r   Blib/python3.9/site-packages/scipy/integrate/tests/test_quadpack.pyassert_quad   s    r   c                 G   s$   t t| }t|tj|g|R  S N)getattr	clib_testctypescastZ	CFUNCTYPE)namerestypeargtypesZptrr   r   r   get_clib_test_routine   s    
r$   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestCtypesQuadc              	   C   s   t jdkrdg}nt jdkr$dg}nddg}|D ].}zt|| _W  qjW q0 ty\   Y q00 q0td tj}tjf}dD ]}t	| j|}||_
||_q|d S )	NZwin32zapi-ms-win-crt-math-l1-1-0.dlldarwinz
libm.dylibzlibm.soz	libm.so.6zCtypes can't import libm.so)r   r   tan)sysplatformr   ZCDLLlibOSErrorpytestskipc_doubler   r"   r#   )selffilesfiler"   r#   r!   funcr   r   r   setup_method    s$    



zTestCtypesQuad.setup_methodc                 C   sp   t t| jjddttjddd  t t| jjddttjddd  t t| jjddttjddd  d S )Nr         )r   r   r*   r   mathr   r'   r/   r   r   r   test_typical:   s    $$zTestCtypesQuad.test_typicalc                 C   s   t ttdd d S Nr   r5   )r   r   r   r7   r   r   r   test_ctypes_sine?   s    zTestCtypesQuad.test_ctypes_sinec                 C   s"  t dtjtjtj}t dtjtjttjtj}t dtjtj}t dtjtjttj}t dtjtjtj}|||||g}||g}|g}t|D ]B\}	}
t|
}|
|v rt	t
t|dt qtt|dtd d qt|D ]<\}	}
|
|v r
tt|
dtd d qt	t
t|
dt qd S )NZ_sin_0Z_sin_1Z_sin_2Z_sin_3r          @)r$   r   r.   Zc_void_pc_intZPOINTER	enumerater   r,   Zraises
ValueErrorr   r   r   )r/   Zsin_0Zsin_1Zsin_2Zsin_3Zsin_4Zall_sigsZlegacy_sigsZlegacy_only_sigsjr2   callbackr   r   r   test_ctypes_variantsB   s8    
z#TestCtypesQuad.test_ctypes_variantsN)__name__
__module____qualname__r3   r8   r:   rA   r   r   r   r   r%      s   r%   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestMultivariateCtypesQuadc                 C   s>   t j}t jt jf}dD ]"}t||g|R  }t| || qd S )N)_multivariate_typical_multivariate_indefinite_multivariate_sin)r   r.   r<   r$   setattr)r/   r"   r#   r!   r2   r   r   r   r3   h   s
    z'TestMultivariateCtypesQuad.setup_methodc                 C   s   t t| jdtdd d S )Nr      g?ۗ?)r   r   rF   r   r7   r   r   r   r8   p   s    z'TestMultivariateCtypesQuad.test_typicalc                 C   s   t t| jdtd d S )Nr   ox?)r   r   rG   r	   r7   r   r   r   test_indefiniteu   s    z*TestMultivariateCtypesQuad.test_indefinitec                    s"    fdd}t t|ddd d S )Nc                    s   | t  jddd  S r9   )r   rH   )yr7   r   r   threadsafety|   s    zBTestMultivariateCtypesQuad.test_threadsafety.<locals>.threadsafetyr   r5   gtJ׵?)r   r   )r/   rP   r   r7   r   test_threadsafetyz   s    z,TestMultivariateCtypesQuad.test_threadsafetyN)rB   rC   rD   r3   r8   rN   rQ   r   r   r   r   rE   g   s   rE   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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 )"TestQuadc                 C   s    dd }t t|dtdd d S )Nc                 S   s   t ||  |t|   t S r   )r   r   r   )xnzr   r   r   myfunc   s    z%TestQuad.test_typical.<locals>.myfuncr   rJ   rL   )r   r   r   r/   rV   r   r   r   r8      s    zTestQuad.test_typicalc                 C   s   dd }t t|dtd d S )Nc                 S   s   t |   t|  S r   )r   r   rS   r   r   r   rV      s    z(TestQuad.test_indefinite.<locals>.myfuncr   rM   r   r   r	   rW   r   r   r   rN      s    zTestQuad.test_indefinitec                 C   s>   dd }t t|ddddgddtd td	 td
  d S )Nc                 S   sJ   d|   k rdk r n nt | S d|   kr4dkrBn n
t|  S dS d S )Nr         @      @g        )r   r   rX   r   r   r   rV      s
    
z&TestQuad.test_singular.<locals>.myfuncr   
   rZ   r[   )pointsr5   g      g      )r   r   r   r   rW   r   r   r   test_singular   s    zTestQuad.test_singularc              	   C   sV   dd }d}t t|dddd|ddt| |t|  |td	  d
|d    d S )Nc                 S   s   t || d  S Nr5   r   rS   ar   r   r   rV      s    z2TestQuad.test_sine_weighted_finite.<locals>.myfuncglSS%@r   r5      r   argsweightwvarii  rK   )r   r   r   r   r   )r/   rV   omer   r   r   test_sine_weighted_finite   s
    .z"TestQuad.test_sine_weighted_finitec              	   C   s>   dd }d}d}t t|dt|d|d||d |d    d S )	Nc                 S   s   t |  | S r   r`   ra   r   r   r   rV      s    z4TestQuad.test_sine_weighted_infinite.<locals>.myfunc      @      @r   r   rd   rK   rY   r/   rV   rb   rh   r   r   r   test_sine_weighted_infinite   s    z$TestQuad.test_sine_weighted_infinitec              	   C   s@   dd }d}d}t t|t d|d|d||d |d    d S )	Nc                 S   s   t | | S r   r`   ra   r   r   r   rV      s    z6TestQuad.test_cosine_weighted_infinite.<locals>.myfuncrZ   gffffff@r   r   rd   rK   rY   rl   r   r   r   test_cosine_weighted_infinite   s    z&TestQuad.test_cosine_weighted_infinitec              	   C   sD   dd }d}t t|dd|dddttdd	|   d	 d   d S )
Nc                 S   s   dd|  d|    S Nr5   rK   r   ra   r   r   r   rV      s    z2TestQuad.test_algebraic_log_weight.<locals>.myfunc      ?r5   alg)      rs   rd   rK   )r   r   r   r   )r/   rV   rb   r   r   r   test_algebraic_log_weight   s    z"TestQuad.test_algebraic_log_weightc              	   C   s   dd }d}dt d dt d|  d d|  d	    td
|d   td
|  d|  d	  }tt|ddddd
d|dd d S )Nc                 S   s    d|  | d d d|    S )Nr;   r5   rK   rj   r   ra   r   r   r   rV      s    z-TestQuad.test_cauchypv_weight.<locals>.myfuncg?g\`@?rp   g]`@?rj      r5   r;   rK   r   r4   Zcauchyrd   g#fT>)r   )r   r   r   r   )r/   rV   rb   ZtabledValuer   r   r   test_cauchypv_weight   s    
"
zTestQuad.test_cauchypv_weightc                 C   sN   dd }t |dtjdd\}}t |tjddd\}}t|| t||d d S )Nc                 S   s   |t | |   S r   )npr   )rS   pqr   r   r   f   s    z&TestQuad.test_b_less_than_a.<locals>.fr   rK      re   r   r   rw   infr   maxr/   rz   Zval_1Zerr_1Zval_2Zerr_2r   r   r   test_b_less_than_a   s    zTestQuad.test_b_less_than_ac                 C   sV   dd }t |tj tjdd\}}t |tjtj dd\}}t|| t||d d S )Nc                 S   s&   t | d  d | t d|  S )NrK   r;   )rw   r   r   )rS   sr   r   r   rz      s    z(TestQuad.test_b_less_than_a_2.<locals>.f)rK   r}   r~   r   r   r   r   r   test_b_less_than_a_2   s    zTestQuad.test_b_less_than_a_2c                 C   sN   dd }t |ddddd\}}t |ddddd\}}t|| t||d d S )	Nc                 S   s   dS N      ?r   rX   r   r   r   rz      s    z(TestQuad.test_b_less_than_a_3.<locals>.fr   r5   rr   r   r   )rf   rg   r~   )r   r   r   r   r   r   r   test_b_less_than_a_3   s    zTestQuad.test_b_less_than_a_3c                 C   s^   dd }t |dddddd}t |dddddd}t|d |d }t|d |d  |d	 d S )
Nc                 S   s   dS r   r   rX   r   r   r   rz      s    z2TestQuad.test_b_less_than_a_full_output.<locals>.fr   r5   rr   r   T)rf   rg   full_outputr~   )r   r   r   )r/   rz   Zres_1Zres_2r   r   r   r   test_b_less_than_a_full_output   s
    z'TestQuad.test_b_less_than_a_full_outputc                 C   sB   dd }d\}}t t|||dd dd d|d |d    d S )	Nc                 S   s   ||  S r   r   rO   rS   r   r   r   simpfunc   s    z/TestQuad.test_double_integral.<locals>.simpfuncr   r;   c                 S   s   | S r   r   rX   r   r   r   <lambda>       z/TestQuad.test_double_integral.<locals>.<lambda>c                 S   s   d|  S NrK   r   rX   r   r   r   r      r   g?rk   r   r   r/   r   rb   br   r   r   test_double_integral   s
    zTestQuad.test_double_integralc              	   C   s:   dd }dd }dd }d}t t|dd|||d	d
 d S )Nc                 S   s   | | | | S r   r   )x0x1t0t1r   r   r   r2      s    z,TestQuad.test_double_integral2.<locals>.funcc                 S   s   | S r   r   rX   r   r   r   r      r   z0TestQuad.test_double_integral2.<locals>.<lambda>c                 S   s   d|  S r   r   rX   r   r   r   r      r   )r5   rK   r5   rK   r}   g$@r   )r/   r2   ghre   r   r   r   test_double_integral2   s
    zTestQuad.test_double_integral2c                 C   s"   dd }t t|ddddd d S )Nc                 S   s   | | d d S ro   r   r   r   r   r   r   r2     s    z,TestQuad.test_double_integral3.<locals>.funcr5   rK   g      @r   )r/   r2   r   r   r   test_double_integral3  s    zTestQuad.test_double_integral3c              
   C   sP   dd }d\}}t t|||dd dd dd dd d	d
|d |d    d S )Nc                 S   s   || |  | S r   r   )rU   rO   rS   tr   r   r   r   	  s    z/TestQuad.test_triple_integral.<locals>.simpfuncr   c                 S   s   | S r   r   rX   r   r   r   r     r   z/TestQuad.test_triple_integral.<locals>.<lambda>c                 S   s   d|  S r   r   rX   r   r   r   r     r   c                 S   s   | | S r   r   rS   rO   r   r   r   r     r   c                 S   s   | | S r   r   r   r   r   r   r     r   )r;   gUUUUUU@rj   )r   r   r   r   r   r   test_triple_integral  s    
zTestQuad.test_triple_integralN)rB   rC   rD   r8   rN   r^   ri   rm   rn   rt   rv   r   r   r   r   r   r   r   r   r   r   r   r   rR      s    	


		rR   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d Z	dd Z
dd Zdd ZdS )	TestNQuadc                 C   sz   dd }dd }t |ddgddgdd	gd
dgg|i i i gdd}t|d d d t|d d dkor|d d dk  d S )Nc                 S   sJ   | d ||  |d  t |  | d|  d d|  dkr@dnd }|S )NrK   r|   皙?      ?      ?r   r5   rw   r   )r   r   x2x3valr   r   r   func1  s     "z*TestNQuad.test_fixed_limits.<locals>.func1c                  W   s"   dd| d  d d| d   giS )Nr]   r   rK   r   r   r   r   r}   r   r   r   
opts_basic  s    z/TestNQuad.test_fixed_limits.<locals>.opts_basicr   r5   rq   gp=
ף?g?g333333ÿT)optsr   g5m?Znevalg     jA)r   r   r
   )r/   r   r   resr   r   r   test_fixed_limits  s    zTestNQuad.test_fixed_limitsc                    s   d dd } fdd} fdd} fdd	} fd
d}dd }dd }dd }dd }	t |||||gd||||	gd}
t|
d d S )Ng?c                 S   s>   | | |d  t | d | ||  | dkr4dnd }|S )NrK   r5   r   r   )r   r   r   r   r   r   r   r   r   r   func2&  s    z-TestNQuad.test_variable_limits.<locals>.func2c                    sT    | d | t || |  d  d  | d | t || |  d  d gS NrK   r5   )rw   r   r   r   r   r   r   Zscaler   r   lim0+  s    ((z,TestNQuad.test_variable_limits.<locals>.lim0c                    s0    ||  ||   d  ||  ||   d gS r_   r   r   r   r   r   r   r   r   lim1/  s    z,TestNQuad.test_variable_limits.<locals>.lim1c                    s8    | |d |d    d  | |d |d    d gS NrK   r|   r5   r   r   r   r   r   r   r   lim23  s    z,TestNQuad.test_variable_limits.<locals>.lim2c                    s     | |  d  | |  d gS r_   r   r   r   r   r   r   lim37  s    z,TestNQuad.test_variable_limits.<locals>.lim3c                 S   s   d|||   giS )Nr]   r   r   r   r   r   opts0:  s    z-TestNQuad.test_variable_limits.<locals>.opts0c                 S   s   i S r   r   r   r   r   r   opts1=  s    z-TestNQuad.test_variable_limits.<locals>.opts1c                 S   s   i S r   r   r   r   r   r   opts2@  s    z-TestNQuad.test_variable_limits.<locals>.opts2c                 S   s   i S r   r   r   r   r   r   opts3C  s    z-TestNQuad.test_variable_limits.<locals>.opts3r   )re   r   g9@)r   r   )r/   r   r   r   r   r   r   r   r   r   r   r   r   r   test_variable_limits#  s    
zTestNQuad.test_variable_limitsc                 C   s0   dd }t t|ddgddggi i gdd d S )Nc                 S   s   dS r   r   r   r   r   r   rz   K  s    z9TestNQuad.test_square_separate_ranges_and_opts.<locals>.frq   r5   r   rj   r   r   )r/   rz   r   r   r   $test_square_separate_ranges_and_optsJ  s    z.TestNQuad.test_square_separate_ranges_and_optsc                 C   s4   dd }ddg}i }t t|||g||gdd d S )Nc                 S   s   dS r   r   r   r   r   r   rz   Q  s    z8TestNQuad.test_square_aliased_ranges_and_opts.<locals>.frq   r5   r   rj   r   )r/   rz   rZoptr   r   r   #test_square_aliased_ranges_and_optsP  s    z-TestNQuad.test_square_aliased_ranges_and_optsc                 C   sP   dd }dd }dd }dd }d	d
 }||g}||g}t t|||dd d S )Nc                 S   s   dS r   r   r   r   r   r   rz   Y  s    z<TestNQuad.test_square_separate_fn_ranges_and_opts.<locals>.fc                  W   s   dS N)rq   r5   r   r}   r   r   r   	fn_range0\  s    zDTestNQuad.test_square_separate_fn_ranges_and_opts.<locals>.fn_range0c                  W   s   dS r   r   r}   r   r   r   	fn_range1_  s    zDTestNQuad.test_square_separate_fn_ranges_and_opts.<locals>.fn_range1c                  W   s   i S r   r   r}   r   r   r   fn_opt0b  s    zBTestNQuad.test_square_separate_fn_ranges_and_opts.<locals>.fn_opt0c                  W   s   i S r   r   r}   r   r   r   fn_opt1e  s    zBTestNQuad.test_square_separate_fn_ranges_and_opts.<locals>.fn_opt1r   rj   r   )r/   rz   r   r   r   r   rangesr   r   r   r   'test_square_separate_fn_ranges_and_optsX  s    z1TestNQuad.test_square_separate_fn_ranges_and_optsc                 C   s@   dd }dd }dd }||g}||g}t t|||dd d S )	Nc                 S   s   dS r   r   r   r   r   r   rz   m  s    z;TestNQuad.test_square_aliased_fn_ranges_and_opts.<locals>.fc                  W   s   dS r   r   r}   r   r   r   fn_rangep  s    zBTestNQuad.test_square_aliased_fn_ranges_and_opts.<locals>.fn_rangec                  W   s   i S r   r   r}   r   r   r   fn_opts  s    z@TestNQuad.test_square_aliased_fn_ranges_and_opts.<locals>.fn_optr   rj   r   )r/   rz   r   r   r   r   r   r   r   &test_square_aliased_fn_ranges_and_optsl  s    z0TestNQuad.test_square_aliased_fn_ranges_and_optsc                 C   sF   dd }t |dd\}}t|ddggd\}}t|| t|| d S )Nc                 S   s   | d d S r   r   rX   r   r   r   r2   {  s    z*TestNQuad.test_matching_quad.<locals>.funcr      )r   )r   r   r   )r/   r2   r   reserrres2reserr2r   r   r   test_matching_quadz  s
    
zTestNQuad.test_matching_quadc                 C   sR   dd }t |dddd dd \}}t|dd	gd
g\}}t|| t|| d S )Nc                 S   s   | d |d  | |  d S r   r   r   r   r   r   func2d  s    z/TestNQuad.test_matching_dblquad.<locals>.func2drK   c                 S   s   dS )Nr   rX   r   r   r   r     r   z1TestNQuad.test_matching_dblquad.<locals>.<lambda>c                 S   s   dS )Nr|   r   rX   r   r   r   r     r   r   r|   )r   rK   )r   r   r   )r/   r   r   r   r   r   r   r   r   test_matching_dblquad  s
    
zTestNQuad.test_matching_dblquadc              
   C   s`   dd }t |dddd dd dd d	d d
d}t|tj tjgddgdgd
d}t|| d S )Nc                 S   s.   | d ||d   | |  d |t |  S r   r   )r   r   r   Zc0Zc1r   r   r   func3d  s    z/TestNQuad.test_matching_tplquad.<locals>.func3drq   rK   c                 S   s   dS )Nr   r   rX   r   r   r   r     r   z1TestNQuad.test_matching_tplquad.<locals>.<lambda>c                 S   s   dS r   r   rX   r   r   r   r     r   c                 S   s   t j S r   rw   r   r   r   r   r   r     r   c                 S   s   t jS r   r   r   r   r   r   r     r   r{   r}   r   )rq   rK   )r   r   rw   r   r   )r/   r   r   r   r   r   r   test_matching_tplquad  s    "zTestNQuad.test_matching_tplquadc                 C   sF   z&t dd ddgddggddid W n ty@   ds<J Y n0 d S )	Nc                 S   s   | | S r   r   r   r   r   r   r     r   z-TestNQuad.test_dict_as_opts.<locals>.<lambda>r   r5   Zepsrelg-C6?r   F)r   	TypeErrorr7   r   r   r   test_dict_as_opts  s    &zTestNQuad.test_dict_as_optsN)rB   rC   rD   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   '		
r   )r   )'r(   r6   Znumpyrw   r   r   r   r   r   r   r   r	   Znumpy.testingr
   r   r   r   r,   Zscipy.integrater   r   r   r   Zscipy._lib._ccallbackr   r   Zctypes.utilZscipy._lib._ccallback_cr   Z"scipy.integrate._test_multivariateZ	integrateZ_test_multivariater   r   r$   r%   rE   rR   r   r   r   r   r   <module>   s$   (
H 