diff --git a/notebooks/hackathon_2023.07/scenario1.ipynb b/notebooks/hackathon_2023.07/scenario1.ipynb index 47b34d7f9..24d2ae0dc 100644 --- a/notebooks/hackathon_2023.07/scenario1.ipynb +++ b/notebooks/hackathon_2023.07/scenario1.ipynb @@ -1,7 +1,6 @@ { "cells": [ { - "attachments": {}, "cell_type": "markdown", "id": "c947d97c", "metadata": {}, @@ -35,34 +34,34 @@ "metadata": {}, "outputs": [], "source": [ - "person_units = Unit(expression=sympy.Symbol('person'))\n", - "day_units = Unit(expression=sympy.Symbol('day'))\n", - "per_day_units = Unit(expression=1/sympy.Symbol('day'))\n", - "dimensionless_units = Unit(expression=sympy.Integer('1'))\n", - "per_day_per_person_units = Unit(expression=1/(sympy.Symbol('day')*sympy.Symbol('person')))\n", + "person_units = lambda: Unit(expression=sympy.Symbol('person'))\n", + "day_units = lambda: Unit(expression=sympy.Symbol('day'))\n", + "per_day_units = lambda: Unit(expression=1/sympy.Symbol('day'))\n", + "dimensionless_units = lambda: Unit(expression=sympy.Integer('1'))\n", + "per_day_per_person_units = lambda: Unit(expression=1/(sympy.Symbol('day')*sympy.Symbol('person')))\n", "\n", "c = {\n", - " 'S': Concept(name='S', units=person_units, identifiers={'ido': '0000514'}),\n", - " 'E': Concept(name='E', units=person_units, identifiers={'apollosv': '0000154'}),\n", - " 'I': Concept(name='I', units=person_units, identifiers={'ido': '0000511'}),\n", - " 'R': Concept(name='R', units=person_units, identifiers={'ido': '0000592'}),\n", - " 'D': Concept(name='D', units=person_units, identifiers={'ncit': 'C28554'}),\n", + " 'S': Concept(name='S', units=person_units(), identifiers={'ido': '0000514'}),\n", + " 'E': Concept(name='E', units=person_units(), identifiers={'apollosv': '0000154'}),\n", + " 'I': Concept(name='I', units=person_units(), identifiers={'ido': '0000511'}),\n", + " 'R': Concept(name='R', units=person_units(), identifiers={'ido': '0000592'}),\n", + " 'D': Concept(name='D', units=person_units(), identifiers={'ncit': 'C28554'}),\n", "}\n", "\n", "\n", "parameters = {\n", - " 'gamma': Parameter(name='gamma', value=1/11, units=per_day_units),\n", - " 'delta': Parameter(name='delta', value=1/5, units=per_day_units),\n", - " 'alpha': Parameter(name='alpha', value=0.000064, units=dimensionless_units),\n", - " 'rho': Parameter(name='rho', value=1/9, units=per_day_units),\n", - " 'N': Parameter(name='N', value=5_600_000, units=person_units),\n", - " 'beta_s': Parameter(name='beta_s', value=1, units=per_day_per_person_units),\n", - " 'beta_c': Parameter(name='beta_c', value=0.4, units=per_day_per_person_units),\n", - " 't_0': Parameter(name='t_0', value=89, unts=day_units, units=day_units),\n", + " 'gamma': Parameter(name='gamma', value=1/11, units=per_day_units()),\n", + " 'delta': Parameter(name='delta', value=1/5, units=per_day_units()),\n", + " 'alpha': Parameter(name='alpha', value=0.000064, units=dimensionless_units()),\n", + " 'rho': Parameter(name='rho', value=1/9, units=per_day_units()),\n", + " 'N': Parameter(name='N', value=5_600_000, units=person_units()),\n", + " 'beta_s': Parameter(name='beta_s', value=1, units=per_day_per_person_units()),\n", + " 'beta_c': Parameter(name='beta_c', value=0.4, units=per_day_per_person_units()),\n", + " 't_0': Parameter(name='t_0', value=89, unts=day_units, units=day_units()),\n", " # D=11, gamma = 1/D, R_0 = 5 and\n", " # beta = R_0 * gamma * mask(t) so kappa = 5/11\n", - " 'kappa': Parameter(name='kappa', value=5/11, units=per_day_units),\n", - " 'k': Parameter(name='k', value=5.0, units=dimensionless_units),\n", + " 'kappa': Parameter(name='kappa', value=5/11, units=per_day_units()),\n", + " 'k': Parameter(name='k', value=5.0, units=dimensionless_units()),\n", "}\n", "\n", "initials = {\n", @@ -113,14 +112,13 @@ " templates=templates,\n", " parameters=parameters,\n", " initials=initials,\n", - " time=Time(name='t', units=day_units),\n", + " time=Time(name='t', units=day_units()),\n", " annotations=Annotations(name='Scenario 1a')\n", ")\n", "AskeNetPetriNetModel(Model(tm)).to_json_file('scenario1_a.json')" ] }, { - "attachments": {}, "cell_type": "markdown", "id": "48e4ed6a", "metadata": {}, @@ -140,9 +138,9 @@ "outputs": [], "source": [ "k_1, k_2, t_1, beta_nc = sympy.symbols('k_1 k_2 t_1 beta_nc')\n", - "parameters['k_1'] = Parameter(name='k_1', value=5.0, units=dimensionless_units)\n", - "parameters['k_2'] = Parameter(name='k_2', value=1.0, units=dimensionless_units)\n", - "parameters['t_1'] = Parameter(name='t_1', value=154, units=day_units)\n", + "parameters['k_1'] = Parameter(name='k_1', value=5.0, units=dimensionless_units())\n", + "parameters['k_2'] = Parameter(name='k_2', value=1.0, units=dimensionless_units())\n", + "parameters['t_1'] = Parameter(name='t_1', value=154, units=day_units())\n", "parameters['beta_nc'] = Parameter(name='beta_nc', value=0.5)\n", "tm.parameters = parameters\n", "tm.annotations = Annotations(name='Scenario 1c')\n", @@ -194,7 +192,6 @@ ] }, { - "attachments": {}, "cell_type": "markdown", "id": "6e3374f9", "metadata": {}, @@ -211,7 +208,7 @@ "outputs": [], "source": [ "epsilon = sympy.Symbol('epsilon')\n", - "parameters['epsilon'] = Parameter(name='epsilon', value=1/90, units=per_day_units)\n", + "parameters['epsilon'] = Parameter(name='epsilon', value=1/90, units=per_day_units())\n", "tm.parameters = parameters\n", "tm.annotations = Annotations(name='Scenario 1d')\n", "t5 = NaturalConversion(subject=c['R'],\n", @@ -228,6 +225,113 @@ "source": [ "AskeNetPetriNetModel(Model(tm)).to_json_file('scenario1_d.json')" ] + }, + { + "cell_type": "markdown", + "id": "331881de", + "metadata": {}, + "source": [ + "## Demo unit normalization" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8378dfd6", + "metadata": {}, + "outputs": [], + "source": [ + "tm_norm = counts_to_dimensionless(tm, 'person', 5_600_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "c6145e96", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'S': Initial(concept=Concept(name='S', display_name=None, description=None, identifiers={}, context={}, units=None), value=0.999999821428571),\n", + " 'E': Initial(concept=Concept(name='E', display_name=None, description=None, identifiers={}, context={}, units=None), value=1.78571428571429e-7),\n", + " 'I': Initial(concept=Concept(name='I', display_name=None, description=None, identifiers={}, context={}, units=None), value=0),\n", + " 'R': Initial(concept=Concept(name='R', display_name=None, description=None, identifiers={}, context={}, units=None), value=0),\n", + " 'D': Initial(concept=Concept(name='D', display_name=None, description=None, identifiers={}, context={}, units=None), value=0)}" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tm_norm.initials" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "8e677ddc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'gamma': Parameter(name='gamma', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.09090909090909091, distribution=None),\n", + " 'delta': Parameter(name='delta', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.2, distribution=None),\n", + " 'alpha': Parameter(name='alpha', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=6.4e-05, distribution=None),\n", + " 'rho': Parameter(name='rho', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.1111111111111111, distribution=None),\n", + " 'N': Parameter(name='N', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=1.00000000000000, distribution=None),\n", + " 'beta_s': Parameter(name='beta_s', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=5600000.00000000, distribution=None),\n", + " 'beta_c': Parameter(name='beta_c', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=2240000.00000000, distribution=None),\n", + " 't_0': Parameter(name='t_0', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=day), value=89.0, distribution=None),\n", + " 'kappa': Parameter(name='kappa', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.45454545454545453, distribution=None),\n", + " 'k': Parameter(name='k', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=5.0, distribution=None),\n", + " 'k_1': Parameter(name='k_1', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=5.0, distribution=None),\n", + " 'k_2': Parameter(name='k_2', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1), value=1.0, distribution=None),\n", + " 't_1': Parameter(name='t_1', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=day), value=154.0, distribution=None),\n", + " 'beta_nc': Parameter(name='beta_nc', display_name=None, description=None, identifiers={}, context={}, units=None, value=0.5, distribution=None),\n", + " 'epsilon': Parameter(name='epsilon', display_name=None, description=None, identifiers={}, context={}, units=Unit(expression=1/day), value=0.011111111111111112, distribution=None)}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tm_norm.parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "76f927b7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "ControlledConversion(rate_law=kappa*(beta_nc + (beta_c - beta_nc)/(1 + exp(-k_2*(-t + t_1))) + (-beta_c + beta_s)/(1 + exp(-k_1*(-t + t_0)))), type='ControlledConversion', controller=Concept(name='I', display_name=None, description=None, identifiers={'ido': '0000511'}, context={}, units=Unit(expression=1)), subject=Concept(name='S', display_name=None, description=None, identifiers={'ido': '0000514'}, context={}, units=Unit(expression=1)), outcome=Concept(name='E', display_name=None, description=None, identifiers={'apollosv': '0000154'}, context={}, units=Unit(expression=1)), provenance=[])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tm_norm.templates[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "831f2be9", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {