code: def _dtypes_are_compatible_for_bitwise_ops(args):
      if len(args) <= 1:
          return True
      is_signed = lambda dtype: jnp.issubdtype(dtype, np.signedinteger)
      width = lambda dtype: jnp.iinfo(dtype).bits
      x, y = args
      if width(x) > width(y):
          x, y = y, x
      # The following condition seems a little ad hoc, but seems to capture what
      # numpy actually implements.
      return (
          is_signed(x) == is_signed(y)
          or (width(x) == 32 and width(y) == 32)
          or (width(x) == 32 and width(y) == 64 and is_signed(y))
      )
  
imports: import collections
  import functools
  from functools import partial
  import itertools
  import operator
  from typing import NamedTuple
  from unittest import SkipTest
  from absl.testing import absltest
  from absl.testing import parameterized
  import numpy
  import jax
  import jax.ops
  from jax import lax
  from jax import numpy
  from jax._src import config
  from jax._src import dtypes
  from jax._src import test_util
label_desc: Use image node_id 3 for calling a global function with example usage: _dtypes_are_compatible_for_bitwise_ops(args) and returns: unknown, True