{ "cells": [ { "cell_type": "markdown", "id": "c2aaa0a9", "metadata": {}, "source": [ "### Debug Example" ] }, { "cell_type": "code", "execution_count": 1, "id": "82a6ae32", "metadata": {}, "outputs": [], "source": [ "from absbox.examples import test05\n", "from absbox import API,EnginePath" ] }, { "cell_type": "code", "execution_count": 2, "id": "a302e4b1", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Connecting engine server -> https://absbox.org/api/dev\n",
       "
\n" ], "text/plain": [ "\u001b[1;35mConnecting engine server -> \u001b[0m\u001b[1;4;35mhttps://absbox.org/api/dev\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Connected, local lib:0.26.4, server:0.27.13\n",
       "
\n" ], "text/plain": [ "✅\u001b[1;32mConnected, local li\u001b[0m\u001b[1;32mb:0\u001b[0m\u001b[1;32m.\u001b[0m\u001b[1;32m26.4\u001b[0m\u001b[1;32m, server:\u001b[0m\u001b[1;32m0.27\u001b[0m\u001b[1;32m.\u001b[0m\u001b[1;32m13\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "localAPI = API(EnginePath.DEV, lang='english',check=False)" ] }, { "cell_type": "markdown", "id": "9560c303", "metadata": {}, "source": [ "#### Cashflow Debug Steps\n", "\n", "If user thinks something is off in the cashflow , here is couple steps to inspect \n", "\n", "1. Is Pool Cashflow Correct ?\n", " \n", " Please inspect \n", " \n", " `r['pool']['flow']`\n", "\n", "2. Is Waterfall Distribution Correct ?\n", "\n", " Pls inspect accounts\n", "\n", " `r['accounts']['']`\n", "\n", "3. Is fee paid correct ?\n", "\n", " Pls inspect \n", "\n", " `r['fees']['']`\n" ] }, { "cell_type": "markdown", "id": "dad1adb2", "metadata": {}, "source": [ "##### Inspect Values at End Of Day\n", "\n", "User can have the `inspect` any formula based values during the cashflow projection. \n", "\n", "User need to supply `(\"inspect\", (,)....)` in the deal run assumption" ] }, { "cell_type": "code", "execution_count": 3, "id": "18b980b1", "metadata": {}, "outputs": [], "source": [ "r = localAPI.run(test05\n", " ,poolAssump = None\n", " ,runAssump = [(\"inspect\",[\"MonthEnd\",(\"poolFactor\",)]\n", " ,[\"QuarterEnd\",(\"poolBalance\",)]\n", " ,['MonthEnd',(\"curPoolCollection\",None,\"Principal\")]\n", " ,['MonthEnd',(\"status\",\"Amortizing\")])]\n", " ,read=True)" ] }, { "cell_type": "markdown", "id": "fbbf0898", "metadata": {}, "source": [ "View the inspection " ] }, { "cell_type": "code", "execution_count": 4, "id": "a38a387c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
<PoolFactor>
Date
2021-03-010
2021-03-310
2021-04-300.905868
2021-05-310.858331
2021-06-300.810477
\n", "
" ], "text/plain": [ " \n", "Date \n", "2021-03-01 0\n", "2021-03-31 0\n", "2021-04-30 0.905868\n", "2021-05-31 0.858331\n", "2021-06-30 0.810477" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r['result']['inspect'][''].head()" ] }, { "cell_type": "markdown", "id": "e49f5e35", "metadata": {}, "source": [ "Or , to view multiple variable and auto join by dates" ] }, { "cell_type": "code", "execution_count": 5, "id": "a649d3e8", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
<CurrentPoolBalance><IsDealStatus><PoolCurCollection:['CollectedPrincipal'],None><PoolFactor>
Date
2021-03-010False00
2021-03-310False00
2021-04-30NaNTrue207.090.905868
2021-05-31NaNTrue104.580.858331
2021-06-301783.05True105.280.810477
2021-07-31NaNTrue105.970.762309
2021-08-31NaNTrue106.690.713813
2021-09-301463True107.390.665
2021-10-31NaNTrue108.10.615863
2021-11-30NaNTrue108.830.566395
2021-12-311136.52True109.550.5166
2022-01-31NaNTrue110.290.466468
2022-02-28NaNTrue111.010.416009
2022-03-31803.46True111.760.365209
2022-04-30NaNTrue112.510.314068
2022-05-31NaNTrue113.250.26259
2022-06-30463.69True114.010.210768
2022-07-31NaNTrue114.770.1586
2022-08-31NaNTrue115.540.106081
2022-09-30117.08True116.30.053218
\n", "
" ], "text/plain": [ " \\\n", "Date \n", "2021-03-01 0 False \n", "2021-03-31 0 False \n", "2021-04-30 NaN True \n", "2021-05-31 NaN True \n", "2021-06-30 1783.05 True \n", "2021-07-31 NaN True \n", "2021-08-31 NaN True \n", "2021-09-30 1463 True \n", "2021-10-31 NaN True \n", "2021-11-30 NaN True \n", "2021-12-31 1136.52 True \n", "2022-01-31 NaN True \n", "2022-02-28 NaN True \n", "2022-03-31 803.46 True \n", "2022-04-30 NaN True \n", "2022-05-31 NaN True \n", "2022-06-30 463.69 True \n", "2022-07-31 NaN True \n", "2022-08-31 NaN True \n", "2022-09-30 117.08 True \n", "\n", " \n", "Date \n", "2021-03-01 0 0 \n", "2021-03-31 0 0 \n", "2021-04-30 207.09 0.905868 \n", "2021-05-31 104.58 0.858331 \n", "2021-06-30 105.28 0.810477 \n", "2021-07-31 105.97 0.762309 \n", "2021-08-31 106.69 0.713813 \n", "2021-09-30 107.39 0.665 \n", "2021-10-31 108.1 0.615863 \n", "2021-11-30 108.83 0.566395 \n", "2021-12-31 109.55 0.5166 \n", "2022-01-31 110.29 0.466468 \n", "2022-02-28 111.01 0.416009 \n", "2022-03-31 111.76 0.365209 \n", "2022-04-30 112.51 0.314068 \n", "2022-05-31 113.25 0.26259 \n", "2022-06-30 114.01 0.210768 \n", "2022-07-31 114.77 0.1586 \n", "2022-08-31 115.54 0.106081 \n", "2022-09-30 116.3 0.053218 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from absbox import unifyTs\n", "\n", "unifyTs(r['result']['inspect'].values()).head()" ] }, { "cell_type": "markdown", "id": "f77487f7", "metadata": {}, "source": [ "##### Inspect Values during the Waterfall" ] }, { "cell_type": "markdown", "id": "5be46e04", "metadata": {}, "source": [ "The `(\"inspect\", (,)....)` only inspect values at the `end of day` basis. \n", "\n", "If user want to inspect values during in a waterfall , user need to annotate `which variable` in the waterfall.\n", "\n", "\n", " Syntax\n", " \n", " `['inspect','comment',]`" ] }, { "cell_type": "code", "execution_count": 6, "id": "fe77744f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'amortizing': [['calcInt', 'A1'],\n", " ['inspect', 'After AccureInteret bond:A1', ('bondDueInt', 'A1')],\n", " ['payInt', 'acc01', ['A1']],\n", " ['inspect', 'After Pay', ('bondDueInt', 'A1')],\n", " ['payPrin', 'acc01', ['A1']],\n", " ['payPrin', 'acc01', ['B']],\n", " ['payIntResidual', 'acc01', 'B']]}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test05.waterfall" ] }, { "cell_type": "code", "execution_count": 8, "id": "a229fdf5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateCommentDealStatsValue
02021-06-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}15.34
12021-06-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
22021-07-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}3.12
32021-07-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
42021-08-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}2.55
52021-08-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
62021-09-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}1.86
72021-09-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
82021-10-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}1.13
92021-10-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
102021-11-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.48
112021-11-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
122021-12-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
132021-12-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
142022-01-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
152022-01-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
162022-02-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
172022-02-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
182022-03-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
192022-03-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
202022-04-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
212022-04-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
222022-05-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
232022-05-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
242022-06-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
252022-06-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
262022-07-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
272022-07-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
282022-08-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
292022-08-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
302022-09-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
312022-09-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
322022-10-20After AccureInteret bond:A1{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
332022-10-20After Pay{'tag': 'CurrentDueBondInt', 'contents': ['A1']}0.00
\n", "
" ], "text/plain": [ " Date Comment \\\n", "0 2021-06-20 After AccureInteret bond:A1 \n", "1 2021-06-20 After Pay \n", "2 2021-07-20 After AccureInteret bond:A1 \n", "3 2021-07-20 After Pay \n", "4 2021-08-20 After AccureInteret bond:A1 \n", "5 2021-08-20 After Pay \n", "6 2021-09-20 After AccureInteret bond:A1 \n", "7 2021-09-20 After Pay \n", "8 2021-10-20 After AccureInteret bond:A1 \n", "9 2021-10-20 After Pay \n", "10 2021-11-20 After AccureInteret bond:A1 \n", "11 2021-11-20 After Pay \n", "12 2021-12-20 After AccureInteret bond:A1 \n", "13 2021-12-20 After Pay \n", "14 2022-01-20 After AccureInteret bond:A1 \n", "15 2022-01-20 After Pay \n", "16 2022-02-20 After AccureInteret bond:A1 \n", "17 2022-02-20 After Pay \n", "18 2022-03-20 After AccureInteret bond:A1 \n", "19 2022-03-20 After Pay \n", "20 2022-04-20 After AccureInteret bond:A1 \n", "21 2022-04-20 After Pay \n", "22 2022-05-20 After AccureInteret bond:A1 \n", "23 2022-05-20 After Pay \n", "24 2022-06-20 After AccureInteret bond:A1 \n", "25 2022-06-20 After Pay \n", "26 2022-07-20 After AccureInteret bond:A1 \n", "27 2022-07-20 After Pay \n", "28 2022-08-20 After AccureInteret bond:A1 \n", "29 2022-08-20 After Pay \n", "30 2022-09-20 After AccureInteret bond:A1 \n", "31 2022-09-20 After Pay \n", "32 2022-10-20 After AccureInteret bond:A1 \n", "33 2022-10-20 After Pay \n", "\n", " DealStats Value \n", "0 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 15.34 \n", "1 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "2 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 3.12 \n", "3 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "4 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 2.55 \n", "5 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "6 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 1.86 \n", "7 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "8 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 1.13 \n", "9 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "10 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.48 \n", "11 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "12 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "13 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "14 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "15 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "16 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "17 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "18 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "19 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "20 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "21 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "22 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "23 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "24 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "25 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "26 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "27 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "28 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "29 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "30 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "31 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "32 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 \n", "33 {'tag': 'CurrentDueBondInt', 'contents': ['A1']} 0.00 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r['result']['waterfallInspect'].head(10)" ] }, { "cell_type": "code", "execution_count": null, "id": "544f2903", "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.11.9" } }, "nbformat": 4, "nbformat_minor": 5 }