{ "cells": [ { "cell_type": "markdown", "id": "8724625a-3dce-4c71-a883-4a5f89f12132", "metadata": {}, "source": [ "# Example of component" ] }, { "cell_type": "code", "execution_count": 1, "id": "0bf412e3-73d7-439a-bd59-e35c9543c1b7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using Normal as an approximation of Binomial\n", "Using aptext package from https://github.com/XENONnT/applefiles\n" ] } ], "source": [ "import os\n", "from time import time\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from matplotlib.colors import LogNorm\n", "import jax.numpy as jnp\n", "import multihist as mh\n", "\n", "import appletree as apt\n", "from appletree.utils import get_file_path" ] }, { "cell_type": "code", "execution_count": 2, "id": "b988e7ba-f325-47f8-ad0f-c004ce215ccf", "metadata": {}, "outputs": [], "source": [ "# constrain the GPU memory usage\n", "\n", "apt.set_gpu_memory_usage(0.2)" ] }, { "cell_type": "markdown", "id": "bdef7717-ff2b-4e27-9d09-c400062d606b", "metadata": {}, "source": [ "## Define component" ] }, { "cell_type": "markdown", "id": "000e231e-83cf-4a6b-8eca-81d417c08877", "metadata": {}, "source": [ "### ComponentSim" ] }, { "cell_type": "code", "execution_count": 3, "id": "619e5580-96ec-4ccc-80e5-a6f0de00e0a8", "metadata": {}, "outputs": [], "source": [ "# The components is associated with bins, so first we load bins\n", "data = pd.read_csv(get_file_path(\"data_Rn220.csv\"))\n", "bins_cs1, bins_cs2 = apt.utils.get_equiprob_bins_2d(\n", " data[[\"cs1\", \"cs2\"]].to_numpy(),\n", " [15, 15],\n", " order=[0, 1],\n", " x_clip=[0, 100],\n", " y_clip=[1e2, 1e4],\n", " which_np=jnp,\n", ")" ] }, { "cell_type": "code", "execution_count": 4, "id": "c2bb21e0-bc18-4878-86ba-8edea6ced391", "metadata": {}, "outputs": [], "source": [ "# Initialize component\n", "er = apt.ERBand(bins=[bins_cs1, bins_cs2], bins_type=\"irreg\")" ] }, { "cell_type": "code", "execution_count": 5, "id": "e076733b-b248-446f-a744-ef4dfb73a01d", "metadata": {}, "outputs": [], "source": [ "# Deduce the workflow(datastructure)\n", "er.deduce(data_names=[\"cs1\", \"cs2\"], func_name=\"simulate\") # 'eff'(efficiency) is always simulated\n", "er.rate_name = \"er_rate\" # also we have to specify a normalization factor of the component\n", "\n", "# Compile ER script\n", "# This is meta-programing because appletree can generate codes dynamically\n", "er.compile()" ] }, { "cell_type": "code", "execution_count": 6, "id": "64dfeace-d67b-450a-8ecc-0183c2ca0223", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "from functools import partial\n", "from jax import jit\n", "from appletree.plugins import PositionSpectra\n", "from appletree.plugins import UniformEnergySpectra\n", "from appletree.plugins import RecombFluct\n", "from appletree.plugins import mTI\n", "from appletree.plugins import Quanta\n", "from appletree.plugins import TrueRecombER\n", "from appletree.plugins import IonizationER\n", "from appletree.plugins import DriftLoss\n", "from appletree.plugins import RecombinationER\n", "from appletree.plugins import ElectronDrifted\n", "from appletree.plugins import PositionRecon\n", "from appletree.plugins import S2Correction\n", "from appletree.plugins import S2PE\n", "from appletree.plugins import S2\n", "from appletree.plugins import S1Correction\n", "from appletree.plugins import PhotonDetection\n", "from appletree.plugins import S1PE\n", "from appletree.plugins import S1\n", "from appletree.plugins import S2CutAccept\n", "from appletree.plugins import S1CutAccept\n", "from appletree.plugins import S1ReconEff\n", "from appletree.plugins import S2Threshold\n", "from appletree.plugins import Eff\n", "from appletree.plugins import cS2\n", "from appletree.plugins import cS1\n", "PositionSpectra_ERBand = PositionSpectra('ERBand_llh')\n", "UniformEnergySpectra_ERBand = UniformEnergySpectra('ERBand_llh')\n", "RecombFluct_ERBand = RecombFluct('ERBand_llh')\n", "mTI_ERBand = mTI('ERBand_llh')\n", "Quanta_ERBand = Quanta('ERBand_llh')\n", "TrueRecombER_ERBand = TrueRecombER('ERBand_llh')\n", "IonizationER_ERBand = IonizationER('ERBand_llh')\n", "DriftLoss_ERBand = DriftLoss('ERBand_llh')\n", "RecombinationER_ERBand = RecombinationER('ERBand_llh')\n", "ElectronDrifted_ERBand = ElectronDrifted('ERBand_llh')\n", "PositionRecon_ERBand = PositionRecon('ERBand_llh')\n", "S2Correction_ERBand = S2Correction('ERBand_llh')\n", "S2PE_ERBand = S2PE('ERBand_llh')\n", "S2_ERBand = S2('ERBand_llh')\n", "S1Correction_ERBand = S1Correction('ERBand_llh')\n", "PhotonDetection_ERBand = PhotonDetection('ERBand_llh')\n", "S1PE_ERBand = S1PE('ERBand_llh')\n", "S1_ERBand = S1('ERBand_llh')\n", "S2CutAccept_ERBand = S2CutAccept('ERBand_llh')\n", "S1CutAccept_ERBand = S1CutAccept('ERBand_llh')\n", "S1ReconEff_ERBand = S1ReconEff('ERBand_llh')\n", "S2Threshold_ERBand = S2Threshold('ERBand_llh')\n", "Eff_ERBand = Eff('ERBand_llh')\n", "cS2_ERBand = cS2('ERBand_llh')\n", "cS1_ERBand = cS1('ERBand_llh')\n", "\n", "@partial(jit, static_argnums=(1, ))\n", "def simulate(key, batch_size, parameters):\n", " key, x, y, z = PositionSpectra_ERBand(key, parameters, batch_size)\n", " key, energy = UniformEnergySpectra_ERBand(key, parameters, batch_size)\n", " key, recomb_std = RecombFluct_ERBand(key, parameters, energy)\n", " key, recomb_mean = mTI_ERBand(key, parameters, energy)\n", " key, num_quanta = Quanta_ERBand(key, parameters, energy)\n", " key, recomb = TrueRecombER_ERBand(key, parameters, recomb_mean, recomb_std)\n", " key, num_ion = IonizationER_ERBand(key, parameters, num_quanta)\n", " key, drift_survive_prob = DriftLoss_ERBand(key, parameters, z)\n", " key, num_photon, num_electron = RecombinationER_ERBand(key, parameters, num_quanta, num_ion, recomb)\n", " key, num_electron_drifted = ElectronDrifted_ERBand(key, parameters, num_electron, drift_survive_prob)\n", " key, rec_x, rec_y, rec_z, rec_r = PositionRecon_ERBand(key, parameters, x, y, z, num_electron_drifted)\n", " key, s2_correction = S2Correction_ERBand(key, parameters, rec_x, rec_y)\n", " key, num_s2_pe = S2PE_ERBand(key, parameters, num_electron_drifted, s2_correction)\n", " key, s2_area = S2_ERBand(key, parameters, num_s2_pe)\n", " key, s1_correction = S1Correction_ERBand(key, parameters, rec_x, rec_y, rec_z)\n", " key, num_s1_phd = PhotonDetection_ERBand(key, parameters, num_photon, s1_correction)\n", " key, num_s1_pe = S1PE_ERBand(key, parameters, num_s1_phd)\n", " key, s1_area = S1_ERBand(key, parameters, num_s1_phd, num_s1_pe)\n", " key, cut_acc_s2 = S2CutAccept_ERBand(key, parameters, s2_area)\n", " key, cut_acc_s1 = S1CutAccept_ERBand(key, parameters, s1_area)\n", " key, acc_s1_recon_eff = S1ReconEff_ERBand(key, parameters, num_s1_phd)\n", " key, acc_s2_threshold = S2Threshold_ERBand(key, parameters, s2_area)\n", " key, eff = Eff_ERBand(key, parameters, acc_s2_threshold, acc_s1_recon_eff, cut_acc_s1, cut_acc_s2)\n", " key, cs2 = cS2_ERBand(key, parameters, s2_area, s2_correction, drift_survive_prob)\n", " key, cs1 = cS1_ERBand(key, parameters, s1_area, s1_correction)\n", " return key, [cs1, cs2, eff]\n", "\n" ] } ], "source": [ "# For reference, this is the compiled code, the function is stored in appletree.share._cached_functions\n", "print(er.code)" ] }, { "cell_type": "markdown", "id": "e347b267-d70c-4fc6-8619-f4f1252ec44a", "metadata": {}, "source": [ "### ComponentFixed" ] }, { "cell_type": "code", "execution_count": 7, "id": "48d4aaef-30f0-48bd-b778-11f93a1eb655", "metadata": {}, "outputs": [], "source": [ "# Initialize component, not based on simulation, but the input template\n", "ac = apt.AC(bins=[bins_cs1, bins_cs2], bins_type=\"irreg\", file_name=\"AC_Rn220.pkl\")\n", "ac.rate_name = \"ac_rate\"\n", "\n", "# Do not forget to deduce\n", "ac.deduce()\n", "\n", "# Of course these initialization process looks messy, but we will do the initialization automatically in context" ] }, { "cell_type": "markdown", "id": "18bd657b-9b02-4960-9a6f-5bed457a1c2d", "metadata": {}, "source": [ "## Load parameters" ] }, { "cell_type": "code", "execution_count": 8, "id": "8a3bdb6f-89f8-4c50-b94e-faf9675c3df8", "metadata": {}, "outputs": [], "source": [ "# Of course we have to load parameters(and their priors) in simulation\n", "\n", "par_manager = apt.Parameter(get_file_path(\"er.json\"))\n", "par_manager.sample_init()\n", "parameters = par_manager.get_all_parameter()" ] }, { "cell_type": "markdown", "id": "d80c7208-fbf3-4ddd-b16c-2b891c282fcd", "metadata": {}, "source": [ "## Simulation" ] }, { "cell_type": "code", "execution_count": 9, "id": "62d9f11a-ee5e-49f9-85ae-a3ebaab510c6", "metadata": {}, "outputs": [], "source": [ "# Really do the simulation\n", "\n", "batch_size = int(1e6)\n", "key = apt.randgen.get_key(seed=137)\n", "\n", "key, (cs1, cs2, eff) = er.simulate(key, batch_size, parameters)" ] }, { "cell_type": "code", "execution_count": 10, "id": "b2ddc2dc-543d-47b3-8cd3-e508bce4328b", "metadata": {}, "outputs": [ { "data": { "image/png": "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ieWyd3qD5If+TH0YIlNy4CPksXbu3Ilf/epXcV+//vrr8dBDDw34uAMqBnj//fdjzZo1Pctf//rXMXLkSJxwwgl46623BjyYoVRXV4cdO3agoaEh00MhIiKScix4PGrUKGzfvj3u69u3b08pkDygtg4rV67EY489BgB48cUX8eKLL+K5557Dr371K9x222144YUXBjwgIiIiyi0LFy7Ed77zHXz44Yc477wjV9pee+013H///aivrx/wcQc0yWlsbMT48eMBAM888wy+/vWv4ytf+QomTpyImTNnDngwREREhJzoXRXrrrvuQlFREX74wx/izjvvBACMHTsW//zP/4ybbrppwMcd0O2qESNGYO/evQCAdevWoaamBsCRasds6UBERJSalD9ZlYaKyUPJZrPhlltuwaefforW1la0trbi008/xeLFi1MqMjygKzlXXXUV/uZv/gaTJ0/GoUOHUFtbCwB48803cfLJJw94MFbVcoo6wUWy2mmprzclN8Eng8MTCprFsscm9z09X5bu1OHUEpXA01ViK1SXcF011qXe5UV2VXVW/RB4bapTtT1xV+921Xnbo6r26grHuuKw7uTtUK9PB5GTBYt1PVIdHG5Tnaf1+WoxZHhVd+reG+6t8luk0pW6y3dAdcVujsqeLF1G4oDjnm7Z7V53kNddvXXFYe3zLhmEznPIc384JIPQEVWxOBBSXclVcFgHf3XQ16FC7d1h1XVdVRFu65Dnz2FXrz+sukUfltubqsqw3as6znepoLXqTB219/0/hF1VAHZ0yGO5VQVfT4uq/qx+80bd6n0uv1Vw75PrdUP3jgq5XPyBHHtnmQphJ/lb1HtYhcTzE/8n41JBYU+L/F4lCwZHvPL4zi75/HlPy+AwZk2R2x+UvwfbzigTy/rDI6U//4NYftF4ouffF1z9oHzuxt4UdiSiEtk0KIqKipJvdJwGNMn50Y9+hEmTJuGTTz7BAw880NNQ6/PPP0ddXV3aBkdERJSTcux21WAZ0CTnwQcfRHl5Of7hH/5BfL24uBhNTU197EVERETHhZOctBhQJuc///M/cdppp8V9/fTTT8fKlStTHhQRERFRqgb86aoxY8bEfX3UqFH4/PPPUx5Upun7ucYkmb2YXCGvVo0raOn594Q8mcEpU8X7Sp2yq7juAu5VmZ0Se+IqWjpzU2yXN+uTZVxc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F9dccw0A8Nz1w/Gcq8bGRowePVqsdzqdKC0t5fnMsJyc5NDA1NXV4Z133sGrr76a6aEMC3v37sXixYvx4osvDtuOwplkGAamT5+O73//+wCAs88+G++88w5WrlyJ+fPnZ3h01varX/0Kjz32GP7nf/4Hp59+OrZv346bb74ZY8eO5bmjnJKTt6uGazfVTFq0aBGeeeYZvPzyyxg3blzP1ysqKhAKhdDS0iK257k8cjvqwIEDOOecc+B0OuF0OvHKK6/g4YcfhtPpRHl5Oc9dAmPGjEFVVZX42p/92Z/hk08+AYCec8Sf43i33XYblixZgr/+67/GmWeeib/927/FLbfcguXLlwPgueuP4zlXFRUVOHDggFgfiUTQ3NzM85lhOTnJGa7dVDPBNE0sWrQITz/9NF566SVMmjRJrJ82bRpcLpc4l7t27cInn3yS8+dyzpw5ePvtt7F9+/aex/Tp03HNNdf0/Jvnrm/nn39+XLmC9957DxMmTAAATJo0CRUVFeL8BQIBvPHGGzl//jo6OmC3y1/vDocDhmEA4Lnrj+M5V7NmzUJLSwu2bt3as81LL70EwzAs3dcpJ2Q6+Zwpjz/+uOnxeMzVq1ebO3bsML/zne+YJSUlZmNjY6aHZil///d/bxYXF5sbNmwwP//8855HR0dHzzbf/e53zcrKSvOll14yt2zZYs6aNcucNWtWBkdtXbGfrjJNnrtENm/ebDqdTvPee+8133//ffOxxx4z8/Pzzf/3//5fzzb33XefWVJSYv761782//jHP5pf+9rXcvZj0LHmz59vnnDCCT0fIX/qqafMsrIy8/bbb+/ZhueuV1tbm/nmm2+ab775pgnAXLFihfnmm2+aH3/8sWmax3euLrnkEvPss88233jjDfPVV181J0+ezI+QW0DOTnJM0zR//OMfm5WVlabb7TZnzJhhvv7665kekuUAOObjkUce6dmms7PTvOGGG8wRI0aY+fn55pVXXml+/vnnmRu0helJDs9dYr/97W/NM844w/R4POZpp51m/vSnPxXrDcMw77rrLrO8vNz0eDzmnDlzzF27dmVotNYRCATMxYsXm5WVlabX6zVPPPFE83vf+57Z3d3dsw3PXa+XX375mL/n5s+fb5rm8Z2rQ4cOmd/4xjfMwsJC0+fzmQsWLDDb2toy8GooFruQExERUVbKyUwOERERZT9OcoiIiCgrcZJDREREWYmTHCIiIspKnOQQERFRVuIkh4iIiLISJzlERESUlTjJISIioqzESQ4RERFlJU5yiOi4/PSnP8Xs2bPh8/lgs9niuqcTEVkNJzlEdFw6OjpwySWX4B//8R8zPRQiouPCSQ5RjjEMAw888ABOPvlkeDweVFZW4t5770UoFMKiRYswZswYeL1eTJgwAcuXL+/Z7+abb8aSJUtw7rnnZnD0RETHz5npARDR0Lrzzjvxs5/9DD/60Y9wwQUX4PPPP8e7776Lhx9+GL/5zW/wq1/9CpWVldi7dy/27t2b6eESEQ0Yu5AT5ZC2tjaMGjUK//7v/45vf/vbYt1NN92EP/3pT/jd734Hm83W5zE2bNiAiy++GIcPH0ZJSckgj5iIaOB4u4ooh+zcuRPd3d2YM2dO3LrrrrsO27dvx6mnnoqbbroJL7zwQgZGSESUPpzkEOWQvLy8Ptedc8452LNnD/71X/8VnZ2d+PrXv46//Mu/HMLRERGlFyc5RDlk8uTJyMvLw/r164+53ufzYd68efjZz36GNWvW4Mknn0Rzc/MQj5KIKD0YPCbKIV6vF3fccQduv/12uN1unH/++WhqasKf/vQntLa2YsyYMTj77LNht9vxxBNPoKKioid309jYiMbGRuzevRsA8Pbbb6OoqAiVlZUoLS3N4KsiIjo2TnKIcsxdd90Fp9OJpUuXYt++fRgzZgy++93voqysDA888ADef/99OBwOVFdX4//+7/9gtx+54Lty5UrcfffdPce58MILAQCPPPIIrrvuuky8FCKihPjpKiIiIspKzOQQERFRVuIkh4iIiLISJzlERESUlTjJISIioqzESQ4RERFlJU5yiIiIKCtxkkNERERZiZMcIiIiykqc5BAREVFW4iSHiIiIshInOURERJSV/j+aA1PevsX7FgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Just to show the histogram\n", "\n", "h, be = jnp.histogramdd(\n", " jnp.asarray([cs1, cs2]).T,\n", " bins=(jnp.linspace(0, 100, 101), jnp.logspace(2.5, 4.1, 81)),\n", " weights=eff,\n", ")\n", "\n", "h = mh.Histdd.from_histogram(np.array(h), be, axis_names=[\"cs1\", \"cs2\"])\n", "h.plot(norm=LogNorm())\n", "plt.yscale(\"log\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "61cf40ac-1b60-49b4-825d-49967ad8ade6", "metadata": {}, "source": [ "## Simulation and make equiprob hist" ] }, { "cell_type": "code", "execution_count": 11, "id": "95034a59-ed46-4323-bc98-6292221155b5", "metadata": {}, "outputs": [], "source": [ "# Actually `simulate_hist` is just a wrapper of `simulate`\n", "\n", "batch_size = int(1e6)\n", "key = apt.randgen.get_key(seed=137)\n", "key, h = er.simulate_hist(key, batch_size, parameters)" ] }, { "cell_type": "code", "execution_count": 12, "id": "035e5c1a-6585-4c1a-9f78-df6c6cb1dd2b", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "apt.utils.plot_irreg_histogram_2d(bins_cs1, bins_cs2, h, density=False)\n", "plt.yscale(\"log\")\n", "plt.ylim(5e2, 1e4)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 13, "id": "71611698-2469-44a7-b8ca-b7bdcf3dd4f2", "metadata": {}, "outputs": [], "source": [ "h = ac.simulate_hist(parameters)" ] }, { "cell_type": "code", "execution_count": 14, "id": "7339256c-9cd7-4206-801a-9e956bbca3fa", "metadata": {}, "outputs": [ { "data": { "image/png": "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MrYJRAKBAIYNG4Zx48ZZ3RUiIqJmXGj8UtX76pzjITYKRPx+Pw4dOoTi4mKru0JERNSMWSXeOxvbBCJERETkPExWJSIiMkEkrJqxIwYiREREJmgMRIysmumcGIgQERGZgCMi+jBHhIiIiCzDEREiIiITsKCZPgxEiIiITOA2ODXTWacoOuvnJiIiogjAEREiIiITcGpGHwYiREREJuCqGX04NUNERESW4YgIERGRCTgioo9tApFAIIBAIIBgMGh1V4iIiJphjog+tpma4e67REREzmObEREiIqJI5oHBqRlhWldshYEIERGRCdwGp2bcBq61MwYiREREJjCcrNo54xD75IgQERGR83BEhIiIyASGV81waoaIiIj04tSMPpyaISIiIstwRISIiMgEnJrRh4EIERGRCdwul6EluJ11+S6nZoiIiMgyHBEhIiIygcvjgsutf1TD1UlHRBiIEBERmcDtccFtIBDh1AwRERGRYhwRISIiMoPHDZfbwN/3rs656x0DESIiIhO43C64DFQlc6FzTs3YJhAJBAIIBAIIBoNWd4WIiKgZt8cFt4FAxN1JAxHb5Ij4/X4cOnQIxcXFVneFiIjIcmvXrsXIkSPh8/ng8/mQlpaGt956q9XzN27cCJfLFfbq1q2bwh63zDYjIkRERJHM5TaWI+ISHcsRGTBgAFasWIEhQ4ZACIEXX3wRM2fOxP79+zF8+PAWr/H5fDh8+PA/24yAlToMRIiIiEygempmxowZYe+XL1+OtWvX4p133mk1EHG5XEhISNDdRxlsMzVDRERELQsGg9i0aRPOnTuHtLS0Vs+rra3FwIEDkZSUhJkzZ+LDDz9U2MuWcUSEiIjIBC6POatmampqwo57vV54vd4Wrzlw4ADS0tJQV1eHHj16YMuWLRg2bFiL5w4dOhTr16/HyJEjUV1djd/+9rdIT0/Hhx9+iAEDBujut1EcESEiIjJBYyDiNvBqDESSkpIQExMTeuXk5LTa5tChQ1FSUoJ3330Xv/jFL5CZmYlDhw61eG5aWhoyMjIwatQoTJo0CZs3b8Y3vvENPPPMM1KeR3txRISIiCiClJWVwefzhd63NhoCAFFRURg8eDAAYMyYMSguLsaaNWvaFVx07doVo0ePxtGjR4132gAGIkRERCYwK1m1aTmuHpqmob6+vl3nBoNBHDhwALfffruutszC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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "apt.utils.plot_irreg_histogram_2d(bins_cs1, bins_cs2, h, density=False)\n", "plt.yscale(\"log\")\n", "plt.ylim(5e2, 1e4)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "dd131c74-69e7-4946-b5c7-6dc651a1fdef", "metadata": {}, "source": [ "## Speed test" ] }, { "cell_type": "code", "execution_count": 15, "id": "ef8dc578-f677-49ca-86c6-aecbbd7d093c", "metadata": {}, "outputs": [], "source": [ "@apt.utils.timeit\n", "def test(key, batch_size, parameters):\n", " return er.simulate_hist(key, batch_size, parameters)" ] }, { "cell_type": "code", "execution_count": 16, "id": "0679c7af-66dc-4bdd-8810-1469aa05dac5", "metadata": {}, "outputs": [], "source": [ "@apt.utils.timeit\n", "def benchmark():\n", " key = apt.randgen.get_key()\n", " for _ in range(100):\n", " key, _ = test(key, int(1e6), parameters)" ] }, { "cell_type": "code", "execution_count": 17, "id": "317a32ef-9860-4113-882c-de5ff0941285", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Function starts.\n", " Function starts.\n", " Function ends! Time cost = 8.48 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.53 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.02 msec.\n", " Function starts.\n", " Function ends! Time cost = 7.70 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.23 msec.\n", " Function starts.\n", " Function ends! Time cost = 7.32 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.84 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.98 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.15 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.27 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.68 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.86 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.78 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.54 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.88 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.76 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.54 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.63 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.32 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.68 msec.\n", " Function starts.\n", " Function ends! Time cost = 7.80 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.42 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.34 msec.\n", " Function starts.\n", " Function ends! Time cost = 7.96 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.27 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.65 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.82 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.28 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.91 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.11 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.19 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.61 msec.\n", " Function starts.\n", " Function ends! Time cost = 7.04 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.81 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.02 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.60 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.13 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.87 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.91 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.58 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.89 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.54 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.76 msec.\n", " Function starts.\n", " Function ends! Time cost = 7.29 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.63 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.72 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.47 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.44 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.00 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.77 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.67 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.90 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.52 msec.\n", " Function starts.\n", " Function ends! Time cost = 7.54 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.80 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.01 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.54 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.54 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.44 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.75 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.30 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.66 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.84 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.30 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.73 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.04 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.72 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.51 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.50 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.19 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.97 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.05 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.44 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.41 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.43 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.71 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.42 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.94 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.54 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.88 msec.\n", " Function starts.\n", " Function ends! Time cost = 7.84 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.60 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.21 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.22 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.73 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.78 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.65 msec.\n", " Function starts.\n", " Function ends! Time cost = 3.48 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.77 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.53 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.89 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.75 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.65 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.67 msec.\n", " Function starts.\n", " Function ends! Time cost = 6.39 msec.\n", " Function starts.\n", " Function ends! Time cost = 8.08 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.54 msec.\n", " Function starts.\n", " Function ends! Time cost = 9.05 msec.\n", " Function starts.\n", " Function ends! Time cost = 5.62 msec.\n", " Function starts.\n", " Function ends! Time cost = 4.42 msec.\n", " Function ends! Time cost = 582.11 msec.\n" ] } ], "source": [ "benchmark()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.16" } }, "nbformat": 4, "nbformat_minor": 5 }