It seems you're working with the dev version.  I'm using the latest release 
(1.6.2), where `ContinuousRV` does not have a `check` argument.  Why would 
the integration fail in the current release?

Thanks for the feedback,
--
Seb


On Sunday, October 11, 2020 at 10:47:58 AM UTC-5 czgdp1807 wrote:

> Hi,
>
> Try using the following,
>
> X = ContinuousRV(x, pdf, set=Interval(-oo, -_ETA), check=False)
>
> The keyword argument `check=True` in your case and hence the PDF is 
> integrated for validation which fails. You can avoid that check by setting 
> it to `False`. In the next release, it would be by default, `False`. See, 
> https://github.com/sympy/sympy/pull/20120 and hence your code worked on 
> the development version.  
>
> On Sun, Oct 11, 2020 at 9:09 PM Gagandeep Singh (B17CS021) <
> [email protected]> wrote:
>
>> IPython console for SymPy 1.7.dev (Python 3.6.9-64-bit) (ground types: 
>> python)
>>
>> These commands were executed:
>> >>> from __future__ import division
>> >>> from sympy import *
>> >>> x, y, z, t = symbols('x y z t')
>> >>> k, m, n = symbols('k m n', integer=True)
>> >>> f, g, h = symbols('f g h', cls=Function)
>> >>> init_printing()
>>
>> Documentation can be found at https://docs.sympy.org/dev
>>
>>
>> In [1]: from sympy.stats import ContinuousRV
>>
>> In [2]: from sympy import Lambda, log, Pow, exp, symbols, Interval, oo
>>
>> In [3]: _BETA = 10.56
>>
>> In [5]: _ETA = -90
>>
>> In [6]: _ALPHA = 3.11
>>
>> In [7]: x, beta, alpha, eta = symbols("x, beta, alpha, eta")
>>
>> In [8]: log_weibull_pdf = ((beta / (alpha * (1 - x - eta))) *
>>    ...:                    (Pow(log(1 - x - eta) / alpha, beta - 1)) *
>>    ...:                    (exp(-Pow(log(1 - x - eta) / alpha, beta))))
>>
>> In [9]: log_weibull_pdf.subs({beta: _BETA,
>>    ...:                                           alpha: _ALPHA,
>>    ...:                                           eta: _ETA}
>>    ...: 
>>    ...: 
>>    ...: 
>>    ...: 
>>    ...:                                           )
>> Out[9]: 
>>                                              10.56                        
>>                      -6.25821230086363e-6⋅log     (91 - x)    9.56        
>> 6.60867218971199e-5⋅ℯ                                     ⋅log    (91 - x)
>> ──────────────────────────────────────────────────────────────────────────
>>                                   91 - x                                  
>>
>> In [10]: pdf = _
>>
>> In [11]: X = ContinuousRV(x, pdf, set=Interval(-oo, -_ETA))
>>
>> In [12]: X
>> Out[12]: x
>>
>> In [14]: from sympy.stats import density
>>
>> In [15]: density(X)(y)
>> Out[15]: 
>> ⎧                                             10.56                       
>>     
>> ⎪                     -6.25821230086363e-6⋅log     (91 - y)    9.56       
>>     
>> ⎪6.60867218971199e-5⋅ℯ                                     ⋅log    (91 - 
>> y)   
>> ⎨────────────────────────────────────────────────────────────────────────── 
>>  f
>> ⎪                                  91 - y                                 
>>     
>> ⎪                                                                         
>>     
>> ⎩                                    0                                   
>>      
>>
>>                   
>>                   
>>                   
>> or y ≥ -∞ ∧ y ≤ 90
>>                   
>>                   
>>     otherwise
>>
>> Is the above what you were trying to do?     
>>
>> On Sun, Oct 11, 2020 at 8:55 PM [email protected] <[email protected]> 
>> wrote:
>>
>>> Here is my attempt with ContinuousRV:
>>>
>>> from sympy.stats import ContinuousRV
>>> from sympy import Lambda, log, Pow, exp, symbols, Interval, oo
>>>
>>> # Parameters
>>> _BETA = 10.56
>>> _ETA = -90
>>> _ALPHA = 3.11
>>>
>>> x, beta, alpha, eta = symbols("x, beta, alpha, eta")
>>>
>>> log_weibull_pdf = ((beta / (alpha * (1 - x - eta))) *
>>>                    (Pow(log(1 - x - eta) / alpha, beta - 1)) *
>>>                    (exp(-Pow(log(1 - x - eta) / alpha, beta))))
>>> X = ContinuousRV(x, log_weibull_pdf.subs({beta: _BETA,
>>>                                           alpha: _ALPHA,
>>>                                           eta: _ETA}),
>>>                  set=Interval(-oo, -_ETA))
>>>
>>> which fails with:
>>>
>>> ValueError: x**w where w is irrational is not defined for negative x
>>>
>>> --
>>> Seb
>>>
>>>
>>> On Sunday, October 11, 2020 at 1:51:16 AM UTC-5 czgdp1807 wrote:
>>>
>>>> Hi, 
>>>>
>>>> I think for creating RVs with custom distributions, one can use, 
>>>> ContinuousRV, DiscreteRV Or FiniteRV depending on the type of 
>>>> distribution. You can take a look at 
>>>> https://docs.sympy.org/latest/modules/stats.html#examples 
>>>> Note that the PDF/PMF should be a SymPy object. 
>>>>
>>>> With Regards, 
>>>> Gagandeep Singh
>>>> Github - https://github.com/czgdp1807
>>>> LinkedIn - https://www.linkedin.com/in/czgdp1807
>>>>
>>>> On Sun, 11 Oct, 2020, 3:45 AM [email protected], <[email protected]> 
>>>> wrote:
>>>>
>>>>> Hello,
>>>>>
>>>>> I'm trying to set up a custom distribution with the following function 
>>>>> describing its PDF:
>>>>>
>>>>> def pdf(x, beta, alpha, eta):
>>>>>     t0 = beta / (alpha * (1 - x - eta))
>>>>>     t1 = pow(np.log(1 - x - eta) / alpha, beta - 1)
>>>>>     t2 = np.exp(-pow(np.log(1 - x - eta) / alpha, beta))
>>>>>     return t0 * t1 * t2
>>>>>
>>>>> It's a particular parameterization of the Log-Weibull distribution, 
>>>>> with beta and alpha being the shape and scale parameters, respectively, 
>>>>> and 
>>>>> eta acts as a shift parameter representing the upper bound of the sample 
>>>>> space, which is then defined as -inf < x < eta.  I'm interested in 
>>>>> drawing 
>>>>> random variates, computing the above PDF, and CDF.
>>>>>
>>>>> I have limited experience with sympy, and none with sympy.stats, but 
>>>>> it seems as if what I need is sympy.stats.ContinuousDistributionHandmade. 
>>>>>  
>>>>> However, I'd appreciate any pointers.
>>>>>
>>>>> Thanks,
>>>>> --
>>>>> Seb
>>>>>
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "sympy" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to [email protected].
>>>>> To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/sympy/8f73147b-7032-464d-b95c-a1b68537c1a7n%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/sympy/8f73147b-7032-464d-b95c-a1b68537c1a7n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "sympy" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/16120812-5243-4f41-869e-7d03288dfb97n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/sympy/16120812-5243-4f41-869e-7d03288dfb97n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>>
>> -- 
>> With regards,
>> Gagandeep Singh
>> Github - https://github.com/czgdp1807/
>> Linkedin - https://www.linkedin.com/in/czgdp1807/ 
>> <https://www.linkedin.com/in/gdp1/>
>>
>
>
> -- 
> With regards,
> Gagandeep Singh
> Github - https://github.com/czgdp1807/
> Linkedin - https://www.linkedin.com/in/czgdp1807/ 
> <https://www.linkedin.com/in/gdp1/>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/4f6cd660-20e1-4fce-9f58-30ff3a65e505n%40googlegroups.com.

Reply via email to