class_docstr: The scansion symbols used can be configured by passing a suitable constants class to
  the constructor.
docstr: Create a scansion string that has stressed and unstressed syllable positions in locations
  that correspond with the original texts syllable vowels.
  
  :param stresses list of syllable positions
  :param syllables_wspaces list of syllables with spaces escaped for punctuation or elision
  :param offset_map dictionary of syllable positions, and an offset amount which is the
  number of spaces to skip in the original line before inserting the accent.
docstr_tok: ["Create","a","scansion","string","that","has","stressed","and","unstressed","syllable","positions","in","locations","that","correspond","with","the","original","texts","syllable","vowels",".",":","param","stresses","list","of","syllable","positions",":","param","syllables_wspaces","list","of","syllables","with","spaces","escaped","for","punctuation","or","elision",":","param","offset_map","dictionary","of","syllable","positions",",","and","an","offset","amount","which","is","the","number","of","spaces","to","skip","in","the","original","line","before","inserting","the","accent","."]
code: def produce_scansion(
      self,
      stresses: list,
      syllables_wspaces: List[str],
      offset_map: Dict[int, int],
  ) -> str:
      """
      Create a scansion string that has stressed and unstressed syllable positions in locations
      that correspond with the original texts syllable vowels.
  
      :param stresses list of syllable positions
      :param syllables_wspaces list of syllables with spaces escaped for punctuation or elision
      :param offset_map dictionary of syllable positions, and an offset amount which is the
      number of spaces to skip in the original line before inserting the accent.
      """
      scansion = list(
          " " * len(string_utils.flatten(syllables_wspaces))
      )
      unstresses = string_utils.get_unstresses(
          stresses, len(syllables_wspaces)
      )
      try:
          for idx in unstresses:
              location = offset_map.get(idx)
              if location is not None:
                  scansion[location] = self.constants.UNSTRESSED
          for idx in stresses:
              location = offset_map.get(idx)
              if location is not None:
                  scansion[location] = self.constants.STRESSED
      except Exception as e:
          LOG.error(
              "problem with syllables; check syllabification {}, {}".format(
                  syllables_wspaces, e
              )
          )
      return "".join(scansion)
  
imports: import logging
  import re
  from typing import Any, Dict, List
  import cltk.prosody.lat.string_utils
  from cltk.prosody.lat.metrical_validator import MetricalValidator
  from cltk.prosody.lat.scansion_constants import ScansionConstants
  from cltk.prosody.lat.scansion_formatter import ScansionFormatter
  from cltk.prosody.lat.syllabifier import Syllabifier
  from cltk.prosody.lat.verse import Verse
label_desc: Use image node_id 7 for calling the VerseScanner obj's underlying member method code with example usage: obj.produce_scansion(stresses, syllables_wspaces, offset_map) and returns: str