{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Performance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook illustrates performance of typical use cases for bioframe on sets of randomly generated intervals." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# ! pip install pyranges\n", "## Optional:\n", "# ! conda install -c bioconda bedtools\n", "# ! pip install pybedtools" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import platform\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "import psutil\n", "import pyranges\n", "\n", "import bioframe\n", "\n", "plt.rcParams[\"figure.facecolor\"] = \"white\"\n", "plt.rcParams[\"font.size\"] = 16\n", "\n", "# Note that by default we switch off the demo of pybedtools.\n", "# It runs for minutes for 10^5 intervals\n", "include_pybedtools = False\n", "if include_pybedtools:\n", " import pybedtools\n", "\n", " pybedtools.helpers.set_bedtools_path(\n", " path=\"/usr/bin/\"\n", " ) # Set the path to bedtools CLI" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bioframe v.0.5.1\n", "PyRanges v.0.0.129\n", "System Platform: Linux-5.19.0-46-generic-x86_64-with-glibc2.35\n", "24 CPUs at 3040 GHz\n" ] } ], "source": [ "print(f\"Bioframe v.{bioframe.__version__}\")\n", "print(f\"PyRanges v.{pyranges.__version__}\")\n", "if include_pybedtools:\n", " print(f\"Pybedtools v.{pybedtools.__version__}\")\n", "\n", "print(f\"System Platform: {platform.platform()}\")\n", "print(f\"{psutil.cpu_count()} CPUs at {psutil.cpu_freq().current:.0f} GHz\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below we define a function to generate random intervals with various properties, returning a dataframe of intervals." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def make_random_intervals(\n", " n=1e5,\n", " n_chroms=1,\n", " max_coord=None,\n", " max_length=10,\n", " sort=False,\n", " categorical_chroms=False,\n", "):\n", " n = int(n)\n", " n_chroms = int(n_chroms)\n", " max_coord = (n // n_chroms) if max_coord is None else int(max_coord)\n", " max_length = int(max_length)\n", "\n", " chroms = np.array([\"chr\" + str(i + 1) for i in range(n_chroms)])[\n", " np.random.randint(0, n_chroms, n)\n", " ]\n", " starts = np.random.randint(0, max_coord, n)\n", " ends = starts + np.random.randint(1, max_length, n)\n", "\n", " df = pd.DataFrame({\"chrom\": chroms, \"start\": starts, \"end\": ends})\n", "\n", " if categorical_chroms:\n", " df[\"chrom\"] = df[\"chrom\"].astype(\"category\")\n", "\n", " if sort:\n", " df = df.sort_values([\"chrom\", \"start\", \"end\"]).reset_index(drop=True)\n", "\n", " return df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overlap" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this chapter we characterize the performance of the key function, `bioframe.overlap`. We show that the speed depends on:\n", "- the number of intervals\n", "- number of intersections (or density of intervals)\n", "- type of overlap (inner, outer, left)\n", "- dtype of chromosomes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### vs number of intervals" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4.92 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "7.13 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "42.3 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "448 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "6.95 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings = {}\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " df2 = make_random_intervals(n=n, n_chroms=1)\n", " timings[n] = %timeit -o -r 1 bioframe.overlap(df, df2)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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AwYM4JNPPrns13GX07lzZw4cOMA333zDzz//zNq1a1mxYgXffvstEyZMYPHixXTv3r1I+xJxVCpAIlJinnrqKT788EOWL1/OL7/8YnacIgsLC2PPnj089dRTtG3b1u7779y5M/Xr12f37t389ttvdOzYMe/2IJf7+uvzzz8H4IMPPqBXr14Fnr/c13BX4+vrS58+fejTpw9w8UjW888/z4cffsiwYcNKZe6WiJn0FZiIlJjg4OC8Ixz/+c9/TE7zFy8vL4BCb9lx6623An8Vj5Jw6ZT42bNns2nTJrZt20ZYWNhlj7wkJSUBFyco/9OOHTv4448/ip2nUqVKTJkyBYBDhw6RnJxc7H2KlGUqQCJSoqKioqhZsybr168vcGFCs4SGhgIXy8PlPPnkk5QrV47//ve/vPnmm1y4cKHAOgkJCcybN8/mDEOGDMHNzY3PP/+cmJiYfMv+qUmTJgDExMTkfT0HcOzYMQYPHnxN9147ePAgH3300WXnCy1duhSA8uXL582fEnFWKkAiUqK8vb158cUXAex2e4ziuueee4CLFxu85557GDFiBCNGjMg7iyo0NJSvvvqK8uXLM27cuLwjMwMHDuSOO+6gfv361K1bl6lTp9qcoUaNGvTo0YOUlBRmzZqFxWLJOyr0T88++yxeXl5Mnz6dRo0a0b9/f2699Vbq1atHVlYWd911V5FfNzk5mZEjR1KxYkXatWtH//796d+/PxEREQwaNAiLxcLrr79e6FlsIs5CBUhEStygQYNo3ry52THyjBo1ildffZVatWqxfPlyZsyYwYwZMzh27FjeOtdffz07duxg/PjxhIaGEhsby8KFC/njjz+oUqUKEyZMYPr06cXK8ff5Ptdffz1169a97Hrt27dn48aN9OrVi/T0dL7++uu8K1KvW7fumo7W1KtXj7fffpvbb7+ds2fPsnz5cr755hvS09MZPHgwsbGxDB8+vFjvS8QRWIyinjYgIiIi4iR0BEhERERcjgqQiIiIuBwVIBEREXE5KkAiIiLiclSARERExOWoAImIiIjLUQESERERl6MCJCIiIi5HBUhERERcjgqQiIiIuBwVIBEREXE5KkAiIiLiclSARERExOX8P42xZZsgF3xJAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings.keys()),\n", " list([r.average for r in timings.values()]),\n", " \"o-\",\n", ")\n", "plt.xlabel(\"N intervals\")\n", "plt.ylabel(\"time, seconds\")\n", "plt.gca().set_aspect(1.0)\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### vs total number of intersections" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that not only the number of intervals, but also the density of intervals determines the performance of overlap. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "22.7 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "45.5 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "163 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "611 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "2.51 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings = {}\n", "n_intersections = {}\n", "n = 1e4\n", "for avg_interval_len in [3, 1e1, 3e1, 1e2, 3e2]:\n", " df = make_random_intervals(n=n, n_chroms=1, max_length=avg_interval_len * 2)\n", " df2 = make_random_intervals(n=n, n_chroms=1, max_length=avg_interval_len * 2)\n", " timings[avg_interval_len] = %timeit -o -r 1 bioframe.overlap(df, df2)\n", " n_intersections[avg_interval_len] = bioframe.overlap(df, df2).shape[0]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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x5e6NvvkyZOiXr16AoBwdHQUPXr0EO+++6544403hI+PT8m12c8qvoysou8vKipKABBGRkYiMDBQDB06VAwdOlS0adOm5JKqn376qdQ6CoVCDB8+vORSrDZt2ojBgweLYcOGiU6dOgkLCwsBQOzfv7/UepGRkcLJyUkAELa2tuL1118Xw4YNEy+99JIwMzMr837u2bNHABDGxsbijTfeEOPGjRPjx48XZ86cKRmDci4jE0KImJiYkvfa0dFRDBkyRAwYMEBYW1sLACIgIKDMZV8V/VyfVd7r2djYCADC19dXDBw4UAwfPlx069ZNGBoallz3TnUDC5xIA15U4EqlUvj7+2tNgSuVSrFw4ULRvHlzYWpqWpLrn9dAP3r0SMybN08EBAQIKysrYWxsLFxdXcVLL70k5s+fLy5fvlxq/IsKPDMzU/z4449i4MCBonHjxsLS0lJYWFiIJk2aiFGjRokLFy5U+L3s27dPDBo0SLi4uAgjIyNha2srmjVrJt5++22xbds2kZOTU2adJ0+eiLlz5wp/f39hYWEhzMzMhLe3txg2bJg4cOBAmfFr164VAQEBwtzcvNyfVUUFLsTTa9Znz54tmjVrJkxNTYW5ublo06aNWLRokcjNzS0zXt0C37Jlixg7dqxo0aKFsLe3FyYmJsLDw0P06dNH7Ny5s9R1+aTfZEIIUVN790RERFQz+Bk4ERGRDmKBExER6SAWOBERkQ5igRMREekgFjgREZEOYoETERHpIBY4ERGRDmKBExER6SAWOBERkQ5igRMREekgFjgREZEOYoETERHpIBY4ERGRDvr/IamterFti74AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(n_intersections.values()),\n", " list([r.average for r in timings.values()]),\n", " \"o-\",\n", ")\n", "plt.xlabel(\"N intersections\")\n", "plt.ylabel(\"time, seconds\")\n", "plt.gca().set_aspect(1.0)\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### vs number of chromosomes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we consider a genome of the same length, divided into more chromosomes, the timing is relatively unaffected." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "443 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "456 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "414 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "434 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "451 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "409 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "443 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings = {}\n", "n_intersections = {}\n", "n = 1e5\n", "for n_chroms in [1, 3, 10, 30, 100, 300, 1000]:\n", " df = make_random_intervals(n, n_chroms)\n", " df2 = make_random_intervals(n, n_chroms)\n", " timings[n_chroms] = %timeit -o -r 1 bioframe.overlap(df, df2)\n", " n_intersections[n_chroms] = bioframe.overlap(df, df2).shape[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note this test preserves the number of intersections, which is likely why performance remains similar over the considered range." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: 810572,\n", " 3: 810871,\n", " 10: 809463,\n", " 30: 815322,\n", " 100: 808166,\n", " 300: 802130,\n", " 1000: 787235}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n_intersections" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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AACARsilCfJ//vOf1bNnzyqDVrnf//736tmzp/785z+7XBwAAEBj51LY+vTTT3X99ddfsd3111+vTz/91JVDAAAANAkuha3CwkKdOXPmiu3Onj2roqIiVw4BAADQJLgUtnr37q3ExETt2bOn2jZ79+7VRx99pOuuu87l4pqyhIQE9e7dW9HR0fVdCgAAMJFLYeuxxx6TzWbT7bffrj/+8Y9KTU1VQUGBCgoKdOjQIc2dO1e33367DMNQbGysu2tuEmJjY5WamqqkpKT6LgUAAJjIpdv1PPjggzpw4ICWL1+uJUuWaMmSJZXaGIah6dOnX/b+iQAAAE2dy7friY+P18aNGxUTEyOr1SrDMGQYhnx8fDR8+HC98847WrZsmTtrBQAAaHRqdSPqO++8U3feeadsNpvS09MlSa1bt5anp6dbigMAAGjsahW2ynl6eiosLMwduwIAAGhSXD6NCAAAgCtzeWTLZrNp7dq1+vDDD3X69GkVFhZW2c5isWjbtm0uFwgAANCYuRS2srKydNtttykpKUmGYVy2rcVicakwAACApsClsDVv3jx9+umn6tixox577DH16tVLQUFB7q4NAACg0XMpbG3YsEEtW7bUJ598oo4dO7q7JgAAgCbDpQny33//vQYNGkTQAgAAuAKXwlbbtm3l6+vr7loAAACaHJfC1ujRo7V7926VlJS4ux4AAIAmxaWwtWDBAnl5eek3v/lNtZd8AAAAgIsT5FesWKGRI0fq5Zdf1tatWzVixAh16tRJHh6Vs5vFYtG8efNqXSgAAEBj5FLY+tOf/iSLxSLDMJSWlqZVq1ZValO+nrAFAACaM5fC1vz5891dBwAAQJNE2AIAADARN6IGAAAwkcs3oq7ou+++06lTpyRJHTt2VPv27d2xWwAAgEavViNbL730knr27KmOHTvqpptu0k033aTw8HD16tVLK1eudFeNAAAAjZbLYWvKlCn69a9/rW+++UaGYSgkJEQhISEyDENff/21pkyZoilTprizVgAAgEbHpbC1Zs0avfTSS2rZsqWeeeYZZWZm6vz58zp//rwuXLigv/3tbwoJCdHKlSu1du1ad9cMAADQaLgUtp5//nl5eXlp69atiouLU3BwsGNdUFCQZs6cqa1bt8rT01PPP/+824oFAABobFwKWykpKRo6dKiioqKqbdOvXz8NHTpUycnJ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YQsAAMBEhC0AAAATEbYAAABMRNgCAAAwEWELAADARIQtAAAAExG2AAAATETYAgAAMBFhCwAAwESELQAAABMRtgAAAExE2AIAADARYQsAAMBEhC0AAAATEbYAAABMRNgCAAAwEWELAADARIQtAAAAExG2AAAATETYAgAAMBFhCwAAwESELQAAABMRtgAAAExE2AIAADARYQsAAMBEhC0AAAATEbYAAABMRNgCAAAwEWELAADARIQtAAAAExG2AAAATETYAgAAMBFhCwAAwESELQAAABMRtgAAAExE2AIAADARYQsAAMBEhC0AAAATEbYAAABMRNiqhSNHjmjq1KmKioqSt7e3IiMj67skAADQwHjVdwGN2ZdffqlNmzZpwIABMgxDmZmZ9V0SAABoYBjZqoXRo0fr1KlTeuutt3TTTTfVdzkAAKABImzVgocH/3wAAODyGnRa+Prrr7V8+XJNnjxZffv2lZeXlywWixYtWlSj7desWaNhw4YpJCRE/v7+uuGGG7R06VKVlJSYXDkAAECZBj1n67nnnlN8fLxL2/72t79VfHy8vLy8FBMTo4CAAG3fvl2zZ8/Wxo0b9cEHH8jPz8/NFQMAADhr0CNbffr00axZs/TGG2/o0KFDeuCBB2q03YYNGxQfH6+AgADt27dPW7Zs0bp163T48GH17dtXiYmJmjdvntM2q1atksViueLX2rVrzXiqAACgiWrQI1uPPPKI0+OazpF6+umnJUlz5sxRVFSUY3loaKhWrFihIUOG6Nlnn9W8efMUHBwsSbrrrrs0cODAK+67Y8eONS0fAACgYYctV5w+fVpJSUmSpPvuu6/S+sGDBysiIkJpaWnavHmz7r33XklScHCwI3gBAAC4S5MLWykpKZKkVq1aqUuXLlW26d+/v9LS0pSSkuIIW3WlqKhIRUVFjsdZWVmSpIyMDLdP3C8pKVF+fr7S09Pl7e3t1n2j+aJfwQz0K5jFrL6Vk5MjSTIM44ptm1zYOnbsmCSpU6dO1baJiIhwauuq/Px8bd68WZL07bffKj8/3zGnKzo6Wp07d660zeLFi7VgwYJKy6sLhgAAoOHKycm54pmxJhe2ypOmv79/tW0CAgIkSdnZ2bU61g8//KAJEyY4LSt//PLLL2vy5MmVtvnDH/6guLg4x2O73a6MjAy1bt1aFoulyuNER0c7To1ezfrs7GzHKdOgoKCaPKUG4UrPtyEepzb7utpta9q+Ju0u14Z+1TCO5eq+6Fd1pzm9ZjXUfnW59Wb1LcMwlJOTow4dOlyxbZMLW3UpMjKyRsOHFVmtVlmtVqdlLVu2vOw2np6el+0gV1ofFBTUqF68rvR8GuJxarOvq922pu1r0u5ybehXDeNYru6LflV3mtNrVkPtVzVZb0bfqulc7wZ96QdXBAYGSpLy8vKqbZObmytJjeYXOjY2tlbrG5u6ej7uPE5t9nW129a0fU3aXa4N/aphHMvVfdGv6k5zes1qqP3qao5VHyzG1Q7N1KPJkyfrlVde0cKFCzV37twq22zcuFFjxoxR69atdf78+Srb3H333Vq/fr1mzZqlv/71r2aWXK+ys7MVHBysrKysRhMs0fDRr2AG+hXM0hD6VpMb2erXr58kKT09vdoJ8Pv375ckp2twNUVWq1Xz58+vdNoSqA36FcxAv4JZGkLfanJhKzw8XNHR0ZKk1atXV1qfmJiotLQ0Wa1WjRo1qq7Lq1NWq1V/+tOfePGCW9GvYAb6FczSEPpWkwtbkvTkk09KkpYsWaLk5GTH8vT0dE2bNk2SNH36dC5iCgAATNeg52wlJyc7wpEkHT16VOfPn1d4eLjTbXPWr1+v9u3bO237+OOPa9myZfL29taIESPk7++vbdu26cKFCxo0aJC2bt3KjagBAIDpGnTY2rlzp4YPH37FdseOHVNkZGSl5f/973+VkJCgzz77TCUlJerWrZvuv/9+zZw5Uz4+PiZUDAAA4KxBn0YcNmyYDMO44ldVQUuSJk6cqF27dikrK0v5+fn64osvNHv2bIJWNY4cOaJRo0YpICBAoaGhmjZt2mUvoQHUxJEjRzR16lRFRUXJ29u72t9X4GqsXbtWd911lzp16qQWLVrouuuu09/+9je33/YMzctbb72lwYMHKzQ0VFarVV27dlVcXJwyMzNrtV8uagpJZfdojImJUYcOHbRmzRplZGQoLi5O33//vdatW1ff5aER+/LLL7Vp0yYNGDBAhmHU+kULkKRnnnlGkZGRWrp0qdq2bas9e/Zo7ty5+vzzz/XKK6/Ud3lopDIyMjRs2DA98cQTCg4O1hdffKEFCxbo4MGD2rZtm8v7bdCnEVF3li5dqvnz5+vEiRMKCwuTVJbwx40bp/379+vGG2+s5wrRWNntdnl4lA2iT506Ve+//76OHz9ev0Wh0Tt37pzatGnjtGzRokWaN2+evvvuO7Vt27aeKkNT8+KLL+rXv/61Tpw4cdn7Ll9Ogz6NiLqzefNmxcTEOIKWJI0ZM0YBAQHatGlTPVaGxq48aAHudGnQkuT4o/DMmTN1XQ6asFatWklSrU5R8yrYgH399ddavny5Jk+erL59+8rLy0sWi0WLFi2q0fZr1qzRsGHDFBISIn9/f91www1aunRplR0mNTVVvXr1clrm5eWlHj166NChQ255Pmg46rJvofmo73710UcfycfHR926davN00ADUx/9ymazqbCwUPv379eCBQs0atSo2vUrAw3W448/bkiq9LVw4cIab+vl5WWMHDnSuPvuu42WLVsakozBgwcb+fn5Tu29vLyq3O+IESOMW2+91W3PCQ1DXfatih599FGjc+fObnwmaEjqq18ZhmF8+eWXhp+fnzF9+nR3PR00EPXRr4KDgx3HGTlypJGbm1ur58DIVgPWp08fzZo1S2+88YYOHTqkBx54oEbbbdiwQfHx8QoICNC+ffu0ZcsWrVu3TocPH1bfvn2VmJioefPmmVw9GjL6FsxQX/3q/Pnz+vnPf65rrrlGS5YscdfTQQNRH/1q586d2r17t/71r38pNTVVo0ePls1mc/1J1CqqoU499NBDNUrz0dHRhiRj0aJFldZ9/PHHhiTDarUaFy5ccCxv06aN8bvf/a5S+6ioKGPSpEm1Lx4Nmpl9qyJGtpqXuuhX2dnZRv/+/Y3OnTsbp0+fdlvtaLjq6vWq3CeffGJIMtasWeNyzYxsNTGnT59WUlKSJOm+++6rtH7w4MGKiIhQUVGRNm/e7Fjeq1evSnOzbDabvvnmm0pzudA8udq3gMupTb8qKirS2LFjdfz4cW3ZskUdOnSok5rR8Lnz9SoqKkoWi0VHjhxxuR7CVhOTkpIiqezTE126dKmyTf/+/Z3aStKoUaO0Y8cOnTt3zrFs48aNys3N1Z133mlixWgsXO1bwOW42q9sNpvuueceJSUlafPmzbr22mvNLxaNhjtfr3bv3i3DMNS1a1eX6+Gipk3MsWPHJOmy1wKJiIhwaitJjz76qJYvX66xY8dq3rx5yszMVFxcnMaOHevokGjeXO1b+fn5jr8cv/32W+Xn52vt2rWSpOjoaHXu3NmsktEIuNqvYmNjtWHDBi1cuFA2m02ffPKJY13v3r0VFBRkUsVoDFztV7fddptGjBih6667TlarVSkpKfrrX/+q66+/Xj//+c9droew1cTk5ORIkvz9/attExAQIEnKzs52LGvZsqW2b9+uGTNmaPz48fL19dWECRP0zDPPmFswGg1X+9YPP/ygCRMmOLUrf/zyyy9r8uTJbq4UjYmr/er999+XJM2bN6/SJOcdO3Zo2LBhbq4UjYmr/WrAgAF6/fXXHQEsMjJS06ZNU1xcXK1u9UfYgkOPHj0cL2CAu0RGRsrgRhVwM+5CADMsXLhQCxcudPt+mbPVxAQGBkrSZW8gnZubK0kMs+Oq0LdgBvoVzNDQ+hVhq4mJjIyUJKWlpVXbpnxdeVugJuhbMAP9CmZoaP2KsNXE9OvXT5KUnp7uNOmvov3790sq+zgrUFP0LZiBfgUzNLR+RdhqYsLDwxUdHS1JWr16daX1iYmJSktLk9Vq1ahRo+q6PDRi9C2YgX4FMzS0fkXYaoKefPJJSdKSJUuUnJzsWJ6enq5p06ZJkqZPn67g4OB6qQ+NF30LZqBfwQwNqV9ZDD4m1GAlJyc7OoQkHT16VOfPn1d4eLg6duzoWL5+/Xq1b9/eadvHH39cy5Ytk7e3t0aMGCF/f39t27ZNFy5c0KBBg7R161b5+fnV2XNBw0LfghnoVzBDk+hXLt/oB6bbsWNHlXc6v/Tr2LFjVW7/n//8x/jZz35mBAUFGX5+fkafPn2MJUuWGEVFRXX7RNDg0LdgBvoVzNAU+hUjWwAAACZizhYAAICJCFsAAAAmImwBAACYiLAFAABgIsIWAACAiQhbAAAAJiJsAQAAmIiwBQAAYCLCFgAAgIkIWwAAACYibAFwcu7cOVksFt11112OZceOHZPFYtEvf/nLOqkhMjJSFotFx48fr5PjAYCZCFsAnHzyySeSpJtvvtmxbPfu3ZWWAQBqhrAFwMnevXslOQerPXv2VFoGAKgZwhYAJ3v37pWPj49uvPFGx7Ldu3crODhYvXv3rsfKAKBxImwBcLDZbEpKSlK/fv3k6+srScrJydH//vc/DRw4UBaLxeV9Z2Zm6qmnnlL//v0VHBwsPz8/de3aVRMnTtR7771X7XY7duzQyJEjFRISIj8/P0VFRenVV1+tsu2wYcNksVi0c+dOffzxxxo9erTatGkjDw8PrVq1ytHu1KlTeuyxx9S9e3f5+voqODhYgwYN0vPPPy+bzVZpv6tWrZLFYtHkyZOVlZWluLg4RUZGytfXV927d9df/vIX2e12SdLp06f16KOPKiIiQlarVddee62WL19e7fPLz8/XkiVLFBUVpcDAQLVo0ULXXXed5s6dq8zMzCq3OXDggCZNmqTw8HD5+PgoKChIXbt21bhx4/T2229Xuc2bb76pESNGqFWrVrJarercubN+9atf6ZtvvqmyfcV5c++9956GDRum4OBghYSE6P/+7//0xRdfONquXr1aP/3pTxUYGKiWLVvq7rvv1tGjR6t9zmfOnFFcXJx69eqlFi1aKDAwUNHR0Xr22WdVWlpaqX1RUZH++te/6sYbb1RgYKB8fHzUrl07RUdH6/e//70yMjKqPRbQIBgAmjVJLn1djc8++8zo2LGjIckIDg42Ro0aZUyaNMn46U9/avj5+RlDhw51at+5c2dDkjFv3jzDYrEYN954o3HPPfcYAwcOdBz/H//4R6XjDB061JBkTJs2zfDw8DB69+5t3HPPPcbIkSON1atXG4ZhGJ9++qnRqlUrQ5LRqVMnY9KkScbtt99u+Pr6GpKM2267zSgqKnLa78svv2xIMsaOHWv06tXLCAsLM8aNG2eMHDnS8PPzMyQZ06dPN44cOWK0a9fOiIiIMCZOnGgMHz7c8PT0NCQZS5YsqVRvenq68ZOf/MSQZAQFBRljxowxxo0bZ4SGhhqSjC5duhjHjh1z2ubDDz80vL29DUnGDTfcYIwfP9646667jAEDBhhWq9UYO3asU3u73W48+OCDhiTDy8vLiImJMe655x6jR48ehiSjRYsWxnvvvVeptvL/gzlz5hgWi8UYNGiQMXHiRMd2LVu2NI4cOWI88cQTjv2OHz/eiIiIMCQZHTp0MDIyMirtd9euXUZISIghyYiMjDTGjBlj3HbbbY5lI0eONIqLix3tbTabMWLECMe/0R133GHce++9xi233OKoMSUlpdJxgIaEsAU0cw8//LDjq0+fPoYkY8yYMY5l5W+uEydOdGpbU7m5uY434AcffNDIyclxWn/hwgVj69atTsvK30S9vb2NjRs3Oq0rDz7BwcFGfn6+07rysCXJSEhIqFRLYWGhY99Tp051elM/evSoERkZaUgynnzyySqPKckYPXq0kZeX51h34MABw8vLyxHupk6dapSUlDjWb9iw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9u1Tt27dNHz4cHl5eWnXrl06d+6cunTpojfeeMNpm0WLFumJJ55Qz5491atXL/n5+enMmTOOTyY++OCDioqKcrR/9NFHtWfPHr322mvq37+/hg4dqrCwMCUnJ+vrr7+Wn5+fVq9erTZt2pj+fMPDw/X2229r3LhxmjVrlpYuXao+ffqoffv2ysrK0qFDh3T06FHddNNNuv/++yVJn3/+uWbOnKmgoCBFRUWpQ4cOKigoUHJysk6cOKHg4GA99dRTptcO1AZhC4B27NihkJAQp0sQ7NixQ127dnXLqEG/fv30xRdfKD4+Xm+//bZ27twpu92u9u3ba8yYMY7LD9SF6OhoffbZZ/rLX/6i9957T+vXr5fValW/fv304IMP6pFHHpGXV928NLZu3Vp79uzRsmXL9J///EcffPCB7Ha7unTpoilTpmjWrFkKCQlx2iYhIUHbtm1TUlKSdu3apby8PLVr10633nqrfv3rXzvNr5PK5ne9+uqruuOOO/TCCy/owIEDjm0mT56sOXPm6Nprr62T5yuVnT798ssv9eyzz+rdd99VUlKSioqKFBYWpk6dOun+++93mjc4evRoZWVl6eOPP9bhw4f1ySefyM/PTxEREZozZ45iY2MVHh5eZ/UDrrAYhmHUdxEAAABNFXO2AAAATETYAgAAMBFhCwAAwESELQAAABMRtgAAAExE2AIAADARYQsAAMBEhC0AAAATEbYAAABMRNgCAAAwEWELAADARIQtAAAAE/1/xDny16H/4qsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings.keys()),\n", " list([r.average for r in timings.values()]),\n", " \"o-\",\n", ")\n", "plt.ylim([1e-1, 10])\n", "plt.xlabel(\"# chromosomes\")\n", "plt.ylabel(\"time, seconds\")\n", "# plt.gca().set_aspect(1.0)\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### vs other parameters: join type, sorted or categorical inputs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that default for overlap: `how='left', keep_order=True`, and the returned dataframe is sorted after the overlaps have been ascertained. Also note that `keep_order=True` is only a valid argument for `how='left'` as the order is not well-defined for inner or outer overlaps. " ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "418 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "274 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "df = make_random_intervals()\n", "df2 = make_random_intervals()\n", "%timeit -r 1 bioframe.overlap(df, df2)\n", "%timeit -r 1 bioframe.overlap(df, df2, how='left', keep_order=False)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "329 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "151 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "247 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "df = make_random_intervals()\n", "df2 = make_random_intervals()\n", "\n", "%timeit -r 1 bioframe.overlap(df, df2, how='outer')\n", "%timeit -r 1 bioframe.overlap(df, df2, how='inner')\n", "%timeit -r 1 bioframe.overlap(df, df2, how='left', keep_order=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note below that detection of overlaps takes a relatively small fraction of the execution time. The majority of the time the user-facing function spends on formatting the output table." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "449 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "148 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "61 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "62.4 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n" ] } ], "source": [ "df = make_random_intervals()\n", "df2 = make_random_intervals()\n", "\n", "%timeit -r 1 bioframe.overlap(df, df2)\n", "%timeit -r 1 bioframe.overlap(df, df2, how='inner')\n", "%timeit -r 1 bioframe.ops._overlap_intidxs(df, df2)\n", "%timeit -r 1 bioframe.ops._overlap_intidxs(df, df2, how='inner')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that sorting inputs provides a moderate speedup, as well as storing chromosomes as categoricals " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Default inputs (outer/inner joins):\n", "440 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "149 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "Sorted inputs (outer/inner joins):\n", "331 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "137 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "Categorical chromosomes (outer/inner joins):\n", "333 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "90 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n" ] } ], "source": [ "print(\"Default inputs (outer/inner joins):\")\n", "df = make_random_intervals()\n", "df2 = make_random_intervals()\n", "\n", "%timeit -r 1 bioframe.overlap(df, df2)\n", "%timeit -r 1 bioframe.overlap(df, df2, how='inner')\n", "\n", "print(\"Sorted inputs (outer/inner joins):\")\n", "df_sorted = make_random_intervals(sort=True)\n", "df2_sorted = make_random_intervals(sort=True)\n", "\n", "%timeit -r 1 bioframe.overlap(df_sorted, df2_sorted)\n", "%timeit -r 1 bioframe.overlap(df_sorted, df2_sorted, how='inner')\n", "\n", "print(\"Categorical chromosomes (outer/inner joins):\")\n", "df_cat = make_random_intervals(categorical_chroms=True)\n", "df2_cat = make_random_intervals(categorical_chroms=True)\n", "\n", "%timeit -r 1 bioframe.overlap(df_cat, df2_cat)\n", "%timeit -r 1 bioframe.overlap(df_cat, df2_cat, how='inner')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vs Pyranges (and, optionally, pybedtools)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Default arguments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The core intersection function of PyRanges is faster, since PyRanges object splits intervals by chromosomes at the object construction stage" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def df2pr(df):\n", " return pyranges.PyRanges(\n", " chromosomes=df.chrom,\n", " starts=df.start,\n", " ends=df.end,\n", " )" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.36 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "1.49 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "2.94 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "1.9 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "10.8 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "6.63 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "128 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "69.4 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "2.35 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "1.16 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "7.97 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "4.75 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings_bf = {}\n", "timings_pr = {}\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6, 3e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " df2 = make_random_intervals(n=n, n_chroms=1)\n", " pr = df2pr(df)\n", " pr2 = df2pr(df2)\n", " timings_bf[n] = %timeit -o -r 1 bioframe.overlap(df, df2,how='inner')\n", " timings_pr[n] = %timeit -o -r 1 pr.join(pr2)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings_bf.keys()),\n", " list([r.average for r in timings_bf.values()]),\n", " \"o-\",\n", " label=\"bioframe\",\n", ")\n", "plt.loglog(\n", " list(timings_pr.keys()),\n", " list([r.average for r in timings_pr.values()]),\n", " \"o-\",\n", " label=\"pyranges\",\n", ")\n", "\n", "plt.gca().set(\n", " xlabel=\"N intervals\",\n", " ylabel=\"time, seconds\",\n", " aspect=1.0,\n", " xticks=10 ** np.arange(2, 6.1),\n", ")\n", "plt.grid()\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### With roundtrips to dataframes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that pyranges performs useful calculations at the stage of creating a PyRanges object. Thus a direct comparison for one-off operations on pandas DataFrames between bioframe and pyranges should take this step into account. This roundrip is handled by `pyranges_intersect_dfs` below." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def pyranges_intersect_dfs(df, df2):\n", " return df2pr(df).intersect(df2pr(df2)).as_df()\n", "\n", "\n", "if include_pybedtools:\n", "\n", " def pybedtools_intersect_dfs(bed1, bed2):\n", " return bed1.intersect(bed2).to_dataframe()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.28 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "3.9 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "3.02 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "4.64 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "11 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "11 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "125 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "87.4 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "2.15 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "1.44 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "7.98 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "5.23 s ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings_bf = {}\n", "timings_pr = {}\n", "if include_pybedtools:\n", " timings_pb = {}\n", "\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6, 3e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " df2 = make_random_intervals(n=n, n_chroms=1)\n", " timings_bf[n] = %timeit -o -r 1 bioframe.overlap(df, df2, how='inner')\n", " timings_pr[n] = %timeit -o -r 1 pyranges_intersect_dfs(df, df2)\n", " if include_pybedtools:\n", " bed1 = pybedtools.BedTool.from_dataframe(df)\n", " bed2 = pybedtools.BedTool.from_dataframe(df2)\n", " timings_pb[n] = %timeit -o -r 1 pybedtools_intersect_dfs(bed1, bed2)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings_bf.keys()),\n", " list([r.average for r in timings_bf.values()]),\n", " \"o-\",\n", " label=\"bioframe\",\n", ")\n", "plt.loglog(\n", " list(timings_pr.keys()),\n", " list([r.average for r in timings_pr.values()]),\n", " \"o-\",\n", " label=\"pyranges\",\n", ")\n", "if include_pybedtools:\n", " plt.loglog(\n", " list(timings_pb.keys()),\n", " list([r.average for r in timings_pb.values()]),\n", " \"o-\",\n", " label=\"pybedtools\",\n", " )\n", "plt.gca().set(xlabel=\"N intervals\", ylabel=\"time, seconds\", aspect=1.0)\n", "plt.grid()\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Memory usage" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "import time\n", "\n", "from memory_profiler import memory_usage\n", "\n", "\n", "def sleep_before_after(func, sleep_sec=0.5):\n", " \"\"\"\n", " Wrapper that allows to report background interpreter's memory consumption\n", " for the first 5 time intervals (if increment is 0.1 abd sleep_sec=0.5):\n", " https://github.com/pythonprofilers/memory_profiler#api\n", " \"\"\"\n", "\n", " def _f(*args, **kwargs):\n", " time.sleep(sleep_sec)\n", " func(*args, **kwargs)\n", " time.sleep(sleep_sec)\n", "\n", " return _f\n", "\n", "\n", "mem_usage_bf = {}\n", "mem_usage_pr = {}\n", "if include_pybedtools:\n", " mem_usage_pb = {}\n", "\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6, 3e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " df2 = make_random_intervals(n=n, n_chroms=1)\n", " mem_usage_bf[n] = memory_usage(\n", " (sleep_before_after(bioframe.overlap), (df, df2), dict(how=\"inner\")),\n", " backend=\"psutil_pss\",\n", " include_children=True,\n", " interval=0.1,\n", " )\n", " mem_usage_pr[n] = memory_usage(\n", " (sleep_before_after(pyranges_intersect_dfs), (df, df2), dict()),\n", " backend=\"psutil_pss\",\n", " include_children=True,\n", " interval=0.1,\n", " )\n", " if include_pybedtools:\n", " bed1 = pybedtools.BedTool.from_dataframe(df)\n", " bed2 = pybedtools.BedTool.from_dataframe(df2)\n", " mem_usage_pb[n] = memory_usage(\n", " (sleep_before_after(pybedtools_intersect_dfs), (bed1, bed2), dict()),\n", " backend=\"psutil_pss\",\n", " include_children=True,\n", " interval=0.1,\n", " )" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Note that r[4] is the background memory usage of Python interpreter,\n", "# and max(r) is the maximum memory usage (that must be from the\n", "# bioframe/pyranges functions)\n", "plt.figure(figsize=(8, 6))\n", "plt.loglog(\n", " list(mem_usage_bf.keys()),\n", " list([max(r) - r[4] for r in mem_usage_bf.values()]),\n", " \"o-\",\n", " label=\"bioframe\",\n", ")\n", "\n", "plt.loglog(\n", " list(mem_usage_pr.keys()),\n", " list([max(r) - r[4] for r in mem_usage_pr.values()]),\n", " \"o-\",\n", " label=\"pyranges\",\n", ")\n", "\n", "if include_pybedtools:\n", " plt.loglog(\n", " list(mem_usage_pb.keys()),\n", " list([max(r) - r[4] for r in mem_usage_pb.values()]),\n", " \"o-\",\n", " label=\"pybedtools\",\n", " )\n", "\n", "plt.gca().set(xlabel=\"N intervals\", ylabel=\"Memory usage, Mb\", aspect=1.0)\n", "plt.grid()\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bioframe dtypes:\n" ] }, { "data": { "text/plain": [ "chrom object\n", "start int64\n", "end int64\n", "dtype: object" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Pyranges dtypes:\n" ] }, { "data": { "text/plain": [ "Chromosome category\n", "Start int64\n", "End int64\n", "dtype: object" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(\"Bioframe dtypes:\")\n", "display(df.dtypes)\n", "print()\n", "\n", "print(\"Pyranges dtypes:\")\n", "display(df2pr(df).dtypes)\n", "\n", "if include_pybedtools:\n", " print(\"Pybedtools dtypes:\")\n", " bed1 = pybedtools.BedTool.from_dataframe(df)\n", " display(bed1.to_dataframe().dtypes)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "### Combined performance figure.\n", "\n", "fig, axs = plt.subplot_mosaic(\"AAA.BBB\", figsize=(9.0, 4))\n", "\n", "plt.sca(axs[\"A\"])\n", "\n", "plt.text(\n", " -0.25,\n", " 1.0,\n", " \"A\",\n", " horizontalalignment=\"center\",\n", " verticalalignment=\"center\",\n", " transform=plt.gca().transAxes,\n", " fontsize=19,\n", ")\n", "\n", "plt.loglog(\n", " list(timings_bf.keys()),\n", " list([r.average for r in timings_bf.values()]),\n", " \"o-\",\n", " color=\"k\",\n", " label=\"bioframe\",\n", ")\n", "plt.loglog(\n", " list(timings_pr.keys()),\n", " list([r.average for r in timings_pr.values()]),\n", " \"o-\",\n", " color=\"gray\",\n", " label=\"pyranges\",\n", ")\n", "if include_pybedtools:\n", " plt.loglog(\n", " list(timings_pb.keys()),\n", " list([r.average for r in timings_pb.values()]),\n", " \"o-\",\n", " color=\"lightgray\",\n", " label=\"pybedtools\",\n", " )\n", "\n", "plt.gca().set(\n", " xlabel=\"N intervals\",\n", " ylabel=\"time, s\",\n", " aspect=1.0,\n", " xticks=10 ** np.arange(2, 6.1),\n", " yticks=10 ** np.arange(-3, 0.1),\n", ")\n", "\n", "plt.grid()\n", "plt.legend()\n", "\n", "plt.sca(axs[\"B\"])\n", "plt.text(\n", " -0.33,\n", " 1.0,\n", " \"B\",\n", " horizontalalignment=\"center\",\n", " verticalalignment=\"center\",\n", " transform=plt.gca().transAxes,\n", " fontsize=19,\n", ")\n", "plt.loglog(\n", " list(mem_usage_bf.keys()),\n", " list([max(r) - r[4] for r in mem_usage_bf.values()]),\n", " \"o-\",\n", " color=\"k\",\n", " label=\"bioframe\",\n", ")\n", "\n", "plt.loglog(\n", " list(mem_usage_pr.keys()),\n", " list([max(r) - r[4] for r in mem_usage_pr.values()]),\n", " \"o-\",\n", " color=\"gray\",\n", " label=\"pyranges\",\n", ")\n", "if include_pybedtools:\n", " plt.loglog(\n", " list(mem_usage_pb.keys()),\n", " list([max(r) - r[4] for r in mem_usage_pb.values()]),\n", " \"o-\",\n", " color=\"lightgray\",\n", " label=\"pybedtools\",\n", " )\n", "\n", "plt.gca().set(\n", " xlabel=\"N intervals\",\n", " ylabel=\"Memory usage, Mb\",\n", " aspect=1.0,\n", " xticks=10 ** np.arange(2, 6.1),\n", ")\n", "\n", "plt.grid()\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Slicing " ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "334 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "468 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "346 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "593 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "668 µs ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "1.92 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1,000 loops each)\n", "3.54 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "18.1 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 100 loops each)\n", "40.1 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "222 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n", "118 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 10 loops each)\n", "804 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)\n" ] } ], "source": [ "timings_slicing_bf = {}\n", "timings_slicing_pr = {}\n", "\n", "\n", "for n in [1e2, 1e3, 1e4, 1e5, 1e6, 3e6]:\n", " df = make_random_intervals(n=n, n_chroms=1)\n", " timings_slicing_bf[n] = %timeit -o -r 1 bioframe.select(df, ('chr1', n//2, n//4*3))\n", " pr = df2pr(df)\n", " timings_slicing_pr[n] = %timeit -o -r 1 pr['chr1', n//2:n//4*3]" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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bEjp0qVxc3MjKCiIxx9/nEOHDt1kq8LcuXO5++67KVu2LM7OzpQtW5b69evzxBNPsGfPnpu+nkhRosRHRGzmww8/BGDixIlcvny5QF7zscce45lnnqFUqVLcf//9VKpUiZUrV3LXXXexZcuWtHI1a9ZkyJAheHp6AvDwww8zZMiQtD+VKlVKK7t+/XoaNmzIZ599RkJCAl26dKFt27YcPXqUZ599lvvuuy9dYnK9jRs30qJFC/7991/uvPNO7rvvPry9vXnssccA+OWXX0hISMi07tSpUwEYOHAgzs7Oacf79OnD7NmzcXd3p1OnTtxzzz04ODgwdepUmjdvzsaNG3PdXv/73//o06cP69ato2HDhjzyyCO0adMGR0dHfvzxR1avXp3ra4kUSYaIyC0ICAgwAOPvv/82DMMwHnroIQMwXnzxxXTlOnfubADG1KlTc33tNWvWGIDRoUOHdMdDQ0MNwACMgIAA49ChQ2nnUlJSjMcff9wAjK5du2YZb2hoaKavefbsWaNs2bKGyWQyJk+ebJjN5rRzly5dMjp16mQAxoQJE9LVGzJkSFpMr776arp6qdq2bWsAxuzZszOcS05ONipUqGAAxt69e9OdmzNnjhEbG5vumMViMYKDgw3AaNCggWGxWNKdHz9+vAEY48ePTzuWkJBguLu7G15eXsbBgwczxHD8+HHjwIEDmbaLSHGhOz4iYlPvvfceTk5OTJ48Oa1bKT99+eWX1K5dO+25o6Mj7777LgDr1q3L8s5MVj7//HMuX77MqFGjGDFiBA4O135Mli1blunTp+Ps7MxXX32FYRgZ6teuXZt33nknXb1Ujz/+OHDtzs71lixZwoULF2jRogUNGzZMd65v375pd6pSmUwmRo4cye23387+/fs5cOBAju8tOjqa+Ph4qlevTp06dTKcDwgIoG7dujleR6QoU+IjIjZVp04dHn/8cRITExk3bly+vpaTkxPdunXLcLxSpUqULl2axMTEm+5yW7JkCWBNNjJTtWpVatWqxcWLFzly5EiG8w8++CCOjo6Z1u3Tpw+enp789ddfnDp1Kt251GQoNTm60X///cdXX33FCy+8wLBhwxg6dChDhw7l/PnzALka61O+fHkCAwPZs2cPL730EiEhITnWESlulPiIiM299dZbeHh4MHPmzHwdLFu5cuV0Y2Gu5+PjA5DleJqsHDt2DID27dunG/x8/Z/UhOHixYsZ6gcGBmZ5bS8vLx555BEsFku6KfoXLlxgyZIluLm50b9//3R1zGYzI0aMoHbt2jz77LNMmjSJKVOmMG3aNKZNm5YWb3R0dK7e3/Tp06lQoQKffvopDRo0oGzZsnTv3p3PPvuMS5cu5eoaIkWZk70DEJHip3Llyjz//PO8//77vPbaa2l3UWwts+6kW2WxWADo3bt3hu6lG5UtWzbDMXd392zrPP744/z0009MmzaN119/HYAZM2aQkpJC7969KVWqVLrykyZN4ptvvqFSpUp8+umn3HHHHVSsWBE3NzcAHn30UWbPnp1pt1tm2rdvz/Hjx1myZAnr1q1j48aNLF++nD///JPx48ezYMECOnfunKtriRRFSnxEJF+MHTuW7777jqVLl7J+/Xp7h5Nr/v7+HDlyhLFjx9KiRQubX799+/bUrFmTw4cP888//9C2bdu0bTwy6+b69ddfAfj222/p2bNnhvOZdbflxN3dnd69e9O7d2/AeufqzTff5LvvvuPxxx8vkLFZIvairi4RyRe+vr5pdzReeeUVO0dzjYuLC0CWW2vce++9wLWEIz+kTm3/6aef2L59O3v37sXf3z/TOy3h4eGAdeDxjfbv38+uXbtuOZ7y5cszceJEAE6ePElERMQtX1OksFLiIyL5ZtSoUVSrVo0tW7ZkWFDQXvz8/ABr0pCZl19+mVKlSvHpp5/yySefkJSUlKFMaGgoM2bMyHMMQ4YMwcHBgV9//ZXg4OB0x25Ur149AIKDg9O64QDOnj3L4MGDb2pvtBMnTvDDDz9kOh5o0aJFAJQuXTptfJRIcaTER0TyjaurK//73/8AbLaNxa16+OGHAesigQ8//DDDhw9n+PDhabOi/Pz8+P333yldujRjxoxJuxMzcOBAevToQc2aNalevTpfffVVnmOoWrUqXbt2JTo6mqlTp2IymdLuAt3o9ddfx8XFhe+//546derQt29f7r33XmrUqEFiYiK9evXK9etGRETwxBNPUK5cOVq1akXfvn3p27cvzZo1Y9CgQZhMJj766KMsZ6WJFAdKfEQkXw0aNIhGjRrZO4w0I0aM4P333ycgIIClS5fy448/8uOPP3L27Nm0MnfeeSf79+9n3Lhx+Pn5sXXrVubOncuuXbuoWLEi48eP5/vvv7+lOK4fz3PnnXdSvXr1TMu1bt2abdu20bNnT65cucIff/yRtoL0pk2bburuTI0aNfj888+5//77iYyMZOnSpSxZsoQrV64wePBgtm7dyrBhw27pfYkUdiYjt1MBRERERIo43fERERGREkOJj4iIiJQYSnxERESkxFDiIyIiIiWGEh8REREpMZT4iIiISImhxEdERERKDCU+IiIiUmIo8REREZESQ4mPiIiIlBhKfERERKTEUOIjIiIiJYYSHxERESkx/h/W8174rH8lJwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.loglog(\n", " list(timings_slicing_bf.keys()),\n", " list([r.average for r in timings_bf.values()]),\n", " \"o-\",\n", " label=\"bioframe\",\n", ")\n", "\n", "plt.loglog(\n", " list(timings_slicing_pr.keys()),\n", " list([r.average for r in timings_pr.values()]),\n", " \"o-\",\n", " label=\"pyranges\",\n", ")\n", "plt.gca().set(xlabel=\"N intervals\", ylabel=\"time, s\", aspect=1.0)\n", "plt.grid()\n", "plt.legend()" ] } ], "metadata": { "kernelspec": { "display_name": "bioframe", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 4 }