diff --git a/ccc/tests/test_calcfunctions.py b/ccc/tests/test_calcfunctions.py
index 4c6c7f0d..521403e2 100644
--- a/ccc/tests/test_calcfunctions.py
+++ b/ccc/tests/test_calcfunctions.py
@@ -10,7 +10,7 @@ def test_update_depr_methods(monkeypatch):
"""
Test of calcfunctions.update_depr_methods
"""
- p = Specification()
+ p = Specification(year=2020)
json_str = """
{"schema": {
"labels": {
diff --git a/ccc/tests/test_calculator.py b/ccc/tests/test_calculator.py
index 22d87448..f893c755 100644
--- a/ccc/tests/test_calculator.py
+++ b/ccc/tests/test_calculator.py
@@ -330,7 +330,7 @@ def test_restore_assets():
def test_p_param_return_value():
assets = Assets()
- p = Specification()
+ p = Specification(year=2022)
dp = DepreciationParams()
calc1 = Calculator(p, dp, assets)
obj = calc1.p_param("tau_int")
diff --git a/ccc/tests/test_parameters.py b/ccc/tests/test_parameters.py
index 31edb049..cf00ebb3 100644
--- a/ccc/tests/test_parameters.py
+++ b/ccc/tests/test_parameters.py
@@ -76,7 +76,7 @@ def test_update_specification_with_json():
def test_update_bad_revision1():
- spec = Specification()
+ spec = Specification(year=2022)
# profit rate has an upper bound at 1.0
revs = {"profit_rate": [{"year": spec.year, "value": 1.2}]}
spec.update_specification(revs, raise_errors=False)
diff --git a/ccc/tests/test_run_ccc.py b/ccc/tests/test_run_ccc.py
index 14940cdc..5ab347f6 100644
--- a/ccc/tests/test_run_ccc.py
+++ b/ccc/tests/test_run_ccc.py
@@ -19,7 +19,7 @@ def test_calc_by_methods():
comparing actual and expect dataframes
"""
# execute Calculator calc_by methods to get actual results
- p = Specification()
+ p = Specification(year=2022)
dp = DepreciationParams()
assets = Assets()
calc = Calculator(p, dp, assets)
diff --git a/ccc/utils.py b/ccc/utils.py
index 3e5dc95f..c8a30592 100644
--- a/ccc/utils.py
+++ b/ccc/utils.py
@@ -10,7 +10,7 @@
PYPI_PACKAGE_NAME = "cost-of-capital-calculator"
# Default year for model runs
-DEFAULT_START_YEAR = 2022
+DEFAULT_START_YEAR = 2024
# Year of asset data
ASSET_DATA_CSV_YEAR = 2013
diff --git a/cs-config/cs_config/tests/test_functions.py b/cs-config/cs_config/tests/test_functions.py
index d04219bf..39be1638 100644
--- a/cs-config/cs_config/tests/test_functions.py
+++ b/cs-config/cs_config/tests/test_functions.py
@@ -3,6 +3,7 @@
import numpy as np
import io
from cs_config import functions
+from ccc.utils import DEFAULT_START_YEAR
def test_start_year_with_data_source():
@@ -47,10 +48,10 @@ class TestFunctions1(CoreTestFunctions):
run_model = functions.run_model
ok_adjustment = {
"Business Tax Parameters": {
- "CIT_rate": [{"year": 2022, "value": 0.25}]
+ "CIT_rate": [{"year": DEFAULT_START_YEAR, "value": 0.25}]
},
"Individual and Payroll Tax Parameters": {
- "FICA_ss_trt": [{"year": 2022, "value": 0.14}]
+ "FICA_ss_trt": [{"year": DEFAULT_START_YEAR, "value": 0.14}]
},
}
bad_adjustment = {
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 \"- re-rerun `output_notebook()` to attempt to load from CDN again, or
\\n\"+\n \"- use INLINE resources instead, as so:
\\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 \"- re-rerun `output_notebook()` to attempt to load from CDN again, or
\\n\"+\n \"- use INLINE resources instead, as so:
\\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,