def fill_missing_colors(self): """ Generates any missing colors based on average saturation and value, and the sum and difference of the default hue and average hue difference (between adjacent colors). """ assert len(self) >= 2, "Need at least 2 colors in palette to continue" hue_diff = self.get_average_difference_from_target("hue") avg_saturation, avg_value = map(self.get_average_value, ("saturation", "value")) colors = sorted(self.target.items(), key=lambda (name, rgb): rgb) for index in range(len(colors)): name, rgb = colors[index] if name in self: continue default_color = Color(*rgb) candidates = [] if (default_color.hue - hue_diff) >= 0: candidates.append(Color.from_hsv([default_color.hue - hue_diff, avg_saturation, avg_value])) if (default_color.hue + hue_diff) <= 360: candidates.append(Color.from_hsv([default_color.hue + hue_diff, avg_saturation, avg_value])) elif (default_color.hue + hue_diff) > 360: print name, (default_color.hue - hue_diff) % 360 self[name] = map(lambda candidate: (candidate, default_color.distance(candidate)), candidates)