# ML4T Python 3.12 Environment (x86 only) # For packages without Python 3.14 support: gensim, signatory, esig, pfhedge, pycausalimpact # Also covers notebooks hitting Python 3.14 torch CUDA import bug # # Covers: # Ch05 NB01 (timegan) — torch CUDA bug on 3.14 # Ch05 NB03 (sigcwgan_signatures) — signatory, esig # Ch05 NB07 (dp_gan) — torch CUDA bug on 3.14 # Ch09 NB06 (path_signatures) — signatory # Ch09 NB12 (wasserstein_regimes) — esig # Ch10 NB01 (word2vec_training) — gensim # Ch10 NB02 (asset_embeddings) — gensim # Ch10 NB03 (sentiment_evolution) — gensim # Ch12 NB10 (shap_nlp_sentiment) — torch CUDA + shap # Ch14 NB06 (conditional_autoencoder) — torch CUDA + shap # Ch15 NB06 (fed_announcement_bsts) — pycausalimpact (ARIMA event-study port; py<3.13) # Ch21 deep_hedging_pfhedge — pfhedge (unmaintained, numpy<2) # # Usage: # docker compose --profile py312 run --rm py312 python 10_text_feature_engineering/01_word2vec_training.py FROM python:3.12-slim ENV DEBIAN_FRONTEND=noninteractive ENV TZ=UTC RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ curl \ git \ libhdf5-dev \ pkg-config \ wget \ && rm -rf /var/lib/apt/lists/* COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv RUN useradd -m -s /bin/bash ml4t RUN python -m venv /opt/ml4t RUN /opt/ml4t/bin/pip install --no-cache-dir pip setuptools wheel WORKDIR /build COPY envs/py312/pyproject.toml /build/ RUN uv pip install --python /opt/ml4t/bin/python --no-cache /build # x86-only signature stack (signatory + esig) for Ch05/Ch09 notebooks RUN /opt/ml4t/bin/pip install --no-cache-dir --no-build-isolation "signatory>=1.2" && \ /opt/ml4t/bin/pip install --no-cache-dir --no-deps "esig>=1.0" && \ /opt/ml4t/bin/pip install --no-cache-dir "pyrecombine>=1.0" "roughpy>=0.2" # Test infrastructure — pytest + helpers so CI doesn't need runtime pip install RUN /opt/ml4t/bin/pip install --no-cache-dir \ "pytest>=8.0" "pytest-timeout>=2.3" WORKDIR /app ENV PATH="/opt/ml4t/bin:$PATH" ENV PYTHONPATH="/app" ENV JUPYTER_ENABLE_LAB=yes RUN mkdir -p /etc/jupyter && \ echo "c.ServerApp.token = ''" >> /etc/jupyter/jupyter_server_config.py && \ echo "c.ServerApp.password = ''" >> /etc/jupyter/jupyter_server_config.py && \ echo "c.ServerApp.allow_origin = '*'" >> /etc/jupyter/jupyter_server_config.py && \ echo "c.ServerApp.disable_check_xsrf = True" >> /etc/jupyter/jupyter_server_config.py CMD ["jupyter", "lab", "--ip=0.0.0.0", "--no-browser"]