
    wg.                        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 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 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& d dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d dlm<Z<  G d de0      Z= G d de=e(      Z> G d de.      Z? G d  d!e?e*      Z@ G d" d#e?e-      ZA G d$ d%e,      ZB G d& d'e/e?      ZC G d( d)eBe)      ZDy*)+    )Sum	summation)Basic)cacheit)Lambda)I)EqNe)S)Dummysymbols)sympify)	factorial)exp)floor)	Piecewise)And)poly)series)PolynomialError)!reduce_rational_inequalities_wrap)	NamedArgsMixinSinglePSpaceSingleDomainrandom_symbolsPSpaceConditionalDomainRandomDomainProductDomainDistribution)Probability)Range	FiniteSet)Union)Contains)
filldedent)_sympifyc                       e Zd Zd Zy)DiscreteDistributionc                       | j                   | S Npdfselfargss     T/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/sympy/stats/drv.py__call__zDiscreteDistribution.__call__        txx    N)__name__
__module____qualname__r2    r4   r1   r)   r)      s    r4   r)   c                       e Zd ZdZej
                  Zd Zed        Z	e
d        Zd Zd Ze
d        Zd Zd	 Ze
d
        Zd Zd Ze
d        Zd Zd ZddZd Zy)SingleDiscreteDistributionz Discrete distribution of a single variable.

    Serves as superclass for PoissonDistribution etc....

    Provides methods for pdf, cdf, and sampling

    See Also:
        sympy.stats.crv_types.*
    c                 `    t        t        t        |            }t        j                  | g| S r+   )listmapr   r   __new__)clsr0   s     r1   r>   z"SingleDiscreteDistribution.__new__1   s'    C&'}}S(4((r4   c                       y r+   r8   )r0   s    r1   checkz SingleDiscreteDistribution.check5   s    r4   c                    t        ddt              }t        ddt              }| j                  j                  }| j	                  |      }t        |||t        |      ffi |}t        |||k\  fd      }t        ||      S )zB Compute the CDF from the PDF.

        Returns a Lambda.
        xT)integerr?   zrealr?   )r   T)	r   r   setinfr-   r   r   r   r   )r/   kwargsrC   rE   
left_boundr-   cdfs          r1   compute_cdfz&SingleDiscreteDistribution.compute_cdf9   sy     C51Cd.XX\\
 hhqkaU1X6A&Aa:o.	:a~r4   c                      y r+   r8   r/   rC   s     r1   _cdfzSingleDiscreteDistribution._cdfJ       r4   c                 `    |s| j                  |      }||S   | j                  di ||      S z Cumulative density function r8   )rP   rM   )r/   rC   rJ   rL   s       r1   rL   zSingleDiscreteDistribution.cdfM   s:    ))A,C
)t)&)!,,r4   c                     t        ddt              \  }}| j                  |      }t        t	        t
        |z  |z        |z  || j                  j                  | j                  j                  f      }t        ||      S )zV Compute the characteristic function from the PDF.

        Returns a Lambda.
        zx, tTrF   )
r   r   r-   r   r   r   rH   rI   supr   )r/   rJ   rC   tr-   cfs         r1   compute_characteristic_functionz:SingleDiscreteDistribution.compute_characteristic_functionU   sb     vDe41hhqks1Q3q5z#~488<<'FGa}r4   c                      y r+   r8   r/   rV   s     r1   _characteristic_functionz3SingleDiscreteDistribution._characteristic_function`   rQ   r4   c                 `    |s| j                  |      }||S   | j                  di ||      S )z Characteristic function r8   )r[   rX   )r/   rV   rJ   rW   s       r1   characteristic_functionz2SingleDiscreteDistribution.characteristic_functionc   s=    ..q1B~	=3t33=f=a@@r4   c                     t        dd      }t        dd      }| j                  |      }t        t        ||z        |z  || j                  j
                  | j                  j                  f      }t        ||      S )NrV   TrG   rC   rD   )r   r-   r   r   rH   rI   rU   r   )r/   rJ   rV   rC   r-   mgfs         r1   "compute_moment_generating_functionz=SingleDiscreteDistribution.compute_moment_generating_functionk   sb    #D!#t$hhqkAaCq$((,,&EFa~r4   c                      y r+   r8   rZ   s     r1   _moment_generating_functionz6SingleDiscreteDistribution._moment_generating_functions   rQ   r4   c                 `    |s| j                  |      }||S   | j                  di ||      S )Nr8   )rd   rb   )r/   rV   rJ   ra   s       r1   moment_generating_functionz5SingleDiscreteDistribution.moment_generating_functionv   s=    2215C
@6t66@@CCr4   c                     t        dd      }t        dd      }| j                  j                  }| j                  |      }t	        ||||ffi |}|||k  ff}t        |t        |       S )zG Compute the Quantile from the PDF.

        Returns a Lambda.
        rC   Tr`   pr_   )r   rH   rI   r-   r   r   r   )r/   rJ   rC   rh   rK   r-   rL   rH   s           r1   compute_quantilez+SingleDiscreteDistribution.compute_quantile}   so     #t$#D!XX\\
hhqkaQ/:6:18}aC))r4   c                      y r+   r8   rO   s     r1   	_quantilez$SingleDiscreteDistribution._quantile   rQ   r4   c                 `    |s| j                  |      }||S   | j                  di ||      S rS   )rk   ri   )r/   rC   rJ   quantiles       r1   rm   z#SingleDiscreteDistribution.quantile   s<    ~~a(H#.$t$$.v.q11r4   c           	         |r	 t        ||      }t        dd      }| j                  |      }|j                         }t        t	        ||d|dz         j                         |      }	d}
t        |dz         D ]:  }|
|j                  ||z        |	j                  ||z        z  t        |      z  z  }
< |
S t        || j                  |      z  || j                  j                  | j                  j                  ffi |S # t        $ rM t        || j                  |      z  || j                  j                  | j                  j                  ffi |cY S w xY w)z- Expectation of expression over distribution rV   Tr_   r      )r   r   rf   degreer   removeOrangecoeff_monomialr   r   r   r-   rH   rI   rU   r   )r/   exprvarevaluaterJ   rh   rV   ra   degtaylorresultks               r1   expectationz&SingleDiscreteDistribution.expectation   s[    NsO#D)55a8hhjfS!Qa8@@BAFs1u hAa..sax86;P;PQRVWQW;XX[def[gggFh  tdhhsm+txx||TXX\\:F>DF F # N !5"%txx||TXX\\!BNFLN NNs   B1D   AEEc                       | j                   | S r+   r,   r.   s     r1   r2   z#SingleDiscreteDistribution.__call__   r3   r4   N)T)r5   r6   r7   __doc__r   IntegersrH   r>   staticmethodrA   r   rM   rP   rL   rX   r[   r]   rb   rd   rf   ri   rk   rm   r{   r2   r8   r4   r1   r:   r:   $   s     **C)     -  A  D * *2F6r4   r:   c                       e Zd ZdZdZy)DiscreteDomainze
    A domain with discrete support with step size one.
    Represented using symbols and Range.
    TN)r5   r6   r7   r}   is_Discreter8   r4   r1   r   r      s     Kr4   r   c                       e Zd Zd Zy)SingleDiscreteDomainc                 B    t        | j                  | j                        S r+   )r%   symbolrH   r/   s    r1   
as_booleanzSingleDiscreteDomain.as_boolean   s    TXX..r4   Nr5   r6   r7   r   r8   r4   r1   r   r      s    /r4   r   c                        e Zd ZdZed        Zy)ConditionalDiscreteDomainzb
    Domain with discrete support of step size one, that is restricted by
    some condition.
    c                     | j                   }t        | j                         dkD  rt        t        d            t	        |      d   }t        | j                  |      j                  | j                  j                        S )Nro   zJ
                Multivariate conditional domains are not yet implemented.r   )
r   lenNotImplementedErrorr&   r<   r   	condition	intersect
fulldomainrH   )r/   rvs     r1   rH   zConditionalDiscreteDomain.set   sp    \\t||q %j 2M 'N O O"Xa[0	$//--.	/r4   N)r5   r6   r7   r}   propertyrH   r8   r4   r1   r   r      s     / /r4   r   c                   <    e Zd ZdZdZed        Zd Zd Zd Z	d Z
y)DiscretePSpaceTc                 4     | j                   | j                   S r+   )densityr   r   s    r1   r-   zDiscretePSpace.pdf   s    t||T\\**r4   c                 $    t        |      }t         fd|D              sJ t        |      dkD  rt        t	        d            t        ||d         }|j                   j                  j                        }t        |d   j                  |      S )Nc              3   N   K   | ]  }|j                   j                  v   y wr+   )r   r   ).0rr/   s     r1   	<genexpr>z'DiscretePSpace.where.<locals>.<genexpr>   s     9188t||+9s   "%ro   zIMultivariate discrete
            random variables are not yet supported.r   )r   allr   r   r&   r   r   domainrH   r   r   )r/   r   rvsconditional_domains   `   r1   wherezDiscretePSpace.where   s    Y'9S9999s8a<%j 27 '8 9 9>yF/99$++//J#CFMM3EFFr4   c                    t        |t              }|r&t        |j                  d   |j                  d         }	 | j	                  |      j
                  }|dk(  s|t        j                  u rt        j                  S |dk(  s|| j                  j
                  k(  rt        j                  S | j                  |      }|t3        |      }|s|S t        j                  |z
  S # t        $ r ddlm} |j                  |j                   z
  } ||      }t        |t"              sddlm}  ||      }t)        dd      }	t+        |	|      }
|
j-                  |j/                  |
j0                  d            }Y w xY w)	Nr   ro   FT)r   )DiscreteDistributionHandmaderE   r_   )
isinstancer
   r	   r0   r   rH   r   EmptySetZeror   One	eval_probr   sympy.stats.rvr   lhsrhsr)   sympy.stats.drv_typesr   r   SingleDiscretePSpaceprobability	__class__valuer!   )r/   r   
complement_domainprobr   rt   densr   rE   spaces              r1   r   zDiscretePSpace.probability   s;   	2.
9>>!,innQ.?@I	Jjj+//GE!W

%:vvD Gt{{$>uu>>'*D <y)D%t71554<7 # 		J.==9==0D4=Dd$89N3D9c%A(D1E$$Y%8%8a%HID		Js   AC <-C *C BE43E4c                    	 t         j                        d   }t        |t              rkt        dd      }d |j                  D        \  }}} j
                  j                  |||z        }t        ||||z  ||z  dz
  f      j                         }|S t        |t              r,t        | j
                        	t        	fd|D              }|S t        |t              r t         fd|j                  D              }|S y )	Nr   nTr`   c              3       K   | ]  }|  y wr+   r8   )r   r   s     r1   r   z+DiscretePSpace.eval_prob.<locals>.<genexpr>  s     6Aa6s   ro   c              3   .   K   | ]  } |        y wr+   r8   )r   rC   r-   s     r1   r   z+DiscretePSpace.eval_prob.<locals>.<genexpr>	  s     -SV-s   c              3   @   K   | ]  }j                  |        y wr+   )r   )r   rC   r/   s     r1   r   z+DiscretePSpace.eval_prob.<locals>.<genexpr>  s     =1T^^A&=s   )r<   r   r   r"   r0   r-   replacer   doitr#   r   sumr$   )
r/   r   symr   rI   rU   stepsummandr   r-   s
   `        @r1   r   zDiscretePSpace.eval_prob   s    4<< #gu%T*A66NCd))1T6G7CHsDj1n-//3tv I+dhh'C-W--BI'===BI (r4   c                 .   t        t        | j                        | j                  | j	                  |      z        }|j                  | j                  D ci c]  }||j                   c}      }t        | j                  |      }t        ||      S c c}w r+   )r   tupler   r-   r   xreplacevaluesr   r   r   r   )r/   r   r   r   r   s        r1   conditional_spacez DiscretePSpace.conditional_space  sw     t||,dhht7G7G	7R.RS&&'L"BII'LM	*4;;	Bfg.. (Ms   BN)r5   r6   r7   is_realr   r   r-   r   r   r   r   r8   r4   r1   r   r      s3    GK+ +	G82$/r4   r   c                       e Zd Zd Zy)ProductDiscreteDomainc                 `    t        | j                  D cg c]  }|j                   c} S c c}w r+   )r   domainsr   )r/   r   s     r1   r   z ProductDiscreteDomain.as_boolean  s%    T\\B6V&&BCCBs   +Nr   r8   r4   r1   r   r     s    Dr4   r   c                   b    e Zd ZdZdZed        Zed        ZddZddZ	d Z
d	 Zd
 Zd Zd Zy)r   z> Discrete probability space over a single univariate variable Tc                 .    | j                   j                  S r+   )distributionrH   r   s    r1   rH   zSingleDiscretePSpace.set  s      $$$r4   c                 B    t        | j                  | j                        S r+   )r   r   rH   r   s    r1   r   zSingleDiscretePSpace.domain#  s    #DKK::r4   Nc                 V    | j                   | j                  j                  |||      iS )zp
        Internal sample method.

        Returns dictionary mapping RandomSymbol to realization value.
        )libraryseed)r   r   sample)r/   sizer   r   s       r1   r   zSingleDiscretePSpace.sample'  s,     

D--44T7QU4VWWr4   c                    |xs | j                   f}| j                   |vr|S t        |      }|j                  |D ci c]  }||j                   c}      }| j                   j                  }	  | j                  j
                  ||fd|i|S c c}w # t        $ rH t        || j                  z  || j                  j                  | j                  j                  ffi |cY S w xY w)Nrv   )r   r'   r   r   r   r{   r   r   r-   rH   rI   rU   )r/   rt   r   rv   rJ   r   rC   s          r1   compute_expectationz(SingleDiscretePSpace.compute_expectation/  s    "djj]::S K~}}c:b"))m:;JJ	04$$00q 8  	 ; # 	tdhhDHHLL$((,,(G  	s   B.B AC$#C$c                     || j                   k(  r4t        dd      }t        | | j                  j                  |fi |      S t               )NrC   Tr_   )r   r   r   r   rL   r   )r/   rt   rJ   rC   s       r1   rM   z SingleDiscretePSpace.compute_cdf?  sI    4::c%A!2T..221??@@%''r4   c                 L    || j                   k(  r| j                  S t               r+   )r   r   r   )r/   rt   rJ   s      r1   compute_densityz$SingleDiscretePSpace.compute_densityF  s#    4::$$$!##r4   c                     || j                   k(  r4t        dd      }t        | | j                  j                  |fi |      S t               NrV   Tr_   )r   r   r   r   r]   r   r/   rt   rJ   rV   s       r1   rX   z4SingleDiscretePSpace.compute_characteristic_functionK  sI    4::c%A!FT..FFqSFSTT%''r4   c                     || j                   k(  r4t        dd      }t        | | j                  j                  |fi |      S t               r   )r   r   r   r   rf   r   r   s       r1   rb   z7SingleDiscretePSpace.compute_moment_generating_functionR  sI    4::c%A!IT..II!VvVWW%''r4   c                     || j                   k(  r4t        dd      }t        | | j                  j                  |fi |      S t               )Nrh   Tr_   )r   r   r   r   rm   r   )r/   rt   rJ   rh   s       r1   ri   z%SingleDiscretePSpace.compute_quantileY  sI    4::c%A!7T..77DVDEE%''r4   )r8   scipyN)NT)r5   r6   r7   r}   r   r   rH   r   r   r   rM   r   rX   rb   ri   r8   r4   r1   r   r     sT    HG% % ; ;X ($
(((r4   r   N)Esympy.concrete.summationsr   r   sympy.core.basicr   sympy.core.cacher   sympy.core.functionr   sympy.core.numbersr   sympy.core.relationalr	   r
   sympy.core.singletonr   sympy.core.symbolr   r   sympy.core.sympifyr   (sympy.functions.combinatorial.factorialsr   &sympy.functions.elementary.exponentialr   #sympy.functions.elementary.integersr   $sympy.functions.elementary.piecewiser   sympy.logic.boolalgr   sympy.polys.polytoolsr   sympy.series.seriesr   sympy.polys.polyerrorsr   sympy.stats.crvr   r   r   r   r   r   r   r   r   r   r     sympy.stats.symbolic_probabilityr!   sympy.sets.fancysetsr"   r#   sympy.sets.setsr$   sympy.sets.containsr%   sympy.utilitiesr&   r'   r)   r:   r   r   r   r   r   r   r8   r4   r1   <module>r      s    6 " $ &   * " . & > 6 5 : # & & 2 =9 9 9 9 1 ! ( & '< 
N!5~ Nb\ />< /
/0A / D/V D/LDM> DC(>< C(r4   