Source code for chaospy.distributions.operators.negative

"""
Negative of a distribution.

Example usage
-------------

Invert sign of a distribution::

    >>> distribution = -chaospy.Uniform()
    >>> distribution
    Negative(Uniform())
    >>> distribution.sample(5).round(4)
    array([-0.3464, -0.885 , -0.0497, -0.5178, -0.1275])
    >>> distribution.fwd([-0.3, -0.2, -0.1])
    array([0.7, 0.8, 0.9])
    >>> distribution.inv(distribution.fwd([-0.3, -0.2, -0.1]))
    array([-0.3, -0.2, -0.1])
    >>> distribution.pdf([-0.3, -0.2, -0.1])
    array([1., 1., 1.])
    >>> distribution.mom([1, 2, 3]).round(4)
    array([-0.5   ,  0.3333, -0.25  ])
    >>> distribution.ttr([1, 2, 3]).round(4)
    array([[-0.5   , -0.5   , -0.5   ],
           [ 0.0833,  0.0667,  0.0643]])

"""
import numpy

from ..baseclass import Distribution, OperatorDistribution


[docs]class Negative(OperatorDistribution): """Negative of a distribution.""" _operator = lambda self, left, right: -left
[docs] def __init__(self, dist): """ Constructor. Args: dist (Distribution) : distribution. """ super(Negative, self).__init__( left=dist, right=0, ) self._repr_args = [dist]
def _lower(self, idx, left, right, cache): del right return -left._get_upper(idx, cache) def _upper(self, idx, left, right, cache): del right return -left._get_lower(idx, cache) def _pdf(self, xloc, idx, left, right, cache): del right return left._get_pdf(-xloc, idx, cache) def _cdf(self, xloc, idx, left, right, cache): del right return 1 - left._get_fwd(-xloc, idx, cache) def _ppf(self, uloc, idx, left, right, cache): del right return -left._get_inv(1 - uloc, idx, cache) def _mom(self, kloc, left, right, cache): """Statistical moments.""" del right del cache return (-1) ** numpy.sum(kloc) * left._get_mom(kloc) def _ttr(self, kloc, idx, left, right, cache): """Three terms recurrence coefficients.""" del right del cache alpha, beta = left._get_ttr(kloc, idx) return -alpha, beta
def neg(left): """ Negative of a distribution. Args: dist (Distribution) : distribution. """ return Negative(left)