code: def checkversion(doc,        # type: Union[CommentedSeq, CommentedMap]
                   metadata,   # type: CommentedMap
                   enable_dev  # type: bool
  ):
      # type: (...) -> Tuple[Union[CommentedSeq, CommentedMap], Text]
      
  
      cdoc = None  # type: Optional[CommentedMap]
      if isinstance(doc, CommentedSeq):
          if not isinstance(metadata, CommentedMap):
              raise Exception("Expected metadata to be CommentedMap")
          lc = metadata.lc
          metadata = copy.deepcopy(metadata)
          metadata.lc.data = copy.copy(lc.data)
          metadata.lc.filename = lc.filename
          metadata[u"$graph"] = doc
          cdoc = metadata
      elif isinstance(doc, CommentedMap):
          cdoc = doc
      else:
          raise Exception("Expected CommentedMap or CommentedSeq")
  
      version = metadata[u"cwlVersion"]
      cdoc["cwlVersion"] = version
  
      if version not in UPDATES:
          if version in DEVUPDATES:
              if enable_dev:
                  pass
              else:
                  raise validate.ValidationException(
                      u"Version '%s' is a development or deprecated version.\n "
                      "Update your document to a stable version (%s) or use "
                      "--enable-dev to enable support for development and "
                      "deprecated versions." % (version, ", ".join(
                          list(UPDATES.keys()))))
          else:
              raise validate.ValidationException(
                  u"Unrecognized version %s" % version)
  
      return (cdoc, version)
docs: Checks the validity of the version of the give CWL document.
  
      Returns the document and the validated version string.