class_docstr: This class abstracts handling of version specifiers.
  
  .. tip::
  
      It is generally not required to instantiate this manually. You should instead
      prefer to work with :class:`SpecifierSet` instead, which can parse
      comma-separated version specifiers (which is what package metadata contains).
code: def _canonical_spec(self) -> Tuple[str, str]:
      canonical_version = canonicalize_version(
          self._spec[1],
          strip_trailing_zero=(self._spec[0] != "~="),
      )
      return self._spec[0], canonical_version
  
imports: import abc
  import itertools
  import re
  from typing import Callable, Iterable, Iterator, List, Optional, Tuple, TypeVar, Union
  from .utils import canonicalize_version
  from .version import Version
label_desc: Use image node_id 8 for calling the Specifier obj's underlying member method code with example usage: obj._canonical_spec() and returns: self,  canonical_version