{"record":{"id":"f16cf9d7ce28935a","repo":"jax-ml/jax","slug":"is-signed-must-be-specified-for-integer-types","errorCode":null,"errorMessage":"is_signed must be specified for integer types","messagePattern":"is_signed must be specified for integer types","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"jax/experimental/mosaic/gpu/mma.py","lineNumber":76,"sourceCode":"        _check_canonical=False,\n    ).canonicalize()\n    self.acc = fa.TiledLayout(\n        fa.Tiling(((m_warps * 16, n_warps * 8), (16, 8), (8, 8), (2,))),\n        warp_dims=(-7, -6),\n        lane_dims=(-3, -2),\n        vector_dim=-1,\n        _check_canonical=False,\n    ).canonicalize()\n\n\ndef _ptx_dtype_str(dtype: ir.Type, *, is_signed: bool | None = None) -> str:\n  if isinstance(dtype, ir.Float8E4M3FNType):\n    return \"e4m3\"\n  elif isinstance(dtype, ir.Float8E5M2Type):\n    return \"e5m2\"\n  elif isinstance(dtype, ir.IntegerType):\n    if is_signed is None:\n      raise ValueError(\"is_signed must be specified for integer types\")\n    prefix = \"s\" if is_signed else \"u\"\n    return f\"{prefix}{dtype.width}\"\n  return str(dtype)\n\n\ndef _mma_single_tile(\n    acc: fa.FragmentedArray, a: fa.FragmentedArray, b: fa.FragmentedArray\n) -> fa.FragmentedArray:\n  \"\"\"Performs `acc + a @ b` using warp level MMA instructions.\"\"\"\n  i32 = ir.IntegerType.get_signless(32)\n\n  k_tile = 256 // utils.bitwidth(a.mlir_dtype)\n  assert a.mlir_dtype == b.mlir_dtype\n  is_integer = isinstance(a.mlir_dtype, ir.IntegerType)\n  assert acc.mlir_dtype == i32 if is_integer else ir.F32Type.get()\n  assert acc.is_signed in {None, True}\n  assert (\n      isinstance(acc.layout, fa.TiledLayout)","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/experimental/mosaic/gpu/mma.py#L58-L94","documentation":"_ptx_dtype_str builds the PTX dtype string for MMA instructions. Integer MLIR types carry no sign, so the caller must pass is_signed to choose the 's'/'u' prefix; if None for an integer dtype, ValueError.","triggerScenarios":"Calling mma/related helpers with i8 or i4 operands where the sign information wasn't provided (e.g. FragmentedArray built from plain ir.IntegerType without is_signed).","commonSituations":"Using int8/int4 MMA on Hopper with arrays created via arithmetic constants or from tensors lacking signedness metadata.","solutions":["Create integer FraggedArrays with explicit signedness (e.g. jnp int8 arrays convert with is_signed=True)","Pass is_signed=True/False wherever the helper accepts it","Use dtypes with inherent signedness (jnp.int8) instead of raw ir.IntegerType"],"exampleFix":"// before\na = fa.FragmentedArray(..., mlir_dtype=ir.IntegerType.get_signless(8))\n// after\na = fa.FragmentedArray(..., mlir_dtype=dtypes.int8)  # signedness known","handlingStrategy":"validation","validationCode":"if isinstance(dtype, ir.IntegerType):\n    assert is_signed is not None, 'integer MMA requires is_signed'","typeGuard":"def has_known_sign(fa):\n    return not isinstance(fa.mlir_dtype, ir.IntegerType) or fa.is_signed is not None","tryCatchPattern":null,"preventionTips":["Build integer arrays from jnp.int8/jnp.uint8, never raw ir.IntegerType"],"tags":["jax","mosaic","mma","dtype","signedness"],"backgroundTag":"missing-type-metadata","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}