From ed3e337417b72a56e759dca59d73bfa7b9969cb3 Mon Sep 17 00:00:00 2001 From: jdebacker Date: Wed, 6 Mar 2024 10:07:20 -0500 Subject: [PATCH] update example notebook --- docs/book/content/examples/PSL_demo.ipynb | 434 +++++++--------------- 1 file changed, 126 insertions(+), 308 deletions(-) diff --git a/docs/book/content/examples/PSL_demo.ipynb b/docs/book/content/examples/PSL_demo.ipynb index 2ca4ff2b..a5131f8f 100644 --- a/docs/book/content/examples/PSL_demo.ipynb +++ b/docs/book/content/examples/PSL_demo.ipynb @@ -20,55 +20,25 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: cost-of-capital-calculator in /Users/jason.debacker/repos/CCC (1.2.11)\n", - "Requirement already satisfied: taxcalc in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from cost-of-capital-calculator) (3.4.1)\n", - "Requirement already satisfied: psutil in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from cost-of-capital-calculator) (5.9.5)\n", - "Requirement already satisfied: pandas in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from cost-of-capital-calculator) (2.1.0)\n", - "Requirement already satisfied: bokeh in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from cost-of-capital-calculator) (3.2.2)\n", - "Requirement already satisfied: numpy in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from cost-of-capital-calculator) (1.24.4)\n", - "Requirement already satisfied: paramtools in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from cost-of-capital-calculator) (0.0.0)\n", - "Requirement already satisfied: Jinja2>=2.9 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from bokeh->cost-of-capital-calculator) (3.1.2)\n", - "Requirement already satisfied: contourpy>=1 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from bokeh->cost-of-capital-calculator) (1.1.0)\n", - "Requirement already satisfied: packaging>=16.8 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from bokeh->cost-of-capital-calculator) (23.1)\n", - "Requirement already satisfied: pillow>=7.1.0 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from bokeh->cost-of-capital-calculator) (10.0.0)\n", - "Requirement already satisfied: PyYAML>=3.10 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from bokeh->cost-of-capital-calculator) (6.0.1)\n", - "Requirement already satisfied: tornado>=5.1 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from bokeh->cost-of-capital-calculator) (6.3.3)\n", - "Requirement already satisfied: xyzservices>=2021.09.1 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from bokeh->cost-of-capital-calculator) (2023.7.0)\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from pandas->cost-of-capital-calculator) (2.8.2)\n", - "Requirement already satisfied: pytz>=2020.1 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from pandas->cost-of-capital-calculator) (2023.3)\n", - "Requirement already satisfied: tzdata>=2022.1 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from pandas->cost-of-capital-calculator) (2023.3)\n", - "Requirement already satisfied: marshmallow>=3.0.0 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from paramtools->cost-of-capital-calculator) (3.20.1)\n", - "Requirement already satisfied: fsspec in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from paramtools->cost-of-capital-calculator) (2023.9.0)\n", - "Requirement already satisfied: sortedcontainers in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from paramtools->cost-of-capital-calculator) (2.4.0)\n", - "Requirement already satisfied: setuptools in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from taxcalc->cost-of-capital-calculator) (68.1.2)\n", - "Requirement already satisfied: numba in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from taxcalc->cost-of-capital-calculator) (0.57.1)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from Jinja2>=2.9->bokeh->cost-of-capital-calculator) (2.1.3)\n", - "Requirement already satisfied: six>=1.5 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from python-dateutil>=2.8.2->pandas->cost-of-capital-calculator) (1.16.0)\n", - "Requirement already satisfied: llvmlite<0.41,>=0.40.0dev0 in /Users/jason.debacker/anaconda3/envs/ccc-dev/lib/python3.11/site-packages (from numba->taxcalc->cost-of-capital-calculator) (0.40.1)\n" - ] - } - ], + "outputs": [], "source": [ "# To install ccc package (if not already):\n", - "!pip install cost-of-capital-calculator" + "import sys\n", + "if 'ccc' not in sys.modules:\n", + " !pip install cost-of-capital-calculator" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "\n", "
\n", " \n", - " Loading BokehJS ...\n", + " Loading BokehJS ...\n", "
\n" ] }, @@ -87,7 +57,7 @@ }, { "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"f2d654c3-2cb4-472d-bcc4-fd3f592c4567\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.2.2.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"f2d654c3-2cb4-472d-bcc4-fd3f592c4567\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"de96cb22-398b-407f-b358-b6c4d9379778\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.4.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.3.4.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"de96cb22-398b-407f-b358-b6c4d9379778\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", "application/vnd.bokehjs_load.v0+json": "" }, "metadata": {}, @@ -119,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -274,7 +244,7 @@ "4 Aerospace products and parts manufacturing 0.22 " ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -303,7 +273,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -311,18 +281,18 @@ "output_type": "stream", "text": [ "Calculator initial year = 2014\n", - "Calculator year = 2022\n", - "year: 2022\n", - "{'tau_pt': array([0.20504301]), 'tau_div': array([0.17599343]), 'tau_int': array([0.31391843]), 'tau_scg': array([0.29663216]), 'tau_lcg': array([0.19356956]), 'tau_td': array([0.20818695]), 'tau_h': array([0.04203461])}\n" + "Calculator year = 2024\n", + "year: 2024\n", + "{'tau_pt': array([0.20147244]), 'tau_div': array([0.1723512]), 'tau_int': array([0.31217545]), 'tau_scg': array([0.28524757]), 'tau_lcg': array([0.184897]), 'tau_td': array([0.204116]), 'tau_h': array([0.03463544])}\n" ] }, { "data": { "text/plain": [ - "{'c': array([0.21]), 'pt': array([0.20504301])}" + "{'c': array([0.21]), 'pt': array([0.20147244])}" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -337,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -354,7 +324,7 @@ " ('year', 2020)])" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -379,7 +349,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -398,7 +368,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -569,7 +539,7 @@ "18 Other services, except government 0.343467 0.656533" ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -592,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -615,67 +585,9 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deprec_df value asset_name BEA_code \\\n", - "0 {'life': 5.0, 'method': 'DB 200%'} Mainframes EP1A \n", - "1 {'life': 5.0, 'method': 'DB 200%'} PCs EP1B \n", - "2 {'life': 5.0, 'method': 'DB 200%'} DASDs EP1C \n", - "3 {'life': 5.0, 'method': 'DB 200%'} Printers EP1D \n", - "4 {'life': 5.0, 'method': 'DB 200%'} Terminals EP1E \n", - "\n", - " minor_asset_group major_asset_group ADS_life GDS_life system year \n", - "0 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "1 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "2 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "3 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "4 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "deprec_df 2 asset_name BEA_code minor_asset_group major_asset_group ADS_life \\\n", - "0 Mainframes EP1A Computers and Software Equipment 5.0 \n", - "1 PCs EP1B Computers and Software Equipment 5.0 \n", - "2 DASDs EP1C Computers and Software Equipment 5.0 \n", - "3 Printers EP1D Computers and Software Equipment 5.0 \n", - "4 Terminals EP1E Computers and Software Equipment 5.0 \n", - "\n", - " GDS_life system year life method \n", - "0 5.0 GDS 2020 5.0 DB 200% \n", - "1 5.0 GDS 2020 5.0 DB 200% \n", - "2 5.0 GDS 2020 5.0 DB 200% \n", - "3 5.0 GDS 2020 5.0 DB 200% \n", - "4 5.0 GDS 2020 5.0 DB 200% \n", - "deprec_df value asset_name BEA_code \\\n", - "0 {'life': 5.0, 'method': 'DB 200%'} Mainframes EP1A \n", - "1 {'life': 5.0, 'method': 'DB 200%'} PCs EP1B \n", - "2 {'life': 5.0, 'method': 'DB 200%'} DASDs EP1C \n", - "3 {'life': 5.0, 'method': 'DB 200%'} Printers EP1D \n", - "4 {'life': 5.0, 'method': 'DB 200%'} Terminals EP1E \n", - "\n", - " minor_asset_group major_asset_group ADS_life GDS_life system year \n", - "0 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "1 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "2 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "3 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "4 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "deprec_df 2 asset_name BEA_code minor_asset_group major_asset_group ADS_life \\\n", - "0 Mainframes EP1A Computers and Software Equipment 5.0 \n", - "1 PCs EP1B Computers and Software Equipment 5.0 \n", - "2 DASDs EP1C Computers and Software Equipment 5.0 \n", - "3 Printers EP1D Computers and Software Equipment 5.0 \n", - "4 Terminals EP1E Computers and Software Equipment 5.0 \n", - "\n", - " GDS_life system year life method \n", - "0 5.0 GDS 2020 5.0 DB 200% \n", - "1 5.0 GDS 2020 5.0 DB 200% \n", - "2 5.0 GDS 2020 5.0 DB 200% \n", - "3 5.0 GDS 2020 5.0 DB 200% \n", - "4 5.0 GDS 2020 5.0 DB 200% \n" - ] - }, { "data": { "text/html": [ @@ -707,51 +619,51 @@ " \n", " 0\n", " Overall\n", - " 17.639885\n", - " 25.524466\n", - " 7.884581\n", + " 18.563352\n", + " 24.710063\n", + " 6.146711\n", " \n", " \n", " 1\n", " Corporations\n", - " 17.755445\n", - " 28.320144\n", - " 10.564699\n", + " 19.197626\n", + " 27.536312\n", + " 8.338686\n", " \n", " \n", " 2\n", " Equity Financed\n", - " 20.651947\n", - " 34.567787\n", - " 13.915840\n", + " 22.052902\n", + " 34.270098\n", + " 12.217196\n", " \n", " \n", " 3\n", " Debt Financed\n", - " 6.970612\n", - " -1.988179\n", - " -8.958791\n", + " 8.933048\n", + " -5.186307\n", + " -14.119355\n", " \n", " \n", " 4\n", " Pass-Through Entities\n", - " 19.007441\n", - " 23.318798\n", - " 4.311357\n", + " 19.312399\n", + " 22.497415\n", + " 3.185016\n", " \n", " \n", " 5\n", " Equity Financed\n", - " 17.366140\n", - " 22.788235\n", - " 5.422095\n", + " 17.629037\n", + " 22.436954\n", + " 4.807917\n", " \n", " \n", " 6\n", " Debt Financed\n", - " 25.389258\n", - " 25.628631\n", - " 0.239374\n", + " 25.652332\n", + " 22.875706\n", + " -2.776626\n", " \n", " \n", "\n", @@ -768,34 +680,34 @@ "6 Debt Financed \n", "\n", " Marginal Effective Total Tax Rate Under Baseline Policy \\\n", - "0 17.639885 \n", - "1 17.755445 \n", - "2 20.651947 \n", - "3 6.970612 \n", - "4 19.007441 \n", - "5 17.366140 \n", - "6 25.389258 \n", + "0 18.563352 \n", + "1 19.197626 \n", + "2 22.052902 \n", + "3 8.933048 \n", + "4 19.312399 \n", + "5 17.629037 \n", + "6 25.652332 \n", "\n", " Marginal Effective Total Tax Rate Under Reform Policy \\\n", - "0 25.524466 \n", - "1 28.320144 \n", - "2 34.567787 \n", - "3 -1.988179 \n", - "4 23.318798 \n", - "5 22.788235 \n", - "6 25.628631 \n", + "0 24.710063 \n", + "1 27.536312 \n", + "2 34.270098 \n", + "3 -5.186307 \n", + "4 22.497415 \n", + "5 22.436954 \n", + "6 22.875706 \n", "\n", " Change from Baseline (pp) \n", - "0 7.884581 \n", - "1 10.564699 \n", - "2 13.915840 \n", - "3 -8.958791 \n", - "4 4.311357 \n", - "5 5.422095 \n", - "6 0.239374 " + "0 6.146711 \n", + "1 8.338686 \n", + "2 12.217196 \n", + "3 -14.119355 \n", + "4 3.185016 \n", + "5 4.807917 \n", + "6 -2.776626 " ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -814,67 +726,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "deprec_df value asset_name BEA_code \\\n", - "0 {'life': 5.0, 'method': 'DB 200%'} Mainframes EP1A \n", - "1 {'life': 5.0, 'method': 'DB 200%'} PCs EP1B \n", - "2 {'life': 5.0, 'method': 'DB 200%'} DASDs EP1C \n", - "3 {'life': 5.0, 'method': 'DB 200%'} Printers EP1D \n", - "4 {'life': 5.0, 'method': 'DB 200%'} Terminals EP1E \n", - "\n", - " minor_asset_group major_asset_group ADS_life GDS_life system year \n", - "0 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "1 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "2 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "3 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "4 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "deprec_df 2 asset_name BEA_code minor_asset_group major_asset_group ADS_life \\\n", - "0 Mainframes EP1A Computers and Software Equipment 5.0 \n", - "1 PCs EP1B Computers and Software Equipment 5.0 \n", - "2 DASDs EP1C Computers and Software Equipment 5.0 \n", - "3 Printers EP1D Computers and Software Equipment 5.0 \n", - "4 Terminals EP1E Computers and Software Equipment 5.0 \n", - "\n", - " GDS_life system year life method \n", - "0 5.0 GDS 2020 5.0 DB 200% \n", - "1 5.0 GDS 2020 5.0 DB 200% \n", - "2 5.0 GDS 2020 5.0 DB 200% \n", - "3 5.0 GDS 2020 5.0 DB 200% \n", - "4 5.0 GDS 2020 5.0 DB 200% \n", - "deprec_df value asset_name BEA_code \\\n", - "0 {'life': 5.0, 'method': 'DB 200%'} Mainframes EP1A \n", - "1 {'life': 5.0, 'method': 'DB 200%'} PCs EP1B \n", - "2 {'life': 5.0, 'method': 'DB 200%'} DASDs EP1C \n", - "3 {'life': 5.0, 'method': 'DB 200%'} Printers EP1D \n", - "4 {'life': 5.0, 'method': 'DB 200%'} Terminals EP1E \n", - "\n", - " minor_asset_group major_asset_group ADS_life GDS_life system year \n", - "0 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "1 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "2 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "3 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "4 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "deprec_df 2 asset_name BEA_code minor_asset_group major_asset_group ADS_life \\\n", - "0 Mainframes EP1A Computers and Software Equipment 5.0 \n", - "1 PCs EP1B Computers and Software Equipment 5.0 \n", - "2 DASDs EP1C Computers and Software Equipment 5.0 \n", - "3 Printers EP1D Computers and Software Equipment 5.0 \n", - "4 Terminals EP1E Computers and Software Equipment 5.0 \n", - "\n", - " GDS_life system year life method \n", - "0 5.0 GDS 2020 5.0 DB 200% \n", - "1 5.0 GDS 2020 5.0 DB 200% \n", - "2 5.0 GDS 2020 5.0 DB 200% \n", - "3 5.0 GDS 2020 5.0 DB 200% \n", - "4 5.0 GDS 2020 5.0 DB 200% \n" - ] - }, { "data": { "text/html": [ @@ -906,51 +760,51 @@ " \n", " 0\n", " Overall\n", - " 5.651057\n", + " 5.777634\n", " 6.249323\n", - " 0.598266\n", + " 0.471689\n", " \n", " \n", " 1\n", " Corporations\n", - " 5.658997\n", + " 5.822987\n", " 6.493061\n", - " 0.834064\n", + " 0.670074\n", " \n", " \n", " 2\n", " Equity Financed\n", - " 6.571207\n", + " 6.719745\n", " 7.968742\n", - " 1.397536\n", + " 1.248997\n", " \n", " \n", " 3\n", " Debt Financed\n", - " 3.723999\n", + " 3.923541\n", " 3.396877\n", - " -0.327121\n", + " -0.526664\n", " \n", " \n", " 4\n", " Pass-Through Entities\n", - " 5.641592\n", + " 5.723574\n", " 5.958787\n", - " 0.317195\n", + " 0.235214\n", " \n", " \n", " 5\n", " Equity Financed\n", - " 6.309913\n", + " 6.358851\n", " 6.753018\n", - " 0.443105\n", + " 0.394167\n", " \n", " \n", " 6\n", " Debt Financed\n", - " 4.008120\n", + " 4.171191\n", " 4.021020\n", - " 0.012901\n", + " -0.150171\n", " \n", " \n", "\n", @@ -958,25 +812,25 @@ ], "text/plain": [ " Cost of Capital Under Baseline Policy \\\n", - "0 Overall 5.651057 \n", - "1 Corporations 5.658997 \n", - "2 Equity Financed 6.571207 \n", - "3 Debt Financed 3.723999 \n", - "4 Pass-Through Entities 5.641592 \n", - "5 Equity Financed 6.309913 \n", - "6 Debt Financed 4.008120 \n", + "0 Overall 5.777634 \n", + "1 Corporations 5.822987 \n", + "2 Equity Financed 6.719745 \n", + "3 Debt Financed 3.923541 \n", + "4 Pass-Through Entities 5.723574 \n", + "5 Equity Financed 6.358851 \n", + "6 Debt Financed 4.171191 \n", "\n", " Cost of Capital Under Reform Policy Change from Baseline (pp) \n", - "0 6.249323 0.598266 \n", - "1 6.493061 0.834064 \n", - "2 7.968742 1.397536 \n", - "3 3.396877 -0.327121 \n", - "4 5.958787 0.317195 \n", - "5 6.753018 0.443105 \n", - "6 4.021020 0.012901 " + "0 6.249323 0.471689 \n", + "1 6.493061 0.670074 \n", + "2 7.968742 1.248997 \n", + "3 3.396877 -0.526664 \n", + "4 5.958787 0.235214 \n", + "5 6.753018 0.394167 \n", + "6 4.021020 -0.150171 " ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -995,65 +849,29 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "deprec_df value asset_name BEA_code \\\n", - "0 {'life': 5.0, 'method': 'DB 200%'} Mainframes EP1A \n", - "1 {'life': 5.0, 'method': 'DB 200%'} PCs EP1B \n", - "2 {'life': 5.0, 'method': 'DB 200%'} DASDs EP1C \n", - "3 {'life': 5.0, 'method': 'DB 200%'} Printers EP1D \n", - "4 {'life': 5.0, 'method': 'DB 200%'} Terminals EP1E \n", - "\n", - " minor_asset_group major_asset_group ADS_life GDS_life system year \n", - "0 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "1 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "2 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "3 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "4 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "deprec_df 2 asset_name BEA_code minor_asset_group major_asset_group ADS_life \\\n", - "0 Mainframes EP1A Computers and Software Equipment 5.0 \n", - "1 PCs EP1B Computers and Software Equipment 5.0 \n", - "2 DASDs EP1C Computers and Software Equipment 5.0 \n", - "3 Printers EP1D Computers and Software Equipment 5.0 \n", - "4 Terminals EP1E Computers and Software Equipment 5.0 \n", - "\n", - " GDS_life system year life method \n", - "0 5.0 GDS 2020 5.0 DB 200% \n", - "1 5.0 GDS 2020 5.0 DB 200% \n", - "2 5.0 GDS 2020 5.0 DB 200% \n", - "3 5.0 GDS 2020 5.0 DB 200% \n", - "4 5.0 GDS 2020 5.0 DB 200% \n", - "deprec_df value asset_name BEA_code \\\n", - "0 {'life': 5.0, 'method': 'DB 200%'} Mainframes EP1A \n", - "1 {'life': 5.0, 'method': 'DB 200%'} PCs EP1B \n", - "2 {'life': 5.0, 'method': 'DB 200%'} DASDs EP1C \n", - "3 {'life': 5.0, 'method': 'DB 200%'} Printers EP1D \n", - "4 {'life': 5.0, 'method': 'DB 200%'} Terminals EP1E \n", - "\n", - " minor_asset_group major_asset_group ADS_life GDS_life system year \n", - "0 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "1 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "2 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "3 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "4 Computers and Software Equipment 5.0 5.0 GDS 2020 \n", - "deprec_df 2 asset_name BEA_code minor_asset_group major_asset_group ADS_life \\\n", - "0 Mainframes EP1A Computers and Software Equipment 5.0 \n", - "1 PCs EP1B Computers and Software Equipment 5.0 \n", - "2 DASDs EP1C Computers and Software Equipment 5.0 \n", - "3 Printers EP1D Computers and Software Equipment 5.0 \n", - "4 Terminals EP1E Computers and Software Equipment 5.0 \n", - "\n", - " GDS_life system year life method \n", - "0 5.0 GDS 2020 5.0 DB 200% \n", - "1 5.0 GDS 2020 5.0 DB 200% \n", - "2 5.0 GDS 2020 5.0 DB 200% \n", - "3 5.0 GDS 2020 5.0 DB 200% \n", - "4 5.0 GDS 2020 5.0 DB 200% \n" + "ename": "DeprecationWarning", + "evalue": "datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mDeprecationWarning\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[14], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Save these results to disk\u001b[39;00m\n\u001b[0;32m----> 2\u001b[0m \u001b[43mcalc1\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msummary_table\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcalc2\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_variable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mrho\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mexcel\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mcc_table.xlsx\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/repos/CCC/ccc/calculator.py:526\u001b[0m, in \u001b[0;36mCalculator.summary_table\u001b[0;34m(self, calc, output_variable, include_land, include_inventories, output_type, path)\u001b[0m\n\u001b[1;32m 524\u001b[0m table_df[VAR_DICT[output_variable] \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m Under Reform Policy\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m100\u001b[39m\n\u001b[1;32m 525\u001b[0m table_df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mChange from Baseline (pp)\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m100\u001b[39m\n\u001b[0;32m--> 526\u001b[0m table \u001b[38;5;241m=\u001b[39m \u001b[43msave_return_table\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtable_df\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_type\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 528\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m table\n", + "File \u001b[0;32m~/repos/CCC/ccc/utils.py:264\u001b[0m, in \u001b[0;36msave_return_table\u001b[0;34m(table_df, output_type, path, precision)\u001b[0m\n\u001b[1;32m 262\u001b[0m table_df\u001b[38;5;241m.\u001b[39mto_json(path_or_buf\u001b[38;5;241m=\u001b[39mpath, double_precision\u001b[38;5;241m=\u001b[39mprecision)\n\u001b[1;32m 263\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m output_type \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mexcel\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 264\u001b[0m \u001b[43mtable_df\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_excel\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 265\u001b[0m \u001b[43m \u001b[49m\u001b[43mexcel_writer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 266\u001b[0m \u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 267\u001b[0m \u001b[43m \u001b[49m\u001b[43mna_rep\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 268\u001b[0m \u001b[43m \u001b[49m\u001b[43mfloat_format\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m%\u001b[39;49m\u001b[38;5;124;43m.\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mprecision\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m0f\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 269\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 270\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 271\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPlease enter a valid output format\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/pandas/util/_decorators.py:333\u001b[0m, in \u001b[0;36mdeprecate_nonkeyword_arguments..decorate..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 327\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m>\u001b[39m num_allow_args:\n\u001b[1;32m 328\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m 329\u001b[0m msg\u001b[38;5;241m.\u001b[39mformat(arguments\u001b[38;5;241m=\u001b[39m_format_argument_list(allow_args)),\n\u001b[1;32m 330\u001b[0m \u001b[38;5;167;01mFutureWarning\u001b[39;00m,\n\u001b[1;32m 331\u001b[0m stacklevel\u001b[38;5;241m=\u001b[39mfind_stack_level(),\n\u001b[1;32m 332\u001b[0m )\n\u001b[0;32m--> 333\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/pandas/core/generic.py:2414\u001b[0m, in \u001b[0;36mNDFrame.to_excel\u001b[0;34m(self, excel_writer, sheet_name, na_rep, float_format, columns, header, index, index_label, startrow, startcol, engine, merge_cells, inf_rep, freeze_panes, storage_options, engine_kwargs)\u001b[0m\n\u001b[1;32m 2401\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mio\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mformats\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexcel\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m ExcelFormatter\n\u001b[1;32m 2403\u001b[0m formatter \u001b[38;5;241m=\u001b[39m ExcelFormatter(\n\u001b[1;32m 2404\u001b[0m df,\n\u001b[1;32m 2405\u001b[0m na_rep\u001b[38;5;241m=\u001b[39mna_rep,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2412\u001b[0m inf_rep\u001b[38;5;241m=\u001b[39minf_rep,\n\u001b[1;32m 2413\u001b[0m )\n\u001b[0;32m-> 2414\u001b[0m \u001b[43mformatter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mwrite\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2415\u001b[0m \u001b[43m \u001b[49m\u001b[43mexcel_writer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2416\u001b[0m \u001b[43m \u001b[49m\u001b[43msheet_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msheet_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2417\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartrow\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartrow\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2418\u001b[0m \u001b[43m \u001b[49m\u001b[43mstartcol\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstartcol\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2419\u001b[0m \u001b[43m \u001b[49m\u001b[43mfreeze_panes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfreeze_panes\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2420\u001b[0m \u001b[43m \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2421\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstorage_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2422\u001b[0m \u001b[43m \u001b[49m\u001b[43mengine_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mengine_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2423\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/pandas/io/formats/excel.py:943\u001b[0m, in \u001b[0;36mExcelFormatter.write\u001b[0;34m(self, writer, sheet_name, startrow, startcol, freeze_panes, engine, storage_options, engine_kwargs)\u001b[0m\n\u001b[1;32m 941\u001b[0m need_save \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 942\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 943\u001b[0m writer \u001b[38;5;241m=\u001b[39m \u001b[43mExcelWriter\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 944\u001b[0m \u001b[43m \u001b[49m\u001b[43mwriter\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 945\u001b[0m \u001b[43m \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 946\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstorage_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 947\u001b[0m \u001b[43m \u001b[49m\u001b[43mengine_kwargs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mengine_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 948\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 949\u001b[0m need_save \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 951\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/pandas/io/excel/_openpyxl.py:57\u001b[0m, in \u001b[0;36mOpenpyxlWriter.__init__\u001b[0;34m(self, path, engine, date_format, datetime_format, mode, storage_options, if_sheet_exists, engine_kwargs, **kwargs)\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 46\u001b[0m path: FilePath \u001b[38;5;241m|\u001b[39m WriteExcelBuffer \u001b[38;5;241m|\u001b[39m ExcelWriter,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 55\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# Use the openpyxl module as the Excel writer.\u001b[39;00m\n\u001b[0;32m---> 57\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mworkbook\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Workbook\n\u001b[1;32m 59\u001b[0m engine_kwargs \u001b[38;5;241m=\u001b[39m combine_kwargs(engine_kwargs, kwargs)\n\u001b[1;32m 61\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(\n\u001b[1;32m 62\u001b[0m path,\n\u001b[1;32m 63\u001b[0m mode\u001b[38;5;241m=\u001b[39mmode,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 66\u001b[0m engine_kwargs\u001b[38;5;241m=\u001b[39mengine_kwargs,\n\u001b[1;32m 67\u001b[0m )\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/openpyxl/__init__.py:6\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcompat\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mnumbers\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m NUMPY\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mxml\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m DEFUSEDXML, LXML\n\u001b[0;32m----> 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mworkbook\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Workbook\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mreader\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexcel\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m load_workbook \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;28mopen\u001b[39m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mreader\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mexcel\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m load_workbook\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/openpyxl/workbook/__init__.py:4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Copyright (c) 2010-2022 openpyxl\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mworkbook\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Workbook\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/openpyxl/workbook/workbook.py:33\u001b[0m\n\u001b[1;32m 31\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mchartsheet\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Chartsheet\n\u001b[1;32m 32\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdefined_name\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m DefinedName, DefinedNameList\n\u001b[0;32m---> 33\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpackaging\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcore\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m DocumentProperties\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mopenpyxl\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpackaging\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mrelationship\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m RelationshipList\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mchild\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m _WorkbookChild\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/openpyxl/packaging/core.py:47\u001b[0m\n\u001b[1;32m 43\u001b[0m el\u001b[38;5;241m.\u001b[39mset(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m}type\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m XSI_NS, QName(DCTERMS_NS, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mW3CDTF\u001b[39m\u001b[38;5;124m\"\u001b[39m))\n\u001b[1;32m 44\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m el\n\u001b[0;32m---> 47\u001b[0m \u001b[38;5;28;43;01mclass\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;21;43;01mDocumentProperties\u001b[39;49;00m\u001b[43m(\u001b[49m\u001b[43mSerialisable\u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;250;43m \u001b[39;49m\u001b[38;5;124;43;03m\"\"\"High-level properties of the document.\u001b[39;49;00m\n\u001b[1;32m 49\u001b[0m \u001b[38;5;124;43;03m Defined in ECMA-376 Par2 Annex D\u001b[39;49;00m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;124;43;03m \"\"\"\u001b[39;49;00m\n\u001b[1;32m 52\u001b[0m \u001b[43m \u001b[49m\u001b[43mtagname\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcoreProperties\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\n", + "File \u001b[0;32m~/anaconda3/envs/ccc-dev/lib/python3.12/site-packages/openpyxl/packaging/core.py:89\u001b[0m, in \u001b[0;36mDocumentProperties\u001b[0;34m()\u001b[0m\n\u001b[1;32m 73\u001b[0m modified \u001b[38;5;241m=\u001b[39m QualifiedDateTime(allow_none\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, namespace\u001b[38;5;241m=\u001b[39mDCTERMS_NS)\n\u001b[1;32m 75\u001b[0m __elements__ \u001b[38;5;241m=\u001b[39m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreator\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtitle\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdescription\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msubject\u001b[39m\u001b[38;5;124m\"\u001b[39m,\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124midentifier\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 76\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlanguage\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreated\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodified\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlastModifiedBy\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcategory\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 77\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcontentStatus\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mversion\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrevision\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mkeywords\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlastPrinted\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 78\u001b[0m )\n\u001b[1;32m 81\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 82\u001b[0m category\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 83\u001b[0m contentStatus\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 84\u001b[0m keywords\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 85\u001b[0m lastModifiedBy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 86\u001b[0m lastPrinted\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 87\u001b[0m revision\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 88\u001b[0m version\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m---> 89\u001b[0m created\u001b[38;5;241m=\u001b[39m\u001b[43mdatetime\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdatetime\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mutcnow\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 90\u001b[0m creator\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mopenpyxl\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 91\u001b[0m description\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 92\u001b[0m identifier\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 93\u001b[0m language\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 94\u001b[0m modified\u001b[38;5;241m=\u001b[39mdatetime\u001b[38;5;241m.\u001b[39mdatetime\u001b[38;5;241m.\u001b[39mutcnow(),\n\u001b[1;32m 95\u001b[0m subject\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 96\u001b[0m title\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 97\u001b[0m ):\n\u001b[1;32m 98\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcontentStatus \u001b[38;5;241m=\u001b[39m contentStatus\n\u001b[1;32m 99\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlastPrinted \u001b[38;5;241m=\u001b[39m lastPrinted\n", + "\u001b[0;31mDeprecationWarning\u001b[0m: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC)." ] } ], @@ -1071,7 +889,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1329,7 +1147,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1906,7 +1724,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2005,7 +1823,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2104,7 +1922,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2203,7 +2021,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2235,7 +2053,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2363,7 +2181,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -2460,7 +2278,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.12.2" } }, "nbformat": 4,