text: # Copyright 2020 The Chromium Authors. All rights reserved.
  # Use of this source code is governed by a BSD-style license that can be
  # found in the LICENSE file.
  
  from __future__ import print_function
  
  
  class ParameterSet(object):
    """Struct-like object for holding parameters for an iteration."""
  
    # This parameter is not varied, so it is set statically once instead of being
    # passed around everywhere.
    ignored_border_thickness = 0
  
    def __init__(self, max_diff, delta_threshold, edge_threshold):
      """
      Args:
        max_diff: The maximum number of pixels that are allowed to differ.
        delta_threshold: The maximum per-channel delta sum that is allowed.
        edge_threshold: The threshold for what is considered an edge for a
            Sobel filter.
      """
      self.max_diff = max_diff
      self.delta_threshold = delta_threshold
      self.edge_threshold = edge_threshold
  
    def AsList(self):
      """Returns the object's data in list format.
  
      The returned object is suitable for appending to a "goldctl match" command
      in order to compare using the parameters stored within the object.
  
      Returns:
        A list of strings.
      """
      return [
          '--parameter',
          'fuzzy_max_different_pixels:%d' % self.max_diff,
          '--parameter',
          'fuzzy_pixel_delta_threshold:%d' % self.delta_threshold,
          '--parameter',
          'fuzzy_ignored_border_thickness:%d' % self.ignored_border_thickness,
          '--parameter',
          'sobel_edge_threshold:%d' % self.edge_threshold,
      ]
  
    def __str__(self):
      return ('Max different pixels: %d, Max per-channel delta sum: %d, Sobel '
              'edge threshold: %d, Ignored border thickness: %d') % (
                  self.max_diff, self.delta_threshold, self.edge_threshold,
                  self.ignored_border_thickness)
  
    def __eq__(self, other):
      return (self.max_diff == other.max_diff
              and self.delta_threshold == other.delta_threshold
              and self.edge_threshold == other.edge_threshold
              and self.ignored_border_thickness == other.ignored_border_thickness)
  
    def __ne__(self, other):
      return not self.__eq__(other)
  
    def __hash__(self):
      return hash((self.max_diff, self.delta_threshold, self.edge_threshold,
                   self.ignored_border_thickness))
  