# Hydra Configuration Example
# This demonstrates the config structure for training pipeline

# Run with: python train.py --config-name=config_example

defaults:
  - training: default
  - dataset: brain_decoder
  - model: transformer
  - override hydra/launcher: submitit_local

# Project settings
project_name: brain_decoder
experiment_name: transformer_baseline

# Random seed
seed: 42

# Device settings
device: cuda
num_workers: 4
pin_memory: true

# Training configuration
training:
  epochs: 100
  batch_size: 32
  learning_rate: 0.001
  weight_decay: 0.0001
  gradient_clip: 1.0
  early_stopping:
    patience: 10
    min_delta: 0.001

  # Optimizer settings
  optimizer: adamw
  optimizer_params:
    betas: [0.9, 0.999]
    eps: 1.0e-08

  # Scheduler settings
  scheduler: cosine
  scheduler_params:
    warmup_epochs: 10
    min_lr: 1.0e-06

  # Checkpoint settings
  checkpoint:
    save_every: 5
    save_best: true
    monitor: val_loss
    mode: min

# Dataset configuration
dataset:
  name: brain_decoder
  task: movement_classification
  target_size:
    movement_classification: 5
    reconstruction: [64, 64]

  # Data paths
  data_dir: ${dir.data_dir}/processed
  train_split: train
  val_split: val
  test_split: test

  # Data loading
  num_channels: 64
  sampling_rate: 1000
  sequence_length: 1000

  # Augmentation
  augmentation:
    name: composed
    time_shift: true
    amplitude_scale: true
    gaussian_noise: true
    max_shift: 10
    min_scale: 0.8
    max_scale: 1.2
    noise_mean: 0.0
    noise_std: 0.1

# Model configuration
model:
  name: Transformer
  hidden_dim: 256
  num_heads: 8
  num_layers: 6
  dropout: 0.1
  activation: gelu

  # Architecture specific
  encoder:
    input_dim: 64
    embedding_dim: 256
    positional_encoding: true

  decoder:
    output_dim: ${dataset.target_size.${dataset.task}}
    pooling: avg

# Logging configuration
logging:
  logger: wandb
  log_every: 10
  log_grads: false

  # TensorBoard
  tensorboard: true
  histogram: true

  # W&B
  wandb:
    project: ${project_name}
    entity: null
    tags: ["baseline", "transformer"]

# Output directories
dir:
  data_dir: ./data
  output_dir: ./outputs
  log_dir: ${dir.output_dir}/logs
  checkpoint_dir: ${dir.output_dir}/checkpoints
  figure_dir: ${dir.output_dir}/figures
  table_dir: ${dir.output_dir}/tables

# Debug settings
debug: false
fast_dev_run: false
