Compare commits

...

12 Commits

Author SHA1 Message Date
4579978900 Fix cdf on micropython 2024-04-22 13:27:55 -03:00
cdc19c0509 Add some cdf functions from std lib 2024-04-22 13:16:50 -03:00
e3566d1c21 Update distribution.py 2024-04-22 12:52:11 -03:00
ee9a752d7f Add net centric 2024-02-26 07:23:13 -04:00
82228b3704 Clean up mans 2024-02-17 22:23:13 -04:00
de97600b7a Fix docstring on man 2024-02-17 22:21:56 -04:00
16efeef8e1 Add functions not supported by micropython 2024-02-17 22:09:00 -04:00
96b29f0bac Make it easier to use on calc 2024-02-17 21:51:18 -04:00
b0e72be1d0 Add more functions 2024-02-17 21:44:21 -04:00
3426d4575c Fix memory errors 2024-02-17 21:24:22 -04:00
3816763622 Update man function 2024-02-17 19:50:41 -04:00
9a5f57d20c Pycharm shit 2024-02-17 19:33:45 -04:00
9 changed files with 665 additions and 222 deletions

2
.idea/.gitignore generated vendored
View File

@ -6,3 +6,5 @@
# Datasource local storage ignored files # Datasource local storage ignored files
/dataSources/ /dataSources/
/dataSources.local.xml /dataSources.local.xml
# GitHub Copilot persisted chat sessions
/copilot/chatSessions

View File

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4"> <module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" /> <content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.idea/copilot/chatSessions" />
</content>
<orderEntry type="jdk" jdkName="Pipenv (casio-calculator)" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="Pipenv (casio-calculator)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>

2
.idea/modules.xml generated
View File

@ -2,7 +2,7 @@
<project version="4"> <project version="4">
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Calculator.iml" filepath="$PROJECT_DIR$/.idea/Calculator.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/casio-calculator.iml" filepath="$PROJECT_DIR$/.idea/casio-calculator.iml" />
</modules> </modules>
</component> </component>
</project> </project>

View File

@ -9,4 +9,3 @@ name = "pypi"
[requires] [requires]
python_version = "3.11" python_version = "3.11"
python_full_version = "3.11.7"

3
Pipfile.lock generated
View File

@ -1,11 +1,10 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "bc82cd27f07d4e24b750064464bbc233a141778868b9a387125705e2d4e8a830" "sha256": "ed6d5d614626ae28e274e453164affb26694755170ccab3aa5866f093d51d3e4"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
"python_full_version": "3.11.7",
"python_version": "3.11" "python_version": "3.11"
}, },
"sources": [ "sources": [

79
cdf.py Normal file
View File

@ -0,0 +1,79 @@
import math
def normal_dist_cdf(x, mu=0.0, sigma=1.0):
return 0.5 * (1.0 + math.erf((x - mu) / (sigma * (2 ** 0.5))))
def normal_dist_inv_cdf(p, mu=0.0, sigma=1.0):
# There is no closed-form solution to the inverse CDF for the normal
# distribution, so we use a rational approximation instead:
# Wichura, M.J. (1988). "Algorithm AS241: The Percentage Points of the
# Normal Distribution". Applied Statistics. Blackwell Publishing. 37
# (3): 477484. doi:10.2307/2347330. JSTOR 2347330.
q = p - 0.5
if math.fabs(q) <= 0.425:
r = 0.180625 - q * q
# Hash sum: 55.88319_28806_14901_4439
num = (((((((2.5090809287301226727e+3 * r +
3.3430575583588128105e+4) * r +
6.7265770927008700853e+4) * r +
4.5921953931549871457e+4) * r +
1.3731693765509461125e+4) * r +
1.9715909503065514427e+3) * r +
1.3314166789178437745e+2) * r +
3.3871328727963666080e+0) * q
den = (((((((5.2264952788528545610e+3 * r +
2.8729085735721942674e+4) * r +
3.9307895800092710610e+4) * r +
2.1213794301586595867e+4) * r +
5.3941960214247511077e+3) * r +
6.8718700749205790830e+2) * r +
4.2313330701600911252e+1) * r +
1.0)
x = num / den
return mu + (x * sigma)
r = p if q <= 0.0 else 1.0 - p
r = math.sqrt(-math.log(r))
if r <= 5.0:
r = r - 1.6
# Hash sum: 49.33206_50330_16102_89036
num = (((((((7.74545014278341407640e-4 * r +
2.27238449892691845833e-2) * r +
2.41780725177450611770e-1) * r +
1.27045825245236838258e+0) * r +
3.64784832476320460504e+0) * r +
5.76949722146069140550e+0) * r +
4.63033784615654529590e+0) * r +
1.42343711074968357734e+0)
den = (((((((1.05075007164441684324e-9 * r +
5.47593808499534494600e-4) * r +
1.51986665636164571966e-2) * r +
1.48103976427480074590e-1) * r +
6.89767334985100004550e-1) * r +
1.67638483018380384940e+0) * r +
2.05319162663775882187e+0) * r +
1.0)
else:
r = r - 5.0
# Hash sum: 47.52583317549289671629
num = (((((((2.01033439929228813265e-7 * r +
2.71155556874348757815e-5) * r +
1.24266094738807843860e-3) * r +
2.65321895265761230930e-2) * r +
2.96560571828504891230e-1) * r +
1.78482653991729133580e+0) * r +
5.46378491116411436990e+0) * r +
6.65790464350110377720e+0)
den = (((((((2.04426310338993978564e-15 * r +
1.42151175831644588870e-7) * r +
1.84631831751005468180e-5) * r +
7.86869131145613259100e-4) * r +
1.48753612908506148525e-2) * r +
1.36929880922735805310e-1) * r +
5.99832206555887937690e-1) * r +
1.0)
x = num / den
if q < 0.0:
x = -x
return mu + (x * sigma)

View File

@ -1,281 +1,535 @@
import math import math
import cdf
def factorial(n):
"""
Computes the factorial of a number.
:param n: The number to compute the factorial of.
:return: Returns the factorial of the number.
"""
if n == 0:
return 1
for i in range(1, n):
n *= i
return n
def combination(n, r):
"""
Computes the combination of n choose r.
:param n: The number of items.
:param r: The number of items to choose.
:return: Returns the number of ways to choose r items from n items.
"""
return factorial(n) / (factorial(r) * factorial(n - r))
def bnd(x, n, p): def bnd(x, n, p):
""" """
Computes the binomial distribution. Computes the binomial distribution.
:param x: Number of successes. :param x: Number of successes.
:param n: Number of trials. :param n: Number of trials.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the probability of getting x successes in n trials. :return: Returns the probability of getting x successes in n trials.
""" """
return math.comb(n, x) * p ** x * (1 - p) ** (n - x) return combination(n, x) * p ** x * (1 - p) ** (n - x)
def bnd_mean(n, p): def bnd_mean(n, p):
""" """
Computes the mean of the binomial distribution. Computes the mean of the binomial distribution.
:param n: Number of trials. :param n: Number of trials.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the mean of the binomial distribution. :return: Returns the mean of the binomial distribution.
""" """
return n * p return n * p
def bnd_var(n, p): def bnd_var(n, p):
""" """
Computes the variance of the binomial distribution. Computes the variance of the binomial distribution.
:param n: Number of trials. :param n: Number of trials.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the variance of the binomial distribution. :return: Returns the variance of the binomial distribution.
""" """
return n * p * (1 - p) return n * p * (1 - p)
def bnd_std(n, p): def bnd_std(n, p):
""" """
Computes the standard deviation of the binomial distribution. Computes the standard deviation of the binomial distribution.
:param n: Number of trials. :param n: Number of trials.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the standard deviation of the binomial distribution. :return: Returns the standard deviation of the binomial distribution.
""" """
return bnd_var(n, p) ** 0.5 return bnd_var(n, p) ** 0.5
def bnd_upto(x, n, p): def bnd_leq(x, n, p):
""" """
Computes the cumulative probability of getting upto x successes in n trials. Computes the cumulative probability less than or equal to x successes in n trials.
:param x: Number of successes. :param x: Number of successes.
:param n: Number of trials. :param n: Number of trials.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the cumulative probability of getting upto x successes in n trials. :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)) return sum(bnd(i, n, p) for i in range(x + 1))
def bnd_from(x, n, p): def bnd_lt(x, n, p):
""" """
Computes the cumulative probability of getting from x successes in n trials. Computes the cumulative probability less than x successes in n trials.
:param x: Number of successes. :param x: Number of successes.
:param n: Number of trials. :param n: Number of trials.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the cumulative probability of getting from x successes in n trials. :return: Returns the cumulative probability less than x successes in n trials.
""" """
return 1 - bnd_upto(x - 1, n, p) 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): def gd(x, p, q=None):
""" """
Computes the geometric distribution. Computes the geometric distribution.
:param x: Number of trials until the first success. :param x: Number of trials until the first success.
:param p: Probability of success. :param p: Probability of success.
:param q: Probability of failure. :param q: Probability of failure.
:return: Returns the probability of getting the first success on the xth trial. :return: Returns the probability of getting the first success on the xth trial.
""" """
if q is None: if q is None:
q = 1 - p q = 1 - p
return q ** (x - 1) * p return q ** (x - 1) * p
def gd_mean(p): def gd_mean(p):
""" """
Computes the mean of the geometric distribution. Computes the mean of the geometric distribution.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the mean of the geometric distribution. :return: Returns the mean of the geometric distribution.
""" """
return 1 / p return 1 / p
def gd_var(p): def gd_var(p):
""" """
Computes the variance of the geometric distribution. Computes the variance of the geometric distribution.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the variance of the geometric distribution. :return: Returns the variance of the geometric distribution.
""" """
return (1 - p) / p ** 2 return (1 - p) / p ** 2
def gd_std(p): def gd_std(p):
""" """
Computes the standard deviation of the geometric distribution. Computes the standard deviation of the geometric distribution.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the standard deviation of the geometric distribution. :return: Returns the standard deviation of the geometric distribution.
""" """
return gd_var(p) ** 0.5 return gd_var(p) ** 0.5
def gd_upto(x, p): def gd_leq(x, p, q=None):
""" """
Computes the cumulative probability of getting upto x trials until the first success. Computes the cumulative probability of getting upto x trials until the first success.
:param x: Number of trials until the first success. :param x: Number of trials until the first success.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the cumulative probability of getting upto x trials until the first success. :param q: Probability of failure.
""" :return: Returns the cumulative probability of getting upto x trials until the first success.
return sum(gd(i, p) for i in range(1, x + 1)) """
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_from(x, p): def gd_lt(x, p, q=None):
""" """
Computes the cumulative probability of getting from x trials until the first success. Computes the cumulative probability of getting less than x trials until the first success.
:param x: Number of trials until the first success. :param x: Number of trials until the first success.
:param p: Probability of success. :param p: Probability of success.
:return: Returns the cumulative probability of getting from x trials until the first success. :param q: Probability of failure.
""" :return: Returns the cumulative probability of getting less than x trials until the first success.
return 1 - gd_upto(x - 1, p) """
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): def hgd(x, N, n, k):
""" """
Computes the hyper geometric distribution. Computes the hyper geometric distribution.
:param x: Number of successes in the sample. :param x: Number of successes in the sample.
:param N: Number of items in the population. :param N: Number of items in the population.
:param n: Number of draws. :param n: Number of draws.
:param k: Number of successes in the population. :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: 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) return (combination(k, x) * combination(N - k, n - x)) / combination(N, n)
def hgd_mean(N, n, k): def hgd_mean(N, n, k):
""" """
Computes the mean of the hyper geometric distribution. Computes the mean of the hyper geometric distribution.
:param N: Number of items in the population. :param N: Number of items in the population.
:param n: Number of draws. :param n: Number of draws.
:param k: Number of successes in the population. :param k: Number of successes in the population.
:return: Returns the mean of the hyper geometric distribution. :return: Returns the mean of the hyper geometric distribution.
""" """
return n * (k / N) return n * (k / N)
def hgd_var(N, n, k): def hgd_var(N, n, k):
""" """
Computes the variance of the hyper geometric distribution. Computes the variance of the hyper geometric distribution.
:param N: Number of items in the population. :param N: Number of items in the population.
:param n: Number of draws. :param n: Number of draws.
:param k: Number of successes in the population. :param k: Number of successes in the population.
:return: Returns the variance of the hyper geometric distribution. :return: Returns the variance of the hyper geometric distribution.
""" """
return (n * k * (N - k) * (N - n)) / (N ** 2 * (N - 1)) return (n * k * (N - k) * (N - n)) / (N ** 2 * (N - 1))
def hgd_std(N, n, k): def hgd_std(N, n, k):
""" """
Computes the standard deviation of the hyper geometric distribution. Computes the standard deviation of the hyper geometric distribution.
:param N: Number of items in the population. :param N: Number of items in the population.
:param n: Number of draws. :param n: Number of draws.
:param k: Number of successes in the population. :param k: Number of successes in the population.
:return: Returns the standard deviation of the hyper geometric distribution. :return: Returns the standard deviation of the hyper geometric distribution.
""" """
return hgd_var(N, n, k) ** 0.5 return hgd_var(N, n, k) ** 0.5
def hgd_upto(x, N, n, k): 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. 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 x: Number of successes in the sample.
:param N: Number of items in the population. :param N: Number of items in the population.
:param n: Number of draws. :param n: Number of draws.
:param k: Number of successes in the population. :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: 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)) return sum(hgd(i, N, n, k) for i in range(x + 1))
def hgd_from(x, N, n, k): def hgd_lt(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. 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 x: Number of successes in the sample.
:param N: Number of items in the population. :param N: Number of items in the population.
:param n: Number of draws. :param n: Number of draws.
:param k: Number of successes in the population. :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: Returns the cumulative probability of getting less than x successes in n draws from a population of size N with k successes.
""" """
return 1 - hgd_upto(x - 1, N, n, k) 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): def pd(x, l):
""" """
Computes the poisson distribution. Computes the poisson distribution.
:param x: Number of occurrences. :param x: Number of occurrences.
:param l: Average number of occurrences. :param l: Average number of occurrences.
:return: Returns the probability of getting x occurrences. :return: Returns the probability of getting x occurrences.
""" """
return (l ** x * math.e ** -l) / math.factorial(x) return (l ** x * math.e ** -l) / factorial(x)
def pd_mean(l): def pd_mean(l):
""" """
Computes the mean of the poisson distribution. Computes the mean of the poisson distribution.
:param l: Average number of occurrences. :param l: Average number of occurrences.
:return: Returns the mean of the poisson distribution. :return: Returns the mean of the poisson distribution.
""" """
return l return l
def pd_var(l): def pd_var(l):
""" """
Computes the variance of the poisson distribution. Computes the variance of the poisson distribution.
:param l: Average number of occurrences. :param l: Average number of occurrences.
:return: Returns the variance of the poisson distribution. :return: Returns the variance of the poisson distribution.
""" """
return l return l
def pd_std(l): def pd_std(l):
""" """
Computes the standard deviation of the poisson distribution. Computes the standard deviation of the poisson distribution.
:param l: Average number of occurrences. :param l: Average number of occurrences.
:return: Returns the standard deviation of the poisson distribution. :return: Returns the standard deviation of the poisson distribution.
""" """
return l ** 0.5 return l ** 0.5
def pd_upto(x, l): def pd_leq(x, l):
""" """
Computes the cumulative probability of getting upto x occurrences. Computes the cumulative probability of getting upto x occurrences.
:param x: Number of occurrences. :param x: Number of occurrences.
:param l: Average number of occurrences. :param l: Average number of occurrences.
:return: Returns the cumulative probability of getting upto x occurrences. :return: Returns the cumulative probability of getting upto x occurrences.
""" """
return sum(pd(i, l) for i in range(x + 1)) return sum(pd(i, l) for i in range(x + 1))
def pd_from(x, l): def pd_lt(x, l):
""" """
Computes the cumulative probability of getting from x occurrences. Computes the cumulative probability of getting less than x occurrences.
:param x: Number of occurrences. :param x: Number of occurrences.
:param l: Average number of occurrences. :param l: Average number of occurrences.
:return: Returns the cumulative probability of getting from x occurrences. :return: Returns the cumulative probability of getting less than x occurrences.
""" """
return 1 - pd_upto(x - 1, l) 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 sample_mean_e(u):
"""
Computes the expected value of the sample mean.
:param u: The population mean.
:return: Returns the expected value of the sample mean.
"""
return u
def sample_mean_std(u, n):
"""
Computes the standard deviation of the sample mean.
:param u: The population mean.
:param n: The sample size.
:return: Returns the standard deviation of the sample mean.
"""
return u / n ** 0.5
def sample_mean_var(u, n):
"""
Computes the variance of the sample mean.
:param u: The population mean.
:param n: The sample size.
:return: Returns the variance of the sample mean.
"""
return (sample_mean_std(u, n) ** 2) / n
def z_score(x, u, s):
"""
Computes the z-score of a sample.
:param x: The sample mean.
:param u: The population mean.
:param s: The standard deviation of the sample mean.
:return: Returns the z-score of the sample.
"""
return (x - u) / s
def z_to_p(z):
"""
Computes the probability of a z-score.
:param z: The z-score.
:return: Returns the probability of the z-score.
"""
return cdf.normal_dist_cdf(z)
def p_to_z(p):
"""
Computes the z-score of a probability.
:param p: The probability.
:return: Returns the z-score of the probability.
"""
return cdf.normal_dist_inv_cdf(p)
def gamma(u, n):
"""
Computes the gamma of a sample.
:param u: The population mean.
:param n: The sample size.
:return: Returns the gamma of the sample.
"""
return sample_mean_var(u, n) / sample_mean_e(u)
def alpha(u, n):
"""
Computes the alpha of a sample.
:param u: The population mean.
:param n: The sample size.
:return: Returns the alpha of the sample.
"""
return sample_mean_e(u) / gamma(u, n)
def margin_of_error(a, s, n):
"""
Computes the margin of error of a sample.
:param a: The alpha of the sample.
:param s: The standard deviation of the sample mean.
:param n: The sample size.
:return: Returns the margin of error of the sample.
"""
return abs((p_to_z(a / 2)) * (s / (n ** 0.5)))
def confidence_interval(x, a, s, n):
"""
Computes the confidence interval of a sample.
:param x: The sample mean.
:param a: The alpha of the sample.
:param s: The standard deviation of the sample mean.
:param n: The sample size.
:return: Returns the confidence interval of the sample.
"""
return x - margin_of_error(a, s, n), x + margin_of_error(a, s, n)
def man(): def man():
print("This module contains functions for computing the total probability of events.") """
print("The functions are:") Prints the manual for the module.
print("bnd(x, n, p) - The binomial distribution") """
print("bnd_mean(n, p) - The mean of the binomial distribution") separator = "-" * 20
print("bnd_var(n, p) - The variance of the binomial distribution") print("This module contains functions for computing the total probability of events.")
print("bnd_std(n, p) - The standard deviation of the binomial distribution") print("The functions are:")
print("bnd_upto(x, n, p) - The cumulative probability of getting upto x successes in n trials") print(separator)
print("bnd_from(x, n, p) - The cumulative probability of getting from x successes in n trials") print("Binomial Distribution")
print("gd(x, p, q) - The geometric distribution") print("bnd(x, n, p)")
print("gd_mean(p) - The mean of the geometric distribution") print("bnd_mean(n, p)")
print("gd_var(p) - The variance of the geometric distribution") print("bnd_var(n, p)")
print("gd_std(p) - The standard deviation of the geometric distribution") print("bnd_std(n, p)")
print("gd_upto(x, p) - The cumulative probability of getting upto x trials until the first success") print("bnd_leq(x, n, p)")
print("gd_from(x, p) - The cumulative probability of getting from x trials until the first success") print("bnd_lt(x, n, p)")
print("hgd(x, N, n, k) - The hyper geometric distribution") print("bnd_geq(x, n, p)")
print("hgd_mean(N, n, k) - The mean of the hyper geometric distribution") print("bnd_gt(x, n, p)")
print("hgd_var(N, n, k) - The variance of the hyper geometric distribution") print(separator)
print("hgd_std(N, n, k) - The standard deviation of the hyper geometric distribution") print("Geometric Distribution")
print( print("gd(x, p, q)")
"hgd_upto(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("gd_mean(p)")
print( print("gd_var(p)")
"hgd_from(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("gd_std(p)")
print("pd(x, l) - The poisson distribution") print("gd_leq(x, p, q)")
print("pd_mean(l) - The mean of the poisson distribution") print("gd_lt(x, p, q)")
print("pd_var(l) - The variance of the poisson distribution") print("gd_geq(x, p, q)")
print("pd_std(l) - The standard deviation of the poisson distribution") print("gd_gt(x, p, q)")
print("pd_upto(x, l) - The cumulative probability of getting upto x occurrences") print(separator)
print("pd_from(x, l) - The cumulative probability of getting from x occurrences") print("Hyper Geometric Distribution")
print("hgd(x, N, n, k)")
print("hgd_mean(N, n, k)")
print("hgd_var(N, n, k)")
print("hgd_std(N, n, k)")
print("hgd_leq(x, N, n, k)")
print("hgd_lt(x, N, n, k)")
print("hgd_geq(x, N, n, k)")
print("hgd_gt(x, N, n, k)")
print(separator)
print("Poisson Distribution")
print("pd(x, l)")
print("pd_mean(l)")
print("pd_var(l)")
print("pd_std(l)")
print("pd_leq(x, l)")
print("pd_lt(x, l)")
print("pd_geq(x, l)")
print("pd_gt(x, l)")
print(separator)
print("Sample Mean")
print("sample_mean_e(u)")
print("sample_mean_std(u, n)")
print("sample_mean_var(u, n)")
print("z_score(x, u, s)")
print("z_to_p(z)")
print("p_to_z(p)")
print("gamma(u, n)")
print("alpha(u, n)")
print("margin_of_error(a, s, n)")
print("confidence_interval(x, a, s, n)")

View File

@ -34,9 +34,12 @@ def n(A):
def man(): def man():
"""
Prints the manual for the module.
"""
print("This module contains functions for computing the total probability of events.") print("This module contains functions for computing the total probability of events.")
print("The functions are:") print("The functions are:")
print("i(A, B) - The intersection of A and B") print("i(A, B)")
print("u(A, B) - The union of A and B") print("u(A, B)")
print("g(A, B) - The conditional probability of A given B") print("g(A, B)")
print("n(A) - The negation of A") print("n(A)")

105
netcentric.py Normal file
View File

@ -0,0 +1,105 @@
# Calculate internet checksum for any arbitrary length variable amount of binary numbers
def checksum(*args):
length = len(bin(args[0])) - 2
result = 0
for arg in args:
result += arg
if result > (2 ** length) - 1:
result = (result & ((2 ** length) - 1)) + 1
return result ^ ((2 ** length) - 1)
def e2e_delay(P, L, N, R):
# P = propagation speed
# L = packet length
# N = number of packets
# R = transmission rate
return (P - 1) * (L / R) + N * (L / R)
def estimate_e2e_delay(PS, T):
# PS = packet size
# T = Throughput
return PS / T
def trans_delay(L, R):
# L = packet length
# R = transmission rate
return L / R
def prop_delay(P, L):
# P = propagation speed
# L = packet length
return P * L
def traffic_intensity(L, pps, R):
# L = packet length
# pps = packets per second
# R = transmission rate
return (L * pps) / R
def cs_time(N, F, U):
# N = Number of copies
# F = File size
# U = Server upload rate
return (N * F) / U
def cs_time_n_clients(N, F, U, D):
# N = Number of copies
# F = File size
# U = Server upload rate
# D = Client download rate
return max(cs_time(N, F, U), F / D)
def p2p_time(N, F, U, CD, D):
# N = Number of copies
# F = File size
# U = Server upload rate
# CU = Client upload rate
# D = Client download rate
return max((F / U), (N * F) / (U + (N * CD)), F / D)
def utilisation(L, R, RTT):
# L = packet length
# R = transmission rate
# RTT = round trip time
return (L / R) / (L / R + RTT)
def utilisation_pipeline(L, R, RTT, N):
# L = packet length
# R = transmission rate
# RTT = round trip time
# N = window size
return N / (1 + (RTT / (L / R)))
def print_byte_tables():
print("Byte Conversion Table")
print("1 B = 8 bits")
print("kB = 1024 bytes")
print("MB = 1024 kB")
print("GB = 1024 MB")
print("TB = 1024 GB")
def man():
print("checksum(0b, 0b,)")
print("e2e_delay(P, L, N, R)")
print("estimate_e2e_delay(PS, T)")
print("trans_delay(L, R)")
print("prop_delay(P, L)")
print("traffic_intensity(L, pps, R)")
print("cs_time(N, F, U)")
print("cs_time_n_clients(N, F, U, D)")
print("p2p_time(N, F, U, CD, D)")
print("utilisation(L, R, RTT)")
print("utilisation_pipeline(L, R, RTT, N)")
print("print_byte_tables()")