{ "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 (reshigh):\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\u001b[0m in \u001b[0;36m\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 }