cadCAD/CAD_Engine.ipynb

1627 lines
60 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": [
{
"data": {
"text/plain": [
"['2018-10-01 01:00:00',\n",
" '2018-10-01 01:15:00',\n",
" '2018-10-01 01:30:00',\n",
" '2018-10-01 01:45:00',\n",
" '2018-10-01 02:00:00']"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"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",
"\n",
"datetime_range('2018-10-01 01:00:00', '2018-10-01 02:00:00', timedelta(minutes=15))\n",
"\n",
"# # datetime(2018, 10, 1, 1, 0, 0) + timedelta(seconds=30)\n",
"# # datetime.strptime('2018-10-01 15:16:24', '%Y-%m-%d %H:%M:%S')\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 es_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",
"# time_step('2018-10-01 15:16:24')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"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",
"# Stochastic Process\n",
"# Input RNG Seed\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",
"# print('trigered: '+step)\n",
" return update_f\n",
" else:\n",
"# print('NOT trigered: '+step)\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)\n",
" \n",
"# def round_down(f, fp=TWOPLACES):\n",
"# return (f).quantize(fp, ROUND_DOWN)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"\n",
"\n",
"\n",
"# esceptions:\n",
"# point to line giving problems and pass a sentinel"
]
},
{
"cell_type": "code",
"execution_count": 5,
"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",
"\n",
"# add env process f(s) read from time es\n",
"# funcs execute in order\n",
"def env_a(x): \n",
" return 10\n",
"def env_b(x): \n",
" return 10\n",
" \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",
"# simulation = {\n",
"# \"s3\": es3p1\n",
"# }\n",
"\n",
"exogenous_states = {\n",
" \"s3\": es3p1,\n",
" \"s4\": es4p2,\n",
" \"timestamp\": es5p2\n",
"}\n",
"\n",
"# Update time at the end of each pipeline (once per 'block')\n",
"# Enable the acceptance of user defined time\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": 6,
"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",
" # Truncate reffs\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",
" # * force eval of _input withing state functions\n",
" _input = getBehaviorInput(m_step, sL, last_in_obj, behavior_funcs)\n",
"\n",
" \n",
"# apply_env_proc(env_processes, last_mut_obj, t_step)\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": 15,
"metadata": {},
"outputs": [],
"source": [
"time_seq = datetime_range('2018-10-01 15:16:24', '2018-10-01 15:16:34', timedelta(seconds=1))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"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",
"s = simulation(states_list, configs, env_processes, range(5), 2)\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\n",
"datetime_range('2018-10-01 15:16:24', '2018-10-01 15:16:34', timedelta(seconds=1))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"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": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(flatten(s))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# pd.DataFrame(flatten(p))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"# flatten(pipeline(states_list, configs, env_processes, range(10)))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"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": 11,
"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": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0, 1]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(range(2))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"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-13-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
}