From cfbd54be7a85da626262558d2eeb1c2d95f1356e Mon Sep 17 00:00:00 2001
From: Palash Tyagi <23239946+Magnus167@users.noreply.github.com>
Date: Sun, 13 Apr 2025 11:16:03 +0100
Subject: [PATCH] add notebook with some benchmarks
---
notebooks/funcwise/bdate_range_util.ipynb | 360 ++++++++++++++++++++++
1 file changed, 360 insertions(+)
create mode 100644 notebooks/funcwise/bdate_range_util.ipynb
diff --git a/notebooks/funcwise/bdate_range_util.ipynb b/notebooks/funcwise/bdate_range_util.ipynb
new file mode 100644
index 0000000..d1a6a0a
--- /dev/null
+++ b/notebooks/funcwise/bdate_range_util.ipynb
@@ -0,0 +1,360 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# ! uv pip install E:\\Work\\ruzt\\msyrs --upgrade"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Import Python packages\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import macrosynergy\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import polars as pl\n",
+ "import os\n",
+ "import time\n",
+ "\n",
+ "from macrosynergy.panel import view_timelines\n",
+ "from macrosynergy.management.types import QuantamentalDataFrame\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Import Python bindings - `msyrs`\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import msyrs"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " bdates | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 2000-01-03 | \n",
+ " 2000-01-03 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2000-01-10 | \n",
+ " 2000-01-10 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 2000-01-17 | \n",
+ " 2000-01-17 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 2000-01-24 | \n",
+ " 2000-01-24 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 2000-01-31 | \n",
+ " 2000-01-31 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 1056 | \n",
+ " 2020-03-30 | \n",
+ " 2020-03-30 | \n",
+ "
\n",
+ " \n",
+ " 1057 | \n",
+ " 2020-04-06 | \n",
+ " 2020-04-06 | \n",
+ "
\n",
+ " \n",
+ " 1058 | \n",
+ " 2020-04-13 | \n",
+ " 2020-04-13 | \n",
+ "
\n",
+ " \n",
+ " 1059 | \n",
+ " 2020-04-20 | \n",
+ " 2020-04-20 | \n",
+ "
\n",
+ " \n",
+ " 1060 | \n",
+ " 2020-04-27 | \n",
+ " 2020-04-27 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1061 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " bdates 0\n",
+ "0 2000-01-03 2000-01-03\n",
+ "1 2000-01-10 2000-01-10\n",
+ "2 2000-01-17 2000-01-17\n",
+ "3 2000-01-24 2000-01-24\n",
+ "4 2000-01-31 2000-01-31\n",
+ "... ... ...\n",
+ "1056 2020-03-30 2020-03-30\n",
+ "1057 2020-04-06 2020-04-06\n",
+ "1058 2020-04-13 2020-04-13\n",
+ "1059 2020-04-20 2020-04-20\n",
+ "1060 2020-04-27 2020-04-27\n",
+ "\n",
+ "[1061 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "x = msyrs.utils.get_bdates_series_default_opt(start_date='2000-01-01', end_date='2020-05-01', freq='W').to_pandas()\n",
+ "y = pd.Series(pd.bdate_range(start='2000-01-01', end='2020-05-01', freq='W-MON'))\n",
+ "\n",
+ "pd.concat([x, y], axis=1)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Results for M\t & \tBMS\t are exactly the same\n",
+ "Results for Q\t & \tBQS\t are exactly the same\n",
+ "Results for W\t & \tW-MON\t are exactly the same\n",
+ "Results for WF\t & \tW-FRI\t are exactly the same\n"
+ ]
+ }
+ ],
+ "source": [
+ "for rs_freq, pd_freq in [('M', 'BMS'), ('Q', 'BQS'), ('W', 'W-MON'), ('WF', 'W-FRI')]:\n",
+ "\n",
+ "\n",
+ " x = msyrs.utils.get_bdates_series_default_opt(start_date='2000-01-01', end_date='2020-05-01', freq=rs_freq).to_pandas()\n",
+ " y = pd.Series(pd.bdate_range(start='2000-01-01', end='2020-05-01', freq=pd_freq))\n",
+ "\n",
+ " e = x == y\n",
+ " res = e.all()\n",
+ " non_matching_df = pd.concat([x[~e], y[~e]], axis=1)\n",
+ " assert res, f\"Results for {rs_freq}\\t and \\t{pd_freq}\\t are not the same\\n{non_matching_df}\"\n",
+ " print(f\"Results for {rs_freq}\\t & \\t{pd_freq}\\t are exactly the same\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "23.5 μs ± 1.02 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n",
+ "67.4 μs ± 979 ns per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n",
+ "1.97 ms ± 57.3 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n",
+ "4.65 ms ± 170 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
+ "28.3 ms ± 898 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
+ "93.8 ms ± 2.02 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='2000-01-01', end_date='2020-05-01', freq='D')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='1971-01-01', end_date='2040-05-01', freq='D')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='2000-01-01', end_date='2020-05-01', freq='D')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='1971-01-01', end_date='2040-05-01', freq='D')\n",
+ "%timeit pd.bdate_range(start='2000-01-01', end='2020-05-01', freq='B')\n",
+ "%timeit pd.bdate_range(start='1971-01-01', end='2040-05-01', freq='B')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "7.95 μs ± 146 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n",
+ "17.9 μs ± 108 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n",
+ "1.73 ms ± 20.8 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n",
+ "4 ms ± 69.3 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
+ "5.69 ms ± 139 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
+ "19.1 ms ± 268 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='2000-01-01', end_date='2020-05-01', freq='WF')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='1971-01-01', end_date='2040-05-01', freq='WF')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='2000-01-01', end_date='2020-05-01', freq='WF')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='1971-01-01', end_date='2040-05-01', freq='WF')\n",
+ "%timeit pd.bdate_range(start='2000-01-01', end='2020-05-01', freq='W-FRI')\n",
+ "%timeit pd.bdate_range(start='1971-01-01', end='2040-05-01', freq='W-FRI')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "6.9 μs ± 126 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n",
+ "13.1 μs ± 93.3 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n",
+ "1.73 ms ± 29.3 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n",
+ "4.2 ms ± 81.5 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
+ "931 μs ± 14.2 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n",
+ "3.05 ms ± 47.5 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='2000-01-01', end_date='2020-05-01', freq='ME')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='1971-01-01', end_date='2040-05-01', freq='ME')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='2000-01-01', end_date='2020-05-01', freq='ME')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='1971-01-01', end_date='2040-05-01', freq='ME')\n",
+ "%timeit pd.bdate_range(start='2000-01-01', end='2020-05-01', freq='BME')\n",
+ "%timeit pd.bdate_range(start='1971-01-01', end='2040-05-01', freq='BME')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "3.65 μs ± 69.1 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n",
+ "4.78 μs ± 38.7 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n",
+ "1.73 ms ± 122 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n",
+ "4.16 ms ± 286 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
+ "340 μs ± 11.3 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n",
+ "1.1 ms ± 11.5 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='2000-01-01', end_date='2020-05-01', freq='Q')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='1971-01-01', end_date='2040-05-01', freq='Q')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='2000-01-01', end_date='2020-05-01', freq='Q')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='1971-01-01', end_date='2040-05-01', freq='Q')\n",
+ "%timeit pd.bdate_range(start='2000-01-01', end='2020-05-01', freq='BQS')\n",
+ "%timeit pd.bdate_range(start='1971-01-01', end='2040-05-01', freq='BQS')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "3.21 μs ± 83.4 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n",
+ "3.66 μs ± 198 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n",
+ "2.67 ms ± 459 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
+ "3.71 ms ± 143 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
+ "98.7 μs ± 1.47 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)\n",
+ "289 μs ± 15.3 μs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='2000-01-01', end_date='2020-05-01', freq='YE')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_opt(start_date='1971-01-01', end_date='2040-05-01', freq='YE')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='2000-01-01', end_date='2020-05-01', freq='YE')\n",
+ "%timeit msyrs.utils.get_bdates_series_default_pl(start_date='1971-01-01', end_date='2040-05-01', freq='YE')\n",
+ "%timeit pd.bdate_range(start='2000-01-01', end='2020-05-01', freq='BYE')\n",
+ "%timeit pd.bdate_range(start='1971-01-01', end='2040-05-01', freq='BYE')"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv",
+ "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.12.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}