Files
pandas-ta/examples/Speed_Test.ipynb
2022-05-02 16:08:16 -07:00

1206 lines
41 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.63b0\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): 3702.3428 ms (3.7023 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 1446.0085 1.44601\n",
"mama 602.6056 0.60261\n",
"atrts 390.2933 0.39029\n",
"reflex 168.9724 0.16897\n",
"trendflex 159.3148 0.15931\n",
"... ... ...\n",
"percent_return 0.1807 0.00018\n",
"tsignals 0.0013 0.00000\n",
"short_run 0.0017 0.00000\n",
"xsignals 0.0017 0.00000\n",
"long_run 0.0010 0.00000\n",
"\n",
"[147 rows x 2 columns]\n",
"\n",
"============================================================\n",
"Time Stats:\n",
" ms secs\n",
"min 0.001000 0.000000\n",
"50% 1.250300 0.001250\n",
"mean 22.771308 0.022771\n",
"max 1446.008500 1.446010\n",
"total 3347.382300 3.347370\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.3337 ms (0.0013 s)\n",
"[+] accbands: 1.3222 ms (0.0013 s)\n",
"[+] ad: 0.9865 ms (0.0010 s)\n",
"[+] adosc: 1.9232 ms (0.0019 s)\n",
"[+] adx: 3.9638 ms (0.0040 s)\n",
"[+] alligator: 215.7491 ms (0.2157 s)\n",
"[+] alma: 0.5415 ms (0.0005 s)\n",
"[+] amat: 3.1380 ms (0.0031 s)\n",
"[+] ao: 0.5585 ms (0.0006 s)\n",
"[+] aobv: 6.0427 ms (0.0060 s)\n",
"[+] apo: 1.0208 ms (0.0010 s)\n",
"[+] aroon: 8.1660 ms (0.0082 s)\n",
"[+] atr: 2.1119 ms (0.0021 s)\n",
"[+] atrts: 2.4344 ms (0.0024 s)\n",
"[+] bbands: 1.6845 ms (0.0017 s)\n",
"[+] bias: 0.7278 ms (0.0007 s)\n",
"[+] bop: 0.8991 ms (0.0009 s)\n",
"[+] brar: 4.2946 ms (0.0043 s)\n",
"[+] cci: 16.3019 ms (0.0163 s)\n",
"[+] cdl_pattern: 10.8324 ms (0.0108 s)\n",
"[+] cdl_z: 1.7735 ms (0.0018 s)\n",
"[+] cfo: 0.3902 ms (0.0004 s)\n",
"[+] cg: 9.9616 ms (0.0100 s)\n",
"[+] chop: 1.3447 ms (0.0013 s)\n",
"[+] cksp: 1.7038 ms (0.0017 s)\n",
"[+] cmf: 1.2955 ms (0.0013 s)\n",
"[+] cmo: 2.1742 ms (0.0022 s)\n",
"[+] coppock: 0.3594 ms (0.0004 s)\n",
"[+] cti: 18.3186 ms (0.0183 s)\n",
"[+] cube: 0.6013 ms (0.0006 s)\n",
"[+] decay: 0.6330 ms (0.0006 s)\n",
"[+] decreasing: 0.3255 ms (0.0003 s)\n",
"[+] dema: 0.9345 ms (0.0009 s)\n",
"[+] dm: 2.2490 ms (0.0022 s)\n",
"[+] donchian: 1.0341 ms (0.0010 s)\n",
"[+] dpo: 0.4700 ms (0.0005 s)\n",
"[+] ebsw: 40.1780 ms (0.0402 s)\n",
"[+] efi: 0.4426 ms (0.0004 s)\n",
"[+] ema: 0.4624 ms (0.0005 s)\n",
"[+] entropy: 0.7721 ms (0.0008 s)\n",
"[+] eom: 1.0832 ms (0.0011 s)\n",
"[+] er: 0.6801 ms (0.0007 s)\n",
"[+] eri: 0.7150 ms (0.0007 s)\n",
"[+] fisher: 9.7400 ms (0.0097 s)\n",
"[+] fwma: 2.6797 ms (0.0027 s)\n",
"[+] ha: 78.9297 ms (0.0789 s)\n",
"[+] hilo: 81.5833 ms (0.0816 s)\n",
"[+] hl2: 0.3734 ms (0.0004 s)\n",
"[+] hlc3: 0.3690 ms (0.0004 s)\n",
"[+] hma: 0.4217 ms (0.0004 s)\n",
"[+] hwc: 8.6811 ms (0.0087 s)\n",
"[+] hwma: 6.2323 ms (0.0062 s)\n",
"[+] ifisher: 0.6189 ms (0.0006 s)\n",
"[+] increasing: 0.3444 ms (0.0003 s)\n",
"[+] inertia: 4.3180 ms (0.0043 s)\n",
"[+] jma: 28.4740 ms (0.0285 s)\n",
"[+] kama: 15.6890 ms (0.0157 s)\n",
"[+] kc: 1.0599 ms (0.0011 s)\n",
"[+] kdj: 1.7477 ms (0.0017 s)\n",
"[+] kst: 1.9027 ms (0.0019 s)\n",
"[+] kurtosis: 0.4531 ms (0.0005 s)\n",
"[+] kvo: 3.6029 ms (0.0036 s)\n",
"[+] linreg: 12.0623 ms (0.0121 s)\n",
"[+] log_return: 0.2076 ms (0.0002 s)\n",
"[+] long_run: 0.0012 ms (0.0000 s)\n",
"[+] macd: 2.5717 ms (0.0026 s)\n",
"[+] mad: 14.4913 ms (0.0145 s)\n",
"[+] mama: 0.4360 ms (0.0004 s)\n",
"[+] massi: 1.5114 ms (0.0015 s)\n",
"[+] mcgd: 2.2937 ms (0.0023 s)\n",
"[+] median: 0.7571 ms (0.0008 s)\n",
"[+] mfi: 4.3062 ms (0.0043 s)\n",
"[+] midpoint: 0.6580 ms (0.0007 s)\n",
"[+] midprice: 0.6952 ms (0.0007 s)\n",
"[+] mom: 0.2043 ms (0.0002 s)\n",
"[+] natr: 2.0364 ms (0.0020 s)\n",
"[+] nvi: 2.8325 ms (0.0028 s)\n",
"[+] obv: 2.1464 ms (0.0021 s)\n",
"[+] ohlc4: 0.4745 ms (0.0005 s)\n",
"[+] pdist: 1.4983 ms (0.0015 s)\n",
"[+] percent_return: 0.1992 ms (0.0002 s)\n",
"[+] pgo: 0.6186 ms (0.0006 s)\n",
"[+] ppo: 1.6941 ms (0.0017 s)\n",
"[+] psar: 106.6588 ms (0.1067 s)\n",
"[+] psl: 1.7701 ms (0.0018 s)\n",
"[+] pvi: 2.8673 ms (0.0029 s)\n",
"[+] pvo: 0.8039 ms (0.0008 s)\n",
"[+] pvol: 0.3080 ms (0.0003 s)\n",
"[+] pvr: 2.0909 ms (0.0021 s)\n",
"[+] pvt: 0.6685 ms (0.0007 s)\n",
"[+] pwma: 2.3221 ms (0.0023 s)\n",
"[+] qqe: 194.8575 ms (0.1949 s)\n",
"[+] qstick: 0.8804 ms (0.0009 s)\n",
"[+] quantile: 0.7678 ms (0.0008 s)\n",
"[+] reflex: 0.2310 ms (0.0002 s)\n",
"[+] remap: 0.1789 ms (0.0002 s)\n",
"[+] rma: 0.3639 ms (0.0004 s)\n",
"[+] roc: 0.4538 ms (0.0005 s)\n",
"[+] rsi: 2.6416 ms (0.0026 s)\n",
"[+] rsx: 9.9792 ms (0.0100 s)\n",
"[+] rvgi: 8.6263 ms (0.0086 s)\n",
"[+] rvi: 4.4760 ms (0.0045 s)\n",
"[+] short_run: 0.0017 ms (0.0000 s)\n",
"[+] sinwma: 10.9170 ms (0.0109 s)\n",
"[+] skew: 0.3024 ms (0.0003 s)\n",
"[+] slope: 0.2518 ms (0.0003 s)\n",
"[+] sma: 0.4292 ms (0.0004 s)\n",
"[+] smi: 1.4152 ms (0.0014 s)\n",
"[+] smma: 70.9126 ms (0.0709 s)\n",
"[+] squeeze: 3.5000 ms (0.0035 s)\n",
"[+] squeeze_pro: 5.1851 ms (0.0052 s)\n",
"[+] ssf: 0.1922 ms (0.0002 s)\n",
"[+] ssf3: 0.1733 ms (0.0002 s)\n",
"[+] stc: 24.8870 ms (0.0249 s)\n",
"[+] stdev: 0.4378 ms (0.0004 s)\n",
"[+] stoch: 2.1283 ms (0.0021 s)\n",
"[+] stochf: 1.8990 ms (0.0019 s)\n",
"[+] stochrsi: 1.4045 ms (0.0014 s)\n",
"[+] supertrend: 52.9584 ms (0.0530 s)\n",
"[+] swma: 2.2575 ms (0.0023 s)\n",
"[+] t3: 2.6848 ms (0.0027 s)\n",
"[+] td_seq: 909.3875 ms (0.9094 s)\n",
"[+] tema: 1.7357 ms (0.0017 s)\n",
"[+] thermo: 1.6015 ms (0.0016 s)\n",
"[+] tos_stdevall: 3.3492 ms (0.0033 s)\n",
"[+] trendflex: 0.2684 ms (0.0003 s)\n",
"[+] trima: 0.7775 ms (0.0008 s)\n",
"[+] trix: 2.6012 ms (0.0026 s)\n",
"[+] true_range: 1.4700 ms (0.0015 s)\n",
"[+] tsi: 2.2230 ms (0.0022 s)\n",
"[+] tsignals: 0.0016 ms (0.0000 s)\n",
"[+] ttm_trend: 2.0595 ms (0.0021 s)\n",
"[+] ui: 0.9723 ms (0.0010 s)\n",
"[+] uo: 2.5761 ms (0.0026 s)\n",
"[+] variance: 0.3435 ms (0.0003 s)\n",
"[+] vhf: 1.1118 ms (0.0011 s)\n",
"[+] vidya: 48.7953 ms (0.0488 s)\n",
"[+] vortex: 1.6605 ms (0.0017 s)\n",
"[+] vwap: 2.0664 ms (0.0021 s)\n",
"[+] vwma: 0.5173 ms (0.0005 s)\n",
"[+] wb_tsv: 4.2007 ms (0.0042 s)\n",
"[+] wcp: 0.3822 ms (0.0004 s)\n",
"[+] willr: 0.9955 ms (0.0010 s)\n",
"[+] wma: 11.4177 ms (0.0114 s)\n",
"[+] xsignals: 0.0016 ms (0.0000 s)\n",
"[+] zlma: 0.7412 ms (0.0007 s)\n",
"[+] zscore: 1.0717 ms (0.0011 s)\n",
"\n",
"============================================================\n",
" Slowest 10 Indicators [147]\n",
" Observations: 1260\n",
"============================================================\n",
" ms secs\n",
"Indicator \n",
"td_seq 909.3875 0.90939\n",
"alligator 215.7491 0.21575\n",
"qqe 194.8575 0.19486\n",
"psar 106.6588 0.10666\n",
"hilo 81.5833 0.08158\n",
"ha 78.9297 0.07893\n",
"smma 70.9126 0.07091\n",
"supertrend 52.9584 0.05296\n",
"vidya 48.7953 0.04880\n",
"ebsw 40.1780 0.04018\n",
"\n",
"============================================================\n",
"Time Stats:\n",
" ms secs\n",
"min 0.001200 0.000000\n",
"50% 1.511400 0.001510\n",
"mean 14.939214 0.014939\n",
"max 909.387500 0.909390\n",
"total 2196.064400 2.196020\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_1f368_row0_col0, #T_1f368_row0_col1 {\n",
" background-color: #ff0000;\n",
" color: #f1f1f1;\n",
"}\n",
"#T_1f368_row1_col0, #T_1f368_row1_col1 {\n",
" background-color: #ffcc00;\n",
" color: #000000;\n",
"}\n",
"#T_1f368_row2_col0, #T_1f368_row2_col1 {\n",
" background-color: #ffd200;\n",
" color: #000000;\n",
"}\n",
"#T_1f368_row3_col0, #T_1f368_row3_col1 {\n",
" background-color: #ffec00;\n",
" color: #000000;\n",
"}\n",
"#T_1f368_row4_col0, #T_1f368_row4_col1 {\n",
" background-color: #fff300;\n",
" color: #000000;\n",
"}\n",
"#T_1f368_row5_col0, #T_1f368_row5_col1 {\n",
" background-color: #fff400;\n",
" color: #000000;\n",
"}\n",
"#T_1f368_row6_col0, #T_1f368_row6_col1 {\n",
" background-color: #fff600;\n",
" color: #000000;\n",
"}\n",
"#T_1f368_row7_col0, #T_1f368_row7_col1 {\n",
" background-color: #fffc00;\n",
" color: #000000;\n",
"}\n",
"#T_1f368_row8_col0, #T_1f368_row8_col1 {\n",
" background-color: #fffd00;\n",
" color: #000000;\n",
"}\n",
"#T_1f368_row9_col0, #T_1f368_row9_col1 {\n",
" background-color: #ffff00;\n",
" color: #000000;\n",
"}\n",
"</style>\n",
"<table id=\"T_1f368_\">\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_1f368_level0_row0\" class=\"row_heading level0 row0\" >td_seq</th>\n",
" <td id=\"T_1f368_row0_col0\" class=\"data row0 col0\" >909.387500</td>\n",
" <td id=\"T_1f368_row0_col1\" class=\"data row0 col1\" >0.909390</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row1\" class=\"row_heading level0 row1\" >alligator</th>\n",
" <td id=\"T_1f368_row1_col0\" class=\"data row1 col0\" >215.749100</td>\n",
" <td id=\"T_1f368_row1_col1\" class=\"data row1 col1\" >0.215750</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row2\" class=\"row_heading level0 row2\" >qqe</th>\n",
" <td id=\"T_1f368_row2_col0\" class=\"data row2 col0\" >194.857500</td>\n",
" <td id=\"T_1f368_row2_col1\" class=\"data row2 col1\" >0.194860</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row3\" class=\"row_heading level0 row3\" >psar</th>\n",
" <td id=\"T_1f368_row3_col0\" class=\"data row3 col0\" >106.658800</td>\n",
" <td id=\"T_1f368_row3_col1\" class=\"data row3 col1\" >0.106660</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row4\" class=\"row_heading level0 row4\" >hilo</th>\n",
" <td id=\"T_1f368_row4_col0\" class=\"data row4 col0\" >81.583300</td>\n",
" <td id=\"T_1f368_row4_col1\" class=\"data row4 col1\" >0.081580</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row5\" class=\"row_heading level0 row5\" >ha</th>\n",
" <td id=\"T_1f368_row5_col0\" class=\"data row5 col0\" >78.929700</td>\n",
" <td id=\"T_1f368_row5_col1\" class=\"data row5 col1\" >0.078930</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row6\" class=\"row_heading level0 row6\" >smma</th>\n",
" <td id=\"T_1f368_row6_col0\" class=\"data row6 col0\" >70.912600</td>\n",
" <td id=\"T_1f368_row6_col1\" class=\"data row6 col1\" >0.070910</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row7\" class=\"row_heading level0 row7\" >supertrend</th>\n",
" <td id=\"T_1f368_row7_col0\" class=\"data row7 col0\" >52.958400</td>\n",
" <td id=\"T_1f368_row7_col1\" class=\"data row7 col1\" >0.052960</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row8\" class=\"row_heading level0 row8\" >vidya</th>\n",
" <td id=\"T_1f368_row8_col0\" class=\"data row8 col0\" >48.795300</td>\n",
" <td id=\"T_1f368_row8_col1\" class=\"data row8 col1\" >0.048800</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_1f368_level0_row9\" class=\"row_heading level0 row9\" >ebsw</th>\n",
" <td id=\"T_1f368_row9_col0\" class=\"data row9 col0\" >40.178000</td>\n",
" <td id=\"T_1f368_row9_col1\" class=\"data row9 col1\" >0.040180</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x12fd3e190>"
]
},
"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.001200</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1.511400</td>\n",
" <td>0.001510</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>14.939214</td>\n",
" <td>0.014939</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>909.387500</td>\n",
" <td>0.909390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>total</th>\n",
" <td>2196.064400</td>\n",
" <td>2.196020</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ms secs\n",
"min 0.001200 0.000000\n",
"50% 1.511400 0.001510\n",
"mean 14.939214 0.014939\n",
"max 909.387500 0.909390\n",
"total 2196.064400 2.196020"
]
},
"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.5714 ms (0.0016 s)\n",
"[+] accbands: 1.6372 ms (0.0016 s)\n",
"[+] ad: 0.6500 ms (0.0007 s)\n",
"[+] adosc: 0.5646 ms (0.0006 s)\n",
"[+] adx: 3.2577 ms (0.0033 s)\n",
"[+] alligator: 213.8796 ms (0.2139 s)\n",
"[+] alma: 0.5777 ms (0.0006 s)\n",
"[+] amat: 2.3146 ms (0.0023 s)\n",
"[+] ao: 0.5448 ms (0.0005 s)\n",
"[+] aobv: 2.9193 ms (0.0029 s)\n",
"[+] apo: 0.2103 ms (0.0002 s)\n",
"[+] aroon: 0.6277 ms (0.0006 s)\n",
"[+] atr: 0.3873 ms (0.0004 s)\n",
"[+] atrts: 0.5611 ms (0.0006 s)\n",
"[+] bbands: 0.9401 ms (0.0009 s)\n",
"[+] bias: 0.3203 ms (0.0003 s)\n",
"[+] bop: 0.4700 ms (0.0005 s)\n",
"[+] brar: 4.5255 ms (0.0045 s)\n",
"[+] cci: 0.4135 ms (0.0004 s)\n",
"[+] cdl_pattern: 11.2905 ms (0.0113 s)\n",
"[+] cdl_z: 1.7948 ms (0.0018 s)\n",
"[+] cfo: 0.3902 ms (0.0004 s)\n",
"[+] cg: 10.0814 ms (0.0101 s)\n",
"[+] chop: 1.4501 ms (0.0015 s)\n",
"[+] cksp: 1.8192 ms (0.0018 s)\n",
"[+] cmf: 1.3106 ms (0.0013 s)\n",
"[+] cmo: 0.2059 ms (0.0002 s)\n",
"[+] coppock: 0.3370 ms (0.0003 s)\n",
"[+] cti: 18.4478 ms (0.0184 s)\n",
"[+] cube: 0.6004 ms (0.0006 s)\n",
"[+] decay: 0.9305 ms (0.0009 s)\n",
"[+] decreasing: 0.3387 ms (0.0003 s)\n",
"[+] dema: 0.1930 ms (0.0002 s)\n",
"[+] dm: 0.5338 ms (0.0005 s)\n",
"[+] donchian: 1.0245 ms (0.0010 s)\n",
"[+] dpo: 0.4837 ms (0.0005 s)\n",
"[+] ebsw: 40.3337 ms (0.0403 s)\n",
"[+] efi: 0.4367 ms (0.0004 s)\n",
"[+] ema: 0.1733 ms (0.0002 s)\n",
"[+] entropy: 0.7008 ms (0.0007 s)\n",
"[+] eom: 1.0460 ms (0.0010 s)\n",
"[+] er: 0.5638 ms (0.0006 s)\n",
"[+] eri: 0.7054 ms (0.0007 s)\n",
"[+] fisher: 9.7551 ms (0.0098 s)\n",
"[+] fwma: 2.6089 ms (0.0026 s)\n",
"[+] ha: 78.8087 ms (0.0788 s)\n",
"[+] hilo: 84.2786 ms (0.0843 s)\n",
"[+] hl2: 0.3724 ms (0.0004 s)\n",
"[+] hlc3: 0.3856 ms (0.0004 s)\n",
"[+] hma: 0.4206 ms (0.0004 s)\n",
"[+] hwc: 8.5970 ms (0.0086 s)\n",
"[+] hwma: 6.2322 ms (0.0062 s)\n",
"[+] ifisher: 0.6622 ms (0.0007 s)\n",
"[+] increasing: 0.3526 ms (0.0004 s)\n",
"[+] inertia: 4.4732 ms (0.0045 s)\n",
"[+] jma: 28.4728 ms (0.0285 s)\n",
"[+] kama: 15.3134 ms (0.0153 s)\n",
"[+] kc: 1.0568 ms (0.0011 s)\n",
"[+] kdj: 1.7053 ms (0.0017 s)\n",
"[+] kst: 1.7699 ms (0.0018 s)\n",
"[+] kurtosis: 0.3934 ms (0.0004 s)\n",
"[+] kvo: 3.5169 ms (0.0035 s)\n",
"[+] linreg: 0.1955 ms (0.0002 s)\n",
"[+] log_return: 0.1988 ms (0.0002 s)\n",
"[+] long_run: 0.0012 ms (0.0000 s)\n",
"[+] macd: 0.4699 ms (0.0005 s)\n",
"[+] mad: 14.6732 ms (0.0147 s)\n",
"[+] mama: 0.4648 ms (0.0005 s)\n",
"[+] massi: 0.9333 ms (0.0009 s)\n",
"[+] mcgd: 2.3417 ms (0.0023 s)\n",
"[+] median: 0.7368 ms (0.0007 s)\n",
"[+] mfi: 0.4949 ms (0.0005 s)\n",
"[+] midpoint: 0.1737 ms (0.0002 s)\n",
"[+] midprice: 0.2649 ms (0.0003 s)\n",
"[+] mom: 0.1584 ms (0.0002 s)\n",
"[+] natr: 0.3607 ms (0.0004 s)\n",
"[+] nvi: 2.7678 ms (0.0028 s)\n",
"[+] obv: 0.2945 ms (0.0003 s)\n",
"[+] ohlc4: 0.4447 ms (0.0004 s)\n",
"[+] pdist: 1.3146 ms (0.0013 s)\n",
"[+] percent_return: 0.1849 ms (0.0002 s)\n",
"[+] pgo: 0.6000 ms (0.0006 s)\n",
"[+] ppo: 0.5498 ms (0.0005 s)\n",
"[+] psar: 106.3107 ms (0.1063 s)\n",
"[+] psl: 1.6307 ms (0.0016 s)\n",
"[+] pvi: 2.8318 ms (0.0028 s)\n",
"[+] pvo: 0.7522 ms (0.0008 s)\n",
"[+] pvol: 0.3010 ms (0.0003 s)\n",
"[+] pvr: 1.3501 ms (0.0014 s)\n",
"[+] pvt: 0.4005 ms (0.0004 s)\n",
"[+] pwma: 2.3472 ms (0.0023 s)\n",
"[+] qqe: 197.3449 ms (0.1973 s)\n",
"[+] qstick: 0.6361 ms (0.0006 s)\n",
"[+] quantile: 0.7778 ms (0.0008 s)\n",
"[+] reflex: 0.2361 ms (0.0002 s)\n",
"[+] remap: 0.1772 ms (0.0002 s)\n",
"[+] rma: 0.3487 ms (0.0003 s)\n",
"[+] roc: 0.1965 ms (0.0002 s)\n",
"[+] rsi: 0.1852 ms (0.0002 s)\n",
"[+] rsx: 10.1578 ms (0.0102 s)\n",
"[+] rvgi: 8.0339 ms (0.0080 s)\n",
"[+] rvi: 4.4202 ms (0.0044 s)\n",
"[+] short_run: 0.0015 ms (0.0000 s)\n",
"[+] sinwma: 10.9848 ms (0.0110 s)\n",
"[+] skew: 0.3064 ms (0.0003 s)\n",
"[+] slope: 0.2574 ms (0.0003 s)\n",
"[+] sma: 0.1800 ms (0.0002 s)\n",
"[+] smi: 1.4068 ms (0.0014 s)\n",
"[+] smma: 71.0916 ms (0.0711 s)\n",
"[+] squeeze: 3.2216 ms (0.0032 s)\n",
"[+] squeeze_pro: 5.2283 ms (0.0052 s)\n",
"[+] ssf: 0.1951 ms (0.0002 s)\n",
"[+] ssf3: 0.1738 ms (0.0002 s)\n",
"[+] stc: 24.9169 ms (0.0249 s)\n",
"[+] stdev: 0.1830 ms (0.0002 s)\n",
"[+] stoch: 0.6043 ms (0.0006 s)\n",
"[+] stochf: 0.5851 ms (0.0006 s)\n",
"[+] stochrsi: 1.3879 ms (0.0014 s)\n",
"[+] supertrend: 52.9733 ms (0.0530 s)\n",
"[+] swma: 2.3010 ms (0.0023 s)\n",
"[+] t3: 0.1947 ms (0.0002 s)\n",
"[+] td_seq: 907.9965 ms (0.9080 s)\n",
"[+] tema: 0.2842 ms (0.0003 s)\n",
"[+] thermo: 1.7636 ms (0.0018 s)\n",
"[+] tos_stdevall: 3.1643 ms (0.0032 s)\n",
"[+] trendflex: 0.2186 ms (0.0002 s)\n",
"[+] trima: 0.1801 ms (0.0002 s)\n",
"[+] trix: 1.1153 ms (0.0011 s)\n",
"[+] true_range: 0.4397 ms (0.0004 s)\n",
"[+] tsi: 0.9641 ms (0.0010 s)\n",
"[+] tsignals: 0.0030 ms (0.0000 s)\n",
"[+] ttm_trend: 1.8574 ms (0.0019 s)\n",
"[+] ui: 1.0225 ms (0.0010 s)\n",
"[+] uo: 0.4687 ms (0.0005 s)\n",
"[+] variance: 0.3024 ms (0.0003 s)\n",
"[+] vhf: 1.4387 ms (0.0014 s)\n",
"[+] vidya: 49.9903 ms (0.0500 s)\n",
"[+] vortex: 1.7544 ms (0.0018 s)\n",
"[+] vwap: 2.1345 ms (0.0021 s)\n",
"[+] vwma: 0.4779 ms (0.0005 s)\n",
"[+] wb_tsv: 4.0899 ms (0.0041 s)\n",
"[+] wcp: 0.3927 ms (0.0004 s)\n",
"[+] willr: 0.3692 ms (0.0004 s)\n",
"[+] wma: 0.1639 ms (0.0002 s)\n",
"[+] xsignals: 0.0013 ms (0.0000 s)\n",
"[+] zlma: 0.4167 ms (0.0004 s)\n",
"[+] zscore: 0.3920 ms (0.0004 s)\n",
"\n",
"============================================================\n",
" Slowest 10 Indicators [147]\n",
" Observations[talib]: 1260\n",
"============================================================\n",
" ms secs\n",
"Indicator \n",
"td_seq 907.9965 0.90800\n",
"alligator 213.8796 0.21388\n",
"qqe 197.3449 0.19734\n",
"psar 106.3107 0.10631\n",
"hilo 84.2786 0.08428\n",
"ha 78.8087 0.07881\n",
"smma 71.0916 0.07109\n",
"supertrend 52.9733 0.05297\n",
"vidya 49.9903 0.04999\n",
"ebsw 40.3337 0.04033\n",
"\n",
"============================================================\n",
"Time Stats:\n",
" ms secs\n",
"min 0.001200 0.000000\n",
"50% 0.650000 0.000650\n",
"mean 14.315634 0.014315\n",
"max 907.996500 0.908000\n",
"total 2104.398200 2.104340\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_64b28_row0_col0, #T_64b28_row0_col1 {\n",
" background-color: #ff0000;\n",
" color: #f1f1f1;\n",
"}\n",
"#T_64b28_row1_col0, #T_64b28_row1_col1 {\n",
" background-color: #ffcc00;\n",
" color: #000000;\n",
"}\n",
"#T_64b28_row2_col0, #T_64b28_row2_col1 {\n",
" background-color: #ffd100;\n",
" color: #000000;\n",
"}\n",
"#T_64b28_row3_col0, #T_64b28_row3_col1 {\n",
" background-color: #ffec00;\n",
" color: #000000;\n",
"}\n",
"#T_64b28_row4_col0, #T_64b28_row4_col1 {\n",
" background-color: #fff300;\n",
" color: #000000;\n",
"}\n",
"#T_64b28_row5_col0, #T_64b28_row5_col1 {\n",
" background-color: #fff400;\n",
" color: #000000;\n",
"}\n",
"#T_64b28_row6_col0, #T_64b28_row6_col1 {\n",
" background-color: #fff600;\n",
" color: #000000;\n",
"}\n",
"#T_64b28_row7_col0, #T_64b28_row7_col1 {\n",
" background-color: #fffc00;\n",
" color: #000000;\n",
"}\n",
"#T_64b28_row8_col0, #T_64b28_row8_col1 {\n",
" background-color: #fffd00;\n",
" color: #000000;\n",
"}\n",
"#T_64b28_row9_col0, #T_64b28_row9_col1 {\n",
" background-color: #ffff00;\n",
" color: #000000;\n",
"}\n",
"</style>\n",
"<table id=\"T_64b28_\">\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_64b28_level0_row0\" class=\"row_heading level0 row0\" >td_seq</th>\n",
" <td id=\"T_64b28_row0_col0\" class=\"data row0 col0\" >907.996500</td>\n",
" <td id=\"T_64b28_row0_col1\" class=\"data row0 col1\" >0.908000</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row1\" class=\"row_heading level0 row1\" >alligator</th>\n",
" <td id=\"T_64b28_row1_col0\" class=\"data row1 col0\" >213.879600</td>\n",
" <td id=\"T_64b28_row1_col1\" class=\"data row1 col1\" >0.213880</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row2\" class=\"row_heading level0 row2\" >qqe</th>\n",
" <td id=\"T_64b28_row2_col0\" class=\"data row2 col0\" >197.344900</td>\n",
" <td id=\"T_64b28_row2_col1\" class=\"data row2 col1\" >0.197340</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row3\" class=\"row_heading level0 row3\" >psar</th>\n",
" <td id=\"T_64b28_row3_col0\" class=\"data row3 col0\" >106.310700</td>\n",
" <td id=\"T_64b28_row3_col1\" class=\"data row3 col1\" >0.106310</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row4\" class=\"row_heading level0 row4\" >hilo</th>\n",
" <td id=\"T_64b28_row4_col0\" class=\"data row4 col0\" >84.278600</td>\n",
" <td id=\"T_64b28_row4_col1\" class=\"data row4 col1\" >0.084280</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row5\" class=\"row_heading level0 row5\" >ha</th>\n",
" <td id=\"T_64b28_row5_col0\" class=\"data row5 col0\" >78.808700</td>\n",
" <td id=\"T_64b28_row5_col1\" class=\"data row5 col1\" >0.078810</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row6\" class=\"row_heading level0 row6\" >smma</th>\n",
" <td id=\"T_64b28_row6_col0\" class=\"data row6 col0\" >71.091600</td>\n",
" <td id=\"T_64b28_row6_col1\" class=\"data row6 col1\" >0.071090</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row7\" class=\"row_heading level0 row7\" >supertrend</th>\n",
" <td id=\"T_64b28_row7_col0\" class=\"data row7 col0\" >52.973300</td>\n",
" <td id=\"T_64b28_row7_col1\" class=\"data row7 col1\" >0.052970</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row8\" class=\"row_heading level0 row8\" >vidya</th>\n",
" <td id=\"T_64b28_row8_col0\" class=\"data row8 col0\" >49.990300</td>\n",
" <td id=\"T_64b28_row8_col1\" class=\"data row8 col1\" >0.049990</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_64b28_level0_row9\" class=\"row_heading level0 row9\" >ebsw</th>\n",
" <td id=\"T_64b28_row9_col0\" class=\"data row9 col0\" >40.333700</td>\n",
" <td id=\"T_64b28_row9_col1\" class=\"data row9 col1\" >0.040330</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x151c95c10>"
]
},
"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.001200</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>0.650000</td>\n",
" <td>0.000650</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>14.315634</td>\n",
" <td>0.014315</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>907.996500</td>\n",
" <td>0.908000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>total</th>\n",
" <td>2104.398200</td>\n",
" <td>2.104340</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ms secs\n",
"min 0.001200 0.000000\n",
"50% 0.650000 0.000650\n",
"mean 14.315634 0.014315\n",
"max 907.996500 0.908000\n",
"total 2104.398200 2.104340"
]
},
"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.0012</td>\n",
" <td>0.65000</td>\n",
" <td>14.315634</td>\n",
" <td>907.99650</td>\n",
" <td>2104.39820</td>\n",
" </tr>\n",
" <tr>\n",
" <th>secs</th>\n",
" <td>0.0000</td>\n",
" <td>0.00065</td>\n",
" <td>0.014315</td>\n",
" <td>0.90800</td>\n",
" <td>2.10434</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Pandas TA</th>\n",
" <th>ms</th>\n",
" <td>0.0012</td>\n",
" <td>1.51140</td>\n",
" <td>14.939214</td>\n",
" <td>909.38750</td>\n",
" <td>2196.06440</td>\n",
" </tr>\n",
" <tr>\n",
" <th>secs</th>\n",
" <td>0.0000</td>\n",
" <td>0.00151</td>\n",
" <td>0.014939</td>\n",
" <td>0.90939</td>\n",
" <td>2.19602</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" min 50% mean max total\n",
"TA Lib ms 0.0012 0.65000 14.315634 907.99650 2104.39820\n",
" secs 0.0000 0.00065 0.014315 0.90800 2.10434\n",
"Pandas TA ms 0.0012 1.51140 14.939214 909.38750 2196.06440\n",
" secs 0.0000 0.00151 0.014939 0.90939 2.19602"
]
},
"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.0</td>\n",
" <td>0.86140</td>\n",
" <td>0.623580</td>\n",
" <td>1.39100</td>\n",
" <td>91.66620</td>\n",
" </tr>\n",
" <tr>\n",
" <th>secs</th>\n",
" <td>0.0</td>\n",
" <td>0.00086</td>\n",
" <td>0.000624</td>\n",
" <td>0.00139</td>\n",
" <td>0.09168</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"Differences min 50% mean max total\n",
"ms 0.0 0.86140 0.623580 1.39100 91.66620\n",
"secs 0.0 0.00086 0.000624 0.00139 0.09168"
]
},
"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
}