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/CAAvS0gXJyebe5BRbQBfF%3D9UDTFEknSNViXhoLPdyM7UancA%3DDQ%40mail.gmail.com.

Reply via email to