# Notebook dependencies. See README.md.
#
# The generation loop is plain transformers so that checkpoints are swappable;
# reasoning-from-scratch is here only for the ch03 grading harness and ch02's
# get_device, both of which are model-agnostic.

torch>=2.7,<2.11
transformers>=4.56        # 4.51+ for the Qwen3 chat template's enable_thinking flag; 4.56+
                          # because from_pretrained's dtype= argument was spelled torch_dtype=
                          # before that, and older versions swallow the new name into config
                          # kwargs and load the model in fp32 without saying so
accelerate>=0.30
tokenizers>=0.21.2

reasoning-from-scratch>=0.2.0   # ch02 get_device, ch03 grading harness
sympy>=1.14.0                   # grade_answer's equivalence check
requests>=2.31                  # load_math500_test fetches the dataset on first run

matplotlib>=3.9
numpy>=1.26                     # page 6's flip-point strip is an image of a boolean matrix
jupyterlab>=4.4
huggingface_hub>=0.24           # manifest records the model repo revision
tqdm>=4.66                      # sweep bars, and the harness's downloaded/total fetch bar

# bitsandbytes>=0.43            # only for page 6's LOAD_IN_4BIT fallback on small VRAM
