@triton.jit
def score_modification(score, offs_m, start_n, offs_n, off_hz, num_heads, q,
    k, mask_block_ptr, BIAS_CHOICE: tl.constexpr, DEBUG_MASK: tl.constexpr,
    IS_CAUSAL: tl.constexpr, MATMUL_PRECISION: tl.constexpr=tl.float16):
    batch = off_hz // num_heads
    head = off_hz % num_heads
    seq_len_q = offs_m[:, None]
    seq_len_kv = start_n + offs_n[None, :]
    if BIAS_CHOICE == BiasMode.rel_pos.value:
        score = rel_attention_triton(score, batch, head, seq_len_q, seq_len_kv)
    elif BIAS_CHOICE == BiasMode.alibi.value:
        score = alibi_attention_triton(score, batch, head, seq_len_q,
            seq_len_kv, num_heads)
    elif BIAS_CHOICE == BiasMode.inverse_causal.value:
        score = inverse_causal_mask_triton(score, batch, head, seq_len_q,
            seq_len_kv)
    elif BIAS_CHOICE == BiasMode.causal.value:
        score = causal_mask_triton(score, batch, head, seq_len_q, seq_len_kv)
    if DEBUG_MASK and BIAS_CHOICE != BiasMode.none:
        mask = score - tl.dot(q.to(MATMUL_PRECISION), k.to(MATMUL_PRECISION))
        tl.store(mask_block_ptr, mask)
    return score
