From 51cd724f4ea35d40578dda6f5fb0bbf3122ba31a Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 28 Mar 2024 17:11:24 +0100 Subject: [PATCH] move presets to a separate file & cleanup --- notebooks/2.1_Single-file.ipynb | 75 +++++++++++++++++---------------- scenarios/generator_2p1.py | 27 ++---------- src/benchmark.py | 12 +++--- src/executors/dask.py | 2 +- src/executors/futures.py | 2 +- src/executors/sequential.py | 2 +- src/uproot_processor.py | 2 +- 7 files changed, 51 insertions(+), 71 deletions(-) diff --git a/notebooks/2.1_Single-file.ipynb b/notebooks/2.1_Single-file.ipynb index dfa290c..9aa3a9a 100644 --- a/notebooks/2.1_Single-file.ipynb +++ b/notebooks/2.1_Single-file.ipynb @@ -17,7 +17,6 @@ "source": [ "import os, sys\n", "sys.path.append(os.getcwd()+\"/../\")\n", - "sys.path.append(os.getcwd()+\"/../src\")\n", "from scenarios.generator_2p1 import generate_configs\n", "from src.benchmark import Benchmark, run_benchmark" ] @@ -45,22 +44,24 @@ "name": "stderr", "output_type": "stream", "text": [ - " 17%|█▋ | 1/6 [00:22<01:53, 22.66s/it]/depot/cms/kernels/python3/lib/python3.10/site-packages/distributed/node.py:182: UserWarning: Port 8787 is already in use.\n", + " 17%|█▋ | 1/6 [00:21<01:47, 21.50s/it]/depot/cms/kernels/python3/lib/python3.10/site-packages/distributed/node.py:182: UserWarning: Port 8787 is already in use.\n", "Perhaps you already have a cluster running?\n", - "Hosting the HTTP server on port 35581 instead\n", + "Hosting the HTTP server on port 39477 instead\n", " warnings.warn(\n", - " 50%|█████ | 3/6 [01:13<01:08, 22.93s/it]/depot/cms/kernels/python3/lib/python3.10/site-packages/distributed/node.py:182: UserWarning: Port 8787 is already in use.\n", + " 50%|█████ | 3/6 [01:11<01:07, 22.47s/it]/depot/cms/kernels/python3/lib/python3.10/site-packages/distributed/node.py:182: UserWarning: Port 8787 is already in use.\n", "Perhaps you already have a cluster running?\n", - "Hosting the HTTP server on port 45511 instead\n", + "Hosting the HTTP server on port 37267 instead\n", " warnings.warn(\n", - " 67%|██████▋ | 4/6 [02:37<01:34, 47.12s/it]2024-03-28 16:15:45,188 - distributed.utils_perf - WARNING - full garbage collections took 10% CPU time recently (threshold: 10%)\n", - "2024-03-28 16:15:46,080 - distributed.utils_perf - WARNING - full garbage collections took 10% CPU time recently (threshold: 10%)\n", - "2024-03-28 16:15:48,190 - distributed.utils_perf - WARNING - full garbage collections took 10% CPU time recently (threshold: 10%)\n", - " 83%|████████▎ | 5/6 [05:20<01:28, 88.75s/it]/depot/cms/kernels/python3/lib/python3.10/site-packages/distributed/node.py:182: UserWarning: Port 8787 is already in use.\n", + " 67%|██████▋ | 4/6 [02:36<01:33, 46.87s/it]2024-03-28 16:35:17,534 - distributed.utils_perf - WARNING - full garbage collections took 10% CPU time recently (threshold: 10%)\n", + "2024-03-28 16:35:18,157 - distributed.utils_perf - WARNING - full garbage collections took 10% CPU time recently (threshold: 10%)\n", + "2024-03-28 16:35:19,065 - distributed.utils_perf - WARNING - full garbage collections took 10% CPU time recently (threshold: 10%)\n", + "2024-03-28 16:35:19,846 - distributed.utils_perf - WARNING - full garbage collections took 10% CPU time recently (threshold: 10%)\n", + "2024-03-28 16:35:20,441 - distributed.utils_perf - WARNING - full garbage collections took 10% CPU time recently (threshold: 10%)\n", + " 83%|████████▎ | 5/6 [05:17<01:28, 88.28s/it]/depot/cms/kernels/python3/lib/python3.10/site-packages/distributed/node.py:182: UserWarning: Port 8787 is already in use.\n", "Perhaps you already have a cluster running?\n", - "Hosting the HTTP server on port 38981 instead\n", + "Hosting the HTTP server on port 39251 instead\n", " warnings.warn(\n", - "100%|██████████| 6/6 [05:39<00:00, 56.63s/it]\n" + "100%|██████████| 6/6 [05:37<00:00, 56.20s/it]\n" ] } ], @@ -125,8 +126,8 @@ " 4\n", " 265594188\n", " 1129031467\n", - " 19.436925\n", - " 20.763812\n", + " 18.854903\n", + " 20.201502\n", " muons_only\n", " \n", " \n", @@ -140,8 +141,8 @@ " 2\n", " 265594188\n", " 1129031467\n", - " 36.557856\n", - " 37.909583\n", + " 36.067419\n", + " 37.411057\n", " muons_only\n", " \n", " \n", @@ -155,8 +156,8 @@ " 4\n", " 175488912\n", " 521753090\n", - " 8.892793\n", - " 10.466951\n", + " 8.828839\n", + " 10.453846\n", " hmm_columns\n", " \n", " \n", @@ -170,8 +171,8 @@ " 4\n", " 1152109223\n", " 5636057591\n", - " 81.699052\n", - " 83.085135\n", + " 81.689311\n", + " 83.107676\n", " main_collections\n", " \n", " \n", @@ -185,8 +186,8 @@ " 2\n", " 1152109223\n", " 5636057591\n", - " 159.729559\n", - " 161.101451\n", + " 158.832810\n", + " 160.246120\n", " main_collections\n", " \n", " \n", @@ -200,8 +201,8 @@ " 2\n", " 175488912\n", " 521753090\n", - " 16.674703\n", - " 18.145440\n", + " 16.589971\n", + " 18.113264\n", " hmm_columns\n", " \n", " \n", @@ -218,20 +219,20 @@ "5 1 20 61728620 True 0 \n", "\n", " executor n_workers compressed_bytes uncompressed_bytes run_processor \\\n", - "0 dask-local 4 265594188 1129031467 19.436925 \n", - "1 dask-local 2 265594188 1129031467 36.557856 \n", - "2 dask-local 4 175488912 521753090 8.892793 \n", - "3 dask-local 4 1152109223 5636057591 81.699052 \n", - "4 dask-local 2 1152109223 5636057591 159.729559 \n", - "5 dask-local 2 175488912 521753090 16.674703 \n", + "0 dask-local 4 265594188 1129031467 18.854903 \n", + "1 dask-local 2 265594188 1129031467 36.067419 \n", + "2 dask-local 4 175488912 521753090 8.828839 \n", + "3 dask-local 4 1152109223 5636057591 81.689311 \n", + "4 dask-local 2 1152109223 5636057591 158.832810 \n", + "5 dask-local 2 175488912 521753090 16.589971 \n", "\n", " run column_setup \n", - "0 20.763812 muons_only \n", - "1 37.909583 muons_only \n", - "2 10.466951 hmm_columns \n", - "3 83.085135 main_collections \n", - "4 161.101451 main_collections \n", - "5 18.145440 hmm_columns " + "0 20.201502 muons_only \n", + "1 37.411057 muons_only \n", + "2 10.453846 hmm_columns \n", + "3 83.107676 main_collections \n", + "4 160.246120 main_collections \n", + "5 18.113264 hmm_columns " ] }, "execution_count": 3, @@ -245,13 +246,13 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "id": "c0a788da-d160-4c81-95ea-150ef4d9a85e", "metadata": {}, "outputs": [ { "data": { - "image/png": "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LMosAAAALIsyCwAAAMuizAIAAMCyKLMAAACwLMosAAAALIsyCwAAAMuizAIAAMCyKLMAAACwLMosAAAALIsyCwAAAMuizAIAAMCyKLMAAACwLMosAAAALIsyCwAAAMuizAIAAMCyKLMAAACwLMosAAAALIsyCwAAAMuizAIAAMCyKLMAAACwLIcus2PGjJHNZsv2Cg4ONjsWAAAAHISL2QH+S0REhFatWpW17OzsbGIaAAAAOBKHL7MuLi5cjQUAAMA1OfQwA0nat2+fQkNDVbx4cXXp0kUHDx684ftTU1OVmJiY7QUAAIDcyaHLbO3atTVr1iwtX75cn376qU6ePKl69erpzJkz1/3MuHHj5Ofnl/UKCwu7h4kBAABwL9kMwzDMDnGzkpOTVbJkSQ0fPlyRkZHXfE9qaqpSU1OzlhMTExUWFqaEhAT5+vreq6gAAAC4SYmJifLz87ulvubwY2b/zdvbW5UqVdK+ffuu+x53d3e5u7vfw1QAAAAwi0MPM7hSamqqdu3apZCQELOjAAAAwAE4dJl97rnnFB0drbi4OP3+++/q2LGjEhMT1atXL7OjAQAAwAE49DCDY8eO6fHHH9fp06dVqFAh1alTR7/99puKFi1qdjQAAAA4AIcus/Pnzzc7AgAAAByYQw8zAAAAAG6EMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLoswCAADAsiizAAAAsCzKLAAAACyLMgsAAADLskSZnTx5sooXLy4PDw/VqFFDv/zyi9mRAAAA4AAcvswuWLBAw4YN06hRo/THH3+oQYMGatWqlY4cOWJ2NAAAAJjMZhiGYXaIG6ldu7aqV6+uKVOmZK0rX7682rVrp3Hjxv3n5xMTE+Xn56eEhAT5+vrezagAAAC4BbfT11zuUqY7Ii0tTTExMXrhhReyrW/evLnWr19/zc+kpqYqNTU1azkhIUHS5ZMEAAAAx/NPT7uVa6wOXWZPnz6tzMxMBQUFZVsfFBSkkydPXvMz48aN06uvvnrV+rCwsLuSEQAAAHfGmTNn5Ofnl6PPOHSZ/YfNZsu2bBjGVev+8eKLLyoyMjJr+fz58ypatKiOHDmS45OTWyUmJiosLExHjx5l6MX/4ZxcjXNyNc5JdpyPq3FOrsY5uRrn5GoJCQkKDw+Xv79/jj/r0GW2YMGCcnZ2vuoqbHx8/FVXa//h7u4ud3f3q9b7+fnxDXMFX19fzskVOCdX45xcjXOSHefjapyTq3FOrsY5uZqTU87nJnDo2Qzc3NxUo0YNrVy5Mtv6lStXql69eialAgAAgKNw6CuzkhQZGakePXqoZs2aqlu3rqZOnaojR46of//+ZkcDAACAyRy+zHbu3FlnzpzRa6+9phMnTqhixYpaunSpihYtelOfd3d31yuvvHLNoQd5FefkapyTq3FOrsY5yY7zcTXOydU4J1fjnFztds6Jw88zCwAAAFyPQ4+ZBQAAAG6EMgsAAADLoswCAADAsiizAAAAsKxcXWYnT56s4sWLy8PDQzVq1NAvv/xidiRTrV27Vm3atFFoaKhsNpsWL15sdiRTjRs3TrVq1ZKPj48CAwPVrl077dmzx+xYppoyZYoqV66cNZF33bp1tWzZMrNjOZRx48bJZrNp2LBhZkcxzZgxY2Sz2bK9goODzY5luuPHj6t79+4KCAiQl5eXqlatqpiYGLNjmaZYsWJXfZ/YbDYNHDjQ7GimycjI0OjRo1W8eHF5enqqRIkSeu2112S3282OZpqkpCQNGzZMRYsWlaenp+rVq6dNmzblaB+5tswuWLBAw4YN06hRo/THH3+oQYMGatWqlY4cOWJ2NNMkJyerSpUqioqKMjuKQ4iOjtbAgQP122+/aeXKlcrIyFDz5s2VnJxsdjTTFClSRG+99ZY2b96szZs364EHHlDbtm21Y8cOs6M5hE2bNmnq1KmqXLmy2VFMFxERoRMnTmS9tm/fbnYkU507d07169eXq6urli1bpp07d2r8+PHKnz+/2dFMs2nTpmzfI/88AOmxxx4zOZl53n77bX388ceKiorSrl279M477+jdd9/VRx99ZHY00zzxxBNauXKlZs+ere3bt6t58+Zq1qyZjh8/fvM7MXKp++67z+jfv3+2deXKlTNeeOEFkxI5FknGN998Y3YMhxIfH29IMqKjo82O4lAKFChgfPbZZ2bHMF1SUpJRunRpY+XKlUajRo2MoUOHmh3JNK+88opRpUoVs2M4lBEjRhj333+/2TEc2tChQ42SJUsadrvd7Cimefjhh42+fftmW9ehQweje/fuJiUyV0pKiuHs7Gx8//332dZXqVLFGDVq1E3vJ1demU1LS1NMTIyaN2+ebX3z5s21fv16k1LB0SUkJEiS/P39TU7iGDIzMzV//nwlJyerbt26Zscx3cCBA/Xwww+rWbNmZkdxCPv27VNoaKiKFy+uLl266ODBg2ZHMtWSJUtUs2ZNPfbYYwoMDFS1atX06aefmh3LYaSlpWnOnDnq27evbDab2XFMc//992v16tXau3evJGnr1q1at26dHnroIZOTmSMjI0OZmZny8PDItt7T01Pr1q276f04/BPAbsXp06eVmZmpoKCgbOuDgoJ08uRJk1LBkRmGocjISN1///2qWLGi2XFMtX37dtWtW1eXLl1Svnz59M0336hChQpmxzLV/PnztWXLlhyP48qtateurVmzZqlMmTL6+++/NXbsWNWrV087duxQQECA2fFMcfDgQU2ZMkWRkZEaOXKkNm7cqCFDhsjd3V09e/Y0O57pFi9erPPnz6t3795mRzHViBEjlJCQoHLlysnZ2VmZmZl644039Pjjj5sdzRQ+Pj6qW7euXn/9dZUvX15BQUH64osv9Pvvv6t06dI3vZ9cWWb/ceVvf4Zh5OnfCHF9gwYN0rZt23L0m2BuVbZsWcXGxur8+fNauHChevXqpejo6DxbaI8ePaqhQ4dqxYoVV109yKtatWqV9edKlSqpbt26KlmypGbOnKnIyEgTk5nHbrerZs2aevPNNyVJ1apV044dOzRlyhTKrKTPP/9crVq1UmhoqNlRTLVgwQLNmTNH8+bNU0REhGJjYzVs2DCFhoaqV69eZsczxezZs9W3b18VLlxYzs7Oql69urp27aotW7bc9D5yZZktWLCgnJ2dr7oKGx8ff9XVWmDw4MFasmSJ1q5dqyJFipgdx3Rubm4qVaqUJKlmzZratGmTPvjgA33yyScmJzNHTEyM4uPjVaNGjax1mZmZWrt2raKiopSamipnZ2cTE5rP29tblSpV0r59+8yOYpqQkJCrfuErX768Fi5caFIix3H48GGtWrVKixYtMjuK6Z5//nm98MIL6tKli6TLvwwePnxY48aNy7NltmTJkoqOjlZycrISExMVEhKizp07q3jx4je9j1w5ZtbNzU01atTIunPyHytXrlS9evVMSgVHYxiGBg0apEWLFumnn37K0V+cvMQwDKWmppodwzRNmzbV9u3bFRsbm/WqWbOmunXrptjY2DxfZCUpNTVVu3btUkhIiNlRTFO/fv2rpvbbu3evihYtalIixzF9+nQFBgbq4YcfNjuK6VJSUuTklL16OTs75+mpuf7h7e2tkJAQnTt3TsuXL1fbtm1v+rO58sqsJEVGRqpHjx6qWbOm6tatq6lTp+rIkSPq37+/2dFMc+HCBe3fvz9rOS4uTrGxsfL391d4eLiJycwxcOBAzZs3T99++618fHyyruT7+fnJ09PT5HTmGDlypFq1aqWwsDAlJSVp/vz5WrNmjX788Uezo5nGx8fnqnHU3t7eCggIyLPjq5977jm1adNG4eHhio+P19ixY5WYmJhnryxJ0jPPPKN69erpzTffVKdOnbRx40ZNnTpVU6dONTuaqex2u6ZPn65evXrJxSXXVo6b1qZNG73xxhsKDw9XRESE/vjjD02YMEF9+/Y1O5ppli9fLsMwVLZsWe3fv1/PP/+8ypYtqz59+tz8Tu7gDAsOZ9KkSUbRokUNNzc3o3r16nl+yqWff/7ZkHTVq1evXmZHM8W1zoUkY/r06WZHM03fvn2z/s4UKlTIaNq0qbFixQqzYzmcvD41V+fOnY2QkBDD1dXVCA0NNTp06GDs2LHD7Fim++6774yKFSsa7u7uRrly5YypU6eaHcl0y5cvNyQZe/bsMTuKQ0hMTDSGDh1qhIeHGx4eHkaJEiWMUaNGGampqWZHM82CBQuMEiVKGG5ubkZwcLAxcOBA4/z58znah80wDOPOdmwAAADg3siVY2YBAACQN1BmAQAAYFmUWQAAAFgWZRYAAACWRZkFAACAZVFmAQAAYFmUWQAAAFgWZRYAciGbzabFixebHQMA7jrKLADcolOnTsnV1VUpKSnKyMiQt7e3jhw5YnYsAMhTKLMAcIs2bNigqlWrysvLSzExMfL391d4eLipmdLS0iy1XwC4XZRZALhF69evV/369SVJ69aty/rz9Wzfvl1OTk46ffq0JOncuXNycnLSY489lvWecePGqW7dulnL0dHRuu++++Tu7q6QkBC98MILysjIyNreuHFjDRo0SJGRkSpYsKAefPDBax77tddeU1BQkGJjY7OyN2zYUJ6engoLC9OQIUOUnJyc9f5ixYpp7Nix6t27t/z8/PTkk08qLS1NgwYNUkhIiDw8PFSsWDGNGzcuZycNAO4wyiwA5MCRI0eUP39+5c+fXxMmTNAnn3yi/Pnza+TIkVq8eLHy58+vAQMGXPOzFStWVEBAgKKjoyVJa9euVUBAgNauXZv1njVr1qhRo0aSpOPHj+uhhx5SrVq1tHXrVk2ZMkWff/65xo4dm22/M2fOlIuLi3799Vd98skn2bYZhqGhQ4fq888/17p161S1alVt375dLVq0UIcOHbRt2zYtWLBA69at06BBg7J99t1331XFihUVExOjl156SR9++KGWLFmiL7/8Unv27NGcOXNUrFix2z2lAHBbbIZhGGaHAACryMjI0LFjx5SYmKiaNWtq06ZNypcvn6pWraoffvhB4eHhypcvnwoWLHjNzz/66KMKDQ3VRx99pGeeeUbOzs6aOXOmoqOjVaZMGRUoUEBfffWVWrZsqVGjRmnhwoXatWuXbDabJGny5MkaMWKEEhIS5OTkpMaNGyshIUF//PFHtuPYbDZ99dVX+vbbb7V582atXLlSRYoUkST17NlTnp6e2YrvunXr1KhRIyUnJ2ddda1WrZq++eabrPcMGTJEO3bs0KpVq7LyAIDZuDILADng4uKiYsWKaffu3apVq5aqVKmikydPKigoSA0bNlSxYsWuW2Sly8MC1qxZI+nyEIImTZqoYcOGio6O1qZNm3Tx4sWs4Qq7du1S3bp1sxXH+vXr68KFCzp27FjWupo1a17zWM8884w2bNigX375JavISlJMTIxmzJihfPnyZb1atGghu92uuLi46+63d+/eio2NVdmyZTVkyBCtWLHi5k8cANwlLmYHAAAriYiI0OHDh5Weni673a58+fIpIyNDGRkZypcvn4oWLaodO3Zc9/ONGzfW0KFDtX//fv35559q0KCBDhw4oOjoaJ0/f141atSQj4+PpMtDBK68AvrPf6b9e723t/c1j/Xggw/qiy++0PLly9WtW7es9Xa7Xf369dOQIUOu+sy/b2C7cr/Vq1dXXFycli1bplWrVqlTp05q1qyZvv766+t+vQBwt1FmASAHli5dqvT0dDVt2lTvvPOOatSooS5duqh3795q2bKlXF1db/j5f8bNjh07VlWqVJGvr68aNWqkcePG6dy5c1njZSWpQoUKWrhwYbZSu379evn4+Khw4cL/mfWRRx5RmzZt1LVrVzk7O6tLly6SLpfSHTt2qFSpUjn++n19fdW5c2d17txZHTt2VMuWLXX27Fn5+/vneF8AcCcwzAAAcqBo0aLKly+f/v77b7Vt21bh4eHauXOnOnTooFKlSqlo0aI3/LzNZlPDhg01Z84cNW7cWJJUuXJlpaWlafXq1VnrJGnAgAE6evSoBg8erN27d+vbb7/VK6+8osjISDk53dw/3+3bt9fs2bPVp0+frCuoI0aM0IYNGzRw4EDFxsZq3759WrJkiQYPHnzDfb3//vuaP3++du/erb179+qrr75ScHCw8ufPf1NZAOBu4MosAOTQmjVrVKtWLXl4eOiXX35R4cKFFRoaetOfb9KkiRYtWpRVXG02mxo0aKDvv/9e999/f9b7ChcurKVLl+r5559XlSpV5O/vr//9738aPXp0jvJ27NhRdrtdPXr0kJOTkzp06KDo6GiNGjVKDRo0kGEYKlmypDp37nzD/eTLl09vv/229u3bJ2dnZ9WqVUtLly696WINAHcDsxkAAADAsvh1GgAAAJZFmQUAAIBlUWYBAABgWZRZAAAAWBZlFgAAAJZFmQUAAIBlUWYBAABgWZRZAAAAWBZlFgAAAJZFmQUAAIBlUWYBAABgWZRZAAAAWNb/A1O1i7tlsvHkAAAAAElFTkSuQmCC", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAINCAYAAAAtJ/ceAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAABXOklEQVR4nO3dd3QUZcPG4XtTSCGNBEiRAJFO6EUEpEkRlC5SpGOhF1FBwYKKIiqIioDoK1UFFERUkCYEEV6pEaSX0EuoCenJ7nx/+JrPSDGhzU7yu87Zc9jZ2Zl754TkzpNnZmyGYRgCAAAALMjF7AAAAADAzaLMAgAAwLIoswAAALAsyiwAAAAsizILAAAAy6LMAgAAwLIoswAAALAsyiwAAAAsy83sAHeaw+HQqVOn5OvrK5vNZnYcAAAA/INhGLpy5YrCwsLk4pKzsdZcX2ZPnTql8PBws2MAAADgXxw/flxFihTJ0XtyfZn19fWV9OfB8fPzMzkNAAAA/ik+Pl7h4eGZvS0ncn2Z/WtqgZ+fH2UWAADAid3MlFBOAAMAAIBlUWYBAABgWZRZAAAAWFaunzMLAEBeZrfblZ6ebnYM5HGurq5yc3O7I5dJpcwCAJBLJSQk6MSJEzIMw+wogLy9vRUaGqp8+fLd1u1SZgEAyIXsdrtOnDghb29vFSpUiBsHwTSGYSgtLU3nzp1TTEyMSpUqleMbI9wIZRYAgFwoPT1dhmGoUKFC8vLyMjsO8jgvLy+5u7vr6NGjSktLk6en523bNieAAQCQizEiC2dxO0djs2z3jmwVAAAAuAsoswAAALAsyiwAAHAaDRs21LBhw8yOcccVL15ckyZNMjtGrkCZBQAAgGVRZgEAAGBZlFkAAPIAwzCUlJZhyiOnN21wOBwaMWKEAgMDFRISojFjxmS+ZrPZ9Mknn6hly5by9vZWuXLltHHjRh08eFANGzZU/vz5Vbt2bR06dCjzPWPGjFGVKlX0+eefq2jRovLx8VH//v1lt9v1zjvvKCQkRIULF9abb76Z7YyXL1/W008/reDgYHl6eqpChQr64YcfMl9fuHChIiMj5eHhoeLFi2vChAnX3daRI0dks9kUHR2dZfs2m01r166VJK1du1Y2m03Lly9X1apV5eXlpQcffFCxsbFatmyZypUrJz8/P3Xp0kVJSUmZ22nYsKGGDBly3eP51/EpWrSoPDw8FBYWpiFDhmT7ODgDrjMLAEAekJxuV/lXlpuy792vPyTvfNmvHLNmzdLw4cP122+/aePGjerVq5fq1q2rpk2bSpLeeOMNTZw4URMnTtTIkSP1+OOP695779WLL76ookWLqk+fPho0aJCWLVuWuc1Dhw5p2bJl+umnn3To0CF16NBBMTExKl26tKKiorRhwwb16dNHjRs31v3333/DfA6HQy1atNCVK1c0d+5clShRQrt375arq6skaevWrerYsaPGjBmjTp06acOGDRowYICCgoLUq1evnB/AvxkzZowmT54sb29vdezYUR07dpSHh4e+/PJLJSQkqF27dvroo480cuTIbB3Pb775Ru+//77mzZunyMhInTlzRr///vstZbzbKLMAAMCpVKpUSa+++qokqVSpUpo8ebJWr16dWWZ79+6tjh07SpJGjhyp2rVr6+WXX9ZDDz0kSRo6dKh69+6dZZsOh0Off/65fH19Vb58eTVq1Ej79u3T0qVL5eLiojJlymj8+PFau3btv5bZVatWadOmTdqzZ49Kly4tSbr33nszX584caIaN26sl19+WZJUunRp7d69W+++++4tl9mxY8eqbt26kqQnnnhCL774og4dOpS5/w4dOmjNmjVZyuyNjuexY8cUEhKiJk2ayN3dXUWLFtV99913SxnvNsosAAB5gJe7q3a//pBp+86JSpUqZXkeGhqq2NjYa74eHBwsSapYsWKWZSkpKYqPj5efn5+kP68e4Ovrm2UdV1fXLBfyDw4OzrKf64mOjlaRIkUyi+w/7dmzR23atMmyrG7dupo0aZLsdnvmCO7N+Odn9/b2zlKkg4ODtWnTpuu+R8p6PB977DFNmjRJ9957r5o3b66HH35YrVq1kpubdSqidZICAICbZrPZcvSnfjO5u7tneW6z2eRwOK75+l93OLvWsuu95691/m0/1/Nvtwc2DOOqO6/daN7wX4X67+ukp6dfc91/fs7sfIYbrRMeHq59+/Zp5cqVWrVqlQYMGKB3331XUVFRV73PWXECGAAAQA5UqlRJJ06c0P79+6/5evny5bV+/fosyzZs2KDSpUtfc1S2UKFCkqTTp09nLvv7yWB3mpeXl1q3bq0PP/xQa9eu1caNG7Vz5867tv9bZY1f0QAAAJxEgwYNVL9+fT366KOaOHGiSpYsqb1798pms6l5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guHh4WGULVvWmD59utmRTLd8+XJDkrFv3z6zoziF+Ph4Y+jQoUbRokUNT09P49577zVGjx5tpKammh3NNPPnzzfuvfdeI1++fEZISIgxcOBA4/Llyznahs0wDOP2dmwAAADg7siVc2YBAACQN1BmAQAAYFmUWQAAAFgWZRYAAACWRZkFAACAZVFmAQAAYFmUWQAAAFgWZRYAciGbzabFixebHQMA7jjKLADcpHPnzsnd3V1JSUnKyMhQ/vz5dezYMbNjAUCeQpkFgJu0ceNGValSRd7e3tq6dasCAwNVtGhRUzOlpaVZarsAcKsoswBwkzZs2KC6detKktavX5/57+vZuXOnXFxcdP78eUnSpUuX5OLiosceeyxznXHjxql27dqZz6OionTffffJw8NDoaGheuGFF5SRkZH5esOGDTVo0CANHz5cBQsWVNOmTa+579dff13BwcGKjo7OzF6/fn15eXkpPDxcQ4YMUWJiYub6xYsX19ixY9WrVy/5+/vrqaeeUlpamgYNGqTQ0FB5enqqePHiGjduXM4OGgDcZpRZAMiBY8eOKSAgQAEBAZo4caI++eQTBQQEaNSoUVq8eLECAgI0YMCAa763QoUKCgoKUlRUlCRp3bp1CgoK0rp16zLXWbt2rRo0aCBJOnnypB5++GHVrFlTv//+u6ZOnar//Oc/Gjt2bJbtzpo1S25ubvr111/1ySefZHnNMAwNHTpU//nPf7R+/XpVqVJFO3fu1EMPPaT27dtrx44dmj9/vtavX69BgwZlee+7776rChUqaOvWrXr55Zf14YcfasmSJVqwYIH27dunuXPnqnjx4rd6SAHgltgMwzDMDgEAVpGRkaETJ04oPj5eNWrU0ObNm+Xj46MqVaroxx9/VNGiReXj46OCBQte8/2PPvqowsLC9NFHH+mZZ56Rq6urZs2apaioKJUuXVoFChTQ119/rebNm2v06NFauHCh9uzZI5vNJkmaMmWKRo4cqbi4OLm4uKhhw4aKi4vT9u3bs+zHZrPp66+/1nfffactW7Zo5cqVKlKkiCSpR48e8vLyylJ8169frwYNGigxMTFz1LVq1ar69ttvM9cZMmSIdu3apVWrVmXmAQCzMTILADng5uam4sWLa+/evapZs6YqV66sM2fOKDg4WPXr11fx4sWvW2SlP6cFrF27VtKfUwgaNWqk+vXrKyoqSps3b1ZycnLmdIU9e/aodu3aWYpj3bp1lZCQoBMnTmQuq1GjxjX39cwzz2jjxo365ZdfMousJG3dulUzZ86Uj49P5uOhhx6Sw+FQTEzMdbfbq1cvRUdHq0yZMhoyZIhWrFiR/QMHAHeIm9kBAMBKIiMjdfToUaWnp8vhcMjHx0cZGRnKyMiQj4+PihUrpl27dl33/Q0bNtTQoUN18OBB/fHHH6pXr54OHTqkqKgoXb58WdWrV5evr6+kP6cI/HME9K8/pv19ef78+a+5r6ZNm+qrr77S8uXL1bVr18zlDodDffv21ZAhQ656z99PYPvndqtVq6aYmBgtW7ZMq1atUseOHdWkSRN988031/28AHCnUWYBIAeWLl2q9PR0NW7cWO+8846qV6+uzp07q1evXmrevLnc3d1v+P6/5s2OHTtWlStXlp+fnxo0aKBx48bp0qVLmfNlJal8+fJauHBhllK7YcMG+fr66p577vnXrK1bt1arVq30+OOPy9XVVZ07d5b0ZyndtWuXSpYsmePP7+fnp06dOqlTp07q0KGDmjdvrosXLyowMDDH2wKA24FpBgCQA8WKFZOPj4/Onj2rNm3aqGjRotq9e7fat2+vkiVLqlixYjd8v81mU/369TV37lw1bNhQklSpUiWlpaVp9erVmcskacCAATp+/LgGDx6svXv36rvvvtOrr76q4cOHy8Ule9++27Vrpzlz5qh3796ZI6gjR47Uxo0bNXDgQEVHR+vAgQNasmSJBg8efMNtvf/++5o3b5727t2r/fv36+uvv1ZISIgCAgKylQUA7gRGZgEgh9auXauaNWvK09NTv/zyi+655x6FhYVl+/2NGjXSokWLMourzWZTvXr19MMPP+iBBx7IXO+ee+7R0qVL9fzzz6ty5coKDAzUE088oZdeeilHeTt06CCHw6Hu3bvLxcVF7du3V1RUlEaPHq169erJMAyVKFFCnTp1uuF2fHx8NH78eB04cECurq6qWbOmli5dmu1iDQB3AlczAAAAgGXx6zQAAAAsizILAAAAy6LMAgAAwLIoswAAALAsyiwAAAAsizILAAAAy6LMAgAAwLIoswAAALAsyiwAAAAsizILAAAAy6LMAgAAwLIoswAAALCs/wP1VSkdRPZL9QAAAABJRU5ErkJggg==", "text/plain": [ "
" ] diff --git a/scenarios/generator_2p1.py b/scenarios/generator_2p1.py index fdc999c..af2d46b 100644 --- a/scenarios/generator_2p1.py +++ b/scenarios/generator_2p1.py @@ -3,30 +3,7 @@ import yaml import glob -column_presets = { - # "full_event": { - # # the bechmark will limit this to actual total number of columns - # "method": "n_columns", - # "values": 100000 - # }, - "main_collections": { - "method": "collections", - "values": ["Jet", "Photon", "Tau", "Electron", "Muon"] - }, - "muons_only": { - "method": "collections", - "values": ["Muon"] - }, - "hmm_columns": { - "method": "column_list", - "values": [ - "run", "luminosityBlock", "HLT_IsoMu24", "PV_npvsGood", "fixedGridRhoFastjetAll", - "Muon_pt", "Muon_eta", "Muon_phi", "Muon_mass", "Muon_charge", "Muon_pfRelIso04_all", "Muon_mediumId", "Muon_ptErr", - "Electron_pt", "Electron_eta", "Electron_mvaFall17V2Iso_WP90", - "Jet_pt", "Jet_eta", "Jet_phi", "Jet_mass", - ] - } -} +from scenarios.presets import column_presets default_config = { @@ -69,6 +46,8 @@ def generate_configs(save_dir="./"): config = copy.deepcopy(default_config) config["executor"]["n_workers"] = n_workers config["processor"]["columns"] = column_setup + + # Custom labels to save to output dataframe config["custom_labels"] = { "column_setup": label } diff --git a/src/benchmark.py b/src/benchmark.py index 42b1458..320fbcb 100644 --- a/src/benchmark.py +++ b/src/benchmark.py @@ -5,13 +5,13 @@ import tqdm import pandas as pd -from time_profiler import time_profiler as tp -from data_loader import get_file_list -from uproot_processor import UprootProcessor +from src.time_profiler import time_profiler as tp +from src.data_loader import get_file_list +from src.uproot_processor import UprootProcessor -from executors.sequential import SequentialExecutor -from executors.futures import FuturesExecutor -from executors.dask import DaskLocalExecutor, DaskGatewayExecutor +from src.executors.sequential import SequentialExecutor +from src.executors.futures import FuturesExecutor +from src.executors.dask import DaskLocalExecutor, DaskGatewayExecutor executors = { 'sequential': SequentialExecutor, 'futures': FuturesExecutor, diff --git a/src/executors/dask.py b/src/executors/dask.py index 1d2ffc2..a142235 100644 --- a/src/executors/dask.py +++ b/src/executors/dask.py @@ -1,4 +1,4 @@ -from executors.base import BaseExecutor +from src.executors.base import BaseExecutor import dask from dask.distributed import LocalCluster, Client from dask_gateway import Gateway diff --git a/src/executors/futures.py b/src/executors/futures.py index 386e82c..de0d4e2 100644 --- a/src/executors/futures.py +++ b/src/executors/futures.py @@ -1,4 +1,4 @@ -from executors.base import BaseExecutor +from src.executors.base import BaseExecutor from concurrent import futures class FuturesExecutor(BaseExecutor): diff --git a/src/executors/sequential.py b/src/executors/sequential.py index 539fd02..cb85a2f 100644 --- a/src/executors/sequential.py +++ b/src/executors/sequential.py @@ -1,4 +1,4 @@ -from executors.base import BaseExecutor +from src.executors.base import BaseExecutor class SequentialExecutor(BaseExecutor): diff --git a/src/uproot_processor.py b/src/uproot_processor.py index 5b80606..f59d8df 100644 --- a/src/uproot_processor.py +++ b/src/uproot_processor.py @@ -1,4 +1,4 @@ -from time_profiler import time_profiler as tp +from src.time_profiler import time_profiler as tp import pandas as pd import numpy as np import uproot