code: def test_assign(self):
      # given
      processor = OperationsPreprocessor()
  
      operations = [
          AssignFloat(["a"], 1),
          DeleteAttribute(["a"]),
          AssignString(["a"], "111"),
          DeleteAttribute(["b"]),
          AssignFloat(["b"], 2),
          AssignFloat(["c"], 3),
          AssignString(["c"], "333"),
          AssignString(["d"], "44"),
          AssignFloat(["e"], 5),
          AssignFloat(["e"], 10),
          AssignFloat(["e"], 33),
      ]
  
      # when
      processor.process(operations)
  
      # then
      result = processor.get_operations()
      self.assertEqual(result.upload_operations, [])
      self.assertEqual(result.artifact_operations, [])
      self.assertEqual(
          result.other_operations,
          [
              AssignFloat(["a"], 1),
              DeleteAttribute(["a"]),
              AssignString(["a"], "111"),
              DeleteAttribute(["b"]),
              AssignFloat(["b"], 2),
              AssignFloat(["c"], 3),
              AssignString(["d"], "44"),
              AssignFloat(["e"], 33),
          ],
      )
      self.assertEqual(
          result.errors,
          [
              MetadataInconsistency(
                  "Cannot perform AssignString operation on c: Attribute is not a String"
              )
          ],
      )
      self.assertEqual(processor.processed_ops_count, len(operations))
  
file_path: neptune-client/tests/unit/neptune/new/internal/backends/test_operations_preprocessor.py
imports: import uuid
  from neptune.exceptions import MetadataInconsistency
  from neptune.internal.backends.operations_preprocessor import OperationsPreprocessor
  from neptune.internal.operation import AddStrings, AssignFloat, AssignString, ClearFloatLog, ClearImageLog, ClearStringSet, ConfigFloatSeries, DeleteAttribute, LogFloats, LogImages, LogStrings, RemoveStrings, TrackFilesToArtifact, UploadFileSet
  from tests.unit.neptune.new.attributes.test_attribute_base import TestAttributeBase
label_desc: Use image node_id 2 for calling the TestOperationsPreprocessor obj's underlying member method code with example usage: obj.test_assign() without return types