code: def assign(self, value, wait: bool = False) -> None:
      if not self._is_value_type(value):
          value = self._data_to_value(value)
      clear_op = self._get_clear_operation()
      config_op = self._get_config_operation_from_value(value)
      with self._container.lock():
          if config_op:
              self._enqueue_operation(config_op, wait=False)
          if not value.values:
              self._enqueue_operation(clear_op, wait=wait)
          else:
              self._enqueue_operation(clear_op, wait=False)
              ops = self._get_log_operations_from_value(value)
              for op in ops:
                  self._enqueue_operation(op, wait=wait)
  
imports: import abc
  from typing import Collection, Generic, Iterable, List, Optional, TypeVar, Union
  from neptune.attributes.attribute import Attribute
  from neptune.internal.operation import LogOperation
  from neptune.internal.types.stringify_value import StringifyValue
  from neptune.internal.utils import is_collection, is_stringify_value, verify_collection_type, verify_type
  from neptune.internal.utils.iteration import get_batches
  from neptune.types.series.series import Series
label_desc: Use image node_id 10 for calling the Series obj's underlying member method code with example usage: obj.assign(value, wait) without return types