code: def test_log_with_step(self, get_operation_processor):
      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()
          get_operation_processor.return_value = processor
  
          with self._exp() as exp:
              path, wait = (
                  self._random_path(),
                  self._random_wait(),
              )
              var = FloatSeries(exp, path)
              var.log(value, step=step, wait=wait)
              processor.enqueue_operation.assert_called_with(
                  LogFloats(path, [expected]), wait=wait
              )
  
file_path: neptune-client/tests/unit/neptune/new/attributes/series/test_series.py
imports: from mock import MagicMock, call, patch
  from neptune.attributes.series.float_series import FloatSeries, FloatSeriesVal
  from neptune.attributes.series.string_series import StringSeries, StringSeriesVal
  from neptune.internal.operation import ClearFloatLog, ClearStringLog, ConfigFloatSeries, LogFloats
  from tests.unit.neptune.new.attributes.test_attribute_base import TestAttributeBase
label_desc: Use image node_id 4 for calling the TestSeries obj's underlying member method code with example usage: obj.test_log_with_step(get_operation_processor) without return types