#!/bin/bash
# Eval the new concat + dualfrustum models at 4 viewpoints (same matrix as Phase A viewpoint).

set -e
cd /data/cameron/para/libero

CKPT_CONCAT=/data/cameron/para/libero/checkpoints/libero_concat_v0/latest.pth
CKPT_DUAL=/data/cameron/para/libero/checkpoints/libero_dualfrustum_v0/latest.pth

LOG_DIR=/data/cameron/para/libero/logs/concat_dualfrustum_eval
mkdir -p $LOG_DIR

# (variant, theta, phi, label, gpu)
declare -a CELLS=(
    "concat  0    0    indist_default 0"
    "concat 14   45    indist_left    1"
    "concat 10  180    OOD_back       2"
    "concat 14  225    OOD_backleft   3"
    "dual    0    0    indist_default 4"
    "dual   14   45    indist_left    5"
    "dual   10  180    OOD_back       6"
    "dual   14  225    OOD_backleft   7"
)

run_cell() {
    local VAR=$1; local TH=$2; local PH=$3; local LABEL=$4; local GPU=$5
    local CKPT SCRIPT
    if [ "$VAR" = "concat" ]; then
        CKPT=$CKPT_CONCAT; SCRIPT=eval_libero_concat_ood.py
    else
        CKPT=$CKPT_DUAL; SCRIPT=eval_libero_dualfrustum_ood.py
    fi
    PYTHONPATH=/data/cameron/LIBERO LIBERO_DATA_PATH=/data/libero CUDA_VISIBLE_DEVICES=$GPU \
    DINO_REPO_DIR=/data/cameron/keygrip/dinov3 \
    DINO_WEIGHTS_PATH=/data/cameron/keygrip/dinov3/weights/dinov3_vits16plus_pretrain_lvd1689m-4057cbaa.pth \
    MUJOCO_GL=osmesa PYOPENGL_PLATFORM=osmesa \
    python $SCRIPT --checkpoint $CKPT \
        --n_episodes 10 --max_steps 600 \
        --teleport --zero_rotation --clean_scene \
        --cam_theta $TH --cam_phi $PH \
        > $LOG_DIR/${VAR}_th${TH}_ph${PH}_${LABEL}.log 2>&1
}

for cell in "${CELLS[@]}"; do
    read -r VAR TH PH LABEL GPU <<< "$cell"
    (run_cell $VAR $TH $PH $LABEL $GPU) &
done
wait

echo "=== concat + dualfrustum eval ==="
for cell in "${CELLS[@]}"; do
    read -r VAR TH PH LABEL GPU <<< "$cell"
    FILE=$LOG_DIR/${VAR}_th${TH}_ph${PH}_${LABEL}.log
    SR=$(grep "Success Rate" $FILE 2>/dev/null | head -1 | sed 's/.*Success Rate: //')
    echo "  $VAR th=$TH ph=$PH ($LABEL): $SR"
done
