Ë
    3^(hO  ã                   ó  — d dl mZ ddlmZ 	 ej
                  Zed„ «       Zd„ Z	edd„«       Z
d„ Zedd	„«       Zd
„ Zed„ «       Zi fd„Zed„ «       Zedd„«       Zedd„«       Zed„ «       Zed„ «       Zy# e$ r ej                  ZY Œnw xY w)é   )Úxrangeé   )Údefunc                 óœ   — t        |«      }| j                  }d|dz  z  }t        |dz   «      D ]  }||||   z  z  }|||z
  z  |dz   z  }Œ |S )zÄ
    Given a sequence `(s_k)` containing at least `n+1` items, returns the
    `n`-th forward difference,

    .. math ::

        \Delta^n = \sum_{k=0}^{\infty} (-1)^{k+n} {n \choose k} s_k.
    éÿÿÿÿr   )ÚintÚzeror   )ÚctxÚsÚnÚdÚbÚks         ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/mpmath/calculus/differentiation.pyÚ
differencer      sh   € ô 	ˆA‹€AØ�‰€AØ	��Q‘‰€AÜ�A�a‘C‹[ò !ˆØ	ˆQ��1‘‰X‰ˆØ�!�A‘#‰Y˜A˜a™CÑ ‰ð!ð €Hó    c                 óª  — |j                  d«      }|j                  dd«      }|j                  dd«      }|d|z  z   |dz   z  }	| j                  }
	 |	| _        |j                  d«      }|€H|j                  d	«      rt        | j                  |«      «      }nd}| j	                  d| |z
  |z
  «      }n| j                  |«      }|j                  dd«      }|r%|| j                  |«      z  }t        |dz   «      }|}nt        | |dz   d«      }d|z  }|r|d
|z  z  }|D �cg c]  } ||||z  z   «      ‘Œ }}|||	f|
| _        S c c}w # |
| _        w xY w)NÚsingularÚaddprecé
   Ú	directioné    r   r   ÚhÚrelativeg      à?)ÚgetÚprecr   ÚmagÚldexpÚconvertÚsignr   )r
   ÚfÚxr   r   Úoptionsr   r   r   ÚworkprecÚorigr   Ú	hextramagÚstepsÚnormr   Úvaluess                    r   Úhstepsr*      s_  € Ø�{‰{˜:Ó&€HØ�k‰k˜) RÓ(€GØ—‘˜K¨Ó+€IØ�Q�w‘Y‘ 1 Q¡3Ñ'€HØ�8‰8€DðØˆŒØ�K‰K˜ÓˆØˆ9Ø�{‰{˜:Ô&Ü §¡¨£
›O‘	à�	Ø—	‘	˜!˜d˜U 7™]¨9Ñ4Ó5‰Aà—‘˜A“ˆAà—K‘K ¨QÓ/ˆ	ÙØ�—‘˜)Ó$Ñ$ˆAÜ˜1˜Q™3“KˆEØ‰Dô ˜A˜2˜q ™s AÓ&ˆEØ�a‘CˆDáØ��Q‘‰JˆAØ$)Ö*˜q‘!�A�a˜‘c‘E•(Ð*ˆÐ*Ø�t˜XÐ%àˆ�ùò +øð ˆ�ús   ÁCE	 Ä!EÄ6E	 ÅE	 Å		Ec                 ó<  ‡ ‡‡‡‡— d}	 t        ‰«      }t        ‰«      Šd}|r.‰D �cg c]  }‰ j                  |«      ‘Œ c}Št        ‰ ‰‰|«      S |j	                  dd«      }‰dk(  r-|dk7  r(|j	                  d«      s ‰‰ j                  ‰«      «      S ‰ j
                  }		 |dk(  r4t        ‰ ‰‰‰|	fi |¤Ž\  }
}}|‰ _        ‰ j                  |
‰«      |‰z  z  }n˜|dk(  r…‰ xj
                  dz  c_        ‰ j                  |j	                  d	d
«      «      Šˆ ˆˆˆˆfd„}‰ j                  |dd‰ j                  z  g«      }|‰ j                  ‰«      z  d‰ j                  z  z  }nt        d|z  «      ‚|	‰ _        |­S # t        $ r Y �Œhw xY wc c}w # |	‰ _        w xY w)aÌ  
    Numerically computes the derivative of `f`, `f'(x)`, or generally for
    an integer `n \ge 0`, the `n`-th derivative `f^{(n)}(x)`.
    A few basic examples are::

        >>> from mpmath import *
        >>> mp.dps = 15; mp.pretty = True
        >>> diff(lambda x: x**2 + x, 1.0)
        3.0
        >>> diff(lambda x: x**2 + x, 1.0, 2)
        2.0
        >>> diff(lambda x: x**2 + x, 1.0, 3)
        0.0
        >>> nprint([diff(exp, 3, n) for n in range(5)])   # exp'(x) = exp(x)
        [20.0855, 20.0855, 20.0855, 20.0855, 20.0855]

    Even more generally, given a tuple of arguments `(x_1, \ldots, x_k)`
    and order `(n_1, \ldots, n_k)`, the partial derivative
    `f^{(n_1,\ldots,n_k)}(x_1,\ldots,x_k)` is evaluated. For example::

        >>> diff(lambda x,y: 3*x*y + 2*y - x, (0.25, 0.5), (0,1))
        2.75
        >>> diff(lambda x,y: 3*x*y + 2*y - x, (0.25, 0.5), (1,1))
        3.0

    **Options**

    The following optional keyword arguments are recognized:

    ``method``
        Supported methods are ``'step'`` or ``'quad'``: derivatives may be
        computed using either a finite difference with a small step
        size `h` (default), or numerical quadrature.
    ``direction``
        Direction of finite difference: can be -1 for a left
        difference, 0 for a central difference (default), or +1
        for a right difference; more generally can be any complex number.
    ``addprec``
        Extra precision for `h` used to account for the function's
        sensitivity to perturbations (default = 10).
    ``relative``
        Choose `h` relative to the magnitude of `x`, rather than an
        absolute value; useful for large or tiny `x` (default = False).
    ``h``
        As an alternative to ``addprec`` and ``relative``, manually
        select the step size `h`.
    ``singular``
        If True, evaluation exactly at the point `x` is avoided; this is
        useful for differentiating functions with removable singularities.
        Default = False.
    ``radius``
        Radius of integration contour (with ``method = 'quad'``).
        Default = 0.25. A larger radius typically is faster and more
        accurate, but it must be chosen so that `f` has no
        singularities within the radius from the evaluation point.

    A finite difference requires `n+1` function evaluations and must be
    performed at `(n+1)` times the target precision. Accordingly, `f` must
    support fast evaluation at high precision.

    With integration, a larger number of function evaluations is
    required, but not much extra precision is required. For high order
    derivatives, this method may thus be faster if f is very expensive to
    evaluate at high precision.

    **Further examples**

    The direction option is useful for computing left- or right-sided
    derivatives of nonsmooth functions::

        >>> diff(abs, 0, direction=0)
        0.0
        >>> diff(abs, 0, direction=1)
        1.0
        >>> diff(abs, 0, direction=-1)
        -1.0

    More generally, if the direction is nonzero, a right difference
    is computed where the step size is multiplied by sign(direction).
    For example, with direction=+j, the derivative from the positive
    imaginary direction will be computed::

        >>> diff(abs, 0, direction=j)
        (0.0 - 1.0j)

    With integration, the result may have a small imaginary part
    even even if the result is purely real::

        >>> diff(sqrt, 1, method='quad')    # doctest:+ELLIPSIS
        (0.5 - 4.59...e-26j)
        >>> chop(_)
        0.5

    Adding precision to obtain an accurate value::

        >>> diff(cos, 1e-30)
        0.0
        >>> diff(cos, 1e-30, h=0.0001)
        -9.99999998328279e-31
        >>> diff(cos, 1e-30, addprec=100)
        -1.0e-30

    FTÚmethodÚstepr   Úquadr   r   Úradiusg      Ð?c                 óR   •— ‰‰j                  | «      z  }‰|z   } ‰|«      |‰z  z  S ©N)Úexpj)ÚtÚreiÚzr
   r!   r   r/   r"   s      €€€€€r   Úgzdiff.<locals>.gÂ   s0   ø€ Ø˜SŸX™X a›[Ñ(�Ø˜‘G�Ù˜“t˜c 1™f‘}Ð$r   r   zunknown method: %r)ÚlistÚ	TypeErrorr   Ú_partial_diffr   r   r*   r   ÚquadtsÚpiÚ	factorialÚ
ValueError)r
   r!   r"   r   r#   ÚpartialÚordersÚ_r,   r   r)   r(   r$   Úvr6   r   r/   s   ````            @r   ÚdiffrB   C   sŸ  ü€ ðR €GðÜ�a“ˆÜ�‹GˆØˆñ Ø%&Ö' ˆS�[‰[˜�^Ò'ˆÜ˜S ! Q¨°Ó8Ð8Ø�[‰[˜ 6Ó*€FØˆA‚v�&˜FÒ"¨7¯;©;°zÔ+BÙ�—‘˜Q“Ó Ð Ø�8‰8€DðØ�VÒÜ%+¨C°°A°q¸$Ñ%JÀ'Ñ%JÑ"ˆF�D˜(ØˆCŒHØ—‘˜v qÓ)¨D°!©GÑ3‰AØ�vÒØ�HŠH˜‰N�HØ—[‘[ §¡¨X°tÓ!<Ó=ˆF÷%ð %ð —
‘
˜1˜q ! C§F¡F¡(˜mÓ,ˆAØ�C—M‘M !Ó$Ñ$¨¨#¯&©&©Ñ1‰AäÐ1°FÑ:Ó;Ð;àˆŒØˆ2€Iøô7 ò Úðüò (øð. ˆ�ús#   ‰E= §FÂ"CF Å=	F
Æ	F
Æ	Fc                 óÆ   ‡ ‡‡‡‡— |s ‰«       S t        |«      s ‰|Ž S dŠt        t        |«      «      D ]	  Š|‰   sŒ	 n |‰   Šˆ ˆˆˆˆfd„}d|‰<   t        ‰ |||‰«      S )Nr   c                  óD   •‡ — ˆˆ ˆfd„} ‰j                   |‰ ‰   ‰fi ‰¤ŽS )Nc                 ó.   •—  ‰‰d ‰ | fz   ‰‰dz   d  z   Ž S ©Nr   © )r3   r!   Úf_argsÚis    €€€r   Úinnerz1_partial_diff.<locals>.fdiff_inner.<locals>.innerÙ   s*   ø€ Ù�v˜b˜q�z Q DÑ(¨6°!°A±#°$¨<Ñ7Ð9Ð9r   ©rB   )rH   rJ   r
   r!   rI   r#   Úorders   ` €€€€€r   Úfdiff_innerz"_partial_diff.<locals>.fdiff_innerØ   s&   ù€ ö	:àˆs�x‰x˜˜v a™y¨%Ñ;°7Ñ;Ð;r   )ÚsumÚrangeÚlenr9   )r
   r!   Úxsr?   r#   rM   rI   rL   s   ``  ` @@r   r9   r9   Î   sw   ü€ ÙÙ‹sˆ
ÜˆvŒ;Ù�"ˆvˆØ	€AÜ”3�v“;Óò ˆØ�!‹9Ùðð �1‰I€E÷<ð <ð €Fˆ1�IÜ˜˜k¨2¨v°wÓ?Ð?r   Nc              +   ó¶  K  — |€| j                   }nt        |«      }|j                  dd«      dk7  r0d}||dz   k  r% | j                  |||fi |¤Ž–— |dz  }||dz   k  rŒ%y|j                  d«      }|r| j                  ||dd¬«      –— n || j	                  |«      «      –— |dk  ry|| j                   k(  rd	\  }}nd|dz   }}	 | j
                  }	t        | ||||	fi |¤Ž\  }
}}t        ||«      D ]5  }	 || _        | j                  |
|«      ||z  z  }|	| _        |­–— ||k\  sŒ5 y |t        |d
z  dz   «      }}t        ||«      }Œ„# |	| _        w xY w­w)ad  
    Returns a generator that yields the sequence of derivatives

    .. math ::

        f(x), f'(x), f''(x), \ldots, f^{(k)}(x), \ldots

    With ``method='step'``, :func:`~mpmath.diffs` uses only `O(k)`
    function evaluations to generate the first `k` derivatives,
    rather than the roughly `O(k^2)` evaluations
    required if one calls :func:`~mpmath.diff` `k` separate times.

    With `n < \infty`, the generator stops as soon as the
    `n`-th derivative has been generated. If the exact number of
    needed derivatives is known in advance, this is further
    slightly more efficient.

    Options are the same as for :func:`~mpmath.diff`.

    **Examples**

        >>> from mpmath import *
        >>> mp.dps = 15
        >>> nprint(list(diffs(cos, 1, 5)))
        [0.540302, -0.841471, -0.540302, 0.841471, 0.540302, -0.841471]
        >>> for i, d in zip(range(6), diffs(cos, 1)):
        ...     print("%s %s" % (i, d))
        ...
        0 0.54030230586814
        1 -0.841470984807897
        2 -0.54030230586814
        3 0.841470984807897
        4 0.54030230586814
        5 -0.841470984807897

    Nr,   r-   r   r   r   T)r   )r   r   gffffffö?)
Úinfr   r   rB   r   r   r*   r   r   Úmin)r
   r!   r"   r   r#   r   r   ÚAÚBÚcallprecÚyr(   r$   r   s                 r   ÚdiffsrY   ß   s‹  è ø€ ðL 	€yØ�G‰G‰ä�‹FˆØ‡{�{�8˜VÓ$¨Ò.ØˆØ�!�a‘%ŠiØ�#—(‘(˜1˜a Ñ. gÑ.Ò.Ø�‰FˆAð �!�a‘%‹ið 	Ø�{‰{˜:Ó&€HÙØ�h‰h�q˜!˜Q¨ˆhÓ.Ó.á�—‘˜A“ÓÒØˆ1‚uØØˆC�G‰G‚|Ø‰ˆ‰1à�!�A‘#ˆ1ˆØ
Ø—8‘8ˆÜ" 3¨¨1¨a°ÑE¸WÑEÑˆˆ4�Ü˜˜1“ò 	ˆAð$Ø#�”Ø—N‘N 1 aÓ(¨4°©7Ñ2�à#�”Ø�"ŠHØ�A‹vÙð	ð ”#�a˜‘e˜A‘g“,ˆ1ˆÜ��1‹Iˆð øð $�•üs+   ‚AEÁ!BEÃ9EÄEÄ*#EÅ	EÅEc                 ó0   ‡ ‡— t        ‰ «      Š g Šˆˆ fd„}|S )Nc                 ó|   •— t        t        ‰«      | dz   «      D ]  }‰j                  t        ‰«      «       Œ ‰|    S rF   )r   rP   ÚappendÚnext)r   rI   ÚdataÚgens     €€r   r!   ziterable_to_function.<locals>.f,  s:   ø€ Üœ˜D›	 1 Q¡3Ó'ò 	#ˆAØ�K‰Kœ˜S›	Õ"ð	#à�A‰wˆr   )Úiter)r_   r!   r^   s   ` @r   Úiterable_to_functionra   )  s   ù€ Ü
ˆs‹)€CØ€Dõð €Hr   c              #   ó€  K  — t        |«      }|dk(  r|d   D ]  }|–— Œ yt        | j                  |d|dz   «      «      }t        | j                  ||dz  d «      «      }d}	  ||«       |d«      z  }d}t        d|dz   «      D ]*  }	|||	z
  dz   z  |	z  }|| |||	z
  «      z   ||	«      z  z  }Œ, |–— |dz  }ŒY­w)aV  
    Given a list of `N` iterables or generators yielding
    `f_k(x), f'_k(x), f''_k(x), \ldots` for `k = 1, \ldots, N`,
    generate `g(x), g'(x), g''(x), \ldots` where
    `g(x) = f_1(x) f_2(x) \cdots f_N(x)`.

    At high precision and for large orders, this is typically more efficient
    than numerical differentiation if the derivatives of each `f_k(x)`
    admit direct computation.

    Note: This function does not increase the working precision internally,
    so guard digits may have to be added externally for full accuracy.

    **Examples**

        >>> from mpmath import *
        >>> mp.dps = 15; mp.pretty = True
        >>> f = lambda x: exp(x)*cos(x)*sin(x)
        >>> u = diffs(f, 1)
        >>> v = mp.diffs_prod([diffs(exp,1), diffs(cos,1), diffs(sin,1)])
        >>> next(u); next(v)
        1.23586333600241
        1.23586333600241
        >>> next(u); next(v)
        0.104658952245596
        0.104658952245596
        >>> next(u); next(v)
        -5.96999877552086
        -5.96999877552086
        >>> next(u); next(v)
        -12.4632923122697
        -12.4632923122697

    r   r   Nr   )rP   ra   Ú
diffs_prodr   )
r
   ÚfactorsÚNÚcÚurA   r   r   Úar   s
             r   rc   rc   2  sî   è ø€ ôH 	ˆG‹€AØˆA‚vØ˜‘ò 	ˆAØ‹Gñ	ô ! §¡°¸¸¸A¹°Ó!?Ó@ˆÜ  §¡°¸¸1¹¸°Ó!?Ó@ˆØˆØá�!“‘q˜“t‘ˆAØˆAÜ˜A˜a ™c“]ò '�Ø˜˜1™˜Q™‘K 1Ñ$�Ø�Q™˜1˜Q™3›‘Z¡! A£$Ñ&Ñ&‘ð'ð ŠGØ�‰FˆAð ùs   ‚B<B>c                 óä  — | |v r||    S |sddi|d<   t        | dz
  «      }t        d„ t        |«      D «       «      }i }t        |«      D ]+  \  }}|d   dz   f|dd z   }||v r||xx   |z  cc<   Œ'|||<   Œ- t        |«      D ]c  \  }}t        |«      sŒt	        |«      D ]D  \  }}|sŒ	|d| |dz
  ||dz      dz   fz   ||dz   d z   }	|	|v r||	xx   ||z  z  cc<   Œ=||z  ||	<   ŒF Œe ||| <   ||    S )z¤
    nth differentiation polynomial for exp (Faa di Bruno's formula).

    TODO: most exponents are zero, so maybe a sparse representation
    would be better.
    ©r   r   r   c              3   ó0   K  — | ]  \  }}|d z   |f–— Œ y­w)rj   NrG   )Ú.0rf   rA   s      r   ú	<genexpr>zdpoly.<locals>.<genexpr>t  s   è ø€ Ò2™E˜Q˜qˆa�‰f�QŒZÑ2ùs   ‚Nr   )ÚdpolyÚdictÚ	iteritemsrN   Ú	enumerate)
r   Ú_cacheÚRÚRaÚpowersÚcountÚpowers1r   ÚpÚpowers2s
             r   rn   rn   h  sG  € ð 	ˆF�{Ø�a‰yÐÙØ˜!�Hˆˆq‰	Üˆa�‰c‹
€AÜÑ2¤Y¨q£\Ô2Ó2€AØ	€BÜ" 1›ò  ‰ˆ�Ø˜!‘9˜Q‘;�. 6¨!¨" :Ñ-ˆØ�b‰=Øˆw‹K˜5Ñ ŒKàˆBˆwŠKð ô # 1›ò 	*‰ˆ�Ü�6Œ{ØÜ˜VÓ$ò 	*‰CˆAˆaÚØ   !˜*¨¨!©¨F°1°Q±3©K¸©MÐ':Ñ:¸VÀAÀaÁCÀD¸\ÑI�Ø˜b‘=Ø�w“K 1 U¡7Ñ*”Kà"# E¡'�B�w’Kñ	*ð	*ð €Fˆ1�IØ�!‰9Ðr   c           	   #   ó$  ‡K  — t        |«      Š| j                   ‰d«      «      }|–— d}	 | j                  d«      }t        t	        |«      «      D ].  \  }}||| j                  ˆfd„t        |«      D «       «      z  z  }Œ0 ||z  –— |dz  }Œc­w)aÐ  
    Given an iterable or generator yielding `f(x), f'(x), f''(x), \ldots`
    generate `g(x), g'(x), g''(x), \ldots` where `g(x) = \exp(f(x))`.

    At high precision and for large orders, this is typically more efficient
    than numerical differentiation if the derivatives of `f(x)`
    admit direct computation.

    Note: This function does not increase the working precision internally,
    so guard digits may have to be added externally for full accuracy.

    **Examples**

    The derivatives of the gamma function can be computed using
    logarithmic differentiation::

        >>> from mpmath import *
        >>> mp.dps = 15; mp.pretty = True
        >>>
        >>> def diffs_loggamma(x):
        ...     yield loggamma(x)
        ...     i = 0
        ...     while 1:
        ...         yield psi(i,x)
        ...         i += 1
        ...
        >>> u = diffs_exp(diffs_loggamma(3))
        >>> v = diffs(gamma, 3)
        >>> next(u); next(v)
        2.0
        2.0
        >>> next(u); next(v)
        1.84556867019693
        1.84556867019693
        >>> next(u); next(v)
        2.49292999190269
        2.49292999190269
        >>> next(u); next(v)
        3.44996501352367
        3.44996501352367

    r   r   c              3   óF   •K  — | ]  \  }}|sŒ	 ‰|d z   «      |z  –— Œ y­w)r   NrG   )rl   r   rx   Úfns      €r   rm   zdiffs_exp.<locals>.<genexpr>¼  s#   øè ø€ ÒL©E¨Q¨qÊ!™R  !¡›W a�ZÑLùs   ƒ
!Ž!)ra   ÚexpÚmpfrp   rn   Úfprodrq   )r
   ÚfdiffsÚf0rI   r   ru   rf   r|   s          @r   Ú	diffs_expr‚   ‰  s—   øè ø€ ôX 
˜fÓ	%€BØ	�‰‘�A“‹€BØ
‚HØ	€AØ
Ø�G‰G�A‹JˆÜ"¤5¨£8Ó,ò 	M‰IˆF�AØ��3—9‘9ÓL´Y¸vÓ5FÔLÓLÑLÑL‰Að	Mà�"‰fŠØ	ˆQ‰ˆð ùs   ƒBBc           	      óæ   ‡ ‡‡‡— t        t        ‰ j                  ‰ j                  |«      «      «      dz   d«      }||z
  dz
  Šˆ ˆˆˆfd„}‰ j	                  |||«      ‰ j                  ||z
  «      z  S )a…	  
    Calculates the Riemann-Liouville differintegral, or fractional
    derivative, defined by

    .. math ::

        \,_{x_0}{\mathbb{D}}^n_xf(x) = \frac{1}{\Gamma(m-n)} \frac{d^m}{dx^m}
        \int_{x_0}^{x}(x-t)^{m-n-1}f(t)dt

    where `f` is a given (presumably well-behaved) function,
    `x` is the evaluation point, `n` is the order, and `x_0` is
    the reference point of integration (`m` is an arbitrary
    parameter selected automatically).

    With `n = 1`, this is just the standard derivative `f'(x)`; with `n = 2`,
    the second derivative `f''(x)`, etc. With `n = -1`, it gives
    `\int_{x_0}^x f(t) dt`, with `n = -2`
    it gives `\int_{x_0}^x \left( \int_{x_0}^t f(u) du \right) dt`, etc.

    As `n` is permitted to be any number, this operator generalizes
    iterated differentiation and iterated integration to a single
    operator with a continuous order parameter.

    **Examples**

    There is an exact formula for the fractional derivative of a
    monomial `x^p`, which may be used as a reference. For example,
    the following gives a half-derivative (order 0.5)::

        >>> from mpmath import *
        >>> mp.dps = 15; mp.pretty = True
        >>> x = mpf(3); p = 2; n = 0.5
        >>> differint(lambda t: t**p, x, n)
        7.81764019044672
        >>> gamma(p+1)/gamma(p-n+1) * x**(p-n)
        7.81764019044672

    Another useful test function is the exponential function, whose
    integration / differentiation formula easy generalizes
    to arbitrary order. Here we first compute a third derivative,
    and then a triply nested integral. (The reference point `x_0`
    is set to `-\infty` to avoid nonzero endpoint terms.)::

        >>> differint(lambda x: exp(pi*x), -1.5, 3)
        0.278538406900792
        >>> exp(pi*-1.5) * pi**3
        0.278538406900792
        >>> differint(lambda x: exp(pi*x), 3.5, -3, -inf)
        1922.50563031149
        >>> exp(pi*3.5) / pi**3
        1922.50563031149

    However, for noninteger `n`, the differentiation formula for the
    exponential function must be modified to give the same result as the
    Riemann-Liouville differintegral::

        >>> x = mpf(3.5)
        >>> c = pi
        >>> n = 1+2*j
        >>> differint(lambda x: exp(c*x), x, n)
        (-123295.005390743 + 140955.117867654j)
        >>> x**(-n) * exp(c)**x * (x*c)**n * gammainc(-n, 0, x*c) / gamma(-n)
        (-123295.005390743 + 140955.117867654j)


    r   c                 ó8   •‡ — ‰j                  ˆˆˆ fd„‰‰ g«      S )Nc                 ó&   •— ‰| z
  ‰z   ‰| «      z  S r1   rG   )r3   r!   Úrr"   s    €€€r   ú<lambda>z-differint.<locals>.<lambda>.<locals>.<lambda>  s   ø€  a¨¡c¨A¡X±°!³¡_€ r   )r.   )r"   r
   r!   r†   Úx0s   `€€€€r   r‡   zdifferint.<locals>.<lambda>  s   ù€ �#—(‘(Õ4°r¸1°gÓ>€ r   )Úmaxr   ÚceilÚrerB   Úgamma)r
   r!   r"   r   rˆ   Úmr6   r†   s   ``  `  @r   Ú	differintrŽ   À  sc   û€ ôH 	ŒC�—‘˜Ÿ™ ›Ó#Ó$ QÑ&¨Ó*€AØ	ˆ!‰ˆA‰€AÞ>€AØ�8‰8�A�q˜!Ó˜sŸy™y¨¨1©›~Ñ-Ð-r   c                 ó,   ‡ ‡‡‡— ‰dk(  r‰S ˆ ˆˆˆfd„}|S )a3  
    Given a function `f`, returns a function `g(x)` that evaluates the nth
    derivative `f^{(n)}(x)`::

        >>> from mpmath import *
        >>> mp.dps = 15; mp.pretty = True
        >>> cos2 = diffun(sin)
        >>> sin2 = diffun(sin, 4)
        >>> cos(1.3), cos2(1.3)
        (0.267498828624587, 0.267498828624587)
        >>> sin(1.3), sin2(1.3)
        (0.963558185417193, 0.963558185417193)

    The function `f` must support arbitrary precision evaluation.
    See :func:`~mpmath.diff` for additional details and supported
    keyword options.
    r   c                 ó.   •—  ‰j                   ‰| ‰fi ‰¤ŽS r1   rK   )r"   r
   r!   r   r#   s    €€€€r   r6   zdiffun.<locals>.g  s   ø€ Øˆs�x‰x˜˜1˜aÑ+ 7Ñ+Ð+r   rG   )r
   r!   r   r#   r6   s   ```` r   Údiffunr‘   	  s   û€ ð& 	ˆA‚vØˆ÷,à€Hr   c                 ó4  — t         | j                  |||fi |¤Ž«      }|j                  dd«      r6|D ��cg c](  \  }}| j                  |«      | j	                  |«      z  ‘Œ* c}}S |D ��cg c]  \  }}|| j	                  |«      z  ‘Œ c}}S c c}}w c c}}w )a§  
    Produces a degree-`n` Taylor polynomial around the point `x` of the
    given function `f`. The coefficients are returned as a list.

        >>> from mpmath import *
        >>> mp.dps = 15; mp.pretty = True
        >>> nprint(chop(taylor(sin, 0, 5)))
        [0.0, 1.0, 0.0, -0.166667, 0.0, 0.00833333]

    The coefficients are computed using high-order numerical
    differentiation. The function must be possible to evaluate
    to arbitrary precision. See :func:`~mpmath.diff` for additional details
    and supported keyword options.

    Note that to evaluate the Taylor polynomial as an approximation
    of `f`, e.g. with :func:`~mpmath.polyval`, the coefficients must be reversed,
    and the point of the Taylor expansion must be subtracted from
    the argument:

        >>> p = taylor(exp, 2.0, 10)
        >>> polyval(p[::-1], 2.5 - 2.0)
        12.1824939606092
        >>> exp(2.5)
        12.1824939607035

    ÚchopT)rq   rY   r   r“   r<   )r
   r!   r"   r   r#   r_   rI   r   s           r   Útaylorr”   "  s†   € ô8 �I�C—I‘I˜a  AÑ1¨Ñ1Ó
2€CØ‡{�{�6˜4Ô Ø9<×=±°°A�—‘˜“˜CŸM™M¨!Ó,Ó,Ó=Ð=à/2×3¡t q¨!��#—-‘- Ó"Ó"Ó3Ð3ùó >ùã3s   ¶-BÁ,Bc                 ó˜  — t        |«      ||z   dz   k  rt        d«      ‚|dk(  r4|dk(  r| j                  g| j                  gfS |d|dz    | j                  gfS | j                  |«      }t	        |«      D ]2  }t	        t        |||z   dz   «      «      D ]  }|||z   |z
     |||f<   Œ Œ4 | j                  ||dz   ||z   dz    «       }| j                  ||«      }| j                  gt        |«      z   }	dg|dz   z  }
t	        |dz   «      D ];  }||   }t	        dt        ||«      dz   «      D ]  }||	|   |||z
     z  z  }Œ ||
|<   Œ= |
|	fS )aä  
    Computes a Pade approximation of degree `(L, M)` to a function.
    Given at least `L+M+1` Taylor coefficients `a` approximating
    a function `A(x)`, :func:`~mpmath.pade` returns coefficients of
    polynomials `P, Q` satisfying

    .. math ::

        P = \sum_{k=0}^L p_k x^k

        Q = \sum_{k=0}^M q_k x^k

        Q_0 = 1

        A(x) Q(x) = P(x) + O(x^{L+M+1})

    `P(x)/Q(x)` can provide a good approximation to an analytic function
    beyond the radius of convergence of its Taylor series (example
    from G.A. Baker 'Essentials of Pade Approximants' Academic Press,
    Ch.1A)::

        >>> from mpmath import *
        >>> mp.dps = 15; mp.pretty = True
        >>> one = mpf(1)
        >>> def f(x):
        ...     return sqrt((one + 2*x)/(one + x))
        ...
        >>> a = taylor(f, 0, 6)
        >>> p, q = pade(a, 3, 3)
        >>> x = 10
        >>> polyval(p[::-1], x)/polyval(q[::-1], x)
        1.38169105566806
        >>> f(x)
        1.38169855941551

    r   z%L+M+1 Coefficients should be providedr   N)rP   r=   ÚoneÚmatrixrO   rT   Úlu_solver7   )r
   rh   ÚLÚMrU   ÚjrI   rA   r"   Úqrx   r   s               r   Úpader�   D  sˆ  € ôP ˆ1ƒv��!‘�A‘‚~ÜÐ@ÓAÐAàˆA‚vØ�Š6Ø—G‘G�9˜sŸw™w˜iÐ'Ð'à�T�a˜‘c�7˜SŸW™W˜IÐ%Ð%ð 	�
‰
�1‹€AÜ�1‹Xò ˆÜ”s˜1˜a ™c !™e“}Ó%ò 	ˆAØ˜˜!™˜A™‘hˆAˆa�ˆdŠGñ	ðð 
�‰�A�q˜‘s˜Q˜q™S ™UÐ$Ó	%Ð%€AØ�‰�Q˜Ó€AØ	�‰ˆ	”D˜“GÑ€Aà	
ˆˆQˆq‰S‰	€AÜ�1�Q‘3‹Zò ˆØˆa‰DˆÜ�qœ#˜a ›( Q™,Ó'ò 	ˆAØ��1‘�a˜˜!™‘f‘Ñ‰Að	àˆˆ!Šð	ð
 ˆaˆ4€Kr   )r   r1   )r   r   )Úlibmp.backendr   Úcalculusr   ro   rp   ÚAttributeErrorÚitemsr   r*   rB   r9   rY   ra   rc   rn   r‚   rŽ   r‘   r”   r�   rG   r   r   ú<module>r¢      s  ðÝ "Ý ðØ—‘€Ið ñó ðò"!ðH òHó ðHòT@ð" òGó ðGòRð ñ3ó ð3ðj ó ðB ñ4ó ð4ðl òF.ó ðF.ðP òó ðð0 ñ4ó ð4ðB ñBó ñBøð ò Ø—
‘
‚Iðús   ŽA5 Á5B	ÂB	