o
    à8VaH  ã                   @   sˆ   d dl mZ d dl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mZmZmZ d dlmZ dd„ Zdd	„ Zd
d„ Zdd„ ZdS )é    )Úproduct)ÚSÚsymbolsÚFunctionÚexpÚdiffÚRational)Úapply_finite_diffÚdifferentiate_finiteÚfinite_diff_weightsÚas_finite_diff)ÚraisesÚwarns_deprecated_sympyÚignore_warnings)ÚSymPyDeprecationWarningc                      sä   t dƒ\‰‰tdƒ‰ tdˆˆ ˆˆ gˆ ˆˆ ƒˆ ˆˆ ƒgˆƒˆ ˆˆ ƒˆ ˆˆ ƒ dˆ    ¡ dks7J ‚tdg d¢ˆ dƒˆ dƒˆ d	ƒgdƒtd
dƒˆ dƒ dˆ dƒ  tjˆ d	ƒ    ¡ dkseJ ‚tt‡ ‡‡fdd„ƒ d S )Nzx hÚfé   é   r   ©é   é   é   r   r   r   éýÿÿÿc                      s   t dˆˆgˆ ˆƒgƒS )Nr   )r	   © ©r   ÚhÚxr   úG/usr/lib/python3/dist-packages/sympy/calculus/tests/test_finite_diff.pyÚ<lambda>   s    z(test_apply_finite_diff.<locals>.<lambda>)	r   r   r	   Úsimplifyr   r   ÚHalfr   Ú
ValueErrorr   r   r   r   Útest_apply_finite_diff   s   ,ÿÿ"*ÿÿr"   c                     s´  t dg d¢dƒ} | d d tddƒdtddƒgksJ ‚g d¢‰t dˆtjƒ} tdƒD ]}| d	 | tjgtjgd
  ks>J ‚q*| d d	 tjgd ksMJ ‚| d d tjtjtddƒgtjgd  kseJ ‚| d d tjtddƒtddƒtddƒtddƒgtjgd  ks‡J ‚| d d tjtddƒtddƒtddƒtddƒtddƒtddƒgtjgd  ks±J ‚| d d
 tjtddƒtddƒtddƒtddƒtddƒtddƒtddƒtddƒg	ksÝJ ‚tdƒD ]}| d | tjgd ksñJ ‚qá| d d tdƒ tjtjgtjgd  ksJ ‚| d d tddƒtddƒtddƒtddƒtddƒgtjgd  ks0J ‚| d d tddƒtddƒtddƒtddƒtddƒtddƒtddƒgtjgd  ks]J ‚| d d
 tddƒtd
dƒtd
dƒtddƒtddƒtd
dƒtd
dƒtddƒtddƒg	ksŒJ ‚tdƒD ]}| d | tjgd ks¡J ‚q| d d tjtj tjtjtddƒgtjgd  ksÁJ ‚| d d tjtdd
ƒtdd
ƒtjtj tdd
ƒtdd
ƒgtjgd  kséJ ‚| d d
 tjtdd ƒtd!d ƒtd"d#ƒtd$d#ƒtdd%ƒtdd%ƒtd&d'ƒtd(d'ƒg	ksJ ‚tdƒD ]}| d | tjgd ks+J ‚q| d d tdƒtdƒ tdƒ tjtjgtjgd  ksMJ ‚| d d td)dƒtddƒtddƒtdƒtdƒtddƒtddƒgtjgd  ksxJ ‚| d d
 td*d
ƒtd+d,ƒtd+d,ƒtd"dƒtd"dƒtddƒtddƒtd&d'ƒtd&d'ƒg	ks§J ‚d-d.„ tddƒD ƒ‰‡fd/d.„tdƒD ƒ} | d	 d	 d tjtjgksÍJ ‚| d d	 d tdd0ƒtdd0ƒtdd0ƒtdd0ƒgksêJ ‚| d d	 d tdd1ƒtd2d1ƒtd3d4ƒtd3d4ƒtd2d1ƒtdd1ƒgksJ ‚| d d	 d& tdd5ƒtd6d5ƒtd7d5ƒtd8d5ƒtd8d5ƒtd7d5ƒtd6d5ƒtdd5ƒgks<J ‚| d	 d d tj tjgksNJ ‚| d d d tdd9ƒtd:d
ƒtdd
ƒtdd9ƒgkskJ ‚| d d d tdd;ƒtd<d=ƒtd>d?ƒtd3d?ƒtd2d=ƒtdd;ƒgksJ ‚| d d d& tdd@ƒtddAƒtdBdCƒtdDdEƒtd8dEƒtd7dCƒtd6dAƒtdd@ƒgks½J ‚ttdFdG„ ƒ ttdHdG„ ƒ t	dIƒ‰ tt‡ fdJdG„ƒ d S )KNr   r   r   r   r   éÿÿÿÿ)	r   r   r#   r   éþÿÿÿé   r   é   éüÿÿÿr&   r   é   é	   r   r%   r$   é   é   é<   r'   éi   i  éûÿÿÿiÏÿÿÿé   éZ   i3ÿÿÿéH   i;  i0  ióÿÿÿé   iÃÿÿÿé   é=   é©   éx   iWÿÿÿé
   r   éð   iùÿÿÿé   é[   i†ÿÿÿé   c              	   S   sH   g | ] }d d„ t t| d d ddƒƒt td|d d dƒƒ D ƒ‘qS )c                 S   s   g | ]}|t d ƒ ‘qS )r   )r   )Ú.0Újr   r   r   Ú
<listcomp>N   s    z7test_finite_diff_weights.<locals>.<listcomp>.<listcomp>r   r   r   )ÚlistÚrange©r<   Úir   r   r   r>   N   s    @ÿz,test_finite_diff_weights.<locals>.<listcomp>c                    s*   g | ]}t d ddddœ| ˆ | dƒ‘qS )r   r   r&   )r   r   r   r%   r   ©r   rA   )Úxlr   r   r>   R   s    "ÿé   é   içÿÿÿéK   é€   i   é1   iÿÿÿiÉ  é   i÷ÿÿÿi€  é   i€  iµÿÿÿé@   i   i   éõ   i   i7ûÿÿi   c                   S   ó   t dddgƒS )Nr#   r   r   rC   r   r   r   r   r   i   ó    z*test_finite_diff_weights.<locals>.<lambda>c                   S   rN   )Ng333333ó?r   r   rC   r   r   r   r   r   j   rO   r   c                      s   t ˆ ddgƒS )Nr   r   rC   r   )r   r   r   r   l   rO   )
r   r   r   ZZeror@   ZOner    r   r!   r   )ÚdrB   r   )r   rD   r   Útest_finite_diff_weights   sž   &&0D.ÿ

ÿ. 
ÿ2J2ÿ
ÿ2 ÿ"<(ÿ
ÿ. ÿ"@.ÿ
ÿ2 ÿÿ
ÿ":.ÿ. ÿ$:&ÿýrQ   c               	   C   s.  t dƒ} tdƒ}tdƒ}tƒ  t|| ƒ | ¡| d | d | | d | d gƒ W d   ƒ n1 s1w   Y  || || ƒd  || || ƒd  ƒd  ƒ || || ƒd  ƒ || || ƒd  || || ƒd  ƒd  ƒ|| || ƒd  ƒ  }t|| ƒ| ƒj|| ƒ| || ƒd  d}||  ¡ dks•J ‚d S )Nr   r   Údxr   r   )ÚpointsZx0r   )r   r   r   r   r   Zas_finite_differencer   )r   r   rR   Zdf_trueZdf_testr   r   r   Útest_as_finite_diffo   s   0ÿ@>ÿ(rT   c                     sŒ  t dƒ\‰} }tdƒ‰ ttƒ tˆ ˆ| ƒtdƒ ˆ| dd}W d   ƒ n1 s)w   Y  dd„ tˆ| gdd	gƒD ƒ\}}}}ˆ ||ƒˆ ||ƒ ˆ ||ƒ ˆ ||ƒ }||  ¡ d
ks^J ‚tdƒ‰ttƒ tˆ ˆƒˆˆƒ d ˆdd}W d   ƒ n1 s€w   Y  ˆ ˆtj	 ƒ ˆ ˆtj	 ƒ ˆˆƒ ˆˆtj	 ƒ ˆˆtj	 ƒ ˆ ˆƒ  }	||	  ¡ d
ksµJ ‚tˆ ˆƒˆd  d ˆˆd	 ˆd	 gd}
ˆ ˆd	 ƒˆd	 d  ˆ ˆd	 ƒ ˆd	 d  d }|
|  ¡ d
ksîJ ‚t
t‡ ‡‡fdd„ƒ tˆ ˆƒˆˆƒ ˆ¡ ˆƒ}ˆˆƒ ˆˆd	 ƒ ˆ ˆtj	 ƒ ˆˆƒˆˆd	 ƒ ˆ ˆtj	 ƒ  }||ks1J ‚tˆ ˆƒˆˆƒ ˆ¡ ˆ¡ ˆƒ}ˆˆtddƒ ƒdˆˆtj	 ƒ  ˆˆtj	 ƒ ˆ ˆtj	 ƒ  ˆˆtj	 ƒdˆˆtj	 ƒ  ˆˆtddƒ ƒ ˆ ˆtj	 ƒ  }||ksŠJ ‚ˆ ˆƒ ˆ¡ˆˆƒ ˆ¡ }t|ˆ| ˆˆ| gd}dˆ ˆƒ | ˆ | ˆ ƒd|   dˆ |ˆ ƒ d|   dˆˆƒ | ˆ| ˆ ƒd|   dˆ|ˆ ƒ d|    d|  dˆ ˆƒ | dˆ | ˆ ƒ d|   ˆ |ˆ ƒd|   dˆˆƒ | dˆ| ˆ ƒ d|   ˆ|ˆ ƒd|    d|   }||ks0J ‚| |d
¡ ¡ }t|ˆƒ}||ksDJ ‚d S )Nzx y hr   é*   T)Zevaluatec                 S   s   g | ]\}}||t j  ‘qS r   )r   r    )r<   ÚvÚsignr   r   r   r>   ƒ   s    z-test_differentiate_finite.<locals>.<listcomp>r#   r   r   Úgr%   )rS   r   c                      s&   t ˆ ˆƒˆˆƒ ˆˆd ˆd gdS )Nr   )Zpints)r
   r   ©r   rX   r   r   r   r   ‘   s    ÿz+test_differentiate_finite.<locals>.<lambda>r$   )r   r   r   r   r
   r   r   r   r   r    r   Ú	TypeErrorr   r   ÚlimitZdoit)Úyr   Zres0ZxmZxpZymZypZref0Zres1Zref1Zres2Zref2Zres3Zref3Zres4Zref4Z	res5_exprZres5Zref5Zres6Zref6r   rY   r   Útest_differentiate_finite~   s^   
 ÿ$(
 ÿ$$ÿ*4F"@>ÿ`ÿÿ(ÿ<ÿÿÿ
r]   N)Ú	itertoolsr   Zsympyr   r   r   r   r   r   Zsympy.calculus.finite_diffr	   r
   r   r   Zsympy.testing.pytestr   r   r   Zsympy.utilities.exceptionsr   r"   rQ   rT   r]   r   r   r   r   Ú<module>   s     X