{"record":{"id":"cff9dc86af85e49e","repo":"jax-ml/jax","slug":"len-of-unsized-object-cff9dc","errorCode":null,"errorMessage":"len() of unsized object","messagePattern":"len\\(\\) of unsized object","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"jax/_src/state/types.py","lineNumber":523,"sourceCode":"    return self.update(inner_aval=self.inner_aval.update_weak_type(weak_type))\n\n  def update_manual_axis_type(self, mat):\n    return self.update(inner_aval=self.inner_aval.update_manual_axis_type(mat))\n\n  def update(self, inner_aval=None, memory_space=None, kind=None):  # pyrefly: ignore[bad-override]\n    inner_aval = self.inner_aval if inner_aval is None else inner_aval\n    memory_space = self.memory_space if memory_space is None else memory_space\n    kind = self.kind if kind is None else kind\n    return AbstractRef(inner_aval, memory_space, kind)\n\n  ndim = property(lambda self: len(self.shape))\n  size = property(lambda self: math.prod(self.shape))\n\n  def _len(self, ignored_tracer) -> int:\n    try:\n      return self.shape[0]\n    except IndexError as err:\n      raise TypeError(\"len() of unsized object\") from err  # same as numpy error\n\n  @property\n  def shape(self):\n    try:\n      return self.inner_aval.shape  # pyrefly: ignore[missing-attribute]\n    except AttributeError:\n      raise AttributeError(\n          f\"{self!r} has no `shape`.\"\n      ) from None\n\n  @property\n  def dtype(self):\n    try:\n      return self.inner_aval.dtype  # pyrefly: ignore[missing-attribute]\n    except AttributeError:\n      raise AttributeError(\n          f\"{self!r} has no `dtype`.\"\n      ) from None","sourceCodeStart":505,"sourceCodeEnd":541,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/state/types.py#L505-L541","documentation":"RefRValue._len converts an IndexError from shape[0] into the numpy-style TypeError 'len() of unsized object', mirroring NumPy's behavior for 0-d arrays. It means the ref has a shape but it's empty (scalar-like).","triggerScenarios":"Calling len(ref) on a ref whose shape is () (0-dimensional / unsized).","commonSituations":"Generic code doing len(x) on containers that may hold scalars; refs created from scalar buffers.","solutions":["Check ref.ndim > 0 before len()","Use ref.size to detect emptiness instead","Reshape the underlying buffer to at least 1D"],"exampleFix":"# before\nn = len(ref)\n# after\nn = ref.shape[0] if ref.ndim > 0 else 1","handlingStrategy":"validation","validationCode":"if ref.ndim == 0:\n    raise TypeError(\"ref is unsized\")","typeGuard":"def is_sized(ref):\n    return getattr(ref, \"ndim\", 0) > 0","tryCatchPattern":null,"preventionTips":["Check ndim before len()","Treat refs as possibly scalar in generic code"],"tags":["jax","len","unsized"],"backgroundTag":"len-of-scalar-object","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}