{ "cells": [ { "cell_type": "markdown", "id": "60e98898", "metadata": {}, "source": [ "#### EDML BLUE Ducth RMBS sample" ] }, { "cell_type": "code", "execution_count": 1, "id": "40872947-d22c-4072-a85b-fe7238300437", "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 4, "id": "87ffc4fa-d7c2-4140-9e7b-e7656db30b6f", "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.28.5, server:0.41.0\n",
       "
\n" ], "text/plain": [ "✅\u001b[1;32mConnected, local li\u001b[0m\u001b[1;32mb:0\u001b[0m\u001b[1;32m.\u001b[0m\u001b[1;32m28.5\u001b[0m\u001b[1;32m, server:\u001b[0m\u001b[1;32m0.41\u001b[0m\u001b[1;32m.\u001b[0m\u001b[1;32m0\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from absbox import API,EnginePath\n", "\n", "localAPI = API(EnginePath.DEV,check=False)" ] }, { "cell_type": "code", "execution_count": null, "id": "90bd699d-2ca3-4cd3-83fc-087fb3008672", "metadata": {}, "outputs": [], "source": [ "from absbox import Generic,readBondsCf,DC\n", "from lenses import lens\n", "\n", "closingDate = \"2024-10-28\"\n", "firstPay = \"2025-01-28\"\n", "statedDate= \"2063-07-02\"\n", "firstRedemptionDate = \"2029-07-02\"\n", "cutoff = \"2024-09-30\"\n", "totalPoolBal = 360_521_905\n", "begReserveBal = 0.0035 * totalPoolBal\n", "\n", "accs = (\n", " (\"reserveAcc\",{\"type\":(\"when\",[(\"isPaidOff\",\"A\",\"B\",\"C\",\"D\"),True]\n", " ,(\"fix\",0)\n", " ,(\"target\",(\"*\",(\"poolBalance\",),0.0035)))\n", " ,\"balance\":begReserveBal\n", " ,\"interest\":{\"period\":\"QuarterEnd\"\n", " ,\"index\":\"EURIBOR3M\"\n", " ,\"spread\":0.000\n", " ,\"reset\":\"QuarterEnd\"\n", " ,\"rate\": 0.00\n", " ,\"lastSettleDate\":closingDate} }),\n", " (\"distAccInt\",{}),\n", " (\"distAccPrin\",{}),\n", ")\n", "\n", "liqFacility = {\n", " \"cashAdvance\":{\"type\": {\"formula\":(\"max\", (\"factor\",(\"bondBalance\",\"A\",\"B\"),0.005)\n", " , (\"factor\",(\"originalBondBalance\",\"A\",\"B\"),0.002))}\n", " ,\"start\": closingDate},\n", "}\n", "\n", "\n", "bonds = (\n", " (\"A\",{\"balance\":342_500_000 ,\"rates\":[0.036,0],\"originBalance\":342_500_000 ,\"originRate\":0.07\n", " ,\"startDate\":closingDate,\"rateTypes\":[(\"floor\",0,(\"floater\",(0.05, \"EURIBOR3M\",0.006,\"QuarterEnd\"),DC.DC_ACT_360.value)),(\"fix\",0.0)]\n", " ,\"bondType\":\"Sequential\"\n", " ,\"stepUps\":[(\"once\", firstRedemptionDate, 0),(\"once\", firstRedemptionDate, 0.0105)]}),\n", " (\"B\",{\"balance\":9_000_000 ,\"rates\":[0.0395,0],\"originBalance\":9_000_000 ,\"originRate\":0.07\n", " ,\"startDate\":closingDate,\"rateTypes\":[(\"floor\",0,(\"floater\",(0.05, \"EURIBOR3M\",0.0095,\"QuarterEnd\"),DC.DC_ACT_360.value)),(\"fix\",0.0)]\n", " ,\"bondType\":\"Sequential\"\n", " ,\"stepUps\":[(\"once\", firstRedemptionDate, 0),(\"once\", firstRedemptionDate, 0.01425)]}),\n", " (\"C\",{\"balance\":5_200_000 ,\"rates\":[0.044,0],\"originBalance\":5_200_000 ,\"originRate\":0.07\n", " ,\"startDate\":closingDate,\"rateTypes\":[(\"floor\",0,(\"floater\",(0.05, \"EURIBOR3M\",0.014,\"QuarterEnd\"),DC.DC_ACT_360.value)),(\"fix\",0.0)]\n", " ,\"bondType\":\"Sequential\"\n", " ,\"stepUps\":[(\"once\", firstRedemptionDate, 0),(\"once\", firstRedemptionDate, 0.021)]}),\n", " (\"D\",{\"balance\":1_100_000 ,\"rates\":[0.0525,0],\"originBalance\":1_100_000 ,\"originRate\":0.07\n", " ,\"startDate\":closingDate,\"rateTypes\":[(\"floor\",0,(\"floater\",(0.05, \"EURIBOR3M\",0.0225,\"QuarterEnd\"),DC.DC_ACT_360.value)),(\"fix\",0.0)] \n", " ,\"bondType\":\"Sequential\"\n", " ,\"stepUps\":[(\"once\", firstRedemptionDate, 0),(\"once\", firstRedemptionDate, 0.0325)]}),\n", " (\"E\",{\"balance\":2_700_000 ,\"rates\":[0.08,0],\"originBalance\":2_700_000 ,\"originRate\":0.07\n", " ,\"startDate\":closingDate,\"rateTypes\":[(\"floor\",0,(\"floater\",(0.05, \"EURIBOR3M\",0.05,\"QuarterEnd\"),DC.DC_ACT_360.value)),(\"fix\",0.0)]\n", " ,\"bondType\":\"Sequential\"\n", " ,\"stepUps\":[(\"once\", firstRedemptionDate, 0),(\"once\", firstRedemptionDate, 0.05)]}),\n", " (\"RS\",{\"balance\":40_000_000 ,\"rate\":0.0,\"originBalance\":40_000_000 ,\"originRate\":0.00\n", " ,\"startDate\":closingDate,\"rateType\":(\"fix\",0.0) ,\"bondType\":{\"Equity\":None}}),\n", ")\n", "\n", "\n", "rateSwap = {\n", " \"ElanSwap\": \n", " {\n", " \"updateDates\":\"MonthEnd\"\n", " ,\"pair\":[(\"poolWaRate\",\"elan-fix\"),(\"EURIBOR3M\",0.04)] # paying a float rate with spread ,and receiving a fix annualized rate\n", " ,\"base\":{\"formula\":(\"poolBalance\",\"elan-fix\")}\n", " ,\"start\":closingDate\n", " ,\"balance\":0\n", " ,\"dayCount\":DC.DC_ACT_360.value\n", " },\n", " \"BlueSwap\":{\n", " \"updateDates\":\"MonthEnd\"\n", " ,\"pair\":[(\"poolWaRate\",\"blue-fix\"),(\"EURIBOR3M\",0.04)] # paying a float rate with spread ,and receiving a fix annualized rate\n", " ,\"base\":{\"formula\":(\"poolBalance\",\"blue-fix\")}\n", " ,\"start\":closingDate\n", " ,\"balance\":0\n", " ,\"dayCount\":DC.DC_ACT_360.value\n", " },\n", "}\n", "\n", "\n", "initAsset = [\"Mortgage\"\n", " ,{\"originBalance\": 360_521_905\n", " ,\"originRate\": [\"fix\",0.0595]\n", " ,\"originTerm\": int(29.6*12)\n", " ,\"freq\": \"Monthly\"\n", " ,\"type\": \"Level\"\n", " ,\"originDate\": \"2015-08-30\"} # (int(29.6*12) - int(20.5*12)) Months before cut off date\n", " ,{\"currentBalance\": 360_521_905\n", " ,\"currentRate\": 0.0595\n", " ,\"remainTerm\": int(20.5*12)\n", " ,\"status\": \"Current\"}\n", " ]\n", "\n", "assetFloater = [\"floater\"\n", " ,0.03\n", " ,{\"index\":\"EURIBOR3M\"\n", " ,\"spread\":0.0015\n", " ,\"reset\":\"MonthEnd\"}]\n", "\n", "stratSplit = [0.425,0.075,0.425,0.075]\n", "assets = [ initAsset & lens.Fork(lens[1]['originBalance'], lens[2]['currentBalance']).set(r*totalPoolBal) for r in stratSplit ]\n", "assets[1][1]['originRate'] = assetFloater\n", "assets[3][1]['originRate'] = assetFloater\n", "\n", "pool = {\n", " \"elan-fix\":{'assets':[assets[0]]},\n", " \"elan-float\":{'assets':[assets[1]]},\n", " \"blue-fix\":{'assets':[assets[2]]},\n", " \"blue-float\":{'assets':[assets[3]]},\n", "}\n", "\n", "ledgers = {\n", " \"ledger-A\":{\"balance\":0},\n", " \"ledger-B\":{\"balance\":0},\n", " \"ledger-C\":{\"balance\":0},\n", " \"ledger-D\":{\"balance\":0},\n", " \"ledger-E\":{\"balance\":0}\n", "}\n", "\n", "\n", "waterfall = {\n", " \"amortizing\":[\n", " [\"transfer\",\"reserveAcc\",\"distAccInt\"],\n", " ## Revenue Priority of Payments\n", " [\"calcFee\", \"director_fee\",\"service_fee_elan\",\"service_fee_blue\",\"portfolio_manager_fee\",\"running_fee\",\"issuer_admin_fee\",\"paying_agent_fee\"\n", " ,\"issuer_account_fee\",\"swap_collateral_fee\",\"third_party_fee\",\"rating_fee\",\"cash_advance_fee\",\"listing_fee\"],\n", " # a,#fee to \"Directors\"; Collection Foundations; Security Trustee\n", " [\"payFee\", \"distAccInt\" ,[\"director_fee\",]],\n", " # b,#servicer fee(EDML)/ portfolio mager fee(EDML)/ running fee(Elan)/Admin Fee/ Paying Agent Fee/Lising Agent/ issuer Account fee/swap collateral custodian\n", " [\"payFee\", \"distAccInt\" ,[\"service_fee_elan\",\"service_fee_blue\",\"portfolio_manager_fee\",\"running_fee\",\"issuer_admin_fee\",\"paying_agent_fee\"\n", " ,\"issuer_account_fee\",\"swap_collateral_fee\",]],\n", " # c,#third party;credit rating agency;cash advance fee;listing of notes\n", " [\"payFee\", \"distAccInt\" ,[\"third_party_fee\",\"rating_fee\",\"cash_advance_fee\",\"listing_fee\"]],\n", " # d\n", " [\"liqRepay\",[\"bal\",\"int\"], \"distAccInt\", \"cashAdvance\"], #interest & principal of cash advance drawing; stand by drawing\n", " # e\n", " [\"settleSwap\", \"distAccInt\", \"ElanSwap\"],#pay to swap\n", " [\"settleSwap\", \"distAccInt\", \"BlueSwap\"],#pay to swap\n", " [\"calcInt\", \"A\",\"B\",\"C\",\"D\",\"E\", ],\n", " [\"payIntByIndex\", \"distAccInt\", [\"A\"], 0 ], # pay interest to note A\n", " [\"transfer\", \"distAccInt\",\"distAccPrin\" ,{\"ds\":(\"ledgerBalance\",\"Debit\",\"ledger-A\")},\"book\", \"CR\", \"ledger-A\"], #\n", " [\"if\",[\"not\"\n", " ,[\"all\"\n", " ,[(\"ledgerBalance\",\"Debit\",\"ledger-B\"),\">\",0]\n", " ,[(\"isMostSenior\",\"B\",(\"A\",)), False]]],\n", " [\"payIntByIndex\", \"distAccInt\", [\"B\"],0 ],\n", " ],\n", " [\"transfer\", \"distAccInt\",\"distAccPrin\" ,{\"ds\":(\"ledgerBalance\",\"Debit\",\"ledger-B\")},\"book\", \"CR\", \"ledger-B\" ],\n", " [\"payIntByIndex\", \"distAccInt\", [\"B\"],0 ],\n", " [\"if\",[\"not\",[\"all\",\n", " [(\"ledgerBalance\",\"Debit\",\"ledger-C\"),\">\",0]\n", " ,[(\"isMostSenior\",\"C\",(\"A\",\"B\")),False]\n", " ]],\n", " [\"payIntByIndex\", \"distAccInt\", [\"C\"],0 ],\n", " ], \n", " [\"transfer\", \"distAccInt\",\"distAccPrin\" ,{\"ds\":(\"ledgerBalance\",\"Debit\",\"ledger-C\")}, \"book\", \"CR\", \"ledger-C\" ],\n", " [\"payIntByIndex\", \"distAccInt\", [\"C\"],0 ],\n", " [\"if\",['not',[\"all\"\n", " ,[(\"ledgerBalance\",\"Debit\",\"ledger-D\"),\">\",0]\n", " ,[(\"isMostSenior\",\"D\",(\"A\",\"B\",\"C\")),False]\n", " ]],\n", " [\"payIntByIndex\", \"distAccInt\", [\"D\"],0 ],\n", " ], \n", " [\"transfer\", \"distAccInt\",\"distAccPrin\" ,{\"ds\":(\"ledgerBalance\",\"Debit\",\"ledger-D\")},\"book\", \"CR\", \"ledger-D\" ],\n", " [\"payIntByIndex\", \"distAccInt\", [\"D\"], 0 ],\n", " \n", " [\"transfer\", \"distAccInt\",\"reserveAcc\",{\"ds\":(\"reserveGap\",\"reserveAcc\")}],\n", " \n", " [\"if\",['not',[\"all\", [(\"ledgerBalance\",\"Debit\",\"ledger-E\"),\">\",0], [(\"isMostSenior\",\"E\",(\"A\",\"B\",\"C\",\"D\")),False]]],\n", " [\"payIntByIndex\", \"distAccInt\", [\"E\"],0 ],\n", " ], \n", " [\"transfer\", \"distAccInt\",\"distAccPrin\" ,{\"ds\":(\"ledgerBalance\",\"Debit\",\"ledger-E\")},\"book\", \"CR\", \"ledger-E\" ], \n", " [\"payIntByIndex\", \"distAccInt\", [\"E\"],0 ],\n", " #None,# pay fee and expenses to Blue Portfolio Manager\n", " [\"if\",[\"date\",\">=\",firstRedemptionDate]\n", " ,[\"payIntByIndex\", \"distAccInt\", [\"A\"],1 ]\n", " ,[\"payIntByIndex\", \"distAccInt\", [\"B\"],1 ]\n", " ,[\"payIntByIndex\", \"distAccInt\", [\"C\"],1 ]\n", " ,[\"payIntByIndex\", \"distAccInt\", [\"D\"],1 ]\n", " ,[\"payIntByIndex\", \"distAccInt\", [\"E\"],1 ]\n", " ],\n", " #None,# Swap Counterparty Subordinated Payment\n", " #None,# Cash Advance Facility Provider Subordinated Amounts\n", " #[\"if\",[(\"isPaidOff\",\"A\",\"B\",\"C\",\"D\",\"E\"),True],\n", " [\"payIntResidual\", \"distAccInt\", \"RS\"],\n", " #],\n", " ## Principal Distribution\n", " [\"transfer\", \"distAccInt\",\"distAccPrin\"],\n", " #None,#\n", " [\"payPrinBySeq\",\"distAccPrin\",[\"A\",\"B\",\"C\",\"D\",\"E\",\"RS\",]],\n", " ],\n", " \"endOfCollection\":[\n", " [\"bookBy\"\n", " ,[\"PDL\"\n", " ,\"Debit\"\n", " ,(\"curPoolCollection\", None,\"Losses\")\n", " ,[(f\"ledger-{_}\",(\"bondBalance\",_)) for _ in reversed([\"A\",\"B\",\"C\",\"D\",\"E\"])]\n", " ]\n", " ]\n", " ]\n", "}\n", "\n", "fees = (\n", "#1. **Servicer Fees**: Fees and expenses due to the EDML Servicer under the EDML Servicing Agreement and any amount due to the Blue Sub-servicers under the Blue Sub-Servicing Letter, as well as any remaining amount due to the Blue Servicer under the Blue Servicing Agreement (page 189).\n", " (\"service_fee_elan\",{\"type\":{\"annualPctFee\":[(\"poolBalance\",\"elan-float\",\"elan-fix\"),0.00208725]},\"feeStart\":\"2024-10-28\"}),\n", " (\"service_fee_blue\",{\"type\":{\"annualPctFee\":[(\"poolBalance\",\"blue-float\",\"blue-fix\"),0.0013]},\"feeStart\":\"2024-10-28\"}),\n", " #(\"structuring_fee\",{\"type\":{\"annualPctFee\":[(\"poolBalance\",\"blue-float\",\"blue-fix\"),0.0013]}}),\n", " (\"annual_senior_servicing_cost\",{\"type\":{\"annualPctFee\":[(\"poolBalance\",\"blue-float\",\"blue-fix\"),0.0013]},\"feeStart\":\"2024-10-28\"}), # 150,000\n", " (\"annual_senior_txn\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}), # 160,000\n", "#2. **Portfolio Manager Fees**: Fees and expenses due to the EDML Portfolio Manager under the EDML Portfolio Management Agreement (page 189).\n", " (\"portfolio_manager_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#3. **Running Fee**: A running fee for administrative and risk retention services of 0.08% per annum of the notional amount of the Blue Receivables is payable by the Issuer to the Elan Seller (page 94).\n", " (\"running_fee\",{\"type\":{\"annualPctFee\":[(\"poolBalance\",\"blue-float\",\"blue-fix\"),0.0008]},\"feeStart\":\"2024-10-28\"}),\n", "#4. **Issuer Administrator Fees**: Fees and expenses due to the Issuer Administrator under the Administration Agreement (page 189).\n", " (\"issuer_admin_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#5. **Paying Agent and Reference Agent Fees**: Fees and expenses due to the Paying Agent and the Reference Agent under the Paying Agency Agreement (page 189).\n", " (\"paying_agent_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#6. **Listing Agent Fees**: Fees and expenses due to the Listing Agent (page 189).\n", " (\"listing_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#7. **Issuer Account Bank Fees**: Any amounts due to the Issuer Account Bank under the Issuer Account Agreement, including negative interest on the Issuer Accounts (page 189).\n", " (\"issuer_account_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#8. **Swap Collateral Custodian Fees**: Fees and expenses due to the Swap Collateral Custodian under the Swap Collateral Custodian Agreement (page 189).\n", " (\"swap_collateral_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#9. **Third Party Fees**: Amounts due to third parties, including the EU SR Repository, under obligations incurred in the Issuer's business, and any amounts due to Credit Rating Agencies, legal advisors, auditors, and accountants (page 194).\n", " (\"third_party_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#10. **Cash Advance Facility Provider Fees**: Amounts due to the Cash Advance Facility Provider under the Cash Advance Facility Agreement (page 194).\n", " (\"cash_advance_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#11. **Swap Counterparty Fees**: Amounts due to Swap Counterparties under the Swap Agreements, including Swap Termination Payments, but excluding Swap Counterparty Subordinated Payments (page 194).\n", " (\"swap_counterparty_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#12. **Blue Portfolio Manager Fees**: Fees and expenses due to the Blue Portfolio Manager under the Blue Servicing Agreement (page 195).\n", " (\"blue_portfolio_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#13. **Subordinated Payments**: Swap Counterparty Subordinated Payments and Cash Advance Facility Provider Subordinated Amounts (page 195).\n", " (\"subordinated_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", " #14. **Director Fees**: An annual fee due to the Director in connection with the Issuer Management Agreement, with a minimum of Euro 3,500 (page 184).\n", " (\"director_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", "#15 missing \n", " (\"rating_fee\",{\"type\":{\"fixFee\":100},\"feeStart\":\"2024-10-28\"}),\n", ")\n", "\n", "BLUE_RMBS = Generic(\n", " \"EDML BLUE 2024 B.V\"\n", " ,{\"cutoff\":cutoff\n", " ,\"closing\":closingDate\n", " ,\"firstPay\":firstPay\n", " ,\"stated\":statedDate\n", " ,\"poolFreq\":\"QuarterEnd\"\n", " ,\"payFreq\":[\"EveryNMonth\",\"2025-01-28\",3]}\n", " ,pool\n", " ,accs\n", " ,bonds\n", " ,fees\n", " , waterfall\n", " ,[[[\"blue-fix\",\"blue-float\",\"elan-fix\",\"elan-float\"],\"CollectedPrepayment\",\"distAccPrin\"]\n", " ,[[\"blue-fix\",\"blue-float\",\"elan-fix\",\"elan-float\"],\"CollectedPrincipal\",\"distAccPrin\"]\n", " ,[[\"blue-fix\",\"blue-float\",\"elan-fix\",\"elan-float\"],\"CollectedInterest\",\"distAccInt\"]\n", " ,[[\"blue-fix\",\"blue-float\",\"elan-fix\",\"elan-float\"],\"CollectedRecoveries\",\"distAccPrin\"]\n", " ]\n", " ,liqFacility\n", " ,rateSwap\n", " ,None\n", " ,None # optional\n", " ,(\"PreClosing\",\"Amortizing\")\n", " ,None\n", " ,ledgers# optional\n", " ,None # optional\n", ")" ] }, { "cell_type": "code", "execution_count": 20, "id": "b1e07534-8f17-4f9f-af52-d780a125be37", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
Warning Message from server:\n",
       "Bond C is not paid off\n",
       "Bond D is not paid off\n",
       "Bond E is not paid off\n",
       "Bond RS is not paid off\n",
       "Fee annual_senior_txn is not paid off\n",
       "Fee blue_portfolio_fee is not paid off\n",
       "Fee subordinated_fee is not paid off\n",
       "Fee swap_counterparty_fee is not paid off\n",
       "
\n" ], "text/plain": [ "Warning Message from server:\n", "\u001b[1;33mBond C is not paid off\u001b[0m\n", "\u001b[1;33mBond D is not paid off\u001b[0m\n", "\u001b[1;33mBond E is not paid off\u001b[0m\n", "\u001b[1;33mBond RS is not paid off\u001b[0m\n", "\u001b[1;33mFee annual_senior_txn is not paid off\u001b[0m\n", "\u001b[1;33mFee blue_portfolio_fee is not paid off\u001b[0m\n", "\u001b[1;33mFee subordinated_fee is not paid off\u001b[0m\n", "\u001b[1;33mFee swap_counterparty_fee is not paid off\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "r = localAPI.run(BLUE_RMBS\n", " ,poolAssump = (\"Pool\",(\"Mortgage\",{\"CDR\":0.0},None,None,None)\n", " ,None\n", " ,None)\n", " ,runAssump = [(\"rate\",(\"EURIBOR3M\",0.035)),(\"report\",{\"dates\":[\"EveryNMonth\",\"2025-01-27\",3]})\n", " ,(\"inspect\",(\"MonthEnd\",(\"bondRate\",\"D\"))\n", " ,(\"MonthEnd\",(\"poolWaRate\",\"blue-fix\"))\n", " ,(\"MonthEnd\",(\"poolWaRate\",)))\n", " ]\n", " ,read=True)" ] }, { "cell_type": "code", "execution_count": 21, "id": "c2e17b74-4f49-474f-9835-dbb620e13878", "metadata": {}, "outputs": [], "source": [ "from absbox import readInspect,readBondsCf,BondCfHeader,readFeesCf" ] }, { "cell_type": "code", "execution_count": 22, "id": "0cd2d4fe-f1a8-4e44-a05a-fc0c52ccda90", "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
BondABCDERS
Fieldbalanceinterestprincipalbalanceinterestprincipalbalanceinterestprincipalbalanceinterestprincipalbalanceinterestprincipalbalanceinterestprincipal
date
2025-01-283.401614e+083291184.482338556.629000000.094568.740.05200000.060648.330.0110000015232.010270000056503.86040000000.002261080.430.00
2025-04-283.377547e+083494314.222406782.909000000.0100363.720.05200000.063867.220.0110000015861.200270000057636.30040000000.002253530.830.00
2025-07-283.353145e+083508179.672440150.669000000.0101480.080.05200000.064577.700.0110000016037.690270000058278.01040000000.002242461.960.00
2025-10-283.328405e+083521144.772473993.349000000.0102596.430.05200000.065288.170.0110000016214.160270000058919.73040000000.002184520.010.00
2026-01-283.303322e+083495165.322508317.829000000.0102596.430.05200000.065288.170.0110000016214.160270000058919.73040000000.002169629.110.00
.........................................................
2044-04-281.074794e+07230082.006942464.409000000.0133478.920.05200000.091833.250.0110000024966.070270000092024.90040000000.0028246.250.00
2044-07-283.706911e+06139788.047041026.889000000.0133478.920.05200000.091833.250.0110000024966.070270000092024.90040000000.00138.170.00
2044-10-280.000000e+0048742.443706911.145565896.2134947.033434103.85200000.092843.380.0110000025240.730270000060205.02040000000.000.000.00
2045-01-28NaNNaNNaN0.083455.675565896.23523446.781554.461676553.3110000016214.160270000058919.73040000000.000.000.00
2045-04-28NaNNaNNaNNaNNaNNaN0.043275.523523446.7015861.201100000056488.50270000039978095.020.0021904.98
\n", "

82 rows × 18 columns

\n", "
" ], "text/plain": [ "Bond A B \\\n", "Field balance interest principal balance interest \n", "date \n", "2025-01-28 3.401614e+08 3291184.48 2338556.62 9000000.0 94568.74 \n", "2025-04-28 3.377547e+08 3494314.22 2406782.90 9000000.0 100363.72 \n", "2025-07-28 3.353145e+08 3508179.67 2440150.66 9000000.0 101480.08 \n", "2025-10-28 3.328405e+08 3521144.77 2473993.34 9000000.0 102596.43 \n", "2026-01-28 3.303322e+08 3495165.32 2508317.82 9000000.0 102596.43 \n", "... ... ... ... ... ... \n", "2044-04-28 1.074794e+07 230082.00 6942464.40 9000000.0 133478.92 \n", "2044-07-28 3.706911e+06 139788.04 7041026.88 9000000.0 133478.92 \n", "2044-10-28 0.000000e+00 48742.44 3706911.14 5565896.2 134947.03 \n", "2045-01-28 NaN NaN NaN 0.0 83455.67 \n", "2045-04-28 NaN NaN NaN NaN NaN \n", "\n", "Bond C D \\\n", "Field principal balance interest principal balance interest \n", "date \n", "2025-01-28 0.0 5200000.0 60648.33 0.0 1100000 15232.01 \n", "2025-04-28 0.0 5200000.0 63867.22 0.0 1100000 15861.20 \n", "2025-07-28 0.0 5200000.0 64577.70 0.0 1100000 16037.69 \n", "2025-10-28 0.0 5200000.0 65288.17 0.0 1100000 16214.16 \n", "2026-01-28 0.0 5200000.0 65288.17 0.0 1100000 16214.16 \n", "... ... ... ... ... ... ... \n", "2044-04-28 0.0 5200000.0 91833.25 0.0 1100000 24966.07 \n", "2044-07-28 0.0 5200000.0 91833.25 0.0 1100000 24966.07 \n", "2044-10-28 3434103.8 5200000.0 92843.38 0.0 1100000 25240.73 \n", "2045-01-28 5565896.2 3523446.7 81554.46 1676553.3 1100000 16214.16 \n", "2045-04-28 NaN 0.0 43275.52 3523446.7 0 15861.20 \n", "\n", "Bond E RS \\\n", "Field principal balance interest principal balance interest \n", "date \n", "2025-01-28 0 2700000 56503.86 0 40000000.00 2261080.43 \n", "2025-04-28 0 2700000 57636.30 0 40000000.00 2253530.83 \n", "2025-07-28 0 2700000 58278.01 0 40000000.00 2242461.96 \n", "2025-10-28 0 2700000 58919.73 0 40000000.00 2184520.01 \n", "2026-01-28 0 2700000 58919.73 0 40000000.00 2169629.11 \n", "... ... ... ... ... ... ... \n", "2044-04-28 0 2700000 92024.90 0 40000000.00 28246.25 \n", "2044-07-28 0 2700000 92024.90 0 40000000.00 138.17 \n", "2044-10-28 0 2700000 60205.02 0 40000000.00 0.00 \n", "2045-01-28 0 2700000 58919.73 0 40000000.00 0.00 \n", "2045-04-28 1100000 0 56488.50 2700000 39978095.02 0.00 \n", "\n", "Bond \n", "Field principal \n", "date \n", "2025-01-28 0.00 \n", "2025-04-28 0.00 \n", "2025-07-28 0.00 \n", "2025-10-28 0.00 \n", "2026-01-28 0.00 \n", "... ... \n", "2044-04-28 0.00 \n", "2044-07-28 0.00 \n", "2044-10-28 0.00 \n", "2045-01-28 0.00 \n", "2045-04-28 21904.98 \n", "\n", "[82 rows x 18 columns]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "readBondsCf(r['bonds'],popColumns=BondCfHeader.SIMPLE.value)" ] } ], "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.2" } }, "nbformat": 4, "nbformat_minor": 5 }