def test_set_start_updates_indexes(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, -5.0], True, False)
     )
     model.set_start(dateutil.parser.parse("1975-07-07T06:33"))
     self.assertEqual(model.value, TimeSeriesFixedResolution("1975-07-07T06:33", "2h", [2.3, -5.0], True, False))
     self.assertEqual(model.indexes, np.array(["1975-07-07T06:33", "1975-07-07T08:33"], dtype="datetime64"))
 def test_cannot_remove_all_rows(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, -5.0, 7.0], True, False)
     )
     self.assertTrue(model.removeRows(0, 3))
     self.assertEqual(model.value, TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3], True, False))
     self.assertEqual(model.indexes, np.array(["2019-07-05T12:00"], dtype="datetime64"))
 def test_removeRows_from_the_middle(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, -5.0, 7.0], True, False)
     )
     self.assertTrue(model.removeRows(1, 1))
     self.assertEqual(model.value, TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, 7.0], True, False))
     self.assertEqual(model.indexes, np.array(["2019-07-05T12:00", "2019-07-05T14:00"], dtype="datetime64"))
 def test_value_access(self):
     editor = TimeSeriesFixedResolutionEditor()
     editor.set_value(
         TimeSeriesFixedResolution("1996-04-06T16:06", "3 days",
                                   [4.0, 3.5, 3.0], True, True))
     self.assertEqual(
         editor.value(),
         TimeSeriesFixedResolution("1996-04-06T16:06", "3 days",
                                   [4.0, 3.5, 3.0], True, True))
 def test_batch_set_data(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, -5.0, 7.0], True, False)
     )
     indexes = [model.index(0, 0), model.index(1, 1), model.index(2, 1)]
     values = ["1999-01-01T12:00", 55.5, -55.5]
     model.batch_set_data(indexes, values)
     expected = TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, 55.5, -55.5], True, False)
     self.assertEqual(model.value, expected)
 def test_set_resolution_updates_indexes(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, -5.0], True, False)
     )
     model.set_resolution([relativedelta(minutes=4)])
     self.assertEqual(
         model.value, TimeSeriesFixedResolution("2019-07-05T12:00", "4 minutes", [2.3, -5.0], True, False)
     )
     self.assertEqual(model.indexes, np.array(["2019-07-05T12:00", "2019-07-05T12:04"], dtype="datetime64"))
 def test_setData(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, -5.0], True, False)
     )
     model_index = model.index(0, 1)
     model.setData(model_index, -4.0)
     self.assertEqual(
         model.value, TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [-4.0, -5.0], True, False)
     )
 def test_reset_updates_indexes(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3, -5.0], True, False)
     )
     model.reset(TimeSeriesFixedResolution("1991-01-01T13:30", "3 months", [7.0, -4.0], False, True))
     self.assertEqual(
         model.value, TimeSeriesFixedResolution("1991-01-01T13:30", "3 months", [7.0, -4.0], False, True)
     )
     self.assertEqual(model.indexes, np.array(["1991-01-01T13:30", "1991-04-01T13:30"], dtype="datetime64"))
 def test_insertRows_single_row_in_the_middle(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [-5.0, 7.0], True, False)
     )
     self.assertTrue(model.insertRows(1, 1))
     self.assertEqual(
         model.value, TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [-5.0, 0.0, 7.0], True, False)
     )
     self.assertEqual(
         model.indexes, np.array(["2019-07-05T12:00", "2019-07-05T14:00", "2019-07-05T16:00"], dtype="datetime64")
     )
 def test_insertRows_at_the_beginning(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [-5.0, 7.0], True, False)
     )
     self.assertTrue(model.insertRows(0, 1))
     self.assertEqual(
         model.value, TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [0.0, -5.0, 7.0], True, False)
     )
     np.testing.assert_equal(
         model.indexes, np.array(["2019-07-05T12:00", "2019-07-05T14:00", "2019-07-05T16:00"], dtype="datetime64")
     )
Esempio n. 11
0
    def insertRows(self, row, count, parent=QModelIndex()):
        """
        Inserts new values to the series.

        The new values are set to zero. Start time or resolution are left unchanged.

        Args:
            row (int): a numeric index to the first stamp/value to insert
            count (int): number of stamps/values to insert
            parent (QModelIndex): index to a parent model
        Returns:
            True if the operation was successful
        """
        self.beginInsertRows(parent, row, row + count - 1)
        old_values = self._value.values
        if row == len(old_values):
            new_values = np.append(old_values, np.zeros(count))
        else:
            new_values = np.insert(old_values, row, np.zeros(count))
        self._value = TimeSeriesFixedResolution(self._value.start,
                                                self._value.resolution,
                                                new_values,
                                                self._value.ignore_year,
                                                self._value.repeat)
        self._index_cache = self._value.indexes
        self.endInsertRows()
        return True
Esempio n. 12
0
    def removeRows(self, row, count, parent=QModelIndex()):
        """
        Removes values from the series.

        Args:
            row (int): a numeric index to the series where to begin removing
            count (int): how many stamps/values to remove
            parent (QModelIndex): an index to the parent model
        Returns:
            True if the operation was successful.
        """
        if len(self._value) == 1:
            return False
        if count == len(self._value):
            count = len(self._value) - 1
            row = 1
        self.beginRemoveRows(parent, row, row + count - 1)
        old_values = self._value.values
        remove_indexes = range(row, row + count) if count > 1 else row
        new_values = np.delete(old_values, remove_indexes)
        self._value = TimeSeriesFixedResolution(self._value.start,
                                                self._value.resolution,
                                                new_values,
                                                self._value.ignore_year,
                                                self._value.repeat)
        self._index_cache = self._value.indexes
        self.endRemoveRows()
        return True
 def setUp(self):
     QApplication.clipboard().clear()
     self._table_view = TimeSeriesFixedResolutionTableView(parent=None)
     series = TimeSeriesFixedResolution("2019-08-08T15:00", "1h",
                                        [1.1, 2.2, 3.3, 4.4], False, False)
     model = TimeSeriesModelFixedResolution(series)
     self._table_view.setModel(model)
 def test_indexes(self):  # pylint: disable=no-self-use
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [-5.0, 7.0], True, False)
     )
     numpy.testing.assert_equal(
         model.indexes, numpy.array(["2019-07-05T12:00", "2019-07-05T14:00"], dtype='datetime64')
     )
 def test_initial_value(self):
     editor = TimeSeriesFixedResolutionEditor()
     value = editor.value()
     self.assertEqual(
         value,
         TimeSeriesFixedResolution("2000-01-01T00:00", "1 hour", [0.0, 0.0],
                                   False, False))
 def test_editor_sets_fixed_resolution_time_series_in_parent_model(self):
     start = dateutil.parser.parse("2019-07-03T12:22")
     resolution = [duration_to_relativedelta("4 years")]
     values = np.array([23.0, 5.0])
     time_series = TimeSeriesFixedResolution(start, resolution, values,
                                             False, True)
     self._check_parent_model_updated_when_closed(time_series)
 def test_flags(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [-5.0, 7.0], True, False)
     )
     model_index = model.index(0, 0)
     self.assertEqual(model.flags(model_index), Qt.ItemIsSelectable | Qt.ItemIsEnabled)
     model_index = model.index(0, 1)
     self.assertEqual(model.flags(model_index), Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsEditable)
Esempio n. 18
0
 def test_time_series_in_edit_role(self):
     value = TimeSeriesFixedResolution("2019-07-12T08:00", "7 hours", [1.1, 2.2, 3.3], False, False)
     self.db_mngr.get_item.return_value = {"value": to_database(value)}
     formatted = self.get_value(Qt.EditRole)
     self.assertEqual(formatted, to_database(value))
     value = TimeSeriesVariableResolution(["2019-07-12T08:00", "2019-07-12T16:00"], [0.0, 100.0], False, False)
     self.db_mngr.get_item.return_value = {"value": to_database(value)}
     formatted = self.get_value(Qt.EditRole)
     self.assertEqual(formatted, to_database(value))
 def test_data(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [-5.0, 7.0], True, False)
     )
     for role in [Qt.DisplayRole, Qt.EditRole]:
         model_index = model.index(0, 0)
         self.assertEqual(model.data(model_index, role), "2019-07-05T12:00:00")
         model_index = model.index(0, 1)
         self.assertEqual(model.data(model_index, role), -5.0)
Esempio n. 20
0
 def test_time_series_in_tool_tip_role(self):
     value = TimeSeriesFixedResolution("2019-07-12T08:00", ["7 hours", "12 hours"], [1.1, 2.2, 3.3], False, False)
     self.db_mngr.get_item.return_value = {"value": to_database(value)}
     formatted = self.get_value(Qt.ToolTipRole)
     self.assertEqual(formatted, "Start: 2019-07-12 08:00:00, resolution: [7h, 12h], length: 3")
     value = TimeSeriesVariableResolution(["2019-07-12T08:00", "2019-07-12T16:00"], [0.0, 100.0], False, False)
     self.db_mngr.get_item.return_value = {"value": to_database(value)}
     formatted = self.get_value(Qt.ToolTipRole)
     self.assertEqual(formatted, "Start: 2019-07-12T08:00:00, resolution: variable, length: 2")
 def test_paste_value_when_time_stamp_is_selected(self):
     selection_model = self._table_view.selectionModel()
     model = self._table_view.model()
     selection_model.select(model.index(0, 0), QItemSelectionModel.Select)
     copied_data = locale.str(-1.1)
     QApplication.clipboard().setText(copied_data)
     self._table_view.paste()
     series = TimeSeriesFixedResolution("2019-08-08T15:00", "1h",
                                        [-1.1, 2.2, 3.3, 4.4], False, False)
     self.assertEqual(model.value, series)
 def test_pasting_to_last_row_expands_model(self):
     selection_model = self._table_view.selectionModel()
     model = self._table_view.model()
     selection_model.select(model.index(3, 1), QItemSelectionModel.Select)
     copied_data = locale.str(-4.4) + '\n' + locale.str(-5.5)
     QApplication.clipboard().setText(copied_data)
     self._table_view.paste()
     series = TimeSeriesFixedResolution("2019-08-08T15:00", "1h",
                                        [1.1, 2.2, 3.3, -4.4, -5.5], False,
                                        False)
     self.assertEqual(model.value, series)
 def test_paste_to_larger_selection_overrides_first_rows_only(self):
     selection_model = self._table_view.selectionModel()
     model = self._table_view.model()
     selection_model.select(model.index(0, 1), QItemSelectionModel.Select)
     selection_model.select(model.index(1, 1), QItemSelectionModel.Select)
     copied_data = locale.str(-1.1)
     QApplication.clipboard().setText(copied_data)
     self._table_view.paste()
     series = TimeSeriesFixedResolution("2019-08-08T15:00", "1h",
                                        [-1.1, 2.2, 3.3, 4.4], False, False)
     self.assertEqual(model.value, series)
 def test_paste_to_multirow_selection_limits_pasted_data(self):
     selection_model = self._table_view.selectionModel()
     model = self._table_view.model()
     selection_model.select(model.index(0, 1), QItemSelectionModel.Select)
     selection_model.select(model.index(1, 1), QItemSelectionModel.Select)
     copied_data = locale.str(-1.1) + '\n' + locale.str(
         -2.2) + '\n' + locale.str(-3.3)
     QApplication.clipboard().setText(copied_data)
     self._table_view.paste()
     series = TimeSeriesFixedResolution("2019-08-08T15:00", "1h",
                                        [-1.1, -2.2, 3.3, 4.4], False,
                                        False)
     self.assertEqual(model.value, series)
Esempio n. 25
0
 def test_remove_rows_with_time_series_fixed_resolution_editor(self):
     editor = TimeSeriesFixedResolutionEditor()
     editor.set_value(TimeSeriesFixedResolution("2020-11-11T14:25", "1D", [-1.1, -2.2], False, False))
     table_view = editor._ui.time_series_table
     table_view.selectRow(0)
     model = table_view.model()
     rect = table_view.visualRect(model.index(0, 0))
     menu = ArrayTableContextMenu(editor, table_view, rect.center())
     remove_action = _find_action(menu, "Remove rows")
     self.assertIsNotNone(remove_action)
     remove_action.trigger()
     self.assertEqual(model.rowCount(), 1 + 1)
     self.assertEqual(model.index(0, 0).data(), "2020-11-11T14:25:00")
     self.assertEqual(model.index(0, 1).data(), -2.2)
Esempio n. 26
0
 def test_insert_row_before_with_time_series_fixed_resolution_editor(self):
     editor = TimeSeriesFixedResolutionEditor()
     editor.set_value(TimeSeriesFixedResolution("2020-11-11T14:25", "1D", [-1.1], False, False))
     table_view = editor._ui.time_series_table
     table_view.selectRow(0)
     model = table_view.model()
     rect = table_view.visualRect(model.index(0, 0))
     menu = IndexedValueTableContextMenu(table_view, rect.center())
     insert_action = _find_action(menu, "Insert row before")
     self.assertIsNotNone(insert_action)
     insert_action.trigger()
     self.assertEqual(model.rowCount(), 2 + 1)
     self.assertEqual(model.index(0, 0).data(), "2020-11-11T14:25:00")
     self.assertEqual(model.index(0, 1).data(), 0.0)
     self.assertEqual(model.index(1, 0).data(), "2020-11-12T14:25:00")
     self.assertEqual(model.index(1, 1).data(), -1.1)
    def _change_parameter_type(self, selector_index):
        """
        Handles switching between value types.

        Does a rude conversion between fixed and variable resolution time series.
        In other cases, a default 'empty' value is used.

        Args:
            selector_index (int): an index to the selector combo box
        """
        old_index = self._ui.editor_stack.currentIndex()
        if (selector_index == self._editor_indexes[
                ValueType.TIME_SERIES_VARIABLE_RESOLUTION] and old_index ==
                self._editor_indexes[ValueType.TIME_SERIES_FIXED_RESOLUTION]):
            fixed_resolution_value = self._editors[
                ValueType.TIME_SERIES_FIXED_RESOLUTION].value()
            stamps = fixed_resolution_value.indexes
            values = fixed_resolution_value.values
            variable_resolution_value = TimeSeriesVariableResolution(
                stamps, values, fixed_resolution_value.ignore_year,
                fixed_resolution_value.repeat)
            self._editors[ValueType.TIME_SERIES_VARIABLE_RESOLUTION].set_value(
                variable_resolution_value)
        elif (selector_index
              == self._editor_indexes[ValueType.TIME_SERIES_FIXED_RESOLUTION]
              and old_index == self._editor_indexes[
                  ValueType.TIME_SERIES_VARIABLE_RESOLUTION]):
            variable_resolution_value = self._editors[
                ValueType.TIME_SERIES_VARIABLE_RESOLUTION].value()
            stamps = variable_resolution_value.indexes
            start = stamps[0]
            difference = stamps[1] - start
            resolution = [duration_to_relativedelta(str(difference))]
            fixed_resolution_value = TimeSeriesFixedResolution(
                start,
                resolution,
                variable_resolution_value.values,
                variable_resolution_value.ignore_year,
                variable_resolution_value.repeat,
            )
            self._editors[ValueType.TIME_SERIES_FIXED_RESOLUTION].set_value(
                fixed_resolution_value)
        self._ui.editor_stack.setCurrentIndex(selector_index)
        if selector_index == self._editor_indexes[ValueType.PLAIN_VALUE]:
            self._editors[ValueType.PLAIN_VALUE].set_value("")
Esempio n. 28
0
    def __init__(self, parent=None):
        from ..ui.time_series_fixed_resolution_editor import Ui_TimeSeriesFixedResolutionEditor

        super().__init__(parent)
        start = datetime(year=2000, month=1, day=1)
        resolution = [duration_to_relativedelta("1 hour")]
        values = 2 * [0.0]
        initial_value = TimeSeriesFixedResolution(start, resolution, values,
                                                  False, False)
        self._model = TimeSeriesModelFixedResolution(initial_value)
        self._model.dataChanged.connect(self._update_plot)
        self._model.modelReset.connect(self._update_plot)
        self._model.rowsInserted.connect(self._update_plot)
        self._model.rowsRemoved.connect(self._update_plot)
        self._ui = Ui_TimeSeriesFixedResolutionEditor()
        self._ui.setupUi(self)
        self._plot_widget = PlotWidget()
        self._ui.splitter.insertWidget(1, self._plot_widget)
        self._ui.start_time_edit.setText(str(initial_value.start))
        self._ui.start_time_edit.editingFinished.connect(
            self._start_time_changed)
        self._ui.calendar_button.clicked.connect(self._show_calendar)
        self._ui.resolution_edit.setText(
            _resolution_to_text(initial_value.resolution))
        self._ui.resolution_edit.editingFinished.connect(
            self._resolution_changed)
        self._time_series_table = TimeSeriesFixedResolutionTableView(
            self._ui.splitter)
        self._ui.left_layout.addWidget(self._time_series_table)
        self._time_series_table.setModel(self._model)
        self._time_series_table.setContextMenuPolicy(Qt.CustomContextMenu)
        self._time_series_table.customContextMenuRequested.connect(
            self._show_table_context_menu)
        self._ui.ignore_year_check_box.setChecked(
            self._model.value.ignore_year)
        self._ui.ignore_year_check_box.toggled.connect(
            self._model.set_ignore_year)
        self._ui.repeat_check_box.setChecked(self._model.value.repeat)
        self._ui.repeat_check_box.toggled.connect(self._model.set_repeat)
        self._calendar = QCalendarWidget(self)
        self._calendar.setMinimumDate(QDate(100, 1, 1))
        self._calendar.setWindowFlags(Qt.Popup)
        self._calendar.activated.connect(self._select_date)
        self._update_plot()
 def test_removing_last_row_fails(self):
     model = TimeSeriesModelFixedResolution(
         TimeSeriesFixedResolution("2019-07-05T12:00", "2 hours", [2.3],
                                   True, False))
     self.assertFalse(model.removeRows(0, 1))