code: def _execute_classifier_predict(
      cls, predictions: List[np.ndarray], op: "BlockwiseEnsemblePredict"
  ):
      if op.voting == "soft":
          prob = np.average(np.stack(predictions), axis=0)
          return np.argmax(prob, axis=1)
      else:
  
          def vote(x: np.ndarray):
              return np.argmax(np.bincount(x))
  
          # hard voting
          prediction = np.vstack(predictions).T
          return np.apply_along_axis(vote, 1, prediction)
  
imports: from typing import List, Union
  import numpy
  from sklearn.base import BaseEstimator, clone
  from sklearn.utils.validation import check_is_fitted
  from ...None import opcodes
  from ...None import execute
  from ...None import tensor
  from ...core import OutputType, ENTITY_TYPE, recursive_tile
  from ...core.context import Context
  from ...serialization.serializables import FieldTypes, AnyField, BoolField, DictField, Int64Field, ListField, StringField, KeyField
  from ...typing import SessionType
  from ...tensor.core import Tensor, TensorOrder
  from ...tensor.utils import decide_unify_split
  from ..operands import LearnOperand, LearnOperandMixin
  from ..base import BaseEstimator, ClassifierMixin, RegressorMixin
  from ..utils import check_array
label_desc: Use image node_id 5 for calling the BlockwiseEnsemblePredict obj's underlying member method code with example usage: obj._execute_classifier_predict(cls, predictions, op) and returns: np, np, np