def test_copy_plot_limits(self): plot_limits = PlotLimits() plot_limits.value_limits = 1, 2 plot_limits.index_limits = 3, 4 plot_limits.count_limits = 5, 6 plot_limits.depth_limits = 7, 8 plot_limits.density_limits = 9, 10 plot_limits.date_limits = datetime.date(1999, 1, 1), datetime.date( 1999, 12, 31) copy_of_plot_limits = PlotLimits() copy_of_plot_limits.copyLimitsFrom(plot_limits) self.assertEqual(copy_of_plot_limits, plot_limits) self.assertEqual(copy_of_plot_limits.value_limits, (1, 2)) self.assertEqual(copy_of_plot_limits.index_limits, (3, 4)) self.assertEqual(copy_of_plot_limits.count_limits, (5, 6)) self.assertEqual(copy_of_plot_limits.depth_limits, (7, 8)) self.assertEqual(copy_of_plot_limits.density_limits, (9, 10)) self.assertEqual( copy_of_plot_limits.date_limits, (datetime.date(1999, 1, 1), datetime.date(1999, 12, 31)), )
def test_plot_limits_construction(self): plot_limits = PlotLimits() self.assertEqual(plot_limits.value_minimum, None) self.assertEqual(plot_limits.value_maximum, None) self.assertEqual(plot_limits.value_limits, (None, None)) self.assertEqual(plot_limits.index_minimum, None) self.assertEqual(plot_limits.index_maximum, None) self.assertEqual(plot_limits.index_limits, (None, None)) self.assertEqual(plot_limits.count_minimum, None) self.assertEqual(plot_limits.count_maximum, None) self.assertEqual(plot_limits.count_limits, (None, None)) self.assertEqual(plot_limits.density_minimum, None) self.assertEqual(plot_limits.density_maximum, None) self.assertEqual(plot_limits.density_limits, (None, None)) self.assertEqual(plot_limits.depth_minimum, None) self.assertEqual(plot_limits.depth_maximum, None) self.assertEqual(plot_limits.depth_limits, (None, None)) self.assertEqual(plot_limits.date_minimum, None) self.assertEqual(plot_limits.date_maximum, None) self.assertEqual(plot_limits.date_limits, (None, None))
def __init__(self, plot_settings, title="Unnamed", x_label=None, y_label=None): self._title = title self._plot_settings = plot_settings if self._plot_settings is None: raise ValueError('PlotConfig needs a non-None plot settings.') self._line_color_cycle_colors = ["#000000"] self._line_color_cycle = itertools.cycle(self._line_color_cycle_colors) #Black # Blueish, Greenlike, Beigeoid, Pinkness, Orangy-Brown self.setLineColorCycle(["#386CB0", "#7FC97F", "#FDC086", "#F0027F", "#BF5B17"]) # alternative color cycle: # ["#e41a1c", "#377eb8", "#4daf4a", "#984ea3", "#ff7f00", "#ffff33", # "#a65628", "#f781bf" ,"#386CB0", "#7FC97F", "#FDC086", "#F0027F", "#BF5B17"] self._legend_items = [] self._legend_labels = [] self._x_label = x_label self._y_label = y_label self._limits = PlotLimits() self._default_style = PlotStyle(name="Default", color=None, alpha=0.8) self._refcase_style = PlotStyle(name="Refcase", alpha=0.8, line_style="--", marker="", width=2.0, enabled=self._plot_settings["SHOW_REFCASE"]) self._history_style = PlotStyle(name="History", alpha=0.8, marker=".", width=2.0, enabled=self._plot_settings["SHOW_HISTORY"]) self._observs_style = PlotStyle(name="Observations", line_style="-", alpha=0.8, marker=".", width=1.0, color="#000000") self._histogram_style = PlotStyle(name="Histogram", width=2.0) self._distribution_style = PlotStyle(name="Distribution", line_style="", marker="o", alpha=0.5, size=10.0) self._distribution_line_style = PlotStyle(name="Distribution Lines", line_style="-", alpha=0.25, width=1.0) self._distribution_line_style.setEnabled(False) self._current_color = None self._legend_enabled = True self._grid_enabled = True self._statistics_style = { "mean": PlotStyle("Mean", line_style=""), "p50": PlotStyle("P50", line_style=""), "min-max": PlotStyle("Min/Max", line_style=""), "p10-p90": PlotStyle("P10-P90", line_style=""), "p33-p67": PlotStyle("P33-P67", line_style=""), "std": PlotStyle("Std dev", line_style="") } self._std_dev_factor = 1 # sigma 1 is default std dev
def test_plot_config(self): ps = PlotSettings() plot_config = PlotConfig(ps, "Golden Sample", x_label="x", y_label="y") limits = PlotLimits() limits.count_limits = 1, 2 limits.depth_limits = 3, 4 limits.density_limits = 5, 6 limits.date_limits = datetime.date(2005, 2, 5), datetime.date(2006, 2, 6) limits.index_limits = 7, 8 limits.value_limits = 9.0, 10.0 plot_config.limits = limits self.assertEqual(plot_config.limits, limits) plot_config.setDistributionLineEnabled(True) plot_config.setLegendEnabled(False) plot_config.setGridEnabled(False) plot_config.setRefcaseEnabled(False) plot_config.setObservationsEnabled(False) style = PlotStyle("test_style", line_style=".", marker="g", width=2.5, size=7.5) plot_config.setDefaultStyle(style) plot_config.setRefcaseStyle(style) plot_config.setStatisticsStyle("mean", style) plot_config.setStatisticsStyle("min-max", style) plot_config.setStatisticsStyle("p50", style) plot_config.setStatisticsStyle("p10-p90", style) plot_config.setStatisticsStyle("p33-p67", style) plot_config.setStatisticsStyle("std", style) copy_of_plot_config = PlotConfig(ps, "Copy of Golden Sample") copy_of_plot_config.copyConfigFrom(plot_config) self.assertEqual(plot_config.isLegendEnabled(), copy_of_plot_config.isLegendEnabled()) self.assertEqual(plot_config.isGridEnabled(), copy_of_plot_config.isGridEnabled()) self.assertEqual(plot_config.isObservationsEnabled(), copy_of_plot_config.isObservationsEnabled()) self.assertEqual(plot_config.isDistributionLineEnabled(), copy_of_plot_config.isDistributionLineEnabled()) self.assertEqual(plot_config.refcaseStyle(), copy_of_plot_config.refcaseStyle()) self.assertEqual(plot_config.observationsStyle(), copy_of_plot_config.observationsStyle()) self.assertEqual(plot_config.histogramStyle(), copy_of_plot_config.histogramStyle()) self.assertEqual(plot_config.defaultStyle(), copy_of_plot_config.defaultStyle()) self.assertEqual(plot_config.currentColor(), copy_of_plot_config.currentColor()) self.assertEqual(plot_config.getStatisticsStyle("mean"), copy_of_plot_config.getStatisticsStyle("mean")) self.assertEqual(plot_config.getStatisticsStyle("min-max"), copy_of_plot_config.getStatisticsStyle("min-max")) self.assertEqual(plot_config.getStatisticsStyle("p50"), copy_of_plot_config.getStatisticsStyle("p50")) self.assertEqual(plot_config.getStatisticsStyle("p10-p90"), copy_of_plot_config.getStatisticsStyle("p10-p90")) self.assertEqual(plot_config.getStatisticsStyle("p33-p67"), copy_of_plot_config.getStatisticsStyle("p33-p67")) self.assertEqual(plot_config.getStatisticsStyle("std"), copy_of_plot_config.getStatisticsStyle("std")) self.assertEqual(plot_config.title(), copy_of_plot_config.title()) self.assertEqual(plot_config.limits, copy_of_plot_config.limits) plot_config.currentColor() # cycle state will not be copied plot_config.nextColor() copy_of_plot_config = PlotConfig(ps, "Another Copy of Golden Sample") copy_of_plot_config.copyConfigFrom(plot_config) self.assertEqual(plot_config.refcaseStyle(), copy_of_plot_config.refcaseStyle()) self.assertEqual(plot_config.observationsStyle(), copy_of_plot_config.observationsStyle()) self.assertNotEqual(plot_config.histogramStyle(), copy_of_plot_config.histogramStyle()) self.assertNotEqual(plot_config.defaultStyle(), copy_of_plot_config.defaultStyle()) self.assertNotEqual(plot_config.currentColor(), copy_of_plot_config.currentColor()) self.assertNotEqual(plot_config.getStatisticsStyle("mean"), copy_of_plot_config.getStatisticsStyle("mean")) self.assertNotEqual(plot_config.getStatisticsStyle("min-max"), copy_of_plot_config.getStatisticsStyle("min-max")) self.assertNotEqual(plot_config.getStatisticsStyle("p50"), copy_of_plot_config.getStatisticsStyle("p50")) self.assertNotEqual(plot_config.getStatisticsStyle("p10-p90"), copy_of_plot_config.getStatisticsStyle("p10-p90")) self.assertNotEqual(plot_config.getStatisticsStyle("p33-p67"), copy_of_plot_config.getStatisticsStyle("p33-p67")) self.assertNotEqual(plot_config.getStatisticsStyle("std"), copy_of_plot_config.getStatisticsStyle("std"))
def limits(self): """@rtype: PlotLimits""" limits = PlotLimits() limits.copyLimitsFrom(self._limits) return limits
def test_plot_limits(self): plot_limits = PlotLimits() limit_names = ["value", "index", "count", "density", "depth", "date"] non_numbers = [ "string", datetime.date(2001, 1, 1), "3.0", "1e-5", "-5.5", "-.5" ] positive_floats = [1.0, 1.5, 3.1415, 1e10, 5.2e-7] negative_floats = [-1.0, -1.5, -3.1415, -1e10, -5.2e-7] positive_ints = [1, 5, 1000] negative_ints = [-1, -5, -1000] non_dates = ["string", "3.4", "2001-01-01", datetime.time()] dates = [datetime.date(2001, 1, 1), datetime.datetime(2010, 3, 3)] setter_should_fail_values = { "value": non_numbers + dates, "index": non_numbers + positive_floats + negative_floats + dates, "depth": non_numbers + negative_floats + negative_ints + negative_ints, "count": non_numbers + negative_ints + negative_floats + positive_floats, "density": non_numbers + negative_floats + negative_ints, "date": non_dates } setter_should_succeed_values = { "value": positive_floats + negative_floats + positive_ints + negative_ints, "index": positive_ints, "depth": positive_floats + positive_ints, "count": positive_ints, "density": positive_floats + positive_ints, "date": dates } for attribute_name in limit_names: self.assertIsNone( getattr(plot_limits, "%s_minimum" % attribute_name)) self.assertIsNone( getattr(plot_limits, "%s_maximum" % attribute_name)) self.assertTupleEqual( getattr(plot_limits, "%s_limits" % attribute_name), (None, None)) with self.assertNotRaises(): setattr(plot_limits, "%s_minimum" % attribute_name, None) setattr(plot_limits, "%s_maximum" % attribute_name, None) setattr(plot_limits, "%s_limits" % attribute_name, (None, None)) with self.assertRaises(TypeError): setattr(plot_limits, "%s_limits" % attribute_name, None) for value in setter_should_fail_values[attribute_name]: with self.assertRaises((TypeError, ValueError)): setattr(plot_limits, "%s_minimum" % attribute_name, value) with self.assertRaises((TypeError, ValueError)): setattr(plot_limits, "%s_maximum" % attribute_name, value) self.assertTupleEqual( getattr(plot_limits, "%s_limits" % attribute_name), (None, None)) for value in setter_should_succeed_values[attribute_name]: with self.assertNotRaises(): setattr(plot_limits, "%s_minimum" % attribute_name, value) setattr(plot_limits, "%s_maximum" % attribute_name, value) minimum = getattr(plot_limits, "%s_minimum" % attribute_name) maximum = getattr(plot_limits, "%s_maximum" % attribute_name) self.assertEqual(minimum, value) self.assertEqual(maximum, value) self.assertTupleEqual( getattr(plot_limits, "%s_limits" % attribute_name), (minimum, maximum))
def __init__(self, title="Unnamed", x_label=None, y_label=None): super(PlotConfig, self).__init__() self._title = title self._line_color_cycle_colors = ["#000000"] self._line_color_cycle = itertools.cycle( self._line_color_cycle_colors) #Black # Blueish, Greenlike, Beigeoid, Pinkness, Orangy-Brown self.setLineColorCycle( ["#386CB0", "#7FC97F", "#FDC086", "#F0027F", "#BF5B17"]) self._legend_items = [] self._legend_labels = [] self._x_label = x_label self._y_label = y_label self._limits = PlotLimits() self._default_style = PlotStyle(name="Default", color=None, alpha=0.8) self._refcase_style = PlotStyle(name="Refcase", alpha=0.8, marker="x", width=2.0) self._history_style = PlotStyle(name="History", alpha=0.8, marker="D", width=2.0) # Insanely ugly implementation of user preferences. if os.getenv("ERT_SHOW_HISTORY_VECTORS"): self._history_style.setEnabled(True) else: self._history_style.setEnabled(False) self._observation_style = PlotStyle(name="Observations") self._histogram_style = PlotStyle(name="Histogram", width=2.0) self._distribution_style = PlotStyle(name="Distribution", line_style="", marker="o", alpha=0.5, size=10.0) self._distribution_line_style = PlotStyle(name="Distribution Lines", line_style="-", alpha=0.25, width=1.0) self._distribution_line_style.setEnabled(False) self._current_color = None self._legend_enabled = True self._grid_enabled = True self._statistics_style = { "mean": PlotStyle("Mean", line_style=""), "p50": PlotStyle("P50", line_style=""), "min-max": PlotStyle("Min/Max", line_style=""), "p10-p90": PlotStyle("P10-P90", line_style=""), "p33-p67": PlotStyle("P33-P67", line_style=""), "std": PlotStyle("Std dev", line_style="") } self._std_dev_factor = 1 # sigma 1 is default std dev