code: def _process_annotation(annotation):
      if isinstance(annotation, str):
          if annotation.startswith(
              "AbstractVar["
          ) or annotation.startswith("AbstractClassVar["):
              raise NotImplementedError(
                  "Stringified abstract annotations are not supported"
              )
          else:
              is_abstract = False
              is_class = annotation.startswith("ClassVar[")
              return is_abstract, is_class
      else:
          if annotation in (AbstractVar, AbstractClassVar):
              raise TypeError(
                  "Cannot use unsubscripted `AbstractVar` or `AbstractClassVar`."
              )
          elif get_origin(annotation) is AbstractVar:
              if len(get_args(annotation)) != 1:
                  raise TypeError(
                      "`AbstractVar` can only have a single argument."
                  )
              is_abstract = True
              is_class = False
          elif get_origin(annotation) is AbstractClassVar:
              if len(get_args(annotation)) != 1:
                  raise TypeError(
                      "`AbstractClassVar` can only have a single argument."
                  )
              is_abstract = True
              is_class = True
          elif get_origin(annotation) is ClassVar:
              is_abstract = False
              is_class = True
          else:
              is_abstract = False
              is_class = False
          return is_abstract, is_class
  
file_path: equinox/equinox/_better_abstract.py
imports: import abc
  import dataclasses
  from typing import Annotated, ClassVar, Generic, get_args, get_origin, TYPE_CHECKING, TypeVar
  from typing_extensions import dataclass_transform, TypeAlias
label_desc: Use image node_id 1 for calling a global function with example usage: _process_annotation(annotation) and returns: is_abstract,  is_class, is_abstract,  is_class