
    g1                         d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ ddZ G d d	e          Z G d
 de          Z G d de          ZdS )    )S)FunctionArgumentIndexError)Dummyuniquely_named_symbol)gammadigamma)catalan)	conjugatec                 R    ddl m}m} ||k    r |d          S  || ||||          S )Nr   )betaincmpf)mpmathr   r   )abx1x2regr   r   s          b/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/functions/special/beta_functions.pybetainc_mpmath_fixr   	   sH    ########	Rxxs1vvwq!RS)))    c                   Z    e Zd ZdZdZd Zedd            Zd Zd Z	d Z
d	 Zdd
Zd ZdS )betaa	  
    The beta integral is called the Eulerian integral of the first kind by
    Legendre:

    .. math::
        \mathrm{B}(x,y)  \int^{1}_{0} t^{x-1} (1-t)^{y-1} \mathrm{d}t.

    Explanation
    ===========

    The Beta function or Euler's first integral is closely associated
    with the gamma function. The Beta function is often used in probability
    theory and mathematical statistics. It satisfies properties like:

    .. math::
        \mathrm{B}(a,1) = \frac{1}{a} \\
        \mathrm{B}(a,b) = \mathrm{B}(b,a)  \\
        \mathrm{B}(a,b) = \frac{\Gamma(a) \Gamma(b)}{\Gamma(a+b)}

    Therefore for integral values of $a$ and $b$:

    .. math::
        \mathrm{B} = \frac{(a-1)! (b-1)!}{(a+b-1)!}

    A special case of the Beta function when `x = y` is the
    Central Beta function. It satisfies properties like:

    .. math::
        \mathrm{B}(x) = 2^{1 - 2x}\mathrm{B}(x, \frac{1}{2})
        \mathrm{B}(x) = 2^{1 - 2x} cos(\pi x) \mathrm{B}(\frac{1}{2} - x, x)
        \mathrm{B}(x) = \int_{0}^{1} \frac{t^x}{(1 + t)^{2x}} dt
        \mathrm{B}(x) = \frac{2}{x} \prod_{n = 1}^{\infty} \frac{n(n + 2x)}{(n + x)^2}

    Examples
    ========

    >>> from sympy import I, pi
    >>> from sympy.abc import x, y

    The Beta function obeys the mirror symmetry:

    >>> from sympy import beta, conjugate
    >>> conjugate(beta(x, y))
    beta(conjugate(x), conjugate(y))

    Differentiation with respect to both $x$ and $y$ is supported:

    >>> from sympy import beta, diff
    >>> diff(beta(x, y), x)
    (polygamma(0, x) - polygamma(0, x + y))*beta(x, y)

    >>> diff(beta(x, y), y)
    (polygamma(0, y) - polygamma(0, x + y))*beta(x, y)

    >>> diff(beta(x), x)
    2*(polygamma(0, x) - polygamma(0, 2*x))*beta(x, x)

    We can numerically evaluate the Beta function to
    arbitrary precision for any complex numbers x and y:

    >>> from sympy import beta
    >>> beta(pi).evalf(40)
    0.02671848900111377452242355235388489324562

    >>> beta(1 + I).evalf(20)
    -0.2112723729365330143 - 0.7655283165378005676*I

    See Also
    ========

    gamma: Gamma function.
    uppergamma: Upper incomplete gamma function.
    lowergamma: Lower incomplete gamma function.
    polygamma: Polygamma function.
    loggamma: Log Gamma function.
    digamma: Digamma function.
    trigamma: Trigamma function.

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Beta_function
    .. [2] https://mathworld.wolfram.com/BetaFunction.html
    .. [3] https://dlmf.nist.gov/5.12

    Tc                    | j         \  }}|dk    r3t          ||          t          |          t          ||z             z
  z  S |dk    r3t          ||          t          |          t          ||z             z
  z  S t          | |          )N      )argsr   r	   r   )selfargindexxys       r   fdiffz
beta.fdiffm   s    y1q==1::wqzzGAENN:;;]]1::wqzzGAENN:;;$T8444r   Nc                     |t          ||          S |j        r+|j        r&t          ||d                                          S d S d S )NF)evaluate)r   	is_Numberdoit)clsr    r!   s      r   evalz	beta.evalx   s]    91::; 	51; 	51u---22444	5 	5 	5 	5r   c                 P   | j         d         x}}t          | j                   dk    }|r| j         d         n| j         d         x}}|                    dd          r |j        di |} |j        di |}|j        s|j        rt
          j        S |t
          j        u rd|z  S |t
          j        u rd|z  S ||dz   k    rd||z  t          |          z  z  S ||z   }|j	        r%|j
        r|j	        du r|j	        du rt
          j        S ||k    r
||k    r|s| S t          ||          S )Nr   r   deepTF )r   lengetr&   is_zeror   ComplexInfinityOner
   
is_integeris_negativeZeror   )r   hintsr    xoldsingle_argumentr!   yoldss           r   r&   z	beta.doit   sM   9Q<Ddi..A-#2D49Q<<	!DD99VT"" 	 AA9 	%	 	%$$::Q3J::Q3JA::ac'!**n%%EL 	Q] 	q|u/D/DLE!!6M99d?KAqzzr   c                 z    | j         \  }}t          |          t          |          z  t          ||z             z  S N)r   r   )r   r4   r    r!   s       r   _eval_expand_funczbeta._eval_expand_func   s3    y1Qxxa 5Q<<//r   c                 J    | j         d         j        o| j         d         j        S Nr   r   )r   is_realr   s    r   _eval_is_realzbeta._eval_is_real   s    y|#<	!(<<r   c                     |                      | j        d                                         | j        d                                                   S r=   )funcr   r   r?   s    r   _eval_conjugatezbeta._eval_conjugate   s:    yy1//1149Q<3I3I3K3KLLLr   c                      | j         di |S )Nr+   )r;   )r   r    r!   	piecewisekwargss        r   _eval_rewrite_as_gammazbeta._eval_rewrite_as_gamma   s    %t%/////r   c                     ddl m} t          t          d||g          j                  } |||dz
  z  d|z
  |dz
  z  z  |ddf          S Nr   )Integraltr   sympy.integrals.integralsrJ   r   r   name)r   r    r!   rF   rJ   rK   s         r   _eval_rewrite_as_Integralzbeta._eval_rewrite_as_Integral   se    666666'aV449::xAE
AEQU#33aAY???r   r:   )T)__name__
__module____qualname____doc__
unbranchedr"   classmethodr(   r&   r;   r@   rC   rG   rO   r+   r   r   r   r      s        U Ul J	5 	5 	5 5 5 5 [5  00 0 0= = =M M M0 0 0 0@ @ @ @ @r   r   c                   >    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
d	 Zd
S )r   a[  
    The Generalized Incomplete Beta function is defined as

    .. math::
        \mathrm{B}_{(x_1, x_2)}(a, b) = \int_{x_1}^{x_2} t^{a - 1} (1 - t)^{b - 1} dt

    The Incomplete Beta function is a special case
    of the Generalized Incomplete Beta function :

    .. math:: \mathrm{B}_z (a, b) = \mathrm{B}_{(0, z)}(a, b)

    The Incomplete Beta function satisfies :

    .. math:: \mathrm{B}_z (a, b) = (-1)^a \mathrm{B}_{\frac{z}{z - 1}} (a, 1 - a - b)

    The Beta function is a special case of the Incomplete Beta function :

    .. math:: \mathrm{B}(a, b) = \mathrm{B}_{1}(a, b)

    Examples
    ========

    >>> from sympy import betainc, symbols, conjugate
    >>> a, b, x, x1, x2 = symbols('a b x x1 x2')

    The Generalized Incomplete Beta function is given by:

    >>> betainc(a, b, x1, x2)
    betainc(a, b, x1, x2)

    The Incomplete Beta function can be obtained as follows:

    >>> betainc(a, b, 0, x)
    betainc(a, b, 0, x)

    The Incomplete Beta function obeys the mirror symmetry:

    >>> conjugate(betainc(a, b, x1, x2))
    betainc(conjugate(a), conjugate(b), conjugate(x1), conjugate(x2))

    We can numerically evaluate the Incomplete Beta function to
    arbitrary precision for any complex numbers a, b, x1 and x2:

    >>> from sympy import betainc, I
    >>> betainc(2, 3, 4, 5).evalf(10)
    56.08333333
    >>> betainc(0.75, 1 - 4*I, 0, 2 + 3*I).evalf(25)
    0.2241657956955709603655887 + 0.3619619242700451992411724*I

    The Generalized Incomplete Beta function can be expressed
    in terms of the Generalized Hypergeometric function.

    >>> from sympy import hyper
    >>> betainc(a, b, x1, x2).rewrite(hyper)
    (-x1**a*hyper((a, 1 - b), (a + 1,), x1) + x2**a*hyper((a, 1 - b), (a + 1,), x2))/a

    See Also
    ========

    beta: Beta function
    hyper: Generalized Hypergeometric function

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Beta_function#Incomplete_beta_function
    .. [2] https://dlmf.nist.gov/8.17
    .. [3] https://functions.wolfram.com/GammaBetaErf/Beta4/
    .. [4] https://functions.wolfram.com/GammaBetaErf/BetaRegularized4/02/

       Tc                     | j         \  }}}}|dk    rd|z
  |dz
  z   ||dz
  z  z  S |dk    rd|z
  |dz
  z  ||dz
  z  z  S t          | |          N   r   rW   )r   r   r   r   r   r   r   r   s         r   r"   zbetainc.fdiff   sv    y1b"q==Vq1u%%b1q5k11]]Fa!e$R!a%[00$T8444r   c                     t           | j        fS r:   )r   r   r?   s    r   _eval_mpmathzbetainc._eval_mpmath  s    !49,,r   c                 F    t          d | j        D                       rdS d S )Nc              3   $   K   | ]}|j         V  d S r:   r>   .0args     r   	<genexpr>z(betainc._eval_is_real.<locals>.<genexpr>  $      00ss{000000r   Tallr   r?   s    r   r@   zbetainc._eval_is_real  2    00di00000 	4	 	r   c                 F     | j         t          t          | j                   S r:   rB   mapr   r   r?   s    r   rC   zbetainc._eval_conjugate
      ty#i3344r   c           	          ddl m} t          t          d||||g          j                  } |||dz
  z  d|z
  |dz
  z  z  |||f          S rI   rL   )r   r   r   r   r   rF   rJ   rK   s           r   rO   z!betainc._eval_rewrite_as_Integral  si    666666'aB^<<ABBxAE
AEQU#33aR[AAAr   c                     ddl m} ||z   ||d|z
  f|dz   f|          z  ||z   ||d|z
  f|dz   f|          z  z
  |z  S Nr   )hyperr   )sympy.functions.special.hyperrp   )r   r   r   r   r   rF   rp   s          r   _eval_rewrite_as_hyperzbetainc._eval_rewrite_as_hyper  su    777777Aq!a%j1q5(B777"a%%%APQE
UVYZUZT\^`BaBa:aaefffr   N)rP   rQ   rR   rS   nargsrT   r"   r]   r@   rC   rO   rr   r+   r   r   r   r      s        F FN EJ	5 	5 	5- - -  5 5 5B B B
g g g g gr   r   c                   D    e Zd ZdZdZdZd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )betainc_regularizeda  
    The Generalized Regularized Incomplete Beta function is given by

    .. math::
        \mathrm{I}_{(x_1, x_2)}(a, b) = \frac{\mathrm{B}_{(x_1, x_2)}(a, b)}{\mathrm{B}(a, b)}

    The Regularized Incomplete Beta function is a special case
    of the Generalized Regularized Incomplete Beta function :

    .. math:: \mathrm{I}_z (a, b) = \mathrm{I}_{(0, z)}(a, b)

    The Regularized Incomplete Beta function is the cumulative distribution
    function of the beta distribution.

    Examples
    ========

    >>> from sympy import betainc_regularized, symbols, conjugate
    >>> a, b, x, x1, x2 = symbols('a b x x1 x2')

    The Generalized Regularized Incomplete Beta
    function is given by:

    >>> betainc_regularized(a, b, x1, x2)
    betainc_regularized(a, b, x1, x2)

    The Regularized Incomplete Beta function
    can be obtained as follows:

    >>> betainc_regularized(a, b, 0, x)
    betainc_regularized(a, b, 0, x)

    The Regularized Incomplete Beta function
    obeys the mirror symmetry:

    >>> conjugate(betainc_regularized(a, b, x1, x2))
    betainc_regularized(conjugate(a), conjugate(b), conjugate(x1), conjugate(x2))

    We can numerically evaluate the Regularized Incomplete Beta function
    to arbitrary precision for any complex numbers a, b, x1 and x2:

    >>> from sympy import betainc_regularized, pi, E
    >>> betainc_regularized(1, 2, 0, 0.25).evalf(10)
    0.4375000000
    >>> betainc_regularized(pi, E, 0, 1).evalf(5)
    1.00000

    The Generalized Regularized Incomplete Beta function can be
    expressed in terms of the Generalized Hypergeometric function.

    >>> from sympy import hyper
    >>> betainc_regularized(a, b, x1, x2).rewrite(hyper)
    (-x1**a*hyper((a, 1 - b), (a + 1,), x1) + x2**a*hyper((a, 1 - b), (a + 1,), x2))/(a*beta(a, b))

    See Also
    ========

    beta: Beta function
    hyper: Generalized Hypergeometric function

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Beta_function#Incomplete_beta_function
    .. [2] https://dlmf.nist.gov/8.17
    .. [3] https://functions.wolfram.com/GammaBetaErf/Beta4/
    .. [4] https://functions.wolfram.com/GammaBetaErf/BetaRegularized4/02/

    rW   Tc                 2    t          j        | ||||          S r:   )r   __new__)r'   r   r   r   r   s        r   rw   zbetainc_regularized.__new__c  s    Q2r222r   c                 B    t           g | j        t          d          R fS )Nr   )r   r   r   r?   s    r   r]   z betainc_regularized._eval_mpmathf  s#    !#5TY#5!#5#555r   c                     | j         \  }}}}|dk    r&d|z
  |dz
  z   ||dz
  z  z  t          ||          z  S |dk    r%d|z
  |dz
  z  ||dz
  z  z  t          ||          z  S t          | |          rY   )r   r   r   r[   s         r   r"   zbetainc_regularized.fdiffi  s    y1b"q==Vq1u%%b1q5k1DAJJ>>]]Fa!e$R!a%[041::==$T8444r   c                 F    t          d | j        D                       rdS d S )Nc              3   $   K   | ]}|j         V  d S r:   r`   ra   s     r   rd   z4betainc_regularized._eval_is_real.<locals>.<genexpr>u  re   r   Trf   r?   s    r   r@   z!betainc_regularized._eval_is_realt  rh   r   c                 F     | j         t          t          | j                   S r:   rj   r?   s    r   rC   z#betainc_regularized._eval_conjugatex  rl   r   c           	          ddl m} t          t          d||||g          j                  }||dz
  z  d|z
  |dz
  z  z  } |||||f          }	|	 |||ddf          z  S rI   rL   )
r   r   r   r   r   rF   rJ   rK   	integrandexprs
             r   rO   z-betainc_regularized._eval_rewrite_as_Integral{  s    666666'aB^<<ABBAJAQ//	x	Ar2;//hhy1a)4444r   c                     ddl m} ||z   ||d|z
  f|dz   f|          z  ||z   ||d|z
  f|dz   f|          z  z
  |z  }|t          ||          z  S ro   )rq   rp   r   )r   r   r   r   r   rF   rp   r   s           r   rr   z*betainc_regularized._eval_rewrite_as_hyper  s    777777Aq!a%j1q5(B777"a%%%APQE
UVYZUZT\^`BaBa:aaeffd1ajj  r   N)rP   rQ   rR   rS   rs   rT   rw   r]   r"   r@   rC   rO   rr   r+   r   r   ru   ru     s        D DJ EJ3 3 36 6 6	5 	5 	5  5 5 55 5 5! ! ! ! !r   ru   N)r   )
sympy.corer   sympy.core.functionr   r   sympy.core.symbolr   r   'sympy.functions.special.gamma_functionsr   r	   %sympy.functions.combinatorial.numbersr
   $sympy.functions.elementary.complexesr   r   r   r   ru   r+   r   r   <module>r      sK         < < < < < < < < : : : : : : : : B B B B B B B B 9 9 9 9 9 9 : : : : : :* * * *S@ S@ S@ S@ S@8 S@ S@ S@rgg gg gg gg ggh gg gg ggZk! k! k! k! k!( k! k! k! k! k!r   