Last active
September 2, 2020 10:22
-
-
Save BenSchZA/32819abf682763089715be28ee199282 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from cadCAD.configuration.utils import config_sim\n", | |
"from cadCAD.configuration import Experiment\n", | |
"from cadCAD.engine import ExecutionMode, ExecutionContext\n", | |
"from cadCAD.engine import Executor\n", | |
"\n", | |
"import pandas as pd" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"system_params = {\n", | |
" 'add': [1]\n", | |
"}\n", | |
"\n", | |
"initial_state = {\n", | |
" 'a': 0\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from numpy import random\n", | |
"\n", | |
"random.seed(1234)\n", | |
"\n", | |
"def state_add_to_a(params, substep, state_history, previous_state, policy_input, **kwargs):\n", | |
" return 'a', previous_state['a'] + params['add'] * random.rand() * 10" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"psubs = [\n", | |
" {\n", | |
" 'policies': {},\n", | |
" 'variables': {\n", | |
" 'a': state_add_to_a\n", | |
" }\n", | |
" }\n", | |
"]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from cadCAD import configs\n", | |
"del configs[:] # Clear any prior configs" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[{'N': 1, 'T': range(0, 100), 'M': {'add': 1}}]\n", | |
"[{'N': 1, 'T': range(0, 100), 'M': {'add': 1}, 'subset_id': 0, 'subset_window': deque([0, None], maxlen=2), 'simulation_id': 0, 'run_id': 0}]\n", | |
"[{'N': 2, 'T': range(0, 100), 'M': {'add': 1}}]\n", | |
"[{'N': 1, 'T': range(0, 100), 'M': {'add': 1}, 'subset_id': 0, 'subset_window': deque([0, None], maxlen=2), 'simulation_id': 1, 'run_id': 1}]\n", | |
"[{'N': 3, 'T': range(0, 100), 'M': {'add': 1}}]\n", | |
"[{'N': 1, 'T': range(0, 100), 'M': {'add': 1}, 'subset_id': 0, 'subset_window': deque([0, None], maxlen=2), 'simulation_id': 2, 'run_id': 2}]\n" | |
] | |
} | |
], | |
"source": [ | |
"exp = Experiment()\n", | |
"\n", | |
"sim_config = config_sim({\n", | |
" \"N\": 1,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
"})\n", | |
"print(sim_config)\n", | |
"\n", | |
"exp.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = sim_config\n", | |
")\n", | |
"print(sim_config)\n", | |
"\n", | |
"sim_config = config_sim({\n", | |
" \"N\": 2,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
"})\n", | |
"print(sim_config)\n", | |
"\n", | |
"exp.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = sim_config\n", | |
")\n", | |
"print(sim_config)\n", | |
"\n", | |
"sim_config = config_sim({\n", | |
" \"N\": 3,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
"})\n", | |
"print(sim_config)\n", | |
"\n", | |
"exp.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = sim_config\n", | |
")\n", | |
"print(sim_config)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
" ___________ ____\n", | |
" ________ __ ___/ / ____/ | / __ \\\n", | |
" / ___/ __` / __ / / / /| | / / / /\n", | |
"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n", | |
"\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n", | |
"by cadCAD\n", | |
"\n", | |
"Execution Mode: local_proc\n", | |
"Configuration Count: 3\n", | |
"Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (100, 1, 1, 1)\n", | |
"Execution Method: local_simulations\n", | |
"SimIDs : [0, 1, 1, 2, 2, 2]\n", | |
"SubsetIDs: [0, 0, 0, 0, 0, 0]\n", | |
"Ns : [0, 0, 1, 0, 1, 2]\n", | |
"ExpIDs : [0, 1, 1, 2, 2, 2]\n", | |
"Execution Mode: parallelized\n", | |
"Total execution time: 0.13s\n" | |
] | |
} | |
], | |
"source": [ | |
"exec_mode = ExecutionMode()\n", | |
"local_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\n", | |
"\n", | |
"simulation = Executor(exec_context=local_mode_ctx, configs=configs)\n", | |
"\n", | |
"raw_system_events, tensor_field, sessions = simulation.execute()" | |
] | |
}, | |
{ | |
"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>a</th>\n", | |
" <th>simulation</th>\n", | |
" <th>subset</th>\n", | |
" <th>run</th>\n", | |
" <th>substep</th>\n", | |
" <th>timestep</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>0.000000</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>1.915195</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>8.136282</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>12.513560</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>20.367145</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>601</th>\n", | |
" <td>512.168571</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>96</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>602</th>\n", | |
" <td>518.211911</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>97</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>603</th>\n", | |
" <td>519.242956</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>98</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>604</th>\n", | |
" <td>527.266698</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>99</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>605</th>\n", | |
" <td>536.722230</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>606 rows × 6 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" a simulation subset run substep timestep\n", | |
"0 0.000000 0 0 1 0 0\n", | |
"1 1.915195 0 0 1 1 1\n", | |
"2 8.136282 0 0 1 1 2\n", | |
"3 12.513560 0 0 1 1 3\n", | |
"4 20.367145 0 0 1 1 4\n", | |
".. ... ... ... ... ... ...\n", | |
"601 512.168571 2 0 3 1 96\n", | |
"602 518.211911 2 0 3 1 97\n", | |
"603 519.242956 2 0 3 1 98\n", | |
"604 527.266698 2 0 3 1 99\n", | |
"605 536.722230 2 0 3 1 100\n", | |
"\n", | |
"[606 rows x 6 columns]" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"simulation_result = pd.DataFrame(raw_system_events)\n", | |
"simulation_result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df = simulation_result.copy()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"for simulation in range(df.simulation.max() + 1):\n", | |
" df['a'][df.simulation == simulation].plot()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from cadCAD import configs\n", | |
"del configs[:] # Clear any prior configs" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[{'N': 1, 'T': range(0, 100), 'M': {'add': 1}}]\n", | |
"[{'N': 1, 'T': range(0, 100), 'M': {'add': 1}, 'subset_id': 0, 'subset_window': deque([0, None], maxlen=2), 'simulation_id': 0, 'run_id': 0}]\n", | |
"[{'N': 2, 'T': range(0, 100), 'M': {'add': 1}}]\n", | |
"[{'N': 1, 'T': range(0, 100), 'M': {'add': 1}, 'subset_id': 0, 'subset_window': deque([0, None], maxlen=2), 'simulation_id': 1, 'run_id': 1}]\n", | |
"[{'N': 3, 'T': range(0, 100), 'M': {'add': 1}}]\n", | |
"[{'N': 1, 'T': range(0, 100), 'M': {'add': 1}, 'subset_id': 0, 'subset_window': deque([0, None], maxlen=2), 'simulation_id': 2, 'run_id': 2}]\n" | |
] | |
} | |
], | |
"source": [ | |
"sim_config = config_sim({\n", | |
" \"N\": 1,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
"})\n", | |
"print(sim_config)\n", | |
"\n", | |
"exp_1 = Experiment()\n", | |
"exp_1.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = sim_config\n", | |
")\n", | |
"print(sim_config)\n", | |
"\n", | |
"sim_config = config_sim({\n", | |
" \"N\": 2,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
"})\n", | |
"print(sim_config)\n", | |
"\n", | |
"exp_2 = Experiment()\n", | |
"exp_2.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = sim_config\n", | |
")\n", | |
"print(sim_config)\n", | |
"\n", | |
"sim_config = config_sim({\n", | |
" \"N\": 3,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
"})\n", | |
"print(sim_config)\n", | |
"\n", | |
"exp_3 = Experiment()\n", | |
"exp_3.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = sim_config\n", | |
")\n", | |
"print(sim_config)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"exec_mode = ExecutionMode()\n", | |
"local_mode_ctx = ExecutionContext(context=exec_mode.local_mode)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"simulation = Executor(exec_context=local_mode_ctx, configs=configs)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
" ___________ ____\n", | |
" ________ __ ___/ / ____/ | / __ \\\n", | |
" / ___/ __` / __ / / / /| | / / / /\n", | |
"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n", | |
"\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n", | |
"by cadCAD\n", | |
"\n", | |
"Execution Mode: local_proc\n", | |
"Configuration Count: 3\n", | |
"Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (100, 1, 1, 1)\n", | |
"Execution Method: local_simulations\n", | |
"SimIDs : [0, 1, 1, 2, 2, 2]\n", | |
"SubsetIDs: [0, 0, 0, 0, 0, 0]\n", | |
"Ns : [0, 0, 1, 0, 1, 2]\n", | |
"ExpIDs : [0, 0, 0, 0, 0, 0]\n", | |
"Execution Mode: parallelized\n", | |
"Total execution time: 0.14s\n" | |
] | |
} | |
], | |
"source": [ | |
"raw_system_events, tensor_field, sessions = simulation.execute()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[{'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=0_0',\n", | |
" 'simulation_id': 0,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, None])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=1_0',\n", | |
" 'simulation_id': 1,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, None])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=1_1',\n", | |
" 'simulation_id': 1,\n", | |
" 'run_id': 1,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, None])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=2_0',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, None])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=2_1',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 1,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, None])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=2_2',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 2,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, None])}]" | |
] | |
}, | |
"execution_count": 16, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"sessions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"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>a</th>\n", | |
" <th>simulation</th>\n", | |
" <th>subset</th>\n", | |
" <th>run</th>\n", | |
" <th>substep</th>\n", | |
" <th>timestep</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>0.000000</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>1.915195</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>8.136282</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>12.513560</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>20.367145</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>601</th>\n", | |
" <td>512.168571</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>96</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>602</th>\n", | |
" <td>518.211911</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>97</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>603</th>\n", | |
" <td>519.242956</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>98</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>604</th>\n", | |
" <td>527.266698</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>99</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>605</th>\n", | |
" <td>536.722230</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>606 rows × 6 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" a simulation subset run substep timestep\n", | |
"0 0.000000 0 0 1 0 0\n", | |
"1 1.915195 0 0 1 1 1\n", | |
"2 8.136282 0 0 1 1 2\n", | |
"3 12.513560 0 0 1 1 3\n", | |
"4 20.367145 0 0 1 1 4\n", | |
".. ... ... ... ... ... ...\n", | |
"601 512.168571 2 0 3 1 96\n", | |
"602 518.211911 2 0 3 1 97\n", | |
"603 519.242956 2 0 3 1 98\n", | |
"604 527.266698 2 0 3 1 99\n", | |
"605 536.722230 2 0 3 1 100\n", | |
"\n", | |
"[606 rows x 6 columns]" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"simulation_result = pd.DataFrame(raw_system_events)\n", | |
"simulation_result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df = simulation_result.copy()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"for simulation in range(df.simulation.max() + 1):\n", | |
" df['a'][df.simulation == simulation].plot()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from cadCAD import configs\n", | |
"del configs[:] # Clear any prior configs\n", | |
"\n", | |
"exp = Experiment()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
" ___________ ____\n", | |
" ________ __ ___/ / ____/ | / __ \\\n", | |
" / ___/ __` / __ / / / /| | / / / /\n", | |
"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n", | |
"\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n", | |
"by cadCAD\n", | |
"\n", | |
"Execution Mode: local_proc\n", | |
"Configuration Count: 1\n", | |
"Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (100, 1, 1, 1)\n", | |
"Execution Method: local_simulations\n", | |
"SimIDs : [0]\n", | |
"SubsetIDs: [0]\n", | |
"Ns : [0]\n", | |
"ExpIDs : [0]\n", | |
"Execution Mode: single_threaded\n", | |
"Total execution time: 0.01s\n" | |
] | |
} | |
], | |
"source": [ | |
"exp.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = config_sim({\n", | |
" \"N\": 1,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
" })\n", | |
")\n", | |
"\n", | |
"exec_mode = ExecutionMode()\n", | |
"local_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\n", | |
"\n", | |
"simulation = Executor(exec_context=local_mode_ctx, configs=configs)\n", | |
"\n", | |
"raw_system_events, tensor_field, sessions = simulation.execute()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[{'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=0_0',\n", | |
" 'simulation_id': 0,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])}]" | |
] | |
}, | |
"execution_count": 22, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"sessions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
" ___________ ____\n", | |
" ________ __ ___/ / ____/ | / __ \\\n", | |
" / ___/ __` / __ / / / /| | / / / /\n", | |
"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n", | |
"\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n", | |
"by cadCAD\n", | |
"\n", | |
"Execution Mode: local_proc\n", | |
"Configuration Count: 2\n", | |
"Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (100, 1, 1, 1)\n", | |
"Execution Method: local_simulations\n", | |
"SimIDs : [0, 1, 1]\n", | |
"SubsetIDs: [0, 0, 0]\n", | |
"Ns : [0, 0, 1]\n", | |
"ExpIDs : [0, 1, 1]\n", | |
"Execution Mode: parallelized\n", | |
"Total execution time: 0.10s\n" | |
] | |
} | |
], | |
"source": [ | |
"exp.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = config_sim({\n", | |
" \"N\": 2,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
" })\n", | |
")\n", | |
"\n", | |
"exec_mode = ExecutionMode()\n", | |
"local_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\n", | |
"\n", | |
"simulation = Executor(exec_context=local_mode_ctx, configs=configs)\n", | |
"\n", | |
"raw_system_events, tensor_field, sessions = simulation.execute()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[{'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=0_0',\n", | |
" 'simulation_id': 0,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 1,\n", | |
" 'session_id': 'cadCAD_user=1_0',\n", | |
" 'simulation_id': 1,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 1,\n", | |
" 'session_id': 'cadCAD_user=1_1',\n", | |
" 'simulation_id': 1,\n", | |
" 'run_id': 1,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])}]" | |
] | |
}, | |
"execution_count": 24, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"sessions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
" ___________ ____\n", | |
" ________ __ ___/ / ____/ | / __ \\\n", | |
" / ___/ __` / __ / / / /| | / / / /\n", | |
"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n", | |
"\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n", | |
"by cadCAD\n", | |
"\n", | |
"Execution Mode: local_proc\n", | |
"Configuration Count: 3\n", | |
"Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (100, 1, 1, 1)\n", | |
"Execution Method: local_simulations\n", | |
"SimIDs : [0, 1, 1, 2, 2, 2]\n", | |
"SubsetIDs: [0, 0, 0, 0, 0, 0]\n", | |
"Ns : [0, 0, 1, 0, 1, 2]\n", | |
"ExpIDs : [0, 1, 1, 2, 2, 2]\n", | |
"Execution Mode: parallelized\n", | |
"Total execution time: 0.12s\n" | |
] | |
} | |
], | |
"source": [ | |
"exp.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = config_sim({\n", | |
" \"N\": 3,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
" })\n", | |
")\n", | |
"\n", | |
"exec_mode = ExecutionMode()\n", | |
"local_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\n", | |
"\n", | |
"simulation = Executor(exec_context=local_mode_ctx, configs=configs)\n", | |
"\n", | |
"raw_system_events, tensor_field, sessions = simulation.execute()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[{'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=0_0',\n", | |
" 'simulation_id': 0,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 1,\n", | |
" 'session_id': 'cadCAD_user=1_0',\n", | |
" 'simulation_id': 1,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 1,\n", | |
" 'session_id': 'cadCAD_user=1_1',\n", | |
" 'simulation_id': 1,\n", | |
" 'run_id': 1,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 2,\n", | |
" 'session_id': 'cadCAD_user=2_0',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 2,\n", | |
" 'session_id': 'cadCAD_user=2_1',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 1,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 2,\n", | |
" 'session_id': 'cadCAD_user=2_2',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 2,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])}]" | |
] | |
}, | |
"execution_count": 26, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"sessions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
" ___________ ____\n", | |
" ________ __ ___/ / ____/ | / __ \\\n", | |
" / ___/ __` / __ / / / /| | / / / /\n", | |
"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n", | |
"\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n", | |
"by cadCAD\n", | |
"\n", | |
"Execution Mode: local_proc\n", | |
"Configuration Count: 4\n", | |
"Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (100, 1, 1, 1)\n", | |
"Execution Method: local_simulations\n", | |
"SimIDs : [0, 1, 1, 2, 2, 2, 3]\n", | |
"SubsetIDs: [0, 0, 0, 0, 0, 0, 0]\n", | |
"Ns : [0, 0, 1, 0, 1, 2, 0]\n", | |
"ExpIDs : [0, 1, 1, 2, 2, 2, 3]\n", | |
"Execution Mode: parallelized\n", | |
"Total execution time: 0.12s\n" | |
] | |
} | |
], | |
"source": [ | |
"exp.append_configs(\n", | |
" initial_state = initial_state,\n", | |
" partial_state_update_blocks = psubs,\n", | |
" sim_configs = config_sim({\n", | |
" \"N\": 1,\n", | |
" \"T\": range(100),\n", | |
" \"M\": system_params\n", | |
" })\n", | |
")\n", | |
"\n", | |
"exec_mode = ExecutionMode()\n", | |
"local_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\n", | |
"\n", | |
"simulation = Executor(exec_context=local_mode_ctx, configs=configs)\n", | |
"\n", | |
"raw_system_events, tensor_field, sessions = simulation.execute()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[{'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 0,\n", | |
" 'session_id': 'cadCAD_user=0_0',\n", | |
" 'simulation_id': 0,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 1,\n", | |
" 'session_id': 'cadCAD_user=1_0',\n", | |
" 'simulation_id': 1,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 1,\n", | |
" 'session_id': 'cadCAD_user=1_1',\n", | |
" 'simulation_id': 1,\n", | |
" 'run_id': 1,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 2,\n", | |
" 'session_id': 'cadCAD_user=2_0',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 2,\n", | |
" 'session_id': 'cadCAD_user=2_1',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 1,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 2,\n", | |
" 'session_id': 'cadCAD_user=2_2',\n", | |
" 'simulation_id': 2,\n", | |
" 'run_id': 2,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])},\n", | |
" {'user_id': 'cadCAD_user',\n", | |
" 'experiment_id': 3,\n", | |
" 'session_id': 'cadCAD_user=3_0',\n", | |
" 'simulation_id': 3,\n", | |
" 'run_id': 0,\n", | |
" 'subset_id': 0,\n", | |
" 'subset_window': deque([0, 0])}]" | |
] | |
}, | |
"execution_count": 28, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"sessions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"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>a</th>\n", | |
" <th>simulation</th>\n", | |
" <th>subset</th>\n", | |
" <th>run</th>\n", | |
" <th>substep</th>\n", | |
" <th>timestep</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>0.000000</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>7.671166</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>14.752320</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>2</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>22.720992</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>28.298600</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" <td>1</td>\n", | |
" <td>1</td>\n", | |
" <td>4</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>601</th>\n", | |
" <td>491.309035</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>96</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>602</th>\n", | |
" <td>497.375787</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>97</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>603</th>\n", | |
" <td>505.597385</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>98</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>604</th>\n", | |
" <td>511.877036</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>99</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>605</th>\n", | |
" <td>513.056266</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>3</td>\n", | |
" <td>1</td>\n", | |
" <td>100</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>606 rows × 6 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" a simulation subset run substep timestep\n", | |
"0 0.000000 0 0 1 0 0\n", | |
"1 7.671166 0 0 1 1 1\n", | |
"2 14.752320 0 0 1 1 2\n", | |
"3 22.720992 0 0 1 1 3\n", | |
"4 28.298600 0 0 1 1 4\n", | |
".. ... ... ... ... ... ...\n", | |
"601 491.309035 2 0 3 1 96\n", | |
"602 497.375787 2 0 3 1 97\n", | |
"603 505.597385 2 0 3 1 98\n", | |
"604 511.877036 2 0 3 1 99\n", | |
"605 513.056266 2 0 3 1 100\n", | |
"\n", | |
"[606 rows x 6 columns]" | |
] | |
}, | |
"execution_count": 29, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"simulation_result = pd.DataFrame(raw_system_events)\n", | |
"simulation_result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df = simulation_result.copy()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"for simulation in range(df.simulation.max() + 1):\n", | |
" df['a'][df.simulation == simulation].plot()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"---" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.8.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment