# Created by BVH & VG, Jul 2025.

import os
from hydra.core.config_store import ConfigStore
from custom.experiment.template import template_any4d_2b

#################################################################

debug = True # False

#################################################################

job = dict(
    project='a4d2',
    group='cvpr',
    name='mixed_2v',
    prepend_datetime=True,
)

wandb = dict(
    enabled=not debug,
    entity='tri',
    project='a4d2_cvpr',
    num_validation_logs=5,
)

any4d_config = dict(
    # NOTE(bvh): pre-refactor flat fields are deprecated; semantics now in data_*_overrides.
    # override_zero_origin=True,        # was commented out pre-refactor too (deliberate for mixed_*)
    # override_temporal_stride_val=1,
    data_val_overrides=dict(frame_stride=1),
    # transforms='default_zo1',
    transforms='default_fitorigin',
    dataloader='basile',
    vae='a4d_vae',
    self_sharing=3,
    video_entries=[
        dict(
            rgb0=(0, 16, 'load', 'load'),
            rgb0_input_mask=(16, 17, 'load', None),
            rgb0_output_mask=(17, 18, 'zero', None),
            cams0=(18, 50, 'zero/load', 'zero/load'),
            cams0_input_mask=(50, 51, 'zero/load', None),
            cams0_output_mask=(51, 52, 'zero', None),
        ),
        dict(
            rgb1=(0, 16, 'copy:rgb0/load', 'copy:rgb0/load'),
            rgb1_input_mask=(16, 17, 'copy:rgb0_input_mask/load', None),
            rgb1_output_mask=(17, 18, 'zero', None),
            cams1=(18, 50, 'zero/load', 'zero/load'),
            cams1_input_mask=(50, 51, 'zero/load', None),
            cams1_output_mask=(51, 52, 'zero', None),
        ),
    ],
    # lowdim_adaln_entries=dict(
    #     scale_factor=(0, 1, 0, 1, 'zero'),
    #     scale_factor_input_mask=(0, 1, 1, 2, 'zero'),
    # ),
    num_views=2,
    video_concat_mode='view',
    video_proj_mode='per_view',
    loss_weights=dict(
        rgb0=1.0,
        rgb1=1.0,
        rgb2=1.0,
        rgb3=1.0,
    ),
    harmonize_streams=True,
    harmonize_frames=True,
    load_modals=['rgb','cams'],
    lbm_real_modals=['rgb','cams'],
    task_probs=dict(
        cross_modal=0.0,
        dyn_view_synth=1.0,
        forecast=0.0,
        pose_est=0.0,
        inv_dyn=0.0,
        policy=0.0,
        world_model=0.0,
    ),
    use_views='rand2',
    track_metrics=dict(
        rgb0=['psnr','ssim'],
        rgb1=['psnr','ssim'],
    ),
    train_visuals_interval=0,
    train_visuals_detail=0,
    val_visuals_detail=1,
    train_directives=dict(
        tasks=[
            'rgb_v[1]->rgb_v[1]',
        ],
        num_pred_views=1,
    ),
    val_directives=dict(
        tasks=[
            'rgb_v[1]->rgb_v[1]',
        ],
        num_pred_views=1,
        remove_cond=True,
    ),
)

#################################################################

S3_PRETRAINED_PREFIX = r's3://tri-ml-sandbox-16011-us-west-2-datasets/cosmos-predict-2/checkpoints'

model = dict( 
    # dit_path='',
    # dit_path=f'{S3_PRETRAINED_PREFIX}/nvidia/Cosmos-Predict2-2B-Video2World/model-480p-10fps.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-17-01-54_official3/model/iter_000006000_003072000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-17-01-54_official3/model/iter_000008000_004096000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-17-01-54_official3/model/iter_000010000_005120000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-17-01-54_official3/model/iter_000014000_007168000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-17-01-54_official3/model/iter_000016000_008192000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-17-01-54_official3/model/iter_000020000_010240000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-23-03-23_officialA/model/iter_000002000_001024000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-24-19-03_officialC/model/iter_000001000_000512000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-24-20-37_officialC/model/iter_000002500_001280000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-25-17-13_officialD6/model/iter_000000200_000076800.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-25-19-46_officialD8/model/iter_000000800_000409600.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-25-17-13_officialD6/model/iter_000003000_001152000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-27-19-05_official16HR/model/iter_000000200_000102400.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-28-02-33_officialHR6b/model/iter_000000700_000134400.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-28-17-03_officialHR6c/model/iter_000000300_000057600.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-29-01-04_officialHR16d/model/iter_000001500_000384000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-29-16-49_officialHR8e/model/iter_000000600_000153600.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-29-01-04_officialHR16d/model/iter_000002250_000576000.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-28-17-03_officialHR6c/model/iter_000004700_000902400.pt',
    # dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-31-19-46_officialHR2v/model/iter_000008600_001651200.pt',
    dit_path='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/a4d2/cvpr/10-31-19-46_officialHR2v/model/iter_000008700_001670400.pt',
    text_encoder_path='',
    # text_encoder_path=f'{S3_PRETRAINED_PREFIX}/google-t5/t5-11b',
    vae_path=f'{S3_PRETRAINED_PREFIX}/nvidia/Cosmos-Predict2-2B-Video2World/tokenizer/tokenizer.pth',
    fsdp_shard_size=8,
    ############
    run_validation=not debug,
    validation_iter=200,
    max_iter=25000,
    grad_accum_iter=1,
    context_parallel_size=1,
    device_monitor=0,
    manual_gc_iter=288,
    manual_gc_warm_up=-1,
    ############
    state_t=11, 
    tokenizer_chunk_duration=41,
)

checkpoint = dict(
    save_iter=200,
    s3_folder='s3://tri-ml-sandbox-16011-us-west-2-datasets/sagemaker/cosmos-predict2/',
    early_sanity_check=-1,
)

optimizer = dict(
    lr=2.0e-6,
)

scheduler = dict(
    warm_up_steps = [1000], # [1000],
    cycle_lengths = [model['max_iter']],
    f_start=[0.01],
    f_max=[1.0],
    f_min=[0.05],
)

dataset_train = dict(
    # config='custom/config/cvpr/mixed/train_2v.yaml',
    config='custom/config/cvpr/mixed/train_2v_32gpu.yaml',
    num_workers=4,
    # batch_size=4,
    batch_size=4,
)

# dataset_val = dict(
#     config=dict(
#         ### 4D
#         AssemblyHandsQNT = 'custom/config/cvpr/quant_v2/assemblyhands.yaml',  # 64
#         DyCheckM5QNT = 'custom/config/cvpr/quant_v2/dycheckm_5seq.yaml',  # 76
#         EgoExo4DID01QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_01.yaml',  # 8
#         EgoExo4DID12QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_12.yaml',  # 8
#         EgoExo4DID23QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_23.yaml',  # 8
#         EgoExo4DID30QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_30.yaml',  # 8
#         EgoExo4DID10QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_10.yaml',  # 8
#         EgoExo4DID21QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_21.yaml',  # 8
#         EgoExo4DID32QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_32.yaml',  # 8
#         EgoExo4DID03QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_03.yaml',  # 8
#         EgoExo4DOOD01QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_01.yaml',  # 8
#         EgoExo4DOOD12QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_12.yaml',  # 8
#         EgoExo4DOOD23QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_23.yaml',  # 8
#         EgoExo4DOOD30QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_30.yaml',  # 8
#         EgoExo4DOOD10QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_10.yaml',  # 8
#         EgoExo4DOOD21QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_21.yaml',  # 8
#         EgoExo4DOOD32QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_32.yaml',  # 8
#         EgoExo4DOOD03QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_03.yaml',  # 8
#         Kubric4DGradQNT = 'custom/config/cvpr/quant_v2/kubric4d_grad.yaml',  # 40
#         Kubric4DDirQNT = 'custom/config/cvpr/quant_v2/kubric4d_dir.yaml',  # 40
#         Kubric5DQNT = 'custom/config/cvpr/quant_v2/kubric5d.yaml',  # 64
#         ### DRIVING
#         Argoverse2SyncFLQNT = 'custom/config/cvpr/quant_v2/argoverse_FL.yaml',  # 16
#         Argoverse2SyncFRQNT = 'custom/config/cvpr/quant_v2/argoverse_FR.yaml',  # 16
#         Argoverse2SyncLFQNT = 'custom/config/cvpr/quant_v2/argoverse_LF.yaml',  # 16
#         Argoverse2SyncRFQNT = 'custom/config/cvpr/quant_v2/argoverse_RF.yaml',  # 16
#         DDADFLQNT = 'custom/config/cvpr/quant_v2/ddad_FL.yaml',  # 16
#         DDADFRQNT = 'custom/config/cvpr/quant_v2/ddad_FR.yaml',  # 16
#         DDADLFQNT = 'custom/config/cvpr/quant_v2/ddad_LF.yaml',  # 16
#         DDADRFQNT = 'custom/config/cvpr/quant_v2/ddad_RF.yaml',  # 16
#         LyftL5FLQNT = 'custom/config/cvpr/quant_v2/lyftl5_FL.yaml',  # 16
#         LyftL5FRQNT = 'custom/config/cvpr/quant_v2/lyftl5_FR.yaml',  # 16
#         LyftL5LFQNT = 'custom/config/cvpr/quant_v2/lyftl5_LF.yaml',  # 16
#         LyftL5RFQNT = 'custom/config/cvpr/quant_v2/lyftl5_RF.yaml',  # 16
#         PD4DQNT = 'custom/config/cvpr/quant_v2/pd4d.yaml',  # 64
#         PD4DDirQNT = 'custom/config/cvpr/quant_v2/pd4d_dir.yaml',  # 20
#         PD4DGradQNT = 'custom/config/cvpr/quant_v2/pd4d_grad.yaml',  # 20
#         WaymoFLQNT = 'custom/config/cvpr/quant_v2/waymo_FL.yaml',  # 16
#         WaymoFRQNT = 'custom/config/cvpr/quant_v2/waymo_FR.yaml',  # 16
#         WaymoLFQNT = 'custom/config/cvpr/quant_v2/waymo_LF.yaml',  # 16
#         WaymoRFQNT = 'custom/config/cvpr/quant_v2/waymo_RF.yaml',  # 16
#         ### ROBOTICS
#         DROIDIDLRQNT = 'custom/config/cvpr/quant_v2/droid_ID_LR.yaml',  # 32
#         DROIDIDRLQNT = 'custom/config/cvpr/quant_v2/droid_ID_RL.yaml',  # 32
#         DROIDOODLRQNT = 'custom/config/cvpr/quant_v2/droid_OOD_LR.yaml',  # 32
#         DROIDOODRLQNT = 'custom/config/cvpr/quant_v2/droid_OOD_RL.yaml',  # 32
#         LBMv12LRQNT = 'custom/config/cvpr/quant_v2/lbmv12_LR.yaml',  # 32
#         LBMv12RLQNT = 'custom/config/cvpr/quant_v2/lbmv12_RL.yaml',  # 32
#     ),
#     params=dict(
#         resize=1.5,
#     ),
#     num_workers=0,  # can crash debugger otherwise
#     batch_size=1,
# )


# dataset_val = dict(
#     config=dict(
#         ### 3D
#         DL3DVQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/3d/dl3dv.yaml',
#         MVImgNetQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/3d/mvimgnet.yaml',
#         RE10KQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/3d/re10k.yaml',
#         ScanNetQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/3d/scannet.yaml',
#         TartanAirQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/3d/tartanair.yaml',
#         WildRGBDQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/3d/wildrgbd.yaml',
#         ### 4D
#         AssemblyHandsQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/4d/assemblyhands.yaml',
#         # DyCheckMQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/4d/dycheckm.yaml',
#         EgoExo4DIDQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/4d/egoexo4d_ID.yaml',
#         EgoExo4DOODQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/4d/egoexo4d_OOD.yaml',
#         # GCDK4DDirQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/4d/kubric4d_dir.yaml',
#         # GCDK4DGradQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/4d/kubric4d_grad.yaml',
#         # Kubric4DQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/4d/kubric4d.yaml',  # freezes?
#         Kubric5DQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/4d/kubric5d.yaml',
#         ### DRIVING
#         ArgoverseQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/driving/argoverse.yaml',
#         DDADQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/driving/ddad.yaml',
#         LyftL5QL = 'custom/config/cvpr/mixed/val_2v/qual_slow/driving/lyftl5.yaml',
#         PD4DQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/driving/pd4d.yaml',
#         # GCDPD4DDirQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/driving/pd4d_dir.yaml',
#         # GCDPD4DGradQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/driving/pd4d_grad.yaml',
#         WaymoQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/driving/waymo.yaml',
#         ### ROBOTICS
#         DROIDIDQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/robotics/droid_ID.yaml',
#         DROIDOODQL = 'custom/config/cvpr/mixed/val_2v/qual_slow/robotics/droid_OOD.yaml',
#         LBMv12QL = 'custom/config/cvpr/mixed/val_2v/qual_slow/robotics/lbmv12.yaml',
#     ),
#     num_workers=0,  # can crash debugger otherwise
#     batch_size=1,
#     params=dict(
#         resize=1.5,
#     ),
# )



dataset_val = dict(
    config=dict(
        # ### DRIVING
        ArgoVerse2sync  = 'custom/config/cvpr/mixed/val_2v/argoverse2sync.yaml',
        DDADfront       = 'custom/config/cvpr/mixed/val_2v/ddad_front.yaml',
        # DDADside        = 'custom/config/cvpr/mixed/val_2v/ddad_side.yaml',
        # Waymo           = 'custom/config/cvpr/mixed/val_2v/waymo.yaml',
        # LyftL5          = 'custom/config/cvpr/mixed/val_2v/lyftl5.yaml',
        ### ROBOTICS
        DROIDCalibID    = 'custom/config/cvpr/mixed/val_2v/droidcalib_id.yaml',
        DROIDCalibOOD   = 'custom/config/cvpr/mixed/val_2v/droidcalib_ood.yaml',
        # LBMv12          = 'custom/config/cvpr/mixed/val_2v/lbmv12.yaml',
        ### 3D
        # TartanAir       = 'custom/config/cvpr/mixed/val_2v/tartanair.yaml',
        # DL3DV           = 'custom/config/cvpr/mixed/val_2v/dl3dv.yaml',
        # MVImgNet        = 'custom/config/cvpr/mixed/val_2v/mvimgnet.yaml',
        # RE10K           = 'custom/config/cvpr/mixed/val_2v/re10k.yaml',
        # WildRGBD        = 'custom/config/cvpr/mixed/val_2v/wildrgbd.yaml',
        # ScanNet         = 'custom/config/cvpr/mixed/val_2v/scannet.yaml',
        ### 4D
        # Kubric4D        = 'custom/config/cvpr/mixed/val_2v/kubric4d.yaml',
        # Kubric5D        = 'custom/config/cvpr/mixed/val_2v/kubric5d.yaml',
        # PD4D            = 'custom/config/cvpr/mixed/val_2v/pd4d.yaml',
        GCDKubric4Ddir  = 'custom/config/cvpr/mixed/val_2v/gcd_kubric4d_dir.yaml',
        GCDKubric4Dgrad = 'custom/config/cvpr/mixed/val_2v/gcd_kubric4d_grad.yaml',
        GCDPD4Ddir     = 'custom/config/cvpr/mixed/val_2v/gcd_pd4d_dir.yaml',
        GCDPD4Dgrad     = 'custom/config/cvpr/mixed/val_2v/gcd_pd4d_grad.yaml',
        EgoExo4D        = 'custom/config/cvpr/mixed/val_2v/egoexo4d.yaml',
        DyCheck         = 'custom/config/cvpr/mixed/val_2v/dycheck.yaml',
    ),
    # params=dict(
    #     resize=1.5,
    # ),
    num_workers=1,
    batch_size=1,
)

# dataset_val = dict(
#     config=dict(
#         ### 3D
#         DL3DV0QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/dl3dv_0.yaml',  # 64
#         # DL3DV1QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/dl3dv_1.yaml',  # 64
#         # MVImgNet0QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/mvimgnet_0.yaml',  # 36
#         # MVImgNet1QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/mvimgnet_1.yaml',  # 36
#         RE10K0QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/re10k_0.yaml',  # 64
#         # RE10K1QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/re10k_1.yaml',  # 64
#         ScanNet0QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/scannet_0.yaml',  # 64
#         # ScanNet1QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/scannet_1.yaml',  # 64
#         WildRGBD0QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/wildrgbd_0.yaml',  # 64
#         # WildRGBD1QNT = 'custom/config/cvpr/mixed/val_2v/quant/3d/wildrgbd_1.yaml',  # 64
#         ### 4D
#         # DyCheckM5QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/dycheckm_5seq.yaml',  # 76
#         # DyCheckM6QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/dycheckm_6seq.yaml',  # 93
#         EgoExo4DID01QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_ID_01.yaml',  # 16
#         EgoExo4DID12QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_ID_12.yaml',  # 16
#         EgoExo4DID23QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_ID_23.yaml',  # 16
#         EgoExo4DID30QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_ID_30.yaml',  # 16
#         EgoExo4DID10QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_ID_10.yaml',  # 16
#         EgoExo4DID21QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_ID_21.yaml',  # 16
#         EgoExo4DID32QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_ID_32.yaml',  # 16
#         EgoExo4DID03QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_ID_03.yaml',  # 16
#         EgoExo4DOOD01QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_OOD_01.yaml',  # 16
#         EgoExo4DOOD12QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_OOD_12.yaml',  # 16
#         EgoExo4DOOD23QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_OOD_23.yaml',  # 16
#         EgoExo4DOOD30QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_OOD_30.yaml',  # 16
#         EgoExo4DOOD10QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_OOD_10.yaml',  # 16
#         EgoExo4DOOD21QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_OOD_21.yaml',  # 16
#         EgoExo4DOOD32QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_OOD_32.yaml',  # 16
#         EgoExo4DOOD03QNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/egoexo4d_OOD_03.yaml',  # 16
#         Kubric4DQNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/kubric4d.yaml',  # 64
#         Kubric5DQNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/kubric5d.yaml',  # 128
#         # Kubric4DGradQNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/kubric4d_grad.yaml',  # 80
#         # Kubric4DDirQNT = 'custom/config/cvpr/mixed/val_2v/quant/4d/kubric4d_dir.yaml',  # 80
#         ### DRIVING
#         Argoverse2SyncFLQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/argoverse_FL.yaml',  # 64
#         Argoverse2SyncFRQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/argoverse_FR.yaml',  # 64
#         Argoverse2SyncLFQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/argoverse_LF.yaml',  # 64
#         Argoverse2SyncRFQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/argoverse_RF.yaml',  # 64
#         DDADFLQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/ddad_FL.yaml',  # 64
#         DDADFRQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/ddad_FR.yaml',  # 64
#         DDADLFQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/ddad_LF.yaml',  # 64
#         DDADRFQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/ddad_RF.yaml',  # 64
#         LyftL5FLQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/lyftl5_FL.yaml',  # 64
#         LyftL5FRQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/lyftl5_FR.yaml',  # 64
#         LyftL5LFQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/lyftl5_LF.yaml',  # 64
#         LyftL5RFQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/lyftl5_RF.yaml',  # 64
#         PD4DQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/pd4d.yaml',  # 128
#         # PD4DDirQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/pd4d_dir.yaml',  # 20
#         # PD4DGradQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/pd4d_grad.yaml',  # 20
#         WaymoFLQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/waymo_FL.yaml',  # 64
#         WaymoFRQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/waymo_FR.yaml',  # 64
#         WaymoLFQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/waymo_LF.yaml',  # 64
#         WaymoRFQNT = 'custom/config/cvpr/mixed/val_2v/quant/driving/waymo_RF.yaml',  # 64
#         ### ROBOTICS
#         DROIDIDLRQNT = 'custom/config/cvpr/mixed/val_2v/quant/robotics/droid_ID_LR.yaml',  # 64
#         DROIDIDRLQNT = 'custom/config/cvpr/mixed/val_2v/quant/robotics/droid_ID_RL.yaml',  # 64
#         DROIDOODLRQNT = 'custom/config/cvpr/mixed/val_2v/quant/robotics/droid_OOD_LR.yaml',  # 64
#         DROIDOODRLQNT = 'custom/config/cvpr/mixed/val_2v/quant/robotics/droid_OOD_RL.yaml',  # 64
#         LBMv12LRQNT = 'custom/config/cvpr/mixed/val_2v/quant/robotics/lbmv12_LR.yaml',  # 64
#         LBMv12RLQNT = 'custom/config/cvpr/mixed/val_2v/quant/robotics/lbmv12_RL.yaml',  # 64
#     ),
#     params=dict(
#         resize=1.5,
#     ),
#     num_workers=0,  # can crash debugger otherwise
#     batch_size=1,
# )

# dataset_val = dict(
#     config=dict(
#         ### 4D
#         AssemblyHandsQNT = 'custom/config/cvpr/quant_v2/assemblyhands.yaml',  # 64
#         # DyCheckM5QNT = 'custom/config/cvpr/quant_v2/dycheckm_5seq.yaml',  # 76
#         EgoExo4DID01QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_01.yaml',  # 8
#         EgoExo4DID12QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_12.yaml',  # 8
#         EgoExo4DID23QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_23.yaml',  # 8
#         EgoExo4DID30QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_30.yaml',  # 8
#         EgoExo4DID10QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_10.yaml',  # 8
#         EgoExo4DID21QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_21.yaml',  # 8
#         EgoExo4DID32QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_32.yaml',  # 8
#         EgoExo4DID03QNT = 'custom/config/cvpr/quant_v2/egoexo4d_ID_03.yaml',  # 8
#         EgoExo4DOOD01QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_01.yaml',  # 8
#         EgoExo4DOOD12QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_12.yaml',  # 8
#         EgoExo4DOOD23QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_23.yaml',  # 8
#         EgoExo4DOOD30QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_30.yaml',  # 8
#         EgoExo4DOOD10QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_10.yaml',  # 8
#         EgoExo4DOOD21QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_21.yaml',  # 8
#         EgoExo4DOOD32QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_32.yaml',  # 8
#         EgoExo4DOOD03QNT = 'custom/config/cvpr/quant_v2/egoexo4d_OOD_03.yaml',  # 8
#         # Kubric4DGradQNT = 'custom/config/cvpr/quant_v2/kubric4d_grad.yaml',  # 40
#         # Kubric4DDirQNT = 'custom/config/cvpr/quant_v2/kubric4d_dir.yaml',  # 40
#         Kubric5DQNT = 'custom/config/cvpr/quant_v2/kubric5d.yaml',  # 64
#         ### DRIVING
#         Argoverse2SyncFLQNT = 'custom/config/cvpr/quant_v2/argoverse_FL.yaml',  # 16
#         Argoverse2SyncFRQNT = 'custom/config/cvpr/quant_v2/argoverse_FR.yaml',  # 16
#         Argoverse2SyncLFQNT = 'custom/config/cvpr/quant_v2/argoverse_LF.yaml',  # 16
#         Argoverse2SyncRFQNT = 'custom/config/cvpr/quant_v2/argoverse_RF.yaml',  # 16
#         DDADFLQNT = 'custom/config/cvpr/quant_v2/ddad_FL.yaml',  # 16
#         DDADFRQNT = 'custom/config/cvpr/quant_v2/ddad_FR.yaml',  # 16
#         DDADLFQNT = 'custom/config/cvpr/quant_v2/ddad_LF.yaml',  # 16
#         DDADRFQNT = 'custom/config/cvpr/quant_v2/ddad_RF.yaml',  # 16
#         LyftL5FLQNT = 'custom/config/cvpr/quant_v2/lyftl5_FL.yaml',  # 16
#         LyftL5FRQNT = 'custom/config/cvpr/quant_v2/lyftl5_FR.yaml',  # 16
#         LyftL5LFQNT = 'custom/config/cvpr/quant_v2/lyftl5_LF.yaml',  # 16
#         LyftL5RFQNT = 'custom/config/cvpr/quant_v2/lyftl5_RF.yaml',  # 16
#         PD4DQNT = 'custom/config/cvpr/quant_v2/pd4d.yaml',  # 64
#         # PD4DDirQNT = 'custom/config/cvpr/quant_v2/pd4d_dir.yaml',  # 20
#         # PD4DGradQNT = 'custom/config/cvpr/quant_v2/pd4d_grad.yaml',  # 20
#         WaymoFLQNT = 'custom/config/cvpr/quant_v2/waymo_FL.yaml',  # 16
#         WaymoFRQNT = 'custom/config/cvpr/quant_v2/waymo_FR.yaml',  # 16
#         WaymoLFQNT = 'custom/config/cvpr/quant_v2/waymo_LF.yaml',  # 16
#         WaymoRFQNT = 'custom/config/cvpr/quant_v2/waymo_RF.yaml',  # 16
#         ### ROBOTICS
#         DROIDIDLRQNT = 'custom/config/cvpr/quant_v2/droid_ID_LR.yaml',  # 32
#         DROIDIDRLQNT = 'custom/config/cvpr/quant_v2/droid_ID_RL.yaml',  # 32
#         DROIDOODLRQNT = 'custom/config/cvpr/quant_v2/droid_OOD_LR.yaml',  # 32
#         DROIDOODRLQNT = 'custom/config/cvpr/quant_v2/droid_OOD_RL.yaml',  # 32
#         LBMv12LRQNT = 'custom/config/cvpr/quant_v2/lbmv12_LR.yaml',  # 32
#         LBMv12RLQNT = 'custom/config/cvpr/quant_v2/lbmv12_RL.yaml',  # 32
#     ),
#     params=dict(
#         resize=1.5,
#     ),
#     num_workers=0,  # can crash debugger otherwise
#     batch_size=1,
# )

metrics = dict(
    gt_source='gt',
    modes=['r','rpv','apv'], # ,'ipv'],
    rgb=dict(),
)

#################################################################

cs = ConfigStore.instance()

this_config = template_any4d_2b(
    job, wandb, any4d_config, model, 
    checkpoint, optimizer, scheduler, metrics,
    dataset_train, dataset_val)

experiment_name = 'cvpr_' + os.path.splitext(os.path.basename(__file__))[0]

cs.store(
    group='experiment',
    package='_global_',
    name=experiment_name,
    node=this_config,
)




#################### OFFICIAL EVALUATION (NOT READY)
# dataset_val = dict(
#     config=dict(
#         ### DRIVING
#         ArgoVerse2sync_FL  = 'custom/config/cvpr/mixed/val_2v/argoverse2sync_FL.yaml',
#         ArgoVerse2sync_FR  = 'custom/config/cvpr/mixed/val_2v/argoverse2sync_FR.yaml',
#         ArgoVerse2sync_LF  = 'custom/config/cvpr/mixed/val_2v/argoverse2sync_LF.yaml',
#         ArgoVerse2sync_RF  = 'custom/config/cvpr/mixed/val_2v/argoverse2sync_RF.yaml',
#         DDAD_FL       = 'custom/config/cvpr/mixed/val_2v/ddad_FL.yaml',
#         DDAD_FR       = 'custom/config/cvpr/mixed/val_2v/ddad_FR.yaml',
#         DDAD_LF       = 'custom/config/cvpr/mixed/val_2v/ddad_LF.yaml',
#         DDAD_RF       = 'custom/config/cvpr/mixed/val_2v/ddad_RF.yaml',
#         Waymo_FL       = 'custom/config/cvpr/mixed/val_2v/waymo_FL.yaml',
#         Waymo_FR       = 'custom/config/cvpr/mixed/val_2v/waymo_FR.yaml',
#         Waymo_LF       = 'custom/config/cvpr/mixed/val_2v/waymo_LF.yaml',
#         Waymo_RF       = 'custom/config/cvpr/mixed/val_2v/waymo_RF.yaml',
#         LyftL5_FL       = 'custom/config/cvpr/mixed/val_2v/lyftl5_FL.yaml',
#         LyftL5_FR       = 'custom/config/cvpr/mixed/val_2v/lyftl5_FR.yaml',
#         LyftL5_LF       = 'custom/config/cvpr/mixed/val_2v/lyftl5_LF.yaml',
#         LyftL5_RF       = 'custom/config/cvpr/mixed/val_2v/lyftl5_RF.yaml',
#         ### ROBOTICS
#         DROID_ID_LR    = 'custom/config/cvpr/mixed/val_2v/droidcalibv2_ID_LR.yaml',
#         DROID_ID_RL    = 'custom/config/cvpr/mixed/val_2v/droidcalibv2_ID_RL.yaml',
#         DROID_OOD_LR    = 'custom/config/cvpr/mixed/val_2v/droidcalibv2_OOD_LR.yaml',
#         DROID_OOD_RL    = 'custom/config/cvpr/mixed/val_2v/droidcalibv2_OOD_RL.yaml',
#         LBMv12_LR          = 'custom/config/cvpr/mixed/val_2v/lbmv12_LR.yaml',
#         LBMv12_RL          = 'custom/config/cvpr/mixed/val_2v/lbmv12_RL.yaml',
#         ### 3D
#         GCDKubric4Dgrad = 'custom/config/cvpr/mixed/val_2v/gcd_kubric4d_grad.yaml',
#         GCDKubric4Ddir  = 'custom/config/cvpr/mixed/val_2v/gcd_kubric4d_dir.yaml',
#         GCDPD4Dgrad     = 'custom/config/cvpr/mixed/val_2v/gcd_pd4d_grad.yaml',
#         GCDPD4Ddir     = 'custom/config/cvpr/mixed/val_2v/gcd_pd4d_dir.yaml',
#         # TartanAir       = 'custom/config/cvpr/mixed/val_2v/tartanair.yaml',
#         # DL3DV           = 'custom/config/cvpr/mixed/val_2v/dl3dv.yaml',
#         # MVImgNet        = 'custom/config/cvpr/mixed/val_2v/mvimgnet.yaml',
#         # RE10K           = 'custom/config/cvpr/mixed/val_2v/re10k.yaml',
#         # WildRGBD        = 'custom/config/cvpr/mixed/val_2v/wildrgbd.yaml',
#         # ScanNet         = 'custom/config/cvpr/mixed/val_2v/scannet.yaml',
#         ### 4D
#         # Kubric4D        = 'custom/config/cvpr/mixed/val_2v/kubric4d.yaml',
#         # Kubric5D        = 'custom/config/cvpr/mixed/val_2v/kubric5d.yaml',
#         # PD4D            = 'custom/config/cvpr/mixed/val_2v/pd4d.yaml',
#         GCDKubric4Dgrad = 'custom/config/cvpr/mixed/val_2v/gcd_kubric4d_grad.yaml',
#         GCDKubric4Ddir  = 'custom/config/cvpr/mixed/val_2v/gcd_kubric4d_dir.yaml',
#         GCDPD4Ddir     = 'custom/config/cvpr/mixed/val_2v/gcd_pd4d_dir.yaml',
#         GCDPD4Dgrad     = 'custom/config/cvpr/mixed/val_2v/gcd_pd4d_grad.yaml',
#         # EgoExo4D        = 'custom/config/cvpr/mixed/val_2v/egoexo4d.yaml',
#         DyCheck         = 'custom/config/cvpr/mixed/val_2v/dycheck.yaml',
#         # DyCheck5        = 'custom/config/cvpr/mixed/val_2v/dycheck5.yaml',
#     ),
#     params=dict(
#         resize=1.5,
#     ),
#     num_workers=1,
#     batch_size=1,
# )
