import math def bnd(x, n, p): """ Computes the binomial distribution. :param x: Number of successes. :param n: Number of trials. :param p: Probability of success. :return: Returns the probability of getting x successes in n trials. """ return math.comb(n, x) * p ** x * (1 - p) ** (n - x) def bnd_mean(n, p): """ Computes the mean of the binomial distribution. :param n: Number of trials. :param p: Probability of success. :return: Returns the mean of the binomial distribution. """ return n * p def bnd_var(n, p): """ Computes the variance of the binomial distribution. :param n: Number of trials. :param p: Probability of success. :return: Returns the variance of the binomial distribution. """ return n * p * (1 - p) def bnd_std(n, p): """ Computes the standard deviation of the binomial distribution. :param n: Number of trials. :param p: Probability of success. :return: Returns the standard deviation of the binomial distribution. """ return bnd_var(n, p) ** 0.5 def bnd_leq(x, n, p): """ Computes the cumulative probability less than or equal to x successes in n trials. :param x: Number of successes. :param n: Number of trials. :param p: Probability of success. :return: Returns the cumulative probability less than or equal to x successes in n trials. """ return sum(bnd(i, n, p) for i in range(x + 1)) def bnd_lt(x, n, p): """ Computes the cumulative probability less than x successes in n trials. :param x: Number of successes. :param n: Number of trials. :param p: Probability of success. :return: Returns the cumulative probability less than x successes in n trials. """ return sum(bnd(i, n, p) for i in range(x)) def bnd_geq(x, n, p): """ Computes the cumulative probability greater than or equal to x successes in n trials. :param x: Number of successes. :param n: Number of trials. :param p: Probability of success. :return: Returns the cumulative probability greater than or equal to x successes in n trials. """ return 1 - bnd_lt(x, n, p) def bnd_gt(x, n, p): """ Computes the cumulative probability greater than x successes in n trials. :param x: Number of successes. :param n: Number of trials. :param p: Probability of success. :return: Returns the cumulative probability greater than x successes in n trials. """ return 1 - bnd_leq(x, n, p) def gd(x, p, q=None): """ Computes the geometric distribution. :param x: Number of trials until the first success. :param p: Probability of success. :param q: Probability of failure. :return: Returns the probability of getting the first success on the xth trial. """ if q is None: q = 1 - p return q ** (x - 1) * p def gd_mean(p): """ Computes the mean of the geometric distribution. :param p: Probability of success. :return: Returns the mean of the geometric distribution. """ return 1 / p def gd_var(p): """ Computes the variance of the geometric distribution. :param p: Probability of success. :return: Returns the variance of the geometric distribution. """ return (1 - p) / p ** 2 def gd_std(p): """ Computes the standard deviation of the geometric distribution. :param p: Probability of success. :return: Returns the standard deviation of the geometric distribution. """ return gd_var(p) ** 0.5 def gd_leq(x, p, q=None): """ Computes the cumulative probability of getting upto x trials until the first success. :param x: Number of trials until the first success. :param p: Probability of success. :param q: Probability of failure. :return: Returns the cumulative probability of getting upto x trials until the first success. """ if q is not None: return sum(gd(i, p, q) for i in range(1, x + 1)) return sum(gd(i, p) for i in range(1, x + 1)) def gd_lt(x, p, q=None): """ Computes the cumulative probability of getting less than x trials until the first success. :param x: Number of trials until the first success. :param p: Probability of success. :param q: Probability of failure. :return: Returns the cumulative probability of getting less than x trials until the first success. """ if q is not None: return sum(gd(i, p, q) for i in range(1, x)) return sum(gd(i, p) for i in range(1, x)) def gd_geq(x, p, q=None): """ Computes the cumulative probability of getting from x trials until the first success. :param x: Number of trials until the first success. :param p: Probability of success. :param q: Probability of failure. :return: Returns the cumulative probability of getting from x trials until the first success. """ if q is not None: return 1 - gd_lt(x, p, q) return 1 - gd_leq(x, p) def gd_gt(x, p, q=None): """ Computes the cumulative probability of getting from x trials until the first success. :param x: Number of trials until the first success. :param p: Probability of success. :param q: Probability of failure. :return: Returns the cumulative probability of getting from x trials until the first success. """ if q is not None: return 1 - gd_leq(x, p, q) return 1 - gd_leq(x, p) def hgd(x, N, n, k): """ Computes the hyper geometric distribution. :param x: Number of successes in the sample. :param N: Number of items in the population. :param n: Number of draws. :param k: Number of successes in the population. :return: Returns the probability of getting x successes in n draws from a population of size N with k successes. """ return (math.comb(k, x) * math.comb(N - k, n - x)) / math.comb(N, n) def hgd_mean(N, n, k): """ Computes the mean of the hyper geometric distribution. :param N: Number of items in the population. :param n: Number of draws. :param k: Number of successes in the population. :return: Returns the mean of the hyper geometric distribution. """ return n * (k / N) def hgd_var(N, n, k): """ Computes the variance of the hyper geometric distribution. :param N: Number of items in the population. :param n: Number of draws. :param k: Number of successes in the population. :return: Returns the variance of the hyper geometric distribution. """ return (n * k * (N - k) * (N - n)) / (N ** 2 * (N - 1)) def hgd_std(N, n, k): """ Computes the standard deviation of the hyper geometric distribution. :param N: Number of items in the population. :param n: Number of draws. :param k: Number of successes in the population. :return: Returns the standard deviation of the hyper geometric distribution. """ return hgd_var(N, n, k) ** 0.5 def hgd_leq(x, N, n, k): """ Computes the cumulative probability of getting upto x successes in n draws from a population of size N with k successes. :param x: Number of successes in the sample. :param N: Number of items in the population. :param n: Number of draws. :param k: Number of successes in the population. :return: Returns the cumulative probability of getting upto x successes in n draws from a population of size N with k successes. """ return sum(hgd(i, N, n, k) for i in range(x + 1)) def hgd_lt(x, N, n, k): """ Computes the cumulative probability of getting less than x successes in n draws from a population of size N with k successes. :param x: Number of successes in the sample. :param N: Number of items in the population. :param n: Number of draws. :param k: Number of successes in the population. :return: Returns the cumulative probability of getting less than x successes in n draws from a population of size N with k successes. """ return sum(hgd(i, N, n, k) for i in range(x)) def hgd_geq(x, N, n, k): """ Computes the cumulative probability of getting from x successes in n draws from a population of size N with k successes. :param x: Number of successes in the sample. :param N: Number of items in the population. :param n: Number of draws. :param k: Number of successes in the population. :return: Returns the cumulative probability of getting from x successes in n draws from a population of size N with k successes. """ return 1 - hgd_lt(x, N, n, k) def hgd_gt(x, N, n, k): """ Computes the cumulative probability of getting from x successes in n draws from a population of size N with k successes. :param x: Number of successes in the sample. :param N: Number of items in the population. :param n: Number of draws. :param k: Number of successes in the population. :return: Returns the cumulative probability of getting from x successes in n draws from a population of size N with k successes. """ return 1 - hgd_leq(x, N, n, k) def pd(x, l): """ Computes the poisson distribution. :param x: Number of occurrences. :param l: Average number of occurrences. :return: Returns the probability of getting x occurrences. """ return (l ** x * math.e ** -l) / math.factorial(x) def pd_mean(l): """ Computes the mean of the poisson distribution. :param l: Average number of occurrences. :return: Returns the mean of the poisson distribution. """ return l def pd_var(l): """ Computes the variance of the poisson distribution. :param l: Average number of occurrences. :return: Returns the variance of the poisson distribution. """ return l def pd_std(l): """ Computes the standard deviation of the poisson distribution. :param l: Average number of occurrences. :return: Returns the standard deviation of the poisson distribution. """ return l ** 0.5 def pd_leq(x, l): """ Computes the cumulative probability of getting upto x occurrences. :param x: Number of occurrences. :param l: Average number of occurrences. :return: Returns the cumulative probability of getting upto x occurrences. """ return sum(pd(i, l) for i in range(x + 1)) def pd_lt(x, l): """ Computes the cumulative probability of getting less than x occurrences. :param x: Number of occurrences. :param l: Average number of occurrences. :return: Returns the cumulative probability of getting less than x occurrences. """ return sum(pd(i, l) for i in range(x)) def pd_geq(x, l): """ Computes the cumulative probability of getting from x occurrences. :param x: Number of occurrences. :param l: Average number of occurrences. :return: Returns the cumulative probability of getting from x occurrences. """ return 1 - pd_lt(x, l) def pd_gt(x, l): """ Computes the cumulative probability of getting from x occurrences. :param x: Number of occurrences. :param l: Average number of occurrences. :return: Returns the cumulative probability of getting from x occurrences. """ return 1 - pd_leq(x, l) def man(): seperator = "-" * 30 """ Prints the manual for the module. Formatted this way to fit in memory on the calculator. """ print("This module contains functions for computing the total probability of events.") print("The functions are:") print("bnd(x, n, p) - The binomial distribution") print("bnd_mean(n, p) - The mean of the binomial distribution") print("bnd_var(n, p) - The variance of the binomial distribution") print("bnd_std(n, p) - The standard deviation of the binomial distribution") print("bnd_leq(x, n, p) - The cumulative probability less than or equal to x successes in n trials") print("bnd_lt(x, n, p) - The cumulative probability less than x successes in n trials") print("bnd_geq(x, n, p) - The cumulative probability greater than or equal to x successes in n trials") print("bnd_gt(x, n, p) - The cumulative probability greater than x successes in n trials") print(seperator) print("gd(x, p, q) - The geometric distribution") print("gd_mean(p) - The mean of the geometric distribution") print("gd_var(p) - The variance of the geometric distribution") print("gd_std(p) - The standard deviation of the geometric distribution") print("gd_leq(x, p, q) - The cumulative probability of getting upto x trials until the first success") print("gd_lt(x, p, q) - The cumulative probability of getting less than x trials until the first success") print("gd_geq(x, p, q) - The cumulative probability of getting from x trials until the first success") print("gd_gt(x, p, q) - The cumulative probability of getting from x trials until the first success") print(seperator) print("hgd(x, N, n, k) - The hyper geometric distribution") print("hgd_mean(N, n, k) - The mean of the hyper geometric distribution") print("hgd_var(N, n, k) - The variance of the hyper geometric distribution") print("hgd_std(N, n, k) - The standard deviation of the hyper geometric distribution") print("hgd_leq(x, N, n, k) - The cumulative probability of getting upto x successes in n draws from a population of size N with k successes") print("hgd_lt(x, N, n, k) - The cumulative probability of getting less than x successes in n draws from a population of size N with k successes") print("hgd_geq(x, N, n, k) - The cumulative probability of getting from x successes in n draws from a population of size N with k successes") print("hgd_gt(x, N, n, k) - The cumulative probability of getting from x successes in n draws from a population of size N with k successes") print(seperator) print("pd(x, l) - The poisson distribution") print("pd_mean(l) - The mean of the poisson distribution") print("pd_var(l) - The variance of the poisson distribution") print("pd_std(l) - The standard deviation of the poisson distribution") print("pd_leq(x, l) - The cumulative probability of getting upto x occurrences") print("pd_lt(x, l) - The cumulative probability of getting less than x occurrences") print("pd_geq(x, l) - The cumulative probability of getting from x occurrences") print("pd_gt(x, l) - The cumulative probability of getting from x occurrences")