{"record":{"id":"3d0611b48356b510","repo":"pandas-dev/pandas","slug":"type-self-name-with-dtype-self-dtype-do","errorCode":null,"errorMessage":"'{type(self).__name__}' with dtype {self.dtype} does not support operation '{name}'","messagePattern":"'(.+?)' with dtype (.+?) does not support operation '(.+?)'","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"pandas/core/arrays/arrow/array.py","lineNumber":2574,"sourceCode":"                )[0]\n                return pc.binary_join(data_list, \"\")\n        elif name in [\"argmin\", \"argmax\"]:\n            return super()._reduce(name, skipna=skipna, **kwargs)\n\n        else:\n            pyarrow_name = {\n                \"median\": \"quantile\",\n                \"prod\": \"product\",\n                \"std\": \"stddev\",\n                \"var\": \"variance\",\n                \"kurt\": \"kurtosis\",\n            }.get(name, name)\n            # error: Incompatible types in assignment\n            # (expression has type \"Optional[Any]\", variable has type\n            # \"Callable[[Any, Any, KwArg(Any)], Any]\")\n            pyarrow_meth = getattr(pc, pyarrow_name, None)  # type: ignore[assignment]\n            if pyarrow_meth is None:\n                raise TypeError(\n                    f\"'{type(self).__name__}' with dtype {self.dtype} \"\n                    f\"does not support operation '{name}'\"\n                )\n\n        # GH51624: pyarrow defaults to min_count=1, pandas behavior is min_count=0\n        if name in [\"any\", \"all\", \"sum\", \"prod\"] and \"min_count\" not in kwargs:\n            kwargs[\"min_count\"] = 0\n        elif name == \"median\":\n            # GH 52679: Use quantile instead of approximate_median\n            kwargs[\"q\"] = 0.5\n        elif name in [\"std\", \"var\", \"sem\"] and \"ddof\" not in kwargs:\n            # pyarrow defaults to ddof=0, pandas behavior is ddof=1\n            kwargs[\"ddof\"] = 1\n        elif name in [\"skew\", \"kurt\"] and \"biased\" not in kwargs:\n            kwargs[\"biased\"] = False\n\n        try:\n            result = pyarrow_meth(data_to_reduce, skip_nulls=skipna, **kwargs)","sourceCodeStart":2556,"sourceCodeEnd":2592,"githubUrl":"https://github.com/pandas-dev/pandas/blob/71959b8cb9b2459c16e14b34f28b178ccfe14735/pandas/core/arrays/arrow/array.py#L2556-L2592","documentation":"Raised in _reduce when `getattr(pyarrow.compute, name)` returns None — i.e. the installed pyarrow version does not expose the requested reduction function at all. This is a static capability miss, not a runtime kernel miss.","triggerScenarios":"Calling a reduction (e.g. `Series.kurt`, `.skew`, `.sem`) on an ArrowExtensionArray where the running pyarrow version lacks that compute function entirely.","commonSituations":"Older pyarrow installs (e.g. pinned at <14) lacking newer compute functions like `kurtosis`, or a CI image with an outdated pyarrow.","solutions":["Upgrade pyarrow to a version that implements the function: `pip install -U pyarrow`.","Fall back to numpy-based reduction by converting: `s.to_numpy().kurt()`.","Pick a supported reduction for the current pyarrow version."],"exampleFix":"// before\n# pyarrow too old\npd.Series([1, 2, 3], dtype=\"int64[pyarrow]\").kurt()\n\n// after\npip install -U 'pyarrow>=14'\npd.Series([1, 2, 3], dtype=\"int64[pyarrow]\").kurt()","handlingStrategy":"validation","validationCode":"import pyarrow as pa\nimport pyarrow.compute as pc\n\ndef supports_reduction(name) -> bool:\n    return getattr(pc, {\"median\": \"quantile\", \"prod\": \"product\", \"std\": \"stddev\", \"var\": \"variance\", \"kurt\": \"kurtosis\"}.get(name, name), None) is not None","typeGuard":"def pyarrow_has_reduction(name) -> bool:\n    import pyarrow.compute as pc\n    mapped = {\"median\": \"quantile\", \"prod\": \"product\", \"std\": \"stddev\", \"var\": \"variance\", \"kurt\": \"kurtosis\"}.get(name, name)\n    return hasattr(pc, mapped)","tryCatchPattern":"try:\n    s.kurt()\nexcept TypeError as e:\n    if \"does not support operation\" in str(e) and \"pyarrow version\" not in str(e):\n        s.to_numpy().kurt()  # fall back to numpy\n    else:\n        raise","preventionTips":["Pin a modern pyarrow in requirements (>=14) to ensure compute coverage.","Probe pyarrow.compute for the function name before dispatching generic reductions.","Have a numpy fallback path for reductions not present in the deployed pyarrow."],"tags":["arrow","reduce","pyarrow-version","capability"],"analyzedSha":"71959b8cb9b2459c16e14b34f28b178ccfe14735","analyzedAt":"2026-08-07T01:30:20.476Z","schemaVersion":2},"datasetVersion":"2026-08-07T03:17:09.362Z"}