def test_partial_update_should_add_score_modifiers(self):
        """
        Test that partial updates which specifically add new fields reflect properly in score modifiers tensors.
        Along with updating score modifiers, we also check that version_uuid changes since we are processing an update request that contains maps.
        """
        test_docs = [self.doc, self.doc2, self.doc3]
        version_uuid = {}

        for doc in test_docs:
            with self.subTest(f"Adding score modifiers for document with ID {doc['_id']}"):
                id = doc['_id']
                # Doing a get to set the version_uuid in the version_uuid hashmap, which we'll check later to make sure it has changed after
                # processing an update request that contains maps
                raw_vespa_doc = self.config.vespa_client.get_document(id, self.index.schema_name)
                doc = raw_vespa_doc.document.dict().get('fields')
                self.assertIsNotNone(doc.get('marqo__version_uuid'))  # version_uuid should be present.
                version_uuid[id] = doc.get('marqo__version_uuid')

                # Create a document with existing fields first to verify we're only adding
                original_doc = tensor_search.get_document_by_id(self.config, self.index.name, id)

                # Perform update with only additions, not replacements
                res = self.config.document.partial_update_documents([{
                    '_id': id,
                    'int_map_2': {
                        'd': 5,  # adding entirely new map
                        'e': 6,
                    },
                    'float_map_2': {
                        'f': 4.0,  # adding entirely new map
                    },
                    'new_int': 1,  # new int field
                    'new_float': 2.0,  # new float field
                }], self.index)
                self.assertFalse(res.errors, f"Expected no errors when updating document {id}")

                # Verify field types
                # Verify field types using helper method
                field_type_pairs = [
                    ('int_map_2.d', MarqoFieldTypes.INT_MAP),
                    ('int_map_2', MarqoFieldTypes.INT_MAP),
                    ('int_map_2.e', MarqoFieldTypes.INT_MAP),
                    ('float_map_2.f', MarqoFieldTypes.FLOAT_MAP),
                    ('float_map_2', MarqoFieldTypes.FLOAT_MAP),
                    ('new_int', MarqoFieldTypes.INT),
                    ('new_float', MarqoFieldTypes.FLOAT)
                ]
                self._assert_field_types(id, field_type_pairs)

                res = self.config.vespa_client.get_document(id, self.config.index_management.get_index(
                    self.index.name).schema_name)
                doc = res.document.dict().get('fields')

                # Check score modifiers values for new fields
                self.assertEqual(doc['marqo__score_modifiers']['cells']['int_map_2.d'], 5.0)
                self.assertEqual(doc['marqo__score_modifiers']['cells']['int_map_2.e'], 6.0)
                self.assertEqual(doc['marqo__score_modifiers']['cells']['float_map_2.f'], 4.0)
                self.assertEqual(doc['marqo__score_modifiers']['cells']['new_int'], 1.0)
                self.assertEqual(doc['marqo__score_modifiers']['cells']['new_float'], 2.0)

                # Verify that the version_uuid has changed. Only applicable for cases where we process update requests
                # that contain maps in them.
                self.assertNotEqual(doc.get('marqo__version_uuid'), version_uuid.get(id))  # version_uuid should change

                # Verify original fields are preserved (with conditional checks)
                int_field_val = self.id_to_doc[id].get('int_field')
                if int_field_val:
                    self.assertEqual(doc['marqo__score_modifiers']['cells']['int_field'], float(int_field_val))
                float_field_val = self.id_to_doc[id].get('float_field', 0)
                if float_field_val:
                    self.assertEqual(doc['marqo__score_modifiers']['cells']['float_field'], float(float_field_val))
                int_map_a_val = self.id_to_doc[id].get('int_map', {}).get('a', 0)
                if int_map_a_val:
                    self.assertEqual(doc['marqo__score_modifiers']['cells']['int_map.a'], float(int_map_a_val))
                float_map_c_val = self.id_to_doc[id].get('float_map', {}).get('c', 0)
                if float_map_c_val:
                    self.assertEqual(doc['marqo__score_modifiers']['cells']['float_map.c'], float(float_map_c_val))

        Test that partial updates which specifically add new fields reflect properly in score modifiers tensors.
        Along with updating score modifiers, we also check that version_uuid changes since we are processing an update request that contains maps.
        
tests/integ_tests/core/document/test_partial_update_semi_structured.py