code: def bwd_data_algo_supports_dtype_config(
      self, algo, dtype, precision, ndim
  ):
      is_supported = super(
          CuDNNV6, self
      ).bwd_data_algo_supports_dtype_config(
          algo, dtype, precision, ndim
      )
      if not is_supported:
          algorithms = self.cudnnConvolutionBwdDataAlgo_t
          algo = algorithms.fromalias(algo)
          if (
              algo
              == algorithms.CUDNN_CONVOLUTION_BWD_DATA_ALGO_FFT_TILING
          ):
              # NB: For cuDNN V6:
              # "Data Type Config Support: PSEUDO_HALF_CONFIG, FLOAT_CONFIG
              # (DOUBLE_CONFIG is also supported when the task can be handled by 1D FFT,
              # ie, one of the filter dimension, width or height is 1)"
              # Could be checked only in C code. By default, let's allow DOUBLE_CONFIG.
              return ndim == 2 and (
                  is_pseudo_half_config(dtype, precision)
                  or is_float_config(dtype, precision)
                  or is_double_config(dtype, precision)
              )
      return is_supported
  
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 3 for calling the CuDNNV6 obj's underlying member method code with example usage: obj.bwd_data_algo_supports_dtype_config(algo, dtype, precision, ndim) and returns: is_supported, unknown