class_docstr: Test post-processing features.
class_docstr_tok: ["Test","post-processing","features","."]
code: def test_add_post_process_add_fn(self):
      llm_fn = LLMFunctionImpl(
          model=_MockModel(
              mock_results=["cold", "freezing", "chilly"],
          ),
          prompts=["The opposite of {word} is"],
      )
  
      def add_fn(rows: Sequence[LLMFnOutputRowView]) -> Sequence[int]:
          return [len(row.result_value()) for row in rows]
  
      results = llm_fn.add_post_process_add_fn(
          name="length", fn=add_fn
      )({"word": ["hot"]})
      expected_results = {
          "Prompt Num": [0, 0, 0],
          "Input Num": [0, 0, 0],
          "Result Num": [0, 1, 2],
          "Prompt": [
              "The opposite of hot is",
              "The opposite of hot is",
              "The opposite of hot is",
          ],
          "length": [4, 8, 6],
          "text_result": ["cold", "freezing", "chilly"],
      }
      self.assertEqual(expected_results, results.as_dict())
      self.assertEqual(
          list(expected_results.keys()), list(results.as_dict().keys())
      )
  
imports: from __future__ import annotations
  from typing import Any, Callable, Mapping, Sequence
  from absl.testing import absltest
  from google.generativeai.notebook.lib import llm_function
  from google.generativeai.notebook.lib import llmfn_inputs_source
  from google.generativeai.notebook.lib import llmfn_output_row
  from google.generativeai.notebook.lib import llmfn_outputs
  from google.generativeai.notebook.lib import model
label_desc: Use image node_id 2 for calling the LLMFunctionPostProcessTest obj's underlying member method code with example usage: obj.test_add_post_process_add_fn() and returns: unknown