{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "90d62ef7-a8f7-40a8-9006-9420802fabae",
   "metadata": {},
   "source": [
    "# Welcome\n",
    "\n",
    "Welcome to MobsPy tutorial notebooks. These notebooks will teach you the basics of using MobsPy, a language designed to simplifying the construction of chemical reaction networks. This tutorial will teach you how to define species, reactions, counts and rates. Afterwards, we will discuss the inner structure of MobsPy and how it simplifies modeling."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "77802f3c-7d80-4033-937e-3e42c0dbac46",
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install mobspy==2.0.2\n",
    "\n",
    "from mobspy import *\n",
    "import matplotlib.pyplot as plt\n",
    "import PIL"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84e22aa9-c817-47b2-925d-d45dbcbe8f5d",
   "metadata": {},
   "source": [
    "# Meta-Reaction Syntax\n",
    "\n",
    "In MobsPy, meta-reactions are used to define reactions and are constructed using Python operators and Base Species objects. The + operator sums reactants and products, while the * operator defines stoichiometry. The >> operator indicates the transformation of reactants to products, and the [] operator assigns a rate to the reaction. Species are assigned counts or concentrations using the species variable and the call operator ():"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1d176d55-1a94-43e1-95cf-9d860470f474",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Compiling model\n",
      "Starting Simulator\n",
      "Running simulation in parallel\n",
      "Simulation is Over\n"
     ]
    },
    {
     "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": [
    "A, B, C, D = BaseSpecies()\n",
    "\n",
    "# One molecule of A and one molecule of B becomes two molecules of C and one of D at a rate of 0.01\n",
    "A + B >> 2*C + D [0.01]\n",
    "\n",
    "# We start with 200 units of A and 100 units of B\n",
    "A(200), B(100)\n",
    "# Define the simulation using the given meta-species \n",
    "S = Simulation(A | B | C | D)\n",
    "S.duration = 5\n",
    "S.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5545d2e3-49eb-4379-8f20-8cce6d04479f",
   "metadata": {},
   "source": [
    "# How MobsPy works?\n",
    "\n",
    "MobsPy uses meta-species and meta-reactions to simplify models. Meta-species are simply set of species constructed with all possible states of a specie. Meta-reactions define multiple reactions by using sets or subsets of these meta-species. Moreover, MobsPy simplifies the definition of chemical reaction networks with a bottom-up approach. Base meta-species representing simple tasks are defined and then combined to form more complex meta-species. For example, to model the aging process, we can define a base meta-species, \"Ager\" and use the >> operator to represent the transformation from \"young\" to \"old\" with a given reaction constant rate.\n",
    "The variable \"u\" is used to assign units to the given reaction constant rate."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4887dd2c-eeb7-4261-be2d-fc553d2a170b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<mobspy.modules.meta_class.Reactions at 0x7f7ad819b0d0>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Ager = BaseSpecies()\n",
    "\n",
    "Ager.young >> Ager.old [1/10/u.year]\n",
    "#Note that the characteristics young and old are automatically added to Ager when used with the . operator"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9723fd9e-b974-4a8c-a728-756fb67fe1f2",
   "metadata": {},
   "source": [
    "To add characteristics to meta-species, we can use the dot operator.\n",
    "Characteristics can be added both inside and outside reactions. In the example above, the \"young\" and \"old\" characteristics are added to the \"Ager\" meta-species using the dot operator while defining the aging reaction.\n",
    "\n",
    "As an example of how to use the dot operator, we can create two new base species, \"Colored\" and \"Location,\" and assign characteristics to them:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ebff93da-b7a8-4633-947a-f0bebfc4015d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(<mobspy.modules.meta_class.Reacting_Species at 0x7f7ade7be970>,\n",
       " <mobspy.modules.meta_class.Reacting_Species at 0x7f7ad8176f40>)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Colored, Location = BaseSpecies(2)\n",
    "\n",
    "Colored.green, Colored.yellow, Colored.brown\n",
    "Location.dense, Location.sparse"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f17308f0-b1d6-4efb-bfd7-b648fe68bb62",
   "metadata": {},
   "source": [
    "With MobsPy, it's possible to create meta-species and assign reactions to them without assigning characteristics. \n",
    "In this example, we use the provided meta-species Zero to define the Mortal meta-species, which represents death. \n",
    "Zero represents the absence of reactants or products in a reaction. \n",
    "To model a death rate higher for beings in the old state, we pass a function as a rate that returns reaction constant rates based on the state of the meta-species."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "9d7a0cab-1e8a-4599-9698-44298607668a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<mobspy.modules.meta_class.Reactions at 0x7f7ade7bee80>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Mortal = BaseSpecies(1)\n",
    "\n",
    "# Functions can be rates. Reactants will be passed to the function which will return a higher rate if it contains the\n",
    "# charcteristic old\n",
    "Mortal >> Zero [lambda r1: 1/u.year if r1.old else 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "47f02dc0-e42c-4ec4-af21-5138aca0d7a2",
   "metadata": {},
   "source": [
    "We can combine the previously defined base meta-species to construct a more complex one with all desired characteristics and reactions by multiplying the previously defined meta-species. For example, we can create a \"Tree\" meta-species that has both the characteristics and reactions of Ager, Colored, and Location, and Mortal:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "3edb192a-732a-44e4-b53a-e67fdc6447f9",
   "metadata": {},
   "outputs": [],
   "source": [
    "Tree = Ager*Colored*Mortal*Location"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "33a5ea7d-c2cd-46d2-b070-14dcdc4fd69c",
   "metadata": {},
   "source": [
    "The Tree meta-species is a model that incorporates the Mortal reaction for death and the Ager reaction for aging, as well as the Colored, Location and Ager characteristics. Therefore, the Tree meta-species can be in the following states:\n",
    "\n",
    "**Tree.young.brown.dense, Tree.young.brown.sparse, \\  \n",
    "Tree.young.green.dense, Tree.young.green.sparse, \\\n",
    "Tree.young.yellow.dense, Tree.young.yellow.sparse, \\\n",
    "Tree.old.brown.dense, Tree.old.brown.sparse, \\\n",
    "Tree.old.green.dense, Tree.old.green.sparse, \\\n",
    "Tree.old.yellow.dense, Tree.old.yellow.sparse.**\n",
    "\n",
    "MobsPy created these states through a vectorial representation. In this vector space, the species Ager, Location, and Colored represent the axes, and the characteristics define the coordinate markings on those axes. The characteristics are position according to the axes of the first meta-species they have been directly added in. \n",
    "So the young and old characteristic bellong to the Ager axis, the brown, green and yellow belong to the Colored axis, and finally the sparce and dense belong to the Location axis.\n",
    "The vector space of Tree can be seen below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "edab6319-29ea-4de2-861d-090c8a9b5439",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f7ade8cd0d0>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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kkheatQTriNITEykX79+TJ48mdmzZ/Pggw/ywx/+kNtuu40JEyYghGD9+vW89tpr/PWvf+WZZ55h/vz5rFixgr1791JXV4fP5+u0WZpep+fei+egR2B31tHQWMf4/HFMGnQREHym6urqeP7557FYLNx5552tlH2Y3NxcXn/9dQ4cOIBer2fdunXExsbyyiuvsH37dq699losFguPPvooVquVsrIyPv/8c2w2G16vlyVLlqDX60lPT+d3v/sdfr+f0aNH8+ijj9LY2Mgbb7zRlDL5zDPPMGbMGBISEjrlvihOHDXC72I0TeOpp55iypQpXHDBBQwfPpx///vfALz11ls0NDRgNpvJzc3l7bff5oc//CFZWVlcfvnlTJw4kfT0dA4ePEi/fv34/PPPsVgsDB8+nKSkJF5++WWeeOIJpJTo9Xo2b95Mbm7ucSRSNOd4LSaOdg11RRtqIQTDc0by79teYcXm5fTOymdk/ihMBhNSSnbt2sW7777LVVddxaBBg465rnFWVhZ33nknixYt4qqrrqJXr16ce+65PP744zz77LPExcUxefJkfvOb31BZWUlubm7TLDIvL49t27ah0+nIz8+nV69eTJ48mYaGBtxuN16vl/LycpKTk8nIyMBisdC7d2+ysrJO6roVpx+l8LsYTdOoqKggPT29VQZBXV0d8fHx2Gw2YmJiePrpp5uWlEtOTgZAp9MhpSQzM5Nf/OIXrF+/nj//+c9ce+21+P1+EhMTiYmJ4cc//jE5OTmRuswzjhONETQ3BM3TR0/WEAghSItPZ1T2WLKzszEZTAQCAT799FP27NnDvffeS1JS0nGPJYTg0ksv5dlnn+Wll17ioosuQqfToWlaC9di+HVzv/zRsxiTydQqGDxixAjefPNN/vWvf3HzzTc3uc8U0YFS+F2MwWDg0ksvZc2aNVx66aUcPnwYu92O2+3mkksu4csvvyQzM5OYmBjmz59P37598fv9eDweAoEAXq8Xj8fDli1bOHDgAL/85S8ZN24c27ZtY8SIEdTW1jJp0iRWr16N3+8nLS0t0pd8RtMRQ9CRhWlOtI7A4XDw+uuvk5qayn333deUgtgRkpKSmDZtGqtXr+aRRx7BYrFwww03sHjxYvLz8/nss884//zzyc/PJzU1lS1btlBVVcXnn39OVVUVdXV1HD58GKfTSWVlJdXV1TidTsrLy/H5fOj1+iZDsH///qhtt9wTUXn4XYyUEqfTySuvvEIgEEDTNNasWcPkyZO5++67+eSTT9iyZQuxsbFMmjSJhoYGFi5cSF5eHmPHjuW9994jNTWVCRMmsGrVKrKysvB6vVx77bUEAgFee+01YmNjSU5O5rrrrsNisUT6khXNOLr7aPPK4o64hgoKCvB6vSxevJjvfOc7jBo1qsNVs+GRuxCCL774gvLycq6//nqEEHg8HlasWMHBgwdJSEjgsssuIy4uDqfTyXvvvYfX6yUhIYFdu3Zx6aWXUlJSQmVlJWeddRaNjY0cPnyYnJwcvvrqK/R6Pbm5uZSVlfHFF1/wyiuv0KtXr868rT0WVXjVDWj+ow9Pp3U6XdMoKDy1PtYPuamY56jPQnBUGc2tbhWtaWuFspKSklbrEYSV8y233EJGRsYJfcfhnvF9+vShoKCAW2+9lZSUlFYyAK2ye46mrfO6XC6+//3v89hjjzFo0CDq6up45JFH+M1vfqNcO52EUvgKxRlG8/RRh8NBenr6Cblwmh9n5cqVfPXVV0yZMoUxY8ac1kGBlJI9e/bwySefNMWaRo0axbnnntttevd0N5TCVygU7RLsySM7teVA83OAKrrqTFRrBYVC0S5d0VvmTO9f051R8yyFQqHoISiFr1AoFD0EpfAVCoWih6AUvkKhUPQQlMJXKBSKHoJS+AqFQtFDUApfoVAoeghK4SsUCkUPQRVeKRRdREeq2ttbJrCtZQU7sk0VQCmaoxS+QtEFSClZv349O3bsIBAIkJaWRkZGBp9++inDhg2juroak8nE9OnTiY+PZ/v27Xz55Zd4vV4mT57MsGHDWLlyJWvWrGH48OHs3LmTW265hW+++YbS0lIaGxsZNWoUw4cP591336W+vp6srCyuuOIKjEZjpC9fESUol45C0QU4HA7+/ve/c8kllzB58mT2799P3759Wb58OTt37mT69OkUFxfzk5/8BI/Hw5NPPklKSgoTJkzgoYcewm63079/fxYvXszmzZupr69n69atLFiwgCuvvJKhQ4dSVFTEk08+SWVlJTfffDMff/wxn3/+eactvajofiiFr1B0AWazmZiYGK6//nr+8pe/MGHCBJKTk0lKSmLChAmkpaUxe/ZsvvjiCyoqKnjooYeorq7myy+/pKKiAqfTSWpqKklJSVx22WX89re/Zdy4cZSWlnLNNdewZMkS+vXrxzvvvIPH42Hp0qXExMRQVFQU6UtXRBHKpaNohd/vp6CgoMWSd9nZ2Z22GHV4BNrcf713796mdVTPBD+03+9n1qxZ3HXXXXz66af89a9/5dVXX22xTyAQQAiBw+Hg8ccfZ9asWVx22WXMnz+f8vJyrFYrBoMBq9WKTqfD4/Hw05/+FJ1Ox9tvv80rr7yC2WxmwoQJjB49milTpuD1eiN0xYpoRI3wFa1wuVy8//77zJgxg2nTpvH2229TUlLSaec7cOAAH330UdNru93Oddddxz333IPP5+u083YlLpeL559/noSEhKbFw4UQBAIB1qxZQ1lZGa+99hozZ84kLi6Ow4cPM2LECPbt24fdbueDDz5g586d1NfXc+DAATweD1VVVbz00kv069ePmTNnkpWVxfe+9z2WLFmCw+Fg5cqVbNu2LdKXrogiVD98RSuklLjdbi644AIaGxtZv349MTExrUbabWWItLU9/F57GSX/+Mc/KCsr43e/+x0QHOn++9//Ji4ujhtvvLFpMY3jHe9oOaIJl8vF0qVLcblc6HQ6Jk6cSFZWFtdddx0TJ04kJSWF5ORkpk6ditls5uuvv2bnzp1kZWVhMplwOBykpaVRUFCA2Wxm6tSp+P1+Vq1ahcvlwmq1ctFFF2Gz2Vi5ciXFxcXk5eUxadIkFbQ9g1H98BWnzNEK8+j+5lJKysrKWLRoEbW1tcTFxXHllVfSp08fAHbs2MH777+Pw+EgJSWFW2+9Fb1ez+uvv05FRQUGg4ELL7yQcePGMX/+fH7/+98zePBg/v73vzN79mwcDgeVlZVNqyS53W6WLl3Kt99+i06nY8KECUyaNImDBw8yb9480tPT6du3L5s2bSIpKYmbbrqJ2NjYrrthHcBisTBjxowW2xwOB42NjfTr14/p06e3uM/nnnsu5557bov9hRBMnDix6bWUkquuuqrF+wCXXHJJq20KBSiXjuIECC+CXV1dzbXXXsuhQ4e49dZbcblcXHXVVRw8eJDt27dz5ZVXEggEmDJlCk888QQrVqxg/fr1/PznP2f8+PGkpKQwa9Ysdu7cyfDhw7FareTl5XHBBRcQGxtLUlISmzZt4s033yQQCPDUU0/xxz/+kWuuuYbJkydzzz338MYbb5CUlMT27dv5v//7P/bs2cPEiRP5xS9+0cI9FC2ElXnzf9u3b2fy5MmUl5fjdDpbKOe29j/eMdvarlA0R43wFR3G6/Xy8ssvk5GRwcaNG/nDH/5ATk4Ol19+Ob/73e/47LPPqKmpoba2llmzZpGfn8/777/P4MGDCQQC/PKXv2TPnj2UlZVRV1fHwYMHmTx5MlarlV69ejF69GgAYmJiyMnJYceOHdTX1/Paa68xdepUBg0ahM/nIzs7m1deeYUbbriBvLw8kpOTufnmm/F6vVgsFg4fPhzhO9Uxxo8fz/jx4yMthqIHoUb4ig4RzpxZtmwZXq8XKWVTVkkgEGjaT9M0NE3D7/djNBo5++yzCQQCvPDCCzz33HPk5eUxZcoUDAZDKx/8tm3bWL9+fYttgUAAv9/f6hzNR69ms7lb+qmPN4JXKE43HVL4QohHhBDbhRDbhBBvCCEsQohkIcSnQoi9of+Tmu3/mBBinxBitxDiO50nvqIz8Hq9fPPNNzidTlwuFxs3buSjjz7ioYcewmq1cuGFFzJy5Ejefvttdu3axTvvvEPfvn2ZOnUq06dPJz09nf/85z/s2rWLp59+mk8//ZQdO3ZgtVrp168f27dvR0rJjh078Hg8pKSkcODAAZYsWUJFRQW1tbVUVlbS0NCAz+fjxhtvZO3ataxbt45ly5ZRXFzMbbfdhtPppLy8HJfLRUlJCYWFhfh8PoqLi3E6nZG+jQpF1HHcLB0hRDawGhgipXQJIRYCHwJDgBop5R+FEI8CSVLKnwohhgBvAOOALOAzYICUMtDOKVSWTpThcDh49dVXqaurQ0qJyWRqGmmPGzeOSy+9lMOHD/PBBx9QXV1NfHw8l19+eVPQdu/evXzwwQd4PB6GDh3KpZdeSlVVFYsXL6ahoYGhQ4fi9XopKCjghhtuoKamhv/9739kZWVxww03cPjwYd577z2klEydOpWBAwfy2WefsX37doQQjB8/nvPPP5/i4mIWLVqEpmmMHDmSxsZG9u7di9FoZPbs2WRkZET4TioUncuJZul0VOF/DYwE7MBi4BngWeBCKWWpEKIXsEJKOVAI8RiAlPIPoc8vBX4lpfyqvXMohd89OVaTrrbea2//jjT7ai8FVKHoyZyowj+uS0dKeQj4M3AQKAXqpZSfABlSytLQPqVAeugj2UBxs0OUhLYdLejdQogNQogNlZWVHZVXEUV0NIPkePt3xI+t/N0KxalzXIUf8s3PAPoQdNHYhBA3H+sjbWxrNY2QUr4opRwrpRyblpbWUXkVCoVCcZJ0JGg7BTggpayUUvqARcBEoDzkyiH0f0Vo/xIgt9nnc4DukSenUCgUZzAdUfgHgQlCiBgRnEtfAuwElgC3hva5FXgv9PcS4AYhhFkI0QfoD6w7vWIrFAqF4kQ5buGVlHKtEOJtYBPgBzYDLwKxwEIhxB0EjcK1of23hzJ5doT2f+BYGToKhUKh6BpU8zSFQqHoppz2LB2FQqFQnBkoha9QKBQ9BKXwFQqFooegFL5CoVD0EJTCVygUih6CUvgKhULRQ1AKX6FQKHoISuErFApFD0EpfIVCoeghKIWvUCgUPQSl8BUKhaKHoBS+QqFQ9BCUwlcoFIoeglL4CoVC0UNQCl+hUCh6CErhKxQKRQ9BKXyFQqHoISiFr1AoFD0EpfAVCoWih6AUvkKhUPQQlMJXKBSKHoJS+AqFQtFDEFLKSMuAEKIB2B1pOU6SVKAq0kKcJEr2rqe7yg1K9khxLNl7SynTOnogw+mR55TZLaUcG2khTgYhxAYle9fTXWXvrnKDkj1SnE7ZlUtHoVAoeghK4SsUCkUPIVoU/ouRFuAUULJHhu4qe3eVG5TskeK0yR4VQVuFQqFQdD7RMsJXKBQKRSejFL5CoVD0ECKu8IUQlwkhdgsh9gkhHo20PM0RQuQKIT4XQuwUQmwXQjwU2p4shPhUCLE39H9Ss888FrqW3UKI70RO+iZ59EKIzUKI90Ovu4XsQohEIcTbQohdoft/bjeS/ZHQ87JNCPGGEMISrbILIf4jhKgQQmxrtu2EZRVCjBFCfBt67xkhhIiA3E+FnpdvhBDvCiESo03u9mRv9t7/E0JIIURqp8gupYzYP0APFAB9AROwFRgSSZmOkq8XMDr0dxywBxgCPAk8Gtr+KPCn0N9DQtdgBvqErk0f4Wv4ITAfeD/0ulvIDrwK3Bn62wQkdgfZgWzgAGANvV4I3BatsgOTgNHAtmbbTlhWYB1wLiCAj4DLIyD3pYAh9PefolHu9mQPbc8FlgJFQGpnyB7pEf44YJ+Ucr+U0gssAGZEWKYmpJSlUspNob8bgJ0Ef9AzCCokQv/PDP09A1ggpfRIKQ8A+wheY0QQQuQA04CXmm2OetmFEPEEfxQvA0gpvVLKOrqB7CEMgFUIYQBigMNEqexSypVAzVGbT0hWIUQvIF5K+ZUMaqLXmn2my+SWUn4ipfSHXn4N5ESb3O3JHuKvwE+A5pk0p1X2SCv8bKC42euS0LaoQwiRD4wC1gIZUspSCBoFID20W7Rdz98IPkBas23dQfa+QCXw35A76iUhhI1uILuU8hDwZ+AgUArUSyk/oRvI3owTlTU79PfR2yPJ7QRHvdAN5BZCTAcOSSm3HvXWaZU90gq/LZ9T1OWJCiFigXeAh6WU9mPt2sa2iFyPEOIKoEJKubGjH2ljW6S+CwPBKe+/pJSjACdB10J7RI3sIX/3DILT7yzAJoS4+VgfaWNb1P0GQrQna1RdgxDi54AfeD28qY3dokZuIUQM8HPgl2293ca2k5Y90gq/hKDfKkwOwelv1CCEMBJU9q9LKReFNpeHplSE/q8IbY+m6zkPmC6EKCToKrtYCDGP7iF7CVAipVwbev02QQPQHWSfAhyQUlZKKX3AImAi3UP2MCcqawlH3CfNt3c5QohbgSuAm0KuDoh+ufsRHCBsDf1ec4BNQohMTrPskVb464H+Qog+QggTcAOwJMIyNRGKer8M7JRSPt3srSXAraG/bwXea7b9BiGEWQjRB+hPMLDS5UgpH5NS5kgp8wne1+VSypvpHrKXAcVCiIGhTZcAO+gGshN05UwQQsSEnp9LCMZ+uoPsYU5I1pDbp0EIMSF0zbc0+0yXIYS4DPgpMF1K2djsraiWW0r5rZQyXUqZH/q9lhBMFik77bJ3dkS6AxHr7xLMfikAfh5peY6S7XyC06RvgC2hf98FUoBlwN7Q/8nNPvPz0LXspgsi/h28jgs5kqXTLWQHzgY2hO79YiCpG8n+a2AXsA2YSzDDIiplB94gGGvwhRTNHScjKzA2dL0FwD8IVfF3sdz7CPq7w7/V56NN7vZkP+r9QkJZOqdbdtVaQaFQKHoIkXbpKBQKhaKLUApfoVAoeghK4SsUCkUPQSl8hUKh6CEoha9QKBQ9BKXwFQqFooegFL5CoVD0EP4/XYbBLcWbEAAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(PIL.Image.open('images/vectorial_space.png'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dedaf18b-2854-46da-9ade-b5e9da4bef80",
   "metadata": {},
   "source": [
    "All states partake in the meta-reactions from the base meta-species used to construct Tree to define reactions. For instance, the Ager meta-reaction yields the following six reactions:\n",
    "\n",
    "**Tree.young.brown.dense -> Tree.old.brown.dense \\\n",
    "Tree.young.brown.sparse -> Tree.old.brown.sparse \\\n",
    "Tree.young.green.dense -> Tree.old.green.dense \\\n",
    "Tree.young.green.sparse -> Tree.old.green.sparse \\\n",
    "Tree.young.yellow.dense -> Tree.old.yellow.dense \\\n",
    "Tree.young.yellow.sparse -> Tree.old.yellow.sparse** \n",
    "\n",
    "When using the dot notation in the reactants, MobsPy performs a query and filters the states that do not contain the specified characteristics. When using the dot notation in the products, one specifies the coordinate on the vector space where the transformation should occur. Thus, the Ager reaction transforms young to old as those are the characteritics in the Ager vector axis."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0bf67209-6b46-429b-90f1-6d00dc14a7b4",
   "metadata": {},
   "source": [
    "To continue building upon this model, we add two more reactions to the new Tree meta-species. A competition reaction between Trees in the dense location where the older Trees kill the young threes and a replication reaction where old Trees generate new Trees."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "81e1b6aa-2040-49da-af8e-1e3c8a34ac3f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<mobspy.modules.meta_class.Reactions at 0x7f7ad8139100>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# competition\n",
    "Tree.dense.old + Tree.dense.young >> Tree.dense.old [1e-10*u.decimeter/u.year]\n",
    "# replication\n",
    "Tree.old >> Tree + Tree.young [0.1/u.year]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0d8c1999-7893-4ffe-acdb-e9a44a54637b",
   "metadata": {},
   "source": [
    "In MobsPy, the order of reactants and products has meaning. The order of reactants and products is used to generate the reactions from meta-reactions. \n",
    "The state of the first meta-species in the reactants will be used to generate the first product of the same meta-species. \n",
    "Further, the second reactant becomes the second product unless there are more products than reactants. \n",
    "In that case, if the products run out of corresponding reactants, MobsPy will cycle through the reactants and pick the first one again. \n",
    "\n",
    "For exemple, we show a diagram bellow for the reaction 2 * Meta_Species_1 + Meta_Species_2 >> Meta_Species_2 + 3 * Meta_Species_1. Here the first and second Meta_Species_1 from the product are assigned the states of the first and second Meta_Species_1 from the reactants, then the third Meta_Species_1 from the product will be assigned the state of the first\n",
    "Meta_Species_1 from the reactant. Meta_Species_2 is not matched with Meta_Species one since they are different Meta_Species. The diagram follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d0670dac-bb3a-4676-98d3-63c9a2b619f2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<PIL.PngImagePlugin.PngImageFile image mode=P size=567x331 at 0x7F7ADE8DE280>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "PIL.Image.open('images/Matching_Meta.png')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afeeeab1-336f-4cfd-8244-3225f64ad22f",
   "metadata": {},
   "source": [
    "Consider the competition reaction Tree.dense.old + Tree.dense.young >> Tree.dense.old. Here, the order of the reactants indicates that the old Tree survives the competition and kills the young Tree, thus we preserve the state of the first Tree meta-species in the reaction. Thus, this meta-reaction yields the following reactions:\n",
    "\n",
    "**Tree.brown.dense.old + Tree.brown.dense.young -> Tree.brown.dense.old \\\n",
    "Tree.brown.dense.old + Tree.green.dense.young -> Tree.brown.dense.old \\\n",
    "Tree.brown.dense.old + Tree.yellow.dense.young -> Tree.brown.dense.old \\\n",
    "Tree.green.dense.old + Tree.brown.dense.young -> Tree.green.dense.old \\\n",
    "Tree.green.dense.old + Tree.green.dense.young -> Tree.green.dense.old \\\n",
    "Tree.green.dense.old + Tree.yellow.dense.young -> Tree.green.dense.old \\\n",
    "Tree.yellow.dense.old + Tree.brown.dense.young -> Tree.yellow.dense.old \\\n",
    "Tree.yellow.dense.old + Tree.green.dense.young -> Tree.yellow.dense.old \\\n",
    "Tree.yellow.dense.old + Tree.yellow.dense.young -> Tree.yellow.dense.old**\n",
    "\n",
    "On the other hand, in the replication reaction Tree.old >> Tree + Tree.young, the state of the first Tree is used to construct both products due to the round-robin cycle. As a result, the Trees of the products will retain the state of the first reactant. However, since a transformation is specified for the second Tree in the products, it will maintain its location and color, but its age will change to young, yielding the reactions:\n",
    "\n",
    "**Tree.brown.dense.old -> Tree.brown.dense.old + Tree.brown.dense.young \\\n",
    "Tree.brown.sparse.old -> Tree.brown.sparse.old + Tree.brown.sparse.young \\\n",
    "Tree.green.dense.old -> Tree.green.dense.old + Tree.green.dense.young \\\n",
    "Tree.green.sparse.old -> Tree.green.sparse.old + Tree.green.sparse.young \\\n",
    "Tree.yellow.sparse.old -> Tree.yellow.sparse.old + Tree.yellow.sparse.young \\\n",
    "Tree.yellow.dense.old -> Tree.yellow.dense.old + Tree.yellow.dense.young** \n",
    "\n",
    "Finally, although the order of reactants has meaning, the queries can be performed in any order."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63b56243-47a7-44d6-8ba9-ecafced995e2",
   "metadata": {},
   "source": [
    "It is necessary to specify the meta-species used in the simulation. \n",
    "As the Ager, Location, Mortal, and Color were defined only to construct the Tree meta-species, they must not be considered in the simulation. Once the simulation object has been defined, one can configure the simulation using the dot operator. Below, we define and simulate the model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "05e16ff0-cb05-470e-a53f-a9cf1e06900f",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Compiling model\n",
      "Starting Simulator\n",
      "Running simulation in parallel\n",
      "Simulation is Over\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# initial conditions, in this model version we only have green trees\n",
    "Tree.dense(25), Tree.dense.old(25), Tree.sparse(25), Tree.sparse.old(25)\n",
    "S = Simulation(Tree)\n",
    "S.simulation_method = 'stochastic'\n",
    "S.repetitions = 3\n",
    "S.duration = 20*u.years\n",
    "S.unit_x = 'year'\n",
    "S.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "350e15ee-f0f5-47b1-8e21-1f1bc86c7018",
   "metadata": {},
   "source": [
    "The counts of resulting states are automatically mapped to the Three meta-species. MobsPy also provides in it's results the counts of the individual states. The results can be accessed in the following manner:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "efa57176-8d9f-4df9-87dd-a3f818fd0578",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[100.0, 90.0, 83.0, 74.0, 72.0, 66.0, 64.0, 61.0, 57.0, 51.0, 50.0, 50.0, 48.0, 47.0, 47.0, 45.0, 41.0, 39.0, 38.0, 38.0, 36.0, 36.0, 35.0, 35.0, 32.0, 32.0, 31.0, 31.0, 31.0, 31.0, 31.0, 31.0, 30.0, 30.0, 30.0, 29.0, 29.0, 29.0, 30.0, 29.0, 29.0, 27.0, 27.0, 27.0, 25.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 23.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 21.0, 20.0, 20.0, 19.0, 18.0, 18.0, 16.0, 16.0, 16.0, 16.0, 15.0, 15.0, 14.0, 14.0, 14.0, 14.0, 13.0, 13.0, 13.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 11.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0], [100.0, 95.0, 86.0, 75.0, 71.0, 61.0, 59.0, 57.0, 58.0, 60.0, 59.0, 58.0, 55.0, 54.0, 52.0, 50.0, 48.0, 46.0, 46.0, 44.0, 44.0, 44.0, 44.0, 42.0, 42.0, 41.0, 40.0, 40.0, 41.0, 40.0, 40.0, 39.0, 38.0, 37.0, 36.0, 37.0, 36.0, 35.0, 36.0, 36.0, 35.0, 35.0, 34.0, 31.0, 31.0, 30.0, 29.0, 29.0, 29.0, 29.0, 29.0, 27.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 25.0, 25.0, 24.0, 24.0, 22.0, 20.0, 20.0, 20.0, 20.0, 20.0, 19.0, 19.0, 17.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 15.0, 15.0, 15.0, 14.0, 14.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 10.0, 10.0, 10.0, 9.0, 9.0, 9.0, 8.0, 8.0, 8.0], [100.0, 93.0, 88.0, 85.0, 78.0, 73.0, 65.0, 64.0, 63.0, 60.0, 61.0, 60.0, 58.0, 58.0, 54.0, 51.0, 49.0, 49.0, 48.0, 46.0, 43.0, 41.0, 40.0, 39.0, 38.0, 36.0, 36.0, 35.0, 33.0, 32.0, 31.0, 30.0, 29.0, 29.0, 29.0, 29.0, 29.0, 28.0, 28.0, 28.0, 27.0, 27.0, 28.0, 28.0, 27.0, 26.0, 26.0, 25.0, 25.0, 25.0, 25.0, 24.0, 24.0, 24.0, 23.0, 23.0, 22.0, 21.0, 20.0, 17.0, 17.0, 17.0, 16.0, 16.0, 16.0, 16.0, 15.0, 15.0, 14.0, 14.0, 14.0, 14.0, 15.0, 15.0, 15.0, 15.0, 15.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 11.0, 11.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 9.0, 9.0]]\n"
     ]
    }
   ],
   "source": [
    "print(S.results[Tree])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b2189332-b6bd-4b8b-b9c5-cbdb5cc5cb29",
   "metadata": {},
   "source": [
    "We also compile the model to show it in detail:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "e1443de3-1436-490e-bcfe-5beba62e2778",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Species\n",
      "Tree.brown.dense.old,0\n",
      "Tree.brown.dense.young,0\n",
      "Tree.brown.sparse.old,0\n",
      "Tree.brown.sparse.young,0\n",
      "Tree.green.dense.old,25\n",
      "Tree.green.dense.young,25\n",
      "Tree.green.sparse.old,25\n",
      "Tree.green.sparse.young,25\n",
      "Tree.yellow.dense.old,0\n",
      "Tree.yellow.dense.young,0\n",
      "Tree.yellow.sparse.old,0\n",
      "Tree.yellow.sparse.young,0\n",
      "\n",
      "Mappings\n",
      "Tree :\n",
      "Tree.brown.dense.old\n",
      "Tree.brown.dense.young\n",
      "Tree.brown.sparse.old\n",
      "Tree.brown.sparse.young\n",
      "Tree.green.dense.old\n",
      "Tree.green.dense.young\n",
      "Tree.green.sparse.old\n",
      "Tree.green.sparse.young\n",
      "Tree.yellow.dense.old\n",
      "Tree.yellow.dense.young\n",
      "Tree.yellow.sparse.old\n",
      "Tree.yellow.sparse.young\n",
      "\n",
      "Parameters\n",
      "volume,1\n",
      "\n",
      "Reactions\n",
      "reaction_0,{'re': [(1, 'Tree.brown.dense.old'), (1, 'Tree.brown.dense.young')], 'pr': [(1, 'Tree.brown.dense.old')], 'kin': 'Tree.brown.dense.old * Tree.brown.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_1,{'re': [(1, 'Tree.brown.dense.old'), (1, 'Tree.green.dense.young')], 'pr': [(1, 'Tree.brown.dense.old')], 'kin': 'Tree.brown.dense.old * Tree.green.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_2,{'re': [(1, 'Tree.brown.dense.old'), (1, 'Tree.yellow.dense.young')], 'pr': [(1, 'Tree.brown.dense.old')], 'kin': 'Tree.brown.dense.old * Tree.yellow.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_3,{'re': [(1, 'Tree.brown.dense.old')], 'pr': [(1, 'Tree.brown.dense.old'), (1, 'Tree.brown.dense.young')], 'kin': 'Tree.brown.dense.old * 3.168808781402895e-09'}\n",
      "reaction_4,{'re': [(1, 'Tree.brown.dense.old')], 'pr': [], 'kin': 'Tree.brown.dense.old * 3.168808781402895e-08'}\n",
      "reaction_5,{'re': [(1, 'Tree.brown.dense.young')], 'pr': [(1, 'Tree.brown.dense.old')], 'kin': 'Tree.brown.dense.young * 3.168808781402895e-09'}\n",
      "reaction_6,{'re': [(1, 'Tree.brown.sparse.old')], 'pr': [(1, 'Tree.brown.sparse.old'), (1, 'Tree.brown.sparse.young')], 'kin': 'Tree.brown.sparse.old * 3.168808781402895e-09'}\n",
      "reaction_7,{'re': [(1, 'Tree.brown.sparse.old')], 'pr': [], 'kin': 'Tree.brown.sparse.old * 3.168808781402895e-08'}\n",
      "reaction_8,{'re': [(1, 'Tree.brown.sparse.young')], 'pr': [(1, 'Tree.brown.sparse.old')], 'kin': 'Tree.brown.sparse.young * 3.168808781402895e-09'}\n",
      "reaction_9,{'re': [(1, 'Tree.green.dense.old'), (1, 'Tree.brown.dense.young')], 'pr': [(1, 'Tree.green.dense.old')], 'kin': 'Tree.green.dense.old * Tree.brown.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_10,{'re': [(1, 'Tree.green.dense.old'), (1, 'Tree.green.dense.young')], 'pr': [(1, 'Tree.green.dense.old')], 'kin': 'Tree.green.dense.old * Tree.green.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_11,{'re': [(1, 'Tree.green.dense.old'), (1, 'Tree.yellow.dense.young')], 'pr': [(1, 'Tree.green.dense.old')], 'kin': 'Tree.green.dense.old * Tree.yellow.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_12,{'re': [(1, 'Tree.green.dense.old')], 'pr': [(1, 'Tree.green.dense.old'), (1, 'Tree.green.dense.young')], 'kin': 'Tree.green.dense.old * 3.168808781402895e-09'}\n",
      "reaction_13,{'re': [(1, 'Tree.green.dense.old')], 'pr': [], 'kin': 'Tree.green.dense.old * 3.168808781402895e-08'}\n",
      "reaction_14,{'re': [(1, 'Tree.green.dense.young')], 'pr': [(1, 'Tree.green.dense.old')], 'kin': 'Tree.green.dense.young * 3.168808781402895e-09'}\n",
      "reaction_15,{'re': [(1, 'Tree.green.sparse.old')], 'pr': [(1, 'Tree.green.sparse.old'), (1, 'Tree.green.sparse.young')], 'kin': 'Tree.green.sparse.old * 3.168808781402895e-09'}\n",
      "reaction_16,{'re': [(1, 'Tree.green.sparse.old')], 'pr': [], 'kin': 'Tree.green.sparse.old * 3.168808781402895e-08'}\n",
      "reaction_17,{'re': [(1, 'Tree.green.sparse.young')], 'pr': [(1, 'Tree.green.sparse.old')], 'kin': 'Tree.green.sparse.young * 3.168808781402895e-09'}\n",
      "reaction_18,{'re': [(1, 'Tree.yellow.dense.old'), (1, 'Tree.brown.dense.young')], 'pr': [(1, 'Tree.yellow.dense.old')], 'kin': 'Tree.yellow.dense.old * Tree.brown.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_19,{'re': [(1, 'Tree.yellow.dense.old'), (1, 'Tree.green.dense.young')], 'pr': [(1, 'Tree.yellow.dense.old')], 'kin': 'Tree.yellow.dense.old * Tree.green.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_20,{'re': [(1, 'Tree.yellow.dense.old'), (1, 'Tree.yellow.dense.young')], 'pr': [(1, 'Tree.yellow.dense.old')], 'kin': 'Tree.yellow.dense.old * Tree.yellow.dense.young * 3.1688087814028948e-18 * volume^-1'}\n",
      "reaction_21,{'re': [(1, 'Tree.yellow.dense.old')], 'pr': [(1, 'Tree.yellow.dense.old'), (1, 'Tree.yellow.dense.young')], 'kin': 'Tree.yellow.dense.old * 3.168808781402895e-09'}\n",
      "reaction_22,{'re': [(1, 'Tree.yellow.dense.old')], 'pr': [], 'kin': 'Tree.yellow.dense.old * 3.168808781402895e-08'}\n",
      "reaction_23,{'re': [(1, 'Tree.yellow.dense.young')], 'pr': [(1, 'Tree.yellow.dense.old')], 'kin': 'Tree.yellow.dense.young * 3.168808781402895e-09'}\n",
      "reaction_24,{'re': [(1, 'Tree.yellow.sparse.old')], 'pr': [(1, 'Tree.yellow.sparse.old'), (1, 'Tree.yellow.sparse.young')], 'kin': 'Tree.yellow.sparse.old * 3.168808781402895e-09'}\n",
      "reaction_25,{'re': [(1, 'Tree.yellow.sparse.old')], 'pr': [], 'kin': 'Tree.yellow.sparse.old * 3.168808781402895e-08'}\n",
      "reaction_26,{'re': [(1, 'Tree.yellow.sparse.young')], 'pr': [(1, 'Tree.yellow.sparse.old')], 'kin': 'Tree.yellow.sparse.young * 3.168808781402895e-09'}\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Compiling model\n"
     ]
    }
   ],
   "source": [
    "print(S.compile())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6c309a72-a6d0-4eab-8d31-fc968ac592ac",
   "metadata": {},
   "source": [
    "One can see how MobsPy was able to reduce a 27 reaction model into three meta-reactions. \n",
    "Finally, one can acess the results inside the simulation object "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "50709f10-ed45-470d-8053-568f2be27b38",
   "metadata": {},
   "source": [
    "# Following Notebooks\n",
    "\n",
    "In the following tutorials, we will revise in more detail some of the tools used here and explain other resources that can be further used to simplify models. "
   ]
  }
 ],
 "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.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
