
    \h.                        S SK JrJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJrJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SK!J"r"  S SK#J$r$  S SK%J&r&  S SK'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0  S SK1J2r2  S SK3J4r4J5r5  S SK6J7r7  S SK8J9r9  S SK:J;r;  S SKJ<r<   " S S\05      r= " S S\=\(5      r> " S S\.5      r? " S  S!\?\*5      r@ " S" S#\?\-5      rA " S$ S%\,5      rB " S& S'\/\?5      rC " S( S)\B\)5      rDg*)+    )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                       \ rS rSrS rSrg)DiscreteDistribution   c                      U R                   " U6 $ Npdfselfargss     G/var/www/auris/envauris/lib/python3.13/site-packages/sympy/stats/drv.py__call__DiscreteDistribution.__call__        xx     N)__name__
__module____qualname____firstlineno__r3   __static_attributes__r7   r6   r2   r)   r)      s    r6   r)   c                       \ rS rSrSr\R                  rS r\	S 5       r
\S 5       rS rS r\S 5       rS	 rS
 r\S 5       rS rS r\S 5       rS rS rSS jrS rSrg)SingleDiscreteDistribution$   zDiscrete 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                 b    [        [        [        U5      5      n[        R                  " U /UQ76 $ r,   )listmapr   r   __new__)clsr1   s     r2   rC   "SingleDiscreteDistribution.__new__1   s'    C&'}}S(4((r6   c                      g r,   r7   )r1   s    r2   check SingleDiscreteDistribution.check5   s    r6   c                     [        SS[        S9n[        SS[        S9nU R                  R                  nU R	                  U5      n[        XRU[        U5      440 UD6n[        XcU:  4S5      n[        X65      $ )z1Compute the CDF from the PDF.

Returns a Lambda.
xT)integerrD   zrealrD   )r   T)	r   r   setinfr.   r   r   r   r   )r0   kwargsrJ   rL   
left_boundr.   cdfs          r2   compute_cdf&SingleDiscreteDistribution.compute_cdf9   ss     C51Cd.XX\\
 hhqkU1X6A&A:o.	:a~r6   c                     g r,   r7   r0   rJ   s     r2   _cdfSingleDiscreteDistribution._cdfJ       r6   c                 l    U(       d  U R                  U5      nUb  U$ U R                  " S0 UD6" U5      $ zCumulative density function r7   )rX   rT   )r0   rJ   rQ   rS   s       r2   rS   SingleDiscreteDistribution.cdfM   s5    ))A,C
)&)!,,r6   c                     [        SS[        S9u  p#U R                  U5      n[        [	        [
        U-  U-  5      U-  X R                  R                  U R                  R                  45      n[        X55      $ )zECompute the characteristic function from the PDF.

Returns a Lambda.
zx, tTrM   )
r   r   r.   r   r   r   rO   rP   supr   )r0   rQ   rJ   tr.   cfs         r2   compute_characteristic_function:SingleDiscreteDistribution.compute_characteristic_functionU   s\     vDe4hhqks1Q3q5z#~88<<'FGa}r6   c                     g r,   r7   r0   r`   s     r2   _characteristic_function3SingleDiscreteDistribution._characteristic_function`   rZ   r6   c                 l    U(       d  U R                  U5      nUb  U$ U R                  " S0 UD6" U5      $ )zCharacteristic function r7   )rf   rb   )r0   r`   rQ   ra   s       r2   characteristic_function2SingleDiscreteDistribution.characteristic_functionc   s8    ..q1B~	33=f=a@@r6   c                     [        SSS9n[        SSS9nU R                  U5      n[        [        X#-  5      U-  X0R                  R
                  U R                  R                  45      n[        X%5      $ )Nr`   TrN   rJ   rK   )r   r.   r   r   rO   rP   r_   r   )r0   rQ   r`   rJ   r.   mgfs         r2   "compute_moment_generating_function=SingleDiscreteDistribution.compute_moment_generating_functionk   s\    #D!#t$hhqkACq((,,&EFa~r6   c                     g r,   r7   re   s     r2   _moment_generating_function6SingleDiscreteDistribution._moment_generating_functions   rZ   r6   c                 l    U(       d  U R                  U5      nUb  U$ U R                  " S0 UD6" U5      $ )Nr7   )rr   ro   )r0   r`   rQ   rn   s       r2   moment_generating_function5SingleDiscreteDistribution.moment_generating_functionv   s8    2215C
66@@CCr6   c                     [        SSS9n[        SSS9nU R                  R                  nU R                  U5      n[	        XRXB440 UD6nX#U:*  44n[        U[        U6 5      $ )z6Compute the Quantile from the PDF.

Returns a Lambda.
rJ   Trm   prl   )r   rO   rP   r.   r   r   r   )r0   rQ   rJ   rx   rR   r.   rS   rO   s           r2   compute_quantile+SingleDiscreteDistribution.compute_quantile}   si     #t$#D!XX\\
hhqk/:6:8}aC))r6   c                     g r,   r7   rW   s     r2   	_quantile$SingleDiscreteDistribution._quantile   rZ   r6   c                 l    U(       d  U R                  U5      nUb  U$ U R                  " S0 UD6" U5      $ r\   )r|   ry   )r0   rJ   rQ   quantiles       r2   r   #SingleDiscreteDistribution.quantile   s7    ~~a(H#$$.v.q11r6   c           	         U(       a   [        X5      n[        SSS9nU R                  U5      nUR                  5       n[        [	        XvSUS-   5      R                  5       U5      n	Sn
[        US-   5       H8  nXR                  X+-  5      U	R                  Xk-  5      -  [        U5      -  -  n
M:     U
$ [        XR                  U5      -  X R                  R                  U R                  R                  440 UD6$ ! [         aK    [        XR                  U5      -  X R                  R                  U R                  R                  440 UD6s $ f = f)z,Expectation of expression over distribution r`   Trl   r      )r   r   ru   degreer   removeOrangecoeff_monomialr   r   r   r.   rO   rP   r_   r   )r0   exprvarevaluaterQ   rx   r`   rn   degtaylorresultks               r2   expectation&SingleDiscreteDistribution.expectation   sA    NO#D)55a8hhjfSQa8@@BAFs1uA..sx86;P;PQRQW;XX[def[gggF &  thhsm+xx||TXX\\:F>DF F # N !5"%xx||TXX\\!BNFLN NNs   B+C= =AEEc                      U R                   " U6 $ r,   r-   r/   s     r2   r3   #SingleDiscreteDistribution.__call__   r5   r6   r7   N)T)r8   r9   r:   r;   __doc__r   IntegersrO   rC   staticmethodrG   r   rT   rX   rS   rb   rf   ri   ro   rr   ru   ry   r|   r   r   r3   r<   r7   r6   r2   r>   r>   $   s     **C)     -  A  D * *2F6r6   r>   c                       \ rS rSrSrSrSrg)DiscreteDomain   zY
A domain with discrete support with step size one.
Represented using symbols and Range.
Tr7   N)r8   r9   r:   r;   r   is_Discreter<   r7   r6   r2   r   r      s     Kr6   r   c                       \ rS rSrS rSrg)SingleDiscreteDomain   c                 B    [        U R                  U R                  5      $ r,   )r%   symbolrO   r0   s    r2   
as_booleanSingleDiscreteDomain.as_boolean   s    TXX..r6   r7   Nr8   r9   r:   r;   r   r<   r7   r6   r2   r   r      s    /r6   r   c                   (    \ rS rSrSr\S 5       rSrg)ConditionalDiscreteDomain   zV
Domain with discrete support of step size one, that is restricted by
some condition.
c                    U R                   n[        U R                   5      S:  a  [        [        S5      5      e[	        U5      S   n[        U R                  U5      R                  U R                  R                  5      $ )Nr   zJ
                Multivariate conditional domains are not yet implemented.r   )
r   lenNotImplementedErrorr&   rA   r   	condition	intersect
fulldomainrO   )r0   rvs     r2   rO   ConditionalDiscreteDomain.set   sp    \\t||q %j 2M 'N O O"Xa[0	$//--.	/r6   r7   N)r8   r9   r:   r;   r   propertyrO   r<   r7   r6   r2   r   r      s     / /r6   r   c                   D    \ rS rSrSrSr\S 5       rS rS r	S r
S rSrg	)
DiscretePSpace   Tc                 4    U R                   " U R                  6 $ r,   )densityr   r   s    r2   r.   DiscretePSpace.pdf   s    ||T\\**r6   c                 2  ^  [        U5      n[        U 4S jU 5       5      (       d   e[        U5      S:  a  [        [	        S5      5      e[        UUS   5      nUR                  T R                  R                  5      n[        US   R                  U5      $ )Nc              3   T   >#    U  H  oR                   TR                  ;   v   M     g 7fr,   )r   r   ).0rr0   s     r2   	<genexpr>'DiscretePSpace.where.<locals>.<genexpr>   s     9S88t||+Ss   %(r   zIMultivariate discrete
            random variables are not yet supported.r   )r   allr   r   r&   r   r   domainrO   r   r   )r0   r   rvsconditional_domains   `   r2   whereDiscretePSpace.where   s    Y'9S99999s8a<%j 27 '8 9 9>yF/99$++//J#CFMM3EFFr6   c                    [        U[        5      nU(       a&  [        UR                  S   UR                  S   5      n U R	                  U5      R
                  nUS:X  d  U[        R                  L a  [        R                  $ US:X  d  X0R                  R
                  :X  a  [        R                  $ U R                  U5      nUc  [3        U5      nU(       d  U$ [        R                  U-
  $ ! [         a    SSKJn  UR                  UR                   -
  nU" U5      n[        U["        5      (       d  SSKJn  U" U5      n[)        SSS9n	[+        X5      n
U
R-                  UR/                  U
R0                  S5      5      n Nf = f)	Nr   r   FT)r   )DiscreteDistributionHandmaderL   rl   )
isinstancer
   r	   r1   r   rO   r   EmptySetZeror   One	eval_probr   sympy.stats.rvr   lhsrhsr)   sympy.stats.drv_typesr   r   SingleDiscretePSpaceprobability	__class__valuer!   )r0   r   
complement_domainprobr   r   densr   rL   spaces              r2   r   DiscretePSpace.probability   s:   	2.
9>>!,innQ.?@I	Jjj+//GE!W

%:vvD G{{$>uu>>'*D <y)D%t71554<7 # 		J.==9==0D4=Dd$899N3D9c%A(1E$$Y%8%8a%HID		Js   AC- .C- 2C- -BFFc                   ^ ^	 [        T R                  5      S   n[        U[        5      (       ad  [        SSS9nS UR                   5       u  pEnT R
                  R                  X#U-  5      n[        UX4U-  XV-  S-
  45      R                  5       nU$ [        U[        5      (       a-  [        UT R
                  5      m	[        U	4S jU 5       5      nU$ [        U[        5      (       a!  [        U 4S jUR                   5       5      nU$ g )	Nr   nTrm   c              3   $   #    U  H  ov   M     g 7fr,   r7   )r   r   s     r2   r   +DiscretePSpace.eval_prob.<locals>.<genexpr>  s     6Aas   r   c              3   4   >#    U  H  nT" U5      v   M     g 7fr,   r7   )r   rJ   r.   s     r2   r   r   	  s     -WSVVWs   c              3   F   >#    U  H  nTR                  U5      v   M     g 7fr,   )r   )r   rJ   r0   s     r2   r   r     s     =1T^^A&&s   !)rA   r   r   r"   r1   r.   replacer   doitr#   r   sumr$   )
r0   r   symr   rP   r_   stepsummandr   r.   s
   `        @r2   r   DiscretePSpace.eval_prob   s    4<< #gu%%T*A66NCd))T6G7Hsj1n-//3tv I++dhh'C-W--BI''===BI (r6   c                 0   [        [        U R                  5      U R                  U R	                  U5      -  5      nUR                  U R                   Vs0 s H  o3UR                  _M     sn5      n[        U R                  U5      n[        XB5      $ s  snf r,   )r   tupler   r.   r   xreplacevaluesr   r   r   r   )r0   r   r   r   r   s        r2   conditional_space DiscretePSpace.conditional_space  sw     t||,dhht7G7G	7R.RS&&'L"BII'LM	*4;;	Bf.. (Ms   Br7   N)r8   r9   r:   r;   is_realr   r   r.   r   r   r   r   r<   r7   r6   r2   r   r      s3    GK+ +	G82$/r6   r   c                       \ rS rSrS rSrg)ProductDiscreteDomaini  c                 d    [        U R                   Vs/ s H  oR                  PM     sn6 $ s  snf r,   )r   domainsr   )r0   r   s     r2   r    ProductDiscreteDomain.as_boolean  s'    T\\B\6&&\BCCBs   -r7   Nr   r7   r6   r2   r   r     s    Dr6   r   c                   n    \ rS rSrSrSr\S 5       r\S 5       rSS jr	SS	 jr
S
 rS rS rS rS rSrg)r   i  z=Discrete probability space over a single univariate variable Tc                 .    U R                   R                  $ r,   )distributionrO   r   s    r2   rO   SingleDiscretePSpace.set  s      $$$r6   c                 B    [        U R                  U R                  5      $ r,   )r   r   rO   r   s    r2   r   SingleDiscretePSpace.domain#  s    #DKK::r6   r7   Nc                 N    U R                   U R                  R                  XUS90$ )zX
Internal sample method.

Returns dictionary mapping RandomSymbol to realization value.
)libraryseed)r   r   sample)r0   sizer   r   s       r2   r   SingleDiscretePSpace.sample'  s*     

D--44TQU4VWWr6   c                    U=(       d    U R                   4nU R                   U;  a  U$ [        U5      nUR                  U Vs0 s H  oUUR                  _M     sn5      nU R                   R                  n U R                  R
                  " X4SU0UD6$ s  snf ! [         aF    [        XR                  -  X`R                  R                  U R                  R                  440 UD6s $ f = f)Nr   )r   r'   r   r   r   r   r   r   r.   rO   rP   r_   )r0   r   r   r   rQ   r   rJ   s          r2   compute_expectation(SingleDiscretePSpace.compute_expectation/  s    "djj]::S K~}}c:c"))mc:;JJ	$$00 8  	 ; # 	thhHHLL$((,,(G  	s   B7B AC+*C+c                     XR                   :X  a0  [        SSS9n[        X0R                  R                  " U40 UD65      $ [        5       e)NrJ   Trl   )r   r   r   r   rS   r   )r0   r   rQ   rJ   s       r2   rT    SingleDiscretePSpace.compute_cdf?  sB    ::c%A!..221??@@%''r6   c                 L    XR                   :X  a  U R                  $ [        5       er,   )r   r   r   )r0   r   rQ   s      r2   compute_density$SingleDiscretePSpace.compute_densityF  s!    ::$$$!##r6   c                     XR                   :X  a0  [        SSS9n[        X0R                  R                  " U40 UD65      $ [        5       eNr`   Trl   )r   r   r   r   ri   r   r0   r   rQ   r`   s       r2   rb   4SingleDiscretePSpace.compute_characteristic_functionK  sB    ::c%A!..FFqSFSTT%''r6   c                     XR                   :X  a0  [        SSS9n[        X0R                  R                  " U40 UD65      $ [        5       er  )r   r   r   r   ru   r   r  s       r2   ro   7SingleDiscretePSpace.compute_moment_generating_functionR  sB    ::c%A!..II!VvVWW%''r6   c                     XR                   :X  a0  [        SSS9n[        X0R                  R                  " U40 UD65      $ [        5       e)Nrx   Trl   )r   r   r   r   r   r   )r0   r   rQ   rx   s       r2   ry   %SingleDiscretePSpace.compute_quantileY  sB    ::c%A!..77DVDEE%''r6   )r7   scipyN)NT)r8   r9   r:   r;   r   r   r   rO   r   r   r   rT   r   rb   ro   ry   r<   r7   r6   r2   r   r     sT    HG% % ; ;X ($
(((r6   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   r7   r6   r2   <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(r6   