cadCAD/notebooks/.ipynb_checkpoints/CAD_Engine-checkpoint.ipynb

1545 lines
57 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from fn import op, _, F\n",
"from operator import add, mul\n",
"from itertools import repeat, chain\n",
"from functools import reduce\n",
"# from objproxies import LazyProxy\n",
"import json\n",
"from copy import deepcopy, copy\n",
"from pipetools import pipe\n",
"from functools import partial\n",
"import numpy as np\n",
"from datetime import datetime, timedelta\n",
"from decimal import Decimal, getcontext, ROUND_DOWN\n",
"TWOPLACES = Decimal(10) ** -2 # same as Decimal('0.01')\n",
"import pandas as pd\n",
"import pprint\n",
"# getcontext().prec=None\n",
"# getcontext().rounding = ROUND_DOWN"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"flatten = lambda l: [item for sublist in l for item in sublist]\n",
"\n",
"def flatmap(f, items):\n",
" return list(map(f, items))\n",
" \n",
"def datetime_range(start, end, delta, dt_format='%Y-%m-%d %H:%M:%S'):\n",
" reverse_head = end\n",
" [start, end] = [datetime.strptime(x, dt_format) for x in [start, end]]\n",
" def _datetime_range(start, end, delta):\n",
" current = start\n",
" while current < end:\n",
" yield current\n",
" current += delta\n",
" \n",
" reverse_tail = [dt.strftime(dt_format) for dt in _datetime_range(start, end, delta)]\n",
" return reverse_tail + [reverse_head]\n",
" \n",
"def last_index(l):\n",
" return len(l)-1\n",
"\n",
"def retrieve_state(l, offset):\n",
" return l[last_index(l) + offset + 1]\n",
"\n",
"def bound_norm_random(rng, low, high):\n",
" # Add RNG Seed\n",
" res = rng.normal((high+low)/2,(high-low)/6)\n",
" if (res<low or res>high):\n",
" res = bound_norm_random(rng, low, high)\n",
" return Decimal(res)\n",
"\n",
"def env_proc(trigger_step, update_f):\n",
" def env_step_trigger(trigger_step, update_f, step):\n",
" if step == trigger_step:\n",
" return update_f\n",
" else:\n",
" return lambda x: x\n",
" return partial(env_step_trigger, trigger_step, update_f)\n",
"\n",
"def time_step(dt_str, dt_format='%Y-%m-%d %H:%M:%S', days=0, minutes=0, seconds=30):\n",
" dt = datetime.strptime(dt_str, dt_format)\n",
" t = dt + timedelta(days=days, minutes=minutes, seconds=seconds)\n",
" return t.strftime(dt_format)\n",
"\n",
"def ep_time_step(s, dt_str, fromat_str='%Y-%m-%d %H:%M:%S', days=0, minutes=0, seconds=1):\n",
" if s['mech_step'] == 0:\n",
" return time_step(dt_str, fromat_str, days, minutes, seconds)\n",
" else: \n",
" return dt_str\n",
"\n",
"def round_down(x, fp=TWOPLACES):\n",
" return x.quantize(TWOPLACES, rounding=ROUND_DOWN)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# esceptions:\n",
"# point to line giving problems and pass a sentinel"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"seed = {\n",
" 'z': np.random.RandomState(1),\n",
" 'a': np.random.RandomState(2),\n",
" 'b': np.random.RandomState(3),\n",
" 'c': np.random.RandomState(3)\n",
"}\n",
"\n",
"# UI Behaviors per Mechanism\n",
"def b1m1(step, sL, s):\n",
" return s['s1'] + 1\n",
"def b2m1(step, sL, s):\n",
" return s['s1'] + 1\n",
"\n",
"def b1m2(step, sL, s):\n",
" return s['s1'] + 1\n",
"def b2m2(step, sL, s):\n",
" return s['s1'] + 1\n",
"\n",
"def b1m3(step, sL, s):\n",
" return s['s1'] + 1\n",
"def b2m3(step, sL, s):\n",
" return s['s2'] + 1\n",
"\n",
"# UI Internal States per Mechanism\n",
"def s1m1(step, sL, s, _input):\n",
" s['s1'] = s['s1'] + _input\n",
"def s2m1(step, sL, s, _input):\n",
" s['s2'] = s['s2'] + _input\n",
"\n",
"def s1m2(step, sL, s, _input):\n",
" s['s1'] = s['s1'] + _input\n",
"def s2m2(step, sL, s, _input):\n",
" s['s2'] = s['s2'] + _input\n",
" \n",
"def s1m3(step, sL, s, _input):\n",
" s['s1'] = s['s1'] + _input\n",
"def s2m3(step, sL, s, _input):\n",
" s['s2'] = s['s2'] + _input\n",
"\n",
"# UI Exogenous States #per Mechanism\n",
"proc_one_coef_A = 0.7\n",
"proc_one_coef_B = 1.3\n",
"def es3p1(step, sL, s, _input):\n",
" s['s3'] = s['s3'] * bound_norm_random(seed['a'], proc_one_coef_A, proc_one_coef_B)\n",
"def es4p2(step, sL, s, _input):\n",
" s['s4'] = s['s4'] * bound_norm_random(seed['b'], proc_one_coef_A, proc_one_coef_B) \n",
"def es5p2(step, sL, s, _input):\n",
" s['timestamp'] = ep_time_step(s, s['timestamp'], seconds=1)\n",
"\n",
"def env_a(x): \n",
" return 10\n",
"def env_b(x): \n",
" return 10\n",
"def what_ever(x): \n",
" return x + 1\n",
"\n",
"# Genesis States \n",
"state_dict = {\n",
" 's1': Decimal(0.0),\n",
" 's2': Decimal(0.0),\n",
" 's3': Decimal(1.0),\n",
" 's4': Decimal(1.0),\n",
" 'timestamp': '2018-10-01 15:16:24'\n",
"}\n",
"\n",
"sim_config = {\n",
" \"N\": 2\n",
"}\n",
"\n",
"exogenous_states = {\n",
" \"s3\": es3p1,\n",
" \"s4\": es4p2,\n",
" \"timestamp\": es5p2\n",
"}\n",
"\n",
"env_processes = {\n",
" \"s3\": env_proc('2018-10-01 15:16:25', env_a),\n",
" \"s4\": env_proc('2018-10-01 15:16:25', env_b)\n",
"}\n",
" \n",
"mechanisms = {\n",
" \"m1\": {\n",
" \"behaviors\": {\n",
" \"b1\": b1m1,\n",
" \"b2\": b2m1\n",
" },\n",
" \"states\": {\n",
" \"s1\": s1m1,\n",
" \"s2\": s2m1,\n",
" }\n",
" },\n",
" \"m2\": {\n",
" \"behaviors\": {\n",
" \"b1\": b1m2,\n",
" \"b2\": b2m2\n",
" },\n",
" \"states\": {\n",
" \"s1\": s1m2,\n",
" \"s2\": s2m2,\n",
" }\n",
" },\n",
" \"m3\": {\n",
" \"behaviors\": {\n",
" \"b1\": b1m3,\n",
" \"b2\": b2m3\n",
" },\n",
" \"states\": {\n",
" \"s1\": s1m3,\n",
" \"s2\": s2m3,\n",
" }\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# if beh list empty, repeat 0 x n_states in list \n",
"def generate_config(mechanisms, exogenous_states):\n",
" es_funcs = [exogenous_states[state] for state in list(exogenous_states.keys())]\n",
" config = list(\n",
" map(\n",
" lambda m: (\n",
" list(mechanisms[m][\"states\"].values()) + es_funcs,\n",
" list(mechanisms[m][\"behaviors\"].values())\n",
" ), \n",
" list(mechanisms.keys())\n",
" )\n",
" )\n",
" return config\n",
"\n",
"# partials = list(map(lambda f: partial(f, step, sL), funcs))\n",
"def getColResults(step, sL, s, funcs):\n",
" return list(map(lambda f: f(step, sL, s), funcs))\n",
"\n",
"def getBehaviorInput(step, sL, s, funcs): \n",
" return op.foldr(_ + _)(getColResults(step, sL, s, funcs))\n",
"\n",
"def apply_env_proc(env_processes, state_dict, step):\n",
" for state in state_dict.keys(): \n",
" if state in list(env_processes.keys()):\n",
" state_dict[state] = env_processes[state](step)(state_dict[state])\n",
"# return state_dict\n",
" \n",
"def mech_step(m_step, sL, state_funcs, behavior_funcs, env_processes, t_step):\n",
" in_copy, mutatable_copy, out_copy = deepcopy(sL), deepcopy(sL), deepcopy(sL)\n",
" last_in_obj, last_mut_obj = in_copy[-1], mutatable_copy[-1]\n",
" \n",
" _input = getBehaviorInput(m_step, sL, last_in_obj, behavior_funcs)\n",
"\n",
" for f in state_funcs:\n",
" f(m_step, sL, last_mut_obj, _input)\n",
" \n",
" apply_env_proc(env_processes, last_mut_obj, last_mut_obj['timestamp'])\n",
" \n",
" last_mut_obj[\"mech_step\"], last_mut_obj[\"time_step\"] = m_step, t_step\n",
" out_copy.append(last_mut_obj)\n",
" \n",
" del last_in_obj, last_mut_obj, in_copy, mutatable_copy,\n",
" return out_copy\n",
"\n",
"def block_gen(states_list, configs, env_processes, t_step):\n",
" m_step = 0\n",
" states_list_copy = deepcopy(states_list)\n",
" genesis_states = states_list_copy[-1]\n",
" genesis_states['mech_step'], genesis_states['time_step'] = m_step, t_step\n",
" states_list = [genesis_states]\n",
" \n",
" m_step += 1\n",
" for config in configs:\n",
" s_conf, b_conf = config[0], config[1]\n",
" states_list = mech_step(m_step, states_list, s_conf, b_conf, env_processes, t_step) \n",
" m_step += 1 \n",
" \n",
" t_step += 1\n",
" \n",
" return states_list\n",
"\n",
"def pipeline(states_list, configs, env_processes, time_seq):\n",
" time_seq = [x + 1 for x in time_seq]\n",
" simulation_list = [states_list]\n",
" for time_step in time_seq:\n",
" pipeline_run = block_gen(simulation_list[-1], configs, env_processes, time_step)\n",
" head, *pipeline_run = pipeline_run\n",
" simulation_list.append(pipeline_run)\n",
" \n",
" return simulation_list\n",
"\n",
"def simulation(states_list, configs, env_processes, time_seq, runs):\n",
" pipeline_run = []\n",
" for run in range(runs):\n",
" if run == 0:\n",
" head, *tail = pipeline(states_list, configs, env_processes, time_seq)\n",
" head[-1]['mech_step'], head[-1]['time_step'] = 0, 0\n",
" simulation_list = [head] + tail\n",
" pipeline_run += simulation_list\n",
" else:\n",
" transient_states_list = [pipeline_run[-1][-1]]\n",
" head, *tail = pipeline(transient_states_list, configs, env_processes, time_seq)\n",
" pipeline_run += tail\n",
" \n",
" return pipeline_run"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"states_list = [state_dict]\n",
"configs = generate_config(mechanisms, exogenous_states)\n",
"p = pipeline(states_list, configs, env_processes, range(10))\n",
"N = sim_config['N']\n",
"s = simulation(states_list, configs, env_processes, range(5), N)\n",
"# x = flatten(s)\n",
"# transient_state = p[-1][1]\n",
"# transient_state['mech_step'], transient_state['time_step'] = 0, 0\n",
"# head, *tail = pipeline([transient_state], configs, env_processes, range(1))\n",
"# head"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>mech_step</th>\n",
" <th>s1</th>\n",
" <th>s2</th>\n",
" <th>s3</th>\n",
" <th>s4</th>\n",
" <th>time_step</th>\n",
" <th>timestamp</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>2018-10-01 15:16:24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>80</td>\n",
" <td>80</td>\n",
" <td>10.11272650481664925337099703</td>\n",
" <td>9.373583088811631158776549455</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>242</td>\n",
" <td>10.48734693326453094234983527</td>\n",
" <td>8.620166261663314142236915486</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>3</td>\n",
" <td>728</td>\n",
" <td>728</td>\n",
" <td>11.91324213527073640563759608</td>\n",
" <td>6.534876346304093857289840679</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>2186</td>\n",
" <td>2186</td>\n",
" <td>12.51111677744237829906599131</td>\n",
" <td>5.931189683155669237263639524</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2</td>\n",
" <td>6560</td>\n",
" <td>6560</td>\n",
" <td>11.45491115406912332557488657</td>\n",
" <td>5.323909548201248804011334243</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>3</td>\n",
" <td>19682</td>\n",
" <td>19682</td>\n",
" <td>11.45492233574810924703732794</td>\n",
" <td>5.922305246967391091784578434</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1</td>\n",
" <td>59048</td>\n",
" <td>59048</td>\n",
" <td>12.07618299500414501852331463</td>\n",
" <td>5.844181611660746042323398006</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2</td>\n",
" <td>177146</td>\n",
" <td>177146</td>\n",
" <td>11.69758475927152423750273350</td>\n",
" <td>4.895504116358059115564009831</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>3</td>\n",
" <td>531440</td>\n",
" <td>531440</td>\n",
" <td>12.59948227491754385453787769</td>\n",
" <td>5.212084350211693473310595115</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>1</td>\n",
" <td>1594322</td>\n",
" <td>1594322</td>\n",
" <td>10.24578476590601915537323162</td>\n",
" <td>5.026393025236651957087178490</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2</td>\n",
" <td>4782968</td>\n",
" <td>4782968</td>\n",
" <td>12.01951931367329656846103790</td>\n",
" <td>4.150221830221986597823503510</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>3</td>\n",
" <td>14348906</td>\n",
" <td>14348906</td>\n",
" <td>13.78359773310736942021387828</td>\n",
" <td>3.902598993430797578406458962</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>1</td>\n",
" <td>43046720</td>\n",
" <td>43046720</td>\n",
" <td>13.32091359287408730481902298</td>\n",
" <td>3.672894210059761345742434130</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2</td>\n",
" <td>129140162</td>\n",
" <td>129140162</td>\n",
" <td>14.13527536292426397902194114</td>\n",
" <td>3.351926486887274317017948960</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>3</td>\n",
" <td>387420488</td>\n",
" <td>387420488</td>\n",
" <td>14.20308311546219526855400801</td>\n",
" <td>3.361886339360781260941488875</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>1</td>\n",
" <td>1162261466</td>\n",
" <td>1162261466</td>\n",
" <td>13.02545537307822846470938594</td>\n",
" <td>2.606047631743025149285461982</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>2</td>\n",
" <td>3486784400</td>\n",
" <td>3486784400</td>\n",
" <td>13.13970192664229610704565704</td>\n",
" <td>2.536267614367708948896160350</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>3</td>\n",
" <td>10460353202</td>\n",
" <td>10460353202</td>\n",
" <td>14.45415288332803687992198248</td>\n",
" <td>2.793238049474741135891634693</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>1</td>\n",
" <td>31381059608</td>\n",
" <td>31381059608</td>\n",
" <td>13.90331593224211305310973356</td>\n",
" <td>3.031444787261044967744846862</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>2</td>\n",
" <td>94143178826</td>\n",
" <td>94143178826</td>\n",
" <td>13.38101086472707551893567355</td>\n",
" <td>3.367385709259623648524467847</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>3</td>\n",
" <td>282429536480</td>\n",
" <td>282429536480</td>\n",
" <td>13.28136145598818796728374992</td>\n",
" <td>3.744327718839584052060484761</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>1</td>\n",
" <td>847288609442</td>\n",
" <td>847288609442</td>\n",
" <td>13.85710360094731748652239268</td>\n",
" <td>4.301312617048495503346448551</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>2</td>\n",
" <td>2541865828328</td>\n",
" <td>2541865828328</td>\n",
" <td>15.62856694446497485222188399</td>\n",
" <td>3.820296532701969691212693578</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>3</td>\n",
" <td>7625597484986</td>\n",
" <td>7625597484986</td>\n",
" <td>14.63665414353875737144481534</td>\n",
" <td>4.143429975924374142196892846</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>1</td>\n",
" <td>22876792454960</td>\n",
" <td>22876792454960</td>\n",
" <td>15.38077614074195493801335714</td>\n",
" <td>3.372383430314120031908078792</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:34</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>2</td>\n",
" <td>68630377364882</td>\n",
" <td>68630377364882</td>\n",
" <td>15.71317933201924350842295494</td>\n",
" <td>3.169067456800405322991965480</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:34</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>3</td>\n",
" <td>205891132094648</td>\n",
" <td>205891132094648</td>\n",
" <td>12.79270835883217130804015761</td>\n",
" <td>2.562358351829251223423466163</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:34</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mech_step s1 s2 \\\n",
"0 0 0 0 \n",
"1 1 2 2 \n",
"2 2 8 8 \n",
"3 3 26 26 \n",
"4 1 80 80 \n",
"5 2 242 242 \n",
"6 3 728 728 \n",
"7 1 2186 2186 \n",
"8 2 6560 6560 \n",
"9 3 19682 19682 \n",
"10 1 59048 59048 \n",
"11 2 177146 177146 \n",
"12 3 531440 531440 \n",
"13 1 1594322 1594322 \n",
"14 2 4782968 4782968 \n",
"15 3 14348906 14348906 \n",
"16 1 43046720 43046720 \n",
"17 2 129140162 129140162 \n",
"18 3 387420488 387420488 \n",
"19 1 1162261466 1162261466 \n",
"20 2 3486784400 3486784400 \n",
"21 3 10460353202 10460353202 \n",
"22 1 31381059608 31381059608 \n",
"23 2 94143178826 94143178826 \n",
"24 3 282429536480 282429536480 \n",
"25 1 847288609442 847288609442 \n",
"26 2 2541865828328 2541865828328 \n",
"27 3 7625597484986 7625597484986 \n",
"28 1 22876792454960 22876792454960 \n",
"29 2 68630377364882 68630377364882 \n",
"30 3 205891132094648 205891132094648 \n",
"\n",
" s3 s4 time_step \\\n",
"0 1 1 0 \n",
"1 10 10 1 \n",
"2 10 10 1 \n",
"3 10 10 1 \n",
"4 10.11272650481664925337099703 9.373583088811631158776549455 2 \n",
"5 10.48734693326453094234983527 8.620166261663314142236915486 2 \n",
"6 11.91324213527073640563759608 6.534876346304093857289840679 2 \n",
"7 12.51111677744237829906599131 5.931189683155669237263639524 3 \n",
"8 11.45491115406912332557488657 5.323909548201248804011334243 3 \n",
"9 11.45492233574810924703732794 5.922305246967391091784578434 3 \n",
"10 12.07618299500414501852331463 5.844181611660746042323398006 4 \n",
"11 11.69758475927152423750273350 4.895504116358059115564009831 4 \n",
"12 12.59948227491754385453787769 5.212084350211693473310595115 4 \n",
"13 10.24578476590601915537323162 5.026393025236651957087178490 5 \n",
"14 12.01951931367329656846103790 4.150221830221986597823503510 5 \n",
"15 13.78359773310736942021387828 3.902598993430797578406458962 5 \n",
"16 13.32091359287408730481902298 3.672894210059761345742434130 1 \n",
"17 14.13527536292426397902194114 3.351926486887274317017948960 1 \n",
"18 14.20308311546219526855400801 3.361886339360781260941488875 1 \n",
"19 13.02545537307822846470938594 2.606047631743025149285461982 2 \n",
"20 13.13970192664229610704565704 2.536267614367708948896160350 2 \n",
"21 14.45415288332803687992198248 2.793238049474741135891634693 2 \n",
"22 13.90331593224211305310973356 3.031444787261044967744846862 3 \n",
"23 13.38101086472707551893567355 3.367385709259623648524467847 3 \n",
"24 13.28136145598818796728374992 3.744327718839584052060484761 3 \n",
"25 13.85710360094731748652239268 4.301312617048495503346448551 4 \n",
"26 15.62856694446497485222188399 3.820296532701969691212693578 4 \n",
"27 14.63665414353875737144481534 4.143429975924374142196892846 4 \n",
"28 15.38077614074195493801335714 3.372383430314120031908078792 5 \n",
"29 15.71317933201924350842295494 3.169067456800405322991965480 5 \n",
"30 12.79270835883217130804015761 2.562358351829251223423466163 5 \n",
"\n",
" timestamp \n",
"0 2018-10-01 15:16:24 \n",
"1 2018-10-01 15:16:25 \n",
"2 2018-10-01 15:16:25 \n",
"3 2018-10-01 15:16:25 \n",
"4 2018-10-01 15:16:26 \n",
"5 2018-10-01 15:16:26 \n",
"6 2018-10-01 15:16:26 \n",
"7 2018-10-01 15:16:27 \n",
"8 2018-10-01 15:16:27 \n",
"9 2018-10-01 15:16:27 \n",
"10 2018-10-01 15:16:28 \n",
"11 2018-10-01 15:16:28 \n",
"12 2018-10-01 15:16:28 \n",
"13 2018-10-01 15:16:29 \n",
"14 2018-10-01 15:16:29 \n",
"15 2018-10-01 15:16:29 \n",
"16 2018-10-01 15:16:30 \n",
"17 2018-10-01 15:16:30 \n",
"18 2018-10-01 15:16:30 \n",
"19 2018-10-01 15:16:31 \n",
"20 2018-10-01 15:16:31 \n",
"21 2018-10-01 15:16:31 \n",
"22 2018-10-01 15:16:32 \n",
"23 2018-10-01 15:16:32 \n",
"24 2018-10-01 15:16:32 \n",
"25 2018-10-01 15:16:33 \n",
"26 2018-10-01 15:16:33 \n",
"27 2018-10-01 15:16:33 \n",
"28 2018-10-01 15:16:34 \n",
"29 2018-10-01 15:16:34 \n",
"30 2018-10-01 15:16:34 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(flatten(s))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"# pd.DataFrame(flatten(p))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# flatten(pipeline(states_list, configs, env_processes, range(10)))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>mech_step</th>\n",
" <th>s1</th>\n",
" <th>s2</th>\n",
" <th>s3</th>\n",
" <th>s4</th>\n",
" <th>time_step</th>\n",
" <th>timestamp</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>2018-10-01 15:16:24</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>26</td>\n",
" <td>26</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>1</td>\n",
" <td>2018-10-01 15:16:25</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>80</td>\n",
" <td>80</td>\n",
" <td>10.32600343338698101192107970</td>\n",
" <td>11.77464503140593476970821030</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2</td>\n",
" <td>242</td>\n",
" <td>242</td>\n",
" <td>8.219165152747849552053712991</td>\n",
" <td>10.98017733872146348043050973</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>3</td>\n",
" <td>728</td>\n",
" <td>728</td>\n",
" <td>8.257183331140684599959797063</td>\n",
" <td>11.14555732791249226295457795</td>\n",
" <td>2</td>\n",
" <td>2018-10-01 15:16:26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>2186</td>\n",
" <td>2186</td>\n",
" <td>7.697614183037259884157485079</td>\n",
" <td>11.31602383773220234209463432</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2</td>\n",
" <td>6560</td>\n",
" <td>6560</td>\n",
" <td>6.589589556253206242453558457</td>\n",
" <td>10.11177792894543602078060757</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>3</td>\n",
" <td>19682</td>\n",
" <td>19682</td>\n",
" <td>6.935079384210909962341072506</td>\n",
" <td>10.55461981674527424973269651</td>\n",
" <td>3</td>\n",
" <td>2018-10-01 15:16:27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1</td>\n",
" <td>59048</td>\n",
" <td>59048</td>\n",
" <td>7.445001607171021964619602297</td>\n",
" <td>12.60113786498380553274154381</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2</td>\n",
" <td>177146</td>\n",
" <td>177146</td>\n",
" <td>6.958656677811361123011555690</td>\n",
" <td>11.30960833968231274880432784</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>3</td>\n",
" <td>531440</td>\n",
" <td>531440</td>\n",
" <td>7.544893080763414390539482619</td>\n",
" <td>12.32672489841013251241265104</td>\n",
" <td>4</td>\n",
" <td>2018-10-01 15:16:28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>1</td>\n",
" <td>1594322</td>\n",
" <td>1594322</td>\n",
" <td>7.257042974416754341292737066</td>\n",
" <td>12.13626855258194099234747637</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2</td>\n",
" <td>4782968</td>\n",
" <td>4782968</td>\n",
" <td>7.305294334086750288753115659</td>\n",
" <td>14.28393577165736567187337373</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>3</td>\n",
" <td>14348906</td>\n",
" <td>14348906</td>\n",
" <td>6.502633193673677105757998498</td>\n",
" <td>14.97497594007758912299650180</td>\n",
" <td>5</td>\n",
" <td>2018-10-01 15:16:29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>1</td>\n",
" <td>43046720</td>\n",
" <td>43046720</td>\n",
" <td>7.532967006460158866830248622</td>\n",
" <td>15.98760837190111498137591899</td>\n",
" <td>6</td>\n",
" <td>2018-10-01 15:16:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>2</td>\n",
" <td>129140162</td>\n",
" <td>129140162</td>\n",
" <td>5.529612505431635938711521609</td>\n",
" <td>17.01587263683626320687941714</td>\n",
" <td>6</td>\n",
" <td>2018-10-01 15:16:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>3</td>\n",
" <td>387420488</td>\n",
" <td>387420488</td>\n",
" <td>5.479042748712564957046046498</td>\n",
" <td>17.43971540455384099481071599</td>\n",
" <td>6</td>\n",
" <td>2018-10-01 15:16:30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>1</td>\n",
" <td>1162261466</td>\n",
" <td>1162261466</td>\n",
" <td>5.859901751864631374048367148</td>\n",
" <td>15.00554357874217937378653300</td>\n",
" <td>7</td>\n",
" <td>2018-10-01 15:16:31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>2</td>\n",
" <td>3486784400</td>\n",
" <td>3486784400</td>\n",
" <td>4.668310334266428533266666371</td>\n",
" <td>17.09380941965055731858258171</td>\n",
" <td>7</td>\n",
" <td>2018-10-01 15:16:31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>3</td>\n",
" <td>10460353202</td>\n",
" <td>10460353202</td>\n",
" <td>4.579860201618161652723257217</td>\n",
" <td>14.75081393185207749785986453</td>\n",
" <td>7</td>\n",
" <td>2018-10-01 15:16:31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>1</td>\n",
" <td>31381059608</td>\n",
" <td>31381059608</td>\n",
" <td>4.544495132390953668869140844</td>\n",
" <td>15.10271405806888416660025395</td>\n",
" <td>8</td>\n",
" <td>2018-10-01 15:16:32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>2</td>\n",
" <td>94143178826</td>\n",
" <td>94143178826</td>\n",
" <td>4.919281011778609131178883770</td>\n",
" <td>16.03013712466506066440454624</td>\n",
" <td>8</td>\n",
" <td>2018-10-01 15:16:32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>3</td>\n",
" <td>282429536480</td>\n",
" <td>282429536480</td>\n",
" <td>5.533312023673580051763457041</td>\n",
" <td>14.68695226167930775054172372</td>\n",
" <td>8</td>\n",
" <td>2018-10-01 15:16:32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>1</td>\n",
" <td>847288609442</td>\n",
" <td>847288609442</td>\n",
" <td>5.309825828653936981622956333</td>\n",
" <td>14.90000591172573408234847192</td>\n",
" <td>9</td>\n",
" <td>2018-10-01 15:16:33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>2</td>\n",
" <td>2541865828328</td>\n",
" <td>2541865828328</td>\n",
" <td>4.574670531071372379176513606</td>\n",
" <td>16.64015120873515800905796433</td>\n",
" <td>9</td>\n",
" <td>2018-10-01 15:16:33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>3</td>\n",
" <td>7625597484986</td>\n",
" <td>7625597484986</td>\n",
" <td>5.200135691359001534911972922</td>\n",
" <td>16.60004100605598806616905229</td>\n",
" <td>9</td>\n",
" <td>2018-10-01 15:16:33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>1</td>\n",
" <td>22876792454960</td>\n",
" <td>22876792454960</td>\n",
" <td>5.833452746203938319991329665</td>\n",
" <td>15.12486604838650902185343711</td>\n",
" <td>10</td>\n",
" <td>2018-10-01 15:16:34</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>2</td>\n",
" <td>68630377364882</td>\n",
" <td>68630377364882</td>\n",
" <td>5.563944109509313999489022256</td>\n",
" <td>10.71485175557766753591769425</td>\n",
" <td>10</td>\n",
" <td>2018-10-01 15:16:34</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>3</td>\n",
" <td>205891132094648</td>\n",
" <td>205891132094648</td>\n",
" <td>5.759176506486725134678752362</td>\n",
" <td>9.673539064064506702922033631</td>\n",
" <td>10</td>\n",
" <td>2018-10-01 15:16:34</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" mech_step s1 s2 \\\n",
"0 0 0 0 \n",
"1 1 2 2 \n",
"2 2 8 8 \n",
"3 3 26 26 \n",
"4 1 80 80 \n",
"5 2 242 242 \n",
"6 3 728 728 \n",
"7 1 2186 2186 \n",
"8 2 6560 6560 \n",
"9 3 19682 19682 \n",
"10 1 59048 59048 \n",
"11 2 177146 177146 \n",
"12 3 531440 531440 \n",
"13 1 1594322 1594322 \n",
"14 2 4782968 4782968 \n",
"15 3 14348906 14348906 \n",
"16 1 43046720 43046720 \n",
"17 2 129140162 129140162 \n",
"18 3 387420488 387420488 \n",
"19 1 1162261466 1162261466 \n",
"20 2 3486784400 3486784400 \n",
"21 3 10460353202 10460353202 \n",
"22 1 31381059608 31381059608 \n",
"23 2 94143178826 94143178826 \n",
"24 3 282429536480 282429536480 \n",
"25 1 847288609442 847288609442 \n",
"26 2 2541865828328 2541865828328 \n",
"27 3 7625597484986 7625597484986 \n",
"28 1 22876792454960 22876792454960 \n",
"29 2 68630377364882 68630377364882 \n",
"30 3 205891132094648 205891132094648 \n",
"\n",
" s3 s4 time_step \\\n",
"0 1 1 0 \n",
"1 10 10 1 \n",
"2 10 10 1 \n",
"3 10 10 1 \n",
"4 10.32600343338698101192107970 11.77464503140593476970821030 2 \n",
"5 8.219165152747849552053712991 10.98017733872146348043050973 2 \n",
"6 8.257183331140684599959797063 11.14555732791249226295457795 2 \n",
"7 7.697614183037259884157485079 11.31602383773220234209463432 3 \n",
"8 6.589589556253206242453558457 10.11177792894543602078060757 3 \n",
"9 6.935079384210909962341072506 10.55461981674527424973269651 3 \n",
"10 7.445001607171021964619602297 12.60113786498380553274154381 4 \n",
"11 6.958656677811361123011555690 11.30960833968231274880432784 4 \n",
"12 7.544893080763414390539482619 12.32672489841013251241265104 4 \n",
"13 7.257042974416754341292737066 12.13626855258194099234747637 5 \n",
"14 7.305294334086750288753115659 14.28393577165736567187337373 5 \n",
"15 6.502633193673677105757998498 14.97497594007758912299650180 5 \n",
"16 7.532967006460158866830248622 15.98760837190111498137591899 6 \n",
"17 5.529612505431635938711521609 17.01587263683626320687941714 6 \n",
"18 5.479042748712564957046046498 17.43971540455384099481071599 6 \n",
"19 5.859901751864631374048367148 15.00554357874217937378653300 7 \n",
"20 4.668310334266428533266666371 17.09380941965055731858258171 7 \n",
"21 4.579860201618161652723257217 14.75081393185207749785986453 7 \n",
"22 4.544495132390953668869140844 15.10271405806888416660025395 8 \n",
"23 4.919281011778609131178883770 16.03013712466506066440454624 8 \n",
"24 5.533312023673580051763457041 14.68695226167930775054172372 8 \n",
"25 5.309825828653936981622956333 14.90000591172573408234847192 9 \n",
"26 4.574670531071372379176513606 16.64015120873515800905796433 9 \n",
"27 5.200135691359001534911972922 16.60004100605598806616905229 9 \n",
"28 5.833452746203938319991329665 15.12486604838650902185343711 10 \n",
"29 5.563944109509313999489022256 10.71485175557766753591769425 10 \n",
"30 5.759176506486725134678752362 9.673539064064506702922033631 10 \n",
"\n",
" timestamp \n",
"0 2018-10-01 15:16:24 \n",
"1 2018-10-01 15:16:25 \n",
"2 2018-10-01 15:16:25 \n",
"3 2018-10-01 15:16:25 \n",
"4 2018-10-01 15:16:26 \n",
"5 2018-10-01 15:16:26 \n",
"6 2018-10-01 15:16:26 \n",
"7 2018-10-01 15:16:27 \n",
"8 2018-10-01 15:16:27 \n",
"9 2018-10-01 15:16:27 \n",
"10 2018-10-01 15:16:28 \n",
"11 2018-10-01 15:16:28 \n",
"12 2018-10-01 15:16:28 \n",
"13 2018-10-01 15:16:29 \n",
"14 2018-10-01 15:16:29 \n",
"15 2018-10-01 15:16:29 \n",
"16 2018-10-01 15:16:30 \n",
"17 2018-10-01 15:16:30 \n",
"18 2018-10-01 15:16:30 \n",
"19 2018-10-01 15:16:31 \n",
"20 2018-10-01 15:16:31 \n",
"21 2018-10-01 15:16:31 \n",
"22 2018-10-01 15:16:32 \n",
"23 2018-10-01 15:16:32 \n",
"24 2018-10-01 15:16:32 \n",
"25 2018-10-01 15:16:33 \n",
"26 2018-10-01 15:16:33 \n",
"27 2018-10-01 15:16:33 \n",
"28 2018-10-01 15:16:34 \n",
"29 2018-10-01 15:16:34 \n",
"30 2018-10-01 15:16:34 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"states_list = [state_dict]\n",
"configs = generate_config(mechanisms, exogenous_states)\n",
"# type(pipeline(states_list, configs, env_processes, range(10)))\n",
"pd.DataFrame(flatten(pipeline(states_list, configs, env_processes, range(10))))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(range(2))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'non_numeric' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-12-9786f8c4c4ba>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mstate_dict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m's1'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'3323'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m's2'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'2572'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m's3'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'2.657'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m's4'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'7.914'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'timestamp'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'2018-10-01 15:16:26'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'mech_step'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'time_step'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mstate_dict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mquantize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mTWOPLACES\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mROUND_DOWN\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mstate_dict\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mDecimal\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mstate_dict\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnon_numeric\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0mstate_dict\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'non_numeric' is not defined"
]
}
],
"source": [
"# Decimal('240.0').quantize(Decimal('0.01'), ROUND_DOWN)\n",
"# round(Decimal('240.01'), 2)\n",
"state_dict = {'s1': Decimal('3323'), 's2': Decimal('2572'), 's3': Decimal('2.657'), 's4': Decimal('7.914'), 'timestamp': '2018-10-01 15:16:26', 'mech_step': 1, 'time_step': 2}\n",
"state_dict = {k: v.quantize(TWOPLACES, ROUND_DOWN) for k, v in state_dict.items() if type(v) == Decimal}\n",
"state_dict.update(non_numeric)\n",
"state_dict"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"states_list = [state_dict]\n",
"states_list\n",
"# {'s1': 8.742503764992283e+170,\n",
"# 's2': 1.119720780594405e+171,\n",
"# 's3': 4.251811100418906,\n",
"# 's4': 6.92728042985628,\n",
"# 'timestamp': '2018-10-01 15:16:31',\n",
"# 'mech_step': 3,\n",
"# 'time_step': 7}\n",
"# {'s1': Decimal('2.221384236472411425810660220E+330'),\n",
"# 's2': Decimal('2.845096899831187764579913612E+330'),\n",
"# 's3': Decimal('3.622519693611211445932083740'),\n",
"# 's4': Decimal('5.161487081026327858663750787'),\n",
"# 'timestamp': '2018-10-01 15:16:32',\n",
"# 'mech_step': 3,\n",
"# 'time_step': 8}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from decimal import Decimal, MAX_EMAX\n",
"# Decimal(2.5347751615574597e+167)**2\n",
"MAX_EMAX**5"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"1000 * 1000"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"from datetime import datetime, timedelta\n",
"# from datetime import timedelta \n",
"# st = datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')\n",
"st = datetime.now()\n",
"print(st)\n",
"x = st + timedelta(seconds=60)\n",
"print(x)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"s = datetime.now().strftime('%Y-%m-%d %H:%M:%S')\n",
"datetime_object = datetime.strptime(s, '%Y-%m-%d %H:%M:%S')\n",
"datetime_object"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"datetime.fromtimestamp()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from datetime import datetime, timedelta\n",
"\n",
"# def time_step_func(year, month, day, hour, minute, second):\n",
"a = datetime(2016, 11, 15, 9, 59, 25)#.strftime(\"%Y-%m-%d %H:%M:%S\")\n",
"b = a + timedelta(seconds=60) # days, seconds, then other fields.\n",
"print(a)\n",
"print(b)\n",
"st = datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')\n",
"def time_step_func(dt_str, fromat_str='%Y-%m-%d %H:%M:%S', days=0, minutes=0, seconds=1):\n",
" dt = datetime.strptime(dt_str, fromat_str)\n",
" t = dt + timedelta(days=days, minutes=minutes, seconds=seconds)\n",
" return t.strftime(fromat_str)\n",
"\n",
"time_step_func('2018-10-01 15:16:24')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def time_step_func(x, y):\n",
" return x + y"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for m in M: #M is the parameter sweep array\n",
" # for Pairwise, run below separately\n",
" for n in N: #N is the total number of Montecarlo runs\n",
" for t in T: #T[len(T)]-T[0] is the duration of each simulation\n",
" # Pipeline\n",
" for b in Behaviors:\n",
" for M in Mechanisms:\n",
" for s in States:\n",
" update(s)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"[{'s1': 2}] + [{'s1': 3}]\n",
"list(zip([block_gen] * 2, range(2)))\n",
"len([0,1])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"states_list = [state_dict]\n",
"configs = generate_config(mechanisms, exogenous_states)\n",
"def step_func(x, y):\n",
" return x + y\n",
"pipeline(states_list, configs, env_processes, step_func)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# def s3step1(step, sL, s, _input):\n",
"# s['s3'] = s['s3'] \n",
"# # def s3step2(step, sL, s, _input):\n",
"# s['s3'] = s['s3'] + 1\n",
"# def s3step3(step, sL, s, _input):\n",
"# s['s3'] = s['s3'] * bound_norm_random(proc_one_coef_A, proc_one_coef_B)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 15 + 28.933333333333334 + 4"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# def multiply(x,y,z):\n",
"# return x * y * z\n",
"\n",
"# # create a new function that multiplies by 2\n",
"# dbl = partial(partial(multiply,2), multiply, 2)\n",
"# print(dbl(2))"
]
}
],
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}