diff --git a/pages/Bonus.py b/pages/Bonus.py new file mode 100644 index 0000000000000000000000000000000000000000..8ec2915069885addc75210e843391872b27dc7f8 --- /dev/null +++ b/pages/Bonus.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Bonus" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_01.py b/pages/Module_01.py new file mode 100644 index 0000000000000000000000000000000000000000..87a3760ac2785d15fe921f653ef28587b2219435 --- /dev/null +++ b/pages/Module_01.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_01" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_02.py b/pages/Module_02.py new file mode 100644 index 0000000000000000000000000000000000000000..4d6028cce861a02125dd51b3ff1b6f680856a5e9 --- /dev/null +++ b/pages/Module_02.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_02" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_03.py b/pages/Module_03.py new file mode 100644 index 0000000000000000000000000000000000000000..a4ae65cbb66c9e3737ebfde06acda080d7c20d2b --- /dev/null +++ b/pages/Module_03.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_03" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_04.py b/pages/Module_04.py new file mode 100644 index 0000000000000000000000000000000000000000..22916bcbd9c4e48effbac4052b61c26d9adbfe13 --- /dev/null +++ b/pages/Module_04.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_04" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_05.py b/pages/Module_05.py new file mode 100644 index 0000000000000000000000000000000000000000..e406d294bc10113a83e67f7d955682aeb856e9a8 --- /dev/null +++ b/pages/Module_05.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_05" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_06.py b/pages/Module_06.py new file mode 100644 index 0000000000000000000000000000000000000000..d3a6dc07924af56fb53ba38ee5987abf90b1d3aa --- /dev/null +++ b/pages/Module_06.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_06" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_07.py b/pages/Module_07.py new file mode 100644 index 0000000000000000000000000000000000000000..b7534edb9c7c11d947320376157a25bca9a7a3c9 --- /dev/null +++ b/pages/Module_07.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_07" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_08.py b/pages/Module_08.py new file mode 100644 index 0000000000000000000000000000000000000000..a38eec64788085f1ae998d629e91b124f230aff6 --- /dev/null +++ b/pages/Module_08.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_08" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_09.py b/pages/Module_09.py new file mode 100644 index 0000000000000000000000000000000000000000..9eb99dd4188e14a7d15f9f8b336bb76dab359abb --- /dev/null +++ b/pages/Module_09.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_09" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_10.py b/pages/Module_10.py new file mode 100644 index 0000000000000000000000000000000000000000..7e571b3f10e2b889bf6c3a28cd74917d55b39615 --- /dev/null +++ b/pages/Module_10.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_10" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_11.py b/pages/Module_11.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_11.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_12.py b/pages/Module_12.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_12.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_13.py b/pages/Module_13.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_13.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_14.py b/pages/Module_14.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_14.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_15.py b/pages/Module_15.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_15.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_16.py b/pages/Module_16.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_16.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_17.py b/pages/Module_17.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_17.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_18.py b/pages/Module_18.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_18.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_19.py b/pages/Module_19.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_19.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Module_20.py b/pages/Module_20.py new file mode 100644 index 0000000000000000000000000000000000000000..cdaa3d2457f6743671a999d80171117d73fb6041 --- /dev/null +++ b/pages/Module_20.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Module_11" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/Overview.py b/pages/Overview.py new file mode 100644 index 0000000000000000000000000000000000000000..f5b2424afdbf334e139ec2a746a1b3b77e973c4c --- /dev/null +++ b/pages/Overview.py @@ -0,0 +1,26 @@ +CURRENT_MODULE = "Overview" + +# Imports + +import streamlit as st +import streamlit.components.v1 as components +from pages import load_pages + +if "logged_in" not in st.session_state: + pass +else: + load_pages.load_page(CURRENT_MODULE) + +if __name__ == "__main__": + load_pages.test_load() + print("<<< Module [", CURRENT_MODULE, "] Compile Successful >>>") + + + + + + + + + + diff --git a/pages/__init__.py b/pages/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7287190a7108c16f672154fb65be500851529b60 --- /dev/null +++ b/pages/__init__.py @@ -0,0 +1,14 @@ + +if __name__ == "__main__": + print("<<< __init__ Compile Successful >>>") + + + + + + + + + + + diff --git a/pages/assets/formulas.txt b/pages/assets/formulas.txt new file mode 100644 index 0000000000000000000000000000000000000000..1e8b82487e2bae9c7274cd0b030b6a2828105727 --- /dev/null +++ b/pages/assets/formulas.txt @@ -0,0 +1,221 @@ +Expander: Null Hypothesis +**The “no‐effect” or “no‐difference” assumption** + +Mathematical Notation: +H₀: θ = θ₀ (e.g. H₀: μ = 0) + +*Example (one‐sample t‐test against μ₀ = 5):* +*x = c(5.1, 4.9, 5.0, 5.2)* +*t.test(x, mu = 5)* +End Expander: +Expander: Alternative Hypothesis +**The different claim you wish to support** + +Mathematical Notation: +– Two‐sided: Hₐ: θ ≠ θ₀ +– One‐sided: Hₐ: θ > θ₀ or Hₐ: θ < θ₀ + +*Example (test if mean > 5):* +*t.test(x, mu = 5, alternative = "greater")* +*or alternative = "two.sided" (default), "greater" or "less"* +End Expander: +Expander: p-value +**Assuming H₀ is true, this is the probability of seeing data** +**in your statistical test that is at least as extreme as yours** + +Mathematical Notation: +p = P(Test statistic ≥ observed | H₀) (one‐tailed) +p = 2·P(|Test statistic| ≥ |observed| | H₀) (two‐tailed) + +R function: +returned by many tests as $p.value + +*Example (from t.test above):* +*res = t.test(x, mu = 5)* +*res$p.value* +End Expander: +Expander: Confidence Interval +A range of plausible values for the parameter calculated so that +e.g. 95% of such intervals (in repeated sampling) contain the true value +Mathematical form & notation: +CI₁₋α = [θ̂ ± z₁₋α/₂·SE(θ̂)] for normal distribution +CI₁₋α = [θ̂ ± t_{n–1,1–α/₂}·SE(θ̂)] for an unknown σ + +*Example (95% CI for mean):* +*t.test(x, conf.level = 0.95)$conf.int* +End Expander: +Expander: Significance Level (α) +**The cutoff probability for a rare result under H₀** +**if p ≤ α you reject H₀** + +Mathematical Notation: +α = P(Type I error) += P(reject H₀ | H₀ true) + +R function: +you compare to see if p.value ≤ α +and conf.level = 1–α +End Expander: +Expander: One-tailed test +**A test that looks for an effect in only one direction (greater or less)** + +Mathematical Notation: +Hₐ: θ > θ₀ or Hₐ: θ < θ₀ + +R function: +alternative = "greater" or "less" + +*Example:* +*t.test(x, mu = 5, alternative = "less")* +End Expander: +Expander: Two-tailed Test +**A test that looks for an effect in either direction** + +Mathematical Notation: +Hₐ: θ ≠ θ₀ + +R function: +alternative = "two.sided" (default) + +*Example:* +*t.test(x, mu = 5, alternative = "two.sided")* +End Expander: +Expander: Normal Distribution +**The symmetric bell‐shaped distribution** +Many statistical curves “look normal” when the sample size is large + +Mathematical Notation: +X ~ N(μ, σ²) +The amount of area under the normal curve when 2 standard deviations +away to the right is written as P(Z ≤ 2.0) = 97.72% of the curve + +R functions: +– dnorm(x, mean, sd) density +– pnorm(q, mean, sd) pdf +– qnorm(p, mean, sd) inverse of pnorm +– rnorm(n, mean, sd) n random samples + +*Example:* +*pnorm(2.0, mean = 0, sd = 1) # = 97.72%* +*qnorm(0.9772, mean = 0, sd = 1) # = 2.0 = inverse of p* +End Expander: +Expander: False Positive (Type I Error) +**Rejecting H₀ when it is actually true** +*e.g. Unicorns do not exist but the statistical test said they did* +*when the null hypothesis (H₀) or base assumption is unicorns do not exist* +Mathematical Notation: +P(Type I error) = α +End Expander: +Expander: False Negative (Type II error) +**Failing to reject H₀ when it is actually false** +*e.g. Unicorns exist but the statistical test said they do not* +*when the null hypothesis (H₀) or base assumption is unicorns do not exist* +Also called Beta(β) + +Mathematical Notation: +β = P(Type II error) +End Expander: +Expander: Power +Power is defined as 1 - Beta (β) +Reminder: Beta is a False Negative (Type II error) +so Beta is Failing to reject H₀ when it is actually false + +Mathematical Notation: +Power = 1 – β +Power = P(reject H₀ | Hₐ true) +the conditional probability of rejecting the null hypothesis +when the alternative hypothesis is true and the null is false + +R function: +use power.t.test(), power.prop.test(), etc. + +*Example (power for one‐sample t):* +*power.t.test(n = 20, delta = 1, sd = 2, sig.level = 0.05, type = "one.sample")* +End Expander: +Expander: One-Sample T-Test +**Tests whether the mean of one group differs from a given value μ₀** + +Mathematical Notation: +t = (x̄ – μ₀) / (s / √n), df = n – 1 + +R function: +t.test(x, mu, alternative, conf.level) +*where:* +– x: numeric vector +– mu: hypothesized mean μ₀ +– alternative: "two.sided"/"greater"/"less" +– conf.level: e.g. 0.95 + +*Example:* +*x = c(5.1, 4.9, 5.0, 5.2)* +*t.test(x, mu = 5, alternative = "two.sided", conf.level = 0.95)* +End Expander: +Expander: Two-Sample T-Test +**Tests whether two group means differ.** + +Mathematical Notation (unequal variances): +t = (x̄₁ – x̄₂) / √(s₁²/n₁ + s₂²/n₂), df by Welch’s formula + +R function: +t.test(x, y, var.equal = FALSE, alternative, conf.level) +*where:* +– x, y: numeric vectors for each group +– var.equal: TRUE for pooled‐variance test, FALSE for Welch’s + +*Example:* +*groupA = c(5.1,4.9,5.0,5.2)* +*groupB = c(5.3,5.4,5.2,5.5)* +*t.test(groupA, groupB, var.equal = FALSE)* +End Expander: +Expander: Z-test +**Like a t-test but uses a known σ or large-n approximation** + +Mathematical Notation: +z = (x̄ – μ₀) / (σ / √n), compare to N(0,1) + +R function: +use BSDA::z.test() or do manually (below) + +*Example* +*x = c(102, 98, 100, 101, 99)* +*n = length(x)* +*mu0 = 100* +*sigma = 2* +*z = (mean(x) - mu0) / (sigma / sqrt(n))* +*p_value = 2 * pnorm(-abs(z)) # two‐sided* +End Expander: +Expander: Chi-Squared Test of Independence +**Tests whether two Categorical variables are related** + +Mathematical Notation: +χ² = Σ_{i,j} (O_{i,j} – E_{i,j})² / E_{i,j}, df = (rows–1)(cols–1) + +R function: +chisq.test(x, correct = TRUE/FALSE) +*where:* +– x: contingency table (matrix or table) +– correct: apply Yates’s continuity correction for 2×2 tables + +*Example:* +*tbl = matrix(c(12, 5,7, 16), nrow = 2,* +* dimnames = list(Gene = c("A","B"),* +* Outcome = c("Yes","No")))* +*chisq.test(tbl, correct = FALSE)* +End Expander: +Expander: Chi-Squared Goodness-of-Fit Test (Frequencies) +**Tests if observed sample counts match expected proportions** + +Mathematical Notation: +χ² = Σ (O_i – E_i)² / E_i, df = k – 1 + +R function: +chisq.test(x, p) +*where:* +– x: vector of observed counts +– p: vector of hypothesized probabilities (sum to 1) + +*Example:* +*observed = c(50, 30, 20)* +*expected_probs = c(0.5, 0.3, 0.2)* +*chisq.test(observed, p = expected_probs)* +End Expander: \ No newline at end of file diff --git a/pages/assets/logo.jpg b/pages/assets/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e6beb7a3a87c942553267ac24f7d8ac044727ec Binary files /dev/null and b/pages/assets/logo.jpg differ diff --git a/pages/assets/profile.txt b/pages/assets/profile.txt new file mode 100644 index 0000000000000000000000000000000000000000..914b04e43ff6aa25ebef5ee66a680d7b6e6c0faf --- /dev/null +++ b/pages/assets/profile.txt @@ -0,0 +1,17 @@ +# 🚀 Student Profile + +- **Student Name:** Charlie B +- **Department:** BMO Wealth +- **Expertise:** Intermediate + +## 🎯 Interests: +- Data science and analytics +- Predictive models +- Capital market applications + +## 🎯 Goals for Next Review: +- Complete topics in **Supervised Learning**. +- Begin study on Advanced Optimization Methods. +- Initiate **Computer Vision** topics. + +** Keep up the excellent work ** diff --git a/pages/assets/progress.txt b/pages/assets/progress.txt new file mode 100644 index 0000000000000000000000000000000000000000..cdef1476e32fe71130a57e782d8e980cb154b3aa --- /dev/null +++ b/pages/assets/progress.txt @@ -0,0 +1,43 @@ +# 🚀 Progress Report + +- **Student Name:** +- **Enrollment Date:** Sept 15, 2025 +- **Report Date:** Nov 2, 2025 + +--- + +# 📚 Progress Overview +Completed topics are marked with a checkmark (✔️), +while incomplete or pending topics remain unchecked. + +## 📈 Overall Progress Summary + +| Curriculum Area | Completion (%) | +|------------------------------|----------------| +| Overview | 100% | +| Inference Concepts | 100% | +| One and Two-Tailed Tests | 100% | +| Mathematical Concepts | 75% | +| Normal Distribution | 75% | +| T-tests | 70% | +| Paired T-tests | 65% | +| Chi-Squared Independence | 0% | +| Chi-Squared Frequencies | 0% | +| Summary | 0% | + +--- + +## ✅ Statistics and Probability +| Subtopic | Status | +|----------------------------------------|---------| +| Measures of Central Tendency | ✔️ | +| Variance and Standard Deviation | ✔️ | +| Probability Distributions | ✔️ | +| Central Limit Theorem & Applications | ✔️ | +| Hypothesis Testing | ✔️ | +| Bayesian Statistics | | + +--- + +**Keep up the excellent work, you're well on your way** +**to mastering this module! 🚀** \ No newline at end of file diff --git a/pages/load_pages.py b/pages/load_pages.py new file mode 100644 index 0000000000000000000000000000000000000000..d0e6c1166e397abbf20f0809c4c9894071fd668e --- /dev/null +++ b/pages/load_pages.py @@ -0,0 +1,483 @@ + +# ========================================================================= +# Imports +# ========================================================================= + +import os, time, re, sys +import numpy as np +from openai import OpenAI + +import streamlit as st +import streamlit.components.v1 as components + +import urllib.parse + +# ========================================================================= +# AI Response Dialog +# ========================================================================= + +@st.dialog("🤖 Response") +def AI_gen_response(prompt): + + MIN_PROMPT_LENGTH = 6 + + if len(prompt.strip()) < MIN_PROMPT_LENGTH: + print("ERROR: AI prompt too short") + st.markdown("*Your input is too short, please retype ...*") # clear output and print statement in italics + return + + # AI API Call + + with st.spinner("Thinking ...", show_time=True): + + st.markdown("*Thinking about your response ...*") # clear output and print statement in italics + + full_text = [] + client = st.session_state["openai_client"] + + stream = client.chat.completions.create( + model = st.session_state["openai_model"], + messages = [{"role": "user", "content": prompt}], # {"role": "admin", "content": admin_prompt}, + stream = True, + ) + + for chunk in stream: # chunk is a ChatCompletionChunk + delta = chunk.choices[0].delta # “what changed since the prev. chunk” + if delta.content: # sometimes None (e.g. first chunk) + print(delta.content, end="", flush=True) # live printing + full_text.append(delta.content) # keep it if you need it + response = "".join(full_text) # the entire response as one string + + format_text(response, input_directory="") # there is no input directory for the OpenAI API + + return response # return the response for more programming if needed + + +# ========================================================================= +# Symbolic Lookup Table - Greek (lower and upper, math and equality signs) +# ========================================================================= + +SYMBOLS: dict[str, str] = { + r"\alpha": "α", r"\beta": "β", r"\gamma": "γ", r"\delta": "δ",r"\epsilon": "ε",r"\zeta": "ζ", r"\eta": "η", r"\theta": "θ", r"\iota": "ι", r"\kappa": "κ", r"\lambda": "λ", r"\mu": "μ", r"\nu": "ν", r"\xi": "ξ", r"\omicron": "ο", r"\pi": "π", r"\rho": "ρ", r"\sigma": "σ", r"\tau": "τ", r"\upsilon": "υ", r"\phi": "φ", r"\chi": "χ", r"\psi": "ψ", r"\omega": "ω", + r"\Alpha": "Α", r"\Beta": "Β", r"\Gamma": "Γ", r"\Delta": "Δ", r"\Epsilon": "Ε",r"\Zeta": "Ζ", r"\Eta": "Η", r"\Theta": "Θ", r"\Iota": "Ι", r"\Kappa": "Κ", r"\Lambda": "Λ", r"\Mu": "Μ", r"\Nu": "Ν", r"\Xi": "Ξ", r"\Omicron": "Ο", r"\Pi": "Π", r"\Rho": "Ρ", r"\Sigma": "Σ", r"\Tau": "Τ", r"\Upsilon": "Υ", r"\Phi": "Φ", r"\Chi": "Χ", r"\Psi": "Ψ", r"\Omega": "Ω", + r"\pm": "±", r"\times": "×", r"\div": "÷", r"\cdot": "·", r"\sqrt": "√", r"\sum": "∑", r"\prod": "∏", r"\int": "∫", r"\infty": "∞", r"\partial": "∂", r"\nabla": "∇", r"\le": "≤", r"\ge": "≥", r"\neq": "≠", r"\approx": "≈", + r"\and": "∧", r"\or": "∨", r"\neg": "¬", r"\in": "∈", r"\notin": "∉", r"\subset": "⊂", r"\subseteq": "⊆",r"\supset": "⊃", r"\supseteq": "⊇", r"\cup": "∪", r"\cap": "∩", r"\angle": "∠", r"\triangle": "△", + r"\therefore": "∴", r"\because": "∵", r"\propto": "∝", r"\parallel": "∥",r"\perp": "⊥", r"\degree": "°", r"\bullet": "•", r"\rightarrow": "→", r"\leftarrow": "←", r"\uparrow": "↑", + r"\downarrow": "↓", r"\leftrightarrow": "↔", r"\ell": "ℓ", r"\Re": "ℜ", r"\Im": "ℑ", r"\aleph": "ℵ", r"\wp": "℘" +} + +# ===================================================== +# Functions - to convert symbol tags to symbols +# ===================================================== + +FORMULA_REGEX = re.compile(r'\\[A-Za-z]+') +BOLD_TXT_REGEX = re.compile(r'\\[A-Za-z]+{([^{}]*)}') + +def test_load(): + # print("load_pages - testing external call") # DEBUG + pass + +def latex_to_unicode(text: str, table: dict[str, str] = SYMBOLS) -> str: + return FORMULA_REGEX.sub(lambda m: table.get(m.group(0), m.group(0)), text) + +def latex_bold_to_markdown(text: str) -> str: + return BOLD_TXT_REGEX.sub(r'**\1**', text) + +# ===================================================================================== +# format_text - loads a text file, formats it and places streamlit components +# based on instructions from the text file (lesson/learning module) file +# ===================================================================================== + +def format_text(input_text, input_directory=""): + + # -------------------------------------------------------------------------------- + # Uses text file as input - input_text + # within the text are instructional tags used to build the content for the page + # This code parses the text line-by-line to determine what to display for the page + # -------------------------------------------------------------------------------- + + # Parse the raw text for certain backslashes for mathematical formulae and + # instruct the program to call the st.latex function to render + + input_text = input_text.replace("\\[\n",'st.latex("') + input_text = input_text.replace("\\[",'st.latex("') + input_text = input_text.replace("\n\\]\n",'")\n') + input_text = input_text.replace("\\]\n",'")\n') + + # Split the text line by line to parse + + lines = input_text.split("\n") + idx = 0 + + # Scan each line + + while(idx", height=600, width = 700, scrolling=True) + + # --------------------------------------------------------------------- + # A Cognitive Checkpoint is a point in the module where the student is asked to + # write a briefing that demonstrates whether they understand a concept + # The briefing is sent to the AI for evaluation + # Constructing this as a multi-line input gives the ability to enhance the admin prompt + # which will need custom instructions based on the checkpoint + # --------------------------------------------------------------------- + + elif line[:len("Cognitive Checkpoint:")]=="Cognitive Checkpoint:": + + question_key = line[23:31] # Unique key for response + question = "" # Multi-line question for cognitive response + + for c, question_line in enumerate(lines[idx+1:]): + if question_line[:len("End Cognitive Checkpoint:")]=="End Cognitive Checkpoint:": + idx+=1 # skip this line + break + else: + question += question_line + "\n" + + idx+=c # Set global counter to skip past the lines already read in lookahead mode + + st.write(question) # Write question + + # Provide area to write response + + with st.expander(label = "Cognitive Checkpoint:", expanded=True, icon=":material/live_help:"): + + if answer_text := st.text_area(label="Answer to Question", value="", height=150, key=question_key): # := is the "Walrus Operator - assigns, checks and runs function" + + admin_prompt = ''' + You are a teacher. + Evaluate the following statement delimited in square brackets for accuracy from your student. + For each logical statement, grade it as one of three options: correct, misunderstanding, incorrect. + For each statement cite the grade, student comment, your response, corrected response if required. + Provide a summary at the end, not in table form, with the grade and a summary of the student comment + ''' + + # Return your assessment in JSON format # Optional - for eval purposes + + AI_question = admin_prompt + "[" + answer_text + "]" + + try: + AI_gen_response(prompt=AI_question) + except Exception as e: + print("ERROR: Dialog box open. Message suppressed\n",str(e)) + + + # ------------------------------------------ + # DEFAULT Instructions if no tag is provided + # ------------------------------------------ + + else: + line_unicode = latex_to_unicode(line) # convert text to unicode symbols if needed + line_bold = latex_bold_to_markdown(line_unicode) # bold text + # print(line_bold) + st.markdown(line_bold) # markdown that line + + # ------------------------------------------ + # Increment line counter / go to next line + # ------------------------------------------ + + idx+=1 + + + # END Parse text + + return + + +# ===================================================== +# Load Content +# ===================================================== + +def load_content(module): + + input_directory = os.path.join(st.session_state["start_dir"],"pages","modules",module) + + # if file exists - otherwise do nothing + content_str = open(os.path.join(input_directory,"Overview.txt"), "r", encoding="UTF-8").read() + tab_content = content_str.split("---\n") + + # Display Module title if one is given, otherwise blank + + title = tab_content[0].strip() + if len(title)>0: + st.subheader(title) + + # Draw tabs according to page count + + tab_list = ["🚀"+str(idx+1) for idx,x in enumerate(tab_content[1:])] + tabs = st.tabs(tab_list) + + # For each tab, render the appropriate content + + for idx,tab in enumerate(tabs): + with tab: + format_text(tab_content[idx+1], input_directory) + + # Add AI Bot Interface to bottom of page + +## if prompt := st.chat_input("I would like to learn about ..."): +## AI_gen_response(prompt=prompt) + + return + +# ===================================================== +# Load Page +# ===================================================== + +def load_page(module): + + if "logged_in" not in st.session_state: # User is not logged in - don't load content + return + + # -------------------------------------------------- + # Sidebar + # -------------------------------------------------- + + asset_dir = os.path.join(st.session_state["start_dir"],"pages","assets") + + with st.sidebar: + + with st.expander("Lessons", expanded=True, icon=":material/library_books:"): + + st.page_link("pages/Overview.py", label="Laurier Years", icon=":material/rocket_launch:") + st.page_link("pages/Module_01.py", label="World War 1", icon=":material/rocket_launch:") +## st.page_link("pages/Module_02.py", label="Mathematical Foundations", icon=":material/difference:") +## st.page_link("pages/Module_03.py", label="The Normal Distribution", icon=":material/cadence:") +## st.page_link("pages/Module_04.py", label="One Sided Tests", icon=":material/compare:") +## st.page_link("pages/Module_05.py", label="Tests for Two Samples", icon=":material/speed_2x:") +## st.page_link("pages/Module_06.py", label="Paired Tests", icon=":material/speed_2x:") +## st.page_link("pages/Module_07.py", label="Testing Independence", icon=":material/superscript:") +## st.page_link("pages/Module_08.py", label="Testing Frequencies", icon=":material/superscript:") +## st.page_link("pages/Module_09.py", label="Summary", icon=":material/format_list_numbered:") +## st.page_link("pages/Overview.py", label="Amelia History Quiz", icon=":material/rocket_launch:") + +## with st.expander("Ask the AI", expanded=False, icon=":material/smart_toy:"): +## +## if AI_question := st.text_input(label="Ask the AI", value="", key="AI_Question"): +## try: +## AI_gen_response(prompt=AI_question) +## except Exception as e: +## print("ERROR: Dialog box open. Message suppressed\n",str(e)) +## +## # Callback function to clear text from previous AI question inputs +## +## def set_name(new_text): +## st.session_state.AI_Question = new_text +## +## st.button('Clear',on_click=set_name, args=['']) + +## with st.expander("R Calculator", expanded=False, icon=":material/calculate:"): +## components.html("", height=550, width = 550, scrolling=True) +## +## with st.expander("Statistical Glossary", expanded=False, icon=":material/functions:"): +## overview_dir = os.path.join(st.session_state["start_dir"],"pages","assets") +## overview_str = open(os.path.join(overview_dir,"formulas.txt"), "r", encoding="UTF-8").read() +## format_text(overview_str, overview_dir) +## +## with st.expander("Your Progress",expanded=False, icon=":material/preliminary:"): +## progress_str = open(os.path.join(st.session_state["start_dir"],"pages","assets","progress.txt"), "r", encoding="UTF-8").read() +## st.markdown(progress_str) + + with st.expander("Logout", expanded=False, icon=":material/logout:"): # + if st.button("Logout"): + del st.session_state["logged_in"] + st.switch_page("app.py") # switch to main page + st.rerun() # should invoke login dialog + + # END Sidebar + + # -------------------------------------------------- + # Main Screen Content - e.g. Pages with Tabs + # -------------------------------------------------- + + if "logged_in" not in st.session_state: # check if user has logged out with sidebar + pass + else: + load_content(module) # otherwise load and provide access to the content + +# ================================================= +# Standalone Code if Program is Run as Main +# ================================================= + +if __name__ == "__main__": + pass + diff --git a/pages/modules/Bonus/Overview.txt b/pages/modules/Bonus/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Bonus/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Copy_Overview.bat b/pages/modules/Copy_Overview.bat new file mode 100644 index 0000000000000000000000000000000000000000..f3abab045c1089bfb478a4987ea636295f0a3308 --- /dev/null +++ b/pages/modules/Copy_Overview.bat @@ -0,0 +1,21 @@ +copy overview.txt c:.\Module_01 +copy overview.txt c:.\Module_02 +copy overview.txt c:.\Module_03 +copy overview.txt c:.\Module_04 +copy overview.txt c:.\Module_05 +copy overview.txt c:.\Module_06 +copy overview.txt c:.\Module_07 +copy overview.txt c:.\Module_08 +copy overview.txt c:.\Module_09 +copy overview.txt c:.\Module_10 +copy overview.txt c:.\Module_11 +copy overview.txt c:.\Module_12 +copy overview.txt c:.\Module_13 +copy overview.txt c:.\Module_14 +copy overview.txt c:.\Module_15 +copy overview.txt c:.\Module_16 +copy overview.txt c:.\Module_17 +copy overview.txt c:.\Module_18 +copy overview.txt c:.\Module_19 +copy overview.txt c:.\Module_20 +copy overview.txt c:.\Overview \ No newline at end of file diff --git a/pages/modules/Module_01/Overview.txt b/pages/modules/Module_01/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..7be54f4c9d9311c4f1f92c2e6f43fa2e0f4ff5b6 --- /dev/null +++ b/pages/modules/Module_01/Overview.txt @@ -0,0 +1,5 @@ +Canadian History Flashcards +--- +HTML: flashcards01.html +--- +HTML: flashcards02.html diff --git a/pages/modules/Module_01/flashcards - template.html b/pages/modules/Module_01/flashcards - template.html new file mode 100644 index 0000000000000000000000000000000000000000..74a7b0030fed32e069c9c92104065db7095a79b7 --- /dev/null +++ b/pages/modules/Module_01/flashcards - template.html @@ -0,0 +1,148 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/pages/modules/Module_01/flashcards01.html b/pages/modules/Module_01/flashcards01.html new file mode 100644 index 0000000000000000000000000000000000000000..daea8090679eaddb2b64a533b954988a9433c4cb --- /dev/null +++ b/pages/modules/Module_01/flashcards01.html @@ -0,0 +1,212 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + \ No newline at end of file diff --git a/pages/modules/Module_01/flashcards02.html b/pages/modules/Module_01/flashcards02.html new file mode 100644 index 0000000000000000000000000000000000000000..f703bc40e3cf5d9ba33326d37adf1d2ddcc40e81 --- /dev/null +++ b/pages/modules/Module_01/flashcards02.html @@ -0,0 +1,215 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + \ No newline at end of file diff --git a/pages/modules/Module_02/Overview.txt b/pages/modules/Module_02/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_02/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_03/Overview.txt b/pages/modules/Module_03/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_03/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_04/Overview.txt b/pages/modules/Module_04/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_04/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_05/Overview.txt b/pages/modules/Module_05/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_05/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_06/Overview.txt b/pages/modules/Module_06/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_06/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_07/Overview.txt b/pages/modules/Module_07/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_07/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_08/Overview.txt b/pages/modules/Module_08/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_08/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_09/Overview.txt b/pages/modules/Module_09/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_09/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_10/Overview.txt b/pages/modules/Module_10/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_10/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_11/Overview.txt b/pages/modules/Module_11/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_11/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_12/Overview.txt b/pages/modules/Module_12/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_12/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_13/Overview.txt b/pages/modules/Module_13/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_13/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_14/Overview.txt b/pages/modules/Module_14/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_14/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_15/Overview.txt b/pages/modules/Module_15/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_15/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_16/Overview.txt b/pages/modules/Module_16/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_16/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_17/Overview.txt b/pages/modules/Module_17/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_17/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_18/Overview.txt b/pages/modules/Module_18/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_18/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_19/Overview.txt b/pages/modules/Module_19/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_19/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Module_20/Overview.txt b/pages/modules/Module_20/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Module_20/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Overview.txt b/pages/modules/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdce405f0b74fde81e03842e2ae127ba3d4af061 --- /dev/null +++ b/pages/modules/Overview.txt @@ -0,0 +1,5 @@ +Title +--- +#### Blank Page +--- +#### Last Page diff --git a/pages/modules/Overview/Overview.txt b/pages/modules/Overview/Overview.txt new file mode 100644 index 0000000000000000000000000000000000000000..62bbb1224a2da29c16ba6be5465ac56b13454dd7 --- /dev/null +++ b/pages/modules/Overview/Overview.txt @@ -0,0 +1,11 @@ +Canadian History Flashcards +--- +HTML: flashcards01.html +--- +HTML: flashcards02.html +--- +HTML: flashcards03.html +--- +HTML: flashcards04.html +--- +HTML: flashcards05.html diff --git a/pages/modules/Overview/flashcards - template.html b/pages/modules/Overview/flashcards - template.html new file mode 100644 index 0000000000000000000000000000000000000000..74a7b0030fed32e069c9c92104065db7095a79b7 --- /dev/null +++ b/pages/modules/Overview/flashcards - template.html @@ -0,0 +1,148 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/pages/modules/Overview/flashcards01.html b/pages/modules/Overview/flashcards01.html new file mode 100644 index 0000000000000000000000000000000000000000..bca5860bcf2ec4c88f8b7095a1f06c1dddf0eb97 --- /dev/null +++ b/pages/modules/Overview/flashcards01.html @@ -0,0 +1,171 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + \ No newline at end of file diff --git a/pages/modules/Overview/flashcards02.html b/pages/modules/Overview/flashcards02.html new file mode 100644 index 0000000000000000000000000000000000000000..6847d935e634e759e7ef57a44b08e834ead39087 --- /dev/null +++ b/pages/modules/Overview/flashcards02.html @@ -0,0 +1,243 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + \ No newline at end of file diff --git a/pages/modules/Overview/flashcards03.html b/pages/modules/Overview/flashcards03.html new file mode 100644 index 0000000000000000000000000000000000000000..727a796c58d56f9cb781bab4513be3d72b540857 --- /dev/null +++ b/pages/modules/Overview/flashcards03.html @@ -0,0 +1,285 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/pages/modules/Overview/flashcards04.html b/pages/modules/Overview/flashcards04.html new file mode 100644 index 0000000000000000000000000000000000000000..ba7a7086c7989e27e7ae37baf31c555041b0b664 --- /dev/null +++ b/pages/modules/Overview/flashcards04.html @@ -0,0 +1,214 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + + + + + + \ No newline at end of file diff --git a/pages/modules/Overview/flashcards05.html b/pages/modules/Overview/flashcards05.html new file mode 100644 index 0000000000000000000000000000000000000000..ca5ae471f5b0f0d578f8b2430f465601484b621c --- /dev/null +++ b/pages/modules/Overview/flashcards05.html @@ -0,0 +1,234 @@ + + + + + Canadian History Flashcards + + + +
+
✔
+
+
+ +
+ + +
+ + + + + + + + + \ No newline at end of file