args_dict = {
    'ENV_ID': 'Acrobot-v1',
    'SEED': 1,
    'NB_FRAMES': 10000,
    'BATCH_SIZE': 32,
    'DISCOUNT': 0.99,
    'TARGET_UPDATE_STEPS': 100,
    'LEARNING_RATE': 1e-3,
    'REPLAY_BUFFER_SIZE': 1000,
    'MIN_REPLAY_BUFFER_SIZE': 100,
    'EPSILON_START': 1,
    'EPSILON_END': 0.1,
    'EPSILON_DECAY_DURATION': 5000,
}
# Allow changing hyperparameters from command-line arguments
args = get_args(default_args=args_dict)

# Create wrapped environment
env = make_env(args.ENV_ID)

# Set Seed
set_seed(env, args.SEED)

# GPU or CPU
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

# Create agent
agent = Agent(env, device, args)

# Train agent for args.NB_FRAMES
agent.train()
            tdc.eval()
            cmc.eval()
            plot_tsne(tsne_loaders, tdc, cmc, device)
            tdc.train()
            cmc.train()
            tsne_end_t = time.time()
            print(
                "[pretrain] Updated t-SNE figure (Duration: {}s)".format(
                    tsne_end_t - tsne_start_t
                )
            )


if __name__ == "__main__":
    # Parse arguments
    args = get_args()

    # Setup wandb
    wandb.init(project="youtube")
    wandb.config.update(args)
    print("[pretrain] Wandb setup complete.")

    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

    dataset = TDCCMCDataset(
        filenames=["./data/6zXXZvVvTFs", "./data/2AYaxTiWKoY", "./data/sYbBgkP9aMo"],
        trims=[(960, 9960), (550, 9550), (1, 9901)],
        crops=[(35, 50, 445, 300), (0, 13, 640, 335), (5, 22, 475, 341)],
    )
    loader = DataLoader(
        dataset, batch_size=args.BATCH_SIZE, num_workers=0, pin_memory=True