a
    kº”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snJ ‚tdg d¢ˆ dƒˆ dƒˆ d	ƒgdƒtd
dƒˆ dƒ dˆ dƒ  tjˆ d	ƒ    ¡ dksÊJ ‚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   úS/var/www/auris/lib/python3.9/site-packages/sympy/calculus/tests/test_finite_diff.pyÚ<lambda>   ó    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s6J ‚g d¢‰t dˆtjƒ} tdƒD ](}| d	 | tjgtjgd
  ksTJ ‚qT| d d	 tjgd ksšJ ‚| d d 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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sfJ ‚| 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sjJ ‚| 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s6J ‚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s¤J ‚| 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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sXJ ‚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s¦J ‚| d d d tdd9ƒtd:d
ƒtdd
ƒtdd9ƒgksàJ ‚| d d d tdd;ƒtd<d=ƒtd>d?ƒtd3d?ƒtd2d=ƒtdd;ƒgks*J ‚| 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   r   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   rA   )Úxlr   r   r>   U   s   ÿé   é   içÿÿÿéK   é€   i   é1   iÿÿÿiÉ  é   i÷ÿÿÿi€  é   i€  iµÿÿÿé@   i   i   éõ   i   i7ûÿÿi   c                   S   s   t dddgƒS )Nr#   r   r   rC   r   r   r   r   r   l   r   z*test_finite_diff_weights.<locals>.<lambda>c                   S   s   t dddgƒS )Ng333333ó?r   r   rC   r   r   r   r   r   m   r   r   c                      s   t ˆ ddgƒS )Nr   r   rC   r   )r   r   r   r   o   r   )
r   r   r   ZZeror@   ZOner    r   r!   r   )ÚdrB   r   )r   rD   r   Útest_finite_diff_weights   sž    &&0F.ÿ
ÿ. ÿ"2J2ÿ
ÿ2 ÿ"<(ÿ
ÿ. ÿ"@.ÿ
ÿ2 ÿÿ
ÿ":.ÿ. ÿ$:&ÿýrO   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   rP   Zdf_trueZdf_testr   r   r   Útest_as_finite_diffr   s    .@>ÿ(rR   c                     sd  t dƒ\‰} }tdƒ‰ tƒ . tˆ ˆ| ƒtdƒ ˆ| dd}W d   ƒ n1 sP0    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ü0    Y  ˆ ˆtj ƒ ˆ ˆtj ƒ ˆˆƒ ˆˆtj ƒ ˆˆtj ƒ ˆ ˆƒ  }	||	  ¡ d
kshJ ‚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sbJ ‚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>   …   r   z-test_differentiate_finite.<locals>.<listcomp>r#   r   r   Úgr%   )rQ   r   c                      s&   t ˆ ˆƒˆˆƒ ˆˆd ˆd gdS )Nr   )Zpints)r   r   ©r   rW   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   rX   r   Útest_differentiate_finite€   sT    <$(<$$ÿ*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"   rO   rR   r[   r   r   r   r   Ú<module>   s   X