BUG: Aggregation on arrow array return same type
- [ ] closes #53030  (Replace xxxx with the GitHub issue number)
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

would #53089 address this?  in general we want to get logic _out_ of maybe_cast_pointwise_result > would #53089 address this? in general we want to get logic _out_ of maybe_cast_pointwise_result

@jbrockmendel , I have tried pr53089. It can't fix issue 53030. But I can try to work on pr53089 to fix issue 53030.  @jbrockmendel , I have done some debug, found something about convert_dtypes function.
The convert_dtypes function's first parameter input_array could be np.ndarray with object dtype. Then the line:
`
inferred_dtype = lib.infer_dtype(input_array)
`
will be executed. Since lib.infer_dtype returns a str, then inferred_dtype also is str. So following lines will be executed:
```
if isinstance(inferred_dtype, str):
    # If we couldn't do anything else, then we retain the dtype
    inferred_dtype = input_array.dtype
```
At this time, inferred_dtype is object dtype.
In the 'pyarrow' backend codes part, all if condition failed. So this line is executed:
`
base_dtype = inferred_dtype
`
base_dtype is object dtype also. Then after `pa_type = to_pyarrow_type(base_dtype)`, pa_type is None since base_dtype is object.
So in this situation, convert_dtypes will return object dtype as long as input_array is np.ndarray with object dtype. what if you do infer_objects() followed by convert_dtypes? I have tried using infer_objects with following codes:
```
            if result.dtype == object:
                df = pandas.DataFrame(result)
                result = df.infer_objects().values
            pyarrow_type = convert_dtypes(result, dtype_backend="pyarrow")
```
It doesn't work. The dtype of result still can be object after infer_objects. Thanks for the pull request, but it appears to have gone stale. If interested in continuing, please merge in the main branch, address any review comments and/or failing tests, and we can reopen.