{"record":{"id":"4609f11f4fa3582c","repo":"jax-ml/jax","slug":"unsupported-transform-transform-4609f1","errorCode":null,"errorMessage":"Unsupported transform: {transform}","messagePattern":"Unsupported transform: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"jax/_src/pallas/mosaic_gpu/interpret/gpu_callbacks.py","lineNumber":517,"sourceCode":"\ndef _is_dynamic(indexer: indexing.NDIndexer) -> bool:\n  return any(\n      isinstance(idx, indexing.Slice)\n      and (idx.is_dynamic_start or idx.is_dynamic_size)\n      for idx in indexer.indices\n  )\n\n\ndef _validate_transforms(transforms):\n  for transform in transforms:\n    match transform:\n      case indexing.NDIndexer():\n        if _is_dynamic(transform):\n          raise ValueError(\n              \"Dynamic indexing not supported in GPU interpret mode\"\n          )\n      case _:\n        raise ValueError(f\"Unsupported transform: {transform}\")\n\n\ndef _get(\n    token: jax.Array,\n    mesh_location: memory.MeshLocation,\n    thread: memory.Thread | None,\n    allocation_key_as_array: jax.Array,\n    transforms,\n    block_indices=None,\n    grid_loop_idx=None,\n    clock=None,\n    increment_clock: bool = True,\n    source_info=None,\n    input_name=None,\n) -> tuple[jax.Array, np.ndarray]:\n  \"\"\"Performs a read from the buffer for `allocation_key_as_array` from the given device and thread.\"\"\"\n  allocation_key = HostAllocationKey.from_array(allocation_key_as_array)\n  del allocation_key_as_array","sourceCodeStart":499,"sourceCodeEnd":535,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/pallas/mosaic_gpu/interpret/gpu_callbacks.py#L499-L535","documentation":"Internal validation in the GPU interpreter: only NDIndexer transforms are understood when applying a Block's transforms to host buffers. Any other transform type reaching _validate_transforms is rejected.","triggerScenarios":"Rare; occurs if a Block reference carries a transform not representable as indexing.NDIndexer (e.g. a new/unsupported transform kind introduced by API changes), passed through _get or _swap in interpret mode.","commonSituations":"Version skew between jax and jax_plugins/pallas code paths; using experimental Block/transform features not yet implemented in the interpreter.","solutions":["Check the repr in the message to identify the transform and avoid constructing Blocks that produce it","Update jax (and the mosaic plugin) to matching versions where the transform is supported","If it's an NDIndexer wrapped differently, ensure indices are plain ints/static so it validates as NDIndexer","Report upstream with a minimal repro if it's a legitimate transform"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    kernel(x)\nexcept ValueError as e:\n    if 'Unsupported transform' in str(e):\n        simplify Block construction (plain ds[...] indexing)","preventionTips":["Use only standard ds[start, size] indexing in Blocks","Keep jax and mosaic plugin versions aligned"],"tags":["pallas","mosaic-gpu","interpret-mode","unsupported-transform","internal"],"backgroundTag":"unsupported-operation-in-interpreter","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}