# Sweep targets are auto-discovered from configs/*.yaml (see the pattern rule below), so any # new config becomes runnable as `make ` with no Makefile edit. SWEEP_CONFIGS := $(patsubst configs/%.yaml,%,$(wildcard configs/*.yaml)) .PHONY: install $(SWEEP_CONFIGS) figures verify test test-slow test-all lint clean VENV ?= .venv PY := $(VENV)/bin/python PIP := $(VENV)/bin/pip # Pin BLAS/OpenMP to a single thread so joblib's N worker processes don't oversubscribe # the cores (numpy in each worker would otherwise each spawn a full BLAS thread pool). export OMP_NUM_THREADS := 1 export OPENBLAS_NUM_THREADS := 1 export MKL_NUM_THREADS := 1 export NUMEXPR_NUM_THREADS := 1 $(VENV): python3 -m venv $(VENV) $(PIP) install --upgrade pip install: $(VENV) $(PIP) install -e ".[dev,accel]" # accel = numba (per-node measurement speedup) # Run any sweep config by its file stem, e.g. `make smoke`, `make default`, `make fullscale` # (or any new configs/.yaml). Each writes results + figures into a fresh dated folder under # runs/ (runs/_