def METHOD_NAME(
    self,
    values: Union[Collection[DataTV], StringifyValue],
    steps: Optional[Collection[float]] = None,
    timestamps: Optional[Collection[float]] = None,
    wait: bool = False,
    **kwargs,
) -> None:
    if is_stringify_value(values):
        values = self._handle_stringified_value(values)
    if steps is not None:
        verify_collection_type("steps", steps, (float, int))
        if len(steps) != len(values):
            raise ValueError(f"Number of steps must be equal to number of values ({len(steps)} != {len(values)}")
    if timestamps is not None:
        verify_collection_type("timestamps", timestamps, (float, int))
        if len(timestamps) != len(values):
            raise ValueError(
                f"Number of timestamps must be equal to number of values ({len(timestamps)} != {len(values)}"
            )
    value = self._data_to_value(values, steps=steps, timestamps=timestamps, **kwargs)
    ops = self._get_log_operations_from_value(value)
    with self._container.lock():
        for op in ops:
            self._enqueue_operation(op, wait=wait)