bella-companion 0.0.6__tar.gz → 0.0.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of bella-companion might be problematic. Click here for more details.

Files changed (87) hide show
  1. {bella_companion-0.0.6 → bella_companion-0.0.8}/PKG-INFO +2 -2
  2. bella_companion-0.0.8/bella_companion/cli.py +54 -0
  3. bella_companion-0.0.8/bella_companion/fbd_empirical/__init__.py +4 -0
  4. bella_companion-0.0.8/bella_companion/fbd_empirical/notbooks.ipynb +170 -0
  5. bella_companion-0.0.8/bella_companion/fbd_empirical/run_beast.py +68 -0
  6. bella_companion-0.0.8/bella_companion/fbd_empirical/summarize_logs.py +33 -0
  7. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/__init__.py +8 -1
  8. bella_companion-0.0.8/bella_companion/simulations/__pycache__/__init__.cpython-310.pyc +0 -0
  9. bella_companion-0.0.8/bella_companion/simulations/__pycache__/generate_data.cpython-310.pyc +0 -0
  10. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/epi_skyline_results.py +2 -2
  11. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/explain/pdp.py +21 -27
  12. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/explain/shap.py +1 -1
  13. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/fbd_2traits_results.py +1 -1
  14. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/fbd_no_traits_results.py +2 -2
  15. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/scenarios.py +2 -2
  16. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/generate_data.py +4 -2
  17. bella_companion-0.0.8/bella_companion/simulations/metrics.py +62 -0
  18. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/epi_multitype.cpython-310.pyc +0 -0
  19. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/fbd_2traits.cpython-310.pyc +0 -0
  20. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/fbd_no_traits.cpython-310.pyc +0 -0
  21. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/scenario.cpython-310.pyc +0 -0
  22. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/epi_multitype.py +1 -1
  23. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/fbd_2traits.py +1 -4
  24. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/summarize_logs.py +3 -4
  25. bella_companion-0.0.8/bella_companion/utils/__init__.py +19 -0
  26. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/utils/beast.py +2 -2
  27. {bella_companion-0.0.6 → bella_companion-0.0.8}/pyproject.toml +3 -2
  28. bella_companion-0.0.6/bella_companion/cli.py +0 -42
  29. bella_companion-0.0.6/bella_companion/fbd_empirical/figure.py +0 -37
  30. bella_companion-0.0.6/bella_companion/fbd_empirical/notbooks.ipynb +0 -359
  31. bella_companion-0.0.6/bella_companion/fbd_empirical/params.json +0 -11
  32. bella_companion-0.0.6/bella_companion/fbd_empirical/run_beast.py +0 -54
  33. bella_companion-0.0.6/bella_companion/fbd_empirical/summarize_logs.py +0 -50
  34. bella_companion-0.0.6/bella_companion/simulations/__pycache__/__init__.cpython-310.pyc +0 -0
  35. bella_companion-0.0.6/bella_companion/simulations/__pycache__/generate_data.cpython-310.pyc +0 -0
  36. bella_companion-0.0.6/bella_companion/utils/__init__.py +0 -23
  37. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/__init__.py +0 -0
  38. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/fbd_empirical/__pycache__/run_beast.cpython-311.pyc +0 -0
  39. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/fbd_empirical/__pycache__/run_mlp.cpython-311.pyc +0 -0
  40. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/fbd_empirical/__pycache__/run_nonparametric.cpython-311.pyc +0 -0
  41. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/fbd_empirical/__pycache__/summarize_logs.cpython-311.pyc +0 -0
  42. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/fbd_empirical/data/body_mass.csv +0 -0
  43. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/fbd_empirical/data/change_times.csv +0 -0
  44. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/fbd_empirical/data/sampling_change_times.csv +0 -0
  45. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/fbd_empirical/data/trees.nwk +0 -0
  46. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/__pycache__/__init__.cpython-311.pyc +0 -0
  47. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/__pycache__/features.cpython-310.pyc +0 -0
  48. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/__pycache__/features.cpython-311.pyc +0 -0
  49. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/__pycache__/generate_data.cpython-311.pyc +0 -0
  50. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/__pycache__/run_beast.cpython-311.pyc +0 -0
  51. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/__pycache__/summarize_logs.cpython-311.pyc +0 -0
  52. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/features.py +0 -0
  53. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__init__.py +0 -0
  54. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/__init__.cpython-311.pyc +0 -0
  55. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/epi_explainations.cpython-311.pyc +0 -0
  56. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/epi_predictions.cpython-311.pyc +0 -0
  57. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/epi_simulations.cpython-311.pyc +0 -0
  58. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/fbd_explainations.cpython-311.pyc +0 -0
  59. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/fbd_predictions.cpython-311.pyc +0 -0
  60. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/fbd_simulations.cpython-311.pyc +0 -0
  61. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/figure1.cpython-311.pyc +0 -0
  62. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/plot.cpython-311.pyc +0 -0
  63. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/scenarios.cpython-311.pyc +0 -0
  64. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/__pycache__/utils.cpython-311.pyc +0 -0
  65. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/epi_multitype_results.py +0 -0
  66. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/figures/explain/__init__.py +0 -0
  67. /bella_companion-0.0.6/bella_companion/utils/plots.py → /bella_companion-0.0.8/bella_companion/simulations/figures/utils.py +0 -0
  68. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/generate_figures.py +0 -0
  69. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/run_beast.py +0 -0
  70. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__init__.py +0 -0
  71. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/__init__.cpython-310.pyc +0 -0
  72. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/__init__.cpython-311.pyc +0 -0
  73. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/common.cpython-310.pyc +0 -0
  74. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/common.cpython-311.pyc +0 -0
  75. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/epi_multitype.cpython-311.pyc +0 -0
  76. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/epi_skyline.cpython-310.pyc +0 -0
  77. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/epi_skyline.cpython-311.pyc +0 -0
  78. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/fbd_2traits.cpython-311.pyc +0 -0
  79. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/fbd_no_traits.cpython-311.pyc +0 -0
  80. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/scenario.cpython-311.pyc +0 -0
  81. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/__pycache__/utils.cpython-311.pyc +0 -0
  82. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/common.py +0 -0
  83. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/epi_skyline.py +0 -0
  84. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/fbd_no_traits.py +0 -0
  85. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/simulations/scenarios/scenario.py +0 -0
  86. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/utils/explain.py +0 -0
  87. {bella_companion-0.0.6 → bella_companion-0.0.8}/bella_companion/utils/slurm.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: bella-companion
3
- Version: 0.0.6
3
+ Version: 0.0.8
4
4
  Summary:
5
5
  Author: gabriele-marino
6
6
  Author-email: gabmarino.8601@gmail.com
@@ -12,5 +12,5 @@ Classifier: Programming Language :: Python :: 3.12
12
12
  Requires-Dist: arviz (>=0.22.0,<0.23.0)
13
13
  Requires-Dist: bella-lumiere (>=0.0.13,<0.0.14)
14
14
  Requires-Dist: dotenv (>=0.9.9,<0.10.0)
15
- Requires-Dist: phylogenie (>=2.1.28,<3.0.0)
15
+ Requires-Dist: phylogenie (>=2.1.29,<3.0.0)
16
16
  Requires-Dist: seaborn (>=0.13.2,<0.14.0)
@@ -0,0 +1,54 @@
1
+ import argparse
2
+ import os
3
+ from pathlib import Path
4
+
5
+ from dotenv import load_dotenv
6
+
7
+ from bella_companion.fbd_empirical import run_beast as run_fbd_empirical
8
+ from bella_companion.fbd_empirical import summarize_logs as summarize_fbd_empirical
9
+ from bella_companion.simulations import generate_data, generate_figures, print_metrics
10
+ from bella_companion.simulations import run_beast as run_simulations
11
+ from bella_companion.simulations import summarize_logs as summarize_simulations
12
+
13
+
14
+ def main():
15
+ load_dotenv(Path(os.getcwd()) / ".env")
16
+
17
+ parser = argparse.ArgumentParser(
18
+ prog="bella",
19
+ description="Companion tool with experiments and evaluation for Bayesian Evolutionary Layered Learning Architectures (BELLA) BEAST2 package.",
20
+ )
21
+
22
+ subparsers = parser.add_subparsers(dest="command", required=True)
23
+
24
+ subparsers.add_parser(
25
+ "sim-data", help="Generate synthetic simulation datasets."
26
+ ).set_defaults(func=generate_data)
27
+
28
+ subparsers.add_parser(
29
+ "sim-run", help="Run BEAST2 analyses on simulation datasets."
30
+ ).set_defaults(func=run_simulations)
31
+
32
+ subparsers.add_parser(
33
+ "sim-summarize", help="Summarize BEAST2 log outputs for simulations."
34
+ ).set_defaults(func=summarize_simulations)
35
+
36
+ subparsers.add_parser(
37
+ "sim-metrics", help="Compute and print metrics from simulation results."
38
+ ).set_defaults(func=print_metrics)
39
+
40
+ subparsers.add_parser(
41
+ "sim-figures", help="Generate plots and figures from simulation results."
42
+ ).set_defaults(func=generate_figures)
43
+
44
+ subparsers.add_parser(
45
+ "fbd-empirical-run", help="Run BEAST2 analyses on empirical FBD datasets."
46
+ ).set_defaults(func=run_fbd_empirical)
47
+
48
+ subparsers.add_parser(
49
+ "fbd-empirical-summarize",
50
+ help="Summarize BEAST2 log outputs for empirical FBD datasets.",
51
+ ).set_defaults(func=summarize_fbd_empirical)
52
+
53
+ args = parser.parse_args()
54
+ args.func()
@@ -0,0 +1,4 @@
1
+ from bella_companion.fbd_empirical.run_beast import run_beast
2
+ from bella_companion.fbd_empirical.summarize_logs import summarize_logs
3
+
4
+ __all__ = ["run_beast", "summarize_logs"]
@@ -0,0 +1,170 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "e79ae6e5",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "import os\n",
11
+ "\n",
12
+ "import numpy as np\n",
13
+ "import polars as pl\n",
14
+ "from phylogenie import load_newick, get_node_depths\n",
15
+ "\n",
16
+ "log_summary = pl.read_csv(\n",
17
+ " \"/Users/gmarino/BELLA-companion/log_summaries/fbd-empirical/MLP.csv\"\n",
18
+ ")\n",
19
+ "\n",
20
+ "change_times = (\n",
21
+ " pl.read_csv(os.path.join(\"data\", \"change_times.csv\"), has_header=False)\n",
22
+ " .to_series()\n",
23
+ " .to_list()\n",
24
+ ")\n",
25
+ "max_time = max(\n",
26
+ " max(get_node_depths(tree).values())\n",
27
+ " for tree in load_newick(os.path.join(\"data\", \"trees.nwk\"))\n",
28
+ ")\n",
29
+ "time_bins = list(reversed([0.0, *change_times, max_time]))"
30
+ ]
31
+ },
32
+ {
33
+ "cell_type": "code",
34
+ "execution_count": 6,
35
+ "id": "646db342",
36
+ "metadata": {},
37
+ "outputs": [
38
+ {
39
+ "data": {
40
+ "text/plain": [
41
+ "array([[0.57960784, 0.77019608, 0.87372549, 1. ],\n",
42
+ " [0.3313341 , 0.62206844, 0.8047674 , 1. ],\n",
43
+ " [0.14666667, 0.46039216, 0.71869281, 1. ],\n",
44
+ " [0.03137255, 0.28973472, 0.57031911, 1. ]])"
45
+ ]
46
+ },
47
+ "execution_count": 6,
48
+ "metadata": {},
49
+ "output_type": "execute_result"
50
+ }
51
+ ],
52
+ "source": [
53
+ "plt.cm.Blues(np.linspace(0.4, 0.9, 4))"
54
+ ]
55
+ },
56
+ {
57
+ "cell_type": "code",
58
+ "execution_count": null,
59
+ "id": "f2fcb1f0",
60
+ "metadata": {},
61
+ "outputs": [
62
+ {
63
+ "data": {
64
+ "image/png": "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L5bLpj+epi7doKxMmzZNHzFihP7iiy/qK1as0P/yl7/odXV1+uWXX566za233qpXVVXpzz//vP7f//5XP+mkk/SxY8fqXV1dph477djChQt1r9er33zzzfqnn36qP/nkk3pJSYn+xBNPpG7Dx9dZ0lfFivPPP18fNWqU/uqrr+qLFi3SDzzwQHUi67vgggv0yspKff78+XpDQ0Pq1NnZmboNH19neeaZZ1RXgtmzZ+sfffSR/qMf/Ui9Pq9bt87U42Kws5HW1lb1JiAvDMFgUN9pp530q666So9EIr1aYlxzzTX6kCFD1BPuyCOP1JctW2bqcVPmXnjhBX3ixInqsRs/frz+29/+ttfX+fg6O9hJQL/wwgv16upqFeq//e1vq3BA1id1kr5Ojz76aOo2fHyd595771XvyX6/X7U/eeutt8w+JN0l/2duzZCIiIiI8oFz7IiIiIgcgsGOiIiIyCEY7IiIiIgcgsGOiIiIyCEY7IiIiIgcgsGOiIiIyCEY7IiIiIgcgsGOiIiIyCEY7IjIcX7wgx9gypQppv38M888E7fccgvM9tBDD+GEE04w+zCIqIC48wQR2YrL5dru16+77jpcdtllalP2qqoqFNr777+Pb3zjG1i5ciXKyspgpmg0qjajf+aZZ3DooYeaeixEVBgMdkRkK+vWrUudf/bZZ3Httddi2bJlqeskTJkZqM4991x4vV5VLbOCn//85/jiiy/w3HPPmX0oRFQAHIolIlsZOnRo6lRZWakqeOnXSajbeij28MMPx8UXX4yf/OQnqK6uxpAhQ/Dwww+jo6MDZ599NsrLy7HLLrvg73//e6+f9eGHH2Ly5Mnqe8p9ZIi1qamp32PTNA1/+tOfthn+HDNmDG666SacddZZ6nuNHj0af/vb37BhwwacdNJJ6ro99tgDixYtUreX46qoqFDfK91f//pXlJaWoq2tTV3+xS9+gV133RUlJSXYaaedcM011yAWi/W6jxyL/Kyurq4B/NaJyC4Y7IioKPzhD39AXV0dFi5cqELeBRdcgO9+97s46KCD8O677+KYY45Rwa2zs1Pdvrm5WQ2p7rXXXipwzZ07F42Njfje977X78/473//i5aWFuy7777bfO3Xv/41Dj74YLz33ns4/vjj1c+SoHfGGWeon7/zzjuryzKIIuHt+9//Ph599NFe30Mun3zyySqICvnv7Nmz8dFHH+Huu+9WYVV+Tjo5lng8jrfffjtPv0kisjQZiiUisqNHH31Ur6ys3Ob6adOm6SeddFLq8te//nX9kEMOSV2Ox+N6aWmpfuaZZ6aua2hokGkp+oIFC9TlG2+8UT/mmGN6fd/Vq1er2yxbtqzP45kzZ47u8Xj0RCLR6/rRo0frZ5xxxjY/65prrkldJz9XrpOvibffflt9r7Vr16rLjY2Nutfr1efPn9/v72PWrFn6Pvvss8311dXV+uzZs/u9HxE5Byt2RFQUZKgzyePxoLa2Fl/96ldT18lQq1i/fn1qEcS//vWv1Jw9OY0fP1597fPPP+/zZ8hwZyAQ6HOBR/rPT/6s7f38/fffH7vvvruqNIonnnhCDeEedthhveYYShUwOQR99dVXY9WqVdv87FAolKpEEpGzMdgRUVHw+Xy9Lkv4Sr8uGcYSiYT6b3t7u5qftmTJkl6nTz/9tFe4SidDvRKgZDXq9n5+8mdt7+cnF2LIUGtyGFbmAyZvt2DBApx++uk47rjj8OKLL6oh3quuuqrPn71p0yYMGjQow98UEdmZ1+wDICKyor333ht//vOf1cIHWeWaiT333FP9V+a8Jc8PhMy/u/zyy3HPPfeo7zlt2rTU1958801VwZMwlyQtVrYm1cVwOKzmChKR87FiR0TUh4suukhVuk499VS88847KiD94x//UFUzWf3aF6mKSSB844038nIMsoJ36tSpqmWJLO4YOXJk6mvjxo1Tw67So06OTcLfnDlztvke//73v9WKWVmcQUTOx2BHRNSH4cOH4z//+Y8KcRKqZD6ctEuRpsdud/8vnTJ8+uSTT+btOH74wx+q4dVzzjmn1/UnnniiasQ8ffp0VR2UCp60O9na008/jfPOOy9vx0NE1sYGxUREeSQLKL7yla+ohQ0HHnjggL/f448/rgLc2rVr4ff7s7rv//73P9Wy5ZNPPlE9/4jI+TjHjogoj2QF6mOPPbbdRsaZkEUYDQ0NuPXWW/HjH/8461An5P5yLAx1RMWDFTsiIgu6/vrrcfPNN6sVuM8//7zp+84SkT0w2BERERE5BBdPEBERETkEgx0RERGRQzDYERERETkEgx0RERGRQzDYERERETkEgx0RERGRQzDYERERETkEgx0RERGRQzDYEREREcEZ/j8rqcoheieXygAAAABJRU5ErkJggg==",
65
+ "text/plain": [
66
+ "<Figure size 640x480 with 1 Axes>"
67
+ ]
68
+ },
69
+ "metadata": {},
70
+ "output_type": "display_data"
71
+ },
72
+ {
73
+ "data": {
74
+ "image/png": "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NvW4GOxspL6+Xr0JyAtDXl6evsUWW+iXXXaZHggEOpTEuOKKK/R+/fqpH7hf//rX+pIlS0w9bkrcSy+9pO+www7quRs1apT+4IMPdvg+n19nBzsJ6GeeeaZeXl6uQv0RRxyhwgFZn4yTdHZ69NFH26/D59d57r77bvWe7PP5VPmTjz76yOxD0jX5n7ljhkRERESUCVxjR0REROQQDHZEREREDsFgR0REROQQDHZEREREDsFgR0REROQQDHZEREREDsFgR0REROQQDHZEREREDsFgR0SOc/LJJ2Py5MmmPf6JJ56IG264AWZ74IEHcNhhh5l9GESURew8QUS2omlat9+/6qqrcMEFF6im7GVlZci2zz77DPvvvz9+/vlnFBUVwUzBYFA1o3/qqaew1157mXosRJQdDHZEZCvV1dXtXz/99NO48sorsWTJkvbLJEyZGahOO+00eDweNVpmBRdeeCGWLVuGZ555xuxDIaIs4FQsEdlK//7920+lpaVqBC/+Mgl1m07F7rvvvjjnnHNw/vnno7y8HP369cNDDz2EpqYmnHLKKSguLsaWW26J1157rcNjffnll5g0aZK6T7mNTLGuXr26y2OLRCJ49tlnN5v+HD58OK677jqcdNJJ6r6GDRuGF198EatWrcLhhx+uLhs9ejQWLFigri/HVVJSou4r3vPPP4/CwkI0NDSo8xdffDG23nprFBQUYIsttsAVV1yBUCjU4TZyLPJYLS0tafyrE5FdMNgRUU547LHH0Lt3b8yfP1+FvL/85S/4/e9/jz322AOffvopDjroIBXcmpub1fXr6urUlOpOO+2kAtfrr7+OmpoaHH300V0+xueff47169dj3Lhxm33v9ttvx4QJE7Bo0SIceuih6rEk6J1wwgnq8UeOHKnOyySKhLc//OEPePTRRzvch5w/6qijVBAV8uesWbPw9ddf484771RhVR4nnhxLOBzGxx9/nKF/SSKyNJmKJSKyo0cffVQvLS3d7PIpU6bohx9+ePv5ffbZR99zzz3bz4fDYb2wsFA/8cQT2y+rqqqSZSn6vHnz1Plrr71WP+iggzrc7/Lly9V1lixZ0unxzJkzR3e73Xo0Gu1w+bBhw/QTTjhhs8e64oor2i+Tx5XL5Hvi448/Vve1cuVKdb6mpkb3eDz63Llzu/z3mDlzpr7LLrtsdnl5ebk+a9asLm9HRM7BETsiygky1dnG7XajV69e2HHHHdsvk6lWUVtb274J4n//+1/7mj05jRo1Sn3vxx9/7PQxZLrT7/d3usEj/vHbHqu7xx8/fjy23357NdIoHn/8cTWFu/fee3dYYyijgG1T0JdffjkqKys3e+z8/Pz2kUgicjYGOyLKCV6vt8N5CV/xl7WFsWg0qv5sbGxU69MWL17c4fT99993CFfxZKpXApTsRu3u8dseq7vHb9uIIVOtbdOwsh6w7Xrz5s3D8ccfj0MOOQQvv/yymuK97LLLOn3stWvXok+fPgn+SxGRnXnMPgAiIivaeeed8Z///EdtfJBdrokYO3as+lPWvLV9nQ5Zf3fRRRfhrrvuUvc5ZcqU9u99+OGHagRPwlwbKbGyKRldbG1tVWsFicj5OGJHRNSJs846S410HXvssfjkk09UQHrjjTfUqJnsfu2MjIpJIHz//fczcgyyg/fII49UJUtkc8fgwYPbv7fVVlupaVepUSfHJuFvzpw5m93He++9p3bMyuYMInI+Bjsiok4MHDgQH3zwgQpxEqpkPZyUS5Gixy5X1y+dMn36xBNPZOw4/vjHP6rp1VNPPbXD5b/97W9VIeazzz5bjQ7KCJ6UO9nUv/71L5x++ukZOx4isjYWKCYiyiDZQLHNNtuojQ2777572vf3z3/+UwW4lStXwufzJXXbr776SpVs+e6771TNPyJyPq6xIyLKINmBOnv27G4LGSdCNmFUVVXhxhtvxJ///OekQ52Q28uxMNQR5Q6O2BERWdDVV1+N66+/Xu3AfeGFF0zvO0tE9sBgR0REROQQ3DxBRERE5BAMdkREREQOwWBHRERE5BAMdkREREQOwWBHRERE5BAMdkREREQOwWBHRERE5BAMdkREREQOwWBHREREBGf4f/s7WSeSsgwxAAAAAElFTkSuQmCC",
75
+ "text/plain": [
76
+ "<Figure size 640x480 with 1 Axes>"
77
+ ]
78
+ },
79
+ "metadata": {},
80
+ "output_type": "display_data"
81
+ }
82
+ ],
83
+ "source": [
84
+ "import matplotlib.pyplot as plt\n",
85
+ "import numpy as np\n",
86
+ "import polars as pl\n",
87
+ "from numpy.typing import NDArray\n",
88
+ "\n",
89
+ "colors: dict[str, NDArray[np.floating]] = {\n",
90
+ " \"birth\": plt.cm.Blues(np.linspace(0.4, 0.9, 4)), # pyright: ignore\n",
91
+ " \"death\": plt.cm.Oranges(np.linspace(0.4, 0.9, 4)), # pyright: ignore\n",
92
+ " \"diversification\": plt.cm.Greens(np.linspace(0.4, 0.9, 4)), # pyright: ignore\n",
93
+ "}\n",
94
+ "\n",
95
+ "for rate in [\"birth\", \"death\", \"diversification\"]:\n",
96
+ " for state in range(4):\n",
97
+ " if rate == \"diversification\":\n",
98
+ " estimates = log_summary.select(\n",
99
+ " [\n",
100
+ " pl.col(f\"birthRateSPi{i}_{state}_median\")\n",
101
+ " - pl.col(f\"deathRateSPi{i}_{state}_median\")\n",
102
+ " for i in range(len(change_times) + 1)\n",
103
+ " ]\n",
104
+ " ).to_numpy()\n",
105
+ " else:\n",
106
+ " estimates = log_summary.select(\n",
107
+ " [\n",
108
+ " pl.col(f\"{rate}RateSPi{i}_{state}_median\")\n",
109
+ " for i in range(len(change_times) + 1)\n",
110
+ " ]\n",
111
+ " ).to_numpy()\n",
112
+ "\n",
113
+ " median = np.median(estimates, axis=0)\n",
114
+ " lower = np.percentile(estimates, 2.5, axis=0)\n",
115
+ " upper = np.percentile(estimates, 97.5, axis=0)\n",
116
+ "\n",
117
+ " color = colors[rate][state]\n",
118
+ "\n",
119
+ " plt.fill_between( # pyright: ignore\n",
120
+ " time_bins,\n",
121
+ " [lower[0], *lower],\n",
122
+ " [upper[0], *upper],\n",
123
+ " step=\"pre\",\n",
124
+ " alpha=0.25,\n",
125
+ " color=color,\n",
126
+ " )\n",
127
+ "\n",
128
+ " for estimate in estimates:\n",
129
+ " plt.step( # pyright: ignore\n",
130
+ " time_bins, [estimate[0], *estimate], color=color, alpha=0.15\n",
131
+ " )\n",
132
+ "\n",
133
+ " plt.step( # pyright: ignore\n",
134
+ " time_bins, [median[0], *median], color=color, label=state\n",
135
+ " )\n",
136
+ "\n",
137
+ " ax = plt.gca()\n",
138
+ " ax.invert_xaxis()\n",
139
+ " plt.legend(title=\"Body mass\") # pyright: ignore\n",
140
+ " plt.xlabel(\"Time (mya)\") # pyright: ignore\n",
141
+ " plt.ylabel( # pyright: ignore\n",
142
+ " r\"$\\lambda$\" if rate == \"birth\" else r\"$\\mu$\" if rate == \"death\" else r\"$d$\"\n",
143
+ " )\n",
144
+ " plt.tight_layout()\n",
145
+ " plt.show()"
146
+ ]
147
+ }
148
+ ],
149
+ "metadata": {
150
+ "kernelspec": {
151
+ "display_name": "bella-companion-py3.10",
152
+ "language": "python",
153
+ "name": "python3"
154
+ },
155
+ "language_info": {
156
+ "codemirror_mode": {
157
+ "name": "ipython",
158
+ "version": 3
159
+ },
160
+ "file_extension": ".py",
161
+ "mimetype": "text/x-python",
162
+ "name": "python",
163
+ "nbconvert_exporter": "python",
164
+ "pygments_lexer": "ipython3",
165
+ "version": "3.10.14"
166
+ }
167
+ },
168
+ "nbformat": 4,
169
+ "nbformat_minor": 5
170
+ }
@@ -0,0 +1,68 @@
1
+ import json
2
+ import os
3
+ from pathlib import Path
4
+
5
+ import numpy as np
6
+ import polars as pl
7
+ from phylogenie import load_newick
8
+ from phylogenie.utils import get_node_depths
9
+ from tqdm import tqdm
10
+
11
+ from bella_companion.utils import submit_job
12
+
13
+ THIS_DIR = Path(__file__).parent
14
+
15
+
16
+ def run_beast():
17
+ base_output_dir = Path(os.environ["BELLA_BEAST_OUTPUT_DIR"])
18
+ output_dir = base_output_dir / "fbd-empirical"
19
+ os.makedirs(output_dir, exist_ok=True)
20
+
21
+ data_dir = THIS_DIR / "data"
22
+ tree_file = data_dir / "trees.nwk"
23
+ change_times_file = data_dir / "change_times.csv"
24
+
25
+ trees = load_newick(str(tree_file))
26
+ assert isinstance(trees, list)
27
+ change_times = (
28
+ pl.read_csv(change_times_file, has_header=False).to_series().to_numpy()
29
+ )
30
+ time_predictor = " ".join(list(map(str, np.repeat([0, *change_times], 4))))
31
+ body_mass_predictor = " ".join(["0", "1", "2", "3"] * (len(change_times) + 1))
32
+
33
+ job_ids = {}
34
+ for i, tree in enumerate(tqdm(trees)):
35
+ process_length = max(get_node_depths(tree).values())
36
+ command = " ".join(
37
+ [
38
+ os.environ["BELLA_RUN_BEAST_CMD"],
39
+ f"-D types=0,1,2,3",
40
+ f'-D startTypePriorProbs="0.25 0.25 0.25 0.25"',
41
+ f"-D birthRateUpper=10",
42
+ f"-D deathRateUpper=10",
43
+ f"-D samplingRateUpper=10",
44
+ f'-D samplingRateInit="5 5 5 5 5 5 5"',
45
+ f"-D migrationRateUpper=10",
46
+ f'-D migrationRateInit="5 0 0 5 5 0 0 5 5 0 0 5"',
47
+ f'-D nodes="16 8"',
48
+ f'-D layersRange="0,1,2"',
49
+ f"-D treeFile={tree_file}",
50
+ f"-D treeIndex={i}",
51
+ f"-D changeTimesFile={change_times_file}",
52
+ f"-D samplingChangeTimesFile={data_dir / 'sampling_change_times.csv'}",
53
+ f"-D typeTraitFile={data_dir / 'body_mass.csv'}",
54
+ f"-D processLength={process_length}",
55
+ f'-D timePredictor="{time_predictor}"',
56
+ f'-D bodyMassPredictor="{body_mass_predictor}"',
57
+ f"-prefix {output_dir}{os.sep}",
58
+ str(Path(os.environ["BELLA_BEAST_CONFIGS_DIR"]) / "fbd-empirical.xml"),
59
+ ]
60
+ )
61
+ job_ids[i] = submit_job(
62
+ command,
63
+ Path(os.environ["BELLA_SBATCH_LOG_DIR"]) / "fbd-empirical" / str(i),
64
+ mem_per_cpu="12000",
65
+ )
66
+
67
+ with open(base_output_dir / "fbd_empirical_job_ids.json", "w") as f:
68
+ json.dump(job_ids, f)
@@ -0,0 +1,33 @@
1
+ import os
2
+ from pathlib import Path
3
+
4
+ import joblib
5
+ import polars as pl
6
+
7
+ from bella_companion.utils import read_weights_dir, summarize_logs_dir
8
+
9
+ THIS_DIR = Path(__file__).parent
10
+
11
+
12
+ def summarize_logs():
13
+ change_times = pl.read_csv(
14
+ Path(THIS_DIR) / "data" / "change_times.csv", has_header=False
15
+ )
16
+ n_time_bins = len(change_times) + 1
17
+
18
+ logs_dir = Path(os.environ["BELLA_BEAST_OUTPUT_DIR"]) / "fbd-empirical"
19
+ summaries = summarize_logs_dir(
20
+ logs_dir=logs_dir,
21
+ target_columns=[
22
+ f"{rate}RateSPi{i}_{s}"
23
+ for rate in ["birth", "death"]
24
+ for i in range(n_time_bins)
25
+ for s in ["0", "1", "2", "3"]
26
+ ],
27
+ )
28
+ weights = read_weights_dir(logs_dir)
29
+
30
+ summaries_dir = Path(os.environ["BELLA_LOG_SUMMARIES_DIR"], "fbd-empirical")
31
+ os.makedirs(summaries_dir, exist_ok=True)
32
+ summaries.write_csv(summaries_dir / "MLP.csv")
33
+ joblib.dump(weights, summaries_dir / "MLP.weights.pkl")
@@ -1,6 +1,13 @@
1
1
  from bella_companion.simulations.generate_data import generate_data
2
2
  from bella_companion.simulations.generate_figures import generate_figures
3
+ from bella_companion.simulations.metrics import print_metrics
3
4
  from bella_companion.simulations.run_beast import run_beast
4
5
  from bella_companion.simulations.summarize_logs import summarize_logs
5
6
 
6
- __all__ = ["generate_data", "generate_figures", "run_beast", "summarize_logs"]
7
+ __all__ = [
8
+ "generate_data",
9
+ "generate_figures",
10
+ "print_metrics",
11
+ "run_beast",
12
+ "summarize_logs",
13
+ ]
@@ -5,12 +5,12 @@ import matplotlib.pyplot as plt
5
5
  import numpy as np
6
6
  import polars as pl
7
7
 
8
- from bella_companion.simulations.scenarios.epi_skyline import REPRODUCTION_NUMBERS
9
- from bella_companion.utils import (
8
+ from bella_companion.simulations.figures.utils import (
10
9
  plot_coverage_per_time_bin,
11
10
  plot_maes_per_time_bin,
12
11
  step,
13
12
  )
13
+ from bella_companion.simulations.scenarios.epi_skyline import REPRODUCTION_NUMBERS
14
14
 
15
15
 
16
16
  def plot_epi_skyline_results():
@@ -45,12 +45,10 @@ def plot_partial_dependencies(
45
45
  np.array(mcmc_pds).T for mcmc_pds in zip(*pdvalues)
46
46
  ] # shape: (n_features, n_grid_points, n_runs)
47
47
 
48
- if any(not feature.is_binary for feature in features.values()):
49
- for (feature_name, feature), feature_pdvalues in zip(
50
- features.items(), pdvalues
51
- ):
48
+ if any(not f.is_binary for f in features.values()):
49
+ for (label, feature), feature_pdvalues in zip(features.items(), pdvalues):
52
50
  if not feature.is_binary:
53
- color = "red" if feature.is_relevant else "gray"
51
+ color = "#E74C3C" if feature.is_relevant else "gray"
54
52
  median = np.median(feature_pdvalues, axis=1)
55
53
  lower = np.percentile(feature_pdvalues, 2.5, axis=1)
56
54
  high = np.percentile(feature_pdvalues, 100 - 2.5, axis=1)
@@ -62,7 +60,7 @@ def plot_partial_dependencies(
62
60
  continuous_grid, mcmc_pds, color=color, alpha=0.2, linewidth=1
63
61
  )
64
62
  plt.plot( # pyright: ignore
65
- continuous_grid, median, color=color, label=feature_name
63
+ continuous_grid, median, color=color, label=label
66
64
  )
67
65
  plt.xlabel("Feature value") # pyright: ignore
68
66
  plt.ylabel("MLP Output") # pyright: ignore
@@ -70,32 +68,28 @@ def plot_partial_dependencies(
70
68
  plt.savefig(output_dir / "PDPs-continuous.svg") # pyright: ignore
71
69
  plt.close()
72
70
 
73
- if any(feature.is_binary for feature in features.values()):
71
+ if any(f.is_binary for f in features.values()):
74
72
  data: list[float] = []
75
- grid_labels: list[int] = []
76
- feature_labels: list[str] = []
77
- for (feature_name, feature), feature_pdvalues in zip(
78
- features.items(), pdvalues
79
- ):
73
+ grid: list[int] = []
74
+ labels: list[str] = []
75
+ for (label, feature), feature_pdvalues in zip(features.items(), pdvalues):
80
76
  if feature.is_binary:
81
77
  for i in [0, 1]:
82
78
  data.extend(feature_pdvalues[i])
83
- grid_labels.extend([i] * len(feature_pdvalues[i]))
84
- feature_labels.extend([feature_name] * len(feature_pdvalues[i]))
85
- sns.violinplot(
86
- x=grid_labels,
87
- y=data,
88
- hue=feature_labels,
89
- split=False,
90
- cut=0,
91
- palette={
92
- feature_name: "red" if feature.is_relevant else "gray"
93
- for feature_name, feature in features.items()
94
- if feature.is_binary
95
- },
79
+ grid.extend([i] * len(feature_pdvalues[i]))
80
+ labels.extend([label] * len(feature_pdvalues[i]))
81
+
82
+ ax = sns.violinplot(
83
+ x=labels, y=data, hue=grid, split=True, cut=0, inner="quartile"
96
84
  )
97
- plt.xlabel("Feature value") # pyright: ignore
85
+ ax.get_legend().remove() # pyright: ignore
86
+
87
+ for i, f in enumerate([f for f in features.values() if f.is_binary]):
88
+ color = "#E74C3C" if f.is_relevant else "gray"
89
+ for coll in ax.collections[i * 2 : i * 2 + 2]:
90
+ coll.set_facecolor(color)
91
+
92
+ plt.xlabel("Feature") # pyright: ignore
98
93
  plt.ylabel("MLP Output") # pyright: ignore
99
- plt.legend() # pyright: ignore
100
94
  plt.savefig(output_dir / "PDPs-categorical.svg") # pyright: ignore
101
95
  plt.close()