o
    FZŽhö  ã                   @   s˜   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZmZ d	d
„ Zdd„ Zdd„ Zdd„ ZdS )é    )Úproduct)ÚFunctionÚdiff)ÚRational©ÚS)Úsymbols)Úexp)Úapply_finite_diffÚdifferentiate_finiteÚfinite_diff_weightsÚ_as_finite_diff)ÚraisesÚwarns_deprecated_sympyc                      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   úT/var/www/auris/lib/python3.10/site-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>Q   s    z7test_finite_diff_weights.<locals>.<listcomp>.<listcomp>r   r   r   )ÚlistÚrange©r;   Úir   r   r   r=   Q   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   r@   )Úxlr   r   r=   U   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   rB   r   r   r   r   r   l   ó    z*test_finite_diff_weights.<locals>.<lambda>c                   S   rM   )Ng333333ó?r   r   rB   r   r   r   r   r   m   rN   r   c                      s   t ˆ ddgƒS )Nr   r   rB   r   )r   r   r   r   o   rN   )
r   r   r   ZZeror?   ZOner   r   r    r   )ÚdrA   r   )r   rC   r   Útest_finite_diff_weights   sž   &&0D.ÿ

ÿ. 
ÿ2J2ÿ
ÿ2 ÿ"<(ÿ
ÿ. ÿ"@.ÿ
ÿ2 ÿÿ
ÿ":.ÿ. ÿ$:&ÿýrP   c                  C   s  t dƒ} tdƒ}tdƒ}t|| ƒ | ¡| d | d | | d | d gƒ || || ƒ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   Zas_finite_differencer   )r   r   rQ   Zdf_trueZdf_testr   r   r   Útest_as_finite_diffr   s   .@>ÿ(rS   c                     s`  t dƒ\‰} }tdƒ‰ 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ˆ ˆƒˆˆƒ 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s/J ‚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s.J ‚d S )Nzx y hr   é*   T)Ú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$   )rR   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   Ú	TypeErrorr   r   )Úyr   Zres0ZxmZxpZymZypZref0Zres1Zref1Zres2Zref2Zres3Zref3Zres4Zref4Z	res5_exprZres5Zref5r   rY   r   Útest_differentiate_finite€   sX    ÿ$( ÿ$$ÿ*4F"@>ÿ`ÿÿ(ÿ<ÿÿÿr\   N)Ú	itertoolsr   Zsympy.core.functionr   r   Zsympy.core.numbersr   Zsympy.core.singletonr   Zsympy.core.symbolr   Z&sympy.functions.elementary.exponentialr	   Zsympy.calculus.finite_diffr
   r   r   r   Zsympy.testing.pytestr   r   r!   rP   rS   r\   r   r   r   r   Ú<module>   s    X