cadCAD/CAD_Engine.ipynb

1042 lines
34 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",
"getcontext().prec=4\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 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",
" return update_f\n",
" else:\n",
" return lambda x: x\n",
" return partial(env_step_trigger, trigger_step, update_f)\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(s, dt_str, fromat_str='%Y-%m-%d %H:%M:%S', days=0, minutes=0, seconds=1):\n",
" if s['mech_step'] == 0:\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",
" else: \n",
" return dt_str"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# def pipeline(*steps):\n",
"# return reduce(lambda x, y: y(x), list(steps))\n",
"# def compose(*funcs):\n",
"# return lambda x: reduce(lambda f, g: g(f), list(funcs), x)"
]
},
{
"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"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"a = np.random.RandomState(1)\n",
"proc_one_coef_B = 1.3\n",
"b = np.random.RandomState(2)\n",
"\n",
"def pipe_f(x):\n",
" return x"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# UI Behaviors per Mechanism\n",
"def b1m1(step, sL, s):\n",
" return s['s1']\n",
"def b2m1(step, sL, s):\n",
" return s['s1'] * s['s2']\n",
"\n",
"def b1m2(step, sL, s):\n",
" return s['s1']\n",
"def b2m2(step, sL, s):\n",
" return s['s1'] / s['s2']\n",
"\n",
"def b1m3(step, sL, s):\n",
" return s['s1'] + seed['z'].randint(1000)\n",
"def b2m3(step, sL, s):\n",
" ps = retrieve_state(sL, -3)\n",
" return ps['s2']\n",
"\n",
"# UI Internal States per Mechanism\n",
"def s1m1(step, sL, s, _input):\n",
"# print(s['s1'])\n",
" s['s1'] = s['s1']**2 + _input\n",
"def s2m1(step, sL, s, _input):\n",
" s['s2'] = s['s2'] + 1 + _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']\n",
" \n",
"def s1m3(step, sL, s, _input):\n",
" s['s1'] = s['s1']\n",
"def s2m3(step, sL, s, _input):\n",
" s['s2'] = s['s2'] + _input\n",
"\n",
"# UI Exogenous States //per Mechanism \n",
"\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'] = 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 x + 1\n",
"def env_b(x): \n",
" return x + 2\n",
" \n",
"def what_ever(x): \n",
" return x + 1\n",
"\n",
"# Genesis States \n",
"state_dict = {\n",
" 's1': Decimal(2.0),\n",
" 's2': Decimal(4.0),\n",
" 's3': Decimal(0.0),\n",
" 's4': Decimal(0.0),\n",
" 'timestamp': '2018-10-01 15:16:24'\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",
"env_processes = {\n",
" \"s3\": env_proc(1, env_a),\n",
" \"s4\": env_proc(1, pipe | env_b | what_ever)\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": 8,
"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",
" # Purge Memory accociated with certain objs\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",
" 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",
" 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",
" # should only occur once for genesis state, placed before loop\n",
" head, *tail = simulation_list\n",
" head[-1]['mech_step'], head[-1]['time_step'] = 0, 0\n",
" simulation_list = head, *tail\n",
" return simulation_list"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'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}"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"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": 19,
"metadata": {
"collapsed": true
},
"outputs": [
{
"data": {
"text/plain": [
"([{'s1': Decimal('2'),\n",
" 's2': Decimal('4'),\n",
" 's3': Decimal('0'),\n",
" 's4': Decimal('0'),\n",
" 'timestamp': '2018-10-01 15:16:24',\n",
" 'mech_step': 0,\n",
" 'time_step': 0}],\n",
" [{'s1': Decimal('14'),\n",
" 's2': Decimal('15'),\n",
" 's3': Decimal('1.150'),\n",
" 's4': Decimal('3.045'),\n",
" 'timestamp': '2018-10-01 15:16:25',\n",
" 'mech_step': 1,\n",
" 'time_step': 1},\n",
" {'s1': Decimal('28.93'),\n",
" 's2': Decimal('15'),\n",
" 's3': Decimal('2.336'),\n",
" 's4': Decimal('6.033'),\n",
" 'timestamp': '2018-10-01 15:16:25',\n",
" 'mech_step': 2,\n",
" 'time_step': 1},\n",
" {'s1': Decimal('28.93'),\n",
" 's2': Decimal('544.9'),\n",
" 's3': Decimal('2.973'),\n",
" 's4': Decimal('9.469'),\n",
" 'timestamp': '2018-10-01 15:16:25',\n",
" 'mech_step': 3,\n",
" 'time_step': 1}],\n",
" [{'s1': Decimal('1.661E+4'),\n",
" 's2': Decimal('1.632E+4'),\n",
" 's3': Decimal('3.170'),\n",
" 's4': Decimal('10.19'),\n",
" 'timestamp': '2018-10-01 15:16:26',\n",
" 'mech_step': 1,\n",
" 'time_step': 2},\n",
" {'s1': Decimal('3.322E+4'),\n",
" 's2': Decimal('1.632E+4'),\n",
" 's3': Decimal('3.402'),\n",
" 's4': Decimal('11.58'),\n",
" 'timestamp': '2018-10-01 15:16:26',\n",
" 'mech_step': 2,\n",
" 'time_step': 2},\n",
" {'s1': Decimal('3.322E+4'),\n",
" 's2': Decimal('5.012E+4'),\n",
" 's3': Decimal('3.040'),\n",
" 's4': Decimal('12.90'),\n",
" 'timestamp': '2018-10-01 15:16:26',\n",
" 'mech_step': 3,\n",
" 'time_step': 2}],\n",
" [{'s1': Decimal('2.767E+9'),\n",
" 's2': Decimal('1.664E+9'),\n",
" 's3': Decimal('3.007'),\n",
" 's4': Decimal('12.75'),\n",
" 'timestamp': '2018-10-01 15:16:27',\n",
" 'mech_step': 1,\n",
" 'time_step': 3},\n",
" {'s1': Decimal('5.534E+9'),\n",
" 's2': Decimal('1.664E+9'),\n",
" 's3': Decimal('2.450'),\n",
" 's4': Decimal('13.24'),\n",
" 'timestamp': '2018-10-01 15:16:27',\n",
" 'mech_step': 2,\n",
" 'time_step': 3},\n",
" {'s1': Decimal('5.534E+9'),\n",
" 's2': Decimal('7.198E+9'),\n",
" 's3': Decimal('2.530'),\n",
" 's4': Decimal('12.72'),\n",
" 'timestamp': '2018-10-01 15:16:27',\n",
" 'mech_step': 3,\n",
" 'time_step': 3}],\n",
" [{'s1': Decimal('7.045E+19'),\n",
" 's2': Decimal('3.983E+19'),\n",
" 's3': Decimal('2.450'),\n",
" 's4': Decimal('11.97'),\n",
" 'timestamp': '2018-10-01 15:16:28',\n",
" 'mech_step': 1,\n",
" 'time_step': 4},\n",
" {'s1': Decimal('1.409E+20'),\n",
" 's2': Decimal('3.983E+19'),\n",
" 's3': Decimal('2.119'),\n",
" 's4': Decimal('14.25'),\n",
" 'timestamp': '2018-10-01 15:16:28',\n",
" 'mech_step': 2,\n",
" 'time_step': 4},\n",
" {'s1': Decimal('1.409E+20'),\n",
" 's2': Decimal('1.807E+20'),\n",
" 's3': Decimal('1.971'),\n",
" 's4': Decimal('13.59'),\n",
" 'timestamp': '2018-10-01 15:16:28',\n",
" 'mech_step': 3,\n",
" 'time_step': 4}],\n",
" [{'s1': Decimal('4.531E+40'),\n",
" 's2': Decimal('2.546E+40'),\n",
" 's3': Decimal('2.018'),\n",
" 's4': Decimal('16.29'),\n",
" 'timestamp': '2018-10-01 15:16:29',\n",
" 'mech_step': 1,\n",
" 'time_step': 5},\n",
" {'s1': Decimal('9.062E+40'),\n",
" 's2': Decimal('2.546E+40'),\n",
" 's3': Decimal('1.906'),\n",
" 's4': Decimal('15.72'),\n",
" 'timestamp': '2018-10-01 15:16:29',\n",
" 'mech_step': 2,\n",
" 'time_step': 5},\n",
" {'s1': Decimal('9.062E+40'),\n",
" 's2': Decimal('1.160E+41'),\n",
" 's3': Decimal('1.963'),\n",
" 's4': Decimal('16.11'),\n",
" 'timestamp': '2018-10-01 15:16:29',\n",
" 'mech_step': 3,\n",
" 'time_step': 5}],\n",
" [{'s1': Decimal('1.872E+82'),\n",
" 's2': Decimal('1.051E+82'),\n",
" 's3': Decimal('2.071'),\n",
" 's4': Decimal('17.86'),\n",
" 'timestamp': '2018-10-01 15:16:30',\n",
" 'mech_step': 1,\n",
" 'time_step': 6},\n",
" {'s1': Decimal('3.744E+82'),\n",
" 's2': Decimal('1.051E+82'),\n",
" 's3': Decimal('1.896'),\n",
" 's4': Decimal('17.90'),\n",
" 'timestamp': '2018-10-01 15:16:30',\n",
" 'mech_step': 2,\n",
" 'time_step': 6},\n",
" {'s1': Decimal('3.744E+82'),\n",
" 's2': Decimal('4.795E+82'),\n",
" 's3': Decimal('1.836'),\n",
" 's4': Decimal('18.60'),\n",
" 'timestamp': '2018-10-01 15:16:30',\n",
" 'mech_step': 3,\n",
" 'time_step': 6}],\n",
" [{'s1': Decimal('3.196E+165'),\n",
" 's2': Decimal('1.795E+165'),\n",
" 's3': Decimal('2.229'),\n",
" 's4': Decimal('18.15'),\n",
" 'timestamp': '2018-10-01 15:16:31',\n",
" 'mech_step': 1,\n",
" 'time_step': 7},\n",
" {'s1': Decimal('6.392E+165'),\n",
" 's2': Decimal('1.795E+165'),\n",
" 's3': Decimal('2.255'),\n",
" 's4': Decimal('17.28'),\n",
" 'timestamp': '2018-10-01 15:16:31',\n",
" 'mech_step': 2,\n",
" 'time_step': 7},\n",
" {'s1': Decimal('6.392E+165'),\n",
" 's2': Decimal('8.187E+165'),\n",
" 's3': Decimal('2.064'),\n",
" 's4': Decimal('16.99'),\n",
" 'timestamp': '2018-10-01 15:16:31',\n",
" 'mech_step': 3,\n",
" 'time_step': 7}],\n",
" [{'s1': Decimal('9.318E+331'),\n",
" 's2': Decimal('5.233E+331'),\n",
" 's3': Decimal('2.076'),\n",
" 's4': Decimal('15.88'),\n",
" 'timestamp': '2018-10-01 15:16:32',\n",
" 'mech_step': 1,\n",
" 'time_step': 8},\n",
" {'s1': Decimal('1.863E+332'),\n",
" 's2': Decimal('5.233E+331'),\n",
" 's3': Decimal('1.798'),\n",
" 's4': Decimal('18.47'),\n",
" 'timestamp': '2018-10-01 15:16:32',\n",
" 'mech_step': 2,\n",
" 'time_step': 8},\n",
" {'s1': Decimal('1.863E+332'),\n",
" 's2': Decimal('2.386E+332'),\n",
" 's3': Decimal('2.001'),\n",
" 's4': Decimal('18.16'),\n",
" 'timestamp': '2018-10-01 15:16:32',\n",
" 'mech_step': 3,\n",
" 'time_step': 8}],\n",
" [{'s1': Decimal('7.915E+664'),\n",
" 's2': Decimal('4.445E+664'),\n",
" 's3': Decimal('2.075'),\n",
" 's4': Decimal('21.28'),\n",
" 'timestamp': '2018-10-01 15:16:33',\n",
" 'mech_step': 1,\n",
" 'time_step': 9},\n",
" {'s1': Decimal('1.583E+665'),\n",
" 's2': Decimal('4.445E+664'),\n",
" 's3': Decimal('2.300'),\n",
" 's4': Decimal('15.56'),\n",
" 'timestamp': '2018-10-01 15:16:33',\n",
" 'mech_step': 2,\n",
" 'time_step': 9},\n",
" {'s1': Decimal('1.583E+665'),\n",
" 's2': Decimal('2.027E+665'),\n",
" 's3': Decimal('2.507'),\n",
" 's4': Decimal('15.58'),\n",
" 'timestamp': '2018-10-01 15:16:33',\n",
" 'mech_step': 3,\n",
" 'time_step': 9}],\n",
" [{'s1': Decimal('5.713E+1330'),\n",
" 's2': Decimal('3.208E+1330'),\n",
" 's3': Decimal('2.604'),\n",
" 's4': Decimal('16.45'),\n",
" 'timestamp': '2018-10-01 15:16:34',\n",
" 'mech_step': 1,\n",
" 'time_step': 10},\n",
" {'s1': Decimal('1.142E+1331'),\n",
" 's2': Decimal('3.208E+1330'),\n",
" 's3': Decimal('2.858'),\n",
" 's4': Decimal('15.96'),\n",
" 'timestamp': '2018-10-01 15:16:34',\n",
" 'mech_step': 2,\n",
" 'time_step': 10},\n",
" {'s1': Decimal('1.142E+1331'),\n",
" 's2': Decimal('1.462E+1331'),\n",
" 's3': Decimal('2.912'),\n",
" 's4': Decimal('17.70'),\n",
" 'timestamp': '2018-10-01 15:16:34',\n",
" 'mech_step': 3,\n",
" 'time_step': 10}],\n",
" [{'s1': Decimal('2.973E+2662'),\n",
" 's2': Decimal('1.669E+2662'),\n",
" 's3': Decimal('2.719'),\n",
" 's4': Decimal('18.83'),\n",
" 'timestamp': '2018-10-01 15:16:35',\n",
" 'mech_step': 1,\n",
" 'time_step': 11},\n",
" {'s1': Decimal('5.946E+2662'),\n",
" 's2': Decimal('1.669E+2662'),\n",
" 's3': Decimal('2.440'),\n",
" 's4': Decimal('18.31'),\n",
" 'timestamp': '2018-10-01 15:16:35',\n",
" 'mech_step': 2,\n",
" 'time_step': 11},\n",
" {'s1': Decimal('5.946E+2662'),\n",
" 's2': Decimal('7.615E+2662'),\n",
" 's3': Decimal('2.330'),\n",
" 's4': Decimal('19.10'),\n",
" 'timestamp': '2018-10-01 15:16:35',\n",
" 'mech_step': 3,\n",
" 'time_step': 11}],\n",
" [{'s1': Decimal('8.062E+5325'),\n",
" 's2': Decimal('4.527E+5325'),\n",
" 's3': Decimal('1.746'),\n",
" 's4': Decimal('24.47'),\n",
" 'timestamp': '2018-10-01 15:16:36',\n",
" 'mech_step': 1,\n",
" 'time_step': 12},\n",
" {'s1': Decimal('1.612E+5326'),\n",
" 's2': Decimal('4.527E+5325'),\n",
" 's3': Decimal('2.064'),\n",
" 's4': Decimal('25.08'),\n",
" 'timestamp': '2018-10-01 15:16:36',\n",
" 'mech_step': 2,\n",
" 'time_step': 12},\n",
" {'s1': Decimal('1.612E+5326'),\n",
" 's2': Decimal('2.064E+5326'),\n",
" 's3': Decimal('1.710'),\n",
" 's4': Decimal('25.83'),\n",
" 'timestamp': '2018-10-01 15:16:36',\n",
" 'mech_step': 3,\n",
" 'time_step': 12}],\n",
" [{'s1': Decimal('5.925E+10652'),\n",
" 's2': Decimal('3.327E+10652'),\n",
" 's3': Decimal('1.696'),\n",
" 's4': Decimal('24.69'),\n",
" 'timestamp': '2018-10-01 15:16:37',\n",
" 'mech_step': 1,\n",
" 'time_step': 13},\n",
" {'s1': Decimal('1.185E+10653'),\n",
" 's2': Decimal('3.327E+10652'),\n",
" 's3': Decimal('1.472'),\n",
" 's4': Decimal('25.01'),\n",
" 'timestamp': '2018-10-01 15:16:37',\n",
" 'mech_step': 2,\n",
" 'time_step': 13},\n",
" {'s1': Decimal('1.185E+10653'),\n",
" 's2': Decimal('1.517E+10653'),\n",
" 's3': Decimal('1.173'),\n",
" 's4': Decimal('21.78'),\n",
" 'timestamp': '2018-10-01 15:16:37',\n",
" 'mech_step': 3,\n",
" 'time_step': 13}],\n",
" [{'s1': Decimal('3.201E+21306'),\n",
" 's2': Decimal('1.797E+21306'),\n",
" 's3': Decimal('1.163'),\n",
" 's4': Decimal('21.34'),\n",
" 'timestamp': '2018-10-01 15:16:38',\n",
" 'mech_step': 1,\n",
" 'time_step': 14},\n",
" {'s1': Decimal('6.402E+21306'),\n",
" 's2': Decimal('1.797E+21306'),\n",
" 's3': Decimal('1.127'),\n",
" 's4': Decimal('26.58'),\n",
" 'timestamp': '2018-10-01 15:16:38',\n",
" 'mech_step': 2,\n",
" 'time_step': 14},\n",
" {'s1': Decimal('6.402E+21306'),\n",
" 's2': Decimal('8.199E+21306'),\n",
" 's3': Decimal('1.108'),\n",
" 's4': Decimal('29.41'),\n",
" 'timestamp': '2018-10-01 15:16:38',\n",
" 'mech_step': 3,\n",
" 'time_step': 14}],\n",
" [{'s1': Decimal('9.346E+42613'),\n",
" 's2': Decimal('5.248E+42613'),\n",
" 's3': Decimal('1.168'),\n",
" 's4': Decimal('31.29'),\n",
" 'timestamp': '2018-10-01 15:16:39',\n",
" 'mech_step': 1,\n",
" 'time_step': 15},\n",
" {'s1': Decimal('1.869E+42614'),\n",
" 's2': Decimal('5.248E+42613'),\n",
" 's3': Decimal('1.095'),\n",
" 's4': Decimal('34.74'),\n",
" 'timestamp': '2018-10-01 15:16:39',\n",
" 'mech_step': 2,\n",
" 'time_step': 15},\n",
" {'s1': Decimal('1.869E+42614'),\n",
" 's2': Decimal('2.393E+42614'),\n",
" 's3': Decimal('1.136'),\n",
" 's4': Decimal('41.27'),\n",
" 'timestamp': '2018-10-01 15:16:39',\n",
" 'mech_step': 3,\n",
" 'time_step': 15}],\n",
" [{'s1': Decimal('7.965E+85228'),\n",
" 's2': Decimal('4.472E+85228'),\n",
" 's3': Decimal('1.194'),\n",
" 's4': Decimal('43.71'),\n",
" 'timestamp': '2018-10-01 15:16:40',\n",
" 'mech_step': 1,\n",
" 'time_step': 16},\n",
" {'s1': Decimal('1.593E+85229'),\n",
" 's2': Decimal('4.472E+85228'),\n",
" 's3': Decimal('1.154'),\n",
" 's4': Decimal('52.76'),\n",
" 'timestamp': '2018-10-01 15:16:40',\n",
" 'mech_step': 2,\n",
" 'time_step': 16},\n",
" {'s1': Decimal('1.593E+85229'),\n",
" 's2': Decimal('2.040E+85229'),\n",
" 's3': Decimal('1.121'),\n",
" 's4': Decimal('58.40'),\n",
" 'timestamp': '2018-10-01 15:16:40',\n",
" 'mech_step': 3,\n",
" 'time_step': 16}],\n",
" [{'s1': Decimal('5.786E+170458'),\n",
" 's2': Decimal('3.249E+170458'),\n",
" 's3': Decimal('1.181'),\n",
" 's4': Decimal('59.37'),\n",
" 'timestamp': '2018-10-01 15:16:41',\n",
" 'mech_step': 1,\n",
" 'time_step': 17},\n",
" {'s1': Decimal('1.157E+170459'),\n",
" 's2': Decimal('3.249E+170458'),\n",
" 's3': Decimal('1.187'),\n",
" 's4': Decimal('69.57'),\n",
" 'timestamp': '2018-10-01 15:16:41',\n",
" 'mech_step': 2,\n",
" 'time_step': 17},\n",
" {'s1': Decimal('1.157E+170459'),\n",
" 's2': Decimal('1.481E+170459'),\n",
" 's3': Decimal('1.205'),\n",
" 's4': Decimal('53.15'),\n",
" 'timestamp': '2018-10-01 15:16:41',\n",
" 'mech_step': 3,\n",
" 'time_step': 17}],\n",
" [{'s1': Decimal('3.051E+340918'),\n",
" 's2': Decimal('1.713E+340918'),\n",
" 's3': Decimal('0.9188'),\n",
" 's4': Decimal('50.11'),\n",
" 'timestamp': '2018-10-01 15:16:42',\n",
" 'mech_step': 1,\n",
" 'time_step': 18},\n",
" {'s1': Decimal('6.102E+340918'),\n",
" 's2': Decimal('1.713E+340918'),\n",
" 's3': Decimal('0.9241'),\n",
" 's4': Decimal('51.44'),\n",
" 'timestamp': '2018-10-01 15:16:42',\n",
" 'mech_step': 2,\n",
" 'time_step': 18},\n",
" {'s1': Decimal('6.102E+340918'),\n",
" 's2': Decimal('7.815E+340918'),\n",
" 's3': Decimal('0.9588'),\n",
" 's4': Decimal('46.74'),\n",
" 'timestamp': '2018-10-01 15:16:42',\n",
" 'mech_step': 3,\n",
" 'time_step': 18}],\n",
" [{'s1': Decimal('8.491E+681837'),\n",
" 's2': Decimal('4.768E+681837'),\n",
" 's3': Decimal('0.9458'),\n",
" 's4': Decimal('46.01'),\n",
" 'timestamp': '2018-10-01 15:16:43',\n",
" 'mech_step': 1,\n",
" 'time_step': 19},\n",
" {'s1': Decimal('1.698E+681838'),\n",
" 's2': Decimal('4.768E+681837'),\n",
" 's3': Decimal('0.9775'),\n",
" 's4': Decimal('43.07'),\n",
" 'timestamp': '2018-10-01 15:16:43',\n",
" 'mech_step': 2,\n",
" 'time_step': 19},\n",
" {'s1': Decimal('1.698E+681838'),\n",
" 's2': Decimal('2.174E+681838'),\n",
" 's3': Decimal('1.163'),\n",
" 's4': Decimal('40.25'),\n",
" 'timestamp': '2018-10-01 15:16:43',\n",
" 'mech_step': 3,\n",
" 'time_step': 19}])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"configs = generate_config(mechanisms, exogenous_states)\n",
"\n",
"pipeline(states_list, configs, env_processes, range(19))\n",
"# a = block_gen(states_list, configs, env_processes, 1)\n",
"# b = block_gen(a, configs, env_processes, 2)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"999999999999999995000000000000000009999999999999999990000000000000000004999999999999999999"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from decimal import Decimal, MAX_EMAX\n",
"# Decimal(2.5347751615574597e+167)**2\n",
"MAX_EMAX**5"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"1000000"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"1000 * 1000"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2018-10-02 12:37:06.309267\n",
"2018-10-02 12:38:06.309267\n"
]
}
],
"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": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"datetime.datetime(2018, 10, 2, 12, 37, 6)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"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": 15,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "Required argument 'timestamp' (pos 1) not found",
"output_type": "error",
"traceback": [
"\u001b[0;31m--------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-15-b6bd5605ee70>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdatetime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfromtimestamp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: Required argument 'timestamp' (pos 1) not found"
]
}
],
"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
}