{"record":{"id":"cd97c0901f9fe77b","repo":"xai-org/x-algorithm","slug":"valid-block-upper-and-valid-block-lower-must-be-pr","errorCode":null,"errorMessage":"valid_block_upper and valid_block_lower must be provided together","messagePattern":"valid_block_upper and valid_block_lower must be provided together","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"phoenix/xrex/cutedsl/ranker_attention_varlen_fa4.py","lineNumber":327,"sourceCode":"    from xrex.cutedsl.ranker_fa4.block_sparsity import BlockSparseTensors\n    from xrex.cutedsl.ranker_fa4.flash_bwd_postprocess import FlashAttentionBackwardPostprocess\n    from xrex.cutedsl.ranker_fa4.flash_bwd_sm100 import FlashAttentionBackwardSm100\n    from xrex.cutedsl.ranker_fa4.flash_fwd_sm100 import FlashAttentionForwardSm100\n\n    batch_size, packed_S, num_q_heads, head_dim = q.shape\n    num_kv_heads = k.shape[2]\n    qpk = num_q_heads // num_kv_heads\n    block_size = 128\n    hdr = ((head_dim + 31) // 32) * 32\n    sr_q = ((packed_S + block_size - 1) // block_size) * block_size\n    sr_k = sr_q\n    dKV_postprocess = True\n    use_pack_gqa = qpk > 1 and (block_size % qpk == 0)\n\n    fwd_bs, _ = block_sparse_layout\n    if valid_block_upper is None or valid_block_lower is None:\n        if valid_block_upper is not None or valid_block_lower is not None:\n            raise ValueError(\"valid_block_upper and valid_block_lower must be provided together\")\n        valid_block_upper = jnp.zeros(fwd_bs[2].shape, dtype=jnp.int32)\n        valid_block_lower = jnp.zeros(fwd_bs[2].shape, dtype=jnp.int32)\n    valid_block_upper = jnp.broadcast_to(valid_block_upper, fwd_bs[2].shape)\n    valid_block_lower = jnp.broadcast_to(valid_block_lower, fwd_bs[2].shape)\n    bs_max_hist_blocks = int(fwd_bs[3].shape[-1])\n    bs_num_blocks = int(fwd_bs[3].shape[-2])\n\n    _expected_m_blocks = (packed_S + block_size - 1) // block_size\n    if bs_num_blocks != _expected_m_blocks:\n        raise ValueError(\n            f\"block-sparse arrays cover {bs_num_blocks} m-tiles but the kernel \"\n            f\"will iterate {_expected_m_blocks} (packed_S={packed_S}). \"\n            \"Pass packed_seq_len (the physical packed row length) to \"\n            \"build_block_sparse_layout so every physical tile has an entry.\"\n        )\n\n    cache_key = (\n        \"packed\",","sourceCodeStart":309,"sourceCodeEnd":345,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/phoenix/xrex/cutedsl/ranker_attention_varlen_fa4.py#L309-L345","documentation":"ranker_attention_varlen_fa4 takes optional valid_block_upper and valid_block_lower masks that define per-block validity. They are coupled: passing exactly one of them is almost certainly a bug, so the function raises unless both are provided (or both are None, in which case zero-filled defaults are created from the layout shape).","triggerScenarios":"Calling ranker_attention_varlen_fa4 (typically via sharded_mha) with valid_block_upper set but valid_block_lower None (or vice versa).","commonSituations":"Copy-paste or partial refactor where one mask variable is renamed or dropped; conditionally computing only the upper bound for a causal-ish mask and forgetting the lower bound defaults to None.","solutions":["Pass both valid_block_upper and valid_block_lower together","Or pass neither to accept the zero-filled defaults","Audit call sites in sharded_mha for one-sided mask construction"],"exampleFix":"# before\nout = ranker_attention_varlen_fa4(..., valid_block_upper=ub)  # lower missing\n# after\nout = ranker_attention_varlen_fa4(..., valid_block_upper=ub, valid_block_lower=lb)","handlingStrategy":"validation","validationCode":"assert (valid_block_upper is None) == (valid_block_lower is None), \\\n    \"valid_block_upper/lower must be passed together\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Bundle the pair into a small dataclass/tuple so they cannot be separated in config plumbing","Default both to None explicitly at call sites"],"tags":["cuda","cutedsl","varlen-attention","argument-validation"],"backgroundTag":"paired-argument-missing","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}