code: def maybe_cast_pointwise_result(
      result: ArrayLike,
      dtype: DtypeObj,
      numeric_only: bool = False,
      same_dtype: bool = True,
  ) -> ArrayLike:
      """
      Try casting result of a pointwise operation back to the original dtype if
      appropriate.
  
      Parameters
      ----------
      result : array-like
          Result to cast.
      dtype : np.dtype or ExtensionDtype
          Input Series from which result was calculated.
      numeric_only : bool, default False
          Whether to cast only numerics or datetimes as well.
      same_dtype : bool, default True
          Specify dtype when calling _from_sequence
  
      Returns
      -------
      result : array-like
          result maybe casted to the dtype.
      """
  
      assert not is_scalar(result)
  
      if isinstance(dtype, ExtensionDtype):
          if not isinstance(dtype, (CategoricalDtype, DatetimeTZDtype)):
              # TODO: avoid this special-casing
              # We have to special case categorical so as not to upcast
              # things like counts back to categorical
  
              cls = dtype.construct_array_type()
              if same_dtype:
                  result = maybe_cast_to_extension_array(
                      cls, result, dtype=dtype
                  )
              else:
                  result = maybe_cast_to_extension_array(cls, result)
  
      elif (
          numeric_only and is_numeric_dtype(dtype)
      ) or not numeric_only:
          result = maybe_downcast_to_dtype(result, dtype)
  
      return result
  
imports: from __future__ import annotations
  import datetime
  import functools
  from typing import TYPE_CHECKING, Any, Literal, Sized, TypeVar, cast, overload
  import warnings
  import numpy
  from pandas._libs import lib
  from pandas._libs.missing import NA, NAType, checknull
  from pandas._libs.tslibs import NaT, OutOfBoundsDatetime, OutOfBoundsTimedelta, Timedelta, Timestamp, get_unit_from_dtype, is_supported_unit
  from pandas._libs.tslibs.timedeltas import array_to_timedelta64
  from pandas._typing import ArrayLike, Dtype, DtypeObj, NumpyIndexT, Scalar, npt
  from pandas.errors import IntCastingNaNError, LossySetitemError
  from pandas.core.dtypes.common import ensure_int8, ensure_int16, ensure_int32, ensure_int64, ensure_object, ensure_str, is_bool, is_bool_dtype, is_complex, is_complex_dtype, is_datetime64_dtype, is_extension_array_dtype, is_float, is_float_dtype, is_integer, is_integer_dtype, is_numeric_dtype, is_object_dtype, is_scalar, is_signed_integer_dtype, is_string_dtype, is_timedelta64_dtype, is_unsigned_integer_dtype, pandas_dtype
  from pandas.core.dtypes.dtypes import BaseMaskedDtype, CategoricalDtype, DatetimeTZDtype, ExtensionDtype, IntervalDtype, PandasExtensionDtype, PeriodDtype
  from pandas.core.dtypes.generic import ABCExtensionArray, ABCIndex, ABCSeries
  from pandas.core.dtypes.inference import is_list_like
  from pandas.core.dtypes.missing import is_valid_na_for_dtype, isna, na_value_for_dtype, notna
  from pandas.io._util import _arrow_dtype_mapping
label_desc: Use image node_id 14 for calling a global function with example usage: maybe_cast_pointwise_result(result, dtype, numeric_only, same_dtype) and returns: result