code: def __or__(self, other: "ArtifactDescribeAnnotation"):
      if self.is_input != other.is_input:
          raise ValueError("input and output can't be mixed")
      if other.roles:
          raise ValueError("second annotation should not provide roles")
      if other.stages:
          raise ValueError(
              "second annotation should not provide stages"
          )
      if other.desc:
          raise ValueError("second annotation should not provide desc")
      if other.optional != self.optional:
          raise ValueError("optional and non-optional can't be mixed")
      if self.multi != other.multi:
          raise ValueError("multi and non-multi can't be mixed")
      if self.describe_type_kind != other.describe_type_kind:
          raise ValueError(
              f"{self.describe_type_kind} and {other.describe_type_kind} can't be mixed"
          )
      self.describe_types.extend(other.describe_types)
      return self
  
imports: import typing
  from typing import Dict, List, Type, Union
label_desc: Use image node_id 2 for calling the ArtifactDescribeAnnotation obj's underlying member method code with example usage: obj.__or__(other) and returns: self