class_docstr: For the word (ie, node) of a dependency tree and its attributes. Inherits
  from the ``Element`` class of Python's ``xml.etree`` library.
  
  >>> desc_form = Form('described')
  >>> desc_form
  described_0
  >>> desc_form.set('Tense', 'Past')
  >>> desc_form
  described_0
  >>> desc_form / 'VBN'
  described_0/VBN
  >>> desc_form.full_str()
  'described_0 [Tense=Past,pos=VBN]'
docstr: Converts a ``CLTK`` ``Word`` object to a ``Form``.
  
  TODO: The Form info that prints is incomplete/ugly; correct str repr of ``Form``
  TODO: Fix these doctests; it's ugly to import so many Forms, but is this required?
  
  >>> from cltk.morphology.universal_dependencies_features import Case, Gender, Number, POS
  >>> noun = POS.noun
  >>> nominative = Case.nominative
  >>> feminine = Gender.feminine
  >>> singular = Number.singular
  >>> cltk_word = Word(index_char_start=None, index_char_stop=None, index_token=0, index_sentence=0, string='Gallia', pos=noun, lemma='Gallia', stem=None, scansion=None, xpos='A1|grn1|casA|gen2', upos='NOUN', dependency_relation='nsubj', governor=1, features={Case: [nominative], Gender: [feminine], Number: [singular]}, category={F: [neg], N: [pos], V: [neg]}, stop=False, named_entity='LOCATION', syllables=None, phonetic_transcription=None, definition='')  # doctest: +SKIP
  >>> cltk_word.features[Case] = Case.nominative  # doctest: +SKIP
  >>> cltk_word.features[Gender] = Gender.feminine  # doctest: +SKIP
  >>> cltk_word.features[Number] = Number.singular  # doctest: +SKIP
  >>> f = Form.to_form(cltk_word)  # doctest: +SKIP
  >>> f.full_str()  # doctest: +SKIP
  'Gallia_0 [lemma=mallis,pos=NOUN,upos=NOUN,xpos=A1|grn1|casA|gen2,Case=nominative,Gender=feminine,Number=singular]'
docstr_tok: ["Converts","a","``","CLTK","``","``","Word","``","object","to","a","``","Form","``",".","TODO",":","The","Form","info","that","prints","is","incomplete\/ugly",";","correct","str","repr","of","``","Form","``","TODO",":","Fix","these","doctests",";","it","'s","ugly","to","import","so","many","Forms",",","but","is","this","required","?",">",">",">","from","cltk.morphology.universal_dependencies_features","import","Case",",","Gender",",","Number",",","POS",">",">",">","noun","=","POS.noun",">",">",">","nominative","=","Case.nominative",">",">",">","feminine","=","Gender.feminine",">",">",">","singular","=","Number.singular",">",">",">","cltk_word","=","Word","(","index_char_start=None",",","index_char_stop=None",",","index_token=0",",","index_sentence=0",",","string='Gallia","'",",","pos=noun",",","lemma='Gallia","'",",","stem=None",",","scansion=None",",","xpos='A1|grn1|casA|gen2","'",",","upos='NOUN","'",",","dependency_relation='nsubj","'",",","governor=1",",","features=","{","Case",":","[","nominative","]",",","Gender",":","[","feminine","]",",","Number",":","[","singular","]","}",",","category=","{","F",":","[","neg","]",",","N",":","[","pos","]",",","V",":","[","neg","]","}",",","stop=False",",","named_entity='LOCATION","'",",","syllables=None",",","phonetic_transcription=None",",","definition=","''",")","#","doctest",":","+SKIP",">",">",">","cltk_word.features","[","Case","]","=","Case.nominative","#","doctest",":","+SKIP",">",">",">","cltk_word.features","[","Gender","]","=","Gender.feminine","#","doctest",":","+SKIP",">",">",">","cltk_word.features","[","Number","]","=","Number.singular","#","doctest",":","+SKIP",">",">",">","f","=","Form.to_form","(","cltk_word",")","#","doctest",":","+SKIP",">",">",">","f.full_str","(",")","#","doctest",":","+SKIP","'Gallia_0","[","lemma=mallis",",","pos=NOUN",",","upos=NOUN",",","xpos=A1|grn1|casA|gen2",",","Case=nominative",",","Gender=feminine",",","Number=singular","]","'"]
code: def to_form(word: Word) -> "Form":
      """Converts a ``CLTK`` ``Word`` object to a ``Form``.
  
      TODO: The Form info that prints is incomplete/ugly; correct str repr of ``Form``
      TODO: Fix these doctests; it's ugly to import so many Forms, but is this required?
  
      >>> from cltk.morphology.universal_dependencies_features import Case, Gender, Number, POS
      >>> noun = POS.noun
      >>> nominative = Case.nominative
      >>> feminine = Gender.feminine
      >>> singular = Number.singular
      >>> cltk_word = Word(index_char_start=None, index_char_stop=None, index_token=0, index_sentence=0, string='Gallia', pos=noun, lemma='Gallia', stem=None, scansion=None, xpos='A1|grn1|casA|gen2', upos='NOUN', dependency_relation='nsubj', governor=1, features={Case: [nominative], Gender: [feminine], Number: [singular]}, category={F: [neg], N: [pos], V: [neg]}, stop=False, named_entity='LOCATION', syllables=None, phonetic_transcription=None, definition='')  # doctest: +SKIP
      >>> cltk_word.features[Case] = Case.nominative  # doctest: +SKIP
      >>> cltk_word.features[Gender] = Gender.feminine  # doctest: +SKIP
      >>> cltk_word.features[Number] = Number.singular  # doctest: +SKIP
      >>> f = Form.to_form(cltk_word)  # doctest: +SKIP
      >>> f.full_str()  # doctest: +SKIP
      'Gallia_0 [lemma=mallis,pos=NOUN,upos=NOUN,xpos=A1|grn1|casA|gen2,Case=nominative,Gender=feminine,Number=singular]'
      """
  
      form = Form(word.string, form_id=word.index_token)
      form.set("lemma", word.lemma)
      form.set("pos", str(word.pos))
      form.set("upos", word.upos)
      form.set("xpos", word.xpos)
  
      for feature_name, feature_values in word.features.all():
          if feature_values is None:
              print(word.stanza_features)
              print(word.features)
          form.set(str(feature_name), str(feature_values[0]))
  
      return form
  
imports: from typing import Dict, List, Union
  from xml.etree.ElementTree import Element, ElementTree
  from cltk.core.data_types import Doc, Process, Word
  from cltk.core.exceptions import CLTKException
  from cltk.morphology.universal_dependencies_features import NOMINAL_FEATURES, OTHER_FEATURES, VERBAL_FEATURES, MorphosyntacticFeature
label_desc: Use image node_id 8 for calling the Form obj's underlying member method code with example usage: obj.to_form(word) and returns: form