# Path: tensorflow_model_remediation/common/docs.py
# def _no_op_decorator(obj):
# def _get_safe_decorator(decorator_name):
# 
# Path: tensorflow_model_remediation/common/types.py



import abc
import tensorflow as tf
from typing import Optional
from tensorflow_model_remediation.common import docs
from tensorflow_model_remediation.common import types
    Arguments:
      x: `tf.Tensor` of shape `[N, M, D]`.
      y: `tf.Tensor` of shape `[N, M, D]`.

    This method contains the logic for computing the kernel. It must be
    implemented by subclasses.

    Note: This method should not be called directly. To call a kernel on inputs,
    always use the `__call__` method, i.e. `kernel(x, y)`, which relies on the
    `call` method internally.

    Returns:
      `tf.Tensor` of shape `[N, M]`.
    """
    # pyformat: enable
    raise NotImplementedError('Must be implemented in subclasses')

  @docs.do_not_doc_in_subclasses
  def get_config(self):
    """Creates a config dictionary for the `MinDiffKernel` instance.

    Any subclass with additional attributes will need to override this method.
    When doing so, users will mostly likely want to first call `super`.

    Returns:
      A config dictionary for the `MinDiffKernel` isinstance.
    """
    return {'tile_input': self.tile_input}

  @classmethod

# Path: tensorflow_model_remediation/common/docs.py
# def _no_op_decorator(obj):
# def _get_safe_decorator(decorator_name):
# 
# Path: tensorflow_model_remediation/common/types.py



# Path: tensorflow_model_remediation/min_diff/losses/kernels/base_kernel.py
import abc
import tensorflow as tf
from typing import Optional
from tensorflow_model_remediation.common import docs
from tensorflow_model_remediation.common import types

    Arguments:
      x: `tf.Tensor` of shape `[N, M, D]`.
      y: `tf.Tensor` of shape `[N, M, D]`.

    This method contains the logic for computing the kernel. It must be
    implemented by subclasses.

    Note: This method should not be called directly. To call a kernel on inputs,
    always use the `__call__` method, i.e. `kernel(x, y)`, which relies on the
    `call` method internally.

    Returns:
      `tf.Tensor` of shape `[N, M]`.
    """
    # pyformat: enable
    raise NotImplementedError('Must be implemented in subclasses')

  @docs.do_not_doc_in_subclasses
  def get_config(self):
    """Creates a config dictionary for the `MinDiffKernel` instance.

    Any subclass with additional attributes will need to override this method.
    When doing so, users will mostly likely want to first call `super`.

    Returns:
      A config dictionary for the `MinDiffKernel` isinstance.
    """
    return {'tile_input': self.tile_input}

  @classmethod

  @docs.do_not_doc_in_subclasses