## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup--------------------------------------------------------------------
library(distionary)

## -----------------------------------------------------------------------------
continuous(c(0, Inf))

## -----------------------------------------------------------------------------
continuous()

## -----------------------------------------------------------------------------
continuous(c(3, 4), c(0, 1), c(0.5, 2))

## -----------------------------------------------------------------------------
discrete(c(3.5, 1.2, 6.7))

## -----------------------------------------------------------------------------
discrete(natural0())

## -----------------------------------------------------------------------------
discrete(integers())

## -----------------------------------------------------------------------------
discrete(arithmetic(0, 0.5))

## -----------------------------------------------------------------------------
discrete(arithmetic(0, 0.5, n_left = 0, n_right = 4))

## -----------------------------------------------------------------------------
mixed(discrete = 0, continuous = c(0, Inf))

## -----------------------------------------------------------------------------
mixed(continuous = continuous(c(0, 1)))

## -----------------------------------------------------------------------------
empty_support()

## ----error = TRUE-------------------------------------------------------------
try({
distribution(cdf = stats::pnorm, .support = empty_support())
})

## -----------------------------------------------------------------------------
is_empty_support(empty_support())

## -----------------------------------------------------------------------------
support(dst_pois(3))
support(dst_gamma(shape = 2, rate = 1))

## -----------------------------------------------------------------------------
atoms(mixed(discrete = 0, continuous = c(0, Inf)))
regions(continuous(c(0, 1), c(3, 4)))

## -----------------------------------------------------------------------------
atoms(dst_binom(5, 0.3))

## -----------------------------------------------------------------------------
vtype(dst_pois(3))
range(dst_pois(3))

## -----------------------------------------------------------------------------
range(continuous(c(0, 1), c(3, 4)))

## -----------------------------------------------------------------------------
is_support(continuous(c(0, 1)))

## -----------------------------------------------------------------------------
support_union(continuous(c(0, 1)), continuous(c(0.5, 3)))

## -----------------------------------------------------------------------------
support_union(discrete(3), continuous(c(0, 10)))

## -----------------------------------------------------------------------------
support_restrict(discrete(natural0()), to = 4)

## -----------------------------------------------------------------------------
support_restrict(discrete(natural0()), to = 4, include_to = FALSE)

## -----------------------------------------------------------------------------
support_restrict(continuous(c(0, 1)), from = 5, to = 6)

## -----------------------------------------------------------------------------
support_shift(continuous(c(0, 1)), by = 5)
support_scale(discrete(natural0()), by = 2)

## -----------------------------------------------------------------------------
support_scale(continuous(c(1, 2)), by = -1)

## -----------------------------------------------------------------------------
support_scale(continuous(c(1, 2)), by = 0)

## -----------------------------------------------------------------------------
support_reciprocal(continuous(c(-2, 4)))

## -----------------------------------------------------------------------------
support_transform(
  continuous(c(0, Inf)),
  fun = exp, inv = log,
  domain = c(0, Inf), range = c(1, Inf)
)

## -----------------------------------------------------------------------------
support_add_atoms(continuous(c(0, Inf)), 0)

## -----------------------------------------------------------------------------
s <- mixed(discrete = 0, continuous = c(2, 5))
support_contains(s, at = c(0, 1, 3, 9))
support_has_atom(s, at = c(0, 1, 3, 9))

## -----------------------------------------------------------------------------
my_normal <- distribution(
  cdf = stats::pnorm,
  density = stats::dnorm,
  .support = continuous(c(-Inf, Inf))
)
vtype(my_normal)

## ----error = TRUE-------------------------------------------------------------
try({
distribution(cdf = stats::pnorm, .support = c(0, Inf))
})

## ----error = TRUE-------------------------------------------------------------
try({
distribution(cdf = stats::pnorm, density = stats::dnorm)
})

## -----------------------------------------------------------------------------
p0 <- 0.3
rate <- 1 / 5
rainfall <- distribution(
  cdf = function(x) {
    ifelse(x < 0, 0, p0 + (1 - p0) * stats::pexp(x, rate))
  },
  density = function(x) {
    ifelse(x <= 0, 0, (1 - p0) * stats::dexp(x, rate))
  },
  pmf = function(x) {
    ifelse(x == 0, p0, 0)
  },
  .support = mixed(discrete = 0, continuous = c(0, Inf)),
  .name = "Rainfall"
)
vtype(rainfall)

## -----------------------------------------------------------------------------
eval_quantile(rainfall, at = c(0.1, 0.3, 0.5, 0.9))

## -----------------------------------------------------------------------------
mean(rainfall)
variance(rainfall)

## -----------------------------------------------------------------------------
my_poisson <- distribution(
  cdf = function(x) stats::ppois(x, 2.5),
  pmf = function(x) stats::dpois(x, 2.5),
  .support = discrete(natural0()),
  .name = "My Poisson"
)
eval_quantile(my_poisson, at = c(0.05, 0.3, 0.5, 0.9, 0.99))

## -----------------------------------------------------------------------------
mean(my_poisson)

