# UniMate unified environment — one env for everything: data processing,
# rendering, training, inference and evaluation (Python 3.10, CUDA 12.4).
#
#   conda create -n unimate python=3.10 -y
#   conda activate unimate
#   pip install "setuptools<81"
#   pip install -r requirements.txt --no-build-isolation
#
# The Motion git dependency has a legacy setup.py that imports pkg_resources,
# which setuptools >= 81 no longer ships. Isolated builds always use the
# newest setuptools, so the install must run with --no-build-isolation
# against an env setuptools < 81 — installed by the step above (fresh conda
# envs ship setuptools >= 81 too); the pin below keeps it from upgrading.
#
# Only direct dependencies are listed; everything else (CUDA runtime libs,
# tokenizers, HTTP stack, ...) is resolved transitively by pip. Versions are
# pinned to the combination this project is developed and tested against;
# `mathutils` / `bmesh` need no line of their own (they ship inside the bpy
# wheel), nor does `mpl_toolkits` (inside matplotlib).

# PyTorch cu124 wheels (torch / torchvision "+cu124" pins below)
--extra-index-url https://download.pytorch.org/whl/cu124
# Blender official wheel index — PyPI no longer hosts cp310 bpy wheels
--extra-index-url https://download.blender.org/pypi/

setuptools<81                   # keeps pkg_resources available (Motion build)

# ── Core / training ──────────────────────────────────────────────────────────
numpy==2.2.6
torch==2.5.1+cu124
# Pulled in by the CLIP text encoder (clip/clip.py imports torchvision.transforms
# at module load). Pinned to the matching +cu124 build so pip cannot resolve a
# torchvision compiled against a different torch/CUDA and drag torch with it.
torchvision==0.20.1+cu124
torch-geometric==2.7.0          # GCN graph embedding (use_graph_emb)
torchdiffeq==0.2.5              # ODE/SDE integrators for flow matching
einops==0.8.2
accelerate==1.14.0              # multi-GPU + mixed-precision training; transformers 5.x needs >=1.1
tensorboard==2.20.0             # training logs (SummaryWriter)

# ── Text conditioning (T5 / CLIP / BERT) & VLM captioning ────────────────────
transformers==5.16.1            # T5/BERT text encoders; local Qwen3-VL captioner needs >=4.57, Qwen3.5 (qwen3_5 arch) needs 5.x
sentencepiece==0.2.1            # T5 tokenizer backend
clip @ git+https://github.com/openai/CLIP.git   # CLIP text encoder
# spaCy must stay on the 3.8 line: the model wheel below is built for it and a
# 3.9/4.x resolution would install a spaCy that cannot load it.
spacy>=3.8,<3.9                 # T5 conditioner text normalization
# spaCy language model. Listing it here keeps offline compute nodes working:
# the code's spacy.cli.download fallback needs internet access.
en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl
num2words==0.5.14               # number → word expansion in text normalization
openai==3.3.1                   # OpenAI-compatible backends (captioning; DeepSeek/GPT joint annotation)
google-genai==2.19.0            # Gemini caption backend ("from google import genai")

# OPTIONAL — fused attention for the local Qwen3-VL captioner. The loader
# falls back to SDPA when absent, and the prebuilt wheels only exist for a
# few exact torch/CUDA/Python combinations (a source build takes an hour+),
# so it is not installed by default:
#   pip install flash-attn==2.7.4.post1 --no-build-isolation

# ── Hugging Face Hub ─────────────────────────────────────────────────────────
# Also a transformers dependency, but listed on its own because the download
# stage shells out to the `hf` CLI this package installs
# (data_process/scripts/run_download.sh). The standalone installer at
# https://hf.co/cli/install.sh works too if you prefer it outside the env.
huggingface_hub==1.29.0

# ── Motion / animation library (Holden-style Animation / Quaternions /
#    InverseKinematics; used across data_process/) ───────────────────────────
Motion @ git+https://github.com/inbar-2344/Motion.git

# ── Blender as a Python module (motion_export/, motion_rendering/,
#    mesh_animation/). The EEVEE render stage requires the pip module;
#    export/animate can alternatively run via `blender -b -P`. Pinned to the
#    last cp310 release, served from download.blender.org (see index above);
#    4.1+ drops Python 3.10 and 4.2+ changes the EEVEE API. ──────────────────
bpy==4.0.0

# ── Visualization / imaging ──────────────────────────────────────────────────
matplotlib==3.10.8
imageio==2.37.3
imageio-ffmpeg==0.6.0           # mp4 encoding backend for imageio
pillow==12.2.0

# ── CLI / logging ────────────────────────────────────────────────────────────
tyro==1.0.12                    # config + CLI overrides
rich==14.3.3
loguru==0.7.3
tqdm==4.67.3
