---
tasks:
  - section: "Building Blocks"
    criteria:
      - class: "LayerNorm"
        method: ":forward"
        max_mark: 2
      - class: "MultiHeadAttention"
        method: ":attention"
        max_mark: 4
      - class: "MultiHeadAttention"
        method: ":forward"
        max_mark: 5
      - class: "FeedForwardLayer"
        method: ":forward"
        max_mark: 1
    sub_total: 12

  - section: "Architecture"
    criteria:
      - class: "TransformerEncoderLayer"
        method: ":pre_layer_norm_forward"
        max_mark: 2
      - class: "TransformerEncoderLayer"
        method: ":post_layer_norm_forward"
        max_mark: 1
      - class: "TransformerDecoderLayer"
        method: ":__init__"
        max_mark: 4
      - class: "TransformerDecoderLayer"
        method: ":pre_layer_norm_forward"
        max_mark: 2
      - class: "TransformerDecoderLayer"
        method: ":post_layer_norm_forward"
        max_mark: 2
      - class: "TransformerDecoder"
        method: ":forward"
        max_mark: 3
      - class: "TransformerEncoderDecoder"
        method: ":create_pad_mask"
        max_mark: 1
      - class: "TransformerEncoderDecoder"
        method: ":create_causal_mask"
        max_mark: 2
      - class: "TransformerEncoderDecoder"
        method: ":forward"
        max_mark: 3
    sub_total: 20

  - section: "Decoding: Greedy, and beam-search"
    criteria:
      - class: "TransformerEncoderDecoder"
        method: ":greedy_decode"
        max_mark: 5
      - class: "TransformerEncoderDecoder"
        method: ":expand_encoder_for_beam_search"
        max_mark: 3
      - class: "TransformerEncoderDecoder"
        method: ":repeat_and_reshape_for_beam_search"
        max_mark: 1
      - class: "TransformerEncoderDecoder"
        method: ":initialize_beams_for_beam_search"
        max_mark: 6
      - class: "TransformerEncoderDecoder"
        method: ":pad_and_score_sequence_for_beam_search"
        max_mark: 3
      - class: "TransformerEncoderDecoder"
        method: ":finalize_beams_for_beam_search"
        max_mark: 2
    sub_total: 20

  - section: "Training and testing"
    criteria:
      - class: "TransformerRunner"
        method: ":train_input_target_split"
        max_mark: 1
      - class: "TransformerRunner"
        method: ":train_step_optimizer_and_scheduler"
        max_mark: 1
      - class: "TransformerRunner"
        method: ":train_for_epoch"
        max_mark: 5
      - class: "TransformerRunner"
        method: ":translate"
        max_mark: 2
      - class: "TransformerRunner"
        method: ":compute_batch_total_bleu"
        max_mark: 3
    sub_total: 12

  - section: "BLEU score"
    criteria:
      - method: "BLEU score: grouper"
        max_mark: 2
      - method: "BLEU score: n_gram_precision"
        max_mark: 2
      - method: "BLEU score: brevity_penalty"
        max_mark: 2
      - method: "BLEU score: BLEU_Score(...)"
        max_mark: 2
    sub_total: 8

  - section: "Analysis"
    criteria:
      - method: ""
        max_mark: 8
    sub_total: 8

total_mark: 80