code: def bwd_data_algo_supports_dtype_config(
      self, algo, dtype, precision, ndim
  ):
      # NB: Theano does not support float16 precision anymore for backward cuDNN convolutions.
      if is_true_half_config(dtype, precision):
          return False
      algorithms = self.cudnnConvolutionBwdDataAlgo_t
      algo = algorithms.fromalias(algo)
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_DATA_ALGO_0:
          return not is_true_half_config(dtype, precision)
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_DATA_ALGO_1:
          # CUDNN_CONVOLUTION_BWD_DATA_ALGO_1: all data type configs supported.
          # NB: Let's avoid float16 precision, as some strange errors may be encountered
          # with that precision ( see https://github.com/Theano/Theano/pull/5932/ )
          return not is_true_half_config(dtype, precision)
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_DATA_ALGO_FFT:
          return ndim == 2 and (
              is_pseudo_half_config(dtype, precision)
              or is_float_config(dtype, precision)
          )
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_DATA_ALGO_FFT_TILING:
          if ndim == 2:
              return is_pseudo_half_config(
                  dtype, precision
              ) or is_float_config(dtype, precision)
          if ndim == 3:
              return not is_true_half_config(dtype, precision)
      if algo == algorithms.CUDNN_CONVOLUTION_BWD_DATA_ALGO_WINOGRAD:
          return ndim == 2 and (
              is_pseudo_half_config(dtype, precision)
              or is_float_config(dtype, precision)
          )
      if (
          algo
          == algorithms.CUDNN_CONVOLUTION_BWD_DATA_ALGO_WINOGRAD_NONFUSED
      ):
          # NB: "If wDesc 's filter (height, width) is (5,5), data type config TRUE_HALF_CONFIG is not supported".
          # We could not check it before being in C code.
          return ndim == 2 and not is_double_config(dtype, precision)
      return False
  
file_path: Theano/theano/gpuarray/cudnn_defs.py
imports: from __future__ import absolute_import, print_function, division
  from theano.gof import CEnumType
label_desc: Use image node_id 4 for calling the CuDNNV51 obj's underlying member method code with example usage: obj.bwd_data_algo_supports_dtype_config(algo, dtype, precision, ndim) and returns: False, False, unknown, unknown, unknown, unknown, unknown, unknown, unknown