diff --git a/.github/scripts/envgen.py b/.github/scripts/envgen.py
index b73b5da..f4cfdc5 100644
--- a/.github/scripts/envgen.py
+++ b/.github/scripts/envgen.py
@@ -78,6 +78,11 @@
"16.4.x-scala2.12": {"pandas": "1.5."},
"16.4.x-cpu-ml-scala2.12": {"pandas": "1.5."},
"16.4.x-gpu-ml-scala2.12": {"pandas": "1.5."},
+ # DBR 16.4 also ships a Scala 2.13 image (same Python packages, so same pandas
+ # 1.5.x-on-cp312 problem). Drop it for those envs too, keyed by their own names.
+ "16.4.x-scala2.13": {"pandas": "1.5."},
+ "16.4.x-cpu-ml-scala2.13": {"pandas": "1.5."},
+ "16.4.x-gpu-ml-scala2.13": {"pandas": "1.5."},
"serverless-v3": {"pandas": "1.5."},
}
diff --git a/.github/scripts/sync.py b/.github/scripts/sync.py
index e9aac58..a6a6bae 100755
--- a/.github/scripts/sync.py
+++ b/.github/scripts/sync.py
@@ -24,6 +24,7 @@
"""
import argparse
import hashlib
+import html as html_lib # aliased: functions here take an ``html`` parameter
import os
import re
import subprocess
@@ -191,30 +192,71 @@ def is_eos(html):
return "(EoS)" in dbr_title(html)
+def dbr_scalas(html):
+ """The Scala versions ('2.12', '2.13', ...) a runtime page's System environment
+ lists, in page order and de-duplicated.
+
+ Most runtimes ship one image ('Scala: 2.13.16' -> ['2.13']). A runtime in
+ the 2.12->2.13 migration window publishes two images from a single page, rendered as
+ 'Scala: 2.12.15 or 2.13.10' -> ['2.12', '2.13']. Both
+ images share one 'Installed Python libraries' table (only the Java/Scala libraries
+ differ, which this repo doesn't consume), so the caller writes one folder per Scala
+ version off the same package set.
+
+ Capture the field value up to the list item's close, strip inline tags (mirroring
+ ``table_pkgs``, so a digit inside an attribute/href -- e.g. a linked Spark version
+ -- can't leak in) and unescape entities (so a `` `` delimiter becomes real
+ whitespace). Then read only the leading enumeration: a version, or several joined by
+ delimiters. Matching just that run stops a trailing annotation ('(Apache Spark 3.5)')
+ from contributing a bogus version, while the delimiter class stays deliberately wide
+ -- whitespace, ',', '/', or the words 'or'/'and' -- because narrowing it to the exact
+ ' or ' the page happens to use today would silently drop the second variant (and
+ resurrect the 404) the day a copy-edit changes the separator. Each MAJOR.MINOR is
+ taken with the patch consumed by '(?:\\.\\d+)?' ('2.12.15' -> '2.12', not '2.12' plus
+ a stray '.15'). Fall back to a single match if the item isn't delimited as expected,
+ so a layout change degrades to today's behaviour rather than to nothing."""
+ field = re.search(r"Scala\s*:(.*?)", html, re.S)
+ if not field:
+ m = re.search(r"Scala\s*:\s*(\d+\.\d+)", html)
+ return [m.group(1)] if m else []
+ text = html_lib.unescape(re.sub(r"<[^>]+>", " ", field.group(1)))
+ ver = r"\d+\.\d+(?:\.\d+)?"
+ sep = r"(?:[\s,/]|\bor\b|\band\b)+" # delimiter, never itself a version
+ enum = re.match(rf"\s*({ver}(?:{sep}{ver})*)", text)
+ if not enum:
+ return []
+ scalas = []
+ for v in re.findall(r"(\d+\.\d+)(?:\.\d+)?", enum.group(1)):
+ if v not in scalas:
+ scalas.append(v)
+ return scalas
+
+
def dbr_meta(html):
- """Return (key_ver, dbconnect_ver, scala, python_version) from a standard runtime
- page, or None if any piece is missing.
+ """Return (key_ver, dbconnect_ver, scalas, python_version) from a standard runtime
+ page, or None if any piece is missing. ``scalas`` is a non-empty list (see
+ ``dbr_scalas``); the caller emits one '.x-scala' folder per entry.
A point-release page carries the minor in its title ('Databricks Runtime 18.2'), so
- both versions are the real minor: ('18.2', '18.2', '2.13', '3.12.3') -> folder
+ both versions are the real minor: ('18.2', '18.2', ['2.13'], '3.12.3') -> folder
'18.2.x-scala2.13', databricks-connect~=18.2.0.
An umbrella LTS page has no minor in its title ('Databricks Runtime 19 LTS'). Such a
line is addressed by its bare major in a cluster's ``spark_version`` ('19.x-scala2.13'),
so ``key_ver`` drops the minor to match that naming, while ``dbconnect_ver`` still
defaults the minor to '.0' (databricks-connect is published per point release, so the
- pin needs a concrete minor): ('19', '19.0', '2.13', '3.12.3') -> folder '19.x-scala2.13',
- databricks-connect~=19.0.0. Feed point-release pages here (see ``dbr_point_releases``)
- so a real minor is used whenever one is published."""
+ pin needs a concrete minor): ('19', '19.0', ['2.13'], '3.12.3') -> folder
+ '19.x-scala2.13', databricks-connect~=19.0.0. Feed point-release pages here (see
+ ``dbr_point_releases``) so a real minor is used whenever one is published."""
ver = re.search(r"]*>Databricks Runtime\s+(\d+)(?:\.(\d+))?", html)
- sc = re.search(r"Scala\s*:\s*(\d+\.\d+)", html)
+ scalas = dbr_scalas(html)
pv = re.search(r"Python\s*:\s*(\d+\.\d+\.\d+)", html)
- if not (ver and sc and pv):
+ if not (ver and scalas and pv):
return None
major, minor = ver.group(1), ver.group(2)
key_ver = f"{major}.{minor}" if minor else major
dbconnect_ver = f"{major}.{minor or '0'}"
- return key_ver, dbconnect_ver, sc.group(1), pv.group(1)
+ return key_ver, dbconnect_ver, scalas, pv.group(1)
def parse_dbr_page(html):
@@ -326,8 +368,9 @@ def sync_dbr():
if not meta or not pkgs:
print(f" ! dbr [{slug}]: no meta / Python table; skipping")
continue
- key_ver, dbconnect_ver, scala, python_version = meta
- _write_env(f"{key_ver}.x-scala{scala}", pkgs, python_version, dbconnect_ver)
+ key_ver, dbconnect_ver, scalas, python_version = meta
+ for scala in scalas:
+ _write_env(f"{key_ver}.x-scala{scala}", pkgs, python_version, dbconnect_ver)
def ml_variant_pkgs(ml_html, variant):
@@ -360,13 +403,14 @@ def _sync_dbr_ml_page(slug):
if not meta:
print(f" ! dbr-ml [{slug}]: no base meta from {base}; skipping")
return
- key_ver, dbconnect_ver, scala, python_version = meta
+ key_ver, dbconnect_ver, scalas, python_version = meta
for variant in ("cpu", "gpu"):
pkgs = ml_variant_pkgs(ml_html, variant)
if not pkgs:
print(f" ! dbr-ml [{slug}] {variant}: no packages found; skipping")
continue
- _write_env(f"{key_ver}.x-{variant}-ml-scala{scala}", pkgs, python_version, dbconnect_ver)
+ for scala in scalas:
+ _write_env(f"{key_ver}.x-{variant}-ml-scala{scala}", pkgs, python_version, dbconnect_ver)
def git(*args):
diff --git a/.github/scripts/test_envgen.py b/.github/scripts/test_envgen.py
index 87e13de..4eaf8e6 100644
--- a/.github/scripts/test_envgen.py
+++ b/.github/scripts/test_envgen.py
@@ -44,12 +44,17 @@ def test_keeps_installable_pins(self):
class EnvScopedDropTest(unittest.TestCase):
def test_pandas_dropped_on_py312_1_5_runtimes(self):
# DBR 16.4 + serverless-v3 are the only Python-3.12 runtimes still on
- # pandas 1.5.x, which has no cp312 wheel — dropped for just these envs.
+ # pandas 1.5.x, which has no cp312 wheel — dropped for just these envs. DBR 16.4
+ # ships both Scala images off one page (same Python packages), so the scala2.13
+ # variants carry the identical pandas problem and are dropped the same way.
pkgs = {"pandas": "1.5.3", "numpy": "2.1.3"}
for env in (
"16.4.x-scala2.12",
"16.4.x-cpu-ml-scala2.12",
"16.4.x-gpu-ml-scala2.12",
+ "16.4.x-scala2.13",
+ "16.4.x-cpu-ml-scala2.13",
+ "16.4.x-gpu-ml-scala2.13",
"serverless-v3",
):
self.assertEqual(_filtered(pkgs, env), {"numpy": "2.1.3"}, env)
diff --git a/.github/scripts/test_sync.py b/.github/scripts/test_sync.py
new file mode 100644
index 0000000..f32d041
--- /dev/null
+++ b/.github/scripts/test_sync.py
@@ -0,0 +1,87 @@
+"""Unit tests for sync.py page-parsing (run: python -m unittest test_sync)."""
+import unittest
+
+from sync import dbr_meta, dbr_scalas
+
+# Minimal fragments mirroring the runtime pages' System environment list. The real
+# pages are ~200 KB; only the shape dbr_scalas keys off is reproduced here.
+SINGLE = (
+ "Databricks Runtime 17.3 LTS | Databricks on AWS"
+ "Java: Zulu17.54+21-CA"
+ "Scala: 2.13.16"
+ "Python: 3.12.3"
+)
+# A dual-image release renders the two Scala versions in one field, joined by
+# 'or', each with a patch segment.
+DUAL = (
+ "Databricks Runtime 16.4 LTS | Databricks on AWS"
+ "Java: Zulu17.54+21-CA"
+ "Scala: 2.12.15 or 2.13.10"
+ "Python: 3.12.3"
+)
+
+
+class DbrScalasTest(unittest.TestCase):
+ def test_single_scala(self):
+ self.assertEqual(dbr_scalas(SINGLE), ["2.13"])
+
+ def test_dual_scala_in_page_order(self):
+ # Both images off one page; patch segments (.15/.10) must not leak in as
+ # extra entries, and order follows the page.
+ self.assertEqual(dbr_scalas(DUAL), ["2.12", "2.13"])
+
+ def test_no_scala_field(self):
+ self.assertEqual(dbr_scalas("Databricks Runtime 19"), [])
+
+ def test_falls_back_when_list_item_not_closed(self):
+ # If the field isn't delimited by as expected, degrade to a single
+ # match rather than to nothing.
+ self.assertEqual(dbr_scalas("Scala: 2.13.16"), ["2.13"])
+
+ def test_ignores_version_like_numbers_inside_tags(self):
+ # A version-like number that lives only inside a tag (an href/attribute, not
+ # the visible text) must not be read as a Scala version and spawn a bogus
+ # environment. Here the visible value is 2.13.16; the '3.5' is only in a link.
+ html = (
+ "Scala: 2.13.16 "
+ 'docs'
+ )
+ self.assertEqual(dbr_scalas(html), ["2.13"])
+
+ def test_ignores_trailing_annotation(self):
+ # Only the leading 'X or Y' enumeration is the Scala version list; a trailing
+ # visible annotation (e.g. the Spark version) must not contribute a version.
+ html = "Scala: 2.12.15 or 2.13.10 (Apache Spark 3.5)"
+ self.assertEqual(dbr_scalas(html), ["2.12", "2.13"])
+
+ def test_dual_scala_alternate_separators(self):
+ # The two versions must be picked up regardless of the delimiter the page uses
+ # -- not only ' or '. A narrower match silently drops the second variant and
+ # resurrects the 404 this fix exists to prevent.
+ for sep in (" or ", " and ", ", ", ",", " / ", "/", " or "):
+ html = f"Scala: 2.12.15{sep}2.13.10"
+ self.assertEqual(dbr_scalas(html), ["2.12", "2.13"], repr(sep))
+
+ def test_alternate_separator_still_stops_at_annotation(self):
+ # Widening the separator must not start swallowing trailing annotations.
+ html = "Scala: 2.12.15, 2.13.10, see Spark 3.5 notes"
+ self.assertEqual(dbr_scalas(html), ["2.12", "2.13"])
+
+
+class DbrMetaTest(unittest.TestCase):
+ def test_dual_variant_yields_both_scalas(self):
+ key_ver, dbconnect_ver, scalas, python_version = dbr_meta(DUAL)
+ self.assertEqual(key_ver, "16.4")
+ self.assertEqual(dbconnect_ver, "16.4")
+ self.assertEqual(scalas, ["2.12", "2.13"])
+ self.assertEqual(python_version, "3.12.3")
+
+ def test_single_variant(self):
+ self.assertEqual(dbr_meta(SINGLE)[2], ["2.13"])
+
+ def test_none_when_scala_missing(self):
+ self.assertIsNone(dbr_meta("Databricks Runtime 19"))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/README.md b/README.md
index 95e10d8..373c9a1 100644
--- a/README.md
+++ b/README.md
@@ -110,8 +110,11 @@ is best-effort. Nobody hand-edits the `python/` artifacts.
[runtime release-notes index](https://docs.databricks.com/aws/en/release-notes/runtime/),
then for each fetches the page and parses the "Installed Python libraries" HTML
table. The repo key (`.x-scala`) is built from the page's title and the
- Scala version in its System environment. DBR pages don't list `databricks-connect`,
- so its dev pin is derived from the runtime version.
+ Scala version in its System environment. A release that ships two Scala images from
+ one page (e.g. DBR 16.4 LTS — `Scala: 2.12.15 or 2.13.10`) yields one environment per
+ Scala version (`…-scala2.12` and `…-scala2.13`), both off the page's single Python
+ library table. DBR pages don't list `databricks-connect`, so its dev pin is derived
+ from the runtime version.
- **DBR ML (CPU + GPU)** — for each `*-ml` runtime, a separate environment is produced
per cluster type: `.x-cpu-ml-…` and `.x-gpu-ml-…`. Newer ML pages link
downloadable `requirements-{cpu,gpu}-*.txt`; older ones render inline tables under
diff --git a/python/dbr/16.4.x-cpu-ml-scala2.13/constraints.txt b/python/dbr/16.4.x-cpu-ml-scala2.13/constraints.txt
new file mode 100644
index 0000000..d9d5e66
--- /dev/null
+++ b/python/dbr/16.4.x-cpu-ml-scala2.13/constraints.txt
@@ -0,0 +1,398 @@
+# constraints.txt file for Databricks Runtime 16.4.x-cpu-ml-scala2.13
+
+absl-py~=1.0.0
+accelerate~=1.5.2
+aiohttp~=3.9.5
+aiohttp-cors~=0.8.1
+aiosignal~=1.2.0
+alembic~=1.14.1
+annotated-types~=0.7.0
+anyio~=4.2.0
+argcomplete~=3.6.2
+argon2-cffi~=21.3.0
+argon2-cffi-bindings~=21.2.0
+arrow~=1.2.3
+astor~=0.8.1
+asttokens~=2.0.5
+astunparse~=1.6.3
+async-lru~=2.0.4
+attrs~=23.1.0
+audioread~=3.0.1
+azure-core~=1.33.0
+azure-cosmos~=4.3.1
+azure-identity~=1.21.0
+azure-storage-blob~=12.23.0
+azure-storage-file-datalake~=12.17.0
+babel~=2.11.0
+backoff~=2.2.1
+bcrypt~=3.2.0
+beautifulsoup4~=4.12.3
+black~=24.4.2
+bleach~=4.1.0
+blinker~=1.7.0
+blis~=0.7.11
+boto3~=1.34.69
+botocore~=1.34.69
+brotli~=1.0.9
+cachetools~=5.3.3
+catalogue~=2.0.10
+category-encoders~=2.6.3
+certifi~=2024.6.2
+cffi~=1.16.0
+chardet~=4.0.0
+charset-normalizer~=2.0.4
+circuitbreaker~=2.1.3
+click~=8.1.7
+cloudpathlib~=0.21.0
+cloudpickle~=2.2.1
+cmdstanpy~=1.2.5
+colorful~=0.5.6
+colorlog~=6.9.0
+comm~=0.2.1
+composer~=0.29.0
+confection~=0.1.5
+configparser~=5.2.0
+contourpy~=1.2.0
+coolname~=2.2.0
+cryptography~=42.0.5
+cycler~=0.11.0
+cymem~=2.0.11
+cython~=3.0.11
+dacite~=1.9.2
+databricks-automl-runtime~=0.2.21
+databricks-feature-engineering~=0.10.2
+databricks-sdk~=0.30
+datasets~=3.5.0
+dbl-tempo~=0.1.26
+debugpy~=1.6.7
+decorator~=5.1.1
+defusedxml~=0.7.1
+deprecated~=1.2.18
+dill~=0.3.8
+distlib~=0.3.8
+dm-tree~=0.1.9
+docstring-to-markdown~=0.11
+einops~=0.8.1
+entrypoints~=0.4
+evaluate~=0.4.3
+executing~=0.8.3
+facets-overview~=1.1.1
+farama-notifications~=0.0.4
+fastapi~=0.115.12
+fastjsonschema~=2.21.1
+fasttext-wheel~=0.9.2
+filelock~=3.13.1
+flask~=2.2.5
+flatbuffers~=25.2.10
+fonttools~=4.51.0
+fqdn~=1.5.1
+frozenlist~=1.4.0
+fsspec~=2023.5.0
+future~=0.18.3
+gast~=0.4.0
+gitdb~=4.0.11
+gitpython~=3.1.37
+google-api-core~=2.20.0
+google-auth~=2.21.0
+google-auth-oauthlib~=1.2.1
+google-cloud-core~=2.4.3
+google-cloud-storage~=2.10.0
+google-crc32c~=1.7.1
+google-pasta~=0.2.0
+google-resumable-media~=2.7.2
+googleapis-common-protos~=1.70.0
+gql~=3.5.2
+graphql-core~=3.2.4
+greenlet~=3.0.1
+grpcio~=1.60
+grpcio-status~=1.60
+gunicorn~=20.1.0
+gviz-api~=1.10.0
+gymnasium~=0.28.1
+h11~=0.14.0
+h5py~=3.11.0
+hjson~=3.1.0
+holidays~=0.54
+htmlmin~=0.1.12
+httpcore~=1.0.8
+httplib2~=0.20.4
+httpx~=0.28.1
+huggingface-hub~=0.29.3
+idna~=3.7
+imagehash~=4.3.1
+imageio~=2.33.1
+imbalanced-learn~=0.12.3
+importlib-metadata~=6.0.0
+ipyflow-core~=0.0.201
+ipykernel~=6.28.0
+ipython~=8.25.0
+ipython-genutils~=0.2.0
+ipywidgets~=7.7.2
+isodate~=0.6.1
+isoduration~=20.11.0
+itsdangerous~=2.2.0
+jax-jumpy~=1.0.0
+jedi~=0.19.1
+jinja2~=3.1.4
+jiter~=0.9.0
+jmespath~=1.0.1
+joblib~=1.4.2
+joblibspark~=0.5.3
+json5~=0.9.6
+jsonpatch~=1.33
+jsonpointer~=3.0.0
+jsonschema~=4.19.2
+jsonschema-specifications~=2023.7.1
+jupyter-client~=8.6.0
+jupyter-core~=5.7.2
+jupyter-events~=0.10.0
+jupyter-lsp~=2.2.0
+jupyter-server~=2.14.1
+jupyter-server-terminals~=0.4.4
+jupyterlab~=4.0.11
+jupyterlab-pygments~=0.1.2
+jupyterlab-server~=2.25.1
+keras~=3.9.0
+kiwisolver~=1.4.4
+langchain~=0.3.21
+langchain-core~=0.3.51
+langchain-text-splitters~=0.3.8
+langcodes~=3.5.0
+langsmith~=0.1.133
+language-data~=1.3.0
+launchpadlib~=1.11.0
+lazr-restfulclient~=0.14.6
+lazr-uri~=1.0.6
+lazy-loader~=0.4
+libclang~=15.0.6.1
+librosa~=0.10.2
+lightgbm~=4.5.0
+lightning-utilities~=0.14.3
+linkify-it-py~=2.0.0
+llvmlite~=0.42.0
+lz4~=4.3.2
+mako~=1.2.0
+marisa-trie~=1.2.0
+markdown~=3.4.1
+markdown-it-py~=2.2.0
+markupsafe~=2.1.3
+matplotlib~=3.8.4
+matplotlib-inline~=0.1.6
+mccabe~=0.7.0
+mdit-py-plugins~=0.3.0
+mdurl~=0.1.0
+memray~=1.17.1
+mistune~=2.0.4
+ml-dtypes~=0.4.1
+mlflow-skinny~=2.21.3
+mosaicml-cli~=0.6.41
+mosaicml-streaming~=0.11.0
+mpmath~=1.3.0
+msal~=1.32.0
+msal-extensions~=1.3.1
+msgpack~=1.1.0
+multidict~=6.0.4
+multimethod~=1.12
+multiprocess~=0.70.16
+murmurhash~=1.0.12
+mypy~=1.10.0
+mypy-extensions~=1.0.0
+namex~=0.0.8
+nbclient~=0.8.0
+nbconvert~=7.10.0
+nbformat~=5.9.2
+nest-asyncio~=1.6.0
+networkx~=3.2.1
+ninja~=1.11.1.1
+nltk~=3.8.1
+nodeenv~=1.9.1
+notebook~=7.0.8
+notebook-shim~=0.2.3
+numba~=0.59.1
+numpy~=1.26.4
+oauthlib~=3.2.0
+oci~=2.150.0
+openai~=1.69.0
+opencensus~=0.11.4
+opencensus-context~=0.1.3
+opentelemetry-api~=1.32.0
+opentelemetry-sdk~=1.32.0
+opentelemetry-semantic-conventions~=0.53b0
+opt-einsum~=3.4.0
+optree~=0.15.0
+optuna~=3.6.1
+optuna-integration~=3.6.0
+orjson~=3.10.16
+overrides~=7.4.0
+packaging~=24.1
+pandocfilters~=1.5.0
+paramiko~=3.4.0
+parso~=0.8.3
+pathspec~=0.10.3
+patsy~=0.5.6
+pexpect~=4.8.0
+phik~=0.12.4
+pillow~=10.3.0
+platformdirs~=3.10.0
+plotly~=5.22.0
+pluggy~=1.0.0
+pmdarima~=2.0.4
+pooch~=1.8.2
+preshed~=3.0.9
+prometheus-client~=0.14.1
+prompt-toolkit~=3.0.43
+prophet~=1.1.6
+proto-plus~=1.26.1
+protobuf~=4.24.1
+psutil~=5.9.0
+psycopg2~=2.9.3
+ptyprocess~=0.7.0
+pure-eval~=0.2.2
+py-cpuinfo~=9.0.0
+py-spy~=0.4.0
+pyarrow~=15.0.2
+pyasn1~=0.4.8
+pyasn1-modules~=0.2.8
+pybind11~=2.13.6
+pyccolo~=0.0.65
+pycparser~=2.21
+pydantic~=2.8.2
+pydantic-core~=2.20.1
+pyflakes~=3.2.0
+pygments~=2.15.1
+pyjwt~=2.7.0
+pynacl~=1.5.0
+pyodbc~=5.0.1
+pyopenssl~=24.0.0
+pyparsing~=3.0.9
+pyright~=1.1.294
+pytesseract~=0.3.10
+python-dateutil~=2.9.0.post0
+python-editor~=1.0.4
+python-json-logger~=2.0.7
+python-lsp-jsonrpc~=1.1.2
+python-lsp-server~=1.10.0
+python-snappy~=0.6.1
+pytoolconfig~=1.2.6
+pytorch-ranger~=0.1.1
+pytz~=2024.1
+pywavelets~=1.5.0
+pyyaml~=6.0.1
+pyzmq~=25.1.2
+questionary~=2.1.0
+ray~=2.37.0
+referencing~=0.30.2
+regex~=2023.10.3
+requests~=2.32.2
+requests-oauthlib~=1.3.1
+requests-toolbelt~=1.0.0
+rfc3339-validator~=0.1.4
+rfc3986-validator~=0.1.1
+rich~=13.3.5
+rope~=1.12.0
+rpds-py~=0.10.6
+rsa~=4.9
+ruamel-yaml~=0.18.10
+ruamel-yaml-clib~=0.2.12
+s3transfer~=0.10.2
+safetensors~=0.4.4
+scikit-image~=0.23.2
+scikit-learn~=1.4.2
+scipy~=1.13.1
+seaborn~=0.13.2
+send2trash~=1.8.2
+sentence-transformers~=3.4.1
+sentencepiece~=0.2.0
+setuptools~=74.0.0
+shap~=0.46.0
+shellingham~=1.5.4
+simplejson~=3.17.6
+six~=1.16.0
+slicer~=0.0.8
+smart-open~=5.2.1
+smmap~=5.0.0
+sniffio~=1.3.0
+soundfile~=0.12.1
+soupsieve~=2.5
+soxr~=0.5.0.post1
+spacy~=3.7.5
+spacy-legacy~=3.0.12
+spacy-loggers~=1.0.5
+sqlalchemy~=2.0.30
+sqlparse~=0.4.2
+srsly~=2.5.1
+ssh-import-id~=5.11
+stack-data~=0.2.0
+stanio~=0.5.1
+starlette~=0.46.2
+statsmodels~=0.14.2
+sympy~=1.13.1
+tabulate~=0.9.0
+tangled-up-in-unicode~=0.2.0
+tenacity~=8.2.2
+tensorboard~=2.17.0
+tensorboard-data-server~=0.7.2
+tensorboard-plugin-profile~=2.17.0
+tensorboardx~=2.6.2.2
+tensorflow~=2.17.0
+tensorflow-estimator~=2.15.0
+termcolor~=3.0.1
+terminado~=0.17.1
+textual~=3.1.0
+tf-keras~=2.17.0
+thinc~=8.2.5
+threadpoolctl~=2.2.0
+tifffile~=2023.4.12
+tiktoken~=0.7.0
+tinycss2~=1.2.1
+tokenize-rt~=4.2.1
+tokenizers~=0.21.0
+tomli~=2.0.1
+torch~=2.6.0
+torch-optimizer~=0.3.0
+torcheval~=0.0.7
+torchmetrics~=1.6.0
+torchvision~=0.21.0
+tornado~=6.4.1
+tqdm~=4.66.4
+traitlets~=5.14.3
+transformers~=4.50.2
+typer~=0.15.2
+types-protobuf~=3.20.3
+types-psutil~=5.9.0
+types-pytz~=2023.3.1.1
+types-pyyaml~=6.0.0
+types-requests~=2.31.0.0
+types-setuptools~=68.0.0.0
+types-six~=1.16.0
+types-urllib3~=1.26.25.14
+typing-extensions~=4.11.0
+uc-micro-py~=1.0.1
+ujson~=5.10.0
+uri-template~=1.3.0
+urllib3~=1.26.16
+uvicorn~=0.34.1
+validators~=0.34.0
+virtualenv~=20.26.2
+visions~=0.7.5
+wadllib~=1.3.6
+wasabi~=1.1.3
+wcwidth~=0.2.5
+weasel~=0.4.1
+webcolors~=24.11.1
+webencodings~=0.5.1
+websocket-client~=1.8.0
+websockets~=11.0.3
+werkzeug~=3.0.3
+whatthepatch~=1.0.2
+wheel~=0.43.0
+wordcloud~=1.9.4
+wrapt~=1.14.1
+xgboost~=2.0.3
+xgboost-ray~=0.1.19
+xxhash~=3.4.1
+yapf~=0.33.0
+yarl~=1.9.3
+ydata-profiling~=4.9.0
+zipp~=3.17.0
+zstd~=1.5.5.1
diff --git a/python/dbr/16.4.x-cpu-ml-scala2.13/pyproject.toml b/python/dbr/16.4.x-cpu-ml-scala2.13/pyproject.toml
new file mode 100644
index 0000000..b944fd3
--- /dev/null
+++ b/python/dbr/16.4.x-cpu-ml-scala2.13/pyproject.toml
@@ -0,0 +1,411 @@
+# pyproject.toml file for Databricks Runtime 16.4.x-cpu-ml-scala2.13
+
+[project]
+name = "constraint-env-16-4-x-cpu-ml-scala2-13"
+version = "0.1.0"
+requires-python = "==3.12.*"
+
+[dependency-groups]
+dev = [
+ "databricks-connect~=16.4.0",
+]
+
+[tool.uv]
+constraint-dependencies = [
+ "absl-py~=1.0.0",
+ "accelerate~=1.5.2",
+ "aiohttp~=3.9.5",
+ "aiohttp-cors~=0.8.1",
+ "aiosignal~=1.2.0",
+ "alembic~=1.14.1",
+ "annotated-types~=0.7.0",
+ "anyio~=4.2.0",
+ "argcomplete~=3.6.2",
+ "argon2-cffi~=21.3.0",
+ "argon2-cffi-bindings~=21.2.0",
+ "arrow~=1.2.3",
+ "astor~=0.8.1",
+ "asttokens~=2.0.5",
+ "astunparse~=1.6.3",
+ "async-lru~=2.0.4",
+ "attrs~=23.1.0",
+ "audioread~=3.0.1",
+ "azure-core~=1.33.0",
+ "azure-cosmos~=4.3.1",
+ "azure-identity~=1.21.0",
+ "azure-storage-blob~=12.23.0",
+ "azure-storage-file-datalake~=12.17.0",
+ "babel~=2.11.0",
+ "backoff~=2.2.1",
+ "bcrypt~=3.2.0",
+ "beautifulsoup4~=4.12.3",
+ "black~=24.4.2",
+ "bleach~=4.1.0",
+ "blinker~=1.7.0",
+ "blis~=0.7.11",
+ "boto3~=1.34.69",
+ "botocore~=1.34.69",
+ "brotli~=1.0.9",
+ "cachetools~=5.3.3",
+ "catalogue~=2.0.10",
+ "category-encoders~=2.6.3",
+ "certifi~=2024.6.2",
+ "cffi~=1.16.0",
+ "chardet~=4.0.0",
+ "charset-normalizer~=2.0.4",
+ "circuitbreaker~=2.1.3",
+ "click~=8.1.7",
+ "cloudpathlib~=0.21.0",
+ "cloudpickle~=2.2.1",
+ "cmdstanpy~=1.2.5",
+ "colorful~=0.5.6",
+ "colorlog~=6.9.0",
+ "comm~=0.2.1",
+ "composer~=0.29.0",
+ "confection~=0.1.5",
+ "configparser~=5.2.0",
+ "contourpy~=1.2.0",
+ "coolname~=2.2.0",
+ "cryptography~=42.0.5",
+ "cycler~=0.11.0",
+ "cymem~=2.0.11",
+ "cython~=3.0.11",
+ "dacite~=1.9.2",
+ "databricks-automl-runtime~=0.2.21",
+ "databricks-feature-engineering~=0.10.2",
+ "databricks-sdk~=0.30",
+ "datasets~=3.5.0",
+ "dbl-tempo~=0.1.26",
+ "debugpy~=1.6.7",
+ "decorator~=5.1.1",
+ "defusedxml~=0.7.1",
+ "deprecated~=1.2.18",
+ "dill~=0.3.8",
+ "distlib~=0.3.8",
+ "dm-tree~=0.1.9",
+ "docstring-to-markdown~=0.11",
+ "einops~=0.8.1",
+ "entrypoints~=0.4",
+ "evaluate~=0.4.3",
+ "executing~=0.8.3",
+ "facets-overview~=1.1.1",
+ "farama-notifications~=0.0.4",
+ "fastapi~=0.115.12",
+ "fastjsonschema~=2.21.1",
+ "fasttext-wheel~=0.9.2",
+ "filelock~=3.13.1",
+ "flask~=2.2.5",
+ "flatbuffers~=25.2.10",
+ "fonttools~=4.51.0",
+ "fqdn~=1.5.1",
+ "frozenlist~=1.4.0",
+ "fsspec~=2023.5.0",
+ "future~=0.18.3",
+ "gast~=0.4.0",
+ "gitdb~=4.0.11",
+ "gitpython~=3.1.37",
+ "google-api-core~=2.20.0",
+ "google-auth~=2.21.0",
+ "google-auth-oauthlib~=1.2.1",
+ "google-cloud-core~=2.4.3",
+ "google-cloud-storage~=2.10.0",
+ "google-crc32c~=1.7.1",
+ "google-pasta~=0.2.0",
+ "google-resumable-media~=2.7.2",
+ "googleapis-common-protos~=1.70.0",
+ "gql~=3.5.2",
+ "graphql-core~=3.2.4",
+ "greenlet~=3.0.1",
+ "grpcio~=1.60",
+ "grpcio-status~=1.60",
+ "gunicorn~=20.1.0",
+ "gviz-api~=1.10.0",
+ "gymnasium~=0.28.1",
+ "h11~=0.14.0",
+ "h5py~=3.11.0",
+ "hjson~=3.1.0",
+ "holidays~=0.54",
+ "htmlmin~=0.1.12",
+ "httpcore~=1.0.8",
+ "httplib2~=0.20.4",
+ "httpx~=0.28.1",
+ "huggingface-hub~=0.29.3",
+ "idna~=3.7",
+ "imagehash~=4.3.1",
+ "imageio~=2.33.1",
+ "imbalanced-learn~=0.12.3",
+ "importlib-metadata~=6.0.0",
+ "ipyflow-core~=0.0.201",
+ "ipykernel~=6.28.0",
+ "ipython~=8.25.0",
+ "ipython-genutils~=0.2.0",
+ "ipywidgets~=7.7.2",
+ "isodate~=0.6.1",
+ "isoduration~=20.11.0",
+ "itsdangerous~=2.2.0",
+ "jax-jumpy~=1.0.0",
+ "jedi~=0.19.1",
+ "jinja2~=3.1.4",
+ "jiter~=0.9.0",
+ "jmespath~=1.0.1",
+ "joblib~=1.4.2",
+ "joblibspark~=0.5.3",
+ "json5~=0.9.6",
+ "jsonpatch~=1.33",
+ "jsonpointer~=3.0.0",
+ "jsonschema~=4.19.2",
+ "jsonschema-specifications~=2023.7.1",
+ "jupyter-client~=8.6.0",
+ "jupyter-core~=5.7.2",
+ "jupyter-events~=0.10.0",
+ "jupyter-lsp~=2.2.0",
+ "jupyter-server~=2.14.1",
+ "jupyter-server-terminals~=0.4.4",
+ "jupyterlab~=4.0.11",
+ "jupyterlab-pygments~=0.1.2",
+ "jupyterlab-server~=2.25.1",
+ "keras~=3.9.0",
+ "kiwisolver~=1.4.4",
+ "langchain~=0.3.21",
+ "langchain-core~=0.3.51",
+ "langchain-text-splitters~=0.3.8",
+ "langcodes~=3.5.0",
+ "langsmith~=0.1.133",
+ "language-data~=1.3.0",
+ "launchpadlib~=1.11.0",
+ "lazr-restfulclient~=0.14.6",
+ "lazr-uri~=1.0.6",
+ "lazy-loader~=0.4",
+ "libclang~=15.0.6.1",
+ "librosa~=0.10.2",
+ "lightgbm~=4.5.0",
+ "lightning-utilities~=0.14.3",
+ "linkify-it-py~=2.0.0",
+ "llvmlite~=0.42.0",
+ "lz4~=4.3.2",
+ "mako~=1.2.0",
+ "marisa-trie~=1.2.0",
+ "markdown~=3.4.1",
+ "markdown-it-py~=2.2.0",
+ "markupsafe~=2.1.3",
+ "matplotlib~=3.8.4",
+ "matplotlib-inline~=0.1.6",
+ "mccabe~=0.7.0",
+ "mdit-py-plugins~=0.3.0",
+ "mdurl~=0.1.0",
+ "memray~=1.17.1",
+ "mistune~=2.0.4",
+ "ml-dtypes~=0.4.1",
+ "mlflow-skinny~=2.21.3",
+ "mosaicml-cli~=0.6.41",
+ "mosaicml-streaming~=0.11.0",
+ "mpmath~=1.3.0",
+ "msal~=1.32.0",
+ "msal-extensions~=1.3.1",
+ "msgpack~=1.1.0",
+ "multidict~=6.0.4",
+ "multimethod~=1.12",
+ "multiprocess~=0.70.16",
+ "murmurhash~=1.0.12",
+ "mypy~=1.10.0",
+ "mypy-extensions~=1.0.0",
+ "namex~=0.0.8",
+ "nbclient~=0.8.0",
+ "nbconvert~=7.10.0",
+ "nbformat~=5.9.2",
+ "nest-asyncio~=1.6.0",
+ "networkx~=3.2.1",
+ "ninja~=1.11.1.1",
+ "nltk~=3.8.1",
+ "nodeenv~=1.9.1",
+ "notebook~=7.0.8",
+ "notebook-shim~=0.2.3",
+ "numba~=0.59.1",
+ "numpy~=1.26.4",
+ "oauthlib~=3.2.0",
+ "oci~=2.150.0",
+ "openai~=1.69.0",
+ "opencensus~=0.11.4",
+ "opencensus-context~=0.1.3",
+ "opentelemetry-api~=1.32.0",
+ "opentelemetry-sdk~=1.32.0",
+ "opentelemetry-semantic-conventions~=0.53b0",
+ "opt-einsum~=3.4.0",
+ "optree~=0.15.0",
+ "optuna~=3.6.1",
+ "optuna-integration~=3.6.0",
+ "orjson~=3.10.16",
+ "overrides~=7.4.0",
+ "packaging~=24.1",
+ "pandocfilters~=1.5.0",
+ "paramiko~=3.4.0",
+ "parso~=0.8.3",
+ "pathspec~=0.10.3",
+ "patsy~=0.5.6",
+ "pexpect~=4.8.0",
+ "phik~=0.12.4",
+ "pillow~=10.3.0",
+ "platformdirs~=3.10.0",
+ "plotly~=5.22.0",
+ "pluggy~=1.0.0",
+ "pmdarima~=2.0.4",
+ "pooch~=1.8.2",
+ "preshed~=3.0.9",
+ "prometheus-client~=0.14.1",
+ "prompt-toolkit~=3.0.43",
+ "prophet~=1.1.6",
+ "proto-plus~=1.26.1",
+ "protobuf~=4.24.1",
+ "psutil~=5.9.0",
+ "psycopg2~=2.9.3",
+ "ptyprocess~=0.7.0",
+ "pure-eval~=0.2.2",
+ "py-cpuinfo~=9.0.0",
+ "py-spy~=0.4.0",
+ "pyarrow~=15.0.2",
+ "pyasn1~=0.4.8",
+ "pyasn1-modules~=0.2.8",
+ "pybind11~=2.13.6",
+ "pyccolo~=0.0.65",
+ "pycparser~=2.21",
+ "pydantic~=2.8.2",
+ "pydantic-core~=2.20.1",
+ "pyflakes~=3.2.0",
+ "pygments~=2.15.1",
+ "pyjwt~=2.7.0",
+ "pynacl~=1.5.0",
+ "pyodbc~=5.0.1",
+ "pyopenssl~=24.0.0",
+ "pyparsing~=3.0.9",
+ "pyright~=1.1.294",
+ "pytesseract~=0.3.10",
+ "python-dateutil~=2.9.0.post0",
+ "python-editor~=1.0.4",
+ "python-json-logger~=2.0.7",
+ "python-lsp-jsonrpc~=1.1.2",
+ "python-lsp-server~=1.10.0",
+ "python-snappy~=0.6.1",
+ "pytoolconfig~=1.2.6",
+ "pytorch-ranger~=0.1.1",
+ "pytz~=2024.1",
+ "pywavelets~=1.5.0",
+ "pyyaml~=6.0.1",
+ "pyzmq~=25.1.2",
+ "questionary~=2.1.0",
+ "ray~=2.37.0",
+ "referencing~=0.30.2",
+ "regex~=2023.10.3",
+ "requests~=2.32.2",
+ "requests-oauthlib~=1.3.1",
+ "requests-toolbelt~=1.0.0",
+ "rfc3339-validator~=0.1.4",
+ "rfc3986-validator~=0.1.1",
+ "rich~=13.3.5",
+ "rope~=1.12.0",
+ "rpds-py~=0.10.6",
+ "rsa~=4.9",
+ "ruamel-yaml~=0.18.10",
+ "ruamel-yaml-clib~=0.2.12",
+ "s3transfer~=0.10.2",
+ "safetensors~=0.4.4",
+ "scikit-image~=0.23.2",
+ "scikit-learn~=1.4.2",
+ "scipy~=1.13.1",
+ "seaborn~=0.13.2",
+ "send2trash~=1.8.2",
+ "sentence-transformers~=3.4.1",
+ "sentencepiece~=0.2.0",
+ "setuptools~=74.0.0",
+ "shap~=0.46.0",
+ "shellingham~=1.5.4",
+ "simplejson~=3.17.6",
+ "six~=1.16.0",
+ "slicer~=0.0.8",
+ "smart-open~=5.2.1",
+ "smmap~=5.0.0",
+ "sniffio~=1.3.0",
+ "soundfile~=0.12.1",
+ "soupsieve~=2.5",
+ "soxr~=0.5.0.post1",
+ "spacy~=3.7.5",
+ "spacy-legacy~=3.0.12",
+ "spacy-loggers~=1.0.5",
+ "sqlalchemy~=2.0.30",
+ "sqlparse~=0.4.2",
+ "srsly~=2.5.1",
+ "ssh-import-id~=5.11",
+ "stack-data~=0.2.0",
+ "stanio~=0.5.1",
+ "starlette~=0.46.2",
+ "statsmodels~=0.14.2",
+ "sympy~=1.13.1",
+ "tabulate~=0.9.0",
+ "tangled-up-in-unicode~=0.2.0",
+ "tenacity~=8.2.2",
+ "tensorboard~=2.17.0",
+ "tensorboard-data-server~=0.7.2",
+ "tensorboard-plugin-profile~=2.17.0",
+ "tensorboardx~=2.6.2.2",
+ "tensorflow~=2.17.0",
+ "tensorflow-estimator~=2.15.0",
+ "termcolor~=3.0.1",
+ "terminado~=0.17.1",
+ "textual~=3.1.0",
+ "tf-keras~=2.17.0",
+ "thinc~=8.2.5",
+ "threadpoolctl~=2.2.0",
+ "tifffile~=2023.4.12",
+ "tiktoken~=0.7.0",
+ "tinycss2~=1.2.1",
+ "tokenize-rt~=4.2.1",
+ "tokenizers~=0.21.0",
+ "tomli~=2.0.1",
+ "torch~=2.6.0",
+ "torch-optimizer~=0.3.0",
+ "torcheval~=0.0.7",
+ "torchmetrics~=1.6.0",
+ "torchvision~=0.21.0",
+ "tornado~=6.4.1",
+ "tqdm~=4.66.4",
+ "traitlets~=5.14.3",
+ "transformers~=4.50.2",
+ "typer~=0.15.2",
+ "types-protobuf~=3.20.3",
+ "types-psutil~=5.9.0",
+ "types-pytz~=2023.3.1.1",
+ "types-pyyaml~=6.0.0",
+ "types-requests~=2.31.0.0",
+ "types-setuptools~=68.0.0.0",
+ "types-six~=1.16.0",
+ "types-urllib3~=1.26.25.14",
+ "typing-extensions~=4.11.0",
+ "uc-micro-py~=1.0.1",
+ "ujson~=5.10.0",
+ "uri-template~=1.3.0",
+ "urllib3~=1.26.16",
+ "uvicorn~=0.34.1",
+ "validators~=0.34.0",
+ "virtualenv~=20.26.2",
+ "visions~=0.7.5",
+ "wadllib~=1.3.6",
+ "wasabi~=1.1.3",
+ "wcwidth~=0.2.5",
+ "weasel~=0.4.1",
+ "webcolors~=24.11.1",
+ "webencodings~=0.5.1",
+ "websocket-client~=1.8.0",
+ "websockets~=11.0.3",
+ "werkzeug~=3.0.3",
+ "whatthepatch~=1.0.2",
+ "wheel~=0.43.0",
+ "wordcloud~=1.9.4",
+ "wrapt~=1.14.1",
+ "xgboost~=2.0.3",
+ "xgboost-ray~=0.1.19",
+ "xxhash~=3.4.1",
+ "yapf~=0.33.0",
+ "yarl~=1.9.3",
+ "ydata-profiling~=4.9.0",
+ "zipp~=3.17.0",
+ "zstd~=1.5.5.1",
+]
diff --git a/python/dbr/16.4.x-gpu-ml-scala2.13/constraints.txt b/python/dbr/16.4.x-gpu-ml-scala2.13/constraints.txt
new file mode 100644
index 0000000..276dfbc
--- /dev/null
+++ b/python/dbr/16.4.x-gpu-ml-scala2.13/constraints.txt
@@ -0,0 +1,397 @@
+# constraints.txt file for Databricks Runtime 16.4.x-gpu-ml-scala2.13
+
+absl-py~=1.0.0
+accelerate~=1.5.2
+aiohttp~=3.9.5
+aiohttp-cors~=0.8.1
+aiosignal~=1.2.0
+annotated-types~=0.7.0
+anyio~=4.2.0
+argcomplete~=3.6.2
+argon2-cffi~=21.3.0
+argon2-cffi-bindings~=21.2.0
+arrow~=1.2.3
+astor~=0.8.1
+asttokens~=2.0.5
+astunparse~=1.6.3
+async-lru~=2.0.4
+attrs~=23.1.0
+audioread~=3.0.1
+azure-core~=1.33.0
+azure-cosmos~=4.3.1
+azure-identity~=1.21.0
+azure-storage-blob~=12.23.0
+azure-storage-file-datalake~=12.17.0
+babel~=2.11.0
+backoff~=2.2.1
+bcrypt~=3.2.0
+beautifulsoup4~=4.12.3
+black~=24.4.2
+bleach~=4.1.0
+blinker~=1.7.0
+blis~=0.7.11
+boto3~=1.34.69
+botocore~=1.34.69
+brotli~=1.0.9
+cachetools~=5.3.3
+catalogue~=2.0.10
+category-encoders~=2.6.3
+certifi~=2024.6.2
+cffi~=1.16.0
+chardet~=4.0.0
+charset-normalizer~=2.0.4
+circuitbreaker~=2.1.3
+click~=8.1.7
+cloudpathlib~=0.21.0
+cloudpickle~=2.2.1
+cmdstanpy~=1.2.5
+colorful~=0.5.6
+colorlog~=6.9.0
+comm~=0.2.1
+composer~=0.29.0
+confection~=0.1.5
+configparser~=5.2.0
+contourpy~=1.2.0
+coolname~=2.2.0
+cryptography~=42.0.5
+cycler~=0.11.0
+cymem~=2.0.11
+cython~=3.0.11
+dacite~=1.9.2
+databricks-automl-runtime~=0.2.21
+databricks-feature-engineering~=0.10.2
+databricks-sdk~=0.30
+datasets~=3.5.0
+dbl-tempo~=0.1.26
+debugpy~=1.6.7
+decorator~=5.1.1
+defusedxml~=0.7.1
+deprecated~=1.2.18
+dill~=0.3.8
+distlib~=0.3.8
+dm-tree~=0.1.9
+docstring-to-markdown~=0.11
+einops~=0.8.1
+entrypoints~=0.4
+evaluate~=0.4.3
+executing~=0.8.3
+facets-overview~=1.1.1
+farama-notifications~=0.0.4
+fastapi~=0.115.12
+fastjsonschema~=2.21.1
+fasttext-wheel~=0.9.2
+filelock~=3.13.1
+flask~=2.2.5
+flatbuffers~=25.2.10
+fonttools~=4.51.0
+fqdn~=1.5.1
+frozenlist~=1.4.0
+fsspec~=2023.5.0
+future~=0.18.3
+gast~=0.4.0
+gitdb~=4.0.11
+gitpython~=3.1.37
+google-api-core~=2.20.0
+google-auth~=2.21.0
+google-auth-oauthlib~=1.2.1
+google-cloud-core~=2.4.3
+google-cloud-storage~=2.10.0
+google-crc32c~=1.7.1
+google-pasta~=0.2.0
+google-resumable-media~=2.7.2
+googleapis-common-protos~=1.70.0
+gql~=3.5.2
+graphql-core~=3.2.4
+greenlet~=3.0.1
+grpcio~=1.60
+grpcio-status~=1.60
+gunicorn~=20.1.0
+gviz-api~=1.10.0
+gymnasium~=0.28.1
+h11~=0.14.0
+h5py~=3.11.0
+hjson~=3.1.0
+holidays~=0.54
+htmlmin~=0.1.12
+httpcore~=1.0.8
+httplib2~=0.20.4
+httpx~=0.28.1
+huggingface-hub~=0.29.3
+idna~=3.7
+imagehash~=4.3.1
+imageio~=2.33.1
+imbalanced-learn~=0.12.3
+importlib-metadata~=6.0.0
+ipyflow-core~=0.0.201
+ipykernel~=6.28.0
+ipython~=8.25.0
+ipython-genutils~=0.2.0
+ipywidgets~=7.7.2
+isodate~=0.6.1
+isoduration~=20.11.0
+itsdangerous~=2.2.0
+jax-jumpy~=1.0.0
+jedi~=0.19.1
+jinja2~=3.1.4
+jiter~=0.9.0
+jmespath~=1.0.1
+joblib~=1.4.2
+joblibspark~=0.5.3
+json5~=0.9.6
+jsonpatch~=1.33
+jsonpointer~=3.0.0
+jsonschema~=4.19.2
+jsonschema-specifications~=2023.7.1
+jupyter-client~=8.6.0
+jupyter-core~=5.7.2
+jupyter-events~=0.10.0
+jupyter-lsp~=2.2.0
+jupyter-server~=2.14.1
+jupyter-server-terminals~=0.4.4
+jupyterlab~=4.0.11
+jupyterlab-pygments~=0.1.2
+jupyterlab-server~=2.25.1
+keras~=3.9.0
+kiwisolver~=1.4.4
+langchain~=0.3.21
+langchain-core~=0.3.51
+langchain-text-splitters~=0.3.8
+langcodes~=3.5.0
+langsmith~=0.1.133
+language-data~=1.3.0
+launchpadlib~=1.11.0
+lazr-restfulclient~=0.14.6
+lazr-uri~=1.0.6
+lazy-loader~=0.4
+libclang~=15.0.6.1
+librosa~=0.10.2
+lightgbm~=4.5.0
+lightning-utilities~=0.14.3
+linkify-it-py~=2.0.0
+llvmlite~=0.42.0
+lz4~=4.3.2
+mako~=1.2.0
+marisa-trie~=1.2.0
+markdown~=3.4.1
+markdown-it-py~=2.2.0
+markupsafe~=2.1.3
+matplotlib~=3.8.4
+matplotlib-inline~=0.1.6
+mccabe~=0.7.0
+mdit-py-plugins~=0.3.0
+mdurl~=0.1.0
+memray~=1.17.1
+mistune~=2.0.4
+ml-dtypes~=0.4.1
+mlflow-skinny~=2.21.3
+mosaicml-cli~=0.6.41
+mosaicml-streaming~=0.11.0
+mpmath~=1.3.0
+msal~=1.32.0
+msal-extensions~=1.3.1
+msgpack~=1.1.0
+multidict~=6.0.4
+multimethod~=1.12
+multiprocess~=0.70.16
+murmurhash~=1.0.12
+mypy~=1.10.0
+mypy-extensions~=1.0.0
+namex~=0.0.8
+nbclient~=0.8.0
+nbconvert~=7.10.0
+nbformat~=5.9.2
+nest-asyncio~=1.6.0
+networkx~=3.2.1
+ninja~=1.11.1.1
+nltk~=3.8.1
+nodeenv~=1.9.1
+notebook~=7.0.8
+notebook-shim~=0.2.3
+numba~=0.59.1
+numpy~=1.26.4
+oauthlib~=3.2.0
+oci~=2.150.0
+openai~=1.69.0
+opencensus~=0.11.4
+opencensus-context~=0.1.3
+opentelemetry-api~=1.32.0
+opentelemetry-sdk~=1.32.0
+opentelemetry-semantic-conventions~=0.53b0
+opt-einsum~=3.4.0
+optree~=0.15.0
+optuna~=3.6.1
+optuna-integration~=3.6.0
+orjson~=3.10.16
+overrides~=7.4.0
+packaging~=24.1
+pandocfilters~=1.5.0
+paramiko~=3.4.0
+parso~=0.8.3
+pathspec~=0.10.3
+patsy~=0.5.6
+pexpect~=4.8.0
+phik~=0.12.4
+pillow~=10.3.0
+platformdirs~=3.10.0
+plotly~=5.22.0
+pluggy~=1.0.0
+pmdarima~=2.0.4
+pooch~=1.8.2
+preshed~=3.0.9
+prometheus-client~=0.14.1
+prompt-toolkit~=3.0.43
+prophet~=1.1.6
+proto-plus~=1.26.1
+protobuf~=4.24.1
+psutil~=5.9.0
+psycopg2~=2.9.3
+ptyprocess~=0.7.0
+pure-eval~=0.2.2
+py-cpuinfo~=9.0.0
+py-spy~=0.4.0
+pyarrow~=15.0.2
+pyasn1~=0.4.8
+pyasn1-modules~=0.2.8
+pybind11~=2.13.6
+pyccolo~=0.0.65
+pycparser~=2.21
+pydantic~=2.8.2
+pydantic-core~=2.20.1
+pyflakes~=3.2.0
+pygments~=2.15.1
+pyjwt~=2.7.0
+pynacl~=1.5.0
+pyodbc~=5.0.1
+pyopenssl~=24.0.0
+pyparsing~=3.0.9
+pyright~=1.1.294
+pytesseract~=0.3.10
+python-dateutil~=2.9.0.post0
+python-editor~=1.0.4
+python-json-logger~=2.0.7
+python-lsp-jsonrpc~=1.1.2
+python-lsp-server~=1.10.0
+python-snappy~=0.6.1
+pytoolconfig~=1.2.6
+pytorch-ranger~=0.1.1
+pytz~=2024.1
+pywavelets~=1.5.0
+pyyaml~=6.0.1
+pyzmq~=25.1.2
+questionary~=2.1.0
+ray~=2.37.0
+referencing~=0.30.2
+regex~=2023.10.3
+requests~=2.32.2
+requests-oauthlib~=1.3.1
+requests-toolbelt~=1.0.0
+rfc3339-validator~=0.1.4
+rfc3986-validator~=0.1.1
+rich~=13.3.5
+rope~=1.12.0
+rpds-py~=0.10.6
+rsa~=4.9
+ruamel-yaml~=0.18.10
+ruamel-yaml-clib~=0.2.12
+s3transfer~=0.10.2
+safetensors~=0.4.4
+scikit-image~=0.23.2
+scikit-learn~=1.4.2
+scipy~=1.13.1
+seaborn~=0.13.2
+send2trash~=1.8.2
+sentence-transformers~=3.4.1
+sentencepiece~=0.2.0
+setuptools~=74.0.0
+shap~=0.46.0
+shellingham~=1.5.4
+simplejson~=3.17.6
+six~=1.16.0
+slicer~=0.0.8
+smart-open~=5.2.1
+smmap~=5.0.0
+sniffio~=1.3.0
+soundfile~=0.12.1
+soupsieve~=2.5
+soxr~=0.5.0.post1
+spacy~=3.7.5
+spacy-legacy~=3.0.12
+spacy-loggers~=1.0.5
+sqlalchemy~=2.0.30
+sqlparse~=0.4.2
+srsly~=2.5.1
+ssh-import-id~=5.11
+stack-data~=0.2.0
+stanio~=0.5.1
+starlette~=0.46.2
+statsmodels~=0.14.2
+sympy~=1.13.1
+tabulate~=0.9.0
+tangled-up-in-unicode~=0.2.0
+tenacity~=8.2.2
+tensorboard~=2.17.0
+tensorboard-data-server~=0.7.2
+tensorboard-plugin-profile~=2.17.0
+tensorboardx~=2.6.2.2
+tensorflow~=2.17.0
+tensorflow-estimator~=2.15.0
+termcolor~=3.0.1
+terminado~=0.17.1
+textual~=3.1.0
+tf-keras~=2.17.0
+thinc~=8.2.5
+threadpoolctl~=2.2.0
+tifffile~=2023.4.12
+tiktoken~=0.7.0
+tinycss2~=1.2.1
+tokenize-rt~=4.2.1
+tokenizers~=0.21.0
+tomli~=2.0.1
+torch~=2.6.0
+torch-optimizer~=0.3.0
+torcheval~=0.0.7
+torchmetrics~=1.6.0
+torchvision~=0.21.0
+tornado~=6.4.1
+tqdm~=4.66.4
+traitlets~=5.14.3
+transformers~=4.50.2
+typer~=0.15.2
+types-protobuf~=3.20.3
+types-psutil~=5.9.0
+types-pytz~=2023.3.1.1
+types-pyyaml~=6.0.0
+types-requests~=2.31.0.0
+types-setuptools~=68.0.0.0
+types-six~=1.16.0
+types-urllib3~=1.26.25.14
+typing-extensions~=4.11.0
+uc-micro-py~=1.0.1
+ujson~=5.10.0
+uri-template~=1.3.0
+urllib3~=1.26.16
+uvicorn~=0.34.1
+validators~=0.34.0
+virtualenv~=20.26.2
+visions~=0.7.5
+wadllib~=1.3.6
+wasabi~=1.1.3
+wcwidth~=0.2.5
+weasel~=0.4.1
+webcolors~=24.11.1
+webencodings~=0.5.1
+websocket-client~=1.8.0
+websockets~=11.0.3
+werkzeug~=3.0.3
+whatthepatch~=1.0.2
+wheel~=0.43.0
+wordcloud~=1.9.4
+wrapt~=1.14.1
+xgboost~=2.0.3
+xgboost-ray~=0.1.19
+xxhash~=3.4.1
+yapf~=0.33.0
+yarl~=1.9.3
+ydata-profiling~=4.9.0
+zipp~=3.17.0
+zstd~=1.5.5.1
diff --git a/python/dbr/16.4.x-gpu-ml-scala2.13/pyproject.toml b/python/dbr/16.4.x-gpu-ml-scala2.13/pyproject.toml
new file mode 100644
index 0000000..6879351
--- /dev/null
+++ b/python/dbr/16.4.x-gpu-ml-scala2.13/pyproject.toml
@@ -0,0 +1,410 @@
+# pyproject.toml file for Databricks Runtime 16.4.x-gpu-ml-scala2.13
+
+[project]
+name = "constraint-env-16-4-x-gpu-ml-scala2-13"
+version = "0.1.0"
+requires-python = "==3.12.*"
+
+[dependency-groups]
+dev = [
+ "databricks-connect~=16.4.0",
+]
+
+[tool.uv]
+constraint-dependencies = [
+ "absl-py~=1.0.0",
+ "accelerate~=1.5.2",
+ "aiohttp~=3.9.5",
+ "aiohttp-cors~=0.8.1",
+ "aiosignal~=1.2.0",
+ "annotated-types~=0.7.0",
+ "anyio~=4.2.0",
+ "argcomplete~=3.6.2",
+ "argon2-cffi~=21.3.0",
+ "argon2-cffi-bindings~=21.2.0",
+ "arrow~=1.2.3",
+ "astor~=0.8.1",
+ "asttokens~=2.0.5",
+ "astunparse~=1.6.3",
+ "async-lru~=2.0.4",
+ "attrs~=23.1.0",
+ "audioread~=3.0.1",
+ "azure-core~=1.33.0",
+ "azure-cosmos~=4.3.1",
+ "azure-identity~=1.21.0",
+ "azure-storage-blob~=12.23.0",
+ "azure-storage-file-datalake~=12.17.0",
+ "babel~=2.11.0",
+ "backoff~=2.2.1",
+ "bcrypt~=3.2.0",
+ "beautifulsoup4~=4.12.3",
+ "black~=24.4.2",
+ "bleach~=4.1.0",
+ "blinker~=1.7.0",
+ "blis~=0.7.11",
+ "boto3~=1.34.69",
+ "botocore~=1.34.69",
+ "brotli~=1.0.9",
+ "cachetools~=5.3.3",
+ "catalogue~=2.0.10",
+ "category-encoders~=2.6.3",
+ "certifi~=2024.6.2",
+ "cffi~=1.16.0",
+ "chardet~=4.0.0",
+ "charset-normalizer~=2.0.4",
+ "circuitbreaker~=2.1.3",
+ "click~=8.1.7",
+ "cloudpathlib~=0.21.0",
+ "cloudpickle~=2.2.1",
+ "cmdstanpy~=1.2.5",
+ "colorful~=0.5.6",
+ "colorlog~=6.9.0",
+ "comm~=0.2.1",
+ "composer~=0.29.0",
+ "confection~=0.1.5",
+ "configparser~=5.2.0",
+ "contourpy~=1.2.0",
+ "coolname~=2.2.0",
+ "cryptography~=42.0.5",
+ "cycler~=0.11.0",
+ "cymem~=2.0.11",
+ "cython~=3.0.11",
+ "dacite~=1.9.2",
+ "databricks-automl-runtime~=0.2.21",
+ "databricks-feature-engineering~=0.10.2",
+ "databricks-sdk~=0.30",
+ "datasets~=3.5.0",
+ "dbl-tempo~=0.1.26",
+ "debugpy~=1.6.7",
+ "decorator~=5.1.1",
+ "defusedxml~=0.7.1",
+ "deprecated~=1.2.18",
+ "dill~=0.3.8",
+ "distlib~=0.3.8",
+ "dm-tree~=0.1.9",
+ "docstring-to-markdown~=0.11",
+ "einops~=0.8.1",
+ "entrypoints~=0.4",
+ "evaluate~=0.4.3",
+ "executing~=0.8.3",
+ "facets-overview~=1.1.1",
+ "farama-notifications~=0.0.4",
+ "fastapi~=0.115.12",
+ "fastjsonschema~=2.21.1",
+ "fasttext-wheel~=0.9.2",
+ "filelock~=3.13.1",
+ "flask~=2.2.5",
+ "flatbuffers~=25.2.10",
+ "fonttools~=4.51.0",
+ "fqdn~=1.5.1",
+ "frozenlist~=1.4.0",
+ "fsspec~=2023.5.0",
+ "future~=0.18.3",
+ "gast~=0.4.0",
+ "gitdb~=4.0.11",
+ "gitpython~=3.1.37",
+ "google-api-core~=2.20.0",
+ "google-auth~=2.21.0",
+ "google-auth-oauthlib~=1.2.1",
+ "google-cloud-core~=2.4.3",
+ "google-cloud-storage~=2.10.0",
+ "google-crc32c~=1.7.1",
+ "google-pasta~=0.2.0",
+ "google-resumable-media~=2.7.2",
+ "googleapis-common-protos~=1.70.0",
+ "gql~=3.5.2",
+ "graphql-core~=3.2.4",
+ "greenlet~=3.0.1",
+ "grpcio~=1.60",
+ "grpcio-status~=1.60",
+ "gunicorn~=20.1.0",
+ "gviz-api~=1.10.0",
+ "gymnasium~=0.28.1",
+ "h11~=0.14.0",
+ "h5py~=3.11.0",
+ "hjson~=3.1.0",
+ "holidays~=0.54",
+ "htmlmin~=0.1.12",
+ "httpcore~=1.0.8",
+ "httplib2~=0.20.4",
+ "httpx~=0.28.1",
+ "huggingface-hub~=0.29.3",
+ "idna~=3.7",
+ "imagehash~=4.3.1",
+ "imageio~=2.33.1",
+ "imbalanced-learn~=0.12.3",
+ "importlib-metadata~=6.0.0",
+ "ipyflow-core~=0.0.201",
+ "ipykernel~=6.28.0",
+ "ipython~=8.25.0",
+ "ipython-genutils~=0.2.0",
+ "ipywidgets~=7.7.2",
+ "isodate~=0.6.1",
+ "isoduration~=20.11.0",
+ "itsdangerous~=2.2.0",
+ "jax-jumpy~=1.0.0",
+ "jedi~=0.19.1",
+ "jinja2~=3.1.4",
+ "jiter~=0.9.0",
+ "jmespath~=1.0.1",
+ "joblib~=1.4.2",
+ "joblibspark~=0.5.3",
+ "json5~=0.9.6",
+ "jsonpatch~=1.33",
+ "jsonpointer~=3.0.0",
+ "jsonschema~=4.19.2",
+ "jsonschema-specifications~=2023.7.1",
+ "jupyter-client~=8.6.0",
+ "jupyter-core~=5.7.2",
+ "jupyter-events~=0.10.0",
+ "jupyter-lsp~=2.2.0",
+ "jupyter-server~=2.14.1",
+ "jupyter-server-terminals~=0.4.4",
+ "jupyterlab~=4.0.11",
+ "jupyterlab-pygments~=0.1.2",
+ "jupyterlab-server~=2.25.1",
+ "keras~=3.9.0",
+ "kiwisolver~=1.4.4",
+ "langchain~=0.3.21",
+ "langchain-core~=0.3.51",
+ "langchain-text-splitters~=0.3.8",
+ "langcodes~=3.5.0",
+ "langsmith~=0.1.133",
+ "language-data~=1.3.0",
+ "launchpadlib~=1.11.0",
+ "lazr-restfulclient~=0.14.6",
+ "lazr-uri~=1.0.6",
+ "lazy-loader~=0.4",
+ "libclang~=15.0.6.1",
+ "librosa~=0.10.2",
+ "lightgbm~=4.5.0",
+ "lightning-utilities~=0.14.3",
+ "linkify-it-py~=2.0.0",
+ "llvmlite~=0.42.0",
+ "lz4~=4.3.2",
+ "mako~=1.2.0",
+ "marisa-trie~=1.2.0",
+ "markdown~=3.4.1",
+ "markdown-it-py~=2.2.0",
+ "markupsafe~=2.1.3",
+ "matplotlib~=3.8.4",
+ "matplotlib-inline~=0.1.6",
+ "mccabe~=0.7.0",
+ "mdit-py-plugins~=0.3.0",
+ "mdurl~=0.1.0",
+ "memray~=1.17.1",
+ "mistune~=2.0.4",
+ "ml-dtypes~=0.4.1",
+ "mlflow-skinny~=2.21.3",
+ "mosaicml-cli~=0.6.41",
+ "mosaicml-streaming~=0.11.0",
+ "mpmath~=1.3.0",
+ "msal~=1.32.0",
+ "msal-extensions~=1.3.1",
+ "msgpack~=1.1.0",
+ "multidict~=6.0.4",
+ "multimethod~=1.12",
+ "multiprocess~=0.70.16",
+ "murmurhash~=1.0.12",
+ "mypy~=1.10.0",
+ "mypy-extensions~=1.0.0",
+ "namex~=0.0.8",
+ "nbclient~=0.8.0",
+ "nbconvert~=7.10.0",
+ "nbformat~=5.9.2",
+ "nest-asyncio~=1.6.0",
+ "networkx~=3.2.1",
+ "ninja~=1.11.1.1",
+ "nltk~=3.8.1",
+ "nodeenv~=1.9.1",
+ "notebook~=7.0.8",
+ "notebook-shim~=0.2.3",
+ "numba~=0.59.1",
+ "numpy~=1.26.4",
+ "oauthlib~=3.2.0",
+ "oci~=2.150.0",
+ "openai~=1.69.0",
+ "opencensus~=0.11.4",
+ "opencensus-context~=0.1.3",
+ "opentelemetry-api~=1.32.0",
+ "opentelemetry-sdk~=1.32.0",
+ "opentelemetry-semantic-conventions~=0.53b0",
+ "opt-einsum~=3.4.0",
+ "optree~=0.15.0",
+ "optuna~=3.6.1",
+ "optuna-integration~=3.6.0",
+ "orjson~=3.10.16",
+ "overrides~=7.4.0",
+ "packaging~=24.1",
+ "pandocfilters~=1.5.0",
+ "paramiko~=3.4.0",
+ "parso~=0.8.3",
+ "pathspec~=0.10.3",
+ "patsy~=0.5.6",
+ "pexpect~=4.8.0",
+ "phik~=0.12.4",
+ "pillow~=10.3.0",
+ "platformdirs~=3.10.0",
+ "plotly~=5.22.0",
+ "pluggy~=1.0.0",
+ "pmdarima~=2.0.4",
+ "pooch~=1.8.2",
+ "preshed~=3.0.9",
+ "prometheus-client~=0.14.1",
+ "prompt-toolkit~=3.0.43",
+ "prophet~=1.1.6",
+ "proto-plus~=1.26.1",
+ "protobuf~=4.24.1",
+ "psutil~=5.9.0",
+ "psycopg2~=2.9.3",
+ "ptyprocess~=0.7.0",
+ "pure-eval~=0.2.2",
+ "py-cpuinfo~=9.0.0",
+ "py-spy~=0.4.0",
+ "pyarrow~=15.0.2",
+ "pyasn1~=0.4.8",
+ "pyasn1-modules~=0.2.8",
+ "pybind11~=2.13.6",
+ "pyccolo~=0.0.65",
+ "pycparser~=2.21",
+ "pydantic~=2.8.2",
+ "pydantic-core~=2.20.1",
+ "pyflakes~=3.2.0",
+ "pygments~=2.15.1",
+ "pyjwt~=2.7.0",
+ "pynacl~=1.5.0",
+ "pyodbc~=5.0.1",
+ "pyopenssl~=24.0.0",
+ "pyparsing~=3.0.9",
+ "pyright~=1.1.294",
+ "pytesseract~=0.3.10",
+ "python-dateutil~=2.9.0.post0",
+ "python-editor~=1.0.4",
+ "python-json-logger~=2.0.7",
+ "python-lsp-jsonrpc~=1.1.2",
+ "python-lsp-server~=1.10.0",
+ "python-snappy~=0.6.1",
+ "pytoolconfig~=1.2.6",
+ "pytorch-ranger~=0.1.1",
+ "pytz~=2024.1",
+ "pywavelets~=1.5.0",
+ "pyyaml~=6.0.1",
+ "pyzmq~=25.1.2",
+ "questionary~=2.1.0",
+ "ray~=2.37.0",
+ "referencing~=0.30.2",
+ "regex~=2023.10.3",
+ "requests~=2.32.2",
+ "requests-oauthlib~=1.3.1",
+ "requests-toolbelt~=1.0.0",
+ "rfc3339-validator~=0.1.4",
+ "rfc3986-validator~=0.1.1",
+ "rich~=13.3.5",
+ "rope~=1.12.0",
+ "rpds-py~=0.10.6",
+ "rsa~=4.9",
+ "ruamel-yaml~=0.18.10",
+ "ruamel-yaml-clib~=0.2.12",
+ "s3transfer~=0.10.2",
+ "safetensors~=0.4.4",
+ "scikit-image~=0.23.2",
+ "scikit-learn~=1.4.2",
+ "scipy~=1.13.1",
+ "seaborn~=0.13.2",
+ "send2trash~=1.8.2",
+ "sentence-transformers~=3.4.1",
+ "sentencepiece~=0.2.0",
+ "setuptools~=74.0.0",
+ "shap~=0.46.0",
+ "shellingham~=1.5.4",
+ "simplejson~=3.17.6",
+ "six~=1.16.0",
+ "slicer~=0.0.8",
+ "smart-open~=5.2.1",
+ "smmap~=5.0.0",
+ "sniffio~=1.3.0",
+ "soundfile~=0.12.1",
+ "soupsieve~=2.5",
+ "soxr~=0.5.0.post1",
+ "spacy~=3.7.5",
+ "spacy-legacy~=3.0.12",
+ "spacy-loggers~=1.0.5",
+ "sqlalchemy~=2.0.30",
+ "sqlparse~=0.4.2",
+ "srsly~=2.5.1",
+ "ssh-import-id~=5.11",
+ "stack-data~=0.2.0",
+ "stanio~=0.5.1",
+ "starlette~=0.46.2",
+ "statsmodels~=0.14.2",
+ "sympy~=1.13.1",
+ "tabulate~=0.9.0",
+ "tangled-up-in-unicode~=0.2.0",
+ "tenacity~=8.2.2",
+ "tensorboard~=2.17.0",
+ "tensorboard-data-server~=0.7.2",
+ "tensorboard-plugin-profile~=2.17.0",
+ "tensorboardx~=2.6.2.2",
+ "tensorflow~=2.17.0",
+ "tensorflow-estimator~=2.15.0",
+ "termcolor~=3.0.1",
+ "terminado~=0.17.1",
+ "textual~=3.1.0",
+ "tf-keras~=2.17.0",
+ "thinc~=8.2.5",
+ "threadpoolctl~=2.2.0",
+ "tifffile~=2023.4.12",
+ "tiktoken~=0.7.0",
+ "tinycss2~=1.2.1",
+ "tokenize-rt~=4.2.1",
+ "tokenizers~=0.21.0",
+ "tomli~=2.0.1",
+ "torch~=2.6.0",
+ "torch-optimizer~=0.3.0",
+ "torcheval~=0.0.7",
+ "torchmetrics~=1.6.0",
+ "torchvision~=0.21.0",
+ "tornado~=6.4.1",
+ "tqdm~=4.66.4",
+ "traitlets~=5.14.3",
+ "transformers~=4.50.2",
+ "typer~=0.15.2",
+ "types-protobuf~=3.20.3",
+ "types-psutil~=5.9.0",
+ "types-pytz~=2023.3.1.1",
+ "types-pyyaml~=6.0.0",
+ "types-requests~=2.31.0.0",
+ "types-setuptools~=68.0.0.0",
+ "types-six~=1.16.0",
+ "types-urllib3~=1.26.25.14",
+ "typing-extensions~=4.11.0",
+ "uc-micro-py~=1.0.1",
+ "ujson~=5.10.0",
+ "uri-template~=1.3.0",
+ "urllib3~=1.26.16",
+ "uvicorn~=0.34.1",
+ "validators~=0.34.0",
+ "virtualenv~=20.26.2",
+ "visions~=0.7.5",
+ "wadllib~=1.3.6",
+ "wasabi~=1.1.3",
+ "wcwidth~=0.2.5",
+ "weasel~=0.4.1",
+ "webcolors~=24.11.1",
+ "webencodings~=0.5.1",
+ "websocket-client~=1.8.0",
+ "websockets~=11.0.3",
+ "werkzeug~=3.0.3",
+ "whatthepatch~=1.0.2",
+ "wheel~=0.43.0",
+ "wordcloud~=1.9.4",
+ "wrapt~=1.14.1",
+ "xgboost~=2.0.3",
+ "xgboost-ray~=0.1.19",
+ "xxhash~=3.4.1",
+ "yapf~=0.33.0",
+ "yarl~=1.9.3",
+ "ydata-profiling~=4.9.0",
+ "zipp~=3.17.0",
+ "zstd~=1.5.5.1",
+]
diff --git a/python/dbr/16.4.x-scala2.13/constraints.txt b/python/dbr/16.4.x-scala2.13/constraints.txt
new file mode 100644
index 0000000..bff26ed
--- /dev/null
+++ b/python/dbr/16.4.x-scala2.13/constraints.txt
@@ -0,0 +1,151 @@
+# constraints.txt file for Databricks Runtime 16.4.x-scala2.13
+
+annotated-types~=0.7.0
+asttokens~=2.0.5
+astunparse~=1.6.3
+azure-core~=1.31.0
+azure-storage-blob~=12.23.0
+azure-storage-file-datalake~=12.17.0
+black~=24.4.2
+blinker~=1.7.0
+boto3~=1.34.69
+botocore~=1.34.69
+cachetools~=5.3.3
+certifi~=2024.6.2
+cffi~=1.16.0
+chardet~=4.0.0
+charset-normalizer~=2.0.4
+click~=8.1.7
+cloudpickle~=2.2.1
+comm~=0.2.1
+contourpy~=1.2.0
+cryptography~=42.0.5
+cycler~=0.11.0
+cython~=3.0.11
+databricks-sdk~=0.30
+debugpy~=1.6.7
+decorator~=5.1.1
+deprecated~=1.2.14
+distlib~=0.3.8
+docstring-to-markdown~=0.11
+executing~=0.8.3
+facets-overview~=1.1.1
+filelock~=3.15.4
+fonttools~=4.51.0
+gitdb~=4.0.11
+gitpython~=3.1.37
+google-api-core~=2.20.0
+google-auth~=2.35.0
+google-cloud-core~=2.4.1
+google-cloud-storage~=2.18.2
+google-crc32c~=1.6.0
+google-resumable-media~=2.7.2
+googleapis-common-protos~=1.65.0
+grpcio~=1.60
+grpcio-status~=1.60
+httplib2~=0.20.4
+idna~=3.7
+importlib-metadata~=6.0.0
+ipyflow-core~=0.0.201
+ipykernel~=6.28.0
+ipython~=8.25.0
+ipython-genutils~=0.2.0
+ipywidgets~=7.7.2
+isodate~=0.6.1
+jedi~=0.19.1
+jmespath~=1.0.1
+joblib~=1.4.2
+jupyter-client~=8.6.0
+jupyter-core~=5.7.2
+kiwisolver~=1.4.4
+launchpadlib~=1.11.0
+lazr-restfulclient~=0.14.6
+lazr-uri~=1.0.6
+matplotlib~=3.8.4
+matplotlib-inline~=0.1.6
+mccabe~=0.7.0
+mlflow-skinny~=2.19.0
+mypy~=1.10.0
+mypy-extensions~=1.0.0
+nest-asyncio~=1.6.0
+nodeenv~=1.9.1
+numpy~=1.26.4
+oauthlib~=3.2.2
+opentelemetry-api~=1.27.0
+opentelemetry-sdk~=1.27.0
+opentelemetry-semantic-conventions~=0.48b0
+packaging~=24.1
+parso~=0.8.3
+pathspec~=0.10.3
+patsy~=0.5.6
+pexpect~=4.8.0
+pillow~=10.3.0
+platformdirs~=3.10.0
+plotly~=5.22.0
+pluggy~=1.0.0
+prompt-toolkit~=3.0.43
+proto-plus~=1.24.0
+protobuf~=4.24.1
+psutil~=5.9.0
+psycopg2~=2.9.3
+ptyprocess~=0.7.0
+pure-eval~=0.2.2
+pyarrow~=15.0.2
+pyasn1~=0.4.8
+pyasn1-modules~=0.2.8
+pyccolo~=0.0.65
+pycparser~=2.21
+pydantic~=2.8.2
+pydantic-core~=2.20.1
+pyflakes~=3.2.0
+pygments~=2.15.1
+pyjwt~=2.7.0
+pyodbc~=5.0.1
+pyparsing~=3.0.9
+pyright~=1.1.294
+python-dateutil~=2.9.0.post0
+python-lsp-jsonrpc~=1.1.2
+python-lsp-server~=1.10.0
+pytoolconfig~=1.2.6
+pytz~=2024.1
+pyyaml~=6.0.1
+pyzmq~=25.1.2
+requests~=2.32.2
+rope~=1.12.0
+rsa~=4.9
+s3transfer~=0.10.2
+scikit-learn~=1.4.2
+scipy~=1.13.1
+seaborn~=0.13.2
+setuptools~=74.0.0
+six~=1.16.0
+smmap~=5.0.0
+sqlparse~=0.5.1
+ssh-import-id~=5.11
+stack-data~=0.2.0
+statsmodels~=0.14.2
+tenacity~=8.2.2
+threadpoolctl~=2.2.0
+tokenize-rt~=4.2.1
+tomli~=2.0.1
+tornado~=6.4.1
+traitlets~=5.14.3
+types-protobuf~=3.20.3
+types-psutil~=5.9.0
+types-pytz~=2023.3.1.1
+types-pyyaml~=6.0.0
+types-requests~=2.31.0.0
+types-setuptools~=68.0.0.0
+types-six~=1.16.0
+types-urllib3~=1.26.25.14
+typing-extensions~=4.11.0
+ujson~=5.10.0
+urllib3~=1.26.16
+virtualenv~=20.26.2
+wadllib~=1.3.6
+wcwidth~=0.2.5
+whatthepatch~=1.0.2
+wheel~=0.43.0
+wrapt~=1.14.1
+yapf~=0.33.0
+zipp~=3.17.0
diff --git a/python/dbr/16.4.x-scala2.13/pyproject.toml b/python/dbr/16.4.x-scala2.13/pyproject.toml
new file mode 100644
index 0000000..f29e058
--- /dev/null
+++ b/python/dbr/16.4.x-scala2.13/pyproject.toml
@@ -0,0 +1,164 @@
+# pyproject.toml file for Databricks Runtime 16.4.x-scala2.13
+
+[project]
+name = "constraint-env-16-4-x-scala2-13"
+version = "0.1.0"
+requires-python = "==3.12.*"
+
+[dependency-groups]
+dev = [
+ "databricks-connect~=16.4.0",
+]
+
+[tool.uv]
+constraint-dependencies = [
+ "annotated-types~=0.7.0",
+ "asttokens~=2.0.5",
+ "astunparse~=1.6.3",
+ "azure-core~=1.31.0",
+ "azure-storage-blob~=12.23.0",
+ "azure-storage-file-datalake~=12.17.0",
+ "black~=24.4.2",
+ "blinker~=1.7.0",
+ "boto3~=1.34.69",
+ "botocore~=1.34.69",
+ "cachetools~=5.3.3",
+ "certifi~=2024.6.2",
+ "cffi~=1.16.0",
+ "chardet~=4.0.0",
+ "charset-normalizer~=2.0.4",
+ "click~=8.1.7",
+ "cloudpickle~=2.2.1",
+ "comm~=0.2.1",
+ "contourpy~=1.2.0",
+ "cryptography~=42.0.5",
+ "cycler~=0.11.0",
+ "cython~=3.0.11",
+ "databricks-sdk~=0.30",
+ "debugpy~=1.6.7",
+ "decorator~=5.1.1",
+ "deprecated~=1.2.14",
+ "distlib~=0.3.8",
+ "docstring-to-markdown~=0.11",
+ "executing~=0.8.3",
+ "facets-overview~=1.1.1",
+ "filelock~=3.15.4",
+ "fonttools~=4.51.0",
+ "gitdb~=4.0.11",
+ "gitpython~=3.1.37",
+ "google-api-core~=2.20.0",
+ "google-auth~=2.35.0",
+ "google-cloud-core~=2.4.1",
+ "google-cloud-storage~=2.18.2",
+ "google-crc32c~=1.6.0",
+ "google-resumable-media~=2.7.2",
+ "googleapis-common-protos~=1.65.0",
+ "grpcio~=1.60",
+ "grpcio-status~=1.60",
+ "httplib2~=0.20.4",
+ "idna~=3.7",
+ "importlib-metadata~=6.0.0",
+ "ipyflow-core~=0.0.201",
+ "ipykernel~=6.28.0",
+ "ipython~=8.25.0",
+ "ipython-genutils~=0.2.0",
+ "ipywidgets~=7.7.2",
+ "isodate~=0.6.1",
+ "jedi~=0.19.1",
+ "jmespath~=1.0.1",
+ "joblib~=1.4.2",
+ "jupyter-client~=8.6.0",
+ "jupyter-core~=5.7.2",
+ "kiwisolver~=1.4.4",
+ "launchpadlib~=1.11.0",
+ "lazr-restfulclient~=0.14.6",
+ "lazr-uri~=1.0.6",
+ "matplotlib~=3.8.4",
+ "matplotlib-inline~=0.1.6",
+ "mccabe~=0.7.0",
+ "mlflow-skinny~=2.19.0",
+ "mypy~=1.10.0",
+ "mypy-extensions~=1.0.0",
+ "nest-asyncio~=1.6.0",
+ "nodeenv~=1.9.1",
+ "numpy~=1.26.4",
+ "oauthlib~=3.2.2",
+ "opentelemetry-api~=1.27.0",
+ "opentelemetry-sdk~=1.27.0",
+ "opentelemetry-semantic-conventions~=0.48b0",
+ "packaging~=24.1",
+ "parso~=0.8.3",
+ "pathspec~=0.10.3",
+ "patsy~=0.5.6",
+ "pexpect~=4.8.0",
+ "pillow~=10.3.0",
+ "platformdirs~=3.10.0",
+ "plotly~=5.22.0",
+ "pluggy~=1.0.0",
+ "prompt-toolkit~=3.0.43",
+ "proto-plus~=1.24.0",
+ "protobuf~=4.24.1",
+ "psutil~=5.9.0",
+ "psycopg2~=2.9.3",
+ "ptyprocess~=0.7.0",
+ "pure-eval~=0.2.2",
+ "pyarrow~=15.0.2",
+ "pyasn1~=0.4.8",
+ "pyasn1-modules~=0.2.8",
+ "pyccolo~=0.0.65",
+ "pycparser~=2.21",
+ "pydantic~=2.8.2",
+ "pydantic-core~=2.20.1",
+ "pyflakes~=3.2.0",
+ "pygments~=2.15.1",
+ "pyjwt~=2.7.0",
+ "pyodbc~=5.0.1",
+ "pyparsing~=3.0.9",
+ "pyright~=1.1.294",
+ "python-dateutil~=2.9.0.post0",
+ "python-lsp-jsonrpc~=1.1.2",
+ "python-lsp-server~=1.10.0",
+ "pytoolconfig~=1.2.6",
+ "pytz~=2024.1",
+ "pyyaml~=6.0.1",
+ "pyzmq~=25.1.2",
+ "requests~=2.32.2",
+ "rope~=1.12.0",
+ "rsa~=4.9",
+ "s3transfer~=0.10.2",
+ "scikit-learn~=1.4.2",
+ "scipy~=1.13.1",
+ "seaborn~=0.13.2",
+ "setuptools~=74.0.0",
+ "six~=1.16.0",
+ "smmap~=5.0.0",
+ "sqlparse~=0.5.1",
+ "ssh-import-id~=5.11",
+ "stack-data~=0.2.0",
+ "statsmodels~=0.14.2",
+ "tenacity~=8.2.2",
+ "threadpoolctl~=2.2.0",
+ "tokenize-rt~=4.2.1",
+ "tomli~=2.0.1",
+ "tornado~=6.4.1",
+ "traitlets~=5.14.3",
+ "types-protobuf~=3.20.3",
+ "types-psutil~=5.9.0",
+ "types-pytz~=2023.3.1.1",
+ "types-pyyaml~=6.0.0",
+ "types-requests~=2.31.0.0",
+ "types-setuptools~=68.0.0.0",
+ "types-six~=1.16.0",
+ "types-urllib3~=1.26.25.14",
+ "typing-extensions~=4.11.0",
+ "ujson~=5.10.0",
+ "urllib3~=1.26.16",
+ "virtualenv~=20.26.2",
+ "wadllib~=1.3.6",
+ "wcwidth~=0.2.5",
+ "whatthepatch~=1.0.2",
+ "wheel~=0.43.0",
+ "wrapt~=1.14.1",
+ "yapf~=0.33.0",
+ "zipp~=3.17.0",
+]