class_docstr: A Domain is meant to be a group of "object" description directives for
  objects of a similar nature, and corresponding roles to create references to
  them.  Examples would be Python modules, classes, functions etc., elements
  of a templating language, Sphinx roles and directives, etc.
  
  Each domain has a separate storage for information about existing objects
  and how to reference them in `self.data`, which must be a dictionary.  It
  also must implement several functions that expose the object information in
  a uniform way to parts of Sphinx that allow the user to reference or search
  for objects in a domain-agnostic way.
  
  About `self.data`: since all object and cross-referencing information is
  stored on a BuildEnvironment instance, the `domain.data` object is also
  stored in the `env.domaindata` dict under the key `domain.name`.  Before the
  build process starts, every active domain is instantiated and given the
  environment object; the `domaindata` dict must then either be nonexistent or
  a dictionary whose 'version' key is equal to the domain class'
  :attr:`data_version` attribute.  Otherwise, `OSError` is raised and the
  pickled environment is discarded.
class_docstr_tok: ["A","Domain","is","meant","to","be","a","group","of","``","object","''","description","directives","for","objects","of","a","similar","nature",",","and","corresponding","roles","to","create","references","to","them",".","Examples","would","be","Python","modules",",","classes",",","functions","etc.",",","elements","of","a","templating","language",",","Sphinx","roles","and","directives",",","etc",".","Each","domain","has","a","separate","storage","for","information","about","existing","objects","and","how","to","reference","them","in","`","self.data","`",",","which","must","be","a","dictionary",".","It","also","must","implement","several","functions","that","expose","the","object","information","in","a","uniform","way","to","parts","of","Sphinx","that","allow","the","user","to","reference","or","search","for","objects","in","a","domain-agnostic","way",".","About","`","self.data","`",":","since","all","object","and","cross-referencing","information","is","stored","on","a","BuildEnvironment","instance",",","the","`","domain.data","`","object","is","also","stored","in","the","`","env.domaindata","`","dict","under","the","key","`","domain.name","`",".","Before","the","build","process","starts",",","every","active","domain","is","instantiated","and","given","the","environment","object",";","the","`","domaindata","`","dict","must","then","either","be","nonexistent","or","a","dictionary","whose","'version","'","key","is","equal","to","the","domain","class'",":","attr",":","`","data_version","`","attribute",".","Otherwise",",","`","OSError","`","is","raised","and","the","pickled","environment","is","discarded","."]
docstr: Merge in data regarding *docnames* from a different domaindata
  inventory (coming from a subprocess in parallel builds).
docstr_tok: ["Merge","in","data","regarding","*","docnames","*","from","a","different","domaindata","inventory","(","coming","from","a","subprocess","in","parallel","builds",")","."]
code: def merge_domaindata(
      self, docnames: list[str], otherdata: dict
  ) -> None:
      """Merge in data regarding *docnames* from a different domaindata
      inventory (coming from a subprocess in parallel builds).
      """
      raise NotImplementedError(
          "merge_domaindata must be implemented in %s "
          "to be able to do parallel builds!" % self.__class__
      )
  
imports: from __future__ import annotations
  import copy
  from abc import ABC, abstractmethod
  from typing import TYPE_CHECKING, Any, Callable, NamedTuple, Optional, cast
  from docutils.nodes import Element, Node, system_message
  from sphinx.errors import SphinxError
  from sphinx.locale import _
label_desc: Use image node_id 7 for calling the Domain obj's underlying member method code with example usage: obj.merge_domaindata(docnames, otherdata) without return types