code: def _validate_conv_features(
      is_transpose,
      is_atrous,
      is_depthwise,
      feature_group_count,
      batch_group_count,
      preferred_element_type,
      lhs_dtype,
  ):
      if feature_group_count > 1 and not is_depthwise:
          raise _conv_error("Grouped convolutions are unsupported")
      if (is_depthwise and is_atrous) and not is_transpose:
          # We allow dilated depthwise convolutions.
          pass
      elif [is_depthwise, is_atrous, is_transpose].count(True) > 1:
          raise _conv_error(
              f"Can only do one of depthwise ({is_depthwise}), atrous ({is_atrous}) "
              f"and transposed convolutions ({is_transpose})"
          )
  
      # We can implement batch grouping when there is a need for it.
      if batch_group_count != 1:
          raise _conv_error(
              "Unimplemented support for batch_group_count != 1 "
              f"(found {batch_group_count})"
          )
  
      if (
          preferred_element_type is not None
          and preferred_element_type != lhs_dtype
      ):
          raise _conv_error(
              "Unimplemented support for preferred_element_type"
          )
  
imports: from __future__ import annotations
  import builtins
  from collections.abc import Sequence
  import dataclasses
  from functools import partial, wraps
  import math
  import string
  from typing import Any, Callable, Optional
  from jax._src import core
  from jax import lax
  from jax._src.lax import slicing
  from jax._src import dtypes
  from jax._src import util
  from jax.experimental.jax2tf import jax2tf
  import numpy
  import tensorflow
label_desc: Use image node_id 13 for calling a global function with example usage: _validate_conv_features(is_transpose, is_atrous, is_depthwise, feature_group_count, batch_group_count, preferred_element_type, lhs_dtype) without return types