{"record":{"id":"69cb997a9ca2eb8e","repo":"jax-ml/jax","slug":"the-is-fully-addressable-property-was-called-on-s","errorCode":null,"errorMessage":"The is_fully_addressable property was called on {self._error_repr()}.{self._origin_msg()}","messagePattern":"The is_fully_addressable property was called on (.+?)\\.(.+?)","errorType":"exception","errorClass":"ConcretizationTypeError","httpStatus":null,"severity":"error","filePath":"jax/_src/core.py","lineNumber":1261,"sourceCode":"  def devices(self):\n    raise ConcretizationTypeError(self,\n      f\"The devices() method was called on {self._error_repr()}.\"\n      f\"{self._origin_msg()}\")\n\n  @property\n  def global_shards(self):\n    raise ConcretizationTypeError(self,\n      f\"The global_shards property was called on {self._error_repr()}.\"\n      f\"{self._origin_msg()}\")\n\n  def is_deleted(self):\n    raise ConcretizationTypeError(self,\n      f\"The is_deleted() method was called on {self._error_repr()}.\"\n      f\"{self._origin_msg()}\")\n\n  @property\n  def is_fully_addressable(self):\n    raise ConcretizationTypeError(self,\n      f\"The is_fully_addressable property was called on {self._error_repr()}.\"\n      f\"{self._origin_msg()}\")\n\n  @property\n  def is_fully_replicated(self):\n    raise ConcretizationTypeError(self,\n      f\"The is_fully_replicated property was called on {self._error_repr()}.\"\n      f\"{self._origin_msg()}\")\n\n  def on_device_size_in_bytes(self):\n    raise ConcretizationTypeError(self,\n      f\"The on_device_size_in_bytes() method was called on {self._error_repr()}.\"\n      f\"{self._origin_msg()}\")\n\n  @property\n  def traceback(self):\n    raise ConcretizationTypeError(self,\n      f\"The traceback property was called on {self._error_repr()}.\"","sourceCodeStart":1243,"sourceCodeEnd":1279,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/core.py#L1243-L1279","documentation":"ConcretizationTypeError raised when the Tracer.is_fully_addressable property is accessed. is_fully_addressable indicates whether every shard of a materialized (potentially SPMD) jax.Array is addressable by the local process; tracers have no distributed layout, so the property stub raises during tracing.","triggerScenarios":"Reading `x.is_fully_addressable` on a traced value inside jit/pjit/grad/vmap/scan or a custom rule; commonly via an assert or conditional on it.","commonSituations":"Single-host vs multi-host branching logic (`if x.is_fully_addressable:`) written for distributed arrays and then executed inside jitted code; tests running under vmap that hit distributed-guard code; refactoring multi-process pipeline code into transformed functions.","solutions":["Hoist the is_fully_addressable check outside the trace and pass the boolean as a static argument to the jitted function.","Branch on jax.typeof(x)/sharding info available on the aval if you must decide inside tracing.","Restructure so distributed-awareness lives in the outer (non-traced) orchestration code, not in the kernel.","Use functools.partial or closure over the precomputed flag."],"exampleFix":"// before\n@jax.jit\ndef f(x):\n    if x.is_fully_addressable:   # ConcretizationTypeError\n        return local_path(x)\n    return dist_path(x)\n\n// after\ndef f(x):\n    addr = x.is_fully_addressable          # concrete array\n    return _f_jit(x, addr)\n@partial(jax.jit, static_argnames=['addr'])\ndef _f_jit(x, addr):\n    return local_path(x) if addr else dist_path(x)","handlingStrategy":"validation","validationCode":"import jax\n\ndef fully_addressable_or_default(x, default=True):\n    if isinstance(x, jax.core.Tracer):\n        return default\n    return x.is_fully_addressable","typeGuard":"import jax\nfrom jax.core import Tracer\n\ndef addressability_known(x) -> bool:\n    return isinstance(x, jax.Array) and not isinstance(x, Tracer)","tryCatchPattern":"from jax.errors import ConcretizationTypeError\ntry:\n    addr = x.is_fully_addressable\nexcept ConcretizationTypeError:\n    addr = None  # decide via a static argument instead","preventionTips":["Compute addressability once on the host and pass it via static_argnums.","Keep distributed branching out of traced kernels.","Write integration tests that run the same code under jit and eagerly."],"tags":["jax","concretization","tracer","sharding","distributed"],"backgroundTag":"jax-tracer-concretization-error","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}