Files
pandas-ta/examples/Speed_Test.ipynb
T

1200 lines
40 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "3dbbe3ae-2e85-46a1-b4c7-5bc942978bb6",
"metadata": {},
"source": [
"# Indicator Speed Test\n",
"\n",
"This Notebook shows the **Indicator Speed** with and without TA Lib\n",
"* Results may vary if ```vectorbt``` or ```numba``` is installed.\n",
"* These values are based on a M1 Macbook with 16GB Memory."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "63c0934c-9bb3-4a3e-a65a-9f142aa346f9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Package Versions:\n",
"Pandas TA v0.3.54b0\n",
"Numba v0.55.1\n",
"talib v0.4.21\n"
]
}
],
"source": [
"from importlib.util import find_spec\n",
"\n",
"from numpy import version as numpy_version\n",
"from pandas import IndexSlice, concat, read_csv\n",
"from pandas import IndexSlice as idx\n",
"import pandas_ta as ta\n",
"\n",
"print(\"Package Versions:\")\n",
"print(f\"Pandas TA v{ta.version}\")\n",
"\n",
"has_numba = find_spec(\"numba\") is not None\n",
"if has_numba:\n",
" from numba import __version__ as numba_version\n",
" print(f\"Numba v{numba_version}\")\n",
" \n",
"if find_spec(\"talib\") is not None:\n",
" from talib import __version__ as tal_version\n",
" print(f\"talib v{tal_version}\")\n",
"\n",
"from pandas import read_csv\n",
"from pandas import DatetimeIndex as dti\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"id": "68531949-cca4-47f5-89e7-00d77855e8a3",
"metadata": {},
"source": [
"### Fetch Sample Data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "efe05268-b2a1-4beb-9b7d-280e374d8d50",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[+] yf | SPY(1260, 7): 3134.9958 ms (3.1350 s)\n"
]
}
],
"source": [
"_df = ta.df.ta.ticker(\"SPY\", period=\"5y\", timed=True)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "3f7ad492-a70c-4367-a60e-92bd186f1afb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1260, 7)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = _df.copy()\n",
"df.shape"
]
},
{
"cell_type": "markdown",
"id": "ea75457d-9b95-41ae-9205-23b822c3a3d8",
"metadata": {},
"source": [
"### If ```numba``` installed, prep @njit functions"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "38176845-652e-43dc-b426-12eaa9952c5f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"============================================================\n",
" Slowest Indicators\n",
" Observations: 150\n",
"============================================================\n",
" ms secs\n",
"Indicator \n",
"alligator 1496.8930 1.49689\n",
"atrts 415.8880 0.41589\n",
"reflex 192.3144 0.19231\n",
"trendflex 159.5207 0.15952\n",
"td_seq 109.6769 0.10968\n",
"... ... ...\n",
"cti 0.1705 0.00017\n",
"tsignals 0.0013 0.00000\n",
"short_run 0.0014 0.00000\n",
"long_run 0.0012 0.00000\n",
"xsignals 0.0016 0.00000\n",
"\n",
"[146 rows x 2 columns]\n",
"\n",
"============================================================\n",
"Time Stats:\n",
" ms secs\n",
"min 0.001200 0.000000\n",
"50% 1.119900 0.001120\n",
"mean 19.449172 0.019449\n",
"max 1496.893000 1.496890\n",
"total 2839.579100 2.839580\n",
"\n",
"============================================================\n",
"\n"
]
}
],
"source": [
"if has_numba:\n",
" ta.speed_test(df.iloc[-150:], talib=False)"
]
},
{
"cell_type": "markdown",
"id": "4ce3fb06-5ca6-44e2-a8f1-6c35af7c0c23",
"metadata": {},
"source": [
"## Performance **without** TA Lib"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "6404c4d7-3318-4749-a2b7-c5dd9c5e3f59",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"[+] aberration: 1.0925 ms (0.0011 s)\n",
"[+] accbands: 1.2377 ms (0.0012 s)\n",
"[+] ad: 1.1768 ms (0.0012 s)\n",
"[+] adosc: 2.3483 ms (0.0023 s)\n",
"[+] adx: 3.3845 ms (0.0034 s)\n",
"[+] alligator: 219.4132 ms (0.2194 s)\n",
"[+] alma: 0.5391 ms (0.0005 s)\n",
"[+] amat: 3.1778 ms (0.0032 s)\n",
"[+] ao: 0.5460 ms (0.0005 s)\n",
"[+] aobv: 5.7913 ms (0.0058 s)\n",
"[+] apo: 1.0890 ms (0.0011 s)\n",
"[+] aroon: 8.9856 ms (0.0090 s)\n",
"[+] atr: 1.8194 ms (0.0018 s)\n",
"[+] atrts: 2.3529 ms (0.0024 s)\n",
"[+] bbands: 1.5946 ms (0.0016 s)\n",
"[+] bias: 0.6733 ms (0.0007 s)\n",
"[+] bop: 0.8715 ms (0.0009 s)\n",
"[+] brar: 4.6938 ms (0.0047 s)\n",
"[+] cci: 15.6281 ms (0.0156 s)\n",
"[+] cdl_pattern: 10.3017 ms (0.0103 s)\n",
"[+] cdl_z: 1.7850 ms (0.0018 s)\n",
"[+] cfo: 0.3909 ms (0.0004 s)\n",
"[+] cg: 5.2792 ms (0.0053 s)\n",
"[+] chop: 1.5169 ms (0.0015 s)\n",
"[+] cksp: 1.8153 ms (0.0018 s)\n",
"[+] cmf: 1.2263 ms (0.0012 s)\n",
"[+] cmo: 2.2767 ms (0.0023 s)\n",
"[+] coppock: 0.3589 ms (0.0004 s)\n",
"[+] cti: 0.1935 ms (0.0002 s)\n",
"[+] cube: 0.5720 ms (0.0006 s)\n",
"[+] decay: 0.8061 ms (0.0008 s)\n",
"[+] decreasing: 0.3315 ms (0.0003 s)\n",
"[+] dema: 1.1394 ms (0.0011 s)\n",
"[+] dm: 2.2477 ms (0.0022 s)\n",
"[+] donchian: 1.0922 ms (0.0011 s)\n",
"[+] dpo: 0.4757 ms (0.0005 s)\n",
"[+] ebsw: 40.1932 ms (0.0402 s)\n",
"[+] efi: 0.4309 ms (0.0004 s)\n",
"[+] ema: 0.4663 ms (0.0005 s)\n",
"[+] entropy: 0.8890 ms (0.0009 s)\n",
"[+] eom: 1.0685 ms (0.0011 s)\n",
"[+] er: 0.7039 ms (0.0007 s)\n",
"[+] eri: 0.7141 ms (0.0007 s)\n",
"[+] fisher: 9.9928 ms (0.0100 s)\n",
"[+] fwma: 2.5179 ms (0.0025 s)\n",
"[+] ha: 77.6575 ms (0.0777 s)\n",
"[+] hilo: 84.2990 ms (0.0843 s)\n",
"[+] hl2: 0.3635 ms (0.0004 s)\n",
"[+] hlc3: 0.3576 ms (0.0004 s)\n",
"[+] hma: 0.4158 ms (0.0004 s)\n",
"[+] hwc: 8.5273 ms (0.0085 s)\n",
"[+] hwma: 6.4855 ms (0.0065 s)\n",
"[+] ifisher: 0.6070 ms (0.0006 s)\n",
"[+] increasing: 0.3525 ms (0.0004 s)\n",
"[+] inertia: 4.2218 ms (0.0042 s)\n",
"[+] jma: 28.2376 ms (0.0282 s)\n",
"[+] kama: 15.8834 ms (0.0159 s)\n",
"[+] kc: 0.9397 ms (0.0009 s)\n",
"[+] kdj: 1.7454 ms (0.0017 s)\n",
"[+] kst: 1.4877 ms (0.0015 s)\n",
"[+] kurtosis: 0.4252 ms (0.0004 s)\n",
"[+] kvo: 3.5205 ms (0.0035 s)\n",
"[+] linreg: 13.0294 ms (0.0130 s)\n",
"[+] log_return: 0.2041 ms (0.0002 s)\n",
"[+] long_run: 0.0011 ms (0.0000 s)\n",
"[+] macd: 2.7193 ms (0.0027 s)\n",
"[+] mad: 14.5471 ms (0.0145 s)\n",
"[+] massi: 1.3195 ms (0.0013 s)\n",
"[+] mcgd: 2.3247 ms (0.0023 s)\n",
"[+] median: 0.7084 ms (0.0007 s)\n",
"[+] mfi: 4.1935 ms (0.0042 s)\n",
"[+] midpoint: 0.6485 ms (0.0006 s)\n",
"[+] midprice: 0.6756 ms (0.0007 s)\n",
"[+] mom: 0.2173 ms (0.0002 s)\n",
"[+] natr: 1.8147 ms (0.0018 s)\n",
"[+] nvi: 2.7327 ms (0.0027 s)\n",
"[+] obv: 2.1172 ms (0.0021 s)\n",
"[+] ohlc4: 0.4611 ms (0.0005 s)\n",
"[+] pdist: 1.2092 ms (0.0012 s)\n",
"[+] percent_return: 0.1870 ms (0.0002 s)\n",
"[+] pgo: 0.6019 ms (0.0006 s)\n",
"[+] ppo: 1.6355 ms (0.0016 s)\n",
"[+] psar: 108.8582 ms (0.1089 s)\n",
"[+] psl: 1.7168 ms (0.0017 s)\n",
"[+] pvi: 2.7434 ms (0.0027 s)\n",
"[+] pvo: 0.8043 ms (0.0008 s)\n",
"[+] pvol: 0.2969 ms (0.0003 s)\n",
"[+] pvr: 1.3597 ms (0.0014 s)\n",
"[+] pvt: 0.3973 ms (0.0004 s)\n",
"[+] pwma: 2.2865 ms (0.0023 s)\n",
"[+] qqe: 199.6916 ms (0.1997 s)\n",
"[+] qstick: 0.7852 ms (0.0008 s)\n",
"[+] quantile: 0.7704 ms (0.0008 s)\n",
"[+] reflex: 0.2441 ms (0.0002 s)\n",
"[+] remap: 0.1834 ms (0.0002 s)\n",
"[+] rma: 0.3475 ms (0.0003 s)\n",
"[+] roc: 0.4204 ms (0.0004 s)\n",
"[+] rsi: 2.6160 ms (0.0026 s)\n",
"[+] rsx: 10.6464 ms (0.0106 s)\n",
"[+] rvgi: 8.3236 ms (0.0083 s)\n",
"[+] rvi: 4.9372 ms (0.0049 s)\n",
"[+] short_run: 0.0012 ms (0.0000 s)\n",
"[+] sinwma: 11.2597 ms (0.0113 s)\n",
"[+] skew: 0.6183 ms (0.0006 s)\n",
"[+] slope: 0.2954 ms (0.0003 s)\n",
"[+] sma: 0.4162 ms (0.0004 s)\n",
"[+] smi: 1.2353 ms (0.0012 s)\n",
"[+] smma: 72.7620 ms (0.0728 s)\n",
"[+] squeeze: 3.2674 ms (0.0033 s)\n",
"[+] squeeze_pro: 5.1635 ms (0.0052 s)\n",
"[+] ssf: 0.1887 ms (0.0002 s)\n",
"[+] ssf3: 0.1724 ms (0.0002 s)\n",
"[+] stc: 24.5385 ms (0.0245 s)\n",
"[+] stdev: 0.4670 ms (0.0005 s)\n",
"[+] stoch: 2.1049 ms (0.0021 s)\n",
"[+] stochf: 1.8578 ms (0.0019 s)\n",
"[+] stochrsi: 1.3623 ms (0.0014 s)\n",
"[+] supertrend: 54.3731 ms (0.0544 s)\n",
"[+] swma: 2.3784 ms (0.0024 s)\n",
"[+] t3: 2.4433 ms (0.0024 s)\n",
"[+] td_seq: 939.3749 ms (0.9394 s)\n",
"[+] tema: 2.3474 ms (0.0023 s)\n",
"[+] thermo: 1.8748 ms (0.0019 s)\n",
"[+] tos_stdevall: 3.7445 ms (0.0037 s)\n",
"[+] trendflex: 0.2807 ms (0.0003 s)\n",
"[+] trima: 0.7627 ms (0.0008 s)\n",
"[+] trix: 2.5868 ms (0.0026 s)\n",
"[+] true_range: 2.2454 ms (0.0022 s)\n",
"[+] tsi: 3.7692 ms (0.0038 s)\n",
"[+] tsignals: 0.0018 ms (0.0000 s)\n",
"[+] ttm_trend: 2.1323 ms (0.0021 s)\n",
"[+] ui: 1.0357 ms (0.0010 s)\n",
"[+] uo: 3.8208 ms (0.0038 s)\n",
"[+] variance: 0.4530 ms (0.0005 s)\n",
"[+] vhf: 1.3929 ms (0.0014 s)\n",
"[+] vidya: 55.6581 ms (0.0557 s)\n",
"[+] vortex: 2.2883 ms (0.0023 s)\n",
"[+] vwap: 2.8340 ms (0.0028 s)\n",
"[+] vwma: 0.6360 ms (0.0006 s)\n",
"[+] wb_tsv: 5.5872 ms (0.0056 s)\n",
"[+] wcp: 0.5243 ms (0.0005 s)\n",
"[+] willr: 1.2556 ms (0.0013 s)\n",
"[+] wma: 12.9237 ms (0.0129 s)\n",
"[+] xsignals: 0.0019 ms (0.0000 s)\n",
"[+] zlma: 1.0086 ms (0.0010 s)\n",
"[+] zscore: 1.2827 ms (0.0013 s)\n",
"\n",
"============================================================\n",
" Slowest 10 Indicators [146]\n",
" Observations: 1260\n",
"============================================================\n",
" ms secs\n",
"Indicator \n",
"td_seq 939.3749 0.93937\n",
"alligator 219.4132 0.21941\n",
"qqe 199.6916 0.19969\n",
"psar 108.8582 0.10886\n",
"hilo 84.2990 0.08430\n",
"ha 77.6575 0.07766\n",
"smma 72.7620 0.07276\n",
"vidya 55.6581 0.05566\n",
"supertrend 54.3731 0.05437\n",
"ebsw 40.1932 0.04019\n",
"\n",
"============================================================\n",
"Time Stats:\n",
" ms secs\n",
"min 0.001100 0.000000\n",
"50% 1.440300 0.001440\n",
"mean 15.302968 0.015303\n",
"max 939.374900 0.939370\n",
"total 2234.233400 2.234260\n",
"\n",
"============================================================\n",
"\n"
]
}
],
"source": [
"pta_speedsdf, pta_statsdf = ta.speed_test(df, top=10, talib=False, stats=True, gradient=True, verbose=True)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "b3a753e2-9634-4cc8-9544-5c28c92130a3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\">\n",
"#T_c5e74_row0_col0, #T_c5e74_row0_col1 {\n",
" background-color: #ff0000;\n",
" color: #f1f1f1;\n",
"}\n",
"#T_c5e74_row1_col0, #T_c5e74_row1_col1 {\n",
" background-color: #ffcc00;\n",
" color: #000000;\n",
"}\n",
"#T_c5e74_row2_col0, #T_c5e74_row2_col1 {\n",
" background-color: #ffd200;\n",
" color: #000000;\n",
"}\n",
"#T_c5e74_row3_col0, #T_c5e74_row3_col1 {\n",
" background-color: #ffec00;\n",
" color: #000000;\n",
"}\n",
"#T_c5e74_row4_col0, #T_c5e74_row4_col1 {\n",
" background-color: #fff300;\n",
" color: #000000;\n",
"}\n",
"#T_c5e74_row5_col0, #T_c5e74_row5_col1 {\n",
" background-color: #fff500;\n",
" color: #000000;\n",
"}\n",
"#T_c5e74_row6_col0, #T_c5e74_row6_col1 {\n",
" background-color: #fff600;\n",
" color: #000000;\n",
"}\n",
"#T_c5e74_row7_col0, #T_c5e74_row7_col1, #T_c5e74_row8_col0, #T_c5e74_row8_col1 {\n",
" background-color: #fffb00;\n",
" color: #000000;\n",
"}\n",
"#T_c5e74_row9_col0, #T_c5e74_row9_col1 {\n",
" background-color: #ffff00;\n",
" color: #000000;\n",
"}\n",
"</style>\n",
"<table id=\"T_c5e74_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"blank level0\" >&nbsp;</th>\n",
" <th class=\"col_heading level0 col0\" >ms</th>\n",
" <th class=\"col_heading level0 col1\" >secs</th>\n",
" </tr>\n",
" <tr>\n",
" <th class=\"index_name level0\" >Indicator</th>\n",
" <th class=\"blank col0\" >&nbsp;</th>\n",
" <th class=\"blank col1\" >&nbsp;</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row0\" class=\"row_heading level0 row0\" >td_seq</th>\n",
" <td id=\"T_c5e74_row0_col0\" class=\"data row0 col0\" >939.374900</td>\n",
" <td id=\"T_c5e74_row0_col1\" class=\"data row0 col1\" >0.939370</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row1\" class=\"row_heading level0 row1\" >alligator</th>\n",
" <td id=\"T_c5e74_row1_col0\" class=\"data row1 col0\" >219.413200</td>\n",
" <td id=\"T_c5e74_row1_col1\" class=\"data row1 col1\" >0.219410</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row2\" class=\"row_heading level0 row2\" >qqe</th>\n",
" <td id=\"T_c5e74_row2_col0\" class=\"data row2 col0\" >199.691600</td>\n",
" <td id=\"T_c5e74_row2_col1\" class=\"data row2 col1\" >0.199690</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row3\" class=\"row_heading level0 row3\" >psar</th>\n",
" <td id=\"T_c5e74_row3_col0\" class=\"data row3 col0\" >108.858200</td>\n",
" <td id=\"T_c5e74_row3_col1\" class=\"data row3 col1\" >0.108860</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row4\" class=\"row_heading level0 row4\" >hilo</th>\n",
" <td id=\"T_c5e74_row4_col0\" class=\"data row4 col0\" >84.299000</td>\n",
" <td id=\"T_c5e74_row4_col1\" class=\"data row4 col1\" >0.084300</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row5\" class=\"row_heading level0 row5\" >ha</th>\n",
" <td id=\"T_c5e74_row5_col0\" class=\"data row5 col0\" >77.657500</td>\n",
" <td id=\"T_c5e74_row5_col1\" class=\"data row5 col1\" >0.077660</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row6\" class=\"row_heading level0 row6\" >smma</th>\n",
" <td id=\"T_c5e74_row6_col0\" class=\"data row6 col0\" >72.762000</td>\n",
" <td id=\"T_c5e74_row6_col1\" class=\"data row6 col1\" >0.072760</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row7\" class=\"row_heading level0 row7\" >vidya</th>\n",
" <td id=\"T_c5e74_row7_col0\" class=\"data row7 col0\" >55.658100</td>\n",
" <td id=\"T_c5e74_row7_col1\" class=\"data row7 col1\" >0.055660</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row8\" class=\"row_heading level0 row8\" >supertrend</th>\n",
" <td id=\"T_c5e74_row8_col0\" class=\"data row8 col0\" >54.373100</td>\n",
" <td id=\"T_c5e74_row8_col1\" class=\"data row8 col1\" >0.054370</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_c5e74_level0_row9\" class=\"row_heading level0 row9\" >ebsw</th>\n",
" <td id=\"T_c5e74_row9_col0\" class=\"data row9 col0\" >40.193200</td>\n",
" <td id=\"T_c5e74_row9_col1\" class=\"data row9 col1\" >0.040190</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x153b10d60>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pta_speedsdf"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "715520de-ad95-47a6-aa41-5f00d1b23eac",
"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>ms</th>\n",
" <th>secs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>0.001100</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1.440300</td>\n",
" <td>0.001440</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>15.302968</td>\n",
" <td>0.015303</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>939.374900</td>\n",
" <td>0.939370</td>\n",
" </tr>\n",
" <tr>\n",
" <th>total</th>\n",
" <td>2234.233400</td>\n",
" <td>2.234260</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ms secs\n",
"min 0.001100 0.000000\n",
"50% 1.440300 0.001440\n",
"mean 15.302968 0.015303\n",
"max 939.374900 0.939370\n",
"total 2234.233400 2.234260"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pta_statsdf"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c7445703-cfe7-4b66-9d74-0712191080cb",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "942e3b8a-e3d9-480f-82b4-75d311b54cfa",
"metadata": {},
"source": [
"## Performance **with** TA Lib"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "b4757c9e-7a8f-4b82-93a9-8b3e4837a1d0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"[+] aberration: 1.4574 ms (0.0015 s)\n",
"[+] accbands: 1.5594 ms (0.0016 s)\n",
"[+] ad: 0.6050 ms (0.0006 s)\n",
"[+] adosc: 0.5090 ms (0.0005 s)\n",
"[+] adx: 6.9582 ms (0.0070 s)\n",
"[+] alligator: 234.2123 ms (0.2342 s)\n",
"[+] alma: 0.5487 ms (0.0005 s)\n",
"[+] amat: 2.3552 ms (0.0024 s)\n",
"[+] ao: 0.5406 ms (0.0005 s)\n",
"[+] aobv: 3.0123 ms (0.0030 s)\n",
"[+] apo: 0.2258 ms (0.0002 s)\n",
"[+] aroon: 0.6451 ms (0.0006 s)\n",
"[+] atr: 0.3848 ms (0.0004 s)\n",
"[+] atrts: 0.5595 ms (0.0006 s)\n",
"[+] bbands: 0.9761 ms (0.0010 s)\n",
"[+] bias: 0.3614 ms (0.0004 s)\n",
"[+] bop: 0.5203 ms (0.0005 s)\n",
"[+] brar: 5.0789 ms (0.0051 s)\n",
"[+] cci: 0.4582 ms (0.0005 s)\n",
"[+] cdl_pattern: 12.4430 ms (0.0124 s)\n",
"[+] cdl_z: 2.2153 ms (0.0022 s)\n",
"[+] cfo: 0.4864 ms (0.0005 s)\n",
"[+] cg: 7.3939 ms (0.0074 s)\n",
"[+] chop: 1.7344 ms (0.0017 s)\n",
"[+] cksp: 1.7417 ms (0.0017 s)\n",
"[+] cmf: 1.5916 ms (0.0016 s)\n",
"[+] cmo: 0.2477 ms (0.0002 s)\n",
"[+] coppock: 0.3745 ms (0.0004 s)\n",
"[+] cti: 0.2111 ms (0.0002 s)\n",
"[+] cube: 0.8503 ms (0.0009 s)\n",
"[+] decay: 0.8619 ms (0.0009 s)\n",
"[+] decreasing: 0.3596 ms (0.0004 s)\n",
"[+] dema: 0.2110 ms (0.0002 s)\n",
"[+] dm: 0.5595 ms (0.0006 s)\n",
"[+] donchian: 1.0422 ms (0.0010 s)\n",
"[+] dpo: 0.5036 ms (0.0005 s)\n",
"[+] ebsw: 42.1200 ms (0.0421 s)\n",
"[+] efi: 0.5090 ms (0.0005 s)\n",
"[+] ema: 0.1804 ms (0.0002 s)\n",
"[+] entropy: 0.8325 ms (0.0008 s)\n",
"[+] eom: 1.1210 ms (0.0011 s)\n",
"[+] er: 0.6062 ms (0.0006 s)\n",
"[+] eri: 0.7919 ms (0.0008 s)\n",
"[+] fisher: 10.7730 ms (0.0108 s)\n",
"[+] fwma: 4.7763 ms (0.0048 s)\n",
"[+] ha: 91.8492 ms (0.0918 s)\n",
"[+] hilo: 89.0798 ms (0.0891 s)\n",
"[+] hl2: 0.5440 ms (0.0005 s)\n",
"[+] hlc3: 0.4229 ms (0.0004 s)\n",
"[+] hma: 0.4605 ms (0.0005 s)\n",
"[+] hwc: 9.0071 ms (0.0090 s)\n",
"[+] hwma: 7.2081 ms (0.0072 s)\n",
"[+] ifisher: 0.7474 ms (0.0007 s)\n",
"[+] increasing: 0.4005 ms (0.0004 s)\n",
"[+] inertia: 5.0944 ms (0.0051 s)\n",
"[+] jma: 30.4198 ms (0.0304 s)\n",
"[+] kama: 16.8293 ms (0.0168 s)\n",
"[+] kc: 1.0569 ms (0.0011 s)\n",
"[+] kdj: 1.7952 ms (0.0018 s)\n",
"[+] kst: 1.8727 ms (0.0019 s)\n",
"[+] kurtosis: 0.3943 ms (0.0004 s)\n",
"[+] kvo: 3.8675 ms (0.0039 s)\n",
"[+] linreg: 0.2095 ms (0.0002 s)\n",
"[+] log_return: 0.3195 ms (0.0003 s)\n",
"[+] long_run: 0.0013 ms (0.0000 s)\n",
"[+] macd: 0.5531 ms (0.0006 s)\n",
"[+] mad: 15.0788 ms (0.0151 s)\n",
"[+] massi: 0.7279 ms (0.0007 s)\n",
"[+] mcgd: 2.4638 ms (0.0025 s)\n",
"[+] median: 0.8215 ms (0.0008 s)\n",
"[+] mfi: 0.5097 ms (0.0005 s)\n",
"[+] midpoint: 0.1810 ms (0.0002 s)\n",
"[+] midprice: 0.2682 ms (0.0003 s)\n",
"[+] mom: 0.1870 ms (0.0002 s)\n",
"[+] natr: 0.4198 ms (0.0004 s)\n",
"[+] nvi: 3.2221 ms (0.0032 s)\n",
"[+] obv: 0.3030 ms (0.0003 s)\n",
"[+] ohlc4: 0.4550 ms (0.0005 s)\n",
"[+] pdist: 1.2511 ms (0.0013 s)\n",
"[+] percent_return: 0.1915 ms (0.0002 s)\n",
"[+] pgo: 0.6167 ms (0.0006 s)\n",
"[+] ppo: 0.5543 ms (0.0006 s)\n",
"[+] psar: 112.6814 ms (0.1127 s)\n",
"[+] psl: 1.7091 ms (0.0017 s)\n",
"[+] pvi: 2.9347 ms (0.0029 s)\n",
"[+] pvo: 0.7635 ms (0.0008 s)\n",
"[+] pvol: 0.3239 ms (0.0003 s)\n",
"[+] pvr: 1.3519 ms (0.0014 s)\n",
"[+] pvt: 0.3971 ms (0.0004 s)\n",
"[+] pwma: 2.3767 ms (0.0024 s)\n",
"[+] qqe: 197.1505 ms (0.1972 s)\n",
"[+] qstick: 0.5424 ms (0.0005 s)\n",
"[+] quantile: 0.7355 ms (0.0007 s)\n",
"[+] reflex: 0.2276 ms (0.0002 s)\n",
"[+] remap: 0.1761 ms (0.0002 s)\n",
"[+] rma: 0.3241 ms (0.0003 s)\n",
"[+] roc: 0.1672 ms (0.0002 s)\n",
"[+] rsi: 0.1781 ms (0.0002 s)\n",
"[+] rsx: 10.2953 ms (0.0103 s)\n",
"[+] rvgi: 8.2884 ms (0.0083 s)\n",
"[+] rvi: 4.5673 ms (0.0046 s)\n",
"[+] short_run: 0.0015 ms (0.0000 s)\n",
"[+] sinwma: 10.9650 ms (0.0110 s)\n",
"[+] skew: 0.4569 ms (0.0005 s)\n",
"[+] slope: 0.2607 ms (0.0003 s)\n",
"[+] sma: 0.1720 ms (0.0002 s)\n",
"[+] smi: 1.1787 ms (0.0012 s)\n",
"[+] smma: 72.3567 ms (0.0724 s)\n",
"[+] squeeze: 3.1259 ms (0.0031 s)\n",
"[+] squeeze_pro: 4.9297 ms (0.0049 s)\n",
"[+] ssf: 0.1875 ms (0.0002 s)\n",
"[+] ssf3: 0.1669 ms (0.0002 s)\n",
"[+] stc: 25.7928 ms (0.0258 s)\n",
"[+] stdev: 0.2406 ms (0.0002 s)\n",
"[+] stoch: 0.6115 ms (0.0006 s)\n",
"[+] stochf: 0.5768 ms (0.0006 s)\n",
"[+] stochrsi: 1.3957 ms (0.0014 s)\n",
"[+] supertrend: 54.8945 ms (0.0549 s)\n",
"[+] swma: 2.5675 ms (0.0026 s)\n",
"[+] t3: 0.2058 ms (0.0002 s)\n",
"[+] td_seq: 920.2317 ms (0.9202 s)\n",
"[+] tema: 0.2495 ms (0.0002 s)\n",
"[+] thermo: 1.5787 ms (0.0016 s)\n",
"[+] tos_stdevall: 3.7933 ms (0.0038 s)\n",
"[+] trendflex: 0.2212 ms (0.0002 s)\n",
"[+] trima: 0.1798 ms (0.0002 s)\n",
"[+] trix: 1.0912 ms (0.0011 s)\n",
"[+] true_range: 0.3817 ms (0.0004 s)\n",
"[+] tsi: 0.8223 ms (0.0008 s)\n",
"[+] tsignals: 0.0015 ms (0.0000 s)\n",
"[+] ttm_trend: 1.8579 ms (0.0019 s)\n",
"[+] ui: 1.0563 ms (0.0011 s)\n",
"[+] uo: 0.4031 ms (0.0004 s)\n",
"[+] variance: 0.1758 ms (0.0002 s)\n",
"[+] vhf: 1.2903 ms (0.0013 s)\n",
"[+] vidya: 50.9213 ms (0.0509 s)\n",
"[+] vortex: 1.8401 ms (0.0018 s)\n",
"[+] vwap: 2.1093 ms (0.0021 s)\n",
"[+] vwma: 0.4780 ms (0.0005 s)\n",
"[+] wb_tsv: 4.1540 ms (0.0042 s)\n",
"[+] wcp: 0.3857 ms (0.0004 s)\n",
"[+] willr: 0.3641 ms (0.0004 s)\n",
"[+] wma: 0.1608 ms (0.0002 s)\n",
"[+] xsignals: 0.0017 ms (0.0000 s)\n",
"[+] zlma: 0.3506 ms (0.0004 s)\n",
"[+] zscore: 0.3875 ms (0.0004 s)\n",
"\n",
"============================================================\n",
" Slowest 10 Indicators [146]\n",
" Observations[talib]: 1260\n",
"============================================================\n",
" ms secs\n",
"Indicator \n",
"td_seq 920.2317 0.92023\n",
"alligator 234.2123 0.23421\n",
"qqe 197.1505 0.19715\n",
"psar 112.6814 0.11268\n",
"ha 91.8492 0.09185\n",
"hilo 89.0798 0.08908\n",
"smma 72.3567 0.07236\n",
"supertrend 54.8945 0.05489\n",
"vidya 50.9213 0.05092\n",
"ebsw 42.1200 0.04212\n",
"\n",
"============================================================\n",
"Time Stats:\n",
" ms secs\n",
"min 0.001300 0.000000\n",
"50% 0.686500 0.000690\n",
"mean 14.826408 0.014827\n",
"max 920.231700 0.920230\n",
"total 2164.655500 2.164670\n",
"\n",
"============================================================\n",
"\n"
]
}
],
"source": [
"tal_speedsdf, tal_statsdf = ta.speed_test(df, top=10, talib=True, stats=True, gradient=True, verbose=True)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "3fe877e5-b1eb-4e68-9720-67a1e7ee6827",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\">\n",
"#T_d6335_row0_col0, #T_d6335_row0_col1 {\n",
" background-color: #ff0000;\n",
" color: #f1f1f1;\n",
"}\n",
"#T_d6335_row1_col0, #T_d6335_row1_col1 {\n",
" background-color: #ffc700;\n",
" color: #000000;\n",
"}\n",
"#T_d6335_row2_col0, #T_d6335_row2_col1 {\n",
" background-color: #ffd200;\n",
" color: #000000;\n",
"}\n",
"#T_d6335_row3_col0, #T_d6335_row3_col1 {\n",
" background-color: #ffeb00;\n",
" color: #000000;\n",
"}\n",
"#T_d6335_row4_col0, #T_d6335_row4_col1 {\n",
" background-color: #fff100;\n",
" color: #000000;\n",
"}\n",
"#T_d6335_row5_col0, #T_d6335_row5_col1 {\n",
" background-color: #fff200;\n",
" color: #000000;\n",
"}\n",
"#T_d6335_row6_col0, #T_d6335_row6_col1 {\n",
" background-color: #fff700;\n",
" color: #000000;\n",
"}\n",
"#T_d6335_row7_col0, #T_d6335_row7_col1 {\n",
" background-color: #fffc00;\n",
" color: #000000;\n",
"}\n",
"#T_d6335_row8_col0, #T_d6335_row8_col1 {\n",
" background-color: #fffd00;\n",
" color: #000000;\n",
"}\n",
"#T_d6335_row9_col0, #T_d6335_row9_col1 {\n",
" background-color: #ffff00;\n",
" color: #000000;\n",
"}\n",
"</style>\n",
"<table id=\"T_d6335_\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"blank level0\" >&nbsp;</th>\n",
" <th class=\"col_heading level0 col0\" >ms</th>\n",
" <th class=\"col_heading level0 col1\" >secs</th>\n",
" </tr>\n",
" <tr>\n",
" <th class=\"index_name level0\" >Indicator</th>\n",
" <th class=\"blank col0\" >&nbsp;</th>\n",
" <th class=\"blank col1\" >&nbsp;</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row0\" class=\"row_heading level0 row0\" >td_seq</th>\n",
" <td id=\"T_d6335_row0_col0\" class=\"data row0 col0\" >920.231700</td>\n",
" <td id=\"T_d6335_row0_col1\" class=\"data row0 col1\" >0.920230</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row1\" class=\"row_heading level0 row1\" >alligator</th>\n",
" <td id=\"T_d6335_row1_col0\" class=\"data row1 col0\" >234.212300</td>\n",
" <td id=\"T_d6335_row1_col1\" class=\"data row1 col1\" >0.234210</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row2\" class=\"row_heading level0 row2\" >qqe</th>\n",
" <td id=\"T_d6335_row2_col0\" class=\"data row2 col0\" >197.150500</td>\n",
" <td id=\"T_d6335_row2_col1\" class=\"data row2 col1\" >0.197150</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row3\" class=\"row_heading level0 row3\" >psar</th>\n",
" <td id=\"T_d6335_row3_col0\" class=\"data row3 col0\" >112.681400</td>\n",
" <td id=\"T_d6335_row3_col1\" class=\"data row3 col1\" >0.112680</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row4\" class=\"row_heading level0 row4\" >ha</th>\n",
" <td id=\"T_d6335_row4_col0\" class=\"data row4 col0\" >91.849200</td>\n",
" <td id=\"T_d6335_row4_col1\" class=\"data row4 col1\" >0.091850</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row5\" class=\"row_heading level0 row5\" >hilo</th>\n",
" <td id=\"T_d6335_row5_col0\" class=\"data row5 col0\" >89.079800</td>\n",
" <td id=\"T_d6335_row5_col1\" class=\"data row5 col1\" >0.089080</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row6\" class=\"row_heading level0 row6\" >smma</th>\n",
" <td id=\"T_d6335_row6_col0\" class=\"data row6 col0\" >72.356700</td>\n",
" <td id=\"T_d6335_row6_col1\" class=\"data row6 col1\" >0.072360</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row7\" class=\"row_heading level0 row7\" >supertrend</th>\n",
" <td id=\"T_d6335_row7_col0\" class=\"data row7 col0\" >54.894500</td>\n",
" <td id=\"T_d6335_row7_col1\" class=\"data row7 col1\" >0.054890</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row8\" class=\"row_heading level0 row8\" >vidya</th>\n",
" <td id=\"T_d6335_row8_col0\" class=\"data row8 col0\" >50.921300</td>\n",
" <td id=\"T_d6335_row8_col1\" class=\"data row8 col1\" >0.050920</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_d6335_level0_row9\" class=\"row_heading level0 row9\" >ebsw</th>\n",
" <td id=\"T_d6335_row9_col0\" class=\"data row9 col0\" >42.120000</td>\n",
" <td id=\"T_d6335_row9_col1\" class=\"data row9 col1\" >0.042120</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x153ae14c0>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tal_speedsdf"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "bf35b59d-4253-41e3-895e-432a824789fb",
"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>ms</th>\n",
" <th>secs</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>0.001300</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>0.686500</td>\n",
" <td>0.000690</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>14.826408</td>\n",
" <td>0.014827</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>920.231700</td>\n",
" <td>0.920230</td>\n",
" </tr>\n",
" <tr>\n",
" <th>total</th>\n",
" <td>2164.655500</td>\n",
" <td>2.164670</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ms secs\n",
"min 0.001300 0.000000\n",
"50% 0.686500 0.000690\n",
"mean 14.826408 0.014827\n",
"max 920.231700 0.920230\n",
"total 2164.655500 2.164670"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"tal_statsdf"
]
},
{
"cell_type": "markdown",
"id": "c33c37fa-8062-4258-90ba-0c19d115698d",
"metadata": {},
"source": [
"# Comparisons"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "35454271-cee2-4bc0-84b7-4099730bb0ed",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1260, 7)\n"
]
},
{
"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></th>\n",
" <th>min</th>\n",
" <th>50%</th>\n",
" <th>mean</th>\n",
" <th>max</th>\n",
" <th>total</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">TA Lib</th>\n",
" <th>ms</th>\n",
" <td>0.0013</td>\n",
" <td>0.68650</td>\n",
" <td>14.826408</td>\n",
" <td>920.23170</td>\n",
" <td>2164.65550</td>\n",
" </tr>\n",
" <tr>\n",
" <th>secs</th>\n",
" <td>0.0000</td>\n",
" <td>0.00069</td>\n",
" <td>0.014827</td>\n",
" <td>0.92023</td>\n",
" <td>2.16467</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Pandas TA</th>\n",
" <th>ms</th>\n",
" <td>0.0011</td>\n",
" <td>1.44030</td>\n",
" <td>15.302968</td>\n",
" <td>939.37490</td>\n",
" <td>2234.23340</td>\n",
" </tr>\n",
" <tr>\n",
" <th>secs</th>\n",
" <td>0.0000</td>\n",
" <td>0.00144</td>\n",
" <td>0.015303</td>\n",
" <td>0.93937</td>\n",
" <td>2.23426</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" min 50% mean max total\n",
"TA Lib ms 0.0013 0.68650 14.826408 920.23170 2164.65550\n",
" secs 0.0000 0.00069 0.014827 0.92023 2.16467\n",
"Pandas TA ms 0.0011 1.44030 15.302968 939.37490 2234.23340\n",
" secs 0.0000 0.00144 0.015303 0.93937 2.23426"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(df.shape)\n",
"compdf = concat([tal_statsdf, pta_statsdf], keys=[\"TA Lib\", \"Pandas TA\"], axis=1).T\n",
"compdf"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "167b311f-5180-4abf-95e7-1b41a96a6a1d",
"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>Differences</th>\n",
" <th>min</th>\n",
" <th>50%</th>\n",
" <th>mean</th>\n",
" <th>max</th>\n",
" <th>total</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>ms</th>\n",
" <td>0.0002</td>\n",
" <td>0.75380</td>\n",
" <td>0.476561</td>\n",
" <td>19.14320</td>\n",
" <td>69.57790</td>\n",
" </tr>\n",
" <tr>\n",
" <th>secs</th>\n",
" <td>0.0000</td>\n",
" <td>0.00075</td>\n",
" <td>0.000477</td>\n",
" <td>0.01914</td>\n",
" <td>0.06959</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Differences min 50% mean max total\n",
"ms 0.0002 0.75380 0.476561 19.14320 69.57790\n",
"secs 0.0000 0.00075 0.000477 0.01914 0.06959"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diffdf = (tal_statsdf - pta_statsdf).abs().T\n",
"diffdf.columns.name = \"Differences\"\n",
"diffdf"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "27fbdb58-a425-402c-a6ca-37c71c717fc0",
"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.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}