Repository: unionai-oss/pandera (language: python)

Issue:
Initial schema creation is very slow
**Describe the ~bug~ issue**

This is more of a usability issue than a bug: The initial creation of a schema is very slow. I'm measuring it around ~800 ms, which can be a significant slow down e.g. in quick/small CLI tools that otherwise have a sub-second runtime.

- [x] I have checked that this issue has not already been reported.
- [x] I have confirmed this bug exists on the latest version of pandera.
- [ ] (optional) I have confirmed this bug exists on the main branch of pandera.

#### Code Sample, a copy-pastable example

I'm observing runtime of >800ms even for the most simplest usages like this:

```python
import time

import pandera as pa

t1 = time.monotonic()
schema = pa.DataFrameSchema(
    {
        "column1": pa.Column(int),
        "column2": pa.Column(float),
        "column3": pa.Column(str),
    }
)
t2 = time.monotonic()
print(t2 - t1)
```

#### Expected behavior

Faster execution of simple usages.

#### Desktop (please complete the following information):

 - OS: Ubuntu
 - Browser: none / headless system (what's the significance of this -- I'm not doing anything in the browser)
 - Version: 20.04



Discussion / hints:
@bluenote10 thanks! if you have time, would you mind providing a runtime profile either with [cProfile](https://docs.python.org/3/library/profile.html) or your profiling library of choice?

This'll provide more actionable data on what parts of the execution path are slowing things down

> Expected behavior
>
> Faster execution of simple usages.

How fast are you expecting?
Also, can you provide your python environment to repro? I get:
```
0.3683174999896437
```
When I run the script above

Fix patch:
diff --git a/.pylintrc b/.pylintrc
index b752d973f..41c60f8d9 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -55,4 +55,5 @@ disable=
     too-many-locals,
     redefined-outer-name,
     logging-fstring-interpolation,
-    multiple-statements
+    multiple-statements,
+    cyclic-import
diff --git a/ci/requirements-py3.10-pandas1.5.3-pydantic1.10.11.txt b/ci/requirements-py3.10-pandas1.5.3-pydantic1.10.11.txt
index 2aef3ab8b..fda02c3bc 100644
--- a/ci/requirements-py3.10-pandas1.5.3-pydantic1.10.11.txt
+++ b/ci/requirements-py3.10-pandas1.5.3-pydantic1.10.11.txt
@@ -1,19 +1,19 @@
 aiosignal==1.3.1
 alabaster==0.7.16
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -32,31 +32,32 @@ distributed==2024.2.1
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -65,9 +66,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -75,11 +76,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
 modin==0.22.3
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -94,7 +95,7 @@ nox==2024.4.15
 numpy==1.26.4
 packaging==24.1
 pandas==1.5.3
-pandas-stubs==2.2.2.240807
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -102,12 +103,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -121,34 +122,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -161,34 +162,34 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.10-pandas1.5.3-pydantic2.3.0.txt b/ci/requirements-py3.10-pandas1.5.3-pydantic2.3.0.txt
index 8a4ea4f2f..50f841d55 100644
--- a/ci/requirements-py3.10-pandas1.5.3-pydantic2.3.0.txt
+++ b/ci/requirements-py3.10-pandas1.5.3-pydantic2.3.0.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -33,31 +33,32 @@ distributed==2024.2.1
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -66,9 +67,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -76,11 +77,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
 modin==0.22.3
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -95,7 +96,7 @@ nox==2024.4.15
 numpy==1.26.4
 packaging==24.1
 pandas==1.5.3
-pandas-stubs==2.2.2.240807
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -103,12 +104,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -123,34 +124,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -163,34 +164,34 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.10-pandas2.2.2-pydantic1.10.11.txt b/ci/requirements-py3.10-pandas2.2.2-pydantic1.10.11.txt
index 52ca0e11b..d1ac56d0e 100644
--- a/ci/requirements-py3.10-pandas2.2.2-pydantic1.10.11.txt
+++ b/ci/requirements-py3.10-pandas2.2.2-pydantic1.10.11.txt
@@ -1,19 +1,19 @@
 aiosignal==1.3.1
 alabaster==0.7.16
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -23,41 +23,42 @@ colorlog==6.8.2
 comm==0.2.2
 commonmark==0.9.1
 coverage==7.6.1
-dask==2024.8.0
-dask-expr==1.1.10
+dask==2024.9.0
+dask-expr==1.1.14
 debugpy==1.8.5
 decorator==5.1.1
 dill==0.3.8
 distlib==0.3.8
-distributed==2024.8.0
+distributed==2024.9.0
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -66,9 +67,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -76,11 +77,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -92,10 +93,10 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.1.1
 packaging==24.1
 pandas==2.2.2
-pandas-stubs==2.2.2.240807
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -103,12 +104,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -122,34 +123,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -162,35 +163,35 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.10-pandas2.2.2-pydantic2.3.0.txt b/ci/requirements-py3.10-pandas2.2.2-pydantic2.3.0.txt
index 1b9be9414..a7494f7c1 100644
--- a/ci/requirements-py3.10-pandas2.2.2-pydantic2.3.0.txt
+++ b/ci/requirements-py3.10-pandas2.2.2-pydantic2.3.0.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -24,41 +24,42 @@ colorlog==6.8.2
 comm==0.2.2
 commonmark==0.9.1
 coverage==7.6.1
-dask==2024.8.0
-dask-expr==1.1.10
+dask==2024.9.0
+dask-expr==1.1.14
 debugpy==1.8.5
 decorator==5.1.1
 dill==0.3.8
 distlib==0.3.8
-distributed==2024.8.0
+distributed==2024.9.0
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -67,9 +68,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -77,11 +78,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -93,10 +94,10 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.1.1
 packaging==24.1
 pandas==2.2.2
-pandas-stubs==2.2.2.240807
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -104,12 +105,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -124,34 +125,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -164,35 +165,35 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.11-pandas1.5.3-pydantic1.10.11.txt b/ci/requirements-py3.11-pandas1.5.3-pydantic1.10.11.txt
index 1d6d27a54..f6da17d44 100644
--- a/ci/requirements-py3.11-pandas1.5.3-pydantic1.10.11.txt
+++ b/ci/requirements-py3.11-pandas1.5.3-pydantic1.10.11.txt
@@ -1,19 +1,19 @@
 aiosignal==1.3.1
 alabaster==0.7.16
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -31,31 +31,32 @@ distlib==0.3.8
 distributed==2024.2.1
 docutils==0.21.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -64,9 +65,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -74,11 +75,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
 modin==0.22.3
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -93,7 +94,7 @@ nox==2024.4.15
 numpy==1.26.4
 packaging==24.1
 pandas==1.5.3
-pandas-stubs==2.2.2.240807
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -101,12 +102,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -120,34 +121,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -160,34 +161,33 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
-tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.11-pandas1.5.3-pydantic2.3.0.txt b/ci/requirements-py3.11-pandas1.5.3-pydantic2.3.0.txt
index 9751608e9..c9a9e7d36 100644
--- a/ci/requirements-py3.11-pandas1.5.3-pydantic2.3.0.txt
+++ b/ci/requirements-py3.11-pandas1.5.3-pydantic2.3.0.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -32,31 +32,32 @@ distlib==0.3.8
 distributed==2024.2.1
 docutils==0.21.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -65,9 +66,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -75,11 +76,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
 modin==0.22.3
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -94,7 +95,7 @@ nox==2024.4.15
 numpy==1.26.4
 packaging==24.1
 pandas==1.5.3
-pandas-stubs==2.2.2.240807
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -102,12 +103,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -122,34 +123,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -162,34 +163,33 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
-tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.11-pandas2.2.2-pydantic1.10.11.txt b/ci/requirements-py3.11-pandas2.2.2-pydantic1.10.11.txt
index 4f5069fff..d0ae2fac2 100644
--- a/ci/requirements-py3.11-pandas2.2.2-pydantic1.10.11.txt
+++ b/ci/requirements-py3.11-pandas2.2.2-pydantic1.10.11.txt
@@ -1,19 +1,19 @@
 aiosignal==1.3.1
 alabaster==0.7.16
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -23,40 +23,41 @@ colorlog==6.8.2
 comm==0.2.2
 commonmark==0.9.1
 coverage==7.6.1
-dask==2024.8.0
-dask-expr==1.1.10
+dask==2024.9.0
+dask-expr==1.1.14
 debugpy==1.8.5
 decorator==5.1.1
 dill==0.3.8
 distlib==0.3.8
-distributed==2024.8.0
+distributed==2024.9.0
 docutils==0.21.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -65,9 +66,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -75,11 +76,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -91,10 +92,10 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.1.1
 packaging==24.1
 pandas==2.2.2
-pandas-stubs==2.2.2.240807
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -102,12 +103,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -121,34 +122,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -161,35 +162,34 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
-tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.11-pandas2.2.2-pydantic2.3.0.txt b/ci/requirements-py3.11-pandas2.2.2-pydantic2.3.0.txt
index 22f1cc434..8f6a47cdb 100644
--- a/ci/requirements-py3.11-pandas2.2.2-pydantic2.3.0.txt
+++ b/ci/requirements-py3.11-pandas2.2.2-pydantic2.3.0.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -24,40 +24,41 @@ colorlog==6.8.2
 comm==0.2.2
 commonmark==0.9.1
 coverage==7.6.1
-dask==2024.8.0
-dask-expr==1.1.10
+dask==2024.9.0
+dask-expr==1.1.14
 debugpy==1.8.5
 decorator==5.1.1
 dill==0.3.8
 distlib==0.3.8
-distributed==2024.8.0
+distributed==2024.9.0
 docutils==0.21.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -66,9 +67,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -76,11 +77,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -92,10 +93,10 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.1.1
 packaging==24.1
 pandas==2.2.2
-pandas-stubs==2.2.2.240807
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -103,12 +104,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -123,34 +124,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -163,35 +164,34 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
-tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.8-pandas1.5.3-pydantic1.10.11.txt b/ci/requirements-py3.8-pandas1.5.3-pydantic1.10.11.txt
index d63b1e63a..5232474a1 100644
--- a/ci/requirements-py3.8-pandas1.5.3-pydantic1.10.11.txt
+++ b/ci/requirements-py3.8-pandas1.5.3-pydantic1.10.11.txt
@@ -1,11 +1,11 @@
 aiosignal==1.3.1
 alabaster==0.7.13
-anyio==4.4.0
+anyio==4.5.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
@@ -13,8 +13,8 @@ backcall==0.2.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -35,33 +35,34 @@ distributed==2023.5.0
 docutils==0.19
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
-fiona==1.9.6
+filelock==3.16.1
+fiona==1.10.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2023.3.27
 geopandas==0.13.2
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
-importlib-resources==6.4.0
+importlib-metadata==8.5.0
+importlib-resources==6.4.5
 iniconfig==2.0.0
 ipykernel==6.29.5
 ipython==8.12.3
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -70,9 +71,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==0.6.1
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==2.2.0
@@ -83,8 +84,8 @@ mccabe==0.7.0
 mdit-py-plugins==0.3.5
 mdurl==0.1.2
 modin==0.22.3
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.10
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -109,12 +110,12 @@ pickleshare==0.7.5
 pip==24.2
 pkginfo==1.10.0
 pkgutil-resolve-name==1.3.10
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.5.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -127,16 +128,16 @@ pympler==1.1
 pyproj==3.5.0
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
+pyzmq==26.2.0
 ray==2.10.0
 readme-renderer==43.0
 recommonmark==0.7.1
@@ -144,17 +145,17 @@ referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
 scipy==1.10.1
-shapely==2.0.5
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==5.3.0
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -167,34 +168,34 @@ sphinxcontrib-htmlhelp==2.0.1
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==1.0.3
 sphinxcontrib-serializinghtml==1.1.5
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.8-pandas1.5.3-pydantic2.3.0.txt b/ci/requirements-py3.8-pandas1.5.3-pydantic2.3.0.txt
index d3160ffd5..b45a9d443 100644
--- a/ci/requirements-py3.8-pandas1.5.3-pydantic2.3.0.txt
+++ b/ci/requirements-py3.8-pandas1.5.3-pydantic2.3.0.txt
@@ -1,12 +1,12 @@
 aiosignal==1.3.1
 alabaster==0.7.13
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.5.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
@@ -14,8 +14,8 @@ backcall==0.2.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -36,33 +36,34 @@ distributed==2023.5.0
 docutils==0.19
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
-fiona==1.9.6
+filelock==3.16.1
+fiona==1.10.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2023.3.27
 geopandas==0.13.2
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
-importlib-resources==6.4.0
+importlib-metadata==8.5.0
+importlib-resources==6.4.5
 iniconfig==2.0.0
 ipykernel==6.29.5
 ipython==8.12.3
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -71,9 +72,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==0.6.1
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==2.2.0
@@ -84,8 +85,8 @@ mccabe==0.7.0
 mdit-py-plugins==0.3.5
 mdurl==0.1.2
 modin==0.22.3
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.10
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -110,12 +111,12 @@ pickleshare==0.7.5
 pip==24.2
 pkginfo==1.10.0
 pkgutil-resolve-name==1.3.10
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.5.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -129,16 +130,16 @@ pympler==1.1
 pyproj==3.5.0
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
+pyzmq==26.2.0
 ray==2.10.0
 readme-renderer==43.0
 recommonmark==0.7.1
@@ -146,17 +147,17 @@ referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
 scipy==1.10.1
-shapely==2.0.5
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==5.3.0
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -169,34 +170,34 @@ sphinxcontrib-htmlhelp==2.0.1
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==1.0.3
 sphinxcontrib-serializinghtml==1.1.5
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.9-pandas1.5.3-pydantic1.10.11.txt b/ci/requirements-py3.9-pandas1.5.3-pydantic1.10.11.txt
index d6e94b179..12ad446ba 100644
--- a/ci/requirements-py3.9-pandas1.5.3-pydantic1.10.11.txt
+++ b/ci/requirements-py3.9-pandas1.5.3-pydantic1.10.11.txt
@@ -1,19 +1,19 @@
 aiosignal==1.3.1
 alabaster==0.7.16
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -32,31 +32,32 @@ distributed==2024.2.1
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
 ipython==8.18.1
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -65,9 +66,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -75,11 +76,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
 modin==0.22.3
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -102,12 +103,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -121,34 +122,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
 scipy==1.13.1
-shapely==2.0.5
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -161,34 +162,34 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.9-pandas1.5.3-pydantic2.3.0.txt b/ci/requirements-py3.9-pandas1.5.3-pydantic2.3.0.txt
index 3e64e5d34..eea3e2094 100644
--- a/ci/requirements-py3.9-pandas1.5.3-pydantic2.3.0.txt
+++ b/ci/requirements-py3.9-pandas1.5.3-pydantic2.3.0.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -33,31 +33,32 @@ distributed==2024.2.1
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
 ipython==8.18.1
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -66,9 +67,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -76,11 +77,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
 modin==0.22.3
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -103,12 +104,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -123,34 +124,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
 scipy==1.13.1
-shapely==2.0.5
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -163,34 +164,34 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.9-pandas2.2.2-pydantic1.10.11.txt b/ci/requirements-py3.9-pandas2.2.2-pydantic1.10.11.txt
index ffaf43d9b..5985bd12a 100644
--- a/ci/requirements-py3.9-pandas2.2.2-pydantic1.10.11.txt
+++ b/ci/requirements-py3.9-pandas2.2.2-pydantic1.10.11.txt
@@ -1,19 +1,19 @@
 aiosignal==1.3.1
 alabaster==0.7.16
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -33,31 +33,32 @@ distributed==2024.8.0
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
 ipython==8.18.1
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -66,9 +67,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -76,11 +77,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -92,7 +93,7 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.0.2
 packaging==24.1
 pandas==2.2.2
 pandas-stubs==2.2.2.240807
@@ -103,12 +104,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -122,34 +123,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
 scipy==1.13.1
-shapely==2.0.5
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -162,35 +163,35 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/ci/requirements-py3.9-pandas2.2.2-pydantic2.3.0.txt b/ci/requirements-py3.9-pandas2.2.2-pydantic2.3.0.txt
index 4167b5015..c1fc0bf15 100644
--- a/ci/requirements-py3.9-pandas2.2.2-pydantic2.3.0.txt
+++ b/ci/requirements-py3.9-pandas2.2.2-pydantic2.3.0.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -34,31 +34,32 @@ distributed==2024.8.0
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
 ipython==8.18.1
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -67,9 +68,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -77,11 +78,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -93,7 +94,7 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.0.2
 packaging==24.1
 pandas==2.2.2
 pandas-stubs==2.2.2.240807
@@ -104,12 +105,12 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
@@ -124,34 +125,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
 scipy==1.13.1
-shapely==2.0.5
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -164,35 +165,35 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/dev/requirements-3.10.txt b/dev/requirements-3.10.txt
index fd147196a..11089853a 100644
--- a/dev/requirements-3.10.txt
+++ b/dev/requirements-3.10.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -24,41 +24,42 @@ colorlog==6.8.2
 comm==0.2.2
 commonmark==0.9.1
 coverage==7.6.1
-dask==2024.8.0
-dask-expr==1.1.10
+dask==2024.9.0
+dask-expr==1.1.14
 debugpy==1.8.5
 decorator==5.1.1
 dill==0.3.8
 distlib==0.3.8
-distributed==2024.8.0
+distributed==2024.9.0
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -67,9 +68,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -77,11 +78,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -93,10 +94,10 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.1.1
 packaging==24.1
-pandas==2.2.2
-pandas-stubs==2.2.2.240807
+pandas==2.2.3
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -104,19 +105,19 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
 py4j==0.10.9.7
 pyarrow==17.0.0
-pydantic==2.8.2
-pydantic-core==2.20.1
+pydantic==2.9.2
+pydantic-core==2.23.4
 pygments==2.18.0
 pylint==2.17.3
 pympler==1.1
@@ -124,34 +125,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -164,35 +165,35 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/dev/requirements-3.11.txt b/dev/requirements-3.11.txt
index 47a55b9ab..429d2daa0 100644
--- a/dev/requirements-3.11.txt
+++ b/dev/requirements-3.11.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -24,40 +24,41 @@ colorlog==6.8.2
 comm==0.2.2
 commonmark==0.9.1
 coverage==7.6.1
-dask==2024.8.0
-dask-expr==1.1.10
+dask==2024.9.0
+dask-expr==1.1.14
 debugpy==1.8.5
 decorator==5.1.1
 dill==0.3.8
 distlib==0.3.8
-distributed==2024.8.0
+distributed==2024.9.0
 docutils==0.21.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
-ipython==8.26.0
+ipython==8.27.0
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -66,9 +67,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -76,11 +77,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -92,10 +93,10 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.1.1
 packaging==24.1
-pandas==2.2.2
-pandas-stubs==2.2.2.240807
+pandas==2.2.3
+pandas-stubs==2.2.2.240909
 parso==0.8.4
 partd==1.4.2
 pathspec==0.12.1
@@ -103,19 +104,19 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
 py4j==0.10.9.7
 pyarrow==17.0.0
-pydantic==2.8.2
-pydantic-core==2.20.1
+pydantic==2.9.2
+pydantic-core==2.23.4
 pygments==2.18.0
 pylint==2.17.3
 pympler==1.1
@@ -123,34 +124,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
-scipy==1.14.0
-shapely==2.0.5
+scipy==1.14.1
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -163,35 +164,34 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
-tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/dev/requirements-3.8.txt b/dev/requirements-3.8.txt
index 2fd407a14..2783bb053 100644
--- a/dev/requirements-3.8.txt
+++ b/dev/requirements-3.8.txt
@@ -1,12 +1,12 @@
 aiosignal==1.3.1
 alabaster==0.7.13
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.5.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
@@ -14,8 +14,8 @@ backcall==0.2.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -36,33 +36,34 @@ distributed==2023.5.0
 docutils==0.19
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
-fiona==1.9.6
+filelock==3.16.1
+fiona==1.10.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2023.3.27
 geopandas==0.13.2
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
-importlib-resources==6.4.0
+importlib-metadata==8.5.0
+importlib-resources==6.4.5
 iniconfig==2.0.0
 ipykernel==6.29.5
 ipython==8.12.3
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -71,9 +72,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==0.6.1
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==2.2.0
@@ -84,8 +85,8 @@ mccabe==0.7.0
 mdit-py-plugins==0.3.5
 mdurl==0.1.2
 modin==0.23.1.post0
-more-itertools==10.4.0
-msgpack==1.0.8
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.10
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -110,35 +111,35 @@ pickleshare==0.7.5
 pip==24.2
 pkginfo==1.10.0
 pkgutil-resolve-name==1.3.10
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.5.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
 py4j==0.10.9.7
 pyarrow==17.0.0
-pydantic==2.8.2
-pydantic-core==2.20.1
+pydantic==2.9.2
+pydantic-core==2.23.4
 pygments==2.18.0
 pylint==2.17.3
 pympler==1.1
 pyproj==3.5.0
 pyproject-hooks==1.1.0
 pyspark==3.5.2
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
+pyzmq==26.2.0
 ray==2.10.0
 readme-renderer==43.0
 recommonmark==0.7.1
@@ -146,17 +147,17 @@ referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
 scipy==1.10.1
-shapely==2.0.5
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==5.3.0
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -169,35 +170,35 @@ sphinxcontrib-htmlhelp==2.0.1
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==1.0.3
 sphinxcontrib-serializinghtml==1.1.5
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/dev/requirements-3.9.txt b/dev/requirements-3.9.txt
index c3be160e5..4c3030c4a 100644
--- a/dev/requirements-3.9.txt
+++ b/dev/requirements-3.9.txt
@@ -1,20 +1,20 @@
 aiosignal==1.3.1
 alabaster==0.7.16
 annotated-types==0.7.0
-anyio==4.4.0
+anyio==4.6.0
 appnope==0.1.4
 argcomplete==3.5.0
 astroid==2.15.8
 asttokens==2.4.1
-asv==0.6.3
+asv==0.6.4
 asv-runner==0.2.1
 attrs==24.2.0
 babel==2.16.0
 backports-tarfile==1.2.0
 beautifulsoup4==4.12.3
 black==24.8.0
-build==1.2.1
-certifi==2024.7.4
+build==1.2.2
+certifi==2024.8.30
 cfgv==3.4.0
 chardet==5.2.0
 charset-normalizer==3.3.2
@@ -34,31 +34,32 @@ distributed==2024.8.0
 docutils==0.21.2
 exceptiongroup==1.2.2
 execnet==2.1.1
-executing==2.0.1
-fastapi==0.112.0
+executing==2.1.0
+fastapi==0.115.0
 fastjsonschema==2.20.0
-filelock==3.15.4
+filelock==3.16.1
 frictionless==4.40.8
 frozenlist==1.4.1
-fsspec==2024.6.1
+fsspec==2024.9.0
 furo==2024.8.6
 geopandas==1.0.1
-googleapis-common-protos==1.63.2
-grpcio==1.65.4
-grpcio-status==1.65.4
+googleapis-common-protos==1.65.0
+greenlet==3.1.1
+grpcio==1.66.1
+grpcio-status==1.66.1
 h11==0.14.0
-hypothesis==6.111.0
-identify==2.6.0
-idna==3.7
+hypothesis==6.112.1
+identify==2.6.1
+idna==3.10
 imagesize==1.4.1
-importlib-metadata==8.2.0
+importlib-metadata==8.5.0
 iniconfig==2.0.0
 ipykernel==6.29.5
 ipython==8.18.1
 isodate==0.6.1
 isort==5.13.2
 jaraco-classes==3.4.0
-jaraco-context==5.3.0
+jaraco-context==6.0.1
 jaraco-functools==4.0.2
 jedi==0.19.1
 jinja2==3.1.4
@@ -67,9 +68,9 @@ json5==0.9.25
 jsonschema==4.23.0
 jsonschema-specifications==2023.12.1
 jupyter-cache==1.0.0
-jupyter-client==8.6.2
+jupyter-client==8.6.3
 jupyter-core==5.7.2
-keyring==25.3.0
+keyring==25.4.1
 lazy-object-proxy==1.10.0
 locket==1.0.0
 markdown-it-py==3.0.0
@@ -77,11 +78,11 @@ marko==2.1.2
 markupsafe==2.1.5
 matplotlib-inline==0.1.7
 mccabe==0.7.0
-mdit-py-plugins==0.4.1
+mdit-py-plugins==0.4.2
 mdurl==0.1.2
-modin==0.31.0
-more-itertools==10.4.0
-msgpack==1.0.8
+modin==0.32.0
+more-itertools==10.5.0
+msgpack==1.1.0
 multimethod==1.12
 mypy==1.10.0
 mypy-extensions==1.0.0
@@ -93,9 +94,9 @@ nest-asyncio==1.6.0
 nh3==0.2.18
 nodeenv==1.9.1
 nox==2024.4.15
-numpy==2.0.1
+numpy==2.0.2
 packaging==24.1
-pandas==2.2.2
+pandas==2.2.3
 pandas-stubs==2.2.2.240807
 parso==0.8.4
 partd==1.4.2
@@ -104,19 +105,19 @@ petl==1.7.15
 pexpect==4.9.0
 pip==24.2
 pkginfo==1.10.0
-platformdirs==4.2.2
+platformdirs==4.3.6
 pluggy==1.5.0
-polars==1.4.1
+polars==1.7.1
 pre-commit==3.8.0
 prompt-toolkit==3.0.47
-protobuf==5.27.3
+protobuf==5.28.2
 psutil==6.0.0
 ptyprocess==0.7.0
 pure-eval==0.2.3
 py4j==0.10.9.7
 pyarrow==17.0.0
-pydantic==2.8.2
-pydantic-core==2.20.1
+pydantic==2.9.2
+pydantic-core==2.23.4
 pygments==2.18.0
 pylint==2.17.3
 pympler==1.1
@@ -124,34 +125,34 @@ pyogrio==0.9.0
 pyproj==3.6.1
 pyproject-hooks==1.1.0
 pyspark==3.5.1
-pytest==8.3.2
-pytest-asyncio==0.23.8
+pytest==8.3.3
+pytest-asyncio==0.24.0
 pytest-cov==5.0.0
 pytest-xdist==3.6.1
 python-dateutil==2.9.0.post0
-python-multipart==0.0.9
+python-multipart==0.0.10
 python-slugify==8.0.4
-pytz==2024.1
+pytz==2024.2
 pyyaml==6.0.2
-pyzmq==26.1.0
-ray==2.34.0
+pyzmq==26.2.0
+ray==2.36.0
 readme-renderer==44.0
 recommonmark==0.7.1
 referencing==0.35.1
 requests==2.32.3
 requests-toolbelt==1.0.0
 rfc3986==2.0.0
-rich==13.7.1
+rich==13.8.1
 rpds-py==0.20.0
 scipy==1.13.1
-shapely==2.0.5
+shapely==2.0.6
 shellingham==1.5.4
 simpleeval==0.9.13
 six==1.16.0
 sniffio==1.3.1
 snowballstemmer==2.2.0
 sortedcontainers==2.4.0
-soupsieve==2.5
+soupsieve==2.6
 sphinx==7.3.7
 sphinx-autodoc-typehints==1.14.1
 sphinx-basic-ng==1.0.0b2
@@ -164,35 +165,35 @@ sphinxcontrib-htmlhelp==2.1.0
 sphinxcontrib-jsmath==1.0.1
 sphinxcontrib-qthelp==2.0.0
 sphinxcontrib-serializinghtml==2.0.0
-sqlalchemy==2.0.32
+sqlalchemy==2.0.35
 stack-data==0.6.3
-starlette==0.37.2
+starlette==0.38.6
 stringcase==1.2.0
 tabulate==0.9.0
 tblib==3.0.0
 text-unidecode==1.3
 tomli==2.0.1
-tomlkit==0.13.0
+tomlkit==0.13.2
 toolz==0.12.1
 tornado==6.4.1
 traitlets==5.14.3
 twine==5.1.1
 typeguard==4.3.0
-typer==0.12.3
+typer==0.12.5
 types-click==7.1.8
-types-pytz==2024.1.0.20240417
-types-pyyaml==6.0.12.20240808
-types-requests==2.32.0.20240712
-types-setuptools==71.1.0.20240806
+types-pytz==2024.2.0.20240913
+types-pyyaml==6.0.12.20240917
+types-requests==2.32.0.20240914
+types-setuptools==75.1.0.20240917
 typing-extensions==4.12.2
 typing-inspect==0.9.0
 tzdata==2024.1
-urllib3==2.2.2
-uvicorn==0.30.5
-validators==0.33.0
-virtualenv==20.26.3
+urllib3==2.2.3
+uvicorn==0.30.6
+validators==0.34.0
+virtualenv==20.26.5
 wcwidth==0.2.13
 wrapt==1.16.0
-xdoctest==1.1.6
+xdoctest==1.2.0
 zict==3.0.0
-zipp==3.20.0
+zipp==3.20.2
diff --git a/environment.yml b/environment.yml
index 1abd2e3b5..7fcd4d459 100644
--- a/environment.yml
+++ b/environment.yml
@@ -16,7 +16,7 @@ dependencies:
   - pyyaml >=5.1
   - typing_inspect >= 0.6.0
   - typing_extensions >= 3.7.4.3
-  - frictionless <= 4.40.8 # v5.* introduces breaking changes
+  - frictionless <= 4.40.8  # v5.* introduces breaking changes
   - pyarrow
   - pydantic
   - multimethod
diff --git a/pandera/__init__.py b/pandera/__init__.py
index 16207c578..24536eaf1 100644
--- a/pandera/__init__.py
+++ b/pandera/__init__.py
@@ -11,7 +11,7 @@
 import pandera.backends.base.builtin_checks
 import pandera.backends.base.builtin_hypotheses
 import pandera.backends.pandas
-from pandera import errors
+from pandera import errors, external_config
 from pandera.accessors import pandas_accessor
 from pandera.api import extensions
 from pandera.api.checks import Check
@@ -82,6 +82,9 @@
     from pandera.dtypes import Complex256, Float128
 
 
+external_config._set_pyspark_environment_variables()
+
+
 __all__ = [
     # dtypes
     "Bool",
diff --git a/pandera/api/base/checks.py b/pandera/api/base/checks.py
index 394ba9a33..63a6962ed 100644
--- a/pandera/api/base/checks.py
+++ b/pandera/api/base/checks.py
@@ -156,6 +156,11 @@ def get_builtin_check_fn(cls, name: str):
         """Gets a built-in check function"""
         return cls.CHECK_FUNCTION_REGISTRY[name]
 
+    @classmethod
+    def is_builtin_check(cls, name: str) -> bool:
+        """Gets a built-in check function"""
+        return name in cls.CHECK_FUNCTION_REGISTRY
+
     @classmethod
     def from_builtin_check_name(
         cls,
diff --git a/pandera/api/base/schema.py b/pandera/api/base/schema.py
index 7d3219bd9..75891e036 100644
--- a/pandera/api/base/schema.py
+++ b/pandera/api/base/schema.py
@@ -47,7 +47,6 @@ def __init__(
         self.description = description
         self.metadata = metadata
         self.drop_invalid_rows = drop_invalid_rows
-        self._register_default_backends()
 
     def validate(
         self,
@@ -107,6 +106,7 @@ def get_backend(
         check_type: Optional[Type] = None,
     ) -> BaseSchemaBackend:
         """Get the backend associated with the type of ``check_obj`` ."""
+
         if check_obj is not None:
             check_obj_cls = type(check_obj)
         elif check_type is not None:
@@ -115,6 +115,8 @@ def get_backend(
             raise ValueError(
                 "Must pass in one of `check_obj` or `check_type`."
             )
+
+        cls.register_default_backends(check_obj_cls)
         classes = inspect.getmro(check_obj_cls)
         for _class in classes:
             try:
@@ -126,17 +128,19 @@ def get_backend(
             f"Looked up the following base classes: {classes}"
         )
 
-    def _register_default_backends(self):
+    @staticmethod
+    def register_default_backends(check_obj_cls: Type):
         """Register default backends.
 
-        This method is invoked in the `__init__` method for subclasses that
-        implement the API for a specific dataframe object, and should be
-        overridden in those subclasses.
+        This method is invoked in the `get_backend` method so that the
+        appropriate validation backend is loaded at validation time instead of
+        schema-definition time.
+
+        This method needs to be implemented by the schema subclass.
         """
 
     def __setstate__(self, state):
         self.__dict__ = state
-        self._register_default_backends()
 
 
 def inferred_schema_guard(method):
diff --git a/pandera/api/checks.py b/pandera/api/checks.py
index 1125ed163..9ba336480 100644
--- a/pandera/api/checks.py
+++ b/pandera/api/checks.py
@@ -225,6 +225,12 @@ def __call__(
 
             ``failure_cases``: subset of the check_object that failed.
         """
+        if self.name is not None and self.is_builtin_check(self.name):
+            # since we use multimethod.multidispatch to dispatch built-in check
+            # functions, we need to reload the function here in case additional
+            # type signatures have been registered for a specific built-in
+            # check.
+            self._check_fn = self.get_builtin_check_fn(self.name)
         backend = self.get_backend(check_obj)(self)
         return backend(check_obj, column)
 
diff --git a/pandera/api/dataframe/container.py b/pandera/api/dataframe/container.py
index a4184d705..cbb0522d9 100644
--- a/pandera/api/dataframe/container.py
+++ b/pandera/api/dataframe/container.py
@@ -20,7 +20,6 @@
 )
 
 from pandera import errors
-from pandera.import_utils import strategy_import_error
 from pandera.api.base.schema import BaseSchema, inferred_schema_guard
 from pandera.api.base.types import CheckList, ParserList, StrictType
 from pandera.api.checks import Check
@@ -297,18 +296,6 @@ def get_dtypes(self, check_obj: TDataObject) -> Dict[str, DataType]:
     def coerce_dtype(self, check_obj: TDataObject) -> TDataObject:
         return self.get_backend(check_obj).coerce_dtype(check_obj, schema=self)
 
-    def validate(
-        self,
-        check_obj: TDataObject,
-        head: Optional[int] = None,
-        tail: Optional[int] = None,
-        sample: Optional[int] = None,
-        random_state: Optional[int] = None,
-        lazy: bool = False,
-        inplace: bool = False,
-    ) -> TDataObject:
-        raise NotImplementedError
-
     def __call__(
         self,
         dataframe: TDataObject,
@@ -1284,52 +1271,6 @@ def to_json(
 
         return pandera.io.to_json(self, target, **kwargs)
 
-    ###########################
-    # Schema Strategy Methods #
-    ###########################
-
-    @strategy_import_error
-    def strategy(
-        self, *, size: Optional[int] = None, n_regex_columns: int = 1
-    ):
-        """Create a ``hypothesis`` strategy for generating a DataFrame.
-
-        :param size: number of elements to generate
-        :param n_regex_columns: number of regex columns to generate.
-        :returns: a strategy that generates pandas DataFrame objects.
-        """
-        from pandera import strategies as st
-
-        return st.dataframe_strategy(
-            self.dtype,
-            columns=self.columns,
-            checks=self.checks,
-            unique=self.unique,
-            index=self.index,
-            size=size,
-            n_regex_columns=n_regex_columns,
-        )
-
-    def example(
-        self, size: Optional[int] = None, n_regex_columns: int = 1
-    ) -> TDataObject:
-        """Generate an example of a particular size.
-
-        :param size: number of elements in the generated DataFrame.
-        :returns: pandas DataFrame object.
-        """
-        # pylint: disable=import-outside-toplevel,cyclic-import,import-error
-        import hypothesis
-
-        with warnings.catch_warnings():
-            warnings.simplefilter(
-                "ignore",
-                category=hypothesis.errors.NonInteractiveExampleWarning,
-            )
-            return self.strategy(
-                size=size, n_regex_columns=n_regex_columns
-            ).example()
-
 
 def _validate_columns(
     column_dict: dict[Any, Any],  # type: ignore [name-defined]
diff --git a/pandera/api/pandas/array.py b/pandera/api/pandas/array.py
index 0f1cd27b7..012462baf 100644
--- a/pandera/api/pandas/array.py
+++ b/pandera/api/pandas/array.py
@@ -1,7 +1,7 @@
 """Core pandas array specification."""
 
 import warnings
-from typing import Any, Optional, cast
+from typing import Any, Optional, Type, cast
 
 import pandas as pd
 
@@ -13,6 +13,7 @@
 from pandera.config import get_config_context
 from pandera.dtypes import DataType, UniqueSettings
 from pandera.engines import pandas_engine
+from pandera.errors import BackendNotFoundError
 
 
 class ArraySchema(ComponentSchema[TDataObject]):
@@ -31,11 +32,6 @@ def _validate_attributes(self):
                 "DataFrameSchema dtype."
             )
 
-    def _register_default_backends(self):
-        from pandera.backends.pandas.register import register_pandas_backends
-
-        register_pandas_backends()
-
     @property
     def dtype(self) -> DataType:
         """Get the pandas dtype"""
@@ -46,6 +42,21 @@ def dtype(self, value: Optional[PandasDtypeInputTypes]) -> None:
         """Set the pandas dtype"""
         self._dtype = pandas_engine.Engine.dtype(value) if value else None
 
+    @staticmethod
+    def register_default_backends(check_obj_cls: Type):
+        from pandera.backends.pandas.register import register_pandas_backends
+
+        _cls = check_obj_cls
+        try:
+            register_pandas_backends(f"{_cls.__module__}.{_cls.__name__}")
+        except BackendNotFoundError:
+            for base_cls in _cls.__bases__:
+                base_cls_name = f"{base_cls.__module__}.{base_cls.__name__}"
+                try:
+                    register_pandas_backends(base_cls_name)
+                except BackendNotFoundError:
+                    pass
+
     ###########################
     # Schema Strategy Methods #
     ###########################
@@ -59,6 +70,8 @@ def strategy(self, *, size=None):
         """
         from pandera import strategies as st
 
+        self.register_default_backends(pd.DataFrame)
+
         return st.series_strategy(
             self.dtype,
             checks=self.checks,
@@ -226,6 +239,9 @@ def validate(  # type: ignore [override]
         if hasattr(check_obj, "dask"):
             # special case for dask series
             if inplace:
+                # pylint: disable=unused-import
+                from pandera.accessors import dask_accessor
+
                 check_obj = check_obj.pandera.add_schema(self)
             else:
                 check_obj = check_obj.copy()
diff --git a/pandera/api/pandas/container.py b/pandera/api/pandas/container.py
index ecb7537b9..92081d9c1 100644
--- a/pandera/api/pandas/container.py
+++ b/pandera/api/pandas/container.py
@@ -1,7 +1,7 @@
 """Core pandas dataframe container specification."""
 
 import warnings
-from typing import Optional
+from typing import Optional, Type
 
 import pandas as pd
 
@@ -10,17 +10,14 @@
 from pandera.config import get_config_context
 from pandera.dtypes import DataType
 from pandera.engines import pandas_engine
+from pandera.errors import BackendNotFoundError
+from pandera.import_utils import strategy_import_error
 
 
 # pylint: disable=too-many-public-methods,too-many-locals
 class DataFrameSchema(_DataFrameSchema[pd.DataFrame]):
     """A light-weight pandas DataFrame validator."""
 
-    def _register_default_backends(self):
-        from pandera.backends.pandas.register import register_pandas_backends
-
-        register_pandas_backends()
-
     @property
     def dtype(
         self,
@@ -106,6 +103,9 @@ def validate(
 
         if hasattr(check_obj, "dask"):
             # special case for dask dataframes
+            # pylint: disable=unused-import
+            from pandera.accessors import dask_accessor
+
             if inplace:
                 check_obj = check_obj.pandera.add_schema(self)
             else:
@@ -143,6 +143,7 @@ def _validate(
         lazy: bool = False,
         inplace: bool = False,
     ) -> pd.DataFrame:
+
         if self._is_inferred:
             warnings.warn(
                 f"This {type(self)} is an inferred schema that hasn't been "
@@ -162,3 +163,66 @@ def _validate(
             lazy=lazy,
             inplace=inplace,
         )
+
+    @staticmethod
+    def register_default_backends(check_obj_cls: Type):
+        from pandera.backends.pandas.register import register_pandas_backends
+
+        _cls = check_obj_cls
+        try:
+            register_pandas_backends(f"{_cls.__module__}.{_cls.__name__}")
+        except BackendNotFoundError:
+            for base_cls in _cls.__bases__:
+                base_cls_name = f"{base_cls.__module__}.{base_cls.__name__}"
+                try:
+                    register_pandas_backends(base_cls_name)
+                except BackendNotFoundError:
+                    pass
+
+    ###########################
+    # Schema Strategy Methods #
+    ###########################
+
+    @strategy_import_error
+    def strategy(
+        self, *, size: Optional[int] = None, n_regex_columns: int = 1
+    ):
+        """Create a ``hypothesis`` strategy for generating a DataFrame.
+
+        :param size: number of elements to generate
+        :param n_regex_columns: number of regex columns to generate.
+        :returns: a strategy that generates pandas DataFrame objects.
+        """
+        from pandera import strategies as st
+
+        self.register_default_backends(pd.DataFrame)
+
+        return st.dataframe_strategy(
+            self.dtype,
+            columns=self.columns,
+            checks=self.checks,
+            unique=self.unique,
+            index=self.index,
+            size=size,
+            n_regex_columns=n_regex_columns,
+        )
+
+    def example(
+        self, size: Optional[int] = None, n_regex_columns: int = 1
+    ) -> pd.DataFrame:
+        """Generate an example of a particular size.
+
+        :param size: number of elements in the generated DataFrame.
+        :returns: pandas DataFrame object.
+        """
+        # pylint: disable=import-outside-toplevel,cyclic-import,import-error
+        import hypothesis
+
+        with warnings.catch_warnings():
+            warnings.simplefilter(
+                "ignore",
+                category=hypothesis.errors.NonInteractiveExampleWarning,
+            )
+            return self.strategy(
+                size=size, n_regex_columns=n_regex_columns
+            ).example()
diff --git a/pandera/api/pandas/types.py b/pandera/api/pandas/types.py
index 58fb7a902..2006359a9 100644
--- a/pandera/api/pandas/types.py
+++ b/pandera/api/pandas/types.py
@@ -32,35 +32,35 @@
 def supported_types() -> SupportedTypes:
     """Get the types supported by pandera schemas."""
     # pylint: disable=import-outside-toplevel
-    table_types: Tuple[type, ...] = (pd.DataFrame,)
-    field_types: Tuple[type, ...] = (pd.Series,)
-    index_types: Tuple[type, ...] = (pd.Index,)
-    multiindex_types: Tuple[type, ...] = (pd.MultiIndex,)
+    table_types = [pd.DataFrame]
+    field_types = [pd.Series]
+    index_types = [pd.Index]
+    multiindex_types = [pd.MultiIndex]
 
     try:
         import pyspark.pandas as ps
 
-        table_types += (ps.DataFrame,)
-        field_types += (ps.Series,)
-        index_types += (ps.Index,)
-        multiindex_types += (ps.MultiIndex,)
+        table_types.append(ps.DataFrame)
+        field_types.append(ps.Series)
+        index_types.append(ps.Index)
+        multiindex_types.append(ps.MultiIndex)
     except ImportError:
         pass
     try:  # pragma: no cover
         import modin.pandas as mpd
 
-        table_types += (mpd.DataFrame,)
-        field_types += (mpd.Series,)
-        index_types += (mpd.Index,)
-        multiindex_types += (mpd.MultiIndex,)
+        table_types.append(mpd.DataFrame)
+        field_types.append(mpd.Series)
+        index_types.append(mpd.Index)
+        multiindex_types.append(mpd.MultiIndex)
     except ImportError:
         pass
     try:
         import dask.dataframe as dd
 
-        table_types += (dd.DataFrame,)
-        field_types += (dd.Series,)
-        index_types += (dd.Index,)
+        table_types.append(dd.DataFrame)
+        field_types.append(dd.Series)
+        index_types.append(dd.Index)
     except ImportError:
         pass
 
@@ -72,36 +72,6 @@ def supported_types() -> SupportedTypes:
     )
 
 
-def supported_type_unions(attribute: str):
-    """Get the type unions for a given attribute."""
-    if attribute == "table_types":
-        return Union[tuple(supported_types().table_types)]
-    if attribute == "field_types":
-        return Union[tuple(supported_types().field_types)]
-    if attribute == "index_types":
-        return Union[tuple(supported_types().index_types)]
-    if attribute == "multiindex_types":
-        return Union[tuple(supported_types().multiindex_types)]
-    if attribute == "table_or_field_types":
-        return Union[
-            tuple(
-                (
-                    *supported_types().table_types,
-                    *supported_types().field_types,
-                )
-            )
-        ]
-    raise ValueError(f"invalid attribute {attribute}")
-
-
-Table = supported_type_unions("table_types")
-Field = supported_type_unions("field_types")
-Index = supported_type_unions("index_types")
-Multiindex = supported_type_unions("multiindex_types")
-TableOrField = supported_type_unions("table_or_field_types")
-Bool = Union[bool, np.bool_]
-
-
 def is_table(obj):
     """Verifies whether an object is table-like.
 
diff --git a/pandera/api/polars/components.py b/pandera/api/polars/components.py
index 322f3cc00..823912d1d 100644
--- a/pandera/api/polars/components.py
+++ b/pandera/api/polars/components.py
@@ -3,7 +3,7 @@
 from __future__ import annotations
 
 import logging
-from typing import Any, Optional
+from typing import Any, Optional, Type
 
 import polars as pl
 
@@ -105,7 +105,10 @@ def __init__(
 
         self.set_regex()
 
-    def _register_default_backends(self):
+    @staticmethod
+    def register_default_backends(
+        check_obj_cls: Type,
+    ):  # pylint: disable=unused-argument
         register_polars_backends()
 
     def validate(
diff --git a/pandera/api/polars/container.py b/pandera/api/polars/container.py
index b3c9b1088..711b1b92c 100644
--- a/pandera/api/polars/container.py
+++ b/pandera/api/polars/container.py
@@ -1,7 +1,7 @@
 """DataFrame Schema for Polars."""
 
 import warnings
-from typing import Optional
+from typing import Optional, Type
 
 import polars as pl
 
@@ -34,7 +34,10 @@ def _validate_attributes(self):
                 "polars backend, all duplicate values will be reported."
             )
 
-    def _register_default_backends(self):
+    @staticmethod
+    def register_default_backends(
+        check_obj_cls: Type,
+    ):  # pylint: disable=unused-argument
         register_polars_backends()
 
     def validate(
diff --git a/pandera/api/polars/types.py b/pandera/api/polars/types.py
index a23464f2c..f038bcf73 100644
--- a/pandera/api/polars/types.py
+++ b/pandera/api/polars/types.py
@@ -27,11 +27,3 @@ class CheckResult(NamedTuple):
     type,
     pl.datatypes.classes.DataTypeClass,
 ]
-
-
-def is_bool(x):
-    """Verifies whether an object is a boolean type."""
-    return isinstance(x, (bool, pl.Boolean))
-
-
-Bool = Union[bool, pl.Boolean]
diff --git a/pandera/api/pyspark/column_schema.py b/pandera/api/pyspark/column_schema.py
index df51faf9c..ca7b2f349 100644
--- a/pandera/api/pyspark/column_schema.py
+++ b/pandera/api/pyspark/column_schema.py
@@ -1,7 +1,7 @@
 """Core pyspark column specification."""
 
 import copy
-from typing import Any, List, Optional, TypeVar, cast
+from typing import Any, List, Optional, Type, TypeVar, cast
 
 import pyspark.sql as ps
 
@@ -70,7 +70,8 @@ def __init__(
         self.description = description
         self.metadata = metadata
 
-    def _register_default_backends(self):
+    @staticmethod
+    def register_default_backends(check_obj_cls: Type):
         register_pyspark_backends()
 
     @property
diff --git a/pandera/api/pyspark/container.py b/pandera/api/pyspark/container.py
index 29a3b96d6..5db0997ab 100644
--- a/pandera/api/pyspark/container.py
+++ b/pandera/api/pyspark/container.py
@@ -6,7 +6,7 @@
 import os
 import warnings
 from pathlib import Path
-from typing import Any, Dict, List, Optional, Union, cast, overload
+from typing import Any, Dict, List, Optional, Type, Union, cast, overload
 
 from pyspark.sql import DataFrame, SparkSession
 from pyspark.sql.types import StructField, StructType
@@ -155,7 +155,8 @@ def __init__(
         self._IS_INFERRED = False
         self.metadata = metadata
 
-    def _register_default_backends(self):
+    @staticmethod
+    def register_default_backends(check_obj_cls: Type):
         register_pyspark_backends()
 
     @property
diff --git a/pandera/backends/pandas/builtin_checks.py b/pandera/backends/pandas/builtin_checks.py
index 16c6d0ef8..3a8bf603a 100644
--- a/pandera/backends/pandas/builtin_checks.py
+++ b/pandera/backends/pandas/builtin_checks.py
@@ -8,6 +8,8 @@
 
 import pandera.strategies as st
 from pandera.api.extensions import register_builtin_check
+
+
 from pandera.typing.modin import MODIN_INSTALLED
 from pandera.typing.pyspark import PYSPARK_INSTALLED
 
diff --git a/pandera/backends/pandas/checks.py b/pandera/backends/pandas/checks.py
index fc721c82d..3c9cc3d61 100644
--- a/pandera/backends/pandas/checks.py
+++ b/pandera/backends/pandas/checks.py
@@ -4,14 +4,15 @@
 from typing import Dict, List, Optional, Union, cast
 
 import pandas as pd
-from multimethod import DispatchError, multidispatch
+from multimethod import DispatchError, overload
+
 from pandera.api.base.checks import CheckResult, GroupbyObject
 from pandera.api.checks import Check
 from pandera.api.pandas.types import (
-    Bool,
-    Field,
-    Table,
-    TableOrField,
+    is_bool,
+    is_field,
+    is_table,
+    is_table_or_field,
 )
 from pandera.backends.base import BaseCheckBackend
 
@@ -77,18 +78,18 @@ def _format_groupby_input(
 
         return output  # type: ignore[return-value]
 
-    @multidispatch
+    @overload
     def preprocess(self, check_obj, key) -> pd.Series:
         """Preprocesses a check object before applying the check function."""
         # This handles the case of Series validation, which has no other context except
         # for the index to groupby on. Right now grouping by the index is not allowed.
         return check_obj
 
-    @preprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def preprocess(
         self,
-        check_obj: Field,  # type: ignore [valid-type]
-        _,
+        check_obj: is_field,  # type: ignore [valid-type]
+        key,
     ) -> Union[pd.Series, Dict[str, pd.Series]]:
         if self.check.groupby is None:
             return check_obj
@@ -99,10 +100,10 @@ def _(
             ),
         )
 
-    @preprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def preprocess(
         self,
-        check_obj: Table,  # type: ignore [valid-type]
+        check_obj: is_table,  # type: ignore [valid-type]
         key,
     ) -> Union[pd.DataFrame, Dict[str, pd.DataFrame]]:
         if self.check.groupby is None:
@@ -114,11 +115,11 @@ def _(
             ),
         )
 
-    @preprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def preprocess(
         self,
-        check_obj: Table,  # type: ignore [valid-type]
-        _: None,
+        check_obj: is_table,  # type: ignore [valid-type]
+        key: None,
     ) -> Union[pd.DataFrame, Dict[str, pd.DataFrame]]:
         if self.check.groupby is None:
             return check_obj
@@ -129,39 +130,39 @@ def _(
             ),
         )
 
-    @multidispatch
+    @overload
     def apply(self, check_obj):
         """Apply the check function to a check object."""
         raise NotImplementedError
 
-    @apply.register
-    def _(self, check_obj: dict):
+    @overload  # type: ignore [no-redef]
+    def apply(self, check_obj: dict):
         return self.check_fn(check_obj)
 
-    @apply.register
-    def _(self, check_obj: Field):  # type: ignore [valid-type]
+    @overload  # type: ignore [no-redef]
+    def apply(self, check_obj: is_field):  # type: ignore [valid-type]
         if self.check.element_wise:
             return check_obj.map(self.check_fn)
         return self.check_fn(check_obj)
 
-    @apply.register
-    def _(self, check_obj: Table):  # type: ignore [valid-type]
+    @overload  # type: ignore [no-redef]
+    def apply(self, check_obj: is_table):  # type: ignore [valid-type]
         if self.check.element_wise:
             return check_obj.apply(self.check_fn, axis=1)
         return self.check_fn(check_obj)
 
-    @multidispatch
+    @overload
     def postprocess(self, check_obj, check_output):
         """Postprocesses the result of applying the check function."""
         raise TypeError(
             f"output type of check_fn not recognized: {type(check_output)}"
         )
 
-    @postprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def postprocess(
         self,
         check_obj,
-        check_output: Bool,  # type: ignore [valid-type]
+        check_output: is_bool,  # type: ignore [valid-type]
     ) -> CheckResult:
         """Postprocesses the result of applying the check function."""
         return CheckResult(
@@ -197,11 +198,11 @@ def _get_series_failure_cases(
                 )
         return failure_cases
 
-    @postprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def postprocess(
         self,
-        check_obj: Field,  # type: ignore [valid-type]
-        check_output: Field,  # type: ignore [valid-type]
+        check_obj: is_field,  # type: ignore [valid-type]
+        check_output: is_field,  # type: ignore [valid-type]
     ) -> CheckResult:
         """Postprocesses the result of applying the check function."""
         if check_obj.index.equals(check_output.index) and self.check.ignore_na:
@@ -213,11 +214,11 @@ def _(
             self._get_series_failure_cases(check_obj, check_output),
         )
 
-    @postprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def postprocess(
         self,
-        check_obj: Table,  # type: ignore [valid-type]
-        check_output: Field,  # type: ignore [valid-type]
+        check_obj: is_table,  # type: ignore [valid-type]
+        check_output: is_field,  # type: ignore [valid-type]
     ) -> CheckResult:
         """Postprocesses the result of applying the check function."""
         if check_obj.index.equals(check_output.index) and self.check.ignore_na:
@@ -229,11 +230,11 @@ def _(
             self._get_series_failure_cases(check_obj, check_output),
         )
 
-    @postprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def postprocess(
         self,
-        check_obj: Table,  # type: ignore [valid-type]
-        check_output: Table,  # type: ignore [valid-type]
+        check_obj: is_table,  # type: ignore [valid-type]
+        check_output: is_table,  # type: ignore [valid-type]
     ) -> CheckResult:
         """Postprocesses the result of applying the check function."""
         assert check_obj.shape == check_output.shape
@@ -243,19 +244,19 @@ def _(
         # collect failure cases across all columns. Flse values in check_output
         # are nulls.
         select_failure_cases = check_obj[~check_output]
-        _failure_cases = []
+        failure_cases = []
         for col in select_failure_cases.columns:
             cases = select_failure_cases[col].rename("failure_case").dropna()
             if len(cases) == 0:
                 continue
-            _failure_cases.append(
+            failure_cases.append(
                 cases.to_frame()
                 .assign(column=col)
                 .rename_axis("index")
                 .reset_index()
             )
-        if _failure_cases:
-            failure_cases = pd.concat(_failure_cases, axis=0)
+        if failure_cases:
+            failure_cases = pd.concat(failure_cases, axis=0)
             # convert to a dataframe where each row is a failure case at
             # a particular index, and failure case values are dictionaries
             # indicating which column and value failed in that row.
@@ -278,11 +279,11 @@ def _(
             failure_cases,
         )
 
-    @postprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def postprocess(
         self,
-        check_obj: TableOrField,  # type: ignore [valid-type]
-        check_output: Bool,  # type: ignore [valid-type]
+        check_obj: is_table_or_field,  # type: ignore [valid-type]
+        check_output: is_bool,  # type: ignore [valid-type]
     ) -> CheckResult:
         """Postprocesses the result of applying the check function."""
         check_output = bool(check_output)
@@ -293,11 +294,11 @@ def _(
             None,
         )
 
-    @postprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def postprocess(
         self,
         check_obj: dict,
-        check_output: Field,  # type: ignore [valid-type]
+        check_output: is_field,  # type: ignore [valid-type]
     ) -> CheckResult:
         """Postprocesses the result of applying the check function."""
         return CheckResult(
diff --git a/pandera/backends/pandas/hypotheses.py b/pandera/backends/pandas/hypotheses.py
index 2c7b9ebd5..a9bdc6f8d 100644
--- a/pandera/backends/pandas/hypotheses.py
+++ b/pandera/backends/pandas/hypotheses.py
@@ -4,11 +4,11 @@
 from typing import Any, Callable, Dict, Union, cast
 
 import pandas as pd
-from multimethod import multidispatch
+from multimethod import overload
 
 from pandera import errors
 from pandera.api.hypotheses import Hypothesis
-from pandera.api.pandas.types import is_field, Table
+from pandera.api.pandas.types import is_field, is_table
 from pandera.backends.pandas.checks import PandasCheckBackend
 
 
@@ -48,8 +48,6 @@ def equal(stat, pvalue, alpha=DEFAULT_ALPHA) -> bool:
 class PandasHypothesisBackend(PandasCheckBackend):
     """Hypothesis backend implementation for pandas."""
 
-    check: Hypothesis
-
     RELATIONSHIP_FUNCTIONS = {
         "greater_than": greater_than,
         "less_than": less_than,
@@ -108,15 +106,15 @@ def is_one_sample_test(self):
         """Return True if hypothesis is a one-sample test."""
         return len(self.check.samples) <= 1
 
-    @multidispatch
+    @overload  # type: ignore [no-redef]
     def preprocess(self, check_obj, key) -> Any:
         self.check.groups = self.check.samples
         return super().preprocess(check_obj, key)
 
-    @preprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def preprocess(
         self,
-        check_obj: Table,  # type: ignore [valid-type]
+        check_obj: is_table,  # type: ignore [valid-type]
         key,
     ) -> Union[pd.DataFrame, Dict[str, pd.DataFrame]]:
         if self.check.groupby is None:
@@ -128,10 +126,10 @@ def _(
             ),
         )
 
-    @preprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def preprocess(
         self,
-        check_obj: Table,  # type: ignore [valid-type]
+        check_obj: is_table,  # type: ignore [valid-type]
         key: None,
     ) -> pd.Series:
         """Preprocesses a check object before applying the check function."""
diff --git a/pandera/backends/pandas/parsers.py b/pandera/backends/pandas/parsers.py
index a80517468..5d5ac1368 100644
--- a/pandera/backends/pandas/parsers.py
+++ b/pandera/backends/pandas/parsers.py
@@ -4,10 +4,10 @@
 from typing import Dict, Optional, Union
 
 import pandas as pd
-from multimethod import multidispatch
+from multimethod import overload
 
 from pandera.api.base.parsers import ParserResult
-from pandera.api.pandas.types import Field, Table
+from pandera.api.pandas.types import is_field, is_table
 from pandera.api.parsers import Parser
 from pandera.backends.base import BaseParserBackend
 
@@ -22,40 +22,40 @@ def __init__(self, parser: Parser):
         self.parser = parser
         self.parser_fn = partial(parser._parser_fn, **parser._parser_kwargs)
 
-    @multidispatch
+    @overload
     def preprocess(
         self, parse_obj, key  # pylint:disable=unused-argument
     ) -> pd.Series:  # pylint:disable=unused-argument
         """Preprocesses a parser object before applying the parse function."""
         return parse_obj
 
-    @preprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def preprocess(
         self,
-        parse_obj: Table,  # type: ignore [valid-type]
+        parse_obj: is_table,  # type: ignore [valid-type]
         key,
     ) -> Union[pd.DataFrame, Dict[str, pd.DataFrame]]:
         return parse_obj[key]
 
-    @preprocess.register
-    def _(
-        self, parse_obj: Table, key: None  # type: ignore [valid-type]  # pylint:disable=unused-argument
+    @overload  # type: ignore [no-redef]
+    def preprocess(
+        self, parse_obj: is_table, key: None  # type: ignore [valid-type]  # pylint:disable=unused-argument
     ) -> Union[pd.DataFrame, Dict[str, pd.DataFrame]]:
         return parse_obj
 
-    @multidispatch
+    @overload
     def apply(self, parse_obj):
         """Apply the parse function to a parser object."""
         raise NotImplementedError
 
-    @apply.register
-    def _(self, parse_obj: Field):  # type: ignore [valid-type]
+    @overload  # type: ignore [no-redef]
+    def apply(self, parse_obj: is_field):  # type: ignore [valid-type]
         if self.parser.element_wise:
             return parse_obj.map(self.parser_fn)
         return self.parser_fn(parse_obj)
 
-    @apply.register
-    def _(self, parse_obj: Table):  # type: ignore [valid-type]
+    @overload  # type: ignore [no-redef]
+    def apply(self, parse_obj: is_table):  # type: ignore [valid-type]
         if self.parser.element_wise:
             return getattr(parse_obj, "map", parse_obj.applymap)(
                 self.parser_fn
diff --git a/pandera/backends/pandas/register.py b/pandera/backends/pandas/register.py
index 1e9514ad9..4fee3b128 100644
--- a/pandera/backends/pandas/register.py
+++ b/pandera/backends/pandas/register.py
@@ -1,9 +1,8 @@
+# pylint: disable=unused-import
 """Register pandas backends."""
 
 from functools import lru_cache
-from typing import NamedTuple
-
-import pandas as pd
+from typing import NamedTuple, Optional
 
 from pandera.backends.pandas.array import SeriesSchemaBackend
 from pandera.backends.pandas.checks import PandasCheckBackend
@@ -15,6 +14,7 @@
 from pandera.backends.pandas.container import DataFrameSchemaBackend
 from pandera.backends.pandas.hypotheses import PandasHypothesisBackend
 from pandera.backends.pandas.parsers import PandasParserBackend
+from pandera.errors import BackendNotFoundError
 
 
 class BackendTypes(NamedTuple):
@@ -26,55 +26,92 @@ class BackendTypes(NamedTuple):
     multiindex_datatypes: list
     check_backend_types: list
 
-    # installed backend flags
-    dask_installed: bool
-    modin_installed: bool
-    pyspark_installed: bool
-    geopandas_installed: bool
-
-
-@lru_cache
-def get_backend_types():
 
-    import pandera.typing.dask
-    import pandera.typing.modin
-    import pandera.typing.pyspark
-    import pandera.typing.geopandas
+PANDAS_LIKE_CLS_NAMES = frozenset(
+    [
+        "DataFrame",
+        "Series",
+        "Index",
+        "MultiIndex",
+        "GeoDataFrame",
+        "GeoSeries",
+    ]
+)
 
-    dataframe_datatypes = [pd.DataFrame]
-    series_datatypes = [pd.Series]
-    index_datatypes = [pd.Index]
-    multiindex_datatypes = [pd.MultiIndex]
 
-    if pandera.typing.dask.DASK_INSTALLED:
+@lru_cache
+def get_backend_types(check_cls_fqn: str):
+
+    dataframe_datatypes = []
+    series_datatypes = []
+    index_datatypes = []
+    multiindex_datatypes = []
+
+    mod_name, *mod_path, cls_name = check_cls_fqn.split(".")
+    if mod_name != "pandera":
+        if cls_name not in PANDAS_LIKE_CLS_NAMES:
+            raise BackendNotFoundError(
+                f"cls_name {cls_name} not in {PANDAS_LIKE_CLS_NAMES}"
+            )
+
+    if mod_name == "pandera":
+        # assume mod_path e.g. ["typing", "pandas"]
+        assert mod_path[0] == "typing"
+        *_, mod_name = mod_path
+
+    def register_pandas_backend():
+        import pandas as pd
+        from pandera.accessors import pandas_accessor
+
+        dataframe_datatypes.append(pd.DataFrame)
+        series_datatypes.append(pd.Series)
+        index_datatypes.append(pd.Index)
+        multiindex_datatypes.append(pd.MultiIndex)
+
+    def register_dask_backend():
         import dask.dataframe as dd
+        from pandera.accessors import dask_accessor
 
         dataframe_datatypes.append(dd.DataFrame)
         series_datatypes.append(dd.Series)
         index_datatypes.append(dd.Index)
 
-    if pandera.typing.modin.MODIN_INSTALLED:
+    def register_modin_backend():
         import modin.pandas as mpd
+        from pandera.accessors import modin_accessor
 
         dataframe_datatypes.append(mpd.DataFrame)
         series_datatypes.append(mpd.Series)
         index_datatypes.append(mpd.Index)
         multiindex_datatypes.append(mpd.MultiIndex)
 
-    if pandera.typing.pyspark.PYSPARK_INSTALLED:
+    def register_pyspark_backend():
         import pyspark.pandas as ps
+        from pandera.accessors import pyspark_accessor
 
         dataframe_datatypes.append(ps.DataFrame)
         series_datatypes.append(ps.Series)
         index_datatypes.append(ps.Index)
         multiindex_datatypes.append(ps.MultiIndex)
 
-    if pandera.typing.geopandas.GEOPANDAS_INSTALLED:
+    def register_geopandas_backend():
         import geopandas as gpd
 
+        register_pandas_backend()
         dataframe_datatypes.append(gpd.GeoDataFrame)
         series_datatypes.append(gpd.GeoSeries)
 
+    register_fn = {
+        "pandas": register_pandas_backend,
+        "dask_expr": register_dask_backend,
+        "modin": register_modin_backend,
+        "pyspark": register_pyspark_backend,
+        "geopandas": register_geopandas_backend,
+        "pandera": lambda: None,
+    }[mod_name]
+
+    register_fn()
+
     check_backend_types = [
         *dataframe_datatypes,
         *series_datatypes,
@@ -87,19 +124,21 @@ def get_backend_types():
         index_datatypes=index_datatypes,
         multiindex_datatypes=multiindex_datatypes,
         check_backend_types=check_backend_types,
-        dask_installed=pandera.typing.dask.DASK_INSTALLED,
-        modin_installed=pandera.typing.modin.MODIN_INSTALLED,
-        pyspark_installed=pandera.typing.pyspark.PYSPARK_INSTALLED,
-        geopandas_installed=pandera.typing.geopandas.GEOPANDAS_INSTALLED,
     )
 
 
 @lru_cache
-def register_pandas_backends():
+def register_pandas_backends(
+    check_cls_fqn: Optional[str] = None,
+):  # pylint: disable=unused-argument
     """Register pandas backends.
 
     This function is called at schema initialization in the _register_*_backends
     method.
+
+    :param framework_name: name of the framework to register backends for.
+        Allowable types are "pandas", "dask", "modin", "pyspark", and
+        "geopandas".
     """
 
     # pylint: disable=import-outside-toplevel,unused-import,cyclic-import
@@ -113,9 +152,14 @@ def register_pandas_backends():
     from pandera.api.pandas.components import Column, Index, MultiIndex
     from pandera.api.pandas.container import DataFrameSchema
     from pandera.api.parsers import Parser
-    from pandera.backends.pandas import builtin_checks, builtin_hypotheses
 
-    backend_types = get_backend_types()
+    assert check_cls_fqn is not None, (
+        "pandas backend registration requires passing in the fully qualified "
+        "check class name"
+    )
+    backend_types = get_backend_types(check_cls_fqn)
+
+    from pandera.backends.pandas import builtin_checks, builtin_hypotheses
 
     for t in backend_types.check_backend_types:
         Check.register_backend(t, PandasCheckBackend)
@@ -139,12 +183,3 @@ def register_pandas_backends():
 
     for t in backend_types.multiindex_datatypes:
         MultiIndex.register_backend(t, MultiIndexBackend)
-
-    if backend_types.dask_installed:
-        from pandera.accessors import dask_accessor
-
-    if backend_types.pyspark_installed:
-        from pandera.accessors import pyspark_accessor
-
-    if backend_types.modin_installed:
-        from pandera.accessors import modin_accessor
diff --git a/pandera/backends/polars/checks.py b/pandera/backends/polars/checks.py
index 203a7e8df..26b599690 100644
--- a/pandera/backends/polars/checks.py
+++ b/pandera/backends/polars/checks.py
@@ -4,12 +4,12 @@
 from typing import Optional
 
 import polars as pl
-from multimethod import multidispatch
+from multimethod import overload
 from polars.lazyframe.group_by import LazyGroupBy
 
 from pandera.api.base.checks import CheckResult
 from pandera.api.checks import Check
-from pandera.api.polars.types import PolarsData, Bool
+from pandera.api.polars.types import PolarsData
 from pandera.api.polars.utils import (
     get_lazyframe_schema,
     get_lazyframe_column_names,
@@ -76,15 +76,15 @@ def apply(self, check_obj: PolarsData):
 
         return out
 
-    @multidispatch
+    @overload
     def postprocess(self, check_obj, check_output):
         """Postprocesses the result of applying the check function."""
         raise TypeError(  # pragma: no cover
             f"output type of check_fn not recognized: {type(check_output)}"
         )
 
-    @postprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def postprocess(
         self,
         check_obj: PolarsData,
         check_output: pl.LazyFrame,
@@ -105,11 +105,11 @@ def _(
             failure_cases=failure_cases,
         )
 
-    @postprocess.register
-    def _(
+    @overload  # type: ignore [no-redef]
+    def postprocess(
         self,
         check_obj: PolarsData,
-        check_output: Bool,  # type: ignore [valid-type]
+        check_output: bool,
     ) -> CheckResult:
         """Postprocesses the result of applying the check function."""
         ldf_output = pl.LazyFrame({CHECK_OUTPUT_KEY: [check_output]})
diff --git a/pandera/backends/polars/register.py b/pandera/backends/polars/register.py
index ecca75526..34473e5f8 100644
--- a/pandera/backends/polars/register.py
+++ b/pandera/backends/polars/register.py
@@ -1,12 +1,15 @@
 """Register polars backends."""
 
 from functools import lru_cache
+from typing import Optional
 
 import polars as pl
 
 
 @lru_cache
-def register_polars_backends():
+def register_polars_backends(
+    check_cls_fqn: Optional[str] = None,
+):  # pylint: disable=unused-argument
     """Register polars backends.
 
     This function is called at schema initialization in the _register_*_backends
diff --git a/pandera/backends/pyspark/register.py b/pandera/backends/pyspark/register.py
index 1a6c04f48..67f938605 100644
--- a/pandera/backends/pyspark/register.py
+++ b/pandera/backends/pyspark/register.py
@@ -1,6 +1,7 @@
 """Register pyspark backends."""
 
 from functools import lru_cache
+from typing import Optional
 from packaging import version
 
 import pyspark
@@ -13,7 +14,9 @@
 
 
 @lru_cache
-def register_pyspark_backends():
+def register_pyspark_backends(
+    check_cls_fqn: Optional[str] = None,
+):  # pylint: disable=unused-argument
     """Register pyspark backends.
 
     This function is called at schema initialization in the _register_*_backends


Test patch:
diff --git a/reqs-test.txt b/reqs-test.txt
index cefc87bfe..8e51b5f14 100644
--- a/reqs-test.txt
+++ b/reqs-test.txt
@@ -272,7 +272,7 @@ msgpack==1.0.5
     # via
     #   distributed
     #   ray
-multimethod==1.12
+multimethod==1.9.1
     # via -r requirements.in
 mypy==0.982
     # via -r requirements.in
diff --git a/tests/geopandas/test_geopandas.py b/tests/geopandas/test_geopandas.py
index 25a6f2484..f451d1141 100644
--- a/tests/geopandas/test_geopandas.py
+++ b/tests/geopandas/test_geopandas.py
@@ -187,8 +187,8 @@ def test_schema_multiple_geometry_same_crs():
 
     class Schema(pa.DataFrameModel):
         # pylint: disable=missing-class-docstring
-        geometry: Geometry(crs="EPSG:4326")
-        random: Geometry(crs="EPSG:4326")
+        geometry: Geometry = pa.Field(dtype_kwargs={"crs": "EPSG:4326"})
+        random: Geometry = pa.Field(dtype_kwargs={"crs": "EPSG:4326"})
 
     data = {
         "geometry": gpd.GeoSeries(
@@ -210,8 +210,8 @@ def test_schema_multiple_geometry_different_crs():
 
     class Schema(pa.DataFrameModel):
         # pylint: disable=missing-class-docstring
-        geometry: Geometry(crs="EPSG:4326")
-        random: Geometry(crs="EPSG:3857")
+        geometry: Geometry = pa.Field(dtype_kwargs={"crs": "EPSG:4326"})
+        random: Geometry = pa.Field(dtype_kwargs={"crs": "EPSG:3857"})
 
         class Config:
             # pylint: disable=missing-class-docstring