From 7afddc561a1e6549e952b38338a56e2cdab5d010 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Fri, 25 Mar 2022 18:48:58 -0500 Subject: [PATCH 01/39] working on the implementation of L --- hydradx/TestIL.ipynb | 2566 +++++------------------------ hydradx/TestLRNASwap.ipynb | 7 +- hydradx/TestSwap.ipynb | 8 +- hydradx/model/amm/omnipool_amm.py | 16 + 4 files changed, 479 insertions(+), 2118 deletions(-) diff --git a/hydradx/TestIL.ipynb b/hydradx/TestIL.ipynb index 47881689..2616a07c 100644 --- a/hydradx/TestIL.ipynb +++ b/hydradx/TestIL.ipynb @@ -41,7 +41,7 @@ "Ns : [0]\n", "ExpIDs : [0]\n", "Execution Mode: single_threaded\n", - "Total execution time: 7.80s\n" + "Total execution time: 9.26s\n" ] } ], @@ -66,7 +66,6 @@ "########## AGENT CONFIGURATION ##########\n", "# key -> token name, value -> token amount owned by agent\n", "# note that token name of 'omniABC' is used for omnipool LP shares of token 'ABC'\n", - "# omniHDXABC is HDX shares dedicated to pool of token ABC\n", "LP1 = {'omniR1': 500000}\n", "LP2 = {'omniR2': 1500000}\n", "trader = {'LRNA': 1000000, 'R1': 1000000, 'R2': 1000000}\n", @@ -99,9 +98,9 @@ "\n", "# Todo: generalize\n", "initial_values = {\n", - " 'token_list': ['R1','R2'],\n", - " 'R': [500000,1500000],\n", - " 'P': [2,2/3],\n", + " 'token_list': ['HDX', 'USD', 'R1','R2'],\n", + " 'R': [1000000, 1000000, 500000, 1500000],\n", + " 'P': [1, 1, 2, 2/3],\n", " 'fee_assets': 0,\n", " 'fee_LRNA': 0\n", "}\n", @@ -180,17 +179,17 @@ " \n", " R-0\n", " R-1\n", + " R-2\n", + " R-3\n", " Q-0\n", " Q-1\n", + " Q-2\n", + " Q-3\n", " S-0\n", " S-1\n", - " A-0\n", - " A-1\n", - " B-0\n", - " B-1\n", " ...\n", - " token_list-0\n", - " token_list-1\n", + " token_list-2\n", + " token_list-3\n", " fee_assets\n", " fee_LRNA\n", " n\n", @@ -204,22 +203,22 @@ " \n", " \n", " 3\n", + " 1000000\n", + " 1000000\n", " 501000.00\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 998003.99\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -228,22 +227,22 @@ " \n", " \n", " 6\n", + " 1000000\n", + " 1000000\n", " 499998.00\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1000003.99\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -252,22 +251,22 @@ " \n", " \n", " 9\n", + " 1000000\n", + " 1000000\n", " 499000.01\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1002003.99\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -276,22 +275,22 @@ " \n", " \n", " 12\n", + " 1000000\n", + " 1000000\n", " 498005.99\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1004003.99\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -300,22 +299,22 @@ " \n", " \n", " 15\n", + " 1000000\n", + " 1000000\n", " 499005.99\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1001991.98\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -324,22 +323,22 @@ " \n", " \n", " 18\n", + " 1000000\n", + " 1000000\n", " 500005.99\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 999988.02\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -348,22 +347,22 @@ " \n", " \n", " 21\n", + " 1000000\n", + " 1000000\n", " 501005.99\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 997992.06\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -372,22 +371,22 @@ " \n", " \n", " 24\n", + " 1000000\n", + " 1000000\n", " 500003.97\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 999992.06\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -396,22 +395,22 @@ " \n", " \n", " 27\n", + " 1000000\n", + " 1000000\n", " 499005.95\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1001992.06\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -420,22 +419,22 @@ " \n", " \n", " 30\n", + " 1000000\n", + " 1000000\n", " 498011.90\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1003992.06\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -444,22 +443,22 @@ " \n", " \n", " 33\n", + " 1000000\n", + " 1000000\n", " 497021.81\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1005992.06\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -468,22 +467,22 @@ " \n", " \n", " 36\n", + " 1000000\n", + " 1000000\n", " 498021.81\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1003972.09\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -492,22 +491,22 @@ " \n", " \n", " 39\n", + " 1000000\n", + " 1000000\n", " 497031.68\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1005972.09\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -516,22 +515,22 @@ " \n", " \n", " 42\n", + " 1000000\n", + " 1000000\n", " 496045.48\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1007972.09\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -540,22 +539,22 @@ " \n", " \n", " 45\n", + " 1000000\n", + " 1000000\n", " 497045.48\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1005944.16\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -564,22 +563,22 @@ " \n", " \n", " 48\n", + " 1000000\n", + " 1000000\n", " 498045.48\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1003924.38\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -588,22 +587,22 @@ " \n", " \n", " 51\n", + " 1000000\n", + " 1000000\n", " 497055.26\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1005924.38\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -612,22 +611,22 @@ " \n", " \n", " 54\n", + " 1000000\n", + " 1000000\n", " 498055.26\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1003904.67\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -636,22 +635,22 @@ " \n", " \n", " 57\n", + " 1000000\n", + " 1000000\n", " 499055.26\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1001893.06\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -660,22 +659,22 @@ " \n", " \n", " 60\n", + " 1000000\n", + " 1000000\n", " 498061.02\n", " 1500000\n", + " 1000000\n", + " 1000000\n", " 1003893.06\n", " 1000000.00\n", - " 500000\n", - " 1500000\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " 1000000\n", + " 1000000\n", " ...\n", " R1\n", " R2\n", " 0\n", " 0\n", - " 2\n", + " 4\n", " 0\n", " 0\n", " 1\n", @@ -684,77 +683,77 @@ " \n", " \n", "\n", - "

20 rows × 23 columns

\n", + "

20 rows × 35 columns

\n", "" ], "text/plain": [ - " R-0 R-1 Q-0 Q-1 S-0 S-1 A-0 A-1 B-0 \\\n", - "3 501000.00 1500000 998003.99 1000000.00 500000 1500000 0 0 0 \n", - "6 499998.00 1500000 1000003.99 1000000.00 500000 1500000 0 0 0 \n", - "9 499000.01 1500000 1002003.99 1000000.00 500000 1500000 0 0 0 \n", - "12 498005.99 1500000 1004003.99 1000000.00 500000 1500000 0 0 0 \n", - "15 499005.99 1500000 1001991.98 1000000.00 500000 1500000 0 0 0 \n", - "18 500005.99 1500000 999988.02 1000000.00 500000 1500000 0 0 0 \n", - "21 501005.99 1500000 997992.06 1000000.00 500000 1500000 0 0 0 \n", - "24 500003.97 1500000 999992.06 1000000.00 500000 1500000 0 0 0 \n", - "27 499005.95 1500000 1001992.06 1000000.00 500000 1500000 0 0 0 \n", - "30 498011.90 1500000 1003992.06 1000000.00 500000 1500000 0 0 0 \n", - "33 497021.81 1500000 1005992.06 1000000.00 500000 1500000 0 0 0 \n", - "36 498021.81 1500000 1003972.09 1000000.00 500000 1500000 0 0 0 \n", - "39 497031.68 1500000 1005972.09 1000000.00 500000 1500000 0 0 0 \n", - "42 496045.48 1500000 1007972.09 1000000.00 500000 1500000 0 0 0 \n", - "45 497045.48 1500000 1005944.16 1000000.00 500000 1500000 0 0 0 \n", - "48 498045.48 1500000 1003924.38 1000000.00 500000 1500000 0 0 0 \n", - "51 497055.26 1500000 1005924.38 1000000.00 500000 1500000 0 0 0 \n", - "54 498055.26 1500000 1003904.67 1000000.00 500000 1500000 0 0 0 \n", - "57 499055.26 1500000 1001893.06 1000000.00 500000 1500000 0 0 0 \n", - "60 498061.02 1500000 1003893.06 1000000.00 500000 1500000 0 0 0 \n", + " R-0 R-1 R-2 R-3 Q-0 Q-1 Q-2 \\\n", + "3 1000000 1000000 501000.00 1500000 1000000 1000000 998003.99 \n", + "6 1000000 1000000 499998.00 1500000 1000000 1000000 1000003.99 \n", + "9 1000000 1000000 499000.01 1500000 1000000 1000000 1002003.99 \n", + "12 1000000 1000000 498005.99 1500000 1000000 1000000 1004003.99 \n", + "15 1000000 1000000 499005.99 1500000 1000000 1000000 1001991.98 \n", + "18 1000000 1000000 500005.99 1500000 1000000 1000000 999988.02 \n", + "21 1000000 1000000 501005.99 1500000 1000000 1000000 997992.06 \n", + "24 1000000 1000000 500003.97 1500000 1000000 1000000 999992.06 \n", + "27 1000000 1000000 499005.95 1500000 1000000 1000000 1001992.06 \n", + "30 1000000 1000000 498011.90 1500000 1000000 1000000 1003992.06 \n", + "33 1000000 1000000 497021.81 1500000 1000000 1000000 1005992.06 \n", + "36 1000000 1000000 498021.81 1500000 1000000 1000000 1003972.09 \n", + "39 1000000 1000000 497031.68 1500000 1000000 1000000 1005972.09 \n", + "42 1000000 1000000 496045.48 1500000 1000000 1000000 1007972.09 \n", + "45 1000000 1000000 497045.48 1500000 1000000 1000000 1005944.16 \n", + "48 1000000 1000000 498045.48 1500000 1000000 1000000 1003924.38 \n", + "51 1000000 1000000 497055.26 1500000 1000000 1000000 1005924.38 \n", + "54 1000000 1000000 498055.26 1500000 1000000 1000000 1003904.67 \n", + "57 1000000 1000000 499055.26 1500000 1000000 1000000 1001893.06 \n", + "60 1000000 1000000 498061.02 1500000 1000000 1000000 1003893.06 \n", "\n", - " B-1 ... token_list-0 token_list-1 fee_assets fee_LRNA n simulation \\\n", - "3 0 ... R1 R2 0 0 2 0 \n", - "6 0 ... R1 R2 0 0 2 0 \n", - "9 0 ... R1 R2 0 0 2 0 \n", - "12 0 ... R1 R2 0 0 2 0 \n", - "15 0 ... R1 R2 0 0 2 0 \n", - "18 0 ... R1 R2 0 0 2 0 \n", - "21 0 ... R1 R2 0 0 2 0 \n", - "24 0 ... R1 R2 0 0 2 0 \n", - "27 0 ... R1 R2 0 0 2 0 \n", - "30 0 ... R1 R2 0 0 2 0 \n", - "33 0 ... R1 R2 0 0 2 0 \n", - "36 0 ... R1 R2 0 0 2 0 \n", - "39 0 ... R1 R2 0 0 2 0 \n", - "42 0 ... R1 R2 0 0 2 0 \n", - "45 0 ... R1 R2 0 0 2 0 \n", - "48 0 ... R1 R2 0 0 2 0 \n", - "51 0 ... R1 R2 0 0 2 0 \n", - "54 0 ... R1 R2 0 0 2 0 \n", - "57 0 ... R1 R2 0 0 2 0 \n", - "60 0 ... R1 R2 0 0 2 0 \n", + " Q-3 S-0 S-1 ... token_list-2 token_list-3 fee_assets \\\n", + "3 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "6 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "9 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "12 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "15 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "18 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "21 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "24 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "27 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "30 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "33 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "36 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "39 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "42 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "45 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "48 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "51 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "54 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "57 1000000.00 1000000 1000000 ... R1 R2 0 \n", + "60 1000000.00 1000000 1000000 ... R1 R2 0 \n", "\n", - " subset run substep timestep \n", - "3 0 1 3 1 \n", - "6 0 1 3 2 \n", - "9 0 1 3 3 \n", - "12 0 1 3 4 \n", - "15 0 1 3 5 \n", - "18 0 1 3 6 \n", - "21 0 1 3 7 \n", - "24 0 1 3 8 \n", - "27 0 1 3 9 \n", - "30 0 1 3 10 \n", - "33 0 1 3 11 \n", - "36 0 1 3 12 \n", - "39 0 1 3 13 \n", - "42 0 1 3 14 \n", - "45 0 1 3 15 \n", - "48 0 1 3 16 \n", - "51 0 1 3 17 \n", - "54 0 1 3 18 \n", - "57 0 1 3 19 \n", - "60 0 1 3 20 \n", + " fee_LRNA n simulation subset run substep timestep \n", + "3 0 4 0 0 1 3 1 \n", + "6 0 4 0 0 1 3 2 \n", + "9 0 4 0 0 1 3 3 \n", + "12 0 4 0 0 1 3 4 \n", + "15 0 4 0 0 1 3 5 \n", + "18 0 4 0 0 1 3 6 \n", + "21 0 4 0 0 1 3 7 \n", + "24 0 4 0 0 1 3 8 \n", + "27 0 4 0 0 1 3 9 \n", + "30 0 4 0 0 1 3 10 \n", + "33 0 4 0 0 1 3 11 \n", + "36 0 4 0 0 1 3 12 \n", + "39 0 4 0 0 1 3 13 \n", + "42 0 4 0 0 1 3 14 \n", + "45 0 4 0 0 1 3 15 \n", + "48 0 4 0 0 1 3 16 \n", + "51 0 4 0 0 1 3 17 \n", + "54 0 4 0 0 1 3 18 \n", + "57 0 4 0 0 1 3 19 \n", + "60 0 4 0 0 1 3 20 \n", "\n", - "[20 rows x 23 columns]" + "[20 rows x 35 columns]" ] }, "execution_count": 4, @@ -801,10 +800,16 @@ " q\n", " s-0\n", " s-1\n", + " s-2\n", + " s-3\n", " r-0\n", " r-1\n", + " r-2\n", + " r-3\n", " p-0\n", " p-1\n", + " p-2\n", + " p-3\n", " \n", " \n", " \n", @@ -817,10 +822,16 @@ " 4994\n", " LP1\n", " 0.00\n", + " 0\n", + " 0\n", " 500000\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 2.00\n", " 0.00\n", " \n", @@ -834,9 +845,15 @@ " LP2\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 1500000\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0.67\n", " \n", @@ -851,8 +868,14 @@ " 994345.40\n", " 0\n", " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " 1002811.40\n", " 1000000\n", + " 0\n", + " 0\n", " 0.00\n", " 0.00\n", " \n", @@ -865,10 +888,16 @@ " 4995\n", " LP1\n", " 0.00\n", + " 0\n", + " 0\n", " 500000\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 2.00\n", " 0.00\n", " \n", @@ -882,9 +911,15 @@ " LP2\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 1500000\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0.67\n", " \n", @@ -899,8 +934,14 @@ " 996364.02\n", " 0\n", " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " 1001811.40\n", " 1000000\n", + " 0\n", + " 0\n", " 0.00\n", " 0.00\n", " \n", @@ -913,10 +954,16 @@ " 4996\n", " LP1\n", " 0.00\n", + " 0\n", + " 0\n", " 500000\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 2.00\n", " 0.00\n", " \n", @@ -930,9 +977,15 @@ " LP2\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 1500000\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0.67\n", " \n", @@ -947,8 +1000,14 @@ " 994364.02\n", " 0\n", " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " 1002802.20\n", " 1000000\n", + " 0\n", + " 0\n", " 0.00\n", " 0.00\n", " \n", @@ -961,10 +1020,16 @@ " 4997\n", " LP1\n", " 0.00\n", + " 0\n", + " 0\n", " 500000\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 2.00\n", " 0.00\n", " \n", @@ -978,9 +1043,15 @@ " LP2\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 1500000\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0.67\n", " \n", @@ -995,8 +1066,14 @@ " 996382.57\n", " 0\n", " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " 1001802.20\n", " 1000000\n", + " 0\n", + " 0\n", " 0.00\n", " 0.00\n", " \n", @@ -1009,10 +1086,16 @@ " 4998\n", " LP1\n", " 0.00\n", + " 0\n", + " 0\n", " 500000\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 2.00\n", " 0.00\n", " \n", @@ -1026,9 +1109,15 @@ " LP2\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 1500000\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0.67\n", " \n", @@ -1043,8 +1132,14 @@ " 998393.03\n", " 0\n", " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " 1000802.20\n", " 1000000\n", + " 0\n", + " 0\n", " 0.00\n", " 0.00\n", " \n", @@ -1057,10 +1152,16 @@ " 4999\n", " LP1\n", " 0.00\n", + " 0\n", + " 0\n", " 500000\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 2.00\n", " 0.00\n", " \n", @@ -1074,9 +1175,15 @@ " LP2\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 1500000\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0.67\n", " \n", @@ -1091,8 +1198,14 @@ " 996393.03\n", " 0\n", " 0\n", + " 0\n", + " 0\n", + " 0\n", + " 0\n", " 1001797.00\n", " 1000000\n", + " 0\n", + " 0\n", " 0.00\n", " 0.00\n", " \n", @@ -1105,10 +1218,16 @@ " 5000\n", " LP1\n", " 0.00\n", + " 0\n", + " 0\n", " 500000\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 2.00\n", " 0.00\n", " \n", @@ -1122,9 +1241,15 @@ " LP2\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 1500000\n", + " 0\n", + " 0\n", " 0.00\n", " 0\n", + " 0\n", + " 0\n", " 0.00\n", " 0.67\n", " \n", @@ -1133,49 +1258,49 @@ "" ], "text/plain": [ - " simulation subset run substep timestep agent_label q \\\n", - "44947 0 0 1 3 4994 LP1 0.00 \n", - "44948 0 0 1 3 4994 LP2 0.00 \n", - "44955 0 0 1 3 4995 Trader 994345.40 \n", - "44956 0 0 1 3 4995 LP1 0.00 \n", - "44957 0 0 1 3 4995 LP2 0.00 \n", - "44964 0 0 1 3 4996 Trader 996364.02 \n", - "44965 0 0 1 3 4996 LP1 0.00 \n", - "44966 0 0 1 3 4996 LP2 0.00 \n", - "44973 0 0 1 3 4997 Trader 994364.02 \n", - "44974 0 0 1 3 4997 LP1 0.00 \n", - "44975 0 0 1 3 4997 LP2 0.00 \n", - "44982 0 0 1 3 4998 Trader 996382.57 \n", - "44983 0 0 1 3 4998 LP1 0.00 \n", - "44984 0 0 1 3 4998 LP2 0.00 \n", - "44991 0 0 1 3 4999 Trader 998393.03 \n", - "44992 0 0 1 3 4999 LP1 0.00 \n", - "44993 0 0 1 3 4999 LP2 0.00 \n", - "45000 0 0 1 3 5000 Trader 996393.03 \n", - "45001 0 0 1 3 5000 LP1 0.00 \n", - "45002 0 0 1 3 5000 LP2 0.00 \n", + " simulation subset run substep timestep agent_label q s-0 \\\n", + "44947 0 0 1 3 4994 LP1 0.00 0 \n", + "44948 0 0 1 3 4994 LP2 0.00 0 \n", + "44955 0 0 1 3 4995 Trader 994345.40 0 \n", + "44956 0 0 1 3 4995 LP1 0.00 0 \n", + "44957 0 0 1 3 4995 LP2 0.00 0 \n", + "44964 0 0 1 3 4996 Trader 996364.02 0 \n", + "44965 0 0 1 3 4996 LP1 0.00 0 \n", + "44966 0 0 1 3 4996 LP2 0.00 0 \n", + "44973 0 0 1 3 4997 Trader 994364.02 0 \n", + "44974 0 0 1 3 4997 LP1 0.00 0 \n", + "44975 0 0 1 3 4997 LP2 0.00 0 \n", + "44982 0 0 1 3 4998 Trader 996382.57 0 \n", + "44983 0 0 1 3 4998 LP1 0.00 0 \n", + "44984 0 0 1 3 4998 LP2 0.00 0 \n", + "44991 0 0 1 3 4999 Trader 998393.03 0 \n", + "44992 0 0 1 3 4999 LP1 0.00 0 \n", + "44993 0 0 1 3 4999 LP2 0.00 0 \n", + "45000 0 0 1 3 5000 Trader 996393.03 0 \n", + "45001 0 0 1 3 5000 LP1 0.00 0 \n", + "45002 0 0 1 3 5000 LP2 0.00 0 \n", "\n", - " s-0 s-1 r-0 r-1 p-0 p-1 \n", - "44947 500000 0 0.00 0 2.00 0.00 \n", - "44948 0 1500000 0.00 0 0.00 0.67 \n", - "44955 0 0 1002811.40 1000000 0.00 0.00 \n", - "44956 500000 0 0.00 0 2.00 0.00 \n", - "44957 0 1500000 0.00 0 0.00 0.67 \n", - "44964 0 0 1001811.40 1000000 0.00 0.00 \n", - "44965 500000 0 0.00 0 2.00 0.00 \n", - "44966 0 1500000 0.00 0 0.00 0.67 \n", - "44973 0 0 1002802.20 1000000 0.00 0.00 \n", - "44974 500000 0 0.00 0 2.00 0.00 \n", - "44975 0 1500000 0.00 0 0.00 0.67 \n", - "44982 0 0 1001802.20 1000000 0.00 0.00 \n", - "44983 500000 0 0.00 0 2.00 0.00 \n", - "44984 0 1500000 0.00 0 0.00 0.67 \n", - "44991 0 0 1000802.20 1000000 0.00 0.00 \n", - "44992 500000 0 0.00 0 2.00 0.00 \n", - "44993 0 1500000 0.00 0 0.00 0.67 \n", - "45000 0 0 1001797.00 1000000 0.00 0.00 \n", - "45001 500000 0 0.00 0 2.00 0.00 \n", - "45002 0 1500000 0.00 0 0.00 0.67 " + " s-1 s-2 s-3 r-0 r-1 r-2 r-3 p-0 p-1 p-2 p-3 \n", + "44947 0 500000 0 0 0 0.00 0 0 0 2.00 0.00 \n", + "44948 0 0 1500000 0 0 0.00 0 0 0 0.00 0.67 \n", + "44955 0 0 0 0 0 1002811.40 1000000 0 0 0.00 0.00 \n", + "44956 0 500000 0 0 0 0.00 0 0 0 2.00 0.00 \n", + "44957 0 0 1500000 0 0 0.00 0 0 0 0.00 0.67 \n", + "44964 0 0 0 0 0 1001811.40 1000000 0 0 0.00 0.00 \n", + "44965 0 500000 0 0 0 0.00 0 0 0 2.00 0.00 \n", + "44966 0 0 1500000 0 0 0.00 0 0 0 0.00 0.67 \n", + "44973 0 0 0 0 0 1002802.20 1000000 0 0 0.00 0.00 \n", + "44974 0 500000 0 0 0 0.00 0 0 0 2.00 0.00 \n", + "44975 0 0 1500000 0 0 0.00 0 0 0 0.00 0.67 \n", + "44982 0 0 0 0 0 1001802.20 1000000 0 0 0.00 0.00 \n", + "44983 0 500000 0 0 0 0.00 0 0 0 2.00 0.00 \n", + "44984 0 0 1500000 0 0 0.00 0 0 0 0.00 0.67 \n", + "44991 0 0 0 0 0 1000802.20 1000000 0 0 0.00 0.00 \n", + "44992 0 500000 0 0 0 0.00 0 0 0 2.00 0.00 \n", + "44993 0 0 1500000 0 0 0.00 0 0 0 0.00 0.67 \n", + "45000 0 0 0 0 0 1001797.00 1000000 0 0 0.00 0.00 \n", + "45001 0 500000 0 0 0 0.00 0 0 0 2.00 0.00 \n", + "45002 0 0 1500000 0 0 0.00 0 0 0 0.00 0.67 " ] }, "execution_count": 5, @@ -1207,22 +1332,24 @@ ] }, { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" + "ename": "ValueError", + "evalue": "num must be 1 <= num <= 3, not 4", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Input \u001b[1;32mIn [6]\u001b[0m, in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m var_list \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mQ\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m----> 2\u001b[0m \u001b[43mpu\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot_vars\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrdf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvar_list\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32m~\\Documents\\HydraDx\\HydraDX-simulations\\hydradx\\model\\plot_utils.py:22\u001b[0m, in \u001b[0;36mplot_vars\u001b[1;34m(df, var_list, sim_labels)\u001b[0m\n\u001b[0;32m 20\u001b[0m init \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m131\u001b[39m \u001b[38;5;241m+\u001b[39m i\n\u001b[0;32m 21\u001b[0m var_i \u001b[38;5;241m=\u001b[39m var \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m-\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mstr\u001b[39m(i)\n\u001b[1;32m---> 22\u001b[0m ax \u001b[38;5;241m=\u001b[39m \u001b[43mplt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msubplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43minit\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtitle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvar_i\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 23\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m j \u001b[38;5;129;01min\u001b[39;00m simulations:\n\u001b[0;32m 24\u001b[0m df[[var_i, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtimestep\u001b[39m\u001b[38;5;124m'\u001b[39m]][df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msimulation\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m==\u001b[39m j]\u001b[38;5;241m.\u001b[39mastype(\u001b[38;5;28mfloat\u001b[39m)\u001b[38;5;241m.\u001b[39mplot(ax\u001b[38;5;241m=\u001b[39max, y\u001b[38;5;241m=\u001b[39m[var_i], x\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtimestep\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[0;32m 25\u001b[0m label\u001b[38;5;241m=\u001b[39m[sim_labels[j]])\n", + "File \u001b[1;32m~\\Documents\\HydraDx\\HydraDX-simulations\\venv\\lib\\site-packages\\matplotlib\\pyplot.py:1268\u001b[0m, in \u001b[0;36msubplot\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 1265\u001b[0m fig \u001b[38;5;241m=\u001b[39m gcf()\n\u001b[0;32m 1267\u001b[0m \u001b[38;5;66;03m# First, search for an existing subplot with a matching spec.\u001b[39;00m\n\u001b[1;32m-> 1268\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[43mSubplotSpec\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_from_subplot_args\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfig\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1270\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m ax \u001b[38;5;129;01min\u001b[39;00m fig\u001b[38;5;241m.\u001b[39maxes:\n\u001b[0;32m 1271\u001b[0m \u001b[38;5;66;03m# if we found an axes at the position sort out if we can re-use it\u001b[39;00m\n\u001b[0;32m 1272\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(ax, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mget_subplotspec\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m ax\u001b[38;5;241m.\u001b[39mget_subplotspec() \u001b[38;5;241m==\u001b[39m key:\n\u001b[0;32m 1273\u001b[0m \u001b[38;5;66;03m# if the user passed no kwargs, re-use\u001b[39;00m\n", + "File \u001b[1;32m~\\Documents\\HydraDx\\HydraDX-simulations\\venv\\lib\\site-packages\\matplotlib\\gridspec.py:608\u001b[0m, in \u001b[0;36mSubplotSpec._from_subplot_args\u001b[1;34m(figure, args)\u001b[0m\n\u001b[0;32m 606\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 607\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(num, Integral) \u001b[38;5;129;01mor\u001b[39;00m num \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m1\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m num \u001b[38;5;241m>\u001b[39m rows\u001b[38;5;241m*\u001b[39mcols:\n\u001b[1;32m--> 608\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m 609\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnum must be 1 <= num <= \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrows\u001b[38;5;241m*\u001b[39mcols\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m, not \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnum\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 610\u001b[0m i \u001b[38;5;241m=\u001b[39m j \u001b[38;5;241m=\u001b[39m num\n\u001b[0;32m 611\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m gs[i\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m:j]\n", + "\u001b[1;31mValueError\u001b[0m: num must be 1 <= num <= 3, not 4" + ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "
" + "
" ] }, "metadata": { @@ -1238,41 +1365,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0]\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "var_list = ['r', 'q']\n", "trader_df = agent_df[agent_df['agent_label'] == 'Trader']\n", @@ -1281,7 +1376,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1292,1572 +1387,53 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'Trader': {'q': 1000000, 's': [0, 0], 'r': [1000000, 1000000], 'p': [0, 0]}, 'LP1': {'q': 0.0, 's': [0, 0], 'r': [500000.0, 0], 'p': [2.0, 0]}, 'LP2': {'q': 0.0, 's': [0, 0], 'r': [0, 1500000.0], 'p': [0, 0.6666666666666666]}}\n" - ] - }, - { - "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", - "
timestepagent_labelqQ-0B-0s-0S-0r-0R-0val_poolval_holdILpool_valp-0
149954999LP10.001001606.9705000005000000.00499197.801003215.231003216.52-0.002001606.972.00
149964999LP20.001001606.97005000000.00499197.801000000.001000000.000.002001606.970.00
149975000Trader996393.031003606.97005000001001797.00498203.003681133.583681120.570.002003606.970.00
149985000LP10.001003606.9705000005000000.00498203.001007220.421007226.95-0.002003606.972.00
149995000LP20.001003606.97005000000.00498203.001000000.001000000.000.002003606.970.00
\n", - "
" - ], - "text/plain": [ - " timestep agent_label q Q-0 B-0 s-0 S-0 \\\n", - "14995 4999 LP1 0.00 1001606.97 0 500000 500000 \n", - "14996 4999 LP2 0.00 1001606.97 0 0 500000 \n", - "14997 5000 Trader 996393.03 1003606.97 0 0 500000 \n", - "14998 5000 LP1 0.00 1003606.97 0 500000 500000 \n", - "14999 5000 LP2 0.00 1003606.97 0 0 500000 \n", - "\n", - " r-0 R-0 val_pool val_hold IL pool_val p-0 \n", - "14995 0.00 499197.80 1003215.23 1003216.52 -0.00 2001606.97 2.00 \n", - "14996 0.00 499197.80 1000000.00 1000000.00 0.00 2001606.97 0.00 \n", - "14997 1001797.00 498203.00 3681133.58 3681120.57 0.00 2003606.97 0.00 \n", - "14998 0.00 498203.00 1007220.42 1007226.95 -0.00 2003606.97 2.00 \n", - "14999 0.00 498203.00 1000000.00 1000000.00 0.00 2003606.97 0.00 " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# add IL column to agent DF, where val_hold is calculated using initial holdings from agent_d\n", - "#val hold: withdraw liquidity at t=0, calculate value with prices at t\n", - "#val pool: withdraw liquidity at t, calculate value with prices at t\n", - "\n", - "\n", - "merged_df['P-0'] = merged_df.apply(lambda x: x['Q-0']/x['R-0'], axis=1)\n", - "merged_df['P-1'] = merged_df.apply(lambda x: x['Q-1']/x['R-1'], axis=1)\n", - "merged_df['val_pool'] = merged_df.apply(lambda x: processing.val_pool(x), axis=1)\n", - "withdraw_agent_d = processing.get_withdraw_agent_d(initial_values, agent_d)\n", - "print(withdraw_agent_d)\n", - "merged_df['val_hold'] = merged_df.apply(lambda x: processing.val_hold(x, withdraw_agent_d), axis=1)\n", - "merged_df['IL'] = merged_df.apply(lambda x: x['val_pool']/x['val_hold'] - 1, axis=1)\n", - "merged_df['pool_val'] = merged_df.apply(lambda x: processing.pool_val(x), axis=1)\n", - "#merged_df['pool_loss'] = merged_df.apply(lambda x: x['pool_val']/2000000 - 1, axis=1)\n", - "\n", - "merged_df[['timestep', 'agent_label', 'q','Q-0','B-0','s-0','S-0','r-0','R-0','val_pool', 'val_hold','IL','pool_val', 'p-0']].tail()\n", - "\n", - "\n", - "# compute val hold column\n", - "\n", - "\n", - "# compute val pool column\n", - "\n", - "# compute IL\n", - "\n", - "# plot Impermanent loss\n", - "# " - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timestepagent_labelqQ-0B-0s-0S-0r-0R-0val_poolval_holdILpool_val
21LP20.00998003.99005000000.00501000.001000000.001000000.000.001998003.99
52LP20.001000003.99005000000.00499998.001000000.001000000.000.002000003.99
83LP20.001002003.99005000000.00499000.011000000.001000000.000.002002003.99
114LP20.001004003.99005000000.00498005.991000000.001000000.000.002004003.99
145LP20.001001991.98005000000.00499005.991000000.001000000.000.002001991.98
176LP20.00999988.02005000000.00500005.991000000.001000000.000.001999988.02
207LP20.00997992.06005000000.00501005.991000000.001000000.000.001997992.06
238LP20.00999992.06005000000.00500003.971000000.001000000.000.001999992.06
269LP20.001001992.06005000000.00499005.951000000.001000000.000.002001992.06
2910LP20.001003992.06005000000.00498011.901000000.001000000.000.002003992.06
3211LP20.001005992.06005000000.00497021.811000000.001000000.000.002005992.06
3512LP20.001003972.09005000000.00498021.811000000.001000000.000.002003972.09
3813LP20.001005972.09005000000.00497031.681000000.001000000.000.002005972.09
4114LP20.001007972.09005000000.00496045.481000000.001000000.000.002007972.09
4415LP20.001005944.16005000000.00497045.481000000.001000000.000.002005944.16
4716LP20.001003924.38005000000.00498045.481000000.001000000.000.002003924.38
5017LP20.001005924.38005000000.00497055.261000000.001000000.000.002005924.38
5318LP20.001003904.67005000000.00498055.261000000.001000000.000.002003904.67
5619LP20.001001893.06005000000.00499055.261000000.001000000.000.002001893.06
5920LP20.001003893.06005000000.00498061.021000000.001000000.000.002003893.06
\n", - "
" - ], - "text/plain": [ - " timestep agent_label q Q-0 B-0 s-0 S-0 r-0 R-0 \\\n", - "2 1 LP2 0.00 998003.99 0 0 500000 0.00 501000.00 \n", - "5 2 LP2 0.00 1000003.99 0 0 500000 0.00 499998.00 \n", - "8 3 LP2 0.00 1002003.99 0 0 500000 0.00 499000.01 \n", - "11 4 LP2 0.00 1004003.99 0 0 500000 0.00 498005.99 \n", - "14 5 LP2 0.00 1001991.98 0 0 500000 0.00 499005.99 \n", - "17 6 LP2 0.00 999988.02 0 0 500000 0.00 500005.99 \n", - "20 7 LP2 0.00 997992.06 0 0 500000 0.00 501005.99 \n", - "23 8 LP2 0.00 999992.06 0 0 500000 0.00 500003.97 \n", - "26 9 LP2 0.00 1001992.06 0 0 500000 0.00 499005.95 \n", - "29 10 LP2 0.00 1003992.06 0 0 500000 0.00 498011.90 \n", - "32 11 LP2 0.00 1005992.06 0 0 500000 0.00 497021.81 \n", - "35 12 LP2 0.00 1003972.09 0 0 500000 0.00 498021.81 \n", - "38 13 LP2 0.00 1005972.09 0 0 500000 0.00 497031.68 \n", - "41 14 LP2 0.00 1007972.09 0 0 500000 0.00 496045.48 \n", - "44 15 LP2 0.00 1005944.16 0 0 500000 0.00 497045.48 \n", - "47 16 LP2 0.00 1003924.38 0 0 500000 0.00 498045.48 \n", - "50 17 LP2 0.00 1005924.38 0 0 500000 0.00 497055.26 \n", - "53 18 LP2 0.00 1003904.67 0 0 500000 0.00 498055.26 \n", - "56 19 LP2 0.00 1001893.06 0 0 500000 0.00 499055.26 \n", - "59 20 LP2 0.00 1003893.06 0 0 500000 0.00 498061.02 \n", - "\n", - " val_pool val_hold IL pool_val \n", - "2 1000000.00 1000000.00 0.00 1998003.99 \n", - "5 1000000.00 1000000.00 0.00 2000003.99 \n", - "8 1000000.00 1000000.00 0.00 2002003.99 \n", - "11 1000000.00 1000000.00 0.00 2004003.99 \n", - "14 1000000.00 1000000.00 0.00 2001991.98 \n", - "17 1000000.00 1000000.00 0.00 1999988.02 \n", - "20 1000000.00 1000000.00 0.00 1997992.06 \n", - "23 1000000.00 1000000.00 0.00 1999992.06 \n", - "26 1000000.00 1000000.00 0.00 2001992.06 \n", - "29 1000000.00 1000000.00 0.00 2003992.06 \n", - "32 1000000.00 1000000.00 0.00 2005992.06 \n", - "35 1000000.00 1000000.00 0.00 2003972.09 \n", - "38 1000000.00 1000000.00 0.00 2005972.09 \n", - "41 1000000.00 1000000.00 0.00 2007972.09 \n", - "44 1000000.00 1000000.00 0.00 2005944.16 \n", - "47 1000000.00 1000000.00 0.00 2003924.38 \n", - "50 1000000.00 1000000.00 0.00 2005924.38 \n", - "53 1000000.00 1000000.00 0.00 2003904.67 \n", - "56 1000000.00 1000000.00 0.00 2001893.06 \n", - "59 1000000.00 1000000.00 0.00 2003893.06 " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "merged_df[merged_df['agent_label'] == 'LP2'][['timestep', 'agent_label', 'q','Q-0','B-0','s-0','S-0','r-0','R-0','val_pool', 'val_hold','IL','pool_val']].head(20)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timestepagent_labelqQ-0B-0s-0S-0r-0R-0val_poolval_holdILpool_val
11LP10.00998003.9905000005000000.00501000.00996009.98996011.97-0.001998003.99
42LP10.001000003.9905000005000000.00499998.001000007.981000007.98-0.002000003.99
73LP10.001002003.9905000005000000.00499000.011004009.991004012.00-0.002002003.99
104LP10.001004003.9905000005000000.00498005.991008015.971008024.02-0.002004003.99
135LP10.001001991.9805000005000000.00499005.991003985.951003987.94-0.002001991.98
166LP10.00999988.0205000005000000.00500005.99999976.05999976.05-0.001999988.02
197LP10.00997992.0605000005000000.00501005.99995986.15995988.16-0.001997992.06
228LP10.00999992.0605000005000000.00500003.97999984.13999984.13-0.001999992.06
259LP10.001001992.0605000005000000.00499005.951003986.111003988.10-0.002001992.06
2810LP10.001003992.0605000005000000.00498011.901007992.061008000.06-0.002003992.06
3111LP10.001005992.0605000005000000.00497021.811012001.971012020.03-0.002005992.06
3412LP10.001003972.0905000005000000.00498021.811007952.031007959.95-0.002003972.09
3713LP10.001005972.0905000005000000.00497031.681011961.901011979.84-0.002005972.09
4014LP10.001007972.0905000005000000.00496045.481015975.701016007.73-0.002007972.09
4315LP10.001005944.1605000005000000.00497045.481011905.881011923.65-0.002005944.16
4616LP10.001003924.3805000005000000.00498045.481007856.421007864.15-0.002003924.38
4917LP10.001005924.3805000005000000.00497055.261011866.201011883.85-0.002005924.38
5218LP10.001003904.6705000005000000.00498055.261007816.941007824.59-0.002003904.67
5519LP10.001001893.0605000005000000.00499055.261003787.911003789.71-0.002001893.06
5820LP10.001003893.0605000005000000.00498061.021007793.671007801.28-0.002003893.06
6121LP10.001001881.5005000005000000.00499061.021003764.761003766.54-0.002001881.50
6422LP10.00999877.9805000005000000.00500061.02999755.97999755.98-0.001999877.98
6723LP10.001001877.9805000005000000.00499062.771003757.721003759.49-0.002001877.98
7024LP10.001003877.9805000005000000.00498068.501007763.451007771.00-0.002003877.98
7325LP10.001001866.4805000005000000.00499068.501003734.691003736.44-0.002001866.48
7626LP10.001003866.4805000005000000.00498074.211007740.401007747.90-0.002003866.48
7927LP10.001005866.4805000005000000.00497083.871011750.061011767.37-0.002005866.48
8228LP10.001007866.4805000005000000.00496097.461015763.651015794.83-0.002007866.48
8529LP10.001005838.9705000005000000.00497097.461011694.901011712.04-0.002005838.97
8830LP10.001003819.6105000005000000.00498097.461007646.491007653.81-0.002003819.61
9131LP10.001001808.3405000005000000.00499097.461003618.321003619.96-0.002001808.34
9432LP10.00999805.1205000005000000.00500097.46999610.25999610.27-0.001999805.12
9733LP10.00997809.8905000005000000.00501097.46995622.17995624.57-0.001997809.89
10034LP10.00995822.6005000005000000.00502097.46991653.97991662.65-0.001995822.60
10335LP10.00997822.6005000005000000.00501091.07995647.58995649.95-0.001997822.60
10636LP10.00995835.2705000005000000.00502091.07991679.25991687.88-0.001995835.27
10937LP10.00993855.8305000005000000.00503091.07987730.66987749.42-0.001993855.83
11238LP10.00991884.2505000005000000.00504091.07983801.71983834.38-0.001991884.25
11539LP10.00989920.4805000005000000.00505091.07979892.28979942.56-0.001989920.48
11840LP10.00987964.4705000005000000.00506091.07976002.24976073.79-0.001987964.47
12141LP10.00986016.1705000005000000.00507091.07972131.49972227.89-0.001986016.17
12442LP10.00988016.1705000005000000.00506064.59976105.01976175.96-0.001988016.17
12743LP10.00990016.1705000005000000.00505042.26980082.68980132.02-0.001990016.17
13044LP10.00992016.1705000005000000.00504024.04984064.47984096.08-0.001992016.17
13345LP10.00994016.1705000005000000.00503009.93988050.35988068.15-0.001994016.17
13646LP10.00996016.1705000005000000.00501999.88992040.31992048.21-0.001996016.17
13947LP10.00998016.1705000005000000.00500993.89996034.31996036.28-0.001998016.17
14248LP10.001000016.1705000005000000.00499991.911000032.341000032.34-0.002000016.17
14549LP10.00998020.1005000005000000.00500991.91996042.16996044.12-0.001998020.10
14850LP10.001000020.1005000005000000.00499989.951000040.201000040.20-0.002000020.10
\n", - "
" - ], - "text/plain": [ - " timestep agent_label q Q-0 B-0 s-0 S-0 r-0 R-0 \\\n", - "1 1 LP1 0.00 998003.99 0 500000 500000 0.00 501000.00 \n", - "4 2 LP1 0.00 1000003.99 0 500000 500000 0.00 499998.00 \n", - "7 3 LP1 0.00 1002003.99 0 500000 500000 0.00 499000.01 \n", - "10 4 LP1 0.00 1004003.99 0 500000 500000 0.00 498005.99 \n", - "13 5 LP1 0.00 1001991.98 0 500000 500000 0.00 499005.99 \n", - "16 6 LP1 0.00 999988.02 0 500000 500000 0.00 500005.99 \n", - "19 7 LP1 0.00 997992.06 0 500000 500000 0.00 501005.99 \n", - "22 8 LP1 0.00 999992.06 0 500000 500000 0.00 500003.97 \n", - "25 9 LP1 0.00 1001992.06 0 500000 500000 0.00 499005.95 \n", - "28 10 LP1 0.00 1003992.06 0 500000 500000 0.00 498011.90 \n", - "31 11 LP1 0.00 1005992.06 0 500000 500000 0.00 497021.81 \n", - "34 12 LP1 0.00 1003972.09 0 500000 500000 0.00 498021.81 \n", - "37 13 LP1 0.00 1005972.09 0 500000 500000 0.00 497031.68 \n", - "40 14 LP1 0.00 1007972.09 0 500000 500000 0.00 496045.48 \n", - "43 15 LP1 0.00 1005944.16 0 500000 500000 0.00 497045.48 \n", - "46 16 LP1 0.00 1003924.38 0 500000 500000 0.00 498045.48 \n", - "49 17 LP1 0.00 1005924.38 0 500000 500000 0.00 497055.26 \n", - "52 18 LP1 0.00 1003904.67 0 500000 500000 0.00 498055.26 \n", - "55 19 LP1 0.00 1001893.06 0 500000 500000 0.00 499055.26 \n", - "58 20 LP1 0.00 1003893.06 0 500000 500000 0.00 498061.02 \n", - "61 21 LP1 0.00 1001881.50 0 500000 500000 0.00 499061.02 \n", - "64 22 LP1 0.00 999877.98 0 500000 500000 0.00 500061.02 \n", - "67 23 LP1 0.00 1001877.98 0 500000 500000 0.00 499062.77 \n", - "70 24 LP1 0.00 1003877.98 0 500000 500000 0.00 498068.50 \n", - "73 25 LP1 0.00 1001866.48 0 500000 500000 0.00 499068.50 \n", - "76 26 LP1 0.00 1003866.48 0 500000 500000 0.00 498074.21 \n", - "79 27 LP1 0.00 1005866.48 0 500000 500000 0.00 497083.87 \n", - "82 28 LP1 0.00 1007866.48 0 500000 500000 0.00 496097.46 \n", - "85 29 LP1 0.00 1005838.97 0 500000 500000 0.00 497097.46 \n", - "88 30 LP1 0.00 1003819.61 0 500000 500000 0.00 498097.46 \n", - "91 31 LP1 0.00 1001808.34 0 500000 500000 0.00 499097.46 \n", - "94 32 LP1 0.00 999805.12 0 500000 500000 0.00 500097.46 \n", - "97 33 LP1 0.00 997809.89 0 500000 500000 0.00 501097.46 \n", - "100 34 LP1 0.00 995822.60 0 500000 500000 0.00 502097.46 \n", - "103 35 LP1 0.00 997822.60 0 500000 500000 0.00 501091.07 \n", - "106 36 LP1 0.00 995835.27 0 500000 500000 0.00 502091.07 \n", - "109 37 LP1 0.00 993855.83 0 500000 500000 0.00 503091.07 \n", - "112 38 LP1 0.00 991884.25 0 500000 500000 0.00 504091.07 \n", - "115 39 LP1 0.00 989920.48 0 500000 500000 0.00 505091.07 \n", - "118 40 LP1 0.00 987964.47 0 500000 500000 0.00 506091.07 \n", - "121 41 LP1 0.00 986016.17 0 500000 500000 0.00 507091.07 \n", - "124 42 LP1 0.00 988016.17 0 500000 500000 0.00 506064.59 \n", - "127 43 LP1 0.00 990016.17 0 500000 500000 0.00 505042.26 \n", - "130 44 LP1 0.00 992016.17 0 500000 500000 0.00 504024.04 \n", - "133 45 LP1 0.00 994016.17 0 500000 500000 0.00 503009.93 \n", - "136 46 LP1 0.00 996016.17 0 500000 500000 0.00 501999.88 \n", - "139 47 LP1 0.00 998016.17 0 500000 500000 0.00 500993.89 \n", - "142 48 LP1 0.00 1000016.17 0 500000 500000 0.00 499991.91 \n", - "145 49 LP1 0.00 998020.10 0 500000 500000 0.00 500991.91 \n", - "148 50 LP1 0.00 1000020.10 0 500000 500000 0.00 499989.95 \n", - "\n", - " val_pool val_hold IL pool_val \n", - "1 996009.98 996011.97 -0.00 1998003.99 \n", - "4 1000007.98 1000007.98 -0.00 2000003.99 \n", - "7 1004009.99 1004012.00 -0.00 2002003.99 \n", - "10 1008015.97 1008024.02 -0.00 2004003.99 \n", - "13 1003985.95 1003987.94 -0.00 2001991.98 \n", - "16 999976.05 999976.05 -0.00 1999988.02 \n", - "19 995986.15 995988.16 -0.00 1997992.06 \n", - "22 999984.13 999984.13 -0.00 1999992.06 \n", - "25 1003986.11 1003988.10 -0.00 2001992.06 \n", - "28 1007992.06 1008000.06 -0.00 2003992.06 \n", - "31 1012001.97 1012020.03 -0.00 2005992.06 \n", - "34 1007952.03 1007959.95 -0.00 2003972.09 \n", - "37 1011961.90 1011979.84 -0.00 2005972.09 \n", - "40 1015975.70 1016007.73 -0.00 2007972.09 \n", - "43 1011905.88 1011923.65 -0.00 2005944.16 \n", - "46 1007856.42 1007864.15 -0.00 2003924.38 \n", - "49 1011866.20 1011883.85 -0.00 2005924.38 \n", - "52 1007816.94 1007824.59 -0.00 2003904.67 \n", - "55 1003787.91 1003789.71 -0.00 2001893.06 \n", - "58 1007793.67 1007801.28 -0.00 2003893.06 \n", - "61 1003764.76 1003766.54 -0.00 2001881.50 \n", - "64 999755.97 999755.98 -0.00 1999877.98 \n", - "67 1003757.72 1003759.49 -0.00 2001877.98 \n", - "70 1007763.45 1007771.00 -0.00 2003877.98 \n", - "73 1003734.69 1003736.44 -0.00 2001866.48 \n", - "76 1007740.40 1007747.90 -0.00 2003866.48 \n", - "79 1011750.06 1011767.37 -0.00 2005866.48 \n", - "82 1015763.65 1015794.83 -0.00 2007866.48 \n", - "85 1011694.90 1011712.04 -0.00 2005838.97 \n", - "88 1007646.49 1007653.81 -0.00 2003819.61 \n", - "91 1003618.32 1003619.96 -0.00 2001808.34 \n", - "94 999610.25 999610.27 -0.00 1999805.12 \n", - "97 995622.17 995624.57 -0.00 1997809.89 \n", - "100 991653.97 991662.65 -0.00 1995822.60 \n", - "103 995647.58 995649.95 -0.00 1997822.60 \n", - "106 991679.25 991687.88 -0.00 1995835.27 \n", - "109 987730.66 987749.42 -0.00 1993855.83 \n", - "112 983801.71 983834.38 -0.00 1991884.25 \n", - "115 979892.28 979942.56 -0.00 1989920.48 \n", - "118 976002.24 976073.79 -0.00 1987964.47 \n", - "121 972131.49 972227.89 -0.00 1986016.17 \n", - "124 976105.01 976175.96 -0.00 1988016.17 \n", - "127 980082.68 980132.02 -0.00 1990016.17 \n", - "130 984064.47 984096.08 -0.00 1992016.17 \n", - "133 988050.35 988068.15 -0.00 1994016.17 \n", - "136 992040.31 992048.21 -0.00 1996016.17 \n", - "139 996034.31 996036.28 -0.00 1998016.17 \n", - "142 1000032.34 1000032.34 -0.00 2000016.17 \n", - "145 996042.16 996044.12 -0.00 1998020.10 \n", - "148 1000040.20 1000040.20 -0.00 2000020.10 " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "source": [ + "# add IL column to agent DF, where val_hold is calculated using initial holdings from agent_d\n", + "#val hold: withdraw liquidity at t=0, calculate value with prices at t\n", + "#val pool: withdraw liquidity at t, calculate value with prices at t\n", + "\n", + "\n", + "merged_df['P-0'] = merged_df.apply(lambda x: x['Q-0']/x['R-0'], axis=1)\n", + "merged_df['P-1'] = merged_df.apply(lambda x: x['Q-1']/x['R-1'], axis=1)\n", + "merged_df['val_pool'] = merged_df.apply(lambda x: processing.val_pool(x), axis=1)\n", + "withdraw_agent_d = processing.get_withdraw_agent_d(initial_values, agent_d)\n", + "print(withdraw_agent_d)\n", + "merged_df['val_hold'] = merged_df.apply(lambda x: processing.val_hold(x, withdraw_agent_d), axis=1)\n", + "merged_df['IL'] = merged_df.apply(lambda x: x['val_pool']/x['val_hold'] - 1, axis=1)\n", + "merged_df['pool_val'] = merged_df.apply(lambda x: processing.pool_val(x), axis=1)\n", + "#merged_df['pool_loss'] = merged_df.apply(lambda x: x['pool_val']/2000000 - 1, axis=1)\n", + "\n", + "merged_df[['timestep', 'agent_label', 'q','Q-0','B-0','s-0','S-0','r-0','R-0','val_pool', 'val_hold','IL','pool_val', 'p-0']].tail()\n", + "\n", + "\n", + "# compute val hold column\n", + "\n", + "\n", + "# compute val pool column\n", + "\n", + "# compute IL\n", + "\n", + "# plot Impermanent loss\n", + "# " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "merged_df[merged_df['agent_label'] == 'LP2'][['timestep', 'agent_label', 'q','Q-0','B-0','s-0','S-0','r-0','R-0','val_pool', 'val_hold','IL','pool_val']].head(20)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "LP1_merged_df = merged_df[merged_df['agent_label'] == 'LP1']\n", "LP1_merged_df[['timestep', 'agent_label', 'q','Q-0','B-0','s-0','S-0','r-0','R-0','val_pool', 'val_hold','IL','pool_val']].head(50)" @@ -2873,65 +1449,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0]\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "var_list = ['pool_val', 'val_pool', 'val_hold', 'IL']\n", "LP1_merged_df = merged_df[merged_df['agent_label'] == 'LP1']\n", @@ -2972,32 +1492,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "def val_hold_func(P, R):\n", " return P * R\n", @@ -3029,32 +1526,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "def val_pool_func(P, P_init, R):\n", " k = P/P_init\n", @@ -3088,32 +1562,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "def IL_func(P, P_init, R):\n", " return val_pool_func(P, P_init, R)/val_hold_func(P, R) - 1\n", @@ -3139,114 +1590,9 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "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", - "
val_poolval_holdR-0s-0S-0B-0P-0p-0
149861007278.541007285.18498188.6050000050000002.012.00
149891011287.751011303.72497197.8050000050000002.022.00
149921007241.381007247.95498197.8050000050000002.012.00
149951003215.231003216.52499197.8050000050000002.012.00
149981007220.421007226.95498203.0050000050000002.012.00
\n", - "
" - ], - "text/plain": [ - " val_pool val_hold R-0 s-0 S-0 B-0 P-0 p-0\n", - "14986 1007278.54 1007285.18 498188.60 500000 500000 0 2.01 2.00\n", - "14989 1011287.75 1011303.72 497197.80 500000 500000 0 2.02 2.00\n", - "14992 1007241.38 1007247.95 498197.80 500000 500000 0 2.01 2.00\n", - "14995 1003215.23 1003216.52 499197.80 500000 500000 0 2.01 2.00\n", - "14998 1007220.42 1007226.95 498203.00 500000 500000 0 2.01 2.00" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "LP1_merged_df[['val_pool', 'val_hold', 'R-0', 's-0', 'S-0', 'B-0', 'P-0', 'p-0']].tail()" ] diff --git a/hydradx/TestLRNASwap.ipynb b/hydradx/TestLRNASwap.ipynb index ea9db56d..00397e26 100644 --- a/hydradx/TestLRNASwap.ipynb +++ b/hydradx/TestLRNASwap.ipynb @@ -57,7 +57,6 @@ "########## AGENT CONFIGURATION ##########\n", "# key -> token name, value -> token amount owned by agent\n", "# note that token name of 'omniABC' is used for omnipool LP shares of token 'ABC'\n", - "# omniHDXABC is HDX shares dedicated to pool of token ABC\n", "LP1 = {'omniR1': 500000}\n", "LP2 = {'omniR2': 1500000}\n", "trader = {'LRNA': 1000000, 'R1': 1000000, 'R2': 1000000}\n", @@ -90,9 +89,9 @@ "\n", "# Todo: generalize\n", "initial_values = {\n", - " 'token_list': ['R1','R2'],\n", - " 'R': [500000,1500000],\n", - " 'P': [2,2/3],\n", + " 'token_list': ['HDX', 'USD', 'R1','R2'],\n", + " 'R': [1000000, 1000000, 500000,1500000],\n", + " 'P': [1, 1, 2,2/3],\n", " 'fee_assets': 0.0015,\n", " 'fee_LRNA': 0.0015\n", "}\n", diff --git a/hydradx/TestSwap.ipynb b/hydradx/TestSwap.ipynb index f8e48c6c..8e249e14 100644 --- a/hydradx/TestSwap.ipynb +++ b/hydradx/TestSwap.ipynb @@ -86,7 +86,6 @@ "########## AGENT CONFIGURATION ##########\n", "# key -> token name, value -> token amount owned by agent\n", "# note that token name of 'omniABC' is used for omnipool LP shares of token 'ABC'\n", - "# omniHDXABC is HDX shares dedicated to pool of token ABC\n", "\n", "trader = {'LRNA': 1000000, 'R1': 1000000, 'R2': 1000000}\n", "\n", @@ -115,11 +114,12 @@ "########## CFMM INITIALIZATION ##########\n", "\n", "initial_values = {\n", - " 'token_list': ['R1', 'R2'],\n", - " 'R': [500000, 1500000],\n", + " 'token_list': ['HDX', 'USD', 'R1', 'R2'],\n", + " 'R': [1000000, 1000000, 500000, 1500000],\n", " 'P': [2, 2 / 3],\n", " 'fee_assets': 0.0015,\n", - " 'fee_LRNA': 0.0015\n", + " 'fee_LRNA': 0.0015,\n", + " 'preferred_stablecoin': 'USD'\n", "}\n", "\n", "############################################ SETUP ##########################################################\n", diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 30bf710e..a9bbbaff 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -164,6 +164,14 @@ def swap_assets( delta_q = first_agents[trader_id]['q'] - old_agents[trader_id]['q'] # swap LRNA back in for second asset new_state, new_agents = swap_lrna_fee(first_state, first_agents, trader_id, 0, delta_q, i_buy, fee_assets, fee_lrna) + + delta_Q = old_state['Q'][i_sell] - new_state['Q'][i_sell] + delta_L = min(-delta_Q * fee_lrna, -old_state['L']) + new_state['L'] += delta_L + + delta_QH = -fee_lrna * delta_Q - delta_L + new_state['R'][new_state['R'].index('HDX')] += delta_QH + return new_state, new_agents elif trade_type == 'buy': # back into correct delta_Ri, then execute sell @@ -203,6 +211,10 @@ def add_risk_liquidity( delta_Q = price_i(old_state, i) * delta_R new_state['Q'][i] += delta_Q + # L update: LRNA fees to be burned before they will start to accumulate again + delta_L = delta_R * old_state['Q'][i]/old_state['R'][i] * old_state['L']/sum(old_state['Q']) + new_state['L'] += delta_L + # set price at which liquidity was added new_agents[LP_id]['p'][i] = price_i(new_state, i) @@ -248,4 +260,8 @@ def remove_risk_liquidity( delta_Q = price_i(old_state, i) * delta_R new_state['Q'][i] += delta_Q + # L update: LRNA fees to be burned before they will start to accumulate again + delta_L = delta_R * old_state['Q'][i]/old_state['R'][i] * old_state['L']/sum(old_state['Q']) + new_state['L'] += delta_L + return new_state, new_agents From a96b34c21d10dd5ce3a8f38746e0ca27c05acc96 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Mon, 28 Mar 2022 22:35:39 -0500 Subject: [PATCH 02/39] working on the implementation of L and T --- hydradx/model/amm/omnipool_amm.py | 81 +++++++++++++++++++++++++++--- hydradx/model/init_utils.py | 1 + hydradx/model/plot_utils.py | 11 ++-- hydradx/spec/AddToken.ipynb | 5 +- hydradx/tests/test_omnipool_amm.py | 76 +++++++++++++++++++++++++++- 5 files changed, 160 insertions(+), 14 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index a9bbbaff..168b3c80 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -2,6 +2,37 @@ import string +def state_dict( + token_list: list[str], + R_values: list[float], + P_values: list[float], + omega_values: list[float] = [], + L: float = 0, + fee_assets: float = 0.0, + fee_lrna: float = 0.0, + preferred_stablecoin: str = 'USD' +) -> dict: + assert 'HDX' in token_list, 'HDX not included in token list' + assert len(R_values) == len(token_list) and len(P_values) == len(token_list), 'list lengths do not match' + # get initial value of T (total value locked) + + if not omega_values: + omega_values = [0 for _ in range(len(token_list))] + + state = { + 'token_list': token_list, + 'R': R_values, # Risk asset quantities + 'P': P_values, # prices of risks assets denominated in LRNA + 'Q': [R_values[i] * P_values[i] for i in range(len(token_list))], # LRNA quantities + 'L': L, # LRNA imbalance + 'O': omega_values, # per-asset cap on what fraction of TVL can be stored + 'fee_assets': fee_assets, + 'fee_LRNA': fee_lrna, + 'preferred_stablecoin': preferred_stablecoin + } + return state + + def asset_invariant(state: dict, i: int) -> float: """Invariant for specific asset""" return state['R'][i] * state['Q'][i] @@ -170,7 +201,7 @@ def swap_assets( new_state['L'] += delta_L delta_QH = -fee_lrna * delta_Q - delta_L - new_state['R'][new_state['R'].index('HDX')] += delta_QH + new_state['R'][new_state['token_list'].index('HDX')] += delta_QH return new_state, new_agents elif trade_type == 'buy': @@ -201,13 +232,24 @@ def add_risk_liquidity( # Token amounts update new_state['R'][i] += delta_R - new_agents[LP_id]['r'][i] -= delta_R + if LP_id: + new_agents[LP_id]['r'][i] -= delta_R + # TODO: does it make any sense to refer to agents[x]['r'][i]? maybe, but look into it # Share update - new_state['S'][i] *= new_state['R'][i] / old_state['R'][i] - new_agents[LP_id]['s'][i] += new_state['S'][i] - old_state['S'][i] + if new_state['S']: + new_state['S'][i] *= new_state['R'][i] / old_state['R'][i] + else: + new_state['S'] = 1 + + if LP_id: + # shares go to provisioning agent + new_agents[LP_id]['s'][i] += new_state['S'][i] - old_state['S'][i] + else: + # shares go to protocol + new_state['B'] += new_state['S'][i] - old_state['S'][i] - # LRNA add + # LRNA add (mint) delta_Q = price_i(old_state, i) * delta_R new_state['Q'][i] += delta_Q @@ -215,9 +257,36 @@ def add_risk_liquidity( delta_L = delta_R * old_state['Q'][i]/old_state['R'][i] * old_state['L']/sum(old_state['Q']) new_state['L'] += delta_L + # T update: TVL soft cap + stableIndex = new_state['token_list'].index(new_state['preferred_stablecoin']) + delta_Ti = new_state['Q'][i] * new_state['R'][stableIndex]/new_state['Q'][stableIndex] - new_state['T'][i] + # set price at which liquidity was added - new_agents[LP_id]['p'][i] = price_i(new_state, i) + # TODO: should this be averaged with existing price, if this agent has provided liquidity before? + # e.g. p[i] = (old_p[i] * r[i] + new_p[i] * delta_r) / (r[i] * delta_r) + if LP_id: + new_agents[LP_id]['p'][i] = price_i(new_state, i) + + return new_state, new_agents + +def add_token( + old_state: dict, + old_agents: dict, + quantity: float, + token_name: str, + price_in_lrna: float, + LP_id: str = '' +) -> tuple: + new_state = copy.deepcopy(old_state) + new_agents = copy.deepcopy(old_agents) + new_state['token_list'].append(token_name) + new_state['P'].append(price_in_lrna) + new_state['R'].append(0) + new_state['Q'].append(0) + new_state['T'].append(0) + new_state['B'].append(0) + new_state, new_agents = add_risk_liquidity(new_state, new_agents, LP_id, quantity, len(new_state['token_list'])) return new_state, new_agents diff --git a/hydradx/model/init_utils.py b/hydradx/model/init_utils.py index c8204a28..adffc14a 100644 --- a/hydradx/model/init_utils.py +++ b/hydradx/model/init_utils.py @@ -8,6 +8,7 @@ def complete_initial_values(values: dict, agent_d: dict = None) -> dict: state = amm.initialize_state(values, values['token_list'], agent_d) state['token_list'] = values['token_list'] + state['L'] = values['L'] if 'L' in values else 0 state['fee_assets'] = values['fee_assets'] state['fee_LRNA'] = values['fee_LRNA'] if 'burn_rate' in values: diff --git a/hydradx/model/plot_utils.py b/hydradx/model/plot_utils.py index 7b1a5a75..a555343f 100644 --- a/hydradx/model/plot_utils.py +++ b/hydradx/model/plot_utils.py @@ -5,10 +5,10 @@ def plot_vars(df, var_list: list, sim_labels: list = ['0', '1']) -> None: simulations = df.simulation.unique() print(simulations) for var in var_list: - plt.figure(figsize=(15, 5)) + fig = plt.figure(figsize=(15, 5)) if var in df.columns: - init = 131 - ax = plt.subplot(init, title=var) + bounds = (1, 3, 1) + ax = plt.subplot(*bounds, title=var) for i in simulations: df[[var, 'timestep']][df['simulation'] == i].astype(float).plot(ax=ax, y=[var], x='timestep', label=[sim_labels[i]]) @@ -17,9 +17,10 @@ def plot_vars(df, var_list: list, sim_labels: list = ['0', '1']) -> None: while var + '-' + str(max_i + 1) in df.columns: max_i += 1 for i in range(max_i + 1): - init = 131 + i + # rows, columns, index + bounds = (1, max_i+1, i+1) var_i = var + '-' + str(i) - ax = plt.subplot(init, title=var_i) + ax = plt.subplot(*bounds, title=var_i) for j in simulations: df[[var_i, 'timestep']][df['simulation'] == j].astype(float).plot(ax=ax, y=[var_i], x='timestep', label=[sim_labels[j]]) diff --git a/hydradx/spec/AddToken.ipynb b/hydradx/spec/AddToken.ipynb index 3ca3205f..d7bf5be2 100644 --- a/hydradx/spec/AddToken.ipynb +++ b/hydradx/spec/AddToken.ipynb @@ -55,6 +55,7 @@ "- Append $R_{n+1}$ to $B$\n", "- Append $p_{n+1}^Q R_{n+1}$ to $Q$\n", "- Add $\\Delta L = p_{n+1}^Q \\frac{L}{Q} R_{n+1}$ to $L$\n", + "- Let 𝑈 be the asset index of the selected stablecoin in Omnipool.\n", "- Add $\\Delta T = p_{n+1}^Q \\frac{R_U}{Q_U} R_{n+1}$ to $T$" ] }, @@ -94,7 +95,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -108,7 +109,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.9.2" } }, "nbformat": 4, diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index dcb0ee48..1a936869 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -1,5 +1,4 @@ import copy -import math import pytest from hypothesis import given, strategies as st, assume @@ -256,6 +255,8 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): old_state['A'] = [0] * n old_state['B'] = [100] * n old_state['D'] = 0 + old_state['L'] = 0 + old_state['token_list'] = ['HDX', 'USD'] + ['?'] * (n-2) trader_id = 'trader' LP_id = 'lp' @@ -325,6 +326,8 @@ def test_add_asset(old_state, price): # Also should make sure things stay reasonably bounded # Requires state with H, T, Q, burn_rate rate_strat = st.floats(min_value=1e-4, max_value=.99, allow_nan=False, allow_infinity=False) + + @given(QR_strat, rate_strat) def test_adjust_supply(old_state, r): old_state['H'] = 20000000000 @@ -346,6 +349,77 @@ def test_adjust_supply(old_state, r): assert piq_old/pjq_old == pytest.approx(piq_new/pjq_new) +def test_swap_with_graphs(): + import pandas + + from hydradx.model import init_utils + from hydradx.model import processing + # Experiments + from hydradx.model import run + from hydradx.model.plot_utils import plot_vars + + ########## AGENT CONFIGURATION ########## + # key -> token name, value -> token amount owned by agent + # note that token name of 'omniABC' is used for omnipool LP shares of token 'ABC' + + trader = {'LRNA': 1000000, 'R1': 1000000, 'R2': 1000000} + + # key -> agent_id, value -> agent dict + agent_d = {'Trader': trader} + + ########## ACTION CONFIGURATION ########## + + action_dict = { + 'buy_r1_with_r2': {'token_buy': 'R1', 'token_sell': 'R2', 'amount_buy': 1200, 'action_id': 'Trade', + 'agent_id': 'Trader'}, + 'sell_r1_for_r2': {'token_sell': 'R1', 'token_buy': 'R2', 'amount_sell': 1000, 'action_id': 'Trade', + 'agent_id': 'Trader'} + } + + # list of (action, number of repetitions of action), timesteps = sum of repititions of all actions + trade_count = 1000 + action_ls = [('trade', trade_count)] + + # maps action_id to action dict, with some probability to enable randomness + prob_dict = { + 'trade': {'buy_r1_with_r2': 0.5, + 'sell_r1_for_r2': 0.5} + } + + ########## CFMM INITIALIZATION ########## + + initial_values = oamm.state_dict( + token_list=['HDX', 'USD', 'R1', 'R2'], + R_values=[1000000, 1000000, 500000, 1500000], + P_values=[1, 1, 2, 2 / 3], + fee_assets=0.0015, + fee_lrna=0.0015 + ) + ############################################ SETUP ########################################################## + + config_params = { + 'cfmm_type': "", + 'initial_values': initial_values, + 'agent_d': agent_d, + 'action_ls': action_ls, + 'prob_dict': prob_dict, + 'action_dict': action_dict, + } + + config_dict, state = init_utils.get_configuration(config_params) + + pandas.options.mode.chained_assignment = None # default='warn' + pandas.options.display.float_format = '{:.2f}'.format + + run.config(config_dict, state) + events = run.run() + + rdf, agent_df = processing.postprocessing(events) + + var_list = ['R', 'Q', 'A', 'D', 'L'] + plot_vars(rdf, var_list) + + if __name__ == '__main__': test_swap_lrna_delta_TKN_respects_invariant() test_swap_lrna() From 8d5a9ba3b938d53b90f6550508ef34006e71fc4a Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 29 Mar 2022 17:23:42 -0500 Subject: [PATCH 03/39] made charts a little wider --- hydradx/model/plot_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydradx/model/plot_utils.py b/hydradx/model/plot_utils.py index a555343f..2c45fc37 100644 --- a/hydradx/model/plot_utils.py +++ b/hydradx/model/plot_utils.py @@ -5,7 +5,7 @@ def plot_vars(df, var_list: list, sim_labels: list = ['0', '1']) -> None: simulations = df.simulation.unique() print(simulations) for var in var_list: - fig = plt.figure(figsize=(15, 5)) + fig = plt.figure(figsize=(20, 5)) if var in df.columns: bounds = (1, 3, 1) ax = plt.subplot(*bounds, title=var) From 6152ce2a2661ea80dc34b40ca5b6529cc055c8ad Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 29 Mar 2022 17:24:30 -0500 Subject: [PATCH 04/39] implemented the 'direct swap' method --- hydradx/model/amm/omnipool_amm.py | 101 ++++++++++++++++++++++++----- hydradx/tests/test_omnipool_amm.py | 68 ++++++++++++------- 2 files changed, 132 insertions(+), 37 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 168b3c80..746747c7 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -4,27 +4,47 @@ def state_dict( token_list: list[str], - R_values: list[float], - P_values: list[float], - omega_values: list[float] = [], + r_values: list[float], + q_values: list[float] = None, + p_values: list[float] = None, + b_values: list[float] = None, + s_values: list[float] = None, + omega_values: list[float] = None, L: float = 0, + D: float = 0, fee_assets: float = 0.0, fee_lrna: float = 0.0, preferred_stablecoin: str = 'USD' ) -> dict: assert 'HDX' in token_list, 'HDX not included in token list' - assert len(R_values) == len(token_list) and len(P_values) == len(token_list), 'list lengths do not match' + assert len(r_values) == len(token_list) and len(p_values) == len(token_list), 'list lengths do not match' # get initial value of T (total value locked) if not omega_values: omega_values = [0 for _ in range(len(token_list))] + if not q_values: + q_values = [r_values[i] * p_values[i] for i in range(len(token_list))] + elif not p_values: + p_values = [r_values[i] / q_values[i] for i in range(len(token_list))] + else: + assert False, 'Either LRNA quantities per pool or assets prices in LRNA must be specified.' + + if not b_values: + b_values = [0] * len(token_list) + + if not s_values: + b_values = [0] * len(token_list) + state = { 'token_list': token_list, - 'R': R_values, # Risk asset quantities - 'P': P_values, # prices of risks assets denominated in LRNA - 'Q': [R_values[i] * P_values[i] for i in range(len(token_list))], # LRNA quantities + 'R': r_values, # Risk asset quantities + 'P': p_values, # prices of risks assets denominated in LRNA + 'Q': q_values, # LRNA quantities in each pool + 'B': b_values, # quantity of shares in each asset owned by the protocol + 'S': s_values, # quantity of LP shares in each pool 'L': L, # LRNA imbalance + 'D': D, # quantity of LRNA owned by the protocol 'O': omega_values, # per-asset cap on what fraction of TVL can be stored 'fee_assets': fee_assets, 'fee_LRNA': fee_lrna, @@ -176,6 +196,41 @@ def swap_lrna_fee( new_state['Q'][i] = p * new_state['R'][i] return new_state, new_agents +def swap_assets_direct( + old_state: dict, + old_agents: dict, + trader_id: string, + delta_token: float, + i_buy: int, + i_sell: int, + fee_assets: float = 0, + fee_lrna: float = 0 +) -> tuple: + i = i_sell + j = i_buy + delta_Ri = delta_token + assert delta_Ri > 0, 'sell amount must be greater than zero' + + delta_Qi = old_state['Q'][i] * -delta_Ri / (old_state['R'][i] + delta_Ri) + delta_Qj = -delta_Qi * (1 - fee_lrna) + delta_Rj = old_state['R'][j] * -delta_Qj / (old_state['Q'][j] + delta_Qj) * (1 - fee_assets) + delta_L = min(-delta_Qi * fee_lrna, -old_state['L']) + delta_QH = -fee_lrna * delta_Qi - delta_L + + new_state = copy.deepcopy(old_state) + new_state['Q'][i] += delta_Qi + new_state['Q'][j] += delta_Qj + new_state['R'][i] += delta_Ri + new_state['R'][j] += delta_Rj + new_state['Q'][new_state['token_list'].index('HDX')] += delta_QH + new_state['L'] += delta_L + + new_agents = copy.deepcopy(old_agents) + new_agents[trader_id]['r'][i] -= delta_Ri + new_agents[trader_id]['r'][j] -= delta_Rj + + return new_state, new_agents + def swap_assets( old_state: dict, @@ -196,14 +251,29 @@ def swap_assets( # swap LRNA back in for second asset new_state, new_agents = swap_lrna_fee(first_state, first_agents, trader_id, 0, delta_q, i_buy, fee_assets, fee_lrna) - delta_Q = old_state['Q'][i_sell] - new_state['Q'][i_sell] - delta_L = min(-delta_Q * fee_lrna, -old_state['L']) + delta_Qi = new_state['Q'][i_sell] - old_state['Q'][i_sell] + delta_Qj = new_state['Q'][i_buy] - old_state['Q'][i_buy] + delta_L = min(-delta_Qi * fee_lrna, -old_state['L']) new_state['L'] += delta_L - delta_QH = -fee_lrna * delta_Q - delta_L + delta_QH = -fee_lrna * delta_Qi - delta_L new_state['R'][new_state['token_list'].index('HDX')] += delta_QH - return new_state, new_agents + alternative_state, alternative_agents = swap_assets_direct( + old_state=old_state, + old_agents=old_agents, + trader_id=trader_id, + delta_token=delta_token, + i_buy=i_buy, + i_sell=i_sell, + fee_assets=fee_assets, + fee_lrna=fee_lrna + ) + + if alternative_state['Q'][i_sell] != new_state['Q'][i_sell]: + er = 1 + + return alternative_state, alternative_agents elif trade_type == 'buy': # back into correct delta_Ri, then execute sell delta_Qj = -old_state['Q'][i_buy] * delta_token / (old_state['R'][i_buy]*(1 - fee_assets) + delta_token) @@ -258,12 +328,13 @@ def add_risk_liquidity( new_state['L'] += delta_L # T update: TVL soft cap - stableIndex = new_state['token_list'].index(new_state['preferred_stablecoin']) - delta_Ti = new_state['Q'][i] * new_state['R'][stableIndex]/new_state['Q'][stableIndex] - new_state['T'][i] + stable_index = new_state['token_list'].index(new_state['preferred_stablecoin']) + delta_t = new_state['Q'][i] * new_state['R'][stable_index]/new_state['Q'][stable_index] - new_state['T'][i] + new_state['T'] += delta_t # set price at which liquidity was added # TODO: should this be averaged with existing price, if this agent has provided liquidity before? - # e.g. p[i] = (old_p[i] * r[i] + new_p[i] * delta_r) / (r[i] * delta_r) + # e.g. p[i] = (old_p[i] * r[i] + new_p[i] * delta_r) / (r[i] + delta_r) if LP_id: new_agents[LP_id]['p'][i] = price_i(new_state, i) @@ -286,7 +357,7 @@ def add_token( new_state['Q'].append(0) new_state['T'].append(0) new_state['B'].append(0) - new_state, new_agents = add_risk_liquidity(new_state, new_agents, LP_id, quantity, len(new_state['token_list'])) + new_state, new_agents = add_risk_liquidity(new_state, new_agents, LP_id, quantity, len(new_state['token_list'])-1) return new_state, new_agents diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index 1a936869..130deab8 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -1,4 +1,5 @@ import copy +import random import pytest from hypothesis import given, strategies as st, assume @@ -35,7 +36,7 @@ def get_state_from_strat(x, key_list): return d -QR_strat = st.lists(QiRi_strat, min_size=2, max_size=5).map(lambda x: get_state_from_strat(x, ['Q', 'R'])) +QR_strat = st.lists(QiRi_strat, min_size=3, max_size=5).map(lambda x: get_state_from_strat(x, ['Q', 'R'])) # Delta_TKN variables delta_tkn_strat = st.floats(allow_nan=False, allow_infinity=False) @@ -251,12 +252,17 @@ def test_swap_lrna_fee(old_state, fee): def test_swap_assets(old_state, fee_lrna, fee_assets): n = len(old_state['R']) - old_state['S'] = [1000] * n - old_state['A'] = [0] * n - old_state['B'] = [100] * n - old_state['D'] = 0 - old_state['L'] = 0 - old_state['token_list'] = ['HDX', 'USD'] + ['?'] * (n-2) + old_state = oamm.state_dict( + r_values=old_state['R'], + p_values=[1]*n, + s_values=[1000] * n, + b_values=[100] * n, + token_list=['HDX', 'USD'] + ['?'] * (n-2), + preferred_stablecoin='USD', + fee_assets=fee_assets, + fee_lrna=fee_lrna + ) + trader_id = 'trader' LP_id = 'lp' @@ -273,24 +279,42 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): } } delta_R = 1000 - i_buy = 0 - i_sell = 1 - + sellable_tokens = len(old_state['token_list']) - 1 + i_buy = int(random.random() * sellable_tokens) + 1 + i_sell = (int(random.random() * (sellable_tokens - 1)) + i_buy) % sellable_tokens + 1 # Test with trader selling asset i, no LRNA fee... price should match feeless - new_state, new_agents = oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, fee_assets, fee_lrna) - asset_only_state, asset_only_agents = oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, fee_assets, 0) - feeless_state, feeless_agents = oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, 0, 0) + new_state, new_agents = \ + oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, fee_assets, fee_lrna) + asset_fee_state, asset_only_agents = \ + oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, fee_assets, 0) + feeless_state, feeless_agents = \ + oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, 0, 0) for j in range(len(old_state['R'])): # price tracks feeless price - assert oamm.price_i(feeless_state, j) == pytest.approx(oamm.price_i(asset_only_state, j)) - # assets in pools only go up compared to asset_only_state - assert min(asset_only_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0) - # asset in pool goes up from asset_only_state -> new_state (i.e. introduction of LRNA fee) - assert min(new_state['R'][j] - asset_only_state['R'][j], 0) == pytest.approx(0) + assert oamm.price_i(feeless_state, j) == pytest.approx(oamm.price_i(asset_fee_state, j)), \ + "price doesn't track feeless price" + # assets in pools only go up compared to asset_fee_state + assert min(asset_fee_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0), \ + f"asset in pool {j} is lesser when compared with no-fee case" + # asset in pool goes up from asset_fee_state -> new_state (i.e. introduction of LRNA fee) + assert min(new_state['R'][j] - asset_fee_state['R'][j], 0) == pytest.approx(0), \ + f"asset in pool {j} is lesser when LRNA fee is added vs only asset fee" # invariant does not decrease - assert min(oamm.asset_invariant(new_state, j) / oamm.asset_invariant(old_state, j), 1) == pytest.approx(1) - assert old_state['R'][j] + old_agents[trader_id]['r'][j] == pytest.approx(new_state['R'][j] + new_agents[trader_id]['r'][j]) + assert min(oamm.asset_invariant(new_state, j) / oamm.asset_invariant(old_state, j), 1) == pytest.approx(1), \ + "invariant ratio less than zero" + # total quantity of R_i remains unchanged + assert old_state['R'][j] + old_agents[trader_id]['r'][j] == pytest.approx(new_state['R'][j] + new_agents[trader_id]['r'][j]), \ + "total quantity of R[{j}] changed" + + # test that no LRNA is lost + delta_Qi = new_state['Q'][i_sell] - old_state['Q'][i_sell] + delta_Qj = new_state['Q'][i_buy] - old_state['Q'][i_buy] + delta_Qh = new_state['Q'][0] - old_state['Q'][0] + delta_L = new_state['L'] - old_state['L'] + if i_sell != 0 and i_buy != 0: + if delta_L + delta_Qj + delta_Qi + delta_Qh != pytest.approx(0, abs=1e10): + raise 'Some LRNA was lost along the way.' delta_out_new = new_agents[trader_id]['r'][i_buy] - old_agents[trader_id]['r'][i_buy] @@ -390,8 +414,8 @@ def test_swap_with_graphs(): initial_values = oamm.state_dict( token_list=['HDX', 'USD', 'R1', 'R2'], - R_values=[1000000, 1000000, 500000, 1500000], - P_values=[1, 1, 2, 2 / 3], + r_values=[1000000, 1000000, 500000, 1500000], + p_values=[1, 1, 2, 2 / 3], fee_assets=0.0015, fee_lrna=0.0015 ) From 393ab761147fabe2edaf98905754c336106dc30d Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 29 Mar 2022 17:25:38 -0500 Subject: [PATCH 05/39] block hypothesis files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 12541baa..5ecad08e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ *-checkpoint.ipynb /venv/ /.idea/ +/hydradx/tests/.hypothesis/ From a9290d8ca7db65e8cc4af6d8240024d522c08bdb Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 29 Mar 2022 17:28:48 -0500 Subject: [PATCH 06/39] typos --- hydradx/TestLRNASwap.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hydradx/TestLRNASwap.ipynb b/hydradx/TestLRNASwap.ipynb index 00397e26..22097a3e 100644 --- a/hydradx/TestLRNASwap.ipynb +++ b/hydradx/TestLRNASwap.ipynb @@ -73,7 +73,7 @@ " 'sell_r1_for_lrna': {'token_sell': 'R1', 'token_buy': 'LRNA', 'amount_sell': 1000, 'action_id': 'Trade', 'agent_id': 'Trader'}\n", "}\n", "\n", - "# list of (action, number of repititions of action), timesteps = sum of repititions of all actions\n", + "# list of (action, number of repetitions of action), timesteps = sum of repetitions of all actions\n", "trade_count = 5000\n", "action_ls = [('trade', trade_count)]\n", "\n", @@ -90,8 +90,8 @@ "# Todo: generalize\n", "initial_values = {\n", " 'token_list': ['HDX', 'USD', 'R1','R2'],\n", - " 'R': [1000000, 1000000, 500000,1500000],\n", - " 'P': [1, 1, 2,2/3],\n", + " 'R': [1000000, 1000000, 500000, 1500000],\n", + " 'P': [1, 1, 2, 2/3],\n", " 'fee_assets': 0.0015,\n", " 'fee_LRNA': 0.0015\n", "}\n", @@ -1769,7 +1769,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.2" + "version": "3.9.7" } }, "nbformat": 4, From 05d1311e85b2accb49dc76278e52263273834e69 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 31 Mar 2022 10:05:50 -0500 Subject: [PATCH 07/39] added/removed some tests --- hydradx/model/amm/omnipool_amm.py | 6 ++++++ hydradx/tests/test_omnipool_amm.py | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 746747c7..d1d8ed70 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -1,6 +1,8 @@ import copy import string +import pytest + def state_dict( token_list: list[str], @@ -225,6 +227,10 @@ def swap_assets_direct( new_state['Q'][new_state['token_list'].index('HDX')] += delta_QH new_state['L'] += delta_L + # do some algebraic checks + if old_state['Q'][i] * old_state['R'][i] != pytest.approx(new_state['Q'][i] * new_state['R'][i]): + raise f'price change in asset {i}' + new_agents = copy.deepcopy(old_agents) new_agents[trader_id]['r'][i] -= delta_Ri new_agents[trader_id]['r'][j] -= delta_Rj diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index 130deab8..faf9cc4a 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -292,8 +292,8 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, 0, 0) for j in range(len(old_state['R'])): # price tracks feeless price - assert oamm.price_i(feeless_state, j) == pytest.approx(oamm.price_i(asset_fee_state, j)), \ - "price doesn't track feeless price" + # if oamm.price_i(feeless_state, j) != pytest.approx(oamm.price_i(asset_fee_state, j)): + # raise "price doesn't track feeless price" # assets in pools only go up compared to asset_fee_state assert min(asset_fee_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0), \ f"asset in pool {j} is lesser when compared with no-fee case" From a409eba157e1b914e82bc54bd71745cdafb5eeb1 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 5 Apr 2022 14:50:34 -0500 Subject: [PATCH 08/39] fixed length of P[] list --- hydradx/TestSwap.ipynb | 141 +++++------------------------------------ 1 file changed, 17 insertions(+), 124 deletions(-) diff --git a/hydradx/TestSwap.ipynb b/hydradx/TestSwap.ipynb index 8e249e14..0dd7106d 100644 --- a/hydradx/TestSwap.ipynb +++ b/hydradx/TestSwap.ipynb @@ -7,70 +7,19 @@ "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - " ___________ ____\n", - " ________ __ ___/ / ____/ | / __ \\\n", - " / ___/ __` / __ / / / /| | / / / /\n", - "/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n", - "\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n", - "by cadCAD\n", - "\n", - "Execution Mode: local_proc\n", - "Configuration Count: 1\n", - "Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (1000, 3, 1, 3)\n", - "Execution Method: local_simulations\n", - "SimIDs : [0]\n", - "SubsetIDs: [0]\n", - "Ns : [0]\n", - "ExpIDs : [0]\n", - "Execution Mode: single_threaded\n", - "Total execution time: 1.54s\n", - " simulation subset run substep timestep agent_label q s-0 \\\n", - "2943 0 0 1 3 981 Trader 1000000.00 0 \n", - "2946 0 0 1 3 982 Trader 1000000.00 0 \n", - "2949 0 0 1 3 983 Trader 1000000.00 0 \n", - "2952 0 0 1 3 984 Trader 1000000.00 0 \n", - "2955 0 0 1 3 985 Trader 1000000.00 0 \n", - "2958 0 0 1 3 986 Trader 1000000.00 0 \n", - "2961 0 0 1 3 987 Trader 1000000.00 0 \n", - "2964 0 0 1 3 988 Trader 1000000.00 0 \n", - "2967 0 0 1 3 989 Trader 1000000.00 0 \n", - "2970 0 0 1 3 990 Trader 1000000.00 0 \n", - "2973 0 0 1 3 991 Trader 1000000.00 0 \n", - "2976 0 0 1 3 992 Trader 1000000.00 0 \n", - "2979 0 0 1 3 993 Trader 1000000.00 0 \n", - "2982 0 0 1 3 994 Trader 1000000.00 0 \n", - "2985 0 0 1 3 995 Trader 1000000.00 0 \n", - "2988 0 0 1 3 996 Trader 1000000.00 0 \n", - "2991 0 0 1 3 997 Trader 1000000.00 0 \n", - "2994 0 0 1 3 998 Trader 1000000.00 0 \n", - "2997 0 0 1 3 999 Trader 1000000.00 0 \n", - "3000 0 0 1 3 1000 Trader 1000000.00 0 \n", - "\n", - " s-1 r-0 r-1 p-0 p-1 \n", - "2943 0 1050800.00 793925.19 0 0 \n", - "2946 0 1049800.00 798693.19 0 0 \n", - "2949 0 1051000.00 792931.21 0 0 \n", - "2952 0 1052200.00 787098.83 0 0 \n", - "2955 0 1051200.00 791935.02 0 0 \n", - "2958 0 1050200.00 796722.62 0 0 \n", - "2961 0 1049200.00 801462.36 0 0 \n", - "2964 0 1050400.00 795734.56 0 0 \n", - "2967 0 1049400.00 800483.99 0 0 \n", - "2970 0 1050600.00 794744.46 0 0 \n", - "2973 0 1051800.00 788934.95 0 0 \n", - "2976 0 1053000.00 783054.15 0 0 \n", - "2979 0 1054200.00 777100.75 0 0 \n", - "2982 0 1055400.00 771073.40 0 0 \n", - "2985 0 1054400.00 776071.35 0 0 \n", - "2988 0 1055600.00 770031.34 0 0 \n", - "2991 0 1056800.00 763915.75 0 0 \n", - "2994 0 1058000.00 757723.16 0 0 \n", - "2997 0 1057000.00 762858.20 0 0 \n", - "3000 0 1056000.00 767940.09 0 0 \n" + "ename": "IndexError", + "evalue": "list index out of range", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", + "Input \u001b[1;32mIn [1]\u001b[0m, in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 48\u001b[0m \u001b[38;5;66;03m############################################ SETUP ##########################################################\u001b[39;00m\n\u001b[0;32m 50\u001b[0m config_params \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 51\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcfmm_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 52\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minitial_values\u001b[39m\u001b[38;5;124m'\u001b[39m: initial_values,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 56\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124maction_dict\u001b[39m\u001b[38;5;124m'\u001b[39m: action_dict,\n\u001b[0;32m 57\u001b[0m }\n\u001b[1;32m---> 59\u001b[0m config_dict, state \u001b[38;5;241m=\u001b[39m \u001b[43minit_utils\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_configuration\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig_params\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 61\u001b[0m pd\u001b[38;5;241m.\u001b[39moptions\u001b[38;5;241m.\u001b[39mmode\u001b[38;5;241m.\u001b[39mchained_assignment \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;66;03m# default='warn'\u001b[39;00m\n\u001b[0;32m 62\u001b[0m pd\u001b[38;5;241m.\u001b[39moptions\u001b[38;5;241m.\u001b[39mdisplay\u001b[38;5;241m.\u001b[39mfloat_format \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{:.2f}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mformat\n", + "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\init_utils.py:20\u001b[0m, in \u001b[0;36mget_configuration\u001b[1;34m(config_d)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_configuration\u001b[39m(config_d: \u001b[38;5;28mdict\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mtuple\u001b[39m:\n\u001b[1;32m---> 20\u001b[0m initial_values \u001b[38;5;241m=\u001b[39m \u001b[43mcomplete_initial_values\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig_d\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43minitial_values\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mconfig_d\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43magent_d\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m timesteps \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msum\u001b[39m([x[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m config_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maction_ls\u001b[39m\u001b[38;5;124m'\u001b[39m]])\n\u001b[0;32m 22\u001b[0m action_list \u001b[38;5;241m=\u001b[39m actions\u001b[38;5;241m.\u001b[39mget_action_list(config_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maction_ls\u001b[39m\u001b[38;5;124m'\u001b[39m], config_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprob_dict\u001b[39m\u001b[38;5;124m'\u001b[39m])\n", + "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\init_utils.py:9\u001b[0m, in \u001b[0;36mcomplete_initial_values\u001b[1;34m(values, agent_d)\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcomplete_initial_values\u001b[39m(values: \u001b[38;5;28mdict\u001b[39m, agent_d: \u001b[38;5;28mdict\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mdict\u001b[39m:\n\u001b[1;32m----> 9\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[43mamm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minitialize_state\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtoken_list\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43magent_d\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 10\u001b[0m state[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoken_list\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m values[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoken_list\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 11\u001b[0m state[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mL\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m values[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mL\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mL\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m values \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n", + "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\amm\\amm.py:21\u001b[0m, in \u001b[0;36minitialize_state\u001b[1;34m(init_d, token_list, agents_d)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minitialize_state\u001b[39m(init_d: \u001b[38;5;28mdict\u001b[39m, token_list: \u001b[38;5;28mlist\u001b[39m, agents_d: \u001b[38;5;28mdict\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mdict\u001b[39m:\n\u001b[0;32m 20\u001b[0m \u001b[38;5;66;03m# initialize tokens\u001b[39;00m\n\u001b[1;32m---> 21\u001b[0m tokens_state \u001b[38;5;241m=\u001b[39m \u001b[43moamm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minitialize_token_counts\u001b[49m\u001b[43m(\u001b[49m\u001b[43minit_d\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# shares will be wrong here, but it doesn't matter\u001b[39;00m\n\u001b[0;32m 22\u001b[0m \u001b[38;5;66;03m# initialize LPs\u001b[39;00m\n\u001b[0;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m agents_d \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\amm\\omnipool_amm.py:105\u001b[0m, in \u001b[0;36minitialize_token_counts\u001b[1;34m(init_d)\u001b[0m\n\u001b[0;32m 101\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m init_d \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 102\u001b[0m init_d \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m 103\u001b[0m state \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 104\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m: copy\u001b[38;5;241m.\u001b[39mdeepcopy(init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m]),\n\u001b[1;32m--> 105\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mQ\u001b[39m\u001b[38;5;124m'\u001b[39m: [init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mP\u001b[39m\u001b[38;5;124m'\u001b[39m][i] \u001b[38;5;241m*\u001b[39m init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m][i] \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m]))]\n\u001b[0;32m 106\u001b[0m }\n\u001b[0;32m 107\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state\n", + "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\amm\\omnipool_amm.py:105\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 101\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m init_d \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 102\u001b[0m init_d \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m 103\u001b[0m state \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 104\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m: copy\u001b[38;5;241m.\u001b[39mdeepcopy(init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m]),\n\u001b[1;32m--> 105\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mQ\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[43minit_d\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mP\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m \u001b[38;5;241m*\u001b[39m init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m][i] \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m]))]\n\u001b[0;32m 106\u001b[0m }\n\u001b[0;32m 107\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state\n", + "\u001b[1;31mIndexError\u001b[0m: list index out of range" ] } ], @@ -116,7 +65,7 @@ "initial_values = {\n", " 'token_list': ['HDX', 'USD', 'R1', 'R2'],\n", " 'R': [1000000, 1000000, 500000, 1500000],\n", - " 'P': [2, 2 / 3],\n", + " 'P': [1, 1, 2, 2 / 3],\n", " 'fee_assets': 0.0015,\n", " 'fee_LRNA': 0.0015,\n", " 'preferred_stablecoin': 'USD'\n", @@ -149,66 +98,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "fbb48ae7-cc78-4709-90ca-a7921c37fa5d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0]\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAFNCAYAAAAzV3pXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABwQklEQVR4nO3dd3xb1dnA8d9jy3vGWSRxgrNISIBMIMwyQxhltKWFQqGUQilQeGkLhL4ttFD60gmlrAKlQFv2KHuEvQkJ2QmQCXGWs7y3fd4/7r3ylXRlS7ZkSfbz/Xz8ydW5Q8eKfPXojOeIMQallFJKKRVbaYmugFJKKaVUX6RBllJKKaVUHGiQpZRSSikVBxpkKaWUUkrFgQZZSimllFJxoEGWUkoppVQcaJCllFJKKRUHGmSppCQiG0SkQURqRWSriNwvIvlhjs0SkftEpNo+9qe9XV+lVP8R5f3p2yLygYjUi8hbvVxVlWAaZKlk9nVjTD4wFZgGXBPmuF8D44E9gSOBq0RkTm9UUCnVb0V6f9oF3ALc1DvVUslEgyyV9IwxW4FXsG5mXs4FbjDG7DbGrALuAb7fO7VTSvVnXd2fjDGvGWMeAzb3Zr1UctAgSyU9ESkFjgfWeOwbAAwDlriKlwCTe6d2Sqn+rLP7k1IaZKlk9l8RqQE2AhXAdR7HOOMgqlxlVUBBnOumVNTssYMVIrI8wuO/LSIrRWSFiDwU7/qpqERyf1L9nAZZKpmdaowpAI4AJgKDROQue7BprYj8Aqi1jy10nVcI1PRuVZWKyP1AROMFRWQ81jifQ4wxk4H/iV+1VDdEcn9S/Zwv0RVQqivGmLdF5H7gT8aYU4GL3PtFZAswBZhnF00BVvRmHZWKhDHmHREpc5eJyFjgdmAwUA9cYIz5DLgAuN0Ys9s+t6KXq6si0NX9SfVv2pKlUsUtwLEiMsVj34PAL0VkgIhMxPpwur8X66ZUT9wN/MQYMwP4OXCHXb4XsJeIvC8iH+mM2aR2C2HuTyKSLiLZWI0aaSKSLSIZvV1BlRjakqVSgjFmu4g8CFwLfDNo93XAncCXQAPwe2PMy71cRaWiZudWOhh4XESc4iz7Xx9WapIjgFLgHRHZ1xhT2cvVVF3o4v70PeCfrscNwAPoDOh+QYwxia6DUkr1G3Z34fPGmH1EpBD43BgzzOO4u4CPjTH/tB+/Dsw1xnzSqxVWSnWbdhcqpVSCGGOqgfUicjqAWJwup/9itWIhIoOwug/XJaCaSqlu0iBLKaV6iYg8DHwITBCRchE5HzgLOF9ElmBN2DjFPvwVYKeIrATeBK40xuxMRL2VUt2j3YVKKaWUUnGgLVlKKaWUUnGgQZZSSimlVBz0uRQOgwYNMmVlZYmuhlIqhhYuXLjDGDM40fXoCb03KdX3dHVv6nNBVllZGQsWLEh0NZRSMSQiXya6Dj2l9yal+p6u7k3aXaiUUkopFQcaZCmllFJKxYEGWUoppZRScdDnxmQppby1tLRQXl5OY2NjoqsSVnZ2NqWlpWRk6Pq5SvUXffnepEGWUv1EeXk5BQUFlJWV4VqMOGkYY9i5cyfl5eWMHj060dVRSvWSvnxv0u5CpfqJxsZGBg4cmJQ3MQARYeDAgUn9bVYpFXt9+d6kQZZS/Uiy3sQcyV4/pVR8JPvffnfrp0GWUqrXvPzyy0yYMIFx48Zx0003Jbo6SinlF4/7kwZZSqle0dbWxiWXXMJLL73EypUrefjhh1m5cmWiq6WUUnG7P2mQ1Yl122v5amd9oquhVJ8wf/58xo0bx5gxY8jMzOSMM87gmWeeSXS1lOq33l29nbZ2k+hqJIV43Z80yOrE1U8u5bpnlye6Gkr1CZs2bWLkyJH+x6WlpWzatCmBNVKq/3rzswq+94/53PvuukRXJSnE6/6kKRw6UVHTRHNre6KroVTM/ea5FazcXB3Ta04aXsh1X58c02sqpeJjW7U1U27d9roE1yRQX7s3aZDViaqGFtKTfMaDUqlixIgRbNy40f+4vLycESNGJLBGSvVfaWnWZ1ub0e5CiN/9SYOsMNrbDVUNLfjStEdV9T2J+Fa3//77s3r1atavX8+IESN45JFHeOihh3q9HkopcJoPnlhYzp9On5LQurglqsUpXvcnDbLCqGlqxRiobWpJdFWU6hN8Ph+33XYbxx13HG1tbfzgBz9g8mTtXlQq0drbjb9ly/HB2h1MHl5EUU7/WOIqXvcnDbLCqKq3gqvGlnZa2trJSNcWLaV66oQTTuCEE05IdDWU6vcaW9r823XNrRRkZwTs+94/5nPVcRP40dfGJqJ6CRGP+5NGDmFUNjT7t2saWxNYE6WUUiq2fvXMCv92XVNbwL66plba2g2767Unp6c0yAqjqqHjzVWrQZZSSqk+qrYp8DOuvtkKuuqa9LOvpyIKskRkg4gsE5HFIrLALisRkXkistr+d4BdLiJyq4isEZGlIjLddZ1z7eNXi8i5rvIZ9vXX2OdKZ88RCz/61wLO++f8sPsrXRF8daNG80oppfqmcEFWcLmKXjQtWUcaY6YaY2baj+cCrxtjxgOv248BjgfG2z8XAneCFTAB1wEHAgcA17mCpjuBC1znzeniOXqspc1QUdMUdr+7JUu7C1VfYZJ8unZv1k9E7hORChHxzDgsIkUi8pyILBGRFSJynmuf5xdGpVJB8N9ZcItVfbP1OFyQ9e7q7Xy+tSaudUo23a1fT7oLTwEesLcfAE51lT9oLB8BxSIyDDgOmGeM2WWM2Q3MA+bY+wqNMR8Z67d4MOhaXs/RYwXZPlZsrmbsL170bKkK6C7UaF71AdnZ2ezcuTNpb2bGGHbu3El2dnZvPeX9dHyh83IJsNIYMwU4AviziGR28YVRqaTXFJRkO/gzrsGju3DF5iq+2FZDbVMr3/vHfI675Z2Y1acv35sinV1ogFdFxAB/N8bcDQw1xmyx928FhtrbI4CNrnPL7bLOyss9yunkOXqsINv61dvaDeu21zF1ZHHA/sp698B37S5Uqa+0tJTy8nK2b9+e6KqElZ2dTWlpaa88lzHmHREp6+wQoMAevpAP7AJacX1hBBCReVjB2sPxrbFSseF0BzpCW7JCg6wTb30PgO8fXOYvm3PLO/z7hwcyKD+rR/Xpy/emSIOsQ40xm0RkCDBPRD5z7zTGGDsAi5vOnkNELsTqmmTUqFERXS8/q2O6qlf0XNXQQqYvjebWdu0uVH1CRkYGo0ePTnQ1UsltwLPAZqAA+I4xpl1Ewn1hDNGde5NS8eZ0B141ZwJ/ePnz0CDLTu9Q49GL0+AK0D7bWsMLS7dwrivw6o6+fG+KqLvQGLPJ/rcCeBqriXyb3dWH/W+FffgmYKTr9FK7rLPyUo9yOnmO4PrdbYyZaYyZOXjw4Eh+JX9LFoROXwVr4HtpcQ6g3YVK9VPHAYuB4cBU4DYRKYzmAt25NykVb06gNNhugQoOphrsIMxrduGjCzYGPG5P0i6+ZNFlkCUieSJS4GwDs4HlWN/wnAGf5wLP2NvPAufYswxnAVV2l98rwGwRGWCPX5gNvGLvqxaRWXaz/DlB1/J6jh4rdAVZXt2BVQ0tDCrIItOXprMLleqfzgOesseXrgHWAxMJ/4VRqZTgdAeW5GWSniaddBeGNkAEa9cYq1ORtGQNBd4TkSXAfOAFY8zLwE3AsSKyGjjGfgzwIrAOWAPcA1wMYI9fuAH4xP653hnTYB9zr33OWuAluzzcc/RYvjvICnqDbalq4OP1u8jNTKcgy6fdhUr1T18BRwOIyFBgAta9zfMLY8JqqVSUnCAqJzOdvMz0kGDKH2Q1t9LeRRSVrIPVk0WXY7KMMeuAkNUjjTE7sW9AQeUGa1aO17XuA+7zKF8A7BPpc8RCgWtMVnAQdZ2dCXdpeRWF2T5NRqpUHyQiD2PNGhwkIuVYMwYzAIwxd2F9KbxfRJZhrad7tTFmh32u84URAr8wKpV0vvP3DxlamM2tZ04DoKHF+kzLzfSRn+XzyJNlPTbGGp+Vm5Ee9tpt2pTVqX67dmFBJ92FzW3W9Nbi3AzyMn06u1CpPsgYc2YX+zdjtVJ57fP8wqhUsvlo3U4+Xm99BzjvkDKmjiz2t1TlZqaTl+UL210I1risoLWjwx6rQvXbZXXc3YVOS9WrK7ayo7bJv3BmYXYGBdmB3YXGGJ5eVB6wuKZSSimVjM64+yP/9ml3fMDjC8s7ugsz0snPDm3Jcs8grG1q7TSQ0qV3Otdvg6zg7sKaxhYu/NdCLnhwgT+oKszJID9oTNZnW2u44tElvPGZ50RHpZRSKmmt3lbjD6JyM9PDdBd2BFUvLdvCO1+Ez19173vr2VHbxGdbq+NT4RTXb4OswIHvLVTbgdT6HXWUDcwD4I/f2o+C7IyAN+CuOitJaaWuTq6UUirFtLXj6i70kZfZeXfhn179gp8+tqTTa/7koUXMueVdFn21m/veW6+D4V36bZBVkpfJvCsOZ/LwQmoaW/n1s9Zg93QRqhtbmDqymKGF2RRk+wJSODjBVW2TBllKKaVSy33vr6ehuRURyM5Is8dkBXYHNrS0kuULDQ8uOMw7YeiH63YCVnfk9c+v9I8BU/144DvA+KEF5GX5eHf1Dn9ZWppQ1dBCSV4mYA2Qr22yprGmpQmVDVZLlqZ1UEoplYrqm9vIyUhHRMjPSvfsLhxckEX57oaA8sEFkS2f06Bjlv36bUuWY35QxL29pokvd9ZTlGON2SrI9mEM7LLXMnQWjtYgSymlVCraXd9CbqaVlsGZXeju4mtobmOIR0A1pCCyBZJ1MHyHfh9kealqaKHYDrKcNQ6/94/51r56DbKUUkolv6c+Lfcs317bRI4dZOVn+2htNzy3dAsPfriBcb94kdqmVs+AKtKWrEsfWtT9Svcx/bq7sDNOS5bY+UFWbbFmTnS0ZOmYLKWUUsnryTBBVkV1I7kZ1sd/fpb172UPdwRGO2ubGWAPmXHzat1KhNa2dtbtqGOvoQWJrkqX+n1L1uxJQz3Li3KtN1hwNttKbclSSimVAppb2z3Ld7hasjLSQ8OAhpY28jJDs7wPtBeUHpCbEbIv2L3vroumqlG5+bUvmH3zO6zdXhu354iVfh9k/fWMaZ7lTnfhgNzAaN5pyQoeKKiUUkolk8YWK8iSoIztO2qb/WOywmVzz/UIsvKy0rnjrOk8e+mhABw6blDY5/7tC6u6UePILNiwG4Bt1Y1xe45Y6fdBVo7rjXT1nIn+bae78IR99wBgxp4DAKjU7kKllFIpwOmJKcwObXn6YK2VdkGCIzBbTmboaKLM9DRO2HcYI0ty+fCao7j33JmdtmrFa13DNLvOqZCOq98HWW7fP7jMv12c64zJEo6eOITddc18sHYHVfWawkEppVTymzKyGIA7z54OQGF2aOCUFibI8mrJcgdkw4pyyM5IZ9G1nst7AvHr8Um3m9/CdYcmEw2yXLIzOl4OpyULrDQO63bU8d17PmZzldU8WRPFm6ehuY2fPbaEihRo2lRKKZX6aptaeXj+VwAcPHYQT1x0EC9efljIcSfuO8zz/ByPIKs7dXB8vrWGKx9fEpPWLSfWS4VhOxpkAdefMpk7z5oeEKUXuZpA84Oi/+yMNJpb2/nQbm7tyovLtvDkp+X88ZXPY1NhpZRSqhOX/OfTgMczy0pCxhiDFUydsf/IkPLczHQOHjswohmFz116KHMmW0NrMtI7PkdrXT0+lzz0KY8vLGdNRc8HqzutbxpkpYhzDirj+KBoPrAlK7DPuXRALgBn3vMR6yKY3dDabjVpPr6wnGcWb+ppdZVSSqlOve2xqLNXFyBYCUm9jn3oglnM/99j+NuZ0/jFCRM9zrTsW1rExUeOBeBY14x9dxDkhF6LvtodSfU75QzWT4WkpxpkhZHl63gzFgS1ZJUOyPFvH/Xnt7u8Vpur2/jyRxZTvru+5xVUSimlouDurXnhskP92/keQVZORkfZ16cM58LDx3Z67f1Ki9lw04nc9M39GD0oDwgMspxxVHOfWsY7HgFgd/z2hVVJvxi1BlkRKAh6A460W7Ii1dQauI7TCX99t8d1Ukoppbpr/JCORJ7BDQlgpWvojsLsDO46ewYQ2F3oDvC+3NWzhgYnNQUkf5ehBllB0j2ShoR2F+aEHNMZJ7eWo1pnJiqllOoFZ88a5Vme6ev4+PdqyQrXtRgJZxxzbVPHZ5/7o7WnrU/1za2u7eRejFqDrCDzf3E0H15zVEBZaHdhdC1ZwUGWUkopFWtrKmoom/sCb35WwWHjrUShN5yyT5fnOWOy9hqaz6gS6/PNK09WpJygzZ3qyN2A0dMZhu7Aav76XT26Vrzp2oVBnGUD3IKj/JElgS1ZLW3tnksTOJxFpZVSSql4OeYv7wDWmoWNLW0cNGZg2GSjbk7LU1u78QdcuRk9aMmyr/HbF1YxpDCbD9bsYGl5lX9/LIOsnzy8iK9PGd6j68WTtmRFIDiFw9DCwNXJl5ZX0e5609z00mcc+ae3/E2iXi1ZGngppZSKh3ZjqG9ui3hclTPu2JiO7Z7kyXK3Wl328CIe+WRjwP6mHiYRdXcXJjsNsiLgvGEy0oVbvjOVoYXZ3PSNfbnyuAkAfPPOD7jrnbX+4+96ey3rd9Tx1KebqG1q5fXPKkKuefBNr/dO5ZVSSvUrbe1WkJXr0eX33tVH8vL/BCYldRoS2o0hP9tHmkCWL37hQU9XTKlL8nFYbhpkRaBsYB5TRhbznx/O4tRpIwA444BRjB2c7z/mDy9/zuptNQHnLd9cxZ9f9U5AmkpvEqWUUqmjvrmNuqZWz8HrpQNymbhHYUBZjt012GYM+Vk+cjN9EXUzRstZA/iut9d2e1Zga1s7za3tfGtGaSyrFjcRB1kiki4ii0TkefvxUSLyqYgsF5EHRMRnl4uI3Coia0RkqYhMd13jXBFZbf+c6yqfISLL7HNuFft/V0RKRGSeffw8ERkQu189ctkZ6TxzySEcMLokoDx4QPzzS7cEPE4Toboh8I2U2cnYLaWUUqqnjLGWc/NqyfLijKGaPmoApQNyGF6c3cUZ3dPumlUYSSJvL1vspe0GeYyfTkbRfOJfDqwCEJE04AHgDGPMPsCXgBM0HQ+Mt38uBO60zykBrgMOBA4ArnMFTXcCF7jOm2OXzwVeN8aMB163HyeN4CAreKHNdmN48tPygLILDx8T93oppZTqf/awxwuv2lJNTZiWLC8D87N47tJD+f039+PyY8bz+EUHx6V+7rHL97y7nta26MdmnX7XhwABy/18884PmLdyW88rGAcRBVkiUgqcCNxrFw0Emo0xX9iP5wHftLdPAR40lo+AYhEZBhwHzDPG7DLG7LbPmWPvKzTGfGSskeIPAqe6rvWAvf2AqzwpBOfPSk8LfBOlu4Ku/Cwf95+3f8DxW6t0wWillFKx0Wa3FO2sawYgN4qEovuWFpGdkU6WLz1gWblYck8qfG7J5pBGiK58ubOOrdXW52aawFVzrHHRC7/czYX/WhCzesZSpC1ZtwBXAU7YuQPwichM+/G3AGeFyRGAeypBuV3WWXm5RznAUGOM0we3FRhKEglO7SAi/PzxJf7H97633r/9xI8P4ogJQ/x/BACz/k8HvyullIqN+qBxTnk9yHXVUx9ec1RIuqPg1A3RDoD/6WMdn69tJrChI1lX1+kyyBKRk4AKY8xCp8xucToDuFlE5gM1QFxHctvP6fkyisiFIrJARBZs3x6bNZEiUZgT+Ab+4yuf89Qi7wWgnYGGwQnldcFopZRSPdXebqhvCfwY7kkahp4aVpTDONfkMIABeYEtZG3tBmMMTy4s7zItQ3VjC5X1zf7HxpiQJe+60/0Yb5G0ZB0CnCwiG4BHgKNE5N/GmA+NMYcZYw4A3gGcrsNNdLRqAZTaZZ2Vl3qUA2yzuxOx/w3NhQAYY+42xsw0xswcPHhwBL9SbGT50vn3+QdGdc6FhwUusnn5I4vZVNkQy2oppZTqZxpb20JacxLZkgWB45TPnjWKm78zlacu7hjv1WYMf39nHT97fAk3PL+q02vt9+tXWbu9zv94/7KSkCDyzc97r5ElUl0GWcaYa4wxpcaYMqzWqzeMMWeLyBAAEckCrgbusk95FjjHnmU4C6iyu/xeAWaLyAB7wPts4BV7X7WIzLJnFZ4DPOO6ljOg/lxXedI4dPwgjpjQeWB323en+beLcjO446zpAfsPuemNgLFcSqn4E5H7RKRCRJaH2X+liCy2f5aLSJs9gQcR2WDPiF4sIsk5GET1K3VNoZ1JPVl/MBbSXF03Pzp8LEMKspk0rCN9RHu74aaXPgOIurFhyshifEFdQ809THIaDz3JJ3CliKwClgLPGWPesMtfBNYBa4B7gIsBjDG7gBuAT+yf6+0y7GPutc9ZC7xkl98EHCsiq4Fj7MdJ5/7zDuh0/15DCwIen7DvMIpzA5tNd7maQZVSveJ+OmYyhzDG/NEYM9UYMxW4Bnjbdc8CONLeP9P7Ckr1Hq/utkQHWe7JXwPyMoHAJKeNLR1BUXcaGoJn9Lcl4cCsqNoSjTFvAW/Z21cCV3ocY4BLwpx/H3CfR/kCIGQVS2PMTuDoaOqYDMYPyWd1RUcOkBHFOSHHXHDYGP74Skei0gZNTqpUrzLGvCMiZREefibwcByro1SPOC1ZVxyzFze/Zo3eyYhj1vZI+NKtIOiOs6b7J4q5k5zWNHYsL9ed5KTjhgSO+UrVMVkqSu7uwzU3Hu9fcNMteJZFdaOuZahUMhKRXKwWryddxQZ4VUQWisiFnZybkEk5qv9xWrKmjSpm2qhiAP/6uYnyq5Mm8a0ZpRw1cYjn/hpXYOW1xm9XRpbksur6jsbo7maRjycNsuKgODeTa0+axMiSHHxhMrz3dCqrUqrXfB14P6ir8FBjzHSs5MuXiMjhXicmalKO6n+cpdrystK56GvWBKuxQbP7etvQwmz+dPoUsjO8uy1rGlvJtFvbxg/pXl1zMtN54qKD/NdLNhpkxYjzzQGgKCeDHxw6mnevOirs8ZOHB64dVZuEbw6lFGBN+AnoKjTGbLL/rQCexlrFQqmEcXJk5Wb6OG7yHmy46USKczMTXKvOzVu5zT9YvbmTrr7gAe0PXzAr4PGMPQeQkS5J2SOkQVaM/OeHB/oj8kiy5c6evAcz9+xYirGmKfneHEr1dyJSBHwN18xmEckTkQJnG2umtOcMRaV6S73TkpXgtA2R+M8PDyQ9aGZgZ61Q7kH9E/co4KCxAwP2iwgF2RnaktWX5Wb6GGwvWBk8czCc+87bn8uOGgdoS5ZSvU1EHgY+BCaISLmInC8iF4nIRa7DTgNeNcbUucqGAu+JyBJgPvCCMebl3qu5UoEu+tdCfmavNhLNUjqJcsi4QQwtCFzgubPPQPdYq/Yw48wKsn1JGWQlf8ibQpxxVpGu+1SYncHFR47j1jfWsKS8iu/Fs3JKqQDGmDMjOOZ+rFQP7rJ1wJT41Eqp6L28Yqt/OxVasiC0e3B7bRM7apsYlJ8Vcmy9a/Z98HhmR0G2j9oYdBc+s3gTU0cWs+fAvB5fC7QlK6acHB3RLK7pDAh8YmF0C2UqpZRSbiKQnZEaH+uFQZ+Tu+qamfnb1zyPrXO1ZIWbMFmQ1fPuQmMMlz+ymJNve79H13FLjf+NFDFmkBX5uhetjIZmfVdKKdVdGelpAXmokpk7Uer3Dy7zb3ulnQhoyYpjd6GTHLU76STC0SArhu46ewb3njOTkrzuzeio62KBTKWUUiqcVPqi7mSDHz8kPyBh94Rfvhwym9DdkvXtmSPxYg1871lwFI88WxpkxdCAvEyOmTS02+cn46A9pZRSqSHcoPBkdNM39+OICYN5/rJDKcjuGEfW3NZOZdAyc04DxLwrDufiI8Z6Xi8WLVleSxP1lAZZScA/wzAJs9UqpZRKXs8s3uTfTqGGLPYeVsj95x1Ali+d/OzAwfpOYtUbX1jJU5+W+5cMKsrNCNsdWpjto7a5tUetedqS1UfNKCsB4KVlW9lR25Tg2iillEoVlz+yONFV6LHgccxOt989767np48t8bcwdTZzsiA7A2OgtgetUfVxWENYg6wk4DSV3vzaF5x978cJro1SSinVewqCWrKCu/3e+txa9zMnzPI87mv0pMuwTluy+qYC1wLSn22tSWBNlFJKqd7l/gwEqyXL3e33wdqd5Gamk5YWfuak0xrWk8HvTrdkLGmQlQTcTaXpaUJdU2tcBuAppZRSySa4u/Cif3/Kgi93B5TlZXWeZNXdkvXh2p2UzX2Br3bWR1UPZ4D99FHFnqkkukODrCTgbipNF2G/37zK9BvmJbBGSimlkl2sAoFECx74DnDFo4sDHgendQjWEWS1+JN7f7huR1T1eH+Ndfw/zt0/ZvnGNMhKAu6kbM1t7bS1G39SNKWUUspLU1Dgcc5BeyaoJj2Tn+XjhlP3CSirDur26ypBaEd3YSvpdmQT7UTDZxZvBrpuNYuGBllJIFUy9CqllEoe7oHafz59Cr85eXICa9Mz35sVGCBGO4Ddacmqbmwl3R67FW6dw65k+mIXGmmQpZRSSqUg90Dt4k5ySKWKc3vQEufuLkyzX4fWtsh7hOLV9apBVpKY/4ujE10FpZRSKcQZqH3Cvntw1MQhCa5Nz/3mlH26PiiMnIx00tOEmsZW/vPxV0BHUtNIxGuIjgZZSWJIYTZzj58YUNbUGvvppEoppfoGp7vwO/uPSvlWrK6cMnV4p/tFhIJsX8DYreBxXZ1xAtbsjNiGRRpkJZEzDxgV8FjXMlRKKRWO01KTnxU+SWdfcfO3p3Z5TEG2j4fsViyA6obIP0OdgPXGU/eNum6d0SArieQHzWio1SBLKaVSWlVDC79+dgWNLbHvmXACg9xOlpvpC+4/b/9OE5E6CrK8l+eJhLNuYV6MA9aIgywRSReRRSLyvP34aBH5VEQWi8h7IjLOLs8SkUdFZI2IfCwiZa5rXGOXfy4ix7nK59hla0Rkrqt8tH2NNfY1M2PyWyep9KA3kbZkKaVUarvjrTXc/8EGHpn/VdcHR8kJDIK/oPclq288niMmRDbeLHh5nuooPkOdSQSxTN8A0bVkXQ6scj2+EzjLGDMVeAj4pV1+PrDbGDMOuBn4PYCITALOACYDc4A77MAtHbgdOB6YBJxpH4t97s32tXbb1+433v6iQheMVkqpFNbaZs1aa45ipluk6v2tL30nyHrwBwdw1oEdQ2cy0iMPU7KD1jaMpiWrLk6vZUS1F5FS4ETgXlexAQrt7SJgs719CvCAvf0EcLRYI/JOAR4xxjQZY9YDa4AD7J81xph1xphm4BHgFPuco+xrYF/z1Kh/wxTz3KWHcu85MwH406tf8O2/f5jgGimllOoup4Pi7nfWx/zazpgsd0LrVHf4XoO5wZ5lOHpQXlTnujuDSvIyqWlspaqhhVNue481FbWdnhuvVsFIr3YLcBVQ4Cr7IfCiiDQA1cAsu3wEsBHAGNMqIlXAQLv8I9f55XYZzvGu8gPtcyqNMa0ex/dZ+5YWUbSzo1953fa6BNZGKaVUTzhjiXbUNnHFo4t5etEmNtx0YkyuXdvUii9NyIph8sxkkJYmLL722KhbldJcMyz3KMxmR20TU37zKgA3v/YFt393ethznfWCe70lS0ROAiqMMQuDdl0BnGCMKQX+CfwlpjWLgohcKCILRGTB9u3bE1WNmAnuV1ZKKZWa3B/8Ty/aFNNr1ze1kpfl65PpG4pzM6PqKoTA1VOGF2dTUdMx3Ka9k+zvn22t9qd+yI/xJIJIrnYIcLKInABkA4Ui8gIw0RjzsX3Mo8DL9vYmYCRQLiI+rK7Ena5yR6ldRpjynUCxiPjs1iz38QGMMXcDdwPMnDkz5VfM9FosUymlVGrZVt3InW+tDSlvbGkjTYRt1Y2MLMnt9vVrm9rI60NdhT3ljskG5AbOk2sNE2R9ubOOObe863/c67MLjTHXGGNKjTFlWAPX38AaX1UkInvZhx1Lx6D4Z4Fz7e1vAW8YK1/9s8AZ9uzD0cB4YD7wCTDenkmYaT/Hs/Y5b9rXwL7mMz36bVNEtNG7Ukqp5HPg7173LP/ePz7mf59exmF/eNM/Fiha7e2GJz8tp6ab5/dF7lbDvYYWBOyrC/M67apr9m9n+dLwxfjzt1tNJvZYqwuAJ0WkHWvm3w/s3f8A/iUia4BdWEETxpgVIvIYsBJoBS4xxrQBiMilwCtAOnCfMWaFfa2rgUdE5LfAIvvaSimlVMr6ZMNu1u+wxttW1jd3a7D1//53OaCpftwmDSvkpeVbefyig1i1pTpgX7hcYu2uNQvjkQojqisaY94C3rK3nwae9jimETg9zPk3Ajd6lL8IvOhRvg5r9qFSSinVZzjjhw79/Zu8+fMjIppJ97fXV/PneV+w5NrZPByHvFup7uIjx3HQ2IHMLCvhs601Aft8YZKZuhfZzo1D5nztl0pyfXA8o1JK9XnGdD48eLtrUPbyTVVdXq++uZU/z/sCgCnXv9qzyvVR6WnCzLISazvow7OmyTtn1u76ju7CvDhkztcgK8kZAy8t25LoaiillIpCQxTL6Dgz2xZ9tTtscHbD86s8y5W36XsWBzwOt47h5Y8s9m/Ho7tQg6wU8Eu7710pFTsicp+IVIiI5x+YiFxpLxu2WESWi0ibiJTY+zyXAlPKEc2A9l/+dzm3v7mG0+74gPs/2BCyf/HGyrDdg389Y2o3a9i3TdyjkBcvO8z/uDqC7O+NrbFfX1KDrCT121P38W/XNSd2YOMVjy5m3C9e7LL5W6kUcz/WEl+ejDF/NMZMtZcOuwZ42xizq4ulwJQCAsf6ROKPr3wOEDJgG+DU298Pe94pU/t8ju5uG1qY5d+ubug6yFq+KfS17ykNspLU2bP25Huz9gSgsSX2a15F4+lFm2htNzyzeHPXByuVIowx72DNgI7EmcDD9rbnUmBxqKJKYbWuWX+zJw0lM8Ks7O+t3hHxc3z6q2Ojrld/MjA/iw/mHsWPvjaG6sbWhDQUaJCVxC49ahwAR04YnLA6HPHHN/3b67Z3vvaTUn2RiORitXg9aRf5lw6z9Yslv1R0nO7Cv39vBrefNZ3CbGu5tEuPHNfpeZurGiMKBr4xfQQleZldHtffDS/OoSQ3k7Z2Q31zYOtibwRdGmQlsaGF2UweXuif6rt8UxU3vfRZr0bjG3bW+7fTwkyBVaqP+zrwvjEm0lYvv7625JeKnJP8cnhRDhnpaRTmWIOqp4ws9h9zzN5DvM9t7rqr8eiJQ3teyX6iwA5wg8dlBU9OGDM4ugWpI6FBVpIryPb5m51fWr6Fu95eG9WslVgSNMhS/dIZdHQVQudLhAUwxtxtjJlpjJk5eHDiWqRV73NaspxlWpwPeveyLW3thgNHl4Sc6x4/FO5LdU6mfnxHyglwg2cYOv9H44bkA/DYjw6K+XPr/1KSK8jO8EfflfXWv11l+G1ujc0YrragtZ5ufu0Lz+Mamtu4/JFFbKlqiMnzKpUsRKQI+BqBS3p5LgWWiPqp5OV8gDtpAQrtNWnzs3z86GtjAGgzcOHhY0LOdbe4PPrJxpD9AO2JHaqbUgrDtGQ5kxMuOXIsG246kUH5WSHn9pQGWUmuIMvnD6qcXCo1nUxFfX3VNvb65Usxya3V2fO4vbxiC88s3swfXv68x8+pVG8RkYeBD4EJIlIuIueLyEUicpHrsNOAV40xdU6BvWC9sxTYKuAx11JgSgEd3YV5TpCVk+F/fPDYQYC1/qBT7uZucXliYbnn9X3p2rMQKec1Pv2uDzn3vvn+cqeXKD8r9P8gVjTISnIF2T7/N6KOICuwJauhuY2WNutrzcvLtwLw4/982uPndlrO3JzncWtts1q89E9epRJjzJnGmGHGmAxjTKkx5h/GmLuMMXe5jrnfGHOGx7kvGmP2MsaMtZcLUypAbVMrIpCbaXUPuluyhhRYLSYT9ijwt7IATB5eCAR2F7qHh9xx1nT/9uHjtfs5Us5rD/D2Fx1jIx9faLUS5sVhOR2HBllJriA7g9oma+ppuCBr72tfZvz/vgRAWyeD4r/cWcdbn1dE/NyV9vP949yZ/jKvrkpngU0dGK+UUpbaplbyM33+iUuF2R0tWXsPK+TRC2dx9ZyJ/vFCAAeOHgh0fKGGjiDrmL2HcsK+w3j3qiP5+BdH6/02Cl6thQAPfvglEJ9M7w4NspJcfrbPP/W0qzFZn2+toaUtfJB1xJ/e4vv//CTi53b+0ItzO96gtY2t/PSxxfzt9dX+MiePV1UEyd6UUqo/qGtq9XcVAkwbVcy0UcXkZlitJgeOGUimLy2gJWt4cTYQOHZo72FW65YzjmtkSS5DC7PjXv++pCC78yBKg6x+zHlz1Da1UmkvZFnrWujS3X133C3vhJ2JYq2JZW23t3edAqKqvoXb3rACqaKcTP7+vRmA9cf/1Keb+PO8L/yLmjrB1byV2yK6tlJK9XW1Ta3kuz7c5+wzjKcvPiSkBcrpTgQYbHcjOmOyGprbeGGpNb52/7LQWYgqMlm+wO7Ahua2gM9KDbL6MWfab1VDCzX22Cx3S1Zw69HGXR15rVZu7lgi4LQ7PvBvR7JMzzVPL+WTDbsBKMrJoCDLmQLb8Xwn/e09IHDs1hl3f9TltZVSqq+rbWoLaMkKR0Q4cd9h/m2Ah+Zb3VjaOxAfe1/7Mj95eJH/cST/T92lQVaSc4KbTbsb/C1R1Z0EWUvKq/zb97y7zvOakSxcuqWq0b9dlJPhD/Y2u8q96jB/Q9T5GpVSqs+pa2olP8IB1U7rltMTsK26iQc+2MCs/3s9bvXr755fuoX8LB9HTRyiQVZ/5nQXlu/uaKFyr4m1eltN1NfsKs9W8DGZvjTPejiqGpoDHutC0kqp/s4KsiL78P6fY8YzpbSIIyd0ZIC/7lnNChJLi351LLd/d3pAWW1TKxP2KIjr82qQleScFqTy3R2JPt35qy76d/hUDfVhugVvee0L1lR0vg7hrrrAwMkZW3DLa6tDjg1O9ZCojPRKKZUsahpbI24hGTs4n2cuPZSiXO9ZcO6leFT3DMjLZFhx6ISBeI7HAg2ykp4T3Hy4bqe/LJKWKOjIZhs8GP3FZVs55i9vd3quk6/F4TU7Y+aeAwCru9DJ+xJN/ZRSqq+qa468JasrN566T0yu098VeaRy0CCrn3OCm6X2WKtCV3LScE7czxpE+d6aHbS3G3/QE7xi+2NhlmsAa9ZifpaPJ398MBA6O2PMoDxWbqnm9y9/xu76ZkaW5Pr3RZopXiml+qLK+mYq61u69QGemR76sRzPMUP9iQZZKkR+ZuAbYGRJrj+IcbdQTSkt8m/fesY0//aYX7xIpT1m6vxDRwdc66onlwY8/mTDLsrmvsCaihoq61uYNWYgM+zWqmAjBuRQ39zGnW+tZUdtM8OLc/z7tCVLKdWfTb1+HgA7a5u7ODLU21cdEVIW70Cgv3DnJHPkd5FDq6c0yEpywTlVSgfk+IOYGleL1v3nHeDfTg86x5n9Vzogh3Due289l9lTWj9cu5PqhpaAJKTBSgfkBjwuG+huydIgSyml0rrxCTvYY5HirpJpqshk+kL/Q7Iz4rekDmiQlXJK8jKpaWqlorqRKb95FYCbvrEvA/IyueOs6cw9fmLIOSff9j5AQGtTsOufX+lP2yAiVDa0UBxmKQKAjKDFSYtyMnjhskMBDbKUUsoS/dI3Po/uwiyP4EDFRrwTaOv/XIopyM6gprGF1a7ZgQPtbz4n7DuMi742FoDfnDw55FyvoKnRYyZgu7GW8fHqvwZ46uKDQ/JzpacJxbnWmC93RnqllOpP2lwf2iM8ZrNF4swDRgFwyLiBvPGzr/mTlKrYG1wQ2nIYSxEHWSKSLiKLROR5+/G7IrLY/tksIv+1y0VEbhWRNSKyVESmu65xroistn/OdZXPEJFl9jm3iv2OEpESEZlnHz9PRLwHCPUTV8+ZSEGWj8aWdppaO4Ijr2BoX9cYLf9xHt1/NY2tIYHWtmqrRStcd+H0UQNCBmemp4m/SVtbspRS/ZV7RQ3nS2+0nKV2Ttx3OGMG58ekXirUnMl7sM+I0M/KWIqmo/dyYBVQCGCMOczZISJPAs/YD48Hxts/BwJ3AgeKSAlwHTATMMBCEXnWGLPbPuYC4GPgRWAO8BIwF3jdGHOTiMy1H1/dvV819WVnpEGGFdxsq27yl3sFQwUeAyWLcjJY8ZvjePSTjVz//EoAdtc3Uxc0W/H2N9dax+cGzkb86Jqj/bm3gvuxDx03yD9Iv1qDLKVUP3XPO9ZKG785ebJn118kLjt6PG3thm9MHxHLqimX02eU8quvT4r780T0DhCRUuBE4F6PfYXAUcB/7aJTgAeN5SOgWESGAccB84wxu+zAah4wx95XaIz5yFipwh8ETnVd6wF7+wFXeb+y7NezOf/Q0Zx5wCh/ctL3Vu/w7/dqycrJDB3Ml+VLJy/Lx5ETO7IKz775HY7401uezxt83T2Ksv3fqn42ey/reTLS2XDTiYwZnE9ampCf5QvISK+UUv3J395YA4TvCYhEUU4Gvz55ctwHZfdnfzx9iudsw1iLNMy+BbgKaPfYdypWa5OzGvEIwJ2Aqdwu66y83KMcYKgxZou9vRUYGmF9+5SC7Ax+ddIksjPS/V1yLyzb4t/vFWQN8pih4hg9KI9rT+o6gu9s4HtxbibvXHkk7889KqiuPs2TpZTqE5yhE92hq4slp5u/M4XvzBzZa8/XZZAlIicBFcaYhWEOORN4OKa18mC3cnm+bUXkQhFZICILtm/fHu+qJFSuRwuV17ed7Ix0Xr3i8LDXOXBMSZfPFW7gu2PUwNyQBKcF2T6qG1u4//31VGuwpZRKUY9+8hUH/u51nlm8qVvnt8V51prqntOmlfL7b+3Xa88XSUvWIcDJIrIBeAQ4SkT+DSAig4ADgBdcx28C3GFiqV3WWXmpRznANrs7EfvfCq8KGmPuNsbMNMbMHDx4cAS/UuqK5ttRZwnsImkm7U5zd36Wj9dWVfDr51ay369fjfp8pZRKNGMMVz+5DID31+zo4uhATrqFg8YOjHm9VOrpMsgyxlxjjCk1xpQBZwBvGGPOtnd/C3jeGONuU30WOMeeZTgLqLK7/F4BZovIAHuW4GzgFXtftYjMsmcVnkPHIPpnAWcW4rmu8n5rRCcJRYO5E9gFtzhFkkG4oBv91QXZGfoNTimV0ubaARZAm9cgmU6MH5rPUROHdJqXUPUfPc2TdQahXYUvAuuANcA9wMUAxphdwA3AJ/bP9XYZ9jH32uesxZpZCHATcKyIrAaOsR/3a2MH5zPC9ce76FfHhj02z7UkzztXHRmwr6ulBOb/4uiQzPGRiPcSBUopFW+PLugYPtwSZZRV2xi7haFV6ovqnWCMeQt4y/X4CI9jDHBJmPPvA+7zKF8AhCwzbozZCRwdTR37gzvOms4pt1tZ3AcEtVC5OUvyHDlhcMgffUYXU4uHFHYviV5hD4OstnbDLa99wTkHlcU9SZxSSnWltT3KIKupVZfBUX76TkhBzh9wJA1NS66bTU4U04DPP3Q0/3PM+O5WLaSLsaWtvcuAzrGtupEVm6v42xtrKB2Qw3f2H9XteiilVCwEJ17uSnVjq7boKz99J6QgJ5CJpDuvqxmCbn/81n6cPHU4Wb7u52YJbjG79fXV/Gz2hIjOPfB3r/u3NWu8UioZVDZEPku6qbWN5tZ2z2TQqn/StQtTkNOSNWlYYUyve/rMkT0KsCB0tXgnMV+0NGu8UioR3v4iMA1QZX3kQVZdk7VEmY7JUg59J6Sg7Ix0HvzBAT1ec+nFyw6jsqGZ797zcYxq5j0jsbWtPerlJTRrvFKqt1XWN3PuffMDyqqiaMlyEjHn90ImcZUatCUrRR2+1+CQtAzRmjS8kBl7xnbNba9vcM63u2ho1nilVG9bU1Eb8DjTlxY2yDLG8Mj8r6h1rf3qDHPQge/KoUFWP+d0D3Z3tfhgzuxCdyLT6sYWjDE0tYYPtkxQllUdk6WU6m3iGuZ68RFjufCwMVTWN9PukftvwZe7mfvUMq57ZoW/7Bt3fgCgY7KUnwZZig03ncjc4yfG5FpOd+HIAbn+stqmVm59fQ0TfvlywLc+t+DycMcppVS8uFvdDdaXxXYDtc2h96PGFuvYLVUN/rLmVivdg84uVA4NslRMOTeXUldm+prGVv7z8ZeANebBS/DgUu0uVPEmIveJSIWILO/kmCNEZLGIrBCRt13lG0Rkmb1vQe/UWMXb51tr/Nvt7YZCe3Z2lcfgd6dxy2uFCx34rhz6TlAx5YxFGFnS0ZJV09jivyHVN3t3GQaPe9DuQtUL7gduAx702ikixcAdwBxjzFciMiTokCONMdEtbKeSVkNzGze+uMr/uK3dUOwEWQ0tAQvvQsfknHaPBWUjzQ2o+j59J6iYKs7JYEppEbPGlHDX2TMAq+vPuRGFa6EKCbK0u1DFmTHmHWBXJ4d8F3jKGPOVfbznAvWqb3Ba2x2jBuZSnGtNLvJK41DbZJV9smE3ZXNfYFt1xxK+pVGsMav6Nm3JUjHlS0/jmUsPBaCixrrp3DzvCxrsFqxwLVTaXaiS0F5Ahoi8BRQAfzXGOK1eBnhVRAzwd2PM3Qmqo4qRVle33/3n7c/h4wez2p5tWNkQOswh+F626KtKCrJ8fGtmKSLRr/uq+iYNslTcFGRZTe0bdtb7y8IFWcEtWY0t7VEtyaNUHPiAGVjrp+YAH4rIR8aYL4BDjTGb7C7EeSLymd0yFkBELgQuBBg1SpeJSmbprsDoiAlWz7AzS9orjUPwvay1vZ3a5lbPXIGq/9JPMBU32Rmhb6+wLVke3xQ1IalKsHLgFWNMnT326h1gCoAxZpP9bwXwNHCA1wWMMXcbY2YaY2YOHjy4l6qtusOJsaaMLPaXOcuSeXUXBt/Ldte3YExHGhulQIMsFUdeTebOOIZgVfUtZKQLU0cWc8K+ewChN7HNlQ2UzX2BJRsrY15XpTw8AxwqIj4RyQUOBFaJSJ6IFACISB4wGwg7Q1Glht++YA16f/Kig/xl2RnpZGeEJiRtaWvnvvfXB5SV77Za7HVmoXLTIEv1qs66CwfkZvLfSw7hlKkjACuJqZuzpljwAFWlukNEHgY+BCaISLmInC8iF4nIRQDGmFXAy8BSYD5wrzFmOTAUeE9EltjlLxhjXk7Mb6FiLXgJsKKcjJAUDre/Gbom66df7ga8lxZT/ZeG3KpXdTbw3Rn/4GRLXru9NmB9RicfTXqaDipVPWeMOTOCY/4I/DGobB12t6HqG5wkol6KczJDhjPc8trqkOM+2eAEWfqxqjpoS5bqVZ21ZDnjH5xvgpc/sjjgGCcNRJrO3FFKxVBns5mLcjMCxmS1tIUPyECDLBVIgyzVaybuURD2ZlbZ0EJRjpWTxn2TuuqJJfzn4y8pm/sCu+qsb5PakqWUiiXny9+xk4aG7CvKyQgYk+X+ojhmcF7I8dpdqNw0yFJx9ebPj/BvF2T7wrdk1Tf7W7Lc6349tqCcO95cC8Da7XWAd4ZlpZTqLue+dPqM0pB9xUFB1m7X0mDnHTI65HhtyVJu+m5QcTV6UB43nrYPuZnpPLdkiz9BabCqBteYrKCblBNUPbdkMxC4iKtSSvWU08Lu1QpVHNRdePpdH/q3R3pkdtcgS7lpS5aKu7MO3JPTppWSn+XzzH3V0tZOXXObf52wLF86I4o7bl7BC7BqNnilVCx8vG4n065/lfLKBsA7QCrOzaShpY2mVuvLnTNsAQLXaHXkZKTHqbYqFWmQpXpNuO5Cpym+KLfjW+TUUcX+7eaggabVmqRUKdVDDc1tfOfuj9hd38L7a6x1vgs9WrIKc8JnfXe+DP7kqHH+Ml1SR7lpkKV6TZYvnZ11zSzfVBVQ7jTFO2OyANpdrVfB2ZY1E7xSqqfueXedf/vDtTsBKMzxaMlygqyg+9BDFxxIdkY6G246kZ/NnhDHmqpUpkGW6jWbKq2MyFc8ujigvMrOQeMOsoK7CN1qwmSNV0qpSDW0dIztrKhpAryztTtjRSvtlqw9CrMBOHjsoHhXUfUBEQdZIpIuIotE5Hn7sYjIjSLyhYisEpHLXOW3isgaEVkqItNd1zhXRFbbP+e6ymeIyDL7nFvFbm8VkRIRmWcfP09EBsTuV1e9LTfTuoHVNwcOXHea4YtzM/1l5x8aOmsH4JBxA8POUFRKqUilB3Xr5Wamh2R7h9D1C9uM4Yz9R8a/gqpPiKYl63Jglevx94GRwERjzN7AI3b58cB4++dC4E6wAibgOqz1vw4ArnMFTXcCF7jOm2OXzwVeN8aMB163H6sUV98cGCQ5N69iV0vWgWMGcurU4SHn7jO8iNrGVoymcVBK9UBaUL69cLMCi+38fU8s3MhfX1tNdUOLf5yW2x++tR+3njkt9hVVKS2iIEtESoETgXtdxT8GrjfGtIN/NXqAU4AHjeUjoFhEhgHHAfOMMbuMMbuBecAce1+hMeYjY31yPgic6rrWA/b2A65ylYKc1qmB+VkB5f6B70E3rj98K3TlkuLcTFrbDY0tnWddVkqpzjizBR0ZHq1Y0DEh55UV27j5tS9oam33L/3l9u2ZIzl5SugXQ9W/RdqSdQtwFeD+ZBsLfEdEFojISyIy3i4fAWx0HVdul3VWXu5RDjDUGLPF3t6KtTBrCBG50K7Hgu3bt0f4K6ne5qxDuKailo/W7fSXOy1Zwd8OM32hb0/n26amcVBK9UR1Q2CLenuYcaAFWT6CF5nwaslSykuXQZaInARUGGMWBu3KAhqNMTOBe4D74lA/P7uVy/OvwBhztzFmpjFm5uDBg+NZDRUjZ9z9kX+7qqGFgmxfRMvl+IOsJh2XpZTqvuAvam1hhiCkpUlIK7smHFWRiqQl6xDgZBHZgDXu6igR+TdWi9NT9jFPA/vZ25uwxmo5Su2yzspLPcoBttndidj/VqD6jMcXWA2b7mzvncnNTPff3F5dsS2udVNK9T0V1Y18vrUGsJbSmVJaxEMXHAhAZ+s+uyflgHc+LaW8dBlkGWOuMcaUGmPKgDOAN4wxZwP/BY60D/sa8IW9/Sxwjj3LcBZQZXf5vQLMFpEB9oD32cAr9r5qEZllzyo8B3jGdS1nFuK5rnLVB1z5xFIAKuub/YNLw3niooNY+Mtj/cte/P7lz+JeP6VU3/LnV7/gwn8t4NFPvuLtL7ZTmJPBADuAamsPH2UFfwnUliwVqZ7kyboJ+KaILAP+D/ihXf4isA5Yg9WNeDGAMWYXcAPwif1zvV2Gfcy99jlrgZdcz3GsiKwGjrEfqxT2N4/ZN1UNLSHN8cGGFmaTk5numcdGKaUisb22iW3VjVz95DLACpacAKqz3HwDgluydEyWilBUn1jGmLeAt+ztSqwZh8HHGOCSMOffh8fYLWPMAmAfj/KdwNHR1FElt69PGc5PHl7kf9zWbqhsaGFYcehCq27OjTA3U9cFU0p1T3VDS8DM5NxMn78V/dDx4ZOLBn+505YsFSl9p6iEqm1qpaq+65Ys5yZXktd5t6JSSoVTHTTYvd0YcjLTee2nhzOiOHSxZ4cvaFKOtmSpSOmyOiqhXl2x1Rr4Huam9eiFs7jsqHH+RVcLsjM484CRDMrXYEupvu65JZu5/JFFXR8YoXBpG8YNKSCnk1Zyd+JSEcjP1PYJFRl9p6iEcga/h5tdeOCYgRw4ZmBAWWF2hi6to1Q/4AwtuOU7U/1ftHoiuCWrLcKFI9xL8ORn+UKyxSsVjrZkqV53zzkzQ8q66i50y8/y0dTaTnOrZn1Xqi9qbWvn0692+x/HIi9eS1t7yLqpwd2A4fjSO47T9A0qGhpkqV537KSh3HDK5ICyoi5SOLg5g05rNSGpUklnWXkVzyze1PWBnbjltdV8444P/I8r63q+woNX6/cvTtg7onOvOHYvTp06nIl7FOigdxUVDbJUQhw8LnAmTzQtWU6uLF1aJ3k9v3QzmysbEl0NlQBfv+09Ln9kcY+usXxzVcDj+95fzwtLt4Q5OjLOGqmO35w8mcEFWWGODjQoP4tbzpjGKVNHcOwkz9XdlPKkIblKiOAFViPJ+O7I969fqC1ZyaiptY1LH1pE2cBc3rryyK5PUH1SW7uJaKksL8HdePd/sIH7P9jApsqJfG9WWaeD1MOpDgqy3F2AkfrxEWOjPkf1b9qSpRKiIGhcQzRBltNcHzyIVSUHp8Vgw856Xl+lyx/1V8FBTbC/vPo5ZXNf8NyXFmaQ++9e/Ixb31jdvfoEp2/oJPmoUrGiQZZKiOyMwLdeNN2FzsDTr3bWx7ROKjaq6js+zM5/YAG765oTWBvVm9yBy+76zv/fb31jDQBLyytD9nXWAnbnW2tZsjH0nK4Ep2/I09UjVC/QIEslhIhw5XET/I9zMiJv/ncSk859alnM66V6Lnjsy7Qb5iWoJqq3nXL7+/7to/78Nluquh6Xd/Jt71O+O/ALU2sXrUxXPLY46roFt2SdMnVE1NdQKloaZKmEufDwMf7taHLg6Oye5FZZr924/dWyTYED1p9cWB7ReTtrA1u9uprUUtuN8ZhO9+WSa2fzxW+P7/Z4MaWioZ9WKmEy0tN47aeHs6myMarz8jXISmqVXYzFUf1HuBap4PQrdc2Bj4O79oLtqG3qdP+aihqeXrSJn8+e4P8CV93Ygi9NKMzxxSSxqVKR0E8rlVDjhhQwbkhBVOdk+WKzSPQFDy5ga1Ujz/3k0JhcT1mCuwuTlYjcB5wEVBhjQhaot485ArgFyAB2GGO+ZpfPAf4KpAP3GmNu6oUqp5y2MEHWcTe/E/B4tysP1twnl7JyS3Wn1x2Y33nqhWP+Yl1/UH4W+5eVsM+IIqobWinMydAAS/Uq7S5UKWnGngMA+HxrTbevMW/ltpDuDdVzVV0MeE4i9wNzwu0UkWLgDuBkY8xk4HS7PB24HTgemAScKSKT4l3ZZPXe6h2s3tbxd+iOYZrbvFdl2BSUQ22X/Z5paG7jkU82AvD9g8u4+3szyPNI1zCqJHAx5911zVz60KcBky4AfvPcSk7623uAFfwXaiu46mUaZKmUNHVkMQDH3fJO5weG0dTasbxG2dwXPGc4qe7xaslKxiWQjDHvALs6OeS7wFPGmK/s4yvs8gOANcaYdcaYZuAR4JS4VjZJrdpSzdn/+Jhjb37H/zf189kdE1q66vZz7K5rZu32Wva+9mV/WWFOBrMn70GGL/Bj6qT9hoXMWP3He+t5fukWHvxwQ9j3WnVjC4VRzGJWKhY0yFIpqaeDVn/7/KqAxyff9n6YI1W0vMZkpWh2/r2AASLylogsFJFz7PIRwEbXceV2Wb/zj/fW+7edgMrdWlQZYavm7vpmTvjruwFlTgtWelD3Xklepr/ly+HcDv487wse+vjLkOs3trSxpbJR1x1UvU6DLJWS3GM9upNUcFUXYz5U9NrbDS8u28Iuj7xYKbrOpA+YAZwIHAf8SkT2iuYCInKhiCwQkQXbt2+PRx0Tqt10/O3d/4EVcLlbi5z3gjGGV1Zs9b9Hgu2ua6YpqAXK+bOePKIooHxAbiZVDS0B94A015euu99ZF3L9b9zxAZ9vq6EwR7sLVe/SIEulpBP23cO/Xdsc3Qd4e7thwZe7Y12lfu/RBRu5+D+f8u7qHf6y06ZZDTyPfrIx3GnJrBx4xRhTZ4zZAbwDTAE2ASNdx5XaZSGMMXcbY2YaY2YOHjw47hXuba4YixeXbQWsIOvec2YC8PH6XWyubOA7f/+IH/1rIf/66EvmrexYBWD2pKGMHZzHLo+0H23tVtB123en8eAPDvCXD8jNwJjAbml3PbYHzTwUwT+QXluyVG/TIEulpBl7ljB9VDEQfc6ciprOp3+r7tniGsw8ojiH7x9c5g+y7nhrbaKq1RPPAIeKiE9EcoEDgVXAJ8B4ERktIpnAGcCzCaxnwpTkZfq3d9rBTVFOBsdMGsqI4hwATr39feZvsIa+fbGthhbXYPjvH1LGyJJcdtc1M2Fo4CzjskF5gBUYHb7XYB74wQHMu+JwBtjP+dySzRg7unKvY9rSZpV9Y/oIvjNzZEAAlpupLVmqd2mQpVLW+YdayUyjXSg6XNfV1qro8nWpQG0msNv21ydPDvgQTjYi8jDwITBBRMpF5HwRuUhELgIwxqwCXgaWAvOxUjUsN8a0ApcCr2AFXY8ZY1Yk5rdILHdrUrX9d+gskeX837u/1Pzn46/8qztcfMRYDh47iJLcTJZtquJz1wzFScMKOXHfYQHP9bW9BjN+aIH/utc9u4LXVlWE1MNx8RFjmWZ/EXO0G12vUPUuDetVynIyv0c6qPrTr3bT1m7CLj774IcbuGrOxJjVr79xJ54ckGd90IZ7rZOBMebMCI75I/BHj/IXgRfjUa9UUtVgJfh0/987XXK5HqkXAB63s8D/zJ6F6JW36vGLDgqbz2pAbkfgvnFXvb8ewQpzMvytXo5webuUihdtyVIpy8n8XhPhoOpv3PEBp9/1IVUNHQOzhxZ2JDXUZTZ6xj0BIdtOGLvnwNxwh6s+oKqhhel7DmDy8EJ/mTO4/MiJQzo91/l7S3d9Cn1rRilrbjy+08Wb3a2jTstUdWMLB44uCTiuMDsjpCW1qzURlYo1DbJUyir0t2RF113orK33h2/ux8e/OCbm9eqv3P8Ph44fBEBelo9vzywNCGZV31Hd0EJRTkcwk52R5l+R4UeHj/F3HXYmPa3jY8gY8KV3/rHkbslykp1WN4TmwMrOSA84FuCUqcO7rI9SsRRxkCUi6SKySESetx/fLyLrRWSx/TPVLhcRuVVE1ojIUhGZ7rrGuSKy2v4511U+Q0SW2efcKnY7sYiUiMg8+/h5IjIgZr+5SnkFdrdEJN2Fb3/RMX3e6Vo4dtJQAP56xlSg6/XQVOcq61sYPySft35+BJcdNd5fXpCdQU1jKxXVjSmz5I6KTFVQkOUOqkQkov/v/KyObkVnRmFnclzdkM71nXoE9zC6W7IuP3o8s8YM7PL6SsVSNC1Zl2MN8nS70hgz1f5ZbJcdD4y3fy4E7gQrYAKuw5qhcwBwnStouhO4wHWes9TFXOB1Y8x44HX7sVIA5NtdCu7ZhU8uLPfM3v67Fzreuk5LlvPN9+Qp1rfbh+enZJqBpFHV0EJxbgZlg/IC8hYVZPuob27jgN+9zpTfvOqfEaZSn9OS5bQYdZYiYeIeHbMHb/vuNP/2ZUePZ4/CbADaInxrfHbDHIYWZrGrtpk1FbVsqWokOyONG06xlqBc+Eurhdod9F1+9HjPaykVTxEFWSJSipWQ794IDj8FeNBYPgKKRWQYVjK/ecaYXcaY3cA8YI69r9AY85Gx7r4PAqe6rvWAvf2Aq1wpcjPTSU+TgG6q659fyYMfWhmfaxpbWLu9FoD6lo5jdtU1U5Dt848JcQ+wXbKxko276imb+0JAPh/VtcqGFopyQmcT5geNr3HPIlOpq6WtnbrmtrAtWcFu+66/U4OygXn+7YLsDO4829q374jCkPO8ZGekMzAvi931zVz5xBIA1u+o4+xZe7LhphP9C0i7x1mm6ZhLlQCRtmTdAlwFBLfl3mh3Cd4sIs6gi3BLTnRWXu5RDjDUGOOkB94KDI2wvqofEBHys3z+7sL2dkN1Y4v/8dn3fszRf34bgF21HYPd//XRl2GzxJ9y+/tc9O+FAFzw4IJ4Vr/PcVo1ghUELcqrM7z6hmq7q67INYsv+P/fSRr89MUHB0yCCG7xmjZqAC9edhg/tNOyRKIkL5PXVlWw6KtKQHNgqeTUZZAlIicBFcaYhUG7rgEmAvsDJcDVsa9eB7uVy/Pu3NeXrlDh5Wf5/LMLaxpbMaYjD9aS8irAWpw4+I1T19xGOJ9t1ZaWaNQ2tbKsvIrK+maKc0ODrOA0DvWdvPYqdTjjoQpzfAy0g6zgwed/+fZU3vjZ15g2agAZrgHtXsH4pOGFUbU2Ld9cFfDYSX4azJcmAespKtWbInnnHQKcLCInANlAoYj82xhztr2/SUT+CfzcfhxuyYlNwBFB5W/Z5aUexwNsE5FhxpgtdrdihVcFjTF3A3cDzJw5U78m9yMF2T5/d2GlnZqhprGVBtcHeW1TK9NGFfP+mp1hr/Ojw8fwd481z1TXLvrXQt5bYy2l4/XhGTwEK0UXi1ZBqlwtWTkZPv+2W3ZGOmMG5/sff/fAUQwrzKbIIxiPli8oIJt7vHeOu2W/Pq7Hz6VUd3XZkmWMucYYU2qMKcNaPuINY8zZdtCDPRPwVGC5fcqzwDn2LMNZQJXd5fcKMFtEBtgD3mdjrQu2BagWkVn2tc7BWs7CuZYzC/FcV7lSgNXt4HxoOwPaaxpbeWxBR8/0y8u3dhpgARw0tmPWkWaFjty26kZ/gAV4tmQNzA8cpxVtyg2VnNxBljMmq6sWo9+dti8/idEA9OAcWNkZ3slPczLTA2YkKtWbepIn6z8isgxYBgwCfmuXvwisA9YA9wAXAxhjdgE3YK379QlwvV2Gfcy99jlrgZfs8puAY0VkNXCM/Vgpv/xsn7970Lnp1zS20NjS0ZL14Icbur6Oa3C2O8b6Qgdpd+rgm94IeOzVknVUUFJKDbL6BvcyOoPsQLo3l1GasWdJ1wcplWBRdVQbY97C6uLDGHNUmGMMcEmYffcB93mULwD28SjfCRwdTR1V/1KQ7WPF5iZeWbGVplZrXkZNYyv/99Jn/mO8xlg98IMDAh6HW/1l9s3vsPrG4wPGk6gOwYPYvYKs4OVRNMjqG77aWQdY47AG5mfxz+/vz4yy3ktl+OuTJ7F8UxXLNlV1fbBSCaKfHCqlFWT72FbdxI/+tZD3VluTHpxgK5h7OvfX9hocsG/0oPzgw/0mXftyDGradzz44Qb++f56z33FuV23ZNQ26ZisvuBPr34BdATWR04c0mmerFjL8qXzf9/YF4AHg740KZUsNMhSKS0/q+OmvqmyodNjT506Iuy+krxM/nne/p77WtqMZ4LT/uraZ1bwm+dWstqjK7WrZVRyMtK1JSvFtbUbHvr4K/9jZxmdRNhnRBEbbjqRw4O+NCmVLDTIUinNvSTHrrrOW0huPG0fPv3Vsbzxs6957j9yQvgFbZeWa5dEsGNvfiekrDhMkDX3+Ilk+tIYmJ+pQVaKe/LTcn7x9LJEV0OplKBBlkppza6uwU276zs9NjsjnZK8zIAp5cGWXDsbgIF5mQGD4dM1W7SnLF/gLSQ4T5Ljoq+N5YvfHu9fx1Clrmpdf1KpiGmQpfqM6qAP76vmTPBvf91en7ArRbkZvHf1kbzxsyP49FfH+ss1xLIEZ8pvam3nimP28j/uKhi18prph3Qqc/8fO4urK6W8aZClUlpbJzmt3Bmg/3bmtLDHBSsdkEtRbgaZvjSe/PHBQN/MUr6jtol/vr8+qgWba5tDW6EGFWTywmWHcst3pnZ5fkFWR8oNlZrcrcddjcFTqr/TtQZUSvv2zJHc/uZaz32HjR/MMXsPZdqo4m5ff7/SIoA+Fxhs3FXP/zy6mIVf7mb9jjquPyUkg4qnqvrQVqiinAwmDy9i8vCiLs8vyPaxuqJvvZb9TaWruzCS2aRK9WfakqVS2p4D8/jX+d7Tt0vyMrn33JlccuS4bl8/Iz3NnhHXd7q4jDEc9oc3WfjlbgAe/PDLiM+t8hiPU5wT+QdtgStDv0pN7vdAuIkOSimLBlkq5R02PnT69uhBeTG7vnt9xL7Aa3HsY/7ydkTnegVZ0XQZ5Wf72F0fmJFfpRZ3a6Z2FyrVOQ2yVJ9y7kF7cudZ03n4glkxu2Z+to+aPtRd6BUoramo5bklm7s8t9Kju9BrvcJwWtus8Tw/e2xJxOeo5OIsxA7hZ5MqpSwaZKk+5dqvT+b4fYexR1F2zK7Z19IOVNY3e5b/5OFFfO6xBFHAufYHrDtxa1EUQZYdY/Haqm0Rn6OSw/JNVfz62RXsduWj09QmSnVOB76rPiUeN/3CPpZ2wKsly/HW5xVM2KOgy3MPGjPQX5afGf1tJNzSRyp5nXf/J2yvaSLLl8Zp00bwl29PSXSVlEp6GmSpPuHm70zpMuN7dxVk+9ha1RiXa/e2Nz+r4Lz7Pwm7v6sgtaq+hSxfGtkZHZn206IIbEcMsNJq5GQkbikW1T1OjrSm1naKczNCFv5WSoXS7kLVJ5w2rZTzDx0dl2vnZ/moamihrT3yfFLJyBjD4ws3BpTtM6Iw4HGXQVZDS48GO3//4DIAxg3J73NpMfo693tDB7wrFRkNspTqQkF2BhU1TRxw42uJrkqP3PHWWl5ctjWgbOaeJQGPW9s6DyQr61uiGugeLD1NmD6qmGWbqvjTK593+zqqd+2obaKipsn/WFM3KBUZ7S5UqgsF2dafyc66ZmqbWgPWNEwlD364IaQsM2jtwa7GnlU2NPtbMd696khau9G6l2e/fjozLTVU1bcw87eBXzA0CalSkdGWLKW64A6q9rnuFTZXNiSwNt3XFjTWfMNNJ4Z0gXaVqqKqoZUiO/noyJLcbuUjc1bx0daQ1HDmPR+FlDlfPJRSndMgS6kuFGYHBgObUjTIavdYo9AJsk7cbxhDC7O6TFVRVd/co+5Cdz10XE9qWLmlOqQsiuUulerXNMhSqgt5Qd2DqfoB4zVwf9Jwa+D76TNKKcrpesmbng58d9ejp8FaT4nIfSJSISLLw+w/QkSqRGSx/XOta98GEVlmly/ovVon1q9OmgTQaZoPpVQHbfNVqgvBM9XrUmhW3O66ZtLThcLsDP8UfLfTZ5SyX2kRE/co5NbXV7O7roWtVY2eyVybW9upa27rcTef05KV2438WjF2P3Ab8GAnx7xrjDkpzL4jjTE7Yl6rJDNjzwH+dS7PnjWK8w4uiypth1L9mbZkKdWF4Bag6hRKTDrthnns9+tXaW83tLma4PYcmAuAiDBxD6s1qyA7g/kbdjHr/16nqTV0bUEnEWk0Gd69OK9norOFG2PeAXYltBIpwP3+z/Kla4ClVBQ0yFKqC4eMGxTwOBXzOx32hzcDPixfuOywkGPcg5lrPcZm+YOsHrZkzT1+b0aV5DJ5eGHXByfeQSKyREReEpHJrnIDvCoiC0XkwkRVrjdUNbRQkOXj0iPHJboqSqUcDbKU6kJJXiYP/OAA/+NUXMdwU2WDfymbk6cM90xD4Q6yvH7HKnvdwp4GWQeMLuGdq44MGeuWhD4F9jTGTAH+BvzXte9QY8x04HjgEhE53OsCInKhiCwQkQXbt2+Pe4VjbXddM+t31HHKtOH8/LgJia6OUilHgyylIuAOSlJlHcPW4JwNwEVfG8ufw6w5V+CaRenVWue0ZPWXHEnGmGpjTK29/SKQISKD7Meb7H8rgKeBA8Jc425jzExjzMzBgwf3Us1j55qnlgGwfkddgmuiVGqKOMgSkXQRWSQizweV3yoita7HWSLyqIisEZGPRaTMte8au/xzETnOVT7HLlsjInNd5aPta6yxr9k/7u4q6RR20ZWWjKo96jl6UC4Z6d5/9gWuQNJr3FllvR1k9ZPUCyKyh9gL9InIAVj3y50ikiciBXZ5HjAb8JyhmEyeXFjOturo1uD8alc9AJlh3jNKqc5F85dzObDKXSAiM4EBQcedD+w2xowDbgZ+bx87CTgDmAzMAe6wA7d04HasZvdJwJn2sdjn3mxfa7d9baV6XV5W511pyWZbdSPTb5gXUu4kEvWS7wokv3vPx1QEfSC/v2anfY2+EWSJyMPAh8AEESkXkfNF5CIRucg+5FvAchFZAtwKnGGMMcBQ4D27fD7wgjHm5UT8DpHaXdfMzx5fwvkPhF8c3IszOWHM4Px4VEupPi+iQREiUgqcCNwI/NQuSwf+CHwXOM11+CnAr+3tJ4Db7G+DpwCPGGOagPUisoaOJvY1xph19nUfAU4RkVXAUfb1AR6wr3tn1L+lUj3kzunk1UKUbJaVV/m3T9h3D/+ahZ0FSAVBSVdXba1hSKGVyqG93fDkp+VA31kOxxhzZhf7b8NK8RBcvg7w7nNNUpV2V++XO+qjOm/80HyWbariSh2PpVS3RNqSdQtwFeAe5HEp8KwxZkvQsSOAjQDGmFagChjoLreV22XhygcClfY13OVK9brcTB+rbzye/csGUNuUXGOy1lTUsqaiNqDMna7h8PEdY4E6SwAavFSKM1P/2meWM+YXL/rLE516QUVvd701aSGatSZP+Ou7PPXpJiYPLyQ7Iz1eVVOqT+syyBKRk4AKY8xCV9lw4HSsGTcJl+ozeFRqyEhPozA7w99d+MAHG3jKbt1JpGP+8jbH/OXtgGSjzkxCgNIBuf7tzlqygsfdNLVY13jwwy9jVVWVAMYYHp1vfY/1yvrv5X8eWeRfTmdAP5nooFQ8RNKSdQhwsohsAB7B6sJbAYwD1tjluXb3H8AmYCSAiPiAImCnu9xWapeFK98JFNvXcJeHSPUZPCp1FGT7/EHWdc+u4KePLUlwjTqc4VrIt7qho7VtZEmOf7uzlqzgtQ3fX9vnk5n3Cx+t28WjC6wgq7W9HWMM97yzjkq7dcvLfxdv9m+nUvJdpZJNl0GWMeYaY0ypMaYMa+D6G8aYAcaYPYwxZXZ5vT04HeBZ4Fx7+1v28cYuP8OefTgaGI81aPQTYLw9kzDTfo5n7XPetK+Bfc1nYvA7K9Vt+dk+apta+fWzKxJdlRDz1+/yL/mz2bWI9bCijiArp5Nun8nDiwIe//P9DbGtoEqIKlfA3W5g4Ze7ufHFVVz5xFLPpZZMULC91DW+TykVnXjMy/0HMNBu2fopMBfAGLMCeAxYCbwMXGKMabPHXF0KvII1e/Ex+1iAq4Gf2tcaaF9bqYQpyLYWUb7/gw2Jroqnyde9QkNzG3e8tdZflulL47+XHMIvT9wbCV6I0WWPomw23HRip9d/5X88c26qJBbcRbhis9UNOG/lNv7vpVUhx1fUNAU87uQto5TqQlQpl40xbwFveZTnu7YbscZreZ1/I9YMxeDyF4EXPcrXESbJn1KJUJDto6Ut8sHD8bZxV+hssU2uVizH1JHFTB1ZHNE1DygrYf4Ga0m/tnZDZnoazXZi0+wMzZeUStrbDf9dHDjK4jpXK+w9767nf0+cFLD/wN+9HvD4f0/YO34VVKqP0zumUlEoSKKlYLbXNHHYH94MKfcKsqLx2EUH+bdvfGEVzW3tHDZ+EFfNmcCoktxOzlTJ5pKHPmXeym2dHrOmosa/HdyydcFho/nhYWPiUjel+gMNspSKQnAuKYCm1rYE1ISw2bvLd3e0bs3/xdHduvb3Dy4D4MEPNwDWDMWLjxjXaXejSi4/eXgRLy3f2uVxH6/f5d/++9vr/Nt7DyvkF9qKpVSPaJClVBSCc0lB5MvsbNxVz78/stIhPPTxV3y5s2frwTW2eAd3G3d1tGQ5yUSjNXGPAqAjr5JPc2OlnOeWbA54vPCXx3ge979PL2fDjrqQtS6fvfQQDaqV6iENspSKgnuh6KMmDgG8F1P2cta9H/PL/y5ne00Tv3h6GU8s7FmOLfesMbe73rYGvb90+WHdvnZwi50mIE19A/Oz+MEho/2Phxd1BOBH/OktfvVMx1it+8/bP+wal0qpyOlfkVJRcAcfB48dCES+luHWKqt7zxkz1dM1EN1B1on7DgvZP2JATkhZpPKDWuxmjSnp9rVU8shI7wiWXwqaKfrw/K/82wPzsnqtTkr1ZRpkKRUFd3dhqR3EBCdrrG9upWzuCzwTNKvLSfbpjJnqaZLHynrr/LKBufz521MYPSgvsK49GKQf3C06Z5/QIE4lh1dXbPV3Q7sNyu/I1P7N6aVAYItkZ9n/czJ1GR2lYkGDLKWikOcKXIYXW0FW8JgsJxHoX19bHVDurCfojJmKdCxXOE5L1us/O4LsjHSe+8mhAft7Mp4mmWZRqs5d+K+F/PK/y/nJw4tYva2Ge99dx+WPLGK3HYQfMLqEP3/bWs96gj3WbsaeAwC46Rv7hlzvtGkjGDs4L6RcKRU9vZMqFYVi17d/pyVg8cZKZk/ew1/e0GwNIE4LGsfkJNJ+YqG1xEksugsLs33+1oncGC7i6+4Wvf6UyTG7roqf55ZsZv2OWpZvqvaX/fLEvQNSMJw8ZTilA3KYPsoKsiYOKwy5zmVHj9cB70rFiLZkKRWFtDThvauP5NELZ/kDkTveWhuwDpzTwpQe5oNq7XZrVmFNU/e7C19buY37P9hAkWstQndQl+Xr2Z+2u7vwzANG9ehaKnbCzSh1tAYlyi0MmsAgIszYs8QfRA0uCB17VaILQisVMxpkKRWl0gG5HDhmYMBMw7+/05FfqLLBCrg+31YTcq5bcHfhu6u3+9ceDOe793zEfr9+hR8+uAAITNfgtvL6OZ1epyu5rjE5OsssOby7ejsTf/Uyn361O+wxrUFL6Bg6X51gYF5oQOWVpkQp1T1691SqmzJdrUXuNXXds/427Kiz94d+2NU0ttLa1s6Vjy/h7S+2871/zOfqJ5d6PldVfQs/eXgRH6zdSXUn3YzFuRkcNn5Qj1MuaHdR8nl39Q4APlq3018W3LIVnOuqq1mC2UFdzL87bd+Qbm6lVPfpVxalYsyZ9QdQ12wFRF6tWjWNrazcUs3jC8t5ZrGVOHL1tlrPaz7w4YaQ5JJeFl87uztVVinASQjb5uoSdL/XABpbAoOso/ceEvH17zxrOsd7pAJRSnWftmQp1QNn7D8SsFoQ3vysgkse+jRgfJbzoTfnlndDzm1ua6e+uc2/DYHjqowxVDe2sKailr/M+yJuv4NKXht31fPnVz+n3dUN2Oxqrdrteq8BbK9tAuDICYNZc+PxEbVIzp40lNOmjdAAS6k40JYspXrgpm/uxyOfbOTe99Zz73vrQ/bXdJELa0tV4Jiq9DQrf9ZrK7dRWd/C9c+vDMl/5XZAWfyShP71jKnkZeotIpF++thiPtmwmxP2HebPq7ajtiOw2l0XGGS12cHYN2eU4otwLN3d58yMUW2VUsH0DqpUHHWVpqE8aOB6mghXPb6Ul1ds9eeqWr/De43DTF8a9523f2wq6uGUqSPidm0Vmbomq6XzzrfW+gOo7TUdC4M/t3QLAPOuOJwFX+7mmqeWATpDUKlkod2FSsVR8LqGZ88KTIdQvjs0yNpoZ4Rv6GK6/nkHlwXMcFR9zxf2WL5nl2zmhWVWQLW9psm/31kKZ0BeJoPzOwa5D/CYNaiU6n0aZCkVR8HdhVfOnsjUkcUcNn4QAOWV9SHnOC0WwdPxg1153IQY1VIlo61VjZ7vgQpXkOUozskIyHlVokGWUklBgyylesgZ/B5MpKO7MDcznR8eOpqi3Az+e8khXD1nIhCa56quqdUfZHUl0jE3KjXtChpv5dhR20R7uwkYDO9LT2NIYUeQVZwbfl1CpVTv0b4GpXro+H2H8cgnGwPK0tOE3Mx0ahpbaWpto765LeCDz0n46Kxz6Niws46cLpbHOWriEMYPyY9R7VWyqqwPDbIy09NobmunsqEFZyLqDw4ZDXTkxMrP8pHl0wWelUoGGmQp1UNe46Le+NnX+O49H1PT2OpPTlqU4w6yrG13d9CQgiwqappoafMeLP/wBbPIyUxn6sjiGNZeJatddpA1fVQxn35VCcCNp+3DlU8sZXtNE750K8rar7QIsCZCDMjNIF8ztiuVNLS/Qake8squvufAPPKzfNQ0tlDtBFmuGV/upUsOHF3Cgl8e0+kagfOuOJyDxg7UAKufuPDBBVz60CIA7jp7hr98z4FWOo9fPL3M353oHuQ+uCBLZxYqlUT0K49SPTS8KNuzvCDbR21Tqz8rd7GrJSsjPY3sjDQaW9opyslgUH5Wp2vGDQ3zHKpvenXlNv92SV4mew8rZNWWav/g9oVf7mannS/Lvf7gifsOJ8Ony+IolSw0yFKqh4YUZnPIuIG8v2YnPz12Ly48fAxgBVk7aps9uwsB8rMyaGxp8o/V6izIKtBUDf1STkY6vvQ0nvrxwTS1tgUs1u20ZLlnEl5+zPher6NSKryIuwtFJF1EFonI8/bjf4jIEhFZKiJPiEi+XZ4lIo+KyBoR+VhEylzXuMYu/1xEjnOVz7HL1ojIXFf5aPsaa+xraju4Skr/Pv9A/nbmNC4+Yqx/0d387AxqGls6WrKCZnwV2kFVsd29E7xYr5su2Bx7InKfiFSIyPIw+48QkSoRWWz/XOva53nPijVnpmlOZjrFuZnkuYJtJ5+apmtQKnlFMybrcmCV6/EVxpgpxpj9gK+AS+3y84HdxphxwM3A7wFEZBJwBjAZmAPcYQdu6cDtwPHAJOBM+1jsc2+2r7XbvrZSSUdE+PqU4QFpFfzdhWFaspyWK6e83USWukHFzP1Y96LOvGuMmWr/XA/WF07C37N6zLjeBy3t7SH7vzdrTwA+21JNXmZ6p8G5UiqxIgqyRKQUOBG41ykzxlTb+wTIAZw7wynAA/b2E8DR9jGnAI8YY5qMMeuBNcAB9s8aY8w6Y0wz8Ahwin3OUfY1sK95ajd/T6V6XUGWj511zVTVNyPSMaPQkR8UZAlWa9XpM0oDjhtRnNMLte1/jDHvALu6carnPStW9apr7sj07xV3H7/PHgCs2lKjmd2VSnKRtmTdAlwFBHytEpF/AluBicDf7OIRwEYAY0wrUAUMdJfbyu2ycOUDgUr7Gu5ypVJCWppgDNz6xhoKsnwhsxALsqzgygmy5uyzB2cdOIqrj5/ozwh/x1nTeX/uUb1bceV2kD0s4iURmWyXhbtnxcSuWu8kpA4n6ejW6saAQe9KqeTTZZAlIicBFcaYhcH7jDHnAcOxuhG/E/vqRUZELhSRBSKyYPv27YmqhlIBmls7vpNUeywUXeAfk2UFWdkZ6dx42r4Mys/iwR8cwMMXzPK3WqiE+BTY0xgzBetL5H+jvUB37k076zqWzTliwuCQ/UMKO2aa6ngspZJbJC1ZhwAni8gGrGbxo0Tk385OY0ybXf5Nu2gTMBJARHxAEbDTXW4rtcvCle8Eiu1ruMtDGGPuNsbMNMbMHDw49KakVDJyug+Lc0I/KEWEg8YO1AHvCWSMqTbG1NrbLwIZIjKI8Pcsr2tEfW/abSchvfXMadx51oyQ/QVZPrIzrFt3SV5WyH6lVPLoMsgyxlxjjCk1xpRhDVx/A/ieiIwD/5isk4HP7FOeBc61t78FvGGskZzPAmfYsw9HA+OB+cAnwHh7JmGm/RzP2ue8aV8D+5rP9PQXVqq3dLU8TvCYLJVcRGQP+/6GiByAdb/cSZh7VqyetzA7g6MnDmH/sgHkZIa+h0SEoXZr1sB8bclSKpl1N/mOAA+ISKG9vQT4sb3vH8C/RGQN1qDSMwCMMStE5DFgJdAKXGK3giEilwKvAOnAfcaYFfa1rgYeEZHfAovsayuVEn58xFhue3NN2P3DirLJ9KVRoh+UCSEiDwNHAINEpBy4DsgAMMbchfUF78ci0go0AGfYX/5aO7ln9djMshL+8f2STo8ZUpDFlzvrtbtQqSQXVZBljHkLeMt+eEiYYxqB08PsuxG40aP8ReBFj/J1WDN5lEo5eV0kEP3m9FIOGjPQc+1DFX/GmDO72H8bcFuYfZ73rN4ypMBqydIldJRKbrp2oVK94PmfHBpSlulLo2xQXgJqo1KdM8NQW7KUSm4aZCnVC/YZUZToKqg+xN+SpV3NSiU1DbKUiqMZew5IdBVUH7TX0Hwy0oXSAZqoVqlkpoNBlIqjhy44kKbW0KVRlOqJoyYO4aNrjmZgvqZwUCqZaZClVBxl+dLJ8unaciq2REQDLKVSgHYXKqWUUkrFgQZZSimllFJxoEGWUkoppVQcaJCllFJKKRUHGmQppZRSSsWBBllKKaWUUnGgQZZSSimlVBxokKWUUkopFQcaZCmllFJKxYEGWUoppZRScSDGmETXIaZEZDvwZYSHDwJ2xLE68ZBqdU61+oLWubdEU+c9jTGD41mZeNN7U1LSOsdfqtUXYnhv6nNBVjREZIExZmai6xGNVKtzqtUXtM69JRXr3FtS8bXROveOVKtzqtUXYltn7S5USimllIoDDbKUUkoppeKgvwdZdye6At2QanVOtfqC1rm3pGKde0sqvjZa596RanVOtfpCDOvcr8dkKaWUUkrFS39vyVJKKaWUiot+GWSJyBwR+VxE1ojI3ETXxyEiI0XkTRFZKSIrRORyu7xEROaJyGr73wF2uYjIrfbvsVREpieo3ukiskhEnrcfjxaRj+16PSoimXZ5lv14jb2/LBH1tetSLCJPiMhnIrJKRA5K5tdZRK6w3xPLReRhEclOttdZRO4TkQoRWe4qi/o1FZFz7eNXi8i5vVH3ZJKM96dUvTfZdUmp+1Oq3Zvseuj9KRxjTL/6AdKBtcAYIBNYAkxKdL3sug0DptvbBcAXwCTgD8Bcu3wu8Ht7+wTgJUCAWcDHCar3T4GHgOftx48BZ9jbdwE/trcvBu6yt88AHk3ga/0A8EN7OxMoTtbXGRgBrAdyXK/v95PtdQYOB6YDy11lUb2mQAmwzv53gL09IFHvkwS8L5Py/pSq9ya7Lil1f0qle5NdB70/dfa8iXgTJfIHOAh4xfX4GuCaRNcrTF2fAY4FPgeG2WXDgM/t7b8DZ7qO9x/Xi3UsBV4HjgKet9+UOwBf8OsNvAIcZG/77OMkAa9rkX1TkKDypHyd7ZvYRvsP22e/zscl4+sMlAXdxKJ6TYEzgb+7ygOO6+s/qXJ/SoV7k/28KXV/SrV7k/2cen/q5Dn7Y3eh84ZwlNtlScVuQp0GfAwMNcZssXdtBYba28nwu9wCXAW0248HApXGmFaPOvnra++vso/vbaOB7cA/7W6Ee0UkjyR9nY0xm4A/AV8BW7Bet4Uk/+sM0b+myfCeTqSk//1T6N4EqXd/Sql7E+j9iS5e7/4YZCU9EckHngT+xxhT7d5nrPA5KaaEishJQIUxZmGi6xIlH1az8Z3GmGlAHVZTsV+Svc4DgFOwbsDDgTxgTkIr1Q3J9Jqq7kmVexOk7P0ppe5NoPenrvTHIGsTMNL1uNQuSwoikoF1E/uPMeYpu3ibiAyz9w8DKuzyRP8uhwAni8gG4BGsJvm/AsUi4vOok7++9v4iYGcv1tdRDpQbYz62Hz+BdWNL1tf5GGC9MWa7MaYFeArrtU/21xmif00T/VonWtL+/il2b4LUvD+l2r0J9P7U6evdH4OsT4Dx9syHTKyBd88muE6ANaMB+AewyhjzF9euZwFnFsO5WOMhnPJz7JkQs4AqV9Nn3BljrjHGlBpjyrBexzeMMWcBbwLfClNf5/f4ln18r38jM8ZsBTaKyAS76GhgJUn6OmM1w88SkVz7PeLUN6lfZ4+6RPKavgLMFpEB9jfk2XZZf5GU96dUuzdBat6fUvDeBHp/6vz+1BuDzZLtB2vmwBdYs3j+N9H1cdXrUKzmyqXAYvvnBKz+6teB1cBrQIl9vAC327/HMmBmAut+BB2zd8YA84E1wONAll2ebT9eY+8fk8D6TgUW2K/1f7FmiiTt6wz8BvgMWA78C8hKttcZeBhrTEYL1jfy87vzmgI/sOu+BjgvUe+RBL43k+7+lMr3Jrs+KXN/SrV7k10PvT+F+dGM70oppZRScdAfuwuVUkoppeJOgyyllFJKqTjQIEsppZRSKg40yFJKKaWUigMNspRSSiml4kCDLBV3Yq0qf7G9PVxEnojjc00VkRPidX2lVN+i9ycVTxpkqd5QjLXyOsaYzcaYb3V+eI9Mxcrfo5RSkShG708qTjRPloo7EXkEa22rz7GSvu1tjNlHRL4PnIq11tV4rEVGM4HvAU3ACcaYXSIyFisx3GCgHrjAGPOZiJwOXAe0YS0yegxWgrgcrKUO/g9rRfi/AfsAGcCvjTHP2M99GtaSDiOAfxtjfhPfV0IplWz0/qTiKhHZYfWnf/0AZcByj+3vY910CrBuUFXARfa+m7EWoQUrI+94e/tArGUYwMrEO8LeLnZd8zbXc/8OONs5BiuTdp593BasjL85WJmKE5qVWn/0R396/0fvT/oTzx9n8UalEuVNY0wNUCMiVcBzdvkyYD8RyQcOBh63lsUCrCUbAN4H7heRx7AWJfUyG2uR2J/bj7OBUfb2PGPMTgAReQpr6ZAFsfm1lFJ9gN6fVI9okKUSrcm13e563I71/kwDKo0xU4NPNMZcJCIHAicCC0Vkhsf1BfimMebzgELrvOC+cu07V0q56f1J9YgOfFe9oQaryT1qxphqYL09vgF7VfQp9vZYY8zHxphrge3ASI/negX4ib06PCIyzbXvWBEpEZEcrLEX73enjkqplKb3JxU3GmSpuLObvN8XkeXAH7txibOA80VkCbACa5AqwB9FZJl93Q+AJcCbwCQRWSwi3wFuwBpQulREVtiPHfOBJ7FWu3/SGKNN8Ur1M3p/UvGkswtVv2TP3plpjLk00XVRSik3vT/1HdqSpZRSSikVB9qSpZRSSikVB9qSpZRSSikVBxpkKaWUUkrFgQZZSimllFJxoEGWUkoppVQcaJCllFJKKRUHGmQppZRSSsXB/wPJPRlxpKn4GwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlIAAAFNCAYAAADLt4GgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAZNklEQVR4nO3df7DldX3f8ecrLMsSRRZWgrgXs4tLbRbboL2KNqbjBASkUWhDU4ytayWlNtpptJkGa0dEMykmaUytNsmO2lArIEFbVjO4RdSZjm2Bu8Yf7CruKhruCrosBKUOCvjuH+d76eXmLrv3c86559xzn4+Z79zvj889532/e/Y9r/M93/P9pqqQJEnS0v3EqAuQJElaqQxSkiRJjQxSkiRJjQxSkiRJjQxSkiRJjQxSkiRJjQxSkiRJjQxSGrkkn03yQJJjDjPuTUnuTfK9JB883HhJ6seR9KYkz02yM8l9Sbww4ypkkNJIJdkE/DxQwCufZNx5wOXA2cBPA6cBVy5DiZJWoSPtTcAjwPXApctQlsZQvLK5RinJ24DzgFuBv1ZVv3iIcdcA36yqf9Mtnw18uKqesWzFSlo1jrQ3zRu/BdhbVVmO+jQ+PCKlUXsN8OFuOi/JyYcYdwbwxXnLXwROTrJhyPVJWp2OtDdplTNIaWSSvITex3TXV9Uu4OvArxxi+FOBB+ctz80fN7wKJa1GS+xNWuUMUhqlbcD/qKr7uuVrgG1JXp3koW66qdv2EPC0eb87N//9ZapV0uqxlN6kVW7NqAvQ6pTkWOCXgaOS3NutPgZYD9xRVU9d8Cu7gZ+ld1In3fx3qurgMpQraZVo6E1a5TwipVG5CHgM2Aqc2U0/A/xPeucmLPRfgEuTbE2yHvi3wJ8Mv0xJq8xFLKE3pWcdsLZbXuelWVYXv7WnkUjySWB3Vf2rBet/GXgPMFVVjy7Y9mbgN4FjgY8Cr6+qHy5TyZJWgaX2pu4yCXcteJhvVdWmIZeqMWGQkiRJauRHe5IkSY0MUpIkSY0MUpIkSY0MUpIkSY0MUpIkSY1W5AU5n/70p9emTZtGXYakAdq1a9d9VXXSqOvoh71JmjyH600rMkht2rSJmZmZUZchaYCSfGvUNfTL3iRNnsP1Jj/akyRJamSQkiRJamSQkiRJarQiz5GStLhHHnmE2dlZHn744VGXckjr1q1jamqKo48+etSlSFomk9ybDFLSBJmdneW4445j06ZNJBl1OX9FVXHw4EFmZ2fZvHnzqMuRtEwmuTf50Z40QR5++GE2bNgwlo0KIAkbNmwY63elkgZvknuTQUqaMOPaqOaMe32ShmPc/++31meQkjRQn/zkJ3nOc57Dli1buOqqq0ZdjiQ9bhj9ySAlaWAee+wx3vCGN3DTTTexZ88err32Wvbs2TPqsiRpaP3JICVpYG677Ta2bNnCaaedxtq1a7nkkku48cYbR12WJA2tPxmkJA3M/v37OfXUUx9fnpqaYv/+/SOsSJJ6htWfvPyBNKGu/Phu9nz7ewN9zK3PfBpXvOKMgT6mpNVl0nqTR6QkDczGjRu5++67H1+enZ1l48aNI6xIknqG1Z88IiVNqFG8O3vBC17A3r17ueuuu9i4cSPXXXcd11xzzbLXIWl8jerI0bD6k0FK0sCsWbOG9773vZx33nk89thjvO51r+OMM/woUNLoDas/GaQkDdQFF1zABRdcMOoyJOmvGEZ/8hwpSZKkRgYpSZKkRgYpSZKkRgYpacJU1ahLeFLjXp+k4Rj3//ut9RmkpAmybt06Dh48OLYNq6o4ePAg69atG3UpkpbRJPcmv7UnTZCpqSlmZ2c5cODAqEs5pHXr1jE1NTXqMiQto0nuTQYpaYIcffTRbN68edRlSNITTHJv8qM9SZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgMJUknOT3Jnkn1JLl9k+zFJPtJtvzXJpgXbn5XkoSS/MYh6JGmO/UnSMPUdpJIcBbwPeDmwFXhVkq0Lhl0KPFBVW4B3A+9asP33gZv6rUWS5rM/SRq2QRyReiGwr6q+UVU/Aq4DLlww5kLg6m7+BuDsJAFIchFwF7B7ALVI0nz2J0lDNYggtRG4e97ybLdu0TFV9SjwILAhyVOB3wSuHEAdkrSQ/UnSUI36ZPO3A++uqocONzDJZUlmksyM892jJU2Mt3ME/cneJK1uawbwGPuBU+ctT3XrFhszm2QNcDxwEDgLuDjJ7wDrgR8nebiq3rvwSapqO7AdYHp6ugZQt6TJN/T+ZG+SVrdBBKnbgdOTbKbXkC4BfmXBmB3ANuB/AxcDn66qAn5+bkCStwMPLRaiJKmR/UnSUPUdpKrq0SRvBHYCRwEfrKrdSd4BzFTVDuADwIeS7APup9fMJGmo7E+Shi29N14ry/T0dM3MzIy6DEkDlGRXVU2Puo5+2JukyXO43jTqk80lSZJWLIOUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSo4EEqSTnJ7kzyb4kly+y/ZgkH+m235pkU7f+ZUl2Jfly9/MXBlGPJM2xP0kapr6DVJKjgPcBLwe2Aq9KsnXBsEuBB6pqC/Bu4F3d+vuAV1TV3wC2AR/qtx5JmmN/kjRsgzgi9UJgX1V9o6p+BFwHXLhgzIXA1d38DcDZSVJVf15V3+7W7waOTXLMAGqSJLA/SRqyQQSpjcDd85Znu3WLjqmqR4EHgQ0LxvwS8Pmq+uFiT5LksiQzSWYOHDgwgLIlrQJD70/2Jml1G4uTzZOcQe9w+j871Jiq2l5V01U1fdJJJy1fcZJWtcP1J3uTtLoNIkjtB06dtzzVrVt0TJI1wPHAwW55CvhvwGuq6usDqEeS5tifJA3VIILU7cDpSTYnWQtcAuxYMGYHvZM1AS4GPl1VlWQ98GfA5VX1uQHUIknz2Z8kDVXfQao7p+CNwE7gK8D1VbU7yTuSvLIb9gFgQ5J9wJuBua8gvxHYArwtyRe66af6rUmSwP4kafhSVaOuYcmmp6drZmZm1GVIGqAku6pqetR19MPeJE2ew/WmsTjZXJIkaSUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUySEmSJDUaSJBKcn6SO5PsS3L5ItuPSfKRbvutSTbN2/aWbv2dSc4bRD2SNMf+JGmY+g5SSY4C3ge8HNgKvCrJ1gXDLgUeqKotwLuBd3W/uxW4BDgDOB/4T93jSVLf7E+Shm0QR6ReCOyrqm9U1Y+A64ALF4y5ELi6m78BODtJuvXXVdUPq+ouYF/3eJI0CPYnSUO1ZgCPsRG4e97yLHDWocZU1aNJHgQ2dOv/z4Lf3TiAmgC48uO72fPt7w3q4SQt0dZnPo0rXnHGKEsYy/5kb5JGa5C9acWcbJ7ksiQzSWYOHDgw6nIkCbA3SavdII5I7QdOnbc81a1bbMxskjXA8cDBI/xdAKpqO7AdYHp6uo6ksBG/E5Y0ekPvT/YmaXUbxBGp24HTk2xOspbeyZk7FozZAWzr5i8GPl1V1a2/pPvWzGbgdOC2AdQkSWB/kjRkfR+R6s4peCOwEzgK+GBV7U7yDmCmqnYAHwA+lGQfcD+9ZkY37npgD/Ao8IaqeqzfmiQJ7E+Shi+9N14ry/T0dM3MzIy6DEkDlGRXVU2Puo5+2JukyXO43rRiTjaXJEkaNwYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRgYpSZKkRn0FqSQnJrk5yd7u5wmHGLetG7M3ybZu3U8m+bMkX02yO8lV/dQiSfPZnyQth36PSF0O3FJVpwO3dMtPkORE4ArgLOCFwBXzGtrvVdVfB54H/FySl/dZjyTNsT9JGrp+g9SFwNXd/NXARYuMOQ+4uarur6oHgJuB86vqB1X1GYCq+hHweWCqz3okaY79SdLQ9RukTq6qe7r5e4GTFxmzEbh73vJst+5xSdYDr6D3rnFRSS5LMpNk5sCBA30VLWlVWJb+ZG+SVrc1hxuQ5FPAMxbZ9Nb5C1VVSWqpBSRZA1wLvKeqvnGocVW1HdgOMD09veTnkTR5xqE/2Zuk1e2wQaqqzjnUtiTfSXJKVd2T5BTgu4sM2w+8dN7yFPDZecvbgb1V9QdHUrAkzbE/SRq1fj/a2wFs6+a3ATcuMmYncG6SE7qTOM/t1pHkt4DjgV/vsw5JWsj+JGno+g1SVwEvS7IXOKdbJsl0kvcDVNX9wDuB27vpHVV1f5IpeofftwKfT/KFJL/aZz2SNMf+JGnoUrXyPtKfnp6umZmZUZchaYCS7Kqq6VHX0Q97kzR5DtebvLK5JElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSI4OUJElSo76CVJITk9ycZG/384RDjNvWjdmbZNsi23ckuaOfWiRpPvuTpOXQ7xGpy4Fbqup04JZu+QmSnAhcAZwFvBC4Yn5DS/L3gYf6rEOSFrI/SRq6foPUhcDV3fzVwEWLjDkPuLmq7q+qB4CbgfMBkjwVeDPwW33WIUkL2Z8kDV2/Qerkqrqnm78XOHmRMRuBu+ctz3brAN4J/HvgB33WIUkL2Z8kDd2aww1I8ingGYtseuv8haqqJHWkT5zkTODZVfWmJJuOYPxlwGUAz3rWs470aSRNsHHoT/YmaXU7bJCqqnMOtS3Jd5KcUlX3JDkF+O4iw/YDL523PAV8FngxMJ3km10dP5Xks1X1UhZRVduB7QDT09NH3BAlTa5x6E/2Jml16/ejvR3A3LdctgE3LjJmJ3BukhO6kzjPBXZW1R9W1TOrahPwEuBrhwpRktTA/iRp6PoNUlcBL0uyFzinWybJdJL3A1TV/fTONbi9m97RrZOkYbI/SRq6VK28I9HT09M1MzMz6jIkDVCSXVU1Peo6+mFvkibP4XqTVzaXJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqZJCSJElqlKoadQ1LluQA8K0jHP504L4hljNoK61esOblMuk1/3RVnTTMYoZtwnsTWPNyWGn1wuTX/KS9aUUGqaVIMlNV06Ou40ittHrBmpeLNU+WlbhvrHn4Vlq9YM1+tCdJktTIICVJktRoNQSp7aMuYIlWWr1gzcvFmifLStw31jx8K61eWOU1T/w5UpIkScOyGo5ISZIkDcXEBqkk5ye5M8m+JJePup45SU5N8pkke5LsTvIvu/UnJrk5yd7u5wnd+iR5T/d3fCnJ80dU91FJ/jzJJ7rlzUlu7er6SJK13fpjuuV93fZNI6p3fZIbknw1yVeSvHgF7OM3da+JO5Jcm2TduO3nJB9M8t0kd8xbt+T9mmRbN35vkm3LUfs4Gcf+tFJ7U1eL/Wn4NdufDqWqJm4CjgK+DpwGrAW+CGwddV1dbacAz+/mjwO+BmwFfge4vFt/OfCubv4C4CYgwIuAW0dU95uBa4BPdMvXA5d0838E/PNu/teAP+rmLwE+MqJ6rwZ+tZtfC6wf530MbATuAo6dt39fO277Gfg7wPOBO+atW9J+BU4EvtH9PKGbP2EUr5MRvTbHsj+t1N7U1WJ/Gm699qcne95RvIiWYWe+GNg5b/ktwFtGXdchar0ReBlwJ3BKt+4U4M5u/o+BV80b//i4ZaxxCrgF+AXgE90L7z5gzcL9DewEXtzNr+nGZZnrPb77T58F68d5H28E7u7+867p9vN547ifgU0LGtWS9ivwKuCP561/wrhJn1ZKf1oJval7XvvT8Gu2Pz3Jc07qR3tz/+hzZrt1Y6U73Pk84Fbg5Kq6p9t0L3ByNz8Of8sfAP8a+HG3vAH4y6p6dJGaHq+32/5gN345bQYOAP+5O9z//iRPYYz3cVXtB34P+AvgHnr7bRfjvZ/nLHW/jnx/j9jY//0rqDeB/Wno7E9Pvr8nNUiNvSRPBT4K/HpVfW/+turF4LH4OmWSXwS+W1W7Rl3LEqyhd3j3D6vqecD/pXdI93HjtI8Bus/tL6TXZJ8JPAU4f6RFNRi3/aqlWym9CexPy8X+9OQmNUjtB06dtzzVrRsLSY6m16g+XFUf61Z/J8kp3fZTgO9260f9t/wc8Mok3wSuo3f4/D8A65OsWaSmx+vtth8PHFzGeqH3DmK2qm7tlm+g17jGdR8DnAPcVVUHquoR4GP09v047+c5S92v47C/R2ls//4V1pvA/rRc7E9PYlKD1O3A6d03CtbSO9ltx4hrAnrfFAA+AHylqn5/3qYdwNy3A7bROz9hbv1rum8YvAh4cN5hyqGrqrdU1VRVbaK3Hz9dVa8GPgNcfIh65/6Oi7vxy/rOqqruBe5O8pxu1dnAHsZ0H3f+AnhRkp/sXiNzNY/tfp5nqft1J3BukhO6d7rndutWi7HsTyutN4H9aRnZn57Mcpz8NYqJ3hn5X6P37Zi3jrqeeXW9hN6hxS8BX+imC+h9fnwLsBf4FHBiNz7A+7q/48vA9Ahrfyn//1sxpwG3AfuAPwWO6dav65b3ddtPG1GtZwIz3X7+7/S+fTHW+xi4EvgqcAfwIeCYcdvPwLX0zpF4hN4760tb9ivwuq72fcA/GdVrelTTOPanldybunrsT8Ot2f50iMkrm0uSJDWa1I/2JEmShs4gJUmS1MggJUmS1MggJUmS1MggJUmS1MggpYFI727mv9bNPzPJDUN8rjOTXDCsx5c0OexNGjaDlAZlPb07flNV366qi598eF/OpHd9G0k6nPXYmzREXkdKA5HkOnr3YrqT3oXPfqaqnpvktcBF9O7NdDq9G1+uBf4x8EPggqq6P8mz6V0c7STgB8A/raqvJvkHwBXAY/RufHkOvYukHUvvsv3/jt6dyP8j8FzgaODtVXVj99x/j97tCTYC/7WqrhzunpA0TuxNGrpRXCHVafImYBNwxyLzr6XXXI6j14geBF7fbXs3vRujQu/Ks6d382fRu6UA9K44u7GbXz/vMd8777l/G/hHc2PoXTH6Kd24e+hd2fZYelfkHenVl52cnJZ3sjc5DXuau9mgNEyfqarvA99P8iDw8W79l4G/2d1t/m8Df9q7jRPQu/0AwOeAP0lyPb0bZS7mXHo3Lv2Nbnkd8Kxu/uaqOgiQ5GP0boMxM5g/S9IKZ29S3wxSWg4/nDf/43nLP6b3GvwJ4C+r6syFv1hVr09yFvB3gV1J/tYijx/gl6rqzies7P3ews+u/Sxb0hx7k/rmyeYalO/TO0S+ZFX1PeCu7pwDurtx/2w3/+yqurWq3gYcAE5d5Ll2Av+iuys5SZ43b9vLkpyY5Fh650N8rqVGSSuWvUlDZZDSQHSHqD+X5A7gdxse4tXApUm+COymd3IowO8m+XL3uP8L+CLwGWBrki8k+YfAO+mdyPmlJLu75Tm3AR+ld5f1j1aVh86lVcTepGHzW3uaWN03Y6ar6o2jrkWS5tibJotHpCRJkhp5REqSJKmRR6QkSZIaGaQkSZIaGaQkSZIaGaQkSZIaGaQkSZIaGaQkSZIa/T94xDUejTa3owAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "\n", "var_list = ['R', 'Q', 'A', 'D']\n", @@ -240,7 +133,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.2" + "version": "3.9.7" } }, "nbformat": 4, From 0300d760c7283f4d5a76fbec810cf6d0f4d004ce Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 5 Apr 2022 14:51:08 -0500 Subject: [PATCH 09/39] fixed length of P[] list --- hydradx/TestSwap.ipynb | 79 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 14 deletions(-) diff --git a/hydradx/TestSwap.ipynb b/hydradx/TestSwap.ipynb index 0dd7106d..7c252602 100644 --- a/hydradx/TestSwap.ipynb +++ b/hydradx/TestSwap.ipynb @@ -2,24 +2,75 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "6b8e2d21-c455-4b2b-a1c4-0c2cce0fb286", "metadata": {}, "outputs": [ { - "ename": "IndexError", - "evalue": "list index out of range", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", - "Input \u001b[1;32mIn [1]\u001b[0m, in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 48\u001b[0m \u001b[38;5;66;03m############################################ SETUP ##########################################################\u001b[39;00m\n\u001b[0;32m 50\u001b[0m config_params \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 51\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcfmm_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 52\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124minitial_values\u001b[39m\u001b[38;5;124m'\u001b[39m: initial_values,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 56\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124maction_dict\u001b[39m\u001b[38;5;124m'\u001b[39m: action_dict,\n\u001b[0;32m 57\u001b[0m }\n\u001b[1;32m---> 59\u001b[0m config_dict, state \u001b[38;5;241m=\u001b[39m \u001b[43minit_utils\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_configuration\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig_params\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 61\u001b[0m pd\u001b[38;5;241m.\u001b[39moptions\u001b[38;5;241m.\u001b[39mmode\u001b[38;5;241m.\u001b[39mchained_assignment \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;66;03m# default='warn'\u001b[39;00m\n\u001b[0;32m 62\u001b[0m pd\u001b[38;5;241m.\u001b[39moptions\u001b[38;5;241m.\u001b[39mdisplay\u001b[38;5;241m.\u001b[39mfloat_format \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{:.2f}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mformat\n", - "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\init_utils.py:20\u001b[0m, in \u001b[0;36mget_configuration\u001b[1;34m(config_d)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_configuration\u001b[39m(config_d: \u001b[38;5;28mdict\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mtuple\u001b[39m:\n\u001b[1;32m---> 20\u001b[0m initial_values \u001b[38;5;241m=\u001b[39m \u001b[43mcomplete_initial_values\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig_d\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43minitial_values\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mconfig_d\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43magent_d\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m timesteps \u001b[38;5;241m=\u001b[39m \u001b[38;5;28msum\u001b[39m([x[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m config_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maction_ls\u001b[39m\u001b[38;5;124m'\u001b[39m]])\n\u001b[0;32m 22\u001b[0m action_list \u001b[38;5;241m=\u001b[39m actions\u001b[38;5;241m.\u001b[39mget_action_list(config_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124maction_ls\u001b[39m\u001b[38;5;124m'\u001b[39m], config_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprob_dict\u001b[39m\u001b[38;5;124m'\u001b[39m])\n", - "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\init_utils.py:9\u001b[0m, in \u001b[0;36mcomplete_initial_values\u001b[1;34m(values, agent_d)\u001b[0m\n\u001b[0;32m 8\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcomplete_initial_values\u001b[39m(values: \u001b[38;5;28mdict\u001b[39m, agent_d: \u001b[38;5;28mdict\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mdict\u001b[39m:\n\u001b[1;32m----> 9\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[43mamm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minitialize_state\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalues\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtoken_list\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43magent_d\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 10\u001b[0m state[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoken_list\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m values[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoken_list\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m 11\u001b[0m state[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mL\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m values[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mL\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mL\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m values \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n", - "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\amm\\amm.py:21\u001b[0m, in \u001b[0;36minitialize_state\u001b[1;34m(init_d, token_list, agents_d)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minitialize_state\u001b[39m(init_d: \u001b[38;5;28mdict\u001b[39m, token_list: \u001b[38;5;28mlist\u001b[39m, agents_d: \u001b[38;5;28mdict\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mdict\u001b[39m:\n\u001b[0;32m 20\u001b[0m \u001b[38;5;66;03m# initialize tokens\u001b[39;00m\n\u001b[1;32m---> 21\u001b[0m tokens_state \u001b[38;5;241m=\u001b[39m \u001b[43moamm\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minitialize_token_counts\u001b[49m\u001b[43m(\u001b[49m\u001b[43minit_d\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# shares will be wrong here, but it doesn't matter\u001b[39;00m\n\u001b[0;32m 22\u001b[0m \u001b[38;5;66;03m# initialize LPs\u001b[39;00m\n\u001b[0;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m agents_d \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\amm\\omnipool_amm.py:105\u001b[0m, in \u001b[0;36minitialize_token_counts\u001b[1;34m(init_d)\u001b[0m\n\u001b[0;32m 101\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m init_d \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 102\u001b[0m init_d \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m 103\u001b[0m state \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 104\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m: copy\u001b[38;5;241m.\u001b[39mdeepcopy(init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m]),\n\u001b[1;32m--> 105\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mQ\u001b[39m\u001b[38;5;124m'\u001b[39m: [init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mP\u001b[39m\u001b[38;5;124m'\u001b[39m][i] \u001b[38;5;241m*\u001b[39m init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m][i] \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m]))]\n\u001b[0;32m 106\u001b[0m }\n\u001b[0;32m 107\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state\n", - "File \u001b[1;32m~\\PycharmProjects\\HydraDX-simulations\\hydradx\\model\\amm\\omnipool_amm.py:105\u001b[0m, in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 101\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m init_d \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 102\u001b[0m init_d \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m 103\u001b[0m state \u001b[38;5;241m=\u001b[39m {\n\u001b[0;32m 104\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m: copy\u001b[38;5;241m.\u001b[39mdeepcopy(init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m]),\n\u001b[1;32m--> 105\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mQ\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[43minit_d\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mP\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m \u001b[38;5;241m*\u001b[39m init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m][i] \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(\u001b[38;5;28mlen\u001b[39m(init_d[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mR\u001b[39m\u001b[38;5;124m'\u001b[39m]))]\n\u001b[0;32m 106\u001b[0m }\n\u001b[0;32m 107\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m state\n", - "\u001b[1;31mIndexError\u001b[0m: list index out of range" + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " ___________ ____\n", + " ________ __ ___/ / ____/ | / __ \\\n", + " / ___/ __` / __ / / / /| | / / / /\n", + "/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n", + "\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n", + "by cadCAD\n", + "\n", + "Execution Mode: local_proc\n", + "Configuration Count: 1\n", + "Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (1000, 3, 1, 3)\n", + "Execution Method: local_simulations\n", + "SimIDs : [0]\n", + "SubsetIDs: [0]\n", + "Ns : [0]\n", + "ExpIDs : [0]\n", + "Execution Mode: single_threaded\n", + "Total execution time: 0.78s\n", + " simulation subset run substep timestep agent_label q s-0 \\\n", + "2943 0 0 1 3 981 Trader 1000000 0 \n", + "2946 0 0 1 3 982 Trader 1000000 0 \n", + "2949 0 0 1 3 983 Trader 1000000 0 \n", + "2952 0 0 1 3 984 Trader 1000000 0 \n", + "2955 0 0 1 3 985 Trader 1000000 0 \n", + "2958 0 0 1 3 986 Trader 1000000 0 \n", + "2961 0 0 1 3 987 Trader 1000000 0 \n", + "2964 0 0 1 3 988 Trader 1000000 0 \n", + "2967 0 0 1 3 989 Trader 1000000 0 \n", + "2970 0 0 1 3 990 Trader 1000000 0 \n", + "2973 0 0 1 3 991 Trader 1000000 0 \n", + "2976 0 0 1 3 992 Trader 1000000 0 \n", + "2979 0 0 1 3 993 Trader 1000000 0 \n", + "2982 0 0 1 3 994 Trader 1000000 0 \n", + "2985 0 0 1 3 995 Trader 1000000 0 \n", + "2988 0 0 1 3 996 Trader 1000000 0 \n", + "2991 0 0 1 3 997 Trader 1000000 0 \n", + "2994 0 0 1 3 998 Trader 1000000 0 \n", + "2997 0 0 1 3 999 Trader 1000000 0 \n", + "3000 0 0 1 3 1000 Trader 1000000 0 \n", + "\n", + " s-1 s-2 s-3 r-0 r-1 r-2 r-3 p-0 p-1 p-2 p-3 \n", + "2943 0 0 0 0 0 1050800.00 793937.61 0 0 0 0 \n", + "2946 0 0 0 0 0 1049800.00 798706.48 0 0 0 0 \n", + "2949 0 0 0 0 0 1051000.00 792943.42 0 0 0 0 \n", + "2952 0 0 0 0 0 1052200.00 787109.96 0 0 0 0 \n", + "2955 0 0 0 0 0 1051200.00 791947.03 0 0 0 0 \n", + "2958 0 0 0 0 0 1050200.00 796735.51 0 0 0 0 \n", + "2961 0 0 0 0 0 1049200.00 801476.14 0 0 0 0 \n", + "2964 0 0 0 0 0 1050400.00 795747.24 0 0 0 0 \n", + "2967 0 0 0 0 0 1049400.00 800497.56 0 0 0 0 \n", + "2970 0 0 0 0 0 1050600.00 794756.93 0 0 0 0 \n", + "2973 0 0 0 0 0 1051800.00 788946.32 0 0 0 0 \n", + "2976 0 0 0 0 0 1053000.00 783064.42 0 0 0 0 \n", + "2979 0 0 0 0 0 1054200.00 777109.93 0 0 0 0 \n", + "2982 0 0 0 0 0 1055400.00 771081.48 0 0 0 0 \n", + "2985 0 0 0 0 0 1054400.00 776080.32 0 0 0 0 \n", + "2988 0 0 0 0 0 1055600.00 770039.21 0 0 0 0 \n", + "2991 0 0 0 0 0 1056800.00 763922.53 0 0 0 0 \n", + "2994 0 0 0 0 0 1058000.00 757728.85 0 0 0 0 \n", + "2997 0 0 0 0 0 1057000.00 762864.77 0 0 0 0 \n", + "3000 0 0 0 0 0 1056000.00 767947.55 0 0 0 0 \n" ] } ], From 46190d1879185dd3120c95ae6add864fa2324eff Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 5 Apr 2022 15:34:51 -0500 Subject: [PATCH 10/39] use correct token names --- hydradx/model/amm/amm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydradx/model/amm/amm.py b/hydradx/model/amm/amm.py index 4cc7bc00..3fd98742 100644 --- a/hydradx/model/amm/amm.py +++ b/hydradx/model/amm/amm.py @@ -117,7 +117,7 @@ def withdraw_all_liquidity(state: dict, agent_d: dict, agent_id: string) -> tupl for i in range(n): transaction = { - 'token_remove': 'R' + str(i + 1), + 'token_remove': new_state['token_list'][i], 'agent_id': agent_id, 'shares_remove': -agent_d['s'][i] } From aab9295dc9aad6930d72ef68bfe994a8a200bc3b Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 5 Apr 2022 21:54:03 -0500 Subject: [PATCH 11/39] re-wrote lrna swaps to comply with the new spec --- hydradx/model/amm/omnipool_amm.py | 179 +++++++++++++++--------------- 1 file changed, 92 insertions(+), 87 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index d1d8ed70..3f6eb50a 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -19,7 +19,7 @@ def state_dict( preferred_stablecoin: str = 'USD' ) -> dict: assert 'HDX' in token_list, 'HDX not included in token list' - assert len(r_values) == len(token_list) and len(p_values) == len(token_list), 'list lengths do not match' + assert len(r_values) == len(token_list), 'list lengths do not match' # get initial value of T (total value locked) if not omega_values: @@ -38,6 +38,12 @@ def state_dict( if not s_values: b_values = [0] * len(token_list) + stablecoin_index = token_list.index(preferred_stablecoin) + t_values = [ + q_values[n] / r_values[n] * r_values[stablecoin_index] / q_values[stablecoin_index] + for n in range(len(token_list)) + ] + state = { 'token_list': token_list, 'R': r_values, # Risk asset quantities @@ -45,6 +51,7 @@ def state_dict( 'Q': q_values, # LRNA quantities in each pool 'B': b_values, # quantity of shares in each asset owned by the protocol 'S': s_values, # quantity of LP shares in each pool + 'T': t_values, # tvl per pool in usd 'L': L, # LRNA imbalance 'D': D, # quantity of LRNA owned by the protocol 'O': omega_values, # per-asset cap on what fraction of TVL can be stored @@ -139,64 +146,86 @@ def swap_lrna( trader_id: string, delta_R: float, delta_Q: float, - i: int + i: int, + fee_assets: float = 0, + fee_lrna: float = 0 ) -> tuple: """Compute new state after LRNA swap""" new_state = copy.deepcopy(old_state) new_agents = copy.deepcopy(old_agents) - if delta_Q == 0 and delta_R != 0: - delta_Q = swap_lrna_delta_Qi(old_state, delta_R, i) - elif delta_R == 0 and delta_Q != 0: - delta_R = swap_lrna_delta_Ri(old_state, delta_Q, i) + if delta_Q > 0: + delta_R = old_state['R'][i] * -delta_Q / (delta_Q + old_state['Q'][i]) * (1 - fee_assets) + delta_L = -delta_Q * (1 + (1 - fee_assets) * old_state['Q'][i] / (old_state['Q'][i] + delta_Q)) + delta_Ra = -delta_R + delta_Qa = delta_Q + elif delta_R > 0: + delta_Ra = delta_R + delta_R = -delta_Ra + delta_Q = old_state['Q'][i] * -delta_R / (old_state['R'][i] * (1 - fee_assets) + delta_R) + delta_L = -delta_Q * (1 + (1 - fee_assets) * old_state['Q'][i] / (old_state['Q'][i] + delta_Q)) + delta_Qa = -delta_Q else: - return new_state, new_agents - - # Token amounts update - if delta_Q < 0: - new_state['R'][i] += delta_R - new_state['Q'][i] += delta_Q - new_agents[trader_id]['r'][i] -= delta_R - new_agents[trader_id]['q'] -= delta_Q + raise ValueError('Either delta_q or delta_r must be positive.') - else: - new_state['R'][i] += delta_R - new_state['Q'][i] = (old_state['Q'][i] + delta_Q) / (old_state['R'][i] + delta_R) * new_state['R'][i] - new_agents[trader_id]['r'][i] -= delta_R - new_agents[trader_id]['q'] -= delta_Q + new_agents[trader_id]['q'] += delta_Qa + new_agents[trader_id]['r'][i] += delta_Ra + new_state['Q'][i] += delta_Q + new_state['R'][i] += delta_R + new_state['L'] += delta_L return new_state, new_agents + # if delta_Q == 0 and delta_R != 0: + # delta_Q = swap_lrna_delta_Qi(old_state, delta_R, i) + # elif delta_R == 0 and delta_Q != 0: + # delta_R = swap_lrna_delta_Ri(old_state, delta_Q, i) + # else: + # return new_state, new_agents + # + # # Token amounts update + # if delta_Q < 0: + # new_state['R'][i] += delta_R + # new_state['Q'][i] += delta_Q + # new_agents[trader_id]['r'][i] -= delta_R + # new_agents[trader_id]['q'] -= delta_Q + # + # else: + # new_state['R'][i] += delta_R + # new_state['Q'][i] = (old_state['Q'][i] + delta_Q) / (old_state['R'][i] + delta_R) * new_state['R'][i] + # new_agents[trader_id]['r'][i] -= delta_R + # new_agents[trader_id]['q'] -= delta_Q + +# def swap_lrna_fee( +# old_state: dict, +# old_agents: dict, +# trader_id: string, +# delta_R: float, +# delta_Q: float, +# i: int, +# fee_assets: float = 0, +# fee_lrna: float = 0 +# ) -> tuple: +# """Computed new state for LRNA swap with fee""" +# new_state, new_agents = swap_lrna(old_state, old_agents, trader_id, delta_R, delta_Q, i) +# delta_Q = new_state['Q'][i] - old_state['Q'][i] +# if delta_Q < 0: +# # LRNA fee +# new_agents[trader_id]['q'] += delta_Q * fee_lrna +# new_state['D'] -= delta_Q * fee_lrna +# else: +# delta_R = new_state['R'][i] - old_state['R'][i] # delta_R is negative +# # asset fee +# new_agents[trader_id]['r'][i] += delta_R * fee_assets +# # fee added back as liquidity, distributed to existing LPs (i.e. no new shares minted) +# # eventually, can mint protocol shares to take some cut as POL +# p = price_i(new_state, i) +# new_state['R'][i] -= delta_R * fee_assets +# # LRNA minted so that asset fee level does not change price and increase IL +# new_state['Q'][i] = p * new_state['R'][i] +# return new_state, new_agents -def swap_lrna_fee( - old_state: dict, - old_agents: dict, - trader_id: string, - delta_R: float, - delta_Q: float, - i: int, - fee_assets: float = 0, - fee_lrna: float = 0 -) -> tuple: - """Computed new state for LRNA swap with fee""" - new_state, new_agents = swap_lrna(old_state, old_agents, trader_id, delta_R, delta_Q, i) - delta_Q = new_state['Q'][i] - old_state['Q'][i] - if delta_Q < 0: - # LRNA fee - new_agents[trader_id]['q'] += delta_Q * fee_lrna - new_state['D'] -= delta_Q * fee_lrna - else: - delta_R = new_state['R'][i] - old_state['R'][i] # delta_R is negative - # asset fee - new_agents[trader_id]['r'][i] += delta_R * fee_assets - # fee added back as liquidity, distributed to existing LPs (i.e. no new shares minted) - # eventually, can mint protocol shares to take some cut as POL - p = price_i(new_state, i) - new_state['R'][i] -= delta_R * fee_assets - # LRNA minted so that asset fee level does not change price and increase IL - new_state['Q'][i] = p * new_state['R'][i] - return new_state, new_agents def swap_assets_direct( old_state: dict, @@ -227,10 +256,6 @@ def swap_assets_direct( new_state['Q'][new_state['token_list'].index('HDX')] += delta_QH new_state['L'] += delta_L - # do some algebraic checks - if old_state['Q'][i] * old_state['R'][i] != pytest.approx(new_state['Q'][i] * new_state['R'][i]): - raise f'price change in asset {i}' - new_agents = copy.deepcopy(old_agents) new_agents[trader_id]['r'][i] -= delta_Ri new_agents[trader_id]['r'][j] -= delta_Rj @@ -251,19 +276,19 @@ def swap_assets( ) -> tuple: if trade_type == 'sell': # swap asset in for LRNA - first_state, first_agents = swap_lrna_fee(old_state, old_agents, trader_id, delta_token, 0, i_sell, fee_assets, - fee_lrna) - delta_q = first_agents[trader_id]['q'] - old_agents[trader_id]['q'] - # swap LRNA back in for second asset - new_state, new_agents = swap_lrna_fee(first_state, first_agents, trader_id, 0, delta_q, i_buy, fee_assets, fee_lrna) - - delta_Qi = new_state['Q'][i_sell] - old_state['Q'][i_sell] - delta_Qj = new_state['Q'][i_buy] - old_state['Q'][i_buy] - delta_L = min(-delta_Qi * fee_lrna, -old_state['L']) - new_state['L'] += delta_L - - delta_QH = -fee_lrna * delta_Qi - delta_L - new_state['R'][new_state['token_list'].index('HDX')] += delta_QH + # first_state, first_agents = \ + # swap_lrna(old_state, old_agents, trader_id, delta_token, 0, i_sell, fee_assets, fee_lrna) + # delta_q = first_agents[trader_id]['q'] - old_agents[trader_id]['q'] + # # swap LRNA back in for second asset + # new_state, new_agents = swap_lrna(first_state, first_agents, trader_id, 0, -delta_q, i_buy, fee_assets, fee_lrna) + # + # delta_Qi = new_state['Q'][i_sell] - old_state['Q'][i_sell] + # delta_Qj = new_state['Q'][i_buy] - old_state['Q'][i_buy] + # delta_L = min(-delta_Qi * fee_lrna, -old_state['L']) + # new_state['L'] += delta_L + # + # delta_QH = -fee_lrna * delta_Qi - delta_L + # new_state['R'][new_state['token_list'].index('HDX')] += delta_QH alternative_state, alternative_agents = swap_assets_direct( old_state=old_state, @@ -276,8 +301,8 @@ def swap_assets( fee_lrna=fee_lrna ) - if alternative_state['Q'][i_sell] != new_state['Q'][i_sell]: - er = 1 + # if alternative_state['Q'][i_sell] != new_state['Q'][i_sell]: + # er = 1 return alternative_state, alternative_agents elif trade_type == 'buy': @@ -336,7 +361,7 @@ def add_risk_liquidity( # T update: TVL soft cap stable_index = new_state['token_list'].index(new_state['preferred_stablecoin']) delta_t = new_state['Q'][i] * new_state['R'][stable_index]/new_state['Q'][stable_index] - new_state['T'][i] - new_state['T'] += delta_t + new_state['T'][i] += delta_t # set price at which liquidity was added # TODO: should this be averaged with existing price, if this agent has provided liquidity before? @@ -347,26 +372,6 @@ def add_risk_liquidity( return new_state, new_agents -def add_token( - old_state: dict, - old_agents: dict, - quantity: float, - token_name: str, - price_in_lrna: float, - LP_id: str = '' -) -> tuple: - new_state = copy.deepcopy(old_state) - new_agents = copy.deepcopy(old_agents) - new_state['token_list'].append(token_name) - new_state['P'].append(price_in_lrna) - new_state['R'].append(0) - new_state['Q'].append(0) - new_state['T'].append(0) - new_state['B'].append(0) - new_state, new_agents = add_risk_liquidity(new_state, new_agents, LP_id, quantity, len(new_state['token_list'])-1) - return new_state, new_agents - - def remove_risk_liquidity( old_state: dict, old_agents: dict, From 76ea12d5899f9a57d51e8ee8356af424ef1b553e Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 5 Apr 2022 21:54:37 -0500 Subject: [PATCH 12/39] Add 'L' to state dict --- hydradx/model/processing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/hydradx/model/processing.py b/hydradx/model/processing.py index 1d046933..2bd599b0 100644 --- a/hydradx/model/processing.py +++ b/hydradx/model/processing.py @@ -87,6 +87,7 @@ def get_state_from_row(row) -> dict: 'D': row['D'], 'S': [0] * row['n'], 'B': [0] * row['n'], + 'L': row['L'] } if 'H' in row: From e76f01d9b83c0144df6cf31e33cfd02da8d7eabd Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 5 Apr 2022 21:55:22 -0500 Subject: [PATCH 13/39] commented out posthub() --- hydradx/model/system.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hydradx/model/system.py b/hydradx/model/system.py index 423375bd..c6fa4d30 100644 --- a/hydradx/model/system.py +++ b/hydradx/model/system.py @@ -123,6 +123,6 @@ def agenthub(params, substep, state_history, prev_state, policy_input): def posthub(params, substep, state_history, prev_state, policy_input): - if 'T' in prev_state['AMM'] and prev_state['AMM']['T'] is not None: - return ('AMM', amm.adjust_supply(prev_state['AMM'])) + # if 'T' in prev_state['AMM'] and prev_state['AMM']['T'] is not None: + # return ('AMM', amm.adjust_supply(prev_state['AMM'])) return ('AMM', prev_state['AMM']) \ No newline at end of file From f628ca3e521fa5d080e053860749d6a7630bb38e Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 5 Apr 2022 21:56:34 -0500 Subject: [PATCH 14/39] use state_dict for everything --- hydradx/tests/test_omnipool_amm.py | 153 +++++++++-------------------- 1 file changed, 44 insertions(+), 109 deletions(-) diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index faf9cc4a..b13f57ea 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -124,8 +124,12 @@ def test_QR_strat(d): @given(QR_strat) def test_add_risk_liquidity(old_state): n = len(old_state['R']) - old_state['S'] = [1500000] * 2 - old_state['P'] = [oamm.price_i(old_state, j) for j in range(n)] + old_state = oamm.state_dict( + token_list=['HDX', 'USD'] + ['token'] * (n-2), + r_values=old_state['R'], + s_values=[1500000] * 2, + p_values=[oamm.price_i(old_state, j) for j in range(n)] + ) LP_id = 'LP' old_agents = { @@ -147,10 +151,14 @@ def test_add_risk_liquidity(old_state): @given(QR_strat) def test_remove_risk_liquidity(old_state): n = len(old_state['R']) - old_state['S'] = [1500000] * n - old_state['P'] = [oamm.price_i(old_state, j) for j in range(n)] - B_init = 0 - old_state['B'] = [B_init] * n + n = len(old_state['R']) + old_state = oamm.state_dict( + token_list=['HDX', 'USD'] + ['token'] * (n-2), + r_values=old_state['R'], + s_values=[1500000] * 2, + p_values=[oamm.price_i(old_state, j) for j in range(n)], + b_values=[0] * n + ) LP_id = 'LP' p_init = 1 @@ -183,10 +191,11 @@ def test_remove_risk_liquidity(old_state): @given(QR_strat) def test_swap_lrna(old_state): n = len(old_state['R']) - old_state['S'] = [1000] * n - old_state['A'] = [0] * n - old_state['B'] = [0] * n - old_state['D'] = 0 + old_state = oamm.state_dict( + q_values=old_state['Q'], + r_values=old_state['R'], + token_list=['HDX', 'USD'] + ['?'] * (n - 2), + ) trader_id = 'trader' old_agents = { trader_id: { @@ -203,19 +212,24 @@ def test_swap_lrna(old_state): new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, delta_R, 0, i) assert oamm.asset_invariant(old_state, i) == pytest.approx(oamm.asset_invariant(new_state, i)) + old_state, old_agents = new_state, new_agents + # Test with trader selling LRNA new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i) assert oamm.asset_invariant(old_state, i) == pytest.approx(oamm.asset_invariant(new_state, i)) fee_strat = st.floats(min_value=0.0001, max_value=0.1, allow_nan=False, allow_infinity=False) + + @given(QR_strat, fee_strat) def test_swap_lrna_fee(old_state, fee): n = len(old_state['R']) - old_state['S'] = [1000] * n - old_state['A'] = [0] * n - old_state['B'] = [100] * n - old_state['D'] = 0 + old_state = oamm.state_dict( + q_values=old_state['Q'], + r_values=old_state['R'], + token_list=['HDX', 'USD'] + ['?'] * (n - 2), + ) trader_id = 'trader' LP_id = 'lp' old_agents = { @@ -235,19 +249,26 @@ def test_swap_lrna_fee(old_state, fee): i = 0 # Test with trader selling asset i - new_state, new_agents = oamm.swap_lrna_fee(old_state, old_agents, trader_id, delta_R, 0, i, fee, fee) - assert oamm.asset_invariant(old_state, i) == pytest.approx(oamm.asset_invariant(new_state, i)) - assert sum(old_state['Q']) + old_agents[trader_id]['q'] == pytest.approx(sum(new_state['Q']) + new_state['D'] + new_agents[trader_id]['q']) + new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, delta_R, 0, i, fee, fee) + # assert oamm.asset_invariant(old_state, i) == pytest.approx(oamm.asset_invariant(new_state, i)) + assert sum(old_state['Q']) + old_agents[trader_id]['q'] == \ + pytest.approx(sum(new_state['Q']) + new_state['D'] + new_agents[trader_id]['q']) # Test with trader selling LRNA - new_state, new_agents = oamm.swap_lrna_fee(old_state, old_agents, trader_id, 0, delta_Q, i, fee, fee) - feeless_state, feeless_agents = oamm.swap_lrna_fee(old_state, old_agents, trader_id, 0, delta_Q, i, 0, 0) + new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i, fee, fee) + feeless_state, feeless_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i, 0, 0) for j in range(len(old_state['R'])): - assert oamm.price_i(feeless_state, j) == pytest.approx(oamm.price_i(new_state, j)) + # assert oamm.price_i(feeless_state, j) == pytest.approx(oamm.price_i(new_state, j)) assert min(new_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0) assert min(oamm.asset_invariant(new_state, i) / oamm.asset_invariant(old_state, i), 1) == pytest.approx(1) + assert old_state['Q'][i] / old_state['R'][i] == \ + pytest.approx((new_state['Q'][i] + new_state['L']) / new_state['R'][i]) + + fee_strat = st.floats(min_value=0.0001, max_value=0.1, allow_nan=False, allow_infinity=False) + + @given(QR_strat, fee_strat, fee_strat) def test_swap_assets(old_state, fee_lrna, fee_assets): @@ -293,7 +314,7 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): for j in range(len(old_state['R'])): # price tracks feeless price # if oamm.price_i(feeless_state, j) != pytest.approx(oamm.price_i(asset_fee_state, j)): - # raise "price doesn't track feeless price" + # raise ValueError("price doesn't track feeless price") # assets in pools only go up compared to asset_fee_state assert min(asset_fee_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0), \ f"asset in pool {j} is lesser when compared with no-fee case" @@ -305,7 +326,7 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): "invariant ratio less than zero" # total quantity of R_i remains unchanged assert old_state['R'][j] + old_agents[trader_id]['r'][j] == pytest.approx(new_state['R'][j] + new_agents[trader_id]['r'][j]), \ - "total quantity of R[{j}] changed" + f"total quantity of R[{j}] changed" # test that no LRNA is lost delta_Qi = new_state['Q'][i_sell] - old_state['Q'][i_sell] @@ -314,7 +335,7 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): delta_L = new_state['L'] - old_state['L'] if i_sell != 0 and i_buy != 0: if delta_L + delta_Qj + delta_Qi + delta_Qh != pytest.approx(0, abs=1e10): - raise 'Some LRNA was lost along the way.' + raise ValueError('Some LRNA was lost along the way.') delta_out_new = new_agents[trader_id]['r'][i_buy] - old_agents[trader_id]['r'][i_buy] @@ -332,20 +353,6 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): price_strat = st.floats(min_value=1e-5, max_value=1e5, allow_nan=False, allow_infinity=False) -@given(QR_strat, price_strat) -def test_add_asset(old_state, price): - old_state['S'] = [1000000, 1000000] - old_state['B'] = [0, 0] - old_state['A'] = [0, 0] - old_state['D'] = 0 - - n = len(old_state['R']) - init_R = 100000 - - new_state = oamm.add_asset(old_state, init_R, price) - assert oamm.price_i(new_state, n) == pytest.approx(price) - - # Want to make sure this does not change pij, only changes piq proportionally # Also should make sure things stay reasonably bounded # Requires state with H, T, Q, burn_rate @@ -373,77 +380,6 @@ def test_adjust_supply(old_state, r): assert piq_old/pjq_old == pytest.approx(piq_new/pjq_new) -def test_swap_with_graphs(): - import pandas - - from hydradx.model import init_utils - from hydradx.model import processing - # Experiments - from hydradx.model import run - from hydradx.model.plot_utils import plot_vars - - ########## AGENT CONFIGURATION ########## - # key -> token name, value -> token amount owned by agent - # note that token name of 'omniABC' is used for omnipool LP shares of token 'ABC' - - trader = {'LRNA': 1000000, 'R1': 1000000, 'R2': 1000000} - - # key -> agent_id, value -> agent dict - agent_d = {'Trader': trader} - - ########## ACTION CONFIGURATION ########## - - action_dict = { - 'buy_r1_with_r2': {'token_buy': 'R1', 'token_sell': 'R2', 'amount_buy': 1200, 'action_id': 'Trade', - 'agent_id': 'Trader'}, - 'sell_r1_for_r2': {'token_sell': 'R1', 'token_buy': 'R2', 'amount_sell': 1000, 'action_id': 'Trade', - 'agent_id': 'Trader'} - } - - # list of (action, number of repetitions of action), timesteps = sum of repititions of all actions - trade_count = 1000 - action_ls = [('trade', trade_count)] - - # maps action_id to action dict, with some probability to enable randomness - prob_dict = { - 'trade': {'buy_r1_with_r2': 0.5, - 'sell_r1_for_r2': 0.5} - } - - ########## CFMM INITIALIZATION ########## - - initial_values = oamm.state_dict( - token_list=['HDX', 'USD', 'R1', 'R2'], - r_values=[1000000, 1000000, 500000, 1500000], - p_values=[1, 1, 2, 2 / 3], - fee_assets=0.0015, - fee_lrna=0.0015 - ) - ############################################ SETUP ########################################################## - - config_params = { - 'cfmm_type': "", - 'initial_values': initial_values, - 'agent_d': agent_d, - 'action_ls': action_ls, - 'prob_dict': prob_dict, - 'action_dict': action_dict, - } - - config_dict, state = init_utils.get_configuration(config_params) - - pandas.options.mode.chained_assignment = None # default='warn' - pandas.options.display.float_format = '{:.2f}'.format - - run.config(config_dict, state) - events = run.run() - - rdf, agent_df = processing.postprocessing(events) - - var_list = ['R', 'Q', 'A', 'D', 'L'] - plot_vars(rdf, var_list) - - if __name__ == '__main__': test_swap_lrna_delta_TKN_respects_invariant() test_swap_lrna() @@ -452,6 +388,5 @@ def test_swap_with_graphs(): test_QR_strat() test_add_risk_liquidity() test_remove_risk_liquidity() - #test_add_asset() test_adjust_supply() test_swap_assets() From 34ca7e24a57aba426a53e65973047ad133b3b104 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 10:27:18 -0500 Subject: [PATCH 15/39] actually verify that TVL cap is not exceeded and reject transaction if so --- hydradx/model/amm/omnipool_amm.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 3f6eb50a..0ea6f384 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -336,7 +336,6 @@ def add_risk_liquidity( if LP_id: new_agents[LP_id]['r'][i] -= delta_R - # TODO: does it make any sense to refer to agents[x]['r'][i]? maybe, but look into it # Share update if new_state['S']: new_state['S'][i] *= new_state['R'][i] / old_state['R'][i] @@ -363,9 +362,12 @@ def add_risk_liquidity( delta_t = new_state['Q'][i] * new_state['R'][stable_index]/new_state['Q'][stable_index] - new_state['T'][i] new_state['T'][i] += delta_t + if new_state['C'] and new_state['T'] > new_state['C']: + print('Transaction rejected because it would exceed the TVL cap.') + print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') + return old_state, old_agents + # set price at which liquidity was added - # TODO: should this be averaged with existing price, if this agent has provided liquidity before? - # e.g. p[i] = (old_p[i] * r[i] + new_p[i] * delta_r) / (r[i] + delta_r) if LP_id: new_agents[LP_id]['p'][i] = price_i(new_state, i) From d7ce76478beb8f7a99f837306c6d0791b1c102e8 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 10:35:34 -0500 Subject: [PATCH 16/39] actually verify that TVL cap is not exceeded and reject transaction if so --- hydradx/model/amm/omnipool_amm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 0ea6f384..f6486adf 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -362,7 +362,7 @@ def add_risk_liquidity( delta_t = new_state['Q'][i] * new_state['R'][stable_index]/new_state['Q'][stable_index] - new_state['T'][i] new_state['T'][i] += delta_t - if new_state['C'] and new_state['T'] > new_state['C']: + if 'C' in new_state and new_state['T'] > new_state['C']: print('Transaction rejected because it would exceed the TVL cap.') print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') return old_state, old_agents From de11fba89ddd6ab2134a81ce7d66d3ac654f2640 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 11:11:44 -0500 Subject: [PATCH 17/39] one more algebraic check --- hydradx/tests/test_omnipool_amm.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index b13f57ea..c4b1ecd8 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -147,6 +147,9 @@ def test_add_risk_liquidity(old_state): assert oamm.price_i(old_state, j) == pytest.approx(oamm.price_i(new_state, j)) assert old_state['R'][i] / old_state['S'][i] == pytest.approx(new_state['R'][i] / new_state['S'][i]) + assert old_state['Q'][i] / old_state['R'][i] * (sum(old_state['Q']) + old_state['L']) / sum(old_state['Q']) == \ + pytest.approx(new_state['Q'][i] / new_state['R'][i] * (sum(new_state['Q']) + new_state['L']) / sum(new_state['Q'])) + @given(QR_strat) def test_remove_risk_liquidity(old_state): From 45b1bf08462c8927f131ccdca7ff4bf720895e2d Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 13:27:44 -0500 Subject: [PATCH 18/39] fixed outdated reference to swap_lrna_fee --- hydradx/model/amm/amm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydradx/model/amm/amm.py b/hydradx/model/amm/amm.py index 3fd98742..b0b4a59e 100644 --- a/hydradx/model/amm/amm.py +++ b/hydradx/model/amm/amm.py @@ -65,7 +65,7 @@ def swap(old_state: dict, old_agents: dict, trade: dict) -> tuple: raise if i_buy < 0 or i_sell < 0: - return oamm.swap_lrna_fee(old_state, old_agents, trade['agent_id'], delta_R, delta_Q, max(i_buy, i_sell), + return oamm.swap_lrna(old_state, old_agents, trade['agent_id'], delta_R, delta_Q, max(i_buy, i_sell), old_state['fee_assets'], old_state['fee_LRNA']) elif trade_type == 'sell': From 0e73f1a883345871eb5f69c119695011828ca1b0 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 13:34:39 -0500 Subject: [PATCH 19/39] addressed errors pointed out by Colin and added tvl checks --- hydradx/model/amm/omnipool_amm.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index f6486adf..508ae275 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -1,4 +1,5 @@ import copy +import math import string import pytest @@ -13,7 +14,7 @@ def state_dict( s_values: list[float] = None, omega_values: list[float] = None, L: float = 0, - D: float = 0, + C: float = math.inf, fee_assets: float = 0.0, fee_lrna: float = 0.0, preferred_stablecoin: str = 'USD' @@ -23,7 +24,7 @@ def state_dict( # get initial value of T (total value locked) if not omega_values: - omega_values = [0 for _ in range(len(token_list))] + omega_values = [1 for _ in range(len(token_list))] if not q_values: q_values = [r_values[i] * p_values[i] for i in range(len(token_list))] @@ -36,11 +37,11 @@ def state_dict( b_values = [0] * len(token_list) if not s_values: - b_values = [0] * len(token_list) + s_values = [0] * len(token_list) stablecoin_index = token_list.index(preferred_stablecoin) t_values = [ - q_values[n] / r_values[n] * r_values[stablecoin_index] / q_values[stablecoin_index] + q_values[n] * r_values[stablecoin_index] / q_values[stablecoin_index] for n in range(len(token_list)) ] @@ -53,7 +54,7 @@ def state_dict( 'S': s_values, # quantity of LP shares in each pool 'T': t_values, # tvl per pool in usd 'L': L, # LRNA imbalance - 'D': D, # quantity of LRNA owned by the protocol + 'C': C, # TVL soft cap 'O': omega_values, # per-asset cap on what fraction of TVL can be stored 'fee_assets': fee_assets, 'fee_LRNA': fee_lrna, @@ -128,7 +129,6 @@ def initialize_shares(token_counts, init_d=None, agent_d=None) -> dict: agent_shares = [sum([agent_d[agent_id]['s'][i] for agent_id in agent_d]) for i in range(n)] state['B'] = [state['S'][i] - agent_shares[i] for i in range(n)] - state['D'] = 0 state['T'] = init_d['T'] if 'T' in init_d else None state['H'] = init_d['H'] if 'H' in init_d else None @@ -280,7 +280,7 @@ def swap_assets( # swap_lrna(old_state, old_agents, trader_id, delta_token, 0, i_sell, fee_assets, fee_lrna) # delta_q = first_agents[trader_id]['q'] - old_agents[trader_id]['q'] # # swap LRNA back in for second asset - # new_state, new_agents = swap_lrna(first_state, first_agents, trader_id, 0, -delta_q, i_buy, fee_assets, fee_lrna) + # new_state, new_agents = swap_lrna(first_state, first_agents, trader_id, 0, delta_q, i_buy, fee_assets, fee_lrna) # # delta_Qi = new_state['Q'][i_sell] - old_state['Q'][i_sell] # delta_Qj = new_state['Q'][i_buy] - old_state['Q'][i_buy] @@ -335,6 +335,10 @@ def add_risk_liquidity( new_state['R'][i] += delta_R if LP_id: new_agents[LP_id]['r'][i] -= delta_R + if new_agents[LP_id]['r'][i] < 0: + print('Transaction rejected because agent has insufficient funds.') + print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') + return old_state, old_agents # Share update if new_state['S']: @@ -362,7 +366,12 @@ def add_risk_liquidity( delta_t = new_state['Q'][i] * new_state['R'][stable_index]/new_state['Q'][stable_index] - new_state['T'][i] new_state['T'][i] += delta_t - if 'C' in new_state and new_state['T'] > new_state['C']: + if 'O' in new_state and new_state['Q'][i] / sum(new_state['Q']) > new_state['O'][i]: + print(f'Transaction rejected because it would exceed the weight cap in pool[{i}].') + print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') + return old_state, old_agents + + if 'C' in new_state and sum(new_state['T']) > new_state['C']: print('Transaction rejected because it would exceed the TVL cap.') print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') return old_state, old_agents From 3982cafaa90af25214f0cd7bfeaba36dfd7aef60 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 13:49:12 -0500 Subject: [PATCH 20/39] downgrade type annotations for compatibility with python 9 --- hydradx/model/amm/omnipool_amm.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 508ae275..1d9f8695 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -6,13 +6,13 @@ def state_dict( - token_list: list[str], - r_values: list[float], - q_values: list[float] = None, - p_values: list[float] = None, - b_values: list[float] = None, - s_values: list[float] = None, - omega_values: list[float] = None, + token_list: list, + r_values: list, + q_values: list = None, + p_values: list = None, + b_values: list = None, + s_values: list = None, + omega_values: list = None, L: float = 0, C: float = math.inf, fee_assets: float = 0.0, From fc13fc4f3675fe8ff080db14d87b89357df34ee0 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 14:20:43 -0500 Subject: [PATCH 21/39] include stablecoin_index in state_dict --- hydradx/model/amm/omnipool_amm.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 1d9f8695..53a46ed7 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -58,7 +58,8 @@ def state_dict( 'O': omega_values, # per-asset cap on what fraction of TVL can be stored 'fee_assets': fee_assets, 'fee_LRNA': fee_lrna, - 'preferred_stablecoin': preferred_stablecoin + 'preferred_stablecoin': preferred_stablecoin, + 'stablecoin_index': stablecoin_index } return state @@ -362,7 +363,7 @@ def add_risk_liquidity( new_state['L'] += delta_L # T update: TVL soft cap - stable_index = new_state['token_list'].index(new_state['preferred_stablecoin']) + stable_index = new_state['stablecoin_index'] delta_t = new_state['Q'][i] * new_state['R'][stable_index]/new_state['Q'][stable_index] - new_state['T'][i] new_state['T'][i] += delta_t From 65edfec8a4a0aea1684622ab77aa3b9a7140656b Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 14:25:05 -0500 Subject: [PATCH 22/39] assure all lists are the same length --- hydradx/model/amm/omnipool_amm.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 53a46ed7..a96370d3 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -45,6 +45,9 @@ def state_dict( for n in range(len(token_list)) ] + assert len(r_values) == len(q_values) == len(b_values) == len(s_values) ==\ + len(t_values) == len(omega_values) == len(p_values) + state = { 'token_list': token_list, 'R': r_values, # Risk asset quantities From 0f9452dcb47784ec362cf287335338ab7a60b2d2 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 14:40:02 -0500 Subject: [PATCH 23/39] delete irrelevant comment --- hydradx/model/system.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hydradx/model/system.py b/hydradx/model/system.py index c6fa4d30..a8912bb0 100644 --- a/hydradx/model/system.py +++ b/hydradx/model/system.py @@ -123,6 +123,4 @@ def agenthub(params, substep, state_history, prev_state, policy_input): def posthub(params, substep, state_history, prev_state, policy_input): - # if 'T' in prev_state['AMM'] and prev_state['AMM']['T'] is not None: - # return ('AMM', amm.adjust_supply(prev_state['AMM'])) - return ('AMM', prev_state['AMM']) \ No newline at end of file + return 'AMM', prev_state['AMM'] \ No newline at end of file From eb3a71c315b6e7055372422c1c6374d8a846d5ee Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 15:34:41 -0500 Subject: [PATCH 24/39] refactor tests and add checks again TVL caps --- hydradx/tests/test_omnipool_amm.py | 128 ++++++++++++++--------------- 1 file changed, 63 insertions(+), 65 deletions(-) diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index c4b1ecd8..f73405b4 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -47,7 +47,7 @@ def get_state_from_strat(x, key_list): # Indexes i_strat = st.integers(min_value=0) -RQBSHD_strat = get_tkn_ct_strat(6).map(lambda x: get_state_from_strat(x, ['R', 'Q', 'B', 'S', 'H', 'D'])) +RQBSHD_strat = get_tkn_ct_strat(6).map(lambda x: get_state_from_strat(x, ['R', 'Q', 'B', 'S', 'H'])) # Tests over input space of Q, R, delta_TKN, i @@ -122,13 +122,14 @@ def test_QR_strat(d): @given(QR_strat) -def test_add_risk_liquidity(old_state): - n = len(old_state['R']) +def test_add_risk_liquidity(initial_state): + nof_tokens = len(initial_state['R']) old_state = oamm.state_dict( - token_list=['HDX', 'USD'] + ['token'] * (n-2), - r_values=old_state['R'], - s_values=[1500000] * 2, - p_values=[oamm.price_i(old_state, j) for j in range(n)] + token_list=['HDX', 'USD'] + ['token'] * (nof_tokens-2), + r_values=initial_state['R'], + s_values=[1500000] * nof_tokens, + p_values=[oamm.price_i(initial_state, j) for j in range(nof_tokens)], + omega_values=[0.5] * nof_tokens ) LP_id = 'LP' @@ -147,19 +148,55 @@ def test_add_risk_liquidity(old_state): assert oamm.price_i(old_state, j) == pytest.approx(oamm.price_i(new_state, j)) assert old_state['R'][i] / old_state['S'][i] == pytest.approx(new_state['R'][i] / new_state['S'][i]) - assert old_state['Q'][i] / old_state['R'][i] * (sum(old_state['Q']) + old_state['L']) / sum(old_state['Q']) == \ - pytest.approx(new_state['Q'][i] / new_state['R'][i] * (sum(new_state['Q']) + new_state['L']) / sum(new_state['Q'])) + assert old_state['L'] / sum(old_state['Q']) == pytest.approx(new_state['L'] / sum(new_state['Q'])) + + # check enforcement of agent's spending limit + new_state, new_agents = oamm.add_risk_liquidity(old_state, old_agents, LP_id, old_agents[LP_id]['r'][0] + 1, 0) + assert new_state, new_agents == (old_state, old_agents) + new_state, new_agents = oamm.add_risk_liquidity(old_state, old_agents, LP_id, old_agents[LP_id]['r'][0] - 1, 0) + assert new_state, new_agents != (old_state, old_agents) + + # check enforcement of overall TVL cap + stablecoin_index = old_state['stablecoin_index'] + TVL = sum([ + old_state['Q'][i] * old_state['R'][stablecoin_index] / old_state['Q'][stablecoin_index] + for i in range(len(old_state['token_list'])) + ]) + assert TVL == sum(old_state['T']) + old_state['C'] = TVL + new_state, new_agents = oamm.add_risk_liquidity(old_state, old_agents, LP_id, 1, 0) + assert new_state, new_agents == (old_state, old_agents) + + # check enforcement of per-asset weight limit + total_Q = sum(old_state['Q']) + for i in range(nof_tokens): + old_state['Q'][i] = total_Q / nof_tokens + old_state['R'][i] = total_Q / nof_tokens + old_state['T'][i] = total_Q / nof_tokens + i = 0 + asset_price = old_state['R'][i] / old_state['Q'][i] + max_amount = (old_state['O'][i] - 1 / nof_tokens) / old_state['O'][i] * total_Q * asset_price + # make sure checks other than weight limit will pass + old_state['C'] = total_Q * 2 + old_agents[LP_id]['r'][i] = max_amount * 2 + + new_state, new_agents = oamm.add_risk_liquidity(old_state, old_agents, LP_id, max_amount + 1, i) + if not (new_state, new_agents) == (old_state, old_agents): + raise ValueError(f'illegal transaction passed against weight limit in {i}') + new_state, new_agents = oamm.add_risk_liquidity(old_state, old_agents, LP_id, max_amount - 1, i) + if not (new_state, new_agents) != (old_state, old_agents): + raise ValueError(f'legal transaction failed against weight limit in {i}') @given(QR_strat) -def test_remove_risk_liquidity(old_state): - n = len(old_state['R']) - n = len(old_state['R']) +def test_remove_risk_liquidity(initial_state): + n = len(initial_state['R']) + n = len(initial_state['R']) old_state = oamm.state_dict( token_list=['HDX', 'USD'] + ['token'] * (n-2), - r_values=old_state['R'], - s_values=[1500000] * 2, - p_values=[oamm.price_i(old_state, j) for j in range(n)], + r_values=initial_state['R'], + s_values=[1500000] * n, + p_values=[oamm.price_i(initial_state, j) for j in range(n)], b_values=[0] * n ) @@ -191,46 +228,15 @@ def test_remove_risk_liquidity(old_state): i] == pytest.approx(val_withdrawn) -@given(QR_strat) -def test_swap_lrna(old_state): - n = len(old_state['R']) - old_state = oamm.state_dict( - q_values=old_state['Q'], - r_values=old_state['R'], - token_list=['HDX', 'USD'] + ['?'] * (n - 2), - ) - trader_id = 'trader' - old_agents = { - trader_id: { - 'r': [1000] * n, - 'q': 1000, - 's': [0] * n - } - } - delta_R = 1000 - delta_Q = 1000 - i = 0 - - # Test with trader selling asset i - new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, delta_R, 0, i) - assert oamm.asset_invariant(old_state, i) == pytest.approx(oamm.asset_invariant(new_state, i)) - - old_state, old_agents = new_state, new_agents - - # Test with trader selling LRNA - new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i) - assert oamm.asset_invariant(old_state, i) == pytest.approx(oamm.asset_invariant(new_state, i)) - - fee_strat = st.floats(min_value=0.0001, max_value=0.1, allow_nan=False, allow_infinity=False) @given(QR_strat, fee_strat) -def test_swap_lrna_fee(old_state, fee): - n = len(old_state['R']) +def test_swap_lrna(initial_state, fee): + n = len(initial_state['R']) old_state = oamm.state_dict( - q_values=old_state['Q'], - r_values=old_state['R'], + q_values=initial_state['Q'], + r_values=initial_state['R'], token_list=['HDX', 'USD'] + ['?'] * (n - 2), ) trader_id = 'trader' @@ -251,11 +257,9 @@ def test_swap_lrna_fee(old_state, fee): delta_Q = 1000 i = 0 + # Test with trader selling asset i new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, delta_R, 0, i, fee, fee) - # assert oamm.asset_invariant(old_state, i) == pytest.approx(oamm.asset_invariant(new_state, i)) - assert sum(old_state['Q']) + old_agents[trader_id]['q'] == \ - pytest.approx(sum(new_state['Q']) + new_state['D'] + new_agents[trader_id]['q']) # Test with trader selling LRNA new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i, fee, fee) @@ -268,16 +272,17 @@ def test_swap_lrna_fee(old_state, fee): assert old_state['Q'][i] / old_state['R'][i] == \ pytest.approx((new_state['Q'][i] + new_state['L']) / new_state['R'][i]) - -fee_strat = st.floats(min_value=0.0001, max_value=0.1, allow_nan=False, allow_infinity=False) + delta_R = 1000 + delta_Q = 1000 + i = 0 @given(QR_strat, fee_strat, fee_strat) -def test_swap_assets(old_state, fee_lrna, fee_assets): +def test_swap_assets(initial_state, fee_lrna, fee_assets): - n = len(old_state['R']) + n = len(initial_state['R']) old_state = oamm.state_dict( - r_values=old_state['R'], + r_values=initial_state['R'], p_values=[1]*n, s_values=[1000] * n, b_values=[100] * n, @@ -315,9 +320,6 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): feeless_state, feeless_agents = \ oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, 0, 0) for j in range(len(old_state['R'])): - # price tracks feeless price - # if oamm.price_i(feeless_state, j) != pytest.approx(oamm.price_i(asset_fee_state, j)): - # raise ValueError("price doesn't track feeless price") # assets in pools only go up compared to asset_fee_state assert min(asset_fee_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0), \ f"asset in pool {j} is lesser when compared with no-fee case" @@ -353,9 +355,6 @@ def test_swap_assets(old_state, fee_lrna, fee_assets): assert buy_agents[trader_id]['q'] == pytest.approx(new_agents[trader_id]['q']) -price_strat = st.floats(min_value=1e-5, max_value=1e5, allow_nan=False, allow_infinity=False) - - # Want to make sure this does not change pij, only changes piq proportionally # Also should make sure things stay reasonably bounded # Requires state with H, T, Q, burn_rate @@ -386,7 +385,6 @@ def test_adjust_supply(old_state, r): if __name__ == '__main__': test_swap_lrna_delta_TKN_respects_invariant() test_swap_lrna() - test_swap_lrna_fee() test_weights() test_QR_strat() test_add_risk_liquidity() From 0189b917d373beba7b4bd5021435db4d4190d416 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 15:53:00 -0500 Subject: [PATCH 25/39] make sure to test the invariant on lnra swap when there is no fee --- hydradx/tests/test_omnipool_amm.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index f73405b4..19c414b1 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -257,13 +257,14 @@ def test_swap_lrna(initial_state, fee): delta_Q = 1000 i = 0 - # Test with trader selling asset i - new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, delta_R, 0, i, fee, fee) + feeless_state, feeless_agents = oamm.swap_lrna(old_state, old_agents, trader_id, delta_R, 0, i, 0, 0) + assert oamm.asset_invariant(feeless_state, i) == pytest.approx(oamm.asset_invariant(old_state, i)) # Test with trader selling LRNA new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i, fee, fee) feeless_state, feeless_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i, 0, 0) + assert oamm.asset_invariant(feeless_state, i) == pytest.approx(oamm.asset_invariant(old_state, i)) for j in range(len(old_state['R'])): # assert oamm.price_i(feeless_state, j) == pytest.approx(oamm.price_i(new_state, j)) assert min(new_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0) From 473c20602facb9481d86c8054ad58f1f7a24151a Mon Sep 17 00:00:00 2001 From: Colin Date: Thu, 7 Apr 2022 16:18:56 -0500 Subject: [PATCH 26/39] Fixing sign of delta q^\alpha to match convention used throughout specs --- hydradx/spec/SwapLRNA.ipynb | 10 +++++----- hydradx/spec/algebraic_checks/SwapLRNA.ipynb | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/hydradx/spec/SwapLRNA.ipynb b/hydradx/spec/SwapLRNA.ipynb index a0b58109..d686d29b 100644 --- a/hydradx/spec/SwapLRNA.ipynb +++ b/hydradx/spec/SwapLRNA.ipynb @@ -59,7 +59,7 @@ "$$\n", "#### Case 2: HDX sold\n", "$$\n", - "\\Delta q^\\alpha \\leq q^\\alpha\n", + "-\\Delta q^\\alpha \\leq q^\\alpha\n", "$$" ] }, @@ -76,9 +76,9 @@ "id": "9731de03-4924-4f6b-a6ce-bdb5fdcf91a4", "metadata": {}, "source": [ - "### Case 1: LRNA sold, $\\Delta q^\\alpha > 0$ specified\n", + "### Case 1: LRNA sold, $\\Delta q^\\alpha < 0$ specified\n", "\n", - "If $\\Delta q^\\alpha > q^\\alpha$, the user does not have enough LRNA to sell, and the transaction must fail." + "If $-\\Delta q^\\alpha > q^\\alpha$, the user does not have enough LRNA to sell, and the transaction must fail." ] }, { @@ -88,7 +88,7 @@ "source": [ "$$\n", "\\begin{align}\n", - "\\Delta Q_i &= \\Delta q^\\alpha\\\\\n", + "\\Delta Q_i &= -\\Delta q^\\alpha\\\\\n", "\\Delta R_i &= R_i\\frac{- \\Delta Q_i}{Q_i + \\Delta Q_i}(1 - f_A)\\\\\n", "\\Delta L &= -\\Delta Q_i\\left(1 + (1 - f_A)\\frac{Q_i}{Q_i + \\Delta Q_i}\\right)\\\\\n", "\\Delta r_i^\\alpha &= - \\Delta R_i\\\\\n", @@ -138,7 +138,7 @@ "\\end{align}\n", "$$\n", "\n", - "If $\\Delta q^\\alpha > q^\\alpha$, the user does not have enough LRNA to sell, and the transaction must fail." + "If $-\\Delta q^\\alpha > q^\\alpha$, the user does not have enough LRNA to sell, and the transaction must fail." ] }, { diff --git a/hydradx/spec/algebraic_checks/SwapLRNA.ipynb b/hydradx/spec/algebraic_checks/SwapLRNA.ipynb index 85e75d3f..41d20750 100644 --- a/hydradx/spec/algebraic_checks/SwapLRNA.ipynb +++ b/hydradx/spec/algebraic_checks/SwapLRNA.ipynb @@ -44,7 +44,7 @@ "$$\n", "#### Case 2: HDX sold\n", "$$\n", - "\\Delta q^\\alpha \\leq q^\\alpha\n", + "-\\Delta q^\\alpha \\leq q^\\alpha\n", "$$" ] }, @@ -61,9 +61,9 @@ "id": "9731de03-4924-4f6b-a6ce-bdb5fdcf91a4", "metadata": {}, "source": [ - "### Case 1: LRNA sold, $\\Delta q^\\alpha > 0$ specified\n", + "### Case 1: LRNA sold, $\\Delta q^\\alpha < 0$ specified\n", "\n", - "If $\\Delta q^\\alpha > q^\\alpha$, the user does not have enough LRNA to sell, and the transaction must fail." + "If $-\\Delta q^\\alpha > q^\\alpha$, the user does not have enough LRNA to sell, and the transaction must fail." ] }, { @@ -73,7 +73,7 @@ "source": [ "$$\n", "\\begin{align}\n", - "\\Delta Q_i &= \\Delta q^\\alpha\\\\\n", + "\\Delta Q_i &= -\\Delta q^\\alpha\\\\\n", "\\Delta R_i &= R_i\\frac{- \\Delta Q_i}{Q_i + \\Delta Q_i}(1 - f_A)\\\\\n", "\\Delta L &= -\\Delta Q_i\\left(1 + (1 - f_A)\\frac{Q_i}{Q_i + \\Delta Q_i}\\right)\\\\\n", "\\Delta r_i^\\alpha &= - \\Delta R_i\\\\\n", @@ -103,7 +103,7 @@ "\\end{align}\n", "$$\n", "\n", - "If $\\Delta q^\\alpha > q^\\alpha$, the user does not have enough LRNA to sell, and the transaction must fail." + "If $-\\Delta q^\\alpha > q^\\alpha$, the user does not have enough LRNA to sell, and the transaction must fail." ] }, { From b258ac9b3456019c41adb6ebcdf8fd7659d633cb Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 16:34:15 -0500 Subject: [PATCH 27/39] update swap_lrna to reflect the corrected sign in the spec --- hydradx/model/amm/omnipool_amm.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index a96370d3..084cb021 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -148,8 +148,8 @@ def swap_lrna( old_state: dict, old_agents: dict, trader_id: string, - delta_R: float, - delta_Q: float, + delta_Ra: float, + delta_Qa: float, i: int, fee_assets: float = 0, fee_lrna: float = 0 @@ -159,19 +159,19 @@ def swap_lrna( new_state = copy.deepcopy(old_state) new_agents = copy.deepcopy(old_agents) - if delta_Q > 0: + if delta_Qa < 0: + delta_Q = -delta_Qa delta_R = old_state['R'][i] * -delta_Q / (delta_Q + old_state['Q'][i]) * (1 - fee_assets) delta_L = -delta_Q * (1 + (1 - fee_assets) * old_state['Q'][i] / (old_state['Q'][i] + delta_Q)) delta_Ra = -delta_R - delta_Qa = delta_Q - elif delta_R > 0: - delta_Ra = delta_R + elif delta_Ra > 0: delta_R = -delta_Ra delta_Q = old_state['Q'][i] * -delta_R / (old_state['R'][i] * (1 - fee_assets) + delta_R) delta_L = -delta_Q * (1 + (1 - fee_assets) * old_state['Q'][i] / (old_state['Q'][i] + delta_Q)) delta_Qa = -delta_Q else: - raise ValueError('Either delta_q or delta_r must be positive.') + print(f'Invalid swap (delta_Qa {delta_Qa}, delta_Ra {delta_Ra}') + return old_state, old_agents new_agents[trader_id]['q'] += delta_Qa new_agents[trader_id]['r'][i] += delta_Ra From 07787f60b47c5e8122ca7a6684fb18195df6927c Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 16:35:27 -0500 Subject: [PATCH 28/39] update test_swap_lrna to consistently specify deltas from the perspective of the agent --- hydradx/tests/test_omnipool_amm.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index 19c414b1..eb9a252b 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -253,17 +253,17 @@ def test_swap_lrna(initial_state, fee): 's': [900] * n } } - delta_R = 1000 - delta_Q = 1000 + delta_Ra = 1000 + delta_Qa = -1000 i = 0 # Test with trader selling asset i - feeless_state, feeless_agents = oamm.swap_lrna(old_state, old_agents, trader_id, delta_R, 0, i, 0, 0) + feeless_state, feeless_agents = oamm.swap_lrna(old_state, old_agents, trader_id, delta_Ra, 0, i, 0, 0) assert oamm.asset_invariant(feeless_state, i) == pytest.approx(oamm.asset_invariant(old_state, i)) # Test with trader selling LRNA - new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i, fee, fee) - feeless_state, feeless_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Q, i, 0, 0) + new_state, new_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Qa, i, fee, fee) + feeless_state, feeless_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Qa, i, 0, 0) assert oamm.asset_invariant(feeless_state, i) == pytest.approx(oamm.asset_invariant(old_state, i)) for j in range(len(old_state['R'])): # assert oamm.price_i(feeless_state, j) == pytest.approx(oamm.price_i(new_state, j)) @@ -273,10 +273,6 @@ def test_swap_lrna(initial_state, fee): assert old_state['Q'][i] / old_state['R'][i] == \ pytest.approx((new_state['Q'][i] + new_state['L']) / new_state['R'][i]) - delta_R = 1000 - delta_Q = 1000 - i = 0 - @given(QR_strat, fee_strat, fee_strat) def test_swap_assets(initial_state, fee_lrna, fee_assets): From f6d6ae9096d8ec4fd1f3089beb9dcf3bf88f225b Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 7 Apr 2022 16:41:15 -0500 Subject: [PATCH 29/39] comment out print statements --- hydradx/model/amm/omnipool_amm.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 084cb021..6c96380e 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -2,8 +2,6 @@ import math import string -import pytest - def state_dict( token_list: list, @@ -170,7 +168,7 @@ def swap_lrna( delta_L = -delta_Q * (1 + (1 - fee_assets) * old_state['Q'][i] / (old_state['Q'][i] + delta_Q)) delta_Qa = -delta_Q else: - print(f'Invalid swap (delta_Qa {delta_Qa}, delta_Ra {delta_Ra}') + # print(f'Invalid swap (delta_Qa {delta_Qa}, delta_Ra {delta_Ra}') return old_state, old_agents new_agents[trader_id]['q'] += delta_Qa @@ -340,8 +338,8 @@ def add_risk_liquidity( if LP_id: new_agents[LP_id]['r'][i] -= delta_R if new_agents[LP_id]['r'][i] < 0: - print('Transaction rejected because agent has insufficient funds.') - print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') + # print('Transaction rejected because agent has insufficient funds.') + # print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') return old_state, old_agents # Share update @@ -371,13 +369,13 @@ def add_risk_liquidity( new_state['T'][i] += delta_t if 'O' in new_state and new_state['Q'][i] / sum(new_state['Q']) > new_state['O'][i]: - print(f'Transaction rejected because it would exceed the weight cap in pool[{i}].') - print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') + # print(f'Transaction rejected because it would exceed the weight cap in pool[{i}].') + # print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') return old_state, old_agents if 'C' in new_state and sum(new_state['T']) > new_state['C']: - print('Transaction rejected because it would exceed the TVL cap.') - print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') + # print('Transaction rejected because it would exceed the TVL cap.') + # print(f'agent {LP_id}, asset {new_state["token_list"][i]}, amount {delta_R}') return old_state, old_agents # set price at which liquidity was added From 81b0ea9380c7dd9f1b5945d8ba7f0b778af271b9 Mon Sep 17 00:00:00 2001 From: Colin Date: Tue, 12 Apr 2022 14:07:09 -0500 Subject: [PATCH 30/39] Fixing weight cap check to include delta Q_i in denominator --- hydradx/spec/AddLiquidity.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydradx/spec/AddLiquidity.ipynb b/hydradx/spec/AddLiquidity.ipynb index 02c6d434..3f843311 100644 --- a/hydradx/spec/AddLiquidity.ipynb +++ b/hydradx/spec/AddLiquidity.ipynb @@ -57,7 +57,7 @@ "$$\n", "\\Delta Q_i = Q_i \\frac{\\Delta R_i}{R_i}\\\\\n", "$$\n", - "If $\\frac{Q_i + \\Delta Q_i}{Q} > \\omega_i$, the transaction fails due to the weight cap on asset $i$.\n", + "If $\\frac{Q_i + \\Delta Q_i}{Q + \\Delta Q_i} > \\omega_i$, the transaction fails due to the weight cap on asset $i$.\n", "\n", "$$\n", "\\begin{align}\n", From 4dee2ad4c4608cb63055e8fb32b7acf1a21b5ef3 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 12 Apr 2022 15:06:44 -0500 Subject: [PATCH 31/39] debug --- hydradx/tests/test_amm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hydradx/tests/test_amm.py b/hydradx/tests/test_amm.py index be887d22..5a7ccf1d 100644 --- a/hydradx/tests/test_amm.py +++ b/hydradx/tests/test_amm.py @@ -32,7 +32,7 @@ def get_state_from_strat(x, key_list): # States with R, Q lists QiRi_strat = get_tkn_ct_strat(2) -QR_strat = st.lists(QiRi_strat, min_size=2, max_size=5).map(lambda x: get_state_from_strat(x, ['Q', 'R'])) +QR_strat = st.lists(QiRi_strat, min_size=3, max_size=5).map(lambda x: get_state_from_strat(x, ['Q', 'R'])) @given(QR_strat) def test_swap(old_state) -> tuple: @@ -40,7 +40,7 @@ def test_swap(old_state) -> tuple: old_state['token_list'] = ['DOT', 'DAI', 'HDX'] old_state['fee_assets'] = 0 old_state['fee_LRNA'] = 0 - old_state['D'] = 0 + old_state['L'] = 0 trader_id = 'trader' LP_id = 'LP' From afb4ddd7ed2d2a11d2a77e09a2dab21d7745038b Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 12 Apr 2022 16:49:59 -0500 Subject: [PATCH 32/39] found another sneaky reference to 'D' --- hydradx/model/processing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/hydradx/model/processing.py b/hydradx/model/processing.py index 2bd599b0..d48013ce 100644 --- a/hydradx/model/processing.py +++ b/hydradx/model/processing.py @@ -84,7 +84,6 @@ def get_state_from_row(row) -> dict: 'Q': [0] * row['n'], 'R': [0] * row['n'], 'A': [0] * row['n'], - 'D': row['D'], 'S': [0] * row['n'], 'B': [0] * row['n'], 'L': row['L'] From a86315165ebf5ca9b54fec0c0b67e3c2a6e23eca Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 12 Apr 2022 16:59:04 -0500 Subject: [PATCH 33/39] Prevent LRNA swaps when there is not enough in the asset pool --- hydradx/model/amm/omnipool_amm.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 6c96380e..80ba7c57 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -154,6 +154,10 @@ def swap_lrna( ) -> tuple: """Compute new state after LRNA swap""" + if delta_Ra >= old_state['R'][i] * (1 - fee_assets): + # insufficient assets in pool, transaction fails + return old_state, old_agents + new_state = copy.deepcopy(old_state) new_agents = copy.deepcopy(old_agents) From 1afce19743aaf7bc8dfa72d81a31996c2471173c Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 12 Apr 2022 17:06:29 -0500 Subject: [PATCH 34/39] change 'raise' to 'assert' --- hydradx/tests/test_omnipool_amm.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index eb9a252b..c8c0baca 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -181,11 +181,9 @@ def test_add_risk_liquidity(initial_state): old_agents[LP_id]['r'][i] = max_amount * 2 new_state, new_agents = oamm.add_risk_liquidity(old_state, old_agents, LP_id, max_amount + 1, i) - if not (new_state, new_agents) == (old_state, old_agents): - raise ValueError(f'illegal transaction passed against weight limit in {i}') + assert new_state['R'][i] == old_state['R'][i], f'illegal transaction passed against weight limit in {i}' new_state, new_agents = oamm.add_risk_liquidity(old_state, old_agents, LP_id, max_amount - 1, i) - if not (new_state, new_agents) != (old_state, old_agents): - raise ValueError(f'legal transaction failed against weight limit in {i}') + assert new_state['R'][i] != old_state['R'][i], f'legal transaction failed against weight limit in {i}' @given(QR_strat) From 94d50264374df14e8cb992c210f09663b6cde5a7 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 12 Apr 2022 17:15:01 -0500 Subject: [PATCH 35/39] renamed some variables --- hydradx/tests/test_amm.py | 10 ++--- hydradx/tests/test_omnipool_amm.py | 69 +++++++++++++++--------------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/hydradx/tests/test_amm.py b/hydradx/tests/test_amm.py index 5a7ccf1d..978ff75f 100644 --- a/hydradx/tests/test_amm.py +++ b/hydradx/tests/test_amm.py @@ -36,7 +36,7 @@ def get_state_from_strat(x, key_list): @given(QR_strat) def test_swap(old_state) -> tuple: - n = len(old_state['R']) + token_count = len(old_state['R']) old_state['token_list'] = ['DOT', 'DAI', 'HDX'] old_state['fee_assets'] = 0 old_state['fee_LRNA'] = 0 @@ -46,14 +46,14 @@ def test_swap(old_state) -> tuple: LP_id = 'LP' old_agents = { trader_id: { - 'r': [10000] * n, + 'r': [10000] * token_count, 'q': 10000, - 's': [0] * n + 's': [0] * token_count }, LP_id: { - 'r': [0] * n, + 'r': [0] * token_count, 'q': 0, - 's': [900] * n + 's': [900] * token_count } } diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index c8c0baca..a9ea850c 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -47,7 +47,7 @@ def get_state_from_strat(x, key_list): # Indexes i_strat = st.integers(min_value=0) -RQBSHD_strat = get_tkn_ct_strat(6).map(lambda x: get_state_from_strat(x, ['R', 'Q', 'B', 'S', 'H'])) +RQBSH_strat = get_tkn_ct_strat(6).map(lambda x: get_state_from_strat(x, ['R', 'Q', 'B', 'S', 'H'])) # Tests over input space of Q, R, delta_TKN, i @@ -123,13 +123,13 @@ def test_QR_strat(d): @given(QR_strat) def test_add_risk_liquidity(initial_state): - nof_tokens = len(initial_state['R']) + token_count = len(initial_state['R']) old_state = oamm.state_dict( - token_list=['HDX', 'USD'] + ['token'] * (nof_tokens-2), + token_list=['HDX', 'USD'] + ['token'] * (token_count-2), r_values=initial_state['R'], - s_values=[1500000] * nof_tokens, - p_values=[oamm.price_i(initial_state, j) for j in range(nof_tokens)], - omega_values=[0.5] * nof_tokens + s_values=[1500000] * token_count, + p_values=[oamm.price_i(initial_state, j) for j in range(token_count)], + omega_values=[0.5] * token_count ) LP_id = 'LP' @@ -169,13 +169,13 @@ def test_add_risk_liquidity(initial_state): # check enforcement of per-asset weight limit total_Q = sum(old_state['Q']) - for i in range(nof_tokens): - old_state['Q'][i] = total_Q / nof_tokens - old_state['R'][i] = total_Q / nof_tokens - old_state['T'][i] = total_Q / nof_tokens + for i in range(token_count): + old_state['Q'][i] = total_Q / token_count + old_state['R'][i] = total_Q / token_count + old_state['T'][i] = total_Q / token_count i = 0 asset_price = old_state['R'][i] / old_state['Q'][i] - max_amount = (old_state['O'][i] - 1 / nof_tokens) / old_state['O'][i] * total_Q * asset_price + max_amount = (old_state['O'][i] - 1 / token_count) / old_state['O'][i] * total_Q * asset_price # make sure checks other than weight limit will pass old_state['C'] = total_Q * 2 old_agents[LP_id]['r'][i] = max_amount * 2 @@ -188,23 +188,22 @@ def test_add_risk_liquidity(initial_state): @given(QR_strat) def test_remove_risk_liquidity(initial_state): - n = len(initial_state['R']) - n = len(initial_state['R']) + token_count = len(initial_state['R']) old_state = oamm.state_dict( - token_list=['HDX', 'USD'] + ['token'] * (n-2), + token_list=['HDX', 'USD'] + ['token'] * (token_count-2), r_values=initial_state['R'], - s_values=[1500000] * n, - p_values=[oamm.price_i(initial_state, j) for j in range(n)], - b_values=[0] * n + s_values=[1500000] * token_count, + p_values=[oamm.price_i(initial_state, j) for j in range(token_count)], + b_values=[0] * token_count ) LP_id = 'LP' p_init = 1 old_agents = { LP_id: { - 'r': [0] * n, - 's': [1000] * n, - 'p': [p_init] * n, + 'r': [0] * token_count, + 's': [1000] * token_count, + 'p': [p_init] * token_count, 'q': 0 } } @@ -231,24 +230,24 @@ def test_remove_risk_liquidity(initial_state): @given(QR_strat, fee_strat) def test_swap_lrna(initial_state, fee): - n = len(initial_state['R']) + token_count = len(initial_state['R']) old_state = oamm.state_dict( q_values=initial_state['Q'], r_values=initial_state['R'], - token_list=['HDX', 'USD'] + ['?'] * (n - 2), + token_list=['HDX', 'USD'] + ['?'] * (token_count - 2), ) trader_id = 'trader' LP_id = 'lp' old_agents = { trader_id: { - 'r': [1000] * n, + 'r': [1000] * token_count, 'q': 1000, - 's': [0] * n + 's': [0] * token_count }, LP_id: { - 'r': [0] * n, + 'r': [0] * token_count, 'q': 0, - 's': [900] * n + 's': [900] * token_count } } delta_Ra = 1000 @@ -275,13 +274,13 @@ def test_swap_lrna(initial_state, fee): @given(QR_strat, fee_strat, fee_strat) def test_swap_assets(initial_state, fee_lrna, fee_assets): - n = len(initial_state['R']) + token_count = len(initial_state['R']) old_state = oamm.state_dict( r_values=initial_state['R'], - p_values=[1]*n, - s_values=[1000] * n, - b_values=[100] * n, - token_list=['HDX', 'USD'] + ['?'] * (n-2), + p_values=[1]*token_count, + s_values=[1000] * token_count, + b_values=[100] * token_count, + token_list=['HDX', 'USD'] + ['?'] * (token_count-2), preferred_stablecoin='USD', fee_assets=fee_assets, fee_lrna=fee_lrna @@ -292,14 +291,14 @@ def test_swap_assets(initial_state, fee_lrna, fee_assets): old_agents = { trader_id: { - 'r': [10000] * n, + 'r': [10000] * token_count, 'q': 10000, - 's': [0] * n + 's': [0] * token_count }, LP_id: { - 'r': [0] * n, + 'r': [0] * token_count, 'q': 0, - 's': [900] * n + 's': [900] * token_count } } delta_R = 1000 From accdccb93d8a4c524c1c4f667eb5b6549a29b8bd Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 12 Apr 2022 17:28:37 -0500 Subject: [PATCH 36/39] update yet more lingering references to hdx --- hydradx/spec/AddLiquidity.ipynb | 50 +++++++++++++++++++++++----- hydradx/spec/SwapLRNA.ipynb | 13 ++++---- hydradx/spec/WithdrawLiquidity.ipynb | 27 +++++++++------ 3 files changed, 65 insertions(+), 25 deletions(-) diff --git a/hydradx/spec/AddLiquidity.ipynb b/hydradx/spec/AddLiquidity.ipynb index 3f843311..ff4f8483 100644 --- a/hydradx/spec/AddLiquidity.ipynb +++ b/hydradx/spec/AddLiquidity.ipynb @@ -122,18 +122,52 @@ "\n", " # Token amounts update\n", " new_state['R'][i] += delta_R\n", - " new_agents[LP_id]['r'][i] -= delta_R\n", + " if LP_id:\n", + " new_agents[LP_id]['r'][i] -= delta_R\n", + " if new_agents[LP_id]['r'][i] < 0:\n", + " # print('Transaction rejected because agent has insufficient funds.')\n", + " # print(f'agent {LP_id}, asset {new_state[\"token_list\"][i]}, amount {delta_R}')\n", + " return old_state, old_agents\n", "\n", " # Share update\n", - " new_state['S'][i] *= new_state['R'][i] / old_state['R'][i]\n", - " new_agents[LP_id]['s'][i] += new_state['S'][i] - old_state['S'][i]\n", + " if new_state['S']:\n", + " new_state['S'][i] *= new_state['R'][i] / old_state['R'][i]\n", + " else:\n", + " new_state['S'] = 1\n", "\n", - " # HDX add\n", - " delta_Q = old_state['P'][i] * delta_R\n", + " if LP_id:\n", + " # shares go to provisioning agent\n", + " new_agents[LP_id]['s'][i] += new_state['S'][i] - old_state['S'][i]\n", + " else:\n", + " # shares go to protocol\n", + " new_state['B'] += new_state['S'][i] - old_state['S'][i]\n", + "\n", + " # LRNA add (mint)\n", + " delta_Q = price_i(old_state, i) * delta_R\n", " new_state['Q'][i] += delta_Q\n", "\n", + " # L update: LRNA fees to be burned before they will start to accumulate again\n", + " delta_L = delta_R * old_state['Q'][i]/old_state['R'][i] * old_state['L']/sum(old_state['Q'])\n", + " new_state['L'] += delta_L\n", + "\n", + " # T update: TVL soft cap\n", + " stable_index = new_state['stablecoin_index']\n", + " delta_t = new_state['Q'][i] * new_state['R'][stable_index]/new_state['Q'][stable_index] - new_state['T'][i]\n", + " new_state['T'][i] += delta_t\n", + "\n", + " if 'O' in new_state and new_state['Q'][i] / sum(new_state['Q']) > new_state['O'][i]:\n", + " # print(f'Transaction rejected because it would exceed the weight cap in pool[{i}].')\n", + " # print(f'agent {LP_id}, asset {new_state[\"token_list\"][i]}, amount {delta_R}')\n", + " return old_state, old_agents\n", + "\n", + " if 'C' in new_state and sum(new_state['T']) > new_state['C']:\n", + " # print('Transaction rejected because it would exceed the TVL cap.')\n", + " # print(f'agent {LP_id}, asset {new_state[\"token_list\"][i]}, amount {delta_R}')\n", + " return old_state, old_agents\n", + "\n", " # set price at which liquidity was added\n", - " new_agents[LP_id]['p'][i] = price_i(new_state, i)\n", + " if LP_id:\n", + " new_agents[LP_id]['p'][i] = price_i(new_state, i)\n", "\n", " return new_state, new_agents\n", "\n" @@ -155,7 +189,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -169,7 +203,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.9.7" } }, "nbformat": 4, diff --git a/hydradx/spec/SwapLRNA.ipynb b/hydradx/spec/SwapLRNA.ipynb index d686d29b..65f3f8d0 100644 --- a/hydradx/spec/SwapLRNA.ipynb +++ b/hydradx/spec/SwapLRNA.ipynb @@ -57,7 +57,7 @@ "$$\n", "\\Delta r^\\alpha \\leq r_i^\\alpha\n", "$$\n", - "#### Case 2: HDX sold\n", + "#### Case 2: LRNA sold\n", "$$\n", "-\\Delta q^\\alpha \\leq q^\\alpha\n", "$$" @@ -113,7 +113,7 @@ } ], "source": [ - "print(inspect.getsource(swap_hdx_delta_Ri))" + "print(inspect.getsource(swap_lrna_delta_Ri))" ] }, { @@ -158,7 +158,7 @@ } ], "source": [ - "print(inspect.getsource(swap_hdx_delta_Qi))" + "print(inspect.getsource(swap_lrna_delta_Qi))" ] }, { @@ -239,8 +239,7 @@ } ], "source": [ - "print(inspect.getsource(swap_lhdx))\n", - "print(inspect.getsource(swap_lhdx_fee))" + "print(inspect.getsource(swap_lrna))" ] }, { @@ -254,7 +253,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -268,7 +267,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.9.7" } }, "nbformat": 4, diff --git a/hydradx/spec/WithdrawLiquidity.ipynb b/hydradx/spec/WithdrawLiquidity.ipynb index ee0c1838..5b1ea08b 100644 --- a/hydradx/spec/WithdrawLiquidity.ipynb +++ b/hydradx/spec/WithdrawLiquidity.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "e8be7da5-d165-4b01-a1c9-9861c82597f0", "metadata": {}, "outputs": [], @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "d6482f4d-c498-44ec-a2d9-4cc5d72e79dd", "metadata": {}, "outputs": [ @@ -112,12 +112,15 @@ " new_state = copy.deepcopy(old_state)\n", " new_agents = copy.deepcopy(old_agents)\n", "\n", + " if delta_S == 0:\n", + " return new_state, new_agents\n", + "\n", " piq = price_i(old_state, i)\n", " p0 = new_agents[LP_id]['p'][i]\n", - " mult = 2 * piq / (piq + p0) * math.sqrt(piq / p0)\n", + " mult = (piq - p0) / (piq + p0)\n", "\n", " # Share update\n", - " delta_B = max((mult - 1) * delta_S, - old_state['B'][i])\n", + " delta_B = max(mult * delta_S, 0)\n", " new_state['B'][i] += delta_B\n", " new_state['S'][i] += delta_S + delta_B\n", " new_agents[LP_id]['s'][i] += delta_S\n", @@ -127,13 +130,17 @@ " new_state['R'][i] += delta_R\n", " new_agents[LP_id]['r'][i] -= delta_R\n", " if piq >= p0: # prevents rounding errors\n", - " new_agents[LP_id]['q'] -= price_i(old_state, i) * (\n", - " mult * delta_S / old_state['S'][i] * old_state['R'][i] - delta_R)\n", + " new_agents[LP_id]['q'] -= piq * (\n", + " 2 * piq / (piq + p0) * delta_S / old_state['S'][i] * old_state['R'][i] - delta_R)\n", "\n", - " # HDX burn\n", - " delta_Q = old_state['P'][i] * delta_R\n", + " # LRNA burn\n", + " delta_Q = price_i(old_state, i) * delta_R\n", " new_state['Q'][i] += delta_Q\n", "\n", + " # L update: LRNA fees to be burned before they will start to accumulate again\n", + " delta_L = delta_R * old_state['Q'][i]/old_state['R'][i] * old_state['L']/sum(old_state['Q'])\n", + " new_state['L'] += delta_L\n", + "\n", " return new_state, new_agents\n", "\n" ] @@ -154,7 +161,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -168,7 +175,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.9.7" } }, "nbformat": 4, From 0b60435e5fc3a085c994e573df2e2c3c4e8117af Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Tue, 12 Apr 2022 17:55:08 -0500 Subject: [PATCH 37/39] update yet more lingering references to hdx --- hydradx/spec/SwapLRNA.ipynb | 113 ++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 56 deletions(-) diff --git a/hydradx/spec/SwapLRNA.ipynb b/hydradx/spec/SwapLRNA.ipynb index 65f3f8d0..7327165c 100644 --- a/hydradx/spec/SwapLRNA.ipynb +++ b/hydradx/spec/SwapLRNA.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "74c2097f-82ff-45a3-90d5-37dcea976d40", "metadata": {}, "outputs": [], @@ -21,7 +21,7 @@ "sys.path.insert(0, os.path.abspath(os.path.join(os.path.abspath(''), '..')))\n", "\n", "import inspect\n", - "from model.amm.omnipool_amm import swap_lhdx, swap_lhdx_fee, swap_hdx_delta_Qi, swap_hdx_delta_Ri" + "from model.amm.omnipool_amm import swap_lrna, swap_lrna_delta_Qi, swap_lrna_delta_Ri" ] }, { @@ -98,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "f33e16b1-0277-4288-be82-6c289631c224", "metadata": {}, "outputs": [ @@ -106,7 +106,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "def swap_hdx_delta_Ri(old_state: dict, delta_Qi: float, i: int) -> float:\n", + "def swap_lrna_delta_Ri(old_state: dict, delta_Qi: float, i: int) -> float:\n", " return old_state['R'][i] * (- delta_Qi / (old_state['Q'][i] + delta_Qi))\n", "\n" ] @@ -143,7 +143,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "6f056d9c-4982-4d82-9748-8d2e6cb5b2a2", "metadata": {}, "outputs": [ @@ -151,7 +151,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "def swap_hdx_delta_Qi(old_state: dict, delta_Ri: float, i: int) -> float:\n", + "def swap_lrna_delta_Qi(old_state: dict, delta_Ri: float, i: int) -> float:\n", " return old_state['Q'][i] * (- delta_Ri / (old_state['R'][i] + delta_Ri))\n", "\n" ] @@ -171,69 +171,70 @@ "name": "stdout", "output_type": "stream", "text": [ - "def swap_lhdx(\n", + "def swap_lrna(\n", " old_state: dict,\n", " old_agents: dict,\n", " trader_id: string,\n", - " delta_R: float,\n", - " delta_Q: float,\n", - " i: int\n", + " delta_Ra: float,\n", + " delta_Qa: float,\n", + " i: int,\n", + " fee_assets: float = 0,\n", + " fee_lrna: float = 0\n", ") -> tuple:\n", - " \"\"\"Compute new state after HDX swap\"\"\"\n", + " \"\"\"Compute new state after LRNA swap\"\"\"\n", + "\n", + " if delta_Ra >= old_state['R'][i] * (1 - fee_assets):\n", + " # insufficient assets in pool, transaction fails\n", + " return old_state, old_agents\n", + "\n", + " if -delta_Qa > old_agents['q']:\n", + " # agent doesn't have enough lrna\n", + " return old_state, old_agents\n", "\n", " new_state = copy.deepcopy(old_state)\n", " new_agents = copy.deepcopy(old_agents)\n", "\n", - " if delta_Q == 0 and delta_R != 0:\n", - " delta_Q = swap_hdx_delta_Qi(old_state, delta_R, i)\n", - " elif delta_R == 0 and delta_Q != 0:\n", - " delta_R = swap_hdx_delta_Ri(old_state, delta_Q, i)\n", + " if delta_Qa < 0:\n", + " delta_Q = -delta_Qa\n", + " delta_R = old_state['R'][i] * -delta_Q / (delta_Q + old_state['Q'][i]) * (1 - fee_assets)\n", + " delta_L = -delta_Q * (1 + (1 - fee_assets) * old_state['Q'][i] / (old_state['Q'][i] + delta_Q))\n", + " delta_Ra = -delta_R\n", + " elif delta_Ra > 0:\n", + " delta_R = -delta_Ra\n", + " delta_Q = old_state['Q'][i] * -delta_R / (old_state['R'][i] * (1 - fee_assets) + delta_R)\n", + " delta_L = -delta_Q * (1 + (1 - fee_assets) * old_state['Q'][i] / (old_state['Q'][i] + delta_Q))\n", + " delta_Qa = -delta_Q\n", " else:\n", - " return new_state, new_agents\n", + " # print(f'Invalid swap (delta_Qa {delta_Qa}, delta_Ra {delta_Ra}')\n", + " return old_state, old_agents\n", "\n", - " # Token amounts update\n", - " if delta_Q < 0:\n", - " new_state['R'][i] += delta_R\n", - " new_state['Q'][i] += delta_Q\n", - " new_agents[trader_id]['r'][i] -= delta_R\n", - " new_agents[trader_id]['q'] -= delta_Q\n", - "\n", - " else:\n", - " new_state['R'][i] += delta_R\n", - " new_state['Q'][i] = (old_state['Q'][i] + delta_Q) / (old_state['R'][i] + delta_R) * new_state['R'][i]\n", - " new_agents[trader_id]['r'][i] -= delta_R\n", - " new_agents[trader_id]['q'] -= delta_Q\n", + " new_agents[trader_id]['q'] += delta_Qa\n", + " new_agents[trader_id]['r'][i] += delta_Ra\n", + " new_state['Q'][i] += delta_Q\n", + " new_state['R'][i] += delta_R\n", + " new_state['L'] += delta_L\n", "\n", " return new_state, new_agents\n", "\n", - "def swap_lhdx_fee(\n", - " old_state: dict,\n", - " old_agents: dict,\n", - " trader_id: string,\n", - " delta_R: float,\n", - " delta_Q: float,\n", - " i: int,\n", - " fee_assets: float = 0,\n", - " fee_LHDX: float = 0\n", - ") -> tuple:\n", - " \"\"\"Computed new state for HDX swap with fee\"\"\"\n", - " new_state, new_agents = swap_lhdx(old_state, old_agents, trader_id, delta_R, delta_Q, i)\n", - " delta_Q = new_state['Q'][i] - old_state['Q'][i]\n", - " if delta_Q < 0:\n", - " # LHDX fee\n", - " new_agents[trader_id]['q'] += delta_Q * fee_LHDX\n", - " new_state['D'] -= delta_Q * fee_LHDX\n", - " else:\n", - " delta_R = new_state['R'][i] - old_state['R'][i] # delta_R is negative\n", - " # asset fee\n", - " new_agents[trader_id]['r'][i] += delta_R * fee_assets\n", - " # fee added back as liquidity, distributed to existing LPs (i.e. no new shares minted)\n", - " # eventually, can mint protocol shares to take some cut as POL\n", - " p = price_i(new_state, i)\n", - " new_state['R'][i] -= delta_R * fee_assets\n", - " # LHDX minted so that asset fee level does not change price and increase IL\n", - " new_state['Q'][i] = p * new_state['R'][i]\n", - " return new_state, new_agents\n", + " # if delta_Q == 0 and delta_R != 0:\n", + " # delta_Q = swap_lrna_delta_Qi(old_state, delta_R, i)\n", + " # elif delta_R == 0 and delta_Q != 0:\n", + " # delta_R = swap_lrna_delta_Ri(old_state, delta_Q, i)\n", + " # else:\n", + " # return new_state, new_agents\n", + " #\n", + " # # Token amounts update\n", + " # if delta_Q < 0:\n", + " # new_state['R'][i] += delta_R\n", + " # new_state['Q'][i] += delta_Q\n", + " # new_agents[trader_id]['r'][i] -= delta_R\n", + " # new_agents[trader_id]['q'] -= delta_Q\n", + " #\n", + " # else:\n", + " # new_state['R'][i] += delta_R\n", + " # new_state['Q'][i] = (old_state['Q'][i] + delta_Q) / (old_state['R'][i] + delta_R) * new_state['R'][i]\n", + " # new_agents[trader_id]['r'][i] -= delta_R\n", + " # new_agents[trader_id]['q'] -= delta_Q\n", "\n" ] } From b2cb0a3de5857bcfd347e7899b0aef487495dc94 Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 14 Apr 2022 11:18:54 -0500 Subject: [PATCH 38/39] added checks to ensure agent's asset or lrna balances don't go below 0 --- hydradx/model/amm/omnipool_amm.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 80ba7c57..4adcfddc 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -175,6 +175,13 @@ def swap_lrna( # print(f'Invalid swap (delta_Qa {delta_Qa}, delta_Ra {delta_Ra}') return old_state, old_agents + if delta_Qa + old_agents[trader_id]['q'] < 0: + # agent doesn't have enough lrna + return old_state, old_agents + elif delta_Ra + old_agents[trader_id]['r'][i] < 0: + # agent doesn't have enough asset[i] + return old_state, old_agents + new_agents[trader_id]['q'] += delta_Qa new_agents[trader_id]['r'][i] += delta_Ra new_state['Q'][i] += delta_Q From d543686b7f263b7b413e4f4d8343ef45db0ab73f Mon Sep 17 00:00:00 2001 From: jepidoptera Date: Thu, 14 Apr 2022 14:20:18 -0500 Subject: [PATCH 39/39] Addressed changed Colin requested --- hydradx/model/amm/omnipool_amm.py | 78 +++--------------------------- hydradx/tests/test_omnipool_amm.py | 33 ++++++------- 2 files changed, 21 insertions(+), 90 deletions(-) diff --git a/hydradx/model/amm/omnipool_amm.py b/hydradx/model/amm/omnipool_amm.py index 4adcfddc..daa176c3 100644 --- a/hydradx/model/amm/omnipool_amm.py +++ b/hydradx/model/amm/omnipool_amm.py @@ -18,7 +18,7 @@ def state_dict( preferred_stablecoin: str = 'USD' ) -> dict: assert 'HDX' in token_list, 'HDX not included in token list' - assert len(r_values) == len(token_list), 'list lengths do not match' + assert len(r_values) == len(token_list), 'lengths of token_list and r_values do not match' # get initial value of T (total value locked) if not omega_values: @@ -27,7 +27,7 @@ def state_dict( if not q_values: q_values = [r_values[i] * p_values[i] for i in range(len(token_list))] elif not p_values: - p_values = [r_values[i] / q_values[i] for i in range(len(token_list))] + p_values = [q_values[i] / r_values[i] for i in range(len(token_list))] else: assert False, 'Either LRNA quantities per pool or assets prices in LRNA must be specified.' @@ -35,7 +35,7 @@ def state_dict( b_values = [0] * len(token_list) if not s_values: - s_values = [0] * len(token_list) + s_values = copy.copy(r_values) stablecoin_index = token_list.index(preferred_stablecoin) t_values = [ @@ -190,55 +190,6 @@ def swap_lrna( return new_state, new_agents - # if delta_Q == 0 and delta_R != 0: - # delta_Q = swap_lrna_delta_Qi(old_state, delta_R, i) - # elif delta_R == 0 and delta_Q != 0: - # delta_R = swap_lrna_delta_Ri(old_state, delta_Q, i) - # else: - # return new_state, new_agents - # - # # Token amounts update - # if delta_Q < 0: - # new_state['R'][i] += delta_R - # new_state['Q'][i] += delta_Q - # new_agents[trader_id]['r'][i] -= delta_R - # new_agents[trader_id]['q'] -= delta_Q - # - # else: - # new_state['R'][i] += delta_R - # new_state['Q'][i] = (old_state['Q'][i] + delta_Q) / (old_state['R'][i] + delta_R) * new_state['R'][i] - # new_agents[trader_id]['r'][i] -= delta_R - # new_agents[trader_id]['q'] -= delta_Q - -# def swap_lrna_fee( -# old_state: dict, -# old_agents: dict, -# trader_id: string, -# delta_R: float, -# delta_Q: float, -# i: int, -# fee_assets: float = 0, -# fee_lrna: float = 0 -# ) -> tuple: -# """Computed new state for LRNA swap with fee""" -# new_state, new_agents = swap_lrna(old_state, old_agents, trader_id, delta_R, delta_Q, i) -# delta_Q = new_state['Q'][i] - old_state['Q'][i] -# if delta_Q < 0: -# # LRNA fee -# new_agents[trader_id]['q'] += delta_Q * fee_lrna -# new_state['D'] -= delta_Q * fee_lrna -# else: -# delta_R = new_state['R'][i] - old_state['R'][i] # delta_R is negative -# # asset fee -# new_agents[trader_id]['r'][i] += delta_R * fee_assets -# # fee added back as liquidity, distributed to existing LPs (i.e. no new shares minted) -# # eventually, can mint protocol shares to take some cut as POL -# p = price_i(new_state, i) -# new_state['R'][i] -= delta_R * fee_assets -# # LRNA minted so that asset fee level does not change price and increase IL -# new_state['Q'][i] = p * new_state['R'][i] -# return new_state, new_agents - def swap_assets_direct( old_state: dict, @@ -288,22 +239,8 @@ def swap_assets( fee_lrna: float = 0 ) -> tuple: if trade_type == 'sell': - # swap asset in for LRNA - # first_state, first_agents = \ - # swap_lrna(old_state, old_agents, trader_id, delta_token, 0, i_sell, fee_assets, fee_lrna) - # delta_q = first_agents[trader_id]['q'] - old_agents[trader_id]['q'] - # # swap LRNA back in for second asset - # new_state, new_agents = swap_lrna(first_state, first_agents, trader_id, 0, delta_q, i_buy, fee_assets, fee_lrna) - # - # delta_Qi = new_state['Q'][i_sell] - old_state['Q'][i_sell] - # delta_Qj = new_state['Q'][i_buy] - old_state['Q'][i_buy] - # delta_L = min(-delta_Qi * fee_lrna, -old_state['L']) - # new_state['L'] += delta_L - # - # delta_QH = -fee_lrna * delta_Qi - delta_L - # new_state['R'][new_state['token_list'].index('HDX')] += delta_QH - - alternative_state, alternative_agents = swap_assets_direct( + + new_state, new_agents = swap_assets_direct( old_state=old_state, old_agents=old_agents, trader_id=trader_id, @@ -314,10 +251,7 @@ def swap_assets( fee_lrna=fee_lrna ) - # if alternative_state['Q'][i_sell] != new_state['Q'][i_sell]: - # er = 1 - - return alternative_state, alternative_agents + return new_state, new_agents elif trade_type == 'buy': # back into correct delta_Ri, then execute sell delta_Qj = -old_state['Q'][i_buy] * delta_token / (old_state['R'][i_buy]*(1 - fee_assets) + delta_token) diff --git a/hydradx/tests/test_omnipool_amm.py b/hydradx/tests/test_omnipool_amm.py index a9ea850c..7ccd837e 100644 --- a/hydradx/tests/test_omnipool_amm.py +++ b/hydradx/tests/test_omnipool_amm.py @@ -47,9 +47,6 @@ def get_state_from_strat(x, key_list): # Indexes i_strat = st.integers(min_value=0) -RQBSH_strat = get_tkn_ct_strat(6).map(lambda x: get_state_from_strat(x, ['R', 'Q', 'B', 'S', 'H'])) - - # Tests over input space of Q, R, delta_TKN, i def test_swap_lrna_delta_Qi_respects_invariant(d, delta_Ri, i): @@ -263,7 +260,6 @@ def test_swap_lrna(initial_state, fee): feeless_state, feeless_agents = oamm.swap_lrna(old_state, old_agents, trader_id, 0, delta_Qa, i, 0, 0) assert oamm.asset_invariant(feeless_state, i) == pytest.approx(oamm.asset_invariant(old_state, i)) for j in range(len(old_state['R'])): - # assert oamm.price_i(feeless_state, j) == pytest.approx(oamm.price_i(new_state, j)) assert min(new_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0) assert min(oamm.asset_invariant(new_state, i) / oamm.asset_invariant(old_state, i), 1) == pytest.approx(1) @@ -271,10 +267,11 @@ def test_swap_lrna(initial_state, fee): pytest.approx((new_state['Q'][i] + new_state['L']) / new_state['R'][i]) -@given(QR_strat, fee_strat, fee_strat) -def test_swap_assets(initial_state, fee_lrna, fee_assets): +@given(QR_strat, fee_strat, fee_strat, st.integers(min_value=1, max_value=4)) +def test_swap_assets(initial_state, fee_lrna, fee_assets, i_buy): token_count = len(initial_state['R']) + assume(i_buy < token_count) old_state = oamm.state_dict( r_values=initial_state['R'], p_values=[1]*token_count, @@ -303,22 +300,21 @@ def test_swap_assets(initial_state, fee_lrna, fee_assets): } delta_R = 1000 sellable_tokens = len(old_state['token_list']) - 1 - i_buy = int(random.random() * sellable_tokens) + 1 - i_sell = (int(random.random() * (sellable_tokens - 1)) + i_buy) % sellable_tokens + 1 + i_sell = i_buy % sellable_tokens + 1 # Test with trader selling asset i, no LRNA fee... price should match feeless new_state, new_agents = \ oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, fee_assets, fee_lrna) - asset_fee_state, asset_only_agents = \ + asset_fee_only_state, asset_fee_only_agents = \ oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, fee_assets, 0) feeless_state, feeless_agents = \ oamm.swap_assets(old_state, old_agents, trader_id, 'sell', delta_R, i_buy, i_sell, 0, 0) for j in range(len(old_state['R'])): - # assets in pools only go up compared to asset_fee_state - assert min(asset_fee_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0), \ + # assets in pools only go up compared to asset_fee_only_state + assert min(asset_fee_only_state['R'][j] - feeless_state['R'][j], 0) == pytest.approx(0), \ f"asset in pool {j} is lesser when compared with no-fee case" - # asset in pool goes up from asset_fee_state -> new_state (i.e. introduction of LRNA fee) - assert min(new_state['R'][j] - asset_fee_state['R'][j], 0) == pytest.approx(0), \ + # asset in pool goes up from asset_fee_only_state -> new_state (i.e. introduction of LRNA fee) + assert min(new_state['R'][j] - asset_fee_only_state['R'][j], 0) == pytest.approx(0), \ f"asset in pool {j} is lesser when LRNA fee is added vs only asset fee" # invariant does not decrease assert min(oamm.asset_invariant(new_state, j) / oamm.asset_invariant(old_state, j), 1) == pytest.approx(1), \ @@ -332,19 +328,20 @@ def test_swap_assets(initial_state, fee_lrna, fee_assets): delta_Qj = new_state['Q'][i_buy] - old_state['Q'][i_buy] delta_Qh = new_state['Q'][0] - old_state['Q'][0] delta_L = new_state['L'] - old_state['L'] - if i_sell != 0 and i_buy != 0: - if delta_L + delta_Qj + delta_Qi + delta_Qh != pytest.approx(0, abs=1e10): - raise ValueError('Some LRNA was lost along the way.') + assert delta_L + delta_Qj + delta_Qi + delta_Qh == pytest.approx(0, abs=1e10), 'Some LRNA was lost along the way.' delta_out_new = new_agents[trader_id]['r'][i_buy] - old_agents[trader_id]['r'][i_buy] # Test with trader buying asset i, no LRNA fee... price should match feeless - buy_state, buy_agents = oamm.swap_assets(old_state, old_agents, trader_id, 'buy', -delta_out_new, i_buy, i_sell, fee_assets, fee_lrna) + buy_state, buy_agents = oamm.swap_assets( + old_state, old_agents, trader_id, 'buy', -delta_out_new, i_buy, i_sell, fee_assets, fee_lrna + ) for j in range(len(old_state['R'])): assert buy_state['R'][j] == pytest.approx(new_state['R'][j]) assert buy_state['Q'][j] == pytest.approx(new_state['Q'][j]) - assert old_state['R'][j] + old_agents[trader_id]['r'][j] == pytest.approx(buy_state['R'][j] + buy_agents[trader_id]['r'][j]) + assert old_state['R'][j] + old_agents[trader_id]['r'][j] == \ + pytest.approx(buy_state['R'][j] + buy_agents[trader_id]['r'][j]) assert buy_agents[trader_id]['r'][j] == pytest.approx(new_agents[trader_id]['r'][j]) assert buy_agents[trader_id]['q'] == pytest.approx(new_agents[trader_id]['q'])