{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "de529ce1",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "\n",
    "def plot_empty_point(x, y, color):\n",
    "    plt.plot(x, y, marker=\"o\", color=color, markerfacecolor=\"white\")\n",
    "def plot_full_point(x, y, color):\n",
    "    plt.plot(x, y, marker=\"o\", color=color)\n",
    "def plot_discontinuity(x, y0, y1):\n",
    "    plt.plot([x, x], [y0, y1], color=\"gray\", linestyle=\"dotted\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "bce7f1ab",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Example 1\n",
    "\n",
    "def plot_func_example_1(i=0, n=1000, color=\"red\"):\n",
    "    \n",
    "    x0 = 2 * i * np.pi\n",
    "    x1 = x0 + np.pi\n",
    "    x2 = x1 + np.pi\n",
    "    \n",
    "    x = np.linspace(x0, x1, int(n/2))\n",
    "    plt.plot(x, np.full_like(x, 1.0), color=color)\n",
    "    \n",
    "    x = np.linspace(x1, x2, int(n/2))\n",
    "    plt.plot(x, np.zeros_like(x), color=color)\n",
    "    \n",
    "    plot_full_point(x0, 1.0, color)\n",
    "    plot_full_point(x1, 0.0, color)\n",
    "    \n",
    "    plot_empty_point(x1, 1.0, color)\n",
    "    plot_empty_point(x2, 0.0, color)\n",
    "    \n",
    "    offset = 0.1\n",
    "    for x in [x0, x1, x2]:\n",
    "        plot_discontinuity(x, -offset, 1.0 + offset)\n",
    "\n",
    "def get_Fourier_coefficients_example_1(N=10):\n",
    "    a0 = 1.0\n",
    "    an = np.zeros(N, dtype=np.float64)\n",
    "    bn = np.zeros(N, dtype=np.float64)\n",
    "    \n",
    "    ns = np.arange(1, N+1)\n",
    "    bn[::2] = (2.0 / np.pi) / ns[::2]\n",
    "    \n",
    "    return a0, an, bn\n",
    "\n",
    "def get_T_example_1():\n",
    "    return 2.0 * np.pi\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "88613648",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Example 2\n",
    "\n",
    "def plot_func_example_2(i=0, n=1000, color=\"red\"):\n",
    "    \n",
    "    x0 = 2 * i * np.pi\n",
    "    x1 = x0 + 2.0 * np.pi\n",
    "    \n",
    "    x = np.linspace(x0, x1, n)\n",
    "    plt.plot(x, np.linspace(0, 2.0*np.pi, n), color=color)\n",
    "    \n",
    "    plot_full_point(x0, 0.0, color)\n",
    "    plot_empty_point(x1, 2.0*np.pi, color)\n",
    "    \n",
    "    offset = 0.25\n",
    "    for x in [x0, x1]:\n",
    "        plot_discontinuity(x, -offset, 2.0 * np.pi + offset)\n",
    "\n",
    "    \n",
    "def get_Fourier_coefficients_example_2(N=10):\n",
    "    a0 = 2.0 * np.pi\n",
    "    an = np.zeros(N, dtype=np.float64)\n",
    "\n",
    "    ns = np.arange(1, N+1)\n",
    "    bn = -2.0 / ns\n",
    "    \n",
    "    return a0, an, bn\n",
    "\n",
    "def get_T_example_2():\n",
    "    return 2.0 * np.pi\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "304e4100",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Example 3 (just a modification of Example 1)\n",
    "\n",
    "\n",
    "def plot_func_example_3(i=0, n=1000, color=\"red\"):\n",
    "    \n",
    "    x0 = 2 * i * np.pi\n",
    "    x1 = x0 + np.pi\n",
    "    x2 = x1 + np.pi\n",
    "    x3 = 0.5 * (x1 + x2)\n",
    "    \n",
    "    x = np.linspace(x0, x1, int(n/2))\n",
    "    plt.plot(x, np.full_like(x, 1.0), color=color)\n",
    "    \n",
    "    x = np.linspace(x1, x2, int(n/2))\n",
    "    plt.plot(x, np.zeros_like(x), color=color)\n",
    "    \n",
    "    plot_full_point(x0, 1.0, color)\n",
    "    \n",
    "    plot_empty_point(x1, 0.0, color)\n",
    "    plot_empty_point(x1, 1.0, color)\n",
    "    plot_full_point(x1, 1.2, color=\"blue\")\n",
    "\n",
    "    plot_empty_point(x2, 0.0, color)\n",
    "    \n",
    "    plot_empty_point(x3, 0.0, color)\n",
    "    plot_full_point(x3, 0.25, color=\"blue\")\n",
    "    \n",
    "    offset = 0.25 \n",
    "    for x in [x0, x1, x2, x3]:\n",
    "        plot_discontinuity(x, -offset, 1.0 + offset)\n",
    "\n",
    "    \n",
    "def get_Fourier_coefficients_example_3(N=10):\n",
    "    return get_Fourier_coefficients_example_1()\n",
    "\n",
    "def get_T_example_3():\n",
    "    return get_T_example_1()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "5ead1aa5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Evaluate Fourier series.\n",
    "def eval_Fourier(a0, an, bn, T, x):\n",
    "    res = np.full_like(x, 0.5 * a0)\n",
    "    \n",
    "    for i in range(an.size):\n",
    "        res += an[i] * np.cos((2.0 * np.pi * (i+1) / T) * x)\n",
    "    for i in range(bn.size):\n",
    "        res += bn[i] * np.sin((2.0 * np.pi * (i+1) / T) * x)\n",
    "    \n",
    "    return res\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "4784cd23",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "example = 1\n",
    "nTs = 4\n",
    "nvis_pts = 1000\n",
    "N_fourier_coeffs = 150\n",
    "plot_Fourier = True\n",
    "\n",
    "if example == 1:\n",
    "    T = get_T_example_1()\n",
    "    func_plotter = plot_func_example_1\n",
    "    get_coeffs = get_Fourier_coefficients_example_1\n",
    "elif example == 2:\n",
    "    T = get_T_example_2()\n",
    "    func_plotter = plot_func_example_2\n",
    "    get_coeffs = get_Fourier_coefficients_example_2\n",
    "elif example == 3:\n",
    "    T = get_T_example_3()\n",
    "    func_plotter = plot_func_example_3\n",
    "    get_coeffs = get_Fourier_coefficients_example_3\n",
    "else:\n",
    "    raise ValueError(f\"Invalid example number {example}\")\n",
    "\n",
    "\n",
    "plt.figure()\n",
    "for i in range(nTs):\n",
    "    func_plotter(i=i, n=nvis_pts)\n",
    "    \n",
    "if plot_Fourier:\n",
    "    a0, an, bn = get_coeffs(N=N_fourier_coeffs)\n",
    "    x = np.linspace(0, nTs * T, nvis_pts * nTs)\n",
    "    plt.plot(x, eval_Fourier(a0, an, bn, T, x))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3077a3b8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
