from onnx_tf.handlers.backend_handler import BackendHandler
from onnx_tf.handlers.handler import onnx_op
from onnx_tf.handlers.handler import partial_support
from onnx_tf.handlers.handler import ps_description
from .pool_mixin import PoolMixin


@onnx_op("MaxPool")
@partial_support(True)
@ps_description(
    "MaxPoolWithArgmax with pad is None or incompatible mode, or " +
    "MaxPoolWithArgmax with 4D or higher input, or" +
    "MaxPoolWithArgmax with column major " + "are not supported in Tensorflow.")
class MaxPool(PoolMixin, BackendHandler):

  @classmethod
  def _common(cls, node, **kwargs):
    pool_type = "MAX" if len(node.outputs) == 1 else "MAX_WITH_ARGMAX"
    return cls.pool(node, kwargs["tensor_dict"], pool_type,
                    kwargs.get("strict", True))

  @classmethod
  def version_1(cls, node, **kwargs):
    return cls._common(node, **kwargs)

  @classmethod
  def version_8(cls, node, **kwargs):
    return cls._common(node, **kwargs)

  @classmethod
  def version_10(cls, node, **kwargs):
    return cls._common(node, **kwargs)

  @classmethod
  def version_11(cls, node, **kwargs):
    return cls._common(node, **kwargs)

  @classmethod
  def version_12(cls, node, **kwargs):
    return cls._common(node, **kwargs)
