{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "8c70a50e-1cd0-4a93-89f6-92e2d3127211",
   "metadata": {},
   "source": [
    "# Architecture"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c17cdef-b150-4a3c-8137-9191b5bf6874",
   "metadata": {},
   "source": [
    "## Clearning tools \n",
    "MyForestplot prepares cleaning tools for preparing dataframe used for forestplot. These tools are mainly designed to use results of statsmodels results. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c650b469-dd5a-45c0-806a-ae945c9504af",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Last updated: Thu Sep 15 2022\n",
      "\n",
      "Python implementation: CPython\n",
      "Python version       : 3.9.7\n",
      "IPython version      : 8.0.1\n",
      "\n",
      "graphviz: not installed\n",
      "\n",
      "myforestplot: 0.2.1\n",
      "numpy       : 1.21.5\n",
      "pandas      : 1.4.1\n",
      "statsmodels : 0.13.2\n",
      "matplotlib  : 3.5.1\n",
      "\n",
      "Watermark: 2.3.1\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import statsmodels.api as sm\n",
    "import statsmodels.formula.api as smf\n",
    "\n",
    "import myforestplot as mfp\n",
    "\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "%load_ext watermark\n",
    "%watermark -n -u -v -iv -w -p graphviz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d9c3701e-d1d8-462e-be0e-d2eaf17e1adc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization terminated successfully.\n",
      "         Current function value: 0.509889\n",
      "         Iterations 6\n"
     ]
    }
   ],
   "source": [
    "data = pd.read_csv(\"titanic.csv\")\n",
    "data = data[[\"survived\", \"pclass\", \"sex\", \"age\", \"embark_town\"]]\n",
    "data = data.dropna()\n",
    "res = smf.logit(\"survived ~ sex + age + embark_town\", data=data).fit()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19e89cb4-79ec-4a3a-bb3f-cfe1d34987c6",
   "metadata": {},
   "source": [
    "###  statsmodels_pretty_result_dataframe\n",
    "This function converts statsmodelsresult into dataframe shape, adding number of observations for each category. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ac6283c0-3687-48d6-9f67-6e6ced380e48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>category</th>\n",
       "      <th>item</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>risk</th>\n",
       "      <th>nobs</th>\n",
       "      <th>risk_pretty</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>age</td>\n",
       "      <td>age</td>\n",
       "      <td>0.979300</td>\n",
       "      <td>1.004771</td>\n",
       "      <td>0.991954</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.99 (0.98, 1.00)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sex</td>\n",
       "      <td>male</td>\n",
       "      <td>0.057848</td>\n",
       "      <td>0.122213</td>\n",
       "      <td>0.084082</td>\n",
       "      <td>453.0</td>\n",
       "      <td>0.08 (0.06, 0.12)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>sex</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>259.0</td>\n",
       "      <td>Ref.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>0.229654</td>\n",
       "      <td>0.581167</td>\n",
       "      <td>0.365332</td>\n",
       "      <td>554.0</td>\n",
       "      <td>0.37 (0.23, 0.58)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Cherbourg</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>130.0</td>\n",
       "      <td>Ref.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>0.057027</td>\n",
       "      <td>0.464428</td>\n",
       "      <td>0.162742</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.16 (0.06, 0.46)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      category         item         0         1      risk   nobs  \\\n",
       "3          age          age  0.979300  1.004771  0.991954    NaN   \n",
       "0          sex         male  0.057848  0.122213  0.084082  453.0   \n",
       "4          sex       female       NaN       NaN       NaN  259.0   \n",
       "2  embark_town  Southampton  0.229654  0.581167  0.365332  554.0   \n",
       "5  embark_town    Cherbourg       NaN       NaN       NaN  130.0   \n",
       "1  embark_town   Queenstown  0.057027  0.464428  0.162742   28.0   \n",
       "\n",
       "         risk_pretty  \n",
       "3  0.99 (0.98, 1.00)  \n",
       "0  0.08 (0.06, 0.12)  \n",
       "4               Ref.  \n",
       "2  0.37 (0.23, 0.58)  \n",
       "5               Ref.  \n",
       "1  0.16 (0.06, 0.46)  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "order = [\"age\", \"sex\", \"embark_town\"]\n",
    "cont_cols = [\"age\"]\n",
    "item_order = {\"embark_town\": ['Southampton', 'Cherbourg', 'Queenstown']}\n",
    "df = mfp.statsmodels_pretty_result_dataframe(data, res,  \n",
    "                                             order=order,\n",
    "                                             cont_cols=cont_cols,\n",
    "                                             item_order=item_order,\n",
    "                                             fml=\".3f\", \n",
    "                                             )\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "781e46cc-ac4d-4122-9eb4-086a1b814c62",
   "metadata": {},
   "source": [
    "\"statsmodels_pretty_result_dataframe\" is made up of 5 steps.\n",
    "1. Convert statasmodels results into dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0873a676-d6df-4f9b-b261-d2dc4f7fa3b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>category</th>\n",
       "      <th>item</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>risk</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>sex</td>\n",
       "      <td>male</td>\n",
       "      <td>0.057848</td>\n",
       "      <td>0.122213</td>\n",
       "      <td>0.084082</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>0.057027</td>\n",
       "      <td>0.464428</td>\n",
       "      <td>0.162742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>0.229654</td>\n",
       "      <td>0.581167</td>\n",
       "      <td>0.365332</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>age</td>\n",
       "      <td>age</td>\n",
       "      <td>0.979300</td>\n",
       "      <td>1.004771</td>\n",
       "      <td>0.991954</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      category         item         0         1      risk\n",
       "1          sex         male  0.057848  0.122213  0.084082\n",
       "2  embark_town   Queenstown  0.057027  0.464428  0.162742\n",
       "3  embark_town  Southampton  0.229654  0.581167  0.365332\n",
       "4          age          age  0.979300  1.004771  0.991954"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_res = mfp.statsmodels_fitting_result_dataframe(res, alpha=0.05, accessor=np.exp)\n",
    "df_res"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c8b91973-e0e2-419f-908e-20046e048111",
   "metadata": {},
   "source": [
    "If you want to obtain raw results, set accessor as lambda x: x "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0a902979-36ff-4345-a10c-c27b41491b93",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>category</th>\n",
       "      <th>item</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>risk</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>sex</td>\n",
       "      <td>male</td>\n",
       "      <td>-2.849937</td>\n",
       "      <td>-2.101986</td>\n",
       "      <td>-2.475962</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>-2.864233</td>\n",
       "      <td>-0.766950</td>\n",
       "      <td>-1.815592</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>-1.471180</td>\n",
       "      <td>-0.542717</td>\n",
       "      <td>-1.006949</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>age</td>\n",
       "      <td>age</td>\n",
       "      <td>-0.020917</td>\n",
       "      <td>0.004760</td>\n",
       "      <td>-0.008079</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      category         item         0         1      risk\n",
       "1          sex         male -2.849937 -2.101986 -2.475962\n",
       "2  embark_town   Queenstown -2.864233 -0.766950 -1.815592\n",
       "3  embark_town  Southampton -1.471180 -0.542717 -1.006949\n",
       "4          age          age -0.020917  0.004760 -0.008079"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_res2 = mfp.statsmodels_fitting_result_dataframe(res, alpha=0.05, accessor=lambda x: x)\n",
    "df_res2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba577f45-731d-4516-b341-ff33066a5e5b",
   "metadata": {},
   "source": [
    "2. Obtain number of observations for each category variable. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a24b39c0-d2e6-478a-8fe6-e142380bc861",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>category</th>\n",
       "      <th>item</th>\n",
       "      <th>nobs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sex</td>\n",
       "      <td>male</td>\n",
       "      <td>453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>sex</td>\n",
       "      <td>female</td>\n",
       "      <td>259</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>554</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Cherbourg</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>28</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      category         item  nobs\n",
       "0          sex         male   453\n",
       "1          sex       female   259\n",
       "2  embark_town  Southampton   554\n",
       "3  embark_town    Cherbourg   130\n",
       "4  embark_town   Queenstown    28"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cate_cols = [c for c in order if not c in cont_cols]\n",
    "df_nobs = mfp.count_category_frequency(data, cate_cols)\n",
    "df_nobs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6e1810e7-4675-416b-b714-2987cf9e2414",
   "metadata": {},
   "source": [
    "3. Merge statsmodels resutl and dataframe of number of observations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f34a9970-8232-4587-b798-48124c28b2c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>category</th>\n",
       "      <th>item</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>risk</th>\n",
       "      <th>nobs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sex</td>\n",
       "      <td>male</td>\n",
       "      <td>0.057848</td>\n",
       "      <td>0.122213</td>\n",
       "      <td>0.084082</td>\n",
       "      <td>453.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>0.057027</td>\n",
       "      <td>0.464428</td>\n",
       "      <td>0.162742</td>\n",
       "      <td>28.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>0.229654</td>\n",
       "      <td>0.581167</td>\n",
       "      <td>0.365332</td>\n",
       "      <td>554.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>age</td>\n",
       "      <td>age</td>\n",
       "      <td>0.979300</td>\n",
       "      <td>1.004771</td>\n",
       "      <td>0.991954</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>sex</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>259.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Cherbourg</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>130.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      category         item         0         1      risk   nobs\n",
       "0          sex         male  0.057848  0.122213  0.084082  453.0\n",
       "1  embark_town   Queenstown  0.057027  0.464428  0.162742   28.0\n",
       "2  embark_town  Southampton  0.229654  0.581167  0.365332  554.0\n",
       "3          age          age  0.979300  1.004771  0.991954    NaN\n",
       "4          sex       female       NaN       NaN       NaN  259.0\n",
       "5  embark_town    Cherbourg       NaN       NaN       NaN  130.0"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sum = pd.merge(df_res, df_nobs, on=[\"category\", \"item\"], validate=\"1:1\", how=\"outer\")\n",
    "df_sum"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f65d44ca-1064-46ff-963c-4a49af3cf74c",
   "metadata": {},
   "source": [
    "4. Sort items."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "30b385d7-c02d-4e75-8ea5-c5c449221ced",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>category</th>\n",
       "      <th>item</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>risk</th>\n",
       "      <th>nobs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>age</td>\n",
       "      <td>age</td>\n",
       "      <td>0.979300</td>\n",
       "      <td>1.004771</td>\n",
       "      <td>0.991954</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sex</td>\n",
       "      <td>male</td>\n",
       "      <td>0.057848</td>\n",
       "      <td>0.122213</td>\n",
       "      <td>0.084082</td>\n",
       "      <td>453.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>sex</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>259.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>0.229654</td>\n",
       "      <td>0.581167</td>\n",
       "      <td>0.365332</td>\n",
       "      <td>554.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Cherbourg</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>130.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>0.057027</td>\n",
       "      <td>0.464428</td>\n",
       "      <td>0.162742</td>\n",
       "      <td>28.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      category         item         0         1      risk   nobs\n",
       "3          age          age  0.979300  1.004771  0.991954    NaN\n",
       "0          sex         male  0.057848  0.122213  0.084082  453.0\n",
       "4          sex       female       NaN       NaN       NaN  259.0\n",
       "2  embark_town  Southampton  0.229654  0.581167  0.365332  554.0\n",
       "5  embark_town    Cherbourg       NaN       NaN       NaN  130.0\n",
       "1  embark_town   Queenstown  0.057027  0.464428  0.162742   28.0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sum = mfp.sort_category_item(df_sum, order=order, item_order=item_order)\n",
    "df_sum"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5f87e07-593b-41b5-91f2-72ade7a511c1",
   "metadata": {},
   "source": [
    "5. Add pretty styles of risk results. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ae00dc91-9113-451e-b680-746a1f1ed443",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>category</th>\n",
       "      <th>item</th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>risk</th>\n",
       "      <th>nobs</th>\n",
       "      <th>risk_pretty</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>age</td>\n",
       "      <td>age</td>\n",
       "      <td>0.979300</td>\n",
       "      <td>1.004771</td>\n",
       "      <td>0.991954</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.99 (0.98, 1.00)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>sex</td>\n",
       "      <td>male</td>\n",
       "      <td>0.057848</td>\n",
       "      <td>0.122213</td>\n",
       "      <td>0.084082</td>\n",
       "      <td>453.0</td>\n",
       "      <td>0.08 (0.06, 0.12)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>sex</td>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>259.0</td>\n",
       "      <td>Ref.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Southampton</td>\n",
       "      <td>0.229654</td>\n",
       "      <td>0.581167</td>\n",
       "      <td>0.365332</td>\n",
       "      <td>554.0</td>\n",
       "      <td>0.37 (0.23, 0.58)</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Cherbourg</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>130.0</td>\n",
       "      <td>Ref.</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>embark_town</td>\n",
       "      <td>Queenstown</td>\n",
       "      <td>0.057027</td>\n",
       "      <td>0.464428</td>\n",
       "      <td>0.162742</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.16 (0.06, 0.46)</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      category         item         0         1      risk   nobs  \\\n",
       "3          age          age  0.979300  1.004771  0.991954    NaN   \n",
       "0          sex         male  0.057848  0.122213  0.084082  453.0   \n",
       "4          sex       female       NaN       NaN       NaN  259.0   \n",
       "2  embark_town  Southampton  0.229654  0.581167  0.365332  554.0   \n",
       "5  embark_town    Cherbourg       NaN       NaN       NaN  130.0   \n",
       "1  embark_town   Queenstown  0.057027  0.464428  0.162742   28.0   \n",
       "\n",
       "         risk_pretty  \n",
       "3  0.99 (0.98, 1.00)  \n",
       "0  0.08 (0.06, 0.12)  \n",
       "4               Ref.  \n",
       "2  0.37 (0.23, 0.58)  \n",
       "5               Ref.  \n",
       "1  0.16 (0.06, 0.46)  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sum[\"risk_pretty\"] = mfp.add_pretty_risk_column(df_sum,\n",
    "                                                   risk=\"risk\",\n",
    "                                                   lower=0,\n",
    "                                                   upper=1,\n",
    "                                                   fml=\".2f\"\n",
    "                                                   )\n",
    "df_sum"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0bcdaa7-2d6f-4bfb-8bfe-3f038dcaf962",
   "metadata": {},
   "source": [
    "## SinmpleForestPlot \n",
    "The following is an illustration of how myforestplot works.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "fd5c89b4-4dc9-4961-826a-1610989c5ef0",
   "metadata": {},
   "outputs": [],
   "source": [
    "df = df_sum.copy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "49aa02f4-3e99-4b40-9c75-174168ff0f95",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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TRGcAOAacnNz03vvvaeKFSuWdSll4ocfftCbb76p1q1bl3UpAABcU5yqBwAAAAAWOOIEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABgwbmsCwAAAACAksrJydErr7xifz9u3Di5ubmV+no54gQAAAAAFghOAAAAAGCB4AQAAAAAFghOAAAAAGCB4AQAAAAAFghOAAAAAGCB4AQAAAAAFghOAAAAAGCB4AQAAAAAFghOAAAAAGCB4AQAAAAAFghOAAAAAGCB4AQAAAAAFghOAAAAAGCB4AQAAAAAFghOAAAAAGCB4AQAAAAAFghOAAAAAGDBuawLAAAAAICiZGZmysvLS5KUkZEhJycn/fLLL5o+fbok6amnnpKbm1up18ERJwAAAACwQHACAAAAAAsEJwDlUkZGhkaNGqXAwEC5ubmpadOm+uCDD0o8/t///rdatWold3d3Va5cWQ888IC++eabAv1++eUXTZgwQbfddptcXV0VFBSk8ePHKzs7u8TrSklJUcWKFZWcnOzQnpqaqqioKPn4+MjLy0uRkZHavXt3ieY0xujvf/+7GjZsqIoVKyogIEDDhg3TmTNnCvQ9fvy4RowYodtvv13u7u4KCgrSY489ph9++KHE2/B7n3zyifr376+QkBC5uLjIZrNd9hwffPCBmjZtKjc3NwUGBmrUqFHKyMgo0K+kn3V4eLhGjRp1JZsDALhBzJgxQ926ddPixYvtbenp6ddn5QYAyqHIyEjj4+Nj3nrrLZOQkGAGDx5sJJmlS5dajl21apWx2WymR48eZs2aNSY2NtY0aNDA+Pr6moMHDzr0jYqKMm5ububll182GzZsMJMnTzaurq7mgQceKHGtPXr0MPfff79DW3p6ugkMDDR33HGHWbFihVmzZo1p3bq1qVSpktm/f7/lnM8++6ypUKGCGTNmjImPjzezZs0y3t7eplmzZuaXX36x98vJyTH16tUzfn5+Zs6cOSYxMdG89dZbpnr16qZGjRrm/PnzJd6O3xo0aJCpV6+e6d27t2nWrJm53B83S5YsMZLM4MGDTUJC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lixx6Ddo0CDj5OTk8LykxMREM2PGDLN+/Xqzbt0689JLLxkPDw9z//33F3gu0KuvvmoWL15sEhMTzQcffGCioqJMhQoVSvSgXWOMad++vQkLCyvQnp6ebgICAkxISIiJi4sza9euNeHh4aZSpUpm3759Dn3r1Klj6tSp49A2f/58M3/+fLNp0yazYsUKM3jwYGOz2cz06dMd+v3www/Gx8fH1KhRw8ybN88kJCSYBQsWmNtvv914eno6PCz20KFDRpIZMGCA5XYdPnzYLFu2zCxbtsx07tzZSLK/37lzp0M/JycnM2jQIIfx7733npFkhg4dahITE838+fONj49PkQ/ALclnbYwxK1asMJLM119/bbkNAICydezYMePi4lKiZyPGx8fbH4Z7/PjxUqmH4ASgXLpw4YIZOXKk8ff3N66urqZJkybm/fffL9BvwIABRpI5dOiQvS0pKcm0bNnSeHt7m4oVK5rg4GAzc+ZM88svvxQY/9JLL5k6deqYihUrGh8fH9O5c2ezdevWEte5cOFC4+TkZNLS0gosO3jwoOnRo4fx9vY2Hh4epkOHDmbXrl0F+gUFBZmgoCCHtrfffts0atTIeHh4GC8vL9OmTRuzatWqQmv4/vvvTb9+/cytt95qKlasaGrXrm0efvhh88033zj027Nnj5Fkxo0bZ7ldixYtKvIJ778NXsWFsdjYWNOkSRPj6upq/P39zciRI82FCxcK9CvpZ22MMf369TMhISGW9QMAbgz5fwzz9vYuMjzFx8cbb29v+x/cSovNGGNK51gWAMBKTk6Oateureeee05jx44t63KKNXfuXI0ZM0YpKSmqXr16WZdz2c6fP6/AwEC98cYbGjJkSFmXAwAogezsbHXq1Mn+qI/Q0FANGDBA/v7+9uc85T/svG3btlq/fv0VP7zdCsEJAMrYvHnzNGnSJKWmpsrT07OsyylSr169VK9ePb388stlXcoVeemll/Thhx/q66+/LvE1YgCAsnfy5EndcsstRS53cXFRdHS0Zs+eXWqhSZL4yQEAZWzo0KE6e/asUlNT7XeUuxEtW7asrEu4Kt7e3oqJiSE0AcBNxt3d3f71xIkT9dlnn2nfvn325yF+9dVXatSoUanXwREnAAAAADeszMxMeXl5SZIyMjLk5OSkyZMna/r06ZJ+PSKV/wzA0sTtyAEAAADAAucrAAAAALhheXp66rcnyeXk5MjV1VUTJ060L78eOOIEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAABggeAEAAAAABYITgAAAOVYZmambDabbDabMjMzr3l/4I+C4AQAAAAAFghOAAAAAGDBuawLAAAAwPVz4sQJLViwQFu2bNGFCxdUqVIlRURE6LHHHlP16tXLujzghsURJwDlUkZGhkaNGqXAwEC5ubmpadOm+uCDD0o8Pj09XQMHDpSfn588PDwUFhamTZs2Fej3888/629/+5uCg4Pl6emp6tWrq0uXLtq2bVuJ15WSkqKKFSsqOTnZoT01NVVRUVHy8fGRl5eXIiMjtXv37hLPu3v3bnXs2FFeXl7y8fFRVFSUUlNTC+373//+V4MGDVJgYKAqVqyoGjVqqGfPniVeV2E2btyosLAweXh4yM/PTwMHDlR6enqJxr777rt65JFH1KBBA1WoUEG33nprof0SEhI0aNAgNWzYUJ6enqpRo4YefPBB7dq1q0Df8PBwjRo16iq2CLj5jRgxQrVq1dKLL76oDRs2aPv27dqwYYNeeOEF1apVS48//rhycnLKukzghkRwAlAuRUVFafHixZo4caLWrVunFi1aqE+fPoqNjbUc+/PPP6tDhw7atGmTZs+erdWrV6t69erq3LmztmzZ4tB3yJAhGjdunHr06KGPP/5Yc+bM0U8//aS2bdvq888/L1Gto0ePVmRkpMLCwuxtP/30k9q0aaPvvvtO77zzjj766CPl5OQoIiJCBw4csJxz//79ioiI0C+//KKPPvpI77zzjr777ju1adNGP/30k0PfvXv3qlmzZtq7d69mzpypDRs26PXXX5evr2+J6i/Mli1b1KVLF1WvXl2rV6/W7NmztXHjRnXo0EE/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LgAASkNUVJR27typV155RfXr11dsbKz69OmjS5cu6c9//nOxY0+dOqU77rhDgwcPlr+/v06fPq233npL999/v9577z317dtXkhQQEFAg7EjSqlWr9Oqrr6pnz54lqnX06NGKjIxUWFiYve2nn35SmzZt5Ovrq3feeUdubm6aPn26IiIitHPnTjVo0KDI+bKzszVp0iT16dNHgwcPlp+fn3bv3q2pU6fq448/1hdffCF3d3dJ0sWLF2WM0bPPPqvbbrtNFSpU0NatWzV58mRt3rxZGzduLNE2/N6WLVvUpUsX3X///Vq9erXS09M1duxYdejQQV988YUqVqxoOUerVq00c+ZMh7bq1as7vP/222917733qkGDBpo1a5b8/Pzs9e/atUurV6+2950yZYoiIyM1bNiwYvcfgJtLdna2nn76acXExOjixYsOyzZs2KBJkyYpOjpas2fPlpubWxlViXLBAEA5s2bNGiPJxMbGOrRHRkaawMBAk5ube9lz/vLLL6ZGjRqmTZs2ln0jIiKMh4eHOXfunGXfb7/91kgy69evd2j/y1/+YlxcXMzhw4ftbefOnTN+fn6md+/exc6Zm5trTp48WaB92bJlRpJ57733LOsaM2aMkWRSUlIs+xamRYsWpnHjxubixYv2tqSkJCPJzJ0713J8UFCQuf/++y37vfDCC0aSOXjwoEP70KFDjSRz+vRph/bg4GAzZMiQEm4FgGslIyPDSDKSTEZGxjWbNysry7Rt29Y+d1hYmJk3b55ZtWqVmTdvngkNDbUva9u2rcnKyrpm674apbU//iiys7PNxIkT7a/s7Ozrsl5O1QNQ7sTFxcnLy0u9evVyaI+OjlZaWpp27Nhx2XO6uLjIx8dHzs7FH6hPSUnRli1b1Lt3b3l7e1vOO2/ePPn7+ysyMrLANrRv315BQUH2Nm9vb0VFRenjjz9Wbm5ukXM6OTmpatWqBdrvueceSdKPP/5oWdctt9wiSZbbW5ijR49q586d6tevn8P4e++9V/Xr11dcXNxlz1kUFxcXSVLlypUd2n18fFShQgW5uro6tPfr10+xsbG6cOHCNasBQNl5+umntWXLFnl7eys+Pl7btm3TE088oQcffFBPPPGEkpOTFR8fL29vb23ZsoXTdXFVCE4Ayp29e/eqUaNGBX7pb9KkiX15SVy6dEm5ublKS0vTxIkT9d133+m5554rdsw777wjY4wGDx5conWsWbNG4eHhqlDhf/8cZ2dnKyUlxV7v77chOztbqampJZr/txISEiRJd9xxR4Flxhjl5ubq/PnzWr9+vV577TX16dNHtWvXvuz15O/fouov6f7funWrKlWqJBcXFzVu3Fivvfaa8vLyHPoMGDBAPj4+GjZsmFJTU3XhwgV98sknevvttzV8+HB5eno69I+IiFBmZqY2b9582dsF4MZy/PhxxcTESJKWL19e4A9Q+SIjI7V8+XJJ0qJFi7jmCVeMa5wAlDunTp3S7bffXqC9SpUq9uUl0bVrV/373/+W9OvRng8//FD3339/kf3z8vK0ePFiNWzYUK1atbKcPz09XampqRo6dKhD+5kzZ2SMsdd7NduQ7+jRoxo3bpyaN2+ubt26FVj+4Ycfqk+fPvb30dHRmj9//mWtI19+bUXVX5La77//fjVv3lx16tTRmTNntGzZMo0ePVpffvml3nvvPXu/W2+9VcnJyerZs6fq1Kljbx85cqRmzZpVYN677rpLNptNSUlJeuCBB65g6wBcrbNnzxa4FulKvPnmm7p48aJCQ0OLDE35IiMj1bJlS+3YsUNvvvmm5R/BShvPbro5EZwAlEs2m+2Klv3WP/7xD509e1bHjh3TkiVL9PDDD2vx4sUOAeO31q9fr6NHj+pvf/tbieZPS0uTJFWrVu2y6yzpNkjS6dOn1bVrVxlj9OGHHzoc3cp33333aefOnbpw4YKSk5P16quv6tSpU4qLiyu0f0kUVWNJap8zZ47D+wcffFC+vr5688039eyzz+quu+6S9OudDR944AFVr15dy5cv1y233KIdO3Zo6tSpysjI0MKFCx3myT/l8ujRo1e0TQCuXs2aNa/pfAMGDChRv4EDB9r/fZg6deo1rQF/DAQnAOVO1apVCz2qcfr0aUmFHwkpTL169exfd+/eXV26dNHw4cP18MMPFxomFi5cKBcXF/Xv379E82dnZ0tSgbs8+fr6ymazXZNtOHPmjCIjI3X06FElJCQUeiQuf53NmzeXJLVr10516tTRI488otWrV5f47oD58q+vKqr+ktb+e3379tWbb76p7du324PTuHHjdP78eX355Zf20/LCw8Pl5+enQYMGqX///mrbtq3DPG5ubvZ9D+DmFxAQUKJ+/v7+pVwJyjuucQJQ7oSEhGjf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qlXXtmgAAFCAMUaZmZkOr19++cX++m27MabU6nAutZkB4AawaNEiNWzYUDk5OUpKStK0adOUmJio/fv3y9fXt8TzGGPUu3dv1a9fX//617/k6empBg0alGLlAADAGKPWrVtr27ZtRfaZPn26/etWrVrp008/lc1mu+a1EJwAlGvBwcFq3ry5JCkiIkJ5eXmaOHGiVq1apejo6BLPk5aWptOnT6tnz57q0KFDaZULAAB+Iysrq9jQ9HtJSUnKysqSp6fnNa+FU/UA/KHkh6gTJ07Y27744gt1795dVapUkZubm+666y599NFH9uWTJk1SzZo1JUljx46VzWbTrbfeel3rBgAAZYvgBOAP5dChQ5Kk+vXrS5ISExPVqlUrnT17Vm+99ZZWr16tpk2b6uGHH1ZMTIwkafDgwVq5cqUk6amnnlJycrLi4uLKpH4AAFA2OFUPQLmWl5en3Nxc+zVOU6dOVXh4uLp37y5JevLJJ3XHHXcoISFBzs6//pN433336eTJk3r++efVv39/1axZU7m5uZKk2rVrKzQ0tMy2BwAAlA2OOAEo10JDQ+Xi4qJKlSqpc+fO8vX11erVq+Xs7KyDBw9q//79evTRRyVJubm59lfXrl117NgxHThwoIy3AAAA3AgITgDKtXfffVc7d+5UQkKCHn/8ce3bt099+vSR9L/rnEaPHi0XFxeH15NPPilJOnnyZJnVDgAAbhycqgegXGvUqJH9hhDt2rVTXl6eFixYoOXLlyskJESSNH78eEVFRRU6nluOAwAAieAE4A9mxowZWrFihSZMmKC9e/eqXr16+uqrr/Tyyy+XdWkAAOAGxql6AP5QfH19NX78eO3bt0+xsbF6++23tWnTJt133316//33tXXrVq1atUrTp09Xr169ip1r8uTJcnZ21pYtW65T9QAAoKwQnAD84Tz11FOqXbu2Jk+erPDwcH3++efy8fHRqFGj1LFjRw0bNkwbN25Ux44di53n0qVLysvLkzHmOlUOAADKis3wEx8AAADADcgYozZt2igpKalE/Vu1aqVPP/1UNpvtmtdCcAIAAABwwzLGKCsry/4+JydHr732mv39c889Jzc3N0mSh4dHqYQmiZtDAAAAALiB2Ww2eXp62t87OTnJ1dXV/t7T09MenEoT1zgBAAAAgAWCEwAAAABYIDgBAAAAgAWCEwAAAABY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\n",
      "text/plain": [
       "<Figure size 1050x450 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams[\"font.size\"] = 8\n",
    "fp = mfp.SimpleForestPlot(ratio=(8,3), dpi=150, figsize=(7,3), df=df)\n",
    "fp.errorbar(errorbar_kwds=None)\n",
    "fp.ax2.set_xlabel(\"OR\")\n",
    "fp.ax2.axvline(x=1, ymin=0, ymax=1.0, color=\"black\", alpha=0.5)\n",
    "fp.embed_strings(\"risk_pretty\", 0.5, header=\"OR (95% CI)\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d21896ed-35b5-4adc-8529-e5b78be909e0",
   "metadata": {},
   "source": [
    "BaseForestplot uses Gridspect to create 2 axes. One is for text, and one is for errorbar plot. To draw original axis ticks and labels for two axes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "47d3db6f-1a0e-45de-9f51-82662d20f7ad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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WlqpzNdlp19GR0frzTffVI8ePdS6dWt17NhRS5cuVdOmTfX222+7qiwAKFGrVq2Sv7+/unXr5tDep08fnThxQrt27brmaXp4eCgwMFDu7vmffJGQkKCtW7eqe/fuCggIKHC6c+fOVUhIiGJiYnIsw913363w8HB7W0BAgLp27apPPvlEmZmZeU7Tzc1NFSpUyNF+5513SpJ++eWXAuu66aabJKnA5c3N8ePHtXv3bvXs2dNh/Lvuuku1atXSqlWrrnmaefHw8JAklStXzqE9MDBQZcqUkaenp0N7z549tWTJEiUnJxdbDQBcZ/jw4dq6dasCAgK0ceNGffHFFxo8eLAeeOABDR48WDt27NDGjRsVEBCgrVu3cgo2iuS6u6YuODi4UF/UAGAF+/fvV506dXL8nWvQoIF9uDOuXLmizMxMnThxQhMmTNAPP/ygp59+Ot9x3nvvPRlj1L9/f6fmsXbtWkVFRalMmf99VaSlpSkhIcFe79XLkJaWpsTERKem/2dxcXGSpLp16+YYZoxRZmamLl68qA0bNuiVV17RI488omrVql3zfLLXb171O7v+P/vsM5UtW1YeHh6KiIjQK6+8oqysLIc+vXr1UmBgoB5//HElJiYqOTlZn376qd566y0NGTJEfn5+Dv2jo6OVmpqqLVu2XPNyAbi+nDx5UgsWLJAkLV++PMePY9liYmK0fPlySdL8+fO5xg6F5vL0dOXKFV25ckXnzp3TsmXL9J///EezZs1ydVkAUCLOnDmjW265JUd7+fLl7cOdce+99+o///mPpD+Okn300Ue677778uyflZWlhQsX6rbbblPz5s0LnH5SUpISExM1cOBAh/Zz587JGGOvtyjLkO348eMaM2aMGjdurI4dO+YY/tFHH+mRRx6xv+/Tp0+hz+jIri2v+p2p/b777lPjxo1Vo0YN+3fXyJEj9c033+iDDz6w96tevbp27NihLl26qEaNGvb2YcOGaebMmTmme8cdd8hms2n79u26//77C7F0AIrq/PnzOa59K4xZs2YpIyNDkZGReQa6bDExMWratKl27dqlWbNmFfgDXUnj2XTW5PJQ98QTT+itt96SJHl6euqNN97QoEGDnBo3t190pT9OMfrzFygAXE9sNluhhv3Zv/71L50/f16//vqrFi1apIceekgLFy50CD9/tmHDBh0/flwvv/yyU9M/ceKEJKlixYrXXKezyyBJZ8+e1b333itjjD766COHo4LZ2rVrp927dys5OVk7duzQSy+9pDNnzmjVqlW59ndGXjU6U/vs2bMd3j/wwAMKCgrSrFmz9I9//EN33HGHpD/uQHr//ferUqVKWr58uW666Sbt2rVLkydPVkpKiubNm+cwnezTaI8fP16oZQKKU177WJJ04MCBUqykdFWpUqVYp9erVy+n+vXu3dv+92Hy5MnFWgP+Gool1G3ZskWtW7d2qu/XX3+thg0b2t+PGzdO/fv3V1JSkj755BMNHTpUqampGjlyZHGUBgDXlQoVKuR6NOjs2bOScj+ClJtbb73V/u9OnTqpQ4cOGjJkiB566KFcg868efPk4eGhxx57zKnpp6WlSVKOu7EFBQXJZrMVyzKcO3dOMTExOn78uOLi4nI9gpk9z8aNG0uSWrdurRo1aujhhx/WmjVrnL6LZ7bs6/nyqt/Z2q/Wo0cPzZo1Szt37rSHujFjxujixYv65ptv7KdaRkVFKTg4WH379tVjjz2mVq1aOUzH29vbvu4BWF9oaKhT/UJCQkq4EtzoiiXU1a5dW++8845Tfa++BqJatWr2tnvvvVeSNHbsWPXq1ct+MXxe8vqlKL9flwDAlerXr6+lS5cqMzPT4bq6ffv2SZLq1atXqOneeeed2rBhg06fPp3j1vpJSUn69NNP1alTpzyPvF0tODhY0v+CWjYfHx/VrFnTXu+f7du3Tz4+PnmGsz87d+6c7rnnHh05ckSbN2/O9Rq3vGTfVOWHH35wepxs2et337599u+cbPv27Sv0+jfGSJJDoP7mm28UERGR49q5Jk2aSPrj+r6rQ925c+fs6x5wpRv5aFxp+vXXX53qd/LkyRKuBDe6Ygl1oaGhTl94X5A777xTb775phITEwsMdQBgNV26dNE777yjFStW6KGHHrK3L1y4UGFhYWratOk1T9MYo61btyowMDDXO0u+//77ysjIUL9+/ZyeZnh4uHx8fJSQkJDrMsycOVO//PKLqlatKklKTk7WypUr1alTpwJvdpUd6BITExUbG2s/suWs+Ph4SVLNmjWvaTxJqly5su68804tWrRII0eOlJubmyRp586d+v777wt997n3339fkhQZGWlvCwsL0/79+5WSkiJ/f397e/bzA68+zevEiRNKT09XREREoWoAUHTHjh3L8UNMYcyYMUNTpkzRwoULNXjw4AL7Z99U5bnnnrsurqkr7tNQUfJcfk3d1eLj41WmTBmnfukFAKvp0KGD/SHTFy9eVM2aNbV06VJt2LBBixYtsocMSerXr58WLlyohIQE++MDHnjgAd1+++1q2LChKlSooBMnTmjBggXaunWrZs+enWugmjdvnqpWrap27do5Xaenp6eaNWumnTt35hg2cuRIffDBB7rvvvv0wgsvyMvLS9OmTVN6eromTpzo0Dc7eB0+fFjSH6d1tmvXTl9//bVmzpypzMxMh3ncdNNN9mui33rrLW3btk1t27ZV1apVlZqaqm3btulf//qX7rrrLj3wwAP28Y4ePaqbb75ZvXr1su8c5eWll15STEyMunXrpieeeEJJSUkaM2aM6tWrpz59+tj7/fTTT6pRo4Z69eplv/5tyZIlWrlype677z6Fh4fr/PnzWrZsmT788EP17t1bt99+u338ESNGqHPnzoqJidFTTz2l4OBg7dy5U1OnTlVERIQ6dOjgUFf2enD2cgYAxS8wMLBYQt3QoUM1ffp07dy5U7GxsfneLCU2Nla7du2Sh4eHhg4dqsDAwCLPvyiyH8cCiymVp+HlYsCAAebpp582H330kdmyZYtZvny5eeihh4wk88wzzxRp2jxIE8D1LDk52QwbNsyEhIQYT09P06BBA7N06dIc/Xr16mUkmSNHjtjbXnrpJdOkSRMTFBRk3NzcTIUKFUy7du3Mp59+muu8sh+qPX78+Guuc968ecbNzc2cOHEix7DDhw+bzp07m4CAAOPr62vatGlj9uzZk6NfeHi4CQ8Pt78/cuSI/aG2ub169erlUHvHjh1NWFiY8fT0NL6+vub22283kyZNMqmpqQ7z2bdvn5FkxowZ49Sybdy40URGRhpvb29Tvnx589hjj5lTp0459Mmu9c817dixw7Rp08aEhIQYDw8P4+vra5o0aWLmzJljsrKycswnLi7OtG3b1oSEhBgfHx9Tq1Yt8/TTT+f6APaePXua+vXrO1U/UFzYZyq5h20PGDDASDIBAQFm48aNufbZuHGjCQgIMJLMwIEDi23eRcHDx4vGVQ8ftxnz/y8EKGXz58/X/PnzdfDgQZ0/f17+/v66/fbb1b9/f/Xo0aNI086+po7zwQGg8NLT01WtWjU9/fTTGj16tKvLydecOXM0atQoJSQk5Lim0AouXryosLAwvfbaaxowYICry8FfCPtMf5xumH2KdEpKSrEcqZP+ODOhQ4cO2rp1q6Q/Ts/u1auXQkJC7M+x27VrlySpVatW2rBhQ46bU7lCSa2Pv4r09HRNmzbN/n7MmDGlsl1ddvplnz59HE5zAQBcX7y9vfX8889r4sSJGjp06HX9xR4fH69hw4ZZMtBJ0muvvaZq1arxvQjcQHx8fLR+/XqNGDFC8+fP186dO3Oc0u7h4aE+ffro9ddfvy4CHazrurumDgBw/Rg4cKDOnz+vxMRE1a9f39Xl5GnZsmWuLqFIAgICtGDBggJvMgPAWnx8fPTWW2/phRde0Lx587RlyxYlJyerbNmyio6OVr9+/Sz7YxSuL3x7AADy5ObmprFjx7q6jBveU0895eoSAJSgSpUqady4cRo3bpyrS8ENKucTagEAAAAAlsGROgAAAPxl+fn5yUX3DbwusT6siSN1AAAAAGBhhDoAAAAAsDBCHQAAAABYGKEOAAAAACyMUAcAAAAAFkaoAwAAAAALI9QBAAAAgIUR6gAAAADAwgh1AAAAAGBhhDoAAAAAsDBCHQAAAABYGKEOAAAAACyMUAcAAAAAFkaoAwAAAAALI9QBAAAAgIUR6gAAAADAwgh1AAAAAGBhhDoAAAAAsDBCHQAAAABYGKEOAAAAACyMUAcAAAAAFkaoAwAAAAALI9QBAAAAgIUR6gAAAADAwgh1AAAAAGBhhDoAAAAAsDBCHQAAAABYGKEOAAAAACyMUAcAAAAAFkaoAwAAAAALI9QBAAAAgIUR6gAAAADAwgh1AAAAAGBhhDoAAAAAsDBCHQAAAABYGKEOAAAAACyMUAcAAAAAFkaoAwAAAAALI9QBQClbsGCBbDab/eXu7q7Q0FA9/PDD+vHHHws1zc2bN6tx48by8/OTzWbT6tWri7doAACQgzFGqampDq/Lly/bX39uN8aUWB3uJTZlAEC+5s+fr9tuu03p6enavn27pkyZovj4eB06dEhBQUFOT8cYo+7du6tWrVr697//LT8/P9WuXbsEKwcAAMYYtWjRQl988UWefaZOnWr/d/PmzbVt2zbZbLZir+W6OVL37rvvymazyd/f39WlAECpqFevniIjIxUdHa1nn31WY8aMUVJS0jUfZTtx4oTOnj2rLl26qE2bNoqMjLymUAgAAK7dpUuX8g10V9u+fbsuXbpUIrVcF6Hu+PHjGjlypMLCwlxdCgC4TOPGjSVJp06dsrd99dVX6tSpk8qXLy9vb2/dcccd+vjjj+3DJ06cqCpVqkiSRo8eLZvNpurVq5dq3QAAwLWui1A3ePBgRUVFKSYmxtWlAIDLHDlyRJJUq1YtSVJ8fLyaN2+u8+fP680339SaNWvUsGFDPfTQQ1qwYIEkqX///lq5cqUk6cknn9SOHTu0atUql9QPAABcw+XX1C1atEhbt27Vd999p+eee87V5QBAqcnKylJmZqb9mrrJkycrKipKnTp1kiQ98cQTqlu3ruLi4uTu/sef63bt2um3337TuHHj9Nhjj6lKlSrKzMyUJFWrVk2RkZEuWx4AAOAaLg11SUlJGjFihKZNm2Y/feha1K1bN9f2hIQE1ahRo6jlAUCJujqA1alTR2vWrJG7u7sOHz6sQ4cOacaMGZJkD26SdO+99+rTTz/V999/rzp16pRqzQD+GvLax5KkAwcOlGIlAJzh0tMvn3jiCdWuXVuPP/64K8sAAJd4//33tXv3bsXFxWnQoEE6ePCgHnnkEUn/u65u5MiR8vDwcHg98cQTkqTffvvNZbUDAIDrR7EcqduyZYtat27tVN+vv/5aDRs21IoVK/TJJ5/o66+/LvRtPfP6pSi/X5cA4HpRp04d+81RWrduraysLL377rtavny56tevL0kaO3asunbtmuv4PLYAQEnhaBxgLcUS6mrXrq133nnHqb7VqlVTSkqKhgwZoieffFJhYWE6f/68JOny5cuSpPPnz8vDw0N+fn7FUR4AWML06dO1YsUKjR8/Xvv379ett96q//73v3rxxRddXRoAALiOFUuoCw0NVf/+/Z3uf/ToUZ06dUqvvPKKXnnllRzDg4KC9MADD1zzs5oAwMqCgoI0duxYjRo1SkuWLNFbb72lDh06qF27durdu7cqV66ss2fP6uDBg9q7d6+WLVuW57ReeOEFvfDCC9q8ebNatWpViksBAABKm0tulBISEqL4+Pgc7dOmTdPWrVu1fv16BQcHu6AyAHCtJ598UrNmzdILL7yggwcP6ssvv9SUKVM0YsQInTt3ThUqVFBERIS6d++e73SuXLmirKwsGWNKqXIAAOAqNnMdfeP37t1by5cvV0pKSpGmk31NHeeDAwAA5I19JqDwjDFq2bKltm/f7lT/5s2ba9u2bYW+n0h+XP6cOgAAAACwGpvNpm3btunSpUv2tvT0dIfLy55++ml5e3tLknx9fUsk0EkufqTB1RYsWFDko3QAAAAAUBpsNpv8/PwcXp6envbXn9tLKtBJ11moAwAAAABcG0IdAAAAAFgYoQ4AAAAALIxQBwAAAAAWRqgDAAAAAAsj1AEAAACAhRHqAAAAAMDCCHUAAAAAYGGEOgAAAACwMEIdAAAAAFgYoQ4AAAAALIxQBwAAAAAWRqgDAAAAAAsj1AEAAACAhRHqAAAAAMDCCHUAAAAAYGGEOgAAAACwMEIdAAAAAFgYoQ4AAAAALIxQBwAAAAAWRqgDAAAAAAsj1AEAAACAhRHqAAAAAMDCCHUAAAAAYGGEOgAAAACwMEIdAAAAAFgYoQ4AAAAALIxQBwAAAAAWRqgDAAAAAAsj1AEAAACAhRHqAAAAAMDCCHUAAAAAYGGEOgAAAACwMEIdAAAAAFgYoQ4AAAAALIxQBwAAAAAWRqgDAAAAAAsj1AEAAACAhRHqAAAAAMDCCHUAAABwidTUVNlsNtlsNqWmprq6HMtgveFqhDoAAAAAsDBCHQAAAABYGKEOAEpZSkqKRowYobCwMHl7e6thw4b68MMPnRr32LFjGjFihFq1aqXAwEDZbDYtWLAgz/6pqakaP368atWqJS8vL1WoUEGtW7fWjz/+6NT8EhIS5OXlpR07dji0JyYmqmvXrgoMDJS/v79iYmK0d+9ep6YpSXv37tU999wjf39/BQYGqmvXrkpMTMy1708//aS+ffsqLCxMXl5eqly5srp06eL0vHKzadMmNWvWTL6+vgoODlbv3r2VlJR0zdM5deqUKlSoIJvNpuXLl+fa5/PPP9e9996roKAg+fj46NZbb9WkSZMc+kRFRWnEiBGFWRQA/9+pU6c0ZcoUtW3bVs2aNVPbtm314osv6tSpU64uDShxLgt1W7ZssZ8LfPVr586drioLAEpc165dtXDhQk2YMEHr169XkyZN9Mgjj2jJkiUFjnv48GEtXrxYnp6euvfee/Ptm5KSoujoaM2bN09PPvmkNm7cqPnz56tp06a6dOmSU7WOHDlSMTExatasmb3t9OnTatmypX744Qe99957+vjjj5Wenq7o6Gh9//33BU7z0KFDio6O1uXLl/Xxxx/rvffe0w8//KCWLVvq9OnTDn3379+vRo0aaf/+/ZoxY4ZiY2P16quvKigoyKn6c7N161Z16NBBlSpV0po1a/T6669r06ZNatOmjX7//fdrmtaQIUPk7e2d5/AlS5aoVatWKleunN5//32tW7dOo0ePljHGod+kSZM0Z84cp9YfAEdpaWkaOHCgqlatqueee06xsbHauXOnYmNj9eyzz6pq1aoaNGiQ0tPTXV0qUHKMi8THxxtJ5sUXXzQ7duxweCUnJxdp2hERESYiIqKYKgWA4rN27VojySxZssShPSYmxoSFhZnMzMx8x8/KyrL/e/fu3UaSmT9/fq59hw8fbvz8/ExCQkKhav3uu++MJLNhwwaH9meeecZ4eHiYo0eP2tsuXLhggoODTffu3Qucbrdu3UxwcLC5cOGCve3o0aPGw8PDjBo1yt525coV07BhQ9OwYUOTnp5eqGXITZMmTUxERITJyMiwt23fvt1IMnPmzHF6OsuXLzf+/v5m4cKFRpJZtmyZw/Bjx44ZPz8/8/jjjzs1vXr16pkBAwY4PX+gOLh6nyklJcVIMpJMSkrKNY9/6dIl06pVK/s0mjVrZubOnWtWr15t5s6dayIjI+3DWrVqZS5dulQCS1H6irreUHLS0tLMhAkT7K+0tLRSma/LT7+89dZbFRkZ6fDy9/d3dVkAUCJWrVolf39/devWzaG9T58+OnHihHbt2pXv+GXKOPdn+9KlS3r33XfVrVs33XLLLYWqde7cuQoJCVFMTIxD+6pVq3T33XcrPDzc3hYQEKCuXbvqk08+UWZmZp7TzMzM1Keffqq///3vCggIsLeHh4erdevWWrVqlb3ts88+0zfffKMRI0bIy8urUMtwtePHj2v37t3q2bOn3N3d7e133XWXatWq5TD//Jw9e1ZDhgzRlClTVK1atVz7vPvuu0pNTdXo0aOdmmbPnj21ZMkSJScnO9UfgDR8+HBt3bpVAQEB2rhxo7744gsNHjxYDzzwgAYPHqwdO3Zo48aNCggI0NatWznNGTcsl4c6APgr2b9/v+rUqeMQKCSpQYMG9uHFYc+ePUpNTdWtt96qxx9/XEFBQfL09FTjxo21du1ap6axdu1aRUVFOQTJtLQ0JSQk2Ou9ehnS0tLyvDZO+uMavbS0tDzHP3z4sP0Uqc8++0ySVLZsWd17773y9vaWv7+/OnbsqEOHDjm1DFfLXr95zd/Z9T9s2DDdfPPNGjp0aJ59PvvsM5UvX16HDh1Sw4YN5e7urooVK2rw4MG6ePFijv7R0dFKTU3Vli1bnFsY4C/u5MmT9muKly9fnuMHqGwxMTH2a17nz5/PNXa4IbkX3KVkDRkyRA8//LB8fX3VrFkz/fOf/1SLFi1cXRYAlIgzZ87keuSsfPny9uHF4fjx45Kkl156SfXr19f777+vMmXK6JVXXtH999+v9evXq127dnmOn5SUpMTERA0cONCh/dy5czLG2Ou91mXIHpbX+MYYnTt3TqGhofZl6NOnj7p166a1a9fq119/1XPPPaeWLVvq22+/VWhoaAFr4trm78z6X7t2rT7++GPt3bs33yOnx48f16VLl9StWzeNHTtWM2fO1O7duzVhwgTt379f27Ztk81ms/e/4447ZLPZtH37dt1///3XtFzAjeD8+fPKyMhwuv+sWbOUkZGhyMjIPANdtpiYGDVt2lS7du3SrFmz9PTTTxe1XJfi2XS4mstCXbly5TR8+HBFR0erQoUKOnz4sF5++WVFR0dr7dq1+e5sZKtbt26u7QkJCapRo0ZxlwwAxeLPO/LXMuxaXLlyRZLk6emp9evXq2zZspKk1q1b2+++mN/f2RMnTkiSKlaseM11OrMMzoyfvQzNmjXTu+++ax9er1493XHHHZo9e7YmT55c4LyuZf4F1X7hwgUNGjRIo0ePVr169fLte+XKFaWnp2vChAkaM2aMpD+Oxnl6emrEiBHavHmz7rnnHnt/Dw8PBQYG2sMs4Ep57WNJ0oEDB0pknlWqVCnUeL169XKqX+/evbVr1y5Nnjy50H87gOtVsZx+md+dLK9+ffPNN5L++EVy5syZ6ty5s1q2bKk+ffroiy++UGhoqEaNGlUcZQHAdadChQq5Hg06e/aspNyPIBV2PtIf14plBzpJ8vX1VatWrQp8/EBaWpok5bizY1BQkGw2W6GXIbuuvMa32WwKDAx06Ht1+GzYsKFCQ0Ov6REKzs6/oPX/7LPPysPDQ0OHDtX58+d1/vx5paSkSPrjOsbz58/b72yZV/0dOnSQpFzr9/b2tq97AM5x9oh9SEhICVcCuE6xHKmrXbu23nnnHaf65nVBuSQFBgaqY8eOevPNN5WWliYfH598p5XXL0X5/boEAK5Uv359LV26VJmZmQ7X1e3bt0+SCjz646zcrhnLZowp8IYrwcHBkv4X1LL5+PioZs2a9nr/bN++ffLx8cn3xiw1atSQj49PnuPXrFnTHiSLugy5yV6/+/bty/FIiH379hW4/vfv36+jR4/munOYfbTg3LlzCgwMVIMGDXJ9RE926Mut/nPnztnXPeBKJXU0riT8+uuvTvU7efJkCVcCuE6xhLrQ0FD179+/OCZl/7IrrlOQAOB60qVLF73zzjtasWKFHnroIXv7woULFRYWpqZNmxbLfEJDQ9WsWTNt375dFy9etN9p8tKlS9q6dasiIyPzHT88PFw+Pj5KSEjIdRlmzpypX375RVWrVpUkJScna+XKlerUqVOOm8D8mbu7u+6//36tXLlS06dPtx9F/PnnnxUfH6+nnnrK3rdDhw7y9fXV+vXrHdr37t2rkydPFrgMualcubLuvPNOLVq0SCNHjpSbm5skaefOnfr+++8LvDPezJkzdf78eYe2b775Rk899ZQmTpyoVq1a2e/g/Pe//11vv/221q9frzvuuMPef926dZKUo/4TJ04oPT1dERER17xcwI3g2LFj8vPzc7r/jBkzNGXKFC1cuFCDBw8usH/2TVWee+65G+KausKeroobVKk8OMFJZ8+eNZUrVzYNGzYs0nRc/cwVAMhPTEyMCQoKMm+//baJi4szAwYMMJLMokWLHPr17dvXuLm5OTwPzhhjli1bZpYtW2ZeeuklI8kMGTLE3vZn27dvN56eniYyMtKsWrXKrF692rRs2dJ4eHiYL774osA67777btOsWbMc7UlJSSY0NNTUr1/frFq1yqxbt85ERUWZsmXLmoMHDzr0rVGjhqlRo4ZD28GDB42/v7+Jiooy69atMytXrjT16tUzYWFhJikpyaHvjBkzjCTTq1cvs2HDBrNgwQJTtWpVU61aNXPmzBl7vyNHjtj7FSQ+Pt64u7ubLl26mNjYWLN48WJTtWpVU69ePYfn4R09etS4ubmZvn37Fjg95fKcOmOMuf/++42Xl5eZNGmSiY2NNVOnTjXe3t6mY8eOOfquWLHCSDLffvttgcsAFBdX7zMV5Xlrv/76q/Hw8DCSzMaNG/Ptu3HjRiPJeHh4mJMnTxal5OsCz6m7frnqOXUuC3WPPPKIGT16tFm2bJmJj483b7/9tqldu7Zxd3c3sbGxRZq2q/9AAUB+kpOTzbBhw0xISIjx9PQ0DRo0MEuXLs3Rr1evXkaSOXLkiEN79hd5bq+rbdu2zbRq1cr4+voaX19fc/fdd5vt27c7Vee8efOMm5ubOXHiRI5hhw8fNp07dzYBAQHG19fXtGnTxuzZsydHv/DwcBMeHp6j/auvvjJt2rQxvr6+JiAgwHTu3NkcPnw41zreeecdU69ePePp6WkqVKhgHn30UfPLL7849Nm3b5+RZMaMGePUsm3cuNFERkYab29vU758efPYY4+ZU6dOOfRxNijmF+ouXbpkRo8ebapWrWrc3d1NtWrVzNixY3N9mHrPnj1N/fr1naofKC6u3mcqajjJ/lEsICAgz2C3ceNGExAQYCSZgQMHFrXk6wKh7vrlqlBnM+b/n+9YyqZNm6aPPvpIR44cUUpKisqXL68WLVpo7NixatKkSZGmnX1NnZXOBweA6016erqqVaump59+2ukHaLvKnDlzNGrUKCUkJKhSpUquLueaXbx4UWFhYXrttdc0YMAAV5eDvxBX7zOlpqbaT1lOSUm5ptMvpT9u6tShQwdt3bpV0h+nNffq1UshISH259jt2rVLktSqVStt2LAhxw2grKio6w0lJz09XdOmTbO/HzNmTKn8P+eyRxqMGTPGfotnAMD1x9vbW88//7wmTpyooUOHXtc7DfHx8Ro2bJglA50kvfbaa6pWrZr69Onj6lIAS/Hx8dH69es1YsQIzZ8/Xzt37sxxgyIPDw/16dNHr7/++g0R6IDcuPzh4wCA69fAgQN1/vx5JSYmqn79+q4uJ0/Lli1zdQlFEhAQoAULFuR7kxkAufPx8dFbb72lF154QfPmzdOWLVuUnJyssmXLKjo6Wv369bPsDz6As/j2AADkyc3NTWPHjnV1GTe8P9/dE0DhVKpUSePGjdO4ceNcXQpQ6orl4eMAAAAAANfgSB0AAABcws/PTy66Z5+lsd5wNY7UAQAAAICFEeoAAAAAwMIIdQAAAABgYYQ6AAAAALAwQh0AAAAAWBihDgAAAAAsjFAHAAAAABZGqAMAAAAACyPUAQAAAICFEeoAAAAAwMIIdQAAAABgYYQ6AAAAALAwQh0AAAAAWBihDgAAAAAsjFAHAAAAABZGqAMAAAAAC7MZY4yriyhuZcuWVUZGhmrUqOHqUgAAAK5bCQkJ8vDwUHJyslP9O3XqpISEhBKuCrAuY4x+++03+/vg4GDZbLZ8x6lRo4b+/e9/F2m+7kUa+zqVlpamGzCr/uVlf4kQ1m8sbNcbD9v0xsR2vTFlZGQoMzOz2KfL/y+uxfp3HZvNposXL0oq3fV/Qx6pq1u3riTpwIEDLq4ExYntemNiu9542KY3Jrbrjamktiv/v7gW69+1XLH+uaYOAAAAACyMUAcAAAAAFkaoAwAAAAALI9QBAAAAgIUR6gAAAADAwm7Iu18CAAAAwF8FR+oAAAAAwMIIdQAAAABgYYQ6AAAAALAwQh0AAAAAWBihDgAAAAAsjFAHAAAAABZGqAMAAAAAC7NUqEtJSdGIESMUFhYmb29vNWzYUB9++KFT4yYlJal3794KDg6Wr6+vmjVrps2bN5dwxXBGYbfrypUr9cgjj6hmzZry8fFR9erV9eijj+rHH38shaqRn6J8Vv/sueeek81mU7169UqgSlyrom7XNWvWqFWrVgoICJCfn5/q1q2rt99+uwQrhjOKsl3j4+MVExOjihUryt/fXw0aNNAbb7yhrKysEq4a+UlOTtaoUaPUtm1b3XTTTbLZbJo4caLT4+e3z8S+mGsVdv0vWLBANpst19fJkydLofIbQ0l+torMWEhMTIwJDAw0b775pomLizP9+/c3kszixYvzHS89Pd3Uq1fPVKlSxSxatMhs3LjRPPDAA8bd3d1s2bKllKpHXgq7Xe+8807TqVMn895775ktW7aYDz74wNSpU8f4+/ub/fv3l1L1yE1ht+mfff3118bLy8tUqlTJ1K1btwSrhbOKsl2nTp1qypQpY5544gmzfv16s2nTJjNr1izzr3/9qxQqR34Ku11jY2NNmTJlTHR0tFm9erWJjY01Tz75pJFkhg0bVkrVIzdHjhwx5cqVM1FRUfbtOWHCBKfGLWifiX0x1yrs+p8/f76RZObPn2927Njh8Lp8+XIpVW99JfnZKirLhLq1a9caSWbJkiUO7TExMSYsLMxkZmbmOe7s2bONJPPFF1/Y2zIyMkxERIS58847S6xmFKwo2/XUqVM52o4fP248PDxMv379ir1WOKco2zRbRkaGadiwoRk2bJhp1aoVoe46UJTt+tVXX5kyZcqYl156qaTLxDUqynZ99NFHjZeXl0lJSXFob9u2rQkICCiReuGcK1eumCtXrhhjjDl9+vQ17Xjmt89Uq1Yt9sVcqCif1+xQt3v37pIu84ZWUp+t4vgMWOb0y1WrVsnf31/dunVzaO/Tp49OnDihXbt25Ttu7dq11axZM3ubu7u7evTooS+//FLHjx8vsbqRv6Js14oVK+ZoCwsLU5UqVfTLL78Ue61wTlG2abZp06bp7NmzmjJlSkmViWtUlO06a9YseXl56cknnyzpMnGNirJdPTw85OnpKR8fH4f2wMBAeXt7l0i9cE72aXWFkd8+0w8//CA/Pz/2xVykOL5fUTQl9dkqjs+AZULd/v37VadOHbm7uzu0N2jQwD48v3Gz++U27oEDB4qxUlyLomzX3CQmJuqnn35S3bp1i61GXJuibtPvvvtOkydP1ty5c+Xv719ideLaFGW7fvbZZ6pTp45WrFih2rVry83NTVWqVNGYMWN0+fLlEq0b+SvKdh08eLAuX76sYcOG6cSJEzp//rw++OADrVq1SqNGjSrRulFyCtpnqly5MvtiLlIc+0wdO3aUm5ubypcvr65du17zfhYKr6Q/A+4Fd7k+nDlzRrfcckuO9vLly9uH5zdudr9rHRclqyjb9WqZmZnq16+f/P399dRTTxVbjbg2RdmmV65cUd++fdW1a1fde++9JVYjrl1Rtuvx48d1+vRpDRs2TJMmTVJERIQ2b96sadOm6ZdfftHixYtLrG7kryjbtWnTpoqLi1O3bt00e/ZsSZKbm5umTp2qp59+umQKRokraJ8pt6Ow7IuVjqJ8XkNCQvTss88qMjJSAQEB2rdvn6ZNm6bIyEht375dt99+e4nVjT+U9GfAMqFOUr6HOws6FFqUcVGyimPbGGPUr18/bdu2TStWrFDVqlWLqzwUQmG36auvvqoff/xR//73v0uiLBRRYbfrlStXlJycrKVLl+rhhx+WJLVu3VqpqamaOXOmnn/+edWsWbPY64VzCrtd9+zZoy5duqhp06Z666235Ofnp7i4OD333HNKT0/XP//5z5IoF6WgsP9PsC9W8gq7Dtu3b6/27dvb30dFRem+++5T/fr1NX78eK1Zs6ZY60TuSvIzYJlQV6FChVwT7NmzZyUp1+RbHOOiZBXHtjHGqH///lq0aJEWLlyoBx54oNjrhPMKu01//vlnjR8/XtOmTZOnp6fOnz8v6Y8jsFeuXNH58+fl5eWV4/odlI6i/g0+efKk2rVr59DeoUMHzZw5U3v37iXUuUhRtuuQIUNUqVIlrVq1Sm5ubpL+COtlypTRxIkT9eijj+Z6VAHXt4L+n0hLS8tzGPtiJau412H16tXVokUL7dy5s1jqQ/5K+jNgmWvq6tevr4MHDyozM9Ohfd++fZKU73Os6tevb+93reOiZBVlu0r/C3Tz58/Xu+++qx49epRYrXBOYbdpYmKi0tLSNHz4cAUFBdlf27dv18GDBxUUFKSxY8eWeP3IXVE+q7ldQyD98fmVpDJlLPNVdMMpynb95ptv1KhRI3ugy9akSRNduXJFBw8eLP6CUeIK2mc6fvw4+2IuUtR9ptwYY/gbXEpK+jNgma3YpUsXpaSkaMWKFQ7tCxcuVFhYmJo2bZrvuIcOHXK4K1BmZqYWLVqkpk2bKiwsrMTqRv6Ksl2NMRowYIDmz5+vt956S3369CnpcuGEwm7Thg0bKj4+Psfr9ttvV/Xq1RUfH6+hQ4eWxiIgF0X5rP7973+XJK1fv96hfd26dSpTpoyaNGlS/AXDKUXZrmFhYfrqq69yPGh8x44dkqQqVaoUf8EocfntM9WuXVupqansi7lIUT6vuTly5Ii2b9+uyMjI4iwTeSjxz0CRH4pQimJiYkxQUJB5++23TVxcnBkwYICRZBYtWmTv07dvX+Pm5maOHj1qb0tPTzd169Y1VatWNYsXLzaxsbGmS5cuPPDyOlHY7Tp06FAjyfTt2zfHgzT37t3rikXB/1fYbZobnlN3/Sjsdr18+bL529/+ZsqVK2def/11Exsba0aPHm3c3NzM0KFDXbEo+JPCbtc33njDSDIdOnQwq1evNhs3bjSjR4827u7u5p577nHFouBP1q1bZ5YtW2bee+89I8l069bNLFu2zCxbtsykpqYaYwq3z8S+mGsVdv23adPGPP/882bVqlVm8+bNZubMmSYsLMyULVvW7Nu3zxWLYlkl9dkqKkuFuuTkZDNs2DATEhJiPD09TYMGDczSpUsd+vTq1ctIMkeOHHFoP3nypHnsscdM+fLljbe3t4mMjDSxsbGlWD3yUtjtGh4ebiTl+goPDy/dhYCDonxWr0aou34UZbueOXPGDBo0yFSqVMl4eHiYWrVqmZdfftlkZWWV4hIgN0XZritWrDAtWrQwwcHBxs/Pz9StW9dMmjQpxwPJUfry+47M3o6F2WdiX8y1Crv+R4wYYSIiIkzZsmWNu7u7CQsLMz169DDff/99KS+B9ZXUZ6uobMb8/4saAAAAAACWY5lr6gAAAAAAORHqAAAAAMDCCHUAAAAAYGGEOgAAAACwMEIdAAAAAFgYoQ4AAAAALIxQBwAAAAAWRqgDAAAAAAsj1AEAAACAhRHqAAAAAMDCCHUAAACAxezcuVPdunVTaGioPD09FRISogcffFA7duxw6LdgwQLZbDb7y93dXaGhoXr44Yf1448/uqh6FDdCHQAAAGAh//rXv9S8eXMdO3ZM06dP16ZNmzRjxgwdP35cLVq00KxZs3KMM3/+fO3YsUObNm3S0KFD9e9//1stWrTQuXPnXLAEKG7uri4AAAAAgHO2b9+uESNG6N5779WqVavk7v6/3fmHH35YXbp00fDhw3XHHXeoefPm9mH16tVT48aNJUnR0dHKysrShAkTtHr1avXp06fUlwPFiyN1AAAAgEVMnTpVNptNc+fOdQh0kuTu7q45c+bIZrNp2rRp+U4nO+CdOnWqxGpF6SHUAQAAABaQlZWl+Ph4NW7cWFWqVMm1T9WqVdWoUSPFxcUpKysrz2kdOXJEklSrVq0SqRWli1AHAAAAWMBvv/2mS5cu6eabb863380336xLly7pzJkz9rasrCxlZmYqJSVF//nPfzR58mRFRUWpU6dOJV02SgHX1AEAAAA3EGOMJMlms9nbIiMjHfrUqVNHa9asyXEKJ6yJI3UAAACABQQHB8vX19d+6mRejh49Kl9fX5UvX97e9v7772v37t2Ki4vToEGDdPDgQT3yyCMlXTJKCdEcAAAAsAA3Nze1bt1aGzZs0LFjx3K9ru7YsWPas2ePOnToIDc3N3t7nTp17DdHad26tbKysvTuu+9q+fLlevDBB0ttGVAyOFIHAAAAWMTYsWNljNETTzyR40YoWVlZevzxx2WM0dixY/OdzvTp0xUUFKTx48frypUrJVkySgGhDgAAALCI5s2ba+bMmVq7dq1atGihxYsXa9u2bVq8eLFatmypdevWaebMmbrrrrvynU5QUJDGjh2rgwcPasmSJaVUPUqKzWRfSQkAAADAEnbu3KlXXnlF27Zt05kzZ1S+fHm1aNFCI0eOVLNmzez9FixYoD59+mj37t320y+zpaenq3bt2vLy8tLBgwcdTteEtRDqAAAAAMDCOP0SAAAAACyMUAcAAAAAFkaoAwAAAAALI9QBAAAAgIUR6gAAAADAwgh1AAAAAGBhhDoAAAAAsDBCHQAAAABYGKEOAAAAACyMUAcAAAAAFkaoAwAAAAALI9QBAAAAgIUR6gAAAADAwgh1AAAAAGBhhDoAAAAAsDBCHQAAAABYGKEOAAAAACzs/wFXiwtgKgGlhQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1050x450 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams[\"font.size\"] = 8\n",
    "fp = mfp.SimpleForestPlot(ratio=(8,3), dpi=150, figsize=(7,3), df=df, \n",
    "                        yticks_show=True, \n",
    "                        yticklabels_show=True, \n",
    "                        xticks_show=True, \n",
    "                        text_axis_off=False)\n",
    "fp.errorbar(errorbar_kwds=None)\n",
    "fp.ax2.set_xlabel(\"OR\")\n",
    "fp.ax2.axvline(x=1, ymin=0, ymax=1.0, color=\"black\", alpha=0.5)\n",
    "fp.embed_strings(\"risk_pretty\", 0.5, header=\"OR (95% CI)\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aab207ed-c390-4912-8111-4ce03e2ecdba",
   "metadata": {},
   "source": [
    "Originally, two axes shares yaxis, ranging from minus (number of plots - 1) to 0. For the text part axis, x axis ranges from 0 to one, and embed_strings just places text in this field.  \n",
    "So we have to arrange x position of texts manually to draw beautiful figures. However, this packages just provide basic functionaly, meaning much customizability to draw forestplot based on your preferences."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d280c5d-d843-4b34-8a77-13083221babe",
   "metadata": {},
   "source": [
    "Also see Gallery section to know what kind of designs are available.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1e362f30-5c43-4b80-bea7-2ddffd473703",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
