How to perform experiments with damast

How to perform experiments with damast#

One of the main motivation of this library is to facilitate the development and evaluation of Machine-Learning models. Hence, β€˜damast’ offers a mini-framework and API to simplify the development of machine learning models. This requires a β€˜hopefully’ minimal set of constraints - as what is envisioned by the authors of this library - so that researchers and ML-starters have lower entry barrier into running machine learning.

That being said, we give an example here on a minimal experiment.

!pip install 'damast[ml]'
Requirement already satisfied: damast[ml] in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (0.3.7)
Requirement already satisfied: astropy in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (6.1.7)
Requirement already satisfied: cloudpickle in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (3.1.2)
Requirement already satisfied: iso8601 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (2.1.0)
Requirement already satisfied: jinja2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (3.1.6)
Requirement already satisfied: matplotlib in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (3.10.9)
Requirement already satisfied: networkx in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (3.4.2)
Requirement already satisfied: numba in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (0.67.0)
Requirement already satisfied: numpy>=2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (2.2.6)
Requirement already satisfied: packaging in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (26.3)
Requirement already satisfied: pandas in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (2.3.3)
Requirement already satisfied: polars>=1.36.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (1.44.2)
Requirement already satisfied: polars_h3 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (0.6.4)
Requirement already satisfied: psutil in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (7.2.2)
Requirement already satisfied: pyais in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (3.2.3)
Requirement already satisfied: pyarrow in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (25.0.1)
Requirement already satisfied: pydantic>=2.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (2.13.5)
Requirement already satisfied: pydot in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (4.0.1)
Requirement already satisfied: ratarmount>=1.2.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (1.3.0)
Requirement already satisfied: typing_extensions in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (4.16.0)
Requirement already satisfied: scikit-learn in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (1.7.2)
Requirement already satisfied: tables in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (3.10.1)
Requirement already satisfied: tqdm in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from damast[ml]) (4.70.1)
Collecting mlflow (from damast[ml])
  Downloading mlflow-3.16.1-py3-none-any.whl.metadata (50 kB)
Collecting keras>=3.0 (from damast[ml])
  Downloading keras-3.12.4-py3-none-any.whl.metadata (6.0 kB)
Collecting torch (from damast[ml])
  Downloading torch-2.14.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (37 kB)
Collecting jax[cpu] (from damast[ml])
  Downloading jax-0.6.2-py3-none-any.whl.metadata (13 kB)
Collecting tensorflow (from damast[ml])
  Downloading tensorflow-2.21.0-cp310-cp310-manylinux_2_27_x86_64.whl.metadata (4.4 kB)
Collecting absl-py (from keras>=3.0->damast[ml])
  Downloading absl_py-2.5.0-py3-none-any.whl.metadata (3.3 kB)
Collecting rich (from keras>=3.0->damast[ml])
  Downloading rich-15.0.0-py3-none-any.whl.metadata (18 kB)
Collecting namex (from keras>=3.0->damast[ml])
  Downloading namex-0.1.0-py3-none-any.whl.metadata (322 bytes)
Collecting h5py (from keras>=3.0->damast[ml])
  Downloading h5py-3.16.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (3.0 kB)
Collecting optree (from keras>=3.0->damast[ml])
  Downloading optree-0.20.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (32 kB)
Collecting ml-dtypes (from keras>=3.0->damast[ml])
  Downloading ml_dtypes-0.6.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (8.8 kB)
Requirement already satisfied: polars-runtime-32==1.44.2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from polars>=1.36.1->damast[ml]) (1.44.2)
Requirement already satisfied: annotated-types>=0.6.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from pydantic>=2.0->damast[ml]) (0.8.0)
Requirement already satisfied: pydantic-core==2.46.5 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from pydantic>=2.0->damast[ml]) (2.46.5)
Requirement already satisfied: typing-inspection>=0.4.2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from pydantic>=2.0->damast[ml]) (0.4.4)
Requirement already satisfied: ratarmountcore~=0.11.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (0.11.1)
Requirement already satisfied: mfusepy~=3.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmount>=1.2.1->damast[ml]) (3.1.1)
Requirement already satisfied: rarfile~=4.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (4.5)
Requirement already satisfied: libarchive-c<6.0,~=5.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (5.3)
Requirement already satisfied: py7zr~=1.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.1.3)
Requirement already satisfied: rapidgzip~=0.15.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (0.15.2)
Requirement already satisfied: indexed_gzip~=1.7 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.10.3)
Requirement already satisfied: python-xz~=0.4.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (0.4.0)
Requirement already satisfied: indexed_zstd<2.0,>=1.2.2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.7.1)
Requirement already satisfied: fast_zip_decryption in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (3.0.0)
Requirement already satisfied: texttable in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from py7zr~=1.0->ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.7.0)
Requirement already satisfied: pycryptodomex>=3.20.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from py7zr~=1.0->ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (3.23.0)
Requirement already satisfied: brotli>=1.2.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from py7zr~=1.0->ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.2.0)
Requirement already satisfied: backports.zstd>=1.0.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from py7zr~=1.0->ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.7.0)
Requirement already satisfied: pyppmd>=1.3.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from py7zr~=1.0->ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.3.1)
Requirement already satisfied: pybcj>=1.0.6 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from py7zr~=1.0->ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.0.8)
Requirement already satisfied: multivolumefile>=0.2.3 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from py7zr~=1.0->ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (0.2.3)
Requirement already satisfied: inflate64>=1.0.4 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from py7zr~=1.0->ratarmountcore[7z,bzip2,fat,gzip,rar,xz,zip,zstd]~=0.11.0->ratarmount>=1.2.1->damast[ml]) (1.0.4)
Requirement already satisfied: pyerfa>=2.0.1.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from astropy->damast[ml]) (2.0.1.5)
Requirement already satisfied: astropy-iers-data>=0.2024.10.28.0.34.7 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from astropy->damast[ml]) (0.2026.9.21.0.56.25)
Requirement already satisfied: PyYAML>=3.13 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from astropy->damast[ml]) (6.0.3)
Collecting jaxlib<=0.6.2,>=0.6.2 (from jax[cpu]; extra == "ml"->damast[ml])
  Downloading jaxlib-0.6.2-cp310-cp310-manylinux2014_x86_64.whl.metadata (1.3 kB)
Collecting opt_einsum (from jax[cpu]; extra == "ml"->damast[ml])
  Downloading opt_einsum-3.4.0-py3-none-any.whl.metadata (6.3 kB)
Requirement already satisfied: scipy>=1.12 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from jax[cpu]; extra == "ml"->damast[ml]) (1.15.3)
Requirement already satisfied: MarkupSafe>=2.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from jinja2->damast[ml]) (3.0.3)
Requirement already satisfied: contourpy>=1.0.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from matplotlib->damast[ml]) (1.3.2)
Requirement already satisfied: cycler>=0.10 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from matplotlib->damast[ml]) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from matplotlib->damast[ml]) (4.65.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from matplotlib->damast[ml]) (1.5.1)
Requirement already satisfied: pillow>=8 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from matplotlib->damast[ml]) (12.3.0)
Requirement already satisfied: pyparsing>=3 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from matplotlib->damast[ml]) (3.3.3)
Requirement already satisfied: python-dateutil>=2.7 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from matplotlib->damast[ml]) (2.9.0.post0)
Requirement already satisfied: six>=1.5 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib->damast[ml]) (1.17.0)
Collecting mlflow-skinny==3.16.1 (from mlflow->damast[ml])
  Downloading mlflow_skinny-3.16.1-py3-none-any.whl.metadata (50 kB)
Collecting mlflow-tracing==3.16.1 (from mlflow->damast[ml])
  Downloading mlflow_tracing-3.16.1-py3-none-any.whl.metadata (19 kB)
Collecting Flask-CORS<7 (from mlflow->damast[ml])
  Downloading flask_cors-6.0.5-py3-none-any.whl.metadata (5.4 kB)
Collecting Flask<4 (from mlflow->damast[ml])
  Downloading flask-3.1.3-py3-none-any.whl.metadata (3.2 kB)
Collecting aiohttp<4,>=3.7.0 (from mlflow->damast[ml])
  Downloading aiohttp-3.14.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (8.3 kB)
Collecting alembic!=1.10.0,<2 (from mlflow->damast[ml])
  Downloading alembic-1.20.0-py3-none-any.whl.metadata (7.3 kB)
Collecting cryptography<51,>=43.0.0 (from mlflow->damast[ml])
  Downloading cryptography-50.0.1-cp39-abi3-manylinux_2_34_x86_64.whl.metadata (4.3 kB)
Collecting docker<8,>=4.0.0 (from mlflow->damast[ml])
  Downloading docker-7.2.0-py3-none-any.whl.metadata (3.8 kB)
Collecting graphene<4 (from mlflow->damast[ml])
  Downloading graphene-3.4.3-py2.py3-none-any.whl.metadata (6.9 kB)
Collecting gunicorn<27 (from mlflow->damast[ml])
  Downloading gunicorn-26.2.0-py3-none-any.whl.metadata (5.5 kB)
Collecting huey<4,>=2.5.4 (from mlflow->damast[ml])
  Downloading huey-3.4.0-py3-none-any.whl.metadata (5.7 kB)
Collecting skops<1 (from mlflow->damast[ml])
  Downloading skops-0.15.0-py3-none-any.whl.metadata (4.3 kB)
Requirement already satisfied: sqlalchemy<3,>=1.4.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from mlflow->damast[ml]) (2.0.54)
Requirement already satisfied: anyio!=4.15.0,<5,>=3.6.2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from mlflow-skinny==3.16.1->mlflow->damast[ml]) (4.15.1)
Requirement already satisfied: cachetools<8,>=5.0.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from mlflow-skinny==3.16.1->mlflow->damast[ml]) (7.2.0)
Requirement already satisfied: click<9,>=7.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from mlflow-skinny==3.16.1->mlflow->damast[ml]) (8.5.0)
Collecting databricks-sdk<1,>=0.20.0 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading databricks_sdk-0.140.0-py3-none-any.whl.metadata (44 kB)
Collecting fastapi<1 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading fastapi-0.141.1-py3-none-any.whl.metadata (27 kB)
Collecting gitpython<4,>=3.1.9 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading gitpython-3.1.62-py3-none-any.whl.metadata (13 kB)
Requirement already satisfied: importlib_metadata!=4.7.0,<10,>=3.7.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from mlflow-skinny==3.16.1->mlflow->damast[ml]) (9.0.1)
Collecting opentelemetry-api<3,>=1.9.0 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading opentelemetry_api-1.44.0-py3-none-any.whl.metadata (1.4 kB)
Collecting opentelemetry-proto<3,>=1.9.0 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading opentelemetry_proto-1.44.0-py3-none-any.whl.metadata (2.3 kB)
Collecting opentelemetry-sdk<3,>=1.9.0 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading opentelemetry_sdk-1.44.0-py3-none-any.whl.metadata (1.6 kB)
Collecting protobuf<8,>=3.12.0 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading protobuf-7.36.2-cp310-abi3-manylinux2014_x86_64.whl.metadata (595 bytes)
Collecting python-dotenv<2,>=0.19.0 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading python_dotenv-1.2.3-py3-none-any.whl.metadata (29 kB)
Requirement already satisfied: requests<3,>=2.17.3 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from mlflow-skinny==3.16.1->mlflow->damast[ml]) (2.34.2)
Collecting sqlparse<1,>=0.4.0 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading sqlparse-0.6.0-py3-none-any.whl.metadata (6.0 kB)
Collecting starlette<2 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading starlette-1.6.0-py3-none-any.whl.metadata (6.4 kB)
Collecting uvicorn<1 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading uvicorn-0.53.0-py3-none-any.whl.metadata (6.6 kB)
Collecting aiohappyeyeballs>=2.5.0 (from aiohttp<4,>=3.7.0->mlflow->damast[ml])
  Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl.metadata (5.9 kB)
Collecting aiosignal>=1.4.0 (from aiohttp<4,>=3.7.0->mlflow->damast[ml])
  Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB)
Collecting async-timeout<6.0,>=4.0 (from aiohttp<4,>=3.7.0->mlflow->damast[ml])
  Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)
Requirement already satisfied: attrs>=17.3.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from aiohttp<4,>=3.7.0->mlflow->damast[ml]) (26.1.0)
Collecting frozenlist>=1.1.1 (from aiohttp<4,>=3.7.0->mlflow->damast[ml])
  Downloading frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (20 kB)
Collecting multidict<7.0,>=4.5 (from aiohttp<4,>=3.7.0->mlflow->damast[ml])
  Downloading multidict-6.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (5.3 kB)
Collecting propcache>=0.2.0 (from aiohttp<4,>=3.7.0->mlflow->damast[ml])
  Downloading propcache-0.5.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (25 kB)
Collecting yarl<2.0,>=1.17.0 (from aiohttp<4,>=3.7.0->mlflow->damast[ml])
  Downloading yarl-1.25.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (111 kB)
Collecting Mako (from alembic!=1.10.0,<2->mlflow->damast[ml])
  Downloading mako-1.4.1-py3-none-any.whl.metadata (2.9 kB)
Requirement already satisfied: tomli in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from alembic!=1.10.0,<2->mlflow->damast[ml]) (2.4.1)
Requirement already satisfied: exceptiongroup>=1.0.2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from anyio!=4.15.0,<5,>=3.6.2->mlflow-skinny==3.16.1->mlflow->damast[ml]) (1.3.1)
Requirement already satisfied: idna>=2.8 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from anyio!=4.15.0,<5,>=3.6.2->mlflow-skinny==3.16.1->mlflow->damast[ml]) (3.20)
Requirement already satisfied: cffi>=2.0.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from cryptography<51,>=43.0.0->mlflow->damast[ml]) (2.1.1)
Collecting google-auth~=2.0 (from databricks-sdk<1,>=0.20.0->mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading google_auth-2.58.0-py3-none-any.whl.metadata (6.0 kB)
Collecting protobuf<8,>=3.12.0 (from mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl.metadata (593 bytes)
Requirement already satisfied: urllib3<3,>=1.26 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from databricks-sdk<1,>=0.20.0->mlflow-skinny==3.16.1->mlflow->damast[ml]) (2.8.0)
Collecting annotated-doc>=0.0.2 (from fastapi<1->mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading annotated_doc-0.0.5-py3-none-any.whl.metadata (6.5 kB)
Collecting blinker>=1.9.0 (from Flask<4->mlflow->damast[ml])
  Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB)
Collecting itsdangerous>=2.2.0 (from Flask<4->mlflow->damast[ml])
  Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
Collecting werkzeug>=3.1.0 (from Flask<4->mlflow->damast[ml])
  Downloading werkzeug-3.1.8-py3-none-any.whl.metadata (4.0 kB)
Collecting gitdb<5,>=4.0.1 (from gitpython<4,>=3.1.9->mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading gitdb-4.0.12-py3-none-any.whl.metadata (1.2 kB)
Collecting smmap<6,>=3.0.1 (from gitdb<5,>=4.0.1->gitpython<4,>=3.1.9->mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading smmap-5.0.3-py3-none-any.whl.metadata (4.6 kB)
Collecting pyasn1-modules>=0.2.1 (from google-auth~=2.0->databricks-sdk<1,>=0.20.0->mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading pyasn1_modules-0.4.2-py3-none-any.whl.metadata (3.5 kB)
Collecting graphql-core<3.3,>=3.1 (from graphene<4->mlflow->damast[ml])
  Downloading graphql_core-3.2.12-py3-none-any.whl.metadata (11 kB)
Collecting graphql-relay<3.3,>=3.1 (from graphene<4->mlflow->damast[ml])
  Downloading graphql_relay-3.2.0-py3-none-any.whl.metadata (12 kB)
Requirement already satisfied: zipp>=3.20 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from importlib_metadata!=4.7.0,<10,>=3.7.0->mlflow-skinny==3.16.1->mlflow->damast[ml]) (4.1.0)
Collecting opentelemetry-semantic-conventions==0.65b0 (from opentelemetry-sdk<3,>=1.9.0->mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading opentelemetry_semantic_conventions-0.65b0-py3-none-any.whl.metadata (2.4 kB)
Requirement already satisfied: pytz>=2020.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from pandas->damast[ml]) (2026.3.post1)
Requirement already satisfied: tzdata>=2022.7 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from pandas->damast[ml]) (2026.4)
Requirement already satisfied: charset_normalizer<4,>=2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from requests<3,>=2.17.3->mlflow-skinny==3.16.1->mlflow->damast[ml]) (3.5.1)
Requirement already satisfied: certifi>=2023.5.7 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from requests<3,>=2.17.3->mlflow-skinny==3.16.1->mlflow->damast[ml]) (2026.7.22)
Requirement already satisfied: joblib>=1.2.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from scikit-learn->damast[ml]) (1.6.0)
Requirement already satisfied: threadpoolctl>=3.1.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from scikit-learn->damast[ml]) (3.7.0)
Collecting prettytable>=3.9 (from skops<1->mlflow->damast[ml])
  Downloading prettytable-3.18.0-py3-none-any.whl.metadata (37 kB)
Requirement already satisfied: greenlet>=1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from sqlalchemy<3,>=1.4.0->mlflow->damast[ml]) (3.5.6)
Collecting h11>=0.8 (from uvicorn<1->mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
Requirement already satisfied: pycparser in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from cffi>=2.0.0->cryptography<51,>=43.0.0->mlflow->damast[ml]) (3.0)
Requirement already satisfied: wcwidth>=0.3.5 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from prettytable>=3.9->skops<1->mlflow->damast[ml]) (0.8.4)
Collecting pyasn1<0.7.0,>=0.6.1 (from pyasn1-modules>=0.2.1->google-auth~=2.0->databricks-sdk<1,>=0.20.0->mlflow-skinny==3.16.1->mlflow->damast[ml])
  Downloading pyasn1-0.6.4-py3-none-any.whl.metadata (8.4 kB)
Requirement already satisfied: llvmlite<0.50,>=0.49.0dev0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from numba->damast[ml]) (0.49.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from rich->keras>=3.0->damast[ml]) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from rich->keras>=3.0->damast[ml]) (2.21.0)
Requirement already satisfied: mdurl~=0.1 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich->keras>=3.0->damast[ml]) (0.1.2)
Requirement already satisfied: numexpr>=2.6.2 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from tables->damast[ml]) (2.14.1)
Requirement already satisfied: py-cpuinfo in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from tables->damast[ml]) (9.0.0)
Requirement already satisfied: blosc2>=2.3.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from tables->damast[ml]) (4.3.3)
Requirement already satisfied: ndindex in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from blosc2>=2.3.0->tables->damast[ml]) (1.10.1)
Requirement already satisfied: msgpack in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from blosc2>=2.3.0->tables->damast[ml]) (1.2.2)
Collecting astunparse>=1.6.0 (from tensorflow->damast[ml])
  Downloading astunparse-1.6.3-py2.py3-none-any.whl.metadata (4.4 kB)
Collecting flatbuffers>=25.9.23 (from tensorflow->damast[ml])
  Downloading flatbuffers-25.12.19-py2.py3-none-any.whl.metadata (1.0 kB)
Collecting gast!=0.5.0,!=0.5.1,!=0.5.2,>=0.2.1 (from tensorflow->damast[ml])
  Downloading gast-0.7.0-py3-none-any.whl.metadata (1.5 kB)
Collecting google_pasta>=0.1.1 (from tensorflow->damast[ml])
  Downloading google_pasta-0.2.0-py3-none-any.whl.metadata (814 bytes)
Collecting libclang>=13.0.0 (from tensorflow->damast[ml])
  Downloading libclang-18.1.1-py2.py3-none-manylinux2010_x86_64.whl.metadata (5.2 kB)
Requirement already satisfied: setuptools in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from tensorflow->damast[ml]) (84.0.0)
Collecting termcolor>=1.1.0 (from tensorflow->damast[ml])
  Downloading termcolor-3.3.0-py3-none-any.whl.metadata (6.5 kB)
Requirement already satisfied: wrapt>=1.11.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from tensorflow->damast[ml]) (1.17.3)
Collecting grpcio<2.0,>=1.24.3 (from tensorflow->damast[ml])
  Downloading grpcio-1.84.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (3.8 kB)
Collecting h5py (from keras>=3.0->damast[ml])
  Downloading h5py-3.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.7 kB)
Requirement already satisfied: wheel<1.0,>=0.23.0 in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from astunparse>=1.6.0->tensorflow->damast[ml]) (0.48.0)
Requirement already satisfied: filelock in /home/runner/work/damast/damast/.tox/build_docs/lib/python3.10/site-packages (from torch->damast[ml]) (3.32.7)
Collecting sympy>=1.13.3 (from torch->damast[ml])
  Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB)
Collecting fsspec>=0.8.5 (from torch->damast[ml])
  Downloading fsspec-2026.9.0-py3-none-any.whl.metadata (10 kB)
Collecting cuda-toolkit==13.0.3 (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading cuda_toolkit-13.0.3.0-py2.py3-none-any.whl.metadata (17 kB)
Collecting cuda-bindings<14,>=13.0.3 (from torch->damast[ml])
  Downloading cuda_bindings-13.4.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (2.4 kB)
Collecting nvidia-cudnn-cu13==9.24.0.43 (from torch->damast[ml])
  Downloading nvidia_cudnn_cu13-9.24.0.43-py3-none-manylinux_2_27_x86_64.whl.metadata (1.9 kB)
Collecting nvidia-cusparselt-cu13==0.8.1 (from torch->damast[ml])
  Downloading nvidia_cusparselt_cu13-0.8.1-py3-none-manylinux2014_x86_64.whl.metadata (12 kB)
Collecting nvidia-nccl-cu13==2.30.7 (from torch->damast[ml])
  Downloading nvidia_nccl_cu13-2.30.7-py3-none-manylinux_2_18_x86_64.whl.metadata (2.1 kB)
Collecting nvidia-nvshmem-cu13==3.4.5 (from torch->damast[ml])
  Downloading nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.1 kB)
Collecting triton~=3.8.0 (from torch->damast[ml])
  Downloading triton-3.8.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (978 bytes)
Collecting nvidia-cufft==12.0.0.61.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.8 kB)
Collecting nvidia-nvjitlink<14,>=13.0.88 (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_nvjitlink-13.4.92-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl.metadata (1.8 kB)
Collecting nvidia-curand==10.4.0.35.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl.metadata (1.7 kB)
Collecting nvidia-cuda-cupti==13.0.85.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl.metadata (1.7 kB)
Collecting nvidia-cublas==13.1.1.3.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_cublas-13.1.1.3-py3-none-manylinux_2_27_x86_64.whl.metadata (1.8 kB)
Collecting nvidia-cusolver==12.0.4.66.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl.metadata (1.8 kB)
Collecting nvidia-cusparse==12.6.3.3.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.8 kB)
Collecting nvidia-cuda-nvrtc==13.0.88.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl.metadata (1.7 kB)
Collecting nvidia-cufile==1.15.1.6.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.7 kB)
Collecting nvidia-cuda-runtime==13.0.96.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.7 kB)
Collecting nvidia-nvtx==13.0.85.* (from cuda-toolkit[cublas,cudart,cufft,cufile,cupti,curand,cusolver,cusparse,nvjitlink,nvrtc,nvtx]==13.0.3; platform_system == "Linux"->torch->damast[ml])
  Downloading nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl.metadata (1.8 kB)
Collecting cuda-pathfinder>=1.4.2 (from cuda-bindings<14,>=13.0.3->torch->damast[ml])
  Downloading cuda_pathfinder-1.8.2-py3-none-any.whl.metadata (1.9 kB)
Collecting mpmath<1.4,>=1.1.0 (from sympy>=1.13.3->torch->damast[ml])
  Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)
Downloading keras-3.12.4-py3-none-any.whl (2.1 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/2.1 MB ? eta -:--:--
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━ 1.8/2.1 MB 10.4 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 8.6 MB/s  0:00:00
?25hDownloading absl_py-2.5.0-py3-none-any.whl (137 kB)
Downloading jax-0.6.2-py3-none-any.whl (2.7 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/2.7 MB ? eta -:--:--
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━ 2.6/2.7 MB 20.4 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━ 2.6/2.7 MB 20.4 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 5.2 MB/s  0:00:00
?25hDownloading jaxlib-0.6.2-cp310-cp310-manylinux2014_x86_64.whl (89.9 MB)
?25l
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/89.9 MB ? eta -:--:--
   ━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.8/89.9 MB 30.3 MB/s eta 0:00:03
   ━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.0/89.9 MB 25.3 MB/s eta 0:00:04
   ━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.7/89.9 MB 24.5 MB/s eta 0:00:04
   ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 19.9/89.9 MB 24.7 MB/s eta 0:00:03
   ━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24.9/89.9 MB 24.9 MB/s eta 0:00:03
   ━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━ 30.4/89.9 MB 25.1 MB/s eta 0:00:03
   ━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━ 35.7/89.9 MB 25.3 MB/s eta 0:00:03
   ━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━ 41.4/89.9 MB 25.8 MB/s eta 0:00:02
   ━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━━━━ 47.4/89.9 MB 26.2 MB/s eta 0:00:02
   ━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━━━━ 53.7/89.9 MB 26.7 MB/s eta 0:00:02
   ━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━━━━ 60.0/89.9 MB 27.1 MB/s eta 0:00:02
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━━━━ 66.6/89.9 MB 27.6 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━━━━ 73.4/89.9 MB 28.1 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━ 80.5/89.9 MB 28.5 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╺ 87.8/89.9 MB 29.1 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 89.9/89.9 MB 29.2 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 89.9/89.9 MB 29.2 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.9/89.9 MB 25.4 MB/s  0:00:03
?25hDownloading ml_dtypes-0.6.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (412 kB)
Downloading mlflow-3.16.1-py3-none-any.whl (11.7 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/11.7 MB ? eta -:--:--
   ━━━━━━━━━━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━ 7.3/11.7 MB 35.7 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.7/11.7 MB 30.6 MB/s  0:00:00
?25hDownloading mlflow_skinny-3.16.1-py3-none-any.whl (3.8 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/3.8 MB ? eta -:--:--
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 34.2 MB/s  0:00:00
?25h
Downloading mlflow_tracing-3.16.1-py3-none-any.whl (1.8 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/1.8 MB ? eta -:--:--
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 10.9 MB/s  0:00:00
?25h
Downloading aiohttp-3.14.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.7 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/1.7 MB ? eta -:--:--
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 24.2 MB/s  0:00:00
?25hDownloading alembic-1.20.0-py3-none-any.whl (268 kB)
Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)
Downloading cryptography-50.0.1-cp39-abi3-manylinux_2_34_x86_64.whl (4.8 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/4.8 MB ? eta -:--:--
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ 4.7/4.8 MB 39.9 MB/s eta 0:00:01
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.8/4.8 MB 17.3 MB/s  0:00:00
?25hDownloading databricks_sdk-0.140.0-py3-none-any.whl (1.1 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/1.1 MB ? eta -:--:--
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 4.9 MB/s  0:00:00
?25h
Downloading docker-7.2.0-py3-none-any.whl (148 kB)
Downloading fastapi-0.141.1-py3-none-any.whl (131 kB)
Downloading flask-3.1.3-py3-none-any.whl (103 kB)
Downloading flask_cors-6.0.5-py3-none-any.whl (16 kB)
Downloading gitpython-3.1.62-py3-none-any.whl (222 kB)
Downloading gitdb-4.0.12-py3-none-any.whl (62 kB)
Downloading google_auth-2.58.0-py3-none-any.whl (262 kB)
Downloading graphene-3.4.3-py2.py3-none-any.whl (114 kB)
Downloading graphql_core-3.2.12-py3-none-any.whl (216 kB)
Downloading graphql_relay-3.2.0-py3-none-any.whl (16 kB)
Downloading gunicorn-26.2.0-py3-none-any.whl (228 kB)
Downloading huey-3.4.0-py3-none-any.whl (136 kB)
Downloading multidict-6.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (287 kB)
Downloading opentelemetry_api-1.44.0-py3-none-any.whl (60 kB)
Downloading opentelemetry_proto-1.44.0-py3-none-any.whl (72 kB)
Downloading opentelemetry_sdk-1.44.0-py3-none-any.whl (137 kB)
Downloading opentelemetry_semantic_conventions-0.65b0-py3-none-any.whl (204 kB)
Downloading protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl (323 kB)
Downloading python_dotenv-1.2.3-py3-none-any.whl (22 kB)
Downloading skops-0.15.0-py3-none-any.whl (144 kB)
Downloading smmap-5.0.3-py3-none-any.whl (24 kB)
Downloading sqlparse-0.6.0-py3-none-any.whl (50 kB)
Downloading starlette-1.6.0-py3-none-any.whl (75 kB)
Downloading uvicorn-0.53.0-py3-none-any.whl (87 kB)
Downloading yarl-1.25.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (118 kB)
Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl (15 kB)
Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB)
Downloading annotated_doc-0.0.5-py3-none-any.whl (5.3 kB)
Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB)
Downloading frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (219 kB)
Downloading h11-0.16.0-py3-none-any.whl (37 kB)
Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
Downloading prettytable-3.18.0-py3-none-any.whl (37 kB)
Downloading propcache-0.5.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (224 kB)
Downloading pyasn1_modules-0.4.2-py3-none-any.whl (181 kB)
Downloading pyasn1-0.6.4-py3-none-any.whl (84 kB)
Downloading werkzeug-3.1.8-py3-none-any.whl (226 kB)
Downloading mako-1.4.1-py3-none-any.whl (80 kB)
Downloading namex-0.1.0-py3-none-any.whl (5.9 kB)
Downloading opt_einsum-3.4.0-py3-none-any.whl (71 kB)
Downloading optree-0.20.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (452 kB)
Downloading rich-15.0.0-py3-none-any.whl (310 kB)
Downloading tensorflow-2.21.0-cp310-cp310-manylinux_2_27_x86_64.whl (572.2 MB)
?25l   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/572.2 MB ? eta -:--:--
   ╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/572.2 MB 40.0 MB/s eta 0:00:15
   ━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.7/572.2 MB 36.8 MB/s eta 0:00:16
   ━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 20.7/572.2 MB 34.5 MB/s eta 0:00:16
   ━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 27.0/572.2 MB 33.7 MB/s eta 0:00:17
   ━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 31.5/572.2 MB 31.4 MB/s eta 0:00:18
   ━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 36.2/572.2 MB 30.1 MB/s eta 0:00:18
   ━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.2/572.2 MB 29.3 MB/s eta 0:00:19
   ━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 46.4/572.2 MB 28.8 MB/s eta 0:00:19
   ━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 50.9/572.2 MB 28.0 MB/s eta 0:00:19
   ━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.5/572.2 MB 27.0 MB/s eta 0:00:20
   ━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.5/572.2 MB 26.5 MB/s eta 0:00:20
   ━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.7/572.2 MB 26.0 MB/s eta 0:00:20
   ━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.5/572.2 MB 24.8 MB/s eta 0:00:21
   ━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.1/572.2 MB 23.6 MB/s eta 0:00:22
   ━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 67.9/572.2 MB 22.5 MB/s eta 0:00:23
   ━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 69.5/572.2 MB 21.6 MB/s eta 0:00:24
   ━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 71.0/572.2 MB 20.8 MB/s eta 0:00:25
   ━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 72.9/572.2 MB 20.1 MB/s eta 0:00:25
   ━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 75.0/572.2 MB 19.6 MB/s eta 0:00:26
   ━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.3/572.2 MB 18.9 MB/s eta 0:00:27
   ━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.5/572.2 MB 18.6 MB/s eta 0:00:27
   ━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.1/572.2 MB 17.4 MB/s eta 0:00:29
   ━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.6/572.2 MB 16.9 MB/s eta 0:00:30
   ━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.4/572.2 MB 16.4 MB/s eta 0:00:31
   ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.4/572.2 MB 15.9 MB/s eta 0:00:32
   ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.2/572.2 MB 15.4 MB/s eta 0:00:33
   ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 80.7/572.2 MB 14.9 MB/s eta 0:00:33
   ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.8/572.2 MB 14.5 MB/s eta 0:00:34
   ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 82.8/572.2 MB 14.2 MB/s eta 0:00:35
   ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.1/572.2 MB 13.9 MB/s eta 0:00:36
   ━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 85.7/572.2 MB 13.7 MB/s eta 0:00:36
   ━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.0/572.2 MB 13.5 MB/s eta 0:00:36
   ━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.3/572.2 MB 13.3 MB/s eta 0:00:37
   ━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 89.7/572.2 MB 13.1 MB/s eta 0:00:37
   ━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 91.0/572.2 MB 12.9 MB/s eta 0:00:38
   ━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 92.3/572.2 MB 12.7 MB/s eta 0:00:38
   ━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.8/572.2 MB 12.6 MB/s eta 0:00:38
   ━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 95.4/572.2 MB 12.5 MB/s eta 0:00:39
   ━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.7/572.2 MB 12.3 MB/s eta 0:00:39
   ━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.3/572.2 MB 12.2 MB/s eta 0:00:39
   ━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.9/572.2 MB 12.1 MB/s eta 0:00:40
   ━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 101.2/572.2 MB 12.0 MB/s eta 0:00:40
   ━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 103.0/572.2 MB 11.9 MB/s eta 0:00:40
   ━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 105.4/572.2 MB 11.9 MB/s eta 0:00:40
   ━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 107.7/572.2 MB 11.9 MB/s eta 0:00:40
   ━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 110.4/572.2 MB 11.9 MB/s eta 0:00:39
   ━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 112.5/572.2 MB 11.9 MB/s eta 0:00:39
   ━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 114.6/572.2 MB 11.8 MB/s eta 0:00:39
   ━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 115.6/572.2 MB 11.7 MB/s eta 0:00:39
   ━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.4/572.2 MB 11.7 MB/s eta 0:00:39
   ━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 119.5/572.2 MB 11.6 MB/s eta 0:00:39
   ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.6/572.2 MB 11.6 MB/s eta 0:00:39
   ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.2/572.2 MB 11.6 MB/s eta 0:00:39
   ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 124.5/572.2 MB 11.4 MB/s eta 0:00:40
   ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.0/572.2 MB 11.3 MB/s eta 0:00:40
   ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 125.8/572.2 MB 11.2 MB/s eta 0:00:40
   ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 127.1/572.2 MB 11.1 MB/s eta 0:00:41
   ━━━━━━━━╸━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 128.5/572.2 MB 11.0 MB/s eta 0:00:41
   ━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 129.8/572.2 MB 10.9 MB/s eta 0:00:41
^C

   ━━━━━━━━━╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 130.8/572.2 MB 10.9 MB/s eta 0:00:41
?25hERROR: Operation cancelled by user

# The list of modules used for this example
from collections import OrderedDict
from pathlib import Path

# For performance reasons the underlying data handling library is 'polars'
import keras

# You can define custom units to annotate data, but otherwise astropy units will be used
# Data ranges can be defined as list, or marked with a lower-bound (min), upper-bound (max)
# The AnnotatedDataFrame combines a data specification and actual 'numeric' data
from damast.core.dataframe import AnnotatedDataFrame

# Data processing is centered around a DataProcessingPipeline which consists of multiple PipelineElement being run
# in sequence
from damast.core.dataprocessing import DataProcessingPipeline

# An AnnotatedDataFrame contains MetaData to describe the data
from damast.core.metadata import MetaData
from damast.data_handling.transformers.cycle_transformer import CycleTransformer

# Allow to generate data for this particular example that uses data from the maritime domain
from damast.domains.maritime.ais.data_generator import AISTestData, AISTestDataSpec

# The experiment setup
from damast.ml.experiments import (
    Experiment,
    ForecastTask,
    ModelInstanceDescription,
    TrainingParameters,
)

# To allow the machine learning process to be simplified, we offer a 'BaseModel' that should be inherited from
from damast.ml.models.base import BaseModel

To illustrate a full experiment, we require a data processing pipeline to be set up. This pipeline will extract all those features, that are necessary to train the Machine Learning model(s). The pipeline will run transformations on the data, as provided here by a LatLonTransformer.

The selected example model here, will require the above listed features as input - and provide a likewise-shaped output (for illustration purposes).

class Baseline(BaseModel):
    """
    This is a placeholder ML model that illustrates the minimal
    requirements.
    """
    input_specs = OrderedDict({
        "lat_x": {"length": 1},
        "lat_y": {"length": 1},
        "lon_x": {"length": 1},
        "lon_y": {"length": 1}
    })

    output_specs = OrderedDict({
        "lat_x": {"length": 1},
        "lat_y": {"length": 1},
        "lon_x": {"length": 1},
        "lon_y": {"length": 1}
    })

    def __init__(self,
                 name: str,
                 features: list[str],
                 timeline_length: int,
                 output_dir: Path,
                 targets: list[str] | None = None):
        self.timeline_length = timeline_length

        super().__init__(name=name,
                         output_dir=output_dir,
                         features=features,
                         targets=targets)

    def _init_model(self):
        features_width = len(self.features)
        targets_width = len(self.targets)

        self.model = keras.models.Sequential([
            keras.layers.Flatten(input_shape=[self.timeline_length, features_width]),
            keras.layers.Dense(targets_width)
        ])


class BaselineA(Baseline):
    """Placeholder Model to illustrate the use of multiple models"""


class BaselineB(Baseline):
    """Placeholder Model to illustrate the use of multiple models"""

This example operates with synthetic, i.e. automatically generated data which is specific to the maritime domain. You will see a previous of the first 10 columns when running the following cell.

import shutil
import tempfile

tmp_path = Path(tempfile.gettempdir()) / "test-output-ais_preparation"
if tmp_path.exists():
    shutil.rmtree(tmp_path)
tmp_path.mkdir(parents=True)

pipeline = DataProcessingPipeline(name="ais_preparation",
                                  base_dir=tmp_path) \
    .add("lat_cycle_transform", CycleTransformer(n=180), name_mappings={"x": "lat"})\
    .add("lon_cycle_transform", CycleTransformer(n=90), name_mappings={"x": "lon"})
features = ["lat_x", "lat_y", "lon_x", "lon_y"]

data = AISTestData(1000)
adf = AnnotatedDataFrame(dataframe=data.dataframe,
                         metadata=MetaData.from_dict(data=AISTestDataSpec.copy()))
dataset_filename = tmp_path / "test.parquet"
adf.save(filename=dataset_filename)

adf.head(10)

A central idea to the experiment framework lies in providing a means for a consistent input and output to perform experiments. Hence, define a LearningTask (here: ForecastTask) that collects the learning parameters that define this task.

forecast_task = ForecastTask(
    label="forecast-ais-short-sequence",
    pipeline=pipeline, features=features,
    models=[ModelInstanceDescription(BaselineA, {}),
            ModelInstanceDescription(BaselineB, {}),
            ],
    group_column="mmsi",
    sequence_length=5,
    forecast_length=1,
    training_parameters=TrainingParameters(epochs=1,
                                           validation_steps=1)
)

The actual experimentation takes a single LearningTask as input and it will output

experiment = Experiment(learning_task=forecast_task,
                        input_data=dataset_filename,
                        output_directory=tmp_path)
report = experiment.run()
    
with open(report, "r") as f:
    print(f.read())        

The outputs of an experiment are collected inside a dedicated (timestamped) folder. This folder will also contain a subfolder for each of the parametrized models that defines a LearningTask.

last_experiments = sorted([str(f) for f in Path(experiment.output_directory).glob(pattern="*") if f.is_dir()])
print("Last experiment in: ", last_experiments[-1])

experiment_folder = sorted([str(f) for f in Path(last_experiments[-1]).glob(pattern="*")])
file_listing = '\n'.join(experiment_folder)
print("Contents:\n")
print(file_listing)

Once the training is running it can be monitored using tensorboard:

    tensorboard --logdir=<experiments-directory>