+
    iO                     (   ^RI Ht ^RIHt  ]P
                  t]R 4       tR t	]RR l4       t
R t]RR l4       tR	 t]R
 4       t/ 3R lt]R 4       t]RR l4       t]RR l4       t]R 4       t]R 4       tR#   ] d    ]P                  t Lvi ; i)   )xrange)defunc                    \        V4      pV P                  pRV^,          ,          p\        V^,           4       F5  pW4W,          ,          ,          pWEV,
          ,          V^,           ,          pK7  	  V# )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.
)intzeror   )ctxsndbks   &&&   /Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/mpmath/calculus/differentiation.py
differencer      s]     	AAA	QAAaC[	XA#YAaC   H    c                 8   VP                  R 4      pVP                  R^
4      pVP                  R^ 4      pV^V,          ,           V^,           ,          p	V P                  p
 Wn        VP                  R4      pVfW   VP                  R4      '       d   \        V P                  V4      4      pM^ pV P	                  ^V) V,
          V,
          4      pMV P                  V4      pVP                  R^ 4      pV'       d-   WP                  V4      ,          p\        V^,           4      pTpM\        V) V^,           ^4      p^V,          pV'       d   VRV,          ,          pV Uu. uF  q! W/V,          ,           4      NK  	  ppVW3Wn        # u upi   Yn        i ; i)singularaddprec	directionhrelativeg      ?)getprecr   magldexpconvertsignr   )r	   fxr   r   optionsr   r   r   workprecorigr   	hextramagstepsnormr   valuess   &&&&&,           r   hstepsr'      sW   {{:&Hkk)R(GK+IQwY1Q3'H88DKK9{{:&&
O				!dU7]945AAAKKQ/	)$$A1Q3KED A2qsA&EaCDQJA$)*Eq!AcE(E*t% + s2   !1F A)F =AF F #F F F Fc                  a aaaa Rp \        S4      p\        S4      oRpV'       d1   S Uu. uF  pS P                  V4      NK  	  upo\        S SSXV4      # VP	                  RR4      pS^ 8X  d6   VR8w  d/   VP	                  R4      '       g   S! S P                  S4      4      # S P
                  p	 VR8X  d<   \        S SSSV	3/ VB w  rpVS n        S P                  V
S4      VS,          ,          pMVR8X  d   S ;P
                  ^
,          un        S P                  VP	                  RR4      4      oV VVVV3R	 lpS P                  V^ ^S P                  ,          .4      pVS P                  S4      ,          ^S P                  ,          ,          pM\        R
V,          4      hV	S n        V5#   \         d     ELi ; iu upi   T	S n        i ; i)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stepquadr   radiusg      ?c                 r   < SSP                  V 4      ,          pSV,           pS! V4      VS,          ,          # N)expj)treizr	   r   r   r,   r   s   &  r   gdiff.<locals>.g   s0    SXXa[(Gtc1f}$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!   vr3   r   r,   s   ffff,           @r   diffr@   C   s   R GaG %&'QS[[^Q'S!Q88[[6*FAv&F"7;;z+B+BQ  88DV%+CAq$%J'%J"F(CHvq)D!G3AvHHNH[[Xt!<=F% % 

1q!CFF(m,ACMM!$$#&&1A1F:;;2I7   (. s#   F3 G4C5G
 3GG
	Gc                    a aaaa V'       g   S! 4       # \        V4      '       g   S! V!  # ^ o\        \        V4      4       F  oVS,          '       g   K   M	  VS,          oV VVVV3R lp^ VS&   \        S WRVS4      # )    c                  N   <a  VV V3R  lpSP                   ! VS S,          S3/ SB # )c                 H   < S! SR S V 3,           SS^,           R  ,           !  # r.    )r0   r   f_argsis   &r   inner1_partial_diff.<locals>.fdiff_inner.<locals>.inner   s*    vbqzQD(6!A#$<799r   r@   )rF   rH   r	   r   rG   r    orders   j r   fdiff_inner"_partial_diff.<locals>.fdiff_inner   s$    	:xxvay%;7;;r   )sumrangelenr7   )r	   r   xsr=   r    rL   rG   rK   s   ff&&f @@r   r7   r7      st    s
v;;"v	A3v;!99   1IE< < F1Ikvw??r   Nc              +    "   Vf   V P                   pM\        V4      pVP                  RR4      R8w  d3   ^ pWS^,           8  d"   V P                  ! WV3/ VB x  V^,          pK.  R# VP                  R4      pV'       d   V P                  W^ RR7      x  MV! V P	                  V4      4      x  V^8  d   R# W0P                   8X  d   ^^rM
^V^,           r V P
                  p	\        WW(V	3/ VB w  rp\        Wx4       F<  p Wn        V P                  W4      W,          ,          pWn        V5x  WS8  g   K;   R# 	  T\        VR,          ^,           4      r\        W4      pK    Yn        i ; i5i)a  
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   T)r   gffffff?)
infr   r   r@   r   r   r'   r   r   min)r	   r   r   r   r    r   r   ABcallprecyr%   r!   r   s   &&&&,         r   diffsrY      sK    L 	yGGF{{8V$.a%i((1.g..FA{{:&HhhqQh..A1uGG|!1!A#1
88"31EWEA$#NN1(472#"Hv  #aeAg,1I $s+   A>E3BE3$E()E3<,E3(E00E3c                 2   a a \        S 4      o . oVV 3R  lpV# )c                    < \        \        S4      V ^,           4       F  pSP                  \        S4      4       K  	  SV ,          #    )r   rP   appendnext)r   rG   datagens   & r   r   iterable_to_function.<locals>.f,  s5    D	1Q3'AKKS	" (Awr   )iter)ra   r   r`   s   f @r   iterable_to_functionrd   )  s    
s)CD Hr   c              #    "   \        V4      pV^8X  d   V^ ,           F  pVx  K	  	  R# \        V P                  VRV^,           4      4      p\        V P                  W^,          R 4      4      p^ p V! V4      V! ^ 4      ,          p^p\        ^V^,           4       FH  p	WV	,
          ^,           ,          V	,          pWxV! Wi,
          4      ,          V! V	4      ,          ,          pKJ  	  Vx  V^,          pK  5i)a  
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

N)rP   rd   
diffs_prodr   )
r	   factorsNcur?   r   r
   ar   s
   &&        r   rf   rf   2  s     H 	GAAvAG  !A!?@ 1!?@!qtAAAac]1QK1$13Z!A$&& # GFAs   C8C:c                   W9   d	   W,          # V'       g   R^/V^ &   \        V ^,
          4      p\        R \        V4       4       4      p/ p\        V4       FD  w  rEV^ ,          ^,           3VR,          ,           pWc9   d   W6;;,          V,          uu&   K@  WSV&   KF  	  \        V4       F  w  rE\        V4      '       g   K  \	        V4       Ft  w  rxV'       g   K  VRV V^,
          WG^,           ,          ^,           3,           WG^,           R ,           p	W9   d   W9;;,          W,          ,          uu&   Kj  W,          W9&   Kv  	  K  	  W1V &   W,          # )z
nth differentiation polynomial for exp (Faa di Bruno's formula).

TODO: most exponents are zero, so maybe a sparse representation
would be better.
c              3   <   "   T F  w  rVR,           V3x  K  	  R# 5i)rB   NrB   rE   ).0ri   r?   s   &  r   	<genexpr>dpoly.<locals>.<genexpr>t  s     2\EQafQZ\s   :r]   NNNrn   )dpolydict	iteritemsrN   	enumerate)
r   _cacheRRapowerscountpowers1r   ppowers2s
   &&        r   rr   rr   h  s    	{y!Hq	ac
A2Yq\22A	B"1!9Q;.6":-=K5 KwK & #16{{V$CAq !*!FQ3KM'::VaCD\I=K17*K"#'BK % & 1I9r   c           	   #  F  a"   \        V4      oV P                  S! ^ 4      4      pVx  ^p V P                  ^ 4      p\        \	        V4      4       F6  w  rVWFV P                  V3R l\        V4       4       4      ,          ,          pK8  	  WB,          x  V^,          pKu  5i)aD  
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

c              3   h   <"   T F'  w  rV'       g   K  S! V^,           4      V,          x  K)  	  R# 5i)r]   NrE   )ro   r   r|   fns   &  r   rp   diffs_exp.<locals>.<genexpr>  s'     L5FEQ!ZR!WaZZ5Fs   22)rd   expmpfrt   rr   fprodru   )r	   fdiffsf0rG   r
   ry   ri   r   s   &&     @r   	diffs_expr     s     X 
f	%B	AB
H	A
GGAJ"58,IF399LYv5FLLLLA -f	Qs   BB!c           	     
  a aaa \        \        S P                  S P                  V4      4      4      ^,           ^4      pWS,
          ^,
          oV VVV3R lpS P	                  WbV4      S P                  WS,
          4      ,          # )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)


c                 :   <a  SP                  VVV 3R  lSS .4      # )c                 >   < SV ,
          S,          S! V 4      ,          # r.   rE   )r0   r   rr   s   &r   <lambda>-differint.<locals>.<lambda>.<locals>.<lambda>  s    acAX!_r   )r+   )r   r	   r   r   x0s   fr   r   differint.<locals>.<lambda>  s    #((4r1g>r   )maxr   ceilrer@   gamma)r	   r   r   r   r   mr3   r   s   ff&&f  @r   	differintr     s]    H 	C#$Q&*A	AA>A88A!syy~--r   c                2   a aaa S^ 8X  d   S# V VVV3R lpV# )a  
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.
c                 .   < SP                   ! SV S3/ SB # r.   rJ   )r   r	   r   r   r    s   &r   r3   diffun.<locals>.g  s    xx1a+7++r   rE   )r	   r   r   r    r3   s   fffl r   diffunr   	  s     & 	Av, ,Hr   c                P   \        V P                  ! WV3/ VB 4      pVP                  RR4      '       d<   V UUu. uF,  w  rgV P                  V4      V P	                  V4      ,          NK.  	  upp# V UUu. uF  w  rgWpP	                  V4      ,          NK  	  upp# u uppi u uppi )aW  
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)ru   rY   r   r   r:   )r	   r   r   r   r    ra   rG   r   s   &&&&,   r   taylorr   "  s    8 CIIaA11
2C{{64  9<=CMM!,,,==/23stq--"""s33 >3s   2B6"B"c                J   \        V4      W#,           ^,           8  d   \        R4      hV^ 8X  d;   V^ 8X  d   V P                  .V P                  .3# VRV^,            V P                  .3# V P                  V4      p\	        V4       FF  p\	        \        W2V,           ^,           4      4       F  pWV,           V,
          ,          WEV3&   K  	  KH  	  V P                  W^,           W#,           ^,            4      ) pV P                  WG4      pV P                  .\        V4      ,           p	^ .V^,           ,          p
\	        V^,           4       FU  pW,          p\	        ^\        W64      ^,           4       F&  pWV,          WV,
          ,          ,          ,          pK(  	  WV&   KW  	  W3# )ax  
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

z%L+M+1 Coefficients should be providedN)rP   r;   onematrixrO   rT   lu_solver5   )r	   rk   LMrU   jrG   r?   r   qr|   r
   s   &&&&        r   pader   D  sZ   P 1vA~@AAAv6GG9swwi''Tac7SWWI%% 	

1A1Xs1c!e}%A!AhAdG &  
AsQSU$	%%AQA		DGA	
QqS	A1Q3ZDq#a(Q,'A1a!fA (!	 
 4Kr   r\   r.   )r]   rB   )libmp.backendr   calculusr   rs   rt   AttributeErroritemsr   r'   r@   r7   rY   rd   rf   rr   r   r   r   r   r   rE   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 4B B B  

Is   A; ;BB