# Generated by using Rcpp::compileAttributes() -> do not edit by hand
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393

ising_log_odds_sum <- function(y, theta) {
    .Call(`_mvbernoulli_ising_log_odds_sum`, y, theta)
}

#' Ising model scaling factor `p_0(theta)` for the Ising model
#'
ising_prob0 <- function(theta) {
    .Call(`_mvbernoulli_ising_prob0`, theta)
}

#' Ising model probabilities for every event, this returns a vector of size `2^p`
#' with indices corresponding to the events binary representation.
#'
#' Note: the R indexing leads to adding +1 to every index.
#'
ising_probs <- function(theta) {
    .Call(`_mvbernoulli_ising_probs`, theta)
}

#' Computes the zero conditioned probabilities
#'      P(Y_i = 1 | Y_-i = 0)
#' and
#'      P(Y_i = 1, Y_j = 1 | Y_-i = 0)
#' from the natural parameters `theta` with matching indexing.
#'
#' This is the inverse function of `ising_theta_from_cond_prob`
#'
ising_cond_probs <- function(theta) {
    .Call(`_mvbernoulli_ising_cond_probs`, theta)
}

#' Computes the expectation of `Y` under the Ising model with natural parameter
#' `theta` given component wise by
#'
#'      E Y_i = P(Y_i = 1)
#'
ising_expectation <- function(theta) {
    .Call(`_mvbernoulli_ising_expectation`, theta)
}

#' Computes the covariance (second centered moment) of `Y` under the Ising model
#' with natural parameter `theta`.
#'
#'      cov(Y, Y) = E[Y Y'] - E[Y] E[Y]'
#'
ising_cov <- function(theta) {
    .Call(`_mvbernoulli_ising_cov`, theta)
}

#' Computes the single and two way effect marginal probabilities
#'
#'      P(Y_i = 1)
#' and
#'      P(Y_i Y_j = 1)
#'
#' In its vectorized form this function computes E[vech(Y Y')]
#'
ising_marginal_probs <- function(theta) {
    .Call(`_mvbernoulli_ising_marginal_probs`, theta)
}

#' Natural parameters from the sufficient conditional probability statistis `pi`
#'
#' Computes the natural parameters `theta` of the Ising model from zero
#' conditioned probabilites for single and two way effects.
#'
#' This is the inverse function of `ising_cond_prob_from_theta`
#'
ising_theta_from_cond_prob <- function(pi) {
    .Call(`_mvbernoulli_ising_theta_from_cond_prob`, pi)
}

#' Computes the log-lokelihood at natural parameters `theta` of the Ising model
#' given a set of observations `Y`
#'
#'      l(theta) = log(p_0(theta)) + n^-1 sum_i vech(y_i y_i')' theta
#'
ising_log_likelihood <- function(theta, Y) {
    .Call(`_mvbernoulli_ising_log_likelihood`, theta, Y)
}

#' Computes the Score of the Ising model, this is the gradiend of the (mean)
#' log-likelihood with respect to the natural parameters
#'
#'      grad l(theta) = -E[vech(Y Y')] + n^-1 sum_i vech(y_i y_i')
#'
ising_score <- function(theta, Y) {
    .Call(`_mvbernoulli_ising_score`, theta, Y)
}

ising_conditional_log_likelihood <- function(alpha, X, Y) {
    .Call(`_mvbernoulli_ising_conditional_log_likelihood`, alpha, X, Y)
}

ising_conditional_score <- function(alpha, X, Y) {
    .Call(`_mvbernoulli_ising_conditional_score`, alpha, X, Y)
}

#' Fisher information for the natural parameters `theta` under the Ising model.
#'
#'      I(theta) = -E(H l(theta) | theta) = Cov(vech(Y Y'), vech(Y Y') | theta)
#'
#' where `H l(theta)` is the Hessian of the log-likelihood `l(theta)` defined as
#'
#'      l(theta) = n^-1 prod_i P(Y = y_i | theta)
#'               = log(p_0(theta)) - mean_i exp(vech(y_i y_i')' theta)
#'
#' Note that the Fisher information does _not_ depend on data.
#'
ising_fisher_info <- function(theta) {
    .Call(`_mvbernoulli_ising_fisher_info`, theta)
}

#' Samples from the Ising model given the natural parameters `theta`
#'
ising_sample <- function(n, theta, warmup = 1000L) {
    .Call(`_mvbernoulli_ising_sample`, n, theta, warmup)
}

print.mvbinary <- function(binary, nrLines = 10L) {
    invisible(.Call(`_mvbernoulli_print_mvbinary`, binary, nrLines))
}

printBits <- function(ints) {
    invisible(.Call(`_mvbernoulli_printBits`, ints))
}

#' Converts a logical matrix to a multi variate bernoulli dataset
#'
as.mvbinary <- function(Y) {
    .Call(`_mvbernoulli_as_mvbinary`, Y)
}

#' Converts a Multivariate binary data set into a logical matrix
#'
as.mvbmatrix <- function(Y) {
    .Call(`_mvbernoulli_as_mvbmatrix`, Y)
}

#' Mean for a multi variate bernoulli dataset `MVBinary`
#'
#'      mean_i y_i                  # twoway = false (only single effects)
#'
#' or
#'
#'      mean_i vech(y_i y_i')       # twoway = true (with two-way interactions)
#'
mean.mvbinary <- function(Y, twoway = FALSE) {
    .Call(`_mvbernoulli_mean_mvbinary`, Y, twoway)
}

#' Covariance for multi variate binary data `MVBinary`
#'
#'      cov(Y) = (n - 1)^-1 sum_i (y_i - mean(Y)) (y_i - mean(Y))'
#'
cov.mvbinary <- function(Y) {
    .Call(`_mvbernoulli_cov_mvbinary`, Y)
}

