{"record":{"id":"25af17a0ad4278d3","repo":"jax-ml/jax","slug":"unsupported-transform-transform-25af17","errorCode":null,"errorMessage":"Unsupported transform: {transform}","messagePattern":"Unsupported transform: (.+?)","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"jax/experimental/mosaic/gpu/dialect_lowering.py","lineNumber":987,"sourceCode":"  swizzle = None\n  for transform in attr:\n    if isinstance(transform, mgpu.SwizzleTransformAttr):\n      if swizzle is not None:\n        raise ValueError(\"Found multiple SwizzleTransformAttr\")\n      swizzle = mgpu.SwizzlingMode(mgpu.SwizzleTransformAttr(transform).swizzle)\n  return swizzle or mgpu.SwizzlingMode.kNoSwizzle\n\n\ndef memref_transforms_from_transforms_attr(\n    attr: ir.ArrayAttr,\n) -> tuple[lc.MemRefTransform, ...]:\n  gmem_transforms: list[lc.MemRefTransform] = []\n  for transform in attr:\n    if isinstance(transform, mgpu.TileTransformAttr):\n      tile_transform = lc.TileTransform(tuple(transform.tiling))\n      gmem_transforms.append(tile_transform)\n    elif not isinstance(transform, mgpu.SwizzleTransformAttr):\n      raise NotImplementedError(f\"Unsupported transform: {transform}\")\n  return tuple(gmem_transforms)\n\n\ndef tile_offset(\n    offsets: tuple[int, ...], tiling: tuple[int, ...]\n) -> tuple[int, ...]:\n  \"\"\"Tiles the trailing offsets in `offsets` according to `tiling`.\n\n  Raises if the offsets are not aligned with the start of a tile.\n  \"\"\"\n  if len(offsets) < len(tiling):\n    raise ValueError(f\"Offsets {offsets} have lower rank than tiling {tiling}\")\n  untiled_offsets, tiled_offsets = (\n      offsets[: -len(tiling)],\n      offsets[-len(tiling) :],\n  )\n  for i, t in zip(tiled_offsets, tiling, strict=True):\n    if i % t != 0:","sourceCodeStart":969,"sourceCodeEnd":1005,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/experimental/mosaic/gpu/dialect_lowering.py#L969-L1005","documentation":"memref_transforms_from_transforms_attr only understands TileTransformAttr and SwizzleTransformAttr; any other transform attribute is rejected with NotImplementedError.","triggerScenarios":"Including a custom or newer transform attr (not tile/swizzle) in an op's transforms array.","commonSituations":"Version skew: newer MLIR/Mosaic dialects add transform kinds the installed JAX doesn't lower.","solutions":["Remove the unsupported transform from the attribute","Upgrade JAX to a version that supports the transform kind","Express the memory layout with tile+swizzle only"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"for t in transforms:\n    assert isinstance(t, (mgpu.TileTransformAttr, mgpu.SwizzleTransformAttr)), f'unsupported transform {t}'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pin JAX/Mosaic versions compatible with your MLIR dialect","Only emit tile/swizzle transforms"],"tags":["jax","mosaic","gpu","transforms","version-skew"],"backgroundTag":"unsupported-operation","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}