o
    oh$R                     @   s  d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
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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#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/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> G dd de5Z?G dd de?e6Z@G dd de9e?ZAG dd de?e7ZBG dd  d e>ZCG d!d" d"eCe=ZDG d#d$ d$e:ZEG d%d& d&eEe;ZFd'd( ZGd)d* ZHd+S ),zl
Continuous Random Variables Module

See Also
========
sympy.stats.crv_types
sympy.stats.rv
sympy.stats.frv
    )Basic)cacheit)Lambda	PoleError)Inanoo)EqNe)S)Dummysymbols)_sympifysympify)	factorial)exp)	Piecewise)
DiracDelta)Integral	integrate)AndOr)PolynomialError)poly)series)	FiniteSetIntersectionIntervalUnion)solveset)reduce_rational_inequalities)
RandomDomainSingleDomainConditionalDomain	is_randomProductDomainPSpaceSinglePSpacerandom_symbolsNamedArgsMixinDistributionc                   @   s   e Zd ZdZdZdd ZdS )ContinuousDomainzX
    A domain with continuous support

    Represented using symbols and Intervals.
    Tc                 C   s   t d)Nz#Not Implemented for generic Domains)NotImplementedErrorself r/   c/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/stats/crv.py
as_boolean,   s   zContinuousDomain.as_booleanN)__name__
__module____qualname____doc__is_Continuousr1   r/   r/   r/   r0   r+   $   s    r+   c                   @   "   e Zd ZdZdddZdd ZdS )SingleContinuousDomainzj
    A univariate domain with continuous support

    Represented using a single symbol and interval.
    Nc                 K   sJ   |d u r| j }|s|S t|t| j krtdt|| j| jffi |S )NzValues should be equal)r   	frozenset
ValueErrorr   symbolset)r.   expr	variableskwargsr/   r/   r0   compute_expectation6   s   z*SingleContinuousDomain.compute_expectationc                 C   s   | j | jS N)r<   as_relationalr;   r-   r/   r/   r0   r1   @   s   z!SingleContinuousDomain.as_booleanrA   r2   r3   r4   r5   r@   r1   r/   r/   r/   r0   r8   0   s    

r8   c                   @   r7   )ProductContinuousDomainzE
    A collection of independent domains with continuous support
    Nc                 K   sH   |d u r| j }| jD ]}t|t|j @ }|r!|j||fi |}q
|S rA   )r   domainsr9   r@   )r.   r=   r>   r?   domaindomain_varsr/   r/   r0   r@   I   s   
z+ProductContinuousDomain.compute_expectationc                 C   s   t dd | jD  S )Nc                 S   s   g | ]}|  qS r/   )r1   ).0rF   r/   r/   r0   
<listcomp>S       z6ProductContinuousDomain.as_boolean.<locals>.<listcomp>)r   rE   r-   r/   r/   r0   r1   R   s   z"ProductContinuousDomain.as_booleanrA   rC   r/   r/   r/   r0   rD   D   s    
	rD   c                   @   s.   e Zd ZdZd	ddZdd Zedd ZdS )
ConditionalContinuousDomainzo
    A domain with continuous support that has been further restricted by a
    condition such as $x > 3$.
    Nc                 K   sH  |d u r| j }|s|S | j||}|jt|j}}| jg}|r| }|jr>t	|t
r4||j nct	|tr=tdnY|jr|jrO|t|j|j 9 }nH|jt| j @ }	t|	dkratd|	 }
t|D ]&\}}|d |
krt||
}t|d |d }||}|
|j|jf||< qintd| |s!t|g|R i |S )NzOr not implemented here   z-Multivariate Inequalities not yet implementedr      z+Condition %s is not a relational or Boolean)r   
fulldomainr@   functionlistlimits	conditionpop
is_Boolean
isinstancer   extendargsr   r,   is_Relationalis_Equalityr   lhsrhsfree_symbolsr<   len	enumerate!reduce_rational_inequalities_wrapr   	intersectleftright	TypeErrorr   )r.   r=   r>   r?   
fullintgrl	integrandrQ   
conditionscondr   r;   ilimitcintvllintvlintvlr/   r/   r0   r@   \   sN   


"z/ConditionalContinuousDomain.compute_expectationc                 C   s   t | j | jS rA   )r   rN   r1   rR   r-   r/   r/   r0   r1      s   z&ConditionalContinuousDomain.as_booleanc                 C   s4   t | jdkr| jjt| jt| jd @ S td)NrL   r   z)Set of Conditional Domain not Implemented)r]   r   rN   r<   r_   rR   tupler,   r-   r/   r/   r0   r<      s   zConditionalContinuousDomain.setrA   )r2   r3   r4   r5   r@   r1   propertyr<   r/   r/   r/   r0   rK   V   s    
/rK   c                   @   s   e Zd Zdd ZdS )ContinuousDistributionc                 G   s
   | j | S rA   )pdf)r.   rW   r/   r/   r0   __call__   s   
zContinuousDistribution.__call__N)r2   r3   r4   rq   r/   r/   r/   r0   ro      s    ro   c                   @   s   e Zd ZdZee eZdd Zedd Z	e
dd Zdd	 Zd
d Ze
dd Zdd Zdd Ze
dd Zdd Zdd Zd"ddZe
dd Zdd Zdd  Zd!S )#SingleContinuousDistributiona   Continuous distribution of a single variable.

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

    Serves as superclass for Normal/Exponential/UniformDistribution etc....

    Represented by parameters for each of the specific classes.  E.g
    NormalDistribution is represented by a mean and standard deviation.

    Provides methods for pdf, cdf, and sampling.

    See Also
    ========

    sympy.stats.crv_types.*
    c                 G   s    t tt|}tj| g|R  S rA   )rP   mapr   r   __new__)clsrW   r/   r/   r0   rt      s   z$SingleContinuousDistribution.__new__c                  G      d S rA   r/   )rW   r/   r/   r0   check   s   z"SingleContinuousDistribution.checkc                 K   s\   t ddtd\}}| jj}| |}t| |||ffi |}t|||kfd}t||S )zB Compute the CDF from the PDF.

        Returns a Lambda.
        x, zTrealru   r   T)	r   r   r<   startrp   r   doitr   r   )r.   r?   xz
left_boundrp   cdfr/   r/   r0   compute_cdf   s   

z(SingleContinuousDistribution.compute_cdfc                 C   rv   rA   r/   r.   r~   r/   r/   r0   _cdf      z!SingleContinuousDistribution._cdfc                 K   6   t |dkr| |}|dur|S | jdi ||S z Cumulative density function r   Nr/   )r]   r   r   )r.   r~   r?   r   r/   r/   r0   r      
   
z SingleContinuousDistribution.cdfc                 K   sF   t ddtd\}}| |}ttt| | | || jf}t||S )zV Compute the characteristic function from the PDF.

        Returns a Lambda.
        x, tTry   )r   r   rp   r   r   r   r<   r   )r.   r?   r~   trp   cfr/   r/   r0   compute_characteristic_function   s   
 
z<SingleContinuousDistribution.compute_characteristic_functionc                 C   rv   rA   r/   r.   r   r/   r/   r0   _characteristic_function   r   z5SingleContinuousDistribution._characteristic_functionc                 K   r   )z Characteristic function r   Nr/   )r]   r   r   )r.   r   r?   r   r/   r/   r0   characteristic_function   r   z4SingleContinuousDistribution.characteristic_functionc                 K   sB   t ddtd\}}| |}tt|| | || jf}t||S )zY Compute the moment generating function from the PDF.

        Returns a Lambda.
        r   Try   )r   r   rp   r   r   r<   r   )r.   r?   r~   r   rp   mgfr/   r/   r0   "compute_moment_generating_function   s   

z?SingleContinuousDistribution.compute_moment_generating_functionc                 C   rv   rA   r/   r   r/   r/   r0   _moment_generating_function   r   z8SingleContinuousDistribution._moment_generating_functionc                 K   s.   |s|  |}|dur|S | jdi ||S )z Moment generating function Nr/   )r   r   )r.   r   r?   r   r/   r/   r0   moment_generating_function   s
   
z7SingleContinuousDistribution.moment_generating_functionTc                 K   s  |r~zat ||}|jrtjW S tddd}| |}|du r0t|| | || jffi |W S |	 }t t
||d|d  |}	d}
t|d D ]}|
||| |	||  t| 7 }
qJ|
W S  ty}   t|| | || jffi | Y S w t|| | || jffi |S )z- Expectation of expression over distribution r   Trz   Nr   rL   )r   is_zeror   Zeror   r   r   rp   r<   degreer   removeOrangecoeff_monomialr   r   r   )r.   r=   varevaluater?   pr   r   degtaylorresultkr/   r/   r0   expectation  s&   

$*&"z(SingleContinuousDistribution.expectationc                 K   sr   t ddtd\}}| jj}| |}t||||ffi |}t|| || j}t|t||dk|dk@ ft	dfS )zG Compute the Quantile from the PDF.

        Returns a Lambda.
        zx, pTry   r   rL   )
r   r   r<   r|   rp   r   r   r   r   r   )r.   r?   r~   r   r   rp   r   quantiler/   r/   r0   compute_quantile  s   
$z-SingleContinuousDistribution.compute_quantilec                 C   rv   rA   r/   r   r/   r/   r0   	_quantile%  r   z&SingleContinuousDistribution._quantilec                 K   r   r   )r]   r   r   )r.   r~   r?   r   r/   r/   r0   r   (  r   z%SingleContinuousDistribution.quantileNT)r2   r3   r4   r5   r   r   r<   rt   staticmethodrw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   rr      s.    







rr   c                   @   s   e Zd ZdZdZdZedd ZdddZd	d
 Z	e
dd Ze
dd Ze
dd Ze
dd Zdd Zdd ZdddZdS )ContinuousPSpacez Continuous Probability Space

    Represents the likelihood of an event space defined over a continuum.

    Represented with a ContinuousDomain and a PDF (Lambda-Like)
    Tc                 C   s   | j | jj S rA   )densityrF   r   r-   r/   r/   r0   rp   <  s   zContinuousPSpace.pdfNFc                 K   sZ   |d u r| j }nt|}|dd |D }tdd |D }| jj| j| |fi |S )Nc                 S      i | ]}||j qS r/   r;   rH   rvr/   r/   r0   
<dictcomp>F  rJ   z8ContinuousPSpace.compute_expectation.<locals>.<dictcomp>c                 s       | ]}|j V  qd S rA   r   r   r/   r/   r0   	<genexpr>H      z7ContinuousPSpace.compute_expectation.<locals>.<genexpr>)valuesr9   xreplacerF   r@   rp   )r.   r=   rvsr   r?   domain_symbolsr/   r/   r0   r@   @  s   z$ContinuousPSpace.compute_expectationc                 K   s   || j v r,tt| j t|g }tdd |D }| jj| j|fi |}t|j|S t	ddd}t|| jt
|| fi |S )Nc                 s   r   rA   r   )rH   rsr/   r/   r0   r   R  r   z3ContinuousPSpace.compute_density.<locals>.<genexpr>r   Tr   )r   rm   r<   r9   rF   r@   rp   r   r;   r   r   )r.   r=   r?   randomsymbolsr   rp   r   r/   r/   r0   compute_densityM  s   
 z ContinuousPSpace.compute_densityc                 K   sx   | j jjs	td| j|fi |}tddtd\}}| j jj}t|||||ffi |}t	|||kfd}t
||S )Nz0CDF not well defined on multivariate expressionsrx   Try   r{   )rF   r<   is_Intervalr:   r   r   r   r|   r   r   r   )r.   r=   r?   dr~   r   r   r   r/   r/   r0   r   Y  s   


zContinuousPSpace.compute_cdfc                 K   sn   | j jjs	td| j|fi |}tddtd\}}ttt	| | || |t
 t
ffi |}t||S )NzCCharacteristic function of multivariate expressions not implementedr   Try   )rF   r<   r   r,   r   r   r   r   r   r   r   r   )r.   r=   r?   r   r~   r   r   r/   r/   r0   r   i  s   
.
z0ContinuousPSpace.compute_characteristic_functionc                 K   sj   | j jjs	td| j|fi |}tddtd\}}tt|| || |t	 t	ffi |}t
||S )NzFMoment generating function of multivariate expressions not implementedr   Try   )rF   r<   r   r,   r   r   r   r   r   r   r   )r.   r=   r?   r   r~   r   r   r/   r/   r0   r   s  s   
*
z3ContinuousPSpace.compute_moment_generating_functionc                 K   s\   | j jjs	td| j|fi |}tddd}tddd}t||| || j}t||S )Nz5Quantile not well defined on multivariate expressionsr~   Tr   r   )positive)rF   r<   r   r:   r   r   r   r   )r.   r=   r?   r   r~   r   r   r/   r/   r0   r   }  s   

z!ContinuousPSpace.compute_quantilec              	      s  t dddd}t|trt|jd |jd }d}zU| |  fdd| jD d }| j|fi  jt	j
u sAt jtrK|sGt	jW S t	jW S t jtratfd	d
 jjD W S t jffi W S  ty   ddlm} |j|j }t|s| j}|j}n
||fi }d}t|tsddlm}	 |	|| jjd}t|}
|
||
j|}|s| Y S t	j|  Y S w )Nr   Tr   Fr   rL   c                    s   g | ]
}|j  j kr|qS r/   r   r   )rF   r/   r0   rI     s    z0ContinuousPSpace.probability.<locals>.<listcomp>c                 3   s4    | ]}t |trt|ffi  V  qd S rA   )rU   r   r   )rH   subset)r?   rp   r   r/   r0   r     s    
z/ContinuousPSpace.probability.<locals>.<genexpr>)r   )ContinuousDistributionHandmade)r<   )r   rU   r
   r	   rW   wherer   r   r<   r   EmptySetr   r   Oner   sumr   r,   sympy.stats.rvr   rZ   r[   r$   ro   sympy.stats.crv_typesr   rF   SingleContinuousPSpaceprobability	__class__value)r.   rR   r?   cond_invr   r   r=   denscompr   spacer   r/   )rF   r?   rp   r   r0   r     s>   




zContinuousPSpace.probabilityc                 C   s\   t t|}t|dkr|| jstdt|d }t||}|| j	j
}t|j|S )NrL   z2Multiple continuous random variables not supportedr   )r9   r(   r]   issubsetr   r,   rm   r_   r`   rF   r<   r8   r;   )r.   rR   r   r   intervalr/   r/   r0   r     s   
zContinuousPSpace.wherec           	      K   st   | dd | jD }t| j|}|r5dd | jD }|j| jfi |}| j| | }tt|j|}t	||S )Nc                 S   r   r/   r   r   r/   r/   r0   r     rJ   z6ContinuousPSpace.conditional_space.<locals>.<dictcomp>c                 S   s   i | ]	}|t t|qS r/   )r   strr   r/   r/   r0   r     s    )
r   r   rK   rF   r   r@   rp   r   rm   r   )	r.   rR   	normalizer?   rF   replacementnormrp   r   r/   r/   r0   conditional_space  s   
z"ContinuousPSpace.conditional_spaceNFr   )r2   r3   r4   r5   r6   is_realrn   rp   r@   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   r   1  s&    



	
	
)
r   c                   @   sd   e Zd ZdZedd Zedd Zdd	d
ZdddZdd Z	dd Z
dd Zdd Zdd ZdS )r   a  
    A continuous probability space over a single univariate variable.

    These consist of a Symbol and a SingleContinuousDistribution

    This class is normally accessed through the various random variable
    functions, Normal, Exponential, Uniform, etc....
    c                 C   s   | j jS rA   )distributionr<   r-   r/   r/   r0   r<     s   zSingleContinuousPSpace.setc                 C   s   t t| j| jS rA   )r8   r   r;   r<   r-   r/   r/   r0   rF     s   zSingleContinuousPSpace.domainr/   scipyNc                 C   s   | j | jj|||diS )zp
        Internal sample method.

        Returns dictionary mapping RandomSymbol to realization value.
        )libraryseed)r   r   sample)r.   sizer   r   r/   r/   r0   r     s   zSingleContinuousPSpace.sampleFc                 K   s   |p| j f}| j |vr|S t|}|dd |D }| j j}z| jj||fd|i|W S  tyE   t|| j || j	ffi | Y S w )Nc                 S   r   r/   r   r   r/   r/   r0   r     rJ   z>SingleContinuousPSpace.compute_expectation.<locals>.<dictcomp>r   )
r   r   r   r;   r   r   r   r   rp   r<   )r.   r=   r   r   r?   r~   r/   r/   r0   r@     s   
"z*SingleContinuousPSpace.compute_expectationc                 K   D   || j krtddd}t|| jj|fi |S tj| |fi |S )Nr   Tr   )r   r   r   r   r   r   r   )r.   r=   r?   r   r/   r/   r0   r        
z"SingleContinuousPSpace.compute_cdfc                 K   r   Nr   Tr   )r   r   r   r   r   r   r   r.   r=   r?   r   r/   r/   r0   r      r   z6SingleContinuousPSpace.compute_characteristic_functionc                 K   r   r   )r   r   r   r   r   r   r   r   r/   r/   r0   r     r   z9SingleContinuousPSpace.compute_moment_generating_functionc                    s   || j kr| jS tdddt| | j tj}t|tr1t|j	dkr1|j	d tju r1|j	d }|j
s=td|| j f | | j  t fdd	|D }t|S )
NyTr   rM   r   rL   zCan not solve %s for %sc                 3   s&    | ]} |t | V  qd S rA   )absdiff)rH   gfxr   r/   r0   r     s   $ z9SingleContinuousPSpace.compute_density.<locals>.<genexpr>)r   r   r   r   r   RealsrU   r   r]   rW   is_FiniteSetr:   r   r   r   )r.   r=   r?   gsfyr/   r   r0   r     s   



z&SingleContinuousPSpace.compute_densityc                 K   r   )Nr   Tr   )r   r   r   r   r   r   r   )r.   r=   r?   r   r/   r/   r0   r     s   
z'SingleContinuousPSpace.compute_quantile)r/   r   Nr   )r2   r3   r4   r5   rn   r<   rF   r   r@   r   r   r   r   r   r/   r/   r/   r0   r     s    	



r   c                 K   s4   z
t | |fi |W S  ty   td| d  w )Nz!Reduction of condition failed %s
r   )r    r   r:   )rf   r   r?   r/   r/   r0   _reduce_inequalities'  s
   r   c                    s|   | j rt| gg ddS t| trt fdd| jD  S t| tr< fdd| jD }|d }|D ]}||}q2|S d S )NF
relationalc                       g | ]}t |gg d dqS Fr   r   rH   argr   r/   r0   rI   2      z5reduce_rational_inequalities_wrap.<locals>.<listcomp>c                    r   r   r   r   r   r/   r0   rI   5  r   r   )rX   r   rU   r   r   rW   r   r`   )rR   r   	intervalsr   rh   r/   r   r0   r_   .  s   


r_   N)Ir5   sympy.core.basicr   sympy.core.cacher   sympy.core.functionr   r   sympy.core.numbersr   r   r   sympy.core.relationalr	   r
   sympy.core.singletonr   sympy.core.symbolr   r   sympy.core.sympifyr   r   (sympy.functions.combinatorial.factorialsr   &sympy.functions.elementary.exponentialr   $sympy.functions.elementary.piecewiser   'sympy.functions.special.delta_functionsr   sympy.integrals.integralsr   r   sympy.logic.boolalgr   r   sympy.polys.polyerrorsr   sympy.polys.polytoolsr   sympy.series.seriesr   sympy.sets.setsr   r   r   r   sympy.solvers.solvesetr   sympy.solvers.inequalitiesr    r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r8   rD   rK   ro   rr   r   r   r   r_   r/   r/   r/   r0   <module>   sD    0B  !V