class_docstr: clones a SupportsAnnotations and applies an 'annotations' dictionary.
  
  Unlike regular clones, this clone also mimics __hash__() and
  __eq__() of the original element so that it takes its place
  in hashed collections.
  
  A reference to the original element is maintained, for the important
  reason of keeping its hash value current.  When GC'ed, the
  hash value may be reused, causing conflicts.
  
  .. note::  The rationale for Annotated producing a brand new class,
     rather than placing the functionality directly within ClauseElement,
     is **performance**.  The __hash__() method is absent on plain
     ClauseElement which leads to significantly reduced function call
     overhead, as the use of sets and dictionaries against ClauseElement
     objects is prevalent, but most are not "annotated".
class_docstr_tok: ["clones","a","SupportsAnnotations","and","applies","an","'annotations","'","dictionary",".","Unlike","regular","clones",",","this","clone","also","mimics","__hash__","(",")","and","__eq__","(",")","of","the","original","element","so","that","it","takes","its","place","in","hashed","collections",".","A","reference","to","the","original","element","is","maintained",",","for","the","important","reason","of","keeping","its","hash","value","current",".","When","GC'ed",",","the","hash","value","may","be","reused",",","causing","conflicts",".","..","note",":",":","The","rationale","for","Annotated","producing","a","brand","new","class",",","rather","than","placing","the","functionality","directly","within","ClauseElement",",","is","*","*","performance","*","*",".","The","__hash__","(",")","method","is","absent","on","plain","ClauseElement","which","leads","to","significantly","reduced","function","call","overhead",",","as","the","use","of","sets","and","dictionaries","against","ClauseElement","objects","is","prevalent",",","but","most","are","not","``","annotated","''","."]
code: def _annotate(self, values: _AnnotationDict) -> Self:
      _values = self._annotations.union(values)
      new = self._with_annotations(_values)
      return new
  
imports: from __future__ import annotations
  import typing
  from typing import Any
  from typing import Callable
  from typing import cast
  from typing import Dict
  from typing import FrozenSet
  from typing import Mapping
  from typing import Optional
  from typing import overload
  from typing import Sequence
  from typing import Tuple
  from typing import Type
  from typing import TYPE_CHECKING
  from typing import TypeVar
  from .None import operators
  from .cache_key import HasCacheKey
  from .visitors import anon_map
  from .visitors import ExternallyTraversible
  from .visitors import InternalTraversal
  from ..None import util
  from ..util.typing import Literal
  from ..util.typing import Self
label_desc: Use image node_id 4 for calling the Annotated obj's underlying member method code with example usage: obj._annotate(values) and returns: new