code: def sufficient_statistics(
      x, axes, shift=None, keepdims=False, name=None
  ):
      count = 1
      shape = ivy.shape(x)
      axes = list(set(axes))
      for a in axes:
          if ivy.to_scalar(a) < 0:
              index = x.ndim + ivy.to_scalar(a)
          else:
              index = ivy.to_scalar(a)
          count *= shape[index]
      count = ivy.array(count, dtype=ivy.dtype(x))
      if shift is None:
          sum_of_elements = ivy.sum(x, axis=axes, keepdims=keepdims)
          sum_of_squares = ivy.sum(
              ivy.square(x), axis=axes, keepdims=keepdims
          )
      else:
          sum_of_elements = ivy.sum(
              (ivy.subtract(x, shift)), axis=axes, keepdims=keepdims
          )
          sum_of_squares = ivy.sum(
              (ivy.square(ivy.subtract(x, shift))),
              axis=axes,
              keepdims=keepdims,
          )
          if shift.ndim == 0:
              ivy.reshape(shift, ())
  
      if count.ndim == 0:
          ivy.reshape(count, ())
      if sum_of_elements.ndim == 0:
          ivy.reshape(sum_of_elements, ())
      if sum_of_squares.ndim == 0:
          ivy.reshape(sum_of_squares, ())
      return count, sum_of_elements, sum_of_squares, shift
  
imports: import ivy
  from ivy.functional.frontends.tensorflow.func_wrapper import to_ivy_arrays_and_back
  from ivy.func_wrapper import with_unsupported_dtypes, with_supported_dtypes
  from ivy.functional.frontends.tensorflow import check_tensorflow_casting
label_desc: Use image node_id 41 for calling a global function with example usage: sufficient_statistics(x, axes, shift, keepdims, name) and returns: count,  sum_of_elements,  sum_of_squares,  shift