{"record":{"id":"83a4c8b7ee285e02","repo":"jax-ml/jax","slug":"remote-signal-not-implemented","errorCode":null,"errorMessage":"Remote signal not implemented.","messagePattern":"Remote signal not implemented\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"jax/_src/pallas/primitives.py","lineNumber":1112,"sourceCode":"  ])\n  if device_ids is not None:\n    flat_device_ids = tree_util.tree_leaves(device_ids)\n    if not flat_device_ids:\n      return out\n    out = pp.concat([out, pp.text(\" \"), _pp_device_id(device_ids, context)])\n  return out\n\njax_core.pp_eqn_rules[semaphore_signal_p] = _semaphore_signal_pp_eqn\n\n\ndef _semaphore_signal_discharge_rule(ctx,\n                                     *flat_args,\n                                     args_tree,\n                                     device_id_type):\n  del device_id_type\n  [ref, transforms, inc, device_id, core_index] = args_tree.unflatten(flat_args)\n  if device_id is not None:\n    raise NotImplementedError(\"Remote signal not implemented.\")\n  if core_index is not None:\n    raise NotImplementedError(\"Multiple core support not implemented.\")\n  sem_value = _transform_semaphore(ref, transforms, ctx.in_avals[0])\n  inc = inc.astype(pallas_core.SEMAPHORE_INTERPRET_DTYPE)\n  _, new_sem_value = state_discharge.transform_swap_array(\n      ref, transforms, sem_value + inc\n  )\n  return (new_sem_value,) + (None,) * (len(ctx.in_avals) - 1), ()\nstate_discharge.register_discharge_rule(semaphore_signal_p)(\n    _semaphore_signal_discharge_rule\n)\n\n\nsemaphore_wait_p = jax_core.Primitive('semaphore_wait')\nsemaphore_wait_p.multiple_results = True\n\n\ndef semaphore_wait(","sourceCodeStart":1094,"sourceCodeEnd":1130,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/pallas/primitives.py#L1094-L1130","documentation":"Signaling a semaphore on a remote device (device_id not None) is not implemented in the state-discharge (interpret-style) path of semaphore_signal.","triggerScenarios":"Using semaphore_signal with a device_id argument in a context that goes through discharge (interpret mode or non-Pallas lowering).","commonSituations":"Testing multicast/remote signaling code in interpret mode or on CPU where only local signaling is supported.","solutions":["Drop device_id when running under interpret mode / tests","Only use remote signaling in the real Pallas TPU execution path","Skip or mock remote-signal tests outside TPU"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"if INTERPRET_MODE and device_id is not None:\n    raise unittest.SkipTest(\"remote signal unsupported in interpret mode\")","typeGuard":null,"tryCatchPattern":"try:\n    semaphore_signal(sem, 1, device_id=did)\nexcept NotImplementedError as e:\n    if \"Remote signal\" in str(e):\n        semaphore_signal(sem, 1)  # local fallback in tests\n    raise","preventionTips":["Only test remote signaling on TPU hardware","Parameterize tests to skip remote cases in interpret mode"],"tags":["pallas","semaphore","remote-signal","not-implemented","jax"],"backgroundTag":"unsupported-feature-not-implemented","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}