From 47ca48904eaa0661d90ba4ae7818769c75df250e Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Sun, 10 Mar 2024 00:32:14 -0500
Subject: [PATCH 01/10] update logo

---
 .gitignore                             |   1 +
 README.md                              |   6 +++--
 docs/mkdocs.yml                        |  35 ++++++++++++++++---------
 docs/src/img/dbt-linreg-logo-dark.png  | Bin 0 -> 28215 bytes
 docs/src/img/dbt-linreg-logo-light.png | Bin 0 -> 26403 bytes
 5 files changed, 28 insertions(+), 14 deletions(-)
 create mode 100644 docs/src/img/dbt-linreg-logo-dark.png
 create mode 100644 docs/src/img/dbt-linreg-logo-light.png

diff --git a/.gitignore b/.gitignore
index 0ce0028..6dae1fa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+integration_tests/package-lock.yml
 dbt.duckdb
 dbt.duckdb.wal
 .user.yml
diff --git a/README.md b/README.md
index 5889d0e..bad8926 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
-
 <p align="center">
-    <img src="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner.png" alt="dbt_linreg logo">
+    <picture>
+        <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-dark.png">
+        <img src="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-light.png" alt="dbt_linreg logo">
+    </picture>
 </p>
 <p align="center">
     <em>Linear regression in any SQL dialect, powered by dbt.</em>
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
index d227886..860aa94 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -10,9 +10,20 @@ nav:
 theme:
   name: material
   palette:
-    scheme: default
-    primary: white
-    accent: light blue
+    - media: "(prefers-color-scheme: dark)"
+      scheme: default
+      primary: black
+      accent: light blue
+      toggle:
+        icon: material/lightbulb-outline
+        name: Switch to light mode
+    - media: "(prefers-color-scheme: light)"
+      scheme: default
+      primary: white
+      accent: light blue
+      toggle:
+        icon: material/lightbulb
+        name: Switch to dark mode
   logo: img/dbt-linreg-logo.png
   favicon: img/dbt-linreg-favicon.png
   font:
@@ -21,15 +32,15 @@ theme:
 plugins:
   - macros
 markdown_extensions:
-- admonition
-- pymdownx.tabbed
-- pymdownx.keys
-- pymdownx.details
-- pymdownx.inlinehilite
-- pymdownx.superfences
-- markdown_include.include:
-    base_path: docs
-- sane_lists
+  - admonition
+  - pymdownx.tabbed
+  - pymdownx.keys
+  - pymdownx.details
+  - pymdownx.inlinehilite
+  - pymdownx.superfences
+  - markdown_include.include:
+      base_path: docs
+  - sane_lists
 extra:
   social:
     - icon: fontawesome/brands/github
diff --git a/docs/src/img/dbt-linreg-logo-dark.png b/docs/src/img/dbt-linreg-logo-dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..55a971bd5c4de7e40d1b9c55e7301900ec8f3215
GIT binary patch
literal 28215
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
CbbrMF

literal 0
HcmV?d00001

diff --git a/docs/src/img/dbt-linreg-logo-light.png b/docs/src/img/dbt-linreg-logo-light.png
new file mode 100644
index 0000000000000000000000000000000000000000..be61b9d8264dfe71ebaef59489302f0630f0b10b
GIT binary patch
literal 26403
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
Kr}Bn<^#1`Rhu@R{

literal 0
HcmV?d00001


From 6eb00def7d5751621adfbc736db563e16f22e91a Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Sun, 10 Mar 2024 00:37:29 -0500
Subject: [PATCH 02/10] update

---
 README.md              | 4 ++--
 docs/mkdocs.yml        | 2 ++
 docs/src/css/extra.css | 9 +++++++++
 3 files changed, 13 insertions(+), 2 deletions(-)
 create mode 100644 docs/src/css/extra.css

diff --git a/README.md b/README.md
index bad8926..03b76d9 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 <p align="center">
     <picture>
-        <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-dark.png">
-        <img src="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-light.png" alt="dbt_linreg logo">
+        <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-dark.png#only-dark">
+        <img src="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-light.png#only-light" alt="dbt_linreg logo">
     </picture>
 </p>
 <p align="center">
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
index 860aa94..e19f848 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -41,6 +41,8 @@ markdown_extensions:
   - markdown_include.include:
       base_path: docs
   - sane_lists
+extra_css:
+  - css/extra.css
 extra:
   social:
     - icon: fontawesome/brands/github
diff --git a/docs/src/css/extra.css b/docs/src/css/extra.css
new file mode 100644
index 0000000..ae3ab37
--- /dev/null
+++ b/docs/src/css/extra.css
@@ -0,0 +1,9 @@
+[data-md-color-scheme="light"] img[src$="#only-dark"],
+[data-md-color-scheme="light"] img[src$="#gh-dark-mode-only"] {
+  display: none; /* Hide dark images in light mode */
+}
+
+[data-md-color-scheme="dark"] img[src$="#only-light"],
+[data-md-color-scheme="dark"] img[src$="#gh-light-mode-only"] {
+  display: none; /* Hide light images in dark mode */
+}

From ec35dfb197530ae88521e2234546cb54fb2b329f Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Sun, 10 Mar 2024 00:41:04 -0500
Subject: [PATCH 03/10] update

---
 docs/mkdocs.yml   | 2 +-
 docs/src/index.md | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
index e19f848..2da718e 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -11,7 +11,7 @@ theme:
   name: material
   palette:
     - media: "(prefers-color-scheme: dark)"
-      scheme: default
+      scheme: slate
       primary: black
       accent: light blue
       toggle:
diff --git a/docs/src/index.md b/docs/src/index.md
index 7d211af..7f0ae9b 100644
--- a/docs/src/index.md
+++ b/docs/src/index.md
@@ -1 +1,7 @@
+---
+hide:
+  - title
+  - toc
+  - navigation
+---
 {!../README.md!}

From 5b17c2d0d5722802e1a6bc604de9243c59c4b616 Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Sun, 10 Mar 2024 00:44:16 -0500
Subject: [PATCH 04/10] update

---
 README.md              | 4 ++--
 docs/src/css/extra.css | 4 ++++
 docs/src/index.md      | 6 ++++++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 03b76d9..c4a0e06 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 <p align="center">
     <picture>
-        <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-dark.png#only-dark">
-        <img src="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-light.png#only-light" alt="dbt_linreg logo">
+        <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-dark.png#readme-logo">
+        <img src="https://raw.githubusercontent.com/dwreeves/dbt_linreg/main/docs/src/img/dbt-linreg-banner-light.png#readme-logo" alt="dbt_linreg logo">
     </picture>
 </p>
 <p align="center">
diff --git a/docs/src/css/extra.css b/docs/src/css/extra.css
index ae3ab37..e9ec230 100644
--- a/docs/src/css/extra.css
+++ b/docs/src/css/extra.css
@@ -7,3 +7,7 @@
 [data-md-color-scheme="dark"] img[src$="#gh-light-mode-only"] {
   display: none; /* Hide light images in dark mode */
 }
+
+img[src$="#readme-logo"] {
+  display: none;
+}
diff --git a/docs/src/index.md b/docs/src/index.md
index 7f0ae9b..85eeb67 100644
--- a/docs/src/index.md
+++ b/docs/src/index.md
@@ -4,4 +4,10 @@ hide:
   - toc
   - navigation
 ---
+
+<p align="center">
+<img src="img/dbt-linreg-banner-light.png#only-light" align="center">
+<img src="img/dbt-linreg-banner-dark.png#only-dark" align="center">
+</p>
+
 {!../README.md!}

From d418fd0a27244a6620d811cee006b4de4ac03add Mon Sep 17 00:00:00 2001
From: Chris Stevens <Chris.Stevens@msasafety.com>
Date: Fri, 14 Jun 2024 15:31:56 -0400
Subject: [PATCH 05/10] Add redshift specific coefficient return function

---
 macros/linear_regression/utils.sql | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/macros/linear_regression/utils.sql b/macros/linear_regression/utils.sql
index d5cbaab..235cdd4 100644
--- a/macros/linear_regression/utils.sql
+++ b/macros/linear_regression/utils.sql
@@ -177,6 +177,14 @@ gb{{ loop.index }} as {{ gb }},
   {% endif %}
 {% endmacro %}
 
+{% macro redshift___maybe_round(x, round_) %}
+  {% if round_ is not none %}
+    {{ return('round(' ~ x ~ ', ' ~ round_ ~ ')') }}
+  {% else %}
+    {{ return(x) }}
+  {% endif %}
+{% endmacro %}
+
 {# Alias and write group by columns in a standard way. #}
 {% macro _gb_cols(group_by, trailing_comma=False, prefix=None) -%}
 {%- if group_by %}

From 01004c8c6ab3a043889bcd06a42af9ec0023f96e Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Fri, 14 Jun 2024 17:49:26 -0400
Subject: [PATCH 06/10] version bump

---
 CHANGELOG.md    | 4 ++++
 README.md       | 1 +
 dbt_project.yml | 2 +-
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index e53a321..38c9629 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+### `0.2.4`
+
+- Fix minor incompatibility with Redshift; contributed by [@steelcd](https://github.com/steelcd).
+
 ### `0.2.3`
 
 - Added Postgres support in integration tests + fixed bugs that prevented Postgres from working.
diff --git a/README.md b/README.md
index c4a0e06..d143ada 100644
--- a/README.md
+++ b/README.md
@@ -277,6 +277,7 @@ There are a few reasons why this method is discouraged over the `chol` method:
 - 🐌 It tends to be much slower in OLAP systems, and struggles to efficiently calculate large number of columns.
 - 📊 It does not calculate standard errors.
 - 😕 For ridge regression, coefficients are not accurate; they tend to be off by a magnitude of ~0.01%.
+- ⚠️ It does not work in all databases because it relies on `COVAR_POP`.
 
 So when should you use `fwl`? The main use case is in OLTP systems (e.g. Postgres) for unregularized coefficient estimation. Long story short, the `chol` method relies on subquery optimization to be more performant than `fwl`; however, OLTP systems do not benefit at all from subquery optimization. This means that `fwl` is slightly more performant in this context.
 
diff --git a/dbt_project.yml b/dbt_project.yml
index 59a675e..6eb1606 100644
--- a/dbt_project.yml
+++ b/dbt_project.yml
@@ -1,5 +1,5 @@
 name: "dbt_linreg"
-version: "0.2.3"
+version: "0.2.4"
 
 # 1.2 is required because of modules.itertools.
 require-dbt-version: [">=1.2.0", "<2.0.0"]

From 2acdc3cb6ce77deeceb0602d6073f3eccf252cc4 Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Sat, 24 Aug 2024 13:45:45 -0400
Subject: [PATCH 07/10] bug fixes

---
 CHANGELOG.md                                           |  6 ++++++
 dbt_project.yml                                        |  2 +-
 macros/linear_regression/ols.sql                       |  4 ++++
 .../linear_regression/ols_impl_chol/_ols_impl_chol.sql | 10 +++++-----
 .../linear_regression/ols_impl_special/_ols_1var.sql   |  2 +-
 5 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 38c9629..addeaf9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+### `0.2.5`
+
+- Fix bug where `exog` and `group_by` did not handle `str` inputs e.g. `exog="x"`.
+- Fix bug where `group_by` for `method='fwl'` with exactly 1 exog variable did not work. (Explanation: `method='fwl'` dispatches to a different macro for the special case of 1 exog variable, and `group_by` was not implemented correctly here.)
+- Fix bug where `safe` mode did not work for `method='chol'`
+
 ### `0.2.4`
 
 - Fix minor incompatibility with Redshift; contributed by [@steelcd](https://github.com/steelcd).
diff --git a/dbt_project.yml b/dbt_project.yml
index 6eb1606..c467ae6 100644
--- a/dbt_project.yml
+++ b/dbt_project.yml
@@ -1,5 +1,5 @@
 name: "dbt_linreg"
-version: "0.2.4"
+version: "0.2.5"
 
 # 1.2 is required because of modules.itertools.
 require-dbt-version: [">=1.2.0", "<2.0.0"]
diff --git a/macros/linear_regression/ols.sql b/macros/linear_regression/ols.sql
index 9f82acb..239000e 100644
--- a/macros/linear_regression/ols.sql
+++ b/macros/linear_regression/ols.sql
@@ -60,6 +60,8 @@
     {% else %}
       {% set exog = [exog] %}
     {% endif %}
+  {% elif exog is string %}
+    {% set exog = [exog] %}
   {% endif %}
 
   {% if group_by is not iterable %}
@@ -68,6 +70,8 @@
     {% else %}
       {% set group_by = [group_by] %}
     {% endif %}
+  {% elif group_by is string %}
+    {% set group_by = [group_by] %}
   {% endif %}
 
   {% if alpha is not iterable and alpha is not none %}
diff --git a/macros/linear_regression/ols_impl_chol/_ols_impl_chol.sql b/macros/linear_regression/ols_impl_chol/_ols_impl_chol.sql
index c9d9046..2ef4648 100644
--- a/macros/linear_regression/ols_impl_chol/_ols_impl_chol.sql
+++ b/macros/linear_regression/ols_impl_chol/_ols_impl_chol.sql
@@ -73,7 +73,7 @@
   {{ return(d) }}
 {% endmacro %}
 
-{% macro _forward_substitution(li) %}
+{% macro _forward_substitution(li, safe=true) %}
   {% set d = {} %}
   {% for i, j in modules.itertools.combinations_with_replacement(li, 2) %}
     {% set ns = namespace() %}
@@ -86,7 +86,7 @@
       {% endfor %}
       {% set ns.numerator = ns.numerator~')' %}
     {% endif %}
-    {% if adapter.type() == "postgres" %}
+    {% if safe %}
       {% do d.update({(i, j): '('~ns.numerator~'/nullif(i'~j~'j'~j~', 0))'}) %}
     {% else %}
       {% do d.update({(i, j): '('~ns.numerator~'/i'~j~'j'~j~')'}) %}
@@ -118,7 +118,7 @@
   )) }}
 {%- endif %}
 {%- set subquery_optimization = method_options.get('subquery_optimization', True) %}
-{%- set safe_sqrt = method_options.get('safe', True) %}
+{%- set safe_mode = method_options.get('safe', True) %}
 {%- set calculate_standard_error = format_options.get('calculate_standard_error', (not alpha)) and format == 'long' %}
 {%- if alpha and calculate_standard_error %}
   {% do log(
@@ -171,7 +171,7 @@ _dbt_linreg_xtx as (
 ),
 _dbt_linreg_chol as (
 
-  {%- set d = dbt_linreg._cholesky_decomposition(li=xcols, subquery_optimization=subquery_optimization, safe=safe_sqrt) %}
+  {%- set d = dbt_linreg._cholesky_decomposition(li=xcols, subquery_optimization=subquery_optimization, safe=safe_mode) %}
   {%- if subquery_optimization %}
   {%- for i in (xcols | reverse) %}
   select
@@ -202,7 +202,7 @@ _dbt_linreg_chol as (
 ),
 _dbt_linreg_inverse_chol as (
   {#- The optimal way to calculate is to do each diagonal at a time. #}
-  {%- set d = dbt_linreg._forward_substitution(li=xcols) %}
+  {%- set d = dbt_linreg._forward_substitution(li=xcols, safe=safe_mode) %}
   {%- if subquery_optimization %}
   {%- for gap in (range(0, upto) | reverse) %}
   select *,
diff --git a/macros/linear_regression/ols_impl_special/_ols_1var.sql b/macros/linear_regression/ols_impl_special/_ols_1var.sql
index a8c301d..0101bc9 100644
--- a/macros/linear_regression/ols_impl_special/_ols_1var.sql
+++ b/macros/linear_regression/ols_impl_special/_ols_1var.sql
@@ -25,7 +25,7 @@ _dbt_linreg_cmeans as (
 {%- endif %}
 _dbt_linreg_base as (
   select
-    {{ dbt_linreg._gb_cols(group_by, trailing_comma=True) | indent(4) }}
+    {{ dbt_linreg._alias_gb_cols(group_by) | indent(4) }}
     {%- if alpha and add_constant %}
     b.{{ endog }} - _dbt_linreg_cmeans.y as y,
     b.{{ exog[0] }} - _dbt_linreg_cmeans.x1 as x1,

From 5a55b21f7498b2011c1252d9593f0b59c9ee671d Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Sat, 24 Aug 2024 14:22:59 -0400
Subject: [PATCH 08/10] clean up dbt docs

---
 .pre-commit-config.yaml                       |    2 +-
 CHANGELOG.md                                  |    3 +-
 README.md                                     |    3 +-
 .../linear_regression/{ => utils}/utils.sql   |    0
 macros/schema.yml                             |  114 +-
 poetry.lock                                   | 2177 +++++++++--------
 pyproject.toml                                |    5 +-
 scripts.py                                    |   32 +
 8 files changed, 1371 insertions(+), 965 deletions(-)
 rename macros/linear_regression/{ => utils}/utils.sql (100%)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index e659793..ec0866f 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -8,7 +8,7 @@ repos:
     - id: trailing-whitespace
 
 - repo: https://github.com/charliermarsh/ruff-pre-commit
-  rev: v0.0.284
+  rev: v0.6.2
   hooks:
     - id: ruff
 
diff --git a/CHANGELOG.md b/CHANGELOG.md
index addeaf9..83ae1be 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,8 @@
 
 - Fix bug where `exog` and `group_by` did not handle `str` inputs e.g. `exog="x"`.
 - Fix bug where `group_by` for `method='fwl'` with exactly 1 exog variable did not work. (Explanation: `method='fwl'` dispatches to a different macro for the special case of 1 exog variable, and `group_by` was not implemented correctly here.)
-- Fix bug where `safe` mode did not work for `method='chol'`
+- Fix bug where `safe` mode did not work for `method='chol'`.
+- Improved docs by hiding everything except `ols()`, improved description of `ols()` macro, and added missing arg.
 
 ### `0.2.4`
 
diff --git a/README.md b/README.md
index d143ada..e4f59bf 100644
--- a/README.md
+++ b/README.md
@@ -193,7 +193,8 @@ def ols(
     format_options: Optional[dict[str, Any]] = None,
     group_by: Optional[Union[str, list[str]]] = None,
     alpha: Optional[Union[float, list[float]]] = None,
-    method: Literal['chol', 'fwl'] = 'chol'
+    method: Literal['chol', 'fwl'] = 'chol',
+    method_options: Optional[dict[str, Any]] = None
 ):
     ...
 ```
diff --git a/macros/linear_regression/utils.sql b/macros/linear_regression/utils/utils.sql
similarity index 100%
rename from macros/linear_regression/utils.sql
rename to macros/linear_regression/utils/utils.sql
diff --git a/macros/schema.yml b/macros/schema.yml
index e31f3d7..d58e5c6 100644
--- a/macros/schema.yml
+++ b/macros/schema.yml
@@ -28,7 +28,31 @@ macros:
       ```
       {% endraw %}
 
-      The macro renders a subquery; in some database engines, such as Postgres, it is required to alias all subqueries.
+      You may also select from a CTE; in this case, just pass a string referencing the CTE:
+
+      {% raw %}
+      ```sql
+      {{
+        config(
+          materialized="table"
+        )
+      }}
+      with my_data as (
+        select * from {{ ref('simple_matrix') }}
+      )
+      select * from {{
+        dbt_linreg.ols(
+          table='my_data',
+          endog='y',
+          exog=['xa', 'xb', 'xc'],
+          format='long',
+          format_options={'round': 5}
+        )
+      }}
+      ```
+      {% endraw %}
+
+      The macro renders a subquery, inclusive of parentheses.
 
       Please see the README / full documentation for more information: [https://dwreeves.github.io/dbt_linreg/](https://dwreeves.github.io/dbt_linreg/)
     arguments:
@@ -53,6 +77,9 @@ macros:
       - name: format_options
         type: dict
         description: See **Formats and format options** section in the README for more.
+      - name: group_by
+        type: string or list of numbers
+        description: If specified, the regression will be grouped by these variables, and individual regressions will run on each group.
       - name: alpha
         type: number or list of numbers
         description: If not null, the regression will be run as a ridge regression with a penalty of `alpha`. See **Notes** section in the README for more information.
@@ -62,18 +89,36 @@ macros:
       - name: method_options
         type: dict
         description: Options specific to the estimation method. See **Methods and method options** in the README for more.
-  # Everything down here is just for intermediary calculations.
-  # Better to hide this stuff to reduce confusion when reading docs.
+  # Everything down here is just for intermediary calculations or helper functions.
+  # There is no point to showing these in the docs.
   # The truly curious can just look at the source code.
+  #
+  # Please generate the below with the following command:
+  # >>> python scripts.py gen-hide-macros-yaml
   - name: _alias_exog
     docs:
       show: false
   - name: _alias_gb_cols
     docs:
       show: false
+  - name: _cell_or_alias
+    docs:
+      show: false
+  - name: _cholesky_decomposition
+    docs:
+      show: false
+  - name: _filter_and_center_if_alpha
+    docs:
+      show: false
+  - name: _filter_if_alpha
+    docs:
+      show: false
   - name: _format_wide_variable_column
     docs:
       show: false
+  - name: _forward_substitution
+    docs:
+      show: false
   - name: _gb_cols
     docs:
       show: false
@@ -83,21 +128,84 @@ macros:
   - name: _maybe_round
     docs:
       show: false
+  - name: _ols_0var
+    docs:
+      show: false
+  - name: _ols_1var
+    docs:
+      show: false
+  - name: _ols_chol
+    docs:
+      show: false
+  - name: _ols_fwl
+    docs:
+      show: false
+  - name: _orth_x_intercept
+    docs:
+      show: false
+  - name: _orth_x_slope
+    docs:
+      show: false
+  - name: _regress_or_alias
+    docs:
+      show: false
+  - name: _safe_sqrt
+    docs:
+      show: false
   - name: _strip_quotes
     docs:
       show: false
+  - name: _traverse_intercepts
+    docs:
+      show: false
+  - name: _traverse_slopes
+    docs:
+      show: false
   - name: _unalias_gb_cols
     docs:
       show: false
+  - name: bigquery___safe_sqrt
+    docs:
+      show: false
+  - name: default___cell_or_alias
+    docs:
+      show: false
+  - name: default___maybe_round
+    docs:
+      show: false
+  - name: default___regress_or_alias
+    docs:
+      show: false
+  - name: default___safe_sqrt
+    docs:
+      show: false
   - name: default__regress
     docs:
       show: false
+  - name: duckdb___cell_or_alias
+    docs:
+      show: false
+  - name: duckdb___regress_or_alias
+    docs:
+      show: false
   - name: final_select
     docs:
       show: false
+  - name: postgres___maybe_round
+    docs:
+      show: false
+  - name: redshift___maybe_round
+    docs:
+      show: false
   - name: regress
     docs:
       show: false
+  - name: snowflake___cell_or_alias
+    docs:
+      show: false
+  - name: snowflake___regress_or_alias
+    docs:
+      show: false
   - name: snowflake__regress
     docs:
       show: false
diff --git a/poetry.lock b/poetry.lock
index 7214cd0..8829015 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -2,14 +2,14 @@
 
 [[package]]
 name = "agate"
-version = "1.7.1"
+version = "1.9.1"
 description = "A data analysis library that is optimized for humans instead of machines."
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "agate-1.7.1-py2.py3-none-any.whl", hash = "sha256:23f9f412f74f97b72f82b1525ab235cc816bc8c8525d968a091576a0dbc54a5f"},
-    {file = "agate-1.7.1.tar.gz", hash = "sha256:eadf46d980168b8922d5d396d6258eecd5e7dbef7e6f0c0b71e968545ea96389"},
+    {file = "agate-1.9.1-py2.py3-none-any.whl", hash = "sha256:1cf329510b3dde07c4ad1740b7587c9c679abc3dcd92bb1107eabc10c2e03c50"},
+    {file = "agate-1.9.1.tar.gz", hash = "sha256:bc60880c2ee59636a2a80cd8603d63f995be64526abf3cbba12f00767bcd5b3d"},
 ]
 
 [package.dependencies]
@@ -19,131 +19,70 @@ leather = ">=0.3.2"
 parsedatetime = ">=2.1,<2.5 || >2.5"
 python-slugify = ">=1.2.1"
 pytimeparse = ">=1.1.5"
+tzdata = {version = ">=2023.3", markers = "platform_system == \"Windows\""}
 
 [package.extras]
-docs = ["Sphinx (>=1.2.2)", "sphinx-rtd-theme (>=0.1.6)"]
-test = ["PyICU (>=2.4.2)", "coverage (>=3.7.1)", "cssselect (>=0.9.1)", "lxml (>=3.6.0)", "pytest", "pytest-cov", "pytz (>=2015.4)"]
+test = ["PyICU (>=2.4.2)", "backports.zoneinfo", "coverage (>=3.7.1)", "cssselect (>=0.9.1)", "lxml (>=3.6.0)", "pytest", "pytest-cov"]
+
+[[package]]
+name = "annotated-types"
+version = "0.7.0"
+description = "Reusable constraint types to use with typing.Annotated"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},
+    {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},
+]
 
 [[package]]
 name = "attrs"
-version = "23.1.0"
+version = "24.2.0"
 description = "Classes Without Boilerplate"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"},
-    {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"},
+    {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"},
+    {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"},
 ]
 
 [package.extras]
-cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
-dev = ["attrs[docs,tests]", "pre-commit"]
-docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
-tests = ["attrs[tests-no-zope]", "zope-interface"]
-tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"]
+tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
+tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"]
 
 [[package]]
 name = "babel"
-version = "2.12.1"
+version = "2.16.0"
 description = "Internationalization utilities"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"},
-    {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"},
+    {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"},
+    {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"},
 ]
 
+[package.extras]
+dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
+
 [[package]]
 name = "certifi"
-version = "2023.7.22"
+version = "2024.7.4"
 description = "Python package for providing Mozilla's CA Bundle."
 category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
-    {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
-]
-
-[[package]]
-name = "cffi"
-version = "1.15.1"
-description = "Foreign Function Interface for Python calling C code."
-category = "main"
-optional = false
-python-versions = "*"
-files = [
-    {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"},
-    {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"},
-    {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"},
-    {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"},
-    {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"},
-    {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"},
-    {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"},
-    {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"},
-    {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"},
-    {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"},
-    {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"},
-    {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"},
-    {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"},
-    {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"},
-    {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"},
-    {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"},
-    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"},
-    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"},
-    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"},
-    {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"},
-    {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"},
-    {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"},
-    {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"},
-    {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"},
-    {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"},
-    {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"},
-    {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"},
-    {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"},
-    {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"},
-    {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"},
-    {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"},
-    {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"},
-    {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"},
-    {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"},
-    {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"},
-    {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"},
-    {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"},
-    {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"},
-    {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"},
-    {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"},
-    {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"},
-    {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"},
-    {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"},
-    {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"},
+    {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"},
+    {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"},
 ]
 
-[package.dependencies]
-pycparser = "*"
-
 [[package]]
 name = "cfgv"
 version = "3.4.0"
@@ -158,99 +97,114 @@ files = [
 
 [[package]]
 name = "charset-normalizer"
-version = "3.2.0"
+version = "3.3.2"
 description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
 category = "main"
 optional = false
 python-versions = ">=3.7.0"
 files = [
-    {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"},
-    {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"},
-    {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"},
-    {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"},
-    {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"},
-    {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"},
-    {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"},
+    {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
+    {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
+    {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
+    {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
+    {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
+    {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
+    {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
+    {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
 ]
 
 [[package]]
 name = "click"
-version = "8.1.6"
+version = "8.1.7"
 description = "Composable command line interface toolkit"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"},
-    {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"},
+    {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+    {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
 ]
 
 [package.dependencies]
@@ -270,64 +224,84 @@ files = [
 
 [[package]]
 name = "coverage"
-version = "7.3.0"
+version = "7.6.1"
 description = "Code coverage measurement for Python"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"},
-    {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"},
-    {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"},
-    {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"},
-    {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"},
-    {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"},
-    {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"},
-    {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"},
-    {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"},
-    {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"},
-    {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"},
-    {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"},
-    {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"},
-    {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"},
-    {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"},
-    {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"},
-    {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"},
-    {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"},
-    {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"},
-    {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"},
-    {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"},
-    {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"},
-    {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"},
-    {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"},
-    {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"},
-    {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"},
-    {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"},
-    {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"},
-    {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"},
-    {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"},
-    {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"},
-    {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"},
-    {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"},
-    {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"},
-    {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"},
-    {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"},
-    {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"},
-    {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"},
-    {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"},
-    {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"},
-    {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"},
-    {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"},
-    {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"},
-    {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"},
-    {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"},
-    {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"},
-    {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"},
-    {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"},
-    {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"},
-    {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"},
-    {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"},
-    {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"},
+    {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"},
+    {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"},
+    {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"},
+    {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"},
+    {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"},
+    {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"},
+    {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"},
+    {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"},
+    {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"},
+    {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"},
+    {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"},
+    {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"},
+    {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"},
+    {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"},
+    {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"},
+    {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"},
+    {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"},
+    {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"},
+    {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"},
+    {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"},
+    {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"},
+    {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"},
+    {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"},
+    {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"},
+    {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"},
+    {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"},
+    {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"},
+    {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"},
+    {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"},
+    {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"},
+    {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"},
+    {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"},
+    {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"},
+    {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"},
+    {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"},
+    {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"},
+    {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"},
+    {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"},
+    {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"},
+    {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"},
+    {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"},
+    {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"},
+    {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"},
+    {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"},
+    {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"},
+    {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"},
+    {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"},
+    {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"},
+    {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"},
+    {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"},
+    {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"},
+    {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"},
+    {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"},
+    {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"},
+    {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"},
+    {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"},
+    {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"},
+    {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"},
+    {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"},
+    {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"},
+    {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"},
+    {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"},
+    {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"},
+    {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"},
+    {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"},
+    {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"},
+    {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"},
+    {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"},
+    {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"},
+    {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"},
+    {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"},
+    {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"},
 ]
 
 [package.dependencies]
@@ -337,211 +311,287 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1
 toml = ["tomli"]
 
 [[package]]
-name = "dbt-core"
-version = "1.6.6"
-description = "With dbt, data analysts and engineers can build analytics the way engineers build applications."
+name = "daff"
+version = "1.3.46"
+description = "Diff and patch tables"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+    {file = "daff-1.3.46.tar.gz", hash = "sha256:22d0da9fd6a3275b54c926a9c97b180f9258aad65113ea18f3fec52cbadcd818"},
+]
+
+[[package]]
+name = "dbt-adapters"
+version = "1.4.1"
+description = "The set of adapter protocols and base functionality that supports integration with dbt-core"
+category = "main"
+optional = false
+python-versions = ">=3.8.0"
+files = [
+    {file = "dbt_adapters-1.4.1-py3-none-any.whl", hash = "sha256:ace4928ca64c7c97bbe4dbe7287b0907496bc9bd6951bbadb1034a93b4dc40f7"},
+    {file = "dbt_adapters-1.4.1.tar.gz", hash = "sha256:bc705a9ac16037bfdf2e8bbb01e76df69ad0fc44a54e56ad6e9830d1bd4d0632"},
+]
+
+[package.dependencies]
+agate = ">=1.0,<2.0"
+dbt-common = ">=1.6,<2.0"
+mashumaro = {version = ">=3.0,<4.0", extras = ["msgpack"]}
+protobuf = ">=3.0,<5.0"
+pytz = ">=2015.7"
+typing-extensions = ">=4.0,<5.0"
+
+[[package]]
+name = "dbt-common"
+version = "1.7.0"
+description = "The shared common utilities that dbt-core and adapter implementations use"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "dbt-core-1.6.6.tar.gz", hash = "sha256:6a38a5ac0dcbff59a3b388bc76cec301a6fc0f076694c31d878ffb0dc89b5c7d"},
-    {file = "dbt_core-1.6.6-py3-none-any.whl", hash = "sha256:4ae40ae4c663898b76bb14d053daed256847da54d0d496a943811bc10133a557"},
+    {file = "dbt_common-1.7.0-py3-none-any.whl", hash = "sha256:ade7cf908492e83f890fd2c2bbb286f685dfe55a28ee1076f5485041b9acb93e"},
+    {file = "dbt_common-1.7.0.tar.gz", hash = "sha256:bf085abd6c2d871ec802f0b78a13467ca1d8be1603b165bb80caa9309d6b292d"},
 ]
 
 [package.dependencies]
-agate = ">=1.7.0,<1.8.0"
-cffi = ">=1.9,<2.0.0"
-click = "<9"
+agate = ">=1.7.0,<1.10"
 colorama = ">=0.3.9,<0.5"
-dbt-extractor = ">=0.4.1,<0.5.0"
-dbt-semantic-interfaces = ">=0.2.0,<0.3.0"
-hologram = ">=0.0.16,<0.1.0"
-idna = ">=2.5,<4"
+deepdiff = ">=7.0,<8.0"
 isodate = ">=0.6,<0.7"
-Jinja2 = ">=3.1.2,<3.2.0"
+jinja2 = ">=3.1.3,<4"
+jsonschema = ">=4.0,<5.0"
+mashumaro = {version = ">=3.9,<4.0", extras = ["msgpack"]}
+pathspec = ">=0.9,<0.13"
+protobuf = ">=4.0.0,<5.0.0"
+python-dateutil = ">=2.0,<3.0"
+requests = "<3.0.0"
+typing-extensions = ">=4.4,<5.0"
+
+[package.extras]
+build = ["check-wheel-contents", "twine", "wheel"]
+lint = ["black (>=23.3,<24.0)", "flake8", "flake8-docstrings", "flake8-pyproject", "mypy (>=1.3,<2.0)", "pytest (>=7.3,<8.0)", "types-jinja2 (>=2.11,<3.0)", "types-jsonschema (>=4.17,<5.0)", "types-protobuf (>=4.24,<5.0)", "types-python-dateutil (>=2.8,<3.0)", "types-pyyaml (>=6.0,<7.0)", "types-requests"]
+test = ["hypothesis (>=6.87,<7.0)", "pytest (>=7.3,<8.0)", "pytest-cov (>=4.1,<5.0)", "pytest-mock", "pytest-xdist (>=3.2,<4.0)"]
+
+[[package]]
+name = "dbt-core"
+version = "1.8.5"
+description = "With dbt, data analysts and engineers can build analytics the way engineers build applications."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "dbt_core-1.8.5-py3-none-any.whl", hash = "sha256:194f0bd5d5b83b3324f9ab50d6b675b8ddfe9bf2e5d7b6c8e677fa0df92a8470"},
+    {file = "dbt_core-1.8.5.tar.gz", hash = "sha256:f22a9212a9b7d223a0ba36af0dc138ed844227462c2ca1a42f2aabf6ec412c91"},
+]
+
+[package.dependencies]
+agate = ">=1.7.0,<1.10"
+click = ">=8.0.2,<9.0"
+daff = ">=1.3.46"
+dbt-adapters = ">=1.1.1,<2.0"
+dbt-common = ">=1.0.4,<2.0"
+dbt-extractor = ">=0.5.0,<=0.6"
+dbt-semantic-interfaces = ">=0.5.1,<0.6"
+Jinja2 = ">=3.1.3,<4"
 logbook = ">=1.5,<1.6"
-mashumaro = {version = ">=3.8.1,<3.9.0", extras = ["msgpack"]}
-minimal-snowplow-tracker = ">=0.0.2,<0.1.0"
-networkx = ">=2.3,<4"
+mashumaro = {version = ">=3.9,<4.0", extras = ["msgpack"]}
+minimal-snowplow-tracker = ">=0.0.2,<0.1"
+networkx = ">=2.3,<4.0"
 packaging = ">20.9"
-pathspec = ">=0.9,<0.12"
-protobuf = ">=4.0.0"
+pathspec = ">=0.9,<0.13"
+protobuf = ">=4.0.0,<5"
 pytz = ">=2015.7"
 pyyaml = ">=6.0"
 requests = "<3.0.0"
-sqlparse = ">=0.2.3,<0.5"
-typing-extensions = ">=3.7.4"
-urllib3 = ">=1.0,<2.0"
+sqlparse = ">=0.5.0,<0.6.0"
+typing-extensions = ">=4.4"
 
 [[package]]
 name = "dbt-duckdb"
-version = "1.6.0"
+version = "1.8.3"
 description = "The duckdb adapter plugin for dbt (data build tool)"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "dbt-duckdb-1.6.0.tar.gz", hash = "sha256:e36776d6ee7aa1554a236b7ffa93c556c4419920134a3801feef7c64b706db16"},
-    {file = "dbt_duckdb-1.6.0-py3-none-any.whl", hash = "sha256:3fa094e077acbfbeb04c7b38dc3be2f6797f6fecd1323a1e3ce58e574ae22aa8"},
+    {file = "dbt_duckdb-1.8.3-py3-none-any.whl", hash = "sha256:7d2651a383c97984ce130d5cd6ca3294590fd1f092e48b5d448a3a5e6f42dc72"},
+    {file = "dbt_duckdb-1.8.3.tar.gz", hash = "sha256:c33df9ba1d4a1ac6ff2731816ad11c14b67d256a873e2ae16d85e69b7ceffb9a"},
 ]
 
 [package.dependencies]
-dbt-core = ">=1.6.0,<1.7.0"
-duckdb = ">=0.7.0"
+dbt-adapters = ">=1,<2"
+dbt-common = ">=1,<2"
+dbt-core = ">=1.8.0"
+duckdb = ">=1.0.0"
 
 [package.extras]
 glue = ["boto3", "mypy-boto3-glue"]
 
 [[package]]
 name = "dbt-extractor"
-version = "0.4.1"
+version = "0.5.1"
 description = "A tool to analyze and extract information from Jinja used in dbt projects."
 category = "main"
 optional = false
 python-versions = ">=3.6.1"
 files = [
-    {file = "dbt_extractor-0.4.1-cp36-abi3-macosx_10_7_x86_64.whl", hash = "sha256:4dc715bd740e418d8dc1dd418fea508e79208a24cf5ab110b0092a3cbe96bf71"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:bc9e0050e3a2f4ea9fe58e8794bc808e6709a0c688ed710fc7c5b6ef3e5623ec"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76872cdee659075d6ce2df92dc62e59a74ba571be62acab2e297ca478b49d766"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81435841610be1b07806d72cd89b1956c6e2a84c360b9ceb3f949c62a546d569"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7c291f9f483eae4f60dd5859097d7ba51d5cb6c4725f08973ebd18cdea89d758"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:822b1e911db230e1b9701c99896578e711232001027b518c44c32f79a46fa3f9"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:554d27741a54599c39e5c0b7dbcab77400d83f908caba284a3e960db812e5814"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a805d51a25317f53cbff951c79b9cf75421cf48e4b3e1dfb3e9e8de6d824b76c"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cad90ddc708cb4182dc16fe2c87b1f088a1679877b93e641af068eb68a25d582"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:34783d788b133f223844e280e37b3f5244f2fb60acc457aa75c2667e418d5442"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:9da211869a1220ea55c5552c1567a3ea5233a6c52fa89ca87a22465481c37bc9"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-musllinux_1_2_i686.whl", hash = "sha256:7d7c47774dc051b8c18690281a55e2e3d3320e823b17e04b06bc3ff81b1874ba"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:037907a7c7ae0391045d81338ca77ddaef899a91d80f09958f09fe374594e19b"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-win32.whl", hash = "sha256:3fe8d8e28a7bd3e0884896147269ca0202ca432d8733113386bdc84c824561bf"},
-    {file = "dbt_extractor-0.4.1-cp36-abi3-win_amd64.whl", hash = "sha256:35265a0ae0a250623b0c2e3308b2738dc8212e40e0aa88407849e9ea090bb312"},
-    {file = "dbt_extractor-0.4.1.tar.gz", hash = "sha256:75b1c665699ec0f1ffce1ba3d776f7dfce802156f22e70a7b9c8f0b4d7e80f42"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:3b91e6106b967d908b34f83929d3f50ee2b498876a1be9c055fe060ed728c556"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3614ce9f83ae4cd0dc95f77730034a793a1c090a52dcf698ba1c94050afe3a8b"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ea4edf33035d0a060b1e01c42fb2d99316457d44c954d6ed4eed9f1948664d87"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3b9bf50eb062b4344d9546fe42038996c6e7e7daa10724aa955d64717260e5d"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c0ce901d4ebf0664977e4e1cbf596d4afc6c1339fcc7d2cf67ce3481566a626f"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:cbe338b76e9ffaa18275456e041af56c21bb517f6fbda7a58308138703da0996"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b25fa7a276ab26aa2d70ff6e0cf4cfb1490d7831fb57ee1337c24d2b0333b84"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5651e458be910ff567c0da3ea2eb084fd01884cc88888ac2cf1e240dcddacc2"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62e4f040fd338b652683421ce48e903812e27fd6e7af58b1b70a4e1f9f2c79e3"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91e25ad78f1f4feadd27587ebbcc46ad909cfad843118908f30336d08d8400ca"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:cdf9938b36cd098bcdd80f43dc03864da3f69f57d903a9160a32236540d4ddcd"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:475e2c05b17eb4976eff6c8f7635be42bec33f15a74ceb87a40242c94a99cebf"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:100453ba06e169cbdb118234ab3f06f6722a2e0e316089b81c88dea701212abc"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-win32.whl", hash = "sha256:6916aae085fd5f2af069fd6947933e78b742c9e3d2165e1740c2e28ae543309a"},
+    {file = "dbt_extractor-0.5.1-cp38-abi3-win_amd64.whl", hash = "sha256:eecc08f3743e802a8ede60c89f7b2bce872acc86120cbc0ae7df229bb8a95083"},
+    {file = "dbt_extractor-0.5.1.tar.gz", hash = "sha256:cd5d95576a8dea4190240aaf9936a37fd74b4b7913ca69a3c368fc4472bb7e13"},
 ]
 
 [[package]]
 name = "dbt-postgres"
-version = "1.6.6"
-description = "The postgres adapter plugin for dbt (data build tool)"
+version = "1.8.2"
+description = "The set of adapter protocols and base functionality that supports integration with dbt-core"
 category = "main"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.8.0"
 files = [
-    {file = "dbt-postgres-1.6.6.tar.gz", hash = "sha256:e87d417c4b7abc84fbedbca78ff53661eb10f041e2a93bc0d692a196015d632f"},
-    {file = "dbt_postgres-1.6.6-py3-none-any.whl", hash = "sha256:a5d9c43e402f438a8353781f616e922a5d2d4800a10261057872c19cffa15d32"},
+    {file = "dbt_postgres-1.8.2-py3-none-any.whl", hash = "sha256:b0d9f53b5927722cd22e8135e0b76181febf3cf89aef8caf039c59bfce78afc9"},
+    {file = "dbt_postgres-1.8.2.tar.gz", hash = "sha256:23b302626dd11e90594ccff0347148252c37af1a1e8c8710bc9c03b05337f3d3"},
 ]
 
 [package.dependencies]
-agate = "*"
-dbt-core = "1.6.6"
-psycopg2-binary = ">=2.8,<3.0"
+agate = ">=1.0,<2.0"
+dbt-adapters = ">=0.1.0a1,<2.0"
+dbt-common = ">=0.1.0a1,<2.0"
+dbt-core = ">=1.8.0a1"
+psycopg2-binary = ">=2.9,<3.0"
 
 [[package]]
 name = "dbt-semantic-interfaces"
-version = "0.2.0"
+version = "0.5.1"
 description = "The shared semantic layer definitions that dbt-core and MetricFlow use"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "dbt_semantic_interfaces-0.2.0-py3-none-any.whl", hash = "sha256:823c9bd53745604cae2af854c7d5064056383d0304560c35236a33c5f0e52090"},
-    {file = "dbt_semantic_interfaces-0.2.0.tar.gz", hash = "sha256:4afecc6dc56f85ecce7ac424dea07561513467e0bf28ead7307b78a22e6b999b"},
+    {file = "dbt_semantic_interfaces-0.5.1-py3-none-any.whl", hash = "sha256:b95ff3a6721dc30f6278cb84933d95e0ef27766e67eeb6bb41906242e77f7c9b"},
+    {file = "dbt_semantic_interfaces-0.5.1.tar.gz", hash = "sha256:3a497abef1ba8112affdf804b26bfdcd5468ed95cc924b509068e18d371c7c4d"},
 ]
 
 [package.dependencies]
 click = ">=7.0,<9.0"
-importlib-metadata = ">=6.0,<7.0"
-jinja2 = ">=3.0,<4.0"
-jsonschema = ">=3.0,<4.0"
-more-itertools = ">=8.0,<9.0"
-pydantic = ">=1.10,<2.0"
-python-dateutil = ">=2.0,<3.0"
-pyyaml = ">=6.0,<7.0"
-typing-extensions = ">=4.0,<5.0"
+importlib-metadata = ">=6.0,<7"
+jinja2 = ">=3.1.3,<4"
+jsonschema = ">=4.0,<5"
+more-itertools = ">=8.0,<11.0"
+pydantic = ">=1.10,<3"
+python-dateutil = ">=2.0,<3"
+pyyaml = ">=6.0,<7"
+typing-extensions = ">=4.4,<5"
+
+[[package]]
+name = "deepdiff"
+version = "7.0.1"
+description = "Deep Difference and Search of any Python object/data. Recreate objects by adding adding deltas to each other."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "deepdiff-7.0.1-py3-none-any.whl", hash = "sha256:447760081918216aa4fd4ca78a4b6a848b81307b2ea94c810255334b759e1dc3"},
+    {file = "deepdiff-7.0.1.tar.gz", hash = "sha256:260c16f052d4badbf60351b4f77e8390bee03a0b516246f6839bc813fb429ddf"},
+]
+
+[package.dependencies]
+ordered-set = ">=4.1.0,<4.2.0"
+
+[package.extras]
+cli = ["click (==8.1.7)", "pyyaml (==6.0.1)"]
+optimize = ["orjson"]
 
 [[package]]
 name = "distlib"
-version = "0.3.7"
+version = "0.3.8"
 description = "Distribution utilities"
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"},
-    {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"},
+    {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"},
+    {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"},
 ]
 
 [[package]]
 name = "duckdb"
-version = "0.8.1"
-description = "DuckDB embedded database"
+version = "1.0.0"
+description = "DuckDB in-process database"
 category = "main"
 optional = false
-python-versions = "*"
+python-versions = ">=3.7.0"
 files = [
-    {file = "duckdb-0.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:14781d21580ee72aba1f5dcae7734674c9b6c078dd60470a08b2b420d15b996d"},
-    {file = "duckdb-0.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f13bf7ab0e56ddd2014ef762ae4ee5ea4df5a69545ce1191b8d7df8118ba3167"},
-    {file = "duckdb-0.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4032042d8363e55365bbca3faafc6dc336ed2aad088f10ae1a534ebc5bcc181"},
-    {file = "duckdb-0.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31a71bd8f0b0ca77c27fa89b99349ef22599ffefe1e7684ae2e1aa2904a08684"},
-    {file = "duckdb-0.8.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24568d6e48f3dbbf4a933109e323507a46b9399ed24c5d4388c4987ddc694fd0"},
-    {file = "duckdb-0.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297226c0dadaa07f7c5ae7cbdb9adba9567db7b16693dbd1b406b739ce0d7924"},
-    {file = "duckdb-0.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5792cf777ece2c0591194006b4d3e531f720186102492872cb32ddb9363919cf"},
-    {file = "duckdb-0.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:12803f9f41582b68921d6b21f95ba7a51e1d8f36832b7d8006186f58c3d1b344"},
-    {file = "duckdb-0.8.1-cp310-cp310-win32.whl", hash = "sha256:d0953d5a2355ddc49095e7aef1392b7f59c5be5cec8cdc98b9d9dc1f01e7ce2b"},
-    {file = "duckdb-0.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:6e6583c98a7d6637e83bcadfbd86e1f183917ea539f23b6b41178f32f813a5eb"},
-    {file = "duckdb-0.8.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fad7ed0d4415f633d955ac24717fa13a500012b600751d4edb050b75fb940c25"},
-    {file = "duckdb-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81ae602f34d38d9c48dd60f94b89f28df3ef346830978441b83c5b4eae131d08"},
-    {file = "duckdb-0.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d75cfe563aaa058d3b4ccaaa371c6271e00e3070df5de72361fd161b2fe6780"},
-    {file = "duckdb-0.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dbb55e7a3336f2462e5e916fc128c47fe1c03b6208d6bd413ac11ed95132aa0"},
-    {file = "duckdb-0.8.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6df53efd63b6fdf04657385a791a4e3c4fb94bfd5db181c4843e2c46b04fef5"},
-    {file = "duckdb-0.8.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b188b80b70d1159b17c9baaf541c1799c1ce8b2af4add179a9eed8e2616be96"},
-    {file = "duckdb-0.8.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5ad481ee353f31250b45d64b4a104e53b21415577943aa8f84d0af266dc9af85"},
-    {file = "duckdb-0.8.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1d1b1729993611b1892509d21c21628917625cdbe824a61ce891baadf684b32"},
-    {file = "duckdb-0.8.1-cp311-cp311-win32.whl", hash = "sha256:2d8f9cc301e8455a4f89aa1088b8a2d628f0c1f158d4cf9bc78971ed88d82eea"},
-    {file = "duckdb-0.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:07457a43605223f62d93d2a5a66b3f97731f79bbbe81fdd5b79954306122f612"},
-    {file = "duckdb-0.8.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d2c8062c3e978dbcd80d712ca3e307de8a06bd4f343aa457d7dd7294692a3842"},
-    {file = "duckdb-0.8.1-cp36-cp36m-win32.whl", hash = "sha256:fad486c65ae944eae2de0d590a0a4fb91a9893df98411d66cab03359f9cba39b"},
-    {file = "duckdb-0.8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:86fa4506622c52d2df93089c8e7075f1c4d0ba56f4bf27faebde8725355edf32"},
-    {file = "duckdb-0.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:60e07a62782f88420046e30cc0e3de842d0901c4fd5b8e4d28b73826ec0c3f5e"},
-    {file = "duckdb-0.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f18563675977f8cbf03748efee0165b4c8ef64e0cbe48366f78e2914d82138bb"},
-    {file = "duckdb-0.8.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16e179443832bea8439ae4dff93cf1e42c545144ead7a4ef5f473e373eea925a"},
-    {file = "duckdb-0.8.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a413d5267cb41a1afe69d30dd6d4842c588256a6fed7554c7e07dad251ede095"},
-    {file = "duckdb-0.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3784680df59eadd683b0a4c2375d451a64470ca54bd171c01e36951962b1d332"},
-    {file = "duckdb-0.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:67a1725c2b01f9b53571ecf3f92959b652f60156c1c48fb35798302e39b3c1a2"},
-    {file = "duckdb-0.8.1-cp37-cp37m-win32.whl", hash = "sha256:197d37e2588c5ad063e79819054eedb7550d43bf1a557d03ba8f8f67f71acc42"},
-    {file = "duckdb-0.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:3843feb79edf100800f5037c32d5d5a5474fb94b32ace66c707b96605e7c16b2"},
-    {file = "duckdb-0.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:624c889b0f2d656794757b3cc4fc58030d5e285f5ad2ef9fba1ea34a01dab7fb"},
-    {file = "duckdb-0.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fcbe3742d77eb5add2d617d487266d825e663270ef90253366137a47eaab9448"},
-    {file = "duckdb-0.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:47516c9299d09e9dbba097b9fb339b389313c4941da5c54109df01df0f05e78c"},
-    {file = "duckdb-0.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf1ba718b7522d34399446ebd5d4b9fcac0b56b6ac07bfebf618fd190ec37c1d"},
-    {file = "duckdb-0.8.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e36e35d38a9ae798fe8cf6a839e81494d5b634af89f4ec9483f4d0a313fc6bdb"},
-    {file = "duckdb-0.8.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23493313f88ce6e708a512daacad13e83e6d1ea0be204b175df1348f7fc78671"},
-    {file = "duckdb-0.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1fb9bf0b6f63616c8a4b9a6a32789045e98c108df100e6bac783dc1e36073737"},
-    {file = "duckdb-0.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:12fc13ecd5eddd28b203b9e3999040d3a7374a8f4b833b04bd26b8c5685c2635"},
-    {file = "duckdb-0.8.1-cp38-cp38-win32.whl", hash = "sha256:a12bf4b18306c9cb2c9ba50520317e6cf2de861f121d6f0678505fa83468c627"},
-    {file = "duckdb-0.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:e4e809358b9559c00caac4233e0e2014f3f55cd753a31c4bcbbd1b55ad0d35e4"},
-    {file = "duckdb-0.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7acedfc00d97fbdb8c3d120418c41ef3cb86ef59367f3a9a30dff24470d38680"},
-    {file = "duckdb-0.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:99bfe264059cdc1e318769103f656f98e819cd4e231cd76c1d1a0327f3e5cef8"},
-    {file = "duckdb-0.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:538b225f361066231bc6cd66c04a5561de3eea56115a5dd773e99e5d47eb1b89"},
-    {file = "duckdb-0.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae0be3f71a18cd8492d05d0fc1bc67d01d5a9457b04822d025b0fc8ee6efe32e"},
-    {file = "duckdb-0.8.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd82ba63b58672e46c8ec60bc9946aa4dd7b77f21c1ba09633d8847ad9eb0d7b"},
-    {file = "duckdb-0.8.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:780a34559aaec8354e83aa4b7b31b3555f1b2cf75728bf5ce11b89a950f5cdd9"},
-    {file = "duckdb-0.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:01f0d4e9f7103523672bda8d3f77f440b3e0155dd3b2f24997bc0c77f8deb460"},
-    {file = "duckdb-0.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:31f692decb98c2d57891da27180201d9e93bb470a3051fcf413e8da65bca37a5"},
-    {file = "duckdb-0.8.1-cp39-cp39-win32.whl", hash = "sha256:e7fe93449cd309bbc67d1bf6f6392a6118e94a9a4479ab8a80518742e855370a"},
-    {file = "duckdb-0.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:81d670bc6807672f038332d9bf587037aabdd741b0810de191984325ed307abd"},
-    {file = "duckdb-0.8.1.tar.gz", hash = "sha256:a54d37f4abc2afc4f92314aaa56ecf215a411f40af4bffe1e86bd25e62aceee9"},
+    {file = "duckdb-1.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4a8ce2d1f9e1c23b9bab3ae4ca7997e9822e21563ff8f646992663f66d050211"},
+    {file = "duckdb-1.0.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:19797670f20f430196e48d25d082a264b66150c264c1e8eae8e22c64c2c5f3f5"},
+    {file = "duckdb-1.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b71c342090fe117b35d866a91ad6bffce61cd6ff3e0cff4003f93fc1506da0d8"},
+    {file = "duckdb-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25dd69f44ad212c35ae2ea736b0e643ea2b70f204b8dff483af1491b0e2a4cec"},
+    {file = "duckdb-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8da5f293ecb4f99daa9a9352c5fd1312a6ab02b464653a0c3a25ab7065c45d4d"},
+    {file = "duckdb-1.0.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3207936da9967ddbb60644ec291eb934d5819b08169bc35d08b2dedbe7068c60"},
+    {file = "duckdb-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1128d6c9c33e883b1f5df6b57c1eb46b7ab1baf2650912d77ee769aaa05111f9"},
+    {file = "duckdb-1.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:02310d263474d0ac238646677feff47190ffb82544c018b2ff732a4cb462c6ef"},
+    {file = "duckdb-1.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:75586791ab2702719c284157b65ecefe12d0cca9041da474391896ddd9aa71a4"},
+    {file = "duckdb-1.0.0-cp311-cp311-macosx_12_0_universal2.whl", hash = "sha256:83bb415fc7994e641344f3489e40430ce083b78963cb1057bf714ac3a58da3ba"},
+    {file = "duckdb-1.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:bee2e0b415074e84c5a2cefd91f6b5ebeb4283e7196ba4ef65175a7cef298b57"},
+    {file = "duckdb-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa5a4110d2a499312609544ad0be61e85a5cdad90e5b6d75ad16b300bf075b90"},
+    {file = "duckdb-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa389e6a382d4707b5f3d1bc2087895925ebb92b77e9fe3bfb23c9b98372fdc"},
+    {file = "duckdb-1.0.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7ede6f5277dd851f1a4586b0c78dc93f6c26da45e12b23ee0e88c76519cbdbe0"},
+    {file = "duckdb-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0b88cdbc0d5c3e3d7545a341784dc6cafd90fc035f17b2f04bf1e870c68456e5"},
+    {file = "duckdb-1.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd1693cdd15375156f7fff4745debc14e5c54928589f67b87fb8eace9880c370"},
+    {file = "duckdb-1.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:c65a7fe8a8ce21b985356ee3ec0c3d3b3b2234e288e64b4cfb03356dbe6e5583"},
+    {file = "duckdb-1.0.0-cp312-cp312-macosx_12_0_universal2.whl", hash = "sha256:e5a8eda554379b3a43b07bad00968acc14dd3e518c9fbe8f128b484cf95e3d16"},
+    {file = "duckdb-1.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:a1b6acdd54c4a7b43bd7cb584975a1b2ff88ea1a31607a2b734b17960e7d3088"},
+    {file = "duckdb-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a677bb1b6a8e7cab4a19874249d8144296e6e39dae38fce66a80f26d15e670df"},
+    {file = "duckdb-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:752e9d412b0a2871bf615a2ede54be494c6dc289d076974eefbf3af28129c759"},
+    {file = "duckdb-1.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3aadb99d098c5e32d00dc09421bc63a47134a6a0de9d7cd6abf21780b678663c"},
+    {file = "duckdb-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83b7091d4da3e9301c4f9378833f5ffe934fb1ad2b387b439ee067b2c10c8bb0"},
+    {file = "duckdb-1.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:6a8058d0148b544694cb5ea331db44f6c2a00a7b03776cc4dd1470735c3d5ff7"},
+    {file = "duckdb-1.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40cb20e5ee19d44bc66ec99969af791702a049079dc5f248c33b1c56af055f4"},
+    {file = "duckdb-1.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7bce1bc0de9af9f47328e24e6e7e39da30093179b1c031897c042dd94a59c8e"},
+    {file = "duckdb-1.0.0-cp37-cp37m-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8355507f7a04bc0a3666958f4414a58e06141d603e91c0fa5a7c50e49867fb6d"},
+    {file = "duckdb-1.0.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:39f1a46f5a45ad2886dc9b02ce5b484f437f90de66c327f86606d9ba4479d475"},
+    {file = "duckdb-1.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d29ba477b27ae41676b62c8fae8d04ee7cbe458127a44f6049888231ca58fa"},
+    {file = "duckdb-1.0.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:1bea713c1925918714328da76e79a1f7651b2b503511498ccf5e007a7e67d49e"},
+    {file = "duckdb-1.0.0-cp38-cp38-macosx_12_0_universal2.whl", hash = "sha256:bfe67f3bcf181edbf6f918b8c963eb060e6aa26697d86590da4edc5707205450"},
+    {file = "duckdb-1.0.0-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:dbc6093a75242f002be1d96a6ace3fdf1d002c813e67baff52112e899de9292f"},
+    {file = "duckdb-1.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba1881a2b11c507cee18f8fd9ef10100be066fddaa2c20fba1f9a664245cd6d8"},
+    {file = "duckdb-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:445d0bb35087c522705c724a75f9f1c13f1eb017305b694d2686218d653c8142"},
+    {file = "duckdb-1.0.0-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:224553432e84432ffb9684f33206572477049b371ce68cc313a01e214f2fbdda"},
+    {file = "duckdb-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d3914032e47c4e76636ad986d466b63fdea65e37be8a6dfc484ed3f462c4fde4"},
+    {file = "duckdb-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:af9128a2eb7e1bb50cd2c2020d825fb2946fdad0a2558920cd5411d998999334"},
+    {file = "duckdb-1.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dd2659a5dbc0df0de68f617a605bf12fe4da85ba24f67c08730984a0892087e8"},
+    {file = "duckdb-1.0.0-cp39-cp39-macosx_12_0_universal2.whl", hash = "sha256:ac5a4afb0bc20725e734e0b2c17e99a274de4801aff0d4e765d276b99dad6d90"},
+    {file = "duckdb-1.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2c5a53bee3668d6e84c0536164589d5127b23d298e4c443d83f55e4150fafe61"},
+    {file = "duckdb-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b980713244d7708b25ee0a73de0c65f0e5521c47a0e907f5e1b933d79d972ef6"},
+    {file = "duckdb-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21cbd4f9fe7b7a56eff96c3f4d6778770dd370469ca2212eddbae5dd63749db5"},
+    {file = "duckdb-1.0.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed228167c5d49888c5ef36f6f9cbf65011c2daf9dcb53ea8aa7a041ce567b3e4"},
+    {file = "duckdb-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:46d8395fbcea7231fd5032a250b673cc99352fef349b718a23dea2c0dd2b8dec"},
+    {file = "duckdb-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:6ad1fc1a4d57e7616944166a5f9417bdbca1ea65c490797e3786e3a42e162d8a"},
+    {file = "duckdb-1.0.0.tar.gz", hash = "sha256:a2a059b77bc7d5b76ae9d88e267372deff19c291048d59450c431e166233d453"},
 ]
 
 [[package]]
 name = "exceptiongroup"
-version = "1.1.2"
+version = "1.2.2"
 description = "Backport of PEP 654 (exception groups)"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"},
-    {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"},
+    {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"},
+    {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"},
 ]
 
 [package.extras]
@@ -549,46 +599,31 @@ test = ["pytest (>=6)"]
 
 [[package]]
 name = "filelock"
-version = "3.12.2"
+version = "3.15.4"
 description = "A platform independent file lock."
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"},
-    {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"},
+    {file = "filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7"},
+    {file = "filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb"},
 ]
 
 [package.extras]
-docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"]
-testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"]
-
-[[package]]
-name = "hologram"
-version = "0.0.16"
-description = "JSON schema generation from dataclasses"
-category = "main"
-optional = false
-python-versions = "*"
-files = [
-    {file = "hologram-0.0.16-py3-none-any.whl", hash = "sha256:4e56bd525336bb64a18916f871977a4125b64be8aaa750233583003333cda361"},
-    {file = "hologram-0.0.16.tar.gz", hash = "sha256:1c2c921b4e575361623ea0e0d0aa5aee377b1a333cc6c6a879e213ed34583e55"},
-]
-
-[package.dependencies]
-jsonschema = ">=3.0"
-python-dateutil = ">=2.8,<2.9"
+docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
+testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)", "virtualenv (>=20.26.2)"]
+typing = ["typing-extensions (>=4.8)"]
 
 [[package]]
 name = "identify"
-version = "2.5.26"
+version = "2.6.0"
 description = "File identification library for Python"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"},
-    {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"},
+    {file = "identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0"},
+    {file = "identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf"},
 ]
 
 [package.extras]
@@ -596,33 +631,33 @@ license = ["ukkonen"]
 
 [[package]]
 name = "idna"
-version = "3.4"
+version = "3.8"
 description = "Internationalized Domain Names in Applications (IDNA)"
 category = "main"
 optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.6"
 files = [
-    {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
-    {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
+    {file = "idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac"},
+    {file = "idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603"},
 ]
 
 [[package]]
 name = "importlib-metadata"
-version = "6.8.0"
+version = "6.11.0"
 description = "Read metadata from Python packages"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"},
-    {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"},
+    {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"},
+    {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"},
 ]
 
 [package.dependencies]
 zipp = ">=0.5"
 
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"]
 perf = ["ipython"]
 testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"]
 
@@ -655,14 +690,14 @@ six = "*"
 
 [[package]]
 name = "jinja2"
-version = "3.1.2"
+version = "3.1.4"
 description = "A very fast and expressive template engine."
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
-    {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
+    {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
+    {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
 ]
 
 [package.dependencies]
@@ -673,40 +708,55 @@ i18n = ["Babel (>=2.7)"]
 
 [[package]]
 name = "jsonschema"
-version = "3.2.0"
+version = "4.23.0"
 description = "An implementation of JSON Schema validation for Python"
 category = "main"
 optional = false
-python-versions = "*"
+python-versions = ">=3.8"
 files = [
-    {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
-    {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+    {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"},
+    {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"},
 ]
 
 [package.dependencies]
-attrs = ">=17.4.0"
-pyrsistent = ">=0.14.0"
-setuptools = "*"
-six = ">=1.11.0"
+attrs = ">=22.2.0"
+jsonschema-specifications = ">=2023.03.6"
+referencing = ">=0.28.4"
+rpds-py = ">=0.7.1"
 
 [package.extras]
-format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
-format-nongpl = ["idna", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "webcolors"]
+format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
+format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2023.12.1"
+description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"},
+    {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"},
+]
+
+[package.dependencies]
+referencing = ">=0.31.0"
 
 [[package]]
 name = "leather"
-version = "0.3.4"
+version = "0.4.0"
 description = "Python charting for 80% of humans."
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "leather-0.3.4-py2.py3-none-any.whl", hash = "sha256:5e741daee96e9f1e9e06081b8c8a10c4ac199301a0564cdd99b09df15b4603d2"},
-    {file = "leather-0.3.4.tar.gz", hash = "sha256:b43e21c8fa46b2679de8449f4d953c06418666dc058ce41055ee8a8d3bb40918"},
+    {file = "leather-0.4.0-py2.py3-none-any.whl", hash = "sha256:18290bc93749ae39039af5e31e871fcfad74d26c4c3ea28ea4f681f4571b3a2b"},
+    {file = "leather-0.4.0.tar.gz", hash = "sha256:f964bec2086f3153a6c16e707f20cb718f811f57af116075f4c0f4805c608b95"},
 ]
 
-[package.dependencies]
-six = ">=1.6.1"
+[package.extras]
+test = ["cssselect (>=0.9.1)", "lxml (>=3.6.0)", "pytest", "pytest-cov"]
 
 [[package]]
 name = "logbook"
@@ -765,74 +815,84 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
 
 [[package]]
 name = "markupsafe"
-version = "2.1.3"
+version = "2.1.5"
 description = "Safely add untrusted strings to HTML/XML markup."
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"},
-    {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"},
-    {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"},
-    {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"},
-    {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"},
-    {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"},
-    {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"},
+    {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"},
+    {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"},
+    {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"},
+    {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"},
+    {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"},
+    {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"},
+    {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
 ]
 
 [[package]]
 name = "mashumaro"
-version = "3.8.1"
-description = "Fast serialization library on top of dataclasses"
+version = "3.13.1"
+description = "Fast and well tested serialization library"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "mashumaro-3.8.1-py3-none-any.whl", hash = "sha256:e060469a4bec1c86f8145ea27ecd99027ea3e343075a4efcb5e8a969a45b9fb9"},
-    {file = "mashumaro-3.8.1.tar.gz", hash = "sha256:8bae8b25e2287b75094655b8ba8635f34016c09ca16498188f2f3b198d88b7ef"},
+    {file = "mashumaro-3.13.1-py3-none-any.whl", hash = "sha256:ad0a162b8f4ea232dadd2891d77ff20165b855b9d84610f36ac84462d4576aa0"},
+    {file = "mashumaro-3.13.1.tar.gz", hash = "sha256:169f0290253b3e6077bcb39c14a9dd0791a3fdedd9e286e536ae561d4ff1975b"},
 ]
 
 [package.dependencies]
@@ -874,236 +934,275 @@ six = ">=1.9.0,<2.0"
 
 [[package]]
 name = "more-itertools"
-version = "8.14.0"
+version = "10.4.0"
 description = "More routines for operating on iterables, beyond itertools"
 category = "main"
 optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.8"
 files = [
-    {file = "more-itertools-8.14.0.tar.gz", hash = "sha256:c09443cd3d5438b8dafccd867a6bc1cb0894389e90cb53d227456b0b0bccb750"},
-    {file = "more_itertools-8.14.0-py3-none-any.whl", hash = "sha256:1bc4f91ee5b1b31ac7ceacc17c09befe6a40a503907baf9c839c229b5095cfd2"},
+    {file = "more-itertools-10.4.0.tar.gz", hash = "sha256:fe0e63c4ab068eac62410ab05cccca2dc71ec44ba8ef29916a0090df061cf923"},
+    {file = "more_itertools-10.4.0-py3-none-any.whl", hash = "sha256:0f7d9f83a0a8dcfa8a2694a770590d98a67ea943e3d9f5298309a484758c4e27"},
 ]
 
 [[package]]
 name = "msgpack"
-version = "1.0.5"
+version = "1.0.8"
 description = "MessagePack serializer"
 category = "main"
 optional = false
-python-versions = "*"
+python-versions = ">=3.8"
 files = [
-    {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"},
-    {file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"},
-    {file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"},
-    {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"},
-    {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"},
-    {file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"},
-    {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"},
-    {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"},
-    {file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"},
-    {file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"},
-    {file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"},
-    {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"},
-    {file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"},
-    {file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"},
-    {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"},
-    {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"},
-    {file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"},
-    {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"},
-    {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"},
-    {file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"},
-    {file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"},
-    {file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"},
-    {file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"},
-    {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"},
-    {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"},
-    {file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"},
-    {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"},
-    {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"},
-    {file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"},
-    {file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"},
-    {file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"},
-    {file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"},
-    {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"},
-    {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"},
-    {file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"},
-    {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"},
-    {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"},
-    {file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"},
-    {file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"},
-    {file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"},
-    {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"},
-    {file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"},
-    {file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"},
-    {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"},
-    {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"},
-    {file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"},
-    {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"},
-    {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"},
-    {file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"},
-    {file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"},
-    {file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"},
-    {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"},
-    {file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"},
-    {file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"},
-    {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"},
-    {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"},
-    {file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"},
-    {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"},
-    {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"},
-    {file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"},
-    {file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"},
-    {file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"},
-    {file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"},
+    {file = "msgpack-1.0.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:505fe3d03856ac7d215dbe005414bc28505d26f0c128906037e66d98c4e95868"},
+    {file = "msgpack-1.0.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e6b7842518a63a9f17107eb176320960ec095a8ee3b4420b5f688e24bf50c53c"},
+    {file = "msgpack-1.0.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:376081f471a2ef24828b83a641a02c575d6103a3ad7fd7dade5486cad10ea659"},
+    {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e390971d082dba073c05dbd56322427d3280b7cc8b53484c9377adfbae67dc2"},
+    {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e073efcba9ea99db5acef3959efa45b52bc67b61b00823d2a1a6944bf45982"},
+    {file = "msgpack-1.0.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82d92c773fbc6942a7a8b520d22c11cfc8fd83bba86116bfcf962c2f5c2ecdaa"},
+    {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9ee32dcb8e531adae1f1ca568822e9b3a738369b3b686d1477cbc643c4a9c128"},
+    {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e3aa7e51d738e0ec0afbed661261513b38b3014754c9459508399baf14ae0c9d"},
+    {file = "msgpack-1.0.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69284049d07fce531c17404fcba2bb1df472bc2dcdac642ae71a2d079d950653"},
+    {file = "msgpack-1.0.8-cp310-cp310-win32.whl", hash = "sha256:13577ec9e247f8741c84d06b9ece5f654920d8365a4b636ce0e44f15e07ec693"},
+    {file = "msgpack-1.0.8-cp310-cp310-win_amd64.whl", hash = "sha256:e532dbd6ddfe13946de050d7474e3f5fb6ec774fbb1a188aaf469b08cf04189a"},
+    {file = "msgpack-1.0.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9517004e21664f2b5a5fd6333b0731b9cf0817403a941b393d89a2f1dc2bd836"},
+    {file = "msgpack-1.0.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d16a786905034e7e34098634b184a7d81f91d4c3d246edc6bd7aefb2fd8ea6ad"},
+    {file = "msgpack-1.0.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2872993e209f7ed04d963e4b4fbae72d034844ec66bc4ca403329db2074377b"},
+    {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c330eace3dd100bdb54b5653b966de7f51c26ec4a7d4e87132d9b4f738220ba"},
+    {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b5c044f3eff2a6534768ccfd50425939e7a8b5cf9a7261c385de1e20dcfc85"},
+    {file = "msgpack-1.0.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1876b0b653a808fcd50123b953af170c535027bf1d053b59790eebb0aeb38950"},
+    {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dfe1f0f0ed5785c187144c46a292b8c34c1295c01da12e10ccddfc16def4448a"},
+    {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3528807cbbb7f315bb81959d5961855e7ba52aa60a3097151cb21956fbc7502b"},
+    {file = "msgpack-1.0.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e2f879ab92ce502a1e65fce390eab619774dda6a6ff719718069ac94084098ce"},
+    {file = "msgpack-1.0.8-cp311-cp311-win32.whl", hash = "sha256:26ee97a8261e6e35885c2ecd2fd4a6d38252246f94a2aec23665a4e66d066305"},
+    {file = "msgpack-1.0.8-cp311-cp311-win_amd64.whl", hash = "sha256:eadb9f826c138e6cf3c49d6f8de88225a3c0ab181a9b4ba792e006e5292d150e"},
+    {file = "msgpack-1.0.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:114be227f5213ef8b215c22dde19532f5da9652e56e8ce969bf0a26d7c419fee"},
+    {file = "msgpack-1.0.8-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d661dc4785affa9d0edfdd1e59ec056a58b3dbb9f196fa43587f3ddac654ac7b"},
+    {file = "msgpack-1.0.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d56fd9f1f1cdc8227d7b7918f55091349741904d9520c65f0139a9755952c9e8"},
+    {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0726c282d188e204281ebd8de31724b7d749adebc086873a59efb8cf7ae27df3"},
+    {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8db8e423192303ed77cff4dce3a4b88dbfaf43979d280181558af5e2c3c71afc"},
+    {file = "msgpack-1.0.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99881222f4a8c2f641f25703963a5cefb076adffd959e0558dc9f803a52d6a58"},
+    {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b5505774ea2a73a86ea176e8a9a4a7c8bf5d521050f0f6f8426afe798689243f"},
+    {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ef254a06bcea461e65ff0373d8a0dd1ed3aa004af48839f002a0c994a6f72d04"},
+    {file = "msgpack-1.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e1dd7839443592d00e96db831eddb4111a2a81a46b028f0facd60a09ebbdd543"},
+    {file = "msgpack-1.0.8-cp312-cp312-win32.whl", hash = "sha256:64d0fcd436c5683fdd7c907eeae5e2cbb5eb872fafbc03a43609d7941840995c"},
+    {file = "msgpack-1.0.8-cp312-cp312-win_amd64.whl", hash = "sha256:74398a4cf19de42e1498368c36eed45d9528f5fd0155241e82c4082b7e16cffd"},
+    {file = "msgpack-1.0.8-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ceea77719d45c839fd73abcb190b8390412a890df2f83fb8cf49b2a4b5c2f40"},
+    {file = "msgpack-1.0.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1ab0bbcd4d1f7b6991ee7c753655b481c50084294218de69365f8f1970d4c151"},
+    {file = "msgpack-1.0.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1cce488457370ffd1f953846f82323cb6b2ad2190987cd4d70b2713e17268d24"},
+    {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3923a1778f7e5ef31865893fdca12a8d7dc03a44b33e2a5f3295416314c09f5d"},
+    {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a22e47578b30a3e199ab067a4d43d790249b3c0587d9a771921f86250c8435db"},
+    {file = "msgpack-1.0.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd739c9251d01e0279ce729e37b39d49a08c0420d3fee7f2a4968c0576678f77"},
+    {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d3420522057ebab1728b21ad473aa950026d07cb09da41103f8e597dfbfaeb13"},
+    {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5845fdf5e5d5b78a49b826fcdc0eb2e2aa7191980e3d2cfd2a30303a74f212e2"},
+    {file = "msgpack-1.0.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a0e76621f6e1f908ae52860bdcb58e1ca85231a9b0545e64509c931dd34275a"},
+    {file = "msgpack-1.0.8-cp38-cp38-win32.whl", hash = "sha256:374a8e88ddab84b9ada695d255679fb99c53513c0a51778796fcf0944d6c789c"},
+    {file = "msgpack-1.0.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3709997b228685fe53e8c433e2df9f0cdb5f4542bd5114ed17ac3c0129b0480"},
+    {file = "msgpack-1.0.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f51bab98d52739c50c56658cc303f190785f9a2cd97b823357e7aeae54c8f68a"},
+    {file = "msgpack-1.0.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:73ee792784d48aa338bba28063e19a27e8d989344f34aad14ea6e1b9bd83f596"},
+    {file = "msgpack-1.0.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f9904e24646570539a8950400602d66d2b2c492b9010ea7e965025cb71d0c86d"},
+    {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e75753aeda0ddc4c28dce4c32ba2f6ec30b1b02f6c0b14e547841ba5b24f753f"},
+    {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5dbf059fb4b7c240c873c1245ee112505be27497e90f7c6591261c7d3c3a8228"},
+    {file = "msgpack-1.0.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4916727e31c28be8beaf11cf117d6f6f188dcc36daae4e851fee88646f5b6b18"},
+    {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7938111ed1358f536daf311be244f34df7bf3cdedb3ed883787aca97778b28d8"},
+    {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:493c5c5e44b06d6c9268ce21b302c9ca055c1fd3484c25ba41d34476c76ee746"},
+    {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"},
+    {file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"},
+    {file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"},
+    {file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"},
 ]
 
 [[package]]
 name = "networkx"
-version = "3.1"
+version = "3.3"
 description = "Python package for creating and manipulating graphs and networks"
 category = "main"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.10"
 files = [
-    {file = "networkx-3.1-py3-none-any.whl", hash = "sha256:4f33f68cb2afcf86f28a45f43efc27a9386b535d567d2127f8f61d51dec58d36"},
-    {file = "networkx-3.1.tar.gz", hash = "sha256:de346335408f84de0eada6ff9fafafff9bcda11f0a0dfaa931133debb146ab61"},
+    {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"},
+    {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"},
 ]
 
 [package.extras]
-default = ["matplotlib (>=3.4)", "numpy (>=1.20)", "pandas (>=1.3)", "scipy (>=1.8)"]
-developer = ["mypy (>=1.1)", "pre-commit (>=3.2)"]
-doc = ["nb2plots (>=0.6)", "numpydoc (>=1.5)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.13)", "sphinx (>=6.1)", "sphinx-gallery (>=0.12)", "texext (>=0.6.7)"]
-extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.10)", "sympy (>=1.10)"]
-test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"]
+default = ["matplotlib (>=3.6)", "numpy (>=1.23)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"]
+developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"]
+doc = ["myst-nb (>=1.0)", "numpydoc (>=1.7)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"]
+extra = ["lxml (>=4.6)", "pydot (>=2.0)", "pygraphviz (>=1.12)", "sympy (>=1.10)"]
+test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"]
 
 [[package]]
 name = "nodeenv"
-version = "1.8.0"
+version = "1.9.1"
 description = "Node.js virtual environment builder"
 category = "main"
 optional = false
-python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 files = [
-    {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"},
-    {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"},
+    {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"},
+    {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"},
 ]
 
-[package.dependencies]
-setuptools = "*"
-
 [[package]]
 name = "numpy"
-version = "1.25.2"
+version = "2.1.0"
 description = "Fundamental package for array computing in Python"
 category = "main"
 optional = false
-python-versions = ">=3.9"
+python-versions = ">=3.10"
+files = [
+    {file = "numpy-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6326ab99b52fafdcdeccf602d6286191a79fe2fda0ae90573c5814cd2b0bc1b8"},
+    {file = "numpy-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0937e54c09f7a9a68da6889362ddd2ff584c02d015ec92672c099b61555f8911"},
+    {file = "numpy-2.1.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:30014b234f07b5fec20f4146f69e13cfb1e33ee9a18a1879a0142fbb00d47673"},
+    {file = "numpy-2.1.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:899da829b362ade41e1e7eccad2cf274035e1cb36ba73034946fccd4afd8606b"},
+    {file = "numpy-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08801848a40aea24ce16c2ecde3b756f9ad756586fb2d13210939eb69b023f5b"},
+    {file = "numpy-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:398049e237d1aae53d82a416dade04defed1a47f87d18d5bd615b6e7d7e41d1f"},
+    {file = "numpy-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0abb3916a35d9090088a748636b2c06dc9a6542f99cd476979fb156a18192b84"},
+    {file = "numpy-2.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10e2350aea18d04832319aac0f887d5fcec1b36abd485d14f173e3e900b83e33"},
+    {file = "numpy-2.1.0-cp310-cp310-win32.whl", hash = "sha256:f6b26e6c3b98adb648243670fddc8cab6ae17473f9dc58c51574af3e64d61211"},
+    {file = "numpy-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:f505264735ee074250a9c78247ee8618292091d9d1fcc023290e9ac67e8f1afa"},
+    {file = "numpy-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:76368c788ccb4f4782cf9c842b316140142b4cbf22ff8db82724e82fe1205dce"},
+    {file = "numpy-2.1.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:f8e93a01a35be08d31ae33021e5268f157a2d60ebd643cfc15de6ab8e4722eb1"},
+    {file = "numpy-2.1.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9523f8b46485db6939bd069b28b642fec86c30909cea90ef550373787f79530e"},
+    {file = "numpy-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54139e0eb219f52f60656d163cbe67c31ede51d13236c950145473504fa208cb"},
+    {file = "numpy-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5ebbf9fbdabed208d4ecd2e1dfd2c0741af2f876e7ae522c2537d404ca895c3"},
+    {file = "numpy-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:378cb4f24c7d93066ee4103204f73ed046eb88f9ad5bb2275bb9fa0f6a02bd36"},
+    {file = "numpy-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8f699a709120b220dfe173f79c73cb2a2cab2c0b88dd59d7b49407d032b8ebd"},
+    {file = "numpy-2.1.0-cp311-cp311-win32.whl", hash = "sha256:ffbd6faeb190aaf2b5e9024bac9622d2ee549b7ec89ef3a9373fa35313d44e0e"},
+    {file = "numpy-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0af3a5987f59d9c529c022c8c2a64805b339b7ef506509fba7d0556649b9714b"},
+    {file = "numpy-2.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fe76d75b345dc045acdbc006adcb197cc680754afd6c259de60d358d60c93736"},
+    {file = "numpy-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f358ea9e47eb3c2d6eba121ab512dfff38a88db719c38d1e67349af210bc7529"},
+    {file = "numpy-2.1.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:dd94ce596bda40a9618324547cfaaf6650b1a24f5390350142499aa4e34e53d1"},
+    {file = "numpy-2.1.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b47c551c6724960479cefd7353656498b86e7232429e3a41ab83be4da1b109e8"},
+    {file = "numpy-2.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0756a179afa766ad7cb6f036de622e8a8f16ffdd55aa31f296c870b5679d745"},
+    {file = "numpy-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24003ba8ff22ea29a8c306e61d316ac74111cebf942afbf692df65509a05f111"},
+    {file = "numpy-2.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b34fa5e3b5d6dc7e0a4243fa0f81367027cb6f4a7215a17852979634b5544ee0"},
+    {file = "numpy-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4f982715e65036c34897eb598d64aef15150c447be2cfc6643ec7a11af06574"},
+    {file = "numpy-2.1.0-cp312-cp312-win32.whl", hash = "sha256:c4cd94dfefbefec3f8b544f61286584292d740e6e9d4677769bc76b8f41deb02"},
+    {file = "numpy-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0cdef204199278f5c461a0bed6ed2e052998276e6d8ab2963d5b5c39a0500bc"},
+    {file = "numpy-2.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8ab81ccd753859ab89e67199b9da62c543850f819993761c1e94a75a814ed667"},
+    {file = "numpy-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:442596f01913656d579309edcd179a2a2f9977d9a14ff41d042475280fc7f34e"},
+    {file = "numpy-2.1.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:848c6b5cad9898e4b9ef251b6f934fa34630371f2e916261070a4eb9092ffd33"},
+    {file = "numpy-2.1.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:54c6a63e9d81efe64bfb7bcb0ec64332a87d0b87575f6009c8ba67ea6374770b"},
+    {file = "numpy-2.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:652e92fc409e278abdd61e9505649e3938f6d04ce7ef1953f2ec598a50e7c195"},
+    {file = "numpy-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ab32eb9170bf8ffcbb14f11613f4a0b108d3ffee0832457c5d4808233ba8977"},
+    {file = "numpy-2.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:8fb49a0ba4d8f41198ae2d52118b050fd34dace4b8f3fb0ee34e23eb4ae775b1"},
+    {file = "numpy-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44e44973262dc3ae79e9063a1284a73e09d01b894b534a769732ccd46c28cc62"},
+    {file = "numpy-2.1.0-cp313-cp313-win32.whl", hash = "sha256:ab83adc099ec62e044b1fbb3a05499fa1e99f6d53a1dde102b2d85eff66ed324"},
+    {file = "numpy-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:de844aaa4815b78f6023832590d77da0e3b6805c644c33ce94a1e449f16d6ab5"},
+    {file = "numpy-2.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:343e3e152bf5a087511cd325e3b7ecfd5b92d369e80e74c12cd87826e263ec06"},
+    {file = "numpy-2.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f07fa2f15dabe91259828ce7d71b5ca9e2eb7c8c26baa822c825ce43552f4883"},
+    {file = "numpy-2.1.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5474dad8c86ee9ba9bb776f4b99ef2d41b3b8f4e0d199d4f7304728ed34d0300"},
+    {file = "numpy-2.1.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:1f817c71683fd1bb5cff1529a1d085a57f02ccd2ebc5cd2c566f9a01118e3b7d"},
+    {file = "numpy-2.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a3336fbfa0d38d3deacd3fe7f3d07e13597f29c13abf4d15c3b6dc2291cbbdd"},
+    {file = "numpy-2.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a894c51fd8c4e834f00ac742abad73fc485df1062f1b875661a3c1e1fb1c2f6"},
+    {file = "numpy-2.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:9156ca1f79fc4acc226696e95bfcc2b486f165a6a59ebe22b2c1f82ab190384a"},
+    {file = "numpy-2.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:624884b572dff8ca8f60fab591413f077471de64e376b17d291b19f56504b2bb"},
+    {file = "numpy-2.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:15ef8b2177eeb7e37dd5ef4016f30b7659c57c2c0b57a779f1d537ff33a72c7b"},
+    {file = "numpy-2.1.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:e5f0642cdf4636198a4990de7a71b693d824c56a757862230454629cf62e323d"},
+    {file = "numpy-2.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15976718c004466406342789f31b6673776360f3b1e3c575f25302d7e789575"},
+    {file = "numpy-2.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6c1de77ded79fef664d5098a66810d4d27ca0224e9051906e634b3f7ead134c2"},
+    {file = "numpy-2.1.0.tar.gz", hash = "sha256:7dc90da0081f7e1da49ec4e398ede6a8e9cc4f5ebe5f9e06b443ed889ee9aaa2"},
+]
+
+[[package]]
+name = "ordered-set"
+version = "4.1.0"
+description = "An OrderedSet is a custom MutableSet that remembers its order, so that every"
+category = "main"
+optional = false
+python-versions = ">=3.7"
 files = [
-    {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"},
-    {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"},
-    {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"},
-    {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"},
-    {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"},
-    {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"},
-    {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"},
-    {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"},
-    {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"},
-    {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"},
-    {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"},
-    {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"},
-    {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"},
-    {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"},
-    {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"},
-    {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"},
-    {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"},
-    {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"},
-    {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"},
-    {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"},
-    {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"},
-    {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"},
-    {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"},
-    {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"},
-    {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"},
+    {file = "ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8"},
+    {file = "ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562"},
 ]
 
+[package.extras]
+dev = ["black", "mypy", "pytest"]
+
 [[package]]
 name = "packaging"
-version = "23.1"
+version = "24.1"
 description = "Core utilities for Python packages"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"},
-    {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"},
+    {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
+    {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
 ]
 
 [[package]]
 name = "pandas"
-version = "2.0.3"
+version = "2.2.2"
 description = "Powerful data structures for data analysis, time series, and statistics"
 category = "main"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"},
-    {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"},
-    {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"},
-    {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"},
-    {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"},
-    {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"},
-    {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"},
-    {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"},
-    {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"},
-    {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"},
-    {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"},
-    {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"},
-    {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"},
-    {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"},
-    {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"},
-    {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"},
-    {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"},
-    {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"},
-    {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"},
-    {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"},
-    {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"},
-    {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"},
-    {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"},
-    {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"},
-    {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"},
+    {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"},
+    {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"},
+    {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"},
+    {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"},
+    {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"},
+    {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"},
+    {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"},
+    {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"},
+    {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"},
+    {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"},
+    {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"},
+    {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"},
+    {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"},
+    {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"},
+    {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"},
+    {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"},
+    {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"},
+    {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"},
+    {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"},
+    {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"},
+    {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"},
+    {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"},
+    {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"},
+    {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"},
+    {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"},
+    {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"},
+    {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"},
+    {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"},
+    {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"},
 ]
 
 [package.dependencies]
 numpy = [
-    {version = ">=1.21.0", markers = "python_version >= \"3.10\""},
-    {version = ">=1.23.2", markers = "python_version >= \"3.11\""},
+    {version = ">=1.22.4", markers = "python_version < \"3.11\""},
+    {version = ">=1.23.2", markers = "python_version == \"3.11\""},
+    {version = ">=1.26.0", markers = "python_version >= \"3.12\""},
 ]
 python-dateutil = ">=2.8.2"
 pytz = ">=2020.1"
-tzdata = ">=2022.1"
+tzdata = ">=2022.7"
 
 [package.extras]
-all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"]
-aws = ["s3fs (>=2021.08.0)"]
-clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"]
-compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"]
-computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"]
-excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"]
-feather = ["pyarrow (>=7.0.0)"]
-fss = ["fsspec (>=2021.07.0)"]
-gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"]
-hdf5 = ["tables (>=3.6.1)"]
-html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"]
-mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"]
-output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"]
-parquet = ["pyarrow (>=7.0.0)"]
-performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"]
-plot = ["matplotlib (>=3.6.1)"]
-postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"]
-spss = ["pyreadstat (>=1.1.2)"]
-sql-other = ["SQLAlchemy (>=1.4.16)"]
-test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"]
-xml = ["lxml (>=4.6.3)"]
+all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"]
+aws = ["s3fs (>=2022.11.0)"]
+clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"]
+compression = ["zstandard (>=0.19.0)"]
+computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"]
+consortium-standard = ["dataframe-api-compat (>=0.1.7)"]
+excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"]
+feather = ["pyarrow (>=10.0.1)"]
+fss = ["fsspec (>=2022.11.0)"]
+gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"]
+hdf5 = ["tables (>=3.8.0)"]
+html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"]
+mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"]
+output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"]
+parquet = ["pyarrow (>=10.0.1)"]
+performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"]
+plot = ["matplotlib (>=3.6.3)"]
+postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"]
+pyarrow = ["pyarrow (>=10.0.1)"]
+spss = ["pyreadstat (>=1.2.0)"]
+sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"]
+test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
+xml = ["lxml (>=4.9.2)"]
 
 [[package]]
 name = "parsedatetime"
@@ -1119,26 +1218,26 @@ files = [
 
 [[package]]
 name = "pathspec"
-version = "0.11.2"
+version = "0.12.1"
 description = "Utility library for gitignore style pattern matching of file paths."
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"},
-    {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"},
+    {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
+    {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
 ]
 
 [[package]]
 name = "patsy"
-version = "0.5.3"
+version = "0.5.6"
 description = "A Python package for describing statistical models and for building design matrices."
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "patsy-0.5.3-py2.py3-none-any.whl", hash = "sha256:7eb5349754ed6aa982af81f636479b1b8db9d5b1a6e957a6016ec0534b5c86b7"},
-    {file = "patsy-0.5.3.tar.gz", hash = "sha256:bdc18001875e319bc91c812c1eb6a10be4bb13cb81eb763f466179dca3b67277"},
+    {file = "patsy-0.5.6-py2.py3-none-any.whl", hash = "sha256:19056886fd8fa71863fa32f0eb090267f21fb74be00f19f5c70b2e9d76c883c6"},
+    {file = "patsy-0.5.6.tar.gz", hash = "sha256:95c6d47a7222535f84bff7f63d7303f2e297747a598db89cf5c67f0c0c7d2cdb"},
 ]
 
 [package.dependencies]
@@ -1150,30 +1249,31 @@ test = ["pytest", "pytest-cov", "scipy"]
 
 [[package]]
 name = "platformdirs"
-version = "3.10.0"
-description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+version = "4.2.2"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"},
-    {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"},
+    {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"},
+    {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"},
 ]
 
 [package.extras]
-docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
-test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
+docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
+type = ["mypy (>=1.8)"]
 
 [[package]]
 name = "pluggy"
-version = "1.2.0"
+version = "1.5.0"
 description = "plugin and hook calling mechanisms for python"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"},
-    {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"},
+    {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"},
+    {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"},
 ]
 
 [package.extras]
@@ -1182,14 +1282,14 @@ testing = ["pytest", "pytest-benchmark"]
 
 [[package]]
 name = "pre-commit"
-version = "3.3.3"
+version = "3.8.0"
 description = "A framework for managing and maintaining multi-language pre-commit hooks."
 category = "main"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"},
-    {file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"},
+    {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"},
+    {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"},
 ]
 
 [package.dependencies]
@@ -1201,25 +1301,23 @@ virtualenv = ">=20.10.0"
 
 [[package]]
 name = "protobuf"
-version = "4.24.0"
+version = "4.25.4"
 description = ""
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "protobuf-4.24.0-cp310-abi3-win32.whl", hash = "sha256:81cb9c4621d2abfe181154354f63af1c41b00a4882fb230b4425cbaed65e8f52"},
-    {file = "protobuf-4.24.0-cp310-abi3-win_amd64.whl", hash = "sha256:6c817cf4a26334625a1904b38523d1b343ff8b637d75d2c8790189a4064e51c3"},
-    {file = "protobuf-4.24.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:ae97b5de10f25b7a443b40427033e545a32b0e9dda17bcd8330d70033379b3e5"},
-    {file = "protobuf-4.24.0-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:567fe6b0647494845d0849e3d5b260bfdd75692bf452cdc9cb660d12457c055d"},
-    {file = "protobuf-4.24.0-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:a6b1ca92ccabfd9903c0c7dde8876221dc7d8d87ad5c42e095cc11b15d3569c7"},
-    {file = "protobuf-4.24.0-cp37-cp37m-win32.whl", hash = "sha256:a38400a692fd0c6944c3c58837d112f135eb1ed6cdad5ca6c5763336e74f1a04"},
-    {file = "protobuf-4.24.0-cp37-cp37m-win_amd64.whl", hash = "sha256:5ab19ee50037d4b663c02218a811a5e1e7bb30940c79aac385b96e7a4f9daa61"},
-    {file = "protobuf-4.24.0-cp38-cp38-win32.whl", hash = "sha256:e8834ef0b4c88666ebb7c7ec18045aa0f4325481d724daa624a4cf9f28134653"},
-    {file = "protobuf-4.24.0-cp38-cp38-win_amd64.whl", hash = "sha256:8bb52a2be32db82ddc623aefcedfe1e0eb51da60e18fcc908fb8885c81d72109"},
-    {file = "protobuf-4.24.0-cp39-cp39-win32.whl", hash = "sha256:ae7a1835721086013de193311df858bc12cd247abe4ef9710b715d930b95b33e"},
-    {file = "protobuf-4.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:44825e963008f8ea0d26c51911c30d3e82e122997c3c4568fd0385dd7bacaedf"},
-    {file = "protobuf-4.24.0-py3-none-any.whl", hash = "sha256:82e6e9ebdd15b8200e8423676eab38b774624d6a1ad696a60d86a2ac93f18201"},
-    {file = "protobuf-4.24.0.tar.gz", hash = "sha256:5d0ceb9de6e08311832169e601d1fc71bd8e8c779f3ee38a97a78554945ecb85"},
+    {file = "protobuf-4.25.4-cp310-abi3-win32.whl", hash = "sha256:db9fd45183e1a67722cafa5c1da3e85c6492a5383f127c86c4c4aa4845867dc4"},
+    {file = "protobuf-4.25.4-cp310-abi3-win_amd64.whl", hash = "sha256:ba3d8504116a921af46499471c63a85260c1a5fc23333154a427a310e015d26d"},
+    {file = "protobuf-4.25.4-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:eecd41bfc0e4b1bd3fa7909ed93dd14dd5567b98c941d6c1ad08fdcab3d6884b"},
+    {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:4c8a70fdcb995dcf6c8966cfa3a29101916f7225e9afe3ced4395359955d3835"},
+    {file = "protobuf-4.25.4-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:3319e073562e2515c6ddc643eb92ce20809f5d8f10fead3332f71c63be6a7040"},
+    {file = "protobuf-4.25.4-cp38-cp38-win32.whl", hash = "sha256:7e372cbbda66a63ebca18f8ffaa6948455dfecc4e9c1029312f6c2edcd86c4e1"},
+    {file = "protobuf-4.25.4-cp38-cp38-win_amd64.whl", hash = "sha256:051e97ce9fa6067a4546e75cb14f90cf0232dcb3e3d508c448b8d0e4265b61c1"},
+    {file = "protobuf-4.25.4-cp39-cp39-win32.whl", hash = "sha256:90bf6fd378494eb698805bbbe7afe6c5d12c8e17fca817a646cd6a1818c696ca"},
+    {file = "protobuf-4.25.4-cp39-cp39-win_amd64.whl", hash = "sha256:ac79a48d6b99dfed2729ccccee547b34a1d3d63289c71cef056653a846a2240f"},
+    {file = "protobuf-4.25.4-py3-none-any.whl", hash = "sha256:bfbebc1c8e4793cfd58589acfb8a1026be0003e852b9da7db5a4285bde996978"},
+    {file = "protobuf-4.25.4.tar.gz", hash = "sha256:0dc4a62cc4052a036ee2204d26fe4d835c62827c855c8a03f29fe6da146b380d"},
 ]
 
 [[package]]
@@ -1303,133 +1401,156 @@ files = [
     {file = "psycopg2_binary-2.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:f7ae5d65ccfbebdfa761585228eb4d0df3a8b15cfb53bd953e713e09fbb12957"},
 ]
 
-[[package]]
-name = "pycparser"
-version = "2.21"
-description = "C parser in Python"
-category = "main"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-files = [
-    {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"},
-    {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
-]
-
 [[package]]
 name = "pydantic"
-version = "1.10.12"
-description = "Data validation and settings management using python type hints"
+version = "2.8.2"
+description = "Data validation using Python type hints"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"},
-    {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"},
-    {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"},
-    {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"},
-    {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"},
-    {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"},
-    {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"},
-    {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"},
-    {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"},
-    {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"},
-    {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"},
-    {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"},
-    {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"},
-    {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"},
-    {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"},
-    {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"},
-    {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"},
-    {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"},
-    {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"},
-    {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"},
-    {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"},
-    {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"},
-    {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"},
-    {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"},
-    {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"},
-    {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"},
-    {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"},
-    {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"},
-    {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"},
-    {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"},
-    {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"},
-    {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"},
-    {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"},
-    {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"},
-    {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"},
-    {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"},
+    {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"},
+    {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"},
 ]
 
 [package.dependencies]
-typing-extensions = ">=4.2.0"
+annotated-types = ">=0.4.0"
+pydantic-core = "2.20.1"
+typing-extensions = [
+    {version = ">=4.6.1", markers = "python_version < \"3.13\""},
+    {version = ">=4.12.2", markers = "python_version >= \"3.13\""},
+]
 
 [package.extras]
-dotenv = ["python-dotenv (>=0.10.4)"]
-email = ["email-validator (>=1.0.3)"]
+email = ["email-validator (>=2.0.0)"]
 
 [[package]]
-name = "pygments"
-version = "2.16.1"
-description = "Pygments is a syntax highlighting package written in Python."
+name = "pydantic-core"
+version = "2.20.1"
+description = "Core functionality for Pydantic validation and serialization"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"},
-    {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"},
+    {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"},
+    {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"},
+    {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"},
+    {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"},
+    {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"},
+    {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"},
+    {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"},
+    {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"},
+    {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"},
+    {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"},
+    {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"},
+    {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"},
+    {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"},
+    {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"},
+    {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"},
+    {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"},
+    {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"},
+    {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"},
+    {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"},
+    {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"},
+    {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"},
 ]
 
-[package.extras]
-plugins = ["importlib-metadata"]
+[package.dependencies]
+typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
 
 [[package]]
-name = "pyrsistent"
-version = "0.19.3"
-description = "Persistent/Functional/Immutable data structures"
+name = "pygments"
+version = "2.18.0"
+description = "Pygments is a syntax highlighting package written in Python."
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"},
-    {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"},
-    {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"},
-    {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"},
-    {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"},
-    {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"},
-    {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"},
+    {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
+    {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
 ]
 
+[package.extras]
+windows-terminal = ["colorama (>=0.4.6)"]
+
 [[package]]
 name = "pytest"
-version = "7.4.0"
+version = "8.3.2"
 description = "pytest: simple powerful testing with Python"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"},
-    {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"},
+    {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"},
+    {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"},
 ]
 
 [package.dependencies]
@@ -1437,22 +1558,22 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
 exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
 iniconfig = "*"
 packaging = "*"
-pluggy = ">=0.12,<2.0"
-tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
+pluggy = ">=1.5,<2"
+tomli = {version = ">=1", markers = "python_version < \"3.11\""}
 
 [package.extras]
-testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
+dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
 
 [[package]]
 name = "pytest-cov"
-version = "4.1.0"
+version = "5.0.0"
 description = "Pytest plugin for measuring coverage."
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"},
-    {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"},
+    {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"},
+    {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"},
 ]
 
 [package.dependencies]
@@ -1460,18 +1581,18 @@ coverage = {version = ">=5.2.1", extras = ["toml"]}
 pytest = ">=4.6"
 
 [package.extras]
-testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"]
+testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"]
 
 [[package]]
 name = "python-dateutil"
-version = "2.8.2"
+version = "2.9.0.post0"
 description = "Extensions to the standard Python datetime module"
 category = "main"
 optional = false
 python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
 files = [
-    {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
-    {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
+    {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
+    {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
 ]
 
 [package.dependencies]
@@ -1479,14 +1600,14 @@ six = ">=1.5"
 
 [[package]]
 name = "python-slugify"
-version = "8.0.1"
+version = "8.0.4"
 description = "A Python slugify application that also handles Unicode"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "python-slugify-8.0.1.tar.gz", hash = "sha256:ce0d46ddb668b3be82f4ed5e503dbc33dd815d83e2eb6824211310d3fb172a27"},
-    {file = "python_slugify-8.0.1-py2.py3-none-any.whl", hash = "sha256:70ca6ea68fe63ecc8fa4fcf00ae651fc8a5d02d93dcd12ae6d4fc7ca46c4d395"},
+    {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"},
+    {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"},
 ]
 
 [package.dependencies]
@@ -1509,76 +1630,105 @@ files = [
 
 [[package]]
 name = "pytz"
-version = "2023.3"
+version = "2024.1"
 description = "World timezone definitions, modern and historical"
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"},
-    {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"},
+    {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"},
+    {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"},
 ]
 
 [[package]]
 name = "pyyaml"
-version = "6.0.1"
+version = "6.0.2"
 description = "YAML parser and emitter for Python"
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
+files = [
+    {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
+    {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
+    {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
+    {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
+    {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
+    {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
+    {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
+    {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
+    {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
+    {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
+    {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
+    {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
+    {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
+    {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
+    {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
+    {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
+    {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
+    {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
+    {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
+    {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
+    {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
+    {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
+    {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
+    {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
+    {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
+    {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
+    {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
+    {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
+    {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
+    {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
+    {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
+    {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
+    {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
+    {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
+    {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
+    {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
+    {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
+    {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
+    {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
+    {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
+    {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
+    {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
+    {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
+    {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
+    {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
+    {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
+    {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
+    {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
+    {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
+    {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
+    {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
+    {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
+    {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
+]
+
+[[package]]
+name = "referencing"
+version = "0.35.1"
+description = "JSON Referencing + Python"
+category = "main"
+optional = false
+python-versions = ">=3.8"
 files = [
-    {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
-    {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
-    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
-    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
-    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
-    {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
-    {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
-    {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
-    {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
-    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
-    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
-    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
-    {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
-    {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
-    {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
-    {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
-    {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
-    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
-    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
-    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
-    {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
-    {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
-    {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
-    {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
-    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
-    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
-    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
-    {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
-    {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
-    {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
+    {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"},
+    {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"},
 ]
 
+[package.dependencies]
+attrs = ">=22.2.0"
+rpds-py = ">=0.7.0"
+
 [[package]]
 name = "requests"
-version = "2.31.0"
+version = "2.32.3"
 description = "Python HTTP for Humans."
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
-    {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
+    {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
+    {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
 ]
 
 [package.dependencies]
@@ -1593,14 +1743,14 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 
 [[package]]
 name = "rich"
-version = "13.5.2"
+version = "13.7.1"
 description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
 category = "main"
 optional = false
 python-versions = ">=3.7.0"
 files = [
-    {file = "rich-13.5.2-py3-none-any.whl", hash = "sha256:146a90b3b6b47cac4a73c12866a499e9817426423f57c5a66949c086191a8808"},
-    {file = "rich-13.5.2.tar.gz", hash = "sha256:fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"},
+    {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"},
+    {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"},
 ]
 
 [package.dependencies]
@@ -1612,105 +1762,216 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
 
 [[package]]
 name = "rich-click"
-version = "1.6.1"
+version = "1.8.3"
 description = "Format click help output nicely with rich"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "rich-click-1.6.1.tar.gz", hash = "sha256:f8ff96693ec6e261d1544e9f7d9a5811c5ef5d74c8adb4978430fc0dac16777e"},
-    {file = "rich_click-1.6.1-py3-none-any.whl", hash = "sha256:0fcf4d1a09029d79322dd814ab0b2e66ac183633037561881d45abae8a161d95"},
+    {file = "rich_click-1.8.3-py3-none-any.whl", hash = "sha256:636d9c040d31c5eee242201b5bf4f2d358bfae4db14bb22ec1cafa717cfd02cd"},
+    {file = "rich_click-1.8.3.tar.gz", hash = "sha256:6d75bdfa7aa9ed2c467789a0688bc6da23fbe3a143e19aa6ad3f8bac113d2ab3"},
 ]
 
 [package.dependencies]
 click = ">=7"
-rich = ">=10.7.0"
+rich = ">=10.7"
+typing-extensions = "*"
 
 [package.extras]
-dev = ["pre-commit"]
+dev = ["mypy", "packaging", "pre-commit", "pytest", "pytest-cov", "rich-codex", "ruff", "types-setuptools"]
+docs = ["markdown-include", "mkdocs", "mkdocs-glightbox", "mkdocs-material-extensions", "mkdocs-material[imaging] (>=9.5.18,<9.6.0)", "mkdocs-rss-plugin", "mkdocstrings[python]", "rich-codex"]
 
 [[package]]
-name = "ruff"
-version = "0.0.284"
-description = "An extremely fast Python linter, written in Rust."
+name = "rpds-py"
+version = "0.20.0"
+description = "Python bindings to Rust's persistent data structures (rpds)"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "ruff-0.0.284-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:8b949084941232e2c27f8d12c78c5a6a010927d712ecff17231ee1a8371c205b"},
-    {file = "ruff-0.0.284-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a3930d66b35e4dc96197422381dff2a4e965e9278b5533e71ae8474ef202fab0"},
-    {file = "ruff-0.0.284-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d1f7096038961d8bc3b956ee69d73826843eb5b39a5fa4ee717ed473ed69c95"},
-    {file = "ruff-0.0.284-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bcaf85907fc905d838f46490ee15f04031927bbea44c478394b0bfdeadc27362"},
-    {file = "ruff-0.0.284-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3660b85a9d84162a055f1add334623ae2d8022a84dcd605d61c30a57b436c32"},
-    {file = "ruff-0.0.284-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:0a3218458b140ea794da72b20ea09cbe13c4c1cdb7ac35e797370354628f4c05"},
-    {file = "ruff-0.0.284-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2fe880cff13fffd735387efbcad54ba0ff1272bceea07f86852a33ca71276f4"},
-    {file = "ruff-0.0.284-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1d098ea74d0ce31478765d1f8b4fbdbba2efc532397b5c5e8e5ea0c13d7e5ae"},
-    {file = "ruff-0.0.284-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4c79ae3308e308b94635cd57a369d1e6f146d85019da2fbc63f55da183ee29b"},
-    {file = "ruff-0.0.284-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f86b2b1e7033c00de45cc176cf26778650fb8804073a0495aca2f674797becbb"},
-    {file = "ruff-0.0.284-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e37e086f4d623c05cd45a6fe5006e77a2b37d57773aad96b7802a6b8ecf9c910"},
-    {file = "ruff-0.0.284-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d29dfbe314e1131aa53df213fdfea7ee874dd96ea0dd1471093d93b59498384d"},
-    {file = "ruff-0.0.284-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:88295fd649d0aa1f1271441df75bf06266a199497afd239fd392abcfd75acd7e"},
-    {file = "ruff-0.0.284-py3-none-win32.whl", hash = "sha256:735cd62fccc577032a367c31f6a9de7c1eb4c01fa9a2e60775067f44f3fc3091"},
-    {file = "ruff-0.0.284-py3-none-win_amd64.whl", hash = "sha256:f67ed868d79fbcc61ad0fa034fe6eed2e8d438d32abce9c04b7c4c1464b2cf8e"},
-    {file = "ruff-0.0.284-py3-none-win_arm64.whl", hash = "sha256:1292cfc764eeec3cde35b3a31eae3f661d86418b5e220f5d5dba1c27a6eccbb6"},
-    {file = "ruff-0.0.284.tar.gz", hash = "sha256:ebd3cc55cd499d326aac17a331deaea29bea206e01c08862f9b5c6e93d77a491"},
+    {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"},
+    {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"},
+    {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"},
+    {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"},
+    {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"},
+    {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"},
+    {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"},
+    {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"},
+    {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"},
+    {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"},
+    {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"},
+    {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"},
+    {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"},
+    {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"},
+    {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"},
+    {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"},
+    {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"},
+    {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"},
+    {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"},
+    {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"},
+    {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"},
+    {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"},
+    {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"},
+    {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"},
+    {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"},
+    {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"},
+    {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"},
+    {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"},
+    {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"},
+    {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"},
+    {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"},
+    {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"},
+    {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"},
+    {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"},
+    {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"},
+    {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"},
+    {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"},
+    {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"},
+    {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"},
+    {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"},
+    {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"},
+    {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"},
+    {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"},
+    {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"},
+    {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"},
+    {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"},
+    {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"},
+    {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"},
+    {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"},
+    {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"},
+    {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"},
+    {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"},
+    {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"},
+    {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"},
+    {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"},
+    {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"},
+    {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"},
+    {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"},
+    {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"},
+    {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"},
+    {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"},
+    {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"},
+    {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"},
+    {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"},
+    {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"},
+    {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"},
+    {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"},
+    {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"},
+    {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"},
+    {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"},
+    {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"},
+    {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"},
+    {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"},
+    {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"},
+    {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"},
+    {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"},
+    {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"},
+    {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"},
+    {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"},
+    {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"},
+    {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"},
 ]
 
 [[package]]
-name = "scipy"
-version = "1.9.3"
-description = "Fundamental algorithms for scientific computing in Python"
+name = "ruff"
+version = "0.6.2"
+description = "An extremely fast Python linter and code formatter, written in Rust."
 category = "main"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.7"
 files = [
-    {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"},
-    {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"},
-    {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"},
-    {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"},
-    {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"},
-    {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"},
-    {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"},
-    {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"},
-    {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"},
-    {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"},
-    {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"},
-    {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"},
-    {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"},
-    {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"},
-    {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"},
-    {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"},
-    {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"},
-    {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"},
-    {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"},
-    {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"},
-    {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"},
+    {file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"},
+    {file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"},
+    {file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"},
+    {file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"},
+    {file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"},
+    {file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"},
+    {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"},
+    {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"},
+    {file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"},
+    {file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"},
+    {file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"},
+    {file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"},
+    {file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"},
+    {file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"},
+    {file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"},
+    {file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"},
+    {file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"},
+    {file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"},
 ]
 
-[package.dependencies]
-numpy = ">=1.18.5,<1.26.0"
-
-[package.extras]
-dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"]
-doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"]
-test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
-
 [[package]]
-name = "setuptools"
-version = "68.0.0"
-description = "Easily download, build, install, upgrade, and uninstall Python packages"
+name = "scipy"
+version = "1.14.1"
+description = "Fundamental algorithms for scientific computing in Python"
 category = "main"
 optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"},
-    {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"},
+python-versions = ">=3.10"
+files = [
+    {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"},
+    {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"},
+    {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0"},
+    {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3"},
+    {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d"},
+    {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69"},
+    {file = "scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad"},
+    {file = "scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5"},
+    {file = "scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675"},
+    {file = "scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2"},
+    {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617"},
+    {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8"},
+    {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37"},
+    {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2"},
+    {file = "scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2"},
+    {file = "scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94"},
+    {file = "scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d"},
+    {file = "scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07"},
+    {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5"},
+    {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc"},
+    {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310"},
+    {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066"},
+    {file = "scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1"},
+    {file = "scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f"},
+    {file = "scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79"},
+    {file = "scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e"},
+    {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73"},
+    {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e"},
+    {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d"},
+    {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e"},
+    {file = "scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06"},
+    {file = "scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84"},
+    {file = "scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417"},
 ]
 
+[package.dependencies]
+numpy = ">=1.23.5,<2.3"
+
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
-testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
+dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"]
+doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<=7.3.7)", "sphinx-design (>=0.4.0)"]
+test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
 
 [[package]]
 name = "six"
@@ -1726,65 +1987,64 @@ files = [
 
 [[package]]
 name = "sqlparse"
-version = "0.4.4"
+version = "0.5.1"
 description = "A non-validating SQL parser."
 category = "main"
 optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.8"
 files = [
-    {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"},
-    {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"},
+    {file = "sqlparse-0.5.1-py3-none-any.whl", hash = "sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4"},
+    {file = "sqlparse-0.5.1.tar.gz", hash = "sha256:bb6b4df465655ef332548e24f08e205afc81b9ab86cb1c45657a7ff173a3a00e"},
 ]
 
 [package.extras]
-dev = ["build", "flake8"]
+dev = ["build", "hatch"]
 doc = ["sphinx"]
-test = ["pytest", "pytest-cov"]
 
 [[package]]
 name = "statsmodels"
-version = "0.14.0"
+version = "0.14.2"
 description = "Statistical computations and models for Python"
 category = "main"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "statsmodels-0.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:16bfe0c96a53b20fa19067e3b6bd2f1d39e30d4891ea0d7bc20734a0ae95942d"},
-    {file = "statsmodels-0.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a6a0a1a06ff79be8aa89c8494b33903442859add133f0dda1daf37c3c71682e"},
-    {file = "statsmodels-0.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77b3cd3a5268ef966a0a08582c591bd29c09c88b4566c892a7c087935234f285"},
-    {file = "statsmodels-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c64ebe9cf376cba0c31aed138e15ed179a1d128612dd241cdf299d159e5e882"},
-    {file = "statsmodels-0.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb471f757fc45102a87e5d86e87dc2c8c78b34ad4f203679a46520f1d863b9da"},
-    {file = "statsmodels-0.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:582f9e41092e342aaa04920d17cc3f97240e3ee198672f194719b5a3d08657d6"},
-    {file = "statsmodels-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7ebe885ccaa64b4bc5ad49ac781c246e7a594b491f08ab4cfd5aa456c363a6f6"},
-    {file = "statsmodels-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b587ee5d23369a0e881da6e37f78371dce4238cf7638a455db4b633a1a1c62d6"},
-    {file = "statsmodels-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ef7fa4813c7a73b0d8a0c830250f021c102c71c95e9fe0d6877bcfb56d38b8c"},
-    {file = "statsmodels-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:a6ad7b8aadccd4e4dd7f315a07bef1bca41d194eeaf4ec600d20dea02d242fce"},
-    {file = "statsmodels-0.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3757542c95247e4ab025291a740efa5da91dc11a05990c033d40fce31c450dc9"},
-    {file = "statsmodels-0.14.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de489e3ed315bdba55c9d1554a2e89faa65d212e365ab81bc323fa52681fc60e"},
-    {file = "statsmodels-0.14.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e290f4718177bffa8823a780f3b882d56dd64ad1c18cfb4bc8b5558f3f5757"},
-    {file = "statsmodels-0.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71054f9dbcead56def14e3c9db6f66f943110fdfb19713caf0eb0f08c1ec03fd"},
-    {file = "statsmodels-0.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:d7fda067837df94e0a614d93d3a38fb6868958d37f7f50afe2a534524f2660cb"},
-    {file = "statsmodels-0.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1c7724ad573af26139a98393ae64bc318d1b19762b13442d96c7a3e793f495c3"},
-    {file = "statsmodels-0.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3b0a135f3bfdeec987e36e3b3b4c53e0bb87a8d91464d2fcc4d169d176f46fdb"},
-    {file = "statsmodels-0.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce28eb1c397dba437ec39b9ab18f2101806f388c7a0cf9cdfd8f09294ad1c799"},
-    {file = "statsmodels-0.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b1c768dd94cc5ba8398121a632b673c625491aa7ed627b82cb4c880a25563f"},
-    {file = "statsmodels-0.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d1e3e10dfbfcd58119ba5a4d3c7d519182b970a2aebaf0b6f539f55ae16058d"},
-    {file = "statsmodels-0.14.0.tar.gz", hash = "sha256:6875c7d689e966d948f15eb816ab5616f4928706b180cf470fd5907ab6f647a4"},
+    {file = "statsmodels-0.14.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df5d6f95c46f0341da6c79ee7617e025bf2b371e190a8e60af1ae9cabbdb7a97"},
+    {file = "statsmodels-0.14.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a87ef21fadb445b650f327340dde703f13aec1540f3d497afb66324499dea97a"},
+    {file = "statsmodels-0.14.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5827a12e3ede2b98a784476d61d6bec43011fedb64aa815f2098e0573bece257"},
+    {file = "statsmodels-0.14.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10f2b7611a61adb7d596a6d239abdf1a4d5492b931b00d5ed23d32844d40e48e"},
+    {file = "statsmodels-0.14.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c254c66142f1167b4c7d031cf8db55294cc62ff3280e090fc45bd10a7f5fd029"},
+    {file = "statsmodels-0.14.2-cp310-cp310-win_amd64.whl", hash = "sha256:0e46e9d59293c1af4cc1f4e5248f17e7e7bc596bfce44d327c789ac27f09111b"},
+    {file = "statsmodels-0.14.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:50fcb633987779e795142f51ba49fb27648d46e8a1382b32ebe8e503aaabaa9e"},
+    {file = "statsmodels-0.14.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:876794068abfaeed41df71b7887000031ecf44fbfa6b50d53ccb12ebb4ab747a"},
+    {file = "statsmodels-0.14.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a91f6c4943de13e3ce2e20ee3b5d26d02bd42300616a421becd53756f5deb37"},
+    {file = "statsmodels-0.14.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4864a1c4615c5ea5f2e3b078a75bdedc90dd9da210a37e0738e064b419eccee2"},
+    {file = "statsmodels-0.14.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afbd92410e0df06f3d8c4e7c0e2e71f63f4969531f280fb66059e2ecdb6e0415"},
+    {file = "statsmodels-0.14.2-cp311-cp311-win_amd64.whl", hash = "sha256:8e004cfad0e46ce73fe3f3812010c746f0d4cfd48e307b45c14e9e360f3d2510"},
+    {file = "statsmodels-0.14.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eb0ba1ad3627705f5ae20af6b2982f500546d43892543b36c7bca3e2f87105e7"},
+    {file = "statsmodels-0.14.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:90fd2f0110b73fc3fa5a2f21c3ca99b0e22285cccf38e56b5b8fd8ce28791b0f"},
+    {file = "statsmodels-0.14.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac780ad9ff552773798829a0b9c46820b0faa10e6454891f5e49a845123758ab"},
+    {file = "statsmodels-0.14.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55d1742778400ae67acb04b50a2c7f5804182f8a874bd09ca397d69ed159a751"},
+    {file = "statsmodels-0.14.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f870d14a587ea58a3b596aa994c2ed889cc051f9e450e887d2c83656fc6a64bf"},
+    {file = "statsmodels-0.14.2-cp312-cp312-win_amd64.whl", hash = "sha256:f450fcbae214aae66bd9d2b9af48e0f8ba1cb0e8596c6ebb34e6e3f0fec6542c"},
+    {file = "statsmodels-0.14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:201c3d00929c4a67cda1fe05b098c8dcf1b1eeefa88e80a8f963a844801ed59f"},
+    {file = "statsmodels-0.14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9edefa4ce08e40bc1d67d2f79bc686ee5e238e801312b5a029ee7786448c389a"},
+    {file = "statsmodels-0.14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c78a7601fdae1aa32104c5ebff2e0b72c26f33e870e2f94ab1bcfd927ece9b"},
+    {file = "statsmodels-0.14.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f36494df7c03d63168fccee5038a62f469469ed6a4dd6eaeb9338abedcd0d5f5"},
+    {file = "statsmodels-0.14.2-cp39-cp39-win_amd64.whl", hash = "sha256:8875823bdd41806dc853333cc4e1b7ef9481bad2380a999e66ea42382cf2178d"},
+    {file = "statsmodels-0.14.2.tar.gz", hash = "sha256:890550147ad3a81cda24f0ba1a5c4021adc1601080bd00e191ae7cd6feecd6ad"},
 ]
 
 [package.dependencies]
-numpy = [
-    {version = ">=1.18", markers = "python_version != \"3.10\" or platform_system != \"Windows\" or platform_python_implementation == \"PyPy\""},
-    {version = ">=1.22.3", markers = "python_version == \"3.10\" and platform_system == \"Windows\" and platform_python_implementation != \"PyPy\""},
-]
+numpy = ">=1.22.3"
 packaging = ">=21.3"
-pandas = ">=1.0"
-patsy = ">=0.5.2"
-scipy = ">=1.4,<1.9.2 || >1.9.2"
+pandas = ">=1.4,<2.1.0 || >2.1.0"
+patsy = ">=0.5.6"
+scipy = ">=1.8,<1.9.2 || >1.9.2"
 
 [package.extras]
-build = ["cython (>=0.29.26)"]
-develop = ["colorama", "cython (>=0.29.26)", "cython (>=0.29.28,<3.0.0)", "flake8", "isort", "joblib", "matplotlib (>=3)", "oldest-supported-numpy (>=2022.4.18)", "pytest (>=7.0.1,<7.1.0)", "pytest-randomly", "pytest-xdist", "pywinpty", "setuptools-scm[toml] (>=7.0.0,<7.1.0)"]
+build = ["cython (>=0.29.33)"]
+develop = ["colorama", "cython (>=0.29.33)", "cython (>=3.0.10,<4)", "flake8", "isort", "joblib", "matplotlib (>=3)", "pytest (>=7.3.0,<8)", "pytest-cov", "pytest-randomly", "pytest-xdist", "pywinpty", "setuptools-scm[toml] (>=8.0,<9.0)"]
 docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"]
 
 [[package]]
@@ -1828,81 +2088,82 @@ files = [
 
 [[package]]
 name = "typing-extensions"
-version = "4.7.1"
-description = "Backported and Experimental Type Hints for Python 3.7+"
+version = "4.12.2"
+description = "Backported and Experimental Type Hints for Python 3.8+"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"},
-    {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"},
+    {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"},
+    {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"},
 ]
 
 [[package]]
 name = "tzdata"
-version = "2023.3"
+version = "2024.1"
 description = "Provider of IANA time zone data"
 category = "main"
 optional = false
 python-versions = ">=2"
 files = [
-    {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"},
-    {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"},
+    {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"},
+    {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"},
 ]
 
 [[package]]
 name = "urllib3"
-version = "1.26.16"
+version = "2.2.2"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
 category = "main"
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.8"
 files = [
-    {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"},
-    {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"},
+    {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"},
+    {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"},
 ]
 
 [package.extras]
-brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
-secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
-socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+h2 = ["h2 (>=4,<5)"]
+socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
+zstd = ["zstandard (>=0.18.0)"]
 
 [[package]]
 name = "virtualenv"
-version = "20.24.3"
+version = "20.26.3"
 description = "Virtual Python Environment builder"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"},
-    {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"},
+    {file = "virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589"},
+    {file = "virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a"},
 ]
 
 [package.dependencies]
 distlib = ">=0.3.7,<1"
 filelock = ">=3.12.2,<4"
-platformdirs = ">=3.9.1,<4"
+platformdirs = ">=3.9.1,<5"
 
 [package.extras]
-docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"]
 test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"]
 
 [[package]]
 name = "zipp"
-version = "3.16.2"
+version = "3.20.0"
 description = "Backport of pathlib-compatible object wrapper for zip files"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"},
-    {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"},
+    {file = "zipp-3.20.0-py3-none-any.whl", hash = "sha256:58da6168be89f0be59beb194da1250516fdaa062ccebd30127ac65d30045e10d"},
+    {file = "zipp-3.20.0.tar.gz", hash = "sha256:0145e43d89664cfe1a2e533adc75adafed82fe2da404b4bbb6b026c0157bdb31"},
 ]
 
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
-testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"]
 
 [metadata]
 lock-version = "2.0"
diff --git a/pyproject.toml b/pyproject.toml
index 29747fc..d556ba1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -25,11 +25,14 @@ ruff = "*"
 statsmodels = "*"
 tabulate = "*"
 dbt-postgres = "^1.6.6"
+pyyaml = "*"
 
 [tool.ruff]
 line-length = 100
+
+[tool.ruff.lint]
 select = ["F", "E", "W", "I001"]
 
-[tool.ruff.isort]
+[tool.ruff.lint.isort]
 lines-after-imports = 2
 force-single-line = true
diff --git a/scripts.py b/scripts.py
index 131707b..08b6b82 100644
--- a/scripts.py
+++ b/scripts.py
@@ -2,6 +2,7 @@
 This file is used for generation of CSV files for integration test cases,
 and also for manual verification + generation of test case values.
 """
+import json
 import os.path as op
 import warnings
 from typing import NamedTuple
@@ -12,6 +13,7 @@
 import pandas as pd
 import rich_click as click
 import statsmodels.api as sm
+import yaml
 from tabulate import tabulate
 
 
@@ -365,5 +367,35 @@ def gen_test_cases(tables: list[str], size: int, seed: int, skip_if_exists: bool
     click.echo(click.style("Done!", fg="green"))
 
 
+@cli.command("gen-hide-macros-yaml")
+def gen_hide_args_yaml():
+    """Generates the YAML that hides the macros from the docs.
+
+    Requires the `manifest.json` to be available.
+    (`dbt parse --profiles-dir ./integration_tests/profiles`)
+
+    Recommended to `| pbcopy` this command, then paste in `macros/schema.yml`.
+
+    This is not enforced during CICD, beware!
+    """
+    exclude_from_hiding = ["ols"]
+    with open("target/manifest.json") as f:
+        manifest = json.load(f)
+
+    macros = [
+        data["name"] for fqn, data
+        in manifest["macros"].items()
+        if data.get("package_name", "") == "dbt_linreg"
+        and data.get("name") not in exclude_from_hiding
+    ]
+
+    out = [
+        {"name": macro, "docs": {"show": False}}
+        for macro in sorted(macros)
+    ]
+
+    print("  " + yaml.safe_dump(out, sort_keys=False).replace("\n", "\n  "))
+
+
 if __name__ == "__main__":
     cli()

From c3a8e06d92a85f6ef58d14b42a2952a29512fe05 Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Sat, 24 Aug 2024 14:39:17 -0400
Subject: [PATCH 09/10] update README

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index e4f59bf..1f88010 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ Add this the `packages:` list your dbt project's `packages.yml`:
 
 ```yaml
   - package: "dwreeves/dbt_linreg"
-    version: "0.2.3"
+    version: "0.2.5"
 ```
 
 The full file will look something like this:
@@ -43,7 +43,7 @@ packages:
   # Other packages here
   # ...
   - package: "dwreeves/dbt_linreg"
-    version: "0.2.3"
+    version: "0.2.5"
 ```
 
 # Examples

From 854edbb79dd66c3f21e428d8145b425dd43ff978 Mon Sep 17 00:00:00 2001
From: dwreeves <xdanielreeves@gmail.com>
Date: Sun, 25 Aug 2024 08:02:22 -0400
Subject: [PATCH 10/10] correction to docs

---
 macros/linear_regression/ols.sql | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/macros/linear_regression/ols.sql b/macros/linear_regression/ols.sql
index 239000e..685abb5 100644
--- a/macros/linear_regression/ols.sql
+++ b/macros/linear_regression/ols.sql
@@ -20,8 +20,7 @@
     2. Dispatches the appropriate call.
 
     The actual calculations occur elsewhere in the code, depending on the
-    implementation chosen. (At the moment, the only implementation method
-    supported is method='fwl'.)
+    implementation chosen.
 
   #############################################################################}