class_docstr: SecureNN(server_0, server_1, server_2, prime_factory, odd_factory, **kwargs)
  
  Implementation of SecureNN from
  `Wagh et al <https://eprint.iacr.org/2018/442/>`_.
class_docstr_tok: ["SecureNN","(","server_0",",","server_1",",","server_2",",","prime_factory",",","odd_factory",",","*","*","kwargs",")","Implementation","of","SecureNN","from","`","Wagh","et","al","<","https",":","\/\/eprint.iacr.org\/2018\/442\/",">","`","_","."]
docstr: maxpool2d(x, pool_size, strides, padding) -> PondTensor
  
  Performs a `MaxPooling2d` operation on `x`.
  
  :param PondTensor x: Input tensor.
  :param List[int] pool_size: The size of the pool.
  :param List[int] strides: A list describing how to stride over the
    convolution.
  :param str padding: Which type of padding to use ("SAME" or "VALID").
code: def maxpool2d(self, x, pool_size, strides, padding):
      """
      maxpool2d(x, pool_size, strides, padding) -> PondTensor
  
      Performs a `MaxPooling2d` operation on `x`.
  
      :param PondTensor x: Input tensor.
      :param List[int] pool_size: The size of the pool.
      :param List[int] strides: A list describing how to stride over the
        convolution.
      :param str padding: Which type of padding to use ("SAME" or "VALID").
      """
      node_key = (
          "maxpool2d",
          x,
          tuple(pool_size),
          tuple(strides),
          padding,
      )
      z = nodes.get(node_key, None)
  
      if z is not None:
          return z
  
      dispatch = {
          PondPublicTensor: _maxpool2d_public,
          PondPrivateTensor: _maxpool2d_private,
          PondMaskedTensor: _maxpool2d_masked,
      }
  
      func = dispatch.get(_type(x), None)
      if func is None:
          raise TypeError(
              "Don't know how to avgpool2d {}".format(type(x))
          )
  
      z = func(self, x, pool_size, strides, padding)
      nodes[node_key] = z
  
      return z
  
imports: from __future__ import absolute_import
  import math
  import random
  import sys
  from typing import Optional
  from typing import Tuple
  import numpy
  import tensorflow
  from tf_encrypted.config import get_config
  from tf_encrypted.player import Player
  from tf_encrypted.protocol import memoize
  from tf_encrypted.protocol.pond import Pond
  from tf_encrypted.protocol.pond import PondMaskedTensor
  from tf_encrypted.protocol.pond import PondPrivateTensor
  from tf_encrypted.protocol.pond import PondPublicTensor
  from tf_encrypted.protocol.pond import PondTensor
  from tf_encrypted.protocol.pond import _type
  from tf_encrypted.protocol.protocol import nodes
  from tf_encrypted.protocol.securenn.odd_tensor import oddint64_factory
  from tf_encrypted.tensor import int64factory
  from tf_encrypted.tensor import native_factory
  from tf_encrypted.tensor.factory import AbstractFactory
  from tf_encrypted.tensor.factory import AbstractTensor
label_desc: Use image node_id 19 for calling the SecureNN obj's underlying member method code with example usage: obj.maxpool2d(x, pool_size, strides, padding) and returns: z, z