1022 lines
44 KiB
Plaintext
1022 lines
44 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#import networkx as nx\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import numpy as np\n",
|
|
"import scipy.stats as sts\n",
|
|
"import seaborn as sns\n",
|
|
"\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"#import conviction files\n",
|
|
"#from conviction_helpers import *\n",
|
|
"#from conviction_system_logic3 import *\n",
|
|
"from bonding_curve_eq import *"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"System initialization"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"hatch_raise = 100000 # fiat units\n",
|
|
"hatch_price = .1 #fiat per tokens\n",
|
|
"theta = .50 #share of funds going to funding pool at launch\n",
|
|
"\n",
|
|
"R0 = hatch_raise*(1-theta)\n",
|
|
"F0 = hatch_raise*theta\n",
|
|
"S0 = hatch_raise/hatch_price\n",
|
|
"\n",
|
|
"kappa = 2\n",
|
|
"V0 = invariant(R0,S0,kappa)\n",
|
|
"P0 = spot_price(R0, V0, kappa)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"agent initialization"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#number of agents\n",
|
|
"n= 100\n",
|
|
"\n",
|
|
"#gain factors\n",
|
|
"g = np.random.normal(1, .05, size=n)\n",
|
|
"phat0 = g*F0/S0\n",
|
|
"\n",
|
|
"#holdings fiat\n",
|
|
"h = sts.expon.rvs( loc=10,scale=10, size=n)\n",
|
|
"\n",
|
|
"#holdings tokens\n",
|
|
"s_dist = sts.expon.rvs(loc=10, scale=10, size=n)\n",
|
|
"s0 = s_dist/sum(s_dist)*S0\n",
|
|
"\n",
|
|
"#lambda for revenue process\n",
|
|
"lam = 200\n",
|
|
"\n",
|
|
"#phi for exiting funds\n",
|
|
"phi = .05\n",
|
|
"\n",
|
|
"#beta is param for armijo rule\n",
|
|
"beta = .9"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"params= {\n",
|
|
" 'kappa': [kappa],\n",
|
|
" 'lambda': [lam],\n",
|
|
" 'gains': [g],\n",
|
|
" 'population':[n],\n",
|
|
" 'beta':[beta],\n",
|
|
" 'phi': [phi],\n",
|
|
" 'invariant': [V0]}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"initial_conditions = {'holdings': h,\n",
|
|
" 'tokens': s0,\n",
|
|
" 'supply': S0,\n",
|
|
" 'prices': phat0,\n",
|
|
" 'funds':F0,\n",
|
|
" 'reserve': R0,\n",
|
|
" 'spot_price': P0,\n",
|
|
" 'action': {}}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'action': {},\n",
|
|
" 'funds': 50000.0,\n",
|
|
" 'holdings': array([11.44967426, 14.27340299, 11.34460577, 16.83844489, 11.25574143,\n",
|
|
" 38.43594327, 11.42707407, 19.78337576, 18.92621004, 13.76349783,\n",
|
|
" 20.56410232, 46.70590673, 11.39419877, 16.36850516, 23.93412804,\n",
|
|
" 13.16706921, 17.47432165, 24.08451343, 10.31676 , 22.76223411,\n",
|
|
" 26.52489583, 23.50714218, 10.00885272, 36.39730482, 10.66712987,\n",
|
|
" 20.227257 , 43.40147235, 15.96228714, 12.23014236, 24.86208805,\n",
|
|
" 15.15989215, 34.42215238, 15.71773678, 40.79049265, 34.35363414,\n",
|
|
" 18.53725115, 28.23462521, 12.53490108, 38.00409625, 27.43551221,\n",
|
|
" 18.01672824, 19.11400584, 11.6431133 , 10.30271338, 10.64391881,\n",
|
|
" 10.64852586, 30.93014093, 19.38071005, 22.30292307, 11.68379312,\n",
|
|
" 39.84043761, 24.574661 , 33.22214478, 13.69030971, 12.00214066,\n",
|
|
" 12.72863488, 21.56760105, 13.74530629, 10.39138789, 14.01340641,\n",
|
|
" 17.00097386, 15.41768633, 13.31798796, 10.77507215, 24.24516956,\n",
|
|
" 17.6458217 , 15.77980279, 41.86602584, 14.16639806, 12.7546665 ,\n",
|
|
" 10.0249518 , 17.56328567, 14.15913938, 14.20306902, 14.08950041,\n",
|
|
" 12.92788586, 13.5235944 , 10.78500805, 17.02972715, 10.42989369,\n",
|
|
" 23.47282945, 49.81629213, 13.15758437, 10.80859308, 14.7902493 ,\n",
|
|
" 10.15097881, 15.60049615, 12.83987333, 38.42333432, 28.34511287,\n",
|
|
" 14.68894579, 12.36590155, 13.2392618 , 18.75057787, 17.06822438,\n",
|
|
" 13.28040106, 27.97018514, 17.74674445, 24.92888703, 14.73829988]),\n",
|
|
" 'prices': array([0.05076765, 0.04733474, 0.04993168, 0.04584802, 0.04851504,\n",
|
|
" 0.04610802, 0.04354208, 0.05210398, 0.04814497, 0.04585949,\n",
|
|
" 0.04984653, 0.05121571, 0.04633738, 0.04545498, 0.05166061,\n",
|
|
" 0.04831117, 0.04997457, 0.05074152, 0.0524937 , 0.04934074,\n",
|
|
" 0.0485998 , 0.04689035, 0.05220971, 0.04703541, 0.04453385,\n",
|
|
" 0.04872963, 0.05068015, 0.04703188, 0.05123166, 0.05067545,\n",
|
|
" 0.044608 , 0.05080381, 0.049653 , 0.050454 , 0.05087986,\n",
|
|
" 0.05083449, 0.04629519, 0.05078288, 0.04951361, 0.04867592,\n",
|
|
" 0.05035343, 0.05098483, 0.04833371, 0.0494247 , 0.0479999 ,\n",
|
|
" 0.05329657, 0.04840791, 0.0468227 , 0.04879529, 0.05298198,\n",
|
|
" 0.05337297, 0.05232845, 0.04994659, 0.04976377, 0.04978701,\n",
|
|
" 0.05053373, 0.04879622, 0.04963753, 0.05193522, 0.05010629,\n",
|
|
" 0.05127059, 0.05352737, 0.04472771, 0.05165062, 0.05038493,\n",
|
|
" 0.05298863, 0.04389941, 0.04860035, 0.05329495, 0.04952147,\n",
|
|
" 0.05184357, 0.04929788, 0.05361664, 0.05001849, 0.04830409,\n",
|
|
" 0.04518436, 0.05565042, 0.04771542, 0.0471412 , 0.0522808 ,\n",
|
|
" 0.05068311, 0.04762865, 0.05269834, 0.05462795, 0.05035509,\n",
|
|
" 0.04905036, 0.0467232 , 0.04831154, 0.05317499, 0.0470409 ,\n",
|
|
" 0.04775554, 0.04623696, 0.05065512, 0.05154325, 0.04913213,\n",
|
|
" 0.05214541, 0.05443066, 0.05410602, 0.05227337, 0.05044711]),\n",
|
|
" 'reserve': 50000.0,\n",
|
|
" 'spot_price': 0.09999999999999999,\n",
|
|
" 'supply': 1000000.0,\n",
|
|
" 'tokens': array([ 6949.14877106, 7097.4169059 , 7636.10721882, 9820.80805621,\n",
|
|
" 9355.85181209, 16302.67793635, 6416.21499205, 10487.59874537,\n",
|
|
" 6690.73853904, 7135.36387582, 14189.69540093, 12410.54378405,\n",
|
|
" 12324.89256189, 13440.33713906, 13879.20912334, 7271.45846705,\n",
|
|
" 7626.25730298, 10514.07904866, 13423.98766976, 8645.42165638,\n",
|
|
" 7037.48460589, 7793.32235313, 6770.71275056, 10024.00905806,\n",
|
|
" 6325.10906918, 7150.5687644 , 11269.31534167, 16409.45554474,\n",
|
|
" 13654.47345802, 7372.60984233, 5531.00441675, 6990.79815178,\n",
|
|
" 16512.33207933, 16295.99419134, 9866.45781074, 6075.94287678,\n",
|
|
" 9569.57990133, 7780.73962389, 13040.95160389, 7652.95298331,\n",
|
|
" 8495.05242579, 9575.11202993, 14490.87287117, 10298.6449875 ,\n",
|
|
" 5895.62687053, 6698.36806095, 7458.71217952, 6273.01273223,\n",
|
|
" 25149.9071597 , 11188.97190722, 7327.18451529, 6971.60000505,\n",
|
|
" 7675.40963511, 6306.41099533, 9411.42988418, 13969.68945897,\n",
|
|
" 7475.83112495, 10749.70865682, 16742.50176116, 6515.86309609,\n",
|
|
" 12612.40143375, 10953.7926157 , 7670.7853129 , 8109.20514007,\n",
|
|
" 8581.57451943, 6385.27901553, 6205.82305304, 5774.12248906,\n",
|
|
" 21182.64885037, 7131.17285249, 7216.83514995, 11895.38277176,\n",
|
|
" 6077.92135285, 7786.18578418, 6611.78458508, 8782.35281246,\n",
|
|
" 8073.0688235 , 16270.86734574, 6187.26596043, 9088.99573494,\n",
|
|
" 7381.68102505, 9874.10407464, 7874.93342299, 7223.40148861,\n",
|
|
" 12249.93410833, 15994.84888653, 7606.42225711, 5543.43857792,\n",
|
|
" 13000.42163896, 5729.75773036, 9339.06202444, 9086.63451333,\n",
|
|
" 8390.91610821, 16620.0703585 , 10257.92894288, 12012.12257656,\n",
|
|
" 17749.95897543, 12735.62123468, 13868.07995185, 21451.66270904])}"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"initial_conditions"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#change in F (revenue and spending accounted for)\n",
|
|
"def revenue_process(params, step, sL, s):\n",
|
|
" lam = params['lambda']\n",
|
|
" rv = sts.expon.rvs(loc = .001, scale=1/lam)\n",
|
|
" delF= 1-1/lam+rv\n",
|
|
" \n",
|
|
" #avoid the crash (temporary hacks, tune martingale process better)\n",
|
|
" if delF <1:\n",
|
|
" if s['funds'] <1000:\n",
|
|
" delF =100\n",
|
|
" \n",
|
|
" return({'delF':delF})"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def update_funds(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" funds = s['funds']*_input['delF']\n",
|
|
" \n",
|
|
" key = 'funds'\n",
|
|
" value = funds\n",
|
|
" \n",
|
|
" return (key, value)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def update_prices(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" g = params['gains']\n",
|
|
" phat = g*s['funds']/s['supply']\n",
|
|
" \n",
|
|
" key = 'prices'\n",
|
|
" value = phat\n",
|
|
" \n",
|
|
" return (key, value)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#change in F (revenue and spending accounted for)\n",
|
|
"def choose_agent(params, step, sL, s):\n",
|
|
" n = params['population']\n",
|
|
" rv = np.random.randint(0,n)\n",
|
|
" return({'agent':rv})"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def agent_action(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" a = _input['agent']\n",
|
|
" h_a = s['holdings'][a]\n",
|
|
" phat_a = s['prices'][a]\n",
|
|
" s_a = s['tokens'][a]\n",
|
|
" p = s['spot_price']\n",
|
|
" \n",
|
|
" beta = params['beta']\n",
|
|
" \n",
|
|
" if p>phat_a: #equiv: pbar(0)>phat_a\n",
|
|
" mech = 'burn'\n",
|
|
" #approx for burn s.t. p=phat\n",
|
|
" #armijo style\n",
|
|
" amt = s_a\n",
|
|
" \n",
|
|
" def pbar(amt):\n",
|
|
" output = withdraw_with_tax(amt, s['reserve'],s['supply'], params['invariant'], params['phi'], params['kappa'])\n",
|
|
" \n",
|
|
" if not(output[2])>0:\n",
|
|
" return np.Infinity\n",
|
|
" else:\n",
|
|
" return output[2]\n",
|
|
" \n",
|
|
" \n",
|
|
" while pbar(amt)< phat_a:\n",
|
|
" amt = amt*beta\n",
|
|
" \n",
|
|
" else: # p<phat_a; #equiv pbar(0)<phat_a\n",
|
|
" mech = 'bond'\n",
|
|
" #approx for buy s.t. p=phat\n",
|
|
" #armijo style\n",
|
|
" amt = h_a\n",
|
|
" \n",
|
|
" def pbar(amt):\n",
|
|
" output = mint(amt, s['reserve'],s['supply'], params['invariant'], params['kappa'])\n",
|
|
" \n",
|
|
" if not(output[1])>0:\n",
|
|
" return 0\n",
|
|
" else:\n",
|
|
" return output[1]\n",
|
|
" \n",
|
|
" while pbar(amt)> phat_a:\n",
|
|
" amt = amt*beta\n",
|
|
" \n",
|
|
" #print(mech)\n",
|
|
" #print(amt)\n",
|
|
" #print(pbar(amt))\n",
|
|
" key = 'action'\n",
|
|
" value = {'agent':a, 'mech':mech, 'amt':amt, 'pbar':pbar(amt)}\n",
|
|
" \n",
|
|
" return (key, value)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def resolve_action(params, step, sL, s):\n",
|
|
" action = s['action']\n",
|
|
" a = action['agent']\n",
|
|
" amt = action['amt']\n",
|
|
" h_a = s['holdings'][a]\n",
|
|
" s_a = s['tokens'][a]\n",
|
|
" R = s['reserve']\n",
|
|
" S = s['supply']\n",
|
|
" F = s['funds']\n",
|
|
" V0 = params['invariant']\n",
|
|
" \n",
|
|
" if action['mech'] == 'bond':\n",
|
|
" h_a = h_a-amt\n",
|
|
" dS, pbar = mint(amt, R,S, V0, params['kappa'])\n",
|
|
" R = R+amt\n",
|
|
" S = S+dS\n",
|
|
" s_a = s_a+dS\n",
|
|
" P = spot_price(R, V0, kappa)\n",
|
|
" \n",
|
|
" elif action['mech'] == 'burn':\n",
|
|
" s_a = s_a-amt\n",
|
|
" dR, pbar = withdraw(amt, R,S, V0, params['kappa'])\n",
|
|
" R = R-dR\n",
|
|
" F = F + params['phi']*dR\n",
|
|
" S = S-amt\n",
|
|
" h_a = h_a + (1-params['phi'])*dR\n",
|
|
" P = spot_price(R, V0, kappa)\n",
|
|
" \n",
|
|
" return({'F':F, 'S':S, 'R':R,'P':P, 'a':a,'s_a':s_a, 'h_a':h_a})"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def update_F(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" F = _input['F']\n",
|
|
" \n",
|
|
" key = 'funds'\n",
|
|
" value = F\n",
|
|
" \n",
|
|
" return (key, value)\n",
|
|
"\n",
|
|
"def update_S(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" S = _input['S']\n",
|
|
" \n",
|
|
" key = 'supply'\n",
|
|
" value = S\n",
|
|
" \n",
|
|
" return (key, value)\n",
|
|
"\n",
|
|
"def update_R(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" R = _input['R']\n",
|
|
" \n",
|
|
" key = 'reserve'\n",
|
|
" value = R\n",
|
|
" \n",
|
|
" return (key, value)\n",
|
|
"\n",
|
|
"def update_P(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" P = _input['P']\n",
|
|
" \n",
|
|
" key = 'spot_price'\n",
|
|
" value = P\n",
|
|
" \n",
|
|
" return (key, value)\n",
|
|
"\n",
|
|
"def update_holdings(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" h_a = _input['h_a']\n",
|
|
" a = _input['a']\n",
|
|
" \n",
|
|
" h = s['holdings']\n",
|
|
" h[a] = h_a\n",
|
|
" \n",
|
|
" key = 'holdings'\n",
|
|
" value = h\n",
|
|
" \n",
|
|
" return (key, value)\n",
|
|
"\n",
|
|
"def update_tokens(params, step, sL, s, _input):\n",
|
|
" \n",
|
|
" s_a = _input['s_a']\n",
|
|
" a = _input['a']\n",
|
|
" \n",
|
|
" tokens = s['tokens']\n",
|
|
" tokens[a] = s_a\n",
|
|
" \n",
|
|
" key = 'tokens'\n",
|
|
" value = tokens\n",
|
|
" \n",
|
|
" return (key, value)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
|
|
"# The Partial State Update Blocks\n",
|
|
"partial_state_update_blocks = [\n",
|
|
" { \n",
|
|
" 'policies': { \n",
|
|
" #new proposals or new participants\n",
|
|
" 'random': revenue_process\n",
|
|
" },\n",
|
|
" 'variables': {\n",
|
|
" 'funds': update_funds,\n",
|
|
" 'prices': update_prices\n",
|
|
" }\n",
|
|
" },\n",
|
|
" {\n",
|
|
" 'policies': {\n",
|
|
" 'random': choose_agent\n",
|
|
" },\n",
|
|
" 'variables': { \n",
|
|
" 'action': agent_action, \n",
|
|
" }\n",
|
|
" },\n",
|
|
" {\n",
|
|
" 'policies': {\n",
|
|
" 'act': resolve_action,\n",
|
|
" },\n",
|
|
" 'variables': {\n",
|
|
" 'funds': update_F, #\n",
|
|
" 'supply': update_S, \n",
|
|
" 'reserve': update_R,\n",
|
|
" 'spot_price': update_P,\n",
|
|
" 'holdings': update_holdings,\n",
|
|
" 'tokens': update_tokens\n",
|
|
" }\n",
|
|
" }\n",
|
|
"]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"time_periods_per_run = 300\n",
|
|
"monte_carlo_runs = 1\n",
|
|
"\n",
|
|
"from cadCAD.configuration.utils import config_sim\n",
|
|
"simulation_parameters = config_sim({\n",
|
|
" 'T': range(time_periods_per_run),\n",
|
|
" 'N': monte_carlo_runs,\n",
|
|
" 'M': params\n",
|
|
"})"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[{'N': 1, 'T': range(0, 300), 'M': {'kappa': 2, 'lambda': 200, 'gains': array([1.01535303, 0.94669471, 0.99863361, 0.91696039, 0.97030072,\n",
|
|
" 0.9221604 , 0.87084168, 1.04207957, 0.96289949, 0.91718973,\n",
|
|
" 0.99693053, 1.02431411, 0.92674754, 0.90909958, 1.03321212,\n",
|
|
" 0.96622344, 0.9994914 , 1.01483049, 1.04987409, 0.98681474,\n",
|
|
" 0.97199609, 0.93780697, 1.04419426, 0.94070826, 0.890677 ,\n",
|
|
" 0.97459264, 1.01360303, 0.94063754, 1.02463315, 1.01350909,\n",
|
|
" 0.8921601 , 1.01607629, 0.99305991, 1.00907995, 1.01759725,\n",
|
|
" 1.01668989, 0.92590389, 1.01565762, 0.99027221, 0.97351841,\n",
|
|
" 1.00706862, 1.01969654, 0.96667426, 0.98849401, 0.95999794,\n",
|
|
" 1.06593137, 0.96815824, 0.93645407, 0.97590572, 1.05963953,\n",
|
|
" 1.06745931, 1.046569 , 0.99893183, 0.99527535, 0.99574013,\n",
|
|
" 1.01067462, 0.97592448, 0.99275056, 1.0387044 , 1.00212574,\n",
|
|
" 1.02541185, 1.07054733, 0.89455423, 1.03301249, 1.00769868,\n",
|
|
" 1.0597725 , 0.87798826, 0.97200691, 1.06589903, 0.99042948,\n",
|
|
" 1.03687133, 0.98595765, 1.07233284, 1.00036976, 0.96608172,\n",
|
|
" 0.90368726, 1.11300847, 0.9543083 , 0.94282397, 1.0456161 ,\n",
|
|
" 1.0136623 , 0.95257293, 1.05396672, 1.09255892, 1.00710184,\n",
|
|
" 0.98100727, 0.93446405, 0.96623079, 1.06349989, 0.94081792,\n",
|
|
" 0.9551108 , 0.92473912, 1.01310231, 1.03086491, 0.98264264,\n",
|
|
" 1.04290826, 1.08861313, 1.08212039, 1.04546736, 1.00894222]), 'population': 100, 'beta': 0.9, 'phi': 0.05, 'invariant': 20000000.0}}]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from cadCAD.configuration import append_configs\n",
|
|
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n",
|
|
"# The configurations above are then packaged into a `Configuration` object\n",
|
|
"append_configs(\n",
|
|
" initial_state=initial_conditions, #dict containing variable names and initial values\n",
|
|
" partial_state_update_blocks=partial_state_update_blocks, #dict containing state update functions\n",
|
|
" sim_configs=simulation_parameters #dict containing simulation parameters\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from tabulate import tabulate\n",
|
|
"from cadCAD.engine import ExecutionMode, ExecutionContext, Executor\n",
|
|
"from cadCAD import configs\n",
|
|
"import pandas as pd\n",
|
|
"\n",
|
|
"exec_mode = ExecutionMode()\n",
|
|
"multi_proc_ctx = ExecutionContext(context=exec_mode.multi_proc)\n",
|
|
"run = Executor(exec_context=multi_proc_ctx, configs=configs)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
" __________ ____ \n",
|
|
" ________ __ _____/ ____/ | / __ \\\n",
|
|
" / ___/ __` / __ / / / /| | / / / /\n",
|
|
" / /__/ /_/ / /_/ / /___/ ___ |/ /_/ / \n",
|
|
" \\___/\\__,_/\\__,_/\\____/_/ |_/_____/ \n",
|
|
" by BlockScience\n",
|
|
" \n",
|
|
"Execution Mode: multi_proc: [<cadCAD.configuration.Configuration object at 0x1a1d44d048>]\n",
|
|
"Configurations: [<cadCAD.configuration.Configuration object at 0x1a1d44d048>]\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/Users/zargham/Documents/GitHub/conviction/bonding_curve_eq.py:56: RuntimeWarning: invalid value encountered in double_scalars\n",
|
|
" realized_price = quantity_recieved/deltaS\n",
|
|
"/Users/zargham/Documents/GitHub/conviction/bonding_curve_eq.py:47: RuntimeWarning: invalid value encountered in double_scalars\n",
|
|
" realized_price = deltaR/deltaS\n",
|
|
"/Users/zargham/Documents/GitHub/conviction/bonding_curve_eq.py:56: RuntimeWarning: divide by zero encountered in double_scalars\n",
|
|
" realized_price = quantity_recieved/deltaS\n",
|
|
"/Users/zargham/Documents/GitHub/conviction/bonding_curve_eq.py:47: RuntimeWarning: divide by zero encountered in double_scalars\n",
|
|
" realized_price = deltaR/deltaS\n",
|
|
"/Users/zargham/Documents/GitHub/conviction/bonding_curve_eq.py:37: RuntimeWarning: invalid value encountered in double_scalars\n",
|
|
" realized_price = deltaR/deltaS\n",
|
|
"/Users/zargham/Documents/GitHub/conviction/bonding_curve_eq.py:37: RuntimeWarning: divide by zero encountered in double_scalars\n",
|
|
" realized_price = deltaR/deltaS\n",
|
|
"Process ForkPoolWorker-1:\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "KeyboardInterrupt",
|
|
"evalue": "",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
|
"\u001b[0;32m<ipython-input-18-6e7972e764e1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mverbose\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mraw_result\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtensor_field\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mraw_result\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m/anaconda3/lib/python3.6/site-packages/cadCAD/engine/__init__.py\u001b[0m in \u001b[0;36mexecute\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 110\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexec_context\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mExecutionMode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmulti_proc\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 111\u001b[0m \u001b[0;31m# if len(self.configs) > 1:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 112\u001b[0;31m \u001b[0msimulations\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexec_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msimulation_execs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvar_dict_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates_lists\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs_structs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 113\u001b[0m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 114\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpartial_state_updates\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mep\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msimulations\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpartial_state_updates\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m/anaconda3/lib/python3.6/site-packages/cadCAD/engine/__init__.py\u001b[0m in \u001b[0;36mparallelize_simulations\u001b[0;34m(simulation_execs, var_dict_list, states_lists, configs_structs, env_processes_list, Ts, Ns)\u001b[0m\n\u001b[1;32m 45\u001b[0m \u001b[0ml\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msimulation_execs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvar_dict_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates_lists\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs_structs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 46\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mPPool\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconfigs_structs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 47\u001b[0;31m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 48\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresults\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m/anaconda3/lib/python3.6/site-packages/pathos/multiprocessing.py\u001b[0m in \u001b[0;36mmap\u001b[0;34m(self, f, *args, **kwds)\u001b[0m\n\u001b[1;32m 135\u001b[0m \u001b[0mAbstractWorkerPool\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_AbstractWorkerPool__map\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 136\u001b[0m \u001b[0m_pool\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_serve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 137\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_pool\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# chunksize\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 138\u001b[0m \u001b[0mmap\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mAbstractWorkerPool\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mimap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m/anaconda3/lib/python3.6/site-packages/multiprocess/pool.py\u001b[0m in \u001b[0;36mmap\u001b[0;34m(self, func, iterable, chunksize)\u001b[0m\n\u001b[1;32m 264\u001b[0m \u001b[0;32min\u001b[0m \u001b[0ma\u001b[0m \u001b[0mlist\u001b[0m \u001b[0mthat\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mreturned\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 265\u001b[0m '''\n\u001b[0;32m--> 266\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_map_async\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmapstar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mchunksize\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 267\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 268\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mstarmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mchunksize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m/anaconda3/lib/python3.6/site-packages/multiprocess/pool.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 636\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 637\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 638\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 639\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mready\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 640\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTimeoutError\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m/anaconda3/lib/python3.6/site-packages/multiprocess/pool.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 633\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 634\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 635\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_event\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 636\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 637\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m/anaconda3/lib/python3.6/threading.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 549\u001b[0m \u001b[0msignaled\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_flag\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 550\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0msignaled\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 551\u001b[0;31m \u001b[0msignaled\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cond\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwait\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 552\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0msignaled\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 553\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;32m/anaconda3/lib/python3.6/threading.py\u001b[0m in \u001b[0;36mwait\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 293\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# restore state no matter what (e.g., KeyboardInterrupt)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 294\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtimeout\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 295\u001b[0;31m \u001b[0mwaiter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0macquire\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 296\u001b[0m \u001b[0mgotit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Traceback (most recent call last):\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/multiprocess/process.py\", line 258, in _bootstrap\n",
|
|
" self.run()\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/multiprocess/process.py\", line 93, in run\n",
|
|
" self._target(*self._args, **self._kwargs)\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/multiprocess/pool.py\", line 119, in worker\n",
|
|
" result = (True, func(*args, **kwds))\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/multiprocess/pool.py\", line 44, in mapstar\n",
|
|
" return list(map(*args))\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/pathos/helpers/mp_helper.py\", line 15, in <lambda>\n",
|
|
" func = lambda args: f(*args)\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/cadCAD/engine/__init__.py\", line 47, in <lambda>\n",
|
|
" results = p.map(lambda t: t[0](t[1], t[2], t[3], t[4], t[5], t[6]), l)\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/cadCAD/engine/simulation.py\", line 229, in simulation\n",
|
|
" list(range(runs))\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/pathos/threading.py\", line 134, in map\n",
|
|
" return _pool.map(star(f), zip(*args)) # chunksize\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/multiprocess/pool.py\", line 266, in map\n",
|
|
" return self._map_async(func, iterable, mapstar, chunksize).get()\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/multiprocess/pool.py\", line 638, in get\n",
|
|
" self.wait(timeout)\n",
|
|
" File \"/anaconda3/lib/python3.6/site-packages/multiprocess/pool.py\", line 635, in wait\n",
|
|
" self._event.wait(timeout)\n",
|
|
" File \"/anaconda3/lib/python3.6/threading.py\", line 551, in wait\n",
|
|
" signaled = self._cond.wait(timeout)\n",
|
|
" File \"/anaconda3/lib/python3.6/threading.py\", line 295, in wait\n",
|
|
" waiter.acquire()\n",
|
|
"KeyboardInterrupt\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"i = 0\n",
|
|
"verbose = False\n",
|
|
"results = {}\n",
|
|
"for raw_result, tensor_field in run.execute():\n",
|
|
" result = pd.DataFrame(raw_result)\n",
|
|
" if verbose:\n",
|
|
" print()\n",
|
|
" print(f\"Tensor Field: {type(tensor_field)}\")\n",
|
|
" print(tabulate(tensor_field, headers='keys', tablefmt='psql'))\n",
|
|
" print(f\"Output: {type(result)}\")\n",
|
|
" print(tabulate(result, headers='keys', tablefmt='psql'))\n",
|
|
" print()\n",
|
|
" results[i] = {}\n",
|
|
" results[i]['result'] = result\n",
|
|
" results[i]['simulation_parameters'] = simulation_parameters[i]\n",
|
|
" i += 1\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"experiment_index = 0\n",
|
|
"df = results[experiment_index]['result']"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df.funds.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"(df.funds.diff()/df.funds).hist()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf = df[df.substep == 3].copy()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['token_wts'] = (rdf.tokens/rdf.supply)\n",
|
|
"rdf['wt_mean_price'] = (rdf.token_wts*rdf.prices).apply(sum)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.prices.apply(np.min).plot()\n",
|
|
"rdf.prices.apply(np.median).plot()\n",
|
|
"rdf.prices.apply(np.mean).plot()\n",
|
|
"rdf.wt_mean_price.plot()\n",
|
|
"rdf.prices.apply(np.max).plot()\n",
|
|
"rdf.spot_price.plot()\n",
|
|
"plt.legend(['min', 'median','mean','wt mean','max', 'spot'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.prices.apply(np.min).apply(np.log).plot()\n",
|
|
"rdf.prices.apply(np.median).apply(np.log).plot()\n",
|
|
"rdf.prices.apply(np.mean).apply(np.log).plot()\n",
|
|
"rdf.wt_mean_price.apply(np.log).plot()\n",
|
|
"rdf.prices.apply(np.max).apply(np.log).plot()\n",
|
|
"rdf.spot_price.apply(np.log).plot()\n",
|
|
"plt.legend(['min', 'median','mean','wt mean','max', 'spot'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['median_price']=rdf.prices.apply(np.median)\n",
|
|
"rdf['mean_price']=rdf.prices.apply(np.mean)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"(np.sign(rdf['mean_price']-rdf['spot_price'])*(rdf['mean_price']-rdf['spot_price'])**2).apply(np.log10).plot(alpha=1)\n",
|
|
"(-np.sign(rdf['mean_price']-rdf['spot_price'])*(rdf['mean_price']-rdf['spot_price'])**2).apply(np.log10).plot(alpha=.5)\n",
|
|
"plt.legend(['over','under'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['est_err'] = rdf.spot_price - rdf.wt_mean_price\n",
|
|
"rdf['sq_est_err'] = rdf['est_err']**2"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.est_err.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.est_err.plot(logy=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#tail T\n",
|
|
"T = 50\n",
|
|
"rdf.tail(T).prices.apply(np.min).plot()\n",
|
|
"rdf.tail(T).prices.apply(np.median).plot()\n",
|
|
"rdf.tail(T).prices.apply(np.mean).plot()\n",
|
|
"rdf.tail(T).wt_mean_price.plot()\n",
|
|
"rdf.tail(T).prices.apply(np.max).plot()\n",
|
|
"rdf.tail(T).spot_price.plot()\n",
|
|
"plt.legend(['min', 'median','mean','wt mean','max', 'spot'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"bond_amts = [rdf.iloc[k].action['amt'] for k in range(time_periods_per_run) if rdf.iloc[k].action['mech']=='bond']\n",
|
|
"burn_amts = [rdf.iloc[k].action['amt'] for k in range(time_periods_per_run) if rdf.iloc[k].action['mech']=='burn']"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.hist(bond_amts)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.hist(burn_amts)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['invariant'] = rdf.supply.apply(lambda x: x**kappa)/rdf.reserve"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['resid'] = rdf.invariant-V0"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.resid.apply(np.log10).plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.plot(x='reserve', y='supply', kind='scatter', alpha=.5)\n",
|
|
"axis = plt.axis()\n",
|
|
"xrange = np.arange(axis[0], axis[1], (axis[1]-axis[0])/100)\n",
|
|
"yrange = np.array([supply(x, V0, kappa) for x in xrange ])\n",
|
|
"plt.plot(xrange, yrange, 'y')\n",
|
|
"plt.title('Bonding Curve Invariant')\n",
|
|
"plt.legend(['Invariant', 'Observed Data'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"(rdf.tokens.apply(sum)-rdf.supply).plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def gini(x):\n",
|
|
"\n",
|
|
" # Mean absolute difference\n",
|
|
" mad = np.abs(np.subtract.outer(x, x)).mean()\n",
|
|
" # Relative mean absolute difference\n",
|
|
" rmad = mad/np.mean(x)\n",
|
|
" # Gini coefficient\n",
|
|
" g = 0.5 * rmad\n",
|
|
" return g"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['gini_h'] = rdf.holdings.apply(gini)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.gini_h.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['gini_s'] = rdf.tokens.apply(gini)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.gini_s.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.tokens.apply(np.count_nonzero).plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['asset_value'] = rdf.holdings + rdf.spot_price*rdf.tokens"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf['gini'] = rdf.asset_value.apply(gini)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.gini.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.tokens.sum()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.6.4"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|