{"record":{"id":"fe229ed83732e9e8","repo":"jax-ml/jax","slug":"the-delete-method-was-called-on-self-error-rep","errorCode":null,"errorMessage":"The delete() method was called on {self._error_repr()}.{self._origin_msg()}","messagePattern":"The delete\\(\\) method was called on (.+?)\\.(.+?)","errorType":"exception","errorClass":"ConcretizationTypeError","httpStatus":null,"severity":"error","filePath":"jax/_src/core.py","lineNumber":1239,"sourceCode":"    return self._pretty_print(verbose=False).format()\n\n  def _contents(self):\n    try:\n      return [(name, getattr(self, name)) for name in self.__slots__]\n    except AttributeError:\n      return ()\n\n  def _origin_msg(self) -> str:\n    return \"\"\n\n  # Methods that are only valid for materialized arrays\n  def addressable_data(self, index):\n    raise ConcretizationTypeError(self,\n      f\"The addressable_data() method was called on {self._error_repr()}.\"\n      f\"{self._origin_msg()}\")\n\n  def delete(self):\n    raise ConcretizationTypeError(self,\n      f\"The delete() method was called on {self._error_repr()}.\"\n      f\"{self._origin_msg()}\")\n\n  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()}\")","sourceCodeStart":1221,"sourceCodeEnd":1257,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/core.py#L1221-L1257","documentation":"ConcretizationTypeError raised when Tracer.delete() is called. delete() explicitly frees a materialized jax.Array's device buffers; a tracer is an abstract placeholder produced during tracing and owns no memory, so the base-class stub raises instead of silently no-op'ing.","triggerScenarios":"Calling `x.delete()` on a traced value inside jit/grad/vmap/pmap/scan/remat or inside a custom JVP/VJP rule.","commonSituations":"Memory-management cleanup code (delete() to release large intermediates) reused inside a jitted function; trying to free buffers inside a training step that grad() traces through; batch-processing loop where del/delete calls ended up in the traced region.","solutions":["Move delete() calls to after the jitted/transformed function returns, operating on the concrete result array.","Drop the delete() call inside the trace entirely; JAX's compiler already manages buffer lifetimes of traced intermediates.","If freeing intermediates is the goal, rely on delete semantics on the output arrays or use jax.lax.scan/donate_argnums to control memory reuse.","Guard with isinstance(x, jax.Array) before calling delete."],"exampleFix":"// before\n@jax.jit\ndef step(x):\n    y = heavy(x)\n    x.delete()  # ConcretizationTypeError\n    return y\n\n// after\n@jax.jit\ndef step(x):\n    return heavy(x)\n# caller: buf.delete() on the concrete array if needed","handlingStrategy":"type-guard","validationCode":"import jax\n\ndef safe_delete(x):\n    if isinstance(x, jax.Array) and not isinstance(x, jax.core.Tracer):\n        x.delete()\n    # tracers: nothing to free","typeGuard":"import jax\nfrom jax.core import Tracer\n\ndef can_delete(x) -> bool:\n    return isinstance(x, jax.Array) and not isinstance(x, Tracer)","tryCatchPattern":"from jax.errors import ConcretizationTypeError\ntry:\n    x.delete()\nexcept ConcretizationTypeError:\n    pass  # traced intermediates are compiler-managed","preventionTips":["Put memory-freeing logic in the outer driver, never inside jit/grad bodies.","Use donate_argnums for buffer donation instead of manual delete.","Guard shared cleanup helpers with isinstance(x, jax.Array)."],"tags":["jax","concretization","tracer","memory-management","delete"],"backgroundTag":"jax-tracer-concretization-error","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}