code: def extract_char_span(full_text, span_text, space_index):
      space_tokens = full_text.split()
      extracted_span_text = space_tokens[space_index]
      assert extracted_span_text.lower() in full_text.lower()
      span_length = len(span_text)
      if space_index == 0:
          start = 0
      else:
          start = len(" ".join(space_tokens[:space_index])) + 1
      # exclusive span
      return ExclusiveSpan(start=start, end=start + span_length)
  
imports: import numpy
  import torch
  from dataclasses import dataclass
  from typing import List
  from jiant.tasks.core import BaseExample, BaseTokenizedExample, BaseDataRow, BatchMixin, SuperGlueMixin, Task, TaskTypes
  from jiant.tasks.lib.templates.shared import labels_to_bimap, add_cls_token, create_input_set_from_tokens_and_segments
  from jiant.tasks.utils import truncate_sequences, ExclusiveSpan
  from jiant.utils import retokenize
  from jiant.utils.python.io import read_json_lines
  from jiant.utils.tokenization_normalization import normalize_tokenizations
label_desc: Use image node_id 1 for calling a global function with example usage: extract_char_span(full_text, span_text, space_index) and returns: ExclusiveSpan