Esempio n. 1
0
 def test_clear(self):
     processor = MagicMock()
     exp, path, wait = (
         self._create_run(processor),
         self._random_path(),
         self._random_wait(),
     )
     var = FloatSeries(exp, path)
     var.clear(wait=wait)
     processor.enqueue_operation.assert_called_once_with(ClearFloatLog(path), wait)
Esempio n. 2
0
    def test_log_value_errors(self):
        processor = MagicMock()
        exp, path = self._create_run(processor), self._random_path()
        attr = FloatSeries(exp, path)

        with self.assertRaises(ValueError):
            attr.log(["str", 5])
        with self.assertRaises(ValueError):
            attr.log([5, 10], step=10)
        with self.assertRaises(TypeError):
            attr.log(5, step="str")
        with self.assertRaises(TypeError):
            attr.log(5, timestamp="str")
Esempio n. 3
0
    def test_log_with_timestamp(self):
        value_step_and_expected = [
            (13, 5.3, LogFloats.ValueType(13, None, 5.3)),
            (15.3, 10, LogFloats.ValueType(15.3, None, 10)),
        ]

        for value, ts, expected in value_step_and_expected:
            processor = MagicMock()
            exp, path, wait = (
                self._create_run(processor),
                self._random_path(),
                self._random_wait(),
            )
            var = FloatSeries(exp, path)
            var.log(value, timestamp=ts, wait=wait)
            processor.enqueue_operation.assert_called_once_with(
                LogFloats(path, [expected]), wait
            )
Esempio n. 4
0
    def test_log(self):
        value_and_expected = [
            (13, [LogFloats.ValueType(13, None, self._now())]),
            (15.3, [LogFloats.ValueType(15.3, None, self._now())]),
            (
                [1, 9, 7],
                [
                    LogFloats.ValueType(1, None, self._now()),
                    LogFloats.ValueType(9, None, self._now()),
                    LogFloats.ValueType(7, None, self._now()),
                ],
            ),
            (
                (1, 9, 7),
                [
                    LogFloats.ValueType(1, None, self._now()),
                    LogFloats.ValueType(9, None, self._now()),
                    LogFloats.ValueType(7, None, self._now()),
                ],
            ),
            (
                {1, 9, 7},
                [
                    LogFloats.ValueType(1, None, self._now()),
                    LogFloats.ValueType(9, None, self._now()),
                    LogFloats.ValueType(7, None, self._now()),
                ],
            ),
        ]

        for value, expected in value_and_expected:
            processor = MagicMock()
            exp, path, wait = (
                self._create_run(processor),
                self._random_path(),
                self._random_wait(),
            )
            var = FloatSeries(exp, path)
            var.log(value, wait=wait)
            processor.enqueue_operation.assert_called_once_with(
                LogFloats(path, expected), wait
            )
Esempio n. 5
0
    def test_log_with_step(self):
        value_step_and_expected = [
            (13, 5.3, LogFloats.ValueType(13, 5.3, self._now())),
            (15.3, 10, LogFloats.ValueType(15.3, 10, self._now())),
            ([13], 5.3, LogFloats.ValueType(13, 5.3, self._now())),
            ((13,), 5.3, LogFloats.ValueType(13, 5.3, self._now())),
            ({13}, 5.3, LogFloats.ValueType(13, 5.3, self._now())),
        ]

        for value, step, expected in value_step_and_expected:
            processor = MagicMock()
            exp, path, wait = (
                self._create_run(processor),
                self._random_path(),
                self._random_wait(),
            )
            var = FloatSeries(exp, path)
            var.log(value, step=step, wait=wait)
            processor.enqueue_operation.assert_called_once_with(
                LogFloats(path, [expected]), wait
            )
Esempio n. 6
0
 def test_log(self):
     exp, path = self._create_run(), self._random_path()
     var = FloatSeries(exp, path)
     var.log([val for val in range(0, 5000)])
     self.assertEqual(4999, var.fetch_last())
     values = list(var.fetch_values()["value"].array)
     expected = list(range(0, 5000))
     self.assertEqual(len(set(expected)), len(set(values)))
Esempio n. 7
0
    def test_assign(self):
        value = FloatSeriesVal([17, 3.6], min=0, max=100, unit="%")
        expected = [
            LogFloats.ValueType(17, None, self._now()),
            LogFloats.ValueType(3.6, None, self._now()),
        ]

        processor = MagicMock()
        exp, path, wait = (
            self._create_run(processor),
            self._random_path(),
            self._random_wait(),
        )
        var = FloatSeries(exp, path)
        var.assign(value, wait=wait)
        self.assertEqual(3, processor.enqueue_operation.call_count)
        processor.enqueue_operation.assert_has_calls(
            [
                call(ConfigFloatSeries(path, min=0, max=100, unit="%"), False),
                call(ClearFloatLog(path), False),
                call(LogFloats(path, expected), wait),
            ]
        )
Esempio n. 8
0
    def log(
        self,
        value,
        step: Optional[float] = None,
        timestamp: Optional[float] = None,
        wait: bool = False,
        **kwargs,
    ) -> None:
        """Logs the provided value or a collection of values.

        Available for following field types (`Field types docs page`_):
            * `FloatSeries`
            * `StringSeries`
            * `FileSeries`


        Args:
            value: Value or collection of values to be added to the field.
            step (float or int, optional, default is None): Index of the log entry being appended.
                Must be strictly increasing.
                Defaults to `None`.
            timestamp(float or int, optional): Time index of the log entry being appended in form of Unix time.
                If `None` current time (`time.time()`) will be used as a timestamp.
                Defaults to `None`.
            wait (bool, optional): If `True` the client will wait to send all tracked metadata to the server.
                This makes the call synchronous.
                Defaults to `False`.

        .. _Field types docs page:
           https://docs.neptune.ai/api-reference/field-types

        """
        verify_type("step", step, (int, float, type(None)))
        verify_type("timestamp", timestamp, (int, float, type(None)))

        with self._run.lock():
            attr = self._run.get_attribute(self._path)
            if not attr:
                if is_collection(value):
                    if value:
                        first_value = next(iter(value))
                    else:
                        raise ValueError(
                            "Cannot deduce value type: `value` cannot be empty"
                        )
                else:
                    first_value = value

                if is_float(first_value):
                    attr = FloatSeries(self._run, parse_path(self._path))
                elif is_string(first_value):
                    attr = StringSeries(self._run, parse_path(self._path))
                elif FileVal.is_convertable(first_value):
                    attr = FileSeries(self._run, parse_path(self._path))
                elif is_float_like(first_value):
                    attr = FloatSeries(self._run, parse_path(self._path))
                elif is_string_like(first_value):
                    attr = StringSeries(self._run, parse_path(self._path))
                else:
                    raise TypeError("Value of unsupported type {}".format(
                        type(first_value)))

                self._run.set_attribute(self._path, attr)
            attr.log(value,
                     step=step,
                     timestamp=timestamp,
                     wait=wait,
                     **kwargs)
Esempio n. 9
0
 def test_get(self):
     exp, path = self._create_run(), self._random_path()
     var = FloatSeries(exp, path)
     var.log(5)
     var.log(34)
     self.assertEqual(34, var.fetch_last())
Esempio n. 10
0
 def test_log_type_error(self):
     values = [["text"], [[]], [5, ""], "string", None]
     for value in values:
         with self.assertRaises(Exception):
             FloatSeries(MagicMock(), MagicMock()).log(value)
Esempio n. 11
0
 def test_assign_type_error(self):
     values = [["text"], 55, "string", None]
     for value in values:
         with self.assertRaises(Exception):
             FloatSeries(MagicMock(), MagicMock()).assign(value)