code: def __post_init__(self):
      if (self.src_sem is None) ^ (self.device_id is None):
          raise ValueError(
              "Either both or neither `src_sem` and `device_id` "
              "can be set."
          )
  
imports: from __future__ import annotations
  import contextlib
  import dataclasses
  import enum
  from typing import Any, Callable
  import jax
  from jax._src import api_util
  from jax._src import core
  from jax._src import effects
  from jax._src import linear_util
  from jax._src import pretty_printer
  from jax._src import state
  from jax._src import tree_util
  from jax._src import util
  from jax._src.state import indexing
  from jax._src.state import primitives
  from jax._src.interpreters import mlir
  from jax._src.interpreters import partial_eval
  from jax._src.pallas.mosaic import core
  import jax.numpy
label_desc: Use image node_id 1 for calling the AsyncCopyDescriptor obj's underlying member method code with example usage: obj.__post_init__() without return types