From 2feb6c4d98c0c891e2b0fd1a8399d37723d28176 Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Tue, 25 Nov 2025 19:53:42 +0100 Subject: [PATCH 01/12] Update Python test --- examples/test_r.ipynb | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/test_r.ipynb diff --git a/examples/test_r.ipynb b/examples/test_r.ipynb new file mode 100644 index 0000000..e69de29 From 0d48f6291f3e2dd1f569138b8fe3e7840485a495 Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Wed, 3 Dec 2025 02:02:33 +0100 Subject: [PATCH 02/12] Update R --- examples/test_r.ipynb | 1446 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1446 insertions(+) diff --git a/examples/test_r.ipynb b/examples/test_r.ipynb index e69de29..116f107 100644 --- a/examples/test_r.ipynb +++ b/examples/test_r.ipynb @@ -0,0 +1,1446 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8443073c", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **Installation**\n", + "LoopDetectR is on CRAN and can be installed within R by" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f4527cc", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Before running the R code cells in jupyter notebook,\n", + "# initialize the R kernel by this line of code:\n", + "# IRkernel::installspec()" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e4b77c16", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n", + "also installing the dependencies 'igraph', 'numDeriv'\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'igraph' successfully unpacked and MD5 sums checked\n", + "package 'numDeriv' successfully unpacked and MD5 sums checked\n", + "package 'LoopDetectR' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\RtmpaOiKF4\\downloaded_packages\n" + ] + } + ], + "source": [ + "# Download and install\n", + "install.packages(\"LoopDetectR\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "37148f24", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'deSolve' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\RtmpaOiKF4\\downloaded_packages\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'numDeriv' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\RtmpaOiKF4\\downloaded_packages\n" + ] + } + ], + "source": [ + "install.packages(\"deSolve\") # if not already installed\n", + "install.packages(\"numDeriv\") # if not already installed" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "5af1f007", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Load package\n", + "library(\"LoopDetectR\")" + ] + }, + { + "cell_type": "markdown", + "id": "7821beca", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **In brief and quick start**\n", + "The package LoopDetectR enables determining all feedback loops of an ordinary differential equation (ODE) system at user-defined values of the model parameters and of the modelled variables.\n", + "\n", + "The following call reports (up to 10) feedback loops for an ODE system determined by a function, here the example function `func_POSm4`, at variable values s_star (here, these are all equal to 1). Additional arguments to the example function are supplied." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "452aaf33", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11-1
2, 21-1
3, 31-1
4, 41-1
3, 4, 1,....4-1
3, 4, 2, 33 1
\n" + ], + "text/latex": [ + "A data.frame: 6 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 3, 4, 1,.... & 4 & -1\\\\\n", + "\t 3, 4, 2, 3 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 3, 4, 1,.... | 4 | -1 |\n", + "| 3, 4, 2, 3 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "1 1, 1 1 -1 \n", + "2 2, 2 1 -1 \n", + "3 3, 3 1 -1 \n", + "4 4, 4 1 -1 \n", + "5 3, 4, 1,.... 4 -1 \n", + "6 3, 4, 2, 3 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Load example ODE system with function func_POSm4, 4 variables\n", + "data(\"func_POSm4\")\n", + "# Example variable values\n", + "s_star <- rep(1,4)\n", + "# Further arguments of func_POSm4, in addition: time t as argument\n", + "klin <- rep(1,8)\n", + "knonlin <- c(2.5,3)\n", + "\n", + "# compute loops\n", + "res_tab <- find_loops_vset(func_POSm4,vset=list(s_star),t=1,klin=klin,\n", + " knonlin=knonlin,max_num_loops=10)\n", + "# The loop list is reported\n", + "res_tab$loop_rep[[1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "eedcc059", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\n", + "
A data.frame: 1 × 3
looplengthsign
<I<list>><dbl><dbl>
63, 4, 2, 331
\n" + ], + "text/latex": [ + "A data.frame: 1 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t6 & 3, 4, 2, 3 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 1 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 6 | 3, 4, 2, 3 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "6 3, 4, 2, 3 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# This is the sixth loop of the list. It is a positive feedback loop (sign in \n", + "# the loop list equals +1) of length 3 in that variable 3 regulates variable 4, \n", + "# variable 4 regulates variable 2, and variable 2 regulates variable 3. \n", + "res_tab$loop_rep[[1]][6,]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "441d7e21", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-1 0 0-1
1-1 0 1
0 1-1 0
0 0 1-1
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -1 & 0 & 0 & -1\\\\\n", + "\t 1 & -1 & 0 & 1\\\\\n", + "\t 0 & 1 & -1 & 0\\\\\n", + "\t 0 & 0 & 1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -1 | 0 | 0 | -1 |\n", + "| 1 | -1 | 0 | 1 |\n", + "| 0 | 1 | -1 | 0 |\n", + "| 0 | 0 | 1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 0 0 -1 \n", + "[2,] 1 -1 0 1 \n", + "[3,] 0 1 -1 0 \n", + "[4,] 0 0 1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The corresponding signed Jacobian matrix\n", + "res_tab$jac_rep[[1]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69850e68", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "aaa76790", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# Load example ODE system with function func_POSm4, \n", + "# Positive feedback chain model from [Baum et al., 2016], 4 variables\n", + "data(func_POSm4)\n", + "# The function func_POSm4 returns a vector, but deSolve needs the vector within\n", + "# a list as output. Therefore, we define a function that simply puts the output \n", + "# of func_POSm4 into a list:\n", + "func_POSm4_list <- function(t,x,klin,knonlin){list(func_POSm4(t,x,klin,knonlin))}\n", + "# Kinetic parameters of the model, supplied as arguments to func_POSm4\n", + "klin <- c(165,0.044,0.27,550,5000,78,4.4,5.1)\n", + "knonlin <- c(0.3,2)\n", + "# Solve the system using deSolve\n", + "sol <- deSolve::ode(y = rep(1,4), times = seq(0,15,0.1), func = func_POSm4_list, \n", + " parms=klin, knonlin=knonlin)\n", + "# The solution of the 4-variable system is oscillatory, showing only the first \n", + "# variable here\n", + "plot(sol[,1],sol[,2],type='l',xlab='Time',ylab ='Variable 1')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e363256e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n", + "also installing the dependencies 'rematch', 'blob', 'DBI', 'gargle', 'cellranger', 'ids', 'rematch2', 'timechange', 'systemfonts', 'textshaping', 'selectr', 'conflicted', 'dbplyr', 'dtplyr', 'forcats', 'googledrive', 'googlesheets4', 'haven', 'lubridate', 'modelr', 'ragg', 'readxl', 'reprex', 'rstudioapi', 'rvest'\n", + "\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + " There is a binary version available but the source version is later:\n", + " binary source needs_compilation\n", + "selectr 0.4-2 0.5-0 FALSE\n", + "\n", + "package 'rematch' successfully unpacked and MD5 sums checked\n", + "package 'blob' successfully unpacked and MD5 sums checked\n", + "package 'DBI' successfully unpacked and MD5 sums checked\n", + "package 'gargle' successfully unpacked and MD5 sums checked\n", + "package 'cellranger' successfully unpacked and MD5 sums checked\n", + "package 'ids' successfully unpacked and MD5 sums checked\n", + "package 'rematch2' successfully unpacked and MD5 sums checked\n", + "package 'timechange' successfully unpacked and MD5 sums checked\n", + "package 'systemfonts' successfully unpacked and MD5 sums checked\n", + "package 'textshaping' successfully unpacked and MD5 sums checked\n", + "package 'conflicted' successfully unpacked and MD5 sums checked\n", + "package 'dbplyr' successfully unpacked and MD5 sums checked\n", + "package 'dtplyr' successfully unpacked and MD5 sums checked\n", + "package 'forcats' successfully unpacked and MD5 sums checked\n", + "package 'googledrive' successfully unpacked and MD5 sums checked\n", + "package 'googlesheets4' successfully unpacked and MD5 sums checked\n", + "package 'haven' successfully unpacked and MD5 sums checked\n", + "package 'lubridate' successfully unpacked and MD5 sums checked\n", + "package 'modelr' successfully unpacked and MD5 sums checked\n", + "package 'ragg' successfully unpacked and MD5 sums checked\n", + "package 'readxl' successfully unpacked and MD5 sums checked\n", + "package 'reprex' successfully unpacked and MD5 sums checked\n", + "package 'rstudioapi' successfully unpacked and MD5 sums checked\n", + "package 'rvest' successfully unpacked and MD5 sums checked\n", + "package 'tidyverse' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\RtmpYFGT5P\\downloaded_packages\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "installing the source package 'selectr'\n", + "\n", + "\n", + "── \u001b[1mAttaching core tidyverse packages\u001b[22m ──────────────────────── tidyverse 2.0.0 ──\n", + "\u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 1.1.4 \u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 2.1.6\n", + "\u001b[32m✔\u001b[39m \u001b[34mforcats \u001b[39m 1.0.1 \u001b[32m✔\u001b[39m \u001b[34mstringr \u001b[39m 1.6.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mggplot2 \u001b[39m 4.0.1 \u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 3.3.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mlubridate\u001b[39m 1.9.4 \u001b[32m✔\u001b[39m \u001b[34mtidyr \u001b[39m 1.3.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mpurrr \u001b[39m 1.2.0 \n", + "── \u001b[1mConflicts\u001b[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\u001b[36mℹ\u001b[39m Use the conflicted package (\u001b[3m\u001b[34m\u001b[39m\u001b[23m) to force all conflicts to become errors\n" + ] + }, + { + "ename": "ERROR", + "evalue": "Error: object 'sol_long' not found\n", + "output_type": "error", + "traceback": [ + "Error: object 'sol_long' not found\nTraceback:\n", + "1. .handleSimpleError(function (cnd) \n . {\n . watcher$capture_plot_and_output()\n . cnd <- sanitize_call(cnd)\n . watcher$push(cnd)\n . switch(on_error, continue = invokeRestart(\"eval_continue\"), \n . stop = invokeRestart(\"eval_stop\"), error = NULL)\n . }, \"object 'sol_long' not found\", base::quote(eval(expr, envir)))" + ] + } + ], + "source": [ + "# Make beautiful plot using ggplot2 / tidyverse\n", + "install.packages(\"tidyverse\") # if not already installed\n", + "library(tidyverse)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7722a33", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "library(deSolve)\n", + "library(tidyverse)\n", + "\n", + "# solve system\n", + "sol_for_plot <- as.data.frame(\n", + " ode(\n", + " y = rep(1,4),\n", + " times = seq(0, 15, 0.1),\n", + " func = func_POSm4_list,\n", + " parms = klin,\n", + " knonlin = knonlin\n", + " )\n", + ")\n", + "\n", + "# rename columns for clarity\n", + "colnames(sol_for_plot) <- c(\"time\", \"X1\", \"X2\", \"X3\", \"X4\")\n", + "\n", + "# reshape to long format\n", + "sol_long <- sol_for_plot %>%\n", + " pivot_longer(cols = X1:X4, names_to = \"species\", values_to = \"value\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "079c187f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + "# geom_line(size = 1.1) +\n", + "# scale_colour_brewer(palette = \"Dark2\") +\n", + "# labs(\n", + "# title = \"Dynamics of the 4-Variable Positive Feedback Chain\",\n", + "# x = \"Time\",\n", + "# y = \"Concentration\",\n", + "# colour = \"Species\"\n", + "# ) +\n", + "# theme_minimal(base_size = 16) +\n", + "# theme(\n", + "# plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + "# legend.position = \"right\",\n", + "# panel.grid.minor = element_blank()\n", + "# )\n", + "\n", + "options(repr.plot.width = 8, repr.plot.height = 6)\n", + "\n", + "plot1 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " geom_line(size = 1.1) +\n", + " scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_y_log10(\n", + " breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n", + " labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n", + " ) + # ← log₁₀ transformation\n", + " labs(\n", + " title = \"Dynamics of the 4-Variable Positive Feedback Chain\",\n", + " x = \"Time\",\n", + " y = \"Concentration (log scale)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " panel.grid.minor = element_blank()\n", + " )\n", + "\n", + "plot1\n", + "# ggsave(\"POSm4_plot.png\", plot1, width = 10, height = 8, units = \"in\", dpi = 300)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "90aac4e1", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "dir.create(\"results\", showWarnings = FALSE)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "5da4476d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "agg_record_757164869: 2" + ], + "text/latex": [ + "\\textbf{agg\\textbackslash{}\\_record\\textbackslash{}\\_757164869:} 2" + ], + "text/markdown": [ + "**agg_record_757164869:** 2" + ], + "text/plain": [ + "agg_record_757164869 \n", + " 2 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "svg(\"results/posm4.svg\", width = 10, height = 8)\n", + "print(plot1)\n", + "dev.off()" + ] + }, + { + "cell_type": "markdown", + "id": "834f11c6", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **Calculating the Jacobian matrix**\n", + "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003].\n", + "\n", + "The input function, in the example `func_POSm4` (positive feedback chain model from [Baum et al., 2016]) defines the time derivatives of the modelled variables as a vector: \n", + "$f_i(s)=dS_i/dt$. Note that only those input arguments to the function that encode the modelled variables (and hence in whose direction the partial derivatives are taken) are allowed to be called `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "7a7e6226", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
1
63.9008547597954
2
0.0111646237998349
3
0.0748170189314118
4
1.37597224802616
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[1] 63.9008547597954\n", + "\\item[2] 0.0111646237998349\n", + "\\item[3] 0.0748170189314118\n", + "\\item[4] 1.37597224802616\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "1\n", + ": 63.90085475979542\n", + ": 0.01116462379983493\n", + ": 0.07481701893141184\n", + ": 1.37597224802616\n", + "\n" + ], + "text/plain": [ + " 1 2 3 4 \n", + "63.90085476 0.01116462 0.07481702 1.37597225 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Set the last point of the numeric solution as point of interest, omit the \n", + "# first column (it contains the time)\n", + "s_star <- sol[dim(sol)[1],2:dim(sol)[2]]\n", + "s_star" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "bdad5d8b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-1.2396132 0 0.0-85.9719
0.9696132-5550 0.0 85.9719
0.0000000 550-82.4 0.0000
0.0000000 0 78.0 -5.1000
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -1.2396132 & 0 & 0.0 & -85.9719\\\\\n", + "\t 0.9696132 & -5550 & 0.0 & 85.9719\\\\\n", + "\t 0.0000000 & 550 & -82.4 & 0.0000\\\\\n", + "\t 0.0000000 & 0 & 78.0 & -5.1000\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -1.2396132 | 0 | 0.0 | -85.9719 |\n", + "| 0.9696132 | -5550 | 0.0 | 85.9719 |\n", + "| 0.0000000 | 550 | -82.4 | 0.0000 |\n", + "| 0.0000000 | 0 | 78.0 | -5.1000 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] \n", + "[1,] -1.2396132 0 0.0 -85.9719\n", + "[2,] 0.9696132 -5550 0.0 85.9719\n", + "[3,] 0.0000000 550 -82.4 0.0000\n", + "[4,] 0.0000000 0 78.0 -5.1000" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "klin <- c(165,0.044,0.27,550,5000,78,4.4,5.1)\n", + "knonlin <- c(0.3,2)\n", + "j_matrix <- numDeriv::jacobian(func_POSm4,s_star,method=\"complex\",\n", + " t=1,klin=klin,knonlin=knonlin,)\n", + "j_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "39c1a233", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-1 0 0-1
1-1 0 1
0 1-1 0
0 0 1-1
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -1 & 0 & 0 & -1\\\\\n", + "\t 1 & -1 & 0 & 1\\\\\n", + "\t 0 & 1 & -1 & 0\\\\\n", + "\t 0 & 0 & 1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -1 | 0 | 0 | -1 |\n", + "| 1 | -1 | 0 | 1 |\n", + "| 0 | 1 | -1 | 0 |\n", + "| 0 | 0 | 1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 0 0 -1 \n", + "[2,] 1 -1 0 1 \n", + "[3,] 0 1 -1 0 \n", + "[4,] 0 0 1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "signed_jacobian <- sign(j_matrix)\n", + "signed_jacobian" + ] + }, + { + "cell_type": "markdown", + "id": "f50e0305", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **Computing all feedback loops and useful functions for loop search**\n", + "The Jacobian matrix is used to compute feedback loops in the generated interaction graph. The default function for this is `find_loops`, in that strongly connected components are determined to reduce runtime. For smaller systems, the function `find_loops_noscc` skips this step and thus can be faster. The optional second input argument, `max_num_loops`, sets an upper limit to the number of detected and reported loops and thus can prevent overly long runtime (but also potentially not all loops are returned)." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "cfc29fc4", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11-1
2, 21-1
3, 31-1
4, 41-1
3, 4, 1,....4-1
3, 4, 2, 33 1
\n" + ], + "text/latex": [ + "A data.frame: 6 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 3, 4, 1,.... & 4 & -1\\\\\n", + "\t 3, 4, 2, 3 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 3, 4, 1,.... | 4 | -1 |\n", + "| 3, 4, 2, 3 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "1 1, 1 1 -1 \n", + "2 2, 2 1 -1 \n", + "3 3, 3 1 -1 \n", + "4 4, 4 1 -1 \n", + "5 3, 4, 1,.... 4 -1 \n", + "6 3, 4, 2, 3 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Determine the loop_list from Jacobian matrix j_matrix\n", + "loop_list <- find_loops(j_matrix)\n", + "loop_list" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "54d49c90", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11-1
2, 21-1
3, 31-1
4, 41-1
3, 4, 1,....4-1
3, 4, 2, 33 1
\n" + ], + "text/latex": [ + "A data.frame: 6 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 3, 4, 1,.... & 4 & -1\\\\\n", + "\t 3, 4, 2, 3 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 3, 4, 1,.... | 4 | -1 |\n", + "| 3, 4, 2, 3 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "1 1, 1 1 -1 \n", + "2 2, 2 1 -1 \n", + "3 3, 3 1 -1 \n", + "4 4, 4 1 -1 \n", + "5 3, 4, 1,.... 4 -1 \n", + "6 3, 4, 2, 3 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Use the signed Jacobian matrix to determine the loop_list give the same result\n", + "loop_list <- find_loops(signed_jacobian)\n", + "loop_list" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "a4336c7f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[[1]]\n", + "[1] 3 4 1 2 3\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Retrieve fifth loop\n", + "loop_list[5,1] " + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "3b862f3d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 3
  2. 4
  3. 1
  4. 2
  5. 3
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 3\n", + "\\item 4\n", + "\\item 1\n", + "\\item 2\n", + "\\item 3\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 3\n", + "2. 4\n", + "3. 1\n", + "4. 2\n", + "5. 3\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 3 4 1 2 3" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# In order to obtain the vector of the order of variables of a loop, you have to \n", + "# call the list element\n", + "loop_list[5,1][[1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "e28abdc5", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\n", + "
A data.frame: 1 × 3
looplengthsign
<I<list>><dbl><dbl>
53, 4, 1,....4-1
\n" + ], + "text/latex": [ + "A data.frame: 1 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t5 & 3, 4, 1,.... & 4 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 1 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 5 | 3, 4, 1,.... | 4 | -1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "5 3, 4, 1,.... 4 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Retrieve all loops of length 4\n", + "loop_list[loop_list$length==4,]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "e3dc787d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 4
len_1len_2len_3len_4
<dbl><dbl><dbl><dbl>
all4011
pos0010
neg4001
\n" + ], + "text/latex": [ + "A data.frame: 3 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & len\\_1 & len\\_2 & len\\_3 & len\\_4\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\tall & 4 & 0 & 1 & 1\\\\\n", + "\tpos & 0 & 0 & 1 & 0\\\\\n", + "\tneg & 4 & 0 & 0 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 4\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> | len_3 <dbl> | len_4 <dbl> |\n", + "|---|---|---|---|---|\n", + "| all | 4 | 0 | 1 | 1 |\n", + "| pos | 0 | 0 | 1 | 0 |\n", + "| neg | 4 | 0 | 0 | 1 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2 len_3 len_4\n", + "all 4 0 1 1 \n", + "pos 0 0 1 0 \n", + "neg 4 0 0 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(loop_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "9cb66750", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 3
looplengthsign
<I<list>><dbl><dbl>
2 2, 21-1
53, 4, 1,....4-1
6 3, 4, 2, 33 1
\n" + ], + "text/latex": [ + "A data.frame: 3 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t2 & 2, 2 & 1 & -1\\\\\n", + "\t5 & 3, 4, 1,.... & 4 & -1\\\\\n", + "\t6 & 3, 4, 2, 3 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 2 | 2, 2 | 1 | -1 |\n", + "| 5 | 3, 4, 1,.... | 4 | -1 |\n", + "| 6 | 3, 4, 2, 3 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "2 2, 2 1 -1 \n", + "5 3, 4, 1,.... 4 -1 \n", + "6 3, 4, 2, 3 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Index of node of interest\n", + "noi <- 2\n", + "# Return all loops from loop_list containing node 2\n", + "loop_list[vapply(loop_list$loop,function(x){noi %in% x},logical(1)),]" + ] + }, + { + "cell_type": "markdown", + "id": "3291b3cc", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "The `LoopDetectR` function `find_edge` can be used to search a loop list for loops containing specific edges defined by the indices of the ingoing and outgoing nodes. This example returns the indices of all loops with a regulation of node 3 by node 2. These are only two here." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "d736f376", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 2 × 3
looplengthsign
<I<list>><dbl><dbl>
53, 4, 1,....4-1
6 3, 4, 2, 33 1
\n" + ], + "text/latex": [ + "A data.frame: 2 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t5 & 3, 4, 1,.... & 4 & -1\\\\\n", + "\t6 & 3, 4, 2, 3 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 2 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 5 | 3, 4, 1,.... | 4 | -1 |\n", + "| 6 | 3, 4, 2, 3 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "5 3, 4, 1,.... 4 -1 \n", + "6 3, 4, 2, 3 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Obtain the indices of the loops with edge '2 regulates 3' in loop_list \n", + "loop_edge_ind <- find_edge(loop_list,source_node=2,target_node=3);\n", + "loops_with_edge_2_to_3 <- loop_list[loop_edge_ind,]\n", + "loops_with_edge_2_to_3" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "a0151df7", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "'C:\\\\Users\\\\Admin\\\\AppData\\\\Local\\\\Temp\\\\RtmpaOiKF4'" + ], + "text/latex": [ + "'C:\\textbackslash{}\\textbackslash{}Users\\textbackslash{}\\textbackslash{}Admin\\textbackslash{}\\textbackslash{}AppData\\textbackslash{}\\textbackslash{}Local\\textbackslash{}\\textbackslash{}Temp\\textbackslash{}\\textbackslash{}RtmpaOiKF4'" + ], + "text/markdown": [ + "'C:\\\\Users\\\\Admin\\\\AppData\\\\Local\\\\Temp\\\\RtmpaOiKF4'" + ], + "text/plain": [ + "[1] \"C:\\\\Users\\\\Admin\\\\AppData\\\\Local\\\\Temp\\\\RtmpaOiKF4\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tempdir()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "ed4a5e03", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# This writes a file 'looplist_func_POSm4.RData'\n", + "save(loop_list,file=file.path(tempdir(),'looplist_func_POSm4.RData')) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb9080e6", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# This loads the object 'loop_list' into the workspace\n", + "load(file.path(tempdir(),'looplist_func_POSm4.RData'))\n", + "\n", + "# This saves the loop list into a table with separation by tab\n", + "write.table(loop_list,file=file.path(tempdir(),'looplist_func_POSm4.txt'),\n", + " sep='\\t',quote=F,row.names=F)\n", + "# This reads the loop list back into the R session, as object ll\n", + "ll <- read.table(file.path(tempdir(),'looplist_func_POSm4.txt'),\n", + " header=T,sep='\\t')\n", + "ll" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 91726cfa7722bf7a151e19ec4e9c465ee0e02664 Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Thu, 11 Dec 2025 14:01:30 +0100 Subject: [PATCH 03/12] Update examples python --- examples/test_r.ipynb | 111 ++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 58 deletions(-) diff --git a/examples/test_r.ipynb b/examples/test_r.ipynb index 116f107..95b276e 100644 --- a/examples/test_r.ipynb +++ b/examples/test_r.ipynb @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 2, "id": "452aaf33", "metadata": { "vscode": { @@ -371,7 +371,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 3, "id": "aaa76790", "metadata": { "vscode": { @@ -381,15 +381,15 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAMAAABoqemGAAAAMFBMVEUAAABNTU1oaGh8fHyMjIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enw8PD////QFLu4AAAACXBIWXMAABJ0AAASdAHeZh94AAAdzElEQVR4nO3di1YquRZG4RRgicjl/d+2FfHWW7GSrJWsvzK/MU43+4xdK6Fgqlyk0wWArNR7AwDKETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaENQg4AVikoC77YDssAawBAQPCCBgQRsCAMAIGhBEwIIyAAWEEDAgjYEAYAQPCCBgQRsCAMAIGhBEwIIyAAWEEDAgjYEAYAS8Xc1cYGgEvVvLpJYAvAl4qxdwWxkbAC6VLyG1hcAS8UPr4BxAHAS+TvvwTCIOAF0n/+zcQQ9OAnx9318+i3s3PXkv4SP9cAEJoGPB58+Xz5LcuS3hJP1wCAmgY8Jymp+P10ukwpdljCSfpx4tAfw0DntLx4/IxTR5LOEm/XAZ6axjwt3cy3X9bU6xK0q9/ADrjO/DfCBhhtX0MfDhdL2k9Bk53/gT01fJlpO2XZ6E3Z5clPBAw4mr7OvB8fR142j0KvQ6c7v4R6Ip3Yv2FgBEYAf+FgBFY+4D3m5R2B9clLP1/K4G2BrR/Hfj2TNbdJ6EjVULAiKx1wHOaz5fLaU57jyXs/bOTOFsD2gc8pevrR+e08VjCHgEjtNYBv7+F8t+3UqavCpcw9+9GwmwNuLQP+OE9YI23UhIwYmsa8O5xf0hPLxfPs8hbKQkYsTUN+OPH45QmibdS/rCPKFsDXrV8Hfh43O93u+tTWfPdfsNUQsAIjndi3fHTNoJsDbgi4DsIGNG1DPj8kNL29iZKiU/kIGBE1/JTKae3z5R9GyIQ8I+7iLE14E3TT+TYv1S8n66fKEvAgIGmn4l1/ddp2pwIGDDR4VMpz9utRMA/byLE1oCbhgFv0vuLv5stAQMWGga8Tw+3S6e0jR/wL3uIsDXgXcuXkeaPag9//MJRhEoIGAKavpHjuHu/dHogYKAe78TK3EKArQEfCDh3CwH2Brwj4NwtBNgb8I6Ac3fQf2/ABwLO3UH/vQEfCDh3B/33Bnwg4NwNdN8b8ImAczfQfW/AJwLO3UD3vQGfCDh3/d57A74g4Nz1e+8N+IKAc5cnYARCwLnLEzACIeDc5QkYgRBw7uoEjEAIOHd1AkYgBJy7OgEjEALOXZyAEQgB5y5OwAiEgHMXJ2AEQsC5axMwAiHg3LUJGIEQcO7aBIxACDh3aQJGIAScuzQBIxACzl2agBEIAeeuTMAIhIBzVyZgBELAuSsTMAIh4NyVCRiBEHDuwgSMQAg4d2ECRiAEnLswASMQAs5dl4ARCAHnrkvACISAc9clYARCwLnLEjACIeDcZQkYgRBw7rIEjEAIOHdVAkYgBJy7KgEjEALOXZWAEQgB5y5KwAiEgHMXJWAEQsC5ixIwAiHg3EUJGIEQcO6aBIxACDh3TQJGIAScuyYBIxACzl2SgBEIAecuScAIhIBzlyRgBELAuSsSMAIh4NwVCRiBEHDuigSMQAg4e0UKRhwEnL0gASOOpgE/P+7Sq9387LVEIQKGpoYBnzfp09ZliWIEDE0NA57T9HS8XjodpjR7LFEqaz0CRhwNA57S8ePyMU0eS5QiYIhqGHBKv/3BbIlSBAxRfAfOXo6AEUfbx8CH0/VStMfABAxVLV9G2n55FnpzdlmiDAFDVdvXgefr68DT7jHW68AEDFW8Eyt7NQJGHARMwBDGWykJGMJ4K2X2YgSMOHgrJQFDGG/kIGAIi/NWyvRV4RJFCBi6+A6cvRYBIw7eSknAEMZbKQkYwoZ/K2X+UgSMOIZ/JxYBQxkBNzgC8NIy4PNDStvDbUiQT+SI+QUMWKjlWymntzdCvw0hYKBe05eR9i8V76fr26AJGDDQ9I0c13+dps2JgAETHd5Ked5uwwRcshABI46GAW/S+5s3NlsCBiw0DHifHm6XTmlLwICBlo8B549qD3/8wlGrRorWIWDE0fRJnOPu/dLpgYCBejGfhSVgYBECbnMQ4GLogMuWIWDEQcCNjgI8EHCjowAPBNzoKMDDyAEXrkLAiIOAWx0GOCDgVocBDgi41WGAg4EDLv61SNNdADUIuNlxgD0CbnYcYI+Amx0H2Bs34OI1CBhxEHC7AwFzBNzuQMDcsAGXL0HAiIOAGx4JWCPghkcC1gi44ZGAtVEDrliBgBEHAbc9FjBFwG2PBUwNGnDVAgSMMAi48cGAJQJufDBgiYAbHwxYGjPguvkEjDAIuPXRgCECbn00YIiAWx8NGBoy4MrxBIwwCLj54YAdAm5+OGBnxIBrpxMwwiDg9scDZgi4/fGAGQJufzxgZsCAq4cTMMIg4A4DACsE3GEAYIWAOwwArIwXcP1sAkYYBNxjAmCEgHtMAIwQcI8JgJHhAjYYTcAIg4C7jABsEHCXEYANAu4yArAxWsAWkwkYYRBwnxmACQLuMwMwQcB9ZgAmBgvYZDABIwwC7jQEsEDAnYYAFpoG/Py4S69287PXEn8gYKxLw4DPm/Rp67LEX2zmEjDCaBjwnKan4/XS6TCl2WOJvxAwVqZhwFM6flw+psljib8QMFamYcAp/fYHsyX+3EKgKYCBob4DG40lYITR9jHw4XS91OsxMAFjbSoCTt/9feD2y9/enI13tQQBY20qAt7nBnx5nq+vA0+7xz6vAxMw1qbmR+jjdP/V3HI+iVhNJWCEUfUY+Hj/kWw5AgYWqXsSa//lieWl9puUdofFSxgiYKxO89eBb89k3f/WTcDAIq0DntN8vlxOc9p7LHF//XCDgFqtA57S9fWjc9p4LHF//XCDgFqtA35/uenfl51yX5PKXz/cIKBW64Af3gNu/1ZKAsb6NA1497g/pKeXi+e5w1spCRjr0zTgjx+PU5qav5XSbiYBI4yWH6lzPO73u931qaz5br/BA6ZghDHOh9oRMFaoOuDD7vWH4t3JaD8/LRFuJgEjitqAt2+PatNkWrBDIZYjCRhRVAa8T9vza8D79GC2pQsBAwtVBvz6xqpvb9CwQcDAIpUBX398Xhhwxid4EDCwSGXAm9t34OP99zZfZXyCh30h0X9AAIrYPAY+TPd/u+jN8k/wIGBgkdpnoXeL/lMpN4s/wYOAgUVMXgdOu6dlhy79BA8CBhYZ5J1YtgMJGFEQcPdpQLmKgLM/2N11Vy0HEjCiIODu04ByY/wIbTyPgBEFAfcfBxSrDvjp+jLSHx/UXrdEuHkEjChMfp3wNWGrDf27RLx5BIwoKgN+/W/+vvzrMKVHqx39f4mA8wgYUVT/OuHbW6uO9z8mtmaJeOMIGGEY/Drh9wsmCBhYpPpH6PfvwKb/oVECBhap/m2k62Pg58n0E3UIGFhmhHdiBX9fF1COgCMMBAqN8E4sAsZqEXCEgUAhq4CfTd+KFfjncZ+JQJnagOf4j4EJGOtV/TrwO9NfZyBgYJHqt1I+XbbpdNqmZ7MtXQgYWMjgrZSPL999j8s+V7ZkiVjDnCYCZQwCPrx+qHvcx8AOtREwoqgMePfyI/QpbS7PBAx0UBnw4TXc6y/1h/3PixIwVqz2ZaTH1z89JNtfRiJgYJnVvxPLY7cEjCgIOMhMoETVbyN9+42kzrtqMMp1JlCCgIPMBErwI3SQmUCJ2teBbZ99/mmJKJO8hwIFrD6V0hYBA4tUBrxJZ7Ot/LJElEneQ4EClQGfd1vTX0P6YYkok7yHAgWqf4SO/Sx09J/wgToEHGYqkG/lLyMRMNaNgMNMBfKt+1MpnUojYESx7k+lJGCs3Lo/lZKAsXLr/lRKAsbKrftTKb1Ko2AEsepPpXTrjIARxKo/lZKAsXar/lRKAsbarfpTKQkYa1cRsOkLRz8vEWFK28lAlprPxJrmk+le/l0iwpS2k4EsFQFvXh75bn2+DRMwsEjNY+DTPL00PB8t9/O/JQJMaTsZyFL5JNbzw0vCm7315+oQMLBI/W8jPb2+ivRg+6O0SSCOlREwgrD4dcLz48vD4cliN78u0W1I89FADqPfBz4EfCcWAWP9+A4cbDSQY72PgT0jI2AEUfte6KxnoZ8fd9df/t/Nf/z2MAEDi9QE/Pz6OvC0+HXg8+bLh9De//VhAgYWafhOrDlNT2+xnw7T/d9+IGBgkar3Qj9mvYFjSp/fq4/3n/QiYGCRioBzPwXr2ytN9192MgjEtTECRhBGrwMv0fY7sGjAfGlAloYBvzwGPrz9/mGLx8CaAScKRpaGAb999M7N5u7D51EDTnwLRp6WAV+e5+vrwNPu0f91YMWAk+PstwV0vzw471z2xDQNuOESvpv0mZ48h1+u+Xq+vdT1q4PvYwvPvfueFwKOMz39c8F2vO/393TxvK+6Pra47tpx575fH5occtPwrZR6AacfLtmPdw1Y87GF686dpzcNuOlbKZUD9hzvez9VfGzhe2K8v242fhmp2Vsp9Z7ySL9cth7vWoHzlzbXRy6KD4vKBiu8kYOAfxvvez/1PTNyXx2cHxYVDi7dyx9vpUxfFS7xOax2QOvx6dc/GI9XDljuxKwrYL4DL53oOl43MbkT4/y0RungisfAzd5KqRZwuvtH0/EE3Gr42gJu+FZK536lA3bePFtvM7xibvlWmr2VUi3g/88znp/u/Ml6vFQFvidmfQE3W4KA74yTqsD3R5OGWyfglse3nu8bsPKXB9eAW552Am55fOP5/76k5jredbrw1m2nOz+tUTE3fsDuO5QKWPnLQ9PhQluvGkvAzglI30+FKnDduvOXzZqxpTtJafGbrQhYZbpwBY1Pu37AewJePM1wAeUvD7oBO3/ZrBpbvJPjdP+XCA2WMDi6+Qo/DZO5KwlXILz1urHlOznefwOlxRL1RzdfwTdg32/vvuN1h3uf9qqpFRvZp2X/ISUCZvrPk0S27vxTVd3U8M9Ch9/g36Nc70lU8Nsgja3XTg3fR/gN/j1K+H4qUoHr1p2/bFZOjd5Hg/05fw9TuZ8ScI/h1VMJWCfgHl8erMa3T0xkeu1QAibgu3OGD9j3vFQPJWD372FWCzjfk1zHC39lI2ACJmDd4QRctUSLfgn43hiBvfcYTsD+xzZf5Nc5Jgs435Ncx+sOJ2AClr6fCuy9y3AC9j+29SK/j4l/P/W9o67wqwMB+x/behHfgJ3vSboB9/nqQMDeh7ZfpVPAytPDb935pyqDoQTs/j3MZIU7EwavQHjrFkMJmIC9x+sO9z7tBjMJmICl995rOAE7H9p6lbtDqldwvie5jl/nVwcCdj2y/TLKAQvvvdtwAnY9sv0ywhH47l34xBBw5RJCAd+fETsCAi4ZQMCeRzZfRjlg4b33G07Ajgd2WEc4At+9C58YAq5cQijgv0bULeF8T+oYcOgTQ8CVSxDwoqN976fjBux7XqxmErD7s0D1SwgHLPyVjYBrlyDgZQdHvqO67r3nVwcCdjuuw0LKAQtP1x1uN5OA3Z8Fql5ixYkFPjEEXLsEAS88dtSAhb862M0k4MEDFp6uO9xwJgG7P41bu8SaE4t7Ygi4dolm/QYPuPMD7LgBC391MJxJwGMHLLz3zsM97qAE3GOlJYdHvZ/63lFX/dWBgH0Oa7+Sb8C9H2CH3Xvvrw4E7HNY+5WUAxbee+/hBOxxVBnfZ4HqVhAO2PfMELDXLmyWWFfAvq+lBb2juu69+1cHAvY4qsywAQtP1x1uO5KAK9daeGzMu1L/CmKeGAKuX4KAlx82YMDCXx1sR0YNuGW/wwYsPF13uPFIAq5cjIDrDot4Ygi4fgmVgJce6vo4Qjgx4RNDwOYHlSJgtem6w61HEnDdYgRceVTAE0PA9Us07bditcVHun4VE05M+MQQsPEx5QhYbLrucPORBFy1mnDAMbYufGII2PiYcsWrLT/Q9SQ4P8sQbu9BToz91gm4jHrAytPDbb3neVlNwG37HTLgjEPEKqic3nN4zFRi7spiuSgRKE9n664TLcTclcVyUe5JBdNzjhCroG5619s0Zioxd2WxHAHXHyF8YuyHx0wl5q4MlgsTgfJ0tl41MWbAjfsdMOCsA4T3Hms4ATtpEHCwu1KcrQufGPvhBFymbL28o3LXiBNBsOlxtk7AdkfUGS5g360H2nuo4QTshYDXOl1s+EoCbt1v2YKZB7n+deHEhE8MAVsdUGu0gH3/eqS9RxpOwG4IeK1/XWx404CfH3fp1W5+Nl5CImDhb0vKf33de2kY8HmTPm1tlyBgtcdu7f56pBMjHfCcpqfj9dLpMKXZconm/RJwz+nCJ8Z8eMOAp3T8uHxMk+USEgHHikB5Olsv30DZIW/Hpd/+UL0EAftOz7+2WhUUH9D/NuU7cBkC7jhd+MSYD2/7GPhwul4a8jFwsAiUp7P1ih1U1LL98iz05my4RPt+xwrY+U7Sv4LSIwLcpi0DvjzP19eBp92j7evAHQJu8UqX8P1UrILSIwIMbxqw1xIKAUeLQHk6W6/Zglcu6asQOzJdM9o9KeOQktOrVUHhIRFu0/YB7zcp7Q6mSxBwtPupWAWFh0QY3jDgt++rt2ey7j4JnblEj35bfI0RTizK9HBblw94TvP5cjnNaW+3xFoDDnI/9d16vL3HGB414CldXz86p43dEgQc7n6qPF1reOuA35+fsnwrpUDAZVt0vBGlExM+MfIBP7wHbPhWSgION3yEgGN8dWga8O5xf0hPLxfPs+FbKbv0S8Crna41vGnAH6/xpjTZvZVSIODCLfo9j+E+PUTAAU+McsCX43G/3+2uT2XNd/sl4KzDXKf7bl044CBf2FoG7LQEAXtOL/55y3O68ImxHk7AhXJWDRmB8nS2XrONYAH36XeUgIvPrlQFBcdFuU0JuBABd5wufGKshxNwId9znHHgiNPZes0+CDhz2Zj3pEUHlp9cqQryDwxzmxJwIQLuOF34xFgPlw+4U7++TzNkHDnkdLZesxECzls36D1pyZEVJ1eqguwj49ymBFyIgDtOFz4x1sMJuNDidaNGoDydrZf95eJDHJcgYL/pNedWeO+dh48VcK9+gwTsm5jw9LBbtx5OwIWWLly1Qd37ae/pYbdOwKV/09gAAdedW929+54Y4+kEXGjhwr4RRLon5R7tuvfAJ8Z46wRcSD9g5elsvfCvFx7itkS3fgcIuPLcuk4XPjHGwwm40LKVI0egPJ2tl/79skPcliBgt+m1p1apgqzDY92mBFyIgHtOFz4xxsMJuNCilUNHoDydrRcfECrgfv2uPuDqU6tUQc7xwW5TAi61ZO3Q9yTl6Wy9/AgCXrx27HuS8nS2Xn4EAS9eO/Y96e4AgzPrOV75xNhOJ+BSf68d7bZuO/3eiKESy5jQpsY4Affsd90BW5zZVQYc7gsbAZci4OLxY58Y2/NCwKX+XDzcF+u203sFHP7EEHDuX/Ox5oBNTuyvQwY/MbbnhYBL9Q04+rfIe0PiVbB4RrytKwfctd8/Vx/tntR2vO5wAs78W15aBNzpruQb8OgnxnY4AZf6Y3WBCH6bYnRehSpYOCXibUrApQi453ThE2M7nIBL9QxYITGlCppOJ+Ccv+Tn/vIK96RfxpidV8/xyifGdDoBl+oYcMh70sJBnBjb80LApe4uP+A9qe145RNDwBl/yQ8Bl4znxBifFwIudW/5mF+sG09vH7DIiSHgjL/kZ6UBG57VH0ZxYn6eVD5cN+DO/d5bX+ObmHTAzYdH3ToBl1pnwJZndVUBR/3CRsClfl8/6m3dePoPs1z3LnNiTLdOwKWaBCwcgfLefU8MAS/+O55+Xd83grD3pAXjXfeuc2JMty4bcO9+Vxmw8Un9/zjXMyN0Yiy3TsClfttA3Nv6z+HOAbueGaUTY7l1Ai7VJmDdCLzH6w4n4Ea7KNqAbwSB70l/jnfdu9SJsdw6AZdaX8Dmp1R3774nhoAD9PvLDnwjiHxP+mu86961Tozl1gm41OoCtj+lvuPTL5etZ8e+TQm41I87cNhW+vGi+WzvgF2ni50Yy/NCwKXWFrDv1oUDjv2FjYBL/bQDj12lHy7Zz5b72qN8YizPCwGXah6wXGGuiSmfGMvzIhpw/35/2oPLrjzvp86J+e79Y6jeiTE8LwRc7J89OG0qOU73Lcw1MeUTY3heCLjYGgL2Ha48XWU4ARf7/x689pQ8p7sOV56uMpyAizUN2O0KJ+/hnJifZw8dcIR+/78Jvz2lS3K8wskzgiuv6bonxvC8EHCxdOdPtgu5Xt0U42yW4MQQcIX06x88F5Ib74gTQ8AV0i+XgXYIuBgBoz/JgGPkkn68CLREwMXSD5eAtgi4mPPbEIEFCLjY+/vhYuwGYyLgYr5vMwKWaBrw8+Pu+haU3fxctUSMaK7vtYuxFQyrYcDnTfq0rVgiSDS+b+QDlmgY8Jymp+P10ukwpbl8iSDZkC/6axjwlI4fl49pKl+CcICbhgF/+47177ev9FXhEsBgFL8DA7hp+xj4cLpeqnwMDOCm5ctI2y8/I2/OLksAY2n7OvB8fR142j3WvQ4M4I3kO7EAvCFgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBAWNGAAixTUZR+s2Aa6GfeaD3zVza9591PZfQPdjHvNB77qBLwe417zga86Aa/HuNd84KtOwOsx7jUf+KoT8HqMe80HvuoEvB7jXvOBrzoBr8e413zgq07A6zHuNR/4qhPweox7zQe+6gS8HuNe84GvOgGvx7jXfOCrvr6AAZQjYEAYAQPCCBgQRsCAMAIGhBEwIIyAAWEEDAgjYEAYAQPCCBgQRsCAMAIGhBEwIIyAAWF9A56nNM3nrlvoo/i/ZaVu/36dh7vp36+58U3f9T60vV6VTc8t9HEcNeDj+3Ue7qZ/v+bWN33P+9Bzmo6X45SeO+6hj2Pa9d5CFy839tsdbrib/uOaW9/0PQOe0+Hln0/pseMe+tgPeJ0vr1d7e7sbj3bTf15z65u+Z8C7dLqM+d1on/a9t9BDmi+3u/FoN/3nNbe+6XsGfLtKAz4U3KXDQ5rm3tto7fj/23yYm/7zmlvf9ATcw+7tiYxt7320N2jAly8B2970BNxDSk+Xy3ke8Afp4QO2vukJuJ/zSC+j3Awf8Bu7m77nGZzGuxW/G/Ca367ygDf99+tqds37Pwt9GuapyH+MdP+9+fYs9FA3/QoDfry+GHhIwz0b+/IN6PVNhEPdf29ud9wBb/qPnz1sb3reidXD/HrPPb+9m2Eso74T6+OaW9/0XX+I24z6Ysp5ul7zgb7/vHv/0XG8m/52za1v+q4Bn6+/ktJzB728XvPNeC8ifQY83k3/9Zob3vTjPY0CrAgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBA8IIGBBGwIAwAgaEETAgjIABYQQMCCNgQBgBr1364uM/E4+14AZdOwJeNW7QIRDuWnHDDoGA14obdgjvAb/+++V/j2l6vFzmlObr/7vfpGnfcXcoR8BD+B7w4+vj4cP29Z+vBe+uj4+3XTeIQgQ8hO8Bb8+X/e2f0+VyeL103qZD3y2iCAEP4XvAz9dLp9ufd+n8cumcdh33h1IEPIT/PQa+fP3n54tM0MOtNgQCXitutSHcD7jfvlCLG28I9wLe8fSVMAIewr2An9J0vFz2PIkliYCHcC/gy/UF4TSduu0O5Qh4CHcDfn0nVnqgX0kEDAgjYEAYAQPCCBgQRsCAMAIGhBEwIIyAAWEEDAgjYEAYAQPCCBgQRsCAMAIGhBEwIIyAAWEEDAgjYEAYAQPCCBgQRsCAMAIGhBEwIIyAAWEEDAgjYEAYAQPCCBgQRsCAMAIGhBEwIOw/nvV5idfWT/IAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "plot without title" ] }, "metadata": { "image/png": { - "height": 360, - "width": 480 + "height": 420, + "width": 420 } }, "output_type": "display_data" @@ -404,10 +404,11 @@ "# of func_POSm4 into a list:\n", "func_POSm4_list <- function(t,x,klin,knonlin){list(func_POSm4(t,x,klin,knonlin))}\n", "# Kinetic parameters of the model, supplied as arguments to func_POSm4\n", - "klin <- c(165,0.044,0.27,550,5000,78,4.4,5.1)\n", + "# klin <- c(165,0.044,0.27,550,5000,78,4.4,5.1)\n", + "klin <- c(150, 0.04, 0.3, 500, 5000, 80, 4, 5)\n", "knonlin <- c(0.3,2)\n", "# Solve the system using deSolve\n", - "sol <- deSolve::ode(y = rep(1,4), times = seq(0,15,0.1), func = func_POSm4_list, \n", + "sol <- deSolve::ode(y = rep(1,4), times = seq(0,11,0.1), func = func_POSm4_list, \n", " parms=klin, knonlin=knonlin)\n", "# The solution of the 4-variable system is oscillatory, showing only the first \n", "# variable here\n", @@ -416,7 +417,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "e363256e", "metadata": { "vscode": { @@ -430,9 +431,6 @@ "text": [ "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", "(as 'lib' is unspecified)\n", - "\n", - "also installing the dependencies 'rematch', 'blob', 'DBI', 'gargle', 'cellranger', 'ids', 'rematch2', 'timechange', 'systemfonts', 'textshaping', 'selectr', 'conflicted', 'dbplyr', 'dtplyr', 'forcats', 'googledrive', 'googlesheets4', 'haven', 'lubridate', 'modelr', 'ragg', 'readxl', 'reprex', 'rstudioapi', 'rvest'\n", - "\n", "\n" ] }, @@ -440,48 +438,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", - " There is a binary version available but the source version is later:\n", - " binary source needs_compilation\n", - "selectr 0.4-2 0.5-0 FALSE\n", - "\n", - "package 'rematch' successfully unpacked and MD5 sums checked\n", - "package 'blob' successfully unpacked and MD5 sums checked\n", - "package 'DBI' successfully unpacked and MD5 sums checked\n", - "package 'gargle' successfully unpacked and MD5 sums checked\n", - "package 'cellranger' successfully unpacked and MD5 sums checked\n", - "package 'ids' successfully unpacked and MD5 sums checked\n", - "package 'rematch2' successfully unpacked and MD5 sums checked\n", - "package 'timechange' successfully unpacked and MD5 sums checked\n", - "package 'systemfonts' successfully unpacked and MD5 sums checked\n", - "package 'textshaping' successfully unpacked and MD5 sums checked\n", - "package 'conflicted' successfully unpacked and MD5 sums checked\n", - "package 'dbplyr' successfully unpacked and MD5 sums checked\n", - "package 'dtplyr' successfully unpacked and MD5 sums checked\n", - "package 'forcats' successfully unpacked and MD5 sums checked\n", - "package 'googledrive' successfully unpacked and MD5 sums checked\n", - "package 'googlesheets4' successfully unpacked and MD5 sums checked\n", - "package 'haven' successfully unpacked and MD5 sums checked\n", - "package 'lubridate' successfully unpacked and MD5 sums checked\n", - "package 'modelr' successfully unpacked and MD5 sums checked\n", - "package 'ragg' successfully unpacked and MD5 sums checked\n", - "package 'readxl' successfully unpacked and MD5 sums checked\n", - "package 'reprex' successfully unpacked and MD5 sums checked\n", - "package 'rstudioapi' successfully unpacked and MD5 sums checked\n", - "package 'rvest' successfully unpacked and MD5 sums checked\n", "package 'tidyverse' successfully unpacked and MD5 sums checked\n", "\n", "The downloaded binary packages are in\n", - "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\RtmpYFGT5P\\downloaded_packages\n" + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\RtmpcZaHJz\\downloaded_packages\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "installing the source package 'selectr'\n", - "\n", - "\n", "── \u001b[1mAttaching core tidyverse packages\u001b[22m ──────────────────────── tidyverse 2.0.0 ──\n", "\u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 1.1.4 \u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 2.1.6\n", "\u001b[32m✔\u001b[39m \u001b[34mforcats \u001b[39m 1.0.1 \u001b[32m✔\u001b[39m \u001b[34mstringr \u001b[39m 1.6.0\n", @@ -493,26 +459,17 @@ "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", "\u001b[36mℹ\u001b[39m Use the conflicted package (\u001b[3m\u001b[34m\u001b[39m\u001b[23m) to force all conflicts to become errors\n" ] - }, - { - "ename": "ERROR", - "evalue": "Error: object 'sol_long' not found\n", - "output_type": "error", - "traceback": [ - "Error: object 'sol_long' not found\nTraceback:\n", - "1. .handleSimpleError(function (cnd) \n . {\n . watcher$capture_plot_and_output()\n . cnd <- sanitize_call(cnd)\n . watcher$push(cnd)\n . switch(on_error, continue = invokeRestart(\"eval_continue\"), \n . stop = invokeRestart(\"eval_stop\"), error = NULL)\n . }, \"object 'sol_long' not found\", base::quote(eval(expr, envir)))" - ] } ], "source": [ "# Make beautiful plot using ggplot2 / tidyverse\n", - "install.packages(\"tidyverse\") # if not already installed\n", + "# install.packages(\"tidyverse\") # if not already installed\n", "library(tidyverse)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "e7722a33", "metadata": { "vscode": { @@ -528,7 +485,7 @@ "sol_for_plot <- as.data.frame(\n", " ode(\n", " y = rep(1,4),\n", - " times = seq(0, 15, 0.1),\n", + " times = seq(0, 11, 0.1),\n", " func = func_POSm4_list,\n", " parms = klin,\n", " knonlin = knonlin\n", @@ -545,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 7, "id": "079c187f", "metadata": { "vscode": { @@ -553,9 +510,18 @@ } }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "\"\u001b[1m\u001b[22mUsing `size` aesthetic for lines was deprecated in ggplot2 3.4.0.\n", + "\u001b[36mℹ\u001b[39m Please use `linewidth` instead.\"\n" + ] + }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "plot without title" ] @@ -1424,6 +1390,35 @@ " header=T,sep='\\t')\n", "ll" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9c2c967f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# ** Example 2: Negative feedback loop model from [Novak and Tyson, 2008], 3 variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7c994137", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Example 3: MAPK cascade model from [Huang and Ferrell, 1996], 3 variables\n", + "data(\"func_MAPK3\")" + ] } ], "metadata": { From cfc9fc94fd47c0295d13cf0c4cd4d7bce13d8450 Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Thu, 15 Jan 2026 12:31:54 +0100 Subject: [PATCH 04/12] Update Python, MATLAB and R notebooks (all results have not yet reproduced in R and MATLAB) --- .../model_3_complex_formation_extend_R.ipynb | 832 ++++++++++++++++++ examples/test_r.ipynb | 30 +- 2 files changed, 861 insertions(+), 1 deletion(-) create mode 100644 examples/model_3_complex_formation_extend_R.ipynb diff --git a/examples/model_3_complex_formation_extend_R.ipynb b/examples/model_3_complex_formation_extend_R.ipynb new file mode 100644 index 0000000..bc14c67 --- /dev/null +++ b/examples/model_3_complex_formation_extend_R.ipynb @@ -0,0 +1,832 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "53d51c8d", + "metadata": {}, + "source": [ + "## 0. Libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "b54689cf", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "suppressPackageStartupMessages({\n", + " library(deSolve) # ODE solver\n", + " library(numDeriv) # numerical Jacobian (jacobian)\n", + " library(dplyr)\n", + " library(tidyr)\n", + " library(purrr)\n", + " library(LoopDetectR)\n", + "})" + ] + }, + { + "cell_type": "markdown", + "id": "bf752a71", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "## 1. Configuration" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "2185219a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "colors <- c(\"#EE7733\", \"#0077BB\", \"#33BBEE\", \"#EE3377\", \"#CC3311\", \"#009988\", \"#BBBBBB\")" + ] + }, + { + "cell_type": "markdown", + "id": "a184ae0d", + "metadata": {}, + "source": [ + "## 2. Main reproduction" + ] + }, + { + "cell_type": "markdown", + "id": "39347b82", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "#### **Example 3: Model of complex formation with activation-deactivation cycle**\n", + "\n", + "The model of complex formation with activation-deactivation cycle has also been investigated in [4]. It is composed of the basic model of complex formation in that A\n", + "and B bind to form complex AB as described in section 1.2, together with an activation and deactivation of one of the complex-forming species, B and B∗. In addition\n", + "to the two reactions of complex formation and complex decomposition, the activating\n", + "reaction and the deactivation reaction are modelled using Michaelis-Menten reaction\n", + "kinetics. Thereby, the activation of B to B∗\n", + "is in addition stimulus-dependent (the\n", + "stimulus is modelled as a parameter, kn3), while the deactivation of B∗\n", + "to B depends\n", + "linearly on species A. The model contains four species, A, B, AB, B∗\n", + ", four rate coefficients, k1 . . . , k4, two activation constants, kn1, kn2, and a stimulus parameter, kn3." + ] + }, + { + "cell_type": "markdown", + "id": "480bf021", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\frac{dA}{dt} &= -k_1\\,A\\,B + k_2\\,AB ,\\\\[6pt]\n", + "\\frac{dB}{dt} &= -k_1\\,A\\,B + k_2\\,AB + k_3\\,A\\,\\frac{B^*}{B^* + kn_1} - k_4\\,kn_3\\,\\frac{B}{B + kn_2} ,\\\\[6pt]\n", + "\\frac{d(AB)}{dt} &= k_1\\,A\\,B - k_2\\,AB ,\\\\[6pt]\n", + "\\frac{dB^*}{dt} &= -k_3\\,A\\,\\frac{B^*}{B^* + kn_1} + k_4\\,kn_3\\,\\frac{B}{B + kn_2} .\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "We employed the following parameter set for the analyses: k1 = 0.021458, k2 =\n", + "0.000227335, k3 = 663.297, k4 = 0.000139797, kn1 = 55.5913, kn2 = 10.2194, and\n", + "values for the stimulus of kn3 = 1 (unstimulated) or kn3 = 20 (stimulated). The initial\n", + "conditions were set as A = 5, B = 300, AB = 0.0001, B∗ = 0.01.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f17d4fdf", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "#### " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "dc85fe5e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "model_complex_formation_act_deact_cycle <- function(t, y, params) {\n", + " A <- y[1]\n", + " B <- y[2]\n", + " AB <- y[3]\n", + " B_star <- y[4]\n", + "\n", + " k1 <- params[1]\n", + " k2 <- params[2]\n", + " k3 <- params[3]\n", + " k4 <- params[4]\n", + " kn1 <- params[5]\n", + " kn2 <- params[6]\n", + " kn3 <- params[7]\n", + "\n", + " dAdt <- -k1 * A * B + k2 * AB\n", + " dBdt <- -k1 * A * B + k2 * AB + k3 * A * (B_star / (B_star + kn1)) - k4 * kn3 * (B / (B + kn2))\n", + " dABdt <- k1 * A * B - k2 * AB\n", + " dB_stardt <- -k3 * A * (B_star / (B_star + kn1)) + k4 * kn3 * (B / (B + kn2))\n", + "\n", + " list(c(dAdt, dBdt, dABdt, dB_stardt))\n", + "}\n", + "\n", + "solve_complex_formation_act_deact_cycle <- function(initial_conditions, time_points, params) {\n", + " y0 <- c(A = initial_conditions[1],\n", + " B = initial_conditions[2],\n", + " AB = initial_conditions[3],\n", + " B_star = initial_conditions[4])\n", + "\n", + " out <- deSolve::ode(\n", + " y = y0,\n", + " times = time_points,\n", + " func = model_complex_formation_act_deact_cycle,\n", + " parms = params,\n", + " method = \"lsoda\"\n", + " )\n", + " out <- as.data.frame(out)\n", + " out\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1e74389f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "res_tab <- find_loops_vset(func_POSm4,vset=list(s_star),t=1,klin=klin,\n", + " knonlin=knonlin,max_num_loops=10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4ff19c48", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Parameters from supplementary material\n", + "initial_conditions_act_deact <- c(5, 300, 0.0001, 0.01)\n", + "\n", + "k1 <- 0.021458\n", + "k2 <- 0.000227335\n", + "k3 <- 663.297\n", + "k4 <- 0.000139797\n", + "kn1 <- 55.5913\n", + "kn2 <- 10.2194\n", + "kn3_unstimulated <- 1.0\n", + "kn3_stimulated <- 20.0\n", + "\n", + "params_act_deact_unstimulated <- c(k1, k2, k3, k4, kn1, kn2, kn3_unstimulated)\n", + "params_act_deact_stimulated <- c(k1, k2, k3, k4, kn1, kn2, kn3_stimulated)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "1857ac28", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "time_points_act_deact <- seq(0, 5000, length.out = 1001)\n", + "sol_act_deact <- solve_complex_formation_act_deact_cycle(\n", + " initial_conditions = initial_conditions_act_deact,\n", + " time_points = time_points_act_deact,\n", + " params = params_act_deact_unstimulated\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e20ac2df", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "Plot with title \"Concentration vs Time for Activation-Deactivation Cycle Model\"" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "matplot(\n", + " sol_act_deact$time,\n", + " sol_act_deact[, c(\"A\", \"B\", \"AB\", \"B_star\")],\n", + " type = \"l\", lwd = 2, log = \"y\",\n", + " xlab = \"Time\", ylab = \"Concentration\",\n", + " main = \"Concentration vs Time for Activation-Deactivation Cycle Model\"\n", + ")\n", + "legend(\"left\", legend = c(\"A\", \"B\", \"AB\", \"B*\"), lty = 1, lwd = 2, bty = \"n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c824b68e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "time_1 <- seq(-1000, 0, length.out = 500)\n", + "time_2 <- seq(0, 2000, length.out = 1000)\n", + "\n", + "# Continue from stabilized final state\n", + "y_stable <- as.numeric(sol_act_deact[nrow(sol_act_deact), c(\"A\", \"B\", \"AB\", \"B_star\")])\n", + "\n", + "sol_unstimulated <- solve_complex_formation_act_deact_cycle(\n", + " initial_conditions = y_stable,\n", + " time_points = time_1,\n", + " params = params_act_deact_unstimulated\n", + ")\n", + "\n", + "y_at_0 <- as.numeric(sol_unstimulated[nrow(sol_unstimulated), c(\"A\", \"B\", \"AB\", \"B_star\")])\n", + "\n", + "sol_stimulated <- solve_complex_formation_act_deact_cycle(\n", + " initial_conditions = y_at_0,\n", + " time_points = time_2,\n", + " params = params_act_deact_stimulated\n", + ")\n", + "\n", + "# Combine full trajectory\n", + "time_full <- c(time_1, time_2)\n", + "sol_full <- bind_rows(sol_unstimulated, sol_stimulated) %>%\n", + " select(time, A, B, AB, B_star)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c5272ed2", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAP1BMVEUAAAAil+ZDGSBNTU1h0E9oaGh8fHyHMkCMjIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnfU2vh4eHp6enw8PD///80lKvpAAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3di7ayOBpF0VSnoBERG/D9n7XlooIiB2UnGFhzjCr1/MrHbQuECOYCYDGz9ggAW0CQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIPA7QTofImNschIP9jDjX43RzQbT982wC2OSwedmDeHjCRl/68Tcev7A97MuP1hjorT4ekhfjntiTPH+PQv9TJCS28pnz8Khnu3UBN7+9aeC1C3uj4L0xYSMvXVybg0/sGDWpbe5c/x2SF+Oe/cV5cavBCnurX7Cr43ppXP7118K0nVpR8NxmjGELyZk7K2THx/+4/ezLnvMnvOXQ/p23COHm6QfCdL1a9hm1eVS1rNZ+LUxL0hyCwZ8/b4+DQfxQZA+sFqQrmtzWi/puFvQHsf9dC39aa3Z4+RqwB+5fg3bsnsaHdtn+eE6+Ye8/Ws9J/LrrD903yhVel0ecX57YY1Ny9c3DrYLZdTMxVO9DxnV7x7ZakzWrJ2vL5snh+b7tDrWW9LX47reUu2e1g9ZZKLrhzJr4vPrmHfsyxraG0JvdHqlXyZktNjTqn97OTY/huNVXg9pomywpg4rnuuxKv9YFi/zpmqe+B3362r2vKhUfiNI16/h7OlPt329dvN0fdLtWjcLpbTti7T/4vzyxsFSqpPX24U8jwRpsmbL9hfJrXI94IHRILVDL9PHyA7GvHXuVX8ZQm90+qXHVsbXYuMr4+j8GIzXuatj3gWprdF+Eb5fFnfX5ZCcx4fkfNyTwbyW+o0gXae0HP7l3vZw3/53mg3CbS0yee+FfXnjYCmZep/puucYV01wk9dlOF2zlbY18ybEh2Y3rIpfvgbMWJC6sexVGIx5K7sNy4wEqTc6/dJjK+NrMTO2Mo7Pj8F43ef1uyCNLZjXZdGfwuu/H07l65Ccj3v2+oWt8htB6i+kxnVFNddjpupo2hW3njN5s/p0s9AWzVoU3eZn1a5ZT2/sL4F6ptdfh+Xj78PlM12zU9zX43O7w3hpdlKit9PzGJHrCNQrUVQ0D5fnMW/dm2jNSJB6ozMs/bqivRQbXxlH58dgvE5t2dwOl1FvaHUza9quuZPLojeJjSh/HpLzcXfYbvejQTrcvjrSdsXt1u12v7peFM2r5nDq+qJqh5G8vLG/BPLXgsPlM13zJqrLdetvvYAOg+G+Ts9jRM6Dh8vzmN8HXz4N4jGE3ugMS7+uaC/F3h1njMyPwXh187r5mhmZwpcF835Z3OVRF6XU97iXL195Mj8aJNPNj3rSX1f5wdsfW2/78sb+y6p7f3lKm53rsaFO1Lw51t91p/YkyLGt+5ql0SC9PAzH/OmTY0HqvRyWHp/q0YeXlfF1fgzGa2SERoY2OkXjM7CteWj2ujLf4/46Kiq/EaSXBv7n1WhWkEbW/pdleYrevnm65k1ZH9/fjulu5xbt0xHep0Eyr5/8I0jD0t+vjGPzYzBeXwbp/Qy8z8jk3W6pw3HfepBeWu1Mb+vw+uU2mB12agE/L8vrpsREh6x4E6SJmnfXEBX3PYTq1DYdPTXbzQuSHVmq908+/vHNpPRLf70yjs6PwXh9FKTJZXGfrmrw717HfetBOj++1M+3A5/n45XmZfsYPx0j9Xat/ghS1L15bBlO17y7Lr9kkPv8+Wh6bpCSpwO3wSeTWxNEPt5yNSg9c2Ws1+Dz4K+j82MwXrcXpzlBmlwWrcO9DW98D9rtuG89SI+eDfW+fzLagta8r30ctNqd2naj09vv5ur1z71vsce/Tte8q5rtQPOtGt2PbJ/O880L0nDMW/cTAce2xalpcho5KB+WfprM0Yd2OGc7+Ovo/BiMV9aOx2mk1e51xk4ui1Y9l5uzt/WEHV6H5HTcy6232l2qXot/s2169L1rvr+elsn93Vn/xXn8jWnvz3Hz8tYe+vSv0zXv6q1Au+ZfV4q4bNb5p54n84I0HPP7wM8vc6TsD/Oe+l7ppwkZfTg8hvf46/j8GIzX2Hmk1xk7NkXjM/Bxtq6dMJ/jfh6e0lL6kSA1m5dW1H4j314P+9h3j+d+z4bc9F48vfG20vfmZMM2M/r5Xydr3tX1uhM/tyP+WT0bXh8GY956nDLMB2edX0ZnUPppQkYfyq7W4K/j82MwXt1bkuFseJ51Y1P0Zgbel3SzxfU67ps/IVtrf6XyaEpuXvf7vfUf6w5VJrn3tYvuL57fmAyPdy7FoT6tXnTb+Od/nax5Zx7Hy81BSvyycGYGaTDm3fg9dj6qpmk3Sqvx0RmUHk7IeLF60uPT019H58dwvMpDU+dpNiTjB5JTy+KmmcsmOVbex93hL5J+J0hojDXlQWTznVZxl4405UEj3/zPKHBXvh5xQSR56RutQ5B+jdMrC+zaLn5qjhuni3vX9nHxEyBkBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQ8BAkAwTmi7VcH5wVSgBKBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAwE6CZI1VDxLo2UeQcmNMLh4m0BNakP7X+ez1f01qDgs+z2te/yGwIP3vacJmvjb/ue7cLfg8r3n9h8CC9J2TSS+pOWkHCvSEE6QFl+mLzflyNrHbccauBROkBde7rJomO2sqx2ONHQsmSAvUe3YX9u3g0h6CFF337C6XwkTSoQI9OwhSed/vK5WDBXp2EKTjPUhH5WCBnh0EKeq2RCX7dnBm+0EqTNI9i00hHC7Qs/0gpfdednnTegc4sP0gWTv2FJDafpAADwgSIECQAAGCBAj4DFJ1MCbumtCmb6dOkBAYj0GqbNO9oD2rQ5CwKR6DlJrsmqbMNr8LIkjYFI9Ban/sfSltVBIkbIzHIN2yU8UxQcLGeAxSdP+JahQTJGyLxyBl3RWx6n7Ysc8gtb+hiM/SgQJ9Ppu/03t68neXKVlaYnxoHfp+wxmvJ2SL2w8aLuXBa5Dq/6dcRgju7KFnQ7f1m94IAkvsKUj8iALOeA3S+Zi0nRvSPw78tReIvO3aZV+POPAHn12Eot4KP328or1AZPdP/DwW7njtImRPbcNZmdvp1dpJq11Mqx2c8dpF6LEmF9MHLC6Oka7h5UwSXFmhi9DrC1mJycIF7d9wZj9bJNq/4ZDfY6S8u1Sj72Ok5qGi/RvO+Gz+jnuta9HkPVZcBKmKabeDM37PI6XNeSSbHL84j/S9W3gtN0iCK/vo2dDEKCVHcGYPQQKc8x+kOW1nBAmBIUiAAEECBAgSIOA3SNO9tCUlgDX8TpD+/DUE8LvYtQMECBIgQJAAAYIECOyki5C9/4Si+9k5P5aF1D6CVF/Z9X6HsxYXcICS9yDlSb1vl5QOS7w6mPR24XEuuwoXfAcpbs8SGTuZJHWQrjt2dvh7c05VQcpzkDITV/U6/LgzhbzEiJNJr9ugUztoLrsKBzwHyZqqXZU/v4rQ9xeIvG4Gz5dztzPHZVfhgucgNbt1XwVpXo5Gh9pe9cS29znr3sflGyDlOUhRt0UqTOSqxKtTE5tu364LEpddhdQ6x0i5nd610gYpai6x2mWXy67CBd+tdslti+CuxLPyvt9XtxRy2VW4sMp5JJOcXJZ4crwH6XjhsqtwYwc9GyLTXd+12bfjsqtwYftBKsztzrVx3S+Iy67Che0HKb31srvkdXhuu3lcdhVK2w+StYOnXYy47Cqkth8kwAOPQZrTmWdhCWAlHoOUESRsls9du8LOPQlKkBAYr8dIxdw2Z4KEwPhtbMhm/sKbICEwtNoBAgQJECBIgABBAgQIEiCwhyB1PyU8uxg20NhPkJqLq5bVddjV9NUpgc/tI0j1/5uLq8YmiRJ+ZQ65/QSpfSgO5nDmJxRQ21OQ6h8m5Ta7/9APkAknSN9fILJ/cdXj4XI4uhx17FMwQZqXozdBanCRBrgTTJCWDK1r/+biqnBmH0Gq/8/FVeHQfoLExVXh0I6CxMVV4c6OgsTFVeHOfoLExVXh0D6CxMVV4dh+gsTFVeHQHoIEOEeQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQIEiAAEECBAgSIECQAAGCBAgQJECAIAECBAkQ8BikGTdgWVoCWInHIGUECZvlc9eusHNvB0GQEBivx0jF3KtvEyQExm9jQ2bm3TWPICEwtNoBAgQJECBIgIDXIJ2PSdPynaR/3BaZICEwHoNURb2zSNMN4QQJgfEYpNTYU9toV+Z2uiGcICEwHoNke23fxfSNkQkSAuO1r927F7ISwErYIgECfo+R8rJ5xjEStsZn83fca7WLJm8xTpAQGL/nkdLmPJJNjpxHwrbQswEQIEiAgP8gTTd8S0oAvhEkQIAgAQIECRDwG6R51xAiSAjO7wRp9rW6gN/Drh0gQJAAAYIECBAkQIAuQoAAQQIEvAcpT+p9u6R0WALwzneQ4vYskbGTSSJICIznIGUmruogZebgqgSwAs9BsqZqm+24ihA2xXOQmt06goTN8RykqNsiFSZyVQJYwTrHSLk1masSwAp8t9olXEQfW7TKeSSTnFyWALyjZwMgQJAAAYIECBAkQIAgAQJebzQ2+/omBAmB8RikjCBhs3zu2hV2+jSsoASwDq/HSMX0ffoUJYBV+G1syHq3kXVUAlgDrXaAQGhB+vdfHnlc7/GtwIL0bzdBPPK4xuN7gQUJ+E0ECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIg4DVI52Niakl6dlUCWIXHIFWReYidlABW4jFIqbGnonlW5takLkoAK/EYJGuK+/PCWBclgJV4DJIx717ISgArYYsECPg9RsrL5hnHSNgan83fca/VLqqclADW4fc8UtqcR7LJkfNI2BZ6NgACBAkQoIsQIEAXIUCALkKAACdkAQG6CAECbJGA2j/dQ+f2auyvY+gihGD9ucbP/+vtH/8ZvHX8r6PoIoTf8mkObs8H7/z4r1MZmYUuQliHIB1+R3gaPRvg3FhmgkjHBwgShEY3M+OZ2Rj/QZpu+JaUgB8zNzO7QJDwoanDmf0iSPjbu4biVUfqtywN0vHeE3X2xwlSOMb22DBmYZCOjzNDsz46890EaUUjWx/8aWGQrMk++uhEkEzf52OFxYZtbCuPTGgWBumLVZ5du5/zdOyz6riEamGQEjPZ1Wf04wTpdyg7yezbwiCVNv6jt8/rxwnSDxi0Iqw9MluweNfu48MagvQDSI+a/yB9WgI6bH+coa/dfrAj55D3IOVJvfFKSocl8IzmBOcWB+lU/1wvOc39cNzuBRo7mSSCJMVmyL2lQbr96nX6OnV3mYmrOkiZOYjHCq/YkfNnYZAyY/PrQz63h4M1Vdtsx1WEnOOIyKeFQYq6KwMVJpr3WXMhSH4QIq9UXYRmNn9H3Rbpj+ARpCVI0ApkW6TJ69TddcdIf+0KEqQF2BStwfMx0iXhIvrOkKAVeW61a88j/dlcTpA+R9PCqpafR5oTjGUl8DditDK6CG0CKVobQQodEfoJC4LUnhOi9/e62Bb9BoIECHjctTNDLkrsC9uiH+IxSBlBUqKZ7qeougjZGT0bCjv3bBNB+gsx+jGiIJWzjpGK6fv0jZfAGGL0YxYEKR/sqc3q/Z31biMrHitgTUu2SFE/R59elUs9VvvBxugX+b/S6qcl8IQg/SJ6NgACqiCdk6Vj8mcJsDH6XUuDlNKzwRuavH/YwiA9cpTLRulCkEYRo1+2+P5Ip0tsyjI2tNo5Ro5+mqDV7njdGhXzfyL7aQm0yNFPEwQpr6/XwDESdm1hkJLrrl1posuZIGHXFgYprwPUXABl8hLES0qAvboALG3+PtavDmZub9RvSuwezQwBoGcDILD0GEm7JRorAQSATqu/jb26QCy+9nclG5U3JfaNIAViYZCqJJZ2aRgpsWu0M4Ri8a4dnVbdoZdqOAjSDyNG4aD5+4cRpHAQJEDA53XtvisBBMDrde2+KgEEwO917RyO1dZwfBQWrmv3owhSWOgiBAjQagcIECRAYPEP+yJ6NshxfBSehUE60kXIAYIUnsXXtctko/KmxP7QVTVAtNr9HnIUoMWX4+KHfWpskEK0MEil5Yd9YuQoSPwe6deQoyARJECAE7KAAEECBBYHKU/qvbqkFI3PWIk94QgpUEuDFLeHR8ZKk7TbINFkF6qFQcpMXNVByrgbhQQ5CtXiLkJV27uBVjvsmqCLEEECBNf+rjNUcM0G7JrmGCkX9wInSAjM0la7pOvXMOOm5mZIPFZbQFNDuCTnkUxymvG5jCD9gSCFy2fPhsLO2G4tKxE0TiIFzGsXoWLuPZv3GqS1xwBfWxqkKq0v+m3Teb/vy0zxeYndIEgBW/zDvu4sEl2EFmPPLmQLgxSbQ70tqlKTqMboucRukKOQqS5+Qs+GxQhSyAR97WrVrCCdj+1ppyT940IPuwwSQrYwSKlpLn5yjme0x1X9u1dMN4QTJARG8nukeT0bUmNPbaNdmdvp4BEkBGbxeaRTvbcWz+lpZ3tt34WZvFUmQUJgPJ6QNaOtFNISAaOpIWweg8QWaQpBCpvHIF2PkfL2tC3HSK8IUth83h8p7rXaRZN9inYYJITN6/2RzmlzHskmR84jYVu4PxIgwP2RAIE17o/0d/p2FySaGkK3xv2RCNILghS6NW7rMv7e2Rd02CKCFLrfCdLCsQobQQrdGrd1IUgvCFLoCNIvIEfBW977O557XbuvS2wfQQqex98jtWbdmIwgITCLr/1t8+vD/Gt/z7sx2d6ChOAtvhtF+9OIuXejmHljMoKEwHi+itDMG5MRJARGtkWa/KHe47Nm1o3JCBIC4/kYaeaNyXYWJNoawue51W7mjckIEgKjuYrQ/PNI825MRpAQGO89G2bdmGxnQUL41ugi9BMlAKVFQSoPzZFOFal/b06QEJglQSptezOXXH17JIKE0CwJUtTeHKm5hv68jg0fl3hxOy7/p7OlvyJgC4KUm+P9b4mR9v9+O1a3le6fwSq4jb8iZAuCdOhd+KSccSLJDInHCljTgiB9cFH8RkaQsFkLgmQ/vcBdYef+aokgITCLdu3y+9/yWTdjLmbc129QAgjEgiAVj0bv0s5rbMh6d3YRjxWwpiXN36mxxzoYxdHO/6n5ZyWAMCzq2fC4F8Xk712XlACCsKyvXZk21xA6avs1ECQEh06rgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgIDPIFUHY+K8G8jkUAgSAuMxSJU1taQdCEHClngMUmqya5oyGzcDIUjYEo9Bsu0HSxuVBAkb4zFIt+xUcUyQsDEegxSZ6vYsJkjYFo9Bysyhe1aamCBhU3w2f6f39OSGIGFTvJ6QLZLbs/JAkLAl9GwABAgSIOA1SOdj0nZuSM+uSgCr8NlFKDIPsZMSwEq8dhGyp6J5VubWpC5KACvx2kWouD8vjHVRAljJCl2EXl/ISgArYYsECPg9RsrL5hnHSNgan83fca/VLqqm3kmQEBi/55HS5jySTY6cR8K20LMBECBIgMAaQZpu+paUAPwiSIDA7wTJ9C0tAfj1O0GSlgD8IkiAAEECBGj+BgS8BylP6g1SUjosAXjnO0hx2yZn7GSSCBIC4zlImYmrOkiPi0XKSwAr8Bwka6q2rYEf9mFTPAep2a0jSNgcz0GKui1SYSJXJYAVrHOMlNv6pmNuSgAr8N1ql3BdO2zRKueRTHJyWQLwjp4NgABBAgQIEiBAkAABggQIeL329+xfkxMkBMZjkDKChM3yuWtX2OnTsIISwDq8HiMV05fOV5QAVuG3sSHr3dnFUQlgDbTaAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIEVghSZk2UuS0BeOYzSEVibHY5mlrspgSwDo9BKpoEpeZQXcrETG6TCBIC4zFIB5NeLqmx9fPKRC5KACvxGCTTfNAkvRfqEsBKvAfp1O7TtRsmdQlgJV537a5HR62q2c3TlwBW4jFIlb3vz5npDRJBQmi8nkdKb/Gxk9sjgoTg0LMBECBIgIDXIJ2PSXNSNknPrkoAq/DZ2BCZB7oIYVM8Bik19lQ0z8rc0vyNTfEYJGuK+/OCE7LYFO89G8ZeyEoAK2GLBAj4PUbKy+YZx0jYGp/N33Gv1S6qpt5JkBAYv+eR0uY8kk2OnEfCttCzARAgSIDAGkGabvqWlAD8IkiAwO8EyfQtLQH49TtBkpYA/CJIgABBAgRo/gYEvAcpT+oNUlI6LAF45ztIcdsmZ+xkkggSAuM5SJmJqzpImTm4KgGswHOQrKnatgZ+2IdN8RykZreOIGFzPAcp6rZIBbd1waasc4yUW240hk3x3WqXcF07bNEq55FMcnJZAvCOng2AAEECBAgSIECQAAGCBAh4vfb37F+TEyQExmOQMoKEzfK5a1fY6dOwghLAOrweIxXTl85XlABW4bexIevd2cVRCWANtNoBAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgRCC5IBVvTFKqv8iKzE2vMRO/f5KvvFWq7Drh0CQ5AAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRAgSIAAQQIECBIgQJAAAYIECBAkQIAgAQIECRD40SABgfliLdcH5xdrb7LUJicq1PlHkMIttcmJCnX+EaRwS21yokKdfwQp3FKbnKhQ5x9BCrfUJicq1PlHkMIttcmJCnX+EaRwS21yokKdfwQp3FKbnKhQ5x9BCrfUJicq1PlHkMIttcmJCnX+EaRwS21yokKdfwQp3FKbnKhQ5x9dswEBggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiDgN0jZrVxqjU2riacK/Quiu6sy4HLYHifI43K6lXI9bVn0x5QsrOQ1SMXtMv9xM9Oi909F1e7Lxl2VAZfD9jhBHpfTrZTraUubAdnq7eCXVvIZpMJ2c+1sbFG/Or97qilnkttTh1X6XA774m+CPC6neynH01aYQ1Vv/Q7OJspjkDIT3zbdJr/+/2SO756K6t2H5LBKn8thX7xNkMfl9CjleNqStkpdzNFE+byqRXrp5lpiykv3JTT+VCIz2e2pwyp9Lod98TZBHpfTo5SfaauLOZooj0EqLre51nsYfyqRmPxwPX58X1DO5bAv3ibI43J6lPIybZWJnU2U31Y7z0FqxG8LyjkPkq8J8ric7kHyMG1Zvf9GkD4vdrp+CaX1PsM2guRvgvwHyce0lTa5OJuoDQepVdVNmtsIUsvHBPkPUsvptFU27g0svCD1bxPdPdrHWI8/lRV0V2WMy2E/eJggL8tpUKr3ylWpuD1J5GiiVglS20RSPlpLnp/KCnY1HVQZ43LYDx4myMtyGpTqvXJTqozisnniaKJW2bU7No32uUnfPZWwpj6P3cwbh1X6XA774nOCPC6n+8bP7bTlTTtGzdFErRIkPz0b0nquVM2Ztm30bPA3QR6XU1fK8bSV9xxtoGfD5bEdj+5tnW+eKlS2GV7qtsqAy2H7nCCPy6kr5XjaDubRl8/NRK0TpKrpajvxVKIeXpS5rvJc0dWwLx4nyONy6pdyN22mFyQ3E+U3SMBGESRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIEKQQmJ4Ft7CHOyyUEBCkn8dCCQYB+mUsnGAQpF/GwgnGLUj14/W/o7HHyyU1pr0VdxYZm604dntHkIIxDNKxPl7K4/r/dZKS5vgpXnUEd40gBWMYpLi6ZN3/7eWS18+q2OTrjuKOEaRgDIN0bp6V3evEVNdnlUlWHL99I0jBeDpGuvT//2gcxzqY88EgSL+MOR+M6SCtN16osQCCMRWkhGaGlRGkYEwF6WRscblkNDashiAFYypIl+aEkrHlamO3dwQpGJNBqns2mAM5Wg1BAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAk9m1/gAAAA/SURBVAQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJECBIgABBAgQIEiBAkAABggQIECRAgCABAgQJEPg/lk1WgtKVfhUAAAAASUVORK5CYII=", + "text/plain": [ + "Plot with title \"Concentration vs Time (Unstimulated then Stimulated)\"" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "matplot(\n", + " sol_full$time,\n", + " sol_full[, c(\"A\", \"B\", \"AB\", \"B_star\")],\n", + " type = \"l\", lwd = 2, log = \"y\",\n", + " xlab = \"Time\", ylab = \"Concentration\",\n", + " main = \"Concentration vs Time (Unstimulated then Stimulated)\"\n", + ")\n", + "legend(\"topleft\", legend = c(\"A\", \"B\", \"AB\", \"B*\"), lty = 1, lwd = 2, bty = \"n\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "0ab26b0c", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Unstimulated conditions:\n", + "Jacobian matrix:\n", + " [,1] [,2] [,3] [,4]\n", + "[1,] -6.3289739 -3.853766e-06 0.000227335 0.000000000\n", + "[2,] -5.5766599 -3.869107e-06 0.000227335 0.002138019\n", + "[3,] 6.3289739 3.853766e-06 -0.000227335 0.000000000\n", + "[4,] -0.7523141 1.534086e-08 0.000000000 -0.002138019\n", + "Signed Jacobian matrix:\n", + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 -1 1 0\n", + "[2,] -1 -1 1 1\n", + "[3,] 1 1 -1 0\n", + "[4,] -1 1 0 -1\n" + ] + } + ], + "source": [ + "# Numerical Jacobian + signed Jacobian\n", + "vf <- function(y, params) {\n", + " # deSolve model returns list(c(...)); unwrap\n", + " model_complex_formation_act_deact_cycle(t = 0, y = y, params = params)[[1]]\n", + "}\n", + "\n", + "# Evaluate Jacobian at the stabilized endpoint (same as Python: sol_act_deact.y[:, -1])\n", + "y_eval_un <- as.numeric(sol_act_deact[nrow(sol_act_deact), c(\"A\", \"B\", \"AB\", \"B_star\")])\n", + "J_un <- numDeriv::jacobian(func = function(x) vf(x, params_act_deact_unstimulated), x = y_eval_un)\n", + "Jsign_un <- sign(J_un)\n", + "\n", + "# Evaluate Jacobian at end of sol_unstimulated (t=0-) for stimulated params (Python used sol_unstimulated.y[:, -1])\n", + "y_eval_st <- as.numeric(sol_unstimulated[nrow(sol_unstimulated), c(\"A\", \"B\", \"AB\", \"B_star\")])\n", + "J_st <- numDeriv::jacobian(func = function(x) vf(x, params_act_deact_stimulated), x = y_eval_st)\n", + "Jsign_st <- sign(J_st)\n", + "\n", + "cat(\"Unstimulated conditions:\\n\")\n", + "cat(\"Jacobian matrix:\\n\"); print(J_un)\n", + "cat(\"Signed Jacobian matrix:\\n\"); print(Jsign_un)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b7ddb306", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "find_loops_signed <- function(Jsign, max_len = 4) {\n", + " n <- nrow(Jsign)\n", + " nodes <- 0:(n - 1)\n", + "\n", + " has_edge <- function(i, j) Jsign[i + 1, j + 1] != 0\n", + " edge_sign <- function(i, j) Jsign[i + 1, j + 1]\n", + "\n", + " loops <- list()\n", + "\n", + " # length 1: self loops\n", + " for (i in nodes) {\n", + " if (has_edge(i, i)) {\n", + " loops <- append(loops, list(list(loop = c(i, i), length = 1L, sign = as.integer(edge_sign(i, i)))))\n", + " }\n", + " }\n", + "\n", + " # length 2..max_len\n", + " if (max_len >= 2) {\n", + " # length 2: i -> j -> i, i!=j\n", + " for (i in nodes) for (j in nodes) if (i != j) {\n", + " if (has_edge(i, j) && has_edge(j, i)) {\n", + " s <- edge_sign(i, j) * edge_sign(j, i)\n", + " loops <- append(loops, list(list(loop = c(i, j, i), length = 2L, sign = as.integer(s))))\n", + " }\n", + " }\n", + " }\n", + "\n", + " if (max_len >= 3) {\n", + " # length 3: i -> j -> k -> i, all distinct\n", + " for (i in nodes) for (j in nodes) for (k in nodes) {\n", + " if (length(unique(c(i, j, k))) == 3) {\n", + " if (has_edge(i, j) && has_edge(j, k) && has_edge(k, i)) {\n", + " s <- edge_sign(i, j) * edge_sign(j, k) * edge_sign(k, i)\n", + " loops <- append(loops, list(list(loop = c(i, j, k, i), length = 3L, sign = as.integer(s))))\n", + " }\n", + " }\n", + " }\n", + " }\n", + "\n", + " if (max_len >= 4) {\n", + " # length 4: i -> j -> k -> l -> i, all distinct\n", + " for (i in nodes) for (j in nodes) for (k in nodes) for (l in nodes) {\n", + " if (length(unique(c(i, j, k, l))) == 4) {\n", + " if (has_edge(i, j) && has_edge(j, k) && has_edge(k, l) && has_edge(l, i)) {\n", + " s <- edge_sign(i, j) * edge_sign(j, k) * edge_sign(k, l) * edge_sign(l, i)\n", + " loops <- append(loops, list(list(loop = c(i, j, k, l, i), length = 4L, sign = as.integer(s))))\n", + " }\n", + " }\n", + " }\n", + " }\n", + "\n", + " # Deduplicate cycles up to rotation/reversal can be non-trivial.\n", + " # For n=4 and this example, we keep as-is and then distinct by exact sequence.\n", + " df <- tibble(\n", + " loop = map(loops, \"loop\"),\n", + " length = map_int(loops, \"length\"),\n", + " sign = map_int(loops, \"sign\")\n", + " ) %>%\n", + " distinct(loop, length, sign) %>%\n", + " arrange(length, loop)\n", + "\n", + " df\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "010b9be1", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "loop_summary_table <- function(loop_df) {\n", + " loop_df %>%\n", + " mutate(length = as.integer(length),\n", + " pos = sign > 0,\n", + " neg = sign < 0) %>%\n", + " group_by(length) %>%\n", + " summarise(\n", + " total = n(),\n", + " pos = sum(pos),\n", + " neg = sum(neg),\n", + " .groups = \"drop\"\n", + " ) %>%\n", + " arrange(length)\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "1a5a32c8", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Unstimulated conditions:\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[90m# A tibble: 25 × 3\u001b[39m\n", + " loop length sign\n", + " \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m\n", + "\u001b[90m 1\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m\n", + "\u001b[90m 2\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m\n", + "\u001b[90m 3\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m\n", + "\u001b[90m 4\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m\n", + "\u001b[90m 5\u001b[39m \u001b[90m\u001b[39m 2 1\n", + "\u001b[90m 6\u001b[39m \u001b[90m\u001b[39m 2 1\n", + "\u001b[90m 7\u001b[39m \u001b[90m\u001b[39m 2 1\n", + "\u001b[90m 8\u001b[39m \u001b[90m\u001b[39m 2 1\n", + "\u001b[90m 9\u001b[39m \u001b[90m\u001b[39m 2 1\n", + "\u001b[90m10\u001b[39m \u001b[90m\u001b[39m 2 1\n", + "\u001b[90m# ℹ 15 more rows\u001b[39m\n", + "\n", + "Loop summary for unstimulated conditions:\n", + "\u001b[90m# A tibble: 4 × 4\u001b[39m\n", + " length total pos neg\n", + " \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m\n", + "\u001b[90m1\u001b[39m 1 4 0 4\n", + "\u001b[90m2\u001b[39m 2 8 8 0\n", + "\u001b[90m3\u001b[39m 3 9 3 6\n", + "\u001b[90m4\u001b[39m 4 4 0 4\n" + ] + } + ], + "source": [ + "cat(\"\\nUnstimulated conditions:\\n\")\n", + "res_tab_complex_loop_rep <- find_loops_signed(Jsign_un, max_len = 4)\n", + "print(res_tab_complex_loop_rep)\n", + "\n", + "cat(\"\\nLoop summary for unstimulated conditions:\\n\")\n", + "print(loop_summary_table(res_tab_complex_loop_rep))" + ] + }, + { + "cell_type": "markdown", + "id": "c5046567", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "#### **2.7. Search time where signed Jacobian structure changes**" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "602f9742", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "At time 234.23 after the stimulus, the signed Jacobian structure changes.\n", + "Jacobian matrix at this time:\n", + " [,1] [,2] [,3] [,4]\n", + "[1,] -6.31881288 -3.859960e-06 0.000227335 0.000000000\n", + "[2,] 0.02316377 -4.167731e-06 0.000227335 0.002105474\n", + "[3,] 6.31881288 3.859960e-06 -0.000227335 0.000000000\n", + "[4,] -6.34197665 3.077716e-07 0.000000000 -0.002105474\n", + "Signed Jacobian matrix at this time:\n", + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 -1 1 0\n", + "[2,] 1 -1 1 1\n", + "[3,] 1 1 -1 0\n", + "[4,] -1 1 0 -1\n", + "Loop summary at this time:\n", + "\u001b[90m# A tibble: 4 × 4\u001b[39m\n", + " length total pos neg\n", + " \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m\n", + "\u001b[90m1\u001b[39m 1 4 0 4\n", + "\u001b[90m2\u001b[39m 2 8 6 2\n", + "\u001b[90m3\u001b[39m 3 9 6 3\n", + "\u001b[90m4\u001b[39m 4 4 0 4\n" + ] + } + ], + "source": [ + "Jsign_ref_un <- Jsign_un\n", + "Jsign_ref_st <- Jsign_st\n", + "\n", + "t_change <- NA_real_\n", + "J_change <- NULL\n", + "Jsign_change <- NULL\n", + "summary_change <- NULL\n", + "\n", + "# Use a modest stride to avoid heavy computation; set stride=1 for exact match (slower).\n", + "stride <- 1L\n", + "\n", + "for (idx in seq(1, nrow(sol_full), by = stride)) {\n", + " t_now <- sol_full$time[idx]\n", + " y_now <- as.numeric(sol_full[idx, c(\"A\", \"B\", \"AB\", \"B_star\")])\n", + "\n", + " params_now <- if (t_now < 0) params_act_deact_unstimulated else params_act_deact_stimulated\n", + " J_now <- numDeriv::jacobian(func = function(x) vf(x, params_now), x = y_now)\n", + " Jsign_now <- sign(J_now)\n", + "\n", + " Jsign_ref <- if (t_now < 0) Jsign_ref_un else Jsign_ref_st\n", + "\n", + " if (!isTRUE(all.equal(Jsign_now, Jsign_ref))) {\n", + " t_change <- t_now\n", + " J_change <- J_now\n", + " Jsign_change <- Jsign_now\n", + " summary_change <- loop_summary_table(find_loops_signed(Jsign_now, max_len = 4))\n", + " break\n", + " }\n", + "}\n", + "\n", + "if (!is.na(t_change)) {\n", + " cat(sprintf(\"\\nAt time %.2f after the stimulus, the signed Jacobian structure changes.\\n\", t_change))\n", + " cat(\"Jacobian matrix at this time:\\n\"); print(J_change)\n", + " cat(\"Signed Jacobian matrix at this time:\\n\"); print(Jsign_change)\n", + " cat(\"Loop summary at this time:\\n\"); print(summary_change)\n", + "} else {\n", + " cat(\"\\nNo signed Jacobian structure change detected on the scanned grid.\\n\")\n", + "}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "cae9464f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "Plot with title \"Concentration vs Time (before/after Jacobian sign change)\"" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "if (!is.na(t_change)) {\n", + " matplot(\n", + " sol_full$time,\n", + " sol_full[, c(\"A\", \"B\", \"AB\", \"B_star\")],\n", + " type = \"l\", lwd = 2, log = \"y\",\n", + " xlab = \"Time\", ylab = \"Concentration\",\n", + " main = \"Concentration vs Time (before/after Jacobian sign change)\"\n", + " )\n", + " usr <- par(\"usr\")\n", + " rect(xleft = min(sol_full$time), ybottom = usr[3], xright = t_change, ytop = usr[4],\n", + " border = NA, col = rgb(0, 0, 1, alpha = 0.1))\n", + " rect(xleft = t_change, ybottom = usr[3], xright = max(sol_full$time), ytop = usr[4],\n", + " border = NA, col = rgb(1, 0, 0, alpha = 0.1))\n", + " matlines(sol_full$time, sol_full[, c(\"A\", \"B\", \"AB\", \"B_star\")], lwd = 2)\n", + " legend(\"topleft\", legend = c(\"A\", \"B\", \"AB\", \"B*\"), lty = 1, lwd = 2, bty = \"n\")\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "7f0b9cdd", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "Plot with title \"Dynamics of B\"" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot(sol_full$time, sol_full$B, type = \"l\", lwd = 2,\n", + " xlim = c(-999, 2000),\n", + " xlab = \"Time\", ylab = \"Concentration\",\n", + " main = \"Dynamics of B\")\n", + "axis(1, at = c(0, 2000))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24150e8f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "ce89ef50", + "metadata": {}, + "source": [ + "## 3. Additional features" + ] + }, + { + "cell_type": "markdown", + "id": "3a0acda4", + "metadata": {}, + "source": [ + "### 3.1. Add subject ID to make the loop result more comprehensible" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "5d78b4f6", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[90m# A tibble: 25 × 4\u001b[39m\n", + " loop length sign loop_subject\n", + " \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \n", + "\u001b[90m 1\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m \u001b[90m\u001b[39m \n", + "\u001b[90m 2\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m \u001b[90m\u001b[39m \n", + "\u001b[90m 3\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m \u001b[90m\u001b[39m \n", + "\u001b[90m 4\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m \u001b[90m\u001b[39m \n", + "\u001b[90m 5\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", + "\u001b[90m 6\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", + "\u001b[90m 7\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", + "\u001b[90m 8\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", + "\u001b[90m 9\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", + "\u001b[90m10\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", + "\u001b[90m# ℹ 15 more rows\u001b[39m\n" + ] + } + ], + "source": [ + "id_to_subject <- c(\"A\", \"B\", \"AB\", \"B*\")\n", + "names(id_to_subject) <- as.character(0:3)\n", + "\n", + "df_loops <- res_tab_complex_loop_rep %>%\n", + " mutate(\n", + " loop_subject = map(loop, ~ unname(id_to_subject[as.character(.x)]))\n", + " ) %>%\n", + " arrange(length, loop)\n", + "\n", + "print(df_loops)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24878ee0", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/test_r.ipynb b/examples/test_r.ipynb index 95b276e..6172825 100644 --- a/examples/test_r.ipynb +++ b/examples/test_r.ipynb @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "452aaf33", "metadata": { "vscode": { @@ -240,6 +240,34 @@ "res_tab$loop_rep[[1]]" ] }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1ad58566", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " loop length sign\n", + "1 1, 1 1 -1\n", + "2 2, 2 1 -1\n", + "3 3, 3 1 -1\n", + "4 4, 4 1 -1\n", + "5 3, 4, 1,.... 4 -1\n", + "6 3, 4, 2, 3 3 1\n" + ] + } + ], + "source": [ + "print(res_tab$loop_rep[[1]])" + ] + }, { "cell_type": "code", "execution_count": 20, From 985b4e8fbb4e5f2dcbfd4efc0b9aa3686cf9bd8c Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Wed, 28 Jan 2026 18:36:34 +0100 Subject: [PATCH 05/12] Update R reproduction (including pertubation + additional scripts) for model 1; Fix typo at 3.3 addtional function on extended loop summary for Python (Model 1) --- examples/model_1_POSm4_R.ipynb | 1497 ++++++++++++++++++++ examples/model_1_perturbation.png | Bin 0 -> 58791 bytes examples/model_2_complex_formation_R.ipynb | 0 3 files changed, 1497 insertions(+) create mode 100644 examples/model_1_POSm4_R.ipynb create mode 100644 examples/model_1_perturbation.png create mode 100644 examples/model_2_complex_formation_R.ipynb diff --git a/examples/model_1_POSm4_R.ipynb b/examples/model_1_POSm4_R.ipynb new file mode 100644 index 0000000..1f8c36d --- /dev/null +++ b/examples/model_1_POSm4_R.ipynb @@ -0,0 +1,1497 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "846fd1a6", + "metadata": {}, + "source": [ + "## **0. Initialization**" + ] + }, + { + "cell_type": "markdown", + "id": "fc391249", + "metadata": {}, + "source": [ + "### **Installation**\n", + "LoopDetectR is on CRAN and can be installed within R by" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a4619679", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Before running the R code cells in jupyter notebook,\n", + "# initialize the R kernel by this line of code:\n", + "# IRkernel::installspec()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "4ea4fa08", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'LoopDetectR' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "# Download and install\n", + "install.packages(\"LoopDetectR\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "adf81c8c", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'deSolve' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'numDeriv' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "install.packages(\"deSolve\") # if not already installed\n", + "install.packages(\"numDeriv\") # if not already installed" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "16dc790d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "── \u001b[1mAttaching core tidyverse packages\u001b[22m ──────────────────────── tidyverse 2.0.0 ──\n", + "\u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 1.1.4 \u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 2.1.6\n", + "\u001b[32m✔\u001b[39m \u001b[34mforcats \u001b[39m 1.0.1 \u001b[32m✔\u001b[39m \u001b[34mstringr \u001b[39m 1.6.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mggplot2 \u001b[39m 4.0.1 \u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 3.3.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mlubridate\u001b[39m 1.9.4 \u001b[32m✔\u001b[39m \u001b[34mtidyr \u001b[39m 1.3.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mpurrr \u001b[39m 1.2.0 \n", + "── \u001b[1mConflicts\u001b[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\u001b[36mℹ\u001b[39m Use the conflicted package (\u001b[3m\u001b[34m\u001b[39m\u001b[23m) to force all conflicts to become errors\n" + ] + } + ], + "source": [ + "# Load package\n", + "library(\"LoopDetectR\")\n", + "library(deSolve)\n", + "library(tidyverse)" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "b677961f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "colors <- c('#EE7733', '#0077BB', '#33BBEE', '#EE3377', '#CC3311', '#009988', '#BBBBBB')" + ] + }, + { + "cell_type": "markdown", + "id": "bc602c8d", + "metadata": {}, + "source": [ + "## **1. Model definition**" + ] + }, + { + "cell_type": "markdown", + "id": "2b148688", + "metadata": {}, + "source": [ + "Model POSm4 with 4 positive feedbacks can be loaded from the library" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "12108b07", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Load example ODE system with function func_POSm4, 4 variables\n", + "data(\"func_POSm4\")" + ] + }, + { + "cell_type": "markdown", + "id": "1903c5dc", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "## **2. Result reproduction**" + ] + }, + { + "cell_type": "markdown", + "id": "5fc586ee", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **2.1. Loop structures**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5ab687a9", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Parameters from supplementary material\n", + "klin <- c(150, 0.04, 0.3, 500, 5000, 80, 4, 5)\n", + "knonlin <- c(0.3,2)\n", + "s_star <- c(1,2,3,4) # Dummy steady state for initialization\n", + "\n", + "# Parameters not yet in supplement data\n", + "perturbation_point <- 8.6" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "81b11f06", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11-1
2, 21-1
3, 31-1
4, 41-1
3, 4, 1,....4-1
3, 4, 2, 33 1
\n" + ], + "text/latex": [ + "A data.frame: 6 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 3, 4, 1,.... & 4 & -1\\\\\n", + "\t 3, 4, 2, 3 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 3, 4, 1,.... | 4 | -1 |\n", + "| 3, 4, 2, 3 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "1 1, 1 1 -1 \n", + "2 2, 2 1 -1 \n", + "3 3, 3 1 -1 \n", + "4 4, 4 1 -1 \n", + "5 3, 4, 1,.... 4 -1 \n", + "6 3, 4, 2, 3 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# compute loops\n", + "res_tab <- find_loops_vset(func_POSm4,vset=list(s_star),t=1,klin=klin,\n", + " knonlin=knonlin,max_num_loops=10)\n", + "# The loop list is reported\n", + "res_tab$loop_rep[[1]] \n", + "# To access a specific loop representation: e.g., the sixth loop, add [6,]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b1bccacc", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 4
len_1len_2len_3len_4
<dbl><dbl><dbl><dbl>
all4011
pos0010
neg4001
\n" + ], + "text/latex": [ + "A data.frame: 3 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & len\\_1 & len\\_2 & len\\_3 & len\\_4\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\tall & 4 & 0 & 1 & 1\\\\\n", + "\tpos & 0 & 0 & 1 & 0\\\\\n", + "\tneg & 4 & 0 & 0 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 4\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> | len_3 <dbl> | len_4 <dbl> |\n", + "|---|---|---|---|---|\n", + "| all | 4 | 0 | 1 | 1 |\n", + "| pos | 0 | 0 | 1 | 0 |\n", + "| neg | 4 | 0 | 0 | 1 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2 len_3 len_4\n", + "all 4 0 1 1 \n", + "pos 0 0 1 0 \n", + "neg 4 0 0 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab$loop_rep[[1]])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f1f8c98c", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 3
looplengthsign
<I<list>><dbl><dbl>
2 2, 21-1
53, 4, 1,....4-1
6 3, 4, 2, 33 1
\n" + ], + "text/latex": [ + "A data.frame: 3 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t2 & 2, 2 & 1 & -1\\\\\n", + "\t5 & 3, 4, 1,.... & 4 & -1\\\\\n", + "\t6 & 3, 4, 2, 3 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 2 | 2, 2 | 1 | -1 |\n", + "| 5 | 3, 4, 1,.... | 4 | -1 |\n", + "| 6 | 3, 4, 2, 3 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "2 2, 2 1 -1 \n", + "5 3, 4, 1,.... 4 -1 \n", + "6 3, 4, 2, 3 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Index of node of interest\n", + "noi <- 2\n", + "# Return all loops from loop_list containing node 2\n", + "loop_list <- res_tab$loop_rep[[1]]\n", + "loop_list[vapply(loop_list$loop,function(x){noi %in% x},logical(1)),]" + ] + }, + { + "cell_type": "markdown", + "id": "c3a1aa95", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **2.2. Calculating the Jacobian matrix**\n", + "\n", + "Sign jacobian matrix can be access via `res_tab` variable that we have calculated above, or derived from a jacobian matrix at a specific state" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9e3795b8", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-1 0 0-1
1-1 0 1
0 1-1 0
0 0 1-1
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -1 & 0 & 0 & -1\\\\\n", + "\t 1 & -1 & 0 & 1\\\\\n", + "\t 0 & 1 & -1 & 0\\\\\n", + "\t 0 & 0 & 1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -1 | 0 | 0 | -1 |\n", + "| 1 | -1 | 0 | 1 |\n", + "| 0 | 1 | -1 | 0 |\n", + "| 0 | 0 | 1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 0 0 -1 \n", + "[2,] 1 -1 0 1 \n", + "[3,] 0 1 -1 0 \n", + "[4,] 0 0 1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The corresponding signed Jacobian matrix\n", + "res_tab$jac_rep[[1]]" + ] + }, + { + "cell_type": "markdown", + "id": "52610797", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003].\n", + "\n", + "The input function, in the example `func_POSm4` (positive feedback chain model from [Baum et al., 2016]) defines the time derivatives of the modelled variables as a vector: \n", + "$f_i(s)=dS_i/dt$. Note that only those input arguments to the function that encode the modelled variables (and hence in whose direction the partial derivatives are taken) are allowed to be called `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c261caec", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
1
259.243116830199
2
0.00371448194657896
3
0.0218301587733568
4
0.295548075392272
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[1] 259.243116830199\n", + "\\item[2] 0.00371448194657896\n", + "\\item[3] 0.0218301587733568\n", + "\\item[4] 0.295548075392272\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "1\n", + ": 259.2431168301992\n", + ": 0.003714481946578963\n", + ": 0.02183015877335684\n", + ": 0.295548075392272\n", + "\n" + ], + "text/plain": [ + " 1 2 3 4 \n", + "2.592431e+02 3.714482e-03 2.183016e-02 2.955481e-01 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The function func_POSm4 returns a vector, but deSolve needs the vector within\n", + "# a list as output. Therefore, we define a function that simply puts the output \n", + "# of func_POSm4 into a list:\n", + "func_POSm4_list <- function(t,x,klin,knonlin){list(func_POSm4(t,x,klin,knonlin))}\n", + "sol <- deSolve::ode(y = rep(1,4), times = seq(0,11,0.1), func = func_POSm4_list, \n", + " parms=klin, knonlin=knonlin)\n", + "\n", + "# Set the last point of the numeric solution as point of interest, omit the \n", + "# first column (it contains the time)\n", + "s_star <- sol[dim(sol)[1],2:dim(sol)[2]]\n", + "s_star" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8b4155db", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-0.37882163 0 0-68.1056
0.07882163-5500 0 68.1056
0.00000000 500-84 0.0000
0.00000000 0 80 -5.0000
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -0.37882163 & 0 & 0 & -68.1056\\\\\n", + "\t 0.07882163 & -5500 & 0 & 68.1056\\\\\n", + "\t 0.00000000 & 500 & -84 & 0.0000\\\\\n", + "\t 0.00000000 & 0 & 80 & -5.0000\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -0.37882163 | 0 | 0 | -68.1056 |\n", + "| 0.07882163 | -5500 | 0 | 68.1056 |\n", + "| 0.00000000 | 500 | -84 | 0.0000 |\n", + "| 0.00000000 | 0 | 80 | -5.0000 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] \n", + "[1,] -0.37882163 0 0 -68.1056\n", + "[2,] 0.07882163 -5500 0 68.1056\n", + "[3,] 0.00000000 500 -84 0.0000\n", + "[4,] 0.00000000 0 80 -5.0000" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "j_matrix <- numDeriv::jacobian(func_POSm4,s_star,method=\"complex\",\n", + " t=1,klin=klin,knonlin=knonlin,)\n", + "j_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "71c0bc77", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-1 0 0-1
1-1 0 1
0 1-1 0
0 0 1-1
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -1 & 0 & 0 & -1\\\\\n", + "\t 1 & -1 & 0 & 1\\\\\n", + "\t 0 & 1 & -1 & 0\\\\\n", + "\t 0 & 0 & 1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -1 | 0 | 0 | -1 |\n", + "| 1 | -1 | 0 | 1 |\n", + "| 0 | 1 | -1 | 0 |\n", + "| 0 | 0 | 1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 0 0 -1 \n", + "[2,] 1 -1 0 1 \n", + "[3,] 0 1 -1 0 \n", + "[4,] 0 0 1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "signed_jacobian <- sign(j_matrix)\n", + "signed_jacobian" + ] + }, + { + "cell_type": "markdown", + "id": "e6ed3518", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **2.3. Temporal dynamics**" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "bee71136", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "matplot(\n", + " sol[,1], sol[,2:5],\n", + " type = \"l\",\n", + " lty = 1,\n", + " log = \"y\",\n", + " xlab = \"Time\",\n", + " ylab = \"Variables\"\n", + ")\n", + "\n", + "legend(\n", + " \"topright\",\n", + " legend = paste(\"Variable\", 1:4),\n", + " col = 1:4,\n", + " lty = 1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "b014adcb", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Continue simulation to observe stability\n", + "sol <- deSolve::ode(y = as.numeric(sol[95,2:5]), times = seq(0,11,0.1), func = func_POSm4_list, \n", + " parms=klin, knonlin=knonlin)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "21bbad0e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol_for_plot <- as.data.frame(sol)\n", + "\n", + "# rename columns for clarity\n", + "colnames(sol_for_plot) <- c(\"time\", \"S1\", \"S2\", \"S3\", \"S4\")\n", + "\n", + "# reshape to long format\n", + "sol_long <- sol_for_plot %>%\n", + " pivot_longer(cols = S1:S4, names_to = \"species\", values_to = \"value\")" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "4b596080", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "options(repr.plot.width = 8, repr.plot.height = 6)\n", + "colors <- c(\n", + " S1 = \"#EE7733\",\n", + " S2 = \"#0077BB\",\n", + " S3 = \"#33BBEE\",\n", + " S4 = \"#EE3377\"\n", + ")\n", + "\n", + "plot1 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " geom_line(size = 1.5) +\n", + " ## vertical dashed line\n", + " geom_vline(\n", + " xintercept = perturbation_point,\n", + " linetype = \"dashed\",\n", + " colour = \"black\",\n", + " linewidth = 0.7\n", + " ) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = 0:11,\n", + " minor_breaks = seq(0, 11, 0.5),\n", + " limits = c(0, 11),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(0, 11), clip = \"on\") +\n", + " scale_y_log10(\n", + " breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n", + " labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n", + " ) + # ← log₁₀ transformation\n", + " labs(\n", + " title = \"Dynamics of the 4-Variable Positive Feedback Chain\",\n", + " x = \"Time\",\n", + " y = \"Concentration (log scale)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", + "\n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", + "\n", + "plot1\n", + "# ggsave(\"POSm4_plot.png\", plot1, width = 10, height = 8, units = \"in\", dpi = 300)" + ] + }, + { + "cell_type": "markdown", + "id": "24c09faa", + "metadata": {}, + "source": [ + "### **2.4. Pertubation Analysis**" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "70a2312f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "t0 <- 8.6 # perturbation time in original time axis\n", + "idx0 <- 86\n", + "cap <- 0.05 # window half-width (before/after), like Python cap_range\n", + "dt <- 0.001" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "831ef59a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# pre-perturbation window from the already-simulated sol\n", + "k <- round(cap / dt)\n", + "pre <- sol[(idx0 - k):idx0, 2:5, drop = FALSE]\n", + "tpre <- seq(-cap, 0, by = dt)\n", + "\n", + "# perturbed IC and forward simulation on local time [0, cap]\n", + "y0 <- as.numeric(sol[idx0, 2:5])\n", + "y0[4] <- 0.75" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "07e45a5a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "s_star_pertubation_1 <- as.numeric(sol[81,2:5])\n", + "tpre = seq(-cap, 0, by = dt)\n", + "sol_pertubation_1_pre <- deSolve::ode(y = s_star_pertubation_1, times = tpre, func = func_POSm4_list, \n", + " parms=klin, knonlin=knonlin)\n", + "\n", + "s_star_pertubation_1 <- as.numeric(sol[86,2:5])\n", + "# Change the 4th position to 0.75\n", + "s_star_pertubation_1[4] <- 0.75\n", + "\n", + "tpost <- seq(0, cap, by = dt)\n", + "sol_pertubation_1_post <- deSolve::ode(y = s_star_pertubation_1, times = tpost, func = func_POSm4_list, \n", + " parms=klin, knonlin=knonlin)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ef4f5f4b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "Plot with title \"Perturbation Analysis: S4 when S4 is perturbed\"" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "t_all <- c(tpre, tpost[-1])\n", + "y_all <- rbind(sol_pertubation_1_pre, sol_pertubation_1_post[-1, , drop = FALSE]) # avoid duplicating t=0 row\n", + "\n", + "# Plot: 4 stacked panels (base graphics)\n", + "\n", + "# To save as PNG file, uncomment the following lines, and the dev.off() line at the end\n", + "\n", + "# png(\n", + "# filename = \"model_1_perturbation.png\",\n", + "# width = 8, height = 8, units = \"in\",\n", + "# res = 300 # ← DPI\n", + "# )\n", + "\n", + "op <- par(mfrow = c(4,1), mar = c(4,5,3,1))\n", + "for (j in 1:4) {\n", + " plot(t_all, y_all[,j], type = \"l\", lwd = 4, col = colors[j],\n", + " xlab = \"Time\", ylab = paste(\"Concentration of S\", j, sep=\"\"),\n", + " xlim = c(-0.05, 0.05), xaxt = \"n\", xaxs = \"i\",\n", + " main = paste(\"Perturbation Analysis: S\", j, \" when S4 is perturbed\", sep=\"\"))\n", + " axis(\n", + " 1,\n", + " at = seq(-0.05, 0.05, by = 0.01)\n", + " )\n", + " abline(v = 0, lty = 2, lwd = 2)\n", + " box(lwd = 2) # black outer box\n", + "}\n", + "\n", + "# dev.off()\n", + "par(op)" + ] + }, + { + "cell_type": "markdown", + "id": "dc7729e7", + "metadata": {}, + "source": [ + "## **3. Additional features**" + ] + }, + { + "cell_type": "markdown", + "id": "6aa20302", + "metadata": {}, + "source": [ + "### **3.1. Add subject ID to make the loop result more comprehensible**" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "id": "b8a59f66", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "id_to_subject <- c(\n", + " \"S1\", \"S2\", \"S3\", \"S4\"\n", + ")\n", + "names(id_to_subject) <- 1:4" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "id": "a9a0ae03", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "df <- res_tab$loop_rep[[1]]" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "id": "2cce91f7", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "df$loop_subject <- lapply(\n", + " df$loop,\n", + " function(t) unname(id_to_subject[as.character(t)])\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "id": "44a698ce", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 4
looplengthsignloop_subject
<I<list>><dbl><dbl><list>
1, 11-1S1, S1
2, 21-1S2, S2
3, 31-1S3, S3
4, 41-1S4, S4
3, 4, 1,....4-1S3, S4, S1, S2, S3
3, 4, 2, 33 1S3, S4, S2, S3
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{llll}\n", + " loop & length & sign & loop\\_subject\\\\\n", + " > & & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1 & S1, S1\\\\\n", + "\t 2, 2 & 1 & -1 & S2, S2\\\\\n", + "\t 3, 3 & 1 & -1 & S3, S3\\\\\n", + "\t 4, 4 & 1 & -1 & S4, S4\\\\\n", + "\t 3, 4, 1,.... & 4 & -1 & S3, S4, S1, S2, S3\\\\\n", + "\t 3, 4, 2, 3 & 3 & 1 & S3, S4, S2, S3\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> | loop_subject <list> |\n", + "|---|---|---|---|\n", + "| 1, 1 | 1 | -1 | S1, S1 |\n", + "| 2, 2 | 1 | -1 | S2, S2 |\n", + "| 3, 3 | 1 | -1 | S3, S3 |\n", + "| 4, 4 | 1 | -1 | S4, S4 |\n", + "| 3, 4, 1,.... | 4 | -1 | S3, S4, S1, S2, S3 |\n", + "| 3, 4, 2, 3 | 3 | 1 | S3, S4, S2, S3 |\n", + "\n" + ], + "text/plain": [ + " loop length sign loop_subject \n", + "1 1, 1 1 -1 S1, S1 \n", + "2 2, 2 1 -1 S2, S2 \n", + "3 3, 3 1 -1 S3, S3 \n", + "4 4, 4 1 -1 S4, S4 \n", + "5 3, 4, 1,.... 4 -1 S3, S4, S1, S2, S3\n", + "6 3, 4, 2, 3 3 1 S3, S4, S2, S3 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "14c9f240", + "metadata": {}, + "source": [ + "### **3.2. Represent regulation relationship from Jacobian matrix**" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "id": "080c0f16", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 9 × 4
fromtoregulationregulation_words
<chr><chr><dbl><chr>
S1S1-1inhibition (negative)
S1S4-1inhibition (negative)
S2S1 1activation (positive)
S2S2-1inhibition (negative)
S2S4 1activation (positive)
S3S2 1activation (positive)
S3S3-1inhibition (negative)
S4S3 1activation (positive)
S4S4-1inhibition (negative)
\n" + ], + "text/latex": [ + "A tibble: 9 × 4\n", + "\\begin{tabular}{llll}\n", + " from & to & regulation & regulation\\_words\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t S1 & S1 & -1 & inhibition (negative)\\\\\n", + "\t S1 & S4 & -1 & inhibition (negative)\\\\\n", + "\t S2 & S1 & 1 & activation (positive)\\\\\n", + "\t S2 & S2 & -1 & inhibition (negative)\\\\\n", + "\t S2 & S4 & 1 & activation (positive)\\\\\n", + "\t S3 & S2 & 1 & activation (positive)\\\\\n", + "\t S3 & S3 & -1 & inhibition (negative)\\\\\n", + "\t S4 & S3 & 1 & activation (positive)\\\\\n", + "\t S4 & S4 & -1 & inhibition (negative)\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 9 × 4\n", + "\n", + "| from <chr> | to <chr> | regulation <dbl> | regulation_words <chr> |\n", + "|---|---|---|---|\n", + "| S1 | S1 | -1 | inhibition (negative) |\n", + "| S1 | S4 | -1 | inhibition (negative) |\n", + "| S2 | S1 | 1 | activation (positive) |\n", + "| S2 | S2 | -1 | inhibition (negative) |\n", + "| S2 | S4 | 1 | activation (positive) |\n", + "| S3 | S2 | 1 | activation (positive) |\n", + "| S3 | S3 | -1 | inhibition (negative) |\n", + "| S4 | S3 | 1 | activation (positive) |\n", + "| S4 | S4 | -1 | inhibition (negative) |\n", + "\n" + ], + "text/plain": [ + " from to regulation regulation_words \n", + "1 S1 S1 -1 inhibition (negative)\n", + "2 S1 S4 -1 inhibition (negative)\n", + "3 S2 S1 1 activation (positive)\n", + "4 S2 S2 -1 inhibition (negative)\n", + "5 S2 S4 1 activation (positive)\n", + "6 S3 S2 1 activation (positive)\n", + "7 S3 S3 -1 inhibition (negative)\n", + "8 S4 S3 1 activation (positive)\n", + "9 S4 S4 -1 inhibition (negative)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sign_J <- sign(j_matrix)\n", + "labs <- paste0(\"S\", 1:nrow(sign_J))\n", + "rownames(sign_J) <- labs\n", + "colnames(sign_J) <- labs\n", + "\n", + "regulation_info <- sign_J %>%\n", + " as.data.frame() %>%\n", + " mutate(from = rownames(.)) %>%\n", + " pivot_longer(\n", + " -from,\n", + " names_to = \"to\",\n", + " values_to = \"regulation\"\n", + " ) %>%\n", + " mutate(\n", + " regulation_words = case_when(\n", + " regulation == -1 ~ \"inhibition (negative)\",\n", + " regulation == 1 ~ \"activation (positive)\",\n", + " TRUE ~ \"no regulation\"\n", + " )\n", + " )\n", + "regulation_info[regulation_info$regulation != 0, ]" + ] + }, + { + "cell_type": "markdown", + "id": "066927c1", + "metadata": {}, + "source": [ + "### **3.3. Loop Summary in more detail**" + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "id": "e3dddce3", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 4
looplengthsignloop_subject
<I<list>><dbl><dbl><list>
1, 11-1S1, S1
2, 21-1S2, S2
3, 31-1S3, S3
4, 41-1S4, S4
3, 4, 1,....4-1S3, S4, S1, S2, S3
3, 4, 2, 33 1S3, S4, S2, S3
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{llll}\n", + " loop & length & sign & loop\\_subject\\\\\n", + " > & & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1 & S1, S1\\\\\n", + "\t 2, 2 & 1 & -1 & S2, S2\\\\\n", + "\t 3, 3 & 1 & -1 & S3, S3\\\\\n", + "\t 4, 4 & 1 & -1 & S4, S4\\\\\n", + "\t 3, 4, 1,.... & 4 & -1 & S3, S4, S1, S2, S3\\\\\n", + "\t 3, 4, 2, 3 & 3 & 1 & S3, S4, S2, S3\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> | loop_subject <list> |\n", + "|---|---|---|---|\n", + "| 1, 1 | 1 | -1 | S1, S1 |\n", + "| 2, 2 | 1 | -1 | S2, S2 |\n", + "| 3, 3 | 1 | -1 | S3, S3 |\n", + "| 4, 4 | 1 | -1 | S4, S4 |\n", + "| 3, 4, 1,.... | 4 | -1 | S3, S4, S1, S2, S3 |\n", + "| 3, 4, 2, 3 | 3 | 1 | S3, S4, S2, S3 |\n", + "\n" + ], + "text/plain": [ + " loop length sign loop_subject \n", + "1 1, 1 1 -1 S1, S1 \n", + "2 2, 2 1 -1 S2, S2 \n", + "3 3, 3 1 -1 S3, S3 \n", + "4 4, 4 1 -1 S4, S4 \n", + "5 3, 4, 1,.... 4 -1 S3, S4, S1, S2, S3\n", + "6 3, 4, 2, 3 3 1 S3, S4, S2, S3 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "id": "9733249d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 7
lengthnum_loopsnum_loops_positivenum_loops_negativeloopsloops_positiveloops_negative
<dbl><int><int><int><I<named list>><I<named list>><I<named list>>
11404c(\"S1\", .... c(\"S1\", ....
33110c(\"S3\", ....c(\"S3\", ....
44101c(\"S3\", .... c(\"S3\", ....
\n" + ], + "text/latex": [ + "A data.frame: 3 × 7\n", + "\\begin{tabular}{r|lllllll}\n", + " & length & num\\_loops & num\\_loops\\_positive & num\\_loops\\_negative & loops & loops\\_positive & loops\\_negative\\\\\n", + " & & & & & > & > & >\\\\\n", + "\\hline\n", + "\t1 & 1 & 4 & 0 & 4 & c(\"S1\", .... & & c(\"S1\", ....\\\\\n", + "\t3 & 3 & 1 & 1 & 0 & c(\"S3\", .... & c(\"S3\", .... & \\\\\n", + "\t4 & 4 & 1 & 0 & 1 & c(\"S3\", .... & & c(\"S3\", ....\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 7\n", + "\n", + "| | length <dbl> | num_loops <int> | num_loops_positive <int> | num_loops_negative <int> | loops <I<named list>> | loops_positive <I<named list>> | loops_negative <I<named list>> |\n", + "|---|---|---|---|---|---|---|---|\n", + "| 1 | 1 | 4 | 0 | 4 | c(\"S1\", .... | | c(\"S1\", .... |\n", + "| 3 | 3 | 1 | 1 | 0 | c(\"S3\", .... | c(\"S3\", .... | |\n", + "| 4 | 4 | 1 | 0 | 1 | c(\"S3\", .... | | c(\"S3\", .... |\n", + "\n" + ], + "text/plain": [ + " length num_loops num_loops_positive num_loops_negative loops \n", + "1 1 4 0 4 c(\"S1\", ....\n", + "3 3 1 1 0 c(\"S3\", ....\n", + "4 4 1 0 1 c(\"S3\", ....\n", + " loops_positive loops_negative\n", + "1 c(\"S1\", .... \n", + "3 c(\"S3\", .... \n", + "4 c(\"S3\", .... " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "split_by_len <- split(df, df$length)\n", + "\n", + "loop_summary_extended <- data.frame(\n", + " length = as.numeric(names(split_by_len)),\n", + " num_loops = vapply(split_by_len, nrow, integer(1)),\n", + " loops = I(lapply(split_by_len, function(x) x$loop_subject)),\n", + " stringsAsFactors = FALSE\n", + ")\n", + "\n", + "loop_summary_extended$num_loops_positive <- vapply(\n", + " split_by_len,\n", + " function(x) sum(x$sign > 0),\n", + " integer(1)\n", + ")\n", + "\n", + "loop_summary_extended$num_loops_negative <- vapply(\n", + " split_by_len,\n", + " function(x) sum(x$sign < 0),\n", + " integer(1)\n", + ")\n", + "\n", + "loop_summary_extended$loops_positive <- I(lapply(\n", + " split_by_len,\n", + " function(x) x$loop_subject[x$sign > 0]\n", + "))\n", + "\n", + "loop_summary_extended$loops_negative <- I(lapply(\n", + " split_by_len,\n", + " function(x) x$loop_subject[x$sign < 0]\n", + "))\n", + "\n", + "loop_summary_extended <- loop_summary_extended[\n", + " order(loop_summary_extended$length),\n", + " c(\"length\",\"num_loops\",\"num_loops_positive\",\"num_loops_negative\",\n", + " \"loops\",\"loops_positive\",\"loops_negative\")\n", + "]\n", + "\n", + "loop_summary_extended\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb0f25f8", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/model_1_perturbation.png b/examples/model_1_perturbation.png new file mode 100644 index 0000000000000000000000000000000000000000..b68a8052694f272aaaf35660fa73ef8a7e9221e8 GIT binary patch literal 58791 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 Hg#Z5o$UO2q literal 0 HcmV?d00001 diff --git a/examples/model_2_complex_formation_R.ipynb b/examples/model_2_complex_formation_R.ipynb new file mode 100644 index 0000000..e69de29 From 61baac01299179fb699e1a07970b9d5876cc8f7f Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Sat, 31 Jan 2026 18:37:00 +0100 Subject: [PATCH 06/12] Fix bug --- examples/model_1_POSm4_R.ipynb | 401 ++++- examples/model_2_complex_formation_R.ipynb | 1624 ++++++++++++++++++++ examples/model_2_perturbation_A.png | Bin 0 -> 47200 bytes 3 files changed, 1976 insertions(+), 49 deletions(-) create mode 100644 examples/model_2_perturbation_A.png diff --git a/examples/model_1_POSm4_R.ipynb b/examples/model_1_POSm4_R.ipynb index 1f8c36d..ed2228d 100644 --- a/examples/model_1_POSm4_R.ipynb +++ b/examples/model_1_POSm4_R.ipynb @@ -158,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 2, "id": "b677961f", "metadata": { "vscode": { @@ -188,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "12108b07", "metadata": { "vscode": { @@ -227,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "5ab687a9", "metadata": { "vscode": { @@ -247,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "81b11f06", "metadata": { "vscode": { @@ -327,7 +327,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "b1bccacc", "metadata": { "vscode": { @@ -390,7 +390,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "f1f8c98c", "metadata": { "vscode": { @@ -471,7 +471,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "9e3795b8", "metadata": { "vscode": { @@ -545,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "c261caec", "metadata": { "vscode": { @@ -604,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "8b4155db", "metadata": { "vscode": { @@ -664,7 +664,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "71c0bc77", "metadata": { "vscode": { @@ -735,7 +735,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 12, "id": "bee71136", "metadata": { "vscode": { @@ -779,7 +779,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 13, "id": "b014adcb", "metadata": { "vscode": { @@ -795,7 +795,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 14, "id": "21bbad0e", "metadata": { "vscode": { @@ -816,7 +816,7 @@ }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 15, "id": "4b596080", "metadata": { "vscode": { @@ -824,6 +824,15 @@ } }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Warning message:\n", + "\"\u001b[1m\u001b[22mUsing `size` aesthetic for lines was deprecated in ggplot2 3.4.0.\n", + "\u001b[36mℹ\u001b[39m Please use `linewidth` instead.\"\n" + ] + }, { "data": { "image/png": "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", @@ -869,7 +878,7 @@ " scale_y_log10(\n", " breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n", " labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n", - " ) + # ← log₁₀ transformation\n", + " ) + # ← log10 transformation\n", " labs(\n", " title = \"Dynamics of the 4-Variable Positive Feedback Chain\",\n", " x = \"Time\",\n", @@ -904,7 +913,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 16, "id": "70a2312f", "metadata": { "vscode": { @@ -916,33 +925,12 @@ "t0 <- 8.6 # perturbation time in original time axis\n", "idx0 <- 86\n", "cap <- 0.05 # window half-width (before/after), like Python cap_range\n", - "dt <- 0.001" + "dt <- 0.0001" ] }, { "cell_type": "code", - "execution_count": 62, - "id": "831ef59a", - "metadata": { - "vscode": { - "languageId": "r" - } - }, - "outputs": [], - "source": [ - "# pre-perturbation window from the already-simulated sol\n", - "k <- round(cap / dt)\n", - "pre <- sol[(idx0 - k):idx0, 2:5, drop = FALSE]\n", - "tpre <- seq(-cap, 0, by = dt)\n", - "\n", - "# perturbed IC and forward simulation on local time [0, cap]\n", - "y0 <- as.numeric(sol[idx0, 2:5])\n", - "y0[4] <- 0.75" - ] - }, - { - "cell_type": "code", - "execution_count": 74, + "execution_count": 18, "id": "07e45a5a", "metadata": { "vscode": { @@ -967,7 +955,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, + "id": "b89c6113", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "t_all <- c(tpre, tpost)\n", + "y_all <- rbind(sol_pertubation_1_pre, sol_pertubation_1_post[, , drop = FALSE])" + ] + }, + { + "cell_type": "code", + "execution_count": 22, "id": "ef4f5f4b", "metadata": { "vscode": { @@ -977,7 +980,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAMAAABoqemGAAAAPFBMVEUAAAAAd7szu+5NTU1oaGh8fHyMjIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnh4eHp6enuM3fudzPw8PD///9N5ZUbAAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2diZarqBZAeW2mqsrQHf//Xx+IA0QwmoB6dO+17q3E4YDADojGqBIAxKKWzgAAfA4CAwgGgQEEg8AAgkFgAMEgMIBgEBhAMAgMIBgEBhAMAgMIBoEBBIPAAIJBYADBIDCAYBAYQDAIDCAYBAYQDAIDCAaBE6IqDr/9NfdTcPPwdoHlLoUq4hkYv7QsbyelivOjiTohYjTKsw3zfseGsWUzNe4+oDgSomr6BgebXWBhtWi4jV51AtdoBsYvrQJpisq9c2Sjt754UcqTmi7w2LKZGncfUBwJsY3rRx0ia94vHNE8z+qizoMZGMnBfNA8TybY/ag+FdiJYm2ekIOBJBB4JBRHQurGVf25HdThVr25Foeqk6pXm/+rhfr/ZqPyt1BKD0Od7R7naonZ9q5fXrpEinq466yodzd71uNrs8lFD7YvTX6aN6XTR5rwzzo/7eKDepbl0XwIPZXJo/5Asjt2R+RmyImiUy38HrhNtFrQHu20svFfILAPxZEQpwe+V+3ybofVp34j1QubEbfe6Fc5S6ot9MmkGZg+23F50+letTqXagzdrWh2N3vadWYrm+rFpti+6QQ2Ft7sy+O9W2wCaB+1xiaIjl/v6B1RlyEnin598wTuEu2ye59aNnf/BQL7UBwJac6Br6Yt33WLO5tlP+XTPbe1jdQuvBhfzqa/vJUPu6Leolp8tvqdn0bROg0tiQ3srHB3v1cD+IMySj7LWxO0feNgxs3F5dnkvV5qtP3Ta/4qlXUe60ScI/Iy1EW56bWewF6i3dFOK5t267NdRIv1oDgSYvU9mQ6psFM7thGX/UZqFz7bweft5+gJXNh1foCyXmSHue4KZ/dD1eCP5sXh59qk2L5xuVa9660snQT0q4PuOk86wkG5iYSOyI9SFKUvsJdod7TTysbf+onAPhRHQpzG1Q73upbpNdLSe38r3K39Ldxty6pvVFX/GNv9V/dWZzMIeJjTy+Jql7ZvXrid6im3Lu9HpXtzPV59mE8Bf2j7ekReFDM28AX2Eh2OFC+boXQBgVPiCey96Brp022LTS97UD/3bsVrD+zGO9bt2XPL2/1p7LMzWY/fcxehftNRJdFG7vL+U3W/R/3/T1+s8jVDXRTVqtatdxJVL0c0tmzarQt64ACh4lDKrwsYiVNg5oTtZjo3r5H+ls+z20hP9Xmemcr9i54DO6GfdX9pGrPrlrv7uZ2tck6s2zcdF3V8dhe9unW3qoP/s8PiLpHQEXlR+gJ7iXZHO61s2q05Bw4RLA7K6DOcxmWnTFsDzGWeyix/NNhMsFZTsUbKartq9OnMQjuh/0yvWJp2/OesaHevFhkBzaUdm9yl0U+pl1loO9HdPwc2+XpWE9Glm/rLETXb+1H83rVLtDvax9SyabdmFjpEuDgopI9wG9ftoIq/dtm1sD2KOt7dRtpe4tQDzctDN/Vqu2qtcx3YCX1U9o4nc37qrGh2t4sOZoBdvr0OXD71Mjvl5uf9VO1/VN1tnfaDwTui7nPAjfIyPPavA991xu7Ty6bZmuvAISiOzaH7xNitlkuCeVmgVLeGUvEvOywJAmchfA5sz34ocYkU6vhYOg8haE5ZCM5CN/9R5ADrBoEBBBMTWMVWAsB6QGAAwSAwgGAis9DdTTgAsF6QFEAwCAwgGAQGEAwCAwgGgQEEE70TCwDWT0Tgjx1WAJCPMQKX0a3xF2BZxgj8eQ/MzR+yoL7Wz38uYwX+FBqELKiv1fHfIKMFDvXWI6BByIL6WgvD3k4WWA2tHIAGIQvqayFG+orAMAj1NS+feovAAPPzta8VbkTOgQGyk8zXHsxCAyQmfT8bJ5vAsevMAFtlBl970AMDfMSc/WycNAI3PW1/ZwSGbbAOX3skEXjgudEIDKJJ4216cRvSCRz+zhICy2Lv9bVyXftMu4w0/E0HhcDi2Wl9pfF2TnEbknwbyfsJ2DfxYdXso77E6tonzdcJVXSrfTSI7bDp+tqArz34PjC4bKm+NtTPxhkt8OBdGfGbNrbUIPaA4Praha89Es5CB3cW3CB2ibz62qe3LQgMLquvr5372iPJt5EQeDOstb7wNkKS7wOHBObLDPA5+DqWNF/oZxILUoCvk+GJHLAY9LPfwxM5YG7wNSFpvw/MJBb0oJ/NCV/oh7Tg66yMEli9uxNrQnzYJni7DOmeyMEs9BYYW1/4uhK4Ewtc3tQX3q6NbDdyxOLDqvHrC19XzziB39xWhcCboaovfJVD0idyILBIXPuUwltRMIm1OwY1HC3w0kcBliQPtYtvz5cZVsM4L98JvPRRwAsThtChh05Ojw/zMLIjfSPw0kcB75gkMF9mWD0fevsi8NJHAaNBYNF866tl6aOAzxl/DvyZjAicA3yFGr7MIAD6WYjBc6HXC77CWxB4NdDPwnTSPNh9QnywpNEVX/cO58Azg7eQEgTOizRf915f4uCplFmQ5m3LTutLLkm+ThjadVf3Qov1tcc+6mtDpPk6YdzWTTcI8br22XR9bZFUXyeM7bqlBrGdfjbOluprF6T6OqGK3Cktt0Gk0XXlvvaQW187Jd2NHGG95TWIXXrbIq++dk7KO7EkCpxGV7G+9lh7fcELe72VEm/DrLW+IEKaWynX/kysNLpu0FeQzrYf7I6usHG2JDD9LOyOKZeRhp7WEdt5DoHRFXZLkmdizSsw/SxAQ5qH2mWcxEJXgDjZnkr57ZcZEBfgPdNupUwQPwy6roR1XPaD0aT9Qv/kc2DEXRkILIxZn8iRRld8zQgCC2PKg90//m0kdBUDAgsjzSN1hmahEVcSCCyMJAIPXgdGV0kgsDCWFvijTEM2EFgYSS4jDQoMABkZKfAQCAywFAkEHpjESn1ZKmtUMktm84WdKbMfPtRudPw0UHNkNltU2Zn9/JE64U1EF8aao5JZMhsKi8BCopJZMhsKi8BCopJZMhsKGxOYc+CVRSWzZDYUNnUyogtjzVHJLJkNhUVgIVHJLJkNhf3kTiwAWAmf3AsNACsBgQEEg8AAguEcGEAwSAogGAQGEMzADZG4DbB2gpaqgXUAsB4Gv5SPwQDrBoEBBJNGYOeaU/0yxWWoftQpeZoQNsUlszxRg2WQvlxXm9UZM5unEZT5ymCghKem7Mx5NS8TdN6BqGWC56D2w6aYsssTNVgG3xaBoKzOmNk8jaDMUwZORiOz0NM6UOECl86fdUUNl6wYgb/O6pzlmiDsegT+OoUUYYMf6WttEnM2NDECJ2he4gXO0mLVy8oMKaQ4Be5FzSZwnsyW3xcvAoei5smsoBarUp5hh1NIEDs8clhpkwhHzZNZBJbTCPK02KRFofrxvi+OSNRvi2PWzH5buJnCbkDg73sd4QKXL0uyppAw6qdP2nsTtnT+pIyaoGwROBA1V7mKbLGZBM7T0BIEnTGzKYoWgftR85Sr1BabROD28rLzMt1lcT/c9xmeKbNJPnyDZfC1alkKIEtWZyxXoS02jcAAsAgIDCAYBAYQDAIDCAaBAQSDwACCQWAAwSAwgGAQGEAwCAwgGAQGEAwCAwgGgQEEg8AAgkFgAMEgMIBgEBhAMAgMIBgEBhAMAgMIBoEBBIPAe0PVj3Wk5jcB1bhDqPTtQF3uECp9O1CXO6T7jQP7pPTqbYJHu8P8UGs7pBW4+Vem+s0hmBsqbYe4vzKkSgSWDJW2Q0ICJ/l5JJgdKm2HRHpgEAgVt0MYQm8HKm2HBARmFloo1BqAYBAYQDAIDCAYBAYQDAIDCAaBAQSDwACCQWAAwSAwgGAQGEAwCAwgGAQGEAwCAwgGgQEEg8AAgkFgAMEgMIBgEBhAMAgMIBgEBhAMAgMIBoEBBIPACbG/vHv47a+5n4Kbh7d784DXQhXxDIxfWpa3k1LF+WGSPSt1vE3ZNxRF8yya7cc/pXZs2UyNuw8ojoTUv52t+gYHm11goVKxjVuuOoFrNAPjl1aBNMWjvNtXoahvfemiGE5qusBjy2Zq3H1AcSTENq4fdYiseb9wRPM8q4s6D2ZgJAfzQfM86WA6ZFn+BrI9ImIXpbQ2T8jBQBIIPBKKIyF146r+3A7qcKveXIuD/emw5od464X6/2aj8rdQSg9Dne0e52qJ2dYMcC9dIkVZ1IHaFfXuZs96fG02uejB9qXJT/OmdPpIE/6p35+Us+KgnmV5NDY/lcmj/kCyO3ZH5Gaoi2JSLfweuE20WtAe7bSy8V8gsA/FkRCnB7aj0rsdVp/6jVQvbEbcd9P7OUuqLfTJpBmYPttxedPpXrU6l2q0261odjd72nVmK5vqxabYvukENhY65713daz+mgDaR62xCaLj1zt6R9RlyI1yVjdP4C7RLrv3qWVz918gsA/FkZDmHPhq2vJdt7izWfZTPt1zW9tI7cKL8eVs+stb+Wh+brv6r1p8tvqdn0bROg0tiQ3srHB3v1cj4YNO3jh4a3/Du3njcDQfEZdn+86eAxtt//Sav0plncc6EeeIvAx1UW56rSewl2h3tNPKpt36bBfRYj0ojoRYfU+mQyrs1I5txGW/kdqFz3bwefs5egIXdp0foKwX2WGuu8LZ/VA1+KN5cfi5Nim2b1yuVe9a9Z+PQzcoPuiu86QjHJSbSOiI/ChFUfoCe4l2RzutbPytnwjsE5m2rMtz3ryIx2lc7XCva5leIy2997fC3drfwt22rPpGVfWPsd1/q1mpa+WkbvhXu7R988LtVPXYj6I7yz4q3Zvr8erDfAr4Q9vXI/KimLGBL7CX6HCkeNkMpQtBR1t5KatpeAJ7L7pG+nTbYtPLHtTPvVvx2gO78Y51e/bc8nZ/GvvsTNbj99xFqN90VEnUphV63NrwU3W/R/3/T1+s8jVDXRTVqtatdxJVL0c0tmzarQt64ABRgfnZ9uk4jcucsN1M5+Y10t/yeXYb6ak+zzNTuX/Rc2An9LO+1mMas+uWu/u5na1yTqzbNx0XdXzWU26F6dEbblUH/2eHxV0ioSPyovQF9hLtjnZa2bRbcw4cIi6w/kNZTcNpXHbKtDXAXOapzPJHg80EazUVa6Sstqv7RNXMQjuh/+qe8qIV61a0u1eLjIDm0o5N7tLop9TLLLSd6DaZvPjzu8p0f0/1MrR9OaJm6y6KXwR+ot3RPqaWTbs1s9AhBgTmdGMqboHdDqr4a5ddC9ujqOPdbaTtJU490Lw8dFOvtqvWOteBndBHZe94Muenzopmd7vo0FwQGr4OXD71smrKrfDVOFX7H1V3W6f9YPCOqPscaKL4ReAnWi2464zdp5dNszXXgUMEi0MNrYSVo/vE2K2WS4J5WaBUt4ZS8S87LAkCZyHcA9uzH0pcIoU6PpbOQwiaUxai58AqshIA1gMCAwgmJrCKrQSA9YDAAIJBYADBRGahu5twAGC9ICmAYBAYQDAIDCAYBAYQDAIDCGbo64QAsHIiAn/ssAKAfIwRuIxujb8AyzJG4M97YG7+kAX19QX/W4CxAk8m9gEBq2YD9bWERssxWuAPZdxAg9gV6epr6Za9E6YNoT85B568CyxIW19LN0wYBwKDS1NfS7dLGAkCQ4il26VMFqgozoEhxNIqfMPSZTcr2WahY/FBBHgkBASGACgoBQSGAPgrBQSGAAgsBQSGAAgsBQQGl7q+EFgK0y4jTbCRe6FFgsDC4NtI4GLri0loMSAwuDgCL50VGEMagePDZQSWBQILY7TAQye0qvciHh9WDQILI8ksNAJvBgQWBgKDCwILI8m3kRB4M1T1xSS0HNJ8H5hJrE2Bv3LgC/3QA4HlkFLg4DPhEVgeCCyHNOfA8fsmEVggCCyHNF9msFGUv4h7oaWCwHJI9W0kE4ch9DZgEloQowRWb+7EqiMh8DbAX0Gk/D4wAsvH1BcCC4Iv9IMLAguD68DggsDCGCfw51PKCCwLBBZGku8Dcx14M+j6YhJaEomuA4+PD6umEXjpfMBIEj3ULr4CgUWBwMKYMIRWn/TOCCwLBBbGJIGZhd48CCyMbAJzL7RUEFgS48+BP+tNEVgaTEKLgjuxwAd/RcGD3cEHgUWBwOCDwKJI8mD3KfFh5SCwKDgHBh8EFgUCg4tSCCwKvk4ILlbgpXMBo+HrhOCCwMJgFhpcEFgY2c6BuZVSJAgsjERfJxwfH1YNAguDITS4ILAw0gjMrxNuhUrgpTMB40nzTKz4VggsCwQWRpJbKRF4M3AbhzCSzEIj8GZAYGEgMLggsDCmXEYaevYkk1ibgMdxSIOH2u2W/8VYOmMwAQSWSNS9JCx9dDABBJ6ZvO4lYekigglMu5VyaN3LBhu8F3ppsebAXAdeupxhAjv7baSl/Vg9WuCl6wimkOjbSAPz0x/FC7B0094eeesLZmHKg90//m2kpVvq9pheEVPqC+SQ/5E6S7f1tTG5CGcFgYWBwBOYfPTyQGBh7E3gyQewMxBYGNkuI/VWAUAGRgo8yNBlJADISAqBhwz+KN7n6a0wLJkls9mi9sImfqid7MJYc1QyS2ZDYRM/1E52Yaw5Kpkls6GwCCwkKpkls6GwCCwkKpkls6GwMYE5B15ZVDJLZkNhUycjujDWHJXMktlQWAQWEpXMktlQ2E/uxAKAlZD4XmgAmBMEBhAMAgMIhnNgAMEgKYBgEBhAMGGBVXwVAKyHoKVqYB0ArIeQpGpoJQCsBwQGEEwagZ1rTvXLFJeh+lGn5GlC2BSXzPJEDZZB+nJdbVZnzGyeRlDmK4OBEp6asjPn1bxM0HkHopYJnoPaD5tiyi5P1GAZfFsEgrI6Y2bzNIIyTxk4GY3MQk/rQIULXDp/1hU1XLJiBP46q3OWa4Kw6xH46xRShA1+pK+1SczZ0MQInKB5iRc4S4tVLyszpJDiFLgXNZvAeTJbfl+8CByKmiezglqsSnmGHU4hQezwyGGlTSIcNU9mEVhOI8jTYpMWherH+744IlG/LY5ZM/tt4WYKuwGBv+91hAtcvizJmkLCqJ8+ae9N2NL5kzJqgrJF4EDUXOUqssVmEjhPQ0sQdMbMpihaBO5HzVOuUltsEoHby8vOy3SXxf1w32d4pswm+fANlsHXqmUpgCxZnbFchbbYNAIDwCIgMIBgEBhAMAgMIBgEBhAMAgMIBoEBBIPAAIJBYADBIDCAYBAYQDAIDCAYBAYQDAIDCAaBAQSDwACCQWAAwSAwgGAQGEAwCAwgGAQGEAwC7w1VP9aRmt8EVOMOodK3A3W5Q6j07UBd7pDuNw7sk9Krtwke7Q7zQ63tkFbg5l+Z6jeHYG6otB3i/sqQKhFYMlTaDgkJnOTnkWB2qLQdEumBQSBU3A5hCL0dqLQdEhCYWWihUGsAgkFgAMEgMIBgEBhAMAgMIBgEBhAMAgMIBoEBBIPAAIJBYADBIDCAYBAYQDAIDCAYBAYQDAIDCAaBAQSDwACCQWAAwSAwgGAQGEAwCAwgGAQGEAwCJ8T+8u7ht7/mfgpuHt7uzQNeC1XEMzB+aVneTkoV54d+dT2Gs/02L14UzbNoth//lNqxZTM17j6gOBJS/3a26qsQbHaBhUrFNm656gSu0QyMX1oF0hSP8s+++hm/byiK4aSmCzy2bKbG3QcUR0Js4/pRh8ia9wtHNM+zuqjzYAZGcjAfNM+TDnZSf7ojnCZSP0ppbZ6Qg4EkEHgkFEdC6sZV/bkd1OFWvbkWB/vTYc0P8dYL9f/NRuVvoZQehjrbPc7VErPtXb+8dIkUZVEHalfUu5s96/G12eSiB9uXJj/Nm9LpI034Z/P+r/7cOahnWR7Nm6cyedQfSHbH7ojcDHlRisLvgdtEqwXt0U4rG/8FAvtQHAlxeuB71S7vdlh96jdSvbAZceuNfpWzpNpCn0yagemzHZc3ne5Vq3OpxtDdimZ3s6ddZ7ayqV5siu2bTmBj4a3J+qkdBZsA2ketsQmi49c7ekfUZciNclY3T+Au0S6796llc/dfILAPxZGQ5hz4atryXbe4s1n2Uz7dc1vbSO3Ci/HlbPrLW/lofm67+q9afLb6nZ9G0ToNLYkN7Kxwd79XHelBJ28cvLW/4d28cTiaj4jLs3qtPy+Ke/XKaGtOiv8qlXUe60ScI/Iy1EW56bWewF6i3dFOK5t267NdRIv1oDgSYvU9mQ6psFM7thGX/UZqFz7bweft5+gJXNh1foCyXmSHue4KZ/dD1eCP5sXh59qk2L5xuVa9a91/Xsw+1eYH3XWe9LuDchMJHZEfpShKX2Av0e5op5WNv/UTgX0i05aqZLAyHafE2uFe1zK9Rlp672+Fu7W/hbtt2UwYm1mnyO6/urc6m0HAw5xeFle7tH3zwu3UTrk1SRyV7s31ePVhjPaHtq9H5EUxYwNfYC/R4UjxshlKF4ICq2Y5ZTUNT2DvRddIn25bbHrZg/q5dytee2A33rFuz55b3u5PY5+dyXr8nrsI9ZuOKolq7alw+9Sfqvs96v9/+mKVrxnqoqhWtW69k6h6OaKxZdNuXdADB0DghDiNy5yw3Uzn5jXS3/J5dhvpqT7PM1O5f9FzYCf0s+4vTWN23XJ3P7ezVc6JdfumQ4+Zn3bK7WwSay9O3aoO/s8Oi7tEQkfkRekL7CXaHe20smm35hw4BAInxGlcdsq0NcBc5qnM8keDzQRrNRVrpKy2q0afziy0E/qvvtviohXrVrS7V4uMgGZC2SZ3afRT6mUW2k50V5LZxB7tYehQT/UytH05oiZMF8UvAj/R7mgfU8um3ZpZ6BAxgaMrIY7buG4HVfy1y66F7VHU8e420vYSpx5oXh66qVfbVWud68BO6KOylpnzU2dFs7tddKino95cBy6fepmdcmsTqzhV+x9Vd1un/WDwjqj7HGijeIv9RKsFd52x+/SyabbmOnCIYHGogXWwdnSfGLvVckkwLwuU6taw11zWBwJnIdwD27MfSlwihTo+3m81PzSnLETPgVVkJQCsBwQGEAyXkQAEg8AAgkFgAMFEZqG7m3AAYL0gKYBgEBhAMAgMIBgEBhAMAgMIZvDrhACwbiICDzo8tFIBQD5GyRjdul2NvwCLMK43fdcDx90e2hHWRltf/4RZNHPQZ6zAw0GCkcLxYdU09RXxd4Bl871bRgsc6q1f9gltgMCy+FxgXF+EaUPoCePr2BAdVs0sAkM6kgg8okGADBBYGGkEjve2CCyTqnFEFsOKSHkOHNoZgUViG8f0PWBu0s1Ch3dGYJFUbSNrcEgDAkOAqm0snQkYAQJDAASWQhKBmcTaGggshTQCT4gPEkBgKdADg0tdXwgshWmXkd7dieWs504skdj6+geBpZDq20ixrRBYFo7AS2cFxoDA4ILAwkBgcEFgYYwWePCElkmsrYDAwuAyErggsDAQGFwQWBhJvo00sDMCy6KqL64iyYEv9EMP/JUDAkMPBJZDtidycCeWXBBYDjyRA3ogsBz4PjD0QGA5IDD0QGA5jBJYvbkTC4E3BVeRBMH3gcHF1Bf+CoI7scAFgYXBdWBwQWBhjBP484u6CCwLBBZGku8DhwNzI4dAEFgYnAODCwILI8lD7abEh1Wj64urSJKYMIRWn/TOCCyLRuCl8wEjmSQws9CbB4GFgcDwAgJLYvw58GcyIrA4EFgSzELDCwgsiWzXgWPxYe0gsCQQGHy4iiSKNA92j++AwNLAX1FwDgw+CCwKBAYXpRBYFHydEFwQWBhpvk7YrOKROtJBYGGk+3lRFdwKgWWBwMJI+FTK4K2WCCwLBBZGkq8TquYPAkvHCrx0LmA06YbQoWAILA0EFkaaO7FUdCsElgUCC4NnYoELAgsjza2UPNh9MzCHJQt+Gwk8EFgWCAwufBdJGFMuIw09rSO2MwLLAn+FkeSZWAi8GRBYGGkeasck1lZAYGHwVEpwQWBhTLuVMh6FHngbVNeBl84EjCfbLDQ3cogEgYWR/zLSPyE+SARm4B8EFsaUB7t/dhkpKDDMz5jmUAk8ZkNYCUkeqYPAmwGBhZHmmVhDk1hLN0mYAgILI/9D7ZZukjAFBBZGmstIQ/EBICMjBR6nKwIDzEtKgUc5vd6oZJbM5gs7U2Y/eajdlPhpoObIbLaosjP72TOxwr35+x0/hZojs9miys7sJwIPXAeWXRhrjkpmyWwoLAILiUpmyWwobEzgoXNgBF4gKpkls6Gwib/MILsw1hyVzJLZUNiPkmESa/6oZJbMhsImvhMLAOYk8b3QADAnCAwgGAQGEAznwACCQVIAwSAwgGDCAqv4KgBYD0FL1cA6AFgPg3dTYTDAukFgAMGkEdi55lS/THEZqh91Sp4mhE1xySxP1GAZpC/X1WZ1xszmaQRlvjIYKOGpKTtzXs3LBJ13IGqZ4NfT+mFTTNnliRosg2+LQFBWZ8xsnkZQ5ikDJ6ORWehpHahwgUvnz7qihktWjMBfZ3XOck0Qdj0Cf51CirDBj/S1Nok5G5oYgRM0L/ECZ2mx6mVlhhRSnAL3omYTOE9my++LF4FDUfNkVlCLVSnPsMMpJIgdHjmstEmEo+bJLALLaQR5WmzSolD9eN8XRyTqt8Uxa2a/LdxMYTcg8Pe9jnCBy5clWVNIGPXTp82/CVs6f1JGTVC2CByImqtcRbbYTALnaWgJgs6Y2RRFi8D9qHnKVWqLTSJwe3nZeZnusrgf7vsMz5TZJB++wTL4WrUsBZAlqzOWq9AWm0ZgAFgEBAYQDAIDCAaBAQSDwACCQWAAwSAwgGAQGEAwCAwgGAQGEAwCAwgGgQEEg8AAgkFgAMEgMIBgEBhAMAgMIBgEBhAMAgMIBoEBBIPAAIJB4L2h6sc6UvObgGrcIVT6dqAudwiVvh2oyx3S/caBfVJ69TbBo91hfqi1HdIK3PwrU/3mEMwNlbZD3F8ZUiUCS4ZK2yEhgZP8PBLMDpW2QyI9MAiEitshDKG3A5W2QwICMwstFGoNQDAIDCAYBAYQDAIDCAaBAQSDwACCQWAAwSAwgGAQGEAwCAwgGAQGEDI68ToAAApfSURBVAwCAwgGgQEEg8AAgkFgAMEgMIBgEBhAMAgMIBgEBhAMAgMIBoEBBIPAAIJB4ITYX949/PbX3E/BzcPbvXnAa6GKeAbGLy3L20mp4vywb57FpH3fRhn/lNqxZTM17j6gOBJS/3a26hscbHaBhUrFNm656gSu0QyMX1oF0hTWvdM0+d9GGS/a2LKZGncfUBwJsY3rRx0ia94vHNE8z+qizoMZGMnBfNA8TzbYNfJg97cRR0UZBIG/geJISN24qj+3gzrcqjfX4mB/Oqz5Id56of6/2aj8LZTSw1Bnu8e5WmK2veuXly6RoizqQO2KenezZz2+Nptc9GD70uSneVM6faQJ/7Tvi6JZflDPsjyaD6GnMnnUH0h2x+6I3AxForwkWi1oj3Za2fgvENiH4kiI0wPfq3Z5t8PqU7+R6oXNiFtv9KucJdUW+mTSDEyf7bi86XSvWp1LNYbuVjS7mz3tOrOVTfViU2zfdAIbC2/t69YME0D7qDU2QXT8ekfviLoMRaK8JNpl9z61bO7+CwT2oTgS0pwDX01bvusWdzbLfsqne25rG6ldeDG+nE1/eSsfzc9tV/9Vi89Wv/PTKFqnoSWxgZ0V7u73agB/0MkbB2/tb3g3bxyO5iPioj8j9JpzK7bR9k+v+atU1nmsE3GOyMtQOEo/0e5op5VNu/XZLqLFelAcCbH6nkyHVNipHduIy34jtQuf7eDz9nP0BC7sOj9AWS+yw1x3hbP7oWrwR/Pi8HNtUmzfuFyr3vVmhr7u0Pqgu86TjnBQbiKhIxqK8ppod7TTysbf+onAPgPFQUlNxWlc7XCva5leIy2997fC3drfwt22rPpGVfWPsd1/dW91NoOAhzm9LK52afvmhdtJ+2p69S7zR6V7cz1efZhPAX9o+3pEA1F6iQ5HipfNULoQtFS1zJ4d2XgCey+6Rvp022LTyx7Uz71b8doDu/GOdc14bnm7P419dibr8XvuItRvOqokqrV+df9U3e9R///TF6t8zVAsSi9R9XJEY8um3bqgBw4QLI66DOfNyQZwGpc5YbuZ01Gvkf6Wz7PbSE/1eZ6Zyv2LngM7oZ/1JSrTmF233N3Pqpmtck6s2zcdF3V82ik3X71b1cH/2WFxl0joiAai9BLtjnZa2bRbcw4cIlIcVUnOm5MN4DQuO2XaGmAu81Rm+aPBZoK1moo1UlbbVaNPZxbaCf1nesXStOM/Z0W7e7XICGgu7djkLo1+Sr3MQtuJ7iqTfuaV6f6e6mVo+3JEzeaxKH6i3dE+ppZNuzWz0CGixUFJTcctsttBFX/tsmthexR1vLuNtL3EqQeal4du6tV21VrnOrAT+qjsHU/m/NRZ0exuFx3MALt8ex24fOpldsrNX36q9j+q7rZO+8HgHVH3ORCO4idaLbjrjN2nl02zNdeBQwwUByUlE90nxm61XBLMywKlujWUin/ZYUkQOAvxSSzG0DIp1PGxdB5C0JyyECrVdg6aIgdYNwgMIJiYwFwJBhAAAgMIBoEBBBOZhe5uwgGA9YKkAIJBYADBIDCAYBAYQDAIDCCY6J1YALB+IgJ/7LACgHyMEbiMbo2/AMsyRuDPe2Bu/pAF9TUv/37LWIHHEBx90yBEQX0l4Gsrcwgc6q29deENaBCyoL7eMqee75k2hI4bHFtLg5AF9fXC0oK+I43A8cfO0iBksdP6WlrDz0klcOyRWTttELBqlrbO4dtDSXIOPLArAsNqEGPlBFLOQo+KDzATG9DzPWkEjk5CIzDMzZZ17ZNEYNV7EY8PkIctaxoHgUE2+/K1BwKDTPbtbUs2geM3Z8GKWX197dzXHtMuI727l3JEfFg1a60vvI3At5HAZW31hbhvQGBwWU994e0o0grMJJZ0VlFfiDue0QJ/OCO1igYBo1m2vvB2MtxKCS5L1Rfefgi3UoLLEvWFuF+Q5okc8Z0RWBZz1xfqfkmS7wMjMEwHd1OAwLAAmJsKBIZ5Qd2kpHkiB5NYMArkTQ2XkWAukDcDCAyzgLt5GCWw4k4s+AbkzQY9MLgkry/czQsCg0vS+mLYnJ90D3bvBeaJHAJJV1/YOwvjBP7cRgSWRaL6wt654Av94JKkvrB3PjgHBpfv6wt3ZyXNQ+0mxIdV82V9Ie/cTBhCq096ZwSWxTf1hb0LMEngDwxGYFl8XF/YuwwIDN/Dee9ijD8H/kxGBN4+2LsgzELDd2DvonAdGL4Ae5cGgeFjsHd5eLA7fAj2rgHOgeEj0HcdIDC4jKwv9F0L2b5OGIsPq2ZUfWHveuDrhOAyor7Qd01km4XmC/0ieVtf6LsuOAcGl+H64tR3dfB1QnAZqi/0XSHcyAEu8fpC31WCwOASqy/0XSkIDC7h+kLf1cKtlPAW7F0vzELDG9B3zSQRWMUv+iKwcNB33Uy5jBSXO24pAosGfddOomdixVcgsGDwd/XwUDuIgb4CQGCIgL4SmHYrZTxK7CoTAsuirS/0lUGaWej4zggsi7q+GD1LIb/A/6big4zBVEx7oMwFMeXB7oPrIjsnFBgSMdwexm4JqyDJI3VCArf3dizVTOET3Pr6pl3BTKR5JtbQJNZyjRGm09XXx00K5iT/Q+2WbI4wlaa+Jlc0LEOay0hD8QEgIyMFHqcrAgPMS0qBRzm93qhklszmCztTZhM/1E52Yaw5Kpkls6GwHz1SJ9Kbv9/xU6g5MpstquzMfiLwwI0csgtjzVHJLJkNhUVgIVHJLJkNhY0JPHQOjMALRCWzZDYUNvGXGWQXxpqjklkyGwr7UTJMYs0flcyS2VDYxHdiAcCcJL4XGgDmBIEBBIPAAILhHBhAMEgKIBgEBhBMWGAVXwUA6yFoqRpYBwDrYfBuKgwGWDcIDCCYNAI715zqlykuQ/WjTsnThLApLpnliRosg/TlutqszpjZPI2gzFcGAyU8NWVnzqt5maDzDkQtE/z4Uj9siim7PFGDZfBtEQjK6oyZzdMIyjxl4GQ0Mgs9rQMVLnDp/FlX1HDJihH466zOWa4Jwq5H4K9TSBE2+JG+1iYxZ0MTI3CC5iVe4CwtVr2szJBCilPgXtRsAufJbPl98SJwKGqezApqsSrlGXY4hQSxwyOHlTaJcNQ8mUVgOY0gT4tNWhSqH+/74ohE/bY4Zs3st4WbKewGBP6+1xEucPmyJGsKCaN++rT5N2FL50/KqAnKFoEDUXOVq8gWm0ngPA0tQdAZM5uiaBG4HzVPuUptsUkEbi8vOy/TXRb3w32f4Zkym+TDN1gGX6uWpQCyZHXGchXaYtMIDACLgMAAgkFgAMEgMIBgEBhAMAgMIBgEBhAMAgMIBoEBBIPAAIJBYADBIDCAYBAYQDAIDCAYBAYQDAIDCAaBAQSDwACCQWAAwSAwgGAQGEAwCLw3VP1YR2p+E1CNO4RK3w7U5Q6h0rcDdblDut84sE9Kr94meLQ7zA+1tkNagZt/ZarfHIK5odJ2iPsrQ6pEYMlQaTskJHCSn0eC2aHSdkikBwaBUHE7hCH0dqDSdkhAYGahhUKtAQgGgQEEg8AAgvk/OZP50AfXagkAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "Plot with title \"Perturbation Analysis: S4 when S4 is perturbed\"" ] @@ -992,8 +995,8 @@ } ], "source": [ - "t_all <- c(tpre, tpost[-1])\n", - "y_all <- rbind(sol_pertubation_1_pre, sol_pertubation_1_post[-1, , drop = FALSE]) # avoid duplicating t=0 row\n", + "t_all <- c(tpre, tpost)\n", + "y_all <- rbind(sol_pertubation_1_pre, sol_pertubation_1_post[, , drop = FALSE])\n", "\n", "# Plot: 4 stacked panels (base graphics)\n", "\n", @@ -1002,18 +1005,25 @@ "# png(\n", "# filename = \"model_1_perturbation.png\",\n", "# width = 8, height = 8, units = \"in\",\n", - "# res = 300 # ← DPI\n", + "# res = 300 # DPI\n", "# )\n", "\n", "op <- par(mfrow = c(4,1), mar = c(4,5,3,1))\n", - "for (j in 1:4) {\n", - " plot(t_all, y_all[,j], type = \"l\", lwd = 4, col = colors[j],\n", + "for (j in 2:5) {\n", + " if (j==3) {\n", + " xlim_vals <- c(-0.005, 0.005)\n", + " ticks_seq <- seq(-0.005, 0.005, by = 0.001)\n", + " } else {\n", + " xlim_vals <- c(-0.05, 0.05)\n", + " ticks_seq <- seq(-0.05, 0.05, by = 0.01)\n", + " }\n", + " plot(t_all, y_all[,j], type = \"l\", lwd = 4, col = colors[j-1],\n", " xlab = \"Time\", ylab = paste(\"Concentration of S\", j, sep=\"\"),\n", - " xlim = c(-0.05, 0.05), xaxt = \"n\", xaxs = \"i\",\n", - " main = paste(\"Perturbation Analysis: S\", j, \" when S4 is perturbed\", sep=\"\"))\n", + " xlim = xlim_vals, xaxt = \"n\", xaxs = \"i\",\n", + " main = paste(\"Perturbation Analysis: S\", j-1, \" when S4 is perturbed\", sep=\"\"))\n", " axis(\n", " 1,\n", - " at = seq(-0.05, 0.05, by = 0.01)\n", + " at = ticks_seq\n", " )\n", " abline(v = 0, lty = 2, lwd = 2)\n", " box(lwd = 2) # black outer box\n", @@ -1023,6 +1033,299 @@ "par(op)" ] }, + { + "cell_type": "code", + "execution_count": 23, + "id": "a0e05ddf", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 1002 × 5 of type dbl
time1234
-0.0500105.49530.0016576520.010075820.3230939
-0.0499105.50630.0016573760.010074060.3230130
-0.0498105.51720.0016571000.010072310.3229321
-0.0497105.52810.0016568250.010070560.3228512
-0.0496105.53900.0016565510.010068810.3227704
-0.0495105.54990.0016562770.010067060.3226896
-0.0494105.56090.0016560030.010065310.3226088
-0.0493105.57180.0016557290.010063560.3225280
-0.0492105.58270.0016554560.010061810.3224473
-0.0491105.59360.0016551830.010060070.3223665
-0.0490105.60460.0016549100.010058320.3222859
-0.0489105.61550.0016546370.010056580.3222052
-0.0488105.62640.0016543640.010054830.3221246
-0.0487105.63730.0016540910.010053090.3220439
-0.0486105.64820.0016538190.010051350.3219634
-0.0485105.65920.0016535470.010049610.3218828
-0.0484105.67010.0016532750.010047870.3218023
-0.0483105.68100.0016530030.010046140.3217218
-0.0482105.69190.0016527310.010044400.3216413
-0.0481105.70290.0016524590.010042660.3215608
-0.0480105.71380.0016521880.010040930.3214804
-0.0479105.72470.0016519170.010039190.3214000
-0.0478105.73560.0016516460.010037460.3213196
-0.0477105.74650.0016513750.010035730.3212393
-0.0476105.75750.0016511040.010034000.3211590
-0.0475105.76840.0016508330.010032270.3210787
-0.0474105.77930.0016505630.010030540.3209984
-0.0473105.79020.0016502930.010028810.3209182
-0.0472105.80110.0016500220.010027080.3208379
-0.0471105.81200.0016497520.010025360.3207578
0.0471159.64920.0078411530.045823200.7196214
0.0472159.65510.0078415670.045830320.7196282
0.0473159.66100.0078419820.045837400.7196350
0.0474159.66690.0078423980.045844450.7196419
0.0475159.67280.0078428150.045851460.7196489
0.0476159.67870.0078432330.045858430.7196559
0.0477159.68460.0078436520.045865360.7196630
0.0478159.69050.0078440720.045872250.7196701
0.0479159.69640.0078444930.045879110.7196772
0.0480159.70230.0078449150.045885930.7196845
0.0481159.70820.0078453380.045892720.7196917
0.0482159.71410.0078457620.045899470.7196991
0.0483159.72000.0078461870.045906190.7197064
0.0484159.72590.0078466130.045912870.7197138
0.0485159.73180.0078470390.045919510.7197213
0.0486159.73770.0078474670.045926120.7197288
0.0487159.74350.0078478950.045932700.7197364
0.0488159.74940.0078483240.045939240.7197440
0.0489159.75530.0078487550.045945750.7197517
0.0490159.76120.0078491860.045952230.7197594
0.0491159.76710.0078496180.045958670.7197672
0.0492159.77300.0078500510.045965080.7197750
0.0493159.77890.0078504850.045971460.7197828
0.0494159.78480.0078509190.045977810.7197907
0.0495159.79070.0078513550.045984130.7197987
0.0496159.79650.0078517910.045990410.7198067
0.0497159.80240.0078522280.045996670.7198147
0.0498159.80830.0078526660.046002890.7198228
0.0499159.81420.0078531050.046009090.7198310
0.0500159.82010.0078535450.046015250.7198391
\n" + ], + "text/latex": [ + "A matrix: 1002 × 5 of type dbl\n", + "\\begin{tabular}{lllll}\n", + " time & 1 & 2 & 3 & 4\\\\\n", + "\\hline\n", + "\t -0.0500 & 105.4953 & 0.001657652 & 0.01007582 & 0.3230939\\\\\n", + "\t -0.0499 & 105.5063 & 0.001657376 & 0.01007406 & 0.3230130\\\\\n", + "\t -0.0498 & 105.5172 & 0.001657100 & 0.01007231 & 0.3229321\\\\\n", + "\t -0.0497 & 105.5281 & 0.001656825 & 0.01007056 & 0.3228512\\\\\n", + "\t -0.0496 & 105.5390 & 0.001656551 & 0.01006881 & 0.3227704\\\\\n", + "\t -0.0495 & 105.5499 & 0.001656277 & 0.01006706 & 0.3226896\\\\\n", + "\t -0.0494 & 105.5609 & 0.001656003 & 0.01006531 & 0.3226088\\\\\n", + "\t -0.0493 & 105.5718 & 0.001655729 & 0.01006356 & 0.3225280\\\\\n", + "\t -0.0492 & 105.5827 & 0.001655456 & 0.01006181 & 0.3224473\\\\\n", + "\t -0.0491 & 105.5936 & 0.001655183 & 0.01006007 & 0.3223665\\\\\n", + "\t -0.0490 & 105.6046 & 0.001654910 & 0.01005832 & 0.3222859\\\\\n", + "\t -0.0489 & 105.6155 & 0.001654637 & 0.01005658 & 0.3222052\\\\\n", + "\t -0.0488 & 105.6264 & 0.001654364 & 0.01005483 & 0.3221246\\\\\n", + "\t -0.0487 & 105.6373 & 0.001654091 & 0.01005309 & 0.3220439\\\\\n", + "\t -0.0486 & 105.6482 & 0.001653819 & 0.01005135 & 0.3219634\\\\\n", + "\t -0.0485 & 105.6592 & 0.001653547 & 0.01004961 & 0.3218828\\\\\n", + "\t -0.0484 & 105.6701 & 0.001653275 & 0.01004787 & 0.3218023\\\\\n", + "\t -0.0483 & 105.6810 & 0.001653003 & 0.01004614 & 0.3217218\\\\\n", + "\t -0.0482 & 105.6919 & 0.001652731 & 0.01004440 & 0.3216413\\\\\n", + "\t -0.0481 & 105.7029 & 0.001652459 & 0.01004266 & 0.3215608\\\\\n", + "\t -0.0480 & 105.7138 & 0.001652188 & 0.01004093 & 0.3214804\\\\\n", + "\t -0.0479 & 105.7247 & 0.001651917 & 0.01003919 & 0.3214000\\\\\n", + "\t -0.0478 & 105.7356 & 0.001651646 & 0.01003746 & 0.3213196\\\\\n", + "\t -0.0477 & 105.7465 & 0.001651375 & 0.01003573 & 0.3212393\\\\\n", + "\t -0.0476 & 105.7575 & 0.001651104 & 0.01003400 & 0.3211590\\\\\n", + "\t -0.0475 & 105.7684 & 0.001650833 & 0.01003227 & 0.3210787\\\\\n", + "\t -0.0474 & 105.7793 & 0.001650563 & 0.01003054 & 0.3209984\\\\\n", + "\t -0.0473 & 105.7902 & 0.001650293 & 0.01002881 & 0.3209182\\\\\n", + "\t -0.0472 & 105.8011 & 0.001650022 & 0.01002708 & 0.3208379\\\\\n", + "\t -0.0471 & 105.8120 & 0.001649752 & 0.01002536 & 0.3207578\\\\\n", + "\t ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", + "\t 0.0471 & 159.6492 & 0.007841153 & 0.04582320 & 0.7196214\\\\\n", + "\t 0.0472 & 159.6551 & 0.007841567 & 0.04583032 & 0.7196282\\\\\n", + "\t 0.0473 & 159.6610 & 0.007841982 & 0.04583740 & 0.7196350\\\\\n", + "\t 0.0474 & 159.6669 & 0.007842398 & 0.04584445 & 0.7196419\\\\\n", + "\t 0.0475 & 159.6728 & 0.007842815 & 0.04585146 & 0.7196489\\\\\n", + "\t 0.0476 & 159.6787 & 0.007843233 & 0.04585843 & 0.7196559\\\\\n", + "\t 0.0477 & 159.6846 & 0.007843652 & 0.04586536 & 0.7196630\\\\\n", + "\t 0.0478 & 159.6905 & 0.007844072 & 0.04587225 & 0.7196701\\\\\n", + "\t 0.0479 & 159.6964 & 0.007844493 & 0.04587911 & 0.7196772\\\\\n", + "\t 0.0480 & 159.7023 & 0.007844915 & 0.04588593 & 0.7196845\\\\\n", + "\t 0.0481 & 159.7082 & 0.007845338 & 0.04589272 & 0.7196917\\\\\n", + "\t 0.0482 & 159.7141 & 0.007845762 & 0.04589947 & 0.7196991\\\\\n", + "\t 0.0483 & 159.7200 & 0.007846187 & 0.04590619 & 0.7197064\\\\\n", + "\t 0.0484 & 159.7259 & 0.007846613 & 0.04591287 & 0.7197138\\\\\n", + "\t 0.0485 & 159.7318 & 0.007847039 & 0.04591951 & 0.7197213\\\\\n", + "\t 0.0486 & 159.7377 & 0.007847467 & 0.04592612 & 0.7197288\\\\\n", + "\t 0.0487 & 159.7435 & 0.007847895 & 0.04593270 & 0.7197364\\\\\n", + "\t 0.0488 & 159.7494 & 0.007848324 & 0.04593924 & 0.7197440\\\\\n", + "\t 0.0489 & 159.7553 & 0.007848755 & 0.04594575 & 0.7197517\\\\\n", + "\t 0.0490 & 159.7612 & 0.007849186 & 0.04595223 & 0.7197594\\\\\n", + "\t 0.0491 & 159.7671 & 0.007849618 & 0.04595867 & 0.7197672\\\\\n", + "\t 0.0492 & 159.7730 & 0.007850051 & 0.04596508 & 0.7197750\\\\\n", + "\t 0.0493 & 159.7789 & 0.007850485 & 0.04597146 & 0.7197828\\\\\n", + "\t 0.0494 & 159.7848 & 0.007850919 & 0.04597781 & 0.7197907\\\\\n", + "\t 0.0495 & 159.7907 & 0.007851355 & 0.04598413 & 0.7197987\\\\\n", + "\t 0.0496 & 159.7965 & 0.007851791 & 0.04599041 & 0.7198067\\\\\n", + "\t 0.0497 & 159.8024 & 0.007852228 & 0.04599667 & 0.7198147\\\\\n", + "\t 0.0498 & 159.8083 & 0.007852666 & 0.04600289 & 0.7198228\\\\\n", + "\t 0.0499 & 159.8142 & 0.007853105 & 0.04600909 & 0.7198310\\\\\n", + "\t 0.0500 & 159.8201 & 0.007853545 & 0.04601525 & 0.7198391\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 1002 × 5 of type dbl\n", + "\n", + "| time | 1 | 2 | 3 | 4 |\n", + "|---|---|---|---|---|\n", + "| -0.0500 | 105.4953 | 0.001657652 | 0.01007582 | 0.3230939 |\n", + "| -0.0499 | 105.5063 | 0.001657376 | 0.01007406 | 0.3230130 |\n", + "| -0.0498 | 105.5172 | 0.001657100 | 0.01007231 | 0.3229321 |\n", + "| -0.0497 | 105.5281 | 0.001656825 | 0.01007056 | 0.3228512 |\n", + "| -0.0496 | 105.5390 | 0.001656551 | 0.01006881 | 0.3227704 |\n", + "| -0.0495 | 105.5499 | 0.001656277 | 0.01006706 | 0.3226896 |\n", + "| -0.0494 | 105.5609 | 0.001656003 | 0.01006531 | 0.3226088 |\n", + "| -0.0493 | 105.5718 | 0.001655729 | 0.01006356 | 0.3225280 |\n", + "| -0.0492 | 105.5827 | 0.001655456 | 0.01006181 | 0.3224473 |\n", + "| -0.0491 | 105.5936 | 0.001655183 | 0.01006007 | 0.3223665 |\n", + "| -0.0490 | 105.6046 | 0.001654910 | 0.01005832 | 0.3222859 |\n", + "| -0.0489 | 105.6155 | 0.001654637 | 0.01005658 | 0.3222052 |\n", + "| -0.0488 | 105.6264 | 0.001654364 | 0.01005483 | 0.3221246 |\n", + "| -0.0487 | 105.6373 | 0.001654091 | 0.01005309 | 0.3220439 |\n", + "| -0.0486 | 105.6482 | 0.001653819 | 0.01005135 | 0.3219634 |\n", + "| -0.0485 | 105.6592 | 0.001653547 | 0.01004961 | 0.3218828 |\n", + "| -0.0484 | 105.6701 | 0.001653275 | 0.01004787 | 0.3218023 |\n", + "| -0.0483 | 105.6810 | 0.001653003 | 0.01004614 | 0.3217218 |\n", + "| -0.0482 | 105.6919 | 0.001652731 | 0.01004440 | 0.3216413 |\n", + "| -0.0481 | 105.7029 | 0.001652459 | 0.01004266 | 0.3215608 |\n", + "| -0.0480 | 105.7138 | 0.001652188 | 0.01004093 | 0.3214804 |\n", + "| -0.0479 | 105.7247 | 0.001651917 | 0.01003919 | 0.3214000 |\n", + "| -0.0478 | 105.7356 | 0.001651646 | 0.01003746 | 0.3213196 |\n", + "| -0.0477 | 105.7465 | 0.001651375 | 0.01003573 | 0.3212393 |\n", + "| -0.0476 | 105.7575 | 0.001651104 | 0.01003400 | 0.3211590 |\n", + "| -0.0475 | 105.7684 | 0.001650833 | 0.01003227 | 0.3210787 |\n", + "| -0.0474 | 105.7793 | 0.001650563 | 0.01003054 | 0.3209984 |\n", + "| -0.0473 | 105.7902 | 0.001650293 | 0.01002881 | 0.3209182 |\n", + "| -0.0472 | 105.8011 | 0.001650022 | 0.01002708 | 0.3208379 |\n", + "| -0.0471 | 105.8120 | 0.001649752 | 0.01002536 | 0.3207578 |\n", + "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", + "| 0.0471 | 159.6492 | 0.007841153 | 0.04582320 | 0.7196214 |\n", + "| 0.0472 | 159.6551 | 0.007841567 | 0.04583032 | 0.7196282 |\n", + "| 0.0473 | 159.6610 | 0.007841982 | 0.04583740 | 0.7196350 |\n", + "| 0.0474 | 159.6669 | 0.007842398 | 0.04584445 | 0.7196419 |\n", + "| 0.0475 | 159.6728 | 0.007842815 | 0.04585146 | 0.7196489 |\n", + "| 0.0476 | 159.6787 | 0.007843233 | 0.04585843 | 0.7196559 |\n", + "| 0.0477 | 159.6846 | 0.007843652 | 0.04586536 | 0.7196630 |\n", + "| 0.0478 | 159.6905 | 0.007844072 | 0.04587225 | 0.7196701 |\n", + "| 0.0479 | 159.6964 | 0.007844493 | 0.04587911 | 0.7196772 |\n", + "| 0.0480 | 159.7023 | 0.007844915 | 0.04588593 | 0.7196845 |\n", + "| 0.0481 | 159.7082 | 0.007845338 | 0.04589272 | 0.7196917 |\n", + "| 0.0482 | 159.7141 | 0.007845762 | 0.04589947 | 0.7196991 |\n", + "| 0.0483 | 159.7200 | 0.007846187 | 0.04590619 | 0.7197064 |\n", + "| 0.0484 | 159.7259 | 0.007846613 | 0.04591287 | 0.7197138 |\n", + "| 0.0485 | 159.7318 | 0.007847039 | 0.04591951 | 0.7197213 |\n", + "| 0.0486 | 159.7377 | 0.007847467 | 0.04592612 | 0.7197288 |\n", + "| 0.0487 | 159.7435 | 0.007847895 | 0.04593270 | 0.7197364 |\n", + "| 0.0488 | 159.7494 | 0.007848324 | 0.04593924 | 0.7197440 |\n", + "| 0.0489 | 159.7553 | 0.007848755 | 0.04594575 | 0.7197517 |\n", + "| 0.0490 | 159.7612 | 0.007849186 | 0.04595223 | 0.7197594 |\n", + "| 0.0491 | 159.7671 | 0.007849618 | 0.04595867 | 0.7197672 |\n", + "| 0.0492 | 159.7730 | 0.007850051 | 0.04596508 | 0.7197750 |\n", + "| 0.0493 | 159.7789 | 0.007850485 | 0.04597146 | 0.7197828 |\n", + "| 0.0494 | 159.7848 | 0.007850919 | 0.04597781 | 0.7197907 |\n", + "| 0.0495 | 159.7907 | 0.007851355 | 0.04598413 | 0.7197987 |\n", + "| 0.0496 | 159.7965 | 0.007851791 | 0.04599041 | 0.7198067 |\n", + "| 0.0497 | 159.8024 | 0.007852228 | 0.04599667 | 0.7198147 |\n", + "| 0.0498 | 159.8083 | 0.007852666 | 0.04600289 | 0.7198228 |\n", + "| 0.0499 | 159.8142 | 0.007853105 | 0.04600909 | 0.7198310 |\n", + "| 0.0500 | 159.8201 | 0.007853545 | 0.04601525 | 0.7198391 |\n", + "\n" + ], + "text/plain": [ + " time 1 2 3 4 \n", + " [1,] -0.0500 105.4953 0.001657652 0.01007582 0.3230939\n", + " [2,] -0.0499 105.5063 0.001657376 0.01007406 0.3230130\n", + " [3,] -0.0498 105.5172 0.001657100 0.01007231 0.3229321\n", + " [4,] -0.0497 105.5281 0.001656825 0.01007056 0.3228512\n", + " [5,] -0.0496 105.5390 0.001656551 0.01006881 0.3227704\n", + " [6,] -0.0495 105.5499 0.001656277 0.01006706 0.3226896\n", + " [7,] -0.0494 105.5609 0.001656003 0.01006531 0.3226088\n", + " [8,] -0.0493 105.5718 0.001655729 0.01006356 0.3225280\n", + " [9,] -0.0492 105.5827 0.001655456 0.01006181 0.3224473\n", + "[10,] -0.0491 105.5936 0.001655183 0.01006007 0.3223665\n", + "[11,] -0.0490 105.6046 0.001654910 0.01005832 0.3222859\n", + "[12,] -0.0489 105.6155 0.001654637 0.01005658 0.3222052\n", + "[13,] -0.0488 105.6264 0.001654364 0.01005483 0.3221246\n", + "[14,] -0.0487 105.6373 0.001654091 0.01005309 0.3220439\n", + "[15,] -0.0486 105.6482 0.001653819 0.01005135 0.3219634\n", + "[16,] -0.0485 105.6592 0.001653547 0.01004961 0.3218828\n", + "[17,] -0.0484 105.6701 0.001653275 0.01004787 0.3218023\n", + "[18,] -0.0483 105.6810 0.001653003 0.01004614 0.3217218\n", + "[19,] -0.0482 105.6919 0.001652731 0.01004440 0.3216413\n", + "[20,] -0.0481 105.7029 0.001652459 0.01004266 0.3215608\n", + "[21,] -0.0480 105.7138 0.001652188 0.01004093 0.3214804\n", + "[22,] -0.0479 105.7247 0.001651917 0.01003919 0.3214000\n", + "[23,] -0.0478 105.7356 0.001651646 0.01003746 0.3213196\n", + "[24,] -0.0477 105.7465 0.001651375 0.01003573 0.3212393\n", + "[25,] -0.0476 105.7575 0.001651104 0.01003400 0.3211590\n", + "[26,] -0.0475 105.7684 0.001650833 0.01003227 0.3210787\n", + "[27,] -0.0474 105.7793 0.001650563 0.01003054 0.3209984\n", + "[28,] -0.0473 105.7902 0.001650293 0.01002881 0.3209182\n", + "[29,] -0.0472 105.8011 0.001650022 0.01002708 0.3208379\n", + "[30,] -0.0471 105.8120 0.001649752 0.01002536 0.3207578\n", + "[31,] ⋮ ⋮ ⋮ ⋮ ⋮ \n", + "[32,] 0.0471 159.6492 0.007841153 0.04582320 0.7196214\n", + "[33,] 0.0472 159.6551 0.007841567 0.04583032 0.7196282\n", + "[34,] 0.0473 159.6610 0.007841982 0.04583740 0.7196350\n", + "[35,] 0.0474 159.6669 0.007842398 0.04584445 0.7196419\n", + "[36,] 0.0475 159.6728 0.007842815 0.04585146 0.7196489\n", + "[37,] 0.0476 159.6787 0.007843233 0.04585843 0.7196559\n", + "[38,] 0.0477 159.6846 0.007843652 0.04586536 0.7196630\n", + "[39,] 0.0478 159.6905 0.007844072 0.04587225 0.7196701\n", + "[40,] 0.0479 159.6964 0.007844493 0.04587911 0.7196772\n", + "[41,] 0.0480 159.7023 0.007844915 0.04588593 0.7196845\n", + "[42,] 0.0481 159.7082 0.007845338 0.04589272 0.7196917\n", + "[43,] 0.0482 159.7141 0.007845762 0.04589947 0.7196991\n", + "[44,] 0.0483 159.7200 0.007846187 0.04590619 0.7197064\n", + "[45,] 0.0484 159.7259 0.007846613 0.04591287 0.7197138\n", + "[46,] 0.0485 159.7318 0.007847039 0.04591951 0.7197213\n", + "[47,] 0.0486 159.7377 0.007847467 0.04592612 0.7197288\n", + "[48,] 0.0487 159.7435 0.007847895 0.04593270 0.7197364\n", + "[49,] 0.0488 159.7494 0.007848324 0.04593924 0.7197440\n", + "[50,] 0.0489 159.7553 0.007848755 0.04594575 0.7197517\n", + "[51,] 0.0490 159.7612 0.007849186 0.04595223 0.7197594\n", + "[52,] 0.0491 159.7671 0.007849618 0.04595867 0.7197672\n", + "[53,] 0.0492 159.7730 0.007850051 0.04596508 0.7197750\n", + "[54,] 0.0493 159.7789 0.007850485 0.04597146 0.7197828\n", + "[55,] 0.0494 159.7848 0.007850919 0.04597781 0.7197907\n", + "[56,] 0.0495 159.7907 0.007851355 0.04598413 0.7197987\n", + "[57,] 0.0496 159.7965 0.007851791 0.04599041 0.7198067\n", + "[58,] 0.0497 159.8024 0.007852228 0.04599667 0.7198147\n", + "[59,] 0.0498 159.8083 0.007852666 0.04600289 0.7198228\n", + "[60,] 0.0499 159.8142 0.007853105 0.04600909 0.7198310\n", + "[61,] 0.0500 159.8201 0.007853545 0.04601525 0.7198391" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "y_all" + ] + }, { "cell_type": "markdown", "id": "dc7729e7", diff --git a/examples/model_2_complex_formation_R.ipynb b/examples/model_2_complex_formation_R.ipynb index e69de29..400177a 100644 --- a/examples/model_2_complex_formation_R.ipynb +++ b/examples/model_2_complex_formation_R.ipynb @@ -0,0 +1,1624 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c1123f2d", + "metadata": {}, + "source": [ + "## **0. Initialization**" + ] + }, + { + "cell_type": "markdown", + "id": "3aa06e65", + "metadata": {}, + "source": [ + "### **Installation**\n", + "LoopDetectR is on CRAN and can be installed within R by" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a5aaaa97", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Before running the R code cells in jupyter notebook,\n", + "# initialize the R kernel by this line of code:\n", + "# IRkernel::installspec()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "357901cd", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'LoopDetectR' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "# Download and install\n", + "install.packages(\"LoopDetectR\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cbf8efe3", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'deSolve' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'numDeriv' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "install.packages(\"deSolve\") # if not already installed\n", + "install.packages(\"numDeriv\") # if not already installed" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "5bc2137e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "── \u001b[1mAttaching core tidyverse packages\u001b[22m ──────────────────────── tidyverse 2.0.0 ──\n", + "\u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 1.1.4 \u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 2.1.6\n", + "\u001b[32m✔\u001b[39m \u001b[34mforcats \u001b[39m 1.0.1 \u001b[32m✔\u001b[39m \u001b[34mstringr \u001b[39m 1.6.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mggplot2 \u001b[39m 4.0.1 \u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 3.3.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mlubridate\u001b[39m 1.9.4 \u001b[32m✔\u001b[39m \u001b[34mtidyr \u001b[39m 1.3.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mpurrr \u001b[39m 1.2.0 \n", + "── \u001b[1mConflicts\u001b[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\u001b[36mℹ\u001b[39m Use the conflicted package (\u001b[3m\u001b[34m\u001b[39m\u001b[23m) to force all conflicts to become errors\n" + ] + } + ], + "source": [ + "# Load package\n", + "library(\"LoopDetectR\")\n", + "library(deSolve)\n", + "library(tidyverse)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9dd37926", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "colors <- c('#EE7733', '#0077BB', '#33BBEE', '#EE3377', '#CC3311', '#009988', '#BBBBBB')" + ] + }, + { + "cell_type": "markdown", + "id": "ef9fc41b", + "metadata": {}, + "source": [ + "## **1. Model definition**" + ] + }, + { + "cell_type": "markdown", + "id": "b1adc5c3", + "metadata": {}, + "source": [ + "Model 2: Model for Complex Formation \n", + "\n", + "Varusai TM, Kolch W, Kholodenko BN, Nguyen LK (2015) Protein-protein interactions\n", + "generate hidden feedback and feed-forward loops to trigger bistable switches, oscillations\n", + "and biphasic dose-responses. Molecular bioSystems 11: 2750-2762.\n", + "\n", + "Supplement Data Table S4 is for Model 3.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "cf9c4c03", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "func_varusai15_simple <- function(t,x,params){\n", + " # function: Complex Formation [Varusai et al., 2015]\n", + " #\n", + " # Varusai TM, Kolch W, Kholodenko BN, Nguyen LK (2015) Protein-protein interactions\n", + " # generate hidden feedback and feed-forward loops to trigger bistable switches, oscillations\n", + " # and biphasic dose-responses. Molecular bioSystems 11: 2750-2762.\n", + " #\n", + " dx <- rep(0,3)\n", + " dx[1] <- -params[1] * x[1] * x[2] + params[2]* x[3];\n", + " dx[2] <- -params[1] * x[1] * x[2] + params[2]* x[3];\n", + " dx[3] <- params[1] * x[1] * x[2] - params[2]* x[3];\n", + " return(dx)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "dae5e300", + "metadata": {}, + "source": [ + "## **2. Result reproduction**" + ] + }, + { + "cell_type": "markdown", + "id": "58ea4a5b", + "metadata": {}, + "source": [ + "### **2.1. Loop structures**" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "d9f19514", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Parameters from supplementary material\n", + "params <- c(1.0, 2.0)\n", + "s_star <- c(10.0, 5.0, 2.0) # Dummy steady state for initialization\n", + "\n", + "# Parameters not yet in supplement data\n", + "perturbation_point <- 0.2" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "4f929c59", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 8 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11-1
2, 21-1
3, 31-1
1, 2, 12 1
1, 3, 12 1
1, 3, 2, 13-1
2, 3, 1, 23-1
2, 3, 22 1
\n" + ], + "text/latex": [ + "A data.frame: 8 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\t 1, 3, 1 & 2 & 1\\\\\n", + "\t 1, 3, 2, 1 & 3 & -1\\\\\n", + "\t 2, 3, 1, 2 & 3 & -1\\\\\n", + "\t 2, 3, 2 & 2 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 8 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "| 1, 3, 1 | 2 | 1 |\n", + "| 1, 3, 2, 1 | 3 | -1 |\n", + "| 2, 3, 1, 2 | 3 | -1 |\n", + "| 2, 3, 2 | 2 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "1 1, 1 1 -1 \n", + "2 2, 2 1 -1 \n", + "3 3, 3 1 -1 \n", + "4 1, 2, 1 2 1 \n", + "5 1, 3, 1 2 1 \n", + "6 1, 3, 2, 1 3 -1 \n", + "7 2, 3, 1, 2 3 -1 \n", + "8 2, 3, 2 2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# compute loops\n", + "res_tab <- find_loops_vset(func_varusai15_simple,vset=list(s_star),t=1,params=params,max_num_loops=10)\n", + "# The loop list is reported\n", + "res_tab$loop_rep[[1]] \n", + "# To access a specific loop representation: e.g., the sixth loop, add [6,]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "54b7b1a3", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 3
len_1len_2len_3
<dbl><dbl><dbl>
all332
pos030
neg302
\n" + ], + "text/latex": [ + "A data.frame: 3 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & len\\_1 & len\\_2 & len\\_3\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\tall & 3 & 3 & 2\\\\\n", + "\tpos & 0 & 3 & 0\\\\\n", + "\tneg & 3 & 0 & 2\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 3\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> | len_3 <dbl> |\n", + "|---|---|---|---|\n", + "| all | 3 | 3 | 2 |\n", + "| pos | 0 | 3 | 0 |\n", + "| neg | 3 | 0 | 2 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2 len_3\n", + "all 3 3 2 \n", + "pos 0 3 0 \n", + "neg 3 0 2 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab$loop_rep[[1]])" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "2631d303", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 5 × 3
looplengthsign
<I<list>><dbl><dbl>
2 2, 21-1
4 1, 2, 12 1
61, 3, 2, 13-1
72, 3, 1, 23-1
8 2, 3, 22 1
\n" + ], + "text/latex": [ + "A data.frame: 5 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t2 & 2, 2 & 1 & -1\\\\\n", + "\t4 & 1, 2, 1 & 2 & 1\\\\\n", + "\t6 & 1, 3, 2, 1 & 3 & -1\\\\\n", + "\t7 & 2, 3, 1, 2 & 3 & -1\\\\\n", + "\t8 & 2, 3, 2 & 2 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 5 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 2 | 2, 2 | 1 | -1 |\n", + "| 4 | 1, 2, 1 | 2 | 1 |\n", + "| 6 | 1, 3, 2, 1 | 3 | -1 |\n", + "| 7 | 2, 3, 1, 2 | 3 | -1 |\n", + "| 8 | 2, 3, 2 | 2 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "2 2, 2 1 -1 \n", + "4 1, 2, 1 2 1 \n", + "6 1, 3, 2, 1 3 -1 \n", + "7 2, 3, 1, 2 3 -1 \n", + "8 2, 3, 2 2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Index of node of interest\n", + "noi <- 2 \n", + "# Return all loops from loop_list containing node 2\n", + "loop_list <- res_tab$loop_rep[[1]]\n", + "loop_list[vapply(loop_list$loop,function(x){noi %in% x},logical(1)),]" + ] + }, + { + "cell_type": "markdown", + "id": "adee57fb", + "metadata": {}, + "source": [ + "### **2.2. Calculating the Jacobian matrix**\n", + "\n", + "Sign jacobian matrix can be access via `res_tab` variable that we have calculated above, or derived from a jacobian matrix at a specific state" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "a3bf2b5d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$loop_rep
\n", + "\t\t
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A data.frame: 8 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11-1
    2, 21-1
    3, 31-1
    1, 2, 12 1
    1, 3, 12 1
    1, 3, 2, 13-1
    2, 3, 1, 23-1
    2, 3, 22 1
    \n", + "
  2. \n", + "
\n", + "
\n", + "\t
$loop_rep_index
\n", + "\t\t
1
\n", + "\t
$jac_rep
\n", + "\t\t
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 3 × 3 of type dbl
    -1-1 1
    -1-1 1
    1 1-1
    \n", + "
  2. \n", + "
\n", + "
\n", + "\t
$jac_rep_index
\n", + "\t\t
1
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$loop\\_rep] \\begin{enumerate}\n", + "\\item A data.frame: 8 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\t 1, 3, 1 & 2 & 1\\\\\n", + "\t 1, 3, 2, 1 & 3 & -1\\\\\n", + "\t 2, 3, 1, 2 & 3 & -1\\\\\n", + "\t 2, 3, 2 & 2 & 1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n", + "\n", + "\\item[\\$loop\\_rep\\_index] 1\n", + "\\item[\\$jac\\_rep] \\begin{enumerate}\n", + "\\item A matrix: 3 × 3 of type dbl\n", + "\\begin{tabular}{lll}\n", + "\t -1 & -1 & 1\\\\\n", + "\t -1 & -1 & 1\\\\\n", + "\t 1 & 1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n", + "\n", + "\\item[\\$jac\\_rep\\_index] 1\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$loop_rep\n", + ": 1. \n", + "A data.frame: 8 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "| 1, 3, 1 | 2 | 1 |\n", + "| 1, 3, 2, 1 | 3 | -1 |\n", + "| 2, 3, 1, 2 | 3 | -1 |\n", + "| 2, 3, 2 | 2 | 1 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "$loop_rep_index\n", + ": 1\n", + "$jac_rep\n", + ": 1. \n", + "A matrix: 3 × 3 of type dbl\n", + "\n", + "| -1 | -1 | 1 |\n", + "| -1 | -1 | 1 |\n", + "| 1 | 1 | -1 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "$jac_rep_index\n", + ": 1\n", + "\n", + "\n" + ], + "text/plain": [ + "$loop_rep\n", + "$loop_rep[[1]]\n", + " loop length sign\n", + "1 1, 1 1 -1\n", + "2 2, 2 1 -1\n", + "3 3, 3 1 -1\n", + "4 1, 2, 1 2 1\n", + "5 1, 3, 1 2 1\n", + "6 1, 3, 2, 1 3 -1\n", + "7 2, 3, 1, 2 3 -1\n", + "8 2, 3, 2 2 1\n", + "\n", + "\n", + "$loop_rep_index\n", + "[1] 1\n", + "\n", + "$jac_rep\n", + "$jac_rep[[1]]\n", + " [,1] [,2] [,3]\n", + "[1,] -1 -1 1\n", + "[2,] -1 -1 1\n", + "[3,] 1 1 -1\n", + "\n", + "\n", + "$jac_rep_index\n", + "[1] 1\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res_tab" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "f43813a7", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 3 × 3 of type dbl
-1-1 1
-1-1 1
1 1-1
\n" + ], + "text/latex": [ + "A matrix: 3 × 3 of type dbl\n", + "\\begin{tabular}{lll}\n", + "\t -1 & -1 & 1\\\\\n", + "\t -1 & -1 & 1\\\\\n", + "\t 1 & 1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 3 × 3 of type dbl\n", + "\n", + "| -1 | -1 | 1 |\n", + "| -1 | -1 | 1 |\n", + "| 1 | 1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3]\n", + "[1,] -1 -1 1 \n", + "[2,] -1 -1 1 \n", + "[3,] 1 1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The corresponding signed Jacobian matrix\n", + "res_tab$jac_rep[[1]]" + ] + }, + { + "cell_type": "markdown", + "id": "f9454da1", + "metadata": {}, + "source": [ + "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003].\n", + "\n", + "The input function, in the example `func_POSm4` (positive feedback chain model from [Baum et al., 2016]) defines the time derivatives of the modelled variables as a vector: \n", + "$f_i(s)=dS_i/dt$. Note that only those input arguments to the function that encode the modelled variables (and hence in whose direction the partial derivatives are taken) are allowed to be called `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "dbd42fd2", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
1
6.62356545421023
2
1.62356545421025
3
5.37643454578977
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[1] 6.62356545421023\n", + "\\item[2] 1.62356545421025\n", + "\\item[3] 5.37643454578977\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "1\n", + ": 6.623565454210232\n", + ": 1.623565454210253\n", + ": 5.37643454578977\n", + "\n" + ], + "text/plain": [ + " 1 2 3 \n", + "6.623565 1.623565 5.376435 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The function func_POSm4 returns a vector, but deSolve needs the vector within\n", + "# a list as output. Therefore, we define a function that simply puts the output \n", + "# of func_POSm4 into a list:\n", + "func_list <- function(t,x,params){list(func_varusai15_simple(t,x,params))}\n", + "sol <- deSolve::ode(y = s_star, times = seq(0,1,0.001), func = func_list, \n", + " parms=params)\n", + "\n", + "# Set the last point of the numeric solution as point of interest, omit the \n", + "# first column (it contains the time)\n", + "s_star_end <- sol[dim(sol)[1],2:dim(sol)[2]]\n", + "s_star_end" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "2f3d21ac", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 3 × 3 of type dbl
-1.233223-1.233223 2
-1.233223-1.233223 2
1.233223 1.233223-2
\n" + ], + "text/latex": [ + "A matrix: 3 × 3 of type dbl\n", + "\\begin{tabular}{lll}\n", + "\t -1.233223 & -1.233223 & 2\\\\\n", + "\t -1.233223 & -1.233223 & 2\\\\\n", + "\t 1.233223 & 1.233223 & -2\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 3 × 3 of type dbl\n", + "\n", + "| -1.233223 | -1.233223 | 2 |\n", + "| -1.233223 | -1.233223 | 2 |\n", + "| 1.233223 | 1.233223 | -2 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3]\n", + "[1,] -1.233223 -1.233223 2 \n", + "[2,] -1.233223 -1.233223 2 \n", + "[3,] 1.233223 1.233223 -2 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "j_matrix <- numDeriv::jacobian(func_varusai15_simple,s_star,method=\"complex\",\n", + " t=1,params=params)\n", + "j_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "67868589", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 3 × 3 of type dbl
-1-1 1
-1-1 1
1 1-1
\n" + ], + "text/latex": [ + "A matrix: 3 × 3 of type dbl\n", + "\\begin{tabular}{lll}\n", + "\t -1 & -1 & 1\\\\\n", + "\t -1 & -1 & 1\\\\\n", + "\t 1 & 1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 3 × 3 of type dbl\n", + "\n", + "| -1 | -1 | 1 |\n", + "| -1 | -1 | 1 |\n", + "| 1 | 1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3]\n", + "[1,] -1 -1 1 \n", + "[2,] -1 -1 1 \n", + "[3,] 1 1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "signed_jacobian <- sign(j_matrix)\n", + "signed_jacobian" + ] + }, + { + "cell_type": "markdown", + "id": "fb34cf9c", + "metadata": {}, + "source": [ + "### **2.3. Temporal dynamics**" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "e8883776", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "matplot(\n", + " sol[,1], sol[,2:4],\n", + " type = \"l\",\n", + " lty = 1,\n", + " xlab = \"Time\",\n", + " ylab = \"Concentration\",\n", + ")\n", + "\n", + "legend(\n", + " \"topright\",\n", + " legend = c(\"A\", \"B\", \"AB\"),\n", + " col = 1:3,\n", + " lty = 1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "3beedbcf", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol_for_plot <- as.data.frame(sol)\n", + "\n", + "# rename columns for clarity\n", + "colnames(sol_for_plot) <- c(\"time\", \"A\", \"B\", \"AB\")\n", + "\n", + "# reshape to long format\n", + "sol_long <- sol_for_plot %>%\n", + " pivot_longer(cols = A:AB, names_to = \"species\", values_to = \"value\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "26027184", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAMAAABoqemGAAAAY1BMVEUAAAAAd7szu+5NTU1oaGh8fHyDg4OMjIyVlZWampqjo6Onp6evr6+ysrK5ubm9vb3BwcHHx8fJycnQ0NDR0dHY2NjZ2dne3t7h4eHk5OTp6enq6urudzPv7+/w8PD19fX///+RWOwYAAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2d62LaPLOFZ3+CEEIoTclLKW0p93+VG1s+yZaNLVujGbKeHwkIozWWZiFbPtENAKAWSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcGrtczWpzuMaM6M5CVV22hmi9a5XuwnSuuzWR2R47H9yLqVl6ur9fP65vQN/30ehwz7tN1kmeQGcQ1inUYsmIasr+DVWwsW2q95uxwU7swTiMlWl1xT5iRIut+9nG6prpsqYgnUO56pv2Jx/3wm3j/e7+/uNxhXEMfF5XfWROI5YfiVwDV/0508DU+37wi9M/WpixMu2+GDHEhEa02LpvbajOCHw0Ze3TdA4Dq96qyYyrOIqBj04ntbc9whFr4Lo/5xq4/Lk7fQ0DdwcieWRh3ofCa7us/WoE1+aqH1ofZj8U9QZrlgDb2yyCDez6d9SGQHhE474V2cALVFsEV25U7p/XwPbV9bzPxhhadB8rCsM+mNTG+8K4+RZqewh2Lbtr/JoHEmrgS555u3MWU74nZ+bFMU19qW9xSxSGXRVvV89u4DvXdWOF5bKggddUDLxX39ecjWYz3zehBs5May7FmyNRd2NhyYhifYtbIqsi61+7pXYt3o2oVa+Bb1djh5nWD1e13HGTTdieq8X3+Xiw3p2blR3u7bTOMuy8u1e3KUf0ptJ5t2p+z1PQ4LrPGn6zv9b1tH9Km2X23+m+/bvaXaoljtnE9apT/8d+Y3wNYcnG5zL8bDje+1fbfve+/bLauxX1tM99Vdfl2ji6PUHmPy71quwavdNqm8EeyD/Lv7AaoX6pVVaOfE9beYJx2mUwN9ot5fRxU82/vq20bHyW9aDd3/go3lFPTUXJ6uAItntEuoHzlN3bvT/bZVk/bovlLuVMaDGJ0tgz21WVXYwtWVc7Hd3DO5vW9xpTSd1p8H312aGqhxqVtcvyf7vifZkhlWLfLv6RPHu4l0bhrmqSzmrnkvkqfDjrOdg+pmmr4SAP5MxbXVe749XfNoM94KifHqpXqltqj/it1r/1BOO0y1BknZaq3rXU/OvbSstmlIdt2YPZi0NdVTfYY9k0l3qpTo/41zwGY2VaEZ1tsEdq/nAdi+VMtdL5L9KJGhxv7YXqpU8tJdP43rZdU3s3c934rNu5jbUoy/IF3UiblXin2S9511465ataxpRf7a52td4bZz0ftE+nWXqD3Hiaxd82rkJLyi2qh7o+9bX94ke30epvDQbjtMtQZJ2Wqt70xuhbX3LH4KzkcCx3fO5LHWsDd2uqYzC+pdYDax6FsTLtiMiuMJU/OptGK9L6VPxQ5bZbF8NIPgFU5S5tr3Zfun61cZXy8xGO2SZL2V/ZQnv/LridZbpXdMh0D25N3vXIpTf3SE+m7J1NEft5Q75jMIc6c1p8VMVZ/9qftO5qW8lyZrjZ/b72WWWhrahMLKdZ/EFmC/tOsfG0zVAPuOqrh+rZSGSu+XjU+mkjl75gnHYZiqynSdsN2re+blo6UR6z3Y/M19nIdD2WVXlqMs3GsUt52sSXenEYK9OOqHi/LYvLZskbKi85lrl32a/sT141AURl+5+rV6dOpp6r7Mnbcd34qLFxWNDY/csz6eqL2S2rIz0VSueqJO+TjhfscWXfOSzXKit2Vf3d1c4lK8tVpf72KVY9y5djc/GBIHuyxtc2Qz1AVVeMVM9+vja1Hd2AGvQF47TLUGQ9Tdpa/b71baWlE+U5+3HIwj9ky52Lqjw1Nb5ejsC+NunpigiMlWlHVLzP1ifbujk1e9puxnnma5sJWm8YtjYRyxc7qga70rBEfUev9o0UyL6498XsltXSZWHjANDJk47lAYZVdxO6/iEznl1kZ9VOndLugo31rE7zajZLT5A9WeNrm6EeyP4Xw+FhnHqxC+g9w6VBXzBOuwzmRndVGx8NSdR1ddMyKzhb596sj0sDe2ra1o3zMZA2PV0RgbEy7YgavZ2tYjXwZOVX31eup/268SW6tRbvdEk9s1+RV7Dae6ag11Tv2VS/iL5W9EmXhevG8uSZxzoXm/Oeo0TZD1lmueqHzLfaRap0Iuks2AitmuRtNktPkD1Z42uboR7I/l8mqV/t7mXnh41c+oJx2mUwN6xau0lb3+xbX29aVuoXKmdGLpWBPTU1dlMujaXabdLTFREYK9OOqHy/tT28KgceT4Nmcz/1fLL7iedVd6GKagKhc6a+s/BADV7p8mUr3/xHc7NBqRo2qjUqR95d82vt1fZH6VmwuVy7bCDIzEaefWCf6lAPBKjng1H3mLOnAx521FBkw03qq627vt2gsoJznsLH7Id4dasM7KnJE6qvTTxrHomxMq2IilloO/Rc8h+jY3u58mU1fV81+2Anefuh4FjPT7oWfpgX3QW7kbZ6ovPdnGwTrBqU6sWKTRBTb3N1V9sf5WD7PLRQM8jWLHRzx6OtOtQDAep5xnfP2/Q0orcJfIq+V8NN6qutu77doLKCc96DO/tnnoG7MURlrEwronrvgLKf3oOn1cuX9qCe2RxO1+7qeV4Nt8FH1YfOAZOHedFdsBuprye6NGuvF7M/YdkmQrn12V1tf5SD7TPJwM1dtpvdVlj1qA71QIC6XQXvJvRQ0ZCi59WDJvXV1l3fblBZwTnfvFtlw/DpSxi4OBPrlm9Dr7PdgG1nueJlttu/vjgfDqVP9aK5A+JwzM/GcqdMNhS0D+wWrj3LF+w3m8apdtVKUF1JvhOxqw9veVbbm1p97dM40clZmYEgW0dysj7KNvZ9bTPUA9PVhyaxPIsOdtRAZA+atHw5vL7doMr1zY4A2y3g0sCemtbkTBBQT5v4Ui8OY2XciBpn6WXb0FlSd08YKl7WJdNG4MZltcXG4PVuXeuiU7uBAmeh3cKByxCqc6GrQ1ptst3ALAc6h3n9xzx8v2ZO++zranfNxYaulXDOhc43Va63/lnZdpzB6tlQn53K1DnC5umAhx01ENmDJi1fDq9vN6isILNpNp1jB6KBWehGVpane/jaxJd6cRgr04jo/JGPgI1zlzfe5mk0u7Xdrpuznlfli6wVi0mS4vdiVedIu4Eag0/90teKPunyZeOAXpu8s/bX4qQS3yUC+aFgqmeRPKvtBtRsDE/7FEZcUf+R2A554plslv56zPto5zZI/XKoB1rqp+ZnPvVimF5RZ4vJ0wEPO2ogsgdNWr4cXt9uUGW19jzNrLHL3wdPTfVx4KvnOPDQmkdirAy1qY5f2NMbto3l3Jf5BXjn8gI3chfyvKpedM7Eyls4O6v8kmm6Z0rlUVTnzHRmxCtMnmatuZ3yZal4u+zap4o0T+v0T0+77eBbbTeg8k1P++TTdKf6nLNOs3iCbN52oBGop22GesBVXz9UX2UnYhUnZLlN4uuARx01EJmvSev+rJcfXN9uUE73kFPkqSk/O608f683bXxrHoexMtSi/smpf7jK5dyXrYvMH/3+1y+uTdPkvxebRoHxHSN2g/O1Ym0zT586iq07eTSUPSdydNrBt9puQOWbnvYx7ld7mqV9wqfjYHdr2mmbOpLuK0fdPFTPWjQfpdu3FupJ4wcdNRCZr0kbP5v18kPr2w2qKvD8XnVrutRNUy7l6RHvmkdhrIzbds7eDvnbv3pZXdCRX+VxvI018O3auRqpvvigezpUfd1IGZyvFU9VX/j6tHmcorVDVx3B8p2IlZMt0BiCuqvtBlS98bdP//VAA0Het+dW1Web+ieu0zZDPZCrF9WUvwH96tVusnOWUvtbTYY7aigyT5PW/dmsZWB9u0FVBR9V/PUy3WCrjqmvRur2iH/NYzBWpo6QVpsPZ/TL+m3bXK798lxeLJmt8uY22sDZ1bpZIm32lWfOu3yj0nvLRXut6Lp1mWmbbLtwteuJ9P5xPsXdXsWc/ByCTf9danbkDoid1XYDqt/0tI+9Ite3MgNBZh/mI4l7tXC7bYZ6wP6vrsgdVs/SubquZNXaPOlJ48GOGsyNbpPW/enU0r++3aBqH1Jnc8cT7L1jigu1B9JGnoEHaJy0DJ4AvuQD86HZNXhvMgP0gv7UBM2tIL9ac7n7l4LkwMCaoJlft/TN6wCFwMCaoJlfz8Ee8DMBA2uC5n195bvNH1ANDKwJSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAcSh0AACAc4tAAQCkM9pgHcWgAoBQGe8yDODQ4RMYhKBQgHwXpQhwaHCLjEBQKkI+CdCEODQ6RcQgKBchHQboQhwaHyDgEhQLkoyBdiEODQ2QcgkIB8lGQLsShwSEyDkGhAPkoSBfi0OAQGYegUIB8FKQLcWhwiIxDUChAPgrShTg0OEQAWBwFmUscGhwiACyOgswlDg0OEQAWR0HmEocGhwgAi6Mgc4lDg0MEgMVRkLnEocEhAsDiKMhc4tDgEAFgcRRkLnFocIgAsDgKMpc4NDhExiEoFCAfBelCHBocIuMQFAqQj4J0oYDvfDfFi89XY94+mx91S26imkFQKEA+CtKFpn/lP1MY+N3kvNcfdUtyjQCRSAgKBchHQbrQ5G98M4WBf5uXn7fbzxfzt/yoW2I1povEQlAoQD4K0oUmLv/5Yr4VBv5h/sv+/TTVJnO3xGpMFYmHoFCAfBSkC01c3rz+vBUGfje/bVG1xdwtsRpTReIhKBQgHwXpQhOXv28ilwZ+KXaFzUv5YbfEatDtz5/A+BZGQY8AOShIFwr4TmHgci6r/O8rsRr0R4qBAZgADGw1MgPDwUAdMLDVgIGBSp7bwBP2gWFgoJHnNnAx5/y7Mwv9uzMLDQMDjTy3gX/Yw72f5kf5QbfEasDAQCXPbeC/5XlXv8sPuiVWAwYGKnluAztnPtuyvnOh/8DBQCFPbuDbf+8v5vWzWdYoaWjIMbCCHgFyUJAuxKEBAwOVKEgX4tCwBpbgYAU9AuSgIF2IQwMGBipRkC7EoQEDA5UoSBfi0ICBgUoUpAtxaMDAQCUK0oU4NAoDC3Cwgh4BclCQLsShIcfAAEwABrYaMDBQCQxsNUoDw8FAFTCw1YCBgUpgYKsBAwOVwMBWAwYGKoGBrQYMDFQCA1uNysBwMNAEDGw15BhYQY8AOShIF+LQgIGBShSkC3Fo1AZO7WAFPQLkoCBdiEMDBgYqUZAuxKGRPdxMhoMV9AiQg4J0IQ4NGBioREG6EIcGDAxUoiBdiEMDBgYqUZAuxKEhx8AATAAGthp3ETgY6AMGthoEAwONwMBWg2BgoBEY2GpkInAwUAcMbDUyERgYqAMGthqZCAwM1AEDW41MBAYG6oCBrUYuIsLBCnoEyEFBuhCHRi4CAwNtKEgX4tDIRWBgoA0F6UIcGlZEgoMV9AiQg4J0IQ4NKwIDA2UoSBfi0LAiMDBQhoJ0IQ6NQgQGBrpQkC7EoVGICBiCFfQIkIOCdCEOjUJEgIEBmAAMbDVKETgYqAIGthqlCAwMVAEDW41KBA4GmoCBrUYlAgMDTcDAVqMSgYGBJmBgq1GJwMBAEzCw1ahF4GCgCBjYatQiqQ2soEeAHBSkC3Fo1CIwMFCEgnQhDo2GSGIHK+gRIAcF6UIcGg0RGBjoQUG6EIdGQwQGBnpQkC7EodEUSetgBT0C5KAgXYhDoykCAwM1KEgX4tBoivxJ6mAFPQLkoCBdiEPDEUl9JAmAscDAVsMRgYGBFmBgq+GKwMBACTCw1XBFMAQDJcDAVsMVgYGBEmBgq9ESgYOBDmBgq9ESgYGBDmBgq9EWgYOBCmBgq9EWSWdgBT0C5KAgXYhDoy0CAwMVKEgX4tDoiCRzsIIeAXJQkC7EodERgYGBBhSkC3FodESSXdGgoEeAHBSkC3FodEVgYKAABelCHBpdERgYKEBBuhCHhkckkYMV9AiQg4J0IQ4NjwjO5QDygYGthkck2TQWAKOBga2GTwQGBuKBga2GTwQGBuKBga2GVwQOBtKBga2GVwR7wUA6MLDV8Ir8gYOBcGBgq+EXgYGBcGBgq+EXSWFgBT0C5KAgXYhDo0cEBgayUZAuxKHRJ8LvYAU9AuSgIF2IQ6NPhH8jWkGPADkoSBfi0OgTgYGBaBSkC3Fo9IrAwEAyCtKFODR6RdiHYAU9AuSgIF2IQ6NfhNvBCnoEyEFBuhCHRr8ITuYAgoGBrUa/CAwMBAMDW40BERgYyAUGthoDIhiCgVxgYKsxJAIHA7HAwFZjSOQPHAykAgNbjUERGBhIBQa2GoMiMDCQCgxsNYZFOB2soEeAHBSkC3FoPBBhdLCCHgFyUJAuxKHxQAQGBjJRkC7EofFIBAYGIlGQLsSh8UiEbwhW0CNADgrShTg0HorAwEAiCtKFODQeirANwQp6BMhBQboQh8ZjES4HK+gRIAcF6UIcGo9FcDYHEAgMbDVGiMDBQB4wsNUYIQIDA3nAwFZjjAgcDMQBA1uNMSJ/4GAgDRjYaowSgYOBNGBgqzFOBAYGwoCBrcY4EQzBQBgwsNUYKcLgYAU9AuSgIF2IQ2OkCAwMZKEgXYhDY6wIDAxEoSBdiENjtEh0ByvoESAHBelCHBqjRaJvRCvoESAHBelCHBrjRWI7WEGPADkoSBfi0JggAgMDOShIF+LQmCASeQhW0CNADgrShTg0pojgdA4gBhjYakwRgYGBGGBgqzFJBA4GUoCBrcY0ETgYCAEGthrTRP7AwUAGMLDVmCgCBwMZwMBWY6oIHAxEAANbjakiMDAQAQxsNSaLRHOwgh4BclCQLsShMV0kloMV9AiQg4J0IQ6NABEYGKRHQboQh0aISBwHK+gRIAcF6UIcGkEiURysoEeAHBSkC3FoBIlE2Q1W0CNADgrShTg0wkRiOFhBjwA5KEgX4tAIFIngYAU9AuSgIF2IQyNQ5E+MMRiA0cDAViNUBA4GSYGBrUawCBwMUgIDW41wETgYJEStga/H3cYQkdnsjtf5Gn6RUcDAIB1KDXxcU5PNca6GT2QscDBIhkoDH+5D72p3POdvzh+7+1tzmKfRFZkAtqJBKhQa+LQis7s4Refd3dGnORptkWnAwSARCg1MtO8udD3MWpNFDTzPwQp6BMhBQbpQ6/3GP2d13c7RaItMZTkHK+gRIAcF6ULhXzUVVdG/doHVmCGSs9wYrKBHgBwUpAuFf7Xy70tV9DOOgZdzsIIeAXJQkC40u4Y387d6/d3859OYL7KUgxX0CJCDgnShuRV8Nj372jBzQ2O2yGIOVtAjQA4K0oVmfv+vea/f/GtsTTc15orkLOJgBT0C5KAgXejxEoOLvJt/9Zuf5v3z1bx+TqphLIuMwQp6BMhBQbrQ4yWGFvlpvjfefS/msN4m1DCBJQ8IA/CYpzDwIK/NAfj+7tf97983447BkQwMB4PIPL2B3QG45K95dTXmiTSAgwEnT2/gN++s8611IDiageFgEJVnN/C/1lBbEs3AsDDgRKuByaX3y/+ZH877F7tH/Mt8a1U3L0YHOBiw8ewG/pZPWtV8N+//8kkst3jZZoCDARdaDVxzWpuB+3E0TryyW81v9jBSa2Zr4WZoOxgWBpHQb+DbbU2X3s8a+7rFy89XY95/tRZbvBnCHaygR4AcFKQLPVrgRHMuBbYaD0WmEjwIK+gRIAcF6UKPlzAPF3lUw2ORqXQcPNLCCnoEyEFButDjJR4vEr2GLoEOVtAjQA4K0oUeLXCk1WyNhyIhBFlYQY8AOShIF3rw+dHQvHvK3qI1Q9fBjy2soEeAHBSkC3kLm6zna3hF5hPgYAU9AuSgIF3IW9iw7+zxN2YzTLawgh4BclCQLsShEU/E42Cc1wGWAga2GjFFYGEQDRjYakQV8TkYFgZLAANbjcgisDCIAwxsNaKLwMIgBjCw1Ygv4nUwLAzm8RQGlnkqZQdYGCwODLxQDaOAhcHCPIWBF9DgEMnwW7jpYQU9AuSgIF2IQ4NDJKfHwbWFFfQIkIOCdCEODQ6Rgj4L/+EPBahHQbrQowUup81sjYciS9Jr4T/soQDlKEgX8pZetqPuSjlWY3YNE+n3sIIeAXJQkC7kK7yahn1Xp9kaXpGo9BsY09JgNFoNvKfV9WbuH10/DA3cVnashlckMr0G/oNDS2AkWg28zly7ofP95cWY62wNr0h0+g0MD4NRaDVwHvfB3kvnQPvZGl4RBvr3hWFiMALVBj5TPv18nX9PnZTN8MDDMDEYQLWBy+gVzkI7PLIwTAz60GrgNWX7vcY+VEW7gW9jPAwTAw/JM/cx5Cvc5VPP23wn+CT1vtCTGGFhmBi0EZC5jyBf4ZnMObul+/3veUW72RpeEW5GeRg2Bg1kZO4g5C3d5ZHv8hM5Zj8aSU4zjPUwXAxyxGRuP+QvPubbzYcVmdnjr7BmGG9i2PjLIypz/RCHBofIOLJQplgYNv7SCMrcPohDg0NkHGUoU00MH39JBGVuH9R6v/GfOHmd85RvQc3QCCXAw3DyF0NQ5vZB7fe+hxFeD7PWRFAztEMJdjGc/BUQlLl9UOv9KZu3ujhF593MawoFNYMvlFkmhpWfGUGZ2wd1Sg7m7tfd8Zy/OX/s7m/NvEcUCmqGvlAWMDHs/HwIytw+yFN2XDsPCN7MvSJYUDMMhbKoieHnZ0BQ5vZB3tLrcbfJ7sphNrvj7MuBJTXD41Bi2RimVoigzO2DODQ4RBaFx8Wwt3QUZC5xaHCIRCCxjaeSurmekGmZe9yusj3O/eXxovOEnG+GfnGKBodINFL7EqRjSuZeVtWs0fTTj2Hg6KTOJZCACZl7NbQ5ZfNF572h2bdSHw9xaHCIsJE6qQAfEzJ3V4+7lyVu5ToW4tDgEOEndXaB6EzIXNNY9Mg4BNPDJRbQ4BBJSeo8A5GYkLnOovmb+5/zmmhdnQV13prmWRXHLVVnPZbfdhf52Dw+DWN8hOE8vYEdUicdWI4Jmdu9cw3R0c5pFbd13ZUnRtm3m+Lt0S7rWaQ8n2rwtrDjIwxHkIEFPeUFyGdCuhw6Y2VmvfPtdirmtPZkss+PK8qv7Nvkb693y15vZV66i+zyr2dXJwydyTw+wnC+toF9pE5MMI4p6ZKPl+vt4VSeukjF7SCvJnvGyZXKR5yssrdnMnbjeZuP3LlQa5Fyr/oyeFvJCREGI8Q1GYJC6Sd12oKSSelyKB8JuLYjMdFH8UHm0X01M33M3u7KYfWa2zMXai1CNOaMkCkRhiLINYJCWZjUuf6UTEyX82G7qs/kqAx4yfZi13VVmWXXrjtzodYi953kEVci9ES4r08reYIbu9cICgXIJyRdTtkFuEfny9kr5wK/Ts3FtLWzyCUf0Ve74Uvx/RGaVl3zEOQaQaEA+QSmyy6ftppr4Ntla18OXo7vjbCYDVsKQa4RFAqQz/h0cZa8lseBGx/6HNt661E7H/KjTQMO9ka4WvZUMEGuERQKkM/4dFk7lin8WOzmnu0+8NldvtwHzp+cUOwDO4uUnNZD09DeCBdOc7gG6GR85h6ap1vkjm3NQu/cEz2qWehjfsw3F2otYqg+IDUQ4ry4RwEDA51MOhe6dt86t275VKKLsQd+yzE6P1P6XD6yaF1PeLUWqfx8njwCb/1jeSgwMNDJhMw9ZZNNmW3OB2NHY7I3cz0WZ2Lt7ruy9yH1cv+fLbah1d2tl3W5bHeR+570NtvOvlfwMRCiP5hFr6aAgYFOpmTuuT7yui2+fLRHcwozlSc6F8NscabzuinkLnIs3w3dIMAf4Y42c24E3dbwiwAgnJBb6qzL26rfv3zd3t1czW6dskuN1vtyz/a4uQ/RB1fIXeSyu1dotoObw94IyWXKSvirm1sDACmYlbk8ae8VgYEBuOk18NIaHCIALA4MbDU4RMYhKBQgHxjYanCIjENQKEA+ig183tkZtSUOCAtyjaBQgHwUpAv5i6sDUjTnyd6lRo9IAgSFAuSjIF3IW3r37z4/q2S/hIMFNYOgUIB8FKQL+QqP5Q178hM5Z5/SIagZBIUC5KMgXchXuG1cgHiYPwQLagZBoQD5KEgX8hZSfSuea3nZxAwNr0gSBIUC5KMgXchbSH1vwjRm1wBAChRkLnkLnRHYu8gkjdk1AJACBZlLvsLn3QcGYAIKMpd8he4s9Oz7YyloBgA8KMhc8pZun/U4MAATUJC55C/ePumZWABMQEHmUk/5ebd+xnOhAZiAgswlDg0OEQAWR0HmEocGh8g4BIUC5KMgXYhDg0NkHIJCAfJRkC7Ufk+3Z74nlqBQgHwUpAu139MNBgYgJ1a6mPkXGJTQUhUNaXCIjENQKEA+U9Kl5xnhvkWzO7Yv9fjACRGGa3CIjENQKEA+kQy8pd0S51fYEBeqZ1CDQ2QcgkIB8olk4PsGtJlQ8yDeeppx43pg8GWJY+AP2t12Qw8smxSit5D63oRpzK4BgBTEMfCaTrdT83nCs0L0FjZKjzAw+KpEMbDdpjWNa+5nhdh6f6AOuB4YfFGiGPgjf1zoUtvQnQjXLfsaXE4IvipRDFw+R3i1TIjeQm9puMay1QHARAwDX6qx8eKpZXqI3kJvabjGstUBwEQMA++LG62faL9IiEtU8kiDQwSAxYmRuavysKxZZBuaHi1wOW1mazwUAUAiETL3nE9hZexokbtleEsv9S11cDED+LJESJdd9aiiU2XlOZCv8Goa9l3h2UjgixIhXYzxvQyHfIV7Wl3zszWvHwvcVVaSawSFAuSjIF3IV7jOXLvJN9Evxsw+Y0RQMwgKBchHQbqQtzArPdjHMxzmz3YLagZBoQD5KEgX8hZmpWfKp5+v88+6FtQMgkIB8lGQLuQtpPrvc12NJCgUIB8F6UK+wnV+pYSx53rBwOCroiBdyFe4y6ee7TMKT/NPulbQDAB4UJC55Cs8kznnz1rdEPEAABoPSURBVCg8386r+YebFTQDAB4UZC55S3d55Dt7PeF8Db8IAMJRkLnkLz7m282HFZkFTvdS0AwAeFCQucShwSECwOIoyFzyFe52i1xrXGl4RQCQjoLMJW/hQjfcqqpbsjYAuFCQueQt9JaGayxbHQBMKMhc8hUudtfpQsMrkgRBoQD5xH+4WXnnyOB9VvKWbmm/xN0CSg2/SAoEhQLkMyVd/ufHt2jj4Waz73DnjbB1Z9nAqhvVza1hMQSFAuQTycCNh5tZheuOQm9c5Y0QBgbgFs3AjYebUev/9BADvzdJg0NkHIJCAfKJY+Dmw80qA4ee8DghwmAEuUZQKEA+cQzcfLhZtQl9CA0x8HuTNDhExiEoFCCfKAZ2Hm5W7qYG3/bGG2EzbjwfGHxZohjYebhZaeB16FEfb4RO3E81iQXABKIY2Hm4WaHwYSjw7s3eCJtx4/nA4MsSw8Duw81KhXPorefaEeL5wLrpSSMQRAwDuw83qxRCTdL5Gp4PLALWPAU9xH+4WalwCZ1qIm+htzQYGNhD6twEI4iQua2HmxUK53XonavIW+gtDebLGzh1HoJAImRu6+Fm9ZZuYH20UFyDGhwikkidd2AhImRu6+Fm5VGkZY8DL8xXMHDqVAMxUJC55C/erxrzWLM1ZtewGMuGkjq/QGQEZW4f5C1tPh8YBm6TOq0AF4Iytw/yFe7JzH8qcEPDK5KEWaGkTifAjaDM7YN8hasFnurd1PCKJCEslNR5BBIhKHP7IG+htzRcY9nq5jAxlNQJFEKchvuaCMrcPshb6C0N11i2ujmMDiW1Df8HJwpAUOb2Qb7CLS14SztRzTAmFDgUFAjK3D7IV3gKvsWWX8MrkoQHocCsoImgzO2DvKU72gRenujV8IvIAn4FHRRkLnkLXWZrzK4hMvAs8CI+c2HgueZNHT6IiejMtRCHBodICPAtGERs5tYQhwaHyFTgW/AQkZnrQhwaHCJTgHPBKKJkbnmnm2WewU095efdKo9+s8ARYWEGhnPBSKZk7v/58VVasIiDeyLclrNXtMBp0YIMDO+CCUQycPZ3xvPM3Nq8pRtaHa3Qkewd5Gdp+EXY+V92djqsC0YT0cBL2cJbyZHqG+bt+p/68M9YGkWfr8a8fbY1vCLMWGs+NHDqMIEk4hp49iNP8lp8hZt8u9kKXfrvOP2zY+B3W/De0vCKsFL6c8jAqWME4oi7CR36PDO3Nm8h1X8HVuK7+c8t+G1eft59/WL+eqpLR8OkfQZOGyAQStRJrOD72Lm1eQup/juwEq8to95+WEf/NO5GdFoDO0b1GThlcEA0UQ0c/DwztzZfoX18eDHU926q/zMvrZJ389t+392GTmjgtlnbBk4WGNBAzH3g8OeZubX5CreNfeBD77ORfpr3z1fz2hhtXwqvt5x9r8i3IvHpjrZNA6eICKgi6iRW8PPM3Np8hWcy11t1GKnvd+J7MYf1VpWU81nGHbSJvCsSG9++bmVg/nCAPqIaeJktU38du+y2lPf6zzvqf2bLq/l1//v3rd7jHTIwt4P9k1VwL5hApFMp7f/g55m5tfmL99X5Xg+fufTXvJYv5RgY5gULENPA4c8zc2vrKb/us+eMrncjZspqu/buA/MaGGMvWIaIFzNQ+PPM3NrmV1EbuJiF/t2ZheY0MNwLliKmgcOfZ+bWFv7VF/Mv+/fLfCtLftjd4U/zw9VgNDDcC5Yj9SlIIyB/8XWXnQ19M9uBa5G+m/d/+STWr7Lkb3km1m9Xg3rm45YH7gULotbARypPxho6VvVmDyN9z17b7ei+c6GZDAz7gkXRauAL0dZeRHhcDzk4u/bo3Y6/xY7wf+8vzqkdVoPHwHAvWBitBt41JrjX8y+aKAwc18Hj7KugR4AcFKQL+QpN4yL+S35t8DyN+AYeO/oq6BEgBwXpQt5C6nsTphHdwKM3nhX0CJCDgnQhbyH1vQnTiGzgCfu+CnoEyEFBupCvcNu4k91x/r23Iht4ytSVgh4BclCQLuQrPJKpbnm5mn9byqgGnjbzrKBHgBwUpAt5SzdkDpmFLwezwEWLpYEjOHiafVX0CJCDgnQhf/GmOuN6gZvXxjPwRPuq6BEgBwXpQj3l593oq5Eea5QGXtjBk+0LwCQUG3hRjTgGhn9BZGBgqxHFwLAviA0MbDUiGBj2BfHRa+D9impmayxvYPgXMKDWwIZItIFhX8CBVgPvs5tSLqhRGXghB8O+gAWtBl7g7CtHY1kDY/gFTGg18MJxNwy8gINn2VdBjwA5KEgX8hZ6S8M1ljTwvOFXQY8AOShIF/IVbmmRB6dVGgsaeObms4IeAXJQkC7kKzwtcQZ0Q4NuCzl49t6vgh4BclCQLuQt3dFmiUcflhqxDBwUCgBjUZAu5C10ma2xkIEXmH1W0CNADgrShbyFKgwcGAoAY1GQLsShQY2npwbXssjBXwU9AuSgIF2IQ4NuCwzBOHkDcAMDWw2ab+BFxl8AJqHYwOfdasE7ctzmOhj+BQnQa+BdNYO1XUAjE5llYPgXpECtge/+3Wdj73m/hINnGxj+BUnQauDGfaEvhmaf0rGwgeeGA8BItBp423gi4WH+EGybIdjAGH9BIrQamBpPJ7ySma2RiwQPwfAvSIReA/e9CdPIawg18KL+VdAjQA4K0oW8hc4I7F1kkoatIczByw6/CnoEyEFBupCvMMo+cJiBF958VtAjQA4K0oV8he4s9AJPJ8z/hRh46f1fBT0C5KAgXchbul3+OPAtZB568fkrBT0C5KAgXchfvF38TKxbyBC8+Pyzgh4BclCQLtRTvuzTCe3/qQaOcPxIQY8AOShIF+LQKEUmOjjC8V8FPQLkoCBdiEOjFJlmYJy/ARKj08DX3a54td8ucnvZMAPDvyA1Kg18MtXJkyta5P6ydTNMcTD8C1Kj0cAXonU57l739zcLaFQiEwyMARgkR6OBV7RrvLuYBY8DTzEw/AvSo9DAR1o57+8D8uz94EYzjDUw/AsEoNDAW/pwC3bOiBymUYuMHILhXyABhQZe0cUtOM3fC55sYPgXiEChgbshL3Y5Yc4oB8czsIIeAXJQkC7Uft8uSGDgiAOwgh4BclCQLtR+3y7gN3DMDWgFPQLkoCBdqPV+0550viy6DzxmHjrmDrCCHgFyUJAu1Hq/p71bsNwdOSwPh+CoE1gKegTIQUG6UOt95yaUq8XuyGGZYuC5wg9CAWAYBelC7YKte9x31zqxI0jDEXng4LhHkBT0CJCDgnShdsHVNB28o/Zx4RANR2TYwJGPACvoESAHBelCnZKLIZPfEOt23t9fzt6ADjbwfGEAZqHSwLfrprohFm2u3c+na7giQw7GKVhAEDoNfB+E95mHzeZjCftOMTD8CySh1cBLa7gi/9fvYPgXSAIGthotkV4Dw79AFDCw1WiJ9A3B2IAGsoCBrUZbBAYGKoCBrUZbxG9g+BcIAwa2Gh0Rr4M5/KugR4AcFKQLcWh0RHx7wSwDsIIeAXJQkC7EodER8RiYZwNaQY8AOShIF+LQ6IoMGpg3FAD6UJAuxKHRFekYmGkCS0GPADkoSBfi0PCItB0MAwN5KEgX4tDwiLT2grmOICnoESAHBelCHBoeERgYyEdBuhCHhk/EMTBO4QASgYGthk+kx8AM4QAwEhjYanhFGg7GAAxEAgNbDa+I18AM0QAwFhjYanhFGtNYMDAQCQxsNfwiMDAQDgxsNfwiniGYIRgARgMDW40ekY6BGWIBYDwwsNXoEekMwelCAcCDgnQhDo0+kbaDE4YCQBcF6UIcGn0iLQOnDAWALgrShTg0ekUcAzNEoqFHgBwUpAtxaPSKNA3MEIiKHgFyUJAuxKHRL9JwMEMgKnoEyEFBuhCHRr8IDAwEoyBdiEOjX6QxjcUQiIoeAXJQkC7EodEr8r//MRsYgAnAwFajV6RpYDgYSAMGthp9ItnBXzgYiAUGthp9Ii0Dw8FAFjCw1egRsSdAw8BAKjCw1egRgYGBbGBgq+EXKS8ChoOBUGBgq+EX8RgYDgaSgIGthlekvo8Oo4EV9AiQg4J0IQ4NrwgMDKSjIF2IQ8Mn0rwXNJ+DFfQIkIOCdCEODZ9I806UfHvBCnoEyEFBuhCHhk/EuZUsDAwkoiBdiEPDI9J6mgoMDASiIF2IQ8Mj0rqXO9cQrKBHgBwUpAtxaHRFWgMwm4MV9AiQg4J0IQ6NrkjnYSo4mwPIAwa2Gl2R7tOQYGAgDhjYanRFBg0MBwMZwMBWoyPS9S8cDOQBA1uNjojPwNiIBtKAga1GW8TrXxgYSAMGthptEb+B4WAgDBjYarRFHhsYDgYCgIGtRkukx78cQ7CCHgFyUJAuxKHREuk1cHwHK+gRIAcF6UIcGq5Iv3/jb0Qr6BEgBwXpQhwarsiAgaM7WEGPADkoSBfi0HBEhvwLAwNJKEgX4tBwRAYNHNvBCnoEyEFBuhCHhiMy3sARHKygR4AcFKQLcWg4IsMGjjwEK+gRIAcF6UIcGk2RB/7F6RxADjCw1WiKPDQwHAykAANbjYbIY//CwEAKMLDVaIiMMDAcDIQAA1uNhsgYA8PBQAYwsNVoiEw2MBwMkgEDW41aZJR/4WAgAxjYatQiIw0MBwMJwMBWoxIZ699oBlbQI0AOCtKFODQqkdEGjuVgBT0C5KAgXYhDoxIZb+BIDlbQI0AOCtKFODQqkQkGjuNgBT0C5KAgXYhDoxSZ4t84DlbQI0AOCtKFODRKkWkGjuFgBT0C5KAgXYhDoxCZ6F/XwMs4WEGPADkoSBfi0ChEpho4goMV9AiQg4J0IQ4NKzLZvzifA6QFBrYaViTAwHAwSAkMbDWsSIiB4WCQEBjYaliRIAPDwSAdMLDVyEXC/BtjKhqAccDAViMXCTQwxmCQDBjYauQiyxgYDgZ8wMBWIxMJ9i8cDFLx7Ab+fDPm9Uej4J+xtDQykRkGXtDBCnoEyEFButCM775Zt77VJT/jGHg5ByvoESAHBelC4V/9bt7+3m6/Xsz3RtF/Po1MZJaBF3Owgh4BclCQLhT+1Rc70P42L1XRq/nr06C5/m07ONjCCnoEyEFButD8Kuot5n8NLzc1aL6BF3Kwgh4BclCQLjS7hr/1TvBP8/75al4/2xq0gIGXcbCCHgFyUJAuNLuGb+ZX+fK76Uxr5Rq0gH+XcbCCHgFyUJAuNLeCn405rNfcy3/fjDsGL2TgJRysoEeAHBSkC838ftO/JX/Nq6uxkIHbDsY5HSAuz2/gHx7/Nqe1rMZSBoaDAStPb+Bvpj1hlRPNwB0Hw8IgIk9u4L8vL7+cghfzL/v3y3xzNWgp/94wCANGntvA/15eWqdtfDfv//JJLNfXixoYDgZsPLeBvxlTn/pst5qLs6Nb+8UNA4er1WAzGjDx3AY2XQPfPl+Nef/VWnBhA8PBgInnNvB4jYUN3HUwLAxiAANbDVrWv7fwQVhBjwA5KEgX4tBY3sChDlbQI0AOCtKFODQiGDhwO1pBjwA5KEgX4tCIYuAgByvoESAHBelCHBpxDBziYAU9AuSgIF2IQ4Oi+PcWYGEFPQLkoCBdiEMjmoE9Dh72sIIeAXJQkC7EoRHPwF4LD4YSIwbwpChIF+LQoHj+nT4IAzAWGNhqRDWw18GwMFgAGNhqxDUwLAwiAQNbjdgGhoVBFGBgqxHfwH4Hw8JgFjCw1aDo/r31WRgeBuHAwFaDxcCwMFgaGNhqMBkYFgbLAgNbDWLy763XwqWHFfQIkIOCdCEODUYD91v4/2woXGGAJ0BBuhCHBquBByz8fxp6BMhBQboQhwazgQcsrKBHgBwUpAtxaLAbuNfCRJjTAqOBga1GAgP3WDg3MDwMxgEDWw1K4N+b18KlgWFiMAIY2GpkDzdj0PEwZGB4GDwABrYaHCJ99M5nwcXgETCw1eAQGeCxh2Fi4CN15o6AODQ4RIYZ4WGYGLQRkLmPIA4NDpGHjPEwXAyayMjcQYhDg0NkBOMsDBeDEimZOwBxaHCIjGO0h2FjICpz+yAODQ6R8UwxMWz8pRGWuT6IQ4NDZBLTPAwff1XkZW4H4tDgEBlHI5TpJoaTvxqCMrcP4tDgEBmHG0qgh2Hkr4KgzO2DODQ4RMbRDWWOieHlJ0dQ5vZBHBocIuPoCWUBF8PMT4igzO2DODQ4RMYxEMpyJoadnwVBmdsHcWhwiIzjUSgxXAxPq0VQ5vZBHBocIuMYFUp8F8PaOhCUuX0QhwaHyDgmhJLIxqOI10CgiaDM7YM4NDhEIpHaqppI3VfLoyBziUODQyQuqb0BkqAgc4lDg0OEh9QZBVhRkLnEocEhwkzq1AIcKMhc4tDgEElG6iQD8VCQucShwSEigtQJB5ZFQeYShwaHiERS5x+YiYLMJQ4NDhElpE5JMAUFmUscGhwi4xAUSpvUyQq6CE6XEuLQ4BAZh6BQZpA6r78MCtKFODQ4RMYhKJSnI7XbIqAgXYhDg0NkHIJCAfJRkC7EocEhMg5BoQD5KEgX4tDgEBmHoFCAfBSkC3FocIiMQ1AoQD4K0oU4NDhExiEoFCAfBelCHBocIgAsjoLMJQ4NDhEAFkdB5hKHBocIAIujIHOJQ4NDBIDFUZC5xKHBIQLA4ijIXOLQ4BABYHEUZC5xaHCIALA4CjKXODQ4RABYHAWZSxwaHCLjEBQKkI+CdCEODQ6RcQgKBchHQboQhwaHyDgEhQLkoyBdiEODQ2QcgkIB8lGQLsShwSEyDkGhAPkoSBfi0OAQGYegUIB8FKQLcWhwiIxDUChAPgrShTg0AFAKgz3mQRwaACiFwR7zoNQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCoUj1fr4a8/Y5XMKFJ5Y3Y15/yIgl46cREcq/7y/m5XuCUDyx/H435tvfFLHc+e72R7rUfQzFqfbe+hnvQyVcdJXfbMmbhFgy/poEBu6G8vclL3mREMtvW5LGwf+5/ZEudUdAUWr9bV5+3seVl7oDuiVcdJW/m7f7618vhn2w6WmF1wQG9oTyav67u/hNRLO8m/uI95nGNN+M0x/pUncMFKXWH1kqZFuGn/0lXHSVX2z3/OYfa/yt8P6SwMDdUH5au/wT0Sy2RVJsmXy+mG+ObrrUHQNFqfXd/M7/17+g3RIu+pX508Mby6f5mSBRu6F8M7/Yo+iLpfiRTbE5b15/upmRLnXHQFFqLca4Rgd0S7joVf7LvxPsi+XXfZM1gYG7obyZbLbmJcHcnqdZfthN6ATB/Ly1ftrTpe4YKEqtZQPUDdEt4aJXOcGI44nl38tbkk1FXxd9TzS35+uiH9mMWpIDBa1AEqbuGChKrRoM/JN/ssYXy1s2NyLEwNlkzd83/n09T7P8es1/S35zh9IJBAbuK+GiRzmFfz2xfM9nSIQYONt6vP02r+lj+ZUfKLj/mKTZLf/yBpa/D/wjhX89sZgKAaG4/1PG8mr+Zf/+pThWf8M+cDlx97szC/072Sy0q/wtzTGBbizJDOzrojIk5lC8zZIqlq5sutQdA0Wp9Yf1R2MWsVvChUf578tLmk2zvlZIchy4p4t+8SdqN5Zi1EtwTDqndRw4VeqOgaLU+rc8eeV3fwkXXeV/Ly+JTqrpa4UEBvY0i8l+1u77nT/Tx/LdfPud5qywHKc/0qXuGChOtc3TR21ryDgXOo/lW6rNVl+73FovE4by05Yk8Ew3luJ09Zd//MHc2lvwX/Bc6Nvtv/cX82r3M4vWaJQw044l2X6nJ5Zb+2XKUH7ff9pkdNF9w/X1bt/vibaUWrvg6VL3MZQ6AABAOJQ6AABAOJQ6AABAOJQ6AABAOJQ6AABAOJQ6AABAOJQ6AABAOJQ6AABAOJQ6AABAOJQ6AABAOJQ6gK8OOeQFIdWcaDP1Kxs6hSgBUVDqAL46Cxl4RdepX7nSKkQJiIJSBwAywlxbc6DD9C/tQ74EZEGpAwAZcw0cdjmTzLs8gSlQ6gBAxkwDH2kX8rUdHWfJgvRQ6gBARsPA9uX973lNtD7f3Xn/v70Un563hmjT9t2ais/Pu/vCtN67O8RV7a3fiQutlwgeJIRSBwAyPAY+2mmt8y7/Z6xDd8VklzvlXE1HlR+Xi7drbw/0AVNfQBaUOgCQ4TEwba+365pWtLtmg3G+jbwnkw2+xxVtm98ut6CP94+vns97DYxtaPVQ6gBAhsfA+SB7ImvFUz7GXskUI+aKzo1vlz6sSq+uU3sNHLjvDORAqQMAGR4Dn4p357p0Xw2YrvM2jp1b9d0GDHyefvoHkAWlDgBk+Caxbp3/68ZSzZMwDDXe3M6HjRlp4BvhQJJyKHUAIGOcgdsnbXW/fcwmqdsfDxm4XQCUQakDABkLGTifhd4czmM3oWFg9VDqAEDGWAMPf/tA5nBp13eDgZ8ZSh0AyBi7D9yerLKU+8CTZ6GxD6weSh0AyBhn4F3PUZ9Nc6o648Nv4BNmoZ8OSh0AyBhn4DOVx5GOjvN29JH/N4WRL61Z6HXxtXXbwB84DqwdSh0AyBhn4GyS6nC9G3RHzsZ0eVR4R6vTffv5kM1EN8+lPOQncJ3Wpm1gnImlHkodAMgYaeD6ZGfHeNdyV7Y4hmSOq/w8kKrWdfElt+5seZwLrRxKHQDIGGvg2yk70Nu+2qg+FWu3sp/aO+zUtR5WZLaXVt3YBX4CKHUAYAFwPfCXhVIHAJYgaFv4ioNI+qHUAYAlCLonVtCXgCwodQBgEXBXyi8KpQ4ALMLJvYR/DFvcF/oJoNQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADCodQBAADC+X+N1Id2Z8QFAQAAAABJRU5ErkJggg==", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "options(repr.plot.width = 8, repr.plot.height = 6)\n", + "colors <- c(\n", + " A = \"#EE7733\",\n", + " B = \"#0077BB\",\n", + " AB = \"#33BBEE\"\n", + ")\n", + "\n", + "plot1 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " geom_line(size = 3) +\n", + " ## vertical dashed line\n", + " geom_vline(\n", + " xintercept = perturbation_point,\n", + " linetype = \"dashed\",\n", + " colour = \"black\",\n", + " linewidth = 0.7\n", + " ) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = seq(0, 1, 0.2),\n", + " minor_breaks = seq(0, 1, 0.1),\n", + " limits = c(0, 1),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(0, 1), clip = \"on\") +\n", + " scale_y_continuous(\n", + " minor_breaks = seq(0, 11, 2),\n", + " ) +\n", + " labs(\n", + " title = \"Dynamics of the 3-Variable Complex Formation Model\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", + "\n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", + "\n", + "plot1\n", + "# ggsave(\"POSm4_plot.png\", plot1, width = 10, height = 8, units = \"in\", dpi = 300)" + ] + }, + { + "cell_type": "markdown", + "id": "d005f29c", + "metadata": {}, + "source": [ + "### **2.4. Pertubation Analysis**" + ] + }, + { + "cell_type": "markdown", + "id": "688d7e9a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "#### **2.4.1. Partubation in A**" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "1c922b3c", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 1001
  2. 4
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 1001\n", + "\\item 4\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 1001\n", + "2. 4\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 1001 4" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "33904 bytes" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Size of variable sol (how many rows and columns)\n", + "dim(sol)\n", + "object.size(sol)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "6539db9a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "t0 <- 0.2 # perturbation time in original time axis\n", + "idx0 <- 200\n", + "cap <- 0.05 # window half-width (before/after), like Python cap_range\n", + "dt <- 0.001" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "55b33b49", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# pre-perturbation window from the already-simulated sol\n", + "k <- round(cap / dt)\n", + "pre <- sol[(idx0 - k):idx0, 2:4, drop = FALSE]\n", + "tpre <- seq(-cap, 0, by = dt)\n", + "\n", + "# perturbed IC and forward simulation on local time [0, cap]\n", + "y0 <- as.numeric(sol[idx0, 2:4])\n", + "y0[1] <- 40.0" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "1ced98df", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "150" + ], + "text/latex": [ + "150" + ], + "text/markdown": [ + "150" + ], + "text/plain": [ + "[1] 150" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "200-cap/dt" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "55b3ff5e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "s_star_pertubation_1 <- as.numeric(sol[(200-cap/dt),2:4])\n", + "tpre = seq(-cap, 0, by = dt)\n", + "sol_pertubation_1_pre <- deSolve::ode(y = s_star_pertubation_1, times = tpre, func = func_list, \n", + " parms=params)\n", + "\n", + "s_star_pertubation_1 <- as.numeric(sol[200,2:4])\n", + "# Change the 1st position to 40.0\n", + "s_star_pertubation_1[1] <- 40.0\n", + "\n", + "tpost <- seq(0, cap, by = dt)\n", + "sol_pertubation_1_post <- deSolve::ode(y = s_star_pertubation_1, times = tpost, func = func_list, \n", + " parms=params)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "382eba5f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "Plot with title \"Perturbation Analysis: S3 when S4 is perturbed\"" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "t_all <- c(tpre, tpost[-1])\n", + "y_all <- rbind(sol_pertubation_1_pre, sol_pertubation_1_post[-1, , drop = FALSE]) # avoid duplicating t=0 row\n", + "\n", + "# Plot: 4 stacked panels (base graphics)\n", + "\n", + "# To save as PNG file, uncomment the following lines, and the dev.off() line at the end\n", + "\n", + "# png(\n", + "# filename = \"model_2_perturbation_A.png\",\n", + "# width = 8, height = 8, units = \"in\",\n", + "# res = 300 # DPI\n", + "# )\n", + "\n", + "op <- par(mfrow = c(3,1), mar = c(4,5,3,1))\n", + "for (j in 1:3) {\n", + " plot(t_all, y_all[,j], type = \"l\", lwd = 4, col = colors[j],\n", + " xlab = \"Time\", ylab = paste(\"Concentration of S\", j, sep=\"\"),\n", + " xlim = c(-0.05, 0.05), xaxt = \"n\", xaxs = \"i\",\n", + " main = paste(\"Perturbation Analysis: S\", j, \" when S4 is perturbed\", sep=\"\"))\n", + " axis(\n", + " 1,\n", + " at = seq(-0.05, 0.05, by = 0.01)\n", + " )\n", + " abline(v = 0, lty = 2, lwd = 2)\n", + " box(lwd = 2) # black outer box\n", + "}\n", + "\n", + "# dev.off()\n", + "par(op)" + ] + }, + { + "cell_type": "markdown", + "id": "ea05a483", + "metadata": {}, + "source": [ + "## **3. Additional features**" + ] + }, + { + "cell_type": "markdown", + "id": "14073aff", + "metadata": {}, + "source": [ + "### **3.1. Add subject ID to make the loop result more comprehensible**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5d29bc2a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "id_to_subject <- c(\n", + " \"S1\", \"S2\", \"S3\", \"S4\"\n", + ")\n", + "names(id_to_subject) <- 1:4" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "796b8fb4", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "df <- res_tab$loop_rep[[1]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cab114e7", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "df$loop_subject <- lapply(\n", + " df$loop,\n", + " function(t) unname(id_to_subject[as.character(t)])\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fe72c366", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 4
looplengthsignloop_subject
<I<list>><dbl><dbl><list>
1, 11-1S1, S1
2, 21-1S2, S2
3, 31-1S3, S3
4, 41-1S4, S4
3, 4, 1,....4-1S3, S4, S1, S2, S3
3, 4, 2, 33 1S3, S4, S2, S3
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{llll}\n", + " loop & length & sign & loop\\_subject\\\\\n", + " > & & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1 & S1, S1\\\\\n", + "\t 2, 2 & 1 & -1 & S2, S2\\\\\n", + "\t 3, 3 & 1 & -1 & S3, S3\\\\\n", + "\t 4, 4 & 1 & -1 & S4, S4\\\\\n", + "\t 3, 4, 1,.... & 4 & -1 & S3, S4, S1, S2, S3\\\\\n", + "\t 3, 4, 2, 3 & 3 & 1 & S3, S4, S2, S3\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> | loop_subject <list> |\n", + "|---|---|---|---|\n", + "| 1, 1 | 1 | -1 | S1, S1 |\n", + "| 2, 2 | 1 | -1 | S2, S2 |\n", + "| 3, 3 | 1 | -1 | S3, S3 |\n", + "| 4, 4 | 1 | -1 | S4, S4 |\n", + "| 3, 4, 1,.... | 4 | -1 | S3, S4, S1, S2, S3 |\n", + "| 3, 4, 2, 3 | 3 | 1 | S3, S4, S2, S3 |\n", + "\n" + ], + "text/plain": [ + " loop length sign loop_subject \n", + "1 1, 1 1 -1 S1, S1 \n", + "2 2, 2 1 -1 S2, S2 \n", + "3 3, 3 1 -1 S3, S3 \n", + "4 4, 4 1 -1 S4, S4 \n", + "5 3, 4, 1,.... 4 -1 S3, S4, S1, S2, S3\n", + "6 3, 4, 2, 3 3 1 S3, S4, S2, S3 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "markdown", + "id": "a2beb7e7", + "metadata": {}, + "source": [ + "### **3.2. Represent regulation relationship from Jacobian matrix**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8703ce8b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A tibble: 9 × 4
fromtoregulationregulation_words
<chr><chr><dbl><chr>
S1S1-1inhibition (negative)
S1S4-1inhibition (negative)
S2S1 1activation (positive)
S2S2-1inhibition (negative)
S2S4 1activation (positive)
S3S2 1activation (positive)
S3S3-1inhibition (negative)
S4S3 1activation (positive)
S4S4-1inhibition (negative)
\n" + ], + "text/latex": [ + "A tibble: 9 × 4\n", + "\\begin{tabular}{llll}\n", + " from & to & regulation & regulation\\_words\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\t S1 & S1 & -1 & inhibition (negative)\\\\\n", + "\t S1 & S4 & -1 & inhibition (negative)\\\\\n", + "\t S2 & S1 & 1 & activation (positive)\\\\\n", + "\t S2 & S2 & -1 & inhibition (negative)\\\\\n", + "\t S2 & S4 & 1 & activation (positive)\\\\\n", + "\t S3 & S2 & 1 & activation (positive)\\\\\n", + "\t S3 & S3 & -1 & inhibition (negative)\\\\\n", + "\t S4 & S3 & 1 & activation (positive)\\\\\n", + "\t S4 & S4 & -1 & inhibition (negative)\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A tibble: 9 × 4\n", + "\n", + "| from <chr> | to <chr> | regulation <dbl> | regulation_words <chr> |\n", + "|---|---|---|---|\n", + "| S1 | S1 | -1 | inhibition (negative) |\n", + "| S1 | S4 | -1 | inhibition (negative) |\n", + "| S2 | S1 | 1 | activation (positive) |\n", + "| S2 | S2 | -1 | inhibition (negative) |\n", + "| S2 | S4 | 1 | activation (positive) |\n", + "| S3 | S2 | 1 | activation (positive) |\n", + "| S3 | S3 | -1 | inhibition (negative) |\n", + "| S4 | S3 | 1 | activation (positive) |\n", + "| S4 | S4 | -1 | inhibition (negative) |\n", + "\n" + ], + "text/plain": [ + " from to regulation regulation_words \n", + "1 S1 S1 -1 inhibition (negative)\n", + "2 S1 S4 -1 inhibition (negative)\n", + "3 S2 S1 1 activation (positive)\n", + "4 S2 S2 -1 inhibition (negative)\n", + "5 S2 S4 1 activation (positive)\n", + "6 S3 S2 1 activation (positive)\n", + "7 S3 S3 -1 inhibition (negative)\n", + "8 S4 S3 1 activation (positive)\n", + "9 S4 S4 -1 inhibition (negative)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sign_J <- sign(j_matrix)\n", + "labs <- paste0(\"S\", 1:nrow(sign_J))\n", + "rownames(sign_J) <- labs\n", + "colnames(sign_J) <- labs\n", + "\n", + "regulation_info <- sign_J %>%\n", + " as.data.frame() %>%\n", + " mutate(from = rownames(.)) %>%\n", + " pivot_longer(\n", + " -from,\n", + " names_to = \"to\",\n", + " values_to = \"regulation\"\n", + " ) %>%\n", + " mutate(\n", + " regulation_words = case_when(\n", + " regulation == -1 ~ \"inhibition (negative)\",\n", + " regulation == 1 ~ \"activation (positive)\",\n", + " TRUE ~ \"no regulation\"\n", + " )\n", + " )\n", + "regulation_info[regulation_info$regulation != 0, ]" + ] + }, + { + "cell_type": "markdown", + "id": "fbe99d74", + "metadata": {}, + "source": [ + "### **3.3. Loop Summary in more detail**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d57b2e96", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 4
looplengthsignloop_subject
<I<list>><dbl><dbl><list>
1, 11-1S1, S1
2, 21-1S2, S2
3, 31-1S3, S3
4, 41-1S4, S4
3, 4, 1,....4-1S3, S4, S1, S2, S3
3, 4, 2, 33 1S3, S4, S2, S3
\n" + ], + "text/latex": [ + "A data.frame: 6 × 4\n", + "\\begin{tabular}{llll}\n", + " loop & length & sign & loop\\_subject\\\\\n", + " > & & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1 & S1, S1\\\\\n", + "\t 2, 2 & 1 & -1 & S2, S2\\\\\n", + "\t 3, 3 & 1 & -1 & S3, S3\\\\\n", + "\t 4, 4 & 1 & -1 & S4, S4\\\\\n", + "\t 3, 4, 1,.... & 4 & -1 & S3, S4, S1, S2, S3\\\\\n", + "\t 3, 4, 2, 3 & 3 & 1 & S3, S4, S2, S3\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 4\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> | loop_subject <list> |\n", + "|---|---|---|---|\n", + "| 1, 1 | 1 | -1 | S1, S1 |\n", + "| 2, 2 | 1 | -1 | S2, S2 |\n", + "| 3, 3 | 1 | -1 | S3, S3 |\n", + "| 4, 4 | 1 | -1 | S4, S4 |\n", + "| 3, 4, 1,.... | 4 | -1 | S3, S4, S1, S2, S3 |\n", + "| 3, 4, 2, 3 | 3 | 1 | S3, S4, S2, S3 |\n", + "\n" + ], + "text/plain": [ + " loop length sign loop_subject \n", + "1 1, 1 1 -1 S1, S1 \n", + "2 2, 2 1 -1 S2, S2 \n", + "3 3, 3 1 -1 S3, S3 \n", + "4 4, 4 1 -1 S4, S4 \n", + "5 3, 4, 1,.... 4 -1 S3, S4, S1, S2, S3\n", + "6 3, 4, 2, 3 3 1 S3, S4, S2, S3 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/model_2_perturbation_A.png b/examples/model_2_perturbation_A.png new file mode 100644 index 0000000000000000000000000000000000000000..01906a0df5067c242c4bcafa22a7af42ffaeb528 GIT binary patch literal 47200 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

9<>p_ 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 literal 0 HcmV?d00001 From 8412d4c93d48e0aa933303a1e36124784c32326e Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Sun, 1 Feb 2026 00:37:10 +0100 Subject: [PATCH 07/12] Fix bug 2 --- examples/model_1_POSm4_R.ipynb | 352 ++------------- examples/model_1_perturbation.png | Bin 58791 -> 59191 bytes examples/model_2_complex_formation_R.ipynb | 500 +++++++++++++++------ examples/model_2_perturbation_A.png | Bin 47200 -> 42925 bytes 4 files changed, 378 insertions(+), 474 deletions(-) diff --git a/examples/model_1_POSm4_R.ipynb b/examples/model_1_POSm4_R.ipynb index ed2228d..be2833e 100644 --- a/examples/model_1_POSm4_R.ipynb +++ b/examples/model_1_POSm4_R.ipynb @@ -188,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 34, "id": "12108b07", "metadata": { "vscode": { @@ -227,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 35, "id": "5ab687a9", "metadata": { "vscode": { @@ -247,7 +247,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 36, "id": "81b11f06", "metadata": { "vscode": { @@ -327,7 +327,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 37, "id": "b1bccacc", "metadata": { "vscode": { @@ -390,7 +390,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 38, "id": "f1f8c98c", "metadata": { "vscode": { @@ -471,7 +471,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 39, "id": "9e3795b8", "metadata": { "vscode": { @@ -545,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 40, "id": "c261caec", "metadata": { "vscode": { @@ -604,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 41, "id": "8b4155db", "metadata": { "vscode": { @@ -664,7 +664,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 42, "id": "71c0bc77", "metadata": { "vscode": { @@ -735,7 +735,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 43, "id": "bee71136", "metadata": { "vscode": { @@ -745,15 +745,15 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "plot without title" ] }, "metadata": { "image/png": { - "height": 420, - "width": 420 + "height": 360, + "width": 480 } }, "output_type": "display_data" @@ -779,7 +779,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 44, "id": "b014adcb", "metadata": { "vscode": { @@ -789,13 +789,13 @@ "outputs": [], "source": [ "# Continue simulation to observe stability\n", - "sol <- deSolve::ode(y = as.numeric(sol[95,2:5]), times = seq(0,11,0.1), func = func_POSm4_list, \n", + "sol <- deSolve::ode(y = as.numeric(sol[95,2:5]), times = seq(0,11,0.01), func = func_POSm4_list, \n", " parms=klin, knonlin=knonlin)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 45, "id": "21bbad0e", "metadata": { "vscode": { @@ -816,7 +816,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 46, "id": "4b596080", "metadata": { "vscode": { @@ -824,18 +824,9 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning message:\n", - "\"\u001b[1m\u001b[22mUsing `size` aesthetic for lines was deprecated in ggplot2 3.4.0.\n", - "\u001b[36mℹ\u001b[39m Please use `linewidth` instead.\"\n" - ] - }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "plot without title" ] @@ -913,7 +904,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 47, "id": "70a2312f", "metadata": { "vscode": { @@ -930,7 +921,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 48, "id": "07e45a5a", "metadata": { "vscode": { @@ -939,12 +930,12 @@ }, "outputs": [], "source": [ - "s_star_pertubation_1 <- as.numeric(sol[81,2:5])\n", + "s_star_pertubation_1 <- as.numeric(sol[855,2:5])\n", "tpre = seq(-cap, 0, by = dt)\n", "sol_pertubation_1_pre <- deSolve::ode(y = s_star_pertubation_1, times = tpre, func = func_POSm4_list, \n", " parms=klin, knonlin=knonlin)\n", "\n", - "s_star_pertubation_1 <- as.numeric(sol[86,2:5])\n", + "s_star_pertubation_1 <- as.numeric(sol[860,2:5])\n", "# Change the 4th position to 0.75\n", "s_star_pertubation_1[4] <- 0.75\n", "\n", @@ -955,7 +946,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 49, "id": "b89c6113", "metadata": { "vscode": { @@ -970,7 +961,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 52, "id": "ef4f5f4b", "metadata": { "vscode": { @@ -980,7 +971,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "Plot with title \"Perturbation Analysis: S4 when S4 is perturbed\"" ] @@ -1033,299 +1024,6 @@ "par(op)" ] }, - { - "cell_type": "code", - "execution_count": 23, - "id": "a0e05ddf", - "metadata": { - "vscode": { - "languageId": "r" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A matrix: 1002 × 5 of type dbl
time1234
-0.0500105.49530.0016576520.010075820.3230939
-0.0499105.50630.0016573760.010074060.3230130
-0.0498105.51720.0016571000.010072310.3229321
-0.0497105.52810.0016568250.010070560.3228512
-0.0496105.53900.0016565510.010068810.3227704
-0.0495105.54990.0016562770.010067060.3226896
-0.0494105.56090.0016560030.010065310.3226088
-0.0493105.57180.0016557290.010063560.3225280
-0.0492105.58270.0016554560.010061810.3224473
-0.0491105.59360.0016551830.010060070.3223665
-0.0490105.60460.0016549100.010058320.3222859
-0.0489105.61550.0016546370.010056580.3222052
-0.0488105.62640.0016543640.010054830.3221246
-0.0487105.63730.0016540910.010053090.3220439
-0.0486105.64820.0016538190.010051350.3219634
-0.0485105.65920.0016535470.010049610.3218828
-0.0484105.67010.0016532750.010047870.3218023
-0.0483105.68100.0016530030.010046140.3217218
-0.0482105.69190.0016527310.010044400.3216413
-0.0481105.70290.0016524590.010042660.3215608
-0.0480105.71380.0016521880.010040930.3214804
-0.0479105.72470.0016519170.010039190.3214000
-0.0478105.73560.0016516460.010037460.3213196
-0.0477105.74650.0016513750.010035730.3212393
-0.0476105.75750.0016511040.010034000.3211590
-0.0475105.76840.0016508330.010032270.3210787
-0.0474105.77930.0016505630.010030540.3209984
-0.0473105.79020.0016502930.010028810.3209182
-0.0472105.80110.0016500220.010027080.3208379
-0.0471105.81200.0016497520.010025360.3207578
0.0471159.64920.0078411530.045823200.7196214
0.0472159.65510.0078415670.045830320.7196282
0.0473159.66100.0078419820.045837400.7196350
0.0474159.66690.0078423980.045844450.7196419
0.0475159.67280.0078428150.045851460.7196489
0.0476159.67870.0078432330.045858430.7196559
0.0477159.68460.0078436520.045865360.7196630
0.0478159.69050.0078440720.045872250.7196701
0.0479159.69640.0078444930.045879110.7196772
0.0480159.70230.0078449150.045885930.7196845
0.0481159.70820.0078453380.045892720.7196917
0.0482159.71410.0078457620.045899470.7196991
0.0483159.72000.0078461870.045906190.7197064
0.0484159.72590.0078466130.045912870.7197138
0.0485159.73180.0078470390.045919510.7197213
0.0486159.73770.0078474670.045926120.7197288
0.0487159.74350.0078478950.045932700.7197364
0.0488159.74940.0078483240.045939240.7197440
0.0489159.75530.0078487550.045945750.7197517
0.0490159.76120.0078491860.045952230.7197594
0.0491159.76710.0078496180.045958670.7197672
0.0492159.77300.0078500510.045965080.7197750
0.0493159.77890.0078504850.045971460.7197828
0.0494159.78480.0078509190.045977810.7197907
0.0495159.79070.0078513550.045984130.7197987
0.0496159.79650.0078517910.045990410.7198067
0.0497159.80240.0078522280.045996670.7198147
0.0498159.80830.0078526660.046002890.7198228
0.0499159.81420.0078531050.046009090.7198310
0.0500159.82010.0078535450.046015250.7198391
\n" - ], - "text/latex": [ - "A matrix: 1002 × 5 of type dbl\n", - "\\begin{tabular}{lllll}\n", - " time & 1 & 2 & 3 & 4\\\\\n", - "\\hline\n", - "\t -0.0500 & 105.4953 & 0.001657652 & 0.01007582 & 0.3230939\\\\\n", - "\t -0.0499 & 105.5063 & 0.001657376 & 0.01007406 & 0.3230130\\\\\n", - "\t -0.0498 & 105.5172 & 0.001657100 & 0.01007231 & 0.3229321\\\\\n", - "\t -0.0497 & 105.5281 & 0.001656825 & 0.01007056 & 0.3228512\\\\\n", - "\t -0.0496 & 105.5390 & 0.001656551 & 0.01006881 & 0.3227704\\\\\n", - "\t -0.0495 & 105.5499 & 0.001656277 & 0.01006706 & 0.3226896\\\\\n", - "\t -0.0494 & 105.5609 & 0.001656003 & 0.01006531 & 0.3226088\\\\\n", - "\t -0.0493 & 105.5718 & 0.001655729 & 0.01006356 & 0.3225280\\\\\n", - "\t -0.0492 & 105.5827 & 0.001655456 & 0.01006181 & 0.3224473\\\\\n", - "\t -0.0491 & 105.5936 & 0.001655183 & 0.01006007 & 0.3223665\\\\\n", - "\t -0.0490 & 105.6046 & 0.001654910 & 0.01005832 & 0.3222859\\\\\n", - "\t -0.0489 & 105.6155 & 0.001654637 & 0.01005658 & 0.3222052\\\\\n", - "\t -0.0488 & 105.6264 & 0.001654364 & 0.01005483 & 0.3221246\\\\\n", - "\t -0.0487 & 105.6373 & 0.001654091 & 0.01005309 & 0.3220439\\\\\n", - "\t -0.0486 & 105.6482 & 0.001653819 & 0.01005135 & 0.3219634\\\\\n", - "\t -0.0485 & 105.6592 & 0.001653547 & 0.01004961 & 0.3218828\\\\\n", - "\t -0.0484 & 105.6701 & 0.001653275 & 0.01004787 & 0.3218023\\\\\n", - "\t -0.0483 & 105.6810 & 0.001653003 & 0.01004614 & 0.3217218\\\\\n", - "\t -0.0482 & 105.6919 & 0.001652731 & 0.01004440 & 0.3216413\\\\\n", - "\t -0.0481 & 105.7029 & 0.001652459 & 0.01004266 & 0.3215608\\\\\n", - "\t -0.0480 & 105.7138 & 0.001652188 & 0.01004093 & 0.3214804\\\\\n", - "\t -0.0479 & 105.7247 & 0.001651917 & 0.01003919 & 0.3214000\\\\\n", - "\t -0.0478 & 105.7356 & 0.001651646 & 0.01003746 & 0.3213196\\\\\n", - "\t -0.0477 & 105.7465 & 0.001651375 & 0.01003573 & 0.3212393\\\\\n", - "\t -0.0476 & 105.7575 & 0.001651104 & 0.01003400 & 0.3211590\\\\\n", - "\t -0.0475 & 105.7684 & 0.001650833 & 0.01003227 & 0.3210787\\\\\n", - "\t -0.0474 & 105.7793 & 0.001650563 & 0.01003054 & 0.3209984\\\\\n", - "\t -0.0473 & 105.7902 & 0.001650293 & 0.01002881 & 0.3209182\\\\\n", - "\t -0.0472 & 105.8011 & 0.001650022 & 0.01002708 & 0.3208379\\\\\n", - "\t -0.0471 & 105.8120 & 0.001649752 & 0.01002536 & 0.3207578\\\\\n", - "\t ⋮ & ⋮ & ⋮ & ⋮ & ⋮\\\\\n", - "\t 0.0471 & 159.6492 & 0.007841153 & 0.04582320 & 0.7196214\\\\\n", - "\t 0.0472 & 159.6551 & 0.007841567 & 0.04583032 & 0.7196282\\\\\n", - "\t 0.0473 & 159.6610 & 0.007841982 & 0.04583740 & 0.7196350\\\\\n", - "\t 0.0474 & 159.6669 & 0.007842398 & 0.04584445 & 0.7196419\\\\\n", - "\t 0.0475 & 159.6728 & 0.007842815 & 0.04585146 & 0.7196489\\\\\n", - "\t 0.0476 & 159.6787 & 0.007843233 & 0.04585843 & 0.7196559\\\\\n", - "\t 0.0477 & 159.6846 & 0.007843652 & 0.04586536 & 0.7196630\\\\\n", - "\t 0.0478 & 159.6905 & 0.007844072 & 0.04587225 & 0.7196701\\\\\n", - "\t 0.0479 & 159.6964 & 0.007844493 & 0.04587911 & 0.7196772\\\\\n", - "\t 0.0480 & 159.7023 & 0.007844915 & 0.04588593 & 0.7196845\\\\\n", - "\t 0.0481 & 159.7082 & 0.007845338 & 0.04589272 & 0.7196917\\\\\n", - "\t 0.0482 & 159.7141 & 0.007845762 & 0.04589947 & 0.7196991\\\\\n", - "\t 0.0483 & 159.7200 & 0.007846187 & 0.04590619 & 0.7197064\\\\\n", - "\t 0.0484 & 159.7259 & 0.007846613 & 0.04591287 & 0.7197138\\\\\n", - "\t 0.0485 & 159.7318 & 0.007847039 & 0.04591951 & 0.7197213\\\\\n", - "\t 0.0486 & 159.7377 & 0.007847467 & 0.04592612 & 0.7197288\\\\\n", - "\t 0.0487 & 159.7435 & 0.007847895 & 0.04593270 & 0.7197364\\\\\n", - "\t 0.0488 & 159.7494 & 0.007848324 & 0.04593924 & 0.7197440\\\\\n", - "\t 0.0489 & 159.7553 & 0.007848755 & 0.04594575 & 0.7197517\\\\\n", - "\t 0.0490 & 159.7612 & 0.007849186 & 0.04595223 & 0.7197594\\\\\n", - "\t 0.0491 & 159.7671 & 0.007849618 & 0.04595867 & 0.7197672\\\\\n", - "\t 0.0492 & 159.7730 & 0.007850051 & 0.04596508 & 0.7197750\\\\\n", - "\t 0.0493 & 159.7789 & 0.007850485 & 0.04597146 & 0.7197828\\\\\n", - "\t 0.0494 & 159.7848 & 0.007850919 & 0.04597781 & 0.7197907\\\\\n", - "\t 0.0495 & 159.7907 & 0.007851355 & 0.04598413 & 0.7197987\\\\\n", - "\t 0.0496 & 159.7965 & 0.007851791 & 0.04599041 & 0.7198067\\\\\n", - "\t 0.0497 & 159.8024 & 0.007852228 & 0.04599667 & 0.7198147\\\\\n", - "\t 0.0498 & 159.8083 & 0.007852666 & 0.04600289 & 0.7198228\\\\\n", - "\t 0.0499 & 159.8142 & 0.007853105 & 0.04600909 & 0.7198310\\\\\n", - "\t 0.0500 & 159.8201 & 0.007853545 & 0.04601525 & 0.7198391\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A matrix: 1002 × 5 of type dbl\n", - "\n", - "| time | 1 | 2 | 3 | 4 |\n", - "|---|---|---|---|---|\n", - "| -0.0500 | 105.4953 | 0.001657652 | 0.01007582 | 0.3230939 |\n", - "| -0.0499 | 105.5063 | 0.001657376 | 0.01007406 | 0.3230130 |\n", - "| -0.0498 | 105.5172 | 0.001657100 | 0.01007231 | 0.3229321 |\n", - "| -0.0497 | 105.5281 | 0.001656825 | 0.01007056 | 0.3228512 |\n", - "| -0.0496 | 105.5390 | 0.001656551 | 0.01006881 | 0.3227704 |\n", - "| -0.0495 | 105.5499 | 0.001656277 | 0.01006706 | 0.3226896 |\n", - "| -0.0494 | 105.5609 | 0.001656003 | 0.01006531 | 0.3226088 |\n", - "| -0.0493 | 105.5718 | 0.001655729 | 0.01006356 | 0.3225280 |\n", - "| -0.0492 | 105.5827 | 0.001655456 | 0.01006181 | 0.3224473 |\n", - "| -0.0491 | 105.5936 | 0.001655183 | 0.01006007 | 0.3223665 |\n", - "| -0.0490 | 105.6046 | 0.001654910 | 0.01005832 | 0.3222859 |\n", - "| -0.0489 | 105.6155 | 0.001654637 | 0.01005658 | 0.3222052 |\n", - "| -0.0488 | 105.6264 | 0.001654364 | 0.01005483 | 0.3221246 |\n", - "| -0.0487 | 105.6373 | 0.001654091 | 0.01005309 | 0.3220439 |\n", - "| -0.0486 | 105.6482 | 0.001653819 | 0.01005135 | 0.3219634 |\n", - "| -0.0485 | 105.6592 | 0.001653547 | 0.01004961 | 0.3218828 |\n", - "| -0.0484 | 105.6701 | 0.001653275 | 0.01004787 | 0.3218023 |\n", - "| -0.0483 | 105.6810 | 0.001653003 | 0.01004614 | 0.3217218 |\n", - "| -0.0482 | 105.6919 | 0.001652731 | 0.01004440 | 0.3216413 |\n", - "| -0.0481 | 105.7029 | 0.001652459 | 0.01004266 | 0.3215608 |\n", - "| -0.0480 | 105.7138 | 0.001652188 | 0.01004093 | 0.3214804 |\n", - "| -0.0479 | 105.7247 | 0.001651917 | 0.01003919 | 0.3214000 |\n", - "| -0.0478 | 105.7356 | 0.001651646 | 0.01003746 | 0.3213196 |\n", - "| -0.0477 | 105.7465 | 0.001651375 | 0.01003573 | 0.3212393 |\n", - "| -0.0476 | 105.7575 | 0.001651104 | 0.01003400 | 0.3211590 |\n", - "| -0.0475 | 105.7684 | 0.001650833 | 0.01003227 | 0.3210787 |\n", - "| -0.0474 | 105.7793 | 0.001650563 | 0.01003054 | 0.3209984 |\n", - "| -0.0473 | 105.7902 | 0.001650293 | 0.01002881 | 0.3209182 |\n", - "| -0.0472 | 105.8011 | 0.001650022 | 0.01002708 | 0.3208379 |\n", - "| -0.0471 | 105.8120 | 0.001649752 | 0.01002536 | 0.3207578 |\n", - "| ⋮ | ⋮ | ⋮ | ⋮ | ⋮ |\n", - "| 0.0471 | 159.6492 | 0.007841153 | 0.04582320 | 0.7196214 |\n", - "| 0.0472 | 159.6551 | 0.007841567 | 0.04583032 | 0.7196282 |\n", - "| 0.0473 | 159.6610 | 0.007841982 | 0.04583740 | 0.7196350 |\n", - "| 0.0474 | 159.6669 | 0.007842398 | 0.04584445 | 0.7196419 |\n", - "| 0.0475 | 159.6728 | 0.007842815 | 0.04585146 | 0.7196489 |\n", - "| 0.0476 | 159.6787 | 0.007843233 | 0.04585843 | 0.7196559 |\n", - "| 0.0477 | 159.6846 | 0.007843652 | 0.04586536 | 0.7196630 |\n", - "| 0.0478 | 159.6905 | 0.007844072 | 0.04587225 | 0.7196701 |\n", - "| 0.0479 | 159.6964 | 0.007844493 | 0.04587911 | 0.7196772 |\n", - "| 0.0480 | 159.7023 | 0.007844915 | 0.04588593 | 0.7196845 |\n", - "| 0.0481 | 159.7082 | 0.007845338 | 0.04589272 | 0.7196917 |\n", - "| 0.0482 | 159.7141 | 0.007845762 | 0.04589947 | 0.7196991 |\n", - "| 0.0483 | 159.7200 | 0.007846187 | 0.04590619 | 0.7197064 |\n", - "| 0.0484 | 159.7259 | 0.007846613 | 0.04591287 | 0.7197138 |\n", - "| 0.0485 | 159.7318 | 0.007847039 | 0.04591951 | 0.7197213 |\n", - "| 0.0486 | 159.7377 | 0.007847467 | 0.04592612 | 0.7197288 |\n", - "| 0.0487 | 159.7435 | 0.007847895 | 0.04593270 | 0.7197364 |\n", - "| 0.0488 | 159.7494 | 0.007848324 | 0.04593924 | 0.7197440 |\n", - "| 0.0489 | 159.7553 | 0.007848755 | 0.04594575 | 0.7197517 |\n", - "| 0.0490 | 159.7612 | 0.007849186 | 0.04595223 | 0.7197594 |\n", - "| 0.0491 | 159.7671 | 0.007849618 | 0.04595867 | 0.7197672 |\n", - "| 0.0492 | 159.7730 | 0.007850051 | 0.04596508 | 0.7197750 |\n", - "| 0.0493 | 159.7789 | 0.007850485 | 0.04597146 | 0.7197828 |\n", - "| 0.0494 | 159.7848 | 0.007850919 | 0.04597781 | 0.7197907 |\n", - "| 0.0495 | 159.7907 | 0.007851355 | 0.04598413 | 0.7197987 |\n", - "| 0.0496 | 159.7965 | 0.007851791 | 0.04599041 | 0.7198067 |\n", - "| 0.0497 | 159.8024 | 0.007852228 | 0.04599667 | 0.7198147 |\n", - "| 0.0498 | 159.8083 | 0.007852666 | 0.04600289 | 0.7198228 |\n", - "| 0.0499 | 159.8142 | 0.007853105 | 0.04600909 | 0.7198310 |\n", - "| 0.0500 | 159.8201 | 0.007853545 | 0.04601525 | 0.7198391 |\n", - "\n" - ], - "text/plain": [ - " time 1 2 3 4 \n", - " [1,] -0.0500 105.4953 0.001657652 0.01007582 0.3230939\n", - " [2,] -0.0499 105.5063 0.001657376 0.01007406 0.3230130\n", - " [3,] -0.0498 105.5172 0.001657100 0.01007231 0.3229321\n", - " [4,] -0.0497 105.5281 0.001656825 0.01007056 0.3228512\n", - " [5,] -0.0496 105.5390 0.001656551 0.01006881 0.3227704\n", - " [6,] -0.0495 105.5499 0.001656277 0.01006706 0.3226896\n", - " [7,] -0.0494 105.5609 0.001656003 0.01006531 0.3226088\n", - " [8,] -0.0493 105.5718 0.001655729 0.01006356 0.3225280\n", - " [9,] -0.0492 105.5827 0.001655456 0.01006181 0.3224473\n", - "[10,] -0.0491 105.5936 0.001655183 0.01006007 0.3223665\n", - "[11,] -0.0490 105.6046 0.001654910 0.01005832 0.3222859\n", - "[12,] -0.0489 105.6155 0.001654637 0.01005658 0.3222052\n", - "[13,] -0.0488 105.6264 0.001654364 0.01005483 0.3221246\n", - "[14,] -0.0487 105.6373 0.001654091 0.01005309 0.3220439\n", - "[15,] -0.0486 105.6482 0.001653819 0.01005135 0.3219634\n", - "[16,] -0.0485 105.6592 0.001653547 0.01004961 0.3218828\n", - "[17,] -0.0484 105.6701 0.001653275 0.01004787 0.3218023\n", - "[18,] -0.0483 105.6810 0.001653003 0.01004614 0.3217218\n", - "[19,] -0.0482 105.6919 0.001652731 0.01004440 0.3216413\n", - "[20,] -0.0481 105.7029 0.001652459 0.01004266 0.3215608\n", - "[21,] -0.0480 105.7138 0.001652188 0.01004093 0.3214804\n", - "[22,] -0.0479 105.7247 0.001651917 0.01003919 0.3214000\n", - "[23,] -0.0478 105.7356 0.001651646 0.01003746 0.3213196\n", - "[24,] -0.0477 105.7465 0.001651375 0.01003573 0.3212393\n", - "[25,] -0.0476 105.7575 0.001651104 0.01003400 0.3211590\n", - "[26,] -0.0475 105.7684 0.001650833 0.01003227 0.3210787\n", - "[27,] -0.0474 105.7793 0.001650563 0.01003054 0.3209984\n", - "[28,] -0.0473 105.7902 0.001650293 0.01002881 0.3209182\n", - "[29,] -0.0472 105.8011 0.001650022 0.01002708 0.3208379\n", - "[30,] -0.0471 105.8120 0.001649752 0.01002536 0.3207578\n", - "[31,] ⋮ ⋮ ⋮ ⋮ ⋮ \n", - "[32,] 0.0471 159.6492 0.007841153 0.04582320 0.7196214\n", - "[33,] 0.0472 159.6551 0.007841567 0.04583032 0.7196282\n", - "[34,] 0.0473 159.6610 0.007841982 0.04583740 0.7196350\n", - "[35,] 0.0474 159.6669 0.007842398 0.04584445 0.7196419\n", - "[36,] 0.0475 159.6728 0.007842815 0.04585146 0.7196489\n", - "[37,] 0.0476 159.6787 0.007843233 0.04585843 0.7196559\n", - "[38,] 0.0477 159.6846 0.007843652 0.04586536 0.7196630\n", - "[39,] 0.0478 159.6905 0.007844072 0.04587225 0.7196701\n", - "[40,] 0.0479 159.6964 0.007844493 0.04587911 0.7196772\n", - "[41,] 0.0480 159.7023 0.007844915 0.04588593 0.7196845\n", - "[42,] 0.0481 159.7082 0.007845338 0.04589272 0.7196917\n", - "[43,] 0.0482 159.7141 0.007845762 0.04589947 0.7196991\n", - "[44,] 0.0483 159.7200 0.007846187 0.04590619 0.7197064\n", - "[45,] 0.0484 159.7259 0.007846613 0.04591287 0.7197138\n", - "[46,] 0.0485 159.7318 0.007847039 0.04591951 0.7197213\n", - "[47,] 0.0486 159.7377 0.007847467 0.04592612 0.7197288\n", - "[48,] 0.0487 159.7435 0.007847895 0.04593270 0.7197364\n", - "[49,] 0.0488 159.7494 0.007848324 0.04593924 0.7197440\n", - "[50,] 0.0489 159.7553 0.007848755 0.04594575 0.7197517\n", - "[51,] 0.0490 159.7612 0.007849186 0.04595223 0.7197594\n", - "[52,] 0.0491 159.7671 0.007849618 0.04595867 0.7197672\n", - "[53,] 0.0492 159.7730 0.007850051 0.04596508 0.7197750\n", - "[54,] 0.0493 159.7789 0.007850485 0.04597146 0.7197828\n", - "[55,] 0.0494 159.7848 0.007850919 0.04597781 0.7197907\n", - "[56,] 0.0495 159.7907 0.007851355 0.04598413 0.7197987\n", - "[57,] 0.0496 159.7965 0.007851791 0.04599041 0.7198067\n", - "[58,] 0.0497 159.8024 0.007852228 0.04599667 0.7198147\n", - "[59,] 0.0498 159.8083 0.007852666 0.04600289 0.7198228\n", - "[60,] 0.0499 159.8142 0.007853105 0.04600909 0.7198310\n", - "[61,] 0.0500 159.8201 0.007853545 0.04601525 0.7198391" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "y_all" - ] - }, { "cell_type": "markdown", "id": "dc7729e7", diff --git a/examples/model_1_perturbation.png b/examples/model_1_perturbation.png index b68a8052694f272aaaf35660fa73ef8a7e9221e8..4db29821b85565a7ab6fdb131d899f20953d94e2 100644 GIT binary patch literal 59191 zcmeFZ2UL^Yvp1U11raQOf)EQu2}S80Q4v9kEg|%v^bXQ%6oFR|K@gCxARtMANR=Mo z1q@Y0dXwHk2)%wg_@4hc-#vHT_1$ytU1zPkK305$=hJkZ0?)t$Ifw=2IpqiZ5=psOSjbs`Uy9`-!Dqk%3~|&5+@%a~^q+-Aq(vn76kC7> z#o%)oDF=xJ{VgDo7T|jHI8u(%B(gZN7<>jI2Z|#H!1b`$0#a-tR~!jG7RBH(lJgb&FLC2dKqI=?aW;Yuzl=+THs#l~tK90rh1{o;U7oe4Sb zyXu!J@b>me;&F!7z2nE}(vLwP55oIJAQ0kr1{4JH_SpYlFNC~2mOFX^9w`TUhj-ee zwYc}on$rqaha(=oRvk)REP3&(c0n&>C8TkLAO7{hj$U}GPJo-dZ%$l!0Dp{BoU8wN z{Bp?qRA*mqSG-GCEC2ny3P+J%iq<6i&+aI%93x0AtsU#Pn!`HYfmZKWN52K=7-hwOx+ZL-Kz zb4W-Hw`%}3(mUw)iZ|%cAm8G3zG_>n^sn6&)r-t|bc#hV0$^Q!#f>Xy6@gB{{0WNF$4b$4czh4D$kheR5o zUft{HR{s+-%HCWAi;{uGqE#?e?VCh4|JdL-%a>&*2~zJQ*1h8CXoY4jK$$iW$590$ zmVE)QO;UN4{Wo2@;c$QBWUeMrvUQ)DpO>WH=*-f9 zrdI=ur!`Ys-)>c`I_L>Z(trPo-nP0$T1N9WDM~c2N~^m{N%2NzTDyzt@Ymn^BxKOl zhL8ohJbyWLTc6ea^06n;Sm_oW-rSK^S@}h>&>?xDE`c5&ko(v1KDM@DxkFRrd&_3b z`s8}Qv4Ju}?nphCMww7;cuuDEl_6zYzU{3s&m7)xSOuSfrY+%0B1ScU0kAC`YP;8C zPVf4x!?I;3@lY1Vb;$c6LSKk%*P*uW=gdC7B&J?rVl>4$q{;N(Ogo? zWWRv;q3KFkbFF3mYp6MW&3d`#E%no+6Y@Jfp%q{14@i#F-O909%gE@jk^#SC?XUa1 z9_Ap-umH{%&7Lw{!gi*a+}%w~Bs(l4iRze1v9M@Jgt+4L-h_^nR_nblSJ8e-#y-1G zUKt#k=S+Bo9g}^Q^$g1)a#b($+IHnvtk)<{>vjt1=f^$f7^v;a2G_iJy3V}w+S;Q@ z)x7#wSWTmpoMKlW=U2bY5V4lc>r=|l7u{EaqeM3Dn-BLsITXs^D~(q-4NLCct1&36 zAH7KJu%Ry7Oj;l}`B@bc-UJw6VjhQsaIEYc_M#~rhC z>z$LsEi`%9N~AZd-Ip-jJvq^d9GxC|eA9kGAu>vJh)dbCxdi1~R9O365vVVmgCOG4 zDbcc%I+5S9+aj4^7f`@>lFSB{m9N@p?ZM%mwU-{B--yuso{Z7#h#F3EvN&?~-E`%0 zYYFK}T+8nCzD0h@wp(RXA`OQwL)d0HLdeiKA7LsYKA;!lfn4@cuh`mhT7T2^gw65u z3DoxA55#t|#n46~Jzu|N%(67^M`mw@Xx2BgybyL@$&AY6U-6M-!>C-N* zYfaL{GNKA-9Rr&1V&omWzLsV$oZ3cf_g4n-NhaNQcIz%uS(!yfM#F|D_?5R0T2q7M z9#?#nL+2!SUOjOSdmJ@;r}Lrksard;!kf2>$8arr&a8F?6n>W9K>0lyV&Ap2=0Pu6 z`rjQM0c-rFzO!fytnmxV8Z)Ef+pHE}H%-@`3&SYcl(yg_^gm$`PtF~#kkc1>=lf2v zLE!=O##33%E&Vv2R%xGI{U=z%uN7wTFC(+Jw_Qxk$u<2-qI7==n`e~^&gQ|XyRi+; zwubHbx*7#+qA54^SOq{O5zu=1PsC<#wnIhQ>kf+Wq4J1s?$fxUZsQrcKH~| zaseUffSNh}!a-rH=tw2(weXt!=CYRk!h3xzFy%@0&Iak=ku1&xom0>9^7wdLN7 zDRMr1XY|XjyP?LQs(w#J|GgiZoF?&wUyMSuhrckdM~sbIAI`J($*z)3k*5E{Pd6WG zbZ?KUP8F)C5(OvnyY%y`KhNzK#3TyK9*!mik@*a`Sc}hl##FwP*`M8&?kl)f4-d0- z{5ss2T5aTyE`?5YL2ch={IEYL@4H5Bxtg{bs(YShU||d!m1#>dOd2{v$Q@DMPDgvO zN&uK}T*=>S{q9APdKkeW$+!AF(Q=V4*DK`F0&nqhI5=^I^a85)m`k8-g;ueZWHu)URL_S4mksBg%uDeZOW zi|p_8Rd?ys8O&8;prS&4`P9txa)1Uuzp0~CGhyj(Bh3)U;vk&|6RQ4mWQqT?0EY`Mq}mKVgH-V`JqK6aQJ%x}tUglbvTn7h0lB<4 zKk%KD!k)QOik~}^N!gGk?(MQX4ZgMfEB2FldDS)2t#1d}SJAYv3MzK$%Rq5nP<8hc zrq%Dl5S|Vi>cq07%}nX4fM@$>@wIhi@Nj41cG&xeU!1&1F5FYTY1v($Gy9fE%(n#F z0ud|08YTx@+a1;I3Uqnb?%6n7PPS@nD2qM2Kh%Ew(uf?IZPRaCBv;59O)PUbw1W}m z6g}a^SI`~06fa?C?^eAgv}5OU?YDQ9Vfll;1}N{W>nJXt!@1I{g6z3h^m6NxSnR3{ zM}EPSg+ngJL?{YYeQer!%}{zwyT=`Ayn{z~Y`gUISky;#^iwdU0 z+itW=JtZJ*6e!U4Kw(CKVu85{j5;dDy=4({)tM1ZBL*>RC^p4GZI6=<$5H0Vdzl~a zBKVq9ZQ{e7^?HE|d&bd$SHcl6zi zD~Z>`hWR}f@ih}@9saI1IaN}XtfSeN@yy^#+oGOi^zM3Pz*K!7JMuK^I~G-aQ9ud4 z;i)K6@nCCU+>t{WukCDh^T{@spr~`J$KZndTrp363wjN-pa zmASJTrkdu7&PsWlL@uRfG%xU&w0{1+Rbx=3Dqh<82rRj6og%s*WnwD8VEATS{Bilt zMj%C8lZTaB5FYC)=FaGMU$J!Wf z3)MD{7xArfv`W$8+xvc98*z77U0JV0`m@@JpKfsD8=5+foIKF8w^-yZ5#Rmzb&->0 zI8->c!ibp00$j?TOug4tv5GThIT8Bq&Oy8`Lm$Qg*J!y;;7v1>8@gS`JCCnk|$xMS5>OEbtc(@mnZ_vmG$a; zb(5n!_Qfn`N@D5kKHej5G9G(g=L^o;SOHFPGKA;SSF5E8eWWb|S?_#$%nVzB5M}GMD=%id+rWg2Lmy$<8|; zdGFyXpFSftwVsZwj&rG__{qgdB)_NXB}^!`T>+DHYxRb_YT@%5t*{Dn15FdZnApWh zGq54zqGJDkkw41L&{Qel!U-tTOys;}{v|Oelg&jmbm)P5P^9-U)O{xKAlMqa6B!@; zDwyHV-!Hqk546#e8pId+45%9d6Fg+KXEZ{egD|wNwNKu3T;^a%wf+4$j4- zH`71}A>Gv7TiZeiMT03^#|+moCdkZ}V(RWoCgD}v11nap%VT3>U2F3>I>H=G5VVIq zJ-*qxxJ)^|A~m&M!&k}Jmmcz64czUNFllWt8A`2|+COj)Q>B9R>NJBrh_CCK?P}}v z__lPxve9K4$PR82v%X$4lQ{Bh0HW5`x07)H3EeG!A=Mf+9#GkBaqf>oRLwv?ISlmqdCKXF9tkuaw=}-m%p9% zE!W?Fb;A5qwvvKov)`KNbGVh4GBt$Wtla5TQplXEo4fmllxKFahXlk)rkF{f#yQic zf4Boe9PJfJ`gz_zf%U!-1jD^9gbp8Rp(_gTb#`%anVwDk*vy22+}QVKBjobD`9VK! zsA!nvU0%|u^|I*92?#n@2Rgs%`Hl{6*3c1@XsUDR3;}}KS-*nz^Sj2$J+v#ayR&ww zR9l8Inc*Ih3NlBop7K6JXj4mf9B!==Nr{L~>hxyM2T}|9Yat+KUWdr3oEnrpF~46Q zHvPQ4=_CQeZ6%EnNfhrr<@sNVBY5|i}1#JOWmIS(c^2Y$J z#P2_2u-=>mvGxmwGK|f-{puHzf~kYko};^(F_Q7V-_-Cv0dyjH$uuvlWj^$9Y9h4g z@S+?XeXvGl#cidT+2^)O2OASBBofI($KQ*qir{{VA#)V?`vSUJtx_hAKs&S>)rY)F zd?yp)RpvAQ3?!|ujW}0Cho7jb-Y%-B*MkEr;9{nCHMIR=qo^y~#Yxca?9`2jIvh#L z68z`cBl@RZ8p(hYWm5qM67jD`V4|l1!`H%tspUR(W(%gbVcg_6hf@6FTJo+X`WX?a zcJ9SM2?g;Uy+w#x3J05nN+p0K(%@(^(+914%ih|=qIHm<|34OsI+;g-rtV8H$T@NX5 z^G-e}h94g=WEr{Z^=ljJ23FvGF!h)f93goYhnzc(BHdn6^AHdGZW3hD*(`6;vO$3V zA;CxXvtiL=OJahd;+2VPvLZEd1^e{cpJ$^d#1ZB{ISKsZ96<^(EwfcR#C{J>;Xe-t ztJa8l?+`+RPN_uEH?(Gazp8B!vpGEld_J--nkGopYMfW|3q4vJ+8x|4uMMrFT z_ZBNPXF%+a2CJMkieW3Ykq7b+7FM|gd96aEa{n;&>z6v>u=FFAN}l_HUZL@Hs_*$Q)n%Bv@nfu>n)m^ssZ8{Q-av%+6f| zcgJ0#K64FdaX~5@>%(~r6^DDf*Z`(KBU~?7Y6A~{T_eXGzSM3~;mUClvY>*W3rbkN zr1=bC!GIKF>E73B{;5f%0%0T#giBW&Sn;@YJ%XHx)<~6SwlJVb@e*PknGA)?8o8~l zE!59JU&7uDRNlOThJN>>%pjPlpQ`#^0WJ^|j9r;`R1;1m0%B%_zS!KgVMaycLT2Zd zGdLKkm8=wjqYQDqcQ0Eb7i&-nwH4dm>Wqc~+|#1!9`Y#1^YTEMFxrt=y4)p9%=Lru z))d>`R1ED6pMG_O3xbRDILhb(8Y=(YfdKn52LWUCe0L&*#XgKN>^e!sPLz~5|1uJL z7sRg-e z%L*MSQ%Ars%~sXEeH#j`Kxb5%BLUC504Xsq<=2|@iwM~W&KhLQ)c z7dl=*8fzLKl&~8*q4(+tGH2r5AI6|mjdP&zllI5EpQv``g`Gyts^@IZVqGQGL(4OBTxl{?0+cwc_;VD*EtqcR;lyM$47a2 zyITX%jRFD!BZ}MRAt%X4^jsFn4h_8TL)6zak&G*)B{2WF8|v;7gH|;F3=1mlPS;wf z;sV^zuKOYmT6Yy-BvaZM4_E4eB}>lwc#A+Igy!fEzwg3EpZDtC%RbY^xZS}!p6gDr zZAg#P!%T*87~13n!A0-wXADnl0&vB3#%Mf8HP_R5Z0Rm(A<52bMDp)}q0ab|*h%r^7sqNn;0fz(+wev^Sbc^D&|z1J)F>j;me<2vEASNcw3qy!a(l zlc;ZwwYBg&8#9o822#h5P&va)i)UbeRI5{+E7mn7j$+%^AX0s^y^16uj_U?cb+3L5 zo{oRMIGyNt88}%|thf&%ij1f@ayh+tgt(@K9YY!X0g>v2F$HhN2y0i+d?hSAl}RlY zfjVl>{NA@Klqo`)WF9|clgL(s!WB&<%U0_8>PMpUba=8h`RTL*`Or}M%nTHtuJiAm zGyn2YsMwv({w-*wmq*oYwt5lvWoiH1*9r{n@wmsdLmglp*H=meB6NU@?z7rF@H>cB z2#uydE1O++HKvFI%5;_?n^8`SNHr4rf26z4Q=();s+^Dz|h1gE|9C&9BX=%~7JwSx%YN{BK`oTpd?Mw>?g#4^nir*X5{ zHV0rl8uhZJxp+1z?hvVJySkk2BCZ(%f$r>>nQ0tiZ&ioAdvs~$C0KTvuwkcfh-IT=C#CiJ+!7q&Z9k+?05;Hb?J=W^W3RicA`EGtd`beI4VLPA6 zLyIR(_%5GZrDA6lsu+#L{`%F$LuhDMQ>$JoG<#)TTgK*6YZDG88OR4uF)=&zrKxJ1 zfiZGJ&&)xeg@oW+1d!W;5z`!`>tgO+exnNNb~^d0K%xB#DPoJ0G3Khj+`6kz;l zXiY4$nk`t#7sJ+O3Big}h%20_$(4OiouNz&Qj~5NZj4ZM1CxB=ZqzeQ7L>g%XRpaV zbiPBq=1oM?D`0br3!CIyY4FAKOt%q-XYty=m!8L~rgBmv2i$1qfWa1u$^5Vd#Vy)U z6#?y$8o6*5jxI7%`=A1PMTowMZXNu(>%QrB8*C$Kd+5`F$1}i2)BpW8@X<|%ZhDf3 za&0N|h!x+vTMp*2r7Ofg$4I7r9&K=*kCtFS5jF3l`sKio@DK6;LuR*eKC^3!CdT0# ze)?oUxs0o+Kw2>q%D(5=ObXz^r0agWMt~JCWAt_*c10IKPp%K0N9dD9pAvDW#KS=6 z3>EwNPe$oo`b3-ZOE*k@{<8wP{(HWIbCSS|Khf+@667HC=Q4hWgJsTRaT)JtQkK$^ zKNfOX=wQE19Y9qn+;R5P%;GphX z!B+-!rPPw21q?GJ&foY9NSq$G&P))%uSnRNhg3*|kj`lKbvf3%aLT97s(%6XFoD8UF-SpQ!<+*%}P$s&Y#Z+=RuP~Bc0TqAgswpp3 zL|vf~no;avoOyl+sF}<9Ky-F>#lTax2Mnn1CQ)qPVE`L)SqUFfU&23_fc<#qZTN=> z;JcWJ9B3Yz{I;C&zI2N4L7Er-q0t6p0kg)y-Cqx6iISlGG-!W|7mhv)+DB+F?WOEh z|9XR=#h=W);)3uzNh@nlss1Kz^ z`VbSC-ST$6SW~eVifZIXpB%^8Blt(jZLP~Z7G7-h~#f?e1A#CBjrgqqrj zqMjU2xPxlx?XLsb*Pu-Lm-L|Y8ExXIxcYMh3kQ0R{MQ&-#glyc$8>L0|MY(KyHLnv z(VNP4uQM7y8UJPZR<{6J)36Xt1=j3`nH=Xwt?$Y`Ea-=j5lc z75{+@_8Stn3aL&QbOsK3fUcsqUm=Z{bo-ev++U=?L|>xJX_Ii1*LT!JMW>Xs0|y2s z5|wXtUqq|e)5YU0D2v=rjnrHQq#ueM4qxz?iLAMUJI74Vij4=^%O_rAvyP$%bxXR( z^LRw)Nld8kv=5>XaRrE*bx<1H3+Ql@#p_mBGb1(8=w%uqs~(lxN1gEp7)k%C_RnjQ zVB~b4RPd-18iacZ#19!j)X3yg+=*!HJk)*@?U=eGJF#!W+3Qesn(%>{J{CU(h#~;V zvzGJNT{~?5A#n1}`)~WcoSg@%#20tCEeaDloFFxGshOi*oH>~vXAXF^P!vQ;!SiMf z_0DE@^s6&?eCrd;7=^q5cr|62ATphmJEdZ)LwbjjXP)|@ee1n3QQ5O z?~kMLf>uDk!Ut8i?A9mA+D|*<8pzX}{(qtg*598oobFe@a#`R06J=O27NpqRoUc^V zzHedUSv)SJz%^Fky5*Gdud>4E`@Dum_W)aQ%9L0_>*MOINASUNPrr&rqnB~y=ZhpP zy92QMo!YfgW<|nai2#>ll4>=cbZje}TJ#ONrf#FQsnlAfRCzb|^qZUQA=Uz>m-K^v z0B%vVv7M#!zNF6-d5Qd5`*gqbvV{o;T)oX&kx4JaJ?fT#!Qu_dl3qd!8}9E-keZX} z(XCl8b*e@3#8T*$yw&7Mqo;D*Gbv1k5vu-vuj?9>sBY`VF0__;dy$v^Zhn8<5ql(< z57!(@_{bVrf|VBfIS)$D);~99&3*D6kO5qy($m_zC{2Xiep%Dw#C9}d0&F%zZWM;9 z{h3@fp=|%({K*9CA{wC+k!Ebk6tMyBR+4A`$mHHqO$#|K`W)Ab%&s5WVs^C%;Uj@* zL>qzgHaEQ?)E*;|$JHHC&9MC0{8 z3_++QuhHS|(Fl19-N`?d3*iL%xcLeRQGDb>0_RfmW5L%cviz(V3eGbgo3=}ll1XwuUqm#)4i+EGzlka-o z)_8M>0p*%xMSG3GEv2SRs0}0eO#W+R_6p20WBBESBs8oo^i0tZ?0oE%`Ze)|^HZ)9%goK2o zWnalH^%t*@6yTs@e;kFsOEJ-4AT=_u+Jr(F4r9cW5 zrc3}l^%Y$GP@oCy^%B@%T`7#lGw9l>{{!Et5n@o>(Dam*K>S_g%YUFEE4`yNuG1=} zC1BnE=hCxhh0*jng_l6wjso6ghDqfb0%sNNH_ybnuVPeRA#1x-C>?>@QgFA30oD1{ zZNAe19;zbm^%pOEgMxcUZewTIi!e;lR{yERiH|39{-U4_P7&RDItHU!kj4w|3w?L= zcGo4+*uGHsp=EMOf-a0x9r^Rf)_6zmu4N6B=Lj$^PTZ%=$~O5Ax2MM^&UD-G;5!P2 zx=#nWyEyT}=dvhhE8a2F5n)Z-iBb^HYCVnWCz+niu?hyWfW4%?f}rJ;McA#uqUgXQ zbNp{C5$4%QDjOJM*nH)lf5;2h|3De(B!NF#G*2h0HEHj+18@*OCNGGOhQ?C(3tY#x z@7fztW~$AAo-5EWhtoMTREu=1pF4nTZ*uaRh`7MdQItCJfe{rl0Ki8r8zjey7j0De zRXjkmExD4;G~5IxkkN|gT_ed;Az^oskTs*zoe~wC;q2`f&xbE9`g4uiRE11x(BJ{< zAZK4#@N*_-d{_zKS(NOUvG(4Xd*Ci547I&R;UgnZWo5LHMVn0cp&15L3Dvg;Z!K%36geiY6`lGuo~v&EP`PJ8~onj-mGX^`O@@ffs2_Be&zWK0ZB8 zxLqjbU!~vCqY66j2vRfwGV__A3MoYu#Ge+*7rnAt;(u520sVw5}Sq*I4_NUm}Md>EA_@!t( zM2504clG|xr88n^xVN%1&@r}A&29L`C5!Om<$4|!GURCOA&NhVx6?_&0dVp>aywlF@E&#{i0R1K2PDvIL9wh@o1AR2Vlc zT6|cH@}^#U3Ju=s564YyE}{Lt4c$2_Wram6RKNN?9u^%PEw2+;kbq%(Zbb{}vATe+ z22*xAy%g+^yL2Y#(q{TR? z>QL+o;LXt3yA(rpm0$#u7^7%_M^TM zJ5xhu2duSy_eioiAJn)QQ7TV(;iI7kAd^r7VlTU|ZA{ct-jVGN+~RvPP3PUeX%t2q zoXSC~0u2TE34Od35QUa$u)DYI(Kgn}e?dhtkHByCPa)mf{YHaFWR~$)g*Vk-X=6QF zoVxTQ*!s4w@Z&6A^2k|4MmOZx&JF4G4GwmW=Qb^ zC=Sqe34MCUkjX~C<2H)PZ*OeA&*mGJ=I+8rStc183YeY_9At9mCZ`N4d9Jxc@#h$j ze3_$J8b8{0YV-5L8PWh1ATQI3bo)=KiP_K#AUSb_SrOWd?*5Opr~VlDxyS+16_Q5r z*adEpFA39>t*M@-oH_t4O!{Z?&AxAq<28nA^d zeFwz7IH1K>p4XPYs;?pu0;cMaI89Khx=a6QB;Z#7qE2zLOxRhV0(;z z0$^9@hP4~+0v$QSTrmon`woIIIzOE*E54EpB~MHnF&6_GJ}3p+%V2hX9!0qd2KK8e zIPLulwHAYWwKb6U3oc5XztIXbJTAS(?n5a|{~F$1jH0){Fn2&V?Pn283b1g8 z<>Hh-en8SmuDkMA^;Dwi0FrBA7180T?K~X{ab6FfeOR|#dRHO-NJbvFLb%3FLGiCB)z@iz&4%aB{^f*CsY|SEf1t0P`+cv5!y(0Trdd)nb(4@Qe zc@$EXc7Or#(}e7)Y%2vVgT9N)HLE4O!Sm`A24}4Sfh+q&@rK14?Iui zz40IP;uHVlN({GR`1GJeg2X9+|G1H;b8H8z4iSjk9bYhPm%;l&zROa!sWbP9r*a@@ z0u8Sh!18)d?euuZP%*t}5jz1OmCOZ6 zdVD*JE=!YagfquziarC1qV2R0zlV-QZ{?;Ip`8QMjVyPGb4RTogPd0LL{e90*EbxF z_le>F;l?5eD}fg{pD#y^Ts52CD~ONQ-SGa|S_LHF&rp>}OJKEi9+|)jeHd}wlvjde z%Yh9R=`S3)W5yk9rLkAhuaJ-%AY=6>_q$Tx-WY@nZVlxo9044JF7qf7PV&V4;7B|z ze$-kPYD@oT1`tRKio`=O!V-#f^Z7E*ZWU}WP>3S%d7LzcQ+CdfUzqpwwwF5?-+$6l z8&HMp)N3wHf-QRXcGln2e!9B_433os`@ZWHi&=_}4~DLEXncKf5yWrqgBK>@%qBfX zGA+L}z>Im7i)5+h`{y)}#IhaO6UO7(Ak7d<$aFa0UR~NVCj2sbZth5Zj=uxZCY&r< zYgjZ2F*nm_)P1tU+f5bzixWhq@L(~{RUf*a%v-7$v}V3OiG}My2UrOhG%$UC*TXC= z9S;Y+R{omm3a9wSGOUz7Z!ulm1z_SEAg2JluvbW;1-PwAJe7-S1wpCz6uu@NL*2Lr zz4w($>NFUPD%OnFjuP3T5$a&<1@795W2k&K0ysxNbDD4)jut-}sK|)-!#o(E*OVS# z97eqcqCqtBKQUeIDwqQbN%ZFk{UWsA;Q&-XKo8_QC_W(6jCy}`yZWCvlVJV48l)zX^X31({ol@$1rSZWVe{b0 zXSPRq{^x8e=?t!~&&7T0wk5C)6dT{lQHI>G1sO}sxBsq-HwU4r0>r=GEbW)p=YdG^ zy>?EaF$XF^sm*Oq*XmbMivpjGVLV#OI4&J!No3hj&`(XiDw=q^tF@3MXf`CXB9BPU#w*X`ByO-~I|B`k$VNgI$fcQ)KW@ zTdznSw}Wv;c~+Rni8@n1WAUu?H=F$`i2mPGx#xbV#jIv^w0Uw zuN$u`2P3=?lzP@5g5>*T>?b#V_F>+_h;ffH;rICOuFvC@8@cukktb^6+X5b64bb1W zVO%!~()B)1i2CJ29x_`s-C2%x^siphomP~QnXVO#EnB#ie(G`F?6ljvq*LIyTi4>F zag}vBt%Hx^Iqi)h$;-c9MAWSmb}qSRyucQYwi<~OBLpXPY=7VYZ824k*`#*Z2yGl8 z1`q2jd-ky~fxjP_vKj3C+z*uaWQ;4(te)Qz;CPrfTb*AWAI_?NVB}ps8Wns@@kHK_ z0Bet(I!5e|U}=w5h%)w_a*n@b&`$1J2A0r)!^G^d<+Od9jPfJpWs15f?uouc*d44& zA9_r){P^IlWzbwNuPr}ZPTMu_yMEmq+pGS(adc}P93&ba(Ds1-CpH$z+N}wqwa8;* zhDNIw_p7#bJJSmX4m0(R;ZT=kFMADd2TD{JiyJv2Ud+X0Yfi-_pV{)_v)oxe828HZ zS^OYquW+T@{AhiV)d@HKdZvzu%uyXB!neE3r^s!#t6T};g0oNs@E zuO|QLQgS}&=F%nnld#iKL&|q=&BtiuS-6%u4ty~#Fmd1cWP`3e*zD{xFA_PDn5|K_ z=KsLKR?~D{=)8i-m)*nwH#s?Pg=)uDhqyy~@nbo?Pi`A+vi$h&tz{wo`;CKp1y}D! zIi8@5e~_dk%>mtuf97h_UUn-Wda;J{_sKNRGolCRyXtfMoNbaJ_y$#-dQ`vAJpPla?;`jz++A^Ukw?98TDBS5fGgmGZ65d9S@5AS%OR$4dzWiv|bS|60(B=MmebpVJoM*&d z%DP6%3GebSf!)ph3b|ohdW1DurSB^B-sgw6b~>9lA3l07{;3KMf7m;NAoj1b4{IOT zy7q)7N3511zkKvZ?{>kre=bQPeqPx1r!YsW^Lt{1pyVgz9Q;MeAlX}U<@uNV&_D*t zwQu&20zp@|{R`Z4^u;=r4cz|TdsV5rjXw6L!#AeVHJE30;I? z(js(cEc#@3fZK3tKsX%&uR}kp1nWi5NzT)}Df2IPyF@U~{yzhjKN>-+7;v5ZrcF6Y zVefhTtK7rc#e?T=`?)WP?eJL|Iln#O1();g6+Ih->HmqrcR;Ffj{Vz2*`4~Kw_zrH zCYFbV>IX5MvkhYSCw(KXdl#4wh*OTUd-UvUUVM2KwiSQL_l?Rdc;|8NJwQ~H+WrR( z(2@!Y_ou~w;*mDd=7;g*w%QdP;9P%?r$&<+Lxv7@weQ!n1IS!jdv2sE zw<2By4(dga&PIalH7oFaao|+Lx7&gr*r?dA0rq_dslT(}T&@*3V0&Co3Ediy;9t6K zy|?2jQMT=}Gq=^XRxU5f;mBF7e9k<8jzItoy@fnSIJgd@J+yOKciI@*@AFY=4@j~g z#5Ns2j-iZVPTUbCpIvV~B%=?8I`T*cN-$AJ`F8|NGN2(6L5uI0nHnHX+)BuFs7llv zhGmguK6T3T_Aob+m^KIC(%+v^Xan_T?%s30UTJeK8?BS8f5(ij5P2xX3sQF%tOZTH z__bQjtC!rCcSifi?{)m_7}YJ16uyOIBTR`-RVC8l`wlHL-_E;t*3$-qjBxP64yLH= zlFYt{_}@dm6F8u9hLuHP!l$a?!rxC!OIJGOpwHL(c?~N80=We8-v9do&fx>c zF<*O0VZY!YJVhW81UutYEhj5s8E3=Flm{GXYl8X;PK>ieRBIufo-P(}R{Ogq`TnI` z!DKQ&xss0%-?(=`u z?x04xsZRqhoBL=G_&`WFp}5SrffbT-hh4>GTb1_6qFKQL@jG8WuE$$mdY40;0aJ4l+S!81m%DH?^l>BzWH|CRt zYJ3p3Z}WNfbr&L5#CnMh%2cKfN=(?OyBDT02b6BYe=k-dhdo2|dYubuv()Frd_t|_ zj;~ek$G#I4j8f#V$Z>{WGO&(N` z<2}+-b*F<@n|<{+9so0AB2%_2^(bW}M6Dn@nmw_i#qndWnsBCnlV+i-tg_zfWLF8P zA3pUm0kNi+`;Cjk7~Y4yR=*W#G~J~mU~R8c6`*Tq_i#OU`_tRwvc)%%8v>EGFJd=JFWzY-+%j%5QG@6u$@5i&83dW!}n)MkV5YO_kR^K{$Q} zr!114*YdZ#RW3@1#I^W|_0_C&E{igylEmoVantlHkJ)M@y!$<40$*)l-xa7%HaJ8L z-z-h|J7+tv#4fDw=~~r4Vx|?xK=wFj-wi6PE|p#0aG*`1L5UQ|9Q!TP`K+z(#sTtc z;h97#aP*|8L^Ss6x=FW2iic93$C9h|dMzJc^BMkX4qZvn!F1UX@p!p+)u6Ijc-a3b z*>{)ko~ZU?^SM>K_2GfA0%HMOe#`iiSrw;!kzvCht}KYDaN&*ihx$>8@n?!ZyMyYk zS@vgn{sKo8C6qe|jGs=vxV^~KV@ z_C@~aa2Wh0Szkod7!=|n^X*Kv3kLL-g2o0P+lC=307d4TgUQv8gYdQLr7fI}c~z}^ z?=8E0a@H>NKH+c_wANn)0>^@i0rjmpykSpER{~3X!|HYK!H*A7DhOSm^OvNx>hOo^ zBFz=;hL4&yq;ag*O={Tv9XEvi|W!|>gXu77{S;ssS zun*wZ0?sw9W6f84qhD_-+nId8KWp#^>i5$no~&6dvHT)x(M*1@#VZ4gku>YWoYUCA`lw{*C_UuO?=eZpDW@hLLZ&#dpOm8lUs23J~yGeZT8*qdvdJ{ zgE6k@*4gZ@F77AA?p`!lK}_LgC>6S0e91-^@KxCkVW7T=<=UpWGVikE!LOX&v042U zkYrb(6vxuxH7yI>?@T@$eXV)}R%B?=ttOm%FZWdQRzxanlAk}IxHxERGQIv)LeV)U zG1IIGrMPw|0ppr^Uuw3t$L$IxvUG2FUB6*x?RANF)6_g^%H2UdJg(Ah*k}Wq3s8i z%{e?%i=07$?)893b_IwN2i|2j(iv8=I{Ad z*8cuU0%NINQS5>!*89+I(&AoQz*mb=Us5;SOJRCrbJ2_10Xqj;QoqmS3FTIfdcy(^ z+_#^bs~NPCyB4F0g!3PlwFXFYS)|CSJ~mzn4MZmz86tkT3de^P02N=~6$m&Z#PZ^( zqS`pN`kb5&SgT3u?(pbkj?-KCA)@56Q)u$v8-71+;`bD^w*5E8+ap%F@QkRSY`E_J z9(!c~$*X*D7XKrt=U%MvcD^?E;F$r zKncERUBz2EE8w6Dqk%$ks2`KGwf0BEq@q{Ft8?SZt0;wg+krn7{(OT5c7bPeDP1i2 zcQ@45UmEQYSWb(7^7xxUb*Zv6YpL1jkEopXb1Op9WjLpZ!;a2{iP=ru2q999--30!8;bk7-0b0Ou1-ze?Y3*Vi$N@d zs(MvuSQW)Cc1^4CY&JyYI#7P~ld3!w?b52OC=h^(?qY z=i?($2fedEH<}n?gRnP z0V|w9N=~6HJl7I5ah+HCaA1|ati`N1KE>sF+18WxdBI-AMv-DFv@ z5v_(&Q0I(F^cLI&-)A!ZGmOorctc|yk{cQ|dAimniCnNy#huZ~TjzM#;=v!49aCjbpbQzd~;!GuD}avv;^vR!woc3 zRkwN;hC|*^Kq_%+RAlh1cd4tBK*%;E$*;$|;Yqexs*w0N_**2dY8D4{Q&YNW`ld`wKDz=Z(O z$>7RjP#P{9?W3nIUVQBTb|rCE+W+%P;)Iv~{guT3#cJig8&us4kPq$#0?~3$b)NPQ z4?u{|d&LrdCi*6HY~<2GPBggpeVSVMze+cLT;vAn#y5+#>aC+$$Dm!bklwc-s`jq} z>Kko`rCG(zEJh#yc$q<`Tn)|aHbf- zgQ~FtB-a}$xnQN(b7h%dz;VP5P`JagyrJKC0CKe`A7-_`8>+&`q%Vyry?Ad!sYg^+ zztz=M*B5+eQ)!V9>q%*Kk6Gg0J9S@l z%7^XLt?%P=Q~5zbW!v<}xr4RDL{VierK;-w)VX`^!hY3{E5CS7_bIueedx$A zX1J)))Y`hAX^mCsK^1VKhoTi`tze*$e~plkn?*{w29&PhXS11l;Jm7w*+SHh=Xek& zN&5;5uxHc#nd!Qy{67MZX?SnFdY$hui6>sE@|13QLYvr6f}>!8!BUjmoNR_*v+Yfd zOP8Dg#DFkWdU=L5B3Y<qlOZ1Q@_$ zSizUw;&|uKlW33j`dm2p28%)?1jOoXn`NNURO9TBYx;iwYXv@XsbZ+nS9?!#=egH_ zg$N7P>_$e;^y>-O!^AXw|r+yU#LJr^w@iGdc?8u{363GC_cB zK>RL`BkO5Q)&ADP5>yrsu+3M9-X6|CHBHfKR)70YOCjAT=*nU!56dTXd$q6%(&4KvlkGQ0R4pA7oLk7NI$V<&K?seh|k@=1e_1kcn|VQT+L=cPhIV_IiN8;tlJ(Li72WlEm&3{V z+yZ1gkrdOr$wuaYMX(CV_;m;Pv3v?yD5sLB63@kZIzYjYUt(Z=1*jDJf~kqgu0T8~ zr3`DX`?EV`B;98X%F92kYWY=X+21q!gakNfTRI4>F#XGeJRq?hEtK!}4!f%l+sN_-$-53wcV`@uIEzmUL)(X#`#$AONc z01Q&gdE^I`$PaRCDo+`d69es4IFJoD6hHM90y;5eMDCu7i-gqkh{F*|K&hAfn< z3*P;Ot)l_(%B?f@Yku&X9xA*HtUI#6(<7$iouD=zq&F{!?;m`nRrHNQ3UW%;#h0rE`ID)7U zMtBkcL6PsdFfsaAI6~cxZ>G{?ta%o`nvDSoJO%_>H6$d*AC9efCXXpIDCnnH5Aqcr zlu?{q9;+Zncm^n+GqfLAk^jVU;71V)g=U}?=SkYzss`dDrNzWH=c@T_Dw!B@=qR|$ z_!vxV!4GZY-=spg+=$Ei;6gkd9M2y6an56p^YP2(6Hrr_2l+?1cf_)f+MF&rDlP;R z%r-FD_uy_frCcTeU`+5|DTvo^v#RmLzD=8o62HnWbb+tMQ zGM4KEN>A(nnA=)MY7v$2xf#aa>_ib7WaxBt?G%ECS@{)^+3@vkUyfSZLQmJkDI(2|`V-!4+? zHLnK^Z2`Tlaq~qqdiwidHCfz^WV4?=4t3iRG7a}^Tn?K5QQcL3)GXLgAFB?~ZP^?D z!NLTP8}PTPQ1WY4s>|P;$G1gJ-G9{py#_iQWqStNDU4+p!X>ye<&nUH95tlhTF9in ztjxzoKeQkapc0s9pM8t;uKuvw`t02FyYaNg6#*jwfq^i&UM0DPPhWa~XFv7FM!702 zSJXEJy79!PoSN0Q?!=3}(2Y*E2N8i0mBk$(Y4`Zx&oZfqX`TxejQQ6b=O`o9i@_YP z?BI(X)tmUMPo(G!uJ7`;XYKxs1`wr z*_?Xma+!r2T*5R3@gkP_C(IiIcIKIWYi+tIVWh+8*Et2~F9HWdjFyAa`;?d~4IK(U z4W#m{IWfpsAm2f(n2^H5!CrMGOS_^g*z54v*%N6axw7u*I{hx{;^YV?vFP-b>h;o? z*jU2KNY6-0BJR}kpPAXWTA#sc4WC^947h%uXp5sF2nZ2q$R{5FQ9Ke&KZA}_K}jp76w?h4=P_M1Xj@_IpKDY4HZV zg#Kkoj`Y~{0=Gk=NH83-o+ew+NcKSKp{ob(LP~m(Y7ZoP$Ou zwQv9Rcxi7h;V{V`uttEHct z_=)Y3qxmM%Omk}s zv6cd&IlLQ_%iNwUdi~K7KrAQ|64*FACqwg?EAqTHNPGck=z>r+(k za{i2D;wV!1Dq{C7?<$l<~ar2bT_ob^{KXu|$zi6@(Fqy%plXOaBr zp&C1`M8^6_ry2rM*69J`UncBChPjc!auJFEGTR}{5(Gn4P?3Pr_D2eWUe+3qTk|7d zPa}4*Gu7XW85?(2fxdxntYkJn<~X!}-_Lo`w6_j#D?W{uB8>%cFP{R!BNP*nE({`t z(_>S>g~!0>Tv4by)sRL#8a~i~A&7;T6t_x9tnU&eHErUg8tYpwd3f)r(yDaB#_}+L zFL;rXIPm=o-{zo&(DdF9b7&`6!lJRD?>Y~TftzSt;XyAcd(T?4W;NjV8;0aKf9DJBr(3x*sIWV zt)vkaIB_22y~%TObF@&)64}LH!uUqt)zO(;<6!Mk&}9gbYRe*!Pf7-3)6>R)<6|rd z(^64HUW6tl2La(haq!C3qpwN&z{cf%K7}gQiAn*ZBd!d+Rr7>ppNQM|lez0c>k^gyM^x-c064VO;v3?1EM+}3t8bN6;BP7va z&CP@Xrb71%Eb!4iYBE0wy~i&m^uVJBtHf#5*EFl$Xwzw%lwn`$mnx0w+vyoT>$>1@ zG`FVf4XguC`XOr-qbUCm%vD98C(ye?m;qu7WYYlsN8u?jDOI<7xhW>zK19?^;*%GR zdK!!=A|}v3OGIAb)Mplo(v%{e9wRKCWb54}$ar;npSt|#cj^jd%q7u!QX2%jCEI}{ zBv1pqb5fI**kXgbnjB+19}U~JawriSOZ4K6dHI{H?#95R{dz zu!a+8jBAGwyY{DriXWrMF?PLMi@^lOW4?c$hf!b#(`G*Yx`?XZ?K$+jwdLIOnyrYX z)q{Wg&0gBC^W)rozaQ`vX~h)#h_siZP3h=A&0Hm(Hh;rjpu|g_a|&6Dm03@L$~V_<53f85+FP>QGy11;DdIFC7%SNN`N4+J`Vl2;gWAzfcij#e zfiRu`MT*vjOR(wCNh^C5W_Ca5m=P$C_0+rMLA{W=xohvv(z6u50-3)B0>Xv|cI8TQqRB@G`^*>02*=-iaMi!BXT}#KwNm`05wVh9;CTpPkUT;U#M2|lQn@Y z1U8jkvr=Q2K5x0zhKb3be}H3e<58%m&`u6^e|d{~EYG<9bb^ICEEmarnG<*7y~btV#{l*1gj0ZI4N?6X~G(SMi5&r(c_^HVW+q$lORAOevQ% zgkc;-)FObS-7KUxddHFQ*je=&?5Xzm{gNnJgL4X{Gph}})LYWGLEP?$Azp|8``nw4 za8z2{Y+X(^o7Dg-lEo<^x=IYg{e{kuA*&64vexSF--8lu=2j^#{Tgq{tbA}kN|;lK1CrSEscU8teNxa z_AM`ZgV}d-@>YKpE);=9*w^gUN4TMUucEgp4Y22S;~`F)WFYCzxJ_&!=u!MOr9})( zbpiw}I)u4TY{B|Pde6Z77<*|c>_PD`DX3L4OhyL9WL2;0g5kfZ0vj<8TdcIh`f$l@ zB%aH@uVW@@cl_Wl;d?Jsu+GC(p!nkA$fk{V@9xq$C>`;@FhQBa8uVF{JvJ>b7`$kL z31H-qs=R?E0Ec zgP=i@i;xlr@LRV46MV@OVw?T0fgKk<*X$wGxy?GbkzQRnbe4AhD*bbq%|D9{?E*H3 ziM~h&l@8V&?e$*aKkqqlp?KM-qA8_L{yl1JDU{15i+t-PuWYRZsp~C}23~*$ipw&! z!Li2S&nXTTd(v>n0SNSrQ} zVcFK1NGFYmSURg^FJdbT(XeLZN=QiX$8Zlfb@O_bt9zQ(sWlPI=E*x%B<-E`5m|Ks zHtt1QWh850Ql7$5T;<-Eab?OgAP30WCLxuyeWA5_=1OUr+)~2GNlXiv1;A+@`ZNT< zy2qC#CS1GHClCp2NJ&fVU-4W5G#7q5*jsscM<-S|`I-?jbRL?1!P_ zwo43$Qd`hYk?dJpW_B?bqK!{k4yF3IRKJ{cwOU>MJv~>|PT*P!DH!LEy^}sFyy~VO zp25E3VfU9b>qp|jsZs=Cefu!8{WX&UWn}ck@@4M(H!8& zIAN2$R=vfDsNo3DK9vj>PGr+6Ww$b9bx$;T<$J^qLFC)t;_6PLZhE>#%%J%E;+Ea7 zx}@J-@o}2qu5f%AFqG~rO?x$EU&Y`X%(Z3IYd(s}f_~Svo$)M)!q7OE5*$!K zUnxs2MC?8Ep$5(1&beNl?o2g@jq&Y8nryUb9)*k2XG-8nrP1svru44s3*K~#$*Ad@ z-E{Fj&$|4RB4X!A~DgkZyenN2|pW=HxpaEodEI!pH%VHV0WYz(o@r zfgQpO?{7!J}sBx~sEcjKWBUc`QE6(GxGgMym*4s|G}O^CIUFDt2(Ai6 zJbSk6I+%MriZz9*66!qB}?GWYdnA*NHkSYk@!y7|J7D+{8kPe~}Ipgs15K)3# z;j>Wm$@|Zi&uU3)I}t=}IWftlrbNGNXBbtkhA5Gj1jF8N-w>olPBSWdLsZ}LPTpv; zbCFcKbS+NB|1trp9BkzK;n;|>yLh8#{(3P~;FVc4`$_CW;HF8(7vHgt6SnEj(y<%R(4a|(yYK>LqdiM8qq<8jIwBdO@ z)6;UFeNNNa($=t{p4KkoPRY>u@~3JQ`koK|x#5vMV2X}|mXlateJgXt+NLlSlVmF!D@f0~*KFKNg3RFGlxCoByA z{`7Y<4{8=Sb^KSOkK)|kXZ+KJ{|_`+0)xhfa<~649h}wHFqozwGKD}`|GE)4cY29nhCcRSB!5Uj)Sf$ z);anmw^mDdu1H!yH21Ko#jHTO6%c1w^ox!Oiyy`{m`G@7H`eNSWsiNgk~|rAL8o)( zZjW<|y%TT0;O=KN9jvb2u(#3Pr4y$@b_-YZUr&2RFKrJxt?|z?T46%YS-HArx#j&^ zyR!$s-!@F7CgveTYq5IsjBMZy(p?ufK080#i_CncY_L)3ZQZ4!or$%x5OZ%dOLNN& zaf;;^zK{LJc)pl}Zh$^yq=CTbM11ac_tKj2s_lKF9Wy6{C^&muxBvjZleW$nzP_`i zHUxYWQ}B9=Fd^Fby`|yjmFFX_wazWaos_?(sa??0z`pC{*GX7eyA`}5vr(1CxY`XR z7Tg#9ygv+SItaI~3fKG$9cD0|)MvS>VWIEQm1!lak%Mbq;qJ(p{djmPD$iQ&(TNP~ z3V)XTULBuahmqUidYp2xGl-CN5$At3ZfUwm(C>Fq($>l)$)PV|iqcJCbkeOEw+Lg?=yyDsv=iT$F zhDn&^Zbwe+R}a0!YVxA$K6NM3yHhnWIp%@iKc}hv@5PB9!Hvl+*(Z%98Kg^x#@_;J zfADQ4;XNB_7nt#+O!ZNfG-KCS_c~VWqJ!3}{w~L==*EBcmF^@e$)QPVbJr|*k1{n?$k*F_@dTx!^ zn_Y>2ja8MHtQeO|JMiFo>U64}+G=J8BThUE5vT%$pXf}(62O47UsnGrhtW?cm6*&c zx4f%*C()Cywl!3$D~z>sLvM7WI)+WUS2A)!oU&&&%v9bIaC-aF{9i_Uug<=6;(FOF z`l5Oz=gjXPPx6#%dveNndKL;B|0%2&HCu4;(*wQlPbt!;4n3R+;GNFC9sYGOINj{G z1DK98vq2odHd5A&vKnL2>Rrd=%Hs}MSl&JJdV%E+!Mpimt0ijr(5>9i@IF+=^0sO8 z+fQk>(W&99B$wAJbM{TkN>zK_|KbJCqF!6~zor&*yChK`7vJtYsbLYnx#Ot27#m-L z&n_tB(b7zQCSlf9P?GF2P_T^iWU<^UC~4%pVfu*wkfDsFUWQ)gM_O;o`su;snvGWN zZ6%9nP@^pqD#JuL5+q6x_!arNQ&m2K>|d zdI|hUmjG@#8Tu^#2S60|jt>8H%9z8GZ^6;Y*323@Tl9?R?gbHq_?Q5vY7<%Y%c%M| z*p*PhwmTlWwm&HU5Fb7NMSMj5Y}qG1zJ(pw{-^2;uMJVxMc0Q>2T%scAigK&iS=EX z_`VU4krDbmCXwhV(w?iN>Vx7}*H4on@GehAR-FC8+a)Axu;KJ%WXIj8T(25-goT^U zY6fo;Y(D>gGVh-;c)Lol3vuySYR#RJS&<}sf@6Qz>BpWN@>;L8X8CJ*Pd+ia)qZJb zXMB5-WDaAQHaMO#xlAuT_oc0tkXwBty2EkEgRp+cfu*V=B$g=^lI3XKCgxdP2>zAi zv3p@+)P3b{mMX9o^;D=!a_30^c~R-IX|<}ld2!Y3&cmZW=rwiP9f!=DUZT|q4H9Qi z&1@u$Z?id3=VT5zHyXr~8NdA{ZN7N$^7f}zvtpT@l5rBa6zfoZ*)wHow=rAvjT3Vc zWu?{nVleF^IdR%ntP2Ehlpwo!-a@a8YT6DP?_YA}YjBPC)o;?~cehH$DW~Z*)1obQ zh4g8cR4F*Z0KAohnQRk0B+QIU9dL!K>Vj)!KAG(YFmJwH7Nfgs#F5>|H8W(dKUY$V zEv=L^=u^)cwn=$r;(Jtf2AyrB%w_x(S6y_M(4cejciV-`mQ(cV>c_dtUnCY1^V~k` ztv|czqTwDO_PP=YT0~S@(vUK!sGq-W=SVQmXgV&o-~P#ia7CvL^uv8rQd(gYNS3@7QChE#Lu}n=$S^@bq=FdNy~`fn zG15D&J)6{-af?+lScBj__wny3j|cDWUaG-Rd**M&$&7in)fX-vRiKw1X*b!}oP0d> zu}eXpQN}Pon7PC|if>0$q`75u1yx;NxINh-qC_QhVa3QWEVsnfsGgB0iPfJ!}(ZaEHTmi!!|>sKSajkqcL+U<&TZ@8%W#hx5I3# zoVfA`JpGx;%W8R9t%9@`rSV}xn_F(UOwR22A`9uuX{a1)5=J;uk<)?|+JeD2TT`D_ z{N+iT-O|a<4HKZ9%}DW^c(!@RvweSZiJmmxKBA(pUj3m(S&eG8;JhxE=bX&g^scSd zV5op!>9~f&bhJjt#oR03MgNlEyZ0{b*IZRnu9aIkkSRB>1oiXD7~s}$b)z-mk<#x7 zL-uCTb&tvlVj@-C2j zsy*kv-?H7$O?HuKn>m%jVh&O|lDYu_3Ce|W-9|B~jZoG5t=XN7xR(M)>wKhKJ zq{YM+L0lati*SR;3S7!&?wuL?jv}i{YRJ&GBjU1@yL!sP{*#rFZu8_&SL&h%$ZU|#(k@U4iNbaa$1TW@@84Z}lpU~tSe+AKKx*yftUVQEQc7(q*Rq(Y_5of$3u()2gj-4c{p zb6X0cB~E)XsXy0jWId@d-58;4P!jS^xWttZHG1SKc4>LjC9IKxXJFGF-Pyb&d(-d{ z15+`dAuo4a{IFZ3%>5{SkIh3ZHTx~HQ_gBsDuukM+5M*n>pCv=y6W(X00|%8KCC9{bC)>sv$N?$JPr$(EV4riX|z9g8b!bvX4b>p@_v zel5jC=lMj&`3ov9zrKCjV&vr&D`5%r7~av$@AsBUJKMI$1EY%^wtj_+Fm+fO$##1D zQrkT?w9&jgu%uuZ-gpsP^vl^`&&|7}e2KKq=7-kf5Oa0^*v8BUYms}?kKeh@9ctdH z5Sbw>^!Og#E~s;BZe%70?XYotGNsq%OULr`25sBBMKZ8jUiITbybXsK zv39k}iuqT9EH}vu!H!mbnp`b6au&X{{ZnB)G+T-nt7y3O!adr>2aV1yN?tzd2gwb3 zO5-2;Txi%SDCoz}7O_Zw$qS952%Lk6{Fv8$k0zzLI}XmX;*vE;8KrF@?FB2tOLhJ^ zewyq0%VXIVIpQYYYAYtNNftXMXA+lebhdr;lrtXcocQ=vP{MP!%f0pXMrNaD{_)Kc zg|hBl1{>{GCj&xDs=tQ}15hDjHOfAifVbi~k4mR;XGg?hU0LfWjxVKnGIqSQPx^qx zWULCLM2A?dwXt`j#~TX3f`Wo z+uEj5X`d+_9ZPU~%W}QMp-g*suEYB~ONZbkRNoq5h8>sM=PKgy0WGfq=>yxxhUr=M z*^s=im0ZPiA__Ue`-?k{W73QF#_}%+7r9nOF^JbqmW|co>35clrD@Cvor$ANmYL#b zDm;8zqt_eb*c(e)R@cuolvE|gbErz6^BfP}E70uUs>tojH0eQ<_8MtB??5BpBOD`l zuWN_*kU!qH9eg#Wp4fumnhX=YtOJRwv(?Okv)>2wOmkPH6I+-?JrFr)yuf5CKuojNFpzYmz!NzUG z$}Z-yJ;&hp%Q-t9qtQe1A@R8vE(BE>T=1w=v7JVSV4YTzr6j(#f@F*(XE)Y`zy)%K zh1?D>20Q~IGzNW}tpm~{#-H`)5~&8y$e68#Lwe=X)#8T_Yf1|j4%RxjTSrwB*7{}E zM;v#T4TOtbTca34%N|OuSvFT@c<(I}x_rN%3evr)3r;g7FWI2?t~14Gbl1ek@AV!b zg?sBeV?xo!8p=!eQJmieVptkpV`s>6O*(lk3cj-C=*j0TZbuf@c@GDkU@#wW74iHK z**ke2^s?KYwsW(nHctO)L^O>=$Nh!|g+7mWgexwA1?ip-#C=B`3+6Fdas8%S!={=~ zTn3M-L*CVaK-+22)zJ!ltYnreQHQ?}B=Y<&Iv%k(FI=6>lvk~{AmZJV%mlF+EGUB0 zOYg1~TrKA7S(8IeVe?G87J&5~G z-!+qIO={HJEias^(-)#A&MmRJ|D9!C{)w2TYt_Y5u~@x34`l!OtuU2fAc* z5^p)5xEs;iVq&6h-`5(?G#$3*cQr*q9%8M*9bRY?9Nv)Gu>zrLuFmt{BTPML~_Qi6U zF<|`;DD>%k3=e4KGhc+u$Uv5#4AO>^7+q^}j$=VAR+9vc#zSNNHN9>pxk`;|4;p5^ z^>}k$X~=QiYFEPh>n6Dlq%C@tLhq2VIq!=nXHbSleoL~wU+gr{T@Z^(d2u5bGdZ=6 zo7|)wXzX=V9=q$lc)y(yTn?YI6>ut(g9+V-t^C zw)IjXS_c#ZzV)^%DDxM~xVDR`t|5c!O)0`ogzAeS+ry;OSm$#0uehJYiKLIxEYgK`O--Fv_KDXdhK;qSX{CKaRQrq?4 zpLs4~7hH(a)FB!^94ctPw~dyWf{8i@WiS{!ykZxV)8r?n=7vku^aX;Muv)8X1ARN> zJcqJ~i2ee4-~aXhWM6>n8lD~=9!nx3HAF-O>4Rt?K)rG03anIBjVOI~T^i9?L)^d%_B6`okWpwIlh< z--C&W*xEwSVeDmYg6>Ogr!EpD)M_8W{n*oE%`RX*{*0W+QPUl;Cb;b-QX(|=FcOc+ zLa~fFR$QKvXhnXRczR;oCh_8f;utBjHxfimX7v=9wrT_En1*Zk&5aikIs*`&%vhNM z!xgyM!?i3_#PQDb7|}$|n9Z8U@^tieAUce#zF8AS&AhY_x{2T?{u(A#+L3u)0{9LOBu9!yd6nGS0}( z_P$QB9pgr2?|nMy%k(~%w!5}=oh?%VaV#;I&Gm+@=LZi?(Cyx%SS1CFN#Pr1X zewgHk$E?5anTg?ma^h`Yg`(`6&t(hvDB{@&#m);A|6Dnf_$V~o37;B=8lKvzMp4;w69lo2`b`13b8JUF_QM^8Lo#@7F?h8 z;Zz&qv||Wl&zW@V+zp>2xFxvf2Z<8@WU#H-a3)1Ygo3m`$UL7X-zsP zY&4BR#z6NYJs+Q!XRNf>@voG>f4nZl=9JpD;!-I0H;_T0^xuIDa$G{O?jJ0+sA(UJ z9>)w$pA~a+zr4C?w^SLh5|B_RFdoBMU91<^b7Q}QO$^Ek38GQEjAuSyLA|~af1tWq zM%9~7;-}{Zx7e1^W;MWo9{qg7_q*;up;-SKv#p-Ad)dSmj)b$3=MplBEoQg-0uOzP z@%PO!6K9%Dn&eNnW}v`WzH4jlS>b|{PEJ~i^d?7Hs+N@qJPE)_W&{m|g{3MkRNz52 zU)=YT{VvEVm@=90H88m}F&sd%ud!9t6LVEdM_}V(=gAF762t$IANHwTZ#B=2*~Z_>P`p@Bc*U;Lc|UKVFSlT9B4gApr&}td zd2gI7a{31o|NHyrQ7ZS3Dtl80B;=rl3cT(Q2{(#~7&KhrSc^QYzdzP@^jlxtN>0`D zBu-=4PsB*!9{QOMa*9q5o&Iqca}PmUb<>hmKX|}~v+h@Iq}Dg7?49@OH8};KYN7`> zlOLvbqr>{on_S5xm|tRhw>y-x{s1UI2_*LzZgbOWPWD-G!ZGk!!F-1pFZIrEYKY1I zc2@0+eiHGtW6=afX_8D*ZvLjIif+o&b-GsoeLhL|`K1+riYCpQ%0}eCN%2_7EbGl+>c-=?--Sd$8w}|Ur*<31V$~9Uq~vYh9N+X zZv`diQt4h#pASCMd&va&r9_3HX`LD%{(mL?kg5Lw5MtTwgX(X=ziHC|zk$e9DF5Yo zb8riR`>9%+?%6Xewp}?eEvU$@9AD(faEi$4jOJmT?;3}V^SMRHcw#B0o1xEu7&@tt z`QbDI1ABY~)4XDEVhdcLq}v;~Vt(tz|b{n`RK4Kl*2L>f}Sylw0%i z@A`STLZ77$Zf`4AQb39vv@fHO)(dsZyJleRWU3kWE=kA%a(Wm^vnZ-*&)}3Q44Ppu zAh}&zRSk(!+!pNOpM3+U9_z{Gm)&Y?ID3BsFP?lquwH22(^}1tDpehLZDs6VS^Cau zH=hIyIU{q>++P?|0CL(=(<A`%sMO zseSvU5PeYND*&^Q-zJ^q>BiIm+0i4g4GWaRfQeG8kBi-`*>d+>i_dx;l&A`AU zv2R{-1GjhO1Dx1Golb|a6OrO1>f*x_u(;gjGvcto8n&sBJQZXOgXY8o2z9-x%cS>2 zo3vu3Ka#HWs;MaVIo)PeJXn_ve5K7~u*m!mnO)7{H-O$euUdJRZSZA3SQfpYh&}sR z-vg%mxm?Z3*b9ziOoRg@+sv(YJb(FYe(r$%pGGjeNuMaJfrC>u`<2?EL3~2HgJ12w zVOOxMV4z4?LT3wxx>p`8guJk}%t7z`c<2CoZp$)z<1A#iNDR8~w+Y!wSM_h?fw-DJ zzox9!`2|~hD>%WIQ7<%DKSK8>^t>2X1Gf2)tbqwPpgCzlXdwX7d{0Yca_2vb zJmrH5FyUw+X1zT^SLc9qxaM_8k|-a3EW8}C>Pd;l9St5m`8 z7;YF(+s#lJ!~Y+?Nk0h;?*z$3Dk}JR>j)MF;WA`T1nHGSdH^E#P%H{gUeHnpHE_Uo zDAWJO(}}@CHlKy`I{RCo-5+et59I)8-P0>%gs`w(Ld^}!sI`PX&C@#NR_2tjS^{9U zxKicaUrh`%2{0Cso)xjf`9Lb2I7X`w^n_gEvotD}v${Eu(9aABkjYwYFH&mY5@Awc z>9b^-;i4|LFG+RJHE>xVFQLBJ@ZU50%8~rkZy7(cNQEH7_g7H}cVmABtE?7NC-J_F zsa|ik^Dk@4rm(qH4t6rkyx&6OQ?F?T^sA7#i%$4gewOQ01vbLi06SN;Z+suHGCoyW zL5ze>9o|;KW0BQt6K}6siGJfb4*=NCxl1f`gH*Sm&4AP%QWuj=VFe0@zMLXHxZFJK znkCoM5W0-PLm3HzpxTAkEa1K8pj4f63CwhpR70P*V8tzUQ)aBemwuc7%u8Q$uBW1O zpWua);o>Ci3;3ZU6@?t@dbgU#9cOk7e3+bN!70~*x(qRVyML`LN~O)#MX<~P;}0>*il1s4(;4!9gqM~iYsyE@#=|OE zT5dIVCEr@hirUwmk9?9XMZ!&R-*tsGP~Ii1=cFOp^mn$JV9oXP)=EAyc&Gag zYA(A3UBefLak;dO!;3eAkrz|%Rb8mqx%9cVnEy&ADEZ>RW6^6likQ^>I7kD%5 zN4gY6exvGPy1fCD#@N$jQ?0E?5DY3nthWU2%_(1NS`fTI<4S+8h}CX41_E*5w>qt# zYuxz^qbBT${|DEN_4}x&7sRyuVWDn8&r}}(t}!frQ$TFEF&`3x=%j>h7>AvZhsdSo z^RkzqWg0-o@no(W!nd6IbZL?Zt6NrM{m!8=-Ja+w6d#}s>t#p6y2&H&ZOw;=KdY_> z67z^=0IS0AXhs4%uq?P~O8v%#Ao#@N7KXN@N@5ERpeE(97W-^HIDxa~D>2$D9nqPv zKMfb`zUK_&UW3UG)oRarKSA!^&uudG_m<_E>OlYrQ`{=@(RSiN>B;c&O`UZ-20oef z>>`!9x>1>%o5zy-*4}NEH9BM`^RzV_h$6&CG7_Bim`CFNb3IBIod>*dI#5zt$m?>; z#(V>JX@_o<;spo||FLq?4zdKgIZPM=ne4New# zWRDX=>|+n7pca7T3jhZMqBCbCn1vm{40d&OW%!OvjAum-@U6Yp=$b4WnULR&RQ1&v zduHHG3CpD|XX+iPwB}OA~a8zJh6DCd}$R;g&q@i%3*y!+0lX~piwnlfo_OVOfc#mu!Si}zpqhNz^r6_Rdn0tEU06CjtHpZ*E@QUi^lJC zznBS!l?~TZMsruhO0wWDAK+ng5+VdcKo^xX7P^3pgjnPuLh#lkDhTnYrcH8xc6OH;O#@tX@o$MUMJQM>9V}K)A06*V#Op~6!pT0(4eq*%0 zb-1p2d7vUx+oDG?p}4ynqUAI_gvG+jA$2$P1&^h>NezeeWt6E@qz~{Vq|cshddO=9 zOj6S<#Me$KGNy8_d+-S~PPFJH-hUcUsokwYV%1*bU)d#RnhVCcZq*=O%3bFnk@|nK z7B&o9%w^v<=GM5^L);fF-`&7QoT@c_BysSoE;VApy0JlK%)1vH zKei>4r}v+C>vQPⅈ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 literal 58791 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 Hg#Z5o$UO2q diff --git a/examples/model_2_complex_formation_R.ipynb b/examples/model_2_complex_formation_R.ipynb index 400177a..4892932 100644 --- a/examples/model_2_complex_formation_R.ipynb +++ b/examples/model_2_complex_formation_R.ipynb @@ -158,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "9dd37926", "metadata": { "vscode": { @@ -194,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 3, "id": "cf9c4c03", "metadata": { "vscode": { @@ -236,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 68, "id": "d9f19514", "metadata": { "vscode": { @@ -255,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 69, "id": "4f929c59", "metadata": { "vscode": { @@ -342,7 +342,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 6, "id": "54b7b1a3", "metadata": { "vscode": { @@ -405,7 +405,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 7, "id": "2631d303", "metadata": { "vscode": { @@ -490,7 +490,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 8, "id": "a3bf2b5d", "metadata": { "vscode": { @@ -655,7 +655,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 9, "id": "f43813a7", "metadata": { "vscode": { @@ -713,15 +713,12 @@ "id": "f9454da1", "metadata": {}, "source": [ - "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003].\n", - "\n", - "The input function, in the example `func_POSm4` (positive feedback chain model from [Baum et al., 2016]) defines the time derivatives of the modelled variables as a vector: \n", - "$f_i(s)=dS_i/dt$. Note that only those input arguments to the function that encode the modelled variables (and hence in whose direction the partial derivatives are taken) are allowed to be called `x`." + "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003]." ] }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 37, "id": "dbd42fd2", "metadata": { "vscode": { @@ -778,7 +775,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 11, "id": "2f3d21ac", "metadata": { "vscode": { @@ -792,34 +789,34 @@ "\n", "\n", "\n", - "\t\n", - "\t\n", - "\t\n", + "\t\n", + "\t\n", + "\t\n", "\n", "
A matrix: 3 × 3 of type dbl
-1.233223-1.233223 2
-1.233223-1.233223 2
1.233223 1.233223-2
-5-10 2
-5-10 2
5 10-2
\n" ], "text/latex": [ "A matrix: 3 × 3 of type dbl\n", "\\begin{tabular}{lll}\n", - "\t -1.233223 & -1.233223 & 2\\\\\n", - "\t -1.233223 & -1.233223 & 2\\\\\n", - "\t 1.233223 & 1.233223 & -2\\\\\n", + "\t -5 & -10 & 2\\\\\n", + "\t -5 & -10 & 2\\\\\n", + "\t 5 & 10 & -2\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", "A matrix: 3 × 3 of type dbl\n", "\n", - "| -1.233223 | -1.233223 | 2 |\n", - "| -1.233223 | -1.233223 | 2 |\n", - "| 1.233223 | 1.233223 | -2 |\n", + "| -5 | -10 | 2 |\n", + "| -5 | -10 | 2 |\n", + "| 5 | 10 | -2 |\n", "\n" ], "text/plain": [ - " [,1] [,2] [,3]\n", - "[1,] -1.233223 -1.233223 2 \n", - "[2,] -1.233223 -1.233223 2 \n", - "[3,] 1.233223 1.233223 -2 " + " [,1] [,2] [,3]\n", + "[1,] -5 -10 2 \n", + "[2,] -5 -10 2 \n", + "[3,] 5 10 -2 " ] }, "metadata": {}, @@ -834,7 +831,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 12, "id": "67868589", "metadata": { "vscode": { @@ -897,7 +894,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 13, "id": "e8883776", "metadata": { "vscode": { @@ -940,7 +937,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 38, "id": "3beedbcf", "metadata": { "vscode": { @@ -961,7 +958,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "id": "26027184", "metadata": { "vscode": { @@ -1059,7 +1056,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 48, "id": "1c922b3c", "metadata": { "vscode": { @@ -1114,7 +1111,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 49, "id": "6539db9a", "metadata": { "vscode": { @@ -1131,7 +1128,7 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 41, "id": "55b33b49", "metadata": { "vscode": { @@ -1152,7 +1149,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 42, "id": "1ced98df", "metadata": { "vscode": { @@ -1185,7 +1182,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 43, "id": "55b3ff5e", "metadata": { "vscode": { @@ -1220,9 +1217,97 @@ "outputs": [ { "data": { - "image/png": "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", + "text/html": [ + "agg_record_1372292667: 2" + ], + "text/latex": [ + "\\textbf{agg\\textbackslash{}\\_record\\textbackslash{}\\_1372292667:} 2" + ], + "text/markdown": [ + "**agg_record_1372292667:** 2" + ], "text/plain": [ - "Plot with title \"Perturbation Analysis: S3 when S4 is perturbed\"" + "agg_record_1372292667 \n", + " 2 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "t_all <- c(tpre, tpost)\n", + "y_all <- rbind(sol_pertubation_1_pre, sol_pertubation_1_post) # avoid duplicating t=0 row\n", + "labels <- c(\"A\", \"B\", \"AB\")\n", + "\n", + "# Plot: 4 stacked panels (base graphics)\n", + "\n", + "# To save as PNG file, uncomment the following lines, and the dev.off() line at the end\n", + "\n", + "# png(\n", + "# filename = \"model_2_perturbation_A.png\",\n", + "# width = 8, height = 6, units = \"in\",\n", + "# res = 300 # DPI\n", + "# )\n", + "\n", + "op <- par(mfrow = c(3,1), mar = c(4,5,3,1))\n", + "for (j in 2:4) {\n", + " plot(t_all, y_all[,j], type = \"l\", lwd = 4, col = colors[j-1],\n", + " xlab = \"Time\", ylab = paste(\"Concentration of\", labels[j-1], sep=\"\"),\n", + " xlim = c(-0.05, 0.05), xaxt = \"n\", xaxs = \"i\",\n", + " main = paste(\"Perturbation Analysis: \", labels[j-1], \" when A is perturbed\", sep=\"\"))\n", + " axis(\n", + " 1,\n", + " at = seq(-0.05, 0.05, by = 0.01)\n", + " )\n", + " abline(v = 0, lty = 2, lwd = 2)\n", + " box(lwd = 2) # black outer box\n", + "}\n", + "\n", + "# dev.off()\n", + "par(op)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "dd297c4b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "s_star_pertubation_1 <- as.numeric(sol[(200-cap/dt),2:4])\n", + "tpre = seq(-cap, 0, by = dt)\n", + "sol_pertubation_1_pre <- deSolve::ode(y = s_star_pertubation_1, times = tpre, func = func_list, \n", + " parms=params)\n", + "\n", + "s_star_pertubation_1 <- as.numeric(sol[200,2:4])\n", + "# Change the 2nd position to 10.0\n", + "s_star_pertubation_1[2] <- 10.0\n", + "\n", + "tpost <- seq(0, cap, by = dt)\n", + "sol_pertubation_1_post <- deSolve::ode(y = s_star_pertubation_1, times = tpost, func = func_list, \n", + " parms=params)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "b4a463ad", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "Plot with title \"Perturbation Analysis: AB when A is perturbed\"" ] }, "metadata": { @@ -1235,25 +1320,26 @@ } ], "source": [ - "t_all <- c(tpre, tpost[-1])\n", - "y_all <- rbind(sol_pertubation_1_pre, sol_pertubation_1_post[-1, , drop = FALSE]) # avoid duplicating t=0 row\n", + "t_all <- c(tpre, tpost)\n", + "y_all <- rbind(sol_pertubation_1_pre, sol_pertubation_1_post) # avoid duplicating t=0 row\n", + "labels <- c(\"A\", \"B\", \"AB\")\n", "\n", "# Plot: 4 stacked panels (base graphics)\n", "\n", "# To save as PNG file, uncomment the following lines, and the dev.off() line at the end\n", "\n", "# png(\n", - "# filename = \"model_2_perturbation_A.png\",\n", - "# width = 8, height = 8, units = \"in\",\n", + "# filename = \"model_2_perturbation_B.png\",\n", + "# width = 8, height = 6, units = \"in\",\n", "# res = 300 # DPI\n", "# )\n", "\n", "op <- par(mfrow = c(3,1), mar = c(4,5,3,1))\n", - "for (j in 1:3) {\n", - " plot(t_all, y_all[,j], type = \"l\", lwd = 4, col = colors[j],\n", - " xlab = \"Time\", ylab = paste(\"Concentration of S\", j, sep=\"\"),\n", + "for (j in 2:4) {\n", + " plot(t_all, y_all[,j], type = \"l\", lwd = 4, col = colors[j-1],\n", + " xlab = \"Time\", ylab = paste(\"Concentration of\", labels[j-1], sep=\"\"),\n", " xlim = c(-0.05, 0.05), xaxt = \"n\", xaxs = \"i\",\n", - " main = paste(\"Perturbation Analysis: S\", j, \" when S4 is perturbed\", sep=\"\"))\n", + " main = paste(\"Perturbation Analysis: \", labels[j-1], \" when A is perturbed\", sep=\"\"))\n", " axis(\n", " 1,\n", " at = seq(-0.05, 0.05, by = 0.01)\n", @@ -1284,7 +1370,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "id": "5d29bc2a", "metadata": { "vscode": { @@ -1294,14 +1380,14 @@ "outputs": [], "source": [ "id_to_subject <- c(\n", - " \"S1\", \"S2\", \"S3\", \"S4\"\n", + " \"A\", \"B\", \"AB\"\n", ")\n", - "names(id_to_subject) <- 1:4" + "names(id_to_subject) <- 1:3" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "id": "796b8fb4", "metadata": { "vscode": { @@ -1315,7 +1401,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "id": "cab114e7", "metadata": { "vscode": { @@ -1332,7 +1418,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "id": "fe72c366", "metadata": { "vscode": { @@ -1344,57 +1430,65 @@ "data": { "text/html": [ "\n", - "\n", + "\n", "\n", "\t\n", "\t\n", "\n", "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", "\n", "
A data.frame: 6 × 4A data.frame: 8 × 4
looplengthsignloop_subject
<I<list>><dbl><dbl><list>
1, 11-1S1, S1
2, 21-1S2, S2
3, 31-1S3, S3
4, 41-1S4, S4
3, 4, 1,....4-1S3, S4, S1, S2, S3
3, 4, 2, 33 1S3, S4, S2, S3
1, 11-1A, A
2, 21-1B, B
3, 31-1AB, AB
1, 2, 12 1A, B, A
1, 3, 12 1A , AB, A
1, 3, 2, 13-1A , AB, B , A
2, 3, 1, 23-1B , AB, A , B
2, 3, 22 1B , AB, B
\n" ], "text/latex": [ - "A data.frame: 6 × 4\n", + "A data.frame: 8 × 4\n", "\\begin{tabular}{llll}\n", " loop & length & sign & loop\\_subject\\\\\n", " > & & & \\\\\n", "\\hline\n", - "\t 1, 1 & 1 & -1 & S1, S1\\\\\n", - "\t 2, 2 & 1 & -1 & S2, S2\\\\\n", - "\t 3, 3 & 1 & -1 & S3, S3\\\\\n", - "\t 4, 4 & 1 & -1 & S4, S4\\\\\n", - "\t 3, 4, 1,.... & 4 & -1 & S3, S4, S1, S2, S3\\\\\n", - "\t 3, 4, 2, 3 & 3 & 1 & S3, S4, S2, S3\\\\\n", + "\t 1, 1 & 1 & -1 & A, A\\\\\n", + "\t 2, 2 & 1 & -1 & B, B\\\\\n", + "\t 3, 3 & 1 & -1 & AB, AB\\\\\n", + "\t 1, 2, 1 & 2 & 1 & A, B, A\\\\\n", + "\t 1, 3, 1 & 2 & 1 & A , AB, A \\\\\n", + "\t 1, 3, 2, 1 & 3 & -1 & A , AB, B , A \\\\\n", + "\t 2, 3, 1, 2 & 3 & -1 & B , AB, A , B \\\\\n", + "\t 2, 3, 2 & 2 & 1 & B , AB, B \\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", - "A data.frame: 6 × 4\n", + "A data.frame: 8 × 4\n", "\n", "| loop <I<list>> | length <dbl> | sign <dbl> | loop_subject <list> |\n", "|---|---|---|---|\n", - "| 1, 1 | 1 | -1 | S1, S1 |\n", - "| 2, 2 | 1 | -1 | S2, S2 |\n", - "| 3, 3 | 1 | -1 | S3, S3 |\n", - "| 4, 4 | 1 | -1 | S4, S4 |\n", - "| 3, 4, 1,.... | 4 | -1 | S3, S4, S1, S2, S3 |\n", - "| 3, 4, 2, 3 | 3 | 1 | S3, S4, S2, S3 |\n", + "| 1, 1 | 1 | -1 | A, A |\n", + "| 2, 2 | 1 | -1 | B, B |\n", + "| 3, 3 | 1 | -1 | AB, AB |\n", + "| 1, 2, 1 | 2 | 1 | A, B, A |\n", + "| 1, 3, 1 | 2 | 1 | A , AB, A |\n", + "| 1, 3, 2, 1 | 3 | -1 | A , AB, B , A |\n", + "| 2, 3, 1, 2 | 3 | -1 | B , AB, A , B |\n", + "| 2, 3, 2 | 2 | 1 | B , AB, B |\n", "\n" ], "text/plain": [ - " loop length sign loop_subject \n", - "1 1, 1 1 -1 S1, S1 \n", - "2 2, 2 1 -1 S2, S2 \n", - "3 3, 3 1 -1 S3, S3 \n", - "4 4, 4 1 -1 S4, S4 \n", - "5 3, 4, 1,.... 4 -1 S3, S4, S1, S2, S3\n", - "6 3, 4, 2, 3 3 1 S3, S4, S2, S3 " + " loop length sign loop_subject \n", + "1 1, 1 1 -1 A, A \n", + "2 2, 2 1 -1 B, B \n", + "3 3, 3 1 -1 AB, AB \n", + "4 1, 2, 1 2 1 A, B, A \n", + "5 1, 3, 1 2 1 A , AB, A \n", + "6 1, 3, 2, 1 3 -1 A , AB, B , A \n", + "7 2, 3, 1, 2 3 -1 B , AB, A , B \n", + "8 2, 3, 2 2 1 B , AB, B " ] }, "metadata": {}, @@ -1415,7 +1509,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "id": "8703ce8b", "metadata": { "vscode": { @@ -1433,15 +1527,15 @@ "\t<chr><chr><dbl><chr>\n", "\n", "\n", - "\tS1S1-1inhibition (negative)\n", - "\tS1S4-1inhibition (negative)\n", - "\tS2S1 1activation (positive)\n", - "\tS2S2-1inhibition (negative)\n", - "\tS2S4 1activation (positive)\n", - "\tS3S2 1activation (positive)\n", - "\tS3S3-1inhibition (negative)\n", - "\tS4S3 1activation (positive)\n", - "\tS4S4-1inhibition (negative)\n", + "\tA A -1inhibition (negative)\n", + "\tA B -1inhibition (negative)\n", + "\tA AB 1activation (positive)\n", + "\tB A -1inhibition (negative)\n", + "\tB B -1inhibition (negative)\n", + "\tB AB 1activation (positive)\n", + "\tABA 1activation (positive)\n", + "\tABB 1activation (positive)\n", + "\tABAB-1inhibition (negative)\n", "\n", "\n" ], @@ -1451,15 +1545,15 @@ " from & to & regulation & regulation\\_words\\\\\n", " & & & \\\\\n", "\\hline\n", - "\t S1 & S1 & -1 & inhibition (negative)\\\\\n", - "\t S1 & S4 & -1 & inhibition (negative)\\\\\n", - "\t S2 & S1 & 1 & activation (positive)\\\\\n", - "\t S2 & S2 & -1 & inhibition (negative)\\\\\n", - "\t S2 & S4 & 1 & activation (positive)\\\\\n", - "\t S3 & S2 & 1 & activation (positive)\\\\\n", - "\t S3 & S3 & -1 & inhibition (negative)\\\\\n", - "\t S4 & S3 & 1 & activation (positive)\\\\\n", - "\t S4 & S4 & -1 & inhibition (negative)\\\\\n", + "\t A & A & -1 & inhibition (negative)\\\\\n", + "\t A & B & -1 & inhibition (negative)\\\\\n", + "\t A & AB & 1 & activation (positive)\\\\\n", + "\t B & A & -1 & inhibition (negative)\\\\\n", + "\t B & B & -1 & inhibition (negative)\\\\\n", + "\t B & AB & 1 & activation (positive)\\\\\n", + "\t AB & A & 1 & activation (positive)\\\\\n", + "\t AB & B & 1 & activation (positive)\\\\\n", + "\t AB & AB & -1 & inhibition (negative)\\\\\n", "\\end{tabular}\n" ], "text/markdown": [ @@ -1468,28 +1562,28 @@ "\n", "| from <chr> | to <chr> | regulation <dbl> | regulation_words <chr> |\n", "|---|---|---|---|\n", - "| S1 | S1 | -1 | inhibition (negative) |\n", - "| S1 | S4 | -1 | inhibition (negative) |\n", - "| S2 | S1 | 1 | activation (positive) |\n", - "| S2 | S2 | -1 | inhibition (negative) |\n", - "| S2 | S4 | 1 | activation (positive) |\n", - "| S3 | S2 | 1 | activation (positive) |\n", - "| S3 | S3 | -1 | inhibition (negative) |\n", - "| S4 | S3 | 1 | activation (positive) |\n", - "| S4 | S4 | -1 | inhibition (negative) |\n", + "| A | A | -1 | inhibition (negative) |\n", + "| A | B | -1 | inhibition (negative) |\n", + "| A | AB | 1 | activation (positive) |\n", + "| B | A | -1 | inhibition (negative) |\n", + "| B | B | -1 | inhibition (negative) |\n", + "| B | AB | 1 | activation (positive) |\n", + "| AB | A | 1 | activation (positive) |\n", + "| AB | B | 1 | activation (positive) |\n", + "| AB | AB | -1 | inhibition (negative) |\n", "\n" ], "text/plain": [ " from to regulation regulation_words \n", - "1 S1 S1 -1 inhibition (negative)\n", - "2 S1 S4 -1 inhibition (negative)\n", - "3 S2 S1 1 activation (positive)\n", - "4 S2 S2 -1 inhibition (negative)\n", - "5 S2 S4 1 activation (positive)\n", - "6 S3 S2 1 activation (positive)\n", - "7 S3 S3 -1 inhibition (negative)\n", - "8 S4 S3 1 activation (positive)\n", - "9 S4 S4 -1 inhibition (negative)" + "1 A A -1 inhibition (negative)\n", + "2 A B -1 inhibition (negative)\n", + "3 A AB 1 activation (positive)\n", + "4 B A -1 inhibition (negative)\n", + "5 B B -1 inhibition (negative)\n", + "6 B AB 1 activation (positive)\n", + "7 AB A 1 activation (positive)\n", + "8 AB B 1 activation (positive)\n", + "9 AB AB -1 inhibition (negative)" ] }, "metadata": {}, @@ -1498,7 +1592,7 @@ ], "source": [ "sign_J <- sign(j_matrix)\n", - "labs <- paste0(\"S\", 1:nrow(sign_J))\n", + "labs <- paste0(c(\"A\", \"B\", \"AB\"))\n", "rownames(sign_J) <- labs\n", "colnames(sign_J) <- labs\n", "\n", @@ -1530,7 +1624,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, "id": "d57b2e96", "metadata": { "vscode": { @@ -1542,57 +1636,65 @@ "data": { "text/html": [ "\n", - "\n", + "\n", "\n", "\t\n", "\t\n", "\n", "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", "\n", "
A data.frame: 6 × 4A data.frame: 8 × 4
looplengthsignloop_subject
<I<list>><dbl><dbl><list>
1, 11-1S1, S1
2, 21-1S2, S2
3, 31-1S3, S3
4, 41-1S4, S4
3, 4, 1,....4-1S3, S4, S1, S2, S3
3, 4, 2, 33 1S3, S4, S2, S3
1, 11-1A, A
2, 21-1B, B
3, 31-1AB, AB
1, 2, 12 1A, B, A
1, 3, 12 1A , AB, A
1, 3, 2, 13-1A , AB, B , A
2, 3, 1, 23-1B , AB, A , B
2, 3, 22 1B , AB, B
\n" ], "text/latex": [ - "A data.frame: 6 × 4\n", + "A data.frame: 8 × 4\n", "\\begin{tabular}{llll}\n", " loop & length & sign & loop\\_subject\\\\\n", " > & & & \\\\\n", "\\hline\n", - "\t 1, 1 & 1 & -1 & S1, S1\\\\\n", - "\t 2, 2 & 1 & -1 & S2, S2\\\\\n", - "\t 3, 3 & 1 & -1 & S3, S3\\\\\n", - "\t 4, 4 & 1 & -1 & S4, S4\\\\\n", - "\t 3, 4, 1,.... & 4 & -1 & S3, S4, S1, S2, S3\\\\\n", - "\t 3, 4, 2, 3 & 3 & 1 & S3, S4, S2, S3\\\\\n", + "\t 1, 1 & 1 & -1 & A, A\\\\\n", + "\t 2, 2 & 1 & -1 & B, B\\\\\n", + "\t 3, 3 & 1 & -1 & AB, AB\\\\\n", + "\t 1, 2, 1 & 2 & 1 & A, B, A\\\\\n", + "\t 1, 3, 1 & 2 & 1 & A , AB, A \\\\\n", + "\t 1, 3, 2, 1 & 3 & -1 & A , AB, B , A \\\\\n", + "\t 2, 3, 1, 2 & 3 & -1 & B , AB, A , B \\\\\n", + "\t 2, 3, 2 & 2 & 1 & B , AB, B \\\\\n", "\\end{tabular}\n" ], "text/markdown": [ "\n", - "A data.frame: 6 × 4\n", + "A data.frame: 8 × 4\n", "\n", "| loop <I<list>> | length <dbl> | sign <dbl> | loop_subject <list> |\n", "|---|---|---|---|\n", - "| 1, 1 | 1 | -1 | S1, S1 |\n", - "| 2, 2 | 1 | -1 | S2, S2 |\n", - "| 3, 3 | 1 | -1 | S3, S3 |\n", - "| 4, 4 | 1 | -1 | S4, S4 |\n", - "| 3, 4, 1,.... | 4 | -1 | S3, S4, S1, S2, S3 |\n", - "| 3, 4, 2, 3 | 3 | 1 | S3, S4, S2, S3 |\n", + "| 1, 1 | 1 | -1 | A, A |\n", + "| 2, 2 | 1 | -1 | B, B |\n", + "| 3, 3 | 1 | -1 | AB, AB |\n", + "| 1, 2, 1 | 2 | 1 | A, B, A |\n", + "| 1, 3, 1 | 2 | 1 | A , AB, A |\n", + "| 1, 3, 2, 1 | 3 | -1 | A , AB, B , A |\n", + "| 2, 3, 1, 2 | 3 | -1 | B , AB, A , B |\n", + "| 2, 3, 2 | 2 | 1 | B , AB, B |\n", "\n" ], "text/plain": [ - " loop length sign loop_subject \n", - "1 1, 1 1 -1 S1, S1 \n", - "2 2, 2 1 -1 S2, S2 \n", - "3 3, 3 1 -1 S3, S3 \n", - "4 4, 4 1 -1 S4, S4 \n", - "5 3, 4, 1,.... 4 -1 S3, S4, S1, S2, S3\n", - "6 3, 4, 2, 3 3 1 S3, S4, S2, S3 " + " loop length sign loop_subject \n", + "1 1, 1 1 -1 A, A \n", + "2 2, 2 1 -1 B, B \n", + "3 3, 3 1 -1 AB, AB \n", + "4 1, 2, 1 2 1 A, B, A \n", + "5 1, 3, 1 2 1 A , AB, A \n", + "6 1, 3, 2, 1 3 -1 A , AB, B , A \n", + "7 2, 3, 1, 2 3 -1 B , AB, A , B \n", + "8 2, 3, 2 2 1 B , AB, B " ] }, "metadata": {}, @@ -1602,6 +1704,110 @@ "source": [ "df" ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "ec36d7d7", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 7
lengthnum_loopsnum_loops_positivenum_loops_negativeloopsloops_positiveloops_negative
<dbl><int><int><int><I<named list>><I<named list>><I<named list>>
11303c(\"A\", \".... c(\"A\", \"....
22330c(\"A\", \"....c(\"A\", \"....
33202c(\"A\", \".... c(\"A\", \"....
\n" + ], + "text/latex": [ + "A data.frame: 3 × 7\n", + "\\begin{tabular}{r|lllllll}\n", + " & length & num\\_loops & num\\_loops\\_positive & num\\_loops\\_negative & loops & loops\\_positive & loops\\_negative\\\\\n", + " & & & & & > & > & >\\\\\n", + "\\hline\n", + "\t1 & 1 & 3 & 0 & 3 & c(\"A\", \".... & & c(\"A\", \"....\\\\\n", + "\t2 & 2 & 3 & 3 & 0 & c(\"A\", \".... & c(\"A\", \".... & \\\\\n", + "\t3 & 3 & 2 & 0 & 2 & c(\"A\", \".... & & c(\"A\", \"....\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 7\n", + "\n", + "| | length <dbl> | num_loops <int> | num_loops_positive <int> | num_loops_negative <int> | loops <I<named list>> | loops_positive <I<named list>> | loops_negative <I<named list>> |\n", + "|---|---|---|---|---|---|---|---|\n", + "| 1 | 1 | 3 | 0 | 3 | c(\"A\", \".... | | c(\"A\", \".... |\n", + "| 2 | 2 | 3 | 3 | 0 | c(\"A\", \".... | c(\"A\", \".... | |\n", + "| 3 | 3 | 2 | 0 | 2 | c(\"A\", \".... | | c(\"A\", \".... |\n", + "\n" + ], + "text/plain": [ + " length num_loops num_loops_positive num_loops_negative loops \n", + "1 1 3 0 3 c(\"A\", \"....\n", + "2 2 3 3 0 c(\"A\", \"....\n", + "3 3 2 0 2 c(\"A\", \"....\n", + " loops_positive loops_negative\n", + "1 c(\"A\", \".... \n", + "2 c(\"A\", \".... \n", + "3 c(\"A\", \".... " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "split_by_len <- split(df, df$length)\n", + "\n", + "loop_summary_extended <- data.frame(\n", + " length = as.numeric(names(split_by_len)),\n", + " num_loops = vapply(split_by_len, nrow, integer(1)),\n", + " loops = I(lapply(split_by_len, function(x) x$loop_subject)),\n", + " stringsAsFactors = FALSE\n", + ")\n", + "\n", + "loop_summary_extended$num_loops_positive <- vapply(\n", + " split_by_len,\n", + " function(x) sum(x$sign > 0),\n", + " integer(1)\n", + ")\n", + "\n", + "loop_summary_extended$num_loops_negative <- vapply(\n", + " split_by_len,\n", + " function(x) sum(x$sign < 0),\n", + " integer(1)\n", + ")\n", + "\n", + "loop_summary_extended$loops_positive <- I(lapply(\n", + " split_by_len,\n", + " function(x) x$loop_subject[x$sign > 0]\n", + "))\n", + "\n", + "loop_summary_extended$loops_negative <- I(lapply(\n", + " split_by_len,\n", + " function(x) x$loop_subject[x$sign < 0]\n", + "))\n", + "\n", + "loop_summary_extended <- loop_summary_extended[\n", + " order(loop_summary_extended$length),\n", + " c(\"length\",\"num_loops\",\"num_loops_positive\",\"num_loops_negative\",\n", + " \"loops\",\"loops_positive\",\"loops_negative\")\n", + "]\n", + "\n", + "loop_summary_extended\n" + ] } ], "metadata": { diff --git a/examples/model_2_perturbation_A.png b/examples/model_2_perturbation_A.png index 01906a0df5067c242c4bcafa22a7af42ffaeb528..7923386af100998971d7ad171db2ade47cb91ccc 100644 GIT binary patch literal 42925 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

Eoq4|%foD_A9LcO|SplmOWF0J0Fm>Hf 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

9<>p_ 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 From 9f1f24bd9210c244608a263f35be3d7ab9da38d7 Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Thu, 5 Feb 2026 01:48:48 +0100 Subject: [PATCH 08/12] Update reproduced results in R (Model 1,2,3,5,6). Fix some minor bugs in Python. Add literatures. --- examples/model_1_POSm4_R.ipynb | 4 +- .../model_3_complex_formation_extend_R.ipynb | 1797 ++++-- examples/model_5_MAPK_reduced_R.ipynb | 5735 +++++++++++++++++ examples/model_6_calcium_oscillations_R.ipynb | 3491 ++++++++++ 4 files changed, 10585 insertions(+), 442 deletions(-) create mode 100644 examples/model_5_MAPK_reduced_R.ipynb create mode 100644 examples/model_6_calcium_oscillations_R.ipynb diff --git a/examples/model_1_POSm4_R.ipynb b/examples/model_1_POSm4_R.ipynb index be2833e..2a3862c 100644 --- a/examples/model_1_POSm4_R.ipynb +++ b/examples/model_1_POSm4_R.ipynb @@ -816,7 +816,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "id": "4b596080", "metadata": { "vscode": { @@ -869,7 +869,7 @@ " scale_y_log10(\n", " breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n", " labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n", - " ) + # ← log10 transformation\n", + " ) + # log10 transformation\n", " labs(\n", " title = \"Dynamics of the 4-Variable Positive Feedback Chain\",\n", " x = \"Time\",\n", diff --git a/examples/model_3_complex_formation_extend_R.ipynb b/examples/model_3_complex_formation_extend_R.ipynb index bc14c67..e5f61fe 100644 --- a/examples/model_3_complex_formation_extend_R.ipynb +++ b/examples/model_3_complex_formation_extend_R.ipynb @@ -2,16 +2,25 @@ "cells": [ { "cell_type": "markdown", - "id": "53d51c8d", + "id": "5c5107a0", "metadata": {}, "source": [ - "## 0. Libraries" + "## **0. Initialization**" + ] + }, + { + "cell_type": "markdown", + "id": "0aa853b2", + "metadata": {}, + "source": [ + "### **Installation**\n", + "LoopDetectR is on CRAN and can be installed within R by" ] }, { "cell_type": "code", - "execution_count": 25, - "id": "b54689cf", + "execution_count": null, + "id": "ad430870", "metadata": { "vscode": { "languageId": "r" @@ -19,32 +28,138 @@ }, "outputs": [], "source": [ - "suppressPackageStartupMessages({\n", - " library(deSolve) # ODE solver\n", - " library(numDeriv) # numerical Jacobian (jacobian)\n", - " library(dplyr)\n", - " library(tidyr)\n", - " library(purrr)\n", - " library(LoopDetectR)\n", - "})" + "# Before running the R code cells in jupyter notebook,\n", + "# initialize the R kernel by this line of code:\n", + "# IRkernel::installspec()" ] }, { - "cell_type": "markdown", - "id": "bf752a71", + "cell_type": "code", + "execution_count": null, + "id": "f2d7c70f", "metadata": { "vscode": { "languageId": "r" } }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'LoopDetectR' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], "source": [ - "## 1. Configuration" + "# Download and install\n", + "install.packages(\"LoopDetectR\")" ] }, { "cell_type": "code", - "execution_count": 24, - "id": "2185219a", + "execution_count": null, + "id": "1c741284", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'deSolve' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'numDeriv' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "install.packages(\"deSolve\") # if not already installed\n", + "install.packages(\"numDeriv\") # if not already installed" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "1d32152b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "── \u001b[1mAttaching core tidyverse packages\u001b[22m ──────────────────────── tidyverse 2.0.0 ──\n", + "\u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 1.1.4 \u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 2.1.6\n", + "\u001b[32m✔\u001b[39m \u001b[34mforcats \u001b[39m 1.0.1 \u001b[32m✔\u001b[39m \u001b[34mstringr \u001b[39m 1.6.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mggplot2 \u001b[39m 4.0.1 \u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 3.3.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mlubridate\u001b[39m 1.9.4 \u001b[32m✔\u001b[39m \u001b[34mtidyr \u001b[39m 1.3.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mpurrr \u001b[39m 1.2.0 \n", + "── \u001b[1mConflicts\u001b[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\u001b[36mℹ\u001b[39m Use the conflicted package (\u001b[3m\u001b[34m\u001b[39m\u001b[23m) to force all conflicts to become errors\n" + ] + } + ], + "source": [ + "# Load package\n", + "library(\"LoopDetectR\")\n", + "library(deSolve)\n", + "library(tidyverse)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3eb6dbbb", "metadata": { "vscode": { "languageId": "r" @@ -52,15 +167,15 @@ }, "outputs": [], "source": [ - "colors <- c(\"#EE7733\", \"#0077BB\", \"#33BBEE\", \"#EE3377\", \"#CC3311\", \"#009988\", \"#BBBBBB\")" + "colors <- c('#EE7733', '#0077BB', '#33BBEE', '#EE3377', '#CC3311', '#009988', '#BBBBBB')" ] }, { "cell_type": "markdown", - "id": "a184ae0d", + "id": "de63ff1e", "metadata": {}, "source": [ - "## 2. Main reproduction" + "## **1. Model definition**" ] }, { @@ -107,20 +222,6 @@ "\n" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "f17d4fdf", - "metadata": { - "vscode": { - "languageId": "r" - } - }, - "outputs": [], - "source": [ - "#### " - ] - }, { "cell_type": "code", "execution_count": 3, @@ -132,7 +233,7 @@ }, "outputs": [], "source": [ - "model_complex_formation_act_deact_cycle <- function(t, y, params) {\n", + "func_varusai15 <- function(t, y, params) {\n", " A <- y[1]\n", " B <- y[2]\n", " AB <- y[3]\n", @@ -146,51 +247,34 @@ " kn2 <- params[6]\n", " kn3 <- params[7]\n", "\n", + " dx <- rep(0,4)\n", + "\n", " dAdt <- -k1 * A * B + k2 * AB\n", " dBdt <- -k1 * A * B + k2 * AB + k3 * A * (B_star / (B_star + kn1)) - k4 * kn3 * (B / (B + kn2))\n", " dABdt <- k1 * A * B - k2 * AB\n", " dB_stardt <- -k3 * A * (B_star / (B_star + kn1)) + k4 * kn3 * (B / (B + kn2))\n", "\n", - " list(c(dAdt, dBdt, dABdt, dB_stardt))\n", - "}\n", - "\n", - "solve_complex_formation_act_deact_cycle <- function(initial_conditions, time_points, params) {\n", - " y0 <- c(A = initial_conditions[1],\n", - " B = initial_conditions[2],\n", - " AB = initial_conditions[3],\n", - " B_star = initial_conditions[4])\n", - "\n", - " out <- deSolve::ode(\n", - " y = y0,\n", - " times = time_points,\n", - " func = model_complex_formation_act_deact_cycle,\n", - " parms = params,\n", - " method = \"lsoda\"\n", - " )\n", - " out <- as.data.frame(out)\n", - " out\n", + " # list(c(dAdt, dBdt, dABdt, dB_stardt))\n", + " dx[1] <- dAdt\n", + " dx[2] <- dBdt\n", + " dx[3] <- dABdt\n", + " dx[4] <- dB_stardt\n", + " return(dx)\n", "}" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "1e74389f", - "metadata": { - "vscode": { - "languageId": "r" - } - }, - "outputs": [], + "cell_type": "markdown", + "id": "44e7e155", + "metadata": {}, "source": [ - "res_tab <- find_loops_vset(func_POSm4,vset=list(s_star),t=1,klin=klin,\n", - " knonlin=knonlin,max_num_loops=10)" + "## **2. Result reproduction**" ] }, { "cell_type": "code", - "execution_count": null, - "id": "4ff19c48", + "execution_count": 4, + "id": "4e5b9062", "metadata": { "vscode": { "languageId": "r" @@ -215,28 +299,29 @@ ] }, { - "cell_type": "code", - "execution_count": 5, - "id": "1857ac28", + "cell_type": "markdown", + "id": "b927c538", + "metadata": {}, + "source": [ + "### **2.1. Initialization**" + ] + }, + { + "cell_type": "markdown", + "id": "b9c9522a", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [], "source": [ - "time_points_act_deact <- seq(0, 5000, length.out = 1001)\n", - "sol_act_deact <- solve_complex_formation_act_deact_cycle(\n", - " initial_conditions = initial_conditions_act_deact,\n", - " time_points = time_points_act_deact,\n", - " params = params_act_deact_unstimulated\n", - ")" + "#### **2.1.1. Loop structure**" ] }, { "cell_type": "code", - "execution_count": 6, - "id": "e20ac2df", + "execution_count": 113, + "id": "6c2540e5", "metadata": { "vscode": { "languageId": "r" @@ -245,72 +330,245 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAAOVBMVEUAAAAil+ZNTU1h0E9oaGh8fHyMjIyampqnp6eysrK9vb3Hx8fQ0NDZ2dnfU2vh4eHp6enw8PD///+VWJnmAAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3di5aquBaF4XQ2ICIewPd/2CNXAyIiLHKh/m+M7tJdJSsgUyBEUA8AuynXDQDOgCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiDgsCDdL5FSOrkJT/ay4rdKyc2VMm2Z9lUrtdzoXvqcdvrhd6tnbMMS6OcuTsv1Lzq8VevXoIXJNvPVzlXZv4O/TOaHFh8VpKR/e/RdcKp3vdTe/rc+Belav25dkD6/06tnbNMSMGYwX/+qo1u1fg36FqQ2ibcwgxQb704hN9l1i8KnIEWr5/9mvOvvjRj9/GjTEjDn8JdPvWNbtX4N+hak2Jjej5NxHqTnp4nOquf2NHs2JZGb7u+LwkJZoZc+3+m0f9e3TmRTQ7sXVXm9J/X7645p1Q9r0LcgqenD9ZNxHaTiuRS6/e0iuraP8ku9j9PtO9QNzJ9rzqX7rKnS55sY5/0TrXS3vz76w9F2oYyaA4pbvQcQ1X89s9VYrFm797tdl+bDuLrWn1vve+XG8uwe1j+ySEXPF2Vaxff3lr+9dNqYbgZ6Zb0WR/0evblIJjM2afPOJTBqYtTt3I3m4zV9i62arkGviOtmIuYK0092fukn7TzlzaO5+o/yolWUzU7GdZCen6zZ5J/6LXX74aKaT99hq13q9klqPrm//eHoLYmaT+9hB+A+84Yt1mzp4fNKvyq/bRZmg9ROvUxfjR21vP/rrk3vjYnGdZ7TudZHVF24jEUynbFRm3cvgVHW2zSM5sOYvsVWTdegS3/8ljfFRytMN9n3pd/8Kmvn6dI8mqt/797zuckox0GKXx+sneHIsW398Kz9GOtX4GZh9U/02x+O3hJVH088l01cNYs9eX/Dlmu20uHzKm0W9nNjVMVvHwNqLkhdK40Ko5Y/jD/71Bhz0/d8cfWohhcbi2Q6Y6M2714C5tw9y0eT+TCnb7FV0zXo3q/2SbOKj1aYbrLvS78NUtL8i1ZJNl9fvxrwNhnlOEhv9fN6jp7ryfU17zpv1tz6D59zqItmBY7696BqV+rJH5qHrfUbNewKjd6o7udyzU4xfF7d2/2tx7A6zc/PqyHPBtRvTVQ8smE2jJaP/36mMc0MmEuo3j51OyLjRTKZsVGbdy+B97kbzcdo+vZa9bYGdVMs+3XkrR2fln6R1S16BjErZuvf2vK5npuMd0G69B/yabu4u2VYqf7TunnWHE4l9Sdz8yfJ2x+ab8mop3buDVuu2Yu6DUH/SXwZTfd9fl4NuY9+PKYtH//9h8a8GLvyxtN2kUxmbNTm/Uvgbe4+z4e9Vr2tQd1Ob7vLN9eOT60uym6fuSxm6/cfXfncZLwLkuqa15wWe0wX7XQRGhvXyZtlPO0/z8tbGqsPU12o2bvWHz23ell353zmsjQbpLcf45a//f20MaMN0rBPp9tfjBs5abrZ5u1LoGvr+9xN5+M1fQutel/iowXULp65dnxa+sXzNdEz5fpRzNYfpjU3GddBejt58mrQD0GaWcpvC/0Wffzj5Zq9st6l6vfI034ZTo7wfg3S+xrxqTG9zHhx9vb7SdNHbd68BIZXvf6s3Z6M58OcvoVWdd5PvzVbjnzYiL2149PSL5qOivp1xWz94encZKZv04JDgvTWa6eMT4H3Dc2ouXrpzZou9PokZnTJJotoeLZQc/B864thf6S6tT06k267dUHSc0v99RezjekN650aH3/MLgWzzduXwEw82vV0NB+j6VtoVee93zfvcppP//TL0i/qxkT11nJmi6TfgjS/+q1wSJDurw/1e3/gM90vbqs3P+PJMZKxa/UlSP2Jj7k3bLnm4NacYDDetXx6ML42SMn0uMf4i0+NeS0ww32ySOY+P/oJCiyB19O26mg+RtO316q3NahZxfNuv22uHZ+WftGNsiv7ICXzx0i3ucm4DtLrvHR92JHM9tQYDR11wtzawVW3drMwE6Tq/Z+NT77Xb5drDqpmMTefUdFwoDk5wb8uSOOWj//+U2M66auvKev7jyf9UuZsG20WWAL903vSzvhoPkbTt9iq6RrU73dfu2X01mv3aemX7eY+Go7JJvWzttfupucm4zxIldE533yyvEZOXR6Pt4U3/HVmPrnP/2Fq/HPcPO27Lie/Xa45qDdA7bKv9x7Kh3FWtLcuSOOWT176oTGvv+r7HqrXvIwWiTnbRpsFloAy5NP5eJ++nVa9rUHdhqVdTKN2fF36/bD6+fofziONVr8VjglS82nRitotdGy2fbrw7uaJ6lwZTyZ/2L9V/T/3u0S6me/pbxdrDup63eag72xYNbLh/ceo5dOXzjemdTNPRiZNc0aLZDpjRpsFlsBrRXqNHhhqj6dvsVVva1CzYem6tkft+Lr0czXe9o3rd21N5iYzXVcWHBSk+lBD1wec+ei5Ob7K/FmPb1LJMNYuGp5M/zCZHGIUzzdJX+pzBcnMbxdrDtRrc9AcH8XT4U1rgzRq+dtLZxvTis0d8+7U7GiRTGfMaPP+JdCvsHE6bBWN+RhP316r3tegm3otJrMdX5d+pSbnFEb1H+Wlec/nJuNDkABZ2W+D0y0jSAhDoT9/gdgDBAkhaPc+Bb8jKo0gIQRNjq6uW7GAICEE9be3pC+kI4ogAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIggCABAggSIIAgAQIIEiCAIAECCBIgwEKQFBCYDWu5fHAclAAkESRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBIQWpP91eM5zF88/CixI/5vMGM95bvP5Z4EFCfATQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIE2AxSdVEqzruJLE6FICEwFoNU6eY26kk7EYKEM7EYpFRlzzRlOm4mQpBwJhaDpNsXljoqCRJOxmKQ+uxUcUyQcDIWgxSpqn8UEySci8UgZerSPSpVTJBwKja7v9MhPbkiSDgVqydki6R/VF4IEs6EkQ2AAIIECLAapPs1aQc3pPejSgBO2BwiFKmX+JASgCNWhwjpW9E8KnOt0iNKAI5YHSJUDI8LpY8oATjiYIjQ+xOxEoAjbJEAAXaPkfKyecQxEs7GZvd3bPTaRdXSXxIkBMbueaS0OY+kkyvnkXAujGwABBAkQID9IC13fIuUAGwjSIAAggQIIEiAALtBep1HOqwE4II/QVKm7SUAF9i1AwQQJEAAQQIEECRAAEOEAAEECRBgPUh5Uu/bJeWBJQDrbAcpbs8SKb2YJIKEwFgOUqbiqg7S684U4iUABywHSauq7bbjKkI4FctBanbrCBJOx3KQom6LVKjoqBKAA26OkXJd3+H8mBKAA7Z77RIuoo8zcnIeSSW3I0sA1jGyARBAkAABBAkQQJAAAQQJEGD1RmOrr29CkBAYi0HKCBJOy+auXaGXT8MKlADcsHqMVCzfp0+iBOCE3c6GzLiN7EElABfotQMEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBFgMkho7ogTgiMUgZQQJp2Vz167Q8dElADesHiMVKj26BOCE3c6GTBVHlwBcoNcOEECQAAEECRBgNUj3a9L0fCfp/agSgBMWg1RFxlmk5Y5wgoTAWAxSqvSt7bQrc73cEU6QEBiLQdJG33eh9BElAEesjrX79ESsBOAIWyRAgN1jpLxsHnGMhLOx2f0dG712UXVICcANu+eR0uY8kk6unEfCuTCyARBAkAAB9oO03PEtUgKwjSABAggSIIAgAQLsBmndNYQIEoLjT5BWX6sL8A+7doAAggQIIEiAAIIECGCIECCAIAECrAcpT+p9u6Q8sARgne0gxe1ZIqUXk0SQEBjLQcpUXNVBytTlqBKAA5aDpFXVdttxFSGciuUgNbt1BAmnYzlIUbdFKlR0VAnAATfHSLlW2VElAAds99olXEQfZ+TkPJJKbkeWAKxjZAMggCABAggSIIAgAQIIEiDA6o3GVl/fhCAhMBaDlBEknJbNXbtCL5+GFSgBuGH1GKlYvk+fRAnACbudDZlxG9mNJf794yc/3f38JKxeO6X+dTPET366+PlRWEFadS0vwD6CBAggSIAAggQIIEiAgMCC9K3vBHCDIAECCBIgILAgcYwEPxEkQABBAgQQJEAAQQIEBBYkeu3gJ4IECCBIgIDAgsQxEvxEkAABBAkQQJAAAQQJEBBYkOi1g58IEiCAIAECAgsSx0jwE0ECBBAkQABBAgQQJEBAYEGi1w5+IkiAAIIECAgsSBwjwU8ECRBgNUj3a6JqSXrfWIIgwU8Wg1RF6iXeVoIgwU8Wg5QqfWtval7mWqWbShAk+MlikLQqhseF0ptK0GsHP1kM0mhrsrxpIUgIDFskQIDdY6S8bB5xjISzsdn9HRu9dlG1qQRBgp/snkdKm/NIOrlyHgnnwsgGQABBAgQENkSIXjv4KbAhQgQJfgpsiBBBgp8COyHLMRL8FNgQIYIEP7FFAgQwRAgQwBAhQEBgQ4TotYOfAhvZQJDgJ4IECLAfpDWHORwjITAECRBAkAABBAkQYDdIr/NIG0sQJPjJnyAp06cJ0GsHPwW2a0eQ4CeCBAgILEgcI8FPBAkQENgQIYIEPxEkQMDeIF2jdWeGBnlS/2lSbmsVQYKfdgbpuvYUay9u/1TpxSTRa4fA7AySVtlPr81UXNVBytRlU6sIEvy0M0i/7mppVbWv4UZjOJWdQUrU4rUX3l+rHruCxDES/LQzSKWOv1x+YSzqtkiFija1iiDBT7t37X7rbOiOkfIvx1YECYGxHKRHsu8i+gQJfrJ+QrY+j6SS28YSBAl+CmxkA7128NPuIN3iFVuYfSUMBAl+2hukeNUxz64SJoIEP+0MUqZ0/vzxrRduT4nxLzhGgpd2BinqbtXy5bzQnhLjXxAkeElqiNCKNVyNbWoVQYKfxLZIizcOa2QECadl8xip0Gu7JMSDpFcEHdjOaq9dsXyfvhWt2thrlz9bmG96JbDK/vNIa0Yq9DLjNrLrSxg2Bumi0uUvQAH7/I2RDc8dO83RFQ4UWJC2HSPdnruUqRIefQEYdgSp/ZLej6O/t7dKrTI7uVjdH3fhwReAKZggrcvRbCuqpstO//hlXuAHf2HX7tZ0FrJvhwP9hSBFqv46vPAoJsAkNURIi57wFO21K4f9vuWrUgLbCQWpPL6zobElSK+LWF73tAlYsCNI+ego387o7y1BirotUcm+HQ6zZ4sUmTn66apcm1u1YcNXqKR7FK8cVwH8zPKVVjeUGP/i93rpMMouXzvUD/jV+XvtjG4Q2R4R4EUqSPdk7l+34vtICMzeIKXWhgi1vyBI8NLOIL1yJPp1H64ihMDsDJJWt0esyjJWdnrtCBL8JNBrd31ujQrZsdUECYERCFJeX6+BYyT8aTuDlDx37eoRA3eChD9tZ5Dyes1uLoAiekkEgoTA7O3+vtbPLkp4zABBQmDOP7IBsGDvMdIxo9fotUNgAhu0uilI7Rnj3+4aDfxk97W/D7miyBFBUnyJAsfZGaQqOeSDXvYYqX1RyvW4cJzdu3YBDFrtXkRHBY7zl4LEt5FwmHC6v7dfILLftRO9OydgCiZI63L0IUgNvmeO4/yB69r1QYrptcNh/sB17bpG5lr2O1OA4Q9c165Pu/B3pgDD+a9r93oR/d84TGBDhPYEqaL/G4cJpteu+8X2IFUx/XY4zN8IUktzpzEcZfcX+4YDJakWvZUY/WJ7kHRKjnCYnUF63TLF4+5v4HC7r2t3yLgbgoTABNZrR5Dgp92X47L7xT5OBcFPO4NU6vVf7FsxvPRrqwgS/GTx+0gZQcJp2fxiX6HXDnYjSAiM1ROyxdqxBQQJgbE7siFbeSUfeu0QmN1BypN6K5GUQu2ZK2EgSPDT3iDF7eGR0qJJEg+SHkZ+d9+W5Tt+ELUzSJmKqzpImd93o6i/g5j3U2jxvXNI2j1EqGpX7lVr+P2aNCtxkn7ZIEgH6aLSPulcLRJHEBgitDZIlfmN2uX1WDpIzx07Pf6aLN1/ELUzSFG3RSpWXLMhVfrW7lCVuV7uCBcO0u1ZLVU3cwp8WxaiZI6R8jWjwLVxXFIsr8iyF4h81Pdcv3cbQa4WiSPs7bVLVu2qta9bP2xc9gKR7cUadDu+tvs7vnUOUSLnkVRyW/G6nVukxqbu71sTm27frg8+vXaQZHFkw/MYKW/PNm0/RtoUpKi5MmR3GMfVInEEm0OEYmMXLFr8HpNoZ0M5FC1fU+BqkRC1N0hV2hx/rLuwyD1tDql0crV5Hul1XYmrMQX6vyFp9xf7urNIloYIbVn9I9XtUDb7dlwtEkfYGaRYXeptUZWqRKpF0xLjX/ze3mJoWlz3dnC1SBxB6uInv6zh3/9WMkhpP8rukdfh6XfzuFokJAmMtatVloK0odfOuHNT/bCLEVeLhKidQUrbLyTcf9pTWryv3sIAhQffR4KvRL6PtG5kw2sCVrdIgAW7zyPd6h7t+KeRa3aPkQAL7F6zoZsAQcLZuAjSjhIECX6yHqRVF0shSAjM3iD9en+kdRdLIUgIzM4g/Xp/pJUXS6HXDoHZfUL2t2+arrxYCkFCYKSGCK197bqLpRAkBGZnkH69P9LKi6VwjITA7P4axW/XLF15sRTZIHVjL+5fpg1st3vX7rfOhpUXSzkiSM3FVcvnBvFRyV6oHLAfpHUXS5EOUv3/5uKqsUqihG+ZQ9xfGNlgXly1uKjLna9QQFpgQdrUa2deXDXX2fBFP0DM/tHf8drr2m0u0f3bKrNT63bt6v6N6+Vxuco2NiD/dfpn/Ouv//qRi+8j/Vii+6c9QWr4eZEGm2vFf6N/NH7yryv/9bOdQcqUrneUVl37e2OJ8S929No5u7iqP+s2DrMzSFF3GeI1d6NYse342qodnQ3HXlx1fnvQPzb/jXX7lCxeRShzGyTpi6uuyYxkPXhNbIu04nqLhV67Jh8SpP3ji8x8TDKzc8oIndVjpGLtAf8hQdpxcdW54xnAYLfXLlt5D+QjziP9enHVma0P8InMVYRsnEdqbAxS66eLq7L1wS/+xsiGJkYrL646HPtsqIQ/K7AgHfZ9JLPn7aASOLNdQSovTRdDFUnf2dh2kNiNw057glTq9o4pufTtkSwGqe9NEJ4s/po9QYramyM119D/PrBhU4m3XwgHic0QZOwIUq5ew6gTJdpvd3SQ2JGDsB1BuhgXPillh98cexUhjoggbkeQRlsH2X2uQ4NEiCBvR5B0eEEiQTjIrl2713e2c39vxmxgU4Sj7AhS8er0LnVYnQ2AsD3d36nS13oQanHVx3/VvPvFtiCxKcLBdo1seN2LYvHeEntKTH+xJUj00eFw+8balWlzDaGr9KVLJYNEimBBYINWN/TaESNYcP4gARacOkhsjGBLYEH67RiJIMGWUwcJsOWkQWJbBLvOGSR6vGHZGYPEmSNYF1iQ1vTakSPYd8ogSTYFWOOEQQLsCyxIdH/DT+cKEnt1cIQgAQLOFSTAEYIECAgsSEu9duzWwZ3TBImzsHAprCD9+/exODmCS2EF6fMxEhskOHWSIJEjuHWOIJEjOHaWIB3WFGCNcwQJcCysIC302gEu2QxSdVEq7u5gsbxpIUgIjMUgVbq5THh7/xfBIHGABPcsBilV2TNNmW5uXLEtSHMvo8cOHrAYpO4Of6WOStkgbWwPIMdikPoQVHEsGSTAAxaDFA13QY9igoRzsRikbLgdWaligoRTsdn9nQ4xyBXd3zgVqydki+HW5+VFJkj0NMAPYY9soOsbnggrSNNjJHIET1gN0v2atIMb0vvGEgQJfrI5RChSL/G2EuMgsWcHX1gdIqRvRfOozLVKN5WYBmljUwBhVocIFcPjQulNJQgS/ORgiND7k9Ulxr125AjeCGuLxAlZeMruMVJeNo82HyMRJHjKZvd3bPTaRdXSXzLWDoGxex4pbc4j6eQqdB4J8ES4IxvoaoBHCBIgwEWQvu+frQgSOYJPwgoSvXbwlD9BUqYPr/zvP4IEL/kTpDUlCBI8RZAAAWEF6fVS+hrglVC7vwkSvGI9SHlShyEpt5Xog0SO4BfbQYrbPjmlF5NEkBAYy0HKVFzVYXhdLPKnEsN5JIIEv1gOklZVu1XZ9sW+odeOIMEvloPU7NYRJJyO5SBF3RapUNGWEgQJnnJzjJTr+qZjv5fog0SO4BnbvXbJruvaMbIBnnJyHkklt20lCBI8FdbIBoIETxEkQECQQaKvAb4JK0jdyAaCBN+EFaTuPC5Bgm8sBkmpNd8mXy7Bde3gJ4tByggSTsvmrl2hl0/DrihBkOAnq8dIxfKl87+XoPsbnrLb2ZAZd3bZUqINEn0N8E5YvXYECZ4KK0jteSSCBO+EFaS2s4EgwTsECRBAkAABBAkQEFaQ6LWDpwIMEjmCfwIMEuAfggQIIEiAAIIECAgvSPQ1wEMECRBAkAABYQVpuD8S4BeCBAggSICAsILExU/gKYIECAgrSPTawVMECRBAkAABYQWp7rUjSPAQQQIEECRAQFhBqru/CRI8RJAAAWEF6b//FDmCj8IKEpsjeIogAQLCCtI/ggQ/ESRAAEECBIQVpOcxEkmCjwgSIIAgAQICCxLfkIWfCBIgIKwgcRUheIogAQIcBCnTKsq2lSBI8JTNIBWJ0tnjqmrxthL02sFPFoNUNAlK1aV6lIla3CYRJATGYpAuKn08UqXrx5WKNpUgSPCTxSC1XdcqMZ78XILv9cFP1oN0a/fp2g3TzyUIEvxkddfueXTUqprdvN9L/GP4N/xkMUiVHvbn1PIGiSAhNFbPI6V9fPTi9oggIThhjWyg1w6eCi5IxxcHfmc1SPdr0pyUTdL7xhIECX6y2dkQqZfNQ4Q2FgcOZTFIqdK3onlU5npb9zdBgqcsBkmrYnhcbDshS6cdPGV9ZMPck9Ul/tFrBz8Ft0UiSPCR3WOkvGwe7TlGIkjwkc3u79jotYuqpb/k4icIjN3zSGlzHkkn163nkQgS/BTYyAaCBD8RJECAiyB9TwNXEUJgAgsSvXbwkz9BUqYPryRI8JQ/QVpVgiDBT4EFiYufwE8ECRAQWvc3QYKXrAcpT+oNUlJuK0GQ4CfbQYrbPjmlF5PEVYQQGMtBylRc1UHK1GVLCXIET1kOklZV29ew+Yt9O4oDh7EcpGa3bnuQuGYDPGU5SFG3RSo239ZlR3HgMG6OkXK9+UZjO4oDh7Hda5dwXTuckZPzSCq5bSxBkOCnsEY20GsHTxEkQEBgQeIbsvBTWEHimg3wFEECBFi99veab5MvlyBI8JPFIGUECadlc9eu0MunYVeUIEjwk9VjpGL50vnfS9BrB0/Z7WzIjDu7bClBkOCpsHrtCBI8FVaQOEaCpwgSIIAgAQIIEiCAIAECwgoSvXbwFEECBBAkQEBYQeIYCZ4iSIAAggQIIEiAAIIECAgrSPTawVMECRBAkAABYQWJYyR4iiABAggSIIAgAQIIEiAgrCDRawdPESRAAEECBIQVJI6R4CmCBAggSIAAggQIIEiAgLCCRK8dPEWQAAEECRAQVpA4RoKnCBIggCABAggSIIAgAQLCChK9dvAUQQIEOAnS1x00goTAhBWk5ysBh35fZTes5d9et7JJSyWcLDygJ5mKrUG663VN2lECcMTmrl2VqLhsprB51w7wk91jpJtStwdBwvlY7mwoY5VUe3rtdtQGjmO91+6qdE6QcDb2u7+L6EtPw0IJggRPuTiPdOEYCWcT1hAhwFNWg3S/Js0ppCS9H1UCcMJikKrIOB0bH1ICcMRikFKlb0XzqMy1So8oAThiMUhaFcPjQuktJei1g6esDlr99GR1CYIET7FFAgTYPUbKmzGrHCPhdGx2f8dGr11UHVICcMPueaS0OY+kkyvnkXAujGwABBAkQICLIH2/yiO9dggMQQIE+BOkNVdGIUjwlD9BEi0B2EWQAAEECRBA9zcgwHqQ8qTeICXlgSUA62wHKW775JReTBJBQmAsBylTcVUHKVOXo0oADlgOklbddVa5iD5OxXKQmt06goTTsRykqNsiFSo6qgTggJtjpFyr7KgSgAO2e+0SrmuHM3JyHkkltyNLANYxsgEQQJAAAQQJEECQAAEECRBg9drfa75NvqsE4IjFIGUECadlc9eu0MunYQVKAG5YPUYqli+dL1ECcMJuZ0Nm3NllsQQQmN/T4HJz4XpTRX3q+zmxgGpTn/oEifrU960+QaI+9X2bWEC1qU99gkR96vtWnyBRn/q+TSyg2tSnPkGiPvV9q0+QqE993yYWUG3qU58gUZ/6vtV3PTPAKRAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJECAsyClWum0slkx6+fVKD3/8JDq0Zeix9avLkpdupseOJn/p7tyV9+8OP4h9V0FKW7mK7JYsejvMWCUnn94hLSZvK5c1dfN5IvPRY9/QyrdvgEu6hdGkI6p7yhId6WLR6HV3VrFZzE1LT3/8K7HmEMAAAOCSURBVJDq6lLV28SLo/ppXTlVycNR/VrSvgGOln/SPzyovqMgpSp//v+mrrYKZiruN+yv0vMPj5C0tesmOKmvVdWVd1O/mXb7Bjipn70mfFB9R0FKVPkYfU4cTaWPLkhG6fmHR7ZCOa2v9MNZ/bL/JHNSP1NZ//Cg+o6CpJT5w4JiWrP+Mf/wOJWKXdZPm7XJUf1Yle3EndRPVH5ROj2w/l8J0ltNF0HK6v0HV/Wfu1ZHrkhfXNXt4TRIjfi4+gTJXpBKnTisnyW6OQJwUr/ZZ3IYJPXM8aNqNskESbam/SBVOnZa//G4HLgiLYvqjn+HQWpVdff2uYKk3QXJKD3/8Chx5LZ+vSJpN/UvTZ9YO3GH879QdHd9R0FqO0lKe712j2EhGaXnHx6jjOLSZf1GvQhc1FeD086/oyBdm4+ovD38taQLklF6/uEh8uZA11n99jxSWe/auKhvBsnp/CeH1XcUJPsjG4YgOTmzXg45cjiyoUrqYyRnIxu6N8DR/KdNZ0N+tpENj2jojrSm3/81Ss8/PMDl9YnspH431m6hqIU3pHsDXNSv2vlPj6vvKkhVM9jWask+SEbp+YeH1H4FyUX9ZnBzlC0UtfCGdG+Ak/rV0fPvKkjAqRAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQJEAAQQIEECRAAEECBBAkQABBAgQQpBAow45b2OM4vCkhIEje400JBgHyGW9OMAiSz3hzgtEHqf75/O+q9PXxSLt73j+ySOnMYev+OoIUjHGQrvXxUh7X/6+TlDTHT7HTBv5pBCkY4yDF1SPr/q8fj7x+VMUqd9vEP4wgBWMcpHvzqOyeJ6p6PqpU4rB9fxtBCsbkGOlh/v/VOQ43WPLBIEg+Y8kHYzlI7tqFGm9AMJaClNDN4BhBCsZSkG5KF49HRmeDMwQpGEtBejQnlJQunbXuryNIwVgMUj2yQV3IkTMECRBAkAABBAkQQJAAAQQJEECQAAEECRBAkAABBAkQQJAAAQQJEECQAAEECRBAkAABBAkQQJAAAQQJEECQAAEECRBAkAABBAkQQJAAAQQJEECQAAEECRBAkAABBAkQQJAAAQQJEECQAAEECRDwf+7KwXpizYlXAAAAAElFTkSuQmCC", + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 10 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11-1
2, 21-1
3, 31-1
4, 41-1
1, 2, 12 1
1, 3, 12 1
1, 3, 2, 13-1
2, 3, 1, 23-1
2, 3, 22 1
1, 4, 2, 13 1
\n" + ], + "text/latex": [ + "A data.frame: 10 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\t 1, 3, 1 & 2 & 1\\\\\n", + "\t 1, 3, 2, 1 & 3 & -1\\\\\n", + "\t 2, 3, 1, 2 & 3 & -1\\\\\n", + "\t 2, 3, 2 & 2 & 1\\\\\n", + "\t 1, 4, 2, 1 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 10 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "| 1, 3, 1 | 2 | 1 |\n", + "| 1, 3, 2, 1 | 3 | -1 |\n", + "| 2, 3, 1, 2 | 3 | -1 |\n", + "| 2, 3, 2 | 2 | 1 |\n", + "| 1, 4, 2, 1 | 3 | 1 |\n", + "\n" + ], "text/plain": [ - "Plot with title \"Concentration vs Time for Activation-Deactivation Cycle Model\"" + " loop length sign\n", + "1 1, 1 1 -1 \n", + "2 2, 2 1 -1 \n", + "3 3, 3 1 -1 \n", + "4 4, 4 1 -1 \n", + "5 1, 2, 1 2 1 \n", + "6 1, 3, 1 2 1 \n", + "7 1, 3, 2, 1 3 -1 \n", + "8 2, 3, 1, 2 3 -1 \n", + "9 2, 3, 2 2 1 \n", + "10 1, 4, 2, 1 3 1 " ] }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# compute loops\n", + "res_tab <- find_loops_vset(func_varusai15,vset=list(initial_conditions_act_deact),t=1,params=params_act_deact_unstimulated,max_num_loops=10)\n", + "# The loop list is reported\n", + "res_tab$loop_rep[[1]] \n", + "# To access a specific loop representation: e.g., the sixth loop, add [6,]" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "id": "3d056cc3", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 3
len_1len_2len_3
<dbl><dbl><dbl>
all433
pos031
neg402
\n" + ], + "text/latex": [ + "A data.frame: 3 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & len\\_1 & len\\_2 & len\\_3\\\\\n", + " & & & \\\\\n", + "\\hline\n", + "\tall & 4 & 3 & 3\\\\\n", + "\tpos & 0 & 3 & 1\\\\\n", + "\tneg & 4 & 0 & 2\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 3\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> | len_3 <dbl> |\n", + "|---|---|---|---|\n", + "| all | 4 | 3 | 3 |\n", + "| pos | 0 | 3 | 1 |\n", + "| neg | 4 | 0 | 2 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2 len_3\n", + "all 4 3 3 \n", + "pos 0 3 1 \n", + "neg 4 0 2 " + ] }, + "metadata": {}, "output_type": "display_data" } ], "source": [ - "matplot(\n", - " sol_act_deact$time,\n", - " sol_act_deact[, c(\"A\", \"B\", \"AB\", \"B_star\")],\n", - " type = \"l\", lwd = 2, log = \"y\",\n", - " xlab = \"Time\", ylab = \"Concentration\",\n", - " main = \"Concentration vs Time for Activation-Deactivation Cycle Model\"\n", - ")\n", - "legend(\"left\", legend = c(\"A\", \"B\", \"AB\", \"B*\"), lty = 1, lwd = 2, bty = \"n\")" + "loop_summary(res_tab$loop_rep[[1]])" ] }, { "cell_type": "code", - "execution_count": 7, - "id": "c824b68e", + "execution_count": 33, + "id": "e9a5ecf2", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 6 × 3
looplengthsign
<I<list>><dbl><dbl>
2 2, 21-1
5 1, 2, 12 1
71, 3, 2, 13-1
82, 3, 1, 23-1
9 2, 3, 22 1
101, 4, 2, 13 1
\n" + ], + "text/latex": [ + "A data.frame: 6 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t2 & 2, 2 & 1 & -1\\\\\n", + "\t5 & 1, 2, 1 & 2 & 1\\\\\n", + "\t7 & 1, 3, 2, 1 & 3 & -1\\\\\n", + "\t8 & 2, 3, 1, 2 & 3 & -1\\\\\n", + "\t9 & 2, 3, 2 & 2 & 1\\\\\n", + "\t10 & 1, 4, 2, 1 & 3 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 6 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 2 | 2, 2 | 1 | -1 |\n", + "| 5 | 1, 2, 1 | 2 | 1 |\n", + "| 7 | 1, 3, 2, 1 | 3 | -1 |\n", + "| 8 | 2, 3, 1, 2 | 3 | -1 |\n", + "| 9 | 2, 3, 2 | 2 | 1 |\n", + "| 10 | 1, 4, 2, 1 | 3 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "2 2, 2 1 -1 \n", + "5 1, 2, 1 2 1 \n", + "7 1, 3, 2, 1 3 -1 \n", + "8 2, 3, 1, 2 3 -1 \n", + "9 2, 3, 2 2 1 \n", + "10 1, 4, 2, 1 3 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "time_1 <- seq(-1000, 0, length.out = 500)\n", - "time_2 <- seq(0, 2000, length.out = 1000)\n", - "\n", - "# Continue from stabilized final state\n", - "y_stable <- as.numeric(sol_act_deact[nrow(sol_act_deact), c(\"A\", \"B\", \"AB\", \"B_star\")])\n", - "\n", - "sol_unstimulated <- solve_complex_formation_act_deact_cycle(\n", - " initial_conditions = y_stable,\n", - " time_points = time_1,\n", - " params = params_act_deact_unstimulated\n", - ")\n", - "\n", - "y_at_0 <- as.numeric(sol_unstimulated[nrow(sol_unstimulated), c(\"A\", \"B\", \"AB\", \"B_star\")])\n", - "\n", - "sol_stimulated <- solve_complex_formation_act_deact_cycle(\n", - " initial_conditions = y_at_0,\n", - " time_points = time_2,\n", - " params = params_act_deact_stimulated\n", - ")\n", + "# Index of node of interest\n", + "noi <- 2 \n", + "# Return all loops from loop_list containing node 2\n", + "loop_list <- res_tab$loop_rep[[1]]\n", + "loop_list[vapply(loop_list$loop,function(x){noi %in% x},logical(1)),]" + ] + }, + { + "cell_type": "markdown", + "id": "9f0fc026", + "metadata": {}, + "source": [ + "#### **2.1.2. Calculating the Jacobian matrix**\n", "\n", - "# Combine full trajectory\n", - "time_full <- c(time_1, time_2)\n", - "sol_full <- bind_rows(sol_unstimulated, sol_stimulated) %>%\n", - " select(time, A, B, AB, B_star)" + "Sign jacobian matrix can be access via `res_tab` variable that we have calculated above, or derived from a jacobian matrix at a specific state" ] }, { "cell_type": "code", - "execution_count": 8, - "id": "c5272ed2", + "execution_count": 20, + "id": "eefb6816", "metadata": { "vscode": { "languageId": "r" @@ -319,35 +577,175 @@ "outputs": [ { "data": { - "image/png": "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", + "text/html": [ + "

\n", + "\t
$loop_rep
\n", + "\t\t
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A data.frame: 10 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11-1
    2, 21-1
    3, 31-1
    4, 41-1
    1, 2, 12 1
    1, 3, 12 1
    1, 3, 2, 13-1
    2, 3, 1, 23-1
    2, 3, 22 1
    1, 4, 2, 13 1
    \n", + "
  2. \n", + "
\n", + "
\n", + "\t
$loop_rep_index
\n", + "\t\t
1
\n", + "\t
$jac_rep
\n", + "\t\t
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 4 × 4 of type dbl
    -1-1 1 0
    -1-1 1 1
    1 1-1 0
    -1 1 0-1
    \n", + "
  2. \n", + "
\n", + "
\n", + "\t
$jac_rep_index
\n", + "\t\t
1
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$loop\\_rep] \\begin{enumerate}\n", + "\\item A data.frame: 10 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\t 1, 3, 1 & 2 & 1\\\\\n", + "\t 1, 3, 2, 1 & 3 & -1\\\\\n", + "\t 2, 3, 1, 2 & 3 & -1\\\\\n", + "\t 2, 3, 2 & 2 & 1\\\\\n", + "\t 1, 4, 2, 1 & 3 & 1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n", + "\n", + "\\item[\\$loop\\_rep\\_index] 1\n", + "\\item[\\$jac\\_rep] \\begin{enumerate}\n", + "\\item A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -1 & -1 & 1 & 0\\\\\n", + "\t -1 & -1 & 1 & 1\\\\\n", + "\t 1 & 1 & -1 & 0\\\\\n", + "\t -1 & 1 & 0 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n", + "\n", + "\\item[\\$jac\\_rep\\_index] 1\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$loop_rep\n", + ": 1. \n", + "A data.frame: 10 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "| 1, 3, 1 | 2 | 1 |\n", + "| 1, 3, 2, 1 | 3 | -1 |\n", + "| 2, 3, 1, 2 | 3 | -1 |\n", + "| 2, 3, 2 | 2 | 1 |\n", + "| 1, 4, 2, 1 | 3 | 1 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "$loop_rep_index\n", + ": 1\n", + "$jac_rep\n", + ": 1. \n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -1 | -1 | 1 | 0 |\n", + "| -1 | -1 | 1 | 1 |\n", + "| 1 | 1 | -1 | 0 |\n", + "| -1 | 1 | 0 | -1 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "$jac_rep_index\n", + ": 1\n", + "\n", + "\n" + ], "text/plain": [ - "Plot with title \"Concentration vs Time (Unstimulated then Stimulated)\"" + "$loop_rep\n", + "$loop_rep[[1]]\n", + " loop length sign\n", + "1 1, 1 1 -1\n", + "2 2, 2 1 -1\n", + "3 3, 3 1 -1\n", + "4 4, 4 1 -1\n", + "5 1, 2, 1 2 1\n", + "6 1, 3, 1 2 1\n", + "7 1, 3, 2, 1 3 -1\n", + "8 2, 3, 1, 2 3 -1\n", + "9 2, 3, 2 2 1\n", + "10 1, 4, 2, 1 3 1\n", + "\n", + "\n", + "$loop_rep_index\n", + "[1] 1\n", + "\n", + "$jac_rep\n", + "$jac_rep[[1]]\n", + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 -1 1 0\n", + "[2,] -1 -1 1 1\n", + "[3,] 1 1 -1 0\n", + "[4,] -1 1 0 -1\n", + "\n", + "\n", + "$jac_rep_index\n", + "[1] 1\n" ] }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } - }, + "metadata": {}, "output_type": "display_data" } ], "source": [ - "matplot(\n", - " sol_full$time,\n", - " sol_full[, c(\"A\", \"B\", \"AB\", \"B_star\")],\n", - " type = \"l\", lwd = 2, log = \"y\",\n", - " xlab = \"Time\", ylab = \"Concentration\",\n", - " main = \"Concentration vs Time (Unstimulated then Stimulated)\"\n", - ")\n", - "legend(\"topleft\", legend = c(\"A\", \"B\", \"AB\", \"B*\"), lty = 1, lwd = 2, bty = \"n\")" + "res_tab" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "0ab26b0c", + "execution_count": 21, + "id": "05e68bc3", "metadata": { "vscode": { "languageId": "r" @@ -355,154 +753,185 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Unstimulated conditions:\n", - "Jacobian matrix:\n", - " [,1] [,2] [,3] [,4]\n", - "[1,] -6.3289739 -3.853766e-06 0.000227335 0.000000000\n", - "[2,] -5.5766599 -3.869107e-06 0.000227335 0.002138019\n", - "[3,] 6.3289739 3.853766e-06 -0.000227335 0.000000000\n", - "[4,] -0.7523141 1.534086e-08 0.000000000 -0.002138019\n", - "Signed Jacobian matrix:\n", - " [,1] [,2] [,3] [,4]\n", - "[1,] -1 -1 1 0\n", - "[2,] -1 -1 1 1\n", - "[3,] 1 1 -1 0\n", - "[4,] -1 1 0 -1\n" - ] + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-1-1 1 0
-1-1 1 1
1 1-1 0
-1 1 0-1
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -1 & -1 & 1 & 0\\\\\n", + "\t -1 & -1 & 1 & 1\\\\\n", + "\t 1 & 1 & -1 & 0\\\\\n", + "\t -1 & 1 & 0 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -1 | -1 | 1 | 0 |\n", + "| -1 | -1 | 1 | 1 |\n", + "| 1 | 1 | -1 | 0 |\n", + "| -1 | 1 | 0 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 -1 1 0 \n", + "[2,] -1 -1 1 1 \n", + "[3,] 1 1 -1 0 \n", + "[4,] -1 1 0 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "# Numerical Jacobian + signed Jacobian\n", - "vf <- function(y, params) {\n", - " # deSolve model returns list(c(...)); unwrap\n", - " model_complex_formation_act_deact_cycle(t = 0, y = y, params = params)[[1]]\n", - "}\n", - "\n", - "# Evaluate Jacobian at the stabilized endpoint (same as Python: sol_act_deact.y[:, -1])\n", - "y_eval_un <- as.numeric(sol_act_deact[nrow(sol_act_deact), c(\"A\", \"B\", \"AB\", \"B_star\")])\n", - "J_un <- numDeriv::jacobian(func = function(x) vf(x, params_act_deact_unstimulated), x = y_eval_un)\n", - "Jsign_un <- sign(J_un)\n", - "\n", - "# Evaluate Jacobian at end of sol_unstimulated (t=0-) for stimulated params (Python used sol_unstimulated.y[:, -1])\n", - "y_eval_st <- as.numeric(sol_unstimulated[nrow(sol_unstimulated), c(\"A\", \"B\", \"AB\", \"B_star\")])\n", - "J_st <- numDeriv::jacobian(func = function(x) vf(x, params_act_deact_stimulated), x = y_eval_st)\n", - "Jsign_st <- sign(J_st)\n", - "\n", - "cat(\"Unstimulated conditions:\\n\")\n", - "cat(\"Jacobian matrix:\\n\"); print(J_un)\n", - "cat(\"Signed Jacobian matrix:\\n\"); print(Jsign_un)" + "# The corresponding signed Jacobian matrix\n", + "res_tab$jac_rep[[1]]" + ] + }, + { + "cell_type": "markdown", + "id": "b4802333", + "metadata": {}, + "source": [ + "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003]." ] }, { "cell_type": "code", - "execution_count": 11, - "id": "b7ddb306", + "execution_count": 52, + "id": "adbc93e2", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
1
0.000179595763481961
2
294.947056130261
3
4.99992040423706
4
0.0631234655454742
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[1] 0.000179595763481961\n", + "\\item[2] 294.947056130261\n", + "\\item[3] 4.99992040423706\n", + "\\item[4] 0.0631234655454742\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "1\n", + ": 0.0001795957634819612\n", + ": 294.9470561302613\n", + ": 4.999920404237064\n", + ": 0.0631234655454742\n", + "\n" + ], + "text/plain": [ + " 1 2 3 4 \n", + "1.795958e-04 2.949471e+02 4.999920e+00 6.312347e-02 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "find_loops_signed <- function(Jsign, max_len = 4) {\n", - " n <- nrow(Jsign)\n", - " nodes <- 0:(n - 1)\n", - "\n", - " has_edge <- function(i, j) Jsign[i + 1, j + 1] != 0\n", - " edge_sign <- function(i, j) Jsign[i + 1, j + 1]\n", - "\n", - " loops <- list()\n", - "\n", - " # length 1: self loops\n", - " for (i in nodes) {\n", - " if (has_edge(i, i)) {\n", - " loops <- append(loops, list(list(loop = c(i, i), length = 1L, sign = as.integer(edge_sign(i, i)))))\n", - " }\n", - " }\n", - "\n", - " # length 2..max_len\n", - " if (max_len >= 2) {\n", - " # length 2: i -> j -> i, i!=j\n", - " for (i in nodes) for (j in nodes) if (i != j) {\n", - " if (has_edge(i, j) && has_edge(j, i)) {\n", - " s <- edge_sign(i, j) * edge_sign(j, i)\n", - " loops <- append(loops, list(list(loop = c(i, j, i), length = 2L, sign = as.integer(s))))\n", - " }\n", - " }\n", - " }\n", - "\n", - " if (max_len >= 3) {\n", - " # length 3: i -> j -> k -> i, all distinct\n", - " for (i in nodes) for (j in nodes) for (k in nodes) {\n", - " if (length(unique(c(i, j, k))) == 3) {\n", - " if (has_edge(i, j) && has_edge(j, k) && has_edge(k, i)) {\n", - " s <- edge_sign(i, j) * edge_sign(j, k) * edge_sign(k, i)\n", - " loops <- append(loops, list(list(loop = c(i, j, k, i), length = 3L, sign = as.integer(s))))\n", - " }\n", - " }\n", - " }\n", - " }\n", - "\n", - " if (max_len >= 4) {\n", - " # length 4: i -> j -> k -> l -> i, all distinct\n", - " for (i in nodes) for (j in nodes) for (k in nodes) for (l in nodes) {\n", - " if (length(unique(c(i, j, k, l))) == 4) {\n", - " if (has_edge(i, j) && has_edge(j, k) && has_edge(k, l) && has_edge(l, i)) {\n", - " s <- edge_sign(i, j) * edge_sign(j, k) * edge_sign(k, l) * edge_sign(l, i)\n", - " loops <- append(loops, list(list(loop = c(i, j, k, l, i), length = 4L, sign = as.integer(s))))\n", - " }\n", - " }\n", - " }\n", - " }\n", + "# The function func_POSm4 returns a vector, but deSolve needs the vector within\n", + "# a list as output. Therefore, we define a function that simply puts the output \n", + "# of func_POSm4 into a list:\n", + "func_list <- function(t,x,params){list(func_varusai15(t,x,params))}\n", + "sol <- deSolve::ode(y = initial_conditions_act_deact, times = seq(0,5000,0.1), func = func_list, \n", + " parms=params_act_deact_unstimulated)\n", "\n", - " # Deduplicate cycles up to rotation/reversal can be non-trivial.\n", - " # For n=4 and this example, we keep as-is and then distinct by exact sequence.\n", - " df <- tibble(\n", - " loop = map(loops, \"loop\"),\n", - " length = map_int(loops, \"length\"),\n", - " sign = map_int(loops, \"sign\")\n", - " ) %>%\n", - " distinct(loop, length, sign) %>%\n", - " arrange(length, loop)\n", - "\n", - " df\n", - "}" + "# Set the last point of the numeric solution as point of interest, omit the \n", + "# first column (it contains the time)\n", + "s_star_end <- sol[dim(sol)[1],2:dim(sol)[2]]\n", + "s_star_end" ] }, { "cell_type": "code", - "execution_count": 12, - "id": "010b9be1", + "execution_count": 25, + "id": "1d134ecb", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-6.4374000-1.072900e-01 0.000227335 0.00000
-6.3181048-1.072903e-01 0.000227335 59.63689
6.4374000 1.072900e-01-0.000227335 0.00000
-0.1192952 2.969035e-07 0.000000000-59.63689
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -6.4374000 & -1.072900e-01 & 0.000227335 & 0.00000\\\\\n", + "\t -6.3181048 & -1.072903e-01 & 0.000227335 & 59.63689\\\\\n", + "\t 6.4374000 & 1.072900e-01 & -0.000227335 & 0.00000\\\\\n", + "\t -0.1192952 & 2.969035e-07 & 0.000000000 & -59.63689\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -6.4374000 | -1.072900e-01 | 0.000227335 | 0.00000 |\n", + "| -6.3181048 | -1.072903e-01 | 0.000227335 | 59.63689 |\n", + "| 6.4374000 | 1.072900e-01 | -0.000227335 | 0.00000 |\n", + "| -0.1192952 | 2.969035e-07 | 0.000000000 | -59.63689 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] \n", + "[1,] -6.4374000 -1.072900e-01 0.000227335 0.00000\n", + "[2,] -6.3181048 -1.072903e-01 0.000227335 59.63689\n", + "[3,] 6.4374000 1.072900e-01 -0.000227335 0.00000\n", + "[4,] -0.1192952 2.969035e-07 0.000000000 -59.63689" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "loop_summary_table <- function(loop_df) {\n", - " loop_df %>%\n", - " mutate(length = as.integer(length),\n", - " pos = sign > 0,\n", - " neg = sign < 0) %>%\n", - " group_by(length) %>%\n", - " summarise(\n", - " total = n(),\n", - " pos = sum(pos),\n", - " neg = sum(neg),\n", - " .groups = \"drop\"\n", - " ) %>%\n", - " arrange(length)\n", - "}" + "j_matrix <- numDeriv::jacobian(func_varusai15, initial_conditions_act_deact,method=\"complex\",\n", + " t=1,params=params_act_deact_stimulated)\n", + "j_matrix" ] }, { "cell_type": "code", - "execution_count": 23, - "id": "1a5a32c8", + "execution_count": 26, + "id": "d9a4b8c8", "metadata": { "vscode": { "languageId": "r" @@ -510,68 +939,132 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Unstimulated conditions:\n" - ] - }, + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 4 × 4 of type dbl
-1-1 1 0
-1-1 1 1
1 1-1 0
-1 1 0-1
\n" + ], + "text/latex": [ + "A matrix: 4 × 4 of type dbl\n", + "\\begin{tabular}{llll}\n", + "\t -1 & -1 & 1 & 0\\\\\n", + "\t -1 & -1 & 1 & 1\\\\\n", + "\t 1 & 1 & -1 & 0\\\\\n", + "\t -1 & 1 & 0 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 4 × 4 of type dbl\n", + "\n", + "| -1 | -1 | 1 | 0 |\n", + "| -1 | -1 | 1 | 1 |\n", + "| 1 | 1 | -1 | 0 |\n", + "| -1 | 1 | 0 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 -1 1 0 \n", + "[2,] -1 -1 1 1 \n", + "[3,] 1 1 -1 0 \n", + "[4,] -1 1 0 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "signed_jacobian <- sign(j_matrix)\n", + "signed_jacobian" + ] + }, + { + "cell_type": "markdown", + "id": "9fb5ce0e", + "metadata": {}, + "source": [ + "#### **2.1.3. Temporal dynamics**" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "cf1a9580", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[90m# A tibble: 25 × 3\u001b[39m\n", - " loop length sign\n", - " \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m\n", - "\u001b[90m 1\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m\n", - "\u001b[90m 2\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m\n", - "\u001b[90m 3\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m\n", - "\u001b[90m 4\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m\n", - "\u001b[90m 5\u001b[39m \u001b[90m\u001b[39m 2 1\n", - "\u001b[90m 6\u001b[39m \u001b[90m\u001b[39m 2 1\n", - "\u001b[90m 7\u001b[39m \u001b[90m\u001b[39m 2 1\n", - "\u001b[90m 8\u001b[39m \u001b[90m\u001b[39m 2 1\n", - "\u001b[90m 9\u001b[39m \u001b[90m\u001b[39m 2 1\n", - "\u001b[90m10\u001b[39m \u001b[90m\u001b[39m 2 1\n", - "\u001b[90m# ℹ 15 more rows\u001b[39m\n", - "\n", - "Loop summary for unstimulated conditions:\n", - "\u001b[90m# A tibble: 4 × 4\u001b[39m\n", - " length total pos neg\n", - " \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m\n", - "\u001b[90m1\u001b[39m 1 4 0 4\n", - "\u001b[90m2\u001b[39m 2 8 8 0\n", - "\u001b[90m3\u001b[39m 3 9 3 6\n", - "\u001b[90m4\u001b[39m 4 4 0 4\n" - ] + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" } ], "source": [ - "cat(\"\\nUnstimulated conditions:\\n\")\n", - "res_tab_complex_loop_rep <- find_loops_signed(Jsign_un, max_len = 4)\n", - "print(res_tab_complex_loop_rep)\n", + "matplot(\n", + " sol[,1], sol[,2:5],\n", + " type = \"l\",\n", + " lty = 1,\n", + " log = \"y\",\n", + " xlab = \"Time\",\n", + " ylab = \"Concentration\",\n", + "\n", + ")\n", "\n", - "cat(\"\\nLoop summary for unstimulated conditions:\\n\")\n", - "print(loop_summary_table(res_tab_complex_loop_rep))" + "legend(\n", + " \"topright\",\n", + " legend = c(\"A\", \"B\", \"AB\", \"B*\"),\n", + " col = 1:4,\n", + " lty = 1\n", + ")" ] }, { - "cell_type": "markdown", - "id": "c5046567", + "cell_type": "code", + "execution_count": 46, + "id": "1f18ff68", "metadata": { "vscode": { "languageId": "r" } }, + "outputs": [], "source": [ - "#### **2.7. Search time where signed Jacobian structure changes**" + "sol_for_plot <- as.data.frame(sol)\n", + "\n", + "# rename columns for clarity\n", + "colnames(sol_for_plot) <- c(\"time\", \"A\", \"B\", \"AB\", \"B*\")\n", + "\n", + "# reshape to long format\n", + "sol_long <- sol_for_plot %>%\n", + " pivot_longer(cols = A:`B*`, names_to = \"species\", values_to = \"value\")" ] }, { "cell_type": "code", - "execution_count": 14, - "id": "602f9742", + "execution_count": 47, + "id": "273651c0", "metadata": { "vscode": { "languageId": "r" @@ -579,79 +1072,116 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "At time 234.23 after the stimulus, the signed Jacobian structure changes.\n", - "Jacobian matrix at this time:\n", - " [,1] [,2] [,3] [,4]\n", - "[1,] -6.31881288 -3.859960e-06 0.000227335 0.000000000\n", - "[2,] 0.02316377 -4.167731e-06 0.000227335 0.002105474\n", - "[3,] 6.31881288 3.859960e-06 -0.000227335 0.000000000\n", - "[4,] -6.34197665 3.077716e-07 0.000000000 -0.002105474\n", - "Signed Jacobian matrix at this time:\n", - " [,1] [,2] [,3] [,4]\n", - "[1,] -1 -1 1 0\n", - "[2,] 1 -1 1 1\n", - "[3,] 1 1 -1 0\n", - "[4,] -1 1 0 -1\n", - "Loop summary at this time:\n", - "\u001b[90m# A tibble: 4 × 4\u001b[39m\n", - " length total pos neg\n", - " \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m\n", - "\u001b[90m1\u001b[39m 1 4 0 4\n", - "\u001b[90m2\u001b[39m 2 8 6 2\n", - "\u001b[90m3\u001b[39m 3 9 6 3\n", - "\u001b[90m4\u001b[39m 4 4 0 4\n" - ] + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" } ], "source": [ - "Jsign_ref_un <- Jsign_un\n", - "Jsign_ref_st <- Jsign_st\n", - "\n", - "t_change <- NA_real_\n", - "J_change <- NULL\n", - "Jsign_change <- NULL\n", - "summary_change <- NULL\n", - "\n", - "# Use a modest stride to avoid heavy computation; set stride=1 for exact match (slower).\n", - "stride <- 1L\n", + "options(repr.plot.width = 8, repr.plot.height = 6)\n", + "colors <- c(\n", + " A = \"#EE7733\",\n", + " B = \"#0077BB\",\n", + " AB = \"#33BBEE\",\n", + " `B*` = \"#EE3377\"\n", + ")\n", "\n", - "for (idx in seq(1, nrow(sol_full), by = stride)) {\n", - " t_now <- sol_full$time[idx]\n", - " y_now <- as.numeric(sol_full[idx, c(\"A\", \"B\", \"AB\", \"B_star\")])\n", + "plot1 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " geom_line(linewidth = 3) +\n", + " ## vertical dashed line\n", + " # geom_vline(\n", + " # xintercept = perturbation_point,\n", + " # linetype = \"dashed\",\n", + " # colour = \"black\",\n", + " # linewidth = 0.7\n", + " # ) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = seq(0, 5000, 1000),\n", + " minor_breaks = seq(0, 5000, 500),\n", + " limits = c(0, 5000),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(0, 5000), clip = \"on\") +\n", + " scale_y_log10(\n", + " breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n", + " labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n", + " ) + # log10 transformation\n", + " labs(\n", + " title = \"Dynamics of the 4-Variable Complex Formation Model\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", "\n", - " params_now <- if (t_now < 0) params_act_deact_unstimulated else params_act_deact_stimulated\n", - " J_now <- numDeriv::jacobian(func = function(x) vf(x, params_now), x = y_now)\n", - " Jsign_now <- sign(J_now)\n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", "\n", - " Jsign_ref <- if (t_now < 0) Jsign_ref_un else Jsign_ref_st\n", + "plot1\n", + "# ggsave(\"POSm4_plot.png\", plot1, width = 10, height = 8, units = \"in\", dpi = 300)" + ] + }, + { + "cell_type": "markdown", + "id": "6f592bea", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **2.2. Stimulated Condition**\n", "\n", - " if (!isTRUE(all.equal(Jsign_now, Jsign_ref))) {\n", - " t_change <- t_now\n", - " J_change <- J_now\n", - " Jsign_change <- Jsign_now\n", - " summary_change <- loop_summary_table(find_loops_signed(Jsign_now, max_len = 4))\n", - " break\n", - " }\n", - "}\n", + "When introducing a stimulus at t=0 which increases kn3 from 1 to 20" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "743969e4", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Now, draw temporal dynamics for unstimulated conditions from t=[-1000, 0], and then stimulated conditions from t=[0, 2000]\n", + "time_1 <- seq(-1000, 0, 0.1)\n", + "time_2 <- seq(0, 2000, 0.1)\n", + "sol_unstimulated <- deSolve::ode(y = as.numeric(s_star_end), times = time_1, func = func_list, \n", + " parms=params_act_deact_unstimulated)\n", + "sol_stimulated <- deSolve::ode(y = sol_unstimulated[nrow(sol_unstimulated),2:5], times = time_2, func = function(t,x,params){list(func_varusai15(t,x,params_act_deact_stimulated))}, \n", + " parms=params_act_deact_stimulated)\n", "\n", - "if (!is.na(t_change)) {\n", - " cat(sprintf(\"\\nAt time %.2f after the stimulus, the signed Jacobian structure changes.\\n\", t_change))\n", - " cat(\"Jacobian matrix at this time:\\n\"); print(J_change)\n", - " cat(\"Signed Jacobian matrix at this time:\\n\"); print(Jsign_change)\n", - " cat(\"Loop summary at this time:\\n\"); print(summary_change)\n", - "} else {\n", - " cat(\"\\nNo signed Jacobian structure change detected on the scanned grid.\\n\")\n", - "}\n" + "time_full <- c(time_1, time_2)\n", + "sol_full <- rbind(sol_unstimulated, sol_stimulated) " ] }, { "cell_type": "code", - "execution_count": 15, - "id": "cae9464f", + "execution_count": 72, + "id": "dccf2428", "metadata": { "vscode": { "languageId": "r" @@ -660,43 +1190,80 @@ "outputs": [ { "data": { - "image/png": "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", + "text/html": [ + "
1
0.000179595764252493
2
294.947054865258
3
4.99992040423706
4
0.0631247304972202
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[1] 0.000179595764252493\n", + "\\item[2] 294.947054865258\n", + "\\item[3] 4.99992040423706\n", + "\\item[4] 0.0631247304972202\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "1\n", + ": 0.0001795957642524932\n", + ": 294.9470548652583\n", + ": 4.999920404237064\n", + ": 0.0631247304972202\n", + "\n" + ], "text/plain": [ - "Plot with title \"Concentration vs Time (before/after Jacobian sign change)\"" + " 1 2 3 4 \n", + "1.795958e-04 2.949471e+02 4.999920e+00 6.312473e-02 " ] }, - "metadata": { - "image/png": { - "height": 420, - "width": 420 - } + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sol_unstimulated[nrow(sol_unstimulated),2:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "25b4f1c6", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "10001" + ], + "text/latex": [ + "10001" + ], + "text/markdown": [ + "10001" + ], + "text/plain": [ + "[1] 10001" + ] }, + "metadata": {}, "output_type": "display_data" } ], "source": [ - "if (!is.na(t_change)) {\n", - " matplot(\n", - " sol_full$time,\n", - " sol_full[, c(\"A\", \"B\", \"AB\", \"B_star\")],\n", - " type = \"l\", lwd = 2, log = \"y\",\n", - " xlab = \"Time\", ylab = \"Concentration\",\n", - " main = \"Concentration vs Time (before/after Jacobian sign change)\"\n", - " )\n", - " usr <- par(\"usr\")\n", - " rect(xleft = min(sol_full$time), ybottom = usr[3], xright = t_change, ytop = usr[4],\n", - " border = NA, col = rgb(0, 0, 1, alpha = 0.1))\n", - " rect(xleft = t_change, ybottom = usr[3], xright = max(sol_full$time), ytop = usr[4],\n", - " border = NA, col = rgb(1, 0, 0, alpha = 0.1))\n", - " matlines(sol_full$time, sol_full[, c(\"A\", \"B\", \"AB\", \"B_star\")], lwd = 2)\n", - " legend(\"topleft\", legend = c(\"A\", \"B\", \"AB\", \"B*\"), lty = 1, lwd = 2, bty = \"n\")\n", - "}" + "nrow(sol_unstimulated)" ] }, { "cell_type": "code", - "execution_count": 16, - "id": "7f0b9cdd", + "execution_count": 123, + "id": "b0e64f58", "metadata": { "vscode": { "languageId": "r" @@ -705,60 +1272,206 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ - "Plot with title \"Dynamics of B\"" + "plot without title" ] }, "metadata": { "image/png": { - "height": 420, - "width": 420 + "height": 360, + "width": 480 } }, "output_type": "display_data" } ], "source": [ - "plot(sol_full$time, sol_full$B, type = \"l\", lwd = 2,\n", - " xlim = c(-999, 2000),\n", - " xlab = \"Time\", ylab = \"Concentration\",\n", - " main = \"Dynamics of B\")\n", - "axis(1, at = c(0, 2000))" + "# Plotting\n", + "sol_for_plot_2 <- as.data.frame(sol_full)\n", + "# rename columns for clarity\n", + "colnames(sol_for_plot_2) <- c(\"time\", \"A\", \"B\", \"AB\", \"B*\")\n", + "# reshape to long format\n", + "sol_long <- sol_for_plot_2 %>%\n", + " pivot_longer(cols = A:`B*`, names_to = \"species\", values_to = \"value\")\n", + "options(repr.plot.width = 8, repr.plot.height = 6)\n", + "colors <- c(\n", + " A = \"#EE7733\",\n", + " B = \"#0077BB\",\n", + " AB = \"#33BBEE\",\n", + " `B*` = \"#EE3377\"\n", + ")\n", + "plot1 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " geom_line(linewidth = 3) +\n", + " ## vertical dashed line\n", + " geom_vline(\n", + " xintercept = 0,\n", + " linetype = \"dashed\",\n", + " colour = \"black\",\n", + " linewidth = 0.7\n", + " ) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = seq(-1000, 2000, 500),\n", + " minor_breaks = seq(-1000, 2000, 250),\n", + " limits = c(-1000, 2000),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(-1000, 2000), clip = \"on\"\n", + " ) +\n", + " scale_y_log10(\n", + " breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n", + " labels = scales::trans_format(\"log10\", scales::math_format(10^.x))\n", + " ) + # log10 transformation\n", + " labs(\n", + " title = \"Model 3: Varusai 4 Variables\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", + " \n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", + "\n", + "plot1" ] }, { "cell_type": "code", - "execution_count": null, - "id": "24150e8f", + "execution_count": 107, + "id": "d1ea7751", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "ce89ef50", - "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"Jacobian matrix changed at index 12332 and time 233\"\n", + "[1] \"Unstimulated Jacobian:\"\n", + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 -1 1 0\n", + "[2,] -1 -1 1 1\n", + "[3,] 1 1 -1 0\n", + "[4,] -1 1 0 -1\n", + "[1] \"Stimulated Jacobian:\"\n", + " [,1] [,2] [,3] [,4]\n", + "[1,] -1 -1 1 0\n", + "[2,] 1 -1 1 1\n", + "[3,] 1 1 -1 0\n", + "[4,] -1 1 0 -1\n" + ] + } + ], "source": [ - "## 3. Additional features" + "# Search for changes in loops upon stimulation over time_full\n", + "res_tab_0 <- find_loops_vset(func_varusai15,vset=list(initial_conditions_act_deact),t=1,params=params_act_deact_unstimulated,max_num_loops=10)\n", + "j_0 <- res_tab_0$jac_rep[[1]]\n", + "\n", + "for (idx in 1:(nrow(sol_full))) {\n", + " # compute loopsl\n", + " res_tab <- find_loops_vset(func_varusai15,vset=list(sol_full[idx,2:5]),t=idx,params=params_act_deact_stimulated,max_num_loops=10)\n", + " j_1 <- res_tab$jac_rep[[1]]\n", + " if (!identical(j_0, j_1)) {\n", + " print(paste(\"Jacobian matrix changed at index\", idx, \"and time\", time_full[idx], sep=\" \"))\n", + " print(\"Unstimulated Jacobian:\")\n", + " print(j_0)\n", + " print(\"Stimulated Jacobian:\")\n", + " print(j_1)\n", + " break\n", + " }\n", + "}" ] }, { - "cell_type": "markdown", - "id": "3a0acda4", - "metadata": {}, + "cell_type": "code", + "execution_count": 115, + "id": "243d080c", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"Loop summary unstimulated conditions:\"\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 4
len_1len_2len_3len_4
<dbl><dbl><dbl><dbl>
all4431
pos0410
neg4021
\n" + ], + "text/latex": [ + "A data.frame: 3 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & len\\_1 & len\\_2 & len\\_3 & len\\_4\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\tall & 4 & 4 & 3 & 1\\\\\n", + "\tpos & 0 & 4 & 1 & 0\\\\\n", + "\tneg & 4 & 0 & 2 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 4\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> | len_3 <dbl> | len_4 <dbl> |\n", + "|---|---|---|---|---|\n", + "| all | 4 | 4 | 3 | 1 |\n", + "| pos | 0 | 4 | 1 | 0 |\n", + "| neg | 4 | 0 | 2 | 1 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2 len_3 len_4\n", + "all 4 4 3 1 \n", + "pos 0 4 1 0 \n", + "neg 4 0 2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "### 3.1. Add subject ID to make the loop result more comprehensible" + "res_tab_0 <- find_loops_vset(func_varusai15,vset=list(initial_conditions_act_deact),t=1,params=params_act_deact_unstimulated)\n", + "print(\"Loop summary unstimulated conditions:\")\n", + "loop_summary(res_tab_0$loop_rep[[1]])" ] }, { "cell_type": "code", - "execution_count": 17, - "id": "5d78b4f6", + "execution_count": 116, + "id": "75fdb42d", "metadata": { "vscode": { "languageId": "r" @@ -769,47 +1482,251 @@ "name": "stdout", "output_type": "stream", "text": [ - "\u001b[90m# A tibble: 25 × 4\u001b[39m\n", - " loop length sign loop_subject\n", - " \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \u001b[3m\u001b[90m\u001b[39m\u001b[23m \n", - "\u001b[90m 1\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m \u001b[90m\u001b[39m \n", - "\u001b[90m 2\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m \u001b[90m\u001b[39m \n", - "\u001b[90m 3\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m \u001b[90m\u001b[39m \n", - "\u001b[90m 4\u001b[39m \u001b[90m\u001b[39m 1 -\u001b[31m1\u001b[39m \u001b[90m\u001b[39m \n", - "\u001b[90m 5\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", - "\u001b[90m 6\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", - "\u001b[90m 7\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", - "\u001b[90m 8\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", - "\u001b[90m 9\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", - "\u001b[90m10\u001b[39m \u001b[90m\u001b[39m 2 1 \u001b[90m\u001b[39m \n", - "\u001b[90m# ℹ 15 more rows\u001b[39m\n" + "[1] \"Loop summary stimulated conditions:\"\n" ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 4
len_1len_2len_3len_4
<dbl><dbl><dbl><dbl>
all4431
pos0320
neg4111
\n" + ], + "text/latex": [ + "A data.frame: 3 × 4\n", + "\\begin{tabular}{r|llll}\n", + " & len\\_1 & len\\_2 & len\\_3 & len\\_4\\\\\n", + " & & & & \\\\\n", + "\\hline\n", + "\tall & 4 & 4 & 3 & 1\\\\\n", + "\tpos & 0 & 3 & 2 & 0\\\\\n", + "\tneg & 4 & 1 & 1 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 4\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> | len_3 <dbl> | len_4 <dbl> |\n", + "|---|---|---|---|---|\n", + "| all | 4 | 4 | 3 | 1 |\n", + "| pos | 0 | 3 | 2 | 0 |\n", + "| neg | 4 | 1 | 1 | 1 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2 len_3 len_4\n", + "all 4 4 3 1 \n", + "pos 0 3 2 0 \n", + "neg 4 1 1 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res_tab <- find_loops_vset(func_varusai15,vset=list(sol_full[idx,2:5]),t=idx,params=params_act_deact_stimulated)\n", + "print(\"Loop summary stimulated conditions:\")\n", + "loop_summary(res_tab$loop_rep[[1]])" + ] + }, + { + "cell_type": "code", + "execution_count": 139, + "id": "d703b6e6", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" } ], "source": [ - "id_to_subject <- c(\"A\", \"B\", \"AB\", \"B*\")\n", - "names(id_to_subject) <- as.character(0:3)\n", + "# Plot again including the color area in the background to indicate unstimulated and stimulated loop structures changes (at idx, t)\n", + "options(repr.plot.width = 8, repr.plot.height = 6)\n", + "colors <- c(\n", + " A = \"#EE7733\",\n", + " B = \"#0077BB\",\n", + " AB = \"#33BBEE\",\n", + " `B*` = \"#EE3377\"\n", + ")\n", "\n", - "df_loops <- res_tab_complex_loop_rep %>%\n", - " mutate(\n", - " loop_subject = map(loop, ~ unname(id_to_subject[as.character(.x)]))\n", - " ) %>%\n", - " arrange(length, loop)\n", + "t_change <- time_full[idx]\n", + "yr <- range(sol_long$value, na.rm = TRUE)\n", "\n", - "print(df_loops)" + "plot2 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " # Add background colored areas \n", + " annotate(\"rect\",\n", + " xmin = -1000, xmax = t_change,\n", + " ymin = 10**-4, ymax = yr[2]+1000,\n", + " alpha = 0.2, fill = \"lightblue\") +\n", + " annotate(\"rect\",\n", + " xmin = t_change, xmax = 2000,\n", + " ymin = 10**-4, ymax = yr[2]+1000,\n", + " alpha = 0.2, fill = \"lightgreen\") +\n", + " ## vertical dashed line\n", + " geom_vline(\n", + " xintercept = 0,\n", + " linetype = \"dashed\",\n", + " colour = \"black\",\n", + " linewidth = 0.7\n", + " ) +\n", + " ## Another vertical line at the time of loop structure change\n", + " geom_vline(\n", + " xintercept = t_change,\n", + " linetype = \"dotted\",\n", + " colour = \"blue\",\n", + " linewidth = 0.7\n", + " ) +\n", + " ## Trajectory lines\n", + " geom_line(linewidth = 3) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = seq(-1000, 2000, 500),\n", + " minor_breaks = seq(-1000, 2000, 250),\n", + " limits = c(-1000, 2000),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(-1000, 2000), clip = \"on\", ylim = c(10**-4, yr[2]+1000)\n", + " ) +\n", + " scale_y_log10(\n", + " breaks = scales::trans_breaks(\"log10\", function(x) 10^x),\n", + " labels = scales::trans_format(\"log10\", scales::math_format(10^.x)),\n", + " limits = c(10**-4, yr[2]+1000),\n", + " expand = c(0, 0)\n", + " ) + # log10 transformation\n", + " labs(\n", + " title = \"Model 3: Varusai 4 Variables\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", + " \n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", + "plot2\n", + "# ggsave(\"POSm4_plot_stimulated_loops.png\", plot2, width = 10, height = 8, units = \"in\", dpi = 300)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "24878ee0", + "execution_count": 149, + "id": "1a104392", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 480 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "# Zoom in around the perturbation point to see the dynamics more clearly (of only B)\n", + "options(repr.plot.width = 8, repr.plot.height = 6)\n", + "\n", + "plot3 <- ggplot(sol_long %>% filter(species == \"B\"), aes(x = time, y = value, colour = species)) +\n", + " ## vertical dashed line\n", + " geom_vline(\n", + " xintercept = 0,\n", + " linetype = \"dashed\",\n", + " colour = \"black\",\n", + " linewidth = 0.7\n", + " ) +\n", + " ## Another vertical line at the time of loop structure change\n", + " geom_vline(\n", + " xintercept = t_change,\n", + " linetype = \"dotted\",\n", + " colour = \"blue\",\n", + " linewidth = 0.7\n", + " ) +\n", + " ## Trajectory lines\n", + " geom_line(linewidth = 3) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = seq(-1000, 2000, 500),\n", + " minor_breaks = seq(-1000, 2000, 250),\n", + " limits = c(-1000, 2000),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(-1000, 2000), clip = \"on\"\n", + " ) +\n", + " scale_y_continuous(\n", + " minor_breaks = seq(-293, 295, 0.2),\n", + " breaks = seq(-293, 295, 1),\n", + " # limits = c(10**-2, yr[2]+1000),\n", + " # expand = c(0, 0)\n", + " ) + \n", + " labs(\n", + " title = \"Dynamics of B\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", + " \n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", + "plot3\n", + "# ggsave(\"POSm4_plot_stimulated_loops_zoomed.png\", plot" + ] } ], "metadata": { diff --git a/examples/model_5_MAPK_reduced_R.ipynb b/examples/model_5_MAPK_reduced_R.ipynb new file mode 100644 index 0000000..f825bff --- /dev/null +++ b/examples/model_5_MAPK_reduced_R.ipynb @@ -0,0 +1,5735 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5c5107a0", + "metadata": {}, + "source": [ + "## **0. Initialization**" + ] + }, + { + "cell_type": "markdown", + "id": "0aa853b2", + "metadata": {}, + "source": [ + "### **Installation**\n", + "LoopDetectR is on CRAN and can be installed within R by" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad430870", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Before running the R code cells in jupyter notebook,\n", + "# initialize the R kernel by this line of code:\n", + "# IRkernel::installspec()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2d7c70f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'LoopDetectR' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "# Download and install\n", + "install.packages(\"LoopDetectR\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1c741284", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'deSolve' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'numDeriv' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "install.packages(\"deSolve\") # if not already installed\n", + "install.packages(\"numDeriv\") # if not already installed" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "1d32152b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "── \u001b[1mAttaching core tidyverse packages\u001b[22m ──────────────────────── tidyverse 2.0.0 ──\n", + "\u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 1.1.4 \u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 2.1.6\n", + "\u001b[32m✔\u001b[39m \u001b[34mforcats \u001b[39m 1.0.1 \u001b[32m✔\u001b[39m \u001b[34mstringr \u001b[39m 1.6.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mggplot2 \u001b[39m 4.0.1 \u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 3.3.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mlubridate\u001b[39m 1.9.4 \u001b[32m✔\u001b[39m \u001b[34mtidyr \u001b[39m 1.3.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mpurrr \u001b[39m 1.2.0 \n", + "── \u001b[1mConflicts\u001b[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\u001b[36mℹ\u001b[39m Use the conflicted package (\u001b[3m\u001b[34m\u001b[39m\u001b[23m) to force all conflicts to become errors\n" + ] + } + ], + "source": [ + "# Load package\n", + "library(\"LoopDetectR\")\n", + "library(deSolve)\n", + "library(tidyverse)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3eb6dbbb", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "colors <- c('#EE7733', '#0077BB', '#33BBEE', '#EE3377', '#CC3311', '#009988', '#BBBBBB')" + ] + }, + { + "cell_type": "markdown", + "id": "de63ff1e", + "metadata": {}, + "source": [ + "## **1. Model definition**" + ] + }, + { + "cell_type": "markdown", + "id": "39347b82", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "#### **Example 5: Reduced MAPK Model (with and without explicit feedback)**" + ] + }, + { + "cell_type": "markdown", + "id": "21903465", + "metadata": {}, + "source": [ + "The model for the mitogen-activated phosphorylation kinase (MAPK) cascade proposed in [7] captures the first, second and third level of a phosphorylation cascade which occurs for example in epidermal growth factor (EGF) signaling. The kinase on the first level can be reversibly phosphorylated once, the kinases on levels two andthree can be reversibly phosphorylated twice. The phosphorylated kinase of the first level acts positively on the phosphorylations on the second level, the double phosphorylated kinase of the second level acts positively on the phosphorylations on the third level. The model contains an explicit negative feedback regulation: The double phosphorylated kinase of the third level acts negatively on the phosphorylation on the first level. All phosphorylations are governed by Michaelis-Menten kinetics. The model contains eight variables, ten rate coefficients, eleven inhibition or activation constants, and one Hill coefficient." + ] + }, + { + "cell_type": "markdown", + "id": "8f5f1511", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\frac{dS_1}{dt} &=\n", + "- k_1 \\, \\frac{S_1}{kn_2 + S_1} \\, \\frac{kn_1^{n_1}}{kn_1^{n_1} + S_8^{n_1}}\n", + "+ k_2 \\, \\frac{S_2}{S_2 + kn_3}, \\\\[8pt]\n", + "\n", + "\\frac{dS_2}{dt} &=\n", + "\\phantom{-}\\, k_1 \\, \\frac{S_1}{kn_2 + S_1} \\, \\frac{kn_1^{n_1}}{kn_1^{n_1} + S_8^{n_1}}\n", + "- k_2 \\, \\frac{S_2}{S_2 + kn_3}, \\\\[10pt]\n", + "\n", + "\\frac{dS_3}{dt} &=\n", + "\\phantom{-}\\, k_6 \\, \\frac{S_4}{kn_7 + S_4}\n", + "- k_3 \\, \\frac{S_2 \\, S_3}{kn_4 + S_3}, \\\\[10pt]\n", + "\n", + "\\frac{dS_4}{dt} &=\n", + "\\phantom{-}\\, k_3 \\, \\frac{S_2 \\, S_3}{kn_4 + S_3}\n", + "- k_6 \\, \\frac{S_4}{kn_7 + S_4}\n", + "+ k_5 \\, \\frac{S_5}{kn_6 + S_5}\n", + "- k_4 \\, \\frac{S_2 \\, S_4}{kn_5 + S_4}, \\\\[10pt]\n", + "\n", + "\\frac{dS_5}{dt} &=\n", + "\\phantom{-}\\, k_4 \\, \\frac{S_2 \\, S_4}{kn_5 + S_4}\n", + "- k_5 \\, \\frac{S_5}{kn_6 + S_5}, \\\\[10pt]\n", + "\n", + "\\frac{dS_6}{dt} &=\n", + "\\phantom{-}\\, k_{10} \\, \\frac{S_7}{kn_{11} + S_7}\n", + "- k_7 \\, \\frac{S_5 \\, S_6}{kn_8 + S_6}, \\\\[10pt]\n", + "\n", + "\\frac{dS_7}{dt} &=\n", + "\\phantom{-}\\, k_7 \\, \\frac{S_5 \\, S_6}{kn_8 + S_6}\n", + "- k_{10} \\, \\frac{S_7}{kn_{11} + S_7}\n", + "- k_8 \\, \\frac{S_5 \\, S_7}{kn_9 + S_7}\n", + "+ k_9 \\, \\frac{S_8}{kn_{10} + S_8}, \\\\[10pt]\n", + "\n", + "\\frac{dS_8}{dt} &=\n", + "\\phantom{-}\\, k_8 \\, \\frac{S_5 \\, S_7}{kn_9 + S_7}\n", + "- k_9 \\, \\frac{S_8}{kn_{10} + S_8}.\n", + "\\end{aligned}\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "id": "d486b5d6", + "metadata": {}, + "source": [ + "In the table below, the notation we used is given together with the notation used in the original publication [7], and we provide the initial conditions and reference parameter set published together with the model." + ] + }, + { + "cell_type": "markdown", + "id": "9340d377", + "metadata": {}, + "source": [ + "**Initial conditions**\n", + "\n", + "| Var | Name (short) | Name (long) | Initial value |\n", + "|------:|-------------|-------------|---------------|\n", + "| S₁ | MKKK | MAPKKK | 100 nM |\n", + "| S₂ | MKKK-P | MAPKKK* | 0 |\n", + "| S₃ | MKK | MAPKK | 300 nM |\n", + "| S₄ | MKK-P | MAPKK* | 0 |\n", + "| S₅ | MKK-PP | MAPKK** | 0 |\n", + "| S₆ | MAPK | MAPK | 300 nM |\n", + "| S₇ | MAPK-P | MAPK* | 0 |\n", + "| S₈ | MAPK-PP | MAPK** | 0 |\n" + ] + }, + { + "cell_type": "markdown", + "id": "201db642", + "metadata": {}, + "source": [ + "**Parameters**\n", + "| Parameter | Symbol | Value | Units |\n", + "|----------:|--------|-------|-------|\n", + "| k₁ | V₁ | 2.5 | nM·s⁻¹ |\n", + "| k₂ | V₂ | 0.25 | nM·s⁻¹ |\n", + "| k₃ | k₃ | 0.025 | s⁻¹ |\n", + "| k₄ | k₄ | 0.025 | s⁻¹ |\n", + "| k₅ | V₅ | 0.75 | nM·s⁻¹ |\n", + "| k₆ | V₆ | 0.75 | nM·s⁻¹ |\n", + "| k₇ | k₇ | 0.025 | s⁻¹ |\n", + "| k₈ | k₈ | 0.025 | s⁻¹ |\n", + "| k₉ | V₉ | 0.5 | nM·s⁻¹ |\n", + "| k₁₀ | V₁₀ | 0.5 | nM·s⁻¹ |\n" + ] + }, + { + "cell_type": "markdown", + "id": "9fb78a52", + "metadata": {}, + "source": [ + "The MAPK cascade model without explicit feedback regulation is exactly the same as the one described above, but for the corresponding regulation term omitted from the ODE system. Therefore, only the first two equations of the ODE model are altered to:" + ] + }, + { + "cell_type": "markdown", + "id": "cb1f8ad9", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{aligned}\n", + "\\frac{dS_1}{dt} &=\n", + "- k_1 \\, \\frac{S_1}{kn_2 + S_1}\n", + "+ k_2 \\, \\frac{S_2}{S_2 + kn_3}, \\\\[8pt]\n", + "\n", + "\\frac{dS_2}{dt} &=\n", + "\\phantom{-}\\, k_1 \\, \\frac{S_1}{kn_2 + S_1}\n", + "- k_2 \\, \\frac{S_2}{S_2 + kn_3}.\n", + "\\end{aligned}\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "id": "f038b36a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "#### **1.1. Reduced MAPK Model with aexplicit feedback**" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "id": "9edacb63", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "model_mapk_simple_w_feedback <- function(t, y, klin, kn, n1) {\n", + " # Unpack state\n", + " S1 <- y[1]; S2 <- y[2]; S3 <- y[3]; S4 <- y[4]\n", + " S5 <- y[5]; S6 <- y[6]; S7 <- y[7]; S8 <- y[8]\n", + "\n", + " # Kinetic parameters\n", + " k1 <- klin[1]; k2 <- klin[2]; k3 <- klin[3]; k4 <- klin[4]; k5 <- klin[5]\n", + " k6 <- klin[6]; k7 <- klin[7]; k8 <- klin[8]; k9 <- klin[9]; k10 <- klin[10]\n", + "\n", + " # Saturation constants\n", + " kn1 <- kn[1]; kn2 <- kn[2]; kn3 <- kn[3]; kn4 <- kn[4]; kn5 <- kn[5]\n", + " kn6 <- kn[6]; kn7 <- kn[7]; kn8 <- kn[8]; kn9 <- kn[9]; kn10 <- kn[10]\n", + " kn11 <- kn[11]\n", + "\n", + " # dS1/dt\n", + " term_inhibit <- (kn1^n1) / (kn1^n1 + S8^n1)\n", + " dS1 <- -k1 * (S1/(kn2 + S1)) * term_inhibit +\n", + " k2 * (S2/(S2 + kn3))\n", + "\n", + " # dS2/dt\n", + " dS2 <- k1 * (S1/(kn2 + S1)) * term_inhibit -\n", + " k2 * (S2/(S2 + kn3))\n", + "\n", + " # dS3/dt\n", + " dS3 <- k6 * (S4/(kn7 + S4)) -\n", + " k3 * (S2*S3/(kn4 + S3))\n", + "\n", + " # dS4/dt\n", + " dS4 <- k3 * (S2*S3/(kn4 + S3)) -\n", + " k6 * (S4/(kn7 + S4)) +\n", + " k5 * (S5/(kn6 + S5)) -\n", + " k4 * (S2*S4/(kn5 + S4))\n", + "\n", + " # dS5/dt\n", + " dS5 <- k4 * (S2*S4/(kn5 + S4)) -\n", + " k5 * (S5/(kn6 + S5))\n", + "\n", + " # dS6/dt\n", + " dS6 <- k10 * (S7/(kn11 + S7)) -\n", + " k7 * (S5*S6/(kn8 + S6))\n", + "\n", + " # dS7/dt\n", + " dS7 <- k7 * (S5*S6/(kn8 + S6)) -\n", + " k10 * (S7/(kn11 + S7)) -\n", + " k8 * (S5*S7/(kn9 + S7)) +\n", + " k9 * (S8/(kn10 + S8))\n", + "\n", + " # dS8/dt\n", + " dS8 <- k8 * (S5*S7/(kn9 + S7)) -\n", + " k9 * (S8/(kn10 + S8))\n", + " \n", + " dx <- rep(0,8)\n", + " dx[1] <- dS1\n", + " dx[2] <- dS2\n", + " dx[3] <- dS3\n", + " dx[4] <- dS4\n", + " dx[5] <- dS5\n", + " dx[6] <- dS6\n", + " dx[7] <- dS7\n", + " dx[8] <- dS8\n", + " \n", + " return(dx)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "51df3daa", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **1.2. Reduced MAPK Model without explicit feedback**" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "id": "64a3f6ca", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "model_mapk_simple_wo_feedback <- function(t, y, klin, kn, n1) {\n", + " # Unpack state\n", + " S1 <- y[1]; S2 <- y[2]; S3 <- y[3]; S4 <- y[4]\n", + " S5 <- y[5]; S6 <- y[6]; S7 <- y[7]; S8 <- y[8]\n", + "\n", + " # Kinetic parameters\n", + " k1 <- klin[1]; k2 <- klin[2]; k3 <- klin[3]; k4 <- klin[4]; k5 <- klin[5]\n", + " k6 <- klin[6]; k7 <- klin[7]; k8 <- klin[8]; k9 <- klin[9]; k10 <- klin[10]\n", + "\n", + " # Saturation constants\n", + " kn1 <- kn[1]; kn2 <- kn[2]; kn3 <- kn[3]; kn4 <- kn[4]; kn5 <- kn[5]\n", + " kn6 <- kn[6]; kn7 <- kn[7]; kn8 <- kn[8]; kn9 <- kn[9]; kn10 <- kn[10]\n", + " kn11 <- kn[11]\n", + "\n", + " # dS1/dt\n", + " dS1 <- -k1 * (S1/(kn2 + S1)) +\n", + " k2 * (S2/(S2 + kn3))\n", + "\n", + " # dS2/dt\n", + " dS2 <- k1 * (S1/(kn2 + S1)) -\n", + " k2 * (S2/(S2 + kn3))\n", + "\n", + " # dS3/dt\n", + " dS3 <- k6 * (S4/(kn7 + S4)) -\n", + " k3 * (S2*S3/(kn4 + S3))\n", + "\n", + " # dS4/dt\n", + " dS4 <- k3 * (S2*S3/(kn4 + S3)) -\n", + " k6 * (S4/(kn7 + S4)) +\n", + " k5 * (S5/(kn6 + S5)) -\n", + " k4 * (S2*S4/(kn5 + S4))\n", + "\n", + " # dS5/dt\n", + " dS5 <- k4 * (S2*S4/(kn5 + S4)) -\n", + " k5 * (S5/(kn6 + S5))\n", + "\n", + " # dS6/dt\n", + " dS6 <- k10 * (S7/(kn11 + S7)) -\n", + " k7 * (S5*S6/(kn8 + S6))\n", + "\n", + " # dS7/dt\n", + " dS7 <- k7 * (S5*S6/(kn8 + S6)) -\n", + " k10 * (S7/(kn11 + S7)) -\n", + " k8 * (S5*S7/(kn9 + S7)) +\n", + " k9 * (S8/(kn10 + S8))\n", + "\n", + " # dS8/dt\n", + " dS8 <- k8 * (S5*S7/(kn9 + S7)) -\n", + " k9 * (S8/(kn10 + S8))\n", + " \n", + " dx <- rep(0,8)\n", + " dx[1] <- dS1\n", + " dx[2] <- dS2\n", + " dx[3] <- dS3\n", + " dx[4] <- dS4\n", + " dx[5] <- dS5\n", + " dx[6] <- dS6\n", + " dx[7] <- dS7\n", + " dx[8] <- dS8\n", + " \n", + " return(dx)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "44e7e155", + "metadata": {}, + "source": [ + "## **2. Result reproduction**" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "4e5b9062", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Parameters from supplementary material\n", + "klin <- c(\n", + " 2.5, # k1\n", + " 0.25, # k2\n", + " 0.025, # k3\n", + " 0.025, # k4\n", + " 0.75, # k5\n", + " 0.75, # k6\n", + " 0.025, # k7\n", + " 0.025, # k8\n", + " 0.5, # k9\n", + " 0.5 # k10\n", + ")\n", + "\n", + "kn <- c(\n", + " 9, # kn1 = KI\n", + " 10, # kn2 = K1\n", + " 8, # kn3 = K2\n", + " 15, # kn4\n", + " 15, # kn5\n", + " 15, # kn6\n", + " 15, # kn7\n", + " 15, # kn8\n", + " 15, # kn9\n", + " 15, # kn10\n", + " 15 # kn11\n", + ")\n", + "\n", + "n1 <- 1\n", + "\n", + "# Initial conditions\n", + "initial_conditions <- c(\n", + " S1 = 100, # S1: MKKK, MAPKKK\n", + " S2 = 0, # S2: MKKK-P, MKKK*\n", + " S3 = 300, # S3: MKK, MAPKK\n", + " S4 = 0, # S4: MKK-P, MAPKK*,\n", + " S5 = 0, # S5: MKK-PP, MAPKK**\n", + " S6 = 300, # S6: MAPK, MAPK\n", + " S7 = 0, # S7: MAPK-P, MAPK*\n", + " S8 = 0 # S8: MAPK-PP, MAPK** \n", + ")\n", + "\n", + "all_labels <- c('MAPKKK (S1)', 'MAPKKK* (S2)', 'MAPKK (S3)', 'MAPKK* (S4)', \n", + " 'MAPKK** (S5)', 'MAPK (S6)', 'MAPK* (S7)', 'MAPK** (S8)')\n" + ] + }, + { + "cell_type": "markdown", + "id": "b927c538", + "metadata": {}, + "source": [ + "### **2.1. Reduced MAPK Model with explicit feedback**" + ] + }, + { + "cell_type": "markdown", + "id": "b9c9522a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "#### **2.1.1. Loop structure (at first)**" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "6c2540e5", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 7 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11-1
2, 21-1
4, 41-1
5, 51-1
7, 71-1
8, 81-1
1, 2, 12 1
\n" + ], + "text/latex": [ + "A data.frame: 7 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 5, 5 & 1 & -1\\\\\n", + "\t 7, 7 & 1 & -1\\\\\n", + "\t 8, 8 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 7 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 5, 5 | 1 | -1 |\n", + "| 7, 7 | 1 | -1 |\n", + "| 8, 8 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "1 1, 1 1 -1 \n", + "2 2, 2 1 -1 \n", + "3 4, 4 1 -1 \n", + "4 5, 5 1 -1 \n", + "5 7, 7 1 -1 \n", + "6 8, 8 1 -1 \n", + "7 1, 2, 1 2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# compute loops\n", + "res_tab <- find_loops_vset(model_mapk_simple_w_feedback,vset=list(initial_conditions),t=1,klin=klin,kn=kn,n1=n1,max_num_loops=10)\n", + "# The loop list is reported\n", + "res_tab$loop_rep[[1]] \n", + "# To access a specific loop representation: e.g., the sixth loop, add [6,]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "3d056cc3", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 2
len_1len_2
<dbl><dbl>
all61
pos01
neg60
\n" + ], + "text/latex": [ + "A data.frame: 3 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & len\\_1 & len\\_2\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\tall & 6 & 1\\\\\n", + "\tpos & 0 & 1\\\\\n", + "\tneg & 6 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 2\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> |\n", + "|---|---|---|\n", + "| all | 6 | 1 |\n", + "| pos | 0 | 1 |\n", + "| neg | 6 | 0 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2\n", + "all 6 1 \n", + "pos 0 1 \n", + "neg 6 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab$loop_rep[[1]])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e9a5ecf2", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 2 × 3
looplengthsign
<I<list>><dbl><dbl>
2 2, 21-1
71, 2, 12 1
\n" + ], + "text/latex": [ + "A data.frame: 2 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t2 & 2, 2 & 1 & -1\\\\\n", + "\t7 & 1, 2, 1 & 2 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 2 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 2 | 2, 2 | 1 | -1 |\n", + "| 7 | 1, 2, 1 | 2 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "2 2, 2 1 -1 \n", + "7 1, 2, 1 2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Index of node of interest\n", + "noi <- 2 \n", + "# Return all loops from loop_list containing node 2\n", + "loop_list <- res_tab$loop_rep[[1]]\n", + "loop_list[vapply(loop_list$loop,function(x){noi %in% x},logical(1)),]" + ] + }, + { + "cell_type": "markdown", + "id": "9f0fc026", + "metadata": {}, + "source": [ + "#### **2.1.2. Calculating the Jacobian matrix**\n", + "\n", + "Sign jacobian matrix can be access via `res_tab` variable that we have calculated above, or derived from a jacobian matrix at a specific state" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "05e68bc3", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 8 × 8 of type dbl
-1 10 0 00 0 1
1-10 0 00 0-1
0-10 1 00 0 0
0 10-1 10 0 0
0 00 0-10 0 0
0 00 0-10 1 0
0 00 0 10-1 1
0 00 0 00 0-1
\n" + ], + "text/latex": [ + "A matrix: 8 × 8 of type dbl\n", + "\\begin{tabular}{llllllll}\n", + "\t -1 & 1 & 0 & 0 & 0 & 0 & 0 & 1\\\\\n", + "\t 1 & -1 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", + "\t 0 & -1 & 0 & 1 & 0 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 0 & -1 & 1 & 0 & 0 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & 0 & 0 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & 0 & 1 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & 1 & 0 & -1 & 1\\\\\n", + "\t 0 & 0 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 8 × 8 of type dbl\n", + "\n", + "| -1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 1 | -1 | 0 | 0 | 0 | 0 | 0 | -1 |\n", + "| 0 | -1 | 0 | 1 | 0 | 0 | 0 | 0 |\n", + "| 0 | 1 | 0 | -1 | 1 | 0 | 0 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | 0 | 0 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | 0 | 1 | 0 |\n", + "| 0 | 0 | 0 | 0 | 1 | 0 | -1 | 1 |\n", + "| 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", + "[1,] -1 1 0 0 0 0 0 1 \n", + "[2,] 1 -1 0 0 0 0 0 -1 \n", + "[3,] 0 -1 0 1 0 0 0 0 \n", + "[4,] 0 1 0 -1 1 0 0 0 \n", + "[5,] 0 0 0 0 -1 0 0 0 \n", + "[6,] 0 0 0 0 -1 0 1 0 \n", + "[7,] 0 0 0 0 1 0 -1 1 \n", + "[8,] 0 0 0 0 0 0 0 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The corresponding signed Jacobian matrix (at initialization point)\n", + "res_tab$jac_rep[[1]]" + ] + }, + { + "cell_type": "markdown", + "id": "b4802333", + "metadata": {}, + "source": [ + "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003]." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "adbc93e2", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
S1
95.6517023027939
S2
4.34829769720574
S3
208.414606568695
S4
74.5151466422457
S5
17.0702467890569
S6
6.84331427771254
S7
15.1917577910863
S8
277.9649279312
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[S1] 95.6517023027939\n", + "\\item[S2] 4.34829769720574\n", + "\\item[S3] 208.414606568695\n", + "\\item[S4] 74.5151466422457\n", + "\\item[S5] 17.0702467890569\n", + "\\item[S6] 6.84331427771254\n", + "\\item[S7] 15.1917577910863\n", + "\\item[S8] 277.9649279312\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "S1\n", + ": 95.6517023027939S2\n", + ": 4.34829769720574S3\n", + ": 208.414606568695S4\n", + ": 74.5151466422457S5\n", + ": 17.0702467890569S6\n", + ": 6.84331427771254S7\n", + ": 15.1917577910863S8\n", + ": 277.9649279312\n", + "\n" + ], + "text/plain": [ + " S1 S2 S3 S4 S5 S6 S7 \n", + " 95.651702 4.348298 208.414607 74.515147 17.070247 6.843314 15.191758 \n", + " S8 \n", + "277.964928 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The function func_POSm4 returns a vector, but deSolve needs the vector within\n", + "# a list as output. Therefore, we define a function that simply puts the output \n", + "# of func_POSm4 into a list:\n", + "func_list <- function(t,x,klin,kn,n1){list(model_mapk_simple_w_feedback(t,x,klin,kn,n1))}\n", + "sol <- deSolve::ode(y = initial_conditions, times = seq(0,3650,1), func = func_list, \n", + " parms=klin, kn=kn, n1=n1)\n", + "\n", + "# Set the last point of the numeric solution as point of interest, omit the \n", + "# first column (it contains the time)\n", + "s_star_end <- sol[dim(sol)[1],2:dim(sol)[2]]\n", + "s_star_end" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "1d134ecb", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 8 × 8 of type dbl
-7.024262e-05 0.013116435 0.000000e+00 0.0000000000 0.000000000 0.00000000 0.000000000 2.473666e-04
7.024262e-05-0.013116435 0.000000e+00 0.0000000000 0.000000000 0.00000000 0.000000000-2.473666e-04
0.000000e+00-0.023321506-3.266837e-05 0.0014039753 0.000000000 0.00000000 0.000000000 0.000000e+00
0.000000e+00 0.002510742 3.266837e-05-0.0016074721 0.010938252 0.00000000 0.000000000 0.000000e+00
0.000000e+00 0.020810765 0.000000e+00 0.0002034968-0.010938252 0.00000000 0.000000000 0.000000e+00
0.000000e+00 0.000000000 0.000000e+00 0.0000000000-0.007832276-0.01341634 0.008227814 0.000000e+00
0.000000e+00 0.000000000 0.000000e+00 0.0000000000-0.004747116 0.01341634-0.015250355 8.738361e-05
0.000000e+00 0.000000000 0.000000e+00 0.0000000000 0.012579392 0.00000000 0.007022541-8.738361e-05
\n" + ], + "text/latex": [ + "A matrix: 8 × 8 of type dbl\n", + "\\begin{tabular}{llllllll}\n", + "\t -7.024262e-05 & 0.013116435 & 0.000000e+00 & 0.0000000000 & 0.000000000 & 0.00000000 & 0.000000000 & 2.473666e-04\\\\\n", + "\t 7.024262e-05 & -0.013116435 & 0.000000e+00 & 0.0000000000 & 0.000000000 & 0.00000000 & 0.000000000 & -2.473666e-04\\\\\n", + "\t 0.000000e+00 & -0.023321506 & -3.266837e-05 & 0.0014039753 & 0.000000000 & 0.00000000 & 0.000000000 & 0.000000e+00\\\\\n", + "\t 0.000000e+00 & 0.002510742 & 3.266837e-05 & -0.0016074721 & 0.010938252 & 0.00000000 & 0.000000000 & 0.000000e+00\\\\\n", + "\t 0.000000e+00 & 0.020810765 & 0.000000e+00 & 0.0002034968 & -0.010938252 & 0.00000000 & 0.000000000 & 0.000000e+00\\\\\n", + "\t 0.000000e+00 & 0.000000000 & 0.000000e+00 & 0.0000000000 & -0.007832276 & -0.01341634 & 0.008227814 & 0.000000e+00\\\\\n", + "\t 0.000000e+00 & 0.000000000 & 0.000000e+00 & 0.0000000000 & -0.004747116 & 0.01341634 & -0.015250355 & 8.738361e-05\\\\\n", + "\t 0.000000e+00 & 0.000000000 & 0.000000e+00 & 0.0000000000 & 0.012579392 & 0.00000000 & 0.007022541 & -8.738361e-05\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 8 × 8 of type dbl\n", + "\n", + "| -7.024262e-05 | 0.013116435 | 0.000000e+00 | 0.0000000000 | 0.000000000 | 0.00000000 | 0.000000000 | 2.473666e-04 |\n", + "| 7.024262e-05 | -0.013116435 | 0.000000e+00 | 0.0000000000 | 0.000000000 | 0.00000000 | 0.000000000 | -2.473666e-04 |\n", + "| 0.000000e+00 | -0.023321506 | -3.266837e-05 | 0.0014039753 | 0.000000000 | 0.00000000 | 0.000000000 | 0.000000e+00 |\n", + "| 0.000000e+00 | 0.002510742 | 3.266837e-05 | -0.0016074721 | 0.010938252 | 0.00000000 | 0.000000000 | 0.000000e+00 |\n", + "| 0.000000e+00 | 0.020810765 | 0.000000e+00 | 0.0002034968 | -0.010938252 | 0.00000000 | 0.000000000 | 0.000000e+00 |\n", + "| 0.000000e+00 | 0.000000000 | 0.000000e+00 | 0.0000000000 | -0.007832276 | -0.01341634 | 0.008227814 | 0.000000e+00 |\n", + "| 0.000000e+00 | 0.000000000 | 0.000000e+00 | 0.0000000000 | -0.004747116 | 0.01341634 | -0.015250355 | 8.738361e-05 |\n", + "| 0.000000e+00 | 0.000000000 | 0.000000e+00 | 0.0000000000 | 0.012579392 | 0.00000000 | 0.007022541 | -8.738361e-05 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] [,5] \n", + "[1,] -7.024262e-05 0.013116435 0.000000e+00 0.0000000000 0.000000000\n", + "[2,] 7.024262e-05 -0.013116435 0.000000e+00 0.0000000000 0.000000000\n", + "[3,] 0.000000e+00 -0.023321506 -3.266837e-05 0.0014039753 0.000000000\n", + "[4,] 0.000000e+00 0.002510742 3.266837e-05 -0.0016074721 0.010938252\n", + "[5,] 0.000000e+00 0.020810765 0.000000e+00 0.0002034968 -0.010938252\n", + "[6,] 0.000000e+00 0.000000000 0.000000e+00 0.0000000000 -0.007832276\n", + "[7,] 0.000000e+00 0.000000000 0.000000e+00 0.0000000000 -0.004747116\n", + "[8,] 0.000000e+00 0.000000000 0.000000e+00 0.0000000000 0.012579392\n", + " [,6] [,7] [,8] \n", + "[1,] 0.00000000 0.000000000 2.473666e-04\n", + "[2,] 0.00000000 0.000000000 -2.473666e-04\n", + "[3,] 0.00000000 0.000000000 0.000000e+00\n", + "[4,] 0.00000000 0.000000000 0.000000e+00\n", + "[5,] 0.00000000 0.000000000 0.000000e+00\n", + "[6,] -0.01341634 0.008227814 0.000000e+00\n", + "[7,] 0.01341634 -0.015250355 8.738361e-05\n", + "[8,] 0.00000000 0.007022541 -8.738361e-05" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "j_matrix <- numDeriv::jacobian(model_mapk_simple_w_feedback, s_star_end,method=\"complex\",\n", + " t=3650,klin=klin, kn=kn, n1=n1)\n", + "j_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "d9a4b8c8", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 8 × 8 of type dbl
-1 1 0 0 0 0 0 1
1-1 0 0 0 0 0-1
0-1-1 1 0 0 0 0
0 1 1-1 1 0 0 0
0 1 0 1-1 0 0 0
0 0 0 0-1-1 1 0
0 0 0 0-1 1-1 1
0 0 0 0 1 0 1-1
\n" + ], + "text/latex": [ + "A matrix: 8 × 8 of type dbl\n", + "\\begin{tabular}{llllllll}\n", + "\t -1 & 1 & 0 & 0 & 0 & 0 & 0 & 1\\\\\n", + "\t 1 & -1 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", + "\t 0 & -1 & -1 & 1 & 0 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 1 & -1 & 1 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 0 & 1 & -1 & 0 & 0 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & -1 & 1 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & 1 & -1 & 1\\\\\n", + "\t 0 & 0 & 0 & 0 & 1 & 0 & 1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 8 × 8 of type dbl\n", + "\n", + "| -1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 1 | -1 | 0 | 0 | 0 | 0 | 0 | -1 |\n", + "| 0 | -1 | -1 | 1 | 0 | 0 | 0 | 0 |\n", + "| 0 | 1 | 1 | -1 | 1 | 0 | 0 | 0 |\n", + "| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | -1 | 1 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | 1 | -1 | 1 |\n", + "| 0 | 0 | 0 | 0 | 1 | 0 | 1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", + "[1,] -1 1 0 0 0 0 0 1 \n", + "[2,] 1 -1 0 0 0 0 0 -1 \n", + "[3,] 0 -1 -1 1 0 0 0 0 \n", + "[4,] 0 1 1 -1 1 0 0 0 \n", + "[5,] 0 1 0 1 -1 0 0 0 \n", + "[6,] 0 0 0 0 -1 -1 1 0 \n", + "[7,] 0 0 0 0 -1 1 -1 1 \n", + "[8,] 0 0 0 0 1 0 1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "signed_jacobian <- sign(j_matrix)\n", + "signed_jacobian" + ] + }, + { + "cell_type": "markdown", + "id": "9fb5ce0e", + "metadata": {}, + "source": [ + "#### **2.1.3. Temporal dynamics**" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "b6906e49", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol <- deSolve::ode(y = s_star_end, times = seq(0,5000,1), func = func_list, \n", + " parms=klin, kn=kn, n1=n1)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a9e0a20b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "296.620110566778" + ], + "text/latex": [ + "296.620110566778" + ], + "text/markdown": [ + "296.620110566778" + ], + "text/plain": [ + "[1] 296.6201" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "max(sol[,9])" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "6e020cf1", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 5001
  2. 9
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 5001\n", + "\\item 9\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 5001\n", + "2. 9\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] 5001 9" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "dim(sol)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "cf1a9580", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "matplot(\n", + " sol[,1], sol[,2:dim(sol)[2]],\n", + " type = \"l\",\n", + " lty = 1,\n", + " xlab = \"Time\",\n", + " ylab = \"Concentration\",\n", + ")\n", + "\n", + "legend(\n", + " \"topright\",\n", + " legend = all_labels,\n", + " col = 1:8,\n", + " lty = 1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "9a37d5b5", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "investigate_label <- c('MAPKK** (S5)', 'MAPK (S6)', 'MAPK* (S7)')\n", + "investigate_index <- c(6, 7, 8)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "1f18ff68", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol_for_plot <- as.data.frame(sol[, c(1, investigate_index)])\n", + "\n", + "# rename columns for clarity (use time + investigate_label)\n", + "colnames(sol_for_plot) <- c(\"time\", investigate_label)\n", + "\n", + "# reshape to long format\n", + "sol_long <- sol_for_plot %>%\n", + " pivot_longer(cols = `MAPKK** (S5)`:`MAPK* (S7)`, names_to = \"species\", values_to = \"value\")" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "273651c0", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 840 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "options(repr.plot.width = 14, repr.plot.height = 6)\n", + "colors <- c(\n", + " `MAPKK** (S5)` = \"#EE7733\",\n", + " `MAPK (S6)` = \"#0077BB\",\n", + " `MAPK* (S7)` = \"#33BBEE\"\n", + ")\n", + "\n", + "plot1 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " geom_line(linewidth = 2) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = seq(0, 5000, 1000),\n", + " minor_breaks = seq(0, 5000, 500),\n", + " limits = c(0, 5000),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(0, 5000), clip = \"on\") +\n", + " labs(\n", + " title = \"Dynamics of the Reduced MAPK Model with Explicit Feedback\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", + "\n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", + "\n", + "plot1\n", + "# ggsave(\"POSm4_plot.png\", plot1, width = 10, height = 8, units = \"in\", dpi = 300)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "a506b026", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol_list <- lapply(1:nrow(sol), function(i) as.numeric(sol[i, 2:9]))\n", + "res_tab_all <- find_loops_vset(model_mapk_simple_w_feedback,vset=sol_list,t=1,klin=klin,kn=kn,n1=n1)" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "ec8b3250", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$loop_rep
\n", + "\t\t
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A data.frame: 31 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11-1
    2, 21-1
    3, 31-1
    4, 41-1
    5, 51-1
    6, 61-1
    7, 71-1
    8, 81-1
    1, 2, 12 1
    3, 4, 32 1
    4, 5, 42 1
    6, 7, 62 1
    5, 8, 1,....6-1
    5, 8, 1,....5 1
    5, 8, 1,....4 1
    5, 8, 2,....5 1
    5, 8, 2,....4-1
    5, 8, 2, 53-1
    7, 8, 1,....8 1
    7, 8, 1,....7 1
    7, 8, 1,....7-1
    7, 8, 1,....6-1
    7, 8, 1,....6-1
    7, 8, 1,....5-1
    7, 8, 2,....7-1
    7, 8, 2,....6-1
    7, 8, 2,....6 1
    7, 8, 2,....5 1
    7, 8, 2,....5 1
    7, 8, 2,....4 1
    7, 8, 72 1
    \n", + "
  2. \n", + "\t
  3. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A data.frame: 31 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11-1
    2, 21-1
    3, 31-1
    4, 41-1
    5, 51-1
    6, 61-1
    7, 71-1
    8, 81-1
    1, 2, 12 1
    3, 4, 32 1
    4, 5, 42 1
    6, 7, 62 1
    5, 8, 1,....6-1
    5, 8, 1,....5 1
    5, 8, 1,....4 1
    5, 8, 2,....5 1
    5, 8, 2,....4-1
    5, 8, 2, 53-1
    7, 8, 1,....8 1
    7, 8, 1,....7-1
    7, 8, 1,....7-1
    7, 8, 1,....6 1
    7, 8, 1,....6-1
    7, 8, 1,....5 1
    7, 8, 2,....7-1
    7, 8, 2,....6 1
    7, 8, 2,....6 1
    7, 8, 2,....5-1
    7, 8, 2,....5 1
    7, 8, 2,....4-1
    7, 8, 72 1
    \n", + "
  4. \n", + "
\n", + "
\n", + "\t
$loop_rep_index
\n", + "\t\t
\n", + "
  1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61. 1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 1
  107. 1
  108. 1
  109. 1
  110. 2
  111. 2
  112. 2
  113. 2
  114. 2
  115. 2
  116. 2
  117. 2
  118. 2
  119. 2
  120. 2
  121. 2
  122. 2
  123. 2
  124. 2
  125. 2
  126. 2
  127. 2
  128. 2
  129. 2
  130. 2
  131. 2
  132. 2
  133. 2
  134. 2
  135. 2
  136. 2
  137. 2
  138. 2
  139. 2
  140. 2
  141. 2
  142. 2
  143. 2
  144. 2
  145. 2
  146. 2
  147. 2
  148. 2
  149. 2
  150. 2
  151. 2
  152. 2
  153. 2
  154. 2
  155. 2
  156. 2
  157. 2
  158. 2
  159. 2
  160. 2
  161. 2
  162. 2
  163. 2
  164. 2
  165. 2
  166. 2
  167. 2
  168. 2
  169. 2
  170. 2
  171. 2
  172. 2
  173. 2
  174. 2
  175. 2
  176. 2
  177. 2
  178. 2
  179. 2
  180. 2
  181. 2
  182. 2
  183. 2
  184. 2
  185. 2
  186. 2
  187. 2
  188. 2
  189. 2
  190. 2
  191. 2
  192. 2
  193. 2
  194. 2
  195. 2
  196. 2
  197. 2
  198. 2
  199. 2
  200. 2
  201. 1
  202. 1
  203. 1
  204. 1
  205. 1
  206. 1
  207. 1
  208. 1
  209. 1
  210. 1
  211. 1
  212. 1
  213. 1
  214. 1
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 1
  228. 1
  229. 1
  230. 1
  231. 1
  232. 1
  233. 1
  234. 1
  235. 1
  236. 1
  237. 1
  238. 1
  239. 1
  240. 1
  241. 1
  242. 1
  243. 1
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 1
  251. 1
  252. 1
  253. 1
  254. 1
  255. 1
  256. 1
  257. 1
  258. 1
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 1
  267. 1
  268. 1
  269. 1
  270. 1
  271. 1
  272. 1
  273. 1
  274. 1
  275. 1
  276. 1
  277. 1
  278. 1
  279. 1
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 1
  291. 1
  292. 1
  293. 1
  294. 1
  295. 1
  296. 1
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 1
  303. 1
  304. 1
  305. 1
  306. 1
  307. 1
  308. 1
  309. 1
  310. 1
  311. 1
  312. 1
  313. 1
  314. 1
  315. 1
  316. 1
  317. 1
  318. 1
  319. 1
  320. 1
  321. 1
  322. 1
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 1
  333. 1
  334. 1
  335. 1
  336. 1
  337. 1
  338. 1
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 1
  351. 1
  352. 1
  353. 1
  354. 1
  355. 1
  356. 1
  357. 1
  358. 1
  359. 1
  360. 1
  361. 1
  362. 1
  363. 1
  364. 1
  365. 1
  366. 1
  367. 1
  368. 1
  369. 1
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 1
  376. 1
  377. 1
  378. 1
  379. 1
  380. 1
  381. 1
  382. 1
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 1
  400. 1
\n", + "
\n", + "\t
$jac_rep
\n", + "\t\t
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 8 × 8 of type dbl
    -1 1 0 0 0 0 0 1
    1-1 0 0 0 0 0-1
    0-1-1 1 0 0 0 0
    0 1 1-1 1 0 0 0
    0 1 0 1-1 0 0 0
    0 0 0 0-1-1 1 0
    0 0 0 0-1 1-1 1
    0 0 0 0 1 0 1-1
    \n", + "
  2. \n", + "\t
  3. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 8 × 8 of type dbl
    -1 1 0 0 0 0 0 1
    1-1 0 0 0 0 0-1
    0-1-1 1 0 0 0 0
    0 1 1-1 1 0 0 0
    0 1 0 1-1 0 0 0
    0 0 0 0-1-1 1 0
    0 0 0 0 1 1-1 1
    0 0 0 0 1 0 1-1
    \n", + "
  4. \n", + "
\n", + "
\n", + "\t
$jac_rep_index
\n", + "\t\t
\n", + "
  1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61. 1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 1
  107. 1
  108. 1
  109. 1
  110. 2
  111. 2
  112. 2
  113. 2
  114. 2
  115. 2
  116. 2
  117. 2
  118. 2
  119. 2
  120. 2
  121. 2
  122. 2
  123. 2
  124. 2
  125. 2
  126. 2
  127. 2
  128. 2
  129. 2
  130. 2
  131. 2
  132. 2
  133. 2
  134. 2
  135. 2
  136. 2
  137. 2
  138. 2
  139. 2
  140. 2
  141. 2
  142. 2
  143. 2
  144. 2
  145. 2
  146. 2
  147. 2
  148. 2
  149. 2
  150. 2
  151. 2
  152. 2
  153. 2
  154. 2
  155. 2
  156. 2
  157. 2
  158. 2
  159. 2
  160. 2
  161. 2
  162. 2
  163. 2
  164. 2
  165. 2
  166. 2
  167. 2
  168. 2
  169. 2
  170. 2
  171. 2
  172. 2
  173. 2
  174. 2
  175. 2
  176. 2
  177. 2
  178. 2
  179. 2
  180. 2
  181. 2
  182. 2
  183. 2
  184. 2
  185. 2
  186. 2
  187. 2
  188. 2
  189. 2
  190. 2
  191. 2
  192. 2
  193. 2
  194. 2
  195. 2
  196. 2
  197. 2
  198. 2
  199. 2
  200. 2
  201. 1
  202. 1
  203. 1
  204. 1
  205. 1
  206. 1
  207. 1
  208. 1
  209. 1
  210. 1
  211. 1
  212. 1
  213. 1
  214. 1
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 1
  228. 1
  229. 1
  230. 1
  231. 1
  232. 1
  233. 1
  234. 1
  235. 1
  236. 1
  237. 1
  238. 1
  239. 1
  240. 1
  241. 1
  242. 1
  243. 1
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 1
  251. 1
  252. 1
  253. 1
  254. 1
  255. 1
  256. 1
  257. 1
  258. 1
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 1
  267. 1
  268. 1
  269. 1
  270. 1
  271. 1
  272. 1
  273. 1
  274. 1
  275. 1
  276. 1
  277. 1
  278. 1
  279. 1
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 1
  291. 1
  292. 1
  293. 1
  294. 1
  295. 1
  296. 1
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 1
  303. 1
  304. 1
  305. 1
  306. 1
  307. 1
  308. 1
  309. 1
  310. 1
  311. 1
  312. 1
  313. 1
  314. 1
  315. 1
  316. 1
  317. 1
  318. 1
  319. 1
  320. 1
  321. 1
  322. 1
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 1
  333. 1
  334. 1
  335. 1
  336. 1
  337. 1
  338. 1
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 1
  351. 1
  352. 1
  353. 1
  354. 1
  355. 1
  356. 1
  357. 1
  358. 1
  359. 1
  360. 1
  361. 1
  362. 1
  363. 1
  364. 1
  365. 1
  366. 1
  367. 1
  368. 1
  369. 1
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 1
  376. 1
  377. 1
  378. 1
  379. 1
  380. 1
  381. 1
  382. 1
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 1
  400. 1
\n", + "
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$loop\\_rep] \\begin{enumerate}\n", + "\\item A data.frame: 31 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 5, 5 & 1 & -1\\\\\n", + "\t 6, 6 & 1 & -1\\\\\n", + "\t 7, 7 & 1 & -1\\\\\n", + "\t 8, 8 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\t 3, 4, 3 & 2 & 1\\\\\n", + "\t 4, 5, 4 & 2 & 1\\\\\n", + "\t 6, 7, 6 & 2 & 1\\\\\n", + "\t 5, 8, 1,.... & 6 & -1\\\\\n", + "\t 5, 8, 1,.... & 5 & 1\\\\\n", + "\t 5, 8, 1,.... & 4 & 1\\\\\n", + "\t 5, 8, 2,.... & 5 & 1\\\\\n", + "\t 5, 8, 2,.... & 4 & -1\\\\\n", + "\t 5, 8, 2, 5 & 3 & -1\\\\\n", + "\t 7, 8, 1,.... & 8 & 1\\\\\n", + "\t 7, 8, 1,.... & 7 & 1\\\\\n", + "\t 7, 8, 1,.... & 7 & -1\\\\\n", + "\t 7, 8, 1,.... & 6 & -1\\\\\n", + "\t 7, 8, 1,.... & 6 & -1\\\\\n", + "\t 7, 8, 1,.... & 5 & -1\\\\\n", + "\t 7, 8, 2,.... & 7 & -1\\\\\n", + "\t 7, 8, 2,.... & 6 & -1\\\\\n", + "\t 7, 8, 2,.... & 6 & 1\\\\\n", + "\t 7, 8, 2,.... & 5 & 1\\\\\n", + "\t 7, 8, 2,.... & 5 & 1\\\\\n", + "\t 7, 8, 2,.... & 4 & 1\\\\\n", + "\t 7, 8, 7 & 2 & 1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\item A data.frame: 31 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 3, 3 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 5, 5 & 1 & -1\\\\\n", + "\t 6, 6 & 1 & -1\\\\\n", + "\t 7, 7 & 1 & -1\\\\\n", + "\t 8, 8 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\t 3, 4, 3 & 2 & 1\\\\\n", + "\t 4, 5, 4 & 2 & 1\\\\\n", + "\t 6, 7, 6 & 2 & 1\\\\\n", + "\t 5, 8, 1,.... & 6 & -1\\\\\n", + "\t 5, 8, 1,.... & 5 & 1\\\\\n", + "\t 5, 8, 1,.... & 4 & 1\\\\\n", + "\t 5, 8, 2,.... & 5 & 1\\\\\n", + "\t 5, 8, 2,.... & 4 & -1\\\\\n", + "\t 5, 8, 2, 5 & 3 & -1\\\\\n", + "\t 7, 8, 1,.... & 8 & 1\\\\\n", + "\t 7, 8, 1,.... & 7 & -1\\\\\n", + "\t 7, 8, 1,.... & 7 & -1\\\\\n", + "\t 7, 8, 1,.... & 6 & 1\\\\\n", + "\t 7, 8, 1,.... & 6 & -1\\\\\n", + "\t 7, 8, 1,.... & 5 & 1\\\\\n", + "\t 7, 8, 2,.... & 7 & -1\\\\\n", + "\t 7, 8, 2,.... & 6 & 1\\\\\n", + "\t 7, 8, 2,.... & 6 & 1\\\\\n", + "\t 7, 8, 2,.... & 5 & -1\\\\\n", + "\t 7, 8, 2,.... & 5 & 1\\\\\n", + "\t 7, 8, 2,.... & 4 & -1\\\\\n", + "\t 7, 8, 7 & 2 & 1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n", + "\n", + "\\item[\\$loop\\_rep\\_index] \\begin{enumerate*}\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item ⋯\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\end{enumerate*}\n", + "\n", + "\\item[\\$jac\\_rep] \\begin{enumerate}\n", + "\\item A matrix: 8 × 8 of type dbl\n", + "\\begin{tabular}{llllllll}\n", + "\t -1 & 1 & 0 & 0 & 0 & 0 & 0 & 1\\\\\n", + "\t 1 & -1 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", + "\t 0 & -1 & -1 & 1 & 0 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 1 & -1 & 1 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 0 & 1 & -1 & 0 & 0 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & -1 & 1 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & 1 & -1 & 1\\\\\n", + "\t 0 & 0 & 0 & 0 & 1 & 0 & 1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\item A matrix: 8 × 8 of type dbl\n", + "\\begin{tabular}{llllllll}\n", + "\t -1 & 1 & 0 & 0 & 0 & 0 & 0 & 1\\\\\n", + "\t 1 & -1 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", + "\t 0 & -1 & -1 & 1 & 0 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 1 & -1 & 1 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 0 & 1 & -1 & 0 & 0 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & -1 & 1 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & 1 & 1 & -1 & 1\\\\\n", + "\t 0 & 0 & 0 & 0 & 1 & 0 & 1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n", + "\n", + "\\item[\\$jac\\_rep\\_index] \\begin{enumerate*}\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item ⋯\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\end{enumerate*}\n", + "\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$loop_rep\n", + ": 1. \n", + "A data.frame: 31 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 5, 5 | 1 | -1 |\n", + "| 6, 6 | 1 | -1 |\n", + "| 7, 7 | 1 | -1 |\n", + "| 8, 8 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "| 3, 4, 3 | 2 | 1 |\n", + "| 4, 5, 4 | 2 | 1 |\n", + "| 6, 7, 6 | 2 | 1 |\n", + "| 5, 8, 1,.... | 6 | -1 |\n", + "| 5, 8, 1,.... | 5 | 1 |\n", + "| 5, 8, 1,.... | 4 | 1 |\n", + "| 5, 8, 2,.... | 5 | 1 |\n", + "| 5, 8, 2,.... | 4 | -1 |\n", + "| 5, 8, 2, 5 | 3 | -1 |\n", + "| 7, 8, 1,.... | 8 | 1 |\n", + "| 7, 8, 1,.... | 7 | 1 |\n", + "| 7, 8, 1,.... | 7 | -1 |\n", + "| 7, 8, 1,.... | 6 | -1 |\n", + "| 7, 8, 1,.... | 6 | -1 |\n", + "| 7, 8, 1,.... | 5 | -1 |\n", + "| 7, 8, 2,.... | 7 | -1 |\n", + "| 7, 8, 2,.... | 6 | -1 |\n", + "| 7, 8, 2,.... | 6 | 1 |\n", + "| 7, 8, 2,.... | 5 | 1 |\n", + "| 7, 8, 2,.... | 5 | 1 |\n", + "| 7, 8, 2,.... | 4 | 1 |\n", + "| 7, 8, 7 | 2 | 1 |\n", + "\n", + "\n", + "2. \n", + "A data.frame: 31 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 3, 3 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 5, 5 | 1 | -1 |\n", + "| 6, 6 | 1 | -1 |\n", + "| 7, 7 | 1 | -1 |\n", + "| 8, 8 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "| 3, 4, 3 | 2 | 1 |\n", + "| 4, 5, 4 | 2 | 1 |\n", + "| 6, 7, 6 | 2 | 1 |\n", + "| 5, 8, 1,.... | 6 | -1 |\n", + "| 5, 8, 1,.... | 5 | 1 |\n", + "| 5, 8, 1,.... | 4 | 1 |\n", + "| 5, 8, 2,.... | 5 | 1 |\n", + "| 5, 8, 2,.... | 4 | -1 |\n", + "| 5, 8, 2, 5 | 3 | -1 |\n", + "| 7, 8, 1,.... | 8 | 1 |\n", + "| 7, 8, 1,.... | 7 | -1 |\n", + "| 7, 8, 1,.... | 7 | -1 |\n", + "| 7, 8, 1,.... | 6 | 1 |\n", + "| 7, 8, 1,.... | 6 | -1 |\n", + "| 7, 8, 1,.... | 5 | 1 |\n", + "| 7, 8, 2,.... | 7 | -1 |\n", + "| 7, 8, 2,.... | 6 | 1 |\n", + "| 7, 8, 2,.... | 6 | 1 |\n", + "| 7, 8, 2,.... | 5 | -1 |\n", + "| 7, 8, 2,.... | 5 | 1 |\n", + "| 7, 8, 2,.... | 4 | -1 |\n", + "| 7, 8, 7 | 2 | 1 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "$loop_rep_index\n", + ": 1. 1\n", + "2. 1\n", + "3. 1\n", + "4. 1\n", + "5. 1\n", + "6. 1\n", + "7. 1\n", + "8. 1\n", + "9. 1\n", + "10. 1\n", + "11. 1\n", + "12. 1\n", + "13. 1\n", + "14. 1\n", + "15. 1\n", + "16. 1\n", + "17. 1\n", + "18. 1\n", + "19. 1\n", + "20. 1\n", + "21. 1\n", + "22. 1\n", + "23. 1\n", + "24. 1\n", + "25. 1\n", + "26. 1\n", + "27. 1\n", + "28. 1\n", + "29. 1\n", + "30. 1\n", + "31. 1\n", + "32. 1\n", + "33. 1\n", + "34. 1\n", + "35. 1\n", + "36. 1\n", + "37. 1\n", + "38. 1\n", + "39. 1\n", + "40. 1\n", + "41. 1\n", + "42. 1\n", + "43. 1\n", + "44. 1\n", + "45. 1\n", + "46. 1\n", + "47. 1\n", + "48. 1\n", + "49. 1\n", + "50. 1\n", + "51. 1\n", + "52. 1\n", + "53. 1\n", + "54. 1\n", + "55. 1\n", + "56. 1\n", + "57. 1\n", + "58. 1\n", + "59. 1\n", + "60. 1\n", + "61. 1\n", + "62. 1\n", + "63. 1\n", + "64. 1\n", + "65. 1\n", + "66. 1\n", + "67. 1\n", + "68. 1\n", + "69. 1\n", + "70. 1\n", + "71. 1\n", + "72. 1\n", + "73. 1\n", + "74. 1\n", + "75. 1\n", + "76. 1\n", + "77. 1\n", + "78. 1\n", + "79. 1\n", + "80. 1\n", + "81. 1\n", + "82. 1\n", + "83. 1\n", + "84. 1\n", + "85. 1\n", + "86. 1\n", + "87. 1\n", + "88. 1\n", + "89. 1\n", + "90. 1\n", + "91. 1\n", + "92. 1\n", + "93. 1\n", + "94. 1\n", + "95. 1\n", + "96. 1\n", + "97. 1\n", + "98. 1\n", + "99. 1\n", + "100. 1\n", + "101. 1\n", + "102. 1\n", + "103. 1\n", + "104. 1\n", + "105. 1\n", + "106. 1\n", + "107. 1\n", + "108. 1\n", + "109. 1\n", + "110. 2\n", + "111. 2\n", + "112. 2\n", + "113. 2\n", + "114. 2\n", + "115. 2\n", + "116. 2\n", + "117. 2\n", + "118. 2\n", + "119. 2\n", + "120. 2\n", + "121. 2\n", + "122. 2\n", + "123. 2\n", + "124. 2\n", + "125. 2\n", + "126. 2\n", + "127. 2\n", + "128. 2\n", + "129. 2\n", + "130. 2\n", + "131. 2\n", + "132. 2\n", + "133. 2\n", + "134. 2\n", + "135. 2\n", + "136. 2\n", + "137. 2\n", + "138. 2\n", + "139. 2\n", + "140. 2\n", + "141. 2\n", + "142. 2\n", + "143. 2\n", + "144. 2\n", + "145. 2\n", + "146. 2\n", + "147. 2\n", + "148. 2\n", + "149. 2\n", + "150. 2\n", + "151. 2\n", + "152. 2\n", + "153. 2\n", + "154. 2\n", + "155. 2\n", + "156. 2\n", + "157. 2\n", + "158. 2\n", + "159. 2\n", + "160. 2\n", + "161. 2\n", + "162. 2\n", + "163. 2\n", + "164. 2\n", + "165. 2\n", + "166. 2\n", + "167. 2\n", + "168. 2\n", + "169. 2\n", + "170. 2\n", + "171. 2\n", + "172. 2\n", + "173. 2\n", + "174. 2\n", + "175. 2\n", + "176. 2\n", + "177. 2\n", + "178. 2\n", + "179. 2\n", + "180. 2\n", + "181. 2\n", + "182. 2\n", + "183. 2\n", + "184. 2\n", + "185. 2\n", + "186. 2\n", + "187. 2\n", + "188. 2\n", + "189. 2\n", + "190. 2\n", + "191. 2\n", + "192. 2\n", + "193. 2\n", + "194. 2\n", + "195. 2\n", + "196. 2\n", + "197. 2\n", + "198. 2\n", + "199. 2\n", + "200. 2\n", + "201. ⋯\n", + "202. 1\n", + "203. 1\n", + "204. 1\n", + "205. 1\n", + "206. 1\n", + "207. 1\n", + "208. 1\n", + "209. 1\n", + "210. 1\n", + "211. 1\n", + "212. 1\n", + "213. 1\n", + "214. 1\n", + "215. 1\n", + "216. 1\n", + "217. 1\n", + "218. 1\n", + "219. 1\n", + "220. 1\n", + "221. 1\n", + "222. 1\n", + "223. 1\n", + "224. 1\n", + "225. 1\n", + "226. 1\n", + "227. 1\n", + "228. 1\n", + "229. 1\n", + "230. 1\n", + "231. 1\n", + "232. 1\n", + "233. 1\n", + "234. 1\n", + "235. 1\n", + "236. 1\n", + "237. 1\n", + "238. 1\n", + "239. 1\n", + "240. 1\n", + "241. 1\n", + "242. 1\n", + "243. 1\n", + "244. 1\n", + "245. 1\n", + "246. 1\n", + "247. 1\n", + "248. 1\n", + "249. 1\n", + "250. 1\n", + "251. 1\n", + "252. 1\n", + "253. 1\n", + "254. 1\n", + "255. 1\n", + "256. 1\n", + "257. 1\n", + "258. 1\n", + "259. 1\n", + "260. 1\n", + "261. 1\n", + "262. 1\n", + "263. 1\n", + "264. 1\n", + "265. 1\n", + "266. 1\n", + "267. 1\n", + "268. 1\n", + "269. 1\n", + "270. 1\n", + "271. 1\n", + "272. 1\n", + "273. 1\n", + "274. 1\n", + "275. 1\n", + "276. 1\n", + "277. 1\n", + "278. 1\n", + "279. 1\n", + "280. 1\n", + "281. 1\n", + "282. 1\n", + "283. 1\n", + "284. 1\n", + "285. 1\n", + "286. 1\n", + "287. 1\n", + "288. 1\n", + "289. 1\n", + "290. 1\n", + "291. 1\n", + "292. 1\n", + "293. 1\n", + "294. 1\n", + "295. 1\n", + "296. 1\n", + "297. 1\n", + "298. 1\n", + "299. 1\n", + "300. 1\n", + "301. 1\n", + "302. 1\n", + "303. 1\n", + "304. 1\n", + "305. 1\n", + "306. 1\n", + "307. 1\n", + "308. 1\n", + "309. 1\n", + "310. 1\n", + "311. 1\n", + "312. 1\n", + "313. 1\n", + "314. 1\n", + "315. 1\n", + "316. 1\n", + "317. 1\n", + "318. 1\n", + "319. 1\n", + "320. 1\n", + "321. 1\n", + "322. 1\n", + "323. 1\n", + "324. 1\n", + "325. 1\n", + "326. 1\n", + "327. 1\n", + "328. 1\n", + "329. 1\n", + "330. 1\n", + "331. 1\n", + "332. 1\n", + "333. 1\n", + "334. 1\n", + "335. 1\n", + "336. 1\n", + "337. 1\n", + "338. 1\n", + "339. 1\n", + "340. 1\n", + "341. 1\n", + "342. 1\n", + "343. 1\n", + "344. 1\n", + "345. 1\n", + "346. 1\n", + "347. 1\n", + "348. 1\n", + "349. 1\n", + "350. 1\n", + "351. 1\n", + "352. 1\n", + "353. 1\n", + "354. 1\n", + "355. 1\n", + "356. 1\n", + "357. 1\n", + "358. 1\n", + "359. 1\n", + "360. 1\n", + "361. 1\n", + "362. 1\n", + "363. 1\n", + "364. 1\n", + "365. 1\n", + "366. 1\n", + "367. 1\n", + "368. 1\n", + "369. 1\n", + "370. 1\n", + "371. 1\n", + "372. 1\n", + "373. 1\n", + "374. 1\n", + "375. 1\n", + "376. 1\n", + "377. 1\n", + "378. 1\n", + "379. 1\n", + "380. 1\n", + "381. 1\n", + "382. 1\n", + "383. 1\n", + "384. 1\n", + "385. 1\n", + "386. 1\n", + "387. 1\n", + "388. 1\n", + "389. 1\n", + "390. 1\n", + "391. 1\n", + "392. 1\n", + "393. 1\n", + "394. 1\n", + "395. 1\n", + "396. 1\n", + "397. 1\n", + "398. 1\n", + "399. 1\n", + "400. 1\n", + "401. 1\n", + "\n", + "\n", + "\n", + "$jac_rep\n", + ": 1. \n", + "A matrix: 8 × 8 of type dbl\n", + "\n", + "| -1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 1 | -1 | 0 | 0 | 0 | 0 | 0 | -1 |\n", + "| 0 | -1 | -1 | 1 | 0 | 0 | 0 | 0 |\n", + "| 0 | 1 | 1 | -1 | 1 | 0 | 0 | 0 |\n", + "| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | -1 | 1 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | 1 | -1 | 1 |\n", + "| 0 | 0 | 0 | 0 | 1 | 0 | 1 | -1 |\n", + "\n", + "\n", + "2. \n", + "A matrix: 8 × 8 of type dbl\n", + "\n", + "| -1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 1 | -1 | 0 | 0 | 0 | 0 | 0 | -1 |\n", + "| 0 | -1 | -1 | 1 | 0 | 0 | 0 | 0 |\n", + "| 0 | 1 | 1 | -1 | 1 | 0 | 0 | 0 |\n", + "| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | -1 | 1 | 0 |\n", + "| 0 | 0 | 0 | 0 | 1 | 1 | -1 | 1 |\n", + "| 0 | 0 | 0 | 0 | 1 | 0 | 1 | -1 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "$jac_rep_index\n", + ": 1. 1\n", + "2. 1\n", + "3. 1\n", + "4. 1\n", + "5. 1\n", + "6. 1\n", + "7. 1\n", + "8. 1\n", + "9. 1\n", + "10. 1\n", + "11. 1\n", + "12. 1\n", + "13. 1\n", + "14. 1\n", + "15. 1\n", + "16. 1\n", + "17. 1\n", + "18. 1\n", + "19. 1\n", + "20. 1\n", + "21. 1\n", + "22. 1\n", + "23. 1\n", + "24. 1\n", + "25. 1\n", + "26. 1\n", + "27. 1\n", + "28. 1\n", + "29. 1\n", + "30. 1\n", + "31. 1\n", + "32. 1\n", + "33. 1\n", + "34. 1\n", + "35. 1\n", + "36. 1\n", + "37. 1\n", + "38. 1\n", + "39. 1\n", + "40. 1\n", + "41. 1\n", + "42. 1\n", + "43. 1\n", + "44. 1\n", + "45. 1\n", + "46. 1\n", + "47. 1\n", + "48. 1\n", + "49. 1\n", + "50. 1\n", + "51. 1\n", + "52. 1\n", + "53. 1\n", + "54. 1\n", + "55. 1\n", + "56. 1\n", + "57. 1\n", + "58. 1\n", + "59. 1\n", + "60. 1\n", + "61. 1\n", + "62. 1\n", + "63. 1\n", + "64. 1\n", + "65. 1\n", + "66. 1\n", + "67. 1\n", + "68. 1\n", + "69. 1\n", + "70. 1\n", + "71. 1\n", + "72. 1\n", + "73. 1\n", + "74. 1\n", + "75. 1\n", + "76. 1\n", + "77. 1\n", + "78. 1\n", + "79. 1\n", + "80. 1\n", + "81. 1\n", + "82. 1\n", + "83. 1\n", + "84. 1\n", + "85. 1\n", + "86. 1\n", + "87. 1\n", + "88. 1\n", + "89. 1\n", + "90. 1\n", + "91. 1\n", + "92. 1\n", + "93. 1\n", + "94. 1\n", + "95. 1\n", + "96. 1\n", + "97. 1\n", + "98. 1\n", + "99. 1\n", + "100. 1\n", + "101. 1\n", + "102. 1\n", + "103. 1\n", + "104. 1\n", + "105. 1\n", + "106. 1\n", + "107. 1\n", + "108. 1\n", + "109. 1\n", + "110. 2\n", + "111. 2\n", + "112. 2\n", + "113. 2\n", + "114. 2\n", + "115. 2\n", + "116. 2\n", + "117. 2\n", + "118. 2\n", + "119. 2\n", + "120. 2\n", + "121. 2\n", + "122. 2\n", + "123. 2\n", + "124. 2\n", + "125. 2\n", + "126. 2\n", + "127. 2\n", + "128. 2\n", + "129. 2\n", + "130. 2\n", + "131. 2\n", + "132. 2\n", + "133. 2\n", + "134. 2\n", + "135. 2\n", + "136. 2\n", + "137. 2\n", + "138. 2\n", + "139. 2\n", + "140. 2\n", + "141. 2\n", + "142. 2\n", + "143. 2\n", + "144. 2\n", + "145. 2\n", + "146. 2\n", + "147. 2\n", + "148. 2\n", + "149. 2\n", + "150. 2\n", + "151. 2\n", + "152. 2\n", + "153. 2\n", + "154. 2\n", + "155. 2\n", + "156. 2\n", + "157. 2\n", + "158. 2\n", + "159. 2\n", + "160. 2\n", + "161. 2\n", + "162. 2\n", + "163. 2\n", + "164. 2\n", + "165. 2\n", + "166. 2\n", + "167. 2\n", + "168. 2\n", + "169. 2\n", + "170. 2\n", + "171. 2\n", + "172. 2\n", + "173. 2\n", + "174. 2\n", + "175. 2\n", + "176. 2\n", + "177. 2\n", + "178. 2\n", + "179. 2\n", + "180. 2\n", + "181. 2\n", + "182. 2\n", + "183. 2\n", + "184. 2\n", + "185. 2\n", + "186. 2\n", + "187. 2\n", + "188. 2\n", + "189. 2\n", + "190. 2\n", + "191. 2\n", + "192. 2\n", + "193. 2\n", + "194. 2\n", + "195. 2\n", + "196. 2\n", + "197. 2\n", + "198. 2\n", + "199. 2\n", + "200. 2\n", + "201. ⋯\n", + "202. 1\n", + "203. 1\n", + "204. 1\n", + "205. 1\n", + "206. 1\n", + "207. 1\n", + "208. 1\n", + "209. 1\n", + "210. 1\n", + "211. 1\n", + "212. 1\n", + "213. 1\n", + "214. 1\n", + "215. 1\n", + "216. 1\n", + "217. 1\n", + "218. 1\n", + "219. 1\n", + "220. 1\n", + "221. 1\n", + "222. 1\n", + "223. 1\n", + "224. 1\n", + "225. 1\n", + "226. 1\n", + "227. 1\n", + "228. 1\n", + "229. 1\n", + "230. 1\n", + "231. 1\n", + "232. 1\n", + "233. 1\n", + "234. 1\n", + "235. 1\n", + "236. 1\n", + "237. 1\n", + "238. 1\n", + "239. 1\n", + "240. 1\n", + "241. 1\n", + "242. 1\n", + "243. 1\n", + "244. 1\n", + "245. 1\n", + "246. 1\n", + "247. 1\n", + "248. 1\n", + "249. 1\n", + "250. 1\n", + "251. 1\n", + "252. 1\n", + "253. 1\n", + "254. 1\n", + "255. 1\n", + "256. 1\n", + "257. 1\n", + "258. 1\n", + "259. 1\n", + "260. 1\n", + "261. 1\n", + "262. 1\n", + "263. 1\n", + "264. 1\n", + "265. 1\n", + "266. 1\n", + "267. 1\n", + "268. 1\n", + "269. 1\n", + "270. 1\n", + "271. 1\n", + "272. 1\n", + "273. 1\n", + "274. 1\n", + "275. 1\n", + "276. 1\n", + "277. 1\n", + "278. 1\n", + "279. 1\n", + "280. 1\n", + "281. 1\n", + "282. 1\n", + "283. 1\n", + "284. 1\n", + "285. 1\n", + "286. 1\n", + "287. 1\n", + "288. 1\n", + "289. 1\n", + "290. 1\n", + "291. 1\n", + "292. 1\n", + "293. 1\n", + "294. 1\n", + "295. 1\n", + "296. 1\n", + "297. 1\n", + "298. 1\n", + "299. 1\n", + "300. 1\n", + "301. 1\n", + "302. 1\n", + "303. 1\n", + "304. 1\n", + "305. 1\n", + "306. 1\n", + "307. 1\n", + "308. 1\n", + "309. 1\n", + "310. 1\n", + "311. 1\n", + "312. 1\n", + "313. 1\n", + "314. 1\n", + "315. 1\n", + "316. 1\n", + "317. 1\n", + "318. 1\n", + "319. 1\n", + "320. 1\n", + "321. 1\n", + "322. 1\n", + "323. 1\n", + "324. 1\n", + "325. 1\n", + "326. 1\n", + "327. 1\n", + "328. 1\n", + "329. 1\n", + "330. 1\n", + "331. 1\n", + "332. 1\n", + "333. 1\n", + "334. 1\n", + "335. 1\n", + "336. 1\n", + "337. 1\n", + "338. 1\n", + "339. 1\n", + "340. 1\n", + "341. 1\n", + "342. 1\n", + "343. 1\n", + "344. 1\n", + "345. 1\n", + "346. 1\n", + "347. 1\n", + "348. 1\n", + "349. 1\n", + "350. 1\n", + "351. 1\n", + "352. 1\n", + "353. 1\n", + "354. 1\n", + "355. 1\n", + "356. 1\n", + "357. 1\n", + "358. 1\n", + "359. 1\n", + "360. 1\n", + "361. 1\n", + "362. 1\n", + "363. 1\n", + "364. 1\n", + "365. 1\n", + "366. 1\n", + "367. 1\n", + "368. 1\n", + "369. 1\n", + "370. 1\n", + "371. 1\n", + "372. 1\n", + "373. 1\n", + "374. 1\n", + "375. 1\n", + "376. 1\n", + "377. 1\n", + "378. 1\n", + "379. 1\n", + "380. 1\n", + "381. 1\n", + "382. 1\n", + "383. 1\n", + "384. 1\n", + "385. 1\n", + "386. 1\n", + "387. 1\n", + "388. 1\n", + "389. 1\n", + "390. 1\n", + "391. 1\n", + "392. 1\n", + "393. 1\n", + "394. 1\n", + "395. 1\n", + "396. 1\n", + "397. 1\n", + "398. 1\n", + "399. 1\n", + "400. 1\n", + "401. 1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "$loop_rep\n", + "$loop_rep[[1]]\n", + " loop length sign\n", + "1 1, 1 1 -1\n", + "2 2, 2 1 -1\n", + "3 3, 3 1 -1\n", + "4 4, 4 1 -1\n", + "5 5, 5 1 -1\n", + "6 6, 6 1 -1\n", + "7 7, 7 1 -1\n", + "8 8, 8 1 -1\n", + "9 1, 2, 1 2 1\n", + "10 3, 4, 3 2 1\n", + "11 4, 5, 4 2 1\n", + "12 6, 7, 6 2 1\n", + "13 5, 8, 1,.... 6 -1\n", + "14 5, 8, 1,.... 5 1\n", + "15 5, 8, 1,.... 4 1\n", + "16 5, 8, 2,.... 5 1\n", + "17 5, 8, 2,.... 4 -1\n", + "18 5, 8, 2, 5 3 -1\n", + "19 7, 8, 1,.... 8 1\n", + "20 7, 8, 1,.... 7 1\n", + "21 7, 8, 1,.... 7 -1\n", + "22 7, 8, 1,.... 6 -1\n", + "23 7, 8, 1,.... 6 -1\n", + "24 7, 8, 1,.... 5 -1\n", + "25 7, 8, 2,.... 7 -1\n", + "26 7, 8, 2,.... 6 -1\n", + "27 7, 8, 2,.... 6 1\n", + "28 7, 8, 2,.... 5 1\n", + "29 7, 8, 2,.... 5 1\n", + "30 7, 8, 2,.... 4 1\n", + "31 7, 8, 7 2 1\n", + "\n", + "$loop_rep[[2]]\n", + " loop length sign\n", + "1 1, 1 1 -1\n", + "2 2, 2 1 -1\n", + "3 3, 3 1 -1\n", + "4 4, 4 1 -1\n", + "5 5, 5 1 -1\n", + "6 6, 6 1 -1\n", + "7 7, 7 1 -1\n", + "8 8, 8 1 -1\n", + "9 1, 2, 1 2 1\n", + "10 3, 4, 3 2 1\n", + "11 4, 5, 4 2 1\n", + "12 6, 7, 6 2 1\n", + "13 5, 8, 1,.... 6 -1\n", + "14 5, 8, 1,.... 5 1\n", + "15 5, 8, 1,.... 4 1\n", + "16 5, 8, 2,.... 5 1\n", + "17 5, 8, 2,.... 4 -1\n", + "18 5, 8, 2, 5 3 -1\n", + "19 7, 8, 1,.... 8 1\n", + "20 7, 8, 1,.... 7 -1\n", + "21 7, 8, 1,.... 7 -1\n", + "22 7, 8, 1,.... 6 1\n", + "23 7, 8, 1,.... 6 -1\n", + "24 7, 8, 1,.... 5 1\n", + "25 7, 8, 2,.... 7 -1\n", + "26 7, 8, 2,.... 6 1\n", + "27 7, 8, 2,.... 6 1\n", + "28 7, 8, 2,.... 5 -1\n", + "29 7, 8, 2,.... 5 1\n", + "30 7, 8, 2,.... 4 -1\n", + "31 7, 8, 7 2 1\n", + "\n", + "\n", + "$loop_rep_index\n", + " [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2\n", + " [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [149] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [186] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [223] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [667] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [704] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [741] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [778] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [815] 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1296] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1333] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1370] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1407] 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1444] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1481] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1518] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1555] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1592] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1629] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1666] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1703] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1740] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1777] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1814] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1851] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1888] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1925] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1962] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1999] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2036] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2073] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2110] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2332] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2369] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2406] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2443] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2480] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2517] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2554] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2591] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2628] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2665] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2702] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2739] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2776] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2813] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2850] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2887] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2924] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2961] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2998] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3035] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3072] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3109] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3146] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3183] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3220] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3257] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3294] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3331] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3368] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3405] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3442] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3479] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3516] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3553] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3590] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3627] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3664] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3701] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3738] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3775] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3812] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3849] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3886] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3923] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3960] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3997] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4034] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4071] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4108] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4145] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4182] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4219] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4256] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4293] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4330] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4367] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4404] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4441] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4478] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4515] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4552] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4589] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4626] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4663] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4700] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4737] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4774] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4811] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4848] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4885] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4922] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4959] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4996] 1 1 1 1 1 1\n", + "\n", + "$jac_rep\n", + "$jac_rep[[1]]\n", + " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", + "[1,] -1 1 0 0 0 0 0 1\n", + "[2,] 1 -1 0 0 0 0 0 -1\n", + "[3,] 0 -1 -1 1 0 0 0 0\n", + "[4,] 0 1 1 -1 1 0 0 0\n", + "[5,] 0 1 0 1 -1 0 0 0\n", + "[6,] 0 0 0 0 -1 -1 1 0\n", + "[7,] 0 0 0 0 -1 1 -1 1\n", + "[8,] 0 0 0 0 1 0 1 -1\n", + "\n", + "$jac_rep[[2]]\n", + " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", + "[1,] -1 1 0 0 0 0 0 1\n", + "[2,] 1 -1 0 0 0 0 0 -1\n", + "[3,] 0 -1 -1 1 0 0 0 0\n", + "[4,] 0 1 1 -1 1 0 0 0\n", + "[5,] 0 1 0 1 -1 0 0 0\n", + "[6,] 0 0 0 0 -1 -1 1 0\n", + "[7,] 0 0 0 0 1 1 -1 1\n", + "[8,] 0 0 0 0 1 0 1 -1\n", + "\n", + "\n", + "$jac_rep_index\n", + " [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2\n", + " [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [149] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [186] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [223] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [667] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [704] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [741] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [778] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [815] 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1296] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1333] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1370] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1407] 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1444] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1481] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1518] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1555] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1592] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1629] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1666] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1703] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1740] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1777] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1814] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1851] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1888] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1925] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1962] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1999] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2036] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2073] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2110] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2332] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2369] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2406] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2443] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2480] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2517] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2554] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2591] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2628] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2665] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2702] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2739] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2776] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2813] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2850] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2887] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2924] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2961] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2998] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3035] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3072] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3109] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3146] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3183] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3220] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3257] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3294] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3331] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3368] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3405] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3442] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3479] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3516] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3553] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3590] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3627] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3664] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3701] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3738] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3775] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3812] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3849] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3886] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3923] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3960] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3997] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4034] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4071] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4108] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4145] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4182] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4219] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4256] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4293] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4330] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4367] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4404] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4441] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4478] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4515] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4552] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4589] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4626] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4663] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4700] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4737] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4774] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4811] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4848] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4885] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4922] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4959] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4996] 1 1 1 1 1 1\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res_tab_all" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "id": "351eb3de", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61. 1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 1
  107. 1
  108. 1
  109. 1
  110. 2
  111. 2
  112. 2
  113. 2
  114. 2
  115. 2
  116. 2
  117. 2
  118. 2
  119. 2
  120. 2
  121. 2
  122. 2
  123. 2
  124. 2
  125. 2
  126. 2
  127. 2
  128. 2
  129. 2
  130. 2
  131. 2
  132. 2
  133. 2
  134. 2
  135. 2
  136. 2
  137. 2
  138. 2
  139. 2
  140. 2
  141. 2
  142. 2
  143. 2
  144. 2
  145. 2
  146. 2
  147. 2
  148. 2
  149. 2
  150. 2
  151. 2
  152. 2
  153. 2
  154. 2
  155. 2
  156. 2
  157. 2
  158. 2
  159. 2
  160. 2
  161. 2
  162. 2
  163. 2
  164. 2
  165. 2
  166. 2
  167. 2
  168. 2
  169. 2
  170. 2
  171. 2
  172. 2
  173. 2
  174. 2
  175. 2
  176. 2
  177. 2
  178. 2
  179. 2
  180. 2
  181. 2
  182. 2
  183. 2
  184. 2
  185. 2
  186. 2
  187. 2
  188. 2
  189. 2
  190. 2
  191. 2
  192. 2
  193. 2
  194. 2
  195. 2
  196. 2
  197. 2
  198. 2
  199. 2
  200. 2
  201. 1
  202. 1
  203. 1
  204. 1
  205. 1
  206. 1
  207. 1
  208. 1
  209. 1
  210. 1
  211. 1
  212. 1
  213. 1
  214. 1
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 1
  228. 1
  229. 1
  230. 1
  231. 1
  232. 1
  233. 1
  234. 1
  235. 1
  236. 1
  237. 1
  238. 1
  239. 1
  240. 1
  241. 1
  242. 1
  243. 1
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 1
  251. 1
  252. 1
  253. 1
  254. 1
  255. 1
  256. 1
  257. 1
  258. 1
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 1
  267. 1
  268. 1
  269. 1
  270. 1
  271. 1
  272. 1
  273. 1
  274. 1
  275. 1
  276. 1
  277. 1
  278. 1
  279. 1
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 1
  291. 1
  292. 1
  293. 1
  294. 1
  295. 1
  296. 1
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 1
  303. 1
  304. 1
  305. 1
  306. 1
  307. 1
  308. 1
  309. 1
  310. 1
  311. 1
  312. 1
  313. 1
  314. 1
  315. 1
  316. 1
  317. 1
  318. 1
  319. 1
  320. 1
  321. 1
  322. 1
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 1
  333. 1
  334. 1
  335. 1
  336. 1
  337. 1
  338. 1
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 1
  351. 1
  352. 1
  353. 1
  354. 1
  355. 1
  356. 1
  357. 1
  358. 1
  359. 1
  360. 1
  361. 1
  362. 1
  363. 1
  364. 1
  365. 1
  366. 1
  367. 1
  368. 1
  369. 1
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 1
  376. 1
  377. 1
  378. 1
  379. 1
  380. 1
  381. 1
  382. 1
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 1
  400. 1
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item ⋯\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 1\n", + "2. 1\n", + "3. 1\n", + "4. 1\n", + "5. 1\n", + "6. 1\n", + "7. 1\n", + "8. 1\n", + "9. 1\n", + "10. 1\n", + "11. 1\n", + "12. 1\n", + "13. 1\n", + "14. 1\n", + "15. 1\n", + "16. 1\n", + "17. 1\n", + "18. 1\n", + "19. 1\n", + "20. 1\n", + "21. 1\n", + "22. 1\n", + "23. 1\n", + "24. 1\n", + "25. 1\n", + "26. 1\n", + "27. 1\n", + "28. 1\n", + "29. 1\n", + "30. 1\n", + "31. 1\n", + "32. 1\n", + "33. 1\n", + "34. 1\n", + "35. 1\n", + "36. 1\n", + "37. 1\n", + "38. 1\n", + "39. 1\n", + "40. 1\n", + "41. 1\n", + "42. 1\n", + "43. 1\n", + "44. 1\n", + "45. 1\n", + "46. 1\n", + "47. 1\n", + "48. 1\n", + "49. 1\n", + "50. 1\n", + "51. 1\n", + "52. 1\n", + "53. 1\n", + "54. 1\n", + "55. 1\n", + "56. 1\n", + "57. 1\n", + "58. 1\n", + "59. 1\n", + "60. 1\n", + "61. 1\n", + "62. 1\n", + "63. 1\n", + "64. 1\n", + "65. 1\n", + "66. 1\n", + "67. 1\n", + "68. 1\n", + "69. 1\n", + "70. 1\n", + "71. 1\n", + "72. 1\n", + "73. 1\n", + "74. 1\n", + "75. 1\n", + "76. 1\n", + "77. 1\n", + "78. 1\n", + "79. 1\n", + "80. 1\n", + "81. 1\n", + "82. 1\n", + "83. 1\n", + "84. 1\n", + "85. 1\n", + "86. 1\n", + "87. 1\n", + "88. 1\n", + "89. 1\n", + "90. 1\n", + "91. 1\n", + "92. 1\n", + "93. 1\n", + "94. 1\n", + "95. 1\n", + "96. 1\n", + "97. 1\n", + "98. 1\n", + "99. 1\n", + "100. 1\n", + "101. 1\n", + "102. 1\n", + "103. 1\n", + "104. 1\n", + "105. 1\n", + "106. 1\n", + "107. 1\n", + "108. 1\n", + "109. 1\n", + "110. 2\n", + "111. 2\n", + "112. 2\n", + "113. 2\n", + "114. 2\n", + "115. 2\n", + "116. 2\n", + "117. 2\n", + "118. 2\n", + "119. 2\n", + "120. 2\n", + "121. 2\n", + "122. 2\n", + "123. 2\n", + "124. 2\n", + "125. 2\n", + "126. 2\n", + "127. 2\n", + "128. 2\n", + "129. 2\n", + "130. 2\n", + "131. 2\n", + "132. 2\n", + "133. 2\n", + "134. 2\n", + "135. 2\n", + "136. 2\n", + "137. 2\n", + "138. 2\n", + "139. 2\n", + "140. 2\n", + "141. 2\n", + "142. 2\n", + "143. 2\n", + "144. 2\n", + "145. 2\n", + "146. 2\n", + "147. 2\n", + "148. 2\n", + "149. 2\n", + "150. 2\n", + "151. 2\n", + "152. 2\n", + "153. 2\n", + "154. 2\n", + "155. 2\n", + "156. 2\n", + "157. 2\n", + "158. 2\n", + "159. 2\n", + "160. 2\n", + "161. 2\n", + "162. 2\n", + "163. 2\n", + "164. 2\n", + "165. 2\n", + "166. 2\n", + "167. 2\n", + "168. 2\n", + "169. 2\n", + "170. 2\n", + "171. 2\n", + "172. 2\n", + "173. 2\n", + "174. 2\n", + "175. 2\n", + "176. 2\n", + "177. 2\n", + "178. 2\n", + "179. 2\n", + "180. 2\n", + "181. 2\n", + "182. 2\n", + "183. 2\n", + "184. 2\n", + "185. 2\n", + "186. 2\n", + "187. 2\n", + "188. 2\n", + "189. 2\n", + "190. 2\n", + "191. 2\n", + "192. 2\n", + "193. 2\n", + "194. 2\n", + "195. 2\n", + "196. 2\n", + "197. 2\n", + "198. 2\n", + "199. 2\n", + "200. 2\n", + "201. ⋯\n", + "202. 1\n", + "203. 1\n", + "204. 1\n", + "205. 1\n", + "206. 1\n", + "207. 1\n", + "208. 1\n", + "209. 1\n", + "210. 1\n", + "211. 1\n", + "212. 1\n", + "213. 1\n", + "214. 1\n", + "215. 1\n", + "216. 1\n", + "217. 1\n", + "218. 1\n", + "219. 1\n", + "220. 1\n", + "221. 1\n", + "222. 1\n", + "223. 1\n", + "224. 1\n", + "225. 1\n", + "226. 1\n", + "227. 1\n", + "228. 1\n", + "229. 1\n", + "230. 1\n", + "231. 1\n", + "232. 1\n", + "233. 1\n", + "234. 1\n", + "235. 1\n", + "236. 1\n", + "237. 1\n", + "238. 1\n", + "239. 1\n", + "240. 1\n", + "241. 1\n", + "242. 1\n", + "243. 1\n", + "244. 1\n", + "245. 1\n", + "246. 1\n", + "247. 1\n", + "248. 1\n", + "249. 1\n", + "250. 1\n", + "251. 1\n", + "252. 1\n", + "253. 1\n", + "254. 1\n", + "255. 1\n", + "256. 1\n", + "257. 1\n", + "258. 1\n", + "259. 1\n", + "260. 1\n", + "261. 1\n", + "262. 1\n", + "263. 1\n", + "264. 1\n", + "265. 1\n", + "266. 1\n", + "267. 1\n", + "268. 1\n", + "269. 1\n", + "270. 1\n", + "271. 1\n", + "272. 1\n", + "273. 1\n", + "274. 1\n", + "275. 1\n", + "276. 1\n", + "277. 1\n", + "278. 1\n", + "279. 1\n", + "280. 1\n", + "281. 1\n", + "282. 1\n", + "283. 1\n", + "284. 1\n", + "285. 1\n", + "286. 1\n", + "287. 1\n", + "288. 1\n", + "289. 1\n", + "290. 1\n", + "291. 1\n", + "292. 1\n", + "293. 1\n", + "294. 1\n", + "295. 1\n", + "296. 1\n", + "297. 1\n", + "298. 1\n", + "299. 1\n", + "300. 1\n", + "301. 1\n", + "302. 1\n", + "303. 1\n", + "304. 1\n", + "305. 1\n", + "306. 1\n", + "307. 1\n", + "308. 1\n", + "309. 1\n", + "310. 1\n", + "311. 1\n", + "312. 1\n", + "313. 1\n", + "314. 1\n", + "315. 1\n", + "316. 1\n", + "317. 1\n", + "318. 1\n", + "319. 1\n", + "320. 1\n", + "321. 1\n", + "322. 1\n", + "323. 1\n", + "324. 1\n", + "325. 1\n", + "326. 1\n", + "327. 1\n", + "328. 1\n", + "329. 1\n", + "330. 1\n", + "331. 1\n", + "332. 1\n", + "333. 1\n", + "334. 1\n", + "335. 1\n", + "336. 1\n", + "337. 1\n", + "338. 1\n", + "339. 1\n", + "340. 1\n", + "341. 1\n", + "342. 1\n", + "343. 1\n", + "344. 1\n", + "345. 1\n", + "346. 1\n", + "347. 1\n", + "348. 1\n", + "349. 1\n", + "350. 1\n", + "351. 1\n", + "352. 1\n", + "353. 1\n", + "354. 1\n", + "355. 1\n", + "356. 1\n", + "357. 1\n", + "358. 1\n", + "359. 1\n", + "360. 1\n", + "361. 1\n", + "362. 1\n", + "363. 1\n", + "364. 1\n", + "365. 1\n", + "366. 1\n", + "367. 1\n", + "368. 1\n", + "369. 1\n", + "370. 1\n", + "371. 1\n", + "372. 1\n", + "373. 1\n", + "374. 1\n", + "375. 1\n", + "376. 1\n", + "377. 1\n", + "378. 1\n", + "379. 1\n", + "380. 1\n", + "381. 1\n", + "382. 1\n", + "383. 1\n", + "384. 1\n", + "385. 1\n", + "386. 1\n", + "387. 1\n", + "388. 1\n", + "389. 1\n", + "390. 1\n", + "391. 1\n", + "392. 1\n", + "393. 1\n", + "394. 1\n", + "395. 1\n", + "396. 1\n", + "397. 1\n", + "398. 1\n", + "399. 1\n", + "400. 1\n", + "401. 1\n", + "\n", + "\n" + ], + "text/plain": [ + " [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2\n", + " [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [149] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [186] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [223] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [667] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [704] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [741] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [778] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [815] 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1296] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1333] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1370] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1407] 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1444] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1481] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1518] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1555] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1592] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1629] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1666] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1703] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1740] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1777] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1814] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1851] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1888] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1925] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1962] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1999] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2036] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2073] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2110] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2332] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2369] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2406] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2443] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2480] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2517] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2554] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2591] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2628] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2665] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2702] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2739] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2776] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2813] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2850] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2887] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2924] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2961] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2998] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3035] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3072] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3109] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3146] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3183] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3220] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3257] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3294] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3331] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3368] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[3405] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3442] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3479] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3516] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3553] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3590] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3627] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3664] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3701] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3738] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3775] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3812] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3849] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3886] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3923] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3960] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[3997] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4034] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4071] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4108] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4145] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4182] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4219] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4256] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4293] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4330] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4367] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4404] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4441] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4478] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4515] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4552] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4589] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4626] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4663] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[4700] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4737] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4774] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4811] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4848] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4885] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4922] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4959] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[4996] 1 1 1 1 1 1" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res_tab_all$loop_rep_index" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "id": "a1881f7e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Draw background in the plot corresponding to the time points where\n", + "# certain loop structures are present\n", + "\n", + "# 1-to-1 time vector (must match loop_rep_index length)\n", + "time_vec <- sort(unique(sol_long$time))\n", + "\n", + "stopifnot(length(res_tab_all$loop_rep_index) == length(time_vec))\n", + "\n", + "# Run-length encode to get contiguous segments of the same loop structure\n", + "r <- rle(res_tab_all$loop_rep_index)\n", + "\n", + "end_idx <- cumsum(r$lengths)\n", + "start_idx <- c(1, head(end_idx + 1, -1))\n", + "\n", + "bands <- tibble(\n", + " loop_type = factor(r$values),\n", + " t_start = time_vec[start_idx],\n", + " t_end = time_vec[end_idx]\n", + ")\n", + "transition_times <- bands$t_end[-nrow(bands)]" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "8725b19d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 840 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot2 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " # background bands (behind lines)\n", + " geom_rect(\n", + " data = bands,\n", + " aes(xmin = t_start, xmax = t_end, ymin = -Inf, ymax = Inf, fill = loop_type),\n", + " inherit.aes = FALSE,\n", + " alpha = 0.1\n", + " ) +\n", + " geom_vline(\n", + " xintercept = transition_times,\n", + " colour = \"grey40\",\n", + " linewidth = 0.7,\n", + " alpha = 0.35\n", + " ) +\n", + " geom_line(linewidth = 2) +\n", + " scale_colour_manual(values = colors) +\n", + " scale_fill_brewer(palette = \"Set2\", name = \"Loop structure\") +\n", + " scale_x_continuous(\n", + " breaks = seq(0, 5000, 1000),\n", + " minor_breaks = seq(0, 5000, 500),\n", + " limits = c(0, 5000),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(0, 5000), clip = \"on\") +\n", + " labs(\n", + " title = \"Dynamics of the Reduced MAPK Model with Explicit Feedback\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " panel.grid = element_blank(),\n", + " panel.border = element_rect(colour = \"black\", fill = NA, linewidth = 1.1)\n", + " )\n", + "\n", + "plot2\n" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "id": "3bc28d1d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 8
len_1len_2len_3len_4len_5len_6len_7len_8
<dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
all85135531
pos05024111
neg80111420
\n" + ], + "text/latex": [ + "A data.frame: 3 × 8\n", + "\\begin{tabular}{r|llllllll}\n", + " & len\\_1 & len\\_2 & len\\_3 & len\\_4 & len\\_5 & len\\_6 & len\\_7 & len\\_8\\\\\n", + " & & & & & & & & \\\\\n", + "\\hline\n", + "\tall & 8 & 5 & 1 & 3 & 5 & 5 & 3 & 1\\\\\n", + "\tpos & 0 & 5 & 0 & 2 & 4 & 1 & 1 & 1\\\\\n", + "\tneg & 8 & 0 & 1 & 1 & 1 & 4 & 2 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 8\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> | len_3 <dbl> | len_4 <dbl> | len_5 <dbl> | len_6 <dbl> | len_7 <dbl> | len_8 <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| all | 8 | 5 | 1 | 3 | 5 | 5 | 3 | 1 |\n", + "| pos | 0 | 5 | 0 | 2 | 4 | 1 | 1 | 1 |\n", + "| neg | 8 | 0 | 1 | 1 | 1 | 4 | 2 | 0 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2 len_3 len_4 len_5 len_6 len_7 len_8\n", + "all 8 5 1 3 5 5 3 1 \n", + "pos 0 5 0 2 4 1 1 1 \n", + "neg 8 0 1 1 1 4 2 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab_all$loop_rep[[1]])" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "id": "0a868f1a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 8
len_1len_2len_3len_4len_5len_6len_7len_8
<dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>
all85135531
pos05014301
neg80121230
\n" + ], + "text/latex": [ + "A data.frame: 3 × 8\n", + "\\begin{tabular}{r|llllllll}\n", + " & len\\_1 & len\\_2 & len\\_3 & len\\_4 & len\\_5 & len\\_6 & len\\_7 & len\\_8\\\\\n", + " & & & & & & & & \\\\\n", + "\\hline\n", + "\tall & 8 & 5 & 1 & 3 & 5 & 5 & 3 & 1\\\\\n", + "\tpos & 0 & 5 & 0 & 1 & 4 & 3 & 0 & 1\\\\\n", + "\tneg & 8 & 0 & 1 & 2 & 1 & 2 & 3 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 8\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> | len_3 <dbl> | len_4 <dbl> | len_5 <dbl> | len_6 <dbl> | len_7 <dbl> | len_8 <dbl> |\n", + "|---|---|---|---|---|---|---|---|---|\n", + "| all | 8 | 5 | 1 | 3 | 5 | 5 | 3 | 1 |\n", + "| pos | 0 | 5 | 0 | 1 | 4 | 3 | 0 | 1 |\n", + "| neg | 8 | 0 | 1 | 2 | 1 | 2 | 3 | 0 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2 len_3 len_4 len_5 len_6 len_7 len_8\n", + "all 8 5 1 3 5 5 3 1 \n", + "pos 0 5 0 1 4 3 0 1 \n", + "neg 8 0 1 2 1 2 3 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab_all$loop_rep[[2]])" + ] + }, + { + "cell_type": "markdown", + "id": "6f592bea", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "### **2.2. Reduced MAPK Model without explicit feedback**" + ] + }, + { + "cell_type": "markdown", + "id": "f59d6720", + "metadata": {}, + "source": [ + "#### **2.1.1. Loop structure (at first)**" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "id": "f152e382", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 7 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11-1
2, 21-1
4, 41-1
5, 51-1
7, 71-1
8, 81-1
1, 2, 12 1
\n" + ], + "text/latex": [ + "A data.frame: 7 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 4, 4 & 1 & -1\\\\\n", + "\t 5, 5 & 1 & -1\\\\\n", + "\t 7, 7 & 1 & -1\\\\\n", + "\t 8, 8 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 7 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 4, 4 | 1 | -1 |\n", + "| 5, 5 | 1 | -1 |\n", + "| 7, 7 | 1 | -1 |\n", + "| 8, 8 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "1 1, 1 1 -1 \n", + "2 2, 2 1 -1 \n", + "3 4, 4 1 -1 \n", + "4 5, 5 1 -1 \n", + "5 7, 7 1 -1 \n", + "6 8, 8 1 -1 \n", + "7 1, 2, 1 2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# compute loops\n", + "res_tab <- find_loops_vset(model_mapk_simple_wo_feedback,vset=list(initial_conditions),t=1,klin=klin,kn=kn,n1=n1,max_num_loops=10)\n", + "# The loop list is reported\n", + "res_tab$loop_rep[[1]] \n", + "# To access a specific loop representation: e.g., the sixth loop, add [6,]" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "id": "8f02f293", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 2
len_1len_2
<dbl><dbl>
all61
pos01
neg60
\n" + ], + "text/latex": [ + "A data.frame: 3 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & len\\_1 & len\\_2\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\tall & 6 & 1\\\\\n", + "\tpos & 0 & 1\\\\\n", + "\tneg & 6 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 2\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> |\n", + "|---|---|---|\n", + "| all | 6 | 1 |\n", + "| pos | 0 | 1 |\n", + "| neg | 6 | 0 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2\n", + "all 6 1 \n", + "pos 0 1 \n", + "neg 6 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab$loop_rep[[1]])" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "id": "b5415ec2", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 2 × 3
looplengthsign
<I<list>><dbl><dbl>
2 2, 21-1
71, 2, 12 1
\n" + ], + "text/latex": [ + "A data.frame: 2 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t2 & 2, 2 & 1 & -1\\\\\n", + "\t7 & 1, 2, 1 & 2 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 2 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 2 | 2, 2 | 1 | -1 |\n", + "| 7 | 1, 2, 1 | 2 | 1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "2 2, 2 1 -1 \n", + "7 1, 2, 1 2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Index of node of interest\n", + "noi <- 2 \n", + "# Return all loops from loop_list containing node 2\n", + "loop_list <- res_tab$loop_rep[[1]]\n", + "loop_list[vapply(loop_list$loop,function(x){noi %in% x},logical(1)),]" + ] + }, + { + "cell_type": "markdown", + "id": "f5fbad0b", + "metadata": {}, + "source": [ + "#### **2.1.2. Calculating the Jacobian matrix**\n", + "\n", + "Sign jacobian matrix can be access via `res_tab` variable that we have calculated above, or derived from a jacobian matrix at a specific state" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "id": "b058ca06", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 8 × 8 of type dbl
-1 10 0 00 0 0
1-10 0 00 0 0
0-10 1 00 0 0
0 10-1 10 0 0
0 00 0-10 0 0
0 00 0-10 1 0
0 00 0 10-1 1
0 00 0 00 0-1
\n" + ], + "text/latex": [ + "A matrix: 8 × 8 of type dbl\n", + "\\begin{tabular}{llllllll}\n", + "\t -1 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t 1 & -1 & 0 & 0 & 0 & 0 & 0 & 0\\\\\n", + "\t 0 & -1 & 0 & 1 & 0 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 0 & -1 & 1 & 0 & 0 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & 0 & 0 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & 0 & 1 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & 1 & 0 & -1 & 1\\\\\n", + "\t 0 & 0 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 8 × 8 of type dbl\n", + "\n", + "| -1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 1 | -1 | 0 | 0 | 0 | 0 | 0 | 0 |\n", + "| 0 | -1 | 0 | 1 | 0 | 0 | 0 | 0 |\n", + "| 0 | 1 | 0 | -1 | 1 | 0 | 0 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | 0 | 0 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | 0 | 1 | 0 |\n", + "| 0 | 0 | 0 | 0 | 1 | 0 | -1 | 1 |\n", + "| 0 | 0 | 0 | 0 | 0 | 0 | 0 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", + "[1,] -1 1 0 0 0 0 0 0 \n", + "[2,] 1 -1 0 0 0 0 0 0 \n", + "[3,] 0 -1 0 1 0 0 0 0 \n", + "[4,] 0 1 0 -1 1 0 0 0 \n", + "[5,] 0 0 0 0 -1 0 0 0 \n", + "[6,] 0 0 0 0 -1 0 1 0 \n", + "[7,] 0 0 0 0 1 0 -1 1 \n", + "[8,] 0 0 0 0 0 0 0 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The corresponding signed Jacobian matrix (at initialization point)\n", + "res_tab$jac_rep[[1]]" + ] + }, + { + "cell_type": "markdown", + "id": "34b4f161", + "metadata": {}, + "source": [ + "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003]." + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "299e548b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
S1
1.01955086432784
S2
98.9804491356722
S3
1.43623788843733
S4
6.07643921148842
S5
292.487322900074
S6
0.0670824395339598
S7
1.04469160783373
S8
298.888225952632
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[S1] 1.01955086432784\n", + "\\item[S2] 98.9804491356722\n", + "\\item[S3] 1.43623788843733\n", + "\\item[S4] 6.07643921148842\n", + "\\item[S5] 292.487322900074\n", + "\\item[S6] 0.0670824395339598\n", + "\\item[S7] 1.04469160783373\n", + "\\item[S8] 298.888225952632\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "S1\n", + ": 1.01955086432784S2\n", + ": 98.9804491356722S3\n", + ": 1.43623788843733S4\n", + ": 6.07643921148842S5\n", + ": 292.487322900074S6\n", + ": 0.0670824395339598S7\n", + ": 1.04469160783373S8\n", + ": 298.888225952632\n", + "\n" + ], + "text/plain": [ + " S1 S2 S3 S4 S5 S6 \n", + " 1.01955086 98.98044914 1.43623789 6.07643921 292.48732290 0.06708244 \n", + " S7 S8 \n", + " 1.04469161 298.88822595 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The function func_POSm4 returns a vector, but deSolve needs the vector within\n", + "# a list as output. Therefore, we define a function that simply puts the output \n", + "# of func_POSm4 into a list:\n", + "func_list <- function(t,x,klin,kn,n1){list(model_mapk_simple_wo_feedback(t,x,klin,kn,n1))}\n", + "sol <- deSolve::ode(y = initial_conditions, times = seq(0,500,1), func = func_list, \n", + " parms=klin, kn=kn, n1=n1)\n", + "\n", + "# Set the last point of the numeric solution as point of interest, omit the \n", + "# first column (it contains the time)\n", + "s_star_end <- sol[dim(sol)[1],2:dim(sol)[2]]\n", + "s_star_end" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "id": "99caeba0", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 8 × 8 of type dbl
-0.006018131 0.0001747516 0.0000000 0.00000000 0.0000000000 0.0000000 0.00000000 2.196046e-05
0.006018131-0.0001747516 0.0000000 0.00000000 0.0000000000 0.0000000 0.00000000-2.196046e-05
0.000000000-0.0021845600-0.1373966 0.02532550 0.0000000000 0.0000000 0.00000000 0.000000e+00
0.000000000-0.0050230608 0.1373966-0.10888315 0.0001189866 0.0000000 0.00000000 0.000000e+00
0.000000000 0.0072076207 0.0000000 0.08355765-0.0001189866 0.0000000 0.00000000 0.000000e+00
0.000000000 0.0000000000 0.0000000 0.00000000-0.0001113063-0.4831478 0.02913389 0.000000e+00
0.000000000 0.0000000000 0.0000000 0.00000000-0.0015164776 0.4831478-0.45519861 7.612218e-05
0.000000000 0.0000000000 0.0000000 0.00000000 0.0016277839 0.0000000 0.42606471-7.612218e-05
\n" + ], + "text/latex": [ + "A matrix: 8 × 8 of type dbl\n", + "\\begin{tabular}{llllllll}\n", + "\t -0.006018131 & 0.0001747516 & 0.0000000 & 0.00000000 & 0.0000000000 & 0.0000000 & 0.00000000 & 2.196046e-05\\\\\n", + "\t 0.006018131 & -0.0001747516 & 0.0000000 & 0.00000000 & 0.0000000000 & 0.0000000 & 0.00000000 & -2.196046e-05\\\\\n", + "\t 0.000000000 & -0.0021845600 & -0.1373966 & 0.02532550 & 0.0000000000 & 0.0000000 & 0.00000000 & 0.000000e+00\\\\\n", + "\t 0.000000000 & -0.0050230608 & 0.1373966 & -0.10888315 & 0.0001189866 & 0.0000000 & 0.00000000 & 0.000000e+00\\\\\n", + "\t 0.000000000 & 0.0072076207 & 0.0000000 & 0.08355765 & -0.0001189866 & 0.0000000 & 0.00000000 & 0.000000e+00\\\\\n", + "\t 0.000000000 & 0.0000000000 & 0.0000000 & 0.00000000 & -0.0001113063 & -0.4831478 & 0.02913389 & 0.000000e+00\\\\\n", + "\t 0.000000000 & 0.0000000000 & 0.0000000 & 0.00000000 & -0.0015164776 & 0.4831478 & -0.45519861 & 7.612218e-05\\\\\n", + "\t 0.000000000 & 0.0000000000 & 0.0000000 & 0.00000000 & 0.0016277839 & 0.0000000 & 0.42606471 & -7.612218e-05\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 8 × 8 of type dbl\n", + "\n", + "| -0.006018131 | 0.0001747516 | 0.0000000 | 0.00000000 | 0.0000000000 | 0.0000000 | 0.00000000 | 2.196046e-05 |\n", + "| 0.006018131 | -0.0001747516 | 0.0000000 | 0.00000000 | 0.0000000000 | 0.0000000 | 0.00000000 | -2.196046e-05 |\n", + "| 0.000000000 | -0.0021845600 | -0.1373966 | 0.02532550 | 0.0000000000 | 0.0000000 | 0.00000000 | 0.000000e+00 |\n", + "| 0.000000000 | -0.0050230608 | 0.1373966 | -0.10888315 | 0.0001189866 | 0.0000000 | 0.00000000 | 0.000000e+00 |\n", + "| 0.000000000 | 0.0072076207 | 0.0000000 | 0.08355765 | -0.0001189866 | 0.0000000 | 0.00000000 | 0.000000e+00 |\n", + "| 0.000000000 | 0.0000000000 | 0.0000000 | 0.00000000 | -0.0001113063 | -0.4831478 | 0.02913389 | 0.000000e+00 |\n", + "| 0.000000000 | 0.0000000000 | 0.0000000 | 0.00000000 | -0.0015164776 | 0.4831478 | -0.45519861 | 7.612218e-05 |\n", + "| 0.000000000 | 0.0000000000 | 0.0000000 | 0.00000000 | 0.0016277839 | 0.0000000 | 0.42606471 | -7.612218e-05 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] [,5] [,6] \n", + "[1,] -0.006018131 0.0001747516 0.0000000 0.00000000 0.0000000000 0.0000000\n", + "[2,] 0.006018131 -0.0001747516 0.0000000 0.00000000 0.0000000000 0.0000000\n", + "[3,] 0.000000000 -0.0021845600 -0.1373966 0.02532550 0.0000000000 0.0000000\n", + "[4,] 0.000000000 -0.0050230608 0.1373966 -0.10888315 0.0001189866 0.0000000\n", + "[5,] 0.000000000 0.0072076207 0.0000000 0.08355765 -0.0001189866 0.0000000\n", + "[6,] 0.000000000 0.0000000000 0.0000000 0.00000000 -0.0001113063 -0.4831478\n", + "[7,] 0.000000000 0.0000000000 0.0000000 0.00000000 -0.0015164776 0.4831478\n", + "[8,] 0.000000000 0.0000000000 0.0000000 0.00000000 0.0016277839 0.0000000\n", + " [,7] [,8] \n", + "[1,] 0.00000000 2.196046e-05\n", + "[2,] 0.00000000 -2.196046e-05\n", + "[3,] 0.00000000 0.000000e+00\n", + "[4,] 0.00000000 0.000000e+00\n", + "[5,] 0.00000000 0.000000e+00\n", + "[6,] 0.02913389 0.000000e+00\n", + "[7,] -0.45519861 7.612218e-05\n", + "[8,] 0.42606471 -7.612218e-05" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "j_matrix <- numDeriv::jacobian(model_mapk_simple_w_feedback, s_star_end,method=\"complex\",\n", + " t=3650,klin=klin, kn=kn, n1=n1)\n", + "j_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "id": "d1b442c8", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 8 × 8 of type dbl
-1 1 0 0 0 0 0 1
1-1 0 0 0 0 0-1
0-1-1 1 0 0 0 0
0-1 1-1 1 0 0 0
0 1 0 1-1 0 0 0
0 0 0 0-1-1 1 0
0 0 0 0-1 1-1 1
0 0 0 0 1 0 1-1
\n" + ], + "text/latex": [ + "A matrix: 8 × 8 of type dbl\n", + "\\begin{tabular}{llllllll}\n", + "\t -1 & 1 & 0 & 0 & 0 & 0 & 0 & 1\\\\\n", + "\t 1 & -1 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", + "\t 0 & -1 & -1 & 1 & 0 & 0 & 0 & 0\\\\\n", + "\t 0 & -1 & 1 & -1 & 1 & 0 & 0 & 0\\\\\n", + "\t 0 & 1 & 0 & 1 & -1 & 0 & 0 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & -1 & 1 & 0\\\\\n", + "\t 0 & 0 & 0 & 0 & -1 & 1 & -1 & 1\\\\\n", + "\t 0 & 0 & 0 & 0 & 1 & 0 & 1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 8 × 8 of type dbl\n", + "\n", + "| -1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |\n", + "| 1 | -1 | 0 | 0 | 0 | 0 | 0 | -1 |\n", + "| 0 | -1 | -1 | 1 | 0 | 0 | 0 | 0 |\n", + "| 0 | -1 | 1 | -1 | 1 | 0 | 0 | 0 |\n", + "| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | -1 | 1 | 0 |\n", + "| 0 | 0 | 0 | 0 | -1 | 1 | -1 | 1 |\n", + "| 0 | 0 | 0 | 0 | 1 | 0 | 1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", + "[1,] -1 1 0 0 0 0 0 1 \n", + "[2,] 1 -1 0 0 0 0 0 -1 \n", + "[3,] 0 -1 -1 1 0 0 0 0 \n", + "[4,] 0 -1 1 -1 1 0 0 0 \n", + "[5,] 0 1 0 1 -1 0 0 0 \n", + "[6,] 0 0 0 0 -1 -1 1 0 \n", + "[7,] 0 0 0 0 -1 1 -1 1 \n", + "[8,] 0 0 0 0 1 0 1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "signed_jacobian <- sign(j_matrix)\n", + "signed_jacobian" + ] + }, + { + "cell_type": "markdown", + "id": "b007c715", + "metadata": {}, + "source": [ + "#### **2.1.3. Temporal dynamics**" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "id": "1d8fa1ab", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 840 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "matplot(\n", + " sol[,1], sol[,2:dim(sol)[2]],\n", + " type = \"l\",\n", + " lty = 1,\n", + " xlab = \"Time\",\n", + " ylab = \"Concentration\",\n", + ")\n", + "\n", + "legend(\n", + " \"topright\",\n", + " legend = all_labels,\n", + " col = 1:8,\n", + " lty = 1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "id": "5cc9b71e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "investigate_label <- c('MAPKK** (S5)', 'MAPK** (S8)')\n", + "investigate_index <- c(6, 9)" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "id": "cf8c7b52", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol_for_plot <- as.data.frame(sol[, c(1, investigate_index)])\n", + "\n", + "# rename columns for clarity (use time + investigate_label)\n", + "colnames(sol_for_plot) <- c(\"time\", investigate_label)\n", + "\n", + "# reshape to long format\n", + "sol_long <- sol_for_plot %>%\n", + " pivot_longer(cols = `MAPKK** (S5)`:`MAPK** (S8)`, names_to = \"species\", values_to = \"value\")" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "e0fc16f0", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 300, + "width": 480 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "options(repr.plot.width = 8, repr.plot.height = 5)\n", + "colors <- c(\n", + " `MAPKK** (S5)` = \"#EE7733\",\n", + " `MAPK** (S8)` = \"#0077BB\"\n", + ")\n", + "\n", + "plot1 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " geom_line(linewidth = 2) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = seq(0, 500, 100),\n", + " minor_breaks = seq(0, 500, 50),\n", + " limits = c(0, 500),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(0, 500), clip = \"on\") +\n", + " labs(\n", + " title = \"Dynamics of Model without Explicit Feedback\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", + "\n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", + "\n", + "plot1\n", + "# ggsave(\"POSm4_plot.png\", plot1, width = 10, height = 8, units = \"in\", dpi = 300)" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "id": "7334152c", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 2
len_1len_2
<dbl><dbl>
all85
pos05
neg80
\n" + ], + "text/latex": [ + "A data.frame: 3 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & len\\_1 & len\\_2\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\tall & 8 & 5\\\\\n", + "\tpos & 0 & 5\\\\\n", + "\tneg & 8 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 2\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> |\n", + "|---|---|---|\n", + "| all | 8 | 5 |\n", + "| pos | 0 | 5 |\n", + "| neg | 8 | 0 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2\n", + "all 8 5 \n", + "pos 0 5 \n", + "neg 8 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res_tab <- find_loops_vset(model_mapk_simple_wo_feedback,vset=list(sol[dim(sol)[1],2:9]),t=1,klin=klin,kn=kn,n1=n1)\n", + "loop_summary(res_tab$loop_rep[[1]])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/model_6_calcium_oscillations_R.ipynb b/examples/model_6_calcium_oscillations_R.ipynb new file mode 100644 index 0000000..8567232 --- /dev/null +++ b/examples/model_6_calcium_oscillations_R.ipynb @@ -0,0 +1,3491 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5c5107a0", + "metadata": {}, + "source": [ + "## **0. Initialization**" + ] + }, + { + "cell_type": "markdown", + "id": "0aa853b2", + "metadata": {}, + "source": [ + "### **Installation**\n", + "LoopDetectR is on CRAN and can be installed within R by" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad430870", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Before running the R code cells in jupyter notebook,\n", + "# initialize the R kernel by this line of code:\n", + "# IRkernel::installspec()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2d7c70f", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'LoopDetectR' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "# Download and install\n", + "install.packages(\"LoopDetectR\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1c741284", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'deSolve' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Installing package into 'C:/Users/Admin/AppData/Local/R/win-library/4.5'\n", + "(as 'lib' is unspecified)\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "package 'numDeriv' successfully unpacked and MD5 sums checked\n", + "\n", + "The downloaded binary packages are in\n", + "\tC:\\Users\\Admin\\AppData\\Local\\Temp\\Rtmpk1kCL5\\downloaded_packages\n" + ] + } + ], + "source": [ + "install.packages(\"deSolve\") # if not already installed\n", + "install.packages(\"numDeriv\") # if not already installed" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1d32152b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "── \u001b[1mAttaching core tidyverse packages\u001b[22m ──────────────────────── tidyverse 2.0.0 ──\n", + "\u001b[32m✔\u001b[39m \u001b[34mdplyr \u001b[39m 1.1.4 \u001b[32m✔\u001b[39m \u001b[34mreadr \u001b[39m 2.1.6\n", + "\u001b[32m✔\u001b[39m \u001b[34mforcats \u001b[39m 1.0.1 \u001b[32m✔\u001b[39m \u001b[34mstringr \u001b[39m 1.6.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mggplot2 \u001b[39m 4.0.1 \u001b[32m✔\u001b[39m \u001b[34mtibble \u001b[39m 3.3.0\n", + "\u001b[32m✔\u001b[39m \u001b[34mlubridate\u001b[39m 1.9.4 \u001b[32m✔\u001b[39m \u001b[34mtidyr \u001b[39m 1.3.1\n", + "\u001b[32m✔\u001b[39m \u001b[34mpurrr \u001b[39m 1.2.0 \n", + "── \u001b[1mConflicts\u001b[22m ────────────────────────────────────────── tidyverse_conflicts() ──\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mfilter()\u001b[39m masks \u001b[34mstats\u001b[39m::filter()\n", + "\u001b[31m✖\u001b[39m \u001b[34mdplyr\u001b[39m::\u001b[32mlag()\u001b[39m masks \u001b[34mstats\u001b[39m::lag()\n", + "\u001b[36mℹ\u001b[39m Use the conflicted package (\u001b[3m\u001b[34m\u001b[39m\u001b[23m) to force all conflicts to become errors\n" + ] + } + ], + "source": [ + "# Load package\n", + "library(\"LoopDetectR\")\n", + "library(deSolve)\n", + "library(tidyverse)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3eb6dbbb", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "colors <- c('#EE7733', '#0077BB', '#33BBEE', '#EE3377', '#CC3311', '#009988', '#BBBBBB')" + ] + }, + { + "cell_type": "markdown", + "id": "de63ff1e", + "metadata": {}, + "source": [ + "## **1. Model definition**" + ] + }, + { + "cell_type": "markdown", + "id": "8ebe4f73", + "metadata": {}, + "source": [ + "#### **Example 6: Calcium oscillations model**" + ] + }, + { + "cell_type": "markdown", + "id": "ed0a97ed", + "metadata": {}, + "source": [ + "The reactions (flows) constituting the model are given by\n", + "$$\n", + "\\begin{aligned}\n", + "\\nu_1 &= k_1,\\\\[6pt]\n", + "\\nu_2 &= k_2,\\\\[6pt]\n", + "\\nu_3 &= k_3 \\cdot \\frac{S_1^{n_1}}{kn_1^{\\,n_1} + S_1^{n_1}},\\\\[10pt]\n", + "\\nu_4 &= k_4 \\cdot \n", + " \\frac{S_2^{n_2}}{kn_2^{\\,n_2} + S_2^{n_2}} \\cdot\n", + " \\frac{S_1^{n_3}}{kn_3^{\\,n_3} + S_1^{n_3}},\\\\[10pt]\n", + "\\nu_5 &= k_5 \\cdot S_2,\\\\[6pt]\n", + "\\nu_6 &= k_6 \\cdot S_1.\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "The model is composed from these six reactions by\n", + "$$\n", + "\\begin{aligned}\n", + "\\frac{dS_1}{dt} &= \\nu_1 + \\nu_2 - \\nu_3 + \\nu_4 + \\nu_5 - \\nu_6,\\\\[6pt]\n", + "\\frac{dS_2}{dt} &= \\nu_3 - \\nu_4 - \\nu_5.\n", + "\\end{aligned}\n", + "$$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "0a5aff3a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "model_calcium_oscillation <- function(t, y, klin, kn, n0) {\n", + " # Unpack state variables\n", + " S1 <- y[1]\n", + " S2 <- y[2]\n", + "\n", + " # Kinetic parameters\n", + " k1 <- klin[1]; k2 <- klin[2]; k3 <- klin[3]\n", + " k4 <- klin[4]; k5 <- klin[5]; k6 <- klin[6]\n", + "\n", + " # Saturation constants\n", + " kn1 <- kn[1]; kn2 <- kn[2]; kn3 <- kn[3]\n", + "\n", + " # Hill exponents\n", + " n1 <- n0[1]; n2 <- n0[2]; n3 <- n0[3]\n", + "\n", + " # Reaction rates\n", + " v1 <- k1\n", + " v2 <- k2\n", + " v3 <- k3 * (S1^n1) / (kn1^n1 + S1^n1)\n", + " v4 <- k4 *\n", + " (S2^n2) / (kn2^n2 + S2^n2) *\n", + " (S1^n3) / (kn3^n3 + S1^n3)\n", + " v5 <- k5 * S2\n", + " v6 <- k6 * S1\n", + "\n", + " # ODEs\n", + " dS1 <- v1 + v2 - v3 + v4 + v5 - v6\n", + " dS2 <- v3 - v4 - v5\n", + "\n", + " dx = rep(0, 2)\n", + " dx[1] = dS1\n", + " dx[2] = dS2\n", + " return(dx)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "44e7e155", + "metadata": {}, + "source": [ + "## **2. Result reproduction**" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "4e5b9062", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Parameters from supplementary material\n", + "initial_conditions_calcium <- c(0.3920, 1.6456)\n", + "klin_calcium <- c(1, 7.3 * 0.4, 65, 500, 1, 10) # Fix k2 to 40% of original value as the new params from Prof. Baum\n", + "kn_calcium <- c(1, 2, 0.9)\n", + "n_calcium <- c(2, 2, 4)\n", + "time_points <- seq(0, 3, length.out = 301)\n", + "\n", + "# Additional variables \n", + "all_labels <- c(\"S1\", \"S2\")" + ] + }, + { + "cell_type": "markdown", + "id": "b927c538", + "metadata": {}, + "source": [ + "### **2.1. Reduced MAPK Model with explicit feedback**" + ] + }, + { + "cell_type": "markdown", + "id": "b9c9522a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "source": [ + "#### **2.1.1. Loop structure (at first)**" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "6c2540e5", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 3
looplengthsign
<I<list>><dbl><dbl>
1, 11 1
2, 21-1
1, 2, 12-1
\n" + ], + "text/latex": [ + "A data.frame: 3 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & 1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | 1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | -1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "1 1, 1 1 1 \n", + "2 2, 2 1 -1 \n", + "3 1, 2, 1 2 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# compute loops\n", + "res_tab <- find_loops_vset(model_calcium_oscillation,vset=list(initial_conditions_calcium),t=1,klin=klin_calcium,kn=kn_calcium,n0=n_calcium)\n", + "# The loop list is reported\n", + "res_tab$loop_rep[[1]] \n", + "# To access a specific loop representation: e.g., the sixth loop, add [6,]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "3d056cc3", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 2
len_1len_2
<dbl><dbl>
all21
pos10
neg11
\n" + ], + "text/latex": [ + "A data.frame: 3 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & len\\_1 & len\\_2\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\tall & 2 & 1\\\\\n", + "\tpos & 1 & 0\\\\\n", + "\tneg & 1 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 2\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> |\n", + "|---|---|---|\n", + "| all | 2 | 1 |\n", + "| pos | 1 | 0 |\n", + "| neg | 1 | 1 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2\n", + "all 2 1 \n", + "pos 1 0 \n", + "neg 1 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab$loop_rep[[1]])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "e9a5ecf2", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 2 × 3
looplengthsign
<I<list>><dbl><dbl>
2 2, 21-1
31, 2, 12-1
\n" + ], + "text/latex": [ + "A data.frame: 2 × 3\n", + "\\begin{tabular}{r|lll}\n", + " & loop & length & sign\\\\\n", + " & > & & \\\\\n", + "\\hline\n", + "\t2 & 2, 2 & 1 & -1\\\\\n", + "\t3 & 1, 2, 1 & 2 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 2 × 3\n", + "\n", + "| | loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|---|\n", + "| 2 | 2, 2 | 1 | -1 |\n", + "| 3 | 1, 2, 1 | 2 | -1 |\n", + "\n" + ], + "text/plain": [ + " loop length sign\n", + "2 2, 2 1 -1 \n", + "3 1, 2, 1 2 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Index of node of interest\n", + "noi <- 2 \n", + "# Return all loops from loop_list containing node 2\n", + "loop_list <- res_tab$loop_rep[[1]]\n", + "loop_list[vapply(loop_list$loop,function(x){noi %in% x},logical(1)),]" + ] + }, + { + "cell_type": "markdown", + "id": "9f0fc026", + "metadata": {}, + "source": [ + "#### **2.1.2. Calculating the Jacobian matrix**\n", + "\n", + "Sign jacobian matrix can be access via `res_tab` variable that we have calculated above, or derived from a jacobian matrix at a specific state" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "05e68bc3", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 2 × 2 of type dbl
1 1
-1-1
\n" + ], + "text/latex": [ + "A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t 1 & 1\\\\\n", + "\t -1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| 1 | 1 |\n", + "| -1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2]\n", + "[1,] 1 1 \n", + "[2,] -1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# The corresponding signed Jacobian matrix (at initialization point)\n", + "res_tab$jac_rep[[1]]" + ] + }, + { + "cell_type": "markdown", + "id": "b4802333", + "metadata": {}, + "source": [ + "The function jacobian from the numDeriv package can be used to determine numerically the Jacobian matrix of an ODE system at a certain set of values for the variables, `s_star`. The approach is that of finite differences (with real step) or complex step approach, the latter of which is supposed to deliver more exact results [Martins et al., 2003]." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "adbc93e2", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
1
0.310611331644207
2
1.87644941000528
\n" + ], + "text/latex": [ + "\\begin{description*}\n", + "\\item[1] 0.310611331644207\n", + "\\item[2] 1.87644941000528\n", + "\\end{description*}\n" + ], + "text/markdown": [ + "1\n", + ": 0.3106113316442072\n", + ": 1.87644941000528\n", + "\n" + ], + "text/plain": [ + " 1 2 \n", + "0.3106113 1.8764494 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "func_list <- function(t,x,klin,kn,n0){list(model_calcium_oscillation(t,x,klin,kn,n0))}\n", + "sol <- deSolve::ode(y = initial_conditions_calcium, times = time_points, func = func_list, \n", + " parms=klin_calcium, kn=kn_calcium, n0=n_calcium)\n", + " \n", + "# Set the last point of the numeric solution as point of interest, omit the \n", + "# first column (it contains the time)\n", + "s_star_end <- sol[dim(sol)[1],2:dim(sol)[2]]\n", + "s_star_end" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "1d134ecb", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 2 × 2 of type dbl
-2.007491 2.856177
-7.992509-2.856177
\n" + ], + "text/latex": [ + "A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t -2.007491 & 2.856177\\\\\n", + "\t -7.992509 & -2.856177\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| -2.007491 | 2.856177 |\n", + "| -7.992509 | -2.856177 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2] \n", + "[1,] -2.007491 2.856177\n", + "[2,] -7.992509 -2.856177" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "j_matrix <- numDeriv::jacobian(model_calcium_oscillation, s_star_end,method=\"complex\",\n", + " t=3650,klin=klin_calcium, kn=kn_calcium, n0=n_calcium)\n", + "j_matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "d9a4b8c8", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
A matrix: 2 × 2 of type dbl
-1 1
-1-1
\n" + ], + "text/latex": [ + "A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t -1 & 1\\\\\n", + "\t -1 & -1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| -1 | 1 |\n", + "| -1 | -1 |\n", + "\n" + ], + "text/plain": [ + " [,1] [,2]\n", + "[1,] -1 1 \n", + "[2,] -1 -1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "signed_jacobian <- sign(j_matrix)\n", + "signed_jacobian" + ] + }, + { + "cell_type": "markdown", + "id": "9fb5ce0e", + "metadata": {}, + "source": [ + "#### **2.1.3. Temporal dynamics**" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "b6906e49", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol <- deSolve::ode(y = initial_conditions_calcium, times = seq(0,2.64,0.01), func = func_list, \n", + " parms=klin_calcium, kn=kn_calcium, n0=n_calcium)\n", + "\n", + "s_star_end <- sol[dim(sol)[1],2:dim(sol)[2]]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "20cd5293", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol <- deSolve::ode(y = s_star_end, times = seq(0,3,0.001), func = func_list, \n", + " parms=klin_calcium, kn=kn_calcium, n0=n_calcium)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "cf1a9580", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 420, + "width": 420 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "matplot(\n", + " sol[,1], sol[,2:dim(sol)[2]],\n", + " type = \"l\",\n", + " lty = 1,\n", + " xlab = \"Time\",\n", + " ylab = \"Concentration\",\n", + ")\n", + "\n", + "legend(\n", + " \"topright\",\n", + " legend = all_labels,\n", + " col = 1:8,\n", + " lty = 1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "76f56970", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 'time'
  2. 'S1'
  3. 'S2'
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 'time'\n", + "\\item 'S1'\n", + "\\item 'S2'\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 'time'\n", + "2. 'S1'\n", + "3. 'S2'\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] \"time\" \"S1\" \"S2\" " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "c(\"time\", all_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "01a98770", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
  1. 'S1'
  2. 'S2'
\n" + ], + "text/latex": [ + "\\begin{enumerate*}\n", + "\\item 'S1'\n", + "\\item 'S2'\n", + "\\end{enumerate*}\n" + ], + "text/markdown": [ + "1. 'S1'\n", + "2. 'S2'\n", + "\n", + "\n" + ], + "text/plain": [ + "[1] \"S1\" \"S2\"" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "all_of(all_labels)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "1f18ff68", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol_for_plot <- as.data.frame(sol)\n", + "\n", + "# rename columns for clarity (use time + investigate_label)\n", + "colnames(sol_for_plot) <- c(\"time\", all_labels)\n", + "\n", + "# reshape to long format\n", + "sol_long <- sol_for_plot %>%\n", + " pivot_longer(cols = all_of(all_labels), names_to = \"species\", values_to = \"value\")" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "273651c0", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABpAAAALQCAMAAACg6sOMAAAAYFBMVEUAAAAAd7tNTU1oaGh8fHyDg4OMjIyVlZWampqjo6Onp6evr6+ysrK5ubm9vb3BwcHHx8fJycnQ0NDR0dHY2NjZ2dne3t7h4eHk5OTp6enq6urudzPv7+/w8PD19fX///9MeKiJAAAACXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO2dC5uayBZFCRpjTI/pMbfjOB2H//8vr4C8C+RRVZxDrfV9M+m2tThV+7A3KmKUAAAACCBauwAAAIAUAgkAAERAIAEAgAgIJAAAEAGBBAAAIiCQAABABAQSAACIgEACAAAREEgAACACAgkAAERAIAEAgAgIJAAAEAGBBAAAIiCQAABABASSNaKK3eF8d7wlS0PdjnEU7U+tW09ztlObf7Q/XsY+ZPwGJo2U13Eofz/kN1R3uGS/X9qPyB92vJqGzR6yn7SV0fWO+tPwfUeoFrUZu6H6sK820C6od+vjN94Zf27nWNx1wAWoY43W3vbmdkt2Rro+86Nx420/wnnMVdUz6TbuIROqnTJS2/M6HnhoZUmr/mN32G4evd7K6HpH/WnovqNU8xlIZUG9Wx+/8c74BNJGQR1rtHe3/euHLNiSnZGOeamNQ9lLPMZ5zFVNnL/7QPp4/vrR9sD784Z7+xEFp/awhjx6uZXx9Y7608B9x6nW1shhIFUF9W59/MY748/tHHsdB05AHWt0dvbD68esTVrm+8Od27e1fxo7VoP3UQ+ZVO/4kZ41FM9T39oeeG7doVv/tTnsKf25HbKvtjK+3lF/GjXgq7yYmQlTyzLcf/7GO6PO7Rx7HQdOQB1rVL1+v77F6W+j3kdZFdP+uSSQip/Tw+MRT5HcB9Lu+euu7YHpDafaHepDXLPwOTZuM+bRy62Mr3fUn0YN+CqQpo8966E9gTRz6+0hCKSNgjrWaPT6fd8wO6m4CqT8zalZm5+HMZBSDfInf/fnb+V90hfX4iSNzQ/TEO/Zn2u3mfPo1VYm1DvqT6MGJJCmVQWSQB1rNHv9/jS71vFzeb/L4WF5xclcj7u/ZW+y70+N07vOD3vbn5P0mP0x3OFi2NL1tKs/znBDjftb6peHt3s1TvuIvn5b/s/H8TGFU3WKwiU9MW/XHb85UO23zgOyMnZno73UfuzO5PVIje2nr6Dlrxu+P38r75MGzFv2EtvRWH9jBZ551D5p7OVWWsvdU297Uu2ppItwzn46lKH4/myr+gIOq2YeO+VWtWi6qVtxt7zWsnhz4rU1MhU0uHXDAozvmPNj4/tqeds70UB9SapMPOK8G/ALgWSN1u72llledtpA3ve3qHoZ6LZ/7q9Pk7uUO/DzluxOcX7Lvnxvonti76H1uPK9EdNpfm/l387lOG3X6Fjb6fl7kYblFttvkTUGSp8hxT0PuDznFd+a9tIapTO1MSM1qjkfi7xJfzjX75P+fM/PbDDWX1+B/jwa3kp7uc31dibVnspb+bdKq8NT3/oCDqrWM3bGuZjcsSg1vVvRffFH+6G1QToamQoa3rqhoUZ2TFnhc5KdnWigvmNEHomEQLJGa3e75jtUupdUx8+X5/3ickfJDt0+ohqXpH2n6t4frS3Ftccd2yN9JE32tb+V55C1XaN+W3bHZqX1QQxnnD1/vGcOcjQ/oCoxLh5Se2j5Y2dqo0ZqVHO+FKn4+PulHkjvzzHSId9rjygend63egZyai/SqK10lttYb3c929sqTTg/R/+juM8t6Q+ktmoGjWrs82HfyxrKEmtDVA+tfupqZCpoeOvdBRjbMa3dorsT9deXvSRLHgmEQLKGYfd7vg2RH+gd6vvq/uN53JftJ/vnYd51X9w734fu+XtR1U+H5pbSIXeX9LWKYidM7/Rmfgsru8/5MdA53e65OZJxHtmmD49KP9JHnIotprVfD1H7OUPU5mp+QDrWLh10VzpWrYzix+7URo3UqOZyf1aRWvn9UrvP/jnmpbZM1Z+v5TOi7LbnYfY56TKwFcNyG+o1rGdnKum9U8vNn/ymT4w+irKbWvWq1qtRfmsaefE9C75bdbey0p1hA4lZo+G3skwb7y7A6I6pboufmrZ2ot76sufv5JFECCRrtPfA5+/H4ubomT7p7fmR36XYl25vu/ww9F7f4bKd6lr+9FHcu9zStbLTt+egxZ/uu9OlebGIe+U3mfXcTTU3b6sqLRzwWt6S7e2d08XrvCXGB5STfh7Atsp4/tid2riRGtVcU5NKo+CcPrR2nsUtqj2peS5Kp/57sQL1GwxrZd6KYbkN9ZrWszOVt6cx58GY3v0UdT4nNaRav0bPm9MnDIfqMCV//lFV2hM1hvabHEjdBRjfMbtmhZ2dqLe+e011kAWBZI32Hvj8Pd2d0uPbj/qenb+adm8/pPmSR/X6XOuVuuKHU1S+SVAEUBT1nW1e2FrxwDdTzc3bqk3X30x53vIRtZ40NN0mfi+31HxAGtDPV8ne67Ntbr07tXEjNaq55hmR5IlRC6TS0Gs/te3yXL8te7fc8Lmy/q0YlttQr2k9O1MpcqXy8eI5U28gdd73MWpU/fH5JHBfu9uz0vRp2bE51kD7TQ6k7gKM75hLdduxs52h+vaRho9khAmBZI32Hljbd1JnOkW1OLmbHnL/eNvXd7ikdfcoagVSdcJxSTbA7s1wit0+qt5QKI9CDa5h3HRx4752/7ZFN8ym2N+7D9hVgw6c1NCd2riRGtVcs9vzX271QIrLtaidfNGo/5mn5WyyDbTflBvaimG5DfWa1rOrSX5An9rzIauieoLX1Kr6ydhf7TnW/njP32251e52qyrteXXQ0H6TA6m7AOM7pnZb9TywthP11VcejoE8CCRrtPfA4vdjvr/sDNdHq368nQ+NHbXPaRo/GPb58p3dztVNG3ceGMHsKVHpuXViw+PyN2Bi8+tgcXOThjJqG+qW9Xqkxt2v2apf0iepu/pHo+rvHKVud2ltYH94b5wYn/79Leq8KTe4FcNyG+o1rWd36umKvmcVpKO/Zc8J2u83DanWrLcziZTsqcfZdLeuRgbVDBsw/LXnpq6qr3U2at/aifrqi4xSgggIJGu0+v95ll1uf7fsOO7Svl/x4612YtGyQCrPkK3OhjWVN9lTavt4u9TO4y5PI0mMD3hhL71mMm6kxt2vmZef8v/VAunQGupgHqLYaHXGVue8hv6tGJbbUK9pPbt1ZM+N0gP+XRp9+6z+di8Nqdastz2HjKzsd9PdumX1F7o4kKIZHVP83NmJegWNTFKCCAgka7T6v3oTIWv/84Bh5B+oiA/nj8ZJDe27lz8NOcLjYLfcMRsvMTXuPNlTavt4a7c3PC5LpOrp4CR76TWTcSM17n7NvDxz8Y9aIN3bQw2f4FH7lEtsegXIvBXDchvqNa2noY6sxijtp7fnTwMx1F3M5kDtOWbkHXgz3K1b1kChKwZSdyfqqy/amaQEERBI1mj1f3VZmmN6VLsv33ntGkb6ru3+1vjjoNMUP9Tfp2hwyT6f3vyg0CGa9R5S88a94f6G+WcXEb8mxgekt9Ten2jN9l7b0LXzuNcjNapJB0g/G5Q/XysDqfrscIH5ZILWbekCHg1/N2/FsNyGek3raagjXc/8LfqP50+dXhpSbXDscm5R86SGa1Vpz/lzpvYzljGwdbOq3VtMHdOssLsT9dW3z+7blhJEQCBZo7m71S7cmR5b36PyULtrGF0/HhdI+XsL+QPz04jujyjKD/0+2nv/zLPsmjfWToEanH+axofE+IBa0ef6bJtld6c2bqRGNakbHbMD4tR9ykAqLoFa0XrX3jyna80EX2/FsNyGek3raaijuAZBUj6B6PTSkGqDYxflpBecKN7rj6ofy/eruhvoajQ9kMyqjuuYZoXdnaivvlv9rBaQBYFkjdrudn3f1Vwj/cshMrlEzWRyPz7Vd7j23cufih9qp4g982/XNJV6ebXPPVY/Dptwt9Lah0SG5p+/R/5hfED1qZJ7+amS6syCQ21DzamNG6lRzT2pfzFs4VPV57lyiqeyw2uRNI4xXm/FsNyGek3r2VdHdW0JUy8NqTY8dvkcY1e6dHq35+t3A2eYdzWaHkjdBRinc6vCi2knGqivuBYgSINAskbUpjwpOv8avGPtfs0fU5PZp29FHEqzGXSa8ofOR9EzY0yvNnnLXuVp1JdVUV46wPCNqE/yo8d7YrS2YovJ7dT+6G1jrPIT/t0HZH8qLiRQHWun52B87KP2hppXang5UreaqPFTUnt6+KR4LmNai+Zt6WbezX/vbMW03IZ6DetpqiNvjLTq/PXG+mtrVW29qjXqbZA860rfUmmeTV4Jsm+N1d9+5oJ6VjNpjFEtwCidmxWmnWbYiQbqO3SkBBEQSNZo7+vVYV51/Fzcr/njpfnAWzI2kO71i3WVV0spaL9vWz8Lqee6aSlVfHYrbW6xmXiNsbJXrs7GB9yq8wCLh1yjzk3dqY0aqVtNx1LTf+or8+o98Oq34kspxmzFtNyGeg3raaoje8ZZPuU0XX9vULVGvQ2Kh34UWyk/BFvVemuNVf7U1chYUM9qJt0xsgUYpXOjwmyPMexEA/Wlf4rbtcD6EEjWaO3qb+0/1X9p/VheFzq7WPQlGRtIyb1zOePqspq7zsVRqstPF8WZLCL/KNM+MVtb/eTa5qcLm2Nlhd2NDyiv0lydilCcZ1C7qTu1USN1qkld9r12U3UJ0YLnFVZNa9G6bRf1hXB7Kynd5TbU252UqY78xMDyz2WgVvcdVq1eb4Ok9i5RdU2E9C+3XVFre6zqp65GpoL6VjPpWYAxOmcVNq9H3t2Jhuo7R+1XEEACBJI1arv5rvxkZU7jrB6TYVyLL4BJ97hDMjqQ0u+9SY3j8Famz/WUvYjR+WBsSv6FMbVvkDFaRPoqyK71Ilbtx4/sFL72FNtjZdZx6HnA2/N7bKqHZAtwaMZCZ2qjRmpXkxZSP8bvXjfmkhunaS1at3XOa+jdSkZnuY31tidl1KR6BlZ9KVLzvi9Uq25okJt9+XbKLg+g/C/lt3G1xhpqP1NB3dVq0lX1tc75v/k3NhX36exEg/X1nqIKa0Ig+aB2VS0A8fQkB4Br6DsPGC6iCiAX+hVWgr5zT/blRLxeDWogkGAl6DvXPF+s5+tXQA0EEqwEfeeaPI94Bwn0QCDBStB3rklPXDpyOg8ogkCClaDvAABABAQSAACIgEACAAAREEgAACACAgkAAERAIAEAgAgIJAAAEAGBBAAAIiCQAABABAQSAACIgEACAAAREEgAACACAgkAAETgKpAiAAAQhSO7tweBBAAQBo7s3h7uAsnRwAAAMAMFrkwgAQCEgAJXJpAAAEJAgSsTSAAAIaDAlQkkAIAQUODKBBIAQAgocGUCCQAgBBS4MoEEABACClyZQAIACAEFrkwgAQCEgAJXJpAAAEJAgSsTSAAAIaDAlQkkAIAQUODKBBIAQAgocGUCCQAgBBS4MoEEABACClyZQAIACAEFrkwgAQCEgAJXJpAAAEJAgSsTSAAAIaDAlQkkAIAQUODKBNIUvpSsXQl4ALnDYvN6K3BlAuk1XwZYuzawD3IHRUByK3BlAmmQoSzabNuGC3IHRXByK3BlAqmPUd26xa4NE+QOiyDlVuDKBJKJSe60saYNEOQOi2DlVuDKBFKbGe60qaYNDeQOiqB3bwWuTCA1mN2uW2nZwEDvoAhdbgWuTCBVjO7KLfdsOCB3WKC3BlcmkJ6MaNQRj/FbM8xnhtzorRfkTlHgygRSxuRm7X2kj2phIdPNqe+RXsqFZcyXu/1QH9U6RIErE0jLn6Jvqme3D3KHBXKXKHDl4ANpYbsaBnFUKNjAitwJcmsBuesocOWwA8lKu3ZGsl4mWMKJ3tarBEsgdwsFrhxyIFlr1/ZoNosEayB3ULjavW3W6BkFrhxuIFlt19aAtmoEa1iXexsWtVkc7t62SvSPfFcONZDs21NjVAsVgk3cyo3ewkBuM8JdOSXIQHLSr42BrYwGlnAuN3pLArn7EO3KOQEGkqt+bYxtbURYiLOjj2QLFrU9kLsfwa5cEFwguYyjhESShi+50VsEyD2IWFeuCCyQ3PZror9lt4Vjf0o4AJEFu/cwQl25TkiB5N6eEhxKED7kRm8xIPdLJLpyi3ACyUu/Jtpbdjv41tvN6DASdu8RyHPlDsEEkqd+TZS37FZA7qDwFUeJ7gMQca7cJZBA8tevie6W3QbIHRRe5dastzBXNhFEIPltWI6ZV8az3Jodagsg92hEubKZ7QeS735NVLesfvzrjdwrwu49ATmu3MvWA2mFfk00t6x2kDsoVtm99cotxZUH2HYgrRNHmltWNyvpjdzrwO49ERmuPMimA2mlfk0Ut6xmkDso1oojxXKLcOVhNhxI6/mT4pbVC3KHBXpPR4Arv2KzgbRmvyZ6W1YryB0WyD2H1V35NRsNpJX9SW/LKgW5g0LK7u19uwshkNZh9X5N1LasSuTIjd4eELB7K5WbQFqF9fs1IZD8IcCf1DqUQpB7PgTSCkjo10Rty6pDhD8lHIB4QpjcyvQmkLwjpWGVdqw2xMiN3l5A7kUQSJ6R408cMvtAntzo7RBBcuvcvQkkv0hqWBzKOaLk1ulQqpAo99plTINA8oksf8KhXCNT7vUL2SjCdm8pdUyCQPKHsH5NCCS3oHdQILcNCCRviOtXpcdQSpDnTzodSgnIbQcCyRMSG1Zny6pAtNxSytkQyG0JAskLMv2JQHKFbLnlFLQR2L2tQSD5QGi/quxYBYiVG72dIFZveRW9hEByj9h+5ZDZCfL1XruMTSFfbllFDUMguUZwvyY4lH1E6y2zKs1okFtaWUMQSI4R3bA4lG2QOyiEy61QbwLJKdIbVmHHika63nIrU4l0uRXu3gSSS8Q3LA5lE/lyK3QowSC3fQgkdyjwJ40tKxXkDgsNesuuzgSB5AwF/ZrgUNbQ4E/IbQ0dcuvTm0ByhJKG1dexQkHuoFAitz69CSQnaIkjhR0rEjVyJwpKlA+7tzMIJBfoaVgcygL65BZepHCQ2x0EkgMUNazClhUHcgeFpsMPfcebBJJ1VPUrDrUU5A4L9HYKgWQZXcdPib6OFQZyBwW7t2MIJLto61d9HSsKdf6k7zUcUWiVW0etKQSSTfT1a4JDLUCj3rqqFQVyu4dAsojGhtXXsmJA7rDQrPfaVYyGQLKHzobFoWaC3EGhVG5tehNIttDasNo6VgjIHRbo7QcCyRJqG1Zbx8oAuYNCr9za9CaQrKC4YbV1rAQ0y63tTQUJaNZbWdUEkg0U92uCQ01Gsz+pc6j1QW6PEEjL0d2w6lp2dZA7KJTv3soKJ5AWo7xh1bXsyiB3UCC3XwikpWhvWHUtuy7IHRTq80ib3ATSMvQ3rLqWXRPkDoovG9BbWfEE0iL092uirmVXZBNycxLLWDYQR4k2uQmkBWyjYbW17Gogd1hsSm4tMyCQ5rORhsWhxrGVPELucWxLbi1TIJDmshl/wqFGsTW5lU/CNci9DgTSTDaUR8padhWQOyyQeyUIpHlsqGG1tewaIHdQIPdqEEhz2NLxcqKtZVcAuYNiW3LrekWeQJrBxhoWhxoGuYNiY0ebBJJtxAXS1hoWhxpkc3LrcijfbC6PdMlNIE1lc/2aKGtZv2zPn5B7COReFwJpIhtsWGUt6xXkDootHn7oegGEQJrEJhsWh+ply3JvaEK2QO7VIZCmsM2GJZB62Ojhhy6H8ghyrw+BNIGNNqyylvUGcgcFckuAQBrPZjtWV8v6ArmDArlFQCCNZbsNq6xl/YDcYbFhvVXNikAayYYbVlnLegG5w2LLcqt6i5hAGsWm/QmH6rBtvTc7sblsW24CyS4CAmnjDYtDtUDuoAhj9167inEQSCPYesPiUA1CkXubk5vM5uUmkOyydiB9CaVjNzq5qWxfbvSugdyiIJBeEUDDcshcIwC5VTmUYwLavdcuYxQE0gtCaFhdLesU5A6KAF79SHTJTSANE0K/Jrpa1iVB+BNyFyC3OAikIQJpWF0t644wjpcT5H6C3PIgkAYIpWF1tawzkDsskFsgBFI/wTSsrpZ1RTh5hNwJcguFQOojoIbV1bKOCEnvQKY5BHLLhEDqIaSG1dWybkDuoEBuoRBIZsLKI1Ut6wLkDoow5VYxVQLJSFgNG7xDIXdQBJZHqvQmkAwE17CaOtYByB0U7N6CIZC6hNewmjrWOuHKHcp0m4Qnt6bdm0DqEGDDaupY2wSYR+gd2PQVzZdAahGkP2nqWMugd1Agt3AIpCZhNqymjrVLmHIHqzdyS4dAahBoHmnqWKsEKneoeiO3eAikOqE2rKaOtUiohx+B6o3cCiCQagTbsJo61h7hyh2k3uHmkSa5CaSSgBtWU8daI2C5Q9Sb3VvFtAmkgoD7VVXHWiJkfwpc77VL8Y+iiRNIT4Ju2PA+KRl2HmlyKDsgt5KZE0g5YTesqpa1QeB5hNxhoWjqBFJK6A2rqmUtgNxBTR659UyeQErIo0RVyy4HuYOaPXIrmj6BRMOmBDR/Dj+CkpvdO9GkN4FEw6aEswDInag6ZF4Ihx8pehaAQKJhU4JZAeTOCGUJyKMMPSsQeiDRsDmhLAFy5wSyBsido2cNAg8kGvZJGIvA4UdBGIuA3E/0LELYgUTDFgSxCuRRSRCrgNwFelYh6ECiYUtCWAbkrghhHdC7RM8yEEhalHJLAOuAP9XY/kIgdw09C0EgKRHKMdtfCAyqzuZXArnr6FkJAkmFTM7Z/FJgUA22vhTI3UDPUhBIGlRyj56OnQX+1GLji4HeTfSsBYHkaHRl6OnYOeBPbTa9Gl/Qu4WexQg+kBwNrg09HTsD/KnDppcDvdvoWY3AA8nR0PrY8g6MP3XZ8Hogdxc967HRQPoZ13/7L85pjRtpEMgXelp2Irx+Y2K7C4LcBvQsyDYD6X/N8PndE0hLqtoaelp2IhiUic2uCHKb0LMiClx5eoV/tcLnZ/w/07jyp+4RPS07DfzJyFbXhDwyomdJFLjy1Ap/fY3/agbSt/iPaVz5U/eInpadAv7UwzYXhZdne9CzKApceWqF8bffSSOQ/ou/GseVP3WPqOnYKeBPfWxyVcijXtSsigJXnlrh78d/jUD6Hf/49S3+9qs9rvype0RNx04Af+pli8uC3P2oWRcFrjynwkYg/Xye0/C9Na78qXtETceOB4PqZ4MLg9wDqFkYBa68OJC+xf88/v/ne9x8jqRg6h5R07Fj4fWbQTa3Msg9hJqVUeDKiwPpyZ/4W3Nc+VP3iJqOHQl5NMzWlga5B1GzNApc2VYgtW9UMHWPqOnYceBPL9jY4iD3MGoWR4ErE0g+UNOxoyCPXrGt1UHuF6hZHQWuvDiQvsb/pf/8E//VHFf+1D2ipmPHQB69ZEvLg9wvUbM8ClzZwll2P/7LTmr4pzmu/Kl7RE3HjgCDes2G1ge5X6NmfRS48pJAyv/9np/2/bM1rvype0RNx74GfxrBdlaIPBqBmgVS4MrLAyn59S2Of/zTuo+CqXtETce+BH8aw2aWiDwag5oVUuDK7r4PydHAKlHTsS/An8axlTVC71GoWSIFrkwg+UBNxw6DP41kI4uE3uNQs0YKXJlA8oGajh0EfxrLNlYJuUeiZpUUuDKB5AM1HTsEeTSaTSwTco9FzTIpcGUCyQdqOnYA8mg8G1gn5B6PmnVS4MoEkg/UdGw/GNQE9C8Uck9AzUIpcGUCyQf69238aQrql4o8moKalVLgygSSF9S0bA/40yS0rxV5NAk1S6XAlc0V3i+nQxxFUXw4Xe7zxpU/dZ+oaVkz+NM0lC8WeTQNNWulwJVNFV72UZ3DZc648qfuEzUtawJ/moru1ULviahZLAWu3K3w/HhqtDtdrtkv1/fT49f4PH1c+VP3iZqWNYA/TUbzciH3ZNQslwJXblf4sYvi061x0/X0SKiPqePKn7pP1LRsFwxqOprXC7mno2XBFLhyu8Ioeuve6X6ePBMFU/eJlo7tQh7NQPGCIfcMtKyYAlduV3gwn8NwP04dV/7UfaKlYzuQR3NQu2LIPQstS6bAlTnt2wtaOrYNBjULrUuG3PPQsmYKXJlA8oKWjm2BP81D6aKRRzPRsmgKXJlA8oKWjm2CP81E56qRR3PRsmoKXJlA8oKWjm2AP81F5bKRR7PRsmwKXJlA8oKWjq2DP81G47qRR/PRsm4KXPl1hfMmoWDqPtHSsRX40wIULhxyL0DLyilwZQLJC1o6toQ8WoK+lUPuJWhZOgWuzEt2XtDSsQXk0SLULR1yL0LL2ilwZQLJC1o69gl5tAxta4fcy9CyeApcmUDygpaOzSGPFqJs8ZB7IVpWT4ErE0he0NKxGeTRUlStHnIvRsvyKXBlY4VRk1njyp+6T7R0bAr+tBhN60ceLUfL+ilwZQLJC1o6NiGPbKBoAckjC2hZQAWu/KLCj3085/tiVUzdJ1o6ljyyg5olJI9soGUFFbjyywr30e3VXYzjyp+6T7R0LHlkBy1rSB5ZQcsSKnDllxV+RFO/CikfV/7UfaKlY/EnOyhZRPLIDlrWUIErj7hSQzxrXPlT94mSjsWfLKFjFZHbEjpW8YsGV+bSQV5Q0rEYlCVULCNy20LFMj4KVODKLyu8RLtZ48qfulcUtCyv39hDwzoitzU0rOOXbQTSJY7Os8aVP3WvKGhZDMoeChYSue2hYCG/aA6kxqeQ9vPGlT91r8hvWQzKIvJXErktIn8lv2wlkPaznh8RSG3EtywGZRPxS4ncNhG/lF90B5KNceVP3SvSWxaDsor0tURuq0hfy0JsBa5MIPlBdst+waDsInwxkdsyslezVFuBKxNIfhDdseSRbWSvJnLbRvRyVnIrcGUCyQ+SO5Y8so7k5URu+0hez5rcClyZQPKD4I7FoOwjeT2R2z6CF7QutwJXJpD8ILdjySMHCF5Q5HaA3BVtyK3Albl0kB/Edix55AK5K4rcLhC7pE25FbgygeQHqR2LPzlB7JqitxOkrmlLbgWuzEt2fhDasfiTG6QuKnq7QeiituVW4MoEkh9kdiz+5Aihq4rejpC5qh25FbgygeQHkR2LP7lC5rKitytELmtXbgWu/LLC28dh1rjyp+4ViR2LP+reqnoAACAASURBVDlD4rp+QW9nSFxXg9wKXNlc4e1Yv973rHHlT90rAjsWf3KHwIUljxwicGFNcitwZWOF97gWR7uPWePKn7pXar3x+WDtchLyyCn1lZUmN3rbR8nurcCVjRW+Rbt7Ej/+dH+Po8u8ceVP3StVc3x+imhZ/Mkl4uRGb6eUS/spRG+z3Apc2VjhPk2hQ3R9/HiL4/usceVP3Svtjl27ZfEnp7QDaW250dstSnZvBa7c8wV9j/+d8+8uP0dvs8aVP3WvFO3x+SmiZfEnt3QMamWHQm+3dHZvEeV05Fbgyv2BdI2y0+vu877DXMHUvSIrkPAnxwgLJOR2jJLdW4Er9wdSUT1n2dmg27FrtiwG5RihcqO3I0QFUr/cCly55z2k9H2jOLpl9yCQLPDskE8RDoU/uUZUIJFHzpG0ew/IrcCVjRWeslPrjtmbSB/Rbta48qfuFZEdu1oF26er99qloLdDBO3eQ3IrcGVjhdcovibJJf3/dRedZo0rf+peMXTsWi2LP3lAjkORRx5QIrcCVzZXeMoqP2UfjI3njSt/6l6RE0gYlA/EOBRy+0DM7j0stwJX7qnwkr1Od95F8aznRyqm7hUlHQuWkBJIyO0FKbv3C7kVuDJX+/aDqWPXaFkMyg9CHAq5/aBEbgWuTCB5QkbLYlCeQO6gUCK3AlduV3gwXyjofpw6rvyp+6XesqtdTwaD8oUIh0JuXyiRW4ErtyuM8gsGNbmfJ89EwdT9IiGQMChvmBzKt97I7Q0lcitw5XaFH+l5DLfGTdfTjO+gUDB1v5gCyXPLYlD+QO6gaATSOsebY+RW4MrdCs/xI39Ol2v2y/X99Pg1NjxrejWu/Kn7peFQq7QsBuUR5A6K9eUe9fFCBa5sqvCyr39fbHSY841ICqbul9VbFoPyCXKHRU3vlY8/hu6kwJXNFd4vp0P6rbHx4XSZ9XVIGqbul7UdCoPyilFuj3ojt19MgbTK7j14LwWuzGnfnljZoTAovzTl9n8Agtx+aQSSWLkVuDKB5Il1HYo88szKgYTcnlk3kMbu3gpcmUDyxKoORR75Rsjxh68NBs+qgTR691bgygSSJ5odu1YgedoeyDj+8LQ9MAeSJ73HH24qcGUCyRNrBhIG5R1zIPnRm+fD/llx954gtwJXJpA8IaFjvWwNUlpy+9SbPFoBHbu3AlcmkDyxXsfiTyuwXiCRR2ugY/dW4MoEkifMDuVvwxiUVwQEkodtQYE5kDzoPUluBa5MIHliLYcij1ahR26PejvfEtRYffcedW8FrkwgeUJHx4Il2nL70hu516HSO//dt9wE0qtx5U/dLysFEga1DisFEnKvxDqBNPXlDwWuTCB5Yp3XcDColVgnkHh9di1WCaTJcitw5Z4K33a1y33PGlf+1P2yikPhT2uxrtzo7ZueQBK2eytwZXOFceP7J2aNK3/qflnDoTCo1ejI7eG0SuRej3Yged29Rz9CgSsbK3yL4jnfgdQYV/7U/bJCIGFQ69EXSF70drgNMLNCIM2QW4ErGyvcRUvzSMPU/bJmIDncBphZIZCQe0X8B9Icuae58uWYvnFzeLtNrGzyhhqPtDuczSG2hf/XcDCoFfEfSMi9JtsLpFt1GsFpcnEEkni8OxQGtSa9crvSG7lXpRNIro83Z+k9wZXvcXT4SL8t/Pr2+GlqdfMxVniMrovHJZCa+A4kDGpVunKj95bpCyRZck9w5VP1vOgWL38LZzTGCj+WRyKB1MJzx37BoNZlLb3dDA8v0CH3BFeOa3e9eHyKZK7w9Hi6tnBcAqlJb8e6aVkMamX8OhRyr8xKcrsLpMZds18e/7vuo2h/Lm69HuMoOpRPni7HKIpPt8ajm3d5P0T1B5i3ay6GzyHZptuxLlsWg1qbUu/yFh9yo/dK+D3enCv3BFfedU5liKJLngf7/PfTMx6ez54Oz18vtQ0177KPGo/vKdFcN4FkG6+BhD+tzjqB5GJwGIGO3XuCK587z2XSKLkmycfzHIfnh1Uvu+iY/nrIfr0/Iuhebqh5l1P28ORjF52TfriWnSdW6VgHQ8M4fAYSebQ6Pnfv+XJPceXs+cz+eM5OtcsfvMv+vcfpOW/3KH7+YZf+eo3i/MW6Y/bMKttQ6y7Fu1K35zg9JY6vcBIEUhuPDoVBrU+v3Pb1Ru716crtbPdeIPckVz4XF5DbX54Pfn/+Ic2ct/LMu0v666l42nPP4ibbUOsuUTTmE7YEki/8ORQGJQB/DoXcAthgID2e9pyPu+qTsWWg3NJ3gfbVUGkE7Ztpk22odZfDY5zLPXlBX4XXU1rK/jT3A0kEUhv/DmV7XJgAgRQU/XLb1nuJ3HNc+eMU52cqVA9Of2qdZdAa+XlaXuMut+wZ1+40fP52T4WncqDj9CmUFUENbw6FQUkAuYPCILcbvRfJPdOVT9lpDEsDKbkd8x/j6Sc1PPLoLX1udH2bm0gEUhtfDoVBiQC5g8J7IM168HhXbtzzXnwOqfZHUwK1fjVs7XrOzg4fSCRjhZfilInsedasj8gSSG08ORQGJQNfr+EgtwwKvWs3ydu9x7vyvnG1oGe+PEPhmr+HdG3ev0iMKC4esDdfge5jP3SaXc+17KoIO897ikQgtfHkUASSDDwdMiO3EDwH0rxHj3flc/3jq1kCtc6yOzU/OFueZXfJ8iLbUOsucVSdQD5Qornu6mSIe5Z4kyGQ2vhxKAxKCMgdFoZAcnDB74V6T7qWXZUm+yyKomcS3OL8g0fFc6jsSnfXIib21QkQrbuU+XSd/Aypex2jyRBIbbw4FAYlBb+BZHFImEV/IAnavSe48kd68kF2HsE5zp8tpafIfTzC5XmlhlMUnR/PW26Pf9O7HaLdI31u++K+3bvco+iYvq73GOB9oERz3fVnSASSFbwGkr0RYR4cf4SFj0BaLPcUV75WX9B3fD74EtcvXleeiZ0/DdrXL1TXupZdfpdL8dvQF/7xHpIvfDgUBiWGAbnt621tQJjL5gKp+Arz/fMC3umD78dHOpVnO3ykl/LevxVPXi6Hx1Ooc3NDzbvc0g+3xsfBz7aOOMtu1pczEUhtTA5l+VVm8kgOA3Jb19vWeDAfD4G0fPde5Mp+LN28kSOfQ7KOqWMttywGJQcPgcTxhyAGdm/Lm1ggt9pASo5cqcE27gMJgxKEx0CyNBwswd/uvWAIvYGUXE97rmVnFRUdC7ZwH0gcf0jC+e5tQ27FgbR4XAKpxVDHWmlZ/EkSRrmtvoaD3pLwFkhLxiCQoGTIoQikzYHcYeE6kKw8H1bgygSSL1w7FAYlCl9yo7cMHAeSHbkVuHK7wu51w/lgrB0IpKBA7rDwFEjLRlHgygSSLxw7FAYli0G5l+vNEyRhmOWwvXeHF0jWxpU/dc+4dSgMShhmua0dgCC3MIYCSYzcClyZQPKFW4fCoISB3GHhJZCWDqPAlQkkXzh1KJ4gSQO5w8JpINmSW4Erv/z6Cb4PyRJeHGrhMGAN5A6LwUCSorcCV+b7kHzh0qEwKHEMy71Mb54gyaNHEVm7twJXfhlIFwLJDj4catEgYBWHDoXc8vAgd5CBdI468H1IVugJJBsti0EJxJ1DIbdAVBx/KHDlToX7VhzFfP2EHQiksCCQgsK93IEGUnbj8roVTN0z7gIJg5KIc4daMgTYZlhuIbu3AlcmkLzhzKEIJIn0iYLcm2RY7gV625RbgSvzOSRvuHIoDEokKhwKbKFCbgWu/LLC28dh1rjyp+4bVy2LQYkEuYNChdwKXNlc4e1YP69h1rjyp+4bRy2LQclEhUOBLVTIrcCVjRXe41oc7T5mjSt/6p75JJCC4oXcc/VGbpn0yiJp71bgysYK36LdPYkff7q/x9Fl3rjyp+4ZR4GEQQnlhUOh97ZQIbcjVz6nnxU6vJe/nxZsxvjQfZpCh+j6+PEWx/dZ4xJILQiksHDjUMgtFBVyu3Hl4qOr++fv70s203/a9zk6J9k/b7PGJZBavAqkZS27sDiwjgqHAluokNuJK5+iffquzsc+OmW/H2eedpDTH0jXKDu97l4G37RxCaQWvYG0qGUxKKEgd1i8knuR3gtrK5niyp9mTIPmr6Hl3wtxjqOjm0AqqucsOzvgUEHxUu5ZeiO3VPqFESS3o0Bq/La7LDL/nveQ0syLo1t3e6PHJZBaOAkkDEoq/XIv0Bu5xeIykBaWVuEkkJ4v2T25TNxMp0TTjafs1Lpj9ibSR7SbNS6B1IJACgoCKSxUyO0kkJJDeo7d+TpvM50STTdeo/iafhPS4//X3fOtqqnjEkgtXLyGg0GJxWUgLa0N7BNwICUfp/SDq3H5PMl6ID2eIkX5/9PtzBuXQGrhwqEIJLEgd1i8lHu63vbldhRID+6XR1oUiWQ/kJJL9jrdeRfFs54fEUhdHDrU4trAOgNyz/7wPoEkl5dybzuQkvR1teJ8bAeBtBgCqY2DQMKg5PI6kCbrjdyCcRdIi0urcOHKxVnftdHtn9Rwus0f8TkugdTCXSAtrw2sQyCFRbCBlJ/79uBWvrvj4HNIsy4X1Bxi6Qhbw/5rOBiUYOwHEnJL5rXcAvR24crXKDqmZ9hddkUyuQik+QPaG2Jj4FBBMULuiXojt2Sc7d4Waitx4sqX4nshyi/Oc/A5pHfTzZPGJZBaWO9YDEoyQ3Iv0ttCbWAfFbu3G1e+n9LLqx6rr4Wwf1LDMXq7Gv8wflwCqYWKjgVbWA8k5BaNit1bgSv3vGTXYNa48qfuGeuv4WBQkiGQwsJ2IDmRW4ErE0i+sO1QGJRoPh05lJXiwDq2jzcJJMvjyp+6ZwikoLAdSMgtG0e7t5XaShS48pwKfzavJvTrWxx//9UeV/7UPWO5YzEo2RBIQTEot5jdW4Erz6jwf3EjkH7EGT9a48qfumdUdCzYYkwgzdDbUnVgGQLJEi8/h3RvX131r7gRSP/GX38nye+v8Z/eISBlsGOnfzQWg5KNZYfi+EM2o+Qer7cjuRW48usPxjYn8etr/FcjkP6O/5f+8ztuvminYOqesetQGJRwCKSgGJZbyu6twJVfBtKlOYn42++kEUg/4n/zPzRfs1Mwdc8QSEHhJpAsFQe2cRNIloorUeDK7QrPUYdj/e+/H/81Aunr85f4a3Nc+VP3y6eTQLJVHdjG7ms4HH8Ix24guZJbgSt3Kty34ig+dh7TCKTil+aZDhqm7pdxgTS2ZTEo6ThxKFvFgW0IJEvMubgqgTSDF4E0sWUxKOm4kBu9xTJO7rV3bwWuTCB5gkAKCwIpKF7IPU1vZ3IrcOU5FfIe0gwIpKBA7rBwEUjWiitR4MqLA+l5lt2/nGU3zEiHGteyHDFLB7nDIuhAOqcnHhzeq192b7PH6qnwbTdwcdXW55CyDyD9iv9ujksgNXnlUJNaFoOSjgu50VsuOuR248rFeXD72i/7uYOZK4wHr/bdCKQ/xZUa/m2OSyA1selQGJR4OP4ICx1yO3HlU7T/ePzzsY9O2S+3x89x+vMsjBW+RfHFdPuT5nkMXMtuFARSUCB3WIyUe4zeDuWe4spfzJgGvWf/ZheZi/MtXNsXnBtfounGXTSUR+0T6/7342v8jat9v8CBQ1msDiwzVu6VHQos8UruCbu3vkBauKXmA403Lk8TAqmFRYfCoOTzUu7pDmWxOrCNDrmdBNLzJbsGt9lvIhFInrDoUASSfJA7LHTI7SSQkkN6jt35Wr/pGHUyamyJphuP0dV086RxCaQm9h3KZnVgGeQOi5ADKfk4pWfBxVUGXWaf02AOpI/oMHe8clwCqYk9h+KIWQGj5R6tt9XywDKl3ItfkXcpt6NAenC/nKLyWdGCPOo57fsUHeY+5SrGJZCa2HMoAkkBr+UeewCC3BqwfrxptboCd4GUpGfWPd83eluQR33vIQ1+DmnUuARSE+sOZbU6sAxyh8X2Amn8mPfm6MfovGQ48zYIJNtYcyiOmDXw+fI1HAJpS1gLJKe7twtXLvPnln326BbHi15cc5UbBFILAikoPm05FHKrwNor8k7lduHK1yg6pufAXXZpMt3j+LZoOALJE7YDyW51YJnxgfRCb+RWgY7d24krX4pX0tIz4Y6LXldLCCRvjHgNJ5lgUDiUbEYE0jiHQm4VWJZbUyAl91N6RdXjJd+Co0C6nnbZmIeZn0gikFrYcigCSQXIHRY6jj8UuHJPhcci5KLhy9r1jyt/6n6x7FC2ywO7IHdYjJd7Tb0VuLK5wkO0u+TVX6qz+qaNK3/qfrHkUBwx62CC3GP0tl4fWGWM3AJ2bwWubKzwEu2SovpTNOvb/xRM3S8EUlBYcijk1oHlQLJdXoECVzZWeMhep8urn3ndVgVT94vdQLJeHtjFbiBZLw/sQiDZYuBq38/q+WCsFey8hsMRsxIIpKBQ8oRYgSsTSJ6w07IEkhKmyP1ab/v1gVWUyK3AlY0VxrVAus/7MloFU/fKp9VAsl8f2GWU3C/15vhDCXbkJpB6vw+peg/pHB1njSt/6l6xE0gYlBYIpKBQIrcCVzZWeI3ie1Ke9j3rWnkKpu6VSYHU27IYlBasOpT98sAuSuRW4Mp934cUZ59Dup6imd9toWDqXhkXSK9aFoPSgk250Vs8k+Reb/dW4Mo9Fb6VlySa+V1LCqbuFSuBhEFpYZrc6K2dcXKvvnsrcOW+Cu9v6QXz9qeZl7LTMHWvEEhBMVLucXo7qA/sUpN78e7tor4nClyZq337wcohMwalBSuBxPGHGmweb7qo74kCVyaQ/GDDoTAoNRBIYWHjeNOD3ApcuafC+ym9ml0SH+dd61vF1L1CIAVFXe6lDuWmQrCJxd3bSX1PFLiyucJLVFysYd6V7FRM3StKOhbs8GlBb44/9KBk91bgysYKb1F0zL904rKfmUgKpu4VJR0LdiCQwkKJ3Apc2VjhqXay9z46zxpX/tS9YuM1HAxKDRYDyU2BYJWJcpv09iG3AlfuuZZd9aV8t+y7kaaPK3/qXrHgUBwx6wG5w2Ks3K/1dlPfEwWuPHC1b9Mv48eVP3Wv2HMoRwWCTQiksFgeSF7kVuDKBJIfCKSgmCp3v0O5qhBsYi2QHNX3RIErD1ztO+cSHWaNK3/qXlnuUBwxK2K03L0OhdyaIJBsYazwEsW34uddNOujSAqm7hVrDuWqQLAJgRQWU+Xu6O1HbgWubK7wEMXnNJJu55jTvq1AIAUFcofFaLn79PYjtwJX7qnwUF7te9YLdiqm7pXFDsURsyYmy93WG7lVQSDZoq/C64mrfdvElkO5qxAsMl7uHocikFRBINmCi6v6wZZDOSsQbILcYTFZ7pbeno4/FLgygeSHpQ7FEbMqkDss6nIL1luBKxNIfrDkUO4KBJsQSEHxqWT3VuDKfV9hvosqZo0rf+pemd6xjZbFoHQxQe6E4w/1LA0kX7u3Alc2VxhHEYFklekORSAppiH3dIdCbl3MCKRV9FbgysYK36J47hfzlePKn7pX7ASSwwLBJgsPmZFbF1PkXlNvBa5srHDm1Rka48qfuk8WdixHzMogkIJCy+6twJVfX1x15rjyp+6TOR1ba1kCSRnLXsNBbmXYCSSXFeYocGUCyQuTOrbbshiUMpY5FHIrg0CyRs/VvudeoKEaV/7UfbIskDhi1gaBFBRW5CaQUowVfsy9gl1tXPlT9wmBFBSfBFJQLHtF3p/cClzZXOEpOnwsHFf+1H1iJZCcVggWKQSc51Acf2hj0e7tUW4FrtzzHhKfQ7JLs2NHtmzxGwaljWmB1ONQbksEizT1HnvvJwRSHQLJC4scCoPShg250VsPNgLJbYU5ClyZa9l5YYlDYVDqKPUjkIJgViCtsHsrcGUCyQsEUlDMC6Sm3q5rBHtMC6T1dm8FrkwgeWFeIOUti0GpY2IgJQa50VsRC443vcqtwJX7vzF2xzfG2mNix9ZbFoPSB4EUFgSSNXoqPJVnNBxnjit/6j4hkIKiFUhzHMp5jWCPBS+AeJVbgSv3fQ4pekufG13f5iaSgqn7ZHkgOS8R7DEzkFK9Of5QyPzd26/cClzZWOElim/PH29xNOsjsgqm7pOZHVtrWfc1gjWmBlLXodzXCPYgkKzRcy27c/nzed5TJAVT98nUNxU6loZDaWJ+ICG3RmYHkme5Fbhyzwdj7+XP9yieNa78qftkcSC5LxHsQSCFxdTdm0Dq5fXXT3ClBgvMDiQMSiNzA2n0taVAFDMDafxTKksocOURz5AIpOXMPmTGoTTSfo9g9COQWyVzjzd9y63AlXkPyQtzAwmDUsnSQHJeINjkk0Cyxoiz7C6zxpU/dZ8QSEExN5CQWyVtucfu3t7lVuDK5gqPfA7JLpMDKcGgFLPQodwXCDYhkOzRU+GRKzVYhUAKiukOlSC3XmbK7f/4Q4Er91/Lbs+17KzRfpFZbMeCFQikoFAjtwJX5mrfPlDTsWCFeXojt1LU7N4KXJlA8kHVsaPf5cahFEMgBYUauRW4sqHC++n0/OntOPcVOw1T90gnkEa1LAallVkOhdxamXe8SSCZ6Fb4EZcXC9pF0WHuuPKn7pFZgfQFh9LKLIdCbq0s2r1dF1dHgSt3KrxF0b54XnR/e/wyc1z5U/eImo4FK8zRG7nVomb3VuDKnQp30an22y3mc0gWWGJQOJQ+CKSgUCO3AlduV3iJdo3fH0+YZr2PpGDqHlHTsWCFGXojt17U7N4KXLld4TF6b95wajxjGj+u/Kl7pNaxY99UKBr203VtYB8CKSgWyO1391bgyu0Kd9GtecPHvHeRFEzdI91AetmyZceSSPqY7lBf1nEosEFX7ld6ryS3AlduV9gtma+fWM70QKryCIfSx/xAQm6FqNm9FbgygeQDNR0LVpgcSMitmcm795eV9FbgygSSD2Z37CcOpZGpgbSWQYEV1OzeCly5XeGhfVLdjfeQlmPo2OGWJZA08zn1JJa63OitjqmBtJrcCly5XeFb9Na8gW+MtUC9Y8e07BccSjPIHRYTjzebcvvUW4Ertyu8l9cNerLjG2OXM9Gh1utYsAFyh8VMvT8JpC6dCo/Nzx2dWh+UHT2u/Kl7ZFrHflmvY8EGyB0Un2r0VuDKnQrvcT2RTlH7c0ljx5U/dY+YOra3Zb/gUMqZJHfHoNBbGU3ZRsudEEgGuhXe4ih+y85suL49fpz1gp2KqXtkUst2OhaHUsZMuVdwKLCAUe4+vbtye9RbgSubvg/pEJUc7nPHlT91f3xOcahax+JQOkHuoGjJJlhvBa5srPD2lmZSfHifG0cqpu4Pc8eaW7besDiUTiYcMiO3fqYE0rp6K3BlvsLcAxMCqdGwOJROxjvUF5NBobcu9OzeClyZQPJAu/H6O/aLsWNxKF2MdqiW3ByAqGTG7m1+oHMUuDKB5IGeju22bNugcCiVjA0k5N4EYwPpS1tvAqkLgeSBTuP1WFTHoHAolYw8AEHubTBZ7tWOPxS4MoHkgXGB1G1YHEonoxxqQG70VkWf3C/19i63AlcmkDzQG0hfDDc1bsWhNDLiAMQsNwcgGhlzvDm4e3urVIErE0ge6PZduzm/mBsWh1JJ/wHIl/bvyK2fl3L36k0gdSCQPGDouy/9vHooSGfgAAS5t8ckuVc9/lDgygSSByYF0suHgnSmOJTxkeitiSm7t/GR3uRW4MoEkgdMbTeuY3EohZg0Gyk3ByAK0SO3AlcmkDwwPpDGPRZEY5RspN7IrY8FuzeB1IZA8oC57UblEQ6lD+QOCvOLGCIPNxW4MoHkgZ62G+FPOJRC+iRD7k0yUm6j3p5fkVfgygSSB3q77pU9JbyJpJAxcvfpjdzq6Fds/O7tsLw6ClyZQHLPMpPBobSB3EGhSG4FrkwguWdZ0+FQ2lDkULAcRXIrcGUCyT0EUlgocihYjg25PemtwJUJJPcQSGGhyKFgOYp2bwWuTCC5R1HHggXQOygUya3AlQkk91jpWBxKDYocCpajSG4FrkwguWdhz+FQylDkULAcRcebClyZQHIPgRQWihwKlqNo91bgygSSexR1LFgAvYNCkdwKXJlAco+ijoXlLH2Kg966WCgXgdSAQHKPHYPCoZSwVC7k1oUdub3orcCVCST34FBBYUlu9FbCUrUIpDoEknsIpKBYLBd6q0KR3ApcmUByD4EUFARSUGiSW4ErE0ju4TWcoNDkULAYW3L70FuBKxNI7sGhgkKTQ8FilotFINUgkNyjqGNhOZocChajSW4FrkwguUdRx8JyNDkULEaT3ApcmUByj62OxaFUsFwr5FaEtUDyoLcCVyaQ3INDBQVyB4UFsQikCgLJOZo6FpaD3EFhQSsCqYJAcg6BFBbW5EZvDRBIViGQnGMvkHAoBdiQCrnVoEpuBa5MIDlHVcvCUpA7KKxIRSCVEEjOwaGCArmDwmIguddbgSsTSM7BoYLCotzoLR8CyS4EknMsdiwOJR9VDgVLUSW3AlcmkJxjpdlwKC0gd1DYDCTneitwZQLJNXZ6DYfSAnIHhR2hCKQCAsk1BFJQWJUbvcVDINmFQHINDhUUlnRCbh3okluBKxNIrtHVsrAQ5A4Ku3K71luBKxNIrsGhggK5g8KWTgTSEwLJNThUUOg6ZIaFEEiWIZBcY7djcSjh6HIoWIguuRW4MoHkGGudhkOpALmDgkCyDIHkGAIpKJA7LHTJrcCVCSTH4FBBYVtu9BaNMrkVuDKB5BhlLQvLsCcScitAmdwKXJlAcoyyloVlIHdQKJNbgSsTSI6x12c4lAKUORQsw7rcbvVW4MoEklssthkOpQDrcqO3ZJTt3gpcmUByi/2OxaEEY1Mi5JYPgWQbAsktOFRQIHdYEEi2mVzhr29x/P1X7Yb/4pzWuPKn7gUcKiiQOyyUvQCiwJWnVvgjT58f1S2/CaQBcKigcCA3esvFqkQEUsrECv+Nv/5+ZNDX+E9508/4f6Zx5U/dB9o6FpZhVSH0lo5VjaXcLAAAD65JREFUhQiklIkV/p2nz++4etHuWy2cauPKn7oPXHQsDiUWuwIht3QIJOtMrPBH/G/2b/Wa3X/xV+O48qfuAxwqKJA7LLQdbypw5YkVfn2+VVSl0O/4x69v8bdfrTsqmLoPcKigcCI3eovFrj4EUjI5kIpzF6pzGH4+z2n43hpX/tQ9YNlSMCjhWBYIvWWjTm4Frrw4kL7F/zz+/+d73HyOpGDqHnDTsTiUUGzrg9yyUSe3AldeHEhP/sTfmuPKn7oHbLcYDiUaR3Kjt1DUHW8qcOXF7yEVtCJKwdQ9QCAFhXV50Fsy1gOEQJp7lt2/9U/G5hBIXfR1LCyBQAoKfbu3Alee/Dmk7K2iX/HfxS1f4//Sf/6J/2qOK3/q7nFlUDiUSOyrg9yS0bd7K3DliRX+Ka7U8G9xy8/4x3/ZSQ3/NMeVP3X32O8vHEowzuRGb5EQSA5Yci27/FW67/ktP1vjyp+6cxz0FwYlGAfioLdcFO7eClx5coX/+/G1+Bjs822j9PrfP/5p3U3B1J3jrmNxKIkQSEGhUG4Frsz3IbnDXcfiUAJxoQ1yy0Xh7q3AlQkkZzjpLhxKLARSUGjcvRW4MoHkDI0dC/NxKDd6y8OJMgQSgeQMlx2LQ4nDjTLILRWNu7cCVyaQXOGot3AooRBIQeFUbgLJ/rjyp+4YAikskDsoHAlDILkaV/7U3eLqWIfX7GTi9vgDuYXhePe2PewTBa5MIDnCmZPgUCJB7qDQebypwJUJJEc4aywcSiIcfwSFu9wgkByNK3/qTnHesViUKFwHEnKLgkByBYHkBgIpKByKgtzycC+3G70VuDKB5ASXbYVDyYNACgqtu7cCVyaQnKC1Y2EWHuRGbzk4lYRAcjOu/Kk7xEfH4lBi+HQpCXKLg0ByB4HkAKcGxVMkcSB3UOiVW4ErE0gOcHxQi0PJws/xB3pLQa/cClyZQLKPY4PCoWSB3GHhWg8Cycm48qfuCtcGxVMkWSB3UDjfvQkkJ+PKn7oj3OcRDiUJb8cf6C0B1XIrcGUCyTKf7jsWhxIEcgeFx93bwcgKXJlAsoyHhuUpkhyQOyh85BGB5GRc+VN3gheDwqGk4MWgeIokBe1yK3BlAskqfvIIhxKCH4NCbiF4ktvd8aYCVyaQbOKpYXmKJANfBoXcIvAtt/3NKHBlAski3joWh5KAd7nRe002ILcCVyaQrPHpr2MJJAF4lBu912cLcitwZQLJFj7ziEPm1fEqN3qvzibkVuDKBJIl/BoUh8wrs47c6L0W25BbgSsTSFb49GxQONS6+JabA5BV2YrcClyZQLKB9zwikNbEv9zovSLbkVuBKxNIy/lcoWM5ZF6NNeVGb++sIrej3VuBKxNIS1mnYXGolfhE76DYlNwKXJlAWsZa/sRTpFVYXW709spqehNItseVP3ULfK7WsDjUCqwpNwcg/tnc7q3AlQmk+azqTwSSbz5F6O15q+EiQ24Cyda48qe+jHa/+ncKEskjyB0Wq8vt5ABEgSsTSHPo2NMaNoFDeUOC3sjtDQlyO9FbgSsTSNPp9us6LoFFeQG5g2LLcitwZQJpIoZ+XcsicCj3IHdQCJLbhd4KXJlAmoCpXdf0BwElbBpheq9fwbbZvtwKXJlAGouxXdc1BxFFbBSz3KsutYQaNos8uR2c1qDAlQmkMfS40+rWIKWOrSFUbyFlbI5g5FbgygTSK/q6dfV+TXAoByB3WAQltwJXJpCG6HcnAf2aIqsa7SB3WEjX23oxClyZQOpjoFtltGuKuILUMiS3mOWVVo9eVMltrSAFrkwgdRlsVjntmiGyKGUo0ltiTdoIWG4FrkwgNXnRraLaNUVqXUrQKre4wnTwSm5py2q7LgWuTCAVvGxWad2aI7k2ybyWW+SaSq5NNMidqHBlAmmUN8ls1xTp9cljE3KLLVAemuW2vHsrcOWwA2mUNwlu1wSHmsIG5OYAZDwj5Ra9lHaLVODKgQbS2F4V3aw5eipdj9FyK1hFPZWuB3KbEe7KKcEF0nhvUtCtKcrK9czm5EbvISbIrWT9rJYr1pUrggmkKa2qpVlzVBbtnO3rvXYdoti+3DaKFufKXTYfSNM6VVmz5igu3T7IHRTs3lMQ48r9bDaQJneqxl7N0T+D5cyQW+1qqZ+ABZB7Dqu78ms2F0hznElvs+ZsZBpzCFHugPVG7kUQSN6Y16n6mzVnW7MZAXJvZzYjCFtue3oTSK6Z3alb6dUn25xVB+TO2ei02iyQe1sLY2tWBJIbljTqxlq1YMuzQ+4OW57eMrk3uCD25CaQLLKwTzfaqgXbmyVyD7G5aSL3EJamSSAtZnGfbr1VCzYyX+Qex0bma0Fu1fMfjZ3pEkjzsNGmoXRqieKJI/d0FE/cjtzqpr0MKxMnkCZgqU1Da9QKXWtgTW4Fc3WCriVA7qXYWAIC6QX22jTgTi0RvxjIbRXpi4HcVrGwGgSSAattSqPWkbgwyO0OiQuD3s5YvjAEUo7lJqVR+xCyRsjtCRmLhNyeWLxIQQeS/TalT1+z0oo5EBu9R7DWgiH3KixdMAKJPvWNt+Wzpi9yLwC5w2LZ+hFI9Kl3nC3mMkGR2xEa9bZTYJAsWk0CiTZdAUvLO11A9F4D5A6LBctLINGmqzBx2cdaigVWWpBtM3HZ3ats3i7YYeqyV7cTSHTpSiz3EmusvRQhsLbGddZeiwCYKw2BRJeuxlJfWcTakw8P5A6KeToFHUiOBobR2DWdV6w92+BB7rCYIZoCVyaQNo11H6qz9uSgDXKHxVQJFbgygbR58KSwQO6gmCKoAlcmkAIBRwoK5A6LcQIrcGUCKUCwoqAgeoJiQG4FrkwgAQCEgAJXJpAAAEJAgSsTSAAAIaDAlQkkAIAQUODKBBIAQAgocGUCCQAgBBS4MoEEABACClyZQAIACAEFrkwgAQCEgAJXJpAAAEJAgSsTSAAAIaDAlQkkAIAQUODKBBIAQAgocGUCCQAgBBS4MoEEABACClyZQAIACAEFrkwgAQCEgAJXJpAAAEJAgSsTSAAAIaDAlQkkAIAQUODKBBIAQAgocGV3gQQAAJJwZPf2IJAAAMLAkd3bQ36FAAAQBAQSAACIgEACAAAREEgAACACAgkAAERAIAEAgAgIJAAAEAGBBAAAIiCQAABABAQSAACIgEACAAAREEgAACACAgkAAERgM5B+fYvj77+Gb9kQncn9F+esVpFjfjZntmlxk/Z0Ny3ur+9x/O3vxi1bFrcz3U2L+/e3+OvP/+q3SBbXYiD9yEX9MXTLhuhO7veW2zpJ/tec2abFTTrT3bK43/Opfa9u2bS43eluX9yvf6pbRItrL5D+jb/+fkj7Nf7Tf8uGMEzuZ/y/FQtyzV/NHXbT4iad6W5Z3J/x94eI/3yNfxa3bFrc7nS3LO6vdLb//VWLH9ni2gukv3NRf8e/+m/ZEIbJfZMpsRV+fY3/ajj0psXtTnfL4n7NJ/owquKWTYvbne6Wxf0WZ6/W1ZpZtrj2AulH/G/2b5XF3Vs2RHdy/9U6fHPE334nDYfetLjd6W5a3CfVhLct7pNqugGIW5uhbHHtBdLzwKM29e4tG6I7ud/xj1/f4m8ijzsW83iS33ToTYvbne6mxc35U72rsm1xc2rT3by4f77Xng7JFtdeIBX7b7Ufd2/ZEN3J/Yw7b5Zui4aOmxY3ozGzzYubvmv2T/Hj9sVtTHfr4j6m9nf9t+a/siCQZtKd3LeswxsHI9si5EDavLiPpwnVm/zbF7cx3Y2L++/3H/VEki0ugTST3sn9ib95L8YPIQfSk+2KWzfoAMRtTPfJdsVN/quFrWxxeQ9pJv2Tkym0BQJ6DynFqONWxf27YdCbF/dvQx5tV9ykcd6GbHGtn2X3b+csu39lns6xkP7JbbatTWfZbVPcjJAC6a/mq1VbF/cv84tzGxU3o3MKpVBxbX4OKRP5V/VqZfeWDdGd3Nf8jP9/4r/Wqskxrc8hbVjcjNYTwg2L++fr138aN2xb3M50tyzuc27/Vi9HyhbXXiD9KT4A/G//LRuiO7mf8Y//srdG/xl6nGIaDr1pcTNaZ9ltV9z/vn5tfS500+J2p7tlcf+Ov/+XntdQPSeULa6ja9nlO7PoiyYtpTvd5zWyTK9Ob4Lmu6GbFjelOd0Ni/tXXJCEIK5huhsWtzE3BeLavNr3/358LT5d9tyZa7dsj+5006vo/tjgUdaT1uk5mxY36Ux3u+LGXYfesrim6W5X3Oe1vX9nPyoQl+9DAgAAERBIAAAgAgIJAABEQCABAIAICCQAABABgQQAACIgkAAAQAQEEgAAiIBAAgAAERBIAAAgAgIJNk7UILthzjAf0WHqQw7Rx5wtAQQLgQQbx1Ig7aL71Ifco92cLQEEC4EEQTAvhSrO0Xn6g97mPAggXAgkCIKlgTTv20S3/B2kAPYhkCAIFgbSJTrNedgpuizaLEBYEEgQBLVAyn98/P+6j6L99ZE2j3+Pt+dfr8c4ig7tHNlHz79fT487R/u35htK5eit3LtFe1sTAAgAAgmCwBBIl/w0h+sp+yfOE+f0PPmheUpdeXpC8efi7u3R20/EZpwKARAuBBIEgSGQouM9ue+jXXS6p0+Wstfk3qI4fXJ02UXH+qOLV+wujz/fDX/vDSReswOYAIEEQWAIpOxJ0EeUR8tH9hzoHsXPZzS76Fp7dJEr5a33ZvL0BtLM954AwoRAgiAwBNLH87drdetb+YSmmSSHRjy1xksGAuk6/eO0AOFCIEEQmE5qSDr/7mv3qn+oNW7sJ9fzIR4ZSEnEid8AoyGQIAjGBVL7og7dR1/Sk/Dafx4KJPYwgNGwu0AQWAqk7Cy7w/k69iU7AglgAuwuEARjA2n40ecoPt/a4yUEEoAd2F0gCMa+h9Q+eSGneA9p8ll2vIcEMAECCYJgXCCdes7SPtRPxUt5NwfSB2fZASyAQIIgGBdI16g47/vSSJJT9J79Gz+D6dY6y27/fNi+HUjvfA4JYDwEEgTBuEBKT1o43x+Bc4oaL94Vn0o6RbuPJLmf0zPt6tcOOmcXePjYx+1A4koNABMgkCAIRgZSdbG6RpDci7eCnud8x5dd9rnactT980HNsdP7cy07gNEQSBAEYwMp+Ug/aNS+mnd1qYbTLv9r/o3m1ajnXRQfb62xeQsJYBIEEsBr+D4kAA8QSAAjmPXa252TvgGmQCABjOAcnT09CCBcCCSAMcz4qr174wKtAPAKAglgDB/Nr+Qbw/H5DRcAMA4CCQAAREAgAQCACAgkAAAQAYEEAAAiIJAAAEAEBBIAAIiAQAIAABEQSAAAIAICCQAAREAgAQCACAgkAAAQAYEEAAAiIJAAAEAE/weoW7asSULlTgAAAABJRU5ErkJggg==", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 840 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "options(repr.plot.width = 14, repr.plot.height = 6)\n", + "colors <- c(\n", + " `S1` = \"#EE7733\",\n", + " `S2` = \"#0077BB\"\n", + ")\n", + "\n", + "plot1 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " geom_line(linewidth = 2) +\n", + " scale_colour_manual(values = colors) + # scale_colour_brewer(palette = \"Dark2\") +\n", + " scale_x_continuous(\n", + " breaks = seq(0, 3, 0.5),\n", + " minor_breaks = seq(0, 3, 0.1),\n", + " limits = c(0, 3),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(0, 3), clip = \"on\") +\n", + " labs(\n", + " title = \"Dynamics of the Reduced MAPK Model with Explicit Feedback\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " # panel.grid.minor = element_blank(),\n", + " panel.grid = element_blank(),\n", + "\n", + " ## black outer box\n", + " panel.border = element_rect(\n", + " colour = \"black\",\n", + " fill = NA,\n", + " linewidth = 1.1\n", + " )\n", + " )\n", + "\n", + "plot1\n", + "# ggsave(\"POSm4_plot.png\", plot1, width = 10, height = 8, units = \"in\", dpi = 300)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "a506b026", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "sol_list <- lapply(1:nrow(sol), function(i) as.numeric(sol[i, 2:3]))\n", + "res_tab_all <- find_loops_vset(model_calcium_oscillation,vset=sol_list,t=1,klin=klin_calcium,kn=kn_calcium,n0=n_calcium)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "ec8b3250", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\t
$loop_rep
\n", + "\t\t
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A data.frame: 3 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11-1
    2, 21-1
    1, 2, 12 1
    \n", + "
  2. \n", + "\t
  3. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A data.frame: 3 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11-1
    2, 21-1
    1, 2, 12-1
    \n", + "
  4. \n", + "\t
  5. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
    A data.frame: 3 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11 1
    2, 21-1
    1, 2, 12-1
    \n", + "
  6. \n", + "
\n", + "
\n", + "\t
$loop_rep_index
\n", + "\t\t
\n", + "
  1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61. 1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 1
  107. 1
  108. 1
  109. 1
  110. 1
  111. 1
  112. 1
  113. 1
  114. 1
  115. 1
  116. 1
  117. 1
  118. 1
  119. 1
  120. 1
  121. 1
  122. 1
  123. 1
  124. 1
  125. 1
  126. 1
  127. 1
  128. 1
  129. 1
  130. 1
  131. 1
  132. 1
  133. 1
  134. 1
  135. 1
  136. 1
  137. 1
  138. 1
  139. 1
  140. 1
  141. 1
  142. 1
  143. 1
  144. 1
  145. 1
  146. 1
  147. 1
  148. 1
  149. 1
  150. 1
  151. 1
  152. 1
  153. 1
  154. 1
  155. 1
  156. 1
  157. 1
  158. 1
  159. 1
  160. 1
  161. 1
  162. 1
  163. 1
  164. 1
  165. 1
  166. 1
  167. 1
  168. 1
  169. 1
  170. 1
  171. 1
  172. 1
  173. 1
  174. 1
  175. 1
  176. 1
  177. 1
  178. 1
  179. 1
  180. 1
  181. 1
  182. 1
  183. 1
  184. 1
  185. 1
  186. 1
  187. 1
  188. 1
  189. 1
  190. 1
  191. 1
  192. 1
  193. 1
  194. 1
  195. 1
  196. 1
  197. 1
  198. 1
  199. 1
  200. 1
  201. 3
  202. 2
  203. 2
  204. 2
  205. 2
  206. 2
  207. 2
  208. 2
  209. 2
  210. 2
  211. 2
  212. 2
  213. 2
  214. 1
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 1
  228. 1
  229. 1
  230. 1
  231. 1
  232. 1
  233. 1
  234. 1
  235. 1
  236. 1
  237. 1
  238. 1
  239. 1
  240. 1
  241. 1
  242. 1
  243. 1
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 1
  251. 1
  252. 1
  253. 1
  254. 1
  255. 1
  256. 1
  257. 1
  258. 1
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 1
  267. 1
  268. 1
  269. 1
  270. 1
  271. 1
  272. 1
  273. 1
  274. 1
  275. 1
  276. 1
  277. 1
  278. 1
  279. 1
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 1
  291. 1
  292. 1
  293. 1
  294. 1
  295. 1
  296. 1
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 1
  303. 1
  304. 1
  305. 1
  306. 1
  307. 1
  308. 1
  309. 1
  310. 1
  311. 1
  312. 1
  313. 1
  314. 1
  315. 1
  316. 1
  317. 1
  318. 1
  319. 1
  320. 1
  321. 1
  322. 1
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 1
  333. 1
  334. 1
  335. 1
  336. 1
  337. 1
  338. 1
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 1
  351. 1
  352. 1
  353. 1
  354. 1
  355. 1
  356. 1
  357. 1
  358. 1
  359. 1
  360. 1
  361. 1
  362. 1
  363. 1
  364. 1
  365. 1
  366. 1
  367. 1
  368. 1
  369. 1
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 1
  376. 1
  377. 1
  378. 1
  379. 1
  380. 1
  381. 1
  382. 1
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 1
  400. 1
\n", + "
\n", + "\t
$jac_rep
\n", + "\t\t
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 2 × 2 of type dbl
    -1 1
    1-1
    \n", + "
  2. \n", + "\t
  3. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 2 × 2 of type dbl
    -1 1
    -1-1
    \n", + "
  4. \n", + "\t
  5. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 2 × 2 of type dbl
    1 1
    -1-1
    \n", + "
  6. \n", + "
\n", + "
\n", + "\t
$jac_rep_index
\n", + "\t\t
\n", + "
  1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61. 1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 1
  107. 1
  108. 1
  109. 1
  110. 1
  111. 1
  112. 1
  113. 1
  114. 1
  115. 1
  116. 1
  117. 1
  118. 1
  119. 1
  120. 1
  121. 1
  122. 1
  123. 1
  124. 1
  125. 1
  126. 1
  127. 1
  128. 1
  129. 1
  130. 1
  131. 1
  132. 1
  133. 1
  134. 1
  135. 1
  136. 1
  137. 1
  138. 1
  139. 1
  140. 1
  141. 1
  142. 1
  143. 1
  144. 1
  145. 1
  146. 1
  147. 1
  148. 1
  149. 1
  150. 1
  151. 1
  152. 1
  153. 1
  154. 1
  155. 1
  156. 1
  157. 1
  158. 1
  159. 1
  160. 1
  161. 1
  162. 1
  163. 1
  164. 1
  165. 1
  166. 1
  167. 1
  168. 1
  169. 1
  170. 1
  171. 1
  172. 1
  173. 1
  174. 1
  175. 1
  176. 1
  177. 1
  178. 1
  179. 1
  180. 1
  181. 1
  182. 1
  183. 1
  184. 1
  185. 1
  186. 1
  187. 1
  188. 1
  189. 1
  190. 1
  191. 1
  192. 1
  193. 1
  194. 1
  195. 1
  196. 1
  197. 1
  198. 1
  199. 1
  200. 1
  201. 3
  202. 2
  203. 2
  204. 2
  205. 2
  206. 2
  207. 2
  208. 2
  209. 2
  210. 2
  211. 2
  212. 2
  213. 2
  214. 1
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 1
  228. 1
  229. 1
  230. 1
  231. 1
  232. 1
  233. 1
  234. 1
  235. 1
  236. 1
  237. 1
  238. 1
  239. 1
  240. 1
  241. 1
  242. 1
  243. 1
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 1
  251. 1
  252. 1
  253. 1
  254. 1
  255. 1
  256. 1
  257. 1
  258. 1
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 1
  267. 1
  268. 1
  269. 1
  270. 1
  271. 1
  272. 1
  273. 1
  274. 1
  275. 1
  276. 1
  277. 1
  278. 1
  279. 1
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 1
  291. 1
  292. 1
  293. 1
  294. 1
  295. 1
  296. 1
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 1
  303. 1
  304. 1
  305. 1
  306. 1
  307. 1
  308. 1
  309. 1
  310. 1
  311. 1
  312. 1
  313. 1
  314. 1
  315. 1
  316. 1
  317. 1
  318. 1
  319. 1
  320. 1
  321. 1
  322. 1
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 1
  333. 1
  334. 1
  335. 1
  336. 1
  337. 1
  338. 1
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 1
  351. 1
  352. 1
  353. 1
  354. 1
  355. 1
  356. 1
  357. 1
  358. 1
  359. 1
  360. 1
  361. 1
  362. 1
  363. 1
  364. 1
  365. 1
  366. 1
  367. 1
  368. 1
  369. 1
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 1
  376. 1
  377. 1
  378. 1
  379. 1
  380. 1
  381. 1
  382. 1
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 1
  400. 1
\n", + "
\n", + "
\n" + ], + "text/latex": [ + "\\begin{description}\n", + "\\item[\\$loop\\_rep] \\begin{enumerate}\n", + "\\item A data.frame: 3 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & 1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\item A data.frame: 3 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & -1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\item A data.frame: 3 × 3\n", + "\\begin{tabular}{lll}\n", + " loop & length & sign\\\\\n", + " > & & \\\\\n", + "\\hline\n", + "\t 1, 1 & 1 & 1\\\\\n", + "\t 2, 2 & 1 & -1\\\\\n", + "\t 1, 2, 1 & 2 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n", + "\n", + "\\item[\\$loop\\_rep\\_index] \\begin{enumerate*}\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item ⋯\n", + "\\item 3\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\end{enumerate*}\n", + "\n", + "\\item[\\$jac\\_rep] \\begin{enumerate}\n", + "\\item A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t -1 & 1\\\\\n", + "\t 1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\item A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t -1 & 1\\\\\n", + "\t -1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\item A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t 1 & 1\\\\\n", + "\t -1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n", + "\n", + "\\item[\\$jac\\_rep\\_index] \\begin{enumerate*}\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item ⋯\n", + "\\item 3\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 2\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\item 1\n", + "\\end{enumerate*}\n", + "\n", + "\\end{description}\n" + ], + "text/markdown": [ + "$loop_rep\n", + ": 1. \n", + "A data.frame: 3 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | 1 |\n", + "\n", + "\n", + "2. \n", + "A data.frame: 3 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | -1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | -1 |\n", + "\n", + "\n", + "3. \n", + "A data.frame: 3 × 3\n", + "\n", + "| loop <I<list>> | length <dbl> | sign <dbl> |\n", + "|---|---|---|\n", + "| 1, 1 | 1 | 1 |\n", + "| 2, 2 | 1 | -1 |\n", + "| 1, 2, 1 | 2 | -1 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "$loop_rep_index\n", + ": 1. 1\n", + "2. 1\n", + "3. 1\n", + "4. 1\n", + "5. 1\n", + "6. 1\n", + "7. 1\n", + "8. 1\n", + "9. 1\n", + "10. 1\n", + "11. 1\n", + "12. 1\n", + "13. 1\n", + "14. 1\n", + "15. 1\n", + "16. 1\n", + "17. 1\n", + "18. 1\n", + "19. 1\n", + "20. 1\n", + "21. 1\n", + "22. 1\n", + "23. 1\n", + "24. 1\n", + "25. 1\n", + "26. 1\n", + "27. 1\n", + "28. 1\n", + "29. 1\n", + "30. 1\n", + "31. 1\n", + "32. 1\n", + "33. 1\n", + "34. 1\n", + "35. 1\n", + "36. 1\n", + "37. 1\n", + "38. 1\n", + "39. 1\n", + "40. 1\n", + "41. 1\n", + "42. 1\n", + "43. 1\n", + "44. 1\n", + "45. 1\n", + "46. 1\n", + "47. 1\n", + "48. 1\n", + "49. 1\n", + "50. 1\n", + "51. 1\n", + "52. 1\n", + "53. 1\n", + "54. 1\n", + "55. 1\n", + "56. 1\n", + "57. 1\n", + "58. 1\n", + "59. 1\n", + "60. 1\n", + "61. 1\n", + "62. 1\n", + "63. 1\n", + "64. 1\n", + "65. 1\n", + "66. 1\n", + "67. 1\n", + "68. 1\n", + "69. 1\n", + "70. 1\n", + "71. 1\n", + "72. 1\n", + "73. 1\n", + "74. 1\n", + "75. 1\n", + "76. 1\n", + "77. 1\n", + "78. 1\n", + "79. 1\n", + "80. 1\n", + "81. 1\n", + "82. 1\n", + "83. 1\n", + "84. 1\n", + "85. 1\n", + "86. 1\n", + "87. 1\n", + "88. 1\n", + "89. 1\n", + "90. 1\n", + "91. 1\n", + "92. 1\n", + "93. 1\n", + "94. 1\n", + "95. 1\n", + "96. 1\n", + "97. 1\n", + "98. 1\n", + "99. 1\n", + "100. 1\n", + "101. 1\n", + "102. 1\n", + "103. 1\n", + "104. 1\n", + "105. 1\n", + "106. 1\n", + "107. 1\n", + "108. 1\n", + "109. 1\n", + "110. 1\n", + "111. 1\n", + "112. 1\n", + "113. 1\n", + "114. 1\n", + "115. 1\n", + "116. 1\n", + "117. 1\n", + "118. 1\n", + "119. 1\n", + "120. 1\n", + "121. 1\n", + "122. 1\n", + "123. 1\n", + "124. 1\n", + "125. 1\n", + "126. 1\n", + "127. 1\n", + "128. 1\n", + "129. 1\n", + "130. 1\n", + "131. 1\n", + "132. 1\n", + "133. 1\n", + "134. 1\n", + "135. 1\n", + "136. 1\n", + "137. 1\n", + "138. 1\n", + "139. 1\n", + "140. 1\n", + "141. 1\n", + "142. 1\n", + "143. 1\n", + "144. 1\n", + "145. 1\n", + "146. 1\n", + "147. 1\n", + "148. 1\n", + "149. 1\n", + "150. 1\n", + "151. 1\n", + "152. 1\n", + "153. 1\n", + "154. 1\n", + "155. 1\n", + "156. 1\n", + "157. 1\n", + "158. 1\n", + "159. 1\n", + "160. 1\n", + "161. 1\n", + "162. 1\n", + "163. 1\n", + "164. 1\n", + "165. 1\n", + "166. 1\n", + "167. 1\n", + "168. 1\n", + "169. 1\n", + "170. 1\n", + "171. 1\n", + "172. 1\n", + "173. 1\n", + "174. 1\n", + "175. 1\n", + "176. 1\n", + "177. 1\n", + "178. 1\n", + "179. 1\n", + "180. 1\n", + "181. 1\n", + "182. 1\n", + "183. 1\n", + "184. 1\n", + "185. 1\n", + "186. 1\n", + "187. 1\n", + "188. 1\n", + "189. 1\n", + "190. 1\n", + "191. 1\n", + "192. 1\n", + "193. 1\n", + "194. 1\n", + "195. 1\n", + "196. 1\n", + "197. 1\n", + "198. 1\n", + "199. 1\n", + "200. 1\n", + "201. ⋯\n", + "202. 3\n", + "203. 2\n", + "204. 2\n", + "205. 2\n", + "206. 2\n", + "207. 2\n", + "208. 2\n", + "209. 2\n", + "210. 2\n", + "211. 2\n", + "212. 2\n", + "213. 2\n", + "214. 2\n", + "215. 1\n", + "216. 1\n", + "217. 1\n", + "218. 1\n", + "219. 1\n", + "220. 1\n", + "221. 1\n", + "222. 1\n", + "223. 1\n", + "224. 1\n", + "225. 1\n", + "226. 1\n", + "227. 1\n", + "228. 1\n", + "229. 1\n", + "230. 1\n", + "231. 1\n", + "232. 1\n", + "233. 1\n", + "234. 1\n", + "235. 1\n", + "236. 1\n", + "237. 1\n", + "238. 1\n", + "239. 1\n", + "240. 1\n", + "241. 1\n", + "242. 1\n", + "243. 1\n", + "244. 1\n", + "245. 1\n", + "246. 1\n", + "247. 1\n", + "248. 1\n", + "249. 1\n", + "250. 1\n", + "251. 1\n", + "252. 1\n", + "253. 1\n", + "254. 1\n", + "255. 1\n", + "256. 1\n", + "257. 1\n", + "258. 1\n", + "259. 1\n", + "260. 1\n", + "261. 1\n", + "262. 1\n", + "263. 1\n", + "264. 1\n", + "265. 1\n", + "266. 1\n", + "267. 1\n", + "268. 1\n", + "269. 1\n", + "270. 1\n", + "271. 1\n", + "272. 1\n", + "273. 1\n", + "274. 1\n", + "275. 1\n", + "276. 1\n", + "277. 1\n", + "278. 1\n", + "279. 1\n", + "280. 1\n", + "281. 1\n", + "282. 1\n", + "283. 1\n", + "284. 1\n", + "285. 1\n", + "286. 1\n", + "287. 1\n", + "288. 1\n", + "289. 1\n", + "290. 1\n", + "291. 1\n", + "292. 1\n", + "293. 1\n", + "294. 1\n", + "295. 1\n", + "296. 1\n", + "297. 1\n", + "298. 1\n", + "299. 1\n", + "300. 1\n", + "301. 1\n", + "302. 1\n", + "303. 1\n", + "304. 1\n", + "305. 1\n", + "306. 1\n", + "307. 1\n", + "308. 1\n", + "309. 1\n", + "310. 1\n", + "311. 1\n", + "312. 1\n", + "313. 1\n", + "314. 1\n", + "315. 1\n", + "316. 1\n", + "317. 1\n", + "318. 1\n", + "319. 1\n", + "320. 1\n", + "321. 1\n", + "322. 1\n", + "323. 1\n", + "324. 1\n", + "325. 1\n", + "326. 1\n", + "327. 1\n", + "328. 1\n", + "329. 1\n", + "330. 1\n", + "331. 1\n", + "332. 1\n", + "333. 1\n", + "334. 1\n", + "335. 1\n", + "336. 1\n", + "337. 1\n", + "338. 1\n", + "339. 1\n", + "340. 1\n", + "341. 1\n", + "342. 1\n", + "343. 1\n", + "344. 1\n", + "345. 1\n", + "346. 1\n", + "347. 1\n", + "348. 1\n", + "349. 1\n", + "350. 1\n", + "351. 1\n", + "352. 1\n", + "353. 1\n", + "354. 1\n", + "355. 1\n", + "356. 1\n", + "357. 1\n", + "358. 1\n", + "359. 1\n", + "360. 1\n", + "361. 1\n", + "362. 1\n", + "363. 1\n", + "364. 1\n", + "365. 1\n", + "366. 1\n", + "367. 1\n", + "368. 1\n", + "369. 1\n", + "370. 1\n", + "371. 1\n", + "372. 1\n", + "373. 1\n", + "374. 1\n", + "375. 1\n", + "376. 1\n", + "377. 1\n", + "378. 1\n", + "379. 1\n", + "380. 1\n", + "381. 1\n", + "382. 1\n", + "383. 1\n", + "384. 1\n", + "385. 1\n", + "386. 1\n", + "387. 1\n", + "388. 1\n", + "389. 1\n", + "390. 1\n", + "391. 1\n", + "392. 1\n", + "393. 1\n", + "394. 1\n", + "395. 1\n", + "396. 1\n", + "397. 1\n", + "398. 1\n", + "399. 1\n", + "400. 1\n", + "401. 1\n", + "\n", + "\n", + "\n", + "$jac_rep\n", + ": 1. \n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| -1 | 1 |\n", + "| 1 | -1 |\n", + "\n", + "\n", + "2. \n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| -1 | 1 |\n", + "| -1 | -1 |\n", + "\n", + "\n", + "3. \n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| 1 | 1 |\n", + "| -1 | -1 |\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "$jac_rep_index\n", + ": 1. 1\n", + "2. 1\n", + "3. 1\n", + "4. 1\n", + "5. 1\n", + "6. 1\n", + "7. 1\n", + "8. 1\n", + "9. 1\n", + "10. 1\n", + "11. 1\n", + "12. 1\n", + "13. 1\n", + "14. 1\n", + "15. 1\n", + "16. 1\n", + "17. 1\n", + "18. 1\n", + "19. 1\n", + "20. 1\n", + "21. 1\n", + "22. 1\n", + "23. 1\n", + "24. 1\n", + "25. 1\n", + "26. 1\n", + "27. 1\n", + "28. 1\n", + "29. 1\n", + "30. 1\n", + "31. 1\n", + "32. 1\n", + "33. 1\n", + "34. 1\n", + "35. 1\n", + "36. 1\n", + "37. 1\n", + "38. 1\n", + "39. 1\n", + "40. 1\n", + "41. 1\n", + "42. 1\n", + "43. 1\n", + "44. 1\n", + "45. 1\n", + "46. 1\n", + "47. 1\n", + "48. 1\n", + "49. 1\n", + "50. 1\n", + "51. 1\n", + "52. 1\n", + "53. 1\n", + "54. 1\n", + "55. 1\n", + "56. 1\n", + "57. 1\n", + "58. 1\n", + "59. 1\n", + "60. 1\n", + "61. 1\n", + "62. 1\n", + "63. 1\n", + "64. 1\n", + "65. 1\n", + "66. 1\n", + "67. 1\n", + "68. 1\n", + "69. 1\n", + "70. 1\n", + "71. 1\n", + "72. 1\n", + "73. 1\n", + "74. 1\n", + "75. 1\n", + "76. 1\n", + "77. 1\n", + "78. 1\n", + "79. 1\n", + "80. 1\n", + "81. 1\n", + "82. 1\n", + "83. 1\n", + "84. 1\n", + "85. 1\n", + "86. 1\n", + "87. 1\n", + "88. 1\n", + "89. 1\n", + "90. 1\n", + "91. 1\n", + "92. 1\n", + "93. 1\n", + "94. 1\n", + "95. 1\n", + "96. 1\n", + "97. 1\n", + "98. 1\n", + "99. 1\n", + "100. 1\n", + "101. 1\n", + "102. 1\n", + "103. 1\n", + "104. 1\n", + "105. 1\n", + "106. 1\n", + "107. 1\n", + "108. 1\n", + "109. 1\n", + "110. 1\n", + "111. 1\n", + "112. 1\n", + "113. 1\n", + "114. 1\n", + "115. 1\n", + "116. 1\n", + "117. 1\n", + "118. 1\n", + "119. 1\n", + "120. 1\n", + "121. 1\n", + "122. 1\n", + "123. 1\n", + "124. 1\n", + "125. 1\n", + "126. 1\n", + "127. 1\n", + "128. 1\n", + "129. 1\n", + "130. 1\n", + "131. 1\n", + "132. 1\n", + "133. 1\n", + "134. 1\n", + "135. 1\n", + "136. 1\n", + "137. 1\n", + "138. 1\n", + "139. 1\n", + "140. 1\n", + "141. 1\n", + "142. 1\n", + "143. 1\n", + "144. 1\n", + "145. 1\n", + "146. 1\n", + "147. 1\n", + "148. 1\n", + "149. 1\n", + "150. 1\n", + "151. 1\n", + "152. 1\n", + "153. 1\n", + "154. 1\n", + "155. 1\n", + "156. 1\n", + "157. 1\n", + "158. 1\n", + "159. 1\n", + "160. 1\n", + "161. 1\n", + "162. 1\n", + "163. 1\n", + "164. 1\n", + "165. 1\n", + "166. 1\n", + "167. 1\n", + "168. 1\n", + "169. 1\n", + "170. 1\n", + "171. 1\n", + "172. 1\n", + "173. 1\n", + "174. 1\n", + "175. 1\n", + "176. 1\n", + "177. 1\n", + "178. 1\n", + "179. 1\n", + "180. 1\n", + "181. 1\n", + "182. 1\n", + "183. 1\n", + "184. 1\n", + "185. 1\n", + "186. 1\n", + "187. 1\n", + "188. 1\n", + "189. 1\n", + "190. 1\n", + "191. 1\n", + "192. 1\n", + "193. 1\n", + "194. 1\n", + "195. 1\n", + "196. 1\n", + "197. 1\n", + "198. 1\n", + "199. 1\n", + "200. 1\n", + "201. ⋯\n", + "202. 3\n", + "203. 2\n", + "204. 2\n", + "205. 2\n", + "206. 2\n", + "207. 2\n", + "208. 2\n", + "209. 2\n", + "210. 2\n", + "211. 2\n", + "212. 2\n", + "213. 2\n", + "214. 2\n", + "215. 1\n", + "216. 1\n", + "217. 1\n", + "218. 1\n", + "219. 1\n", + "220. 1\n", + "221. 1\n", + "222. 1\n", + "223. 1\n", + "224. 1\n", + "225. 1\n", + "226. 1\n", + "227. 1\n", + "228. 1\n", + "229. 1\n", + "230. 1\n", + "231. 1\n", + "232. 1\n", + "233. 1\n", + "234. 1\n", + "235. 1\n", + "236. 1\n", + "237. 1\n", + "238. 1\n", + "239. 1\n", + "240. 1\n", + "241. 1\n", + "242. 1\n", + "243. 1\n", + "244. 1\n", + "245. 1\n", + "246. 1\n", + "247. 1\n", + "248. 1\n", + "249. 1\n", + "250. 1\n", + "251. 1\n", + "252. 1\n", + "253. 1\n", + "254. 1\n", + "255. 1\n", + "256. 1\n", + "257. 1\n", + "258. 1\n", + "259. 1\n", + "260. 1\n", + "261. 1\n", + "262. 1\n", + "263. 1\n", + "264. 1\n", + "265. 1\n", + "266. 1\n", + "267. 1\n", + "268. 1\n", + "269. 1\n", + "270. 1\n", + "271. 1\n", + "272. 1\n", + "273. 1\n", + "274. 1\n", + "275. 1\n", + "276. 1\n", + "277. 1\n", + "278. 1\n", + "279. 1\n", + "280. 1\n", + "281. 1\n", + "282. 1\n", + "283. 1\n", + "284. 1\n", + "285. 1\n", + "286. 1\n", + "287. 1\n", + "288. 1\n", + "289. 1\n", + "290. 1\n", + "291. 1\n", + "292. 1\n", + "293. 1\n", + "294. 1\n", + "295. 1\n", + "296. 1\n", + "297. 1\n", + "298. 1\n", + "299. 1\n", + "300. 1\n", + "301. 1\n", + "302. 1\n", + "303. 1\n", + "304. 1\n", + "305. 1\n", + "306. 1\n", + "307. 1\n", + "308. 1\n", + "309. 1\n", + "310. 1\n", + "311. 1\n", + "312. 1\n", + "313. 1\n", + "314. 1\n", + "315. 1\n", + "316. 1\n", + "317. 1\n", + "318. 1\n", + "319. 1\n", + "320. 1\n", + "321. 1\n", + "322. 1\n", + "323. 1\n", + "324. 1\n", + "325. 1\n", + "326. 1\n", + "327. 1\n", + "328. 1\n", + "329. 1\n", + "330. 1\n", + "331. 1\n", + "332. 1\n", + "333. 1\n", + "334. 1\n", + "335. 1\n", + "336. 1\n", + "337. 1\n", + "338. 1\n", + "339. 1\n", + "340. 1\n", + "341. 1\n", + "342. 1\n", + "343. 1\n", + "344. 1\n", + "345. 1\n", + "346. 1\n", + "347. 1\n", + "348. 1\n", + "349. 1\n", + "350. 1\n", + "351. 1\n", + "352. 1\n", + "353. 1\n", + "354. 1\n", + "355. 1\n", + "356. 1\n", + "357. 1\n", + "358. 1\n", + "359. 1\n", + "360. 1\n", + "361. 1\n", + "362. 1\n", + "363. 1\n", + "364. 1\n", + "365. 1\n", + "366. 1\n", + "367. 1\n", + "368. 1\n", + "369. 1\n", + "370. 1\n", + "371. 1\n", + "372. 1\n", + "373. 1\n", + "374. 1\n", + "375. 1\n", + "376. 1\n", + "377. 1\n", + "378. 1\n", + "379. 1\n", + "380. 1\n", + "381. 1\n", + "382. 1\n", + "383. 1\n", + "384. 1\n", + "385. 1\n", + "386. 1\n", + "387. 1\n", + "388. 1\n", + "389. 1\n", + "390. 1\n", + "391. 1\n", + "392. 1\n", + "393. 1\n", + "394. 1\n", + "395. 1\n", + "396. 1\n", + "397. 1\n", + "398. 1\n", + "399. 1\n", + "400. 1\n", + "401. 1\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "$loop_rep\n", + "$loop_rep[[1]]\n", + " loop length sign\n", + "1 1, 1 1 -1\n", + "2 2, 2 1 -1\n", + "3 1, 2, 1 2 1\n", + "\n", + "$loop_rep[[2]]\n", + " loop length sign\n", + "1 1, 1 1 -1\n", + "2 2, 2 1 -1\n", + "3 1, 2, 1 2 -1\n", + "\n", + "$loop_rep[[3]]\n", + " loop length sign\n", + "1 1, 1 1 1\n", + "2 2, 2 1 -1\n", + "3 1, 2, 1 2 -1\n", + "\n", + "\n", + "$loop_rep_index\n", + " [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [186] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [223] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2\n", + " [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [371] 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [408] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [445] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [482] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [519] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [556] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [630] 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [667] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [704] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1\n", + " [741] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [778] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [815] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2\n", + "[1296] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1333] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1370] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1407] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1444] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1481] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1518] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1555] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1592] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1629] 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1666] 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1703] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1740] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1777] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1814] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1851] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1888] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1925] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1962] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1999] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2036] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2073] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2110] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2\n", + "[2332] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2369] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2406] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2443] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2480] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2517] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2554] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2591] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2628] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2665] 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2702] 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2739] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2776] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2\n", + "[2813] 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2850] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2887] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2924] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2961] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2998] 1 1 1 1\n", + "\n", + "$jac_rep\n", + "$jac_rep[[1]]\n", + " [,1] [,2]\n", + "[1,] -1 1\n", + "[2,] 1 -1\n", + "\n", + "$jac_rep[[2]]\n", + " [,1] [,2]\n", + "[1,] -1 1\n", + "[2,] -1 -1\n", + "\n", + "$jac_rep[[3]]\n", + " [,1] [,2]\n", + "[1,] 1 1\n", + "[2,] -1 -1\n", + "\n", + "\n", + "$jac_rep_index\n", + " [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [186] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [223] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2\n", + " [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [371] 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [408] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [445] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [482] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [519] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [556] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " [630] 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [667] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + " [704] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1\n", + " [741] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [778] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [815] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2\n", + "[1296] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1333] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1370] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1407] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1444] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1481] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1518] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1555] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1592] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1629] 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1666] 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1703] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[1740] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[1777] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1814] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1851] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1888] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1925] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1962] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[1999] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2036] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2073] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2110] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2\n", + "[2332] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2369] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2406] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2443] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2480] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2517] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2554] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2591] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2628] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2665] 3 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + "[2702] 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2739] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3\n", + "[2776] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2\n", + "[2813] 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2850] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2887] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2924] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2961] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + "[2998] 1 1 1 1\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res_tab_all" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "a1881f7e", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [], + "source": [ + "# Draw background in the plot corresponding to the time points where\n", + "# certain loop structures are present\n", + "\n", + "# 1-to-1 time vector (must match loop_rep_index length)\n", + "time_vec <- sort(unique(sol_long$time))\n", + "\n", + "stopifnot(length(res_tab_all$loop_rep_index) == length(time_vec))\n", + "\n", + "# Run-length encode to get contiguous segments of the same loop structure\n", + "r <- rle(res_tab_all$loop_rep_index)\n", + "\n", + "end_idx <- cumsum(r$lengths)\n", + "start_idx <- c(1, head(end_idx + 1, -1))\n", + "\n", + "bands <- tibble(\n", + " loop_type = factor(r$values),\n", + " t_start = time_vec[start_idx],\n", + " t_end = time_vec[end_idx]\n", + ")\n", + "transition_times <- bands$t_end[-nrow(bands)]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "8725b19d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "plot without title" + ] + }, + "metadata": { + "image/png": { + "height": 360, + "width": 840 + } + }, + "output_type": "display_data" + } + ], + "source": [ + "plot2 <- ggplot(sol_long, aes(x = time, y = value, colour = species)) +\n", + " # background bands (behind lines)\n", + " geom_rect(\n", + " data = bands,\n", + " aes(xmin = t_start, xmax = t_end, ymin = -Inf, ymax = Inf, fill = loop_type),\n", + " inherit.aes = FALSE,\n", + " alpha = 0.1\n", + " ) +\n", + " geom_vline(\n", + " xintercept = transition_times,\n", + " colour = \"grey40\",\n", + " linewidth = 0.7,\n", + " alpha = 0.35\n", + " ) +\n", + " geom_line(linewidth = 2) +\n", + " scale_colour_manual(values = colors) +\n", + " scale_fill_brewer(palette = \"Set2\", name = \"Loop structure\") +\n", + " scale_x_continuous(\n", + " breaks = seq(0, 3, 0.5),\n", + " minor_breaks = seq(0, 3, 0.1),\n", + " limits = c(0, 3),\n", + " expand = c(0, 0)\n", + " ) +\n", + " coord_cartesian(xlim = c(0, 3), clip = \"on\") +\n", + " labs(\n", + " title = \"Dynamics of Calcium Oscillation Model\",\n", + " x = \"Time (a.u.)\",\n", + " y = \"Concentration (a.u.)\",\n", + " colour = \"Species\"\n", + " ) +\n", + " theme_minimal(base_size = 16) +\n", + " theme(\n", + " plot.title = element_text(face = \"bold\", hjust = 0.5),\n", + " panel.grid = element_blank(),\n", + " panel.border = element_rect(colour = \"black\", fill = NA, linewidth = 1.1)\n", + " )\n", + "\n", + "plot2\n" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "2f90ae6b", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1] \"Loop structure 1:\"\n" + ] + }, + { + "data": { + "text/html": [ + "
    \n", + "\t
  1. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 2 × 2 of type dbl
    -1 1
    1-1
    \n", + "
  2. \n", + "\t
  3. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 2 × 2 of type dbl
    -1 1
    -1-1
    \n", + "
  4. \n", + "\t
  5. \n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "
    A matrix: 2 × 2 of type dbl
    1 1
    -1-1
    \n", + "
  6. \n", + "
\n" + ], + "text/latex": [ + "\\begin{enumerate}\n", + "\\item A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t -1 & 1\\\\\n", + "\t 1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\item A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t -1 & 1\\\\\n", + "\t -1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\item A matrix: 2 × 2 of type dbl\n", + "\\begin{tabular}{ll}\n", + "\t 1 & 1\\\\\n", + "\t -1 & -1\\\\\n", + "\\end{tabular}\n", + "\n", + "\\end{enumerate}\n" + ], + "text/markdown": [ + "1. \n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| -1 | 1 |\n", + "| 1 | -1 |\n", + "\n", + "\n", + "2. \n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| -1 | 1 |\n", + "| -1 | -1 |\n", + "\n", + "\n", + "3. \n", + "A matrix: 2 × 2 of type dbl\n", + "\n", + "| 1 | 1 |\n", + "| -1 | -1 |\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "[[1]]\n", + " [,1] [,2]\n", + "[1,] -1 1\n", + "[2,] 1 -1\n", + "\n", + "[[2]]\n", + " [,1] [,2]\n", + "[1,] -1 1\n", + "[2,] -1 -1\n", + "\n", + "[[3]]\n", + " [,1] [,2]\n", + "[1,] 1 1\n", + "[2,] -1 -1\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "print(\"Loop structure 1:\")\n", + "res_tab_all$jac_rep" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "3bc28d1d", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 2
len_1len_2
<dbl><dbl>
all21
pos01
neg20
\n" + ], + "text/latex": [ + "A data.frame: 3 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & len\\_1 & len\\_2\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\tall & 2 & 1\\\\\n", + "\tpos & 0 & 1\\\\\n", + "\tneg & 2 & 0\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 2\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> |\n", + "|---|---|---|\n", + "| all | 2 | 1 |\n", + "| pos | 0 | 1 |\n", + "| neg | 2 | 0 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2\n", + "all 2 1 \n", + "pos 0 1 \n", + "neg 2 0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab_all$loop_rep[[1]])" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "0a868f1a", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 2
len_1len_2
<dbl><dbl>
all21
pos00
neg21
\n" + ], + "text/latex": [ + "A data.frame: 3 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & len\\_1 & len\\_2\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\tall & 2 & 1\\\\\n", + "\tpos & 0 & 0\\\\\n", + "\tneg & 2 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 2\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> |\n", + "|---|---|---|\n", + "| all | 2 | 1 |\n", + "| pos | 0 | 0 |\n", + "| neg | 2 | 1 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2\n", + "all 2 1 \n", + "pos 0 0 \n", + "neg 2 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab_all$loop_rep[[2]])" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "cee49cc0", + "metadata": { + "vscode": { + "languageId": "r" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\n", + "
A data.frame: 3 × 2
len_1len_2
<dbl><dbl>
all21
pos10
neg11
\n" + ], + "text/latex": [ + "A data.frame: 3 × 2\n", + "\\begin{tabular}{r|ll}\n", + " & len\\_1 & len\\_2\\\\\n", + " & & \\\\\n", + "\\hline\n", + "\tall & 2 & 1\\\\\n", + "\tpos & 1 & 0\\\\\n", + "\tneg & 1 & 1\\\\\n", + "\\end{tabular}\n" + ], + "text/markdown": [ + "\n", + "A data.frame: 3 × 2\n", + "\n", + "| | len_1 <dbl> | len_2 <dbl> |\n", + "|---|---|---|\n", + "| all | 2 | 1 |\n", + "| pos | 1 | 0 |\n", + "| neg | 1 | 1 |\n", + "\n" + ], + "text/plain": [ + " len_1 len_2\n", + "all 2 1 \n", + "pos 1 0 \n", + "neg 1 1 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "loop_summary(res_tab_all$loop_rep[[3]])" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "R", + "language": "R", + "name": "ir" + }, + "language_info": { + "codemirror_mode": "r", + "file_extension": ".r", + "mimetype": "text/x-r-source", + "name": "R", + "pygments_lexer": "r", + "version": "4.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From e67381cb17097757060d392774a2cf79d0eb7c0f Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Fri, 6 Feb 2026 15:49:50 +0100 Subject: [PATCH 09/12] Remove test cells --- .../model_3_complex_formation_extend_R.ipynb | 86 +- examples/model_5_MAPK_reduced_R.ipynb | 3349 ----------------- 2 files changed, 2 insertions(+), 3433 deletions(-) diff --git a/examples/model_3_complex_formation_extend_R.ipynb b/examples/model_3_complex_formation_extend_R.ipynb index e5f61fe..00b7299 100644 --- a/examples/model_3_complex_formation_extend_R.ipynb +++ b/examples/model_3_complex_formation_extend_R.ipynb @@ -320,7 +320,7 @@ }, { "cell_type": "code", - "execution_count": 113, + "execution_count": 7, "id": "6c2540e5", "metadata": { "vscode": { @@ -415,7 +415,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 8, "id": "3d056cc3", "metadata": { "vscode": { @@ -1178,88 +1178,6 @@ "sol_full <- rbind(sol_unstimulated, sol_stimulated) " ] }, - { - "cell_type": "code", - "execution_count": 72, - "id": "dccf2428", - "metadata": { - "vscode": { - "languageId": "r" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
1
0.000179595764252493
2
294.947054865258
3
4.99992040423706
4
0.0631247304972202
\n" - ], - "text/latex": [ - "\\begin{description*}\n", - "\\item[1] 0.000179595764252493\n", - "\\item[2] 294.947054865258\n", - "\\item[3] 4.99992040423706\n", - "\\item[4] 0.0631247304972202\n", - "\\end{description*}\n" - ], - "text/markdown": [ - "1\n", - ": 0.0001795957642524932\n", - ": 294.9470548652583\n", - ": 4.999920404237064\n", - ": 0.0631247304972202\n", - "\n" - ], - "text/plain": [ - " 1 2 3 4 \n", - "1.795958e-04 2.949471e+02 4.999920e+00 6.312473e-02 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sol_unstimulated[nrow(sol_unstimulated),2:5]" - ] - }, - { - "cell_type": "code", - "execution_count": 73, - "id": "25b4f1c6", - "metadata": { - "vscode": { - "languageId": "r" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "10001" - ], - "text/latex": [ - "10001" - ], - "text/markdown": [ - "10001" - ], - "text/plain": [ - "[1] 10001" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "nrow(sol_unstimulated)" - ] - }, { "cell_type": "code", "execution_count": 123, diff --git a/examples/model_5_MAPK_reduced_R.ipynb b/examples/model_5_MAPK_reduced_R.ipynb index f825bff..9a18c09 100644 --- a/examples/model_5_MAPK_reduced_R.ipynb +++ b/examples/model_5_MAPK_reduced_R.ipynb @@ -1370,3355 +1370,6 @@ "res_tab_all <- find_loops_vset(model_mapk_simple_w_feedback,vset=sol_list,t=1,klin=klin,kn=kn,n1=n1)" ] }, - { - "cell_type": "code", - "execution_count": 102, - "id": "ec8b3250", - "metadata": { - "vscode": { - "languageId": "r" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\t
$loop_rep
\n", - "\t\t
    \n", - "\t
  1. \n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
    A data.frame: 31 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11-1
    2, 21-1
    3, 31-1
    4, 41-1
    5, 51-1
    6, 61-1
    7, 71-1
    8, 81-1
    1, 2, 12 1
    3, 4, 32 1
    4, 5, 42 1
    6, 7, 62 1
    5, 8, 1,....6-1
    5, 8, 1,....5 1
    5, 8, 1,....4 1
    5, 8, 2,....5 1
    5, 8, 2,....4-1
    5, 8, 2, 53-1
    7, 8, 1,....8 1
    7, 8, 1,....7 1
    7, 8, 1,....7-1
    7, 8, 1,....6-1
    7, 8, 1,....6-1
    7, 8, 1,....5-1
    7, 8, 2,....7-1
    7, 8, 2,....6-1
    7, 8, 2,....6 1
    7, 8, 2,....5 1
    7, 8, 2,....5 1
    7, 8, 2,....4 1
    7, 8, 72 1
    \n", - "
  2. \n", - "\t
  3. \n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
    A data.frame: 31 × 3
    looplengthsign
    <I<list>><dbl><dbl>
    1, 11-1
    2, 21-1
    3, 31-1
    4, 41-1
    5, 51-1
    6, 61-1
    7, 71-1
    8, 81-1
    1, 2, 12 1
    3, 4, 32 1
    4, 5, 42 1
    6, 7, 62 1
    5, 8, 1,....6-1
    5, 8, 1,....5 1
    5, 8, 1,....4 1
    5, 8, 2,....5 1
    5, 8, 2,....4-1
    5, 8, 2, 53-1
    7, 8, 1,....8 1
    7, 8, 1,....7-1
    7, 8, 1,....7-1
    7, 8, 1,....6 1
    7, 8, 1,....6-1
    7, 8, 1,....5 1
    7, 8, 2,....7-1
    7, 8, 2,....6 1
    7, 8, 2,....6 1
    7, 8, 2,....5-1
    7, 8, 2,....5 1
    7, 8, 2,....4-1
    7, 8, 72 1
    \n", - "
  4. \n", - "
\n", - "
\n", - "\t
$loop_rep_index
\n", - "\t\t
\n", - "
  1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61. 1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 1
  107. 1
  108. 1
  109. 1
  110. 2
  111. 2
  112. 2
  113. 2
  114. 2
  115. 2
  116. 2
  117. 2
  118. 2
  119. 2
  120. 2
  121. 2
  122. 2
  123. 2
  124. 2
  125. 2
  126. 2
  127. 2
  128. 2
  129. 2
  130. 2
  131. 2
  132. 2
  133. 2
  134. 2
  135. 2
  136. 2
  137. 2
  138. 2
  139. 2
  140. 2
  141. 2
  142. 2
  143. 2
  144. 2
  145. 2
  146. 2
  147. 2
  148. 2
  149. 2
  150. 2
  151. 2
  152. 2
  153. 2
  154. 2
  155. 2
  156. 2
  157. 2
  158. 2
  159. 2
  160. 2
  161. 2
  162. 2
  163. 2
  164. 2
  165. 2
  166. 2
  167. 2
  168. 2
  169. 2
  170. 2
  171. 2
  172. 2
  173. 2
  174. 2
  175. 2
  176. 2
  177. 2
  178. 2
  179. 2
  180. 2
  181. 2
  182. 2
  183. 2
  184. 2
  185. 2
  186. 2
  187. 2
  188. 2
  189. 2
  190. 2
  191. 2
  192. 2
  193. 2
  194. 2
  195. 2
  196. 2
  197. 2
  198. 2
  199. 2
  200. 2
  201. 1
  202. 1
  203. 1
  204. 1
  205. 1
  206. 1
  207. 1
  208. 1
  209. 1
  210. 1
  211. 1
  212. 1
  213. 1
  214. 1
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 1
  228. 1
  229. 1
  230. 1
  231. 1
  232. 1
  233. 1
  234. 1
  235. 1
  236. 1
  237. 1
  238. 1
  239. 1
  240. 1
  241. 1
  242. 1
  243. 1
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 1
  251. 1
  252. 1
  253. 1
  254. 1
  255. 1
  256. 1
  257. 1
  258. 1
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 1
  267. 1
  268. 1
  269. 1
  270. 1
  271. 1
  272. 1
  273. 1
  274. 1
  275. 1
  276. 1
  277. 1
  278. 1
  279. 1
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 1
  291. 1
  292. 1
  293. 1
  294. 1
  295. 1
  296. 1
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 1
  303. 1
  304. 1
  305. 1
  306. 1
  307. 1
  308. 1
  309. 1
  310. 1
  311. 1
  312. 1
  313. 1
  314. 1
  315. 1
  316. 1
  317. 1
  318. 1
  319. 1
  320. 1
  321. 1
  322. 1
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 1
  333. 1
  334. 1
  335. 1
  336. 1
  337. 1
  338. 1
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 1
  351. 1
  352. 1
  353. 1
  354. 1
  355. 1
  356. 1
  357. 1
  358. 1
  359. 1
  360. 1
  361. 1
  362. 1
  363. 1
  364. 1
  365. 1
  366. 1
  367. 1
  368. 1
  369. 1
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 1
  376. 1
  377. 1
  378. 1
  379. 1
  380. 1
  381. 1
  382. 1
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 1
  400. 1
\n", - "
\n", - "\t
$jac_rep
\n", - "\t\t
    \n", - "\t
  1. \n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
    A matrix: 8 × 8 of type dbl
    -1 1 0 0 0 0 0 1
    1-1 0 0 0 0 0-1
    0-1-1 1 0 0 0 0
    0 1 1-1 1 0 0 0
    0 1 0 1-1 0 0 0
    0 0 0 0-1-1 1 0
    0 0 0 0-1 1-1 1
    0 0 0 0 1 0 1-1
    \n", - "
  2. \n", - "\t
  3. \n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
    A matrix: 8 × 8 of type dbl
    -1 1 0 0 0 0 0 1
    1-1 0 0 0 0 0-1
    0-1-1 1 0 0 0 0
    0 1 1-1 1 0 0 0
    0 1 0 1-1 0 0 0
    0 0 0 0-1-1 1 0
    0 0 0 0 1 1-1 1
    0 0 0 0 1 0 1-1
    \n", - "
  4. \n", - "
\n", - "
\n", - "\t
$jac_rep_index
\n", - "\t\t
\n", - "
  1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61. 1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 1
  107. 1
  108. 1
  109. 1
  110. 2
  111. 2
  112. 2
  113. 2
  114. 2
  115. 2
  116. 2
  117. 2
  118. 2
  119. 2
  120. 2
  121. 2
  122. 2
  123. 2
  124. 2
  125. 2
  126. 2
  127. 2
  128. 2
  129. 2
  130. 2
  131. 2
  132. 2
  133. 2
  134. 2
  135. 2
  136. 2
  137. 2
  138. 2
  139. 2
  140. 2
  141. 2
  142. 2
  143. 2
  144. 2
  145. 2
  146. 2
  147. 2
  148. 2
  149. 2
  150. 2
  151. 2
  152. 2
  153. 2
  154. 2
  155. 2
  156. 2
  157. 2
  158. 2
  159. 2
  160. 2
  161. 2
  162. 2
  163. 2
  164. 2
  165. 2
  166. 2
  167. 2
  168. 2
  169. 2
  170. 2
  171. 2
  172. 2
  173. 2
  174. 2
  175. 2
  176. 2
  177. 2
  178. 2
  179. 2
  180. 2
  181. 2
  182. 2
  183. 2
  184. 2
  185. 2
  186. 2
  187. 2
  188. 2
  189. 2
  190. 2
  191. 2
  192. 2
  193. 2
  194. 2
  195. 2
  196. 2
  197. 2
  198. 2
  199. 2
  200. 2
  201. 1
  202. 1
  203. 1
  204. 1
  205. 1
  206. 1
  207. 1
  208. 1
  209. 1
  210. 1
  211. 1
  212. 1
  213. 1
  214. 1
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 1
  228. 1
  229. 1
  230. 1
  231. 1
  232. 1
  233. 1
  234. 1
  235. 1
  236. 1
  237. 1
  238. 1
  239. 1
  240. 1
  241. 1
  242. 1
  243. 1
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 1
  251. 1
  252. 1
  253. 1
  254. 1
  255. 1
  256. 1
  257. 1
  258. 1
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 1
  267. 1
  268. 1
  269. 1
  270. 1
  271. 1
  272. 1
  273. 1
  274. 1
  275. 1
  276. 1
  277. 1
  278. 1
  279. 1
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 1
  291. 1
  292. 1
  293. 1
  294. 1
  295. 1
  296. 1
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 1
  303. 1
  304. 1
  305. 1
  306. 1
  307. 1
  308. 1
  309. 1
  310. 1
  311. 1
  312. 1
  313. 1
  314. 1
  315. 1
  316. 1
  317. 1
  318. 1
  319. 1
  320. 1
  321. 1
  322. 1
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 1
  333. 1
  334. 1
  335. 1
  336. 1
  337. 1
  338. 1
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 1
  351. 1
  352. 1
  353. 1
  354. 1
  355. 1
  356. 1
  357. 1
  358. 1
  359. 1
  360. 1
  361. 1
  362. 1
  363. 1
  364. 1
  365. 1
  366. 1
  367. 1
  368. 1
  369. 1
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 1
  376. 1
  377. 1
  378. 1
  379. 1
  380. 1
  381. 1
  382. 1
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 1
  400. 1
\n", - "
\n", - "
\n" - ], - "text/latex": [ - "\\begin{description}\n", - "\\item[\\$loop\\_rep] \\begin{enumerate}\n", - "\\item A data.frame: 31 × 3\n", - "\\begin{tabular}{lll}\n", - " loop & length & sign\\\\\n", - " > & & \\\\\n", - "\\hline\n", - "\t 1, 1 & 1 & -1\\\\\n", - "\t 2, 2 & 1 & -1\\\\\n", - "\t 3, 3 & 1 & -1\\\\\n", - "\t 4, 4 & 1 & -1\\\\\n", - "\t 5, 5 & 1 & -1\\\\\n", - "\t 6, 6 & 1 & -1\\\\\n", - "\t 7, 7 & 1 & -1\\\\\n", - "\t 8, 8 & 1 & -1\\\\\n", - "\t 1, 2, 1 & 2 & 1\\\\\n", - "\t 3, 4, 3 & 2 & 1\\\\\n", - "\t 4, 5, 4 & 2 & 1\\\\\n", - "\t 6, 7, 6 & 2 & 1\\\\\n", - "\t 5, 8, 1,.... & 6 & -1\\\\\n", - "\t 5, 8, 1,.... & 5 & 1\\\\\n", - "\t 5, 8, 1,.... & 4 & 1\\\\\n", - "\t 5, 8, 2,.... & 5 & 1\\\\\n", - "\t 5, 8, 2,.... & 4 & -1\\\\\n", - "\t 5, 8, 2, 5 & 3 & -1\\\\\n", - "\t 7, 8, 1,.... & 8 & 1\\\\\n", - "\t 7, 8, 1,.... & 7 & 1\\\\\n", - "\t 7, 8, 1,.... & 7 & -1\\\\\n", - "\t 7, 8, 1,.... & 6 & -1\\\\\n", - "\t 7, 8, 1,.... & 6 & -1\\\\\n", - "\t 7, 8, 1,.... & 5 & -1\\\\\n", - "\t 7, 8, 2,.... & 7 & -1\\\\\n", - "\t 7, 8, 2,.... & 6 & -1\\\\\n", - "\t 7, 8, 2,.... & 6 & 1\\\\\n", - "\t 7, 8, 2,.... & 5 & 1\\\\\n", - "\t 7, 8, 2,.... & 5 & 1\\\\\n", - "\t 7, 8, 2,.... & 4 & 1\\\\\n", - "\t 7, 8, 7 & 2 & 1\\\\\n", - "\\end{tabular}\n", - "\n", - "\\item A data.frame: 31 × 3\n", - "\\begin{tabular}{lll}\n", - " loop & length & sign\\\\\n", - " > & & \\\\\n", - "\\hline\n", - "\t 1, 1 & 1 & -1\\\\\n", - "\t 2, 2 & 1 & -1\\\\\n", - "\t 3, 3 & 1 & -1\\\\\n", - "\t 4, 4 & 1 & -1\\\\\n", - "\t 5, 5 & 1 & -1\\\\\n", - "\t 6, 6 & 1 & -1\\\\\n", - "\t 7, 7 & 1 & -1\\\\\n", - "\t 8, 8 & 1 & -1\\\\\n", - "\t 1, 2, 1 & 2 & 1\\\\\n", - "\t 3, 4, 3 & 2 & 1\\\\\n", - "\t 4, 5, 4 & 2 & 1\\\\\n", - "\t 6, 7, 6 & 2 & 1\\\\\n", - "\t 5, 8, 1,.... & 6 & -1\\\\\n", - "\t 5, 8, 1,.... & 5 & 1\\\\\n", - "\t 5, 8, 1,.... & 4 & 1\\\\\n", - "\t 5, 8, 2,.... & 5 & 1\\\\\n", - "\t 5, 8, 2,.... & 4 & -1\\\\\n", - "\t 5, 8, 2, 5 & 3 & -1\\\\\n", - "\t 7, 8, 1,.... & 8 & 1\\\\\n", - "\t 7, 8, 1,.... & 7 & -1\\\\\n", - "\t 7, 8, 1,.... & 7 & -1\\\\\n", - "\t 7, 8, 1,.... & 6 & 1\\\\\n", - "\t 7, 8, 1,.... & 6 & -1\\\\\n", - "\t 7, 8, 1,.... & 5 & 1\\\\\n", - "\t 7, 8, 2,.... & 7 & -1\\\\\n", - "\t 7, 8, 2,.... & 6 & 1\\\\\n", - "\t 7, 8, 2,.... & 6 & 1\\\\\n", - "\t 7, 8, 2,.... & 5 & -1\\\\\n", - "\t 7, 8, 2,.... & 5 & 1\\\\\n", - "\t 7, 8, 2,.... & 4 & -1\\\\\n", - "\t 7, 8, 7 & 2 & 1\\\\\n", - "\\end{tabular}\n", - "\n", - "\\end{enumerate}\n", - "\n", - "\\item[\\$loop\\_rep\\_index] \\begin{enumerate*}\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item ⋯\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\end{enumerate*}\n", - "\n", - "\\item[\\$jac\\_rep] \\begin{enumerate}\n", - "\\item A matrix: 8 × 8 of type dbl\n", - "\\begin{tabular}{llllllll}\n", - "\t -1 & 1 & 0 & 0 & 0 & 0 & 0 & 1\\\\\n", - "\t 1 & -1 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", - "\t 0 & -1 & -1 & 1 & 0 & 0 & 0 & 0\\\\\n", - "\t 0 & 1 & 1 & -1 & 1 & 0 & 0 & 0\\\\\n", - "\t 0 & 1 & 0 & 1 & -1 & 0 & 0 & 0\\\\\n", - "\t 0 & 0 & 0 & 0 & -1 & -1 & 1 & 0\\\\\n", - "\t 0 & 0 & 0 & 0 & -1 & 1 & -1 & 1\\\\\n", - "\t 0 & 0 & 0 & 0 & 1 & 0 & 1 & -1\\\\\n", - "\\end{tabular}\n", - "\n", - "\\item A matrix: 8 × 8 of type dbl\n", - "\\begin{tabular}{llllllll}\n", - "\t -1 & 1 & 0 & 0 & 0 & 0 & 0 & 1\\\\\n", - "\t 1 & -1 & 0 & 0 & 0 & 0 & 0 & -1\\\\\n", - "\t 0 & -1 & -1 & 1 & 0 & 0 & 0 & 0\\\\\n", - "\t 0 & 1 & 1 & -1 & 1 & 0 & 0 & 0\\\\\n", - "\t 0 & 1 & 0 & 1 & -1 & 0 & 0 & 0\\\\\n", - "\t 0 & 0 & 0 & 0 & -1 & -1 & 1 & 0\\\\\n", - "\t 0 & 0 & 0 & 0 & 1 & 1 & -1 & 1\\\\\n", - "\t 0 & 0 & 0 & 0 & 1 & 0 & 1 & -1\\\\\n", - "\\end{tabular}\n", - "\n", - "\\end{enumerate}\n", - "\n", - "\\item[\\$jac\\_rep\\_index] \\begin{enumerate*}\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item ⋯\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\end{enumerate*}\n", - "\n", - "\\end{description}\n" - ], - "text/markdown": [ - "$loop_rep\n", - ": 1. \n", - "A data.frame: 31 × 3\n", - "\n", - "| loop <I<list>> | length <dbl> | sign <dbl> |\n", - "|---|---|---|\n", - "| 1, 1 | 1 | -1 |\n", - "| 2, 2 | 1 | -1 |\n", - "| 3, 3 | 1 | -1 |\n", - "| 4, 4 | 1 | -1 |\n", - "| 5, 5 | 1 | -1 |\n", - "| 6, 6 | 1 | -1 |\n", - "| 7, 7 | 1 | -1 |\n", - "| 8, 8 | 1 | -1 |\n", - "| 1, 2, 1 | 2 | 1 |\n", - "| 3, 4, 3 | 2 | 1 |\n", - "| 4, 5, 4 | 2 | 1 |\n", - "| 6, 7, 6 | 2 | 1 |\n", - "| 5, 8, 1,.... | 6 | -1 |\n", - "| 5, 8, 1,.... | 5 | 1 |\n", - "| 5, 8, 1,.... | 4 | 1 |\n", - "| 5, 8, 2,.... | 5 | 1 |\n", - "| 5, 8, 2,.... | 4 | -1 |\n", - "| 5, 8, 2, 5 | 3 | -1 |\n", - "| 7, 8, 1,.... | 8 | 1 |\n", - "| 7, 8, 1,.... | 7 | 1 |\n", - "| 7, 8, 1,.... | 7 | -1 |\n", - "| 7, 8, 1,.... | 6 | -1 |\n", - "| 7, 8, 1,.... | 6 | -1 |\n", - "| 7, 8, 1,.... | 5 | -1 |\n", - "| 7, 8, 2,.... | 7 | -1 |\n", - "| 7, 8, 2,.... | 6 | -1 |\n", - "| 7, 8, 2,.... | 6 | 1 |\n", - "| 7, 8, 2,.... | 5 | 1 |\n", - "| 7, 8, 2,.... | 5 | 1 |\n", - "| 7, 8, 2,.... | 4 | 1 |\n", - "| 7, 8, 7 | 2 | 1 |\n", - "\n", - "\n", - "2. \n", - "A data.frame: 31 × 3\n", - "\n", - "| loop <I<list>> | length <dbl> | sign <dbl> |\n", - "|---|---|---|\n", - "| 1, 1 | 1 | -1 |\n", - "| 2, 2 | 1 | -1 |\n", - "| 3, 3 | 1 | -1 |\n", - "| 4, 4 | 1 | -1 |\n", - "| 5, 5 | 1 | -1 |\n", - "| 6, 6 | 1 | -1 |\n", - "| 7, 7 | 1 | -1 |\n", - "| 8, 8 | 1 | -1 |\n", - "| 1, 2, 1 | 2 | 1 |\n", - "| 3, 4, 3 | 2 | 1 |\n", - "| 4, 5, 4 | 2 | 1 |\n", - "| 6, 7, 6 | 2 | 1 |\n", - "| 5, 8, 1,.... | 6 | -1 |\n", - "| 5, 8, 1,.... | 5 | 1 |\n", - "| 5, 8, 1,.... | 4 | 1 |\n", - "| 5, 8, 2,.... | 5 | 1 |\n", - "| 5, 8, 2,.... | 4 | -1 |\n", - "| 5, 8, 2, 5 | 3 | -1 |\n", - "| 7, 8, 1,.... | 8 | 1 |\n", - "| 7, 8, 1,.... | 7 | -1 |\n", - "| 7, 8, 1,.... | 7 | -1 |\n", - "| 7, 8, 1,.... | 6 | 1 |\n", - "| 7, 8, 1,.... | 6 | -1 |\n", - "| 7, 8, 1,.... | 5 | 1 |\n", - "| 7, 8, 2,.... | 7 | -1 |\n", - "| 7, 8, 2,.... | 6 | 1 |\n", - "| 7, 8, 2,.... | 6 | 1 |\n", - "| 7, 8, 2,.... | 5 | -1 |\n", - "| 7, 8, 2,.... | 5 | 1 |\n", - "| 7, 8, 2,.... | 4 | -1 |\n", - "| 7, 8, 7 | 2 | 1 |\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "$loop_rep_index\n", - ": 1. 1\n", - "2. 1\n", - "3. 1\n", - "4. 1\n", - "5. 1\n", - "6. 1\n", - "7. 1\n", - "8. 1\n", - "9. 1\n", - "10. 1\n", - "11. 1\n", - "12. 1\n", - "13. 1\n", - "14. 1\n", - "15. 1\n", - "16. 1\n", - "17. 1\n", - "18. 1\n", - "19. 1\n", - "20. 1\n", - "21. 1\n", - "22. 1\n", - "23. 1\n", - "24. 1\n", - "25. 1\n", - "26. 1\n", - "27. 1\n", - "28. 1\n", - "29. 1\n", - "30. 1\n", - "31. 1\n", - "32. 1\n", - "33. 1\n", - "34. 1\n", - "35. 1\n", - "36. 1\n", - "37. 1\n", - "38. 1\n", - "39. 1\n", - "40. 1\n", - "41. 1\n", - "42. 1\n", - "43. 1\n", - "44. 1\n", - "45. 1\n", - "46. 1\n", - "47. 1\n", - "48. 1\n", - "49. 1\n", - "50. 1\n", - "51. 1\n", - "52. 1\n", - "53. 1\n", - "54. 1\n", - "55. 1\n", - "56. 1\n", - "57. 1\n", - "58. 1\n", - "59. 1\n", - "60. 1\n", - "61. 1\n", - "62. 1\n", - "63. 1\n", - "64. 1\n", - "65. 1\n", - "66. 1\n", - "67. 1\n", - "68. 1\n", - "69. 1\n", - "70. 1\n", - "71. 1\n", - "72. 1\n", - "73. 1\n", - "74. 1\n", - "75. 1\n", - "76. 1\n", - "77. 1\n", - "78. 1\n", - "79. 1\n", - "80. 1\n", - "81. 1\n", - "82. 1\n", - "83. 1\n", - "84. 1\n", - "85. 1\n", - "86. 1\n", - "87. 1\n", - "88. 1\n", - "89. 1\n", - "90. 1\n", - "91. 1\n", - "92. 1\n", - "93. 1\n", - "94. 1\n", - "95. 1\n", - "96. 1\n", - "97. 1\n", - "98. 1\n", - "99. 1\n", - "100. 1\n", - "101. 1\n", - "102. 1\n", - "103. 1\n", - "104. 1\n", - "105. 1\n", - "106. 1\n", - "107. 1\n", - "108. 1\n", - "109. 1\n", - "110. 2\n", - "111. 2\n", - "112. 2\n", - "113. 2\n", - "114. 2\n", - "115. 2\n", - "116. 2\n", - "117. 2\n", - "118. 2\n", - "119. 2\n", - "120. 2\n", - "121. 2\n", - "122. 2\n", - "123. 2\n", - "124. 2\n", - "125. 2\n", - "126. 2\n", - "127. 2\n", - "128. 2\n", - "129. 2\n", - "130. 2\n", - "131. 2\n", - "132. 2\n", - "133. 2\n", - "134. 2\n", - "135. 2\n", - "136. 2\n", - "137. 2\n", - "138. 2\n", - "139. 2\n", - "140. 2\n", - "141. 2\n", - "142. 2\n", - "143. 2\n", - "144. 2\n", - "145. 2\n", - "146. 2\n", - "147. 2\n", - "148. 2\n", - "149. 2\n", - "150. 2\n", - "151. 2\n", - "152. 2\n", - "153. 2\n", - "154. 2\n", - "155. 2\n", - "156. 2\n", - "157. 2\n", - "158. 2\n", - "159. 2\n", - "160. 2\n", - "161. 2\n", - "162. 2\n", - "163. 2\n", - "164. 2\n", - "165. 2\n", - "166. 2\n", - "167. 2\n", - "168. 2\n", - "169. 2\n", - "170. 2\n", - "171. 2\n", - "172. 2\n", - "173. 2\n", - "174. 2\n", - "175. 2\n", - "176. 2\n", - "177. 2\n", - "178. 2\n", - "179. 2\n", - "180. 2\n", - "181. 2\n", - "182. 2\n", - "183. 2\n", - "184. 2\n", - "185. 2\n", - "186. 2\n", - "187. 2\n", - "188. 2\n", - "189. 2\n", - "190. 2\n", - "191. 2\n", - "192. 2\n", - "193. 2\n", - "194. 2\n", - "195. 2\n", - "196. 2\n", - "197. 2\n", - "198. 2\n", - "199. 2\n", - "200. 2\n", - "201. ⋯\n", - "202. 1\n", - "203. 1\n", - "204. 1\n", - "205. 1\n", - "206. 1\n", - "207. 1\n", - "208. 1\n", - "209. 1\n", - "210. 1\n", - "211. 1\n", - "212. 1\n", - "213. 1\n", - "214. 1\n", - "215. 1\n", - "216. 1\n", - "217. 1\n", - "218. 1\n", - "219. 1\n", - "220. 1\n", - "221. 1\n", - "222. 1\n", - "223. 1\n", - "224. 1\n", - "225. 1\n", - "226. 1\n", - "227. 1\n", - "228. 1\n", - "229. 1\n", - "230. 1\n", - "231. 1\n", - "232. 1\n", - "233. 1\n", - "234. 1\n", - "235. 1\n", - "236. 1\n", - "237. 1\n", - "238. 1\n", - "239. 1\n", - "240. 1\n", - "241. 1\n", - "242. 1\n", - "243. 1\n", - "244. 1\n", - "245. 1\n", - "246. 1\n", - "247. 1\n", - "248. 1\n", - "249. 1\n", - "250. 1\n", - "251. 1\n", - "252. 1\n", - "253. 1\n", - "254. 1\n", - "255. 1\n", - "256. 1\n", - "257. 1\n", - "258. 1\n", - "259. 1\n", - "260. 1\n", - "261. 1\n", - "262. 1\n", - "263. 1\n", - "264. 1\n", - "265. 1\n", - "266. 1\n", - "267. 1\n", - "268. 1\n", - "269. 1\n", - "270. 1\n", - "271. 1\n", - "272. 1\n", - "273. 1\n", - "274. 1\n", - "275. 1\n", - "276. 1\n", - "277. 1\n", - "278. 1\n", - "279. 1\n", - "280. 1\n", - "281. 1\n", - "282. 1\n", - "283. 1\n", - "284. 1\n", - "285. 1\n", - "286. 1\n", - "287. 1\n", - "288. 1\n", - "289. 1\n", - "290. 1\n", - "291. 1\n", - "292. 1\n", - "293. 1\n", - "294. 1\n", - "295. 1\n", - "296. 1\n", - "297. 1\n", - "298. 1\n", - "299. 1\n", - "300. 1\n", - "301. 1\n", - "302. 1\n", - "303. 1\n", - "304. 1\n", - "305. 1\n", - "306. 1\n", - "307. 1\n", - "308. 1\n", - "309. 1\n", - "310. 1\n", - "311. 1\n", - "312. 1\n", - "313. 1\n", - "314. 1\n", - "315. 1\n", - "316. 1\n", - "317. 1\n", - "318. 1\n", - "319. 1\n", - "320. 1\n", - "321. 1\n", - "322. 1\n", - "323. 1\n", - "324. 1\n", - "325. 1\n", - "326. 1\n", - "327. 1\n", - "328. 1\n", - "329. 1\n", - "330. 1\n", - "331. 1\n", - "332. 1\n", - "333. 1\n", - "334. 1\n", - "335. 1\n", - "336. 1\n", - "337. 1\n", - "338. 1\n", - "339. 1\n", - "340. 1\n", - "341. 1\n", - "342. 1\n", - "343. 1\n", - "344. 1\n", - "345. 1\n", - "346. 1\n", - "347. 1\n", - "348. 1\n", - "349. 1\n", - "350. 1\n", - "351. 1\n", - "352. 1\n", - "353. 1\n", - "354. 1\n", - "355. 1\n", - "356. 1\n", - "357. 1\n", - "358. 1\n", - "359. 1\n", - "360. 1\n", - "361. 1\n", - "362. 1\n", - "363. 1\n", - "364. 1\n", - "365. 1\n", - "366. 1\n", - "367. 1\n", - "368. 1\n", - "369. 1\n", - "370. 1\n", - "371. 1\n", - "372. 1\n", - "373. 1\n", - "374. 1\n", - "375. 1\n", - "376. 1\n", - "377. 1\n", - "378. 1\n", - "379. 1\n", - "380. 1\n", - "381. 1\n", - "382. 1\n", - "383. 1\n", - "384. 1\n", - "385. 1\n", - "386. 1\n", - "387. 1\n", - "388. 1\n", - "389. 1\n", - "390. 1\n", - "391. 1\n", - "392. 1\n", - "393. 1\n", - "394. 1\n", - "395. 1\n", - "396. 1\n", - "397. 1\n", - "398. 1\n", - "399. 1\n", - "400. 1\n", - "401. 1\n", - "\n", - "\n", - "\n", - "$jac_rep\n", - ": 1. \n", - "A matrix: 8 × 8 of type dbl\n", - "\n", - "| -1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |\n", - "| 1 | -1 | 0 | 0 | 0 | 0 | 0 | -1 |\n", - "| 0 | -1 | -1 | 1 | 0 | 0 | 0 | 0 |\n", - "| 0 | 1 | 1 | -1 | 1 | 0 | 0 | 0 |\n", - "| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0 |\n", - "| 0 | 0 | 0 | 0 | -1 | -1 | 1 | 0 |\n", - "| 0 | 0 | 0 | 0 | -1 | 1 | -1 | 1 |\n", - "| 0 | 0 | 0 | 0 | 1 | 0 | 1 | -1 |\n", - "\n", - "\n", - "2. \n", - "A matrix: 8 × 8 of type dbl\n", - "\n", - "| -1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |\n", - "| 1 | -1 | 0 | 0 | 0 | 0 | 0 | -1 |\n", - "| 0 | -1 | -1 | 1 | 0 | 0 | 0 | 0 |\n", - "| 0 | 1 | 1 | -1 | 1 | 0 | 0 | 0 |\n", - "| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0 |\n", - "| 0 | 0 | 0 | 0 | -1 | -1 | 1 | 0 |\n", - "| 0 | 0 | 0 | 0 | 1 | 1 | -1 | 1 |\n", - "| 0 | 0 | 0 | 0 | 1 | 0 | 1 | -1 |\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "$jac_rep_index\n", - ": 1. 1\n", - "2. 1\n", - "3. 1\n", - "4. 1\n", - "5. 1\n", - "6. 1\n", - "7. 1\n", - "8. 1\n", - "9. 1\n", - "10. 1\n", - "11. 1\n", - "12. 1\n", - "13. 1\n", - "14. 1\n", - "15. 1\n", - "16. 1\n", - "17. 1\n", - "18. 1\n", - "19. 1\n", - "20. 1\n", - "21. 1\n", - "22. 1\n", - "23. 1\n", - "24. 1\n", - "25. 1\n", - "26. 1\n", - "27. 1\n", - "28. 1\n", - "29. 1\n", - "30. 1\n", - "31. 1\n", - "32. 1\n", - "33. 1\n", - "34. 1\n", - "35. 1\n", - "36. 1\n", - "37. 1\n", - "38. 1\n", - "39. 1\n", - "40. 1\n", - "41. 1\n", - "42. 1\n", - "43. 1\n", - "44. 1\n", - "45. 1\n", - "46. 1\n", - "47. 1\n", - "48. 1\n", - "49. 1\n", - "50. 1\n", - "51. 1\n", - "52. 1\n", - "53. 1\n", - "54. 1\n", - "55. 1\n", - "56. 1\n", - "57. 1\n", - "58. 1\n", - "59. 1\n", - "60. 1\n", - "61. 1\n", - "62. 1\n", - "63. 1\n", - "64. 1\n", - "65. 1\n", - "66. 1\n", - "67. 1\n", - "68. 1\n", - "69. 1\n", - "70. 1\n", - "71. 1\n", - "72. 1\n", - "73. 1\n", - "74. 1\n", - "75. 1\n", - "76. 1\n", - "77. 1\n", - "78. 1\n", - "79. 1\n", - "80. 1\n", - "81. 1\n", - "82. 1\n", - "83. 1\n", - "84. 1\n", - "85. 1\n", - "86. 1\n", - "87. 1\n", - "88. 1\n", - "89. 1\n", - "90. 1\n", - "91. 1\n", - "92. 1\n", - "93. 1\n", - "94. 1\n", - "95. 1\n", - "96. 1\n", - "97. 1\n", - "98. 1\n", - "99. 1\n", - "100. 1\n", - "101. 1\n", - "102. 1\n", - "103. 1\n", - "104. 1\n", - "105. 1\n", - "106. 1\n", - "107. 1\n", - "108. 1\n", - "109. 1\n", - "110. 2\n", - "111. 2\n", - "112. 2\n", - "113. 2\n", - "114. 2\n", - "115. 2\n", - "116. 2\n", - "117. 2\n", - "118. 2\n", - "119. 2\n", - "120. 2\n", - "121. 2\n", - "122. 2\n", - "123. 2\n", - "124. 2\n", - "125. 2\n", - "126. 2\n", - "127. 2\n", - "128. 2\n", - "129. 2\n", - "130. 2\n", - "131. 2\n", - "132. 2\n", - "133. 2\n", - "134. 2\n", - "135. 2\n", - "136. 2\n", - "137. 2\n", - "138. 2\n", - "139. 2\n", - "140. 2\n", - "141. 2\n", - "142. 2\n", - "143. 2\n", - "144. 2\n", - "145. 2\n", - "146. 2\n", - "147. 2\n", - "148. 2\n", - "149. 2\n", - "150. 2\n", - "151. 2\n", - "152. 2\n", - "153. 2\n", - "154. 2\n", - "155. 2\n", - "156. 2\n", - "157. 2\n", - "158. 2\n", - "159. 2\n", - "160. 2\n", - "161. 2\n", - "162. 2\n", - "163. 2\n", - "164. 2\n", - "165. 2\n", - "166. 2\n", - "167. 2\n", - "168. 2\n", - "169. 2\n", - "170. 2\n", - "171. 2\n", - "172. 2\n", - "173. 2\n", - "174. 2\n", - "175. 2\n", - "176. 2\n", - "177. 2\n", - "178. 2\n", - "179. 2\n", - "180. 2\n", - "181. 2\n", - "182. 2\n", - "183. 2\n", - "184. 2\n", - "185. 2\n", - "186. 2\n", - "187. 2\n", - "188. 2\n", - "189. 2\n", - "190. 2\n", - "191. 2\n", - "192. 2\n", - "193. 2\n", - "194. 2\n", - "195. 2\n", - "196. 2\n", - "197. 2\n", - "198. 2\n", - "199. 2\n", - "200. 2\n", - "201. ⋯\n", - "202. 1\n", - "203. 1\n", - "204. 1\n", - "205. 1\n", - "206. 1\n", - "207. 1\n", - "208. 1\n", - "209. 1\n", - "210. 1\n", - "211. 1\n", - "212. 1\n", - "213. 1\n", - "214. 1\n", - "215. 1\n", - "216. 1\n", - "217. 1\n", - "218. 1\n", - "219. 1\n", - "220. 1\n", - "221. 1\n", - "222. 1\n", - "223. 1\n", - "224. 1\n", - "225. 1\n", - "226. 1\n", - "227. 1\n", - "228. 1\n", - "229. 1\n", - "230. 1\n", - "231. 1\n", - "232. 1\n", - "233. 1\n", - "234. 1\n", - "235. 1\n", - "236. 1\n", - "237. 1\n", - "238. 1\n", - "239. 1\n", - "240. 1\n", - "241. 1\n", - "242. 1\n", - "243. 1\n", - "244. 1\n", - "245. 1\n", - "246. 1\n", - "247. 1\n", - "248. 1\n", - "249. 1\n", - "250. 1\n", - "251. 1\n", - "252. 1\n", - "253. 1\n", - "254. 1\n", - "255. 1\n", - "256. 1\n", - "257. 1\n", - "258. 1\n", - "259. 1\n", - "260. 1\n", - "261. 1\n", - "262. 1\n", - "263. 1\n", - "264. 1\n", - "265. 1\n", - "266. 1\n", - "267. 1\n", - "268. 1\n", - "269. 1\n", - "270. 1\n", - "271. 1\n", - "272. 1\n", - "273. 1\n", - "274. 1\n", - "275. 1\n", - "276. 1\n", - "277. 1\n", - "278. 1\n", - "279. 1\n", - "280. 1\n", - "281. 1\n", - "282. 1\n", - "283. 1\n", - "284. 1\n", - "285. 1\n", - "286. 1\n", - "287. 1\n", - "288. 1\n", - "289. 1\n", - "290. 1\n", - "291. 1\n", - "292. 1\n", - "293. 1\n", - "294. 1\n", - "295. 1\n", - "296. 1\n", - "297. 1\n", - "298. 1\n", - "299. 1\n", - "300. 1\n", - "301. 1\n", - "302. 1\n", - "303. 1\n", - "304. 1\n", - "305. 1\n", - "306. 1\n", - "307. 1\n", - "308. 1\n", - "309. 1\n", - "310. 1\n", - "311. 1\n", - "312. 1\n", - "313. 1\n", - "314. 1\n", - "315. 1\n", - "316. 1\n", - "317. 1\n", - "318. 1\n", - "319. 1\n", - "320. 1\n", - "321. 1\n", - "322. 1\n", - "323. 1\n", - "324. 1\n", - "325. 1\n", - "326. 1\n", - "327. 1\n", - "328. 1\n", - "329. 1\n", - "330. 1\n", - "331. 1\n", - "332. 1\n", - "333. 1\n", - "334. 1\n", - "335. 1\n", - "336. 1\n", - "337. 1\n", - "338. 1\n", - "339. 1\n", - "340. 1\n", - "341. 1\n", - "342. 1\n", - "343. 1\n", - "344. 1\n", - "345. 1\n", - "346. 1\n", - "347. 1\n", - "348. 1\n", - "349. 1\n", - "350. 1\n", - "351. 1\n", - "352. 1\n", - "353. 1\n", - "354. 1\n", - "355. 1\n", - "356. 1\n", - "357. 1\n", - "358. 1\n", - "359. 1\n", - "360. 1\n", - "361. 1\n", - "362. 1\n", - "363. 1\n", - "364. 1\n", - "365. 1\n", - "366. 1\n", - "367. 1\n", - "368. 1\n", - "369. 1\n", - "370. 1\n", - "371. 1\n", - "372. 1\n", - "373. 1\n", - "374. 1\n", - "375. 1\n", - "376. 1\n", - "377. 1\n", - "378. 1\n", - "379. 1\n", - "380. 1\n", - "381. 1\n", - "382. 1\n", - "383. 1\n", - "384. 1\n", - "385. 1\n", - "386. 1\n", - "387. 1\n", - "388. 1\n", - "389. 1\n", - "390. 1\n", - "391. 1\n", - "392. 1\n", - "393. 1\n", - "394. 1\n", - "395. 1\n", - "396. 1\n", - "397. 1\n", - "398. 1\n", - "399. 1\n", - "400. 1\n", - "401. 1\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "$loop_rep\n", - "$loop_rep[[1]]\n", - " loop length sign\n", - "1 1, 1 1 -1\n", - "2 2, 2 1 -1\n", - "3 3, 3 1 -1\n", - "4 4, 4 1 -1\n", - "5 5, 5 1 -1\n", - "6 6, 6 1 -1\n", - "7 7, 7 1 -1\n", - "8 8, 8 1 -1\n", - "9 1, 2, 1 2 1\n", - "10 3, 4, 3 2 1\n", - "11 4, 5, 4 2 1\n", - "12 6, 7, 6 2 1\n", - "13 5, 8, 1,.... 6 -1\n", - "14 5, 8, 1,.... 5 1\n", - "15 5, 8, 1,.... 4 1\n", - "16 5, 8, 2,.... 5 1\n", - "17 5, 8, 2,.... 4 -1\n", - "18 5, 8, 2, 5 3 -1\n", - "19 7, 8, 1,.... 8 1\n", - "20 7, 8, 1,.... 7 1\n", - "21 7, 8, 1,.... 7 -1\n", - "22 7, 8, 1,.... 6 -1\n", - "23 7, 8, 1,.... 6 -1\n", - "24 7, 8, 1,.... 5 -1\n", - "25 7, 8, 2,.... 7 -1\n", - "26 7, 8, 2,.... 6 -1\n", - "27 7, 8, 2,.... 6 1\n", - "28 7, 8, 2,.... 5 1\n", - "29 7, 8, 2,.... 5 1\n", - "30 7, 8, 2,.... 4 1\n", - "31 7, 8, 7 2 1\n", - "\n", - "$loop_rep[[2]]\n", - " loop length sign\n", - "1 1, 1 1 -1\n", - "2 2, 2 1 -1\n", - "3 3, 3 1 -1\n", - "4 4, 4 1 -1\n", - "5 5, 5 1 -1\n", - "6 6, 6 1 -1\n", - "7 7, 7 1 -1\n", - "8 8, 8 1 -1\n", - "9 1, 2, 1 2 1\n", - "10 3, 4, 3 2 1\n", - "11 4, 5, 4 2 1\n", - "12 6, 7, 6 2 1\n", - "13 5, 8, 1,.... 6 -1\n", - "14 5, 8, 1,.... 5 1\n", - "15 5, 8, 1,.... 4 1\n", - "16 5, 8, 2,.... 5 1\n", - "17 5, 8, 2,.... 4 -1\n", - "18 5, 8, 2, 5 3 -1\n", - "19 7, 8, 1,.... 8 1\n", - "20 7, 8, 1,.... 7 -1\n", - "21 7, 8, 1,.... 7 -1\n", - "22 7, 8, 1,.... 6 1\n", - "23 7, 8, 1,.... 6 -1\n", - "24 7, 8, 1,.... 5 1\n", - "25 7, 8, 2,.... 7 -1\n", - "26 7, 8, 2,.... 6 1\n", - "27 7, 8, 2,.... 6 1\n", - "28 7, 8, 2,.... 5 -1\n", - "29 7, 8, 2,.... 5 1\n", - "30 7, 8, 2,.... 4 -1\n", - "31 7, 8, 7 2 1\n", - "\n", - "\n", - "$loop_rep_index\n", - " [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2\n", - " [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [149] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [186] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [223] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [667] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [704] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [741] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [778] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [815] 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1296] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1333] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1370] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1407] 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1444] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1481] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1518] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1555] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1592] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1629] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1666] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1703] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1740] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1777] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1814] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1851] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1888] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1925] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1962] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1999] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2036] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2073] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2110] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2332] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2369] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2406] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2443] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2480] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2517] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2554] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2591] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2628] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2665] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2702] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2739] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2776] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2813] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2850] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2887] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2924] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2961] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2998] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3035] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3072] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3109] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3146] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3183] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3220] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3257] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3294] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3331] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3368] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3405] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3442] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3479] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3516] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3553] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3590] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3627] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3664] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3701] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3738] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3775] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3812] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3849] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3886] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3923] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3960] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3997] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4034] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4071] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4108] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4145] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4182] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4219] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4256] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4293] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4330] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4367] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4404] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4441] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4478] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4515] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4552] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4589] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4626] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4663] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4700] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4737] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4774] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4811] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4848] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4885] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4922] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4959] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4996] 1 1 1 1 1 1\n", - "\n", - "$jac_rep\n", - "$jac_rep[[1]]\n", - " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", - "[1,] -1 1 0 0 0 0 0 1\n", - "[2,] 1 -1 0 0 0 0 0 -1\n", - "[3,] 0 -1 -1 1 0 0 0 0\n", - "[4,] 0 1 1 -1 1 0 0 0\n", - "[5,] 0 1 0 1 -1 0 0 0\n", - "[6,] 0 0 0 0 -1 -1 1 0\n", - "[7,] 0 0 0 0 -1 1 -1 1\n", - "[8,] 0 0 0 0 1 0 1 -1\n", - "\n", - "$jac_rep[[2]]\n", - " [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]\n", - "[1,] -1 1 0 0 0 0 0 1\n", - "[2,] 1 -1 0 0 0 0 0 -1\n", - "[3,] 0 -1 -1 1 0 0 0 0\n", - "[4,] 0 1 1 -1 1 0 0 0\n", - "[5,] 0 1 0 1 -1 0 0 0\n", - "[6,] 0 0 0 0 -1 -1 1 0\n", - "[7,] 0 0 0 0 1 1 -1 1\n", - "[8,] 0 0 0 0 1 0 1 -1\n", - "\n", - "\n", - "$jac_rep_index\n", - " [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2\n", - " [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [149] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [186] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [223] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [667] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [704] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [741] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [778] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [815] 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1296] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1333] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1370] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1407] 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1444] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1481] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1518] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1555] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1592] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1629] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1666] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1703] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1740] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1777] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1814] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1851] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1888] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1925] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1962] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1999] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2036] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2073] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2110] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2332] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2369] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2406] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2443] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2480] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2517] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2554] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2591] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2628] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2665] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2702] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2739] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2776] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2813] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2850] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2887] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2924] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2961] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2998] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3035] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3072] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3109] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3146] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3183] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3220] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3257] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3294] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3331] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3368] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3405] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3442] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3479] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3516] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3553] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3590] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3627] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3664] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3701] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3738] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3775] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3812] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3849] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3886] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3923] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3960] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3997] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4034] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4071] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4108] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4145] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4182] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4219] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4256] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4293] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4330] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4367] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4404] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4441] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4478] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4515] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4552] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4589] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4626] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4663] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4700] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4737] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4774] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4811] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4848] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4885] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4922] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4959] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4996] 1 1 1 1 1 1\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "res_tab_all" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "id": "351eb3de", - "metadata": { - "vscode": { - "languageId": "r" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
  1. 1
  2. 1
  3. 1
  4. 1
  5. 1
  6. 1
  7. 1
  8. 1
  9. 1
  10. 1
  11. 1
  12. 1
  13. 1
  14. 1
  15. 1
  16. 1
  17. 1
  18. 1
  19. 1
  20. 1
  21. 1
  22. 1
  23. 1
  24. 1
  25. 1
  26. 1
  27. 1
  28. 1
  29. 1
  30. 1
  31. 1
  32. 1
  33. 1
  34. 1
  35. 1
  36. 1
  37. 1
  38. 1
  39. 1
  40. 1
  41. 1
  42. 1
  43. 1
  44. 1
  45. 1
  46. 1
  47. 1
  48. 1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61. 1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1
  104. 1
  105. 1
  106. 1
  107. 1
  108. 1
  109. 1
  110. 2
  111. 2
  112. 2
  113. 2
  114. 2
  115. 2
  116. 2
  117. 2
  118. 2
  119. 2
  120. 2
  121. 2
  122. 2
  123. 2
  124. 2
  125. 2
  126. 2
  127. 2
  128. 2
  129. 2
  130. 2
  131. 2
  132. 2
  133. 2
  134. 2
  135. 2
  136. 2
  137. 2
  138. 2
  139. 2
  140. 2
  141. 2
  142. 2
  143. 2
  144. 2
  145. 2
  146. 2
  147. 2
  148. 2
  149. 2
  150. 2
  151. 2
  152. 2
  153. 2
  154. 2
  155. 2
  156. 2
  157. 2
  158. 2
  159. 2
  160. 2
  161. 2
  162. 2
  163. 2
  164. 2
  165. 2
  166. 2
  167. 2
  168. 2
  169. 2
  170. 2
  171. 2
  172. 2
  173. 2
  174. 2
  175. 2
  176. 2
  177. 2
  178. 2
  179. 2
  180. 2
  181. 2
  182. 2
  183. 2
  184. 2
  185. 2
  186. 2
  187. 2
  188. 2
  189. 2
  190. 2
  191. 2
  192. 2
  193. 2
  194. 2
  195. 2
  196. 2
  197. 2
  198. 2
  199. 2
  200. 2
  201. 1
  202. 1
  203. 1
  204. 1
  205. 1
  206. 1
  207. 1
  208. 1
  209. 1
  210. 1
  211. 1
  212. 1
  213. 1
  214. 1
  215. 1
  216. 1
  217. 1
  218. 1
  219. 1
  220. 1
  221. 1
  222. 1
  223. 1
  224. 1
  225. 1
  226. 1
  227. 1
  228. 1
  229. 1
  230. 1
  231. 1
  232. 1
  233. 1
  234. 1
  235. 1
  236. 1
  237. 1
  238. 1
  239. 1
  240. 1
  241. 1
  242. 1
  243. 1
  244. 1
  245. 1
  246. 1
  247. 1
  248. 1
  249. 1
  250. 1
  251. 1
  252. 1
  253. 1
  254. 1
  255. 1
  256. 1
  257. 1
  258. 1
  259. 1
  260. 1
  261. 1
  262. 1
  263. 1
  264. 1
  265. 1
  266. 1
  267. 1
  268. 1
  269. 1
  270. 1
  271. 1
  272. 1
  273. 1
  274. 1
  275. 1
  276. 1
  277. 1
  278. 1
  279. 1
  280. 1
  281. 1
  282. 1
  283. 1
  284. 1
  285. 1
  286. 1
  287. 1
  288. 1
  289. 1
  290. 1
  291. 1
  292. 1
  293. 1
  294. 1
  295. 1
  296. 1
  297. 1
  298. 1
  299. 1
  300. 1
  301. 1
  302. 1
  303. 1
  304. 1
  305. 1
  306. 1
  307. 1
  308. 1
  309. 1
  310. 1
  311. 1
  312. 1
  313. 1
  314. 1
  315. 1
  316. 1
  317. 1
  318. 1
  319. 1
  320. 1
  321. 1
  322. 1
  323. 1
  324. 1
  325. 1
  326. 1
  327. 1
  328. 1
  329. 1
  330. 1
  331. 1
  332. 1
  333. 1
  334. 1
  335. 1
  336. 1
  337. 1
  338. 1
  339. 1
  340. 1
  341. 1
  342. 1
  343. 1
  344. 1
  345. 1
  346. 1
  347. 1
  348. 1
  349. 1
  350. 1
  351. 1
  352. 1
  353. 1
  354. 1
  355. 1
  356. 1
  357. 1
  358. 1
  359. 1
  360. 1
  361. 1
  362. 1
  363. 1
  364. 1
  365. 1
  366. 1
  367. 1
  368. 1
  369. 1
  370. 1
  371. 1
  372. 1
  373. 1
  374. 1
  375. 1
  376. 1
  377. 1
  378. 1
  379. 1
  380. 1
  381. 1
  382. 1
  383. 1
  384. 1
  385. 1
  386. 1
  387. 1
  388. 1
  389. 1
  390. 1
  391. 1
  392. 1
  393. 1
  394. 1
  395. 1
  396. 1
  397. 1
  398. 1
  399. 1
  400. 1
\n" - ], - "text/latex": [ - "\\begin{enumerate*}\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item 2\n", - "\\item ⋯\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\item 1\n", - "\\end{enumerate*}\n" - ], - "text/markdown": [ - "1. 1\n", - "2. 1\n", - "3. 1\n", - "4. 1\n", - "5. 1\n", - "6. 1\n", - "7. 1\n", - "8. 1\n", - "9. 1\n", - "10. 1\n", - "11. 1\n", - "12. 1\n", - "13. 1\n", - "14. 1\n", - "15. 1\n", - "16. 1\n", - "17. 1\n", - "18. 1\n", - "19. 1\n", - "20. 1\n", - "21. 1\n", - "22. 1\n", - "23. 1\n", - "24. 1\n", - "25. 1\n", - "26. 1\n", - "27. 1\n", - "28. 1\n", - "29. 1\n", - "30. 1\n", - "31. 1\n", - "32. 1\n", - "33. 1\n", - "34. 1\n", - "35. 1\n", - "36. 1\n", - "37. 1\n", - "38. 1\n", - "39. 1\n", - "40. 1\n", - "41. 1\n", - "42. 1\n", - "43. 1\n", - "44. 1\n", - "45. 1\n", - "46. 1\n", - "47. 1\n", - "48. 1\n", - "49. 1\n", - "50. 1\n", - "51. 1\n", - "52. 1\n", - "53. 1\n", - "54. 1\n", - "55. 1\n", - "56. 1\n", - "57. 1\n", - "58. 1\n", - "59. 1\n", - "60. 1\n", - "61. 1\n", - "62. 1\n", - "63. 1\n", - "64. 1\n", - "65. 1\n", - "66. 1\n", - "67. 1\n", - "68. 1\n", - "69. 1\n", - "70. 1\n", - "71. 1\n", - "72. 1\n", - "73. 1\n", - "74. 1\n", - "75. 1\n", - "76. 1\n", - "77. 1\n", - "78. 1\n", - "79. 1\n", - "80. 1\n", - "81. 1\n", - "82. 1\n", - "83. 1\n", - "84. 1\n", - "85. 1\n", - "86. 1\n", - "87. 1\n", - "88. 1\n", - "89. 1\n", - "90. 1\n", - "91. 1\n", - "92. 1\n", - "93. 1\n", - "94. 1\n", - "95. 1\n", - "96. 1\n", - "97. 1\n", - "98. 1\n", - "99. 1\n", - "100. 1\n", - "101. 1\n", - "102. 1\n", - "103. 1\n", - "104. 1\n", - "105. 1\n", - "106. 1\n", - "107. 1\n", - "108. 1\n", - "109. 1\n", - "110. 2\n", - "111. 2\n", - "112. 2\n", - "113. 2\n", - "114. 2\n", - "115. 2\n", - "116. 2\n", - "117. 2\n", - "118. 2\n", - "119. 2\n", - "120. 2\n", - "121. 2\n", - "122. 2\n", - "123. 2\n", - "124. 2\n", - "125. 2\n", - "126. 2\n", - "127. 2\n", - "128. 2\n", - "129. 2\n", - "130. 2\n", - "131. 2\n", - "132. 2\n", - "133. 2\n", - "134. 2\n", - "135. 2\n", - "136. 2\n", - "137. 2\n", - "138. 2\n", - "139. 2\n", - "140. 2\n", - "141. 2\n", - "142. 2\n", - "143. 2\n", - "144. 2\n", - "145. 2\n", - "146. 2\n", - "147. 2\n", - "148. 2\n", - "149. 2\n", - "150. 2\n", - "151. 2\n", - "152. 2\n", - "153. 2\n", - "154. 2\n", - "155. 2\n", - "156. 2\n", - "157. 2\n", - "158. 2\n", - "159. 2\n", - "160. 2\n", - "161. 2\n", - "162. 2\n", - "163. 2\n", - "164. 2\n", - "165. 2\n", - "166. 2\n", - "167. 2\n", - "168. 2\n", - "169. 2\n", - "170. 2\n", - "171. 2\n", - "172. 2\n", - "173. 2\n", - "174. 2\n", - "175. 2\n", - "176. 2\n", - "177. 2\n", - "178. 2\n", - "179. 2\n", - "180. 2\n", - "181. 2\n", - "182. 2\n", - "183. 2\n", - "184. 2\n", - "185. 2\n", - "186. 2\n", - "187. 2\n", - "188. 2\n", - "189. 2\n", - "190. 2\n", - "191. 2\n", - "192. 2\n", - "193. 2\n", - "194. 2\n", - "195. 2\n", - "196. 2\n", - "197. 2\n", - "198. 2\n", - "199. 2\n", - "200. 2\n", - "201. ⋯\n", - "202. 1\n", - "203. 1\n", - "204. 1\n", - "205. 1\n", - "206. 1\n", - "207. 1\n", - "208. 1\n", - "209. 1\n", - "210. 1\n", - "211. 1\n", - "212. 1\n", - "213. 1\n", - "214. 1\n", - "215. 1\n", - "216. 1\n", - "217. 1\n", - "218. 1\n", - "219. 1\n", - "220. 1\n", - "221. 1\n", - "222. 1\n", - "223. 1\n", - "224. 1\n", - "225. 1\n", - "226. 1\n", - "227. 1\n", - "228. 1\n", - "229. 1\n", - "230. 1\n", - "231. 1\n", - "232. 1\n", - "233. 1\n", - "234. 1\n", - "235. 1\n", - "236. 1\n", - "237. 1\n", - "238. 1\n", - "239. 1\n", - "240. 1\n", - "241. 1\n", - "242. 1\n", - "243. 1\n", - "244. 1\n", - "245. 1\n", - "246. 1\n", - "247. 1\n", - "248. 1\n", - "249. 1\n", - "250. 1\n", - "251. 1\n", - "252. 1\n", - "253. 1\n", - "254. 1\n", - "255. 1\n", - "256. 1\n", - "257. 1\n", - "258. 1\n", - "259. 1\n", - "260. 1\n", - "261. 1\n", - "262. 1\n", - "263. 1\n", - "264. 1\n", - "265. 1\n", - "266. 1\n", - "267. 1\n", - "268. 1\n", - "269. 1\n", - "270. 1\n", - "271. 1\n", - "272. 1\n", - "273. 1\n", - "274. 1\n", - "275. 1\n", - "276. 1\n", - "277. 1\n", - "278. 1\n", - "279. 1\n", - "280. 1\n", - "281. 1\n", - "282. 1\n", - "283. 1\n", - "284. 1\n", - "285. 1\n", - "286. 1\n", - "287. 1\n", - "288. 1\n", - "289. 1\n", - "290. 1\n", - "291. 1\n", - "292. 1\n", - "293. 1\n", - "294. 1\n", - "295. 1\n", - "296. 1\n", - "297. 1\n", - "298. 1\n", - "299. 1\n", - "300. 1\n", - "301. 1\n", - "302. 1\n", - "303. 1\n", - "304. 1\n", - "305. 1\n", - "306. 1\n", - "307. 1\n", - "308. 1\n", - "309. 1\n", - "310. 1\n", - "311. 1\n", - "312. 1\n", - "313. 1\n", - "314. 1\n", - "315. 1\n", - "316. 1\n", - "317. 1\n", - "318. 1\n", - "319. 1\n", - "320. 1\n", - "321. 1\n", - "322. 1\n", - "323. 1\n", - "324. 1\n", - "325. 1\n", - "326. 1\n", - "327. 1\n", - "328. 1\n", - "329. 1\n", - "330. 1\n", - "331. 1\n", - "332. 1\n", - "333. 1\n", - "334. 1\n", - "335. 1\n", - "336. 1\n", - "337. 1\n", - "338. 1\n", - "339. 1\n", - "340. 1\n", - "341. 1\n", - "342. 1\n", - "343. 1\n", - "344. 1\n", - "345. 1\n", - "346. 1\n", - "347. 1\n", - "348. 1\n", - "349. 1\n", - "350. 1\n", - "351. 1\n", - "352. 1\n", - "353. 1\n", - "354. 1\n", - "355. 1\n", - "356. 1\n", - "357. 1\n", - "358. 1\n", - "359. 1\n", - "360. 1\n", - "361. 1\n", - "362. 1\n", - "363. 1\n", - "364. 1\n", - "365. 1\n", - "366. 1\n", - "367. 1\n", - "368. 1\n", - "369. 1\n", - "370. 1\n", - "371. 1\n", - "372. 1\n", - "373. 1\n", - "374. 1\n", - "375. 1\n", - "376. 1\n", - "377. 1\n", - "378. 1\n", - "379. 1\n", - "380. 1\n", - "381. 1\n", - "382. 1\n", - "383. 1\n", - "384. 1\n", - "385. 1\n", - "386. 1\n", - "387. 1\n", - "388. 1\n", - "389. 1\n", - "390. 1\n", - "391. 1\n", - "392. 1\n", - "393. 1\n", - "394. 1\n", - "395. 1\n", - "396. 1\n", - "397. 1\n", - "398. 1\n", - "399. 1\n", - "400. 1\n", - "401. 1\n", - "\n", - "\n" - ], - "text/plain": [ - " [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2\n", - " [112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [149] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [186] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [223] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [445] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [556] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [593] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [630] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [667] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [704] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [741] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [778] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - " [815] 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [852] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [889] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [926] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - " [963] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1000] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1037] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1074] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1111] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1148] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1185] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1222] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1259] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1296] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1333] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1370] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[1407] 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1444] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1481] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1518] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1555] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1592] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1629] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1666] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1703] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1740] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1777] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1814] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1851] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1888] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1925] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1962] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[1999] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2036] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2073] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2110] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2147] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2184] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2221] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2258] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2295] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2332] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2369] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2406] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2443] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2480] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2517] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2554] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2591] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2628] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2665] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[2702] 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2739] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2776] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2813] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2850] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2887] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2924] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2961] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[2998] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3035] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3072] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3109] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3146] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3183] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3220] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3257] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3294] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3331] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3368] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[3405] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3442] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3479] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3516] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3553] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3590] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3627] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3664] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3701] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3738] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3775] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3812] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3849] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3886] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3923] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3960] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[3997] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4034] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4071] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4108] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4145] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4182] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4219] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4256] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4293] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4330] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4367] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4404] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4441] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4478] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4515] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4552] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4589] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4626] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4663] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", - "[4700] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4737] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4774] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4811] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4848] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4885] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4922] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4959] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", - "[4996] 1 1 1 1 1 1" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "res_tab_all$loop_rep_index" - ] - }, { "cell_type": "code", "execution_count": 111, From c898155b9f3469f1e766c86791bc5fd4ad67d0d6 Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Tue, 24 Feb 2026 12:14:59 +0100 Subject: [PATCH 10/12] Fix minor stuffs and some typos --- examples/model_6_calcium_oscillations_R.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/model_6_calcium_oscillations_R.ipynb b/examples/model_6_calcium_oscillations_R.ipynb index 8567232..aad6932 100644 --- a/examples/model_6_calcium_oscillations_R.ipynb +++ b/examples/model_6_calcium_oscillations_R.ipynb @@ -296,7 +296,7 @@ "id": "b927c538", "metadata": {}, "source": [ - "### **2.1. Reduced MAPK Model with explicit feedback**" + "### **2.1. Reduced Calcium Oscillations Model**" ] }, { @@ -924,7 +924,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "id": "273651c0", "metadata": { "vscode": { @@ -966,7 +966,7 @@ " ) +\n", " coord_cartesian(xlim = c(0, 3), clip = \"on\") +\n", " labs(\n", - " title = \"Dynamics of the Reduced MAPK Model with Explicit Feedback\",\n", + " title = \"Dynamics of the Calcium Oscillation Model\",\n", " x = \"Time (a.u.)\",\n", " y = \"Concentration (a.u.)\",\n", " colour = \"Species\"\n", From 6ef410d968982b76f30e6d675c76b2447d74f919 Mon Sep 17 00:00:00 2001 From: Anh HM Vo Date: Sun, 23 Aug 2026 21:39:10 +0200 Subject: [PATCH 11/12] Update git ignore --- .gitignore | 1 + .../00_pkg_src/LoopDetectR/DESCRIPTION | 25 + .../00_pkg_src/LoopDetectR/NAMESPACE | 9 + .../00_pkg_src/LoopDetectR/NEWS.md | 7 + .../00_pkg_src/LoopDetectR/R/data.R | 78 +++ .../LoopDetectR/R/further_functions.R | 194 ++++++ .../LoopDetectR/R/loop_detection_functions.R | 475 +++++++++++++ .../LoopDetectR/data/func_POSm4.rda | Bin 0 -> 32827 bytes .../00_pkg_src/LoopDetectR/data/func_li08.rda | Bin 0 -> 34283 bytes .../LoopDetectR/data/li08_solution.rda | Bin 0 -> 85103 bytes .../LoopDetectR/man/compare_loop_list.Rd | 53 ++ .../00_pkg_src/LoopDetectR/man/find_edge.Rd | 35 + .../00_pkg_src/LoopDetectR/man/find_loops.Rd | 57 ++ .../LoopDetectR/man/find_loops_noscc.Rd | 73 ++ .../LoopDetectR/man/find_loops_vset.Rd | 92 +++ .../00_pkg_src/LoopDetectR/man/func_POSm4.Rd | 25 + .../00_pkg_src/LoopDetectR/man/func_li08.Rd | 33 + .../LoopDetectR/man/li08_solution.Rd | 34 + .../LoopDetectR/man/loop_summary.Rd | 39 ++ .../LoopDetectR/man/sort_loop_index.Rd | 29 + .../vignettes/looplist_func_POSm4.RData | Bin 0 -> 225 bytes .../vignettes/looplist_func_POSm4.txt | 7 + .../vignettes/workflow_LoopDetectR.Rmd | 384 +++++++++++ LoopDetectR.Rcheck/00install.out | 16 + LoopDetectR.Rcheck/LoopDetectR-Ex.R | 223 ++++++ LoopDetectR.Rcheck/LoopDetectR-Ex.Rout | 253 +++++++ LoopDetectR.Rcheck/LoopDetectR-Ex.pdf | Bin 0 -> 3611 bytes LoopDetectR.Rcheck/LoopDetectR-Ex.timings | 8 + LoopDetectR.Rcheck/LoopDetectR-manual.pdf | Bin 0 -> 169868 bytes LoopDetectR.Rcheck/LoopDetectR/DESCRIPTION | 26 + LoopDetectR.Rcheck/LoopDetectR/INDEX | 13 + LoopDetectR.Rcheck/LoopDetectR/NAMESPACE | 9 + LoopDetectR.Rcheck/LoopDetectR/NEWS.md | 7 + LoopDetectR.Rcheck/LoopDetectR/R/LoopDetectR | 27 + .../LoopDetectR/R/LoopDetectR.rdb | Bin 0 -> 18463 bytes .../LoopDetectR/R/LoopDetectR.rdx | Bin 0 -> 363 bytes LoopDetectR.Rcheck/LoopDetectR/data/Rdata.rdb | Bin 0 -> 158279 bytes LoopDetectR.Rcheck/LoopDetectR/data/Rdata.rds | Bin 0 -> 116 bytes LoopDetectR.Rcheck/LoopDetectR/data/Rdata.rdx | Bin 0 -> 299 bytes LoopDetectR.Rcheck/LoopDetectR/help/AnIndex | 10 + .../LoopDetectR/help/LoopDetectR.rdb | Bin 0 -> 26171 bytes .../LoopDetectR/help/LoopDetectR.rdx | Bin 0 -> 394 bytes .../LoopDetectR/help/aliases.rds | Bin 0 -> 185 bytes LoopDetectR.Rcheck/LoopDetectR/help/paths.rds | Bin 0 -> 269 bytes .../LoopDetectR/html/00Index.html | 47 ++ LoopDetectR.Rcheck/LoopDetectR/html/R.css | 130 ++++ old/workflow_LoopDetectR.html | 640 ++++++++++++++++++ 47 files changed, 3059 insertions(+) create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/DESCRIPTION create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/NAMESPACE create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/NEWS.md create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/data.R create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/further_functions.R create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/loop_detection_functions.R create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/data/func_POSm4.rda create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/data/func_li08.rda create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/data/li08_solution.rda create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/compare_loop_list.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/find_edge.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/find_loops.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/find_loops_noscc.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/find_loops_vset.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/func_POSm4.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/func_li08.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/li08_solution.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/loop_summary.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/man/sort_loop_index.Rd create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/looplist_func_POSm4.RData create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/looplist_func_POSm4.txt create mode 100644 LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/workflow_LoopDetectR.Rmd create mode 100644 LoopDetectR.Rcheck/00install.out create mode 100644 LoopDetectR.Rcheck/LoopDetectR-Ex.R create mode 100644 LoopDetectR.Rcheck/LoopDetectR-Ex.Rout create mode 100644 LoopDetectR.Rcheck/LoopDetectR-Ex.pdf create mode 100644 LoopDetectR.Rcheck/LoopDetectR-Ex.timings create mode 100644 LoopDetectR.Rcheck/LoopDetectR-manual.pdf create mode 100644 LoopDetectR.Rcheck/LoopDetectR/DESCRIPTION create mode 100644 LoopDetectR.Rcheck/LoopDetectR/INDEX create mode 100644 LoopDetectR.Rcheck/LoopDetectR/NAMESPACE create mode 100644 LoopDetectR.Rcheck/LoopDetectR/NEWS.md create mode 100644 LoopDetectR.Rcheck/LoopDetectR/R/LoopDetectR create mode 100644 LoopDetectR.Rcheck/LoopDetectR/R/LoopDetectR.rdb create mode 100644 LoopDetectR.Rcheck/LoopDetectR/R/LoopDetectR.rdx create mode 100644 LoopDetectR.Rcheck/LoopDetectR/data/Rdata.rdb create mode 100644 LoopDetectR.Rcheck/LoopDetectR/data/Rdata.rds create mode 100644 LoopDetectR.Rcheck/LoopDetectR/data/Rdata.rdx create mode 100644 LoopDetectR.Rcheck/LoopDetectR/help/AnIndex create mode 100644 LoopDetectR.Rcheck/LoopDetectR/help/LoopDetectR.rdb create mode 100644 LoopDetectR.Rcheck/LoopDetectR/help/LoopDetectR.rdx create mode 100644 LoopDetectR.Rcheck/LoopDetectR/help/aliases.rds create mode 100644 LoopDetectR.Rcheck/LoopDetectR/help/paths.rds create mode 100644 LoopDetectR.Rcheck/LoopDetectR/html/00Index.html create mode 100644 LoopDetectR.Rcheck/LoopDetectR/html/R.css create mode 100644 old/workflow_LoopDetectR.html diff --git a/.gitignore b/.gitignore index 710c7fc..b07e4d4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ source/ /.Rhistory /.Rproj.user/* LoopDetectR.Rproj +/LoopDetectR.Rcheck # Compiled source # diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/DESCRIPTION b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/DESCRIPTION new file mode 100644 index 0000000..708b378 --- /dev/null +++ b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/DESCRIPTION @@ -0,0 +1,25 @@ +Package: LoopDetectR +Type: Package +Title: Comprehensive Feedback Loop Detection in ODE Models +Version: 0.1.3 +Authors@R: c(person("Katharina", "Baum", email = "katharina.baum@hpi.de", + role = c("aut", "cre"), comment = c(ORCID = "0000-0001-7256-0566")), + person("Sandra", "Krüger", role = c("ctb"))) +Description: Detect feedback loops (cycles, circuits) between species (nodes) in ordinary differential equation (ODE) models. Feedback loops are paths from a node to itself without visiting any other node twice, and they have important regulatory functions. Loops are reported with their order of participating nodes and their length, and whether the loop is a positive or a negative feedback loop. An upper limit of the number of feedback loops limits runtime (which scales with feedback loop count). Model parametrizations and values of the modelled variables are accounted for. Computation uses the characteristics of the Jacobian matrix as described e.g. in Thomas and Kaufman (2002) . Input can be the Jacobian matrix of the ODE model or the ODE function definition; in the latter case, the Jacobian matrix is determined using 'numDeriv'. Graph-based algorithms from 'igraph' are employed for path detection. +Imports: igraph, numDeriv +Suggests: deSolve, knitr, markdown, remotes, rmarkdown, utils +License: GPL-3 +Encoding: UTF-8 +LazyData: true +Depends: R (>= 4.0.0) +RoxygenNote: 7.3.3 +VignetteBuilder: knitr +URL: https://github.com/DILiS-lab/LoopDetectR, + https://cran.r-project.org/package=LoopDetectR +BugReports: https://github.com/DILiS-lab/LoopDetectR/issues +NeedsCompilation: no +Packaged: 2026-06-19 23:55:45 UTC; Admin +Author: Katharina Baum [aut, cre] (ORCID: + ), + Sandra Krüger [ctb] +Maintainer: Katharina Baum diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/NAMESPACE b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/NAMESPACE new file mode 100644 index 0000000..3d5d647 --- /dev/null +++ b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/NAMESPACE @@ -0,0 +1,9 @@ +# Generated by roxygen2: do not edit by hand + +export(compare_loop_list) +export(find_edge) +export(find_loops) +export(find_loops_noscc) +export(find_loops_vset) +export(loop_summary) +export(sort_loop_index) diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/NEWS.md b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/NEWS.md new file mode 100644 index 0000000..20c8f71 --- /dev/null +++ b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/NEWS.md @@ -0,0 +1,7 @@ +# LoopDetectR 0.1.3 + +* Updated installation instructions from GitLab to GitHub. +* Added GitHub repository and issue tracker links to DESCRIPTION. +* Cleaned repository metadata and normalized text-file formatting. +* Removed local development history files from the repository. +* Added GitHub Actions checks for package validation. \ No newline at end of file diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/data.R b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/data.R new file mode 100644 index 0000000..aeb62d6 --- /dev/null +++ b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/data.R @@ -0,0 +1,78 @@ + +#' Solution for the cell cycle model related to func_li08 +#' +#' The file contains the solution over time (3 oscillatory cycles) for the +#' ordinary differential equation model as given in func_li08. In addition, +#' events as constructed in the +#' original publication [Li et al., 2008] are considered. +#' +#' @format A dataframe with 634 rows and 19 columns +#' \describe{ +#' \item{time}{time variable} +#' \item{y1}{first variable value} +#' \item{y2}{second variable value, } +#' \item{etc.}{etc. } +#' \item{y18}{18th variable value} +#' } +#' +#' @source The Caulobacter cell cycle model was proposed in +#' Li S, Brazhnik P, Sobral B, Tyson JJ. A Quantitative Study of the +#' Division Cycle of Caulobacter crescentus Stalked Cells. Plos Comput Biol. +#' 2008;4(1):e9. The solutions were generated with MATLAB using the +#' functions accompanying the above reference on +#' \doi{10.1371/journal.pcbi.0040009}. +#' +"li08_solution" + + + +#' Example ODE function: chain model with positive regulation. +#' +#' The file contains the function definition an ordinary differential equation +#' model of a chain model of 4 variables with positive feedback. +#' +#' @format R file with definition of function func_POSm4 that takes as +#' input arguments time t (dimension 1), variable values x (dimension 4), and +#' kinetic parameter values klin (dimension 8) and knonlin (dimension 2). +#' +#' @source +#' The chain model was used in +#' Baum K, Politi AZ, Kofahl B, Steuer R, Wolf J. Feedback, Mass +#' Conservation and Reaction Kinetics Impact the Robustness of Cellular +#' Oscillations. PLoS Comput Biol. 2016;12(12):e1005298. +#' +"func_POSm4" + + + +#' Example ODE function: bacterial cell cycle. +#' +#' The file contains the function definition an ordinary differential equation +#' model of Caulobacter crescentus cell cycle as proposed by Li et al., 2008. +#' It has 18 variables. +#' +#' @format R file with definition of function func_li08 that takes as +#' input arguments time t (dimension 1), and variable values y (dimension 18). +#' the kinetic parameters are defined within the function. +#' +#' @source The Caulobacter cell cycle model was proposed in +#' Li S, Brazhnik P, Sobral B, Tyson JJ. A Quantitative Study of the +#' Division Cycle of Caulobacter crescentus Stalked Cells. Plos Comput Biol. +#' 2008;4(1):e9. The function corresponds to the MATLAB function modelwtin(t,y) +#' as given on \doi{10.1371/journal.pcbi.0040009}. +#' +#' @details +#' The Caulobacter cell cycle model function will only give the solution as +#' shown in the publication [Li et al., 2008] if the change in variables at +#' defined events are taken into account. Please refer to the original +#' reference for details. +#' +"func_li08" + + + + + + + + diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/further_functions.R b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/further_functions.R new file mode 100644 index 0000000..22d78e6 --- /dev/null +++ b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/further_functions.R @@ -0,0 +1,194 @@ + +sort_loop_index <- function(loop_list){ + #' Sort loop indices + #' + #' Changes the loop representation such that every loop starts with the + #' smallest node index. Returns a loop list of the same dimensions, only + #' column \code{loop} will be altered. + #' + #' @param loop_list Dataframe with a column \code{loop} that contains the lists + #' of loops, e.g. obtained from \code{find_loops()}. + #' + #' @examples + #' #sample Jacobian matrix of a system with 4 variables + #' jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) + #' #find the feedback loops of the system + #' loop_list <- find_loops(jac_matrix,10) + #' #sort the loop indices to start with the smallest + #' sorted_loop_list <- sort_loop_index(loop_list) + #' + #' @seealso \code{\link{compare_loop_list}} + #' + #' @export + + sorted_loop_list <- loop_list + sorted_loops <- lapply(sorted_loop_list$loop,function(x){ + ind_min <- which.min(x) + if (ind_min>1){ + return(x[c(ind_min:length(x),(2:ind_min))]) + } else { + return(x) + } + }) + sorted_loop_list$loop <- sorted_loops + return(sorted_loop_list) +} + + + +find_edge <- function(loop_list,source_node,target_node){ + #' Detecting loops with a certain edge + #' + #' @description Finds those loops in a loop list that contain a regulation + #' from a certain variable (source node) to a certain variable (target node). + #' + #' @param loop_list Dataframe with a column \code{loop} that contains the lists + #' of loops, e.g. obtained from \code{\link{find_loops}}. + #' @param source_node Index of the variable that is the source of the + #' queried interaction, i.e. that regulates the target node. + #' @param target_node Index of the variable that is the target of the + #' queried interaction, i.e. that is regulated by the source node. + #' + #' @return A vector that gives the indices in the loop list of those loops + #' that contain the indicated edge. + #' + #' @examples + #' #sample Jacobian matrix of a system with 4 variables + #' jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) + #' #find the feedback loops of the system + #' loop_list <- find_loops(jac_matrix,10) + #' #find the loops containing the regulation from variable 3 to variable 4 + #' inds_3_to_4 <- find_edge(loop_list,3,4) + #' + #' @export + + vec_is_edge <- vapply(loop_list$loop,function(x){ + source_ind <- which(x==source_node) #find index of source node + if (length(source_ind)==0){ #if the source node was not found + return(FALSE) + } else { + if (target_node==x[source_ind[1]+1]){ #check whether the subsequent + #node of the source node is the target node + return(TRUE) + } else { + return(FALSE) + } + }},logical(1)) + + return(which(vec_is_edge)) +} + + + +loop_summary <- function(loop_list,column_val='length'){ + #' Summary of a loop list + #' + #' Summarizes the loops in a loop list by their length and sign, returns an + #' overview table of the numbers of all, negative and positive loops divided + #' by their lengths. + #' + #' @details Lengths are abbreviated by \code{len_1}, \code{len_2}, + #' \code{len_3} etc., signs are + #' abbreviated by \code{pos} for positive, \code{neg} for negative loops. The table + #' contains entries for each loop length from 1 to the maximal loop length + #' encountered in the table, and zeros are filled in if no loops of a + #' certain length exist in the table. + #' + #' @param loop_list List of loops as dataframe with columns \code{length}, + #' \code{sign}. + #' @param column_val String indicating the orientation of the summary table. + #' By default, rows of the results table are the sign of the loops, columns + #' are loop lengths. If \code{column_val} is set to \code{"sign"}, columns + #' and rows are exchanged. + #' + #' @examples + #' #sample Jacobian matrix of a system with 4 variables + #' jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) + #' #find the feedback loops of the system + #' loop_list <- find_loops(jac_matrix,10) + #' #loop summary table + #' loop_sum_tab <- loop_summary(loop_list) + #' + #' @export + + res_mat <- table(loop_list$length) + loop_tab <- data.frame( + matrix(0,ncol=as.numeric(names(res_mat))[length(names(res_mat))],nrow=3), + row.names=c('all','pos','neg')) + loop_tab[1,as.numeric(row.names(res_mat))] <- res_mat + res_mat_temp <- table(loop_list$length[loop_list$sign==1]) + loop_tab[2,as.numeric(row.names(res_mat_temp))] <- res_mat_temp + res_mat_temp <- table(loop_list$length[loop_list$sign==-1]) + loop_tab[3,as.numeric(row.names(res_mat_temp))] <- res_mat_temp + colnames(loop_tab) <- paste0('len_',1:length(loop_tab)) + + if (column_val == 'sign') { + loop_tab <- t(loop_tab[2:3,]) + } + + return(loop_tab) +} + + + +compare_loop_list <- function(loop_list_a, loop_list_b){ + #' Compare two loop lists + #' + #' Compared two loop lists and returns the indices of those loops that are + #' identical in both lists, that switch only the sign or that do not occur + #' in both lists + #' + #' @details Indices of loops are given with respect to the order of the + #' loops in the first supplied loop list as well as for the second loop + #' list. The loops are sorted to represent their loops starting from the + #' smallest variable index (using the function \code{\link{sort_loop_index}}). + #' + #' @param loop_list_a,loop_list_b Loop lists with columns \code{loop} and + #' \code{sign}, for example generated from \code{\link{find_loops}}. + #' + #' @return A list with 5 (possible empty) vectors as entries. + #' \itemize{ + #' \item \code{ind_a_id} - indices of the loops in the first loop list that occur + #' identically in the second loop list + #' \item \code{ind_a_switch} - indices of the loops in the first loop list that occur + #' in the second loop list with a different sign + #' \item \code{ind_a_notin} - indices of the loops in the first loop list that do not + #' occur in the second loop list + #' \item \code{ind_b_id} - indices of loops in the second loop list corresponding to + #' the loops reported in \code{ind_a_id} + #' \item \code{ind_b_switch} - indices of loops in the second loop list corresponding + #' to loops reported in \code{ind_a_switch}. + #' } + #' + #' @examples + #' #sample Jacobian matrix of a system with 4 variables + #' jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) + #' #find the feedback loops of the system + #' loop_list <- find_loops(jac_matrix,10) + #' #a slightly different Jacobian matrix of the system with 4 variables + #' jac_matrix_alt <- rbind(c(-1,0,0,1),c(1,-1,0,-1),c(0,1,-1,0),c(0,0,1,-1)) + #' #find the feedback loops of the system + #' loop_list_alt <- find_loops(jac_matrix_alt,10) + #' #compare the loop lists + #' comp_loop_list <- compare_loop_list(loop_list,loop_list_alt) + #' #loops that switch sign + #' comp_loop_list[['ind_a_switch']] + #' + #' @export + + sorted_loop_list_a <- sort_loop_index(loop_list_a) + sorted_loop_list_b <- sort_loop_index(loop_list_b) + + inds_a_in_b <- match(sorted_loop_list_a$loop,sorted_loop_list_b$loop) + ind_a_notin <- which(is.na(inds_a_in_b)) + ind_a_in <- which(!is.na(inds_a_in_b)) + #check whether signs are the same in the matching loops + logvec_a_id <- sorted_loop_list_a$sign[ind_a_in] == sorted_loop_list_b$sign[inds_a_in_b[ind_a_in]] + + return(list('ind_a_id' = ind_a_in[logvec_a_id], + 'ind_a_switch' = ind_a_in[!logvec_a_id], + 'ind_a_notin' = ind_a_notin, + 'ind_b_id' = inds_a_in_b[ind_a_in[logvec_a_id]], + 'ind_b_switch' = inds_a_in_b[ind_a_in[!logvec_a_id]])) + +} diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/loop_detection_functions.R b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/loop_detection_functions.R new file mode 100644 index 0000000..b4fad7d --- /dev/null +++ b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/R/loop_detection_functions.R @@ -0,0 +1,475 @@ + +find_loops_noscc <- function(jacobian, max_num_loops=100000){ + #' @title Loop detection in a matrix + #' + #' @description Given the Jacobian matrix of an ODE system or the adjacency + #' matrix of a graph, this function determines all loops in the system up + #' to the maximal number supplied. No + #' decomposition into strongly connected components is performed. + #' + #' @details The input matrix delivers the directed interactions in the ODE + #' system; if entry \code{(i,j)} is non-zero it means that variable (or + #' node) \code{i} is regulated by variable (node) \code{j}. Johnson's + #' algorithm for path detections + #' from the igraph package (function: + #' \code{\link[igraph]{all_simple_paths}}) is used. + #' No decomposition into strongly connected components is employed which + #' could be beneficial for smaller systems (compared to + #' \code{\link{find_loops}}). + #' The queried graph is increased stepwise leading to the output of loops + #' in a certain order determined by the order of occurrence in the Jacobian + #' matrix: + #' \itemize{ + #' \item first the self-loops, + #' \item then feedback loops incorporating only the first and second species of + #' the Jacobian, + #' \item then feedback loops incorporating the third and at most also the first + #' and second species of the jacobian, etc.} + #' If the maximal number of loops, max_num_loops, is reached, no warning is + #' issued. It is very probable that not all feedback loops of the system + #' have been found. + #' Up to which species this function searched before stopping due to + #' reaching the maximal allowed loop number can be inferred from the last + #' exported feedback loop. + #' Running the function multiple times with re-ordered jacobian as input + #' can enable detection of alternative feedback loops while limiting the + #' runtime and output size of single runs. + #' If columns of the Jacobian are named, + #' the identification is given by the attribute \code{node_ids}, + #' \code{attr(result,"node_ids")}. + #' + #' @param jacobian Square Jacobian matrix of an ODE system or the adjacency + #' matrix of a graph; captures interactions such that entry \code{(i,j)} is + #' negative (positive) if variable \code{j} regulates variable \code{i} + #' negatively (positively). + #' + #' @param max_num_loops Positive numeric value indicating the maximal number + #' of loops that are reported. Default: \eqn{10^5}. + #' + #' @return A data.frame with three columns: \code{loop}, \code{length}, \code{sign} + #' containing up to \code{max_num_loops} loops of the systems defined + #' by matrix \code{jacobian}. Each entry in the loop column is a list of + #' identifiers that correspond to the indices of the variable in the + #' Jacobian matrix and denote + #' in which order the variables form the loop. + #' + #' @examples + #' #sample Jacobian matrix of a system with 4 variables + #' jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) + #' #find the first 5 feedback loops of the system + #' loop_list <- find_loops_noscc(jac_matrix,5) + #' + #' @seealso \code{\link{find_loops}}, \code{\link{find_loops_vset}} + #' + #' @export + #' + + #initialize variables + all_loops <- vector('list',max_num_loops) #list to store all loops + loop_signs <- numeric(max_num_loops) #vector to store if the loops are positive or negative + loop_length <- numeric(max_num_loops) #vector to store the length of all loops + loopcount <- 0 + + #determine the sign of the entries only once, this is important to avoid overflow for large entries + sig_jacobian <- sign(jacobian) + + #determine self-loops + for (i in which(diag(sig_jacobian)!=0)){ #iterate over all nonzero entries of the diagonal, these are self-loops + loopcount <- loopcount+1 + loop_signs[loopcount] <- sig_jacobian[i,i] #sign of the self-loop + loop_length[loopcount] <- 1 + all_loops[loopcount] <- list(c(i,i)) + } + + #only include these nodes into the examination for which we have at least one outgoing and one ingoing edge + #this makes computation a lot faster for sparse matrices. Might increase runtime for smaller matrices. + node_inds <- which(sapply(1:dim(sig_jacobian)[1],function(x){any(sig_jacobian[x,][-x]!=0) & any(sig_jacobian[,x][-x]!=0)})) + node_count <- 1 + + #determine loops with length > 1 + for (i in node_inds[-1]){ #initialize a loop from the first row/column of the jacobian matrix to the last + node_count <- node_count + 1 #keeps track of the node count + if (loopcount < max_num_loops){ + sign_tmp_jacobian <- sig_jacobian[node_inds[1:node_count],node_inds[1:node_count]] #store the current sub-jacobian in a temporary matrix + if (i==node_inds[2]) { # for the first graph with more than one node + #build the directed graph from the current jacobian matrix, assign the id in the jacobian to the nodes + jac_graph <- igraph::graph_from_adjacency_matrix(t(abs(sign_tmp_jacobian)),mode="directed",diag=FALSE, add.colnames = NA) + #find the nodes which affect the most recently added node (not the node itself) + secondlastnodes <- which(sign_tmp_jacobian[node_count,1:(node_count-1)] != 0) + } else {# if it is not the first node + #just add the one node (this will be the node with index node_count) + jac_graph <- igraph::add_vertices(jac_graph,nv=1) + #species acting on node i, omit self-edges: + spec_act_on_i <- which(sign_tmp_jacobian[node_count,1:(node_count-1)] != 0) + #odes which affect the most recently added node are used further + secondlastnodes <- spec_act_on_i + #add the edges to the graph + if (length(spec_act_on_i)>0){ + jac_graph <- igraph::add_edges(jac_graph, c(rbind(spec_act_on_i, node_count))) + } + #species on which node i acts: + spec_i_acts_on <- which(sign_tmp_jacobian[1:(node_count-1),node_count]!=0) + #add the edges to the graph + if (length(spec_i_acts_on)>0){ + jac_graph <- igraph::add_edges(jac_graph, c(rbind(node_count, spec_i_acts_on))) + } + + } + + #search all simple paths from the current node to the nodes affecting node i + if (length(secondlastnodes)!=0){ #only iterate over the nodes if the list is not empty + #loop over all nodes which have an edge to node i + for (k in secondlastnodes) { + #ensure that the limit of numbers of loops is not yet exceeded + if (loopcount < max_num_loops){ + #find and store all paths from the current node i to node k + tmp_path <- igraph::all_simple_paths(jac_graph,from=node_count,to=k) + if (length(tmp_path)!=0) { # if there are simple paths found + #iterate over all paths in the list + for (j in 1:length(tmp_path)){ + #ensure that the limit of numbers of loops is not yet exceeded + if (loopcount < max_num_loops){ + #store the current loop in the variable + #(e.g. k = 1, tmp_path[[j]] = 4 3 2 1 --> loop = 1 4 3 2 1) + loop <- c(k, igraph::as_ids(tmp_path[[j]])) + #count how many loops have been found + loopcount <- loopcount+1 + #store the loop in the list of all paths (and reformulate to original node ids) + all_loops[loopcount] <- list(node_inds[loop]) + #store the loop length (it is loop length-1, because the edges should be counted and not the nodes in the loop) + loop_length[loopcount] <- length(loop)-1 + #edge indices of the loop path + edge_vec <- cbind(loop[-1],loop[-length(loop)]) + #check the product of all weights along the path to determine the sign of the loop + loop_signs[loopcount] <- sign(prod(sign_tmp_jacobian[edge_vec])) + } else { #stop execution if we reach the upper limit to the number of nodes + break + } + } + } + } else { #stop execution if we reach the upper limit to the number of nodes + break + } + } + } + } else { #stop execution if we reach the upper limit to the number of nodes + break + } + } + + #save results + result <- data.frame(loop=I(all_loops[1:loopcount]), length=loop_length[1:loopcount],sign=loop_signs[1:loopcount]) #store the results in a dataframe + #add node identifiers if column names are provided in the Jacobian + if (!is.null(colnames(jacobian))){ + name_vec <- (1:dim(jacobian)[2]) + names(name_vec) <- colnames(jacobian) + attr(result,'node_ids') <- name_vec + } + return(result) #return the data frame +} + + + +find_loops <- function(jacobian, max_num_loops=100000){ + #' @title Loop detection in a matrix + #' + #' @description Given the Jacobian matrix of an ODE system or the adjacency + #' matrix of a graph, this function determines all loops in the system up + #' to the maximal number supplied. + #' + #' @details The input matrix delivers the directed interactions in the ODE + #' system; if entry \code{(i,j)} is non-zero it means that variable (or node) \code{i} is + #' regulated by variable (node) \code{j}. Johnson's algorithm for path detection + #' as well as Tarjan's algorithm for detecting strongly connected + #' components are used as implemented in the igraph package (functions: + #' \code{\link[igraph]{all_simple_paths}}, \code{\link[igraph]{components}}) . + #' If the maximal number of loops, max_num_loops, is reached, no warning is + #' issued. It is very probable that not all feedback loops of the system + #' have been found. + #' Running the function multiple times with re-ordered jacobian as input + #' can enable detection of alternative feedback loops while limiting the + #' runtime and output size of single runs. + #' If columns of the Jacobian are named, + #' the identification is given by the attribute \code{node_ids}, + #' \code{attr(result,"node_ids")}. + #' + #' + #' @param jacobian Square Jacobian matrix of an ODE system or the adjacency + #' matrix of a graph; captures interactions such that entry \code{(i,j)} is + #' negative (positive) if variable \code{j} regulates variable \code{i} negatively + #' (positively). + #' + #' @param max_num_loops Positive numeric value indicating the maximal number + #' of loops that are reported. Default: \eqn{10^5}. + #' + #' @return A data.frame with three columns: \code{loop}, \code{length}, \code{sign} + #' containing up to \code{max_num_loops} loops of the systems defined + #' by matrix \code{jacobian}. Each entry in the loop column is a list of + #' identifiers that correspond to the indices of the variable in the + #' Jacobian matrix and denote + #' in which order the variables form the loop. + #' + #' @examples + #' #sample Jacobian matrix of a system with 4 variables + #' jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) + #' #find the first 5 feedback loops of the system + #' loop_list <- find_loops(jac_matrix,5) + #' + #' @seealso \code{\link{find_loops_noscc}}, \code{\link{find_loops_vset}} + #' + #' @export + + + #initialize variables + all_loops <- vector('list',max_num_loops)#list to store all loops + loop_signs <- numeric(max_num_loops) #vector to store if the loops are positive or negative + loop_length <- numeric(max_num_loops) #vector to store the length of all loops + #number of detected loops + loopcount <- 0 + + #determine the sign of the entries only once, this is important to avoid overflow for large entries + sig_jacobian <- sign(jacobian) + + #determine self-loops + for (i in which(diag(jacobian)!=0)){ #iterate over all nonzero entries of the diagonal, these are self-loops + loopcount <- loopcount+1 + loop_signs[loopcount] <- sig_jacobian[i,i] #sign of the self-loop + loop_length[loopcount] <- 1 + all_loops[loopcount] <- list(c(i,i)) + } + + #only include these nodes into the examination for which we have at least one outgoing and one ingoing edge + #this makes computation a lot faster for sparse matrices. Might increase runtime for smaller matrices. + glob_node_inds <- which(sapply(1:dim(sig_jacobian)[1],function(x){any(sig_jacobian[x,][-x]!=0) & any(sig_jacobian[,x][-x]!=0)})) + + #determine strongly connected components in the associated graph + jac_graph <- igraph::graph_from_adjacency_matrix(t(abs(sig_jacobian[glob_node_inds,glob_node_inds])),mode="directed",diag=FALSE, add.colnames = NA) + str_comp <- igraph::components(jac_graph, mode="strong") + + #for all clusters of size>1 + for (clus_id in which(str_comp$csize>1)) { + #determine node_inds + node_inds <- glob_node_inds[str_comp$membership==clus_id] + # + node_count <- 1 + #determine loops with length > 1 + for (i in node_inds[-1]){ #initialize a loop from the first row/column of the jacobian matrix to the last + node_count <- node_count + 1 #keeps track of the node count + if (loopcount < max_num_loops){ + sign_tmp_jacobian <- sig_jacobian[node_inds[1:node_count],node_inds[1:node_count]] #store the current sub-jacobian in a temporary matrix + if (i==node_inds[2]) { # for the first graph with more than one node + #build the directed graph from the current jacobian matrix, assign the id in the jacobian to the nodes + jac_graph <- igraph::graph_from_adjacency_matrix(t(abs(sign_tmp_jacobian)),mode="directed",diag=FALSE, add.colnames = NA) + #find the nodes which affect the most recently added node (not the node itself) + secondlastnodes <- which(sign_tmp_jacobian[node_count,1:(node_count-1)] != 0) + } else {# if it is not the first node + #just add the one node + jac_graph <- igraph::add_vertices(jac_graph,nv=1) + #species acting on node i, omit self-edges: + spec_act_on_i <- which(sign_tmp_jacobian[node_count,1:(node_count-1)]!=0) + #the nodes which affect the most recently added node are used further + secondlastnodes <- spec_act_on_i + #add the edges to the graph + if (length(spec_act_on_i)>0){ + jac_graph <- igraph::add_edges(jac_graph, c(rbind(spec_act_on_i, node_count))) + } + #species on which node i acts: + spec_i_acts_on <- which(sign_tmp_jacobian[1:(node_count-1),node_count]!=0) + #add the edges to the graph + if (length(spec_i_acts_on)>0){ + jac_graph <- igraph::add_edges(jac_graph, c(rbind(node_count, spec_i_acts_on))) + } + + } + + #search all simple paths from the current node to the nodes affecting the ith node + if (length(secondlastnodes)!=0){ #only iterate over the nodes if the list is not empty + #loop over all nodes which have an edge to node i + for (k in secondlastnodes) { + #ensure that the limit of numbers of loops is not yet exceeded + if (loopcount < max_num_loops){ + #find and store all paths from the current node node_count to node k + tmp_path <- igraph::all_simple_paths(jac_graph,from=node_count,to=k) + if (length(tmp_path)!=0) { # if there are simple paths found + #iterate over all paths in the list + for (j in 1:length(tmp_path)){ + #ensure that the limit of numbers of loops is not yet exceeded + if (loopcount < max_num_loops){ + #store the current loop in the variable + #(e.g. k = 1, tmp_path[[j]] = 4 3 2 1 --> loop = 1 4 3 2 1) + loop <- c(k, igraph::as_ids(tmp_path[[j]])) + #count how many loops have been found + loopcount <- loopcount+1 + #store the loop in the list of all paths (and reformulate to original node ids) + all_loops[loopcount] <- list(node_inds[loop]) + #store the loop length (it is loop length-1, because the edges should be counted and not the nodes in the loop) + loop_length[loopcount] <- length(loop)-1 + #edge indices of the loop path + edge_vec <- cbind(loop[-1],loop[-length(loop)]) + #check the product of all weights along the path to determine the sign of the loop + loop_signs[loopcount] <- sign(prod(sign_tmp_jacobian[edge_vec])) + } else { #stop execution if we reach the upper limit to the number of nodes + break + } + } + } + } else { #stop execution if we reach the upper limit to the number of nodes + break + } + } + } + } else { #stop execution if we reach the upper limit to the number of nodes + break + } + } + } + #save results + result <- data.frame(loop=I(all_loops[1:loopcount]), length=loop_length[1:loopcount],sign=loop_signs[1:loopcount]) #store the results in a dataframe + #add node identifiers if column names are provided in the Jacobian + if (!is.null(colnames(jacobian))){ + name_vec <- (1:dim(jacobian)[2]) + names(name_vec) <- colnames(jacobian) + attr(result,'node_ids') <- name_vec + } + return(result) #return the data frame +} + + + +find_loops_vset <- function(fun, vset, ..., max_num_loops=100000, compute_full_list=TRUE){ + #' @title Loop detection for an ODE model at multiple sets of variables + #' + #' @description Determines loop lists for an ODE system given by a function + #' and at multiple sets of variables. Loop lists are reported if signs of + #' Jacobian matrix have changed. + #' + #' @param fun Function defining the ODE system, returns the vector \eqn{dx/dt}. + #' May depend on further parameters in \code{...}. + #' @param vset List of variable values at which the loops are determined. + #' @param ... Further parameters except variable values to the function \code{fun}, + #' none called \code{x}. + #' @param max_num_loops Positive numeric value indicating the maximal number + #' of loops that are reported in a loop list. Default: \eqn{10^5}. + #' @param compute_full_list Logical value indicating whether for each + #' Jacobian matrix with any different sign the loop list is computed (\code{TRUE}, + #' default), or whether further checks are performed to ensure that loops + #' may be altered. + #' + #' @details + #' The supplied function can take more arguments, but only the variables + #' are allowed to be named \code{x} (they can also be named differently). + #' The Jacobian matrices are computed for each of the variable + #' values defined in vset using the \code{\link[numDeriv]{jacobian}} function + #' from the \code{NumDeriv} package with option \code{method = 'complex'}, i.e. using a + #' complex-step approach. + #' If \code{compute_full_list = TRUE} (default), loop lists are not re-computed + #' for Jacobians that clearly do not allow for altered loop lists. This is + #' the case if no new regulation appear and only signs of regulations are + #' altered that are not member of any loop. Loop lists can still be + #' identical for different Jacobians, e.g. if two sign switches occur that + #' are both affecting the same loops. + #' + #' @return A list with four entries: + #' \itemize{ + #' \item \code{loop_rep} List of loop lists. + #' \item \code{loop_rep_index} Vector of integer numbers returning the index of the + #' loop list in loop_rep belonging to each entry in \code{vset}. + #' \item \code{jac_rep} List of signed Jacobian matrices. + #' \item \code{jac_rep_index} Vector of integer numbers returning the index of the + #' Jacobian matrix in jac_rep belonging to each entry in \code{vset}. + #' } + #' + #' @details + #' If there is only one class of Jacobian matrix (i.e. the signs of the + #' Jacobian matrix are the same for all entries in \code{vset}), \code{loop_rep} and + #' \code{jac_rep} will have only one entry each. The number of entries for + #' \code{loop_rep_index} and \code{jac_rep_index} corresponds to the length of \code{vset}. + #' Only if \code{compute_full_list} is set to \code{FALSE}, \code{loop_rep} can contain + #' fewer elements than \code{jac_rep}, otherwise both have the same number of + #' elements. + #' + #' @examples + #' #default call to determine loops from an ODE model given by a function + #' #read in example functions + #' data("func_POSm4") + #' #the loaded function func_POSm4 takes arguments t, x, klin, knonlin + #' res_tab <- find_loops_vset(func_POSm4,vset=list(c(1,1,1,1)),t=1, + #' klin=c(1,2,0.5,1,2,0.1,3,2,3),knonlin=c(1,2)) + #' #computed loop list: + #' res_tab$loop_rep[[1]] #or res_tab[[1]][[1]] + #' + #' #determine loops from an ODE model over the course of a solution + #' #read in the example function defining the bacterial cell cycle + #' data("func_li08") + #' #kinetic parameter values are defined within the function + #' #read in a set of variable values (the solution of func_li08 with events) + #' data("li08_solution") + #' #transform the solution (columns: variables) to the correct list format + #' #and remove the time (first column) + #' li08_sol_list <- as.list(as.data.frame(t(li08_solution[,-1]))) + #' res_tab <- find_loops_vset(func_li08,vset=li08_sol_list,t=1, + #' compute_full_list=FALSE) + #' + #' @export + + #compute all jacobians + jacob_list <- lapply(vset,function(y){ + sign(numDeriv::jacobian(fun,x=y,method="complex",...))}) + #find different signed Jacobians + jac_rep <- unique(jacob_list) + + #identify the indices back + jac_rep_index <- match(jacob_list,jac_rep) + + if (compute_full_list) { #if we compute loops for all Jacobians + loop_rep <- lapply(jac_rep,function(y){ + find_loops(y,max_num_loops) + }) + loop_rep_index <- jac_rep_index + } else { #if we search for different patterns before + #loop list for the first Jacobian + loop_rep <- list(find_loops(jac_rep[[1]],max_num_loops)) + loop_rep_index <- rep(0,length(jac_rep_index)) + loop_rep_index[jac_rep_index==1] <- 1 + #we go through every Jacobian separately + if (length(jac_rep)>1) { #if we have more than one Jacobian + for (i in 2:length(jac_rep)) { #check each Jacobian (if there are more + #than 1) + J_temp <- jac_rep[[i]] + #determine if there is a switch from zero to nonzero + switch_to_nonzero <- vapply(jac_rep[1:i-1],function(x) + {any(abs(J_temp[x==0])>0)},logical(1)) + existing_loop_changed <- rep(FALSE,i-1) + for (j in which(switch_to_nonzero==0)) { #for the Jacobians in which + #no additional regulation came up: determine if the sign + #switches of an edge that is contained in a loop + #target-source node pairs of altered Jacobian entries + tn_sn_ind <- which(!((J_temp-jac_rep[[j]])==0),arr.ind=T) + #find loops that contain any of the edges + for (k in 1:length(tn_sn_ind)) { + if (length(find_edge(loop_rep[[loop_rep_index[jac_rep_index==j][1]]],#bug fixed on Oct 12, 2020, was loop_rep[[j]] + tn_sn_ind[k,2],tn_sn_ind[k,1]))>0){ + #in case we found an edge that is affected + existing_loop_changed[j] <- TRUE + break + } + } + } + #if there is a relevant difference for all existing Jacobians + if (all(switch_to_nonzero|existing_loop_changed)) { + loop_rep[[length(loop_rep)+1]] <- + find_loops(J_temp,max_num_loops) + loop_rep_index[jac_rep_index==i] <- max(loop_rep_index)+1 + } else { #if there is one Jacobian for which no interaction came up + # AND no edge of a loop changed - assign index of the first + # similar Jacobian (in principle, there only should be one) + loop_rep_index[jac_rep_index==i] <- + loop_rep_index[jac_rep_index==which(!(switch_to_nonzero|existing_loop_changed))[1]][1] + + } + } + } + } + return(list('loop_rep'=loop_rep,'loop_rep_index'=loop_rep_index, + 'jac_rep'=jac_rep,'jac_rep_index'=jac_rep_index)) +} diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/data/func_POSm4.rda b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/data/func_POSm4.rda new file mode 100644 index 0000000000000000000000000000000000000000..698a502e8fb67b9a29aabb7cb512f02436239d30 GIT binary patch literal 32827 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 =Hjb!3! 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 z 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 literal 0 HcmV?d00001 diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/data/func_li08.rda b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/data/func_li08.rda new file mode 100644 index 0000000000000000000000000000000000000000..81eb6b1f3fee03a81b8394fda619269a04528fdb GIT binary patch literal 34283 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

&&t~lri?F#Li|4eNV4Tc1_%YoE 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�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

kD{OYiz?{{Q$DlLVQ@Zm z^+_4|?(VR*JeXvrOaa}u8;M;T=zN?(@M zIC2}Qg)nQ+X6~o?kK6( z7$8E#6D3>-QYGy9qZ;S|6NNcdBca2S_r+SRc3^kMDyAGT?u=+OdgI^-b4rolzRj%R z?Vc^Hp%JZ5iyiH2dNDU(ko^o?Lao;mfFMg3@HD=bnfpAsG>=a1Dwv^G>K|wpjSm2T9+1@V5K}MKH^@S6 zDOdRVE`Z{{)k$TkHMA!73Lh1xJ<_p*>LYB%B0st^gN+XtVOe{cQt1s#bIg^e5;1qu z&JGZYK?{7e+A2JR)aeKiD;JJmTddJdbsF$+XQs<2Y>J);OGtgOATBY5I0Sdf%s?27 zRd6%EVNvNZvt?tXTNl${QjfX5FRF$62!&HdXCWzSINdSqR+V!VUN`WgCqZSGUE4PBCgwp~8ZI%h@&v9Y@1gyK6L6p4rZLjZ@a;qW+}z{B~A<3b>!7eHBveY>AL_fY2+ zW@NoovCqo_CVUoL%A^qrvLq}{Sfd^7XpFt4UgEPNHF=@sW*_$3@FboO&n*mPFZRp2 zd`ia_7y@csf<5p3b|6)K30lv77P=Nz5C+03t*Y}M}_LPDF1c}0a7P3qk;3^+?6&O~CCA%y@*t~y7=&;9Nfr6&h3l+~H zaak`EX<$Ivkip4^X!R{eoe*+tYCa@lyrd-0uPVMS+I)@cAv;Yq%5E4heh`G#@t))8 z16swgh`K5-c<`6R1FjhlU1_M|sR8N^x$UR)m~zAp<7xsPCF7}t^j(du@&3)i##_*$ zhsLin6VPXeu2X`w%|-gYD@Juvak5PdE4_MPvD&6O0?V-+A|N!&m-Hd?m`fhull#78 zcz@2AqcI<-61G|sYTGga`=!~DLmnns%F!WlIt-HfWkv2d;pi>$o_2g1G z0@JbzxCj6d;uA~ePV1bph@$tQY}OiaX1Qy=49;|B4;~VAvc(tcD)k31p4nMd&qcC7Tw_vuU0fKt1)VGZ2z~xq`6T9{2$dIR z3Bn*6;8=X{yx_C>(_n?LjFT2vV7=gUG*XYi*epAPv_=Mdz-R zMmZ=@9uagNO3Rol{~(|8Dcu zIGI^KU((e|R0(zo5470dH5!QTfs$J9t@l+nc^q|?*&!Cd(G0qUo7+d!AQMs~pNGAQ zXXZ9Y%}c_?zrW_U@{2xlldSM~$eL{gGEiJgWR4iaqoL z+(ax;3f7IH5-=1(NKJswd$@RB;VDU>CEcF~fL&rU8Mt^Yv!8<#JXaX7?_Fro6dU2d z@xQx=bOa9&BZMBG={Qgcyh9?wCR&sOQ(OfWCA@yBzvU`9{O<)?2H%&ot7!64l2uBb!P>McRTM{kJYT7%IRR|o(Q71bbL{PxcaxUz~8G;P1UOPJe=tIrt3Q6}j@2ehEDzsri32}TI}GF#R~ z)$=Gww&$^y6QaUtMfI-4v5!MYEmO@-{3T`)zlp!OH4T+hwld>}0YYmnB;wOZW)_dCN-)3&LPBp#R>J#=d6%&{%#r*s z3!w#`as@0N3?xB}0Qea_Hgt>ny1k`y@Bl&t1t4?*vfu&?okK#s+*+J}V^_Le<^>y0 zv9O@PLtg>}`6E`>rM5-%{UI+$^^LsWo{%ap4=LqV-L$r20v9(w@gkaJCrtLG>lCM^ zFRi;`tJ?G3S3`k%X-X!F7wx)lM>#dW%OHV*wq_lcK62ya`mU6>htPSJi8lg~A^XDV zH-WxCcby&AVfRqATHHh88|QVy7?0s z^>erQ=ASwaz1i)=%}02M04-_2v!7r=fUQsF2ierXekA`}o69;q_}Y}FAJQEDjYYhI zSdDO65mXcU2K%HCTB=!=*<#}VNuLIh9xHjE{3Q^$^MQH6?Io1Phljrw@(NqhLXdzN z+^_Q&lT;{tK25RwIQp3*FtWgXIn1_C;)b$~B!qk$x=OTMI%y|}M8_1yWrQI|+ct__ zAEug>uDbJwjdMi_BQ5v|X8BqW^)h7K&A(;*Kv6p+L7>uu0qVo+E)@>A8QXvMApGvj zdk5!ebtS>xR-KjR`23#`-te%Lv4h(xa(g%&!HrM+wdU+>I@PH003M`P#GG* zlzQBaAq0HA@am^KKiJ2ZVQ^O>c_@39Zk!RvrUCD~|8kOqu1E#KxC_NzE;{r`7l6G% z?OzZ}h|-aO=S#;wg!~r6|FMn}PZQJ={#0xUkXT%X7wmhZ!eeQI>Q@O57PSr<1Rnxw z_iRTxreVZEm4ra_AmIZ){&ms40(XK%4?GJ(a8uVO1BurgSaDoeXX%D)IGY~%WN?=B zS;#Y+x3p~Js@(xoSg(`#G7&NNOR8rCmk`u{UK#8bP=DoRY`!JaBQ-4o!L(2FI~;i#pt<}!C!$WHC*a4_QQZ=!t76&Fb4>rz>QSY2#-h%oLm4+9M4LiZ+yRP z((EB`y;K|&UC2(}yGW^^*bcBE8T{v7M5nOeX2cQ*10XKOs6V(O68!iOehTw$VU8a0 zQUv;UM?eNeSPkq=z6%aAD9K2;4A_!KVN?lwcZ2~~OBH+OOrtO7%rrMUpH@W0K2^fe(O`i{wKRESLyrmDZd<$Av0@@S!_F62kV51wTiO+ zqKZ+uQ~CI7i~8Lq>(w;DK}9|Z*ET4S*(ArpUZPn{^#W7WKgd$fK6mA7Ev8ZEkB>l!i{TeAul=jm)3F&x9 z;%x<(_b;0{AGB?XoKrWK4T~B!B9PSZe%gHG2QC?w?l*=nfo`nR zy^^QF3}J^S<5tQukdoiS*3PdcI?NrJoO-b!qtoDGrQnv0ty`ni!lSYN3{c{7+?fMB zEu0g<4U&?N|9V3$0{A^;g#7g#J!0kqf!U`qMOX|5EB9ecF3x*-5hR+FOzf{HRMQt<#Rhm=RV! z-f46`41!31Gr&QVPpA}q0(KAnT!xR6h_;YavlL}SS#%{GQ14OQXRpaN^^Vq7mrbWd zORq@j+%%l^7p|sr5n;jXp~{`_oAaqWE1TSIDsjH1c0{AgxDl=EhgMr%s=R#<=124M zgUDhA9P2IP5HIE+d!bGQEFl@krJz2tjQ0)=?OFsVMJZy`3lm0ci|`Yo>60+WNwOqk znP&sI&*E#v;ym7izvjl5nFAY5F@;dsw50`eru4~Ygog~S8|#igv%nMW1-c{)^~@O? z0bp_)e6LReOtV#8hVbc&4&7YfYoNAaI~wV zUh5NVYlbVcQ?Xt)Z!UX%Q(Z`Q?*y6XT!LeS)uO={^~=oZrCgos_(ccTpHblWJ|}&r zTQC1zUq4Y9DBmU7;p)OJo!CcwM&nu7{v3zKaaAe5HkRfPveI7oPNH*Hh##6_jaVm9 zY{U?O4fug1cvfg6A25UI0RWkn3P~qf5c12fm-;rk`4wu?L2ak4YFX8E@Qh8 z7u4QvZpw#Pw9vFOHoX+Zoe99!>kbrc4s##Ke{nuG{1>^<%BL{QE(VfeDPvBAT5I)1lD1&V&S~q1-d9gmH3*V7+i^Vl6YH?U-pDLO7-?xug4r~Lokvnne_|jnWY`cMoX(L9iG->JJxPF0&S?j{yKY96*K7W_GtVJFV6@QyRLcC+j^yf5=*$gR&#zPj?%w->xuW#}E|A$#A)nEj0(OY5;u z0O#BV0uU3_FxFf!xk$blwh*SEb}5;`u&2;>B6pSznCAikH1g*#6F3+k1CKoM6AR8i zg`-O=(f|!o0|DSh0>MrMRnn#pAul`Qe2N_^?6oq^MC~zrx4Akf)j~eSuy@%4ShJ;U zk@B+(EYJ+r3-g|k<}OhN__yxZ#Q``MGS2V9E9a7kRTNi7A*3dlUh4_rJ7BgSseRC% zU3P$X3qXR&t%FO>1>u&7()ebR$h*%@9sp9M#*me)XV=Qo2>l2V}{}56uWW0o0n3b+4E7+6X>vMrf@q`oZeZVOuIYd6Tg|78AskkFOFp_>XTM08T)!m}?9djx-|f@IH~t06vjuAUUT$cD+}l zWw9t(F6sC`aQNc^pSR#*(%4o-wjdi!Jou_K-p(JBDz+NAdu5AsHrVKy&deFZc$KJM z1$ElEt7M7)O8XCr5ltDxA0Y#)MD4gtw+lR(!c|poO5QQB{V_qz_Y_&k+nEZg*<>u|37lDrU^k-e{i&1>oY8syc`sUWpx^R5M?LCrjmT z+Os)Pqn7vievf57yS}Y$Y`u!aj`x1)f1l<1#q-|jE)C2GSK^<;W>h!b60UZ-1ufPL|{-^-kw zDKA^K%$8?kVkH*5zx6*23&2oJ(y`(EKKI9D-A-=6xe_cge?zwao`uq?$8o}^hM9eQ zr_!H4@Hqv{?sN1Sm3j0SfBS^tZX$EC%(KH=MA2WK@)>0F`l|Niw+MBI*aSH_45Pax zirsgFcd^UMQ3!4hE@4dPC2Hz%$2eM}6F2?Y8y*Bpp)zr=-e@^vQUG`!{L_E??rnJQ3p7)zIf z0RX<$)JsmT-9O*_H{ARq|4!;|xRk$U`2E;t8Sidsgvyq>6PY)6^-d@Lvw1s|cg5rX zFNb2O&pJF}q||{#eMiqPSIsU%86NTNDCJF*Qm5-?qfN4-^&iCs!R=H}rOV{${+$||{Ce%?fA79L9mTAA6irRQgqHpb`+v*5 z_p(|`qv9P_E?LcgO_{3Ho<|Tr@%_(IF<@F-uST|U#%YJl;vUfCR0Gq^&3sXNdBv)g2Uq%cK-F>uT(Y6S4;rD_f?1+}JS{_}5ZSTnqpc zKR=Y%oBV~F4_gmRzlmb*d0yHL^Pw-J3BewCBzEFf97ZQZG9*n!f5`DH4VW7#`3Rrz zlw^&E)}RV0O~n;NVIDmy^0Qh8V2%&%)jQ9Kqp{MIv5N^Pn~< z(#>>Bj46(+EmWYz6d95w2FoC#OXJSFpYtf*+^lZmn+eMuN1l-C86D$kBXVb6#Y-uw zkSCKpor&T65r{Fy=4LVLB|YkLiuoTm!`^nJfu8F5zB;yc59Fsn?2YiJ&Qo@Noh8x8 zB@>=AlZ1R##S{z;<=Q;&-sBo%li#mg_ssHQqWN@%$=f3DQ&5$XJAXRsO^3w3Oj}K> zujy;cSSgk{3A%}HF=~Yd=QN@ux9)OyIb96L(UE}=e)tb#u4H!So0kpU;cD7N7bzNx z3iTcK**-T8RL^7lJT}f+RqEE^fc0p5vS;N-Zb06gKVKVr*}gdc0{ZWB&%y}#Zr$U? zKX`Ed&DPNYy)z!CWxvfc(znOrQ!mS1{IN#tfsMdg^K+ZzFw!hMYZvDDlM&O{`u=a- z^wZ%M+IZ35T*vplKs4kGRIz=hTzNh#%YsU-YL#h{kEEp>^hn#Bq54f+jR6UgBLr?H zyJ`6~lzm4F0TXYii$ZxPCWJ(34mm52M}XDYIK!u`Zn@9W<%RuoPz zYsk=dJ2*GQn8>DUZNvOhXQ%#}G(VmDK;ib0vLcka2#-?@bnpsVC2O4|kGgEBD7Rs5w*MR* zvOOBO=M0qr*3@oKzB$GQE2HlHY}0$7CK#kT4dGL8F2k`z=7! z=35udmv#6>JA?zh%+sv|COHA)Y(wM2W`!(AgG9@Y%4btIkNBrZEIqZUkyJf*)JJOJ z-#<`-2$uX!Y5Q?O{hyjP=IbvDMcwf~X!-6H2ZXXgevd@i+|qzlYTu^5{m_DMA-L|! zupae(B=DfH{ZgrOz!EoPabQu6l&$ZHI>kH&o=Br3#!*!<{Yr-Q?!g}&ZF7YMc#GG> zqSASk6~5?{Kx%~}$_hl;cybCiS=Ha!Z5!ST^=<_{xsTM2{DJ%E6hLh=c{8mw1rg!XNVTEmGXn5sHi(;bmkL0G3W3sZB&Iyq`S3s zw7!yxs`ZF*l%1BHX{3A?6&Wpp^(eaAOr7+vn)bPD1PWmr5(WyD9^tVy__yZ`KOs~6 zDLx=zqZf(fQE)p8!tf19puo#5&H!m$UUo41NFPZ@N2(5WCt%?tC&6OtGEl*mbbb0&*#h;|uiVR%kMe5%juX|nE z-Z)&&_|6JzYH9?JLZUlzqZOB>xDI9a!)AK9|1O}4Asixu%{Fs~yi-^}*XM4o6w_sn zr@88SiIXRG}S7n-Dm~1gNLncBcO<(>O|UN|cXI&MwXLPB{aSicmY` zN{AM-5ajB&mv&F|MC|5_jx}+FZVe;EsFLH~BU2i>Bk-B&6)W10WxZ%b35Emgb)Z$9}>sdFGjzFL4WKI+O)rrDxUHmAK z=WEiQ>+?y9$9Vp$yTDxtpBsixO7GN*<=sXH2ktwm+F9u*jf3&t<9#@Yd7Fy9inXo& zDG?|3RTC3XG><&0l=k$F2^#}s;%GKjZj{UBh?he(pfo*}vZ+swOu7Yx7G zXp0#>x8?jFWh%{v`F-uRFR>`vdv;hz`ET_p{W*BvhHouRu~B|bz20nt&#CG=uRl@K zD3cA9Db}M(&#%RbU40J};VeDkGWJE?6p*_p8p;BW-}8vQUDLX_xnqZu^;Du7(E|E$Ca+8RUCb$oH6jGA z-m>4>Qjtc~eVUi^)r()w^_<-etkG(V=f2z=l>M!yqcE_+QzJZSJsmT&M$su>RfR@d zJgHYSq7x@qRKjT1q4+54Q2pmgNW75!U4O&9G(&iDfm$g6PZuI{NqbUmq(>23rf1!C zDY7=LJxSD}l7rbJpk*f3MW#taenSOs)ouOQpk%If=K=Q+F_k*wf`4TNKdhqfdaAg7 zByaGx#~|z(v8EIqvMU5l%4dj6p-HJ6gZb%~4XIInswlz{uF#x=&nn2r&G0-;h49Gp zsY}&H!91+!T}LmZ6m>_+FH9$uO?C$5y>4{bNv)^q&uKsbvm=mc5iaf(Q@W0{OJZ-J z14waLwdR>A72=f2M>^keeP;`{HEQ2tw=#Tn&$te#?uZtW2L$_vC;WMQIta{EBloPR z)|ny45p&Kcz!cOG<355l#C|utvy&o5MzI{=mI5@Bdvk^Kf^*~tA0_d0#RcNxsGO3R zqjlRTl|kL-yf0)|C|7#p$T`}T?U|OUg*A94ivgW>hiIdsKonde%}B?aF+t-qvV*y~ zTKOGfo2+uCu>O+?!;vVmeS53shbvH=0y@?CT~oQ|fdvl2plM|H_X*9CrG}N(AQsXk z`Q=Su{SD)7Dp$bm%TP>7-)`5a=Ot-qH~d)81@cDn~%PMFV#9+IDV zx1D9ycP@D|MI|Ty6r!G=zkR;vt5cueAZ!ZExpU`!UNyfTN$n7t0}s-mX=~~P)YA&b zDC`u#XH_CuD-OLz-?)z^ra5n=2f3B)%bvuLF9(n7SmGY^^_-PcFu5uvXIb0U^xvxx zD&;*@HBZa1sb2V3Qc!1nON%MNm{ox&;JazYu9Dz1{XTw7Wi@1eWDC(uX?5=w?ztE;I~-4+Bc*@NLJI9kM2wDM{s_SI)LneMYum}F zB0R~D(0hNsKY_-4Vt4Ck-*z3+`xI4(8NV;W;TeUN4^Co8Hqgvz>u$fO!q60vrz!mr zSedO8FZlPeZ;zSZ#fA6(B0h4Kn~iFLulKzII9R5!eH*32pZ0{m6&srx_vgD=p-zmV zd%3l~J`$6?Hrd(2gI;`R(?!4ToZM$v7R+5sP9&#V>ZinDJ;_YvTs>P z+Z~ah?$l?Q0=Axci;AEXWZdvWM3TThn zGp!KA59?lWhEYWGsw6i81Ej19$P%Gz@*cbRZ~*Si!E-=ADLO(Z)_w!Ak@)W{;qe|v z+OdBN?SpvoYG0 zt&lzvm~t-WM~YF1JiOMcs`TuRY|%j6bS{pb$mxzxs}=KZp7oyo*D2w6NKO=dzWSu% z6$u^ET&e!d*Q}stO}kY*b?4(>DG9IC#BvD2r{X9n!~v3%Q5=pkk|f1H5|jyYfk+}u zLUfJ7Jy2dvD9`8FY-`E=A8Ahs94mr^jVX`O=bdIhi4o*X&C{N#p|h%Z8;Q?g1}(dfjRt(=~l$V#df_Bz36aM2w$*;6D_ak9klZGL+cAf7?QcQ!-b?U%Z)L|USXEN{2}Jdu@Zc7fq6H9~@5XP3G)ao{zCJW@nS9YTOgig--^ z?RNd%+*=hVhjAfx^~>KJsXfO~_bbk+%B3h5?^65+s8Cr*_bSWSGnmC0(tv%&U~L{N zM*-n%>#s)8VG zQQ|G+WX&zhBr|heIzpY22c|$B5H6EXb@t>a8=!_I_~@GqZNyAJTJPve2YCClS+C%c zJif6`&hMm0@XkLocakfgg?hPU*>ZXjlUpx4^6hbGl}nU`Rt_6@IkhhVeY;w8!%v!{5TzZv07KY0lm@^u~3DRB5!zDMd)ty5l! z^kXG>8LR)X@sZ#n;bro>IkH)A*uNL|T6H+5#zuhub`_A-sCI(E>(C+fJP5eEr`1 zc3#!+__o{#_I^%0HAH4KoaDh|2WkhXi z_jw1cG8+d0l9X(34<=aqY#;k)^8EQ+uRXjn7H1&TkOp6;iEzhxHlHlb@!TW+{rYZC zf105shhkDbX1fZEUv17jFf@!a~1+x9^_`l)X#v z&rfx$yx_+}!zcm&jgD^!~ zDVXiZJ_o%-RFe^VudI1Q+xMjI*^xOQ32q*k;4y~QQ74(T^d0#LBW1}H#>(b6iLOVL zimp|n^@@CV&knBE{9zU{K3QUlQ9*no3Pz~&Ws4YnWe4T^t$cyVAa|m#L!kq;xD6Lp z;n=a_bidrjy<@?P-shw7QMz2ICXaR6x8ir7Yxk=Q$f&!SaIv z?Yp@JMm<2weoNmm_L{Y^>rPA9;dg^+VR3~-Sm_e!acgr z<;ij)(nffo)er!u8R1FMB_^JSI4A4&eeM8fNb;L`KskLS3C}X3GDpsKgd$1^@tS}3 zxLhKETl*LIGJ0Cb5%1n^_<$;eO$uCy9P=z9T5t1pA9)kvn&OF( zAPn&VCy=N?+#{2gQ)EyD420qu`SX+&5|Ch4@KbYL?zj&D3Bo%Plheidquhz1IC~=6 zO@zxx40OgndG$F3;_2P|d~FZ^!3(E=g5pn-;BSA6bD!Amsan(WC7y4^Ts z&+dL7ib&4^{|?v*vU6%xzp$C~NV8A(bh6=IfK z!lzh)@DVIHlaMI+@D!&I2WWwMAtq%$qx&9N>iSg@USx#?poIPnn$KKvL^%>V=4fdA z1r@VfDgG3Qd>aJE{0f~xL`f+L(D)2LS*87#sp`1OWi1xYUX#RL0~LA1E-y zXo#RpDK0_po9WjOEc>M#L(w@LDxk7xl{mzF#Rjz9fk9a)D%}M@F7~_=kYBND+8}&H zPKXua2dJj7jK4QZ>Ol`10Z*`vJ~dKCdPEJGPGJ#-U}nS*DH(zW1c~t<^odag3p%J1 z_#&P}z<`!2F@DP%N)ge5Xb-|G|zN!lUbwIR~+7Lg2I3y&C%BiU!b_xt>Otl$Me+H@I_}qe= zP+Z6Yf>OXh0@grG8Jd(C(us&65?oMw4#1!hT_Ue4;5qoZnHz;$Z; zejLKvS>suDx^7Hl>NX z5=-*s2+x;@Oc_MEo}OWKWd_rfqf3KS6;rw6DhlzIk#5ed7}d%k7~+?L5Ls->G&ZH9 zl;G`h(|0|-y)QCaqE>YVZRjeJlfgH$Z8YOmKcUB*WW7b73GcdOK-}|iyjwHr%eeGh zKbp2#(t@Auo^0evC8^_1zw;!xL@7O0! z0|rynZl;61l{g|KsG=tJ)S)>fO^BmtK9@_QephPj@w_{NzV=t{`(>}g_f7i`NUn&d(=D>bPPZ1>8~jh~ zT)J`dm=eQkrn|!e-Z5)9F|xY_O1D*l6HQw)hOgmNlFv>H7s4zr~x|<*GR-E8_=rHVX9s^96fFSP6!?WB9 z0h9Y@9}=o7IjA5C#|7Rh5ET?t+hPiJ!oi6iz?#7H9D*)~0BYoIf7=U%COaL?vTPz8&`~ANoDDJ{oTCF7`U_GsYs>`VcrC1N+w2)j6B|=wITO5v_oNW&r^A zA8>?BSqvHb6f6)M3ZL}EeEe4K?@p~Y7rpJiMZ-n=aXVel-kAua|*813zlf$04!f1i^vyt{n2`&f)0hAv? z(Z0|Ac5F1K&>qYALYMPViw-99pz&s10R3B{lr+n;~uL1YyRao6gP#E!~JGn<9xR_B|2)Lb*)SJloM=D<;hXNsNPxcmsg|> zHtM3DWd-A|KW2-YUwC@Rk(t-MGH{dn*Q7?G-nrRw`={n2Zgj+0N?C{+bF(q#J9+mz zgGt6(XD@;Beph!0-O}9s78iDRx;F^AIP@8PN5g;$H*eTyjRtty(4Rn4`)KpoE(44*JzTiOR zPo$UUt(iKf-GlsK=9^DT$$Y8MYmkqsK4k0Hxx@{jTFn{*0G*IMgfwfKmhdiN5I#jhKNa3VNG#V<@UtNY)3@JTw`hZP4a{rrnxYj3wDyMj6l` zTQN(k1qHy!Hj&SK-k#22iD%GKM`drE(|LXsFVg1VYdOnHaiaP&JXWb{iGkqzj|d%T zPatwluawP#YaL$xi(%v;OWz91CMV&J8Nu)v&ds&nv-(ALGEo=p>UE5tsh$UX*Z2#D z#sQO^TJL;HAS{R}Acweqb~MSvc5^kEPorY!VmP`hdtj9ki?>dkq7KPNZ*oB*bh~%w|s#*3R!r5SSB;IgwVZYV=Y7U;d;6|9w0Ny?mmnt-^qS zIU<;ogc?kQ!!=c0TT(YkQGZl6-S~8#A+aD}`+W5K39mWNan{5^;xv~t-lIXxE#XHt z7*I(;Eulfl-!jPbQVJ?)tg|YmAV&dws5EF0S+N4UKRJ(&IAi}gV6r)l|4!$yR*zKNO{OU76O+MlWDElVJ) zyG<(USmBPCPsse=^GoM2_F>Cpv`pq z30rz6OKmuxc5>|PHl?f2Kg`p3GT*J+!wuV&Ma4v_^JFuuFJ&sm-7wGixDSh_*?w6> zoyEZdfEZ9*+$fcvAHn}cftU%&2K~Aw0ShALLG1HmKj8pc$Z_*2n+loYQQng64iXPa zZ=D}-C4d+jpo0YfAw53IO*V!U^fT6`k0XYQj2&RNFpqZCqQM#O(v&!L!*Q$-i{wZp zKkbu?pDHlcd07%XQ(JdBsp|NV>uK>I_rett4hwqYxa3HWYb7g;yW$9WNa$)8ImuZ) z*=a}Vv8?w+g4$;!_!xWh#qyM})IYf`$?=*p%)Fjl9;MRT^_#;VMCY__x?}!5Kr)Xn z1=nMMA@?m``mgF9NfpgSZi&3)`u6n*M{xAzYKBKD-JK+N+x-i?-t+KdW+Ao}0luIg zI)F}O40M~MIuz%qp&S;zFqI#+JGrw6LvEEB0A8%E4&(Zlp zR^>^X-$&$u*|=IFGiz{#A;!F!fMq!%dVhTWZUR>~^2chSzp)YK)GNUf0MX=R^-s*|uNc-1_Rq<X)l6IOod3Qtbqje})V@O`a(q(J+KhTmu^b zjS1Ao2HyNbgi*rhv*PeHQ?ToYrT!^nyA=UvHJS!XO-oopF*^fwH#ptO;B=`Ge_vgM zZ|!$B+A^|daUzXW8p{0a>WWLVulovM!vDiWCRt}03>=HHhX!^&E;0^$j3#mwJZ zUHQRouG!f!W&b_0ormIKm3;`Ml<@a0X7-#iEMn40pIBeVz zm6ksnv7x@xrs=5|r4QeKaLGM7{ge84>A8Yt${1?NhWLY{$ic6cfj?SBBq?5Ab$(8u zF<-glA6S*|nR-DZF&wH1?TH#M@1NYnM$pz=PVKOxCbLRiz6inVkL@hIh5|j?D{kJL z`b1sIRzyF{`d2n#tC#tWE-xCUn%qMD1+bL6A7<3~12H1nul1lS1 znDxbP?)!r0tGQ^tQJaAG?Uod945Z8tL;@QRXWOU+$S){I>u8|beI$+yzz$L2uyf}^ zzr)^qd!|PA^~UrlmdYb!feX_#=EqjJcI_K49of1|A#NzDpEL!F?~sBJ|xQJlj-htV1AdhjtlZzmL(`DvDj zBga*uNIyiZls*1rWA)htsJTPqs9o+YF<9rJZWUvMM3J;o+1Y7Q#?d}N2OiKR5G>YI z+n;#Sv9uzRadAE*HH{Hj`Um&LfKwvAW?iM!DrbU|@YxMSmhL>&fpiz}?IxJkVMam7 z&_-j9A&NTe9>-I(jcW6H{*0tL2qK8W8pWd4ZgBILW13S3v$$k+RoKWhA3*yhrsF;n zG@4pC-+q{K-0fxVKN1@0Gm_$#TpYYXVPSKfc4+pAi%#9!M~K&U=m~ zvzCsQ0(=d|Es>_|`7``o1U{89yu>0x`e)-0!FTBM&Wy^X2w#L0hL`jN<54XlTXMpL z1%1NETzh43f&MNBN-4}}T%Y}kC?arCQQw69@|d{ResYLWhQxYb9<>7A<4Cqidl8~I zf=UMgdt2MRC9jVHol-i``KWA+c2ganpK#@Gv;~QgwT22D5_;EJ$4fQ#N zBk`+Pv<~n4@aQv&G7=RB4D@F6?|RF;m%6lnx%z-!x%z*fbLvIVnaRY{p=U{$IdgAn zp?$CSGF&^$%B;^QaOE?W%M&XePl(RgfSv&{h#^P`nV@3diWD-3&Yfx`F`Kf?6+v&6 zDvuwKdmA>}-!hK1eTwEWPfG{_fF^*5i+&-r4pRbE7?wV(dXS}wgXMFp-W{uC?ktHn z*)`uleZC&uQCUOJrF$yy#K|%^jg9C5o@b)wRsN#l5eP1=Rvm_@EztL!K zf=liu{ZKt!uE4jH0c4gxNai+Wo+g$`ptm5trv{}O-~+NRW<~9#!4VP`7{5}=?O#|( z8v<|d!t+DGE0{q$8NK^2&^gTInhMF{F;PaQS9MHrroVN0yaKm6Zp?`Sb8mUQkoA|t zQcf{T=Gswl)?5AJO66U@4_YX!NLpQLjPhM$1~Lx>a@Fm0pK`IQ^%>pUqJx%-Ck);Dh@R;_>J{*$XWcEt8+l}lsN_idDLaPNxi z(^Er{V4#%q7fGLbY5#V55XjF^@6893^*C3s+lLA@9ebb?NWkQ2lmv0*`ziO>vA%SrIC9agbmOU{K7aVM9T}_n%*q-^! z6jy9lpR)^bI@j_DSGrRtdo+1`*Q!-&qpt~ZF5q0A%6ngT$gAbhuR3pf^21hw!^3&P zqGYsc5@O$}`k?#p4VB>#*XFxYwmJRR|H)tp(v=m{5dv+S&X=f z7oBZ1B}wTKVW+yjWZak~Zy^4N4)8Aeo85ijEo#2Z*YxS9XQ<#VWF(ecvm%K^JMs{H j#0e=&aRE4G5iJE1<{%&N7#LWXfE-4k z1SgQ@%*oF$h|kF^E&(bQ2J3*(Y(UHl#1O?04CBKvjL!_kFg^DQ2P%IV1SEu5P;Gg3@`xJw;w7`h=!Si z?zp_f+*Fw3m|>0s1t*lvmXn&7UXlTmDb7sKgBZc|AI(c#DTyVCdTB*K1JR?WD8F0} bW)V1e8-T?B|NnnML*O3(bsn?$>;V7(B!*lG literal 0 HcmV?d00001 diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/looplist_func_POSm4.txt b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/looplist_func_POSm4.txt new file mode 100644 index 0000000..a0570c7 --- /dev/null +++ b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/looplist_func_POSm4.txt @@ -0,0 +1,7 @@ +loop length sign +c(1, 1) 1 -1 +c(2, 2) 1 -1 +c(3, 3) 1 -1 +c(4, 4) 1 -1 +c(3, 4, 1, 2, 3) 4 -1 +c(3, 4, 2, 3) 3 1 diff --git a/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/workflow_LoopDetectR.Rmd b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/workflow_LoopDetectR.Rmd new file mode 100644 index 0000000..58a59cf --- /dev/null +++ b/LoopDetectR.Rcheck/00_pkg_src/LoopDetectR/vignettes/workflow_LoopDetectR.Rmd @@ -0,0 +1,384 @@ +--- +title: "LoopDetectR: Comprehensive Feedback Loop Detection in ODE models" +author: "Katharina Baum" +date: "07/06/2020" +output: rmarkdown::html_vignette +vignette: > + %\VignetteEngine{knitr::knitr} + %\VignetteIndexEntry{LoopDetectR: Comprehensive Feedback Loop Detection in ODE models} + %\usepackage[UTF-8]{inputenc} +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +## Installation + +LoopDetectR is on CRAN and can be installed within R by + +```{r install_fromCRAN, eval=FALSE} +# Download and install +install.packages("LoopDetectR") +``` + +Alternatively, you can install the package from GitHub. Call the following +commands in an R session. + +```{r install_fromgit, message=FALSE, results='hide', eval=FALSE} +# Install the package including the vignette and the manual +remotes::install_github( + "DILiS-lab/LoopDetectR", + build_manual = TRUE, + build_vignettes = TRUE +) + +``` + +After installation, load the package. +```{r load_package} +# Load package +library("LoopDetectR") +``` + +## In brief and quick start + +The package LoopDetectR enables determining all feedback loops of +an ordinary differential equation (ODE) system at user-defined values of +the model parameters and of the modelled variables. + +The following call reports (up to 10) feedback loops for an ODE system +determined by a function, here the example function `func_POSm4`, at variable +values `s_star` (here, these are all equal to 1). Additional arguments to the +example function are supplied. + +```{r quick_example} + +# Load example ODE system with function func_POSm4, 4 variables +data("func_POSm4") +# Example variable values +s_star <- rep(1,4) +# Further arguments of func_POSm4, in addition: time t as argument +klin <- rep(1,8) +knonlin <- c(2.5,3) + +# compute loops +res_tab <- find_loops_vset(func_POSm4,vset=list(s_star),t=1,klin=klin, + knonlin=knonlin,max_num_loops=10) +# The loop list is reported +res_tab$loop_rep[[1]] +# This is the sixth loop of the list. It is a positive feedback loop (sign in +# the loop list equals +1) of length 3 in that variable 3 regulates variable 4, +# variable 4 regulates variable 2, and variable 2 regulates variable 3. +res_tab$loop_rep[[1]][6,] +# The corresponding signed Jacobian matrix +res_tab$jac_rep[[1]] +``` + +## Introduction + +Ordinary differential equation (ODE) models are used frequently to +mathematically represent biological systems. Feedback loops are important +regulatory features of biological systems and can give rise to different +dynamic behavior such as multistability for positive feedback loops or +oscillations for negative feedback loops. + +The feedback loops in an ODE system can be detected with the help of its +Jacobian matrix, the matrix of partial derivatives of the variables. +It captures all interactions between the variables and gives rise to the +interaction graph of the ODE model. In this graph, each modelled variable +is a node and non-zero entries in the Jacobian matrix are (weighted) +edges of the graph. Interactions can be positive or negative, according +to the sign of the Jacobian matrix entry. + +Directed path detection in this graph is used to determine all feedback +loops (in graphs also called cycles or circuits) of the system. They are +marked by a set of directed interactions forming a chain in which only +the first and the last node (variable) is the same. Thereby, self-loops +(loops of length one) can also occur. + +LoopDetectR allows for detection of all loops of the graph and also reports +the sign of each loop, i.e. whether it is a positive feedback loop +(the number of negative interactions is even) or a negative feedback loop +(the number of negative interactions is uneven). +The output is a table that captures the order of the variables forming +the loop, their length and the sign of each loop. + +Jacobian determination in LoopDetectR relies on the package `numDeriv`, and path +finding in graphs uses algorithms supplied in the package `igraph`. + +## Solving the ODE model to generate variable values of interest + +Solving an ODE model can be performed with the package `deSolve`. +Note: You can skip this step if you already have a point of interest in state +space, or if you want to use dummy values for the variables such as +`s_star <- 1:4`. + +```{r solving_ODE} +# Load example ODE system with function func_POSm4, +# Positive feedback chain model from [Baum et al., 2016], 4 variables +data(func_POSm4) +# The function func_POSm4 returns a vector, but deSolve needs the vector within +# a list as output. Therefore, we define a function that simply puts the output +# of func_POSm4 into a list: +func_POSm4_list <- function(t,x,klin,knonlin){list(func_POSm4(t,x,klin,knonlin))} +# Kinetic parameters of the model, supplied as arguments to func_POSm4 +klin <- c(165,0.044,0.27,550,5000,78,4.4,5.1) +knonlin <- c(0.3,2) +# Solve the system using deSolve +sol <- deSolve::ode(y = rep(1,4), times = seq(0,15,0.1), func = func_POSm4_list, + parms=klin, knonlin=knonlin) +# The solution of the 4-variable system is oscillatory, showing only the first +# variable here +plot(sol[,1],sol[,2],type='l',xlab='time',ylab ='variable 1') +# Set the last point of the numeric solution as point of interest, omit the +# first column (it contains the time) +s_star <- sol[dim(sol)[1],2:dim(sol)[2]] +``` + +State variable values of interest could be steady state values, +values at a specific point in time (e.g. after a stimulus) or even a set +of values (see section *Determining loops over a set of variable values*). + + +## Calculating the Jacobian matrix + +The function `jacobian` from the `numDeriv` package can be used to determine +numerically the Jacobian matrix of an ODE system at a certain set of values +for the variables, `s_star`. +The approach is that of finite differences (with real step) or +complex step approach, the latter of which is supposed to deliver more exact +results [Martins et al., 2003]. + +The input function, in the example `func_POSm4` (positive feedback chain model +from [Baum et al., 2016]) defines the time derivatives of the modelled variables +as a vector: $f_i(s)=dS_i/dt$. Note that only those input arguments to the +function that encode the modelled variables (and hence in whose direction the +partial derivatives are taken) are allowed to be called `x`. + +```{r compute_jacobian} +klin <- c(165,0.044,0.27,550,5000,78,4.4,5.1) +knonlin <- c(0.3,2) +j_matrix <- numDeriv::jacobian(func_POSm4,s_star,method="complex", + t=1,klin=klin,knonlin=knonlin,) +j_matrix +signed_jacobian <- sign(j_matrix) +``` + +The (i,j)th entry of the Jacobian matrix denotes the partial derivative +of variable $S_i$ with respect to variable $S_j$, +$J_{ij}=\delta S_i/\delta S_j$, which is positive if $S_j$ has a direct positive +effect on $S_i$, negative if $S_j$ has a direct negative effect on $S_i$ and zero +if $S_j$ does not have a direct effect on $S_i$. For example, the entry in row 2, +column 4, $J_{24}$, of the `signed_jacobian` matrix above is positive, meaning that +in the underlying ODE model, variable 4 positively regulates variable 2. + +## Computing all feedback loops and useful functions for loop search + +The Jacobian matrix is used to compute feedback loops in the generated +interaction graph. The default function for this is `find_loops`, in that +strongly +connected components are determined to reduce runtime. For smaller +systems, the function `find_loops_noscc` skips this step and thus can be +faster. The optional second input argument, `max_num_loops`, sets an upper +limit to the number of detected and reported loops and thus can prevent overly +long runtime (but also potentially not all loops are returned). + +```{r find_loops} +# Determine the loop_list from Jacobian matrix j_matrix +loop_list <- find_loops(j_matrix) +loop_list +# The signed Jacobian matrix can be supplied instead, delivering the same results +loop_list <- find_loops(signed_jacobian) +loop_list +``` + +The output loop list is an R data.frame with one row for each detected loop. +The column +`loop` contains the order of the variables that form the loop (as vector in a +list); `length` contains the loop length (i.e. the number of variables involved); +`sign` denotes whether the loop is negative, `-1`, or positive, `1`. +The data.frame can be queried as usual for single loops or loops of a certain +length or sign. + +```{r retrieve_loops} +# Retrieve fifth loop +loop_list[5,1] +# In order to obtain the vector of the order of variables of a loop, you have to +# call the list element +loop_list[5,1][[1]] +# Retrieve all loops of length 4 +loop_list[loop_list$length==4,] +``` + +The LoopDetectR function `loop_summary` provides a convenient report on total +number of loops, subdivided by their lengths (`len_i`) and signs (`all`, `pos`, +`neg`). + +```{r loop_summary} +loop_summary(loop_list) +``` + +One can filter the loop list for loops containing specific variables, for +example the one with index 2: + +```{r loops_with_specific_node} +# Index of node of interest +noi <- 2 +# Return all loops from loop_list containing node 2 +loop_list[vapply(loop_list$loop,function(x){noi %in% x},logical(1)),] +``` + +The LoopDetectR function `find_edge` can be used to search a loop list for loops +containing specific edges defined by the indices of the ingoing and outgoing +nodes. This example returns the indices of all loops with a regulation of node +3 by node 2. These are only two here. + +```{r find_edge} +# Obtain the indices of the loops with edge '2 regulates 3' in loop_list +loop_edge_ind <- find_edge(loop_list,source_node=2,target_node=3); +loops_with_edge_2_to_3 <- loop_list[loop_edge_ind,] +loops_with_edge_2_to_3 +``` + +Loop lists can be saved and loaded as R objects using the usual save (or +saveRDS) and load (loadRDS) R functions. Saving the loop list into table files +is possible, but the vectors containing the loops are saved as string +`"c(x,y,z)"` and need special handling when loading back into R or into other +programming language frameworks. + +```{r save_files} +# This writes a file 'looplist_func_POSm4.RData' +save(loop_list,file=file.path(tempdir(),'looplist_func_POSm4.RData')) +# This loads the object 'loop_list' into the workspace +load(file.path(tempdir(),'looplist_func_POSm4.RData')) + +# This saves the loop list into a table with separation by tab +write.table(loop_list,file=file.path(tempdir(),'looplist_func_POSm4.txt'), + sep='\t',quote=F,row.names=F) +# This reads the loop list back into the R session, as object ll +ll <- read.table(file.path(tempdir(),'looplist_func_POSm4.txt'), + header=T,sep='\t') +ll +# This transforms the "c(x,y,z)"-entries into the format used by LoopDetectR +ll$loop <- lapply(ll$loop,function(x){eval(parse(text=x))}) +ll +``` + +## Computing feedback loops over multiple sets of variable values of interest + +In this example of a model of the bacterial cell cycle [Li et al., 2008], +it is demonstrated how feedback loops can be determined over multiple sets of +variable values. Here, it is focused on the solution of the ODE +systems along the time axis (provided as data in the package, +*li08_solution.RData*). + +```{r li_example} +# Load in the example ODE model function func_li08, the kinetic parameters are +# defined within the function, and the function returns a vector of the time +# derivatives (in the same order as the modelled variables in the arguments) +data("func_li08") +# Load sets of variable values (solution to the ODE over time) +data("li08_solution") #loads the data.frame li08_solution, columns: variables +# Cast the solution into the correct list format and remove time (first column) +li08_sol_list <- as.list(as.data.frame(t(li08_solution[,-1]))) +# Compute all different loop lists along the solution +res_tab <- find_loops_vset(func_li08,vset=li08_sol_list,t=1, + compute_full_list=FALSE) +``` + +The solutions of the example ODE model give rise to seven different loop lists +that are saved as elements of the list `res_tab$loop_rep`. +Here, two examples of resulting loop lists are given (without +self-loops). + +```{r example_loop_lists_li} +loop_list_2 <- res_tab$loop_rep[[2]][res_tab$loop_rep[[2]]$length>1,] +loop_list_2 +loop_list_7 <- res_tab$loop_rep[[7]][res_tab$loop_rep[[7]]$length>1,] +loop_list_7 +``` + +The entry `res_tab$loop_rep_index` is a vector of the same length as the +number of different states at which the loops were determined +(`length(li08_sol_list)`), and returns which entry of `res_tab$loop_rep` belongs +to each input state. + +```{r example_li_index} +# Determine the loop list belonging to the 10th up to 20th input state. +# It is loop_list_2 for all of these input states. +res_tab$loop_rep_index[10:20] +``` + +Similarly, `res_tab$jac_rep` and `res_tab$jac_rep_index` capture the different +Jacobian matrices and for each input state which Jacobian belongs to it. + +Results of this analysis could be plotted along the solution and analyzed +further to discover reasons of changing loops. Please note that in order +to obtain the sample solution in *li08_solution.RData* also event functions +are required; the solution cannot be retrieved from integrating +`func_li08` alone. Please refer to the model's publication [Li et al., +2008] for details. + + +## Comparing two loop lists + +LoopDetectR provides a function for comparing the loops of two systems, +`compare_loop_list`. For a meaningful comparison, the loop indices in +the compared systems should point to the same variables. This could be the case +when regulations change within one system between different sets of variables of +interest (along a dynamic trajectory, at different steady states of the system), +or when comparing different systems in which one or more regulations are altered +(as in the below example the positive feedback chain model vs. the negative +feedback chain model, [Baum et al., 2016]). + +```{r compare_loops} +# Load the ODE function of the positive feedback chain model +data(func_POSm4) +# Set kinetic parameters +klin <- c(165,0.044,0.27,550,5000,78,4.4,5.1) +knonlin <- c(0.3,2) +# Compute the Jacobian matrix of the system at the state [1,1,1,1] +j_matrix <- numDeriv::jacobian(func_POSm4,rep(1,4),method="complex", + t=1, klin=klin, knonlin=knonlin) +# Compute all loops for this Jacobian +loop_list_pos <- find_loops(j_matrix) + +# Function with negative regulation. The altered regulation affects +# two entries of the Jacobian matrix. Parameter values and the set of +# variable values remain identical. +j_matrix_neg <- sign(j_matrix) +j_matrix_neg[1:2,4] <- -sign(j_matrix[1:2,4]) +# Compute the loop list for this Jacobian with altered regulation +loop_list_neg <- find_loops(j_matrix_neg); + +# Compute comparison +comp_inds <- compare_loop_list(loop_list_pos,loop_list_neg) +# Only the four self-loops remain identical in both systems (the indices +# with respect to the first input list, loop_list_pos, are saved in ind_a_id). +loop_list_pos[comp_inds$ind_a_id,] +# ind_b_id saves the indices of the corresponding loops in the negatively +# regulated system, loop_list_neg. +loop_list_neg[comp_inds$ind_b_id,] +# Two loops are the same in both systems but they have switched their signs. +# Their indices in the first list are saved in ind_a_switch +loop_list_pos[comp_inds$ind_a_switch,] +# Their indices in the second list are saved in ind_b_switch +loop_list_neg[comp_inds$ind_b_switch,] +# All loops in the positively regulated system do also occur in the negatively +# regulated system, i.e. ind_a_notin is empty. +comp_inds$ind_a_notin +``` + +## References + +Baum K, Politi AZ, Kofahl B, Steuer R, Wolf J. Feedback, Mass +Conservation and Reaction Kinetics Impact the Robustness of Cellular +Oscillations. PLoS Comput Biol. 2016;12(12):e1005298. + +Li S, Brazhnik P, Sobral B, Tyson JJ. A Quantitative Study of the +Division Cycle of Caulobacter crescentus Stalked Cells. Plos Comput Biol. +2008;4(1):e9. + +Martins JRRA, Sturdza P, Alonso JJ. The complex-step derivative +approximation. ACM Trans Math Softw. 2003;29(3):245–62. diff --git a/LoopDetectR.Rcheck/00install.out b/LoopDetectR.Rcheck/00install.out new file mode 100644 index 0000000..9acd6bb --- /dev/null +++ b/LoopDetectR.Rcheck/00install.out @@ -0,0 +1,16 @@ +* installing *source* package 'LoopDetectR' ... +** this is package 'LoopDetectR' version '0.1.3' +** using staged installation +** R +** data +*** moving datasets to lazyload DB +** inst +** byte-compile and prepare package for lazy loading +** help +*** installing help indices +** building package indices +** installing vignettes +** testing if installed package can be loaded from temporary location +** testing if installed package can be loaded from final location +** testing if installed package keeps a record of temporary installation path +* DONE (LoopDetectR) diff --git a/LoopDetectR.Rcheck/LoopDetectR-Ex.R b/LoopDetectR.Rcheck/LoopDetectR-Ex.R new file mode 100644 index 0000000..be5c279 --- /dev/null +++ b/LoopDetectR.Rcheck/LoopDetectR-Ex.R @@ -0,0 +1,223 @@ +pkgname <- "LoopDetectR" +source(file.path(R.home("share"), "R", "examples-header.R")) +options(warn = 1) +options(pager = "console") +base::assign(".ExTimings", "LoopDetectR-Ex.timings", pos = 'CheckExEnv') +base::cat("name\tuser\tsystem\telapsed\n", file=base::get(".ExTimings", pos = 'CheckExEnv')) +base::assign(".format_ptime", +function(x) { + if(!is.na(x[4L])) x[1L] <- x[1L] + x[4L] + if(!is.na(x[5L])) x[2L] <- x[2L] + x[5L] + options(OutDec = '.') + format(x[1L:3L], digits = 7L) +}, +pos = 'CheckExEnv') + +### * +library('LoopDetectR') + +base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') +base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') +cleanEx() +nameEx("compare_loop_list") +### * compare_loop_list + +flush(stderr()); flush(stdout()) + +base::assign(".ptime", proc.time(), pos = "CheckExEnv") +### Name: compare_loop_list +### Title: Compare two loop lists +### Aliases: compare_loop_list + +### ** Examples + +#sample Jacobian matrix of a system with 4 variables +jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) +#find the feedback loops of the system +loop_list <- find_loops(jac_matrix,10) +#a slightly different Jacobian matrix of the system with 4 variables +jac_matrix_alt <- rbind(c(-1,0,0,1),c(1,-1,0,-1),c(0,1,-1,0),c(0,0,1,-1)) +#find the feedback loops of the system +loop_list_alt <- find_loops(jac_matrix_alt,10) +#compare the loop lists +comp_loop_list <- compare_loop_list(loop_list,loop_list_alt) +#loops that switch sign +comp_loop_list[['ind_a_switch']] + + + + +base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") +base::cat("compare_loop_list", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") +cleanEx() +nameEx("find_edge") +### * find_edge + +flush(stderr()); flush(stdout()) + +base::assign(".ptime", proc.time(), pos = "CheckExEnv") +### Name: find_edge +### Title: Detecting loops with a certain edge +### Aliases: find_edge + +### ** Examples + +#sample Jacobian matrix of a system with 4 variables +jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) +#find the feedback loops of the system +loop_list <- find_loops(jac_matrix,10) +#find the loops containing the regulation from variable 3 to variable 4 +inds_3_to_4 <- find_edge(loop_list,3,4) + + + + +base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") +base::cat("find_edge", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") +cleanEx() +nameEx("find_loops") +### * find_loops + +flush(stderr()); flush(stdout()) + +base::assign(".ptime", proc.time(), pos = "CheckExEnv") +### Name: find_loops +### Title: Loop detection in a matrix +### Aliases: find_loops + +### ** Examples + +#sample Jacobian matrix of a system with 4 variables +jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) +#find the first 5 feedback loops of the system +loop_list <- find_loops(jac_matrix,5) + + + + +base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") +base::cat("find_loops", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") +cleanEx() +nameEx("find_loops_noscc") +### * find_loops_noscc + +flush(stderr()); flush(stdout()) + +base::assign(".ptime", proc.time(), pos = "CheckExEnv") +### Name: find_loops_noscc +### Title: Loop detection in a matrix +### Aliases: find_loops_noscc + +### ** Examples + +#sample Jacobian matrix of a system with 4 variables +jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) +#find the first 5 feedback loops of the system +loop_list <- find_loops_noscc(jac_matrix,5) + + + + +base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") +base::cat("find_loops_noscc", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") +cleanEx() +nameEx("find_loops_vset") +### * find_loops_vset + +flush(stderr()); flush(stdout()) + +base::assign(".ptime", proc.time(), pos = "CheckExEnv") +### Name: find_loops_vset +### Title: Loop detection for an ODE model at multiple sets of variables +### Aliases: find_loops_vset + +### ** Examples + +#default call to determine loops from an ODE model given by a function +#read in example functions +data("func_POSm4") +#the loaded function func_POSm4 takes arguments t, x, klin, knonlin +res_tab <- find_loops_vset(func_POSm4,vset=list(c(1,1,1,1)),t=1, +klin=c(1,2,0.5,1,2,0.1,3,2,3),knonlin=c(1,2)) +#computed loop list: +res_tab$loop_rep[[1]] #or res_tab[[1]][[1]] + +#determine loops from an ODE model over the course of a solution +#read in the example function defining the bacterial cell cycle +data("func_li08") +#kinetic parameter values are defined within the function +#read in a set of variable values (the solution of func_li08 with events) +data("li08_solution") +#transform the solution (columns: variables) to the correct list format +#and remove the time (first column) +li08_sol_list <- as.list(as.data.frame(t(li08_solution[,-1]))) +res_tab <- find_loops_vset(func_li08,vset=li08_sol_list,t=1, +compute_full_list=FALSE) + + + + +base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") +base::cat("find_loops_vset", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") +cleanEx() +nameEx("loop_summary") +### * loop_summary + +flush(stderr()); flush(stdout()) + +base::assign(".ptime", proc.time(), pos = "CheckExEnv") +### Name: loop_summary +### Title: Summary of a loop list +### Aliases: loop_summary + +### ** Examples + +#sample Jacobian matrix of a system with 4 variables +jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) +#find the feedback loops of the system +loop_list <- find_loops(jac_matrix,10) +#loop summary table +loop_sum_tab <- loop_summary(loop_list) + + + + +base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") +base::cat("loop_summary", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") +cleanEx() +nameEx("sort_loop_index") +### * sort_loop_index + +flush(stderr()); flush(stdout()) + +base::assign(".ptime", proc.time(), pos = "CheckExEnv") +### Name: sort_loop_index +### Title: Sort loop indices +### Aliases: sort_loop_index + +### ** Examples + +#sample Jacobian matrix of a system with 4 variables +jac_matrix <- rbind(c(-1,0,0,-1),c(1,-1,0,1),c(0,1,-1,0),c(0,0,1,-1)) +#find the feedback loops of the system +loop_list <- find_loops(jac_matrix,10) +#sort the loop indices to start with the smallest +sorted_loop_list <- sort_loop_index(loop_list) + + + + +base::assign(".dptime", (proc.time() - get(".ptime", pos = "CheckExEnv")), pos = "CheckExEnv") +base::cat("sort_loop_index", base::get(".format_ptime", pos = 'CheckExEnv')(get(".dptime", pos = "CheckExEnv")), "\n", file=base::get(".ExTimings", pos = 'CheckExEnv'), append=TRUE, sep="\t") +### *