o
    Ö­jXn  ã                   @   s<  d dl Z d dlZd dlmZmZmZ d dlmZ d dl	m
Z d dlm  m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 d dlmZmZmZ d dlm Z m!Z! d dl"m#Z# e j$j%Z%G d	d
„ d
ƒZ&G dd„ dƒZ'G dd„ dƒZ(e G dd„ dƒƒZ)G dd„ dƒZ*dddddœdd„Z+G dd„ dƒZ,G dd„ dƒZ-dS )é    N)Úassert_equalÚassert_almost_equalÚassert_allclose)Úgiven)	ÚrombÚnewton_cotesÚcumulative_trapezoidÚ	trapezoidÚquadÚsimpsonÚ
fixed_quadÚqmc_quadÚcumulative_simpson)Ú%_cumulative_simpson_unequal_intervals)ÚstatsÚspecialÚ	integrate)Úarray_api_compatibleÚskip_xp_invalid_arg)Úxp_assert_closec                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestFixedQuadc                    s>   d‰ ddˆ   }t ‡ fdd„ddˆ d�\}}t||dd	� d S )
Né   é   é   c                    s   | dˆ  d  S )Nr   r   © ©Úx©Únr   úb/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/integrate/tests/test_quadrature.pyÚ<lambda>   s    z+TestFixedQuad.test_scalar.<locals>.<lambda>r   r   çê-�™—q=©Úrtol)r   r   )ÚselfÚexpectedÚgotÚ_r   r   r   Útest_scalar   s   zTestFixedQuad.test_scalarc                    sN   d}t  dd| ¡‰ dˆ d  }t‡ fdd„dd|d�\}}t||dd	� d S )
Nr   r   r   c                    s   | ˆ d d …d f  S ©Nr   r   ©Úpr   r   r    "   ó    z+TestFixedQuad.test_vector.<locals>.<lambda>r   r   r!   r"   )ÚnpÚaranger   r   )r$   r   r%   r&   r'   r   r*   r   Útest_vector   s
   zTestFixedQuad.test_vectorN)Ú__name__Ú
__module__Ú__qualname__r(   r/   r   r   r   r   r      s    r   c                   @   sV   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
 dddg¡dd„ ƒZdS )ÚTestQuadraturec                 C   s   t ‚r)   )ÚNotImplementedError)r$   r   ÚaÚbÚargsr   r   r   r
   '   s   zTestQuadrature.quadc                 C   s   t tt d¡ƒdƒ d S )Né   é€   )r   r   r-   r.   ©r$   r   r   r   Ú	test_romb*   s   zTestQuadrature.test_rombc                 C   sP   t  d¡}t  d| ¡}t|ƒ}tdd„ | ¡ | ¡ ƒ\}}t||ddd� d S )Nr8   çš™™™™™É?c                 S   s   t  d|  ¡S )Nr<   )r-   Úcosr   r   r   r   r    2   ó    z2TestQuadrature.test_romb_gh_3731.<locals>.<lambda>g:Œ0âŽyE>r   ©r#   Úatol)r-   r.   r=   r   r
   ÚminÚmaxr   )r$   r   ÚyÚvalÚval2Úerrr   r   r   Útest_romb_gh_3731-   s
   
z TestQuadrature.test_romb_gh_3731c                 C   s  d}t |dƒ\}}t||t ddg¡ ƒ t||d  d ƒ d}t |dƒ\}}t||t g d¢¡ d ƒ t||d  d	 ƒ d}t |dƒ\}}t||t g d
¢¡ d ƒ t||d  d ƒ d}t |dƒ\}}t||t g d¢¡ d ƒ t||d  d ƒ dS )z5Test the first few degrees, for evenly spaced points.r   ç      à?é   ç      (@r   )ç      ð?ç      @rK   ç      @é   g     €¦@)rK   ç      @rO   rK   ç       @g     P¹@r   )ç      @ç      @@rJ   rR   rQ   g     €V@é   g     ˆ=AN)r   r   r-   Úarrayr   )r$   r   ÚwtsÚerrcoffr   r   r   Útest_newton_cotes5   s    z TestQuadrature.test_newton_cotesc                 C   s|   t  g d¢¡}|d }t|ƒ\}}d}t  ||¡}t||ƒ t  g d¢¡}|d }t|ƒ\}}d}t  ||¡}t||ƒ dS )z9Test newton_cotes with points that are not evenly spaced.)ç        g      ø?ç       @r   gUUUUUU@)rX   gffffffö?gÍÌÌÌÌÌ @rO   ç      "@N)r-   rT   r   Údotr   )r$   r   rC   rU   rV   Úexact_integralÚnumeric_integralr   r   r   Útest_newton_cotes2K   s   
z!TestQuadrature.test_newton_cotes2c                 C   sÔ  t  d¡}tt|ƒdƒ tt|dd�dƒ tt|t  ddd¡d�d	ƒ t  d
dd¡}dd„ }tt||ƒ|d�dƒ t  d
dd¡}tt||ƒdd�dƒ t  d¡ dd¡}t  d¡ ddd¡}||ƒ}tdƒD ]C}t|||d�}t j|dgd�}|D ]/}t	|j
ƒ}	|	 |td ƒ¡ |t|	ƒ d d d |t|	ƒ d d d  }
t||j
 |
ƒ qyqft  d¡ dd¡}||ƒ}t||dd�}d|d d …d
f |d d …df   |d d …d
f |d d …df   }
t||
ƒ t  d¡ dd¡}t  d¡ ddd¡}||ƒ}tdƒD ]E}t|||d�}t j|dgd�}|D ]0}t	|j
ƒ}	|	 |td ƒ¡ |t|	ƒ d d d |t|	ƒ d d d  }
t||j
 |
ƒ �q�q t  dg¡}t  |d¡}tt||dd�dƒ tt||dd�dƒ t  g d¢¡}t  |d¡}tt||dd�dƒ tt||dd�dƒ t  g d¢g d¢g d¢g¡}t  |d¡}g d ¢}d!gd }tt||dd�|ƒ tt||dd�|ƒ t  g d¢g d¢g d"¢g¡}t  |d¡}g d#¢}g d$¢}tt||dd�|ƒ tt||dd�|ƒ d S )%Nr8   r9   rH   ©Údxé@   r   r   r   é    r   c                 S   s   | d S )Nr   r   r   r   r   r   Úfd   s   z&TestQuadrature.test_simpson.<locals>.fç      5@rS   rY   ér   é   ç      P@rI   ©r   ÚaxisÚmulti_index)Úflagséÿÿÿÿé   r   é   rN   é}   rX   )rI   rI   rI   rI   )r   r   r   rm   )rX   rX   rX   rX   ç«ªªªªJe@)r   rm   rf   rb   )rX   g      a@g      ‘@g      Á@)rp   rp   gªªªª*UÅ@)r-   r.   r   r   Úlinspacer   ÚreshapeÚrangeÚnditerÚlistrj   ÚinsertÚsliceÚtuplerT   Úpower)r$   rC   r   rc   r5   ÚiÚrÚitr'   ÚidxÚintegralÚ	zero_axisÚdefault_axisr   r   r   Útest_simpson\   st   

0üD

0ü
zTestQuadrature.test_simpsonÚdroplastFTc                 C   s`   t  g d¢g d¢g¡}|r|d d …d d…f }t|dd�}tt j|t jd�dd�}t||ƒ d S )N)r   r   r   r   rm   rm   éüÿÿÿrN   )r   r   r   rƒ   é
   é   éþÿÿÿr„   rl   ©ri   ©Údtype)r-   rT   r   Úfloat64r   )r$   r‚   rC   Úresultr%   r   r   r   Útest_simpson_2d_integer_no_xª   s   
ÿz+TestQuadrature.test_simpson_2d_integer_no_xN)r0   r1   r2   r
   r;   rG   rW   r^   r�   ÚpytestÚmarkÚparametrizerŒ   r   r   r   r   r3   &   s    Nr3   c                   @   sN   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	d
dg¡dd„ ƒZ
dd„ ZdS )ÚTestCumulative_trapezoidc                 C   sX   t jdddd�}|}t||dd�}g d¢}t||ƒ t||d d�}t||dd … ƒ d S )	Nr†   r   rN   ©Únumr   ©Úinitial)rX   ç      ø¿ç       Àr•   rX   r   ©r-   rq   r   r   )r$   r   rC   Úy_intÚ
y_expectedr   r   r   Útest_1d¸   s   
z TestCumulative_trapezoid.test_1dc                 C   sÀ   t  d¡ ddd¡}|}t||dd�}t  g d¢g d¢gg d	¢g d
¢gg d¢g d¢gg¡}t||ƒ g d¢}tg d¢|ƒD ] \}}t||d|d�}t|jdƒ t||d |d�}t|j|ƒ q=d S )Né   rI   r   r   r   r“   )rX   rH   rY   ç      @)rX   rœ   ç      $@ç     €0@)rX   ç      !@ç      2@g     €<@)rX   ç      )@g      :@ç     @D@)rX   rž   g      A@g     @J@)rX   ç     €4@g      E@g      P@))r   r   r   )rI   r   r   )rI   r   rI   ©r   r   r   )r”   ri   )rI   r   r   )	r-   r.   rr   r   rT   r   Úzipr   Úshape)r$   r   rC   r˜   r™   Úshapesri   r¦   r   r   r   Útest_y_nd_x_ndÂ   s*   
ÿÿÿü
üz'TestCumulative_trapezoid.test_y_nd_x_ndc              	   C   sà   t  d¡ ddd¡}t  d¡d }t  g d¢g d¢gg d¢g d¢gg¡t  g d	¢gg d
¢gg d¢gg¡t  g d¢g d¢gg d¢g d¢gg d¢g d¢gg¡f}tg d¢|ƒD ]\}}t||d |j| … |d d�}t||ƒ qUd S )Nr›   rI   r   r   )rL   ç      @rM   rQ   )rP   rZ   r�   ç      &@)g      D@g      F@g      H@g      J@)g      L@g      N@rg   g      Q@)rY   rO   rL   r©   )r�   rª   rJ   ç      *@)r    g      3@ç      4@rd   )rH   r©   g     €1@)rœ   rd   g     ÀJ@)rŸ   g     €B@g     `V@)r¡   g     €J@g     `_@)rž   g     @Q@g     0d@)r£   g     @U@g     °h@r¤   )r   ri   r”   )r-   r.   rr   rT   r¥   r   r¦   r   )r$   rC   r   Úys_expectedri   r™   r˜   r   r   r   Útest_y_nd_x_1d×   s<   
ÿÿþþ
ÿÿÿüøÿýz'TestCumulative_trapezoid.test_y_nd_x_1dc                 C   sŠ   t jdddd�}t|ƒ}g d¢}t||ƒ t|dd�}g d¢}t||ƒ t|d	d
�}g d¢}t||ƒ t|d	dd�}g d¢}t||ƒ d S )Nr†   r   rN   r‘   )r•   r–   r•   rX   r   r“   )r   r•   r–   r•   rX   rI   r_   )ç      Àç      Àr¯   rX   )r`   r”   )r   r¯   r°   r¯   rX   r—   )r$   rC   r˜   r™   r   r   r   Útest_x_noneï   s   


z$TestCumulative_trapezoid.test_x_noner”   r   rH   c                 C   sP   t jdddd�}tjtdd�� t||d� W d  ƒ dS 1 s!w   Y  dS )z4If initial is not None or 0, a ValueError is raised.r   r„   r‘   z	`initial`©Úmatchr“   N)r-   rq   r�   ÚraisesÚ
ValueErrorr   )r$   r”   rC   r   r   r   Útest_initial_error  s   "ÿz+TestCumulative_trapezoid.test_initial_errorc                 C   s>   t jtdd�� tg d� W d   ƒ d S 1 sw   Y  d S )NúAt least one point is requiredr²   ©rC   )r�   r´   rµ   r   r:   r   r   r   Útest_zero_len_y  s   "ÿz(TestCumulative_trapezoid.test_zero_len_yN)r0   r1   r2   rš   r¨   r®   r±   r�   rŽ   r�   r¶   r¹   r   r   r   r   r�   ·   s    
ÿ
r�   c                   @   s†   e Zd Zdd„ Zeddgd�ej d¡dd„ ƒƒZeddgd�ej d¡d	d
„ ƒƒZ	e
dd„ ƒZeddgd�ej d¡dd„ ƒƒZdS )ÚTestTrapezoidc                 C   sR   |  ddd¡}t| d|d  ¡| d| |j¡ ¡ dd�}t|| d¡ƒ d S )Néöÿÿÿr„   gš™™™™™¹?g      à¿r   r_   rK   )r.   r	   ÚexpÚsqrtÚasarrayÚpir   )r$   Úxpr   r{   r   r   r   Útest_simple  s   0zTestTrapezoid.test_simplez	jax.numpyz)JAX arrays do not support item assignment)ÚreasonsÚskip_xp_backendsc                 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 f |d d d …d f  |d d d d …f  }|j||d d …d d f  dd�}	|j||d d d …d f  dd�}
|j||d d d d …f  dd�}t||d d …d d f dd	�}t||	ƒ t||d d d …d f dd	�}t||
ƒ t||d d d d …f dd	�}t||ƒ t||dd	�}t||	ƒ t||dd	�}t||
ƒ t||dd	�}t||ƒ d S )
Nr   r   rI   r   rm   é   rl   r‡   rh   )rq   Ú	ones_likeÚsumr	   r   )r$   rÀ   r   rC   ÚzÚwxÚwyÚwzÚqÚqxÚqyÚqzr{   r   r   r   Ú	test_ndim  s8   6   




zTestTrapezoid.test_ndimc                 C   s(  |  | ddd¡d¡}|  | ddd¡d¡}| ddd¡}tt||dd�|ƒ tt|| g d	¢¡dd�|ƒ tt|| g d	¢¡d d …d f dd�|ƒ t t¡� t|| g d	¢¡d d d …f dd� W d   ƒ n1 smw   Y  | g d
¢¡}tt||dd�|ƒ tt|| ddd¡dd�|ƒ d S )Nr   é   é   )rI   r„   éÈ   i|  r„   rh   )r   r�   r¬   )r¢   g     P`@g     �k@r   é	   )rr   rq   r   r	   r¾   r�   r´   Ú	Exception)r$   rÀ   r   rC   Úout0Úout1r   r   r   Útest_gh21908@  s$   "þ&þþzTestTrapezoid.test_gh21908c                 C   s‚   t  d¡}|| }|dk}t jj||d�}d}tt||ƒ|ƒ t jj||d�}tt||ƒ|ƒ t jj||d�}tt||ƒ|ƒ d S )NrN   r   )Úmaskr«   )r-   r.   ÚmarT   r   r	   )r$   rÀ   r   rC   rØ   Úymr{   Úxmr   r   r   Útest_masked[  s   
zTestTrapezoid.test_maskedTz,array-likes only supported for NumPy backend)Únp_onlyrÂ   c                 C   s\   t tdƒƒ}dd„ |D ƒ}|j||jd�}|j||jd�}t||ƒ}t||ƒ}t||ƒ d S )NrN   c                 S   s   g | ]}|| ‘qS r   r   )Ú.0Útr   r   r   Ú
<listcomp>q  r,   z1TestTrapezoid.test_array_like.<locals>.<listcomp>rˆ   )ru   rs   r¾   rŠ   r	   r   )r$   rÀ   r   rC   ÚxarrÚyarrÚresÚresarrr   r   r   Útest_array_likel  s   

zTestTrapezoid.test_array_likeN)r0   r1   r2   rÁ   rÃ   r�   rŽ   ÚusefixturesrÏ   r×   r   rÜ   rå   r   r   r   r   rº     s&    ÿ
%ÿ

ÿ
rº   c                   @   sª   e Zd Zejjdd„ ƒZddd„Zej ddd	g¡ej d
ddg¡dd„ ƒƒZ	ej dddgddgddgddgg¡dd„ ƒZ
ejjej dddg¡dd„ ƒƒZdd„ ZdS )ÚTestQMCQuadc                 C   sv  d}t jt|d�� tdddgddgƒ W d   ƒ n1 sw   Y  d}t jt|d�� tdd„ ddgddgƒ W d   ƒ n1 sCw   Y  d	d
„ }d}t jt|d�� t|ddgddgƒ W d   ƒ n1 sjw   Y  d}t jt|d�� tdd„ ddgddgdd� W d   ƒ n1 s‘w   Y  d}t jt|d�� tdd„ ddgddgdd� W d   ƒ n1 s¸w   Y  d}t jt|d�� tdd„ ddgddgdd� W d   ƒ n1 sßw   Y  d}t jt|d�� tdd„ ddgddgtj 	d¡d� W d   ƒ n	1 �sw   Y  d}t jt|d�� tdd„ ddgddgdd� W d   ƒ d S 1 �s4w   Y  d S )Nz`func` must be callable.r²   za duckr   r   z/`func` must evaluate the integrand at points...c                   S   ó   dS ©Nr   r   r   r   r   r   r    ‚  ó    z3TestQMCQuad.test_input_validation.<locals>.<lambda>c                 S   s   | j dksJ ‚t | ¡S ré   )Úndimr-   rÆ   r   r   r   r   Úfunc„  s   
z/TestQMCQuad.test_input_validation.<locals>.funcz8Exception encountered when attempting vectorized call...z`n_points` must be an integer.c                 S   rè   ré   r   r   r   r   r   r    �  rê   g     �@)Ún_pointsz!`n_estimates` must be an integer.c                 S   rè   ré   r   r   r   r   r   r    ‘  rê   rŸ   )Ún_estimatesz8`qrng` must be an instance of scipy.stats.qmc.QMCEngine.c                 S   rè   ré   r   r   r   r   r   r    •  rê   )Úqrngz8`qrng` must be initialized with dimensionality equal to c                 S   rè   ré   r   r   r   r   r   r    ™  rê   z,`log` must be boolean \(`True` or `False`\).c                 S   rè   ré   r   r   r   r   r   r    �  rê   r„   ©Úlog)
r�   r´   Ú	TypeErrorr   rµ   ÚwarnsÚUserWarningr   ÚqmcÚSobol)r$   Úmessagerì   r   r   r   Útest_input_validationz  sB   ÿÿÿÿÿÿ&ÿ$ÿz!TestQMCQuad.test_input_validationé   rm   Nc              	      sj  |d u r	t  d¡}d}t  |¡‰t  |¡‰ ‡ ‡fdd„‰t j d¡}tjj||d�}t  |¡}t  |¡| }t	ˆ|||||d�}	tj
j|ˆˆ |d�}
t |d d	¡|	j }t|	j|
|d
� t  |¡|	j dksiJ ‚t j d¡}tjj||d�}t	‡fdd„||||d|d�}tt  |j¡|	jdd� t  |j¡t  |¡dk r¡t jndks¦J ‚tt  |j¡|	jddd� d S )Nr   c                    s   t j | jˆˆ ¡S r)   )r   Úmultivariate_normalÚpdfÚTr   )ÚcovÚmeanr   r   rì   ¦  s   z$TestQMCQuad.basic_test.<locals>.funcl   é^^@E9®? )Úseed)rí   rî   rï   )Úlower_limitr   g×£p=
×ï?©r@   r   c                     s   t  ˆ | Ž ¡S r)   )r-   rñ   )r7   )rì   r   r   r    ¶  r>   z(TestQMCQuad.basic_test.<locals>.<lambda>T)rí   rî   rñ   rï   ç›+¡†›„=r"   ç¼‰Ø—²Òœ<r?   )r-   ÚonesÚzerosÚeyeÚrandomÚdefault_rngr   rõ   rö   r   rú   Úcdfr   ÚstdtritÚstandard_errorr   r~   Úprodr¼   Úimagr¿   )r$   rí   rî   Úsignsrë   Úrngrï   r5   r6   rã   Úrefr@   Úlogresr   )rý   rì   rþ   r   Ú
basic_testŸ  s8   




ÿþ(
ÿzTestQMCQuad.basic_testrí   i   rî   rf   c                 C   s   |   ||¡ d S r)   ©r  )r$   rí   rî   r   r   r   Ú
test_basic¾  s   zTestQMCQuad.test_basicr  r   rl   c                 C   s   | j |d� d S )N)r  r  )r$   r  r   r   r   Ú	test_signÃ  s   zTestQMCQuad.test_signrñ   FTc                 C   sz   d}t jt|d�� tdd„ ddgddg|d�}W d   ƒ n1 s"w   Y  |j|r/tj ndks4J ‚|jdks;J ‚d S )Nz-A lower limit was equal to an upper limit, sor²   c                 S   rè   ré   r   r   r   r   r   r    Ì  rê   z'TestQMCQuad.test_zero.<locals>.<lambda>r   r   rð   )r�   ró   rô   r   r~   r-   Úinfr  )r$   rñ   r÷   rã   r   r   r   Ú	test_zeroÇ  s   ÿzTestQMCQuad.test_zeroc                 C   sF   dd„ }t |ddƒ}tjjddd�tjjddd� }t|j|dƒ d S )Nc                 S   s   t jj| dd�S )Nr   ©Úscale)r   Únormrû   r   r   r   r   rì   Ó  s   z-TestQMCQuad.test_flexible_input.<locals>.funcr   r   r   r  g{®Gáz„?)r   r   r  r	  r   r~   )r$   rì   rã   r  r   r   r   Útest_flexible_inputÐ  s    zTestQMCQuad.test_flexible_input)rù   rm   N)r0   r1   r2   r�   rŽ   Úthread_unsaferø   r  r�   r  r  r  r  r   r   r   r   rç   y  s    

$$
rç   rl   ©r   r`   r”   ri   c          	         sd  | j | dk r|d u rt| |||d d�S |t| |||dd� S t | |d¡} t |¡dkr4t ||d¡n|}t |¡dkrDt ||d¡n|}t |¡dkrTt ||d¡n|}| j d ‰ |d urf|t ˆ ¡ n|}|d u }|rpdn|}t || j ¡}t || j d d… d ¡}tj| ||fdd�}‡ fdd	„}t |d|¡}|r§|d
dd …f n|}t |d|¡}|S )NrI   )r   r`   ri   r”   r   rl   r   )r   r‡   c                    s.   t | d ˆ … | ˆ dˆ  … | dˆ  d … d�S )Nr   )r   r”   )r   )rÇ   r   r   r   rc   ö  s   .z*cumulative_simpson_nd_reference.<locals>.f.)	r¦   r   r-   Úmoveaxisrë   r.   Úbroadcast_toÚconcatenateÚapply_along_axis)	rC   r   r`   r”   ri   Úinitial_was_nonerÇ   rc   rã   r   r   r   Úcumulative_simpson_nd_referenceÛ  s(      
r#  c                   @   sú  e Zd Ze d¡Zed Zej 	dd¡ej 	dd¡dd„ ƒƒZ
ej 	de d	d
¡¡ej 	dd¡ej 	dd¡ej 	dd¡ej 	dd¡dd„ ƒƒƒƒƒZej 	ddeg d¢d�fdeeg d¢geegd�fdeeeegeeegdd�fdeg g d�fdedd�fd ee d!¡d�fd"ee d!¡d#�fd$ed%e d!¡d&�fg¡d'd(„ ƒZd)d*„ Zd+d,„ Zejjejjeejejejdd
d-d.�ejd/d-d0d1� d2d3„ ¡d4�d5�d6d7„ ƒƒƒZejjejjeejejejdd
d-d.�ejd/d-d0d1� d8d3„ ¡d4�d5�d9d:„ ƒƒƒZd%S );ÚTestCumulativeSimpsonr   r   Úuse_dx)FTÚuse_initialc                 C   sp  t j d¡}d}|rdnd}| ¡ }|dkrt  | |¡¡n
t  |¡| | ¡  }t  |d ¡d d …t jf }| |d ¡d d …t jf }	t j|	||  dd�}
t j|	||d   |d  dd�}|re|n	||d  dd … }|ru|d nd }|r}d|ind	|i}t|
fi |¤d
|i¤Ž}|s˜t||dd� d S |rœdnd}t||dd� t||d d… ||d d… dd� d S )Nì   F»*ŒBG r„   rI   r   r   r   r‡   r`   r   r”   gVçž¯â<r"   g{®Gázd?)	r-   r  r  Úsortr.   ÚnewaxisrÆ   r   r   )r$   r%  r&  r  r   Úorderr`   r   rz   ÚcrC   ÚYr  r”   Úkwargrã   Úi0r   r   r   rš     s(   ÿ"&zTestCumulativeSimpson.test_1dri   éýÿÿÿrI   Úx_ndim)r   rI   Úx_len)r   r   rS   Úi_ndim)Nr   rI   r`   )NTc                 C   s  t j d¡}dd|g}|d || ||< |d< | ¡ }d||< |dkr&|nd}	|j|d�}
d	\}}|rC|dkr>|j|d�n| ¡ }n|dkrRt j|j|d�|d
�n
t  |j|| d�¡}|d u rcd n|j|	d�}t|
||||d�}t|
||||d�}t jj||dd� d S )Nr'  rN   é   rl   r   rI   r   ©Úsize)NNr‡   r  çVçž¯Ò<r"   )	r-   r  r  Úcopyr(  r   r#  Útestingr   )r$   ri   r0  r1  r2  r`   r  r¦   Úshape_len_1Úi_shaperC   r   r”   rã   r  r   r   r   Útest_nd'  s"   
ÿzTestCumulativeSimpson.test_nd)r÷   Úkwarg_updatezx must be strictly increasing)r   r   rI   r   r   )r   r   r   rm   ©r   rC   r   )r   rC   ri   r·   z-`axis=4` is not valid for `y` with `y.ndim=1`r‡   z+shape of `x` must be the same as `y` or 1-DrN   z'`initial` must either be a scalar or...r“   z"`dx` must either be a scalar or...N)r   r`   c                 C   sd   t | j| jd d dd�}tjt|d�� tdi t |fi |¤Ž¤Ž W d   ƒ d S 1 s+w   Y  d S )Nrl   )rC   r   r`   r”   ri   r²   r   )ÚdictÚy0Úx0r�   r´   rµ   r   )r$   r÷   r<  Úkwargs0r   r   r   Útest_simpson_exceptionsF  s   "ÿz-TestCumulativeSimpson.test_simpson_exceptionsc                 C   s2   t j d¡}|jdd�}t|dd�}t|dƒ d S )Nr'  r„   r4  r   r_   )r-   r  r  r   r   )r$   r  rC   rã   r   r   r   Útest_special_casesU  s   z(TestCumulativeSimpson.test_special_casesc                 C   s¶   t j|dd�}t||ƒ}t|dddd…f |dddd…f ƒdddd…f }g |jdd… ¢d‘R }t jt  |¡|ddd…f |ddd…f  t  |¡gdd�}d|dddd…f< |S )aj  `cumulative_simpson` and `simpson` can be tested against other to verify
        they give consistent results. `simpson` will iteratively be called with
        successively higher upper limits of integration. This function calculates
        the theoretical correction required to `simpson` at even intervals to match
        with `cumulative_simpson`.
        rl   r‡   .Nr   rX   r   )r-   Údiffr   r¦   r   r  )r$   rC   r   ÚdÚsub_integrals_h1Úsub_integrals_h2Úzeros_shapeÚtheoretical_differencer   r   r   Ú1_get_theoretical_diff_between_simps_and_cum_simps`  s"   
 ÿþýú
zGTestCumulativeSimpson._get_theoretical_diff_between_simps_and_cum_simpsr„   )Úmax_dimsÚmin_sideÚmax_sider»   F)Ú	allow_nanc                 C   ó   t | ƒdkS ©NgH¯¼šò×z>©Úabsr   r   r   r   r    „  ó    zTestCumulativeSimpson.<lambda>)Úelementsr¸   c                 C   st   dd„ }t |dd�}||ƒ}| j|t |jd ¡d�}tjj|ddd	…f |ddd	…f |ddd	…f  d
d� d	S )áe  Theoretically, the output of `cumulative_simpson` will be identical
        to `simpson` at all even indices and in the last index. The first index
        will not match as `simpson` uses the trapezoidal rule when there are only two
        data points. Odd indices after the first index are shown to match with
        a mathematically-derived correction.c                    s,   t j‡ fdd„tdˆ jd d ƒD ƒdd�S )Nc                    s$   g | ]}t ˆ d d|…f dd�‘qS ).NrK   r_   ©r   ©rÞ   rz   r¸   r   r   rà   ‘  s   $ z|TestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_reference.<locals>.<listcomp>r   rl   r   r‡   ©r-   Ústackrs   r¦   r¸   r   r¸   r   Úsimpson_reference�  s   "ÿzhTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dx.<locals>.simpson_referencerK   r_   rl   r   .r   Nr  r  )r   rJ  r-   r.   r¦   r8  r   )r$   rC   rZ  rã   r  rI  r   r   r   Ú7test_cumulative_simpson_against_simpson_with_default_dx~  s   ÿ.
ÿzMTestCumulativeSimpson.test_cumulative_simpson_against_simpson_with_default_dxc                 C   rO  rP  rQ  r   r   r   r   r    £  rS  c                 C   sÀ   d|j d d  }tjdd|j d d�}|dd… d| tj ddt|ƒd ¡  |dd…< dd	„ }t||d
�}|||ƒ}|  ||¡}tj 	|ddd…f |ddd…f |ddd…f  ¡ dS )rU  r„   rl   r   r   r‘   Nr<   c                    s.   t j‡ ‡fdd„tdˆjd d ƒD ƒdd�S )Nc                    s0   g | ]}t ˆd d|…f ˆ d d|…f d�‘qS ).Nr   rV  rW  r=  r   r   rà   ´  s   0 zlTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_reference.<locals>.<listcomp>r   rl   r   r‡   rX  )rC   r   r   r=  r   rZ  ²  s   "þzXTestCumulativeSimpson.test_cumulative_simpson_against_simpson.<locals>.simpson_referencer   .)
r¦   r-   rq   r  ÚuniformÚlenr   rJ  r8  r   )r$   rC   Úintervalr   rZ  rã   r  rI  r   r   r   Ú'test_cumulative_simpson_against_simpson�  s   4
ÿ,ÿz=TestCumulativeSimpson.test_cumulative_simpson_against_simpson)r0   r1   r2   r-   r.   r@  r?  r�   rŽ   r�   rš   r;  r>  rB  rC  rJ  r  Úslowr   Úhyp_numÚarraysrŠ   Úarray_shapesÚstÚfloatsÚfilterr[  r_  r   r   r   r   r$     sZ    
!ø

ýÿýÿr$  c                	   @   sN   e Zd Zdd„ Zdd„ Zej dee	dddƒƒee	d	d
dƒƒ ¡dd„ ƒZ
dS )ÚTestLebedevc                 C   sB   d}t jt|d�� t d¡ W d   ƒ d S 1 sw   Y  d S )NzOrder n=-1 not available...r²   rl   )r�   r´   r4   r   Úlebedev_rule)r$   r÷   r   r   r   rø   Â  s   "ÿz!TestLebedev.test_input_validationc                 C   sN   dd„ }t  d¡\}}|||ƒ }d}t||dd� tt |¡dtj ƒ d S )Nc                 S   s   t  | d ¡S )Nr   )r-   r¼   r   r   r   r   rc   Ë  s   z&TestLebedev.test_quadrature.<locals>.fé   gá9‰-@r  r"   r   )r   rh  r   r-   rÆ   r¿   )r$   rc   r   Úwrã   r  r   r   r   Útest_quadratureÈ  s   zTestLebedev.test_quadraturer*  rI   rb   r   é#   é„   r3  c                 C   sv   t  |¡\}}tjddd�� tj|jdd�}t|jddd� W d   ƒ n1 s)w   Y  tt 	|¡dtj
 ƒ d S )NÚignore)ÚdivideÚinvalidr   r‡   r6  r  r   )r   rh  r-   Úerrstater   Údirectional_statsrü   r   Úmean_resultant_lengthrÆ   r¿   )r$   r*  r   rj  rã   r   r   r   Útest_propertiesÔ  s   þzTestLebedev.test_propertiesN)r0   r1   r2   rø   rk  r�   rŽ   r�   ru   rs   rt  r   r   r   r   rg  Á  s
    (rg  ).r�   Únumpyr-   Únumpy.testingr   r   r   Ú
hypothesisr   Úhypothesis.strategiesÚ
strategiesrd  Úhypothesis.extra.numpyÚextrara  Úscipy.integrater   r   r   r	   r
   r   r   r   r   Úscipy.integrate._quadraturer   Úscipyr   r   r   Úscipy.conftestr   r   Úscipy._lib._array_api_no_0dr   rŽ   rÃ   r   r3   r�   rº   rç   r#  r$  rg  r   r   r   r   Ú<module>   s.   , Yhb% B